ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDhmYWE2YzAuLjVkNTZhM2YgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMjgsNiArMjgsNyBAQAogKi5negogKi5iejIKICoubHptYQorKi54egogKi5sem8KICoucGF0Y2gKICouZ2NubwpkaWZmIC0tZ2l0IGEvLm1haWxtYXAgYi8ubWFpbG1hcAppbmRleCA1ODFmZDM5Li4xZWJhMjhhIDEwMDY0NAotLS0gYS8ubWFpbG1hcAorKysgYi8ubWFpbG1hcApAQCAtMjMsNiArMjMsNyBAQAogQXJuYXVkIFBhdGFyZCA8YXJuYXVkLnBhdGFyZEBydHAtbmV0Lm9yZz4KIEFybmQgQmVyZ21hbm4gPGFybmRAYXJuZGIuZGU+CiBBeGVsIER5a3MgPHhsQHhsc2lnbmVkLm5ldD4KK0F4ZWwgTGluIDxheGVsLmxpbkBnbWFpbC5jb20+CiBCZW4gR2FyZG5lciA8YmdhcmRuZXJAd2FidGVjLmNvbT4KIEJlbiBNIENhaGlsbCA8YmVuLm0uY2FoaWxsQGludGVsLmNvbT4KIEJqw7ZybiBTdGVpbmJyaW5rIDxCLlN0ZWluYnJpbmtAZ214LmRlPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hdDkxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjYzZhODYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWF0OTEKQEAgLTAsMCArMSwyNSBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hdDkxX2Nhbi9uZXQvPGlmYWNlPi9tYjBfaWQKK0RhdGU6CQlKYW51YXJ5IDIwMTEKK0tlcm5lbFZlcnNpb246CTIuNi4zOAorQ29udGFjdDoJTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KK0Rlc2NyaXB0aW9uOgorCQlWYWx1ZSByZXByZXNlbnRpbmcgdGhlIGNhbl9pZCBvZiBtYWlsYm94IDAuCisKKwkJRGVmYXVsdDogMHg3ZmYgKHN0YW5kYXJkIGZyYW1lKQorCisJCUR1ZSB0byBhIGNoaXAgYnVnIChlcnJhdGEgNTAuMi42LjMgJiA1MC4zLjUuMyBpbgorCQkiQVQ5MVNBTTkyNjMgUHJlbGltaW5hcnkgNjI0OUgtQVRBUk0tMjctSnVsLTA5IikgdGhlCisJCWNvbnRlbnRzIG9mIG1haWxib3ggMCBtYXkgYmUgc2VuZCB1bmRlciBjZXJ0YWluCisJCWNvbmRpdGlvbnMgKGV2ZW4gaWYgZGlzYWJsZWQgb3IgaW4gcnggbW9kZSkuCisKKwkJVGhlIHdvcmthcm91bmQgaW4gdGhlIGVycmF0YSBzdWdnZXN0cyBub3QgdG8gdXNlIHRoZQorCQltYWlsYm94IGFuZCBsb2FkIGl0IHdpdGggYW4gdW51c2VkIGlkZW50aWZpZXIuCisKKwkJSW4gb3JkZXIgdG8gdXNlIGFuIGV4dGVuZGVkIGNhbl9pZCBhZGQgdGhlCisJCUNBTl9FRkZfRkxBRyAoMHg4MDAwMDAwMFUpIHRvIHRoZSBjYW5faWQuIEV4YW1wbGU6CisKKwkJLSBzdGFuZGFyZCBpZCAweDdmZjoKKwkJZWNobyAweDdmZiAgICAgID4gL3N5cy9jbGFzcy9uZXQvY2FuMC9tYjBfaWQKKworCQktIGV4dGVuZGVkIGlkIDB4MWZmZmZmZmY6CisJCWVjaG8gMHg5ZmZmZmZmZiA+IC9zeXMvY2xhc3MvbmV0L2NhbjAvbWIwX2lkCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCmluZGV4IDM1NDQ3ZTAuLjM2ZjYzZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2UtZHJpdmVycy50bXBsCkBAIC0yMTcsOCArMjE3LDggQEAKICAgPGNoYXB0ZXIgaWQ9InVhcnQxNng1MCI+CiAgICAgIDx0aXRsZT4xNng1MCBVQVJUIERyaXZlcjwvdGl0bGU+CiAhSWluY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAotIUVkcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCi0hRWRyaXZlcnMvc2VyaWFsLzgyNTAuYworIUVkcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NvcmUuYworIUVkcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCiAgIDwvY2hhcHRlcj4KIAogICA8Y2hhcHRlciBpZD0iZmJkZXYiPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RybS50bXBsCmluZGV4IDI4NjEwNTUuLmMyNzkxNTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kcm0udG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZHJtLnRtcGwKQEAgLTczLDggKzczLDggQEAKICAgICAgIHNlcnZpY2VzLgogICAgIDwvcGFyYT4KICAgICA8cGFyYT4KLSAgICAgIFRoZSBjb3JlIG9mIGV2ZXJ5IERSTSBkcml2ZXIgaXMgc3RydWN0IGRybV9kZXZpY2UuICBEcml2ZXJzCi0gICAgICB3aWxsIHR5cGljYWxseSBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBkcm1fZGV2aWNlIHN0cnVjdHVyZSwKKyAgICAgIFRoZSBjb3JlIG9mIGV2ZXJ5IERSTSBkcml2ZXIgaXMgc3RydWN0IGRybV9kcml2ZXIuICBEcml2ZXJzCisgICAgICB3aWxsIHR5cGljYWxseSBzdGF0aWNhbGx5IGluaXRpYWxpemUgYSBkcm1fZHJpdmVyIHN0cnVjdHVyZSwKICAgICAgIHRoZW4gcGFzcyBpdCB0byBkcm1faW5pdCgpIGF0IGxvYWQgdGltZS4KICAgICA8L3BhcmE+CiAKQEAgLTg0LDcgKzg0LDcgQEAKICAgICA8dGl0bGU+RHJpdmVyIGluaXRpYWxpemF0aW9uPC90aXRsZT4KICAgICA8cGFyYT4KICAgICAgIEJlZm9yZSBjYWxsaW5nIHRoZSBEUk0gaW5pdGlhbGl6YXRpb24gcm91dGluZXMsIHRoZSBkcml2ZXIgbXVzdAotICAgICAgZmlyc3QgY3JlYXRlIGFuZCBmaWxsIG91dCBhIHN0cnVjdCBkcm1fZGV2aWNlIHN0cnVjdHVyZS4KKyAgICAgIGZpcnN0IGNyZWF0ZSBhbmQgZmlsbCBvdXQgYSBzdHJ1Y3QgZHJtX2RyaXZlciBzdHJ1Y3R1cmUuCiAgICAgPC9wYXJhPgogICAgIDxwcm9ncmFtbGlzdGluZz4KICAgICAgIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZmlsZXN5c3RlbXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCmluZGV4IDVlODdhZDUuLmY1MWYyODUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9maWxlc3lzdGVtcy50bXBsCkBAIC04Miw2ICs4MiwxMSBAQAogICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKKyAgPGNoYXB0ZXIgaWQ9ImZzX2V2ZW50cyI+CisgICAgIDx0aXRsZT5FdmVudHMgYmFzZWQgb24gZmlsZSBkZXNjcmlwdG9yczwvdGl0bGU+CishRWZzL2V2ZW50ZmQuYworICA8L2NoYXB0ZXI+CisKICAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KICAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgogIUVmcy9zeXNmcy9maWxlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzcxZDgzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorQklOIDo9IHZybDQKKworLlBIT05ZOiBhbGwKK2FsbDogJChCSU4pCisKKy5QSE9OWTogY2xlYW4KK2NsZWFuOgorCXJtIC1mICoubyAkKEJJTikKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS92cmw0LmMgYi9Eb2N1bWVudGF0aW9uL2FybS9TSC1Nb2JpbGUvdnJsNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4YTE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TSC1Nb2JpbGUvdnJsNC5jCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogdnJsNCBmb3JtYXQgZ2VuZXJhdG9yCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFNpbW9uIEhvcm1hbgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiB1c2FnZTogdnJsNCA8IHpJbWFnZSA+IG91dAorICoJICBkZCBpZj1vdXQgb2Y9L2Rldi9zZHggYnM9NTEyIHNlZWs9MSAjIFdyaXRlIHRoZSBpbWFnZSB0byBzZWN0b3IgMQorICoKKyAqIFJlYWRzIGEgekltYWdlIGZyb20gc3RkaW4gYW5kIHdyaXRlcyBhIHZybDQgaW1hZ2UgdG8gc3Rkb3V0LgorICogSW4gcHJhY3RpY2UgdGhpcyBtZWFucyB3cml0aW5nIGEgcGFkZGVkIHZybDQgaGVhZGVyIHRvIHN0ZG91dCBmb2xsb3dlZAorICogYnkgdGhlIHpJbWFnZS4KKyAqCisgKiBUaGUgcGFkZGluZyBwbGFjZXMgdGhlIHpJbWFnZSBhdCBBTElHTiBieXRlcyBpbnRvIHRoZSBvdXRwdXQuCisgKiBUaGUgdnJsNCB1c2VzIEFMSUdOICsgU1RBUlRfQkFTRSBhcyB0aGUgc3RhcnRfYWRkcmVzcy4KKyAqIFRoaXMgaXMgd2hlcmUgdGhlIG1hc2sgUk9NIHdpbGwganVtcCB0byBhZnRlciB2ZXJpZnlpbmcgdGhlIGhlYWRlci4KKyAqCisgKiBUaGUgaGVhZGVyIHNldHMgY29weV9zaXplIHRvIG1pbihzaXplb2YoekltYWdlKSwgTUFYX0JPT1RfUFJPR19MRU4pICsgQUxJR04uCisgKiBUaGF0IGlzLCB0aGUgbWFzayBST00gd2lsbCBsb2FkIHRoZSBwYWRkZWQgaGVhZGVyIChBTElHTiBieXRlcykKKyAqIEFuZCB0aGVuIE1BWF9CT09UX1BST0dfTEVOIGJ5dGVzIG9mIHRoZSBpbWFnZSwgb3IgdGhlIGVudGlyZSBpbWFnZSwKKyAqIHdoaWNoZXZlciBpcyBzbWFsbGVyLgorICoKKyAqIFRoZSB6SW1hZ2UgaXMgbm90IG1vZGlmaWVkIGluIGFueSB3YXkuCisgKi8KKworI2RlZmluZSBfQlNEX1NPVVJDRQorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworc3RydWN0IGhkciB7CisJdWludDMyX3QgbWFnaWMxOworCXVpbnQzMl90IHJlc2VydmVkMTsKKwl1aW50MzJfdCBtYWdpYzI7CisJdWludDMyX3QgcmVzZXJ2ZWQyOworCXVpbnQxNl90IGNvcHlfc2l6ZTsKKwl1aW50MTZfdCBib290X29wdGlvbnM7CisJdWludDMyX3QgcmVzZXJ2ZWQzOworCXVpbnQzMl90IHN0YXJ0X2FkZHJlc3M7CisJdWludDMyX3QgcmVzZXJ2ZWQ0OworCXVpbnQzMl90IHJlc2VydmVkNTsKKwljaGFyICAgICByZXNlcnZlZDZbMzA4XTsKK307CisKKyNkZWZpbmUgREVDTEFSRV9IRFIoaCkJCQkJCVwKKwlzdHJ1Y3QgaGRyIChoKSA9IHsJCQkJXAorCQkubWFnaWMxID0JaHRvbGUzMigweGVhMDAwMDAwKSwJXAorCQkucmVzZXJ2ZWQxID0JaHRvbGUzMigweDU2KSwJCVwKKwkJLm1hZ2ljMiA9CWh0b2xlMzIoMHhlNTlmZjAwOCksCVwKKwkJLnJlc2VydmVkMyA9CWh0b2xlMTYoMHgxKSB9CisKKy8qIEFsaWduIHRvIDUxMiBieXRlcywgdGhlIE1NQ0lGIHNlY3RvciBzaXplICovCisjZGVmaW5lIEFMSUdOX0JJVFMJOQorI2RlZmluZSBBTElHTgkJKDEgPDwgQUxJR05fQklUUykKKworI2RlZmluZSBTVEFSVF9CQVNFCTB4ZTU1YjAwMDAKKworLyoKKyAqIFdpdGggYW4gYWxpZ25tZW50IG9mIDUxMiB0aGUgaGVhZGVyIHVzZXMgdGhlIGZpcnN0IHNlY3Rvci4KKyAqIFRoZXJlIGlzIGEgMTI4IHNlY3RvciAoNjRrYnl0ZSkgbGltaXQgb24gdGhlIGRhdGEgbG9hZGVkIGJ5IHRoZSBtYXNrIFJPTS4KKyAqIFNvIHRoZXJlIGFyZSAxMjcgc2VjdG9ycyBsZWZ0IGZvciB0aGUgYm9vdCBwcm9ncmFtbWUuIEJ1dCBpbiBwcmFjdGljZQorICogT25seSBhIHNtYWxsIHBvcnRpb24gb2YgYSB6SW1hZ2UgaXMgbmVlZGVkLCAxNiBzZWN0b3JzIHNob3VsZCBiZSBtb3JlCisgKiB0aGFuIGVub3VnaC4KKyAqCisgKiBOb3RlIHRoYXQgdGhpcyBzZXRzIGhvdyBtdWNoIG9mIHRoZSB6SW1hZ2UgaXMgY29waWVkIGJ5IHRoZSBtYXNrIFJPTS4KKyAqIFRoZSBlbnRpcmUgekltYWdlIGlzIHByZXNlbnQgYWZ0ZXIgdGhlIGhlYWRlciBhbmQgaXMgbG9hZGVkCisgKiBieSB0aGUgY29kZSBpbiB0aGUgYm9vdCBwcm9ncmFtICh3aGljaCBpcyB0aGUgZmlyc3QgcG9ydGlvbiBvZiB0aGUgekltYWdlKS4KKyAqLworI2RlZmluZQlNQVhfQk9PVF9QUk9HX0xFTiAoMTYgKiA1MTIpCisKKyNkZWZpbmUgUk9VTkRfVVAoeCkJKCh4ICsgQUxJR04gLSAxKSAmIH4oQUxJR04gLSAxKSkKKworc3NpemVfdCBkb19yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc2l6ZV90IG9mZnNldCA9IDA7CisJc3NpemVfdCBsOworCisJd2hpbGUgKG9mZnNldCA8IGNvdW50KSB7CisJCWwgPSByZWFkKGZkLCBidWYgKyBvZmZzZXQsIGNvdW50IC0gb2Zmc2V0KTsKKwkJaWYgKCFsKQorCQkJYnJlYWs7CisJCWlmIChsIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVBR0FJTiB8fCBlcnJubyA9PSBFV09VTERCTE9DSykKKwkJCQljb250aW51ZTsKKwkJCXBlcnJvcigicmVhZCIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW9mZnNldCArPSBsOworCX0KKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3NzaXplX3QgZG9fd3JpdGUoaW50IGZkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzaXplX3Qgb2Zmc2V0ID0gMDsKKwlzc2l6ZV90IGw7CisKKwl3aGlsZSAob2Zmc2V0IDwgY291bnQpIHsKKwkJbCA9IHdyaXRlKGZkLCBidWYgKyBvZmZzZXQsIGNvdW50IC0gb2Zmc2V0KTsKKwkJaWYgKGwgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJ3cml0ZSIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCW9mZnNldCArPSBsOworCX0KKworCXJldHVybiBvZmZzZXQ7Cit9CisKK3NzaXplX3Qgd3JpdGVfemVybyhpbnQgZmQsIHNpemVfdCBsZW4pCit7CisJc2l6ZV90IGkgPSBsZW47CisKKwl3aGlsZSAoaS0tKSB7CisJCWNvbnN0IGNoYXIgeCA9IDA7CisJCWlmIChkb193cml0ZShmZCwgJngsIDEpIDwgMCkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitpbnQgbWFpbih2b2lkKQoreworCURFQ0xBUkVfSERSKGhkcik7CisJY2hhciBib290X3Byb2dyYW1bTUFYX0JPT1RfUFJPR19MRU5dOworCXNpemVfdCBhbGlnbmVkX2hkcl9sZW4sIGFsbGlnbmVkX3Byb2dfbGVuOworCXNzaXplX3QgcHJvZ19sZW47CisKKwlwcm9nX2xlbiA9IGRvX3JlYWQoMCwgYm9vdF9wcm9ncmFtLCBzaXplb2YoYm9vdF9wcm9ncmFtKSk7CisJaWYgKHByb2dfbGVuIDw9IDApCisJCXJldHVybiAtMTsKKworCWFsaWduZWRfaGRyX2xlbiA9IFJPVU5EX1VQKHNpemVvZihoZHIpKTsKKwloZHIuc3RhcnRfYWRkcmVzcyA9IGh0b2xlMzIoU1RBUlRfQkFTRSArIGFsaWduZWRfaGRyX2xlbik7CisJYWxsaWduZWRfcHJvZ19sZW4gPSBST1VORF9VUChwcm9nX2xlbik7CisJaGRyLmNvcHlfc2l6ZSA9IGh0b2xlMTYoYWxpZ25lZF9oZHJfbGVuICsgYWxsaWduZWRfcHJvZ19sZW4pOworCisJaWYgKGRvX3dyaXRlKDEsICZoZHIsIHNpemVvZihoZHIpKSA8IDApCisJCXJldHVybiAtMTsKKwlpZiAod3JpdGVfemVybygxLCBhbGlnbmVkX2hkcl9sZW4gLSBzaXplb2YoaGRyKSkgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoZG9fd3JpdGUoMSwgYm9vdF9wcm9ncmFtLCBwcm9nX2xlbikgPCAwKQorCQlyZXR1cm4gMTsKKworCS8qIFdyaXRlIG91dCB0aGUgcmVzdCBvZiB0aGUga2VybmVsICovCisJd2hpbGUgKDEpIHsKKwkJcHJvZ19sZW4gPSBkb19yZWFkKDAsIGJvb3RfcHJvZ3JhbSwgc2l6ZW9mKGJvb3RfcHJvZ3JhbSkpOworCQlpZiAocHJvZ19sZW4gPCAwKQorCQkJcmV0dXJuIDE7CisJCWlmIChwcm9nX2xlbiA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChkb193cml0ZSgxLCBib290X3Byb2dyYW0sIHByb2dfbGVuKSA8IDApCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS96Ym9vdC1yb20tbW1jaWYudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU0gtTW9iaWxlL3pib290LXJvbS1tbWNpZi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZmZjhhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NILU1vYmlsZS96Ym9vdC1yb20tbW1jaWYudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1JPTS1hYmxlIHpJbWFnZSBib290IGZyb20gTU1DCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBST00tYWJsZSB6SW1hZ2UgY29tcGlsZWQgd2l0aCBaQk9PVF9ST01fTU1DSUYgbWF5IGJlIHdyaXR0ZW4gdG8gTU1DIGFuZAorU3VwZXJIIE1vYmlsZSBBUk0gd2lsbCB0byBib290IGRpcmVjdGx5IGZyb20gdGhlIE1NQ0lGIGhhcmR3YXJlIGJsb2NrLgorCitUaGlzIGlzIGFjaGlldmVkIGJ5IHRoZSBtYXNrIFJPTSBsb2FkaW5nIHRoZSBmaXJzdCBwb3J0aW9uIG9mIHRoZSBpbWFnZSBpbnRvCitNRVJBTSBhbmQgdGhlbiBqdW1waW5nIHRvIGl0LiBUaGlzIHBvcnRpb24gY29udGFpbnMgbG9hZGVyIGNvZGUgd2hpY2gKK2NvcGllcyB0aGUgZW50aXJlIGltYWdlIHRvIFNEUkFNIGFuZCBqdW1wcyB0byBpdC4gRnJvbSB0aGVyZSB0aGUgekltYWdlCitib290IGNvZGUgcHJvY2VlZHMgYXMgbm9ybWFsLCB1bmNvbXByZXNzaW5nIHRoZSBpbWFnZSBpbnRvIGl0cyBmaW5hbAorbG9jYXRpb24gYW5kIHRoZW4ganVtcGluZyB0byBpdC4KKworVGhpcyBjb2RlIGhhcyBiZWVuIHRlc3RlZCBvbiBhbiBBUDRFQiBib2FyZCB1c2luZyB0aGUgZGV2ZWxvcGVyIDFBIGVNTUMKK2Jvb3QgbW9kZSB3aGljaCBpcyBjb25maWd1cmVkIHVzaW5nIHRoZSBmb2xsb3dpbmcganVtcGVyIHNldHRpbmdzLgorVGhlIGJvYXJkIHVzZWQgZm9yIHRlc3RpbmcgcmVxdWlyZWQgYSBwYXRjaGVkIG1hc2sgUk9NIGluIG9yZGVyIGZvcgordGhpcyBtb2RlIHRvIGZ1bmN0aW9uLgorCisgICA4IDcgNiA1IDQgMyAyIDEKKyAgIHh8eHx4fHh8eHwgfHh8CitTNCAtKy0rLSstKy0rLSstKy0KKyAgICB8IHwgfCB8IHx4fCB8eCBvbgorCitUaGUgekltYWdlIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgTU1DIGNhcmQgYXQgc2VjdG9yIDEgKDUxMiBieXRlcykgaW4KK3ZybDQgZm9ybWF0LiBBIHV0aWxpdHkgdnJsNCBpcyBzdXBwbGllZCB0byBhY2NvbXBsaXNoIHRoaXMuCisKK2UuZy4KKwl2cmw0IDwgekltYWdlIHwgZGQgb2Y9L2Rldi9zZFggYnM9NTEyIHNlZWs9MQorCitBIGR1YWwtdm9sdGFnZSBNTUMgNC4wIGNhcmQgd2FzIHVzZWQgZm9yIHRlc3RpbmcuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zYXRhLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9hdGEvZnNsLXNhdGEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zYXRhLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2F0YS9mc2wtc2F0YS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZWVwcm9tLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9lZXByb20udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2VlcHJvbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9lZXByb20udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84eHh4X2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vOHh4eF9ncGlvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvOHh4eF9ncGlvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vOHh4eF9ncGlvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9ncGlvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vZ3Bpby50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZ3Bpby9sZWQudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2dwaW8vbGVkLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL2xlZC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9ncGlvL2xlZC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2ZzbC1pMmMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvaTJjL2ZzbC1pMmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21hcnZlbGwudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL21hcnZlbGwudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbWFydmVsbC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvZnNsLWVzZGhjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZXNkaGMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL2ZzbC1lc2RoYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbW1jLXNwaS1zbG90LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tbWMvbW1jLXNwaS1zbG90LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9tbWMtc3BpLXNsb3QudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbW1jL21tYy1zcGktc2xvdC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VwbS1uYW5kLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9tdGQvZnNsLXVwbS1uYW5kLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdXBtLW5hbmQudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL2ZzbC11cG0tbmFuZC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbXRkLXBoeXNtYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL210ZC9tdGQtcGh5c21hcC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvbXRkLXBoeXNtYXAudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbXRkL210ZC1waHlzbWFwLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY2FuLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL21wYzV4eHgtbXNjYW4udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9tcGM1eHh4LW1zY2FuLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9jYW4vc2phMTAwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2Nhbi9zamExMDAwLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9jYW4vc2phMTAwMC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvY2FuL3NqYTEwMDAudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC90c2VjLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLXRzZWMtcGh5LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvdHNlYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZnNsLXRzZWMtcGh5LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9ncGlvL21kaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2dwaW8vbWRpby50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9waHkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9waHkudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3BoeS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvcGh5LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvODN4eC01MTJ4LXBjaS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpLzgzeHgtNTEyeC1wY2kudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC84M3h4LTUxMngtcGNpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3BjaS84M3h4LTUxMngtcGNpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvY3BtLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9jcG0udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9jcG0udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvY3BtLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvZW1hYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvZW1hYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L2VtYWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvZW1hYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L25kZmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L25kZmMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9uZGZjLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L25kZmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvcHBjNDQwc3BlLWFkbWEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjLzR4eC9wcGM0NDBzcGUtYWRtYS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvNHh4L3JlYm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy80eHgvcmVib290LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy80eHgvcmVib290LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvNHh4L3JlYm9vdC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9ib2FyZC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2JvYXJkLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2JvYXJkLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL2JyZy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vYnJnLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vaTJjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9pMmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2NwbS9waWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL3BpYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvY3BtL3VzYi50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9jcG0vdXNiLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2dwaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9ncGlvLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL2dwaW8udHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL2dwaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvbmV0d29yay50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL25ldHdvcmsudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvbmV0d29yay50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvbmV0d29yay50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL2Zpcm13YXJlLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9maXJtd2FyZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvcGFyX2lvLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS9wYXJfaW8udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3BpbmNmZy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvcWUvcGluY2ZnLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3FlL3VjYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3VjYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91Y2MudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvY3BtX3FlL3FlL3VjYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2NwbV9xZS9xZS91c2IudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS91c2IudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvcWUvdXNiLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2NwbV9xZS9xZS91c2IudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvY3BtX3FlL3NlcmlhbC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9jcG1fcWUvc2VyaWFsLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZGl1LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kaXUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kaXUudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZGl1LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9kbWEudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZG1hLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9lY20udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2VjbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZWNtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2VjbS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2d0bS50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvZ3RtLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZ3RtLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d0bS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2d1dHMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d1dHMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9ndXRzLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2d1dHMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9sYmMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL2xiYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2xiYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9sYmMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY20udHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21jbS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21jbS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY20udHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbWN1LW1wYzgzNDllbWl0eC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tY3UtbXBjODM0OWVtaXR4LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21wYzUxMjEtcHNjLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTEyMS1wc2MudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBjNTEyMS1wc2MudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tcGM1MjAwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGM1MjAwLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTIwMC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9tcGM1MjAwLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBpYy50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21waWMudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9mc2wvbXBpYy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21zaS1waWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21zaS1waWMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9tc2ktcGljLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL21zaS1waWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9wbWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3BtYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3BtYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9wbWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zZWMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3NlYy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NlYy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9zZWMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvZnNsL3NzaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL2ZzbC9zc2kudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL25pbnRlbmRvL2dhbWVjdWJlLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL2dhbWVjdWJlLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby9nYW1lY3ViZS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9wb3dlcnBjL25pbnRlbmRvL2dhbWVjdWJlLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby93aWkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3Bvd2VycGMvbmludGVuZG8vd2lpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9uaW50ZW5kby93aWkudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcG93ZXJwYy9uaW50ZW5kby93aWkudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zcGkudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9mc2wtc3BpLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3BpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3NwaS9mc2wtc3BpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9zcGktYnVzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWJ1cy50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3Mvc3BpLWJ1cy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9zcGkvc3BpLWJ1cy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3VzYi50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2ZzbC11c2IudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC91c2IudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL2ZzbC11c2IudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3VzYi1laGNpLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy91c2IvdXNiLWVoY2kudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3VzYi1laGNpLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL3VzYi91c2ItZWhjaS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MveGlsaW54LnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy94aWxpbngudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL3hpbGlueC50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy94aWxpbngudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9ib290aW5nLXdpdGhvdXQtb2YudHh0CnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vcG93ZXJwYy9ib290aW5nLXdpdGhvdXQtb2YudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYm9vdGluZy13aXRob3V0LW9mLnR4dAppbmRleCA3NDAwZDc1Li4yOGIxYzlkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYm9vdGluZy13aXRob3V0LW9mLnR4dApAQCAtMTMsNyArMTMsNiBAQAogCiAgIEkgLSBJbnRyb2R1Y3Rpb24KICAgICAxKSBFbnRyeSBwb2ludCBmb3IgYXJjaC9wb3dlcnBjCi0gICAgMikgQm9hcmQgc3VwcG9ydAogCiAgIElJIC0gVGhlIERUIGJsb2NrIGZvcm1hdAogICAgIDEpIEhlYWRlcgpAQCAtNDEsMTMgKzQwLDYgQEAKICAgVkkgLSBTeXN0ZW0tb24tYS1jaGlwIGRldmljZXMgYW5kIG5vZGVzCiAgICAgMSkgRGVmaW5pbmcgY2hpbGQgbm9kZXMgb2YgYW4gU09DCiAgICAgMikgUmVwcmVzZW50aW5nIGRldmljZXMgd2l0aG91dCBhIGN1cnJlbnQgT0Ygc3BlY2lmaWNhdGlvbgotICAgICAgYSkgUEhZIG5vZGVzCi0gICAgICBiKSBJbnRlcnJ1cHQgY29udHJvbGxlcnMKLSAgICAgIGMpIDR4eC9BeG9uIEVNQUMgZXRoZXJuZXQgbm9kZXMKLSAgICAgIGQpIFhpbGlueCBJUCBjb3JlcwotICAgICAgZSkgVVNCIEVIQ0kgY29udHJvbGxlcnMKLSAgICAgIGYpIE1ESU8gb24gR1BJT3MKLSAgICAgIGcpIFNQSSBidXNzZXMKIAogICBWSUkgLSBTcGVjaWZ5aW5nIGludGVycnVwdCBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcwogICAgIDEpIGludGVycnVwdHMgcHJvcGVydHkKQEAgLTEyMyw3ICsxMTUsNyBAQAogSSAtIEludHJvZHVjdGlvbgogPT09PT09PT09PT09PT09PQogCi1EdXJpbmcgdGhlIHJlY2VudCBkZXZlbG9wbWVudCBvZiB0aGUgTGludXgvcHBjNjQga2VybmVsLCBhbmQgbW9yZQorRHVyaW5nIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgTGludXgvcHBjNjQga2VybmVsLCBhbmQgbW9yZQogc3BlY2lmaWNhbGx5LCB0aGUgYWRkaXRpb24gb2YgbmV3IHBsYXRmb3JtIHR5cGVzIG91dHNpZGUgb2YgdGhlIG9sZAogSUJNIHBTZXJpZXMvaVNlcmllcyBwYWlyLCBpdCB3YXMgZGVjaWRlZCB0byBlbmZvcmNlIHNvbWUgc3RyaWN0IHJ1bGVzCiByZWdhcmRpbmcgdGhlIGtlcm5lbCBlbnRyeSBhbmQgYm9vdGxvYWRlciA8LT4ga2VybmVsIGludGVyZmFjZXMsIGluCkBAIC0xNDYsNyArMTM4LDcgQEAKIGNyZWF0ZSBhIG5vZGUgZm9yIGV2ZXJ5IFBDSSBkZXZpY2UgaW4gdGhlIHN5c3RlbS4gSXQgaXMgYSByZXF1aXJlbWVudAogdG8gaGF2ZSBhIG5vZGUgZm9yIFBDSSBob3N0IGJyaWRnZXMgaW4gb3JkZXIgdG8gcHJvdmlkZSBpbnRlcnJ1cHQKIHJvdXRpbmcgaW5mb3JtYXRpb25zIGFuZCBtZW1vcnkvSU8gcmFuZ2VzLCBhbW9uZyBvdGhlcnMuIEl0IGlzIGFsc28KLXJlY29tbWVuZGVkIHRvIGRlZmluZSBub2RlcyBmb3Igb24gY2hpcCBkZXZpY2VzIGFuZCBvdGhlciBidXNzZXMgdGhhdAorcmVjb21tZW5kZWQgdG8gZGVmaW5lIG5vZGVzIGZvciBvbiBjaGlwIGRldmljZXMgYW5kIG90aGVyIGJ1c2VzIHRoYXQKIGRvbid0IHNwZWNpZmljYWxseSBmaXQgaW4gYW4gZXhpc3RpbmcgT0Ygc3BlY2lmaWNhdGlvbi4gVGhpcyBjcmVhdGVzIGEKIGdyZWF0IGZsZXhpYmlsaXR5IGluIHRoZSB3YXkgdGhlIGtlcm5lbCBjYW4gdGhlbiBwcm9iZSB0aG9zZSBhbmQgbWF0Y2gKIGRyaXZlcnMgdG8gZGV2aWNlLCB3aXRob3V0IGhhdmluZyB0byBoYXJkIGNvZGUgYWxsIHNvcnRzIG9mIHRhYmxlcy4gSXQKQEAgLTE1OCw3ICsxNTAsNyBAQAogMSkgRW50cnkgcG9pbnQgZm9yIGFyY2gvcG93ZXJwYwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0gICBUaGVyZSBpcyBvbmUgYW5kIG9uZSBzaW5nbGUgZW50cnkgcG9pbnQgdG8gdGhlIGtlcm5lbCwgYXQgdGhlIHN0YXJ0CisgICBUaGVyZSBpcyBvbmUgc2luZ2xlIGVudHJ5IHBvaW50IHRvIHRoZSBrZXJuZWwsIGF0IHRoZSBzdGFydAogICAgb2YgdGhlIGtlcm5lbCBpbWFnZS4gVGhhdCBlbnRyeSBwb2ludCBzdXBwb3J0cyB0d28gY2FsbGluZwogICAgY29udmVudGlvbnM6CiAKQEAgLTIxMCwxMiArMjAyLDYgQEAKICAgICAgICAgd2l0aCBhbGwgQ1BVcy4gVGhlIHdheSB0byBkbyB0aGF0IHdpdGggbWV0aG9kIGIpIHdpbGwgYmUKICAgICAgICAgZGVzY3JpYmVkIGluIGEgbGF0ZXIgcmV2aXNpb24gb2YgdGhpcyBkb2N1bWVudC4KIAotCi0yKSBCb2FyZCBzdXBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0tCi0KLTY0LWJpdCBrZXJuZWxzOgotCiAgICBCb2FyZCBzdXBwb3J0cyAocGxhdGZvcm1zKSBhcmUgbm90IGV4Y2x1c2l2ZSBjb25maWcgb3B0aW9ucy4gQW4KICAgIGFyYml0cmFyeSBzZXQgb2YgYm9hcmQgc3VwcG9ydHMgY2FuIGJlIGJ1aWx0IGluIGEgc2luZ2xlIGtlcm5lbAogICAgaW1hZ2UuIFRoZSBrZXJuZWwgd2lsbCAia25vdyIgd2hhdCBzZXQgb2YgZnVuY3Rpb25zIHRvIHVzZSBmb3IgYQpAQCAtMjM0LDQ4ICsyMjAsMTEgQEAKICAgICAgICAgY29udGFpbmluZyB0aGUgdmFyaW91cyBjYWxsYmFja3MgdGhhdCB0aGUgZ2VuZXJpYyBjb2RlIHdpbGwKICAgICAgICAgdXNlIHRvIGdldCB0byB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIGNvZGUKIAotICAgICAgICBjKSBBZGQgYSByZWZlcmVuY2UgdG8geW91ciAicHBjX21kIiBzdHJ1Y3R1cmUgaW4gdGhlCi0gICAgICAgICJtYWNoaW5lcyIgdGFibGUgaW4gYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGlmIHlvdSBhcmUKLSAgICAgICAgYSA2NC1iaXQgcGxhdGZvcm0uCi0KLSAgICAgICAgZCkgcmVxdWVzdCBhbmQgZ2V0IGFzc2lnbmVkIGEgcGxhdGZvcm0gbnVtYmVyIChzZWUgUExBVEZPUk1fKgotICAgICAgICBjb25zdGFudHMgaW4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCi0KLTMyLWJpdCBlbWJlZGRlZCBrZXJuZWxzOgotCi0gIEN1cnJlbnRseSwgYm9hcmQgc3VwcG9ydCBpcyBlc3NlbnRpYWxseSBhbiBleGNsdXNpdmUgY29uZmlnIG9wdGlvbi4KLSAgVGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGZvciBhIHNpbmdsZSBwbGF0Zm9ybS4gIFBhcnQgb2YgdGhlIHJlYXNvbgotICBmb3IgdGhpcyBpcyB0byBrZWVwIGtlcm5lbHMgb24gZW1iZWRkZWQgc3lzdGVtcyBzbWFsbCBhbmQgZWZmaWNpZW50OwotICBwYXJ0IG9mIHRoaXMgaXMgZHVlIHRvIHRoZSBmYWN0IHRoZSBjb2RlIGlzIGFscmVhZHkgdGhhdCB3YXkuIEluIHRoZQotICBmdXR1cmUsIGEga2VybmVsIG1heSBzdXBwb3J0IG11bHRpcGxlIHBsYXRmb3JtcywgYnV0IG9ubHkgaWYgdGhlCisgIEEga2VybmVsIGltYWdlIG1heSBzdXBwb3J0IG11bHRpcGxlIHBsYXRmb3JtcywgYnV0IG9ubHkgaWYgdGhlCiAgIHBsYXRmb3JtcyBmZWF0dXJlIHRoZSBzYW1lIGNvcmUgYXJjaGl0ZWN0dXJlLiAgQSBzaW5nbGUga2VybmVsIGJ1aWxkCiAgIGNhbm5vdCBzdXBwb3J0IGJvdGggY29uZmlndXJhdGlvbnMgd2l0aCBCb29rIEUgYW5kIGNvbmZpZ3VyYXRpb25zCiAgIHdpdGggY2xhc3NpYyBQb3dlcnBjIGFyY2hpdGVjdHVyZXMuCiAKLSAgMzItYml0IGVtYmVkZGVkIHBsYXRmb3JtcyB0aGF0IGFyZSBtb3ZlZCBpbnRvIGFyY2gvcG93ZXJwYyB1c2luZyBhCi0gIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSBzaG91bGQgYWRvcHQgdGhlIG1lcmdlZCB0cmVlIHByYWN0aWNlIG9mCi0gIHNldHRpbmcgcHBjX21kIHVwIGR5bmFtaWNhbGx5LCBldmVuIHRob3VnaCB0aGUga2VybmVsIGlzIGN1cnJlbnRseQotICBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIG9ubHkgYSBzaW5nbGUgcGxhdGZvcm0gYXQgYSB0aW1lLiAgVGhpcyBhbGxvd3MKLSAgdW5pZmljYXRpb24gb2YgdGhlIHNldHVwIGNvZGUsIGFuZCB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIGdvIHRvIGEKLSAgbXVsdGlwbGUtcGxhdGZvcm0tc3VwcG9ydCBtb2RlbCBpbiB0aGUgZnV0dXJlLgotCi1OT1RFOiBJIGJlbGlldmUgdGhlIGFib3ZlIHdpbGwgYmUgdHJ1ZSBvbmNlIEJlbidzIGRvbmUgd2l0aCB0aGUgbWVyZ2UKLW9mIHRoZSBib290IHNlcXVlbmNlcy4uLi4gc29tZW9uZSBzcGVhayB1cCBpZiB0aGlzIGlzIHdyb25nIQotCi0gIFRvIGFkZCBhIDMyLWJpdCBlbWJlZGRlZCBwbGF0Zm9ybSBzdXBwb3J0LCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucwotICBmb3IgNjQtYml0IHBsYXRmb3JtcyBhYm92ZSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgdGhlIEtjb25maWcKLSAgb3B0aW9uIHNob3VsZCBiZSBzZXQgdXAgc3VjaCB0aGF0IHRoZSBrZXJuZWwgYnVpbGRzIGV4Y2x1c2l2ZWx5IGZvcgotICB0aGUgcGxhdGZvcm0gc2VsZWN0ZWQuICBUaGUgcHJvY2Vzc29yIHR5cGUgZm9yIHRoZSBwbGF0Zm9ybSBzaG91bGQKLSAgZW5hYmxlIGFub3RoZXIgY29uZmlnIG9wdGlvbiB0byBzZWxlY3QgdGhlIHNwZWNpZmljIGJvYXJkCi0gIHN1cHBvcnRlZC4KLQotTk9URTogSWYgQmVuIGRvZXNuJ3QgbWVyZ2UgdGhlIHNldHVwIGZpbGVzLCBtYXkgbmVlZCB0byBjaGFuZ2UgdGhpcyB0bwotcG9pbnQgdG8gc2V0dXBfMzIuYwotCi0KLSAgIEkgd2lsbCBkZXNjcmliZSBsYXRlciB0aGUgYm9vdCBwcm9jZXNzIGFuZCB2YXJpb3VzIGNhbGxiYWNrcyB0aGF0Ci0gICB5b3VyIHBsYXRmb3JtIHNob3VsZCBpbXBsZW1lbnQuCi0KIAogSUkgLSBUaGUgRFQgYmxvY2sgZm9ybWF0CiA9PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTMwMCw4ICsyNDksOCBAQAogMSkgSGVhZGVyCiAtLS0tLS0tLS0KIAotICAgVGhlIGtlcm5lbCBpcyBlbnRlcmVkIHdpdGggcjMgcG9pbnRpbmcgdG8gYW4gYXJlYSBvZiBtZW1vcnkgdGhhdCBpcwotICAgcm91Z2hseSBkZXNjcmliZWQgaW4gYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb20uaCBieSB0aGUgc3RydWN0dXJlCisgICBUaGUga2VybmVsIGlzIHBhc3NlZCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBwb2ludGluZyB0byBhbiBhcmVhIG9mIG1lbW9yeQorICAgdGhhdCBpcyByb3VnaGx5IGRlc2NyaWJlZCBpbiBpbmNsdWRlL2xpbnV4L29mX2ZkdC5oIGJ5IHRoZSBzdHJ1Y3R1cmUKICAgIGJvb3RfcGFyYW1faGVhZGVyOgogCiBzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgewpAQCAtMzM5LDcgKzI4OCw3IEBACiAgICBBbGwgdmFsdWVzIGluIHRoaXMgaGVhZGVyIGFyZSBpbiBiaWcgZW5kaWFuIGZvcm1hdCwgdGhlIHZhcmlvdXMKICAgIGZpZWxkcyBpbiB0aGlzIGhlYWRlciBhcmUgZGVmaW5lZCBtb3JlIHByZWNpc2VseSBiZWxvdy4gQWxsCiAgICAib2Zmc2V0IiB2YWx1ZXMgYXJlIGluIGJ5dGVzIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBoZWFkZXI7IHRoYXQgaXMKLSAgIGZyb20gdGhlIHZhbHVlIG9mIHIzLgorICAgZnJvbSB0aGUgcGh5c2ljYWwgYmFzZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgdHJlZSBibG9jay4KIAogICAgLSBtYWdpYwogCkBAIC00MzcsNyArMzg2LDcgQEAKIAogCiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgcjMgLT4gfCAgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICB8CisgICAgIGJhc2UgLT4gfCAgc3RydWN0IGJvb3RfcGFyYW1faGVhZGVyICB8CiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgfCAgICAgIChhbGlnbm1lbnQgZ2FwKSAoKikgICB8CiAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NTcsNyArNDA2LDcgQEAKICAgICAgIC0tLS0tPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgIHwKICAgICAgIHwKLSAgICAgIC0tLSAocjMgKyB0b3RhbHNpemUpCisgICAgICAtLS0gKGJhc2UgKyB0b3RhbHNpemUpCiAKICAgKCopIFRoZSBhbGlnbm1lbnQgZ2FwcyBhcmUgbm90IG5lY2Vzc2FyaWx5IHByZXNlbnQ7IHRoZWlyIHByZXNlbmNlCiAgICAgICBhbmQgc2l6ZSBhcmUgZGVwZW5kZW50IG9uIHRoZSB2YXJpb3VzIGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YKQEAgLTUwMCw3ICs0NDksNyBAQAogdGhlIGRldmljZS10cmVlLiBNb3JlIGRldGFpbHMgYWJvdXQgdGhlIGFjdHVhbCBmb3JtYXQgb2YgdGhlc2Ugd2lsbCBiZQogYmVsb3cuCiAKLVRoZSBrZXJuZWwgcG93ZXJwYyBnZW5lcmljIGNvZGUgZG9lcyBub3QgbWFrZSBhbnkgZm9ybWFsIHVzZSBvZiB0aGUKK1RoZSBrZXJuZWwgZ2VuZXJpYyBjb2RlIGRvZXMgbm90IG1ha2UgYW55IGZvcm1hbCB1c2Ugb2YgdGhlCiB1bml0IGFkZHJlc3MgKHRob3VnaCBzb21lIGJvYXJkIHN1cHBvcnQgY29kZSBtYXkgZG8pIHNvIHRoZSBvbmx5IHJlYWwKIHJlcXVpcmVtZW50IGhlcmUgZm9yIHRoZSB1bml0IGFkZHJlc3MgaXMgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgb2YKIHRoZSBub2RlIHVuaXQgbmFtZSBhdCBhIGdpdmVuIGxldmVsIG9mIHRoZSB0cmVlLiBOb2RlcyB3aXRoIG5vIG5vdGlvbgpAQCAtNTE4LDIwICs0NjcsMjEgQEAKIAogRXZlcnkgbm9kZSB3aGljaCBhY3R1YWxseSByZXByZXNlbnRzIGFuIGFjdHVhbCBkZXZpY2UgKHRoYXQgaXMsIGEgbm9kZQogd2hpY2ggaXNuJ3Qgb25seSBhIHZpcnR1YWwgImNvbnRhaW5lciIgZm9yIG1vcmUgbm9kZXMsIGxpa2UgIi9jcHVzIgotaXMpIGlzIGFsc28gcmVxdWlyZWQgdG8gaGF2ZSBhICJkZXZpY2VfdHlwZSIgcHJvcGVydHkgaW5kaWNhdGluZyB0aGUKLXR5cGUgb2Ygbm9kZSAuCitpcykgaXMgYWxzbyByZXF1aXJlZCB0byBoYXZlIGEgImNvbXBhdGlibGUiIHByb3BlcnR5IGluZGljYXRpbmcgdGhlCitzcGVjaWZpYyBoYXJkd2FyZSBhbmQgYW4gb3B0aW9uYWwgbGlzdCBvZiBkZXZpY2VzIGl0IGlzIGZ1bGx5CitiYWNrd2FyZHMgY29tcGF0aWJsZSB3aXRoLgogCiBGaW5hbGx5LCBldmVyeSBub2RlIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgZnJvbSBhIHByb3BlcnR5IGluIGFub3RoZXIKLW5vZGUgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhICJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0eS4gUmVhbCBvcGVuCi1maXJtd2FyZSBpbXBsZW1lbnRhdGlvbnMgcHJvdmlkZSBhIHVuaXF1ZSAicGhhbmRsZSIgdmFsdWUgZm9yIGV2ZXJ5Ci1ub2RlIHRoYXQgdGhlICJwcm9tX2luaXQoKSIgdHJhbXBvbGluZSBjb2RlIHR1cm5zIGludG8KLSJsaW51eCxwaGFuZGxlIiBwcm9wZXJ0aWVzLiBIb3dldmVyLCB0aGlzIGlzIG1hZGUgb3B0aW9uYWwgaWYgdGhlCi1mbGF0dGVuZWQgZGV2aWNlIHRyZWUgaXMgdXNlZCBkaXJlY3RseS4gQW4gZXhhbXBsZSBvZiBhIG5vZGUKK25vZGUgaXMgcmVxdWlyZWQgdG8gaGF2ZSBlaXRoZXIgYSAicGhhbmRsZSIgb3IgYSAibGludXgscGhhbmRsZSIKK3Byb3BlcnR5LiBSZWFsIE9wZW4gRmlybXdhcmUgaW1wbGVtZW50YXRpb25zIHByb3ZpZGUgYSB1bmlxdWUKKyJwaGFuZGxlIiB2YWx1ZSBmb3IgZXZlcnkgbm9kZSB0aGF0IHRoZSAicHJvbV9pbml0KCkiIHRyYW1wb2xpbmUgY29kZQordHVybnMgaW50byAibGludXgscGhhbmRsZSIgcHJvcGVydGllcy4gSG93ZXZlciwgdGhpcyBpcyBtYWRlIG9wdGlvbmFsCitpZiB0aGUgZmxhdHRlbmVkIGRldmljZSB0cmVlIGlzIHVzZWQgZGlyZWN0bHkuIEFuIGV4YW1wbGUgb2YgYSBub2RlCiByZWZlcmVuY2luZyBhbm90aGVyIG5vZGUgdmlhICJwaGFuZGxlIiBpcyB3aGVuIGxheWluZyBvdXQgdGhlCiBpbnRlcnJ1cHQgdHJlZSB3aGljaCB3aWxsIGJlIGRlc2NyaWJlZCBpbiBhIGZ1cnRoZXIgdmVyc2lvbiBvZiB0aGlzCiBkb2N1bWVudC4KIAotVGhpcyAibGludXgsIHBoYW5kbGUiIHByb3BlcnR5IGlzIGEgMzItYml0IHZhbHVlIHRoYXQgdW5pcXVlbHkKK1RoZSAicGhhbmRsZSIgcHJvcGVydHkgaXMgYSAzMi1iaXQgdmFsdWUgdGhhdCB1bmlxdWVseQogaWRlbnRpZmllcyBhIG5vZGUuIFlvdSBhcmUgZnJlZSB0byB1c2Ugd2hhdGV2ZXIgdmFsdWVzIG9yIHN5c3RlbSBvZgogdmFsdWVzLCBpbnRlcm5hbCBwb2ludGVycywgb3Igd2hhdGV2ZXIgdG8gZ2VuZXJhdGUgdGhlc2UsIHRoZSBvbmx5CiByZXF1aXJlbWVudCBpcyB0aGF0IGV2ZXJ5IG5vZGUgZm9yIHdoaWNoIHlvdSBwcm92aWRlIHRoYXQgcHJvcGVydHkgaGFzCkBAIC02OTQsNyArNjQ0LDcgQEAKIHdoaWxlIHRoZSB0b3AgY2VsbCBjb250YWlucyBhZGRyZXNzIHNwYWNlIGluZGljYXRpb24sIGZsYWdzLCBhbmQgcGNpCiBidXMgJiBkZXZpY2UgbnVtYmVycy4KIAotRm9yIGJ1c3NlcyB0aGF0IHN1cHBvcnQgZHluYW1pYyBhbGxvY2F0aW9uLCBpdCdzIHRoZSBhY2NlcHRlZCBwcmFjdGljZQorRm9yIGJ1c2VzIHRoYXQgc3VwcG9ydCBkeW5hbWljIGFsbG9jYXRpb24sIGl0J3MgdGhlIGFjY2VwdGVkIHByYWN0aWNlCiB0byB0aGVuIG5vdCBwcm92aWRlIHRoZSBhZGRyZXNzIGluICJyZWciIChrZWVwIGl0IDApIHRob3VnaCB3aGlsZQogcHJvdmlkaW5nIGEgZmxhZyBpbmRpY2F0aW5nIHRoZSBhZGRyZXNzIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgYW5kCiB0aGVuLCB0byBwcm92aWRlIGEgc2VwYXJhdGUgImFzc2lnbmVkLWFkZHJlc3NlcyIgcHJvcGVydHkgdGhhdApAQCAtNzExLDcgKzY2MSw3IEBACiBUaGUgInJlZyIgcHJvcGVydHkgb25seSBkZWZpbmVzIGFkZHJlc3NlcyBhbmQgc2l6ZXMgKGlmICNzaXplLWNlbGxzIGlzCiBub24tMCkgd2l0aGluIGEgZ2l2ZW4gYnVzLiBJbiBvcmRlciB0byB0cmFuc2xhdGUgYWRkcmVzc2VzIHVwd2FyZAogKHRoYXQgaXMgaW50byBwYXJlbnQgYnVzIGFkZHJlc3NlcywgYW5kIHBvc3NpYmx5IGludG8gQ1BVIHBoeXNpY2FsCi1hZGRyZXNzZXMpLCBhbGwgYnVzc2VzIG11c3QgY29udGFpbiBhICJyYW5nZXMiIHByb3BlcnR5LiBJZiB0aGUKK2FkZHJlc3NlcyksIGFsbCBidXNlcyBtdXN0IGNvbnRhaW4gYSAicmFuZ2VzIiBwcm9wZXJ0eS4gSWYgdGhlCiAicmFuZ2VzIiBwcm9wZXJ0eSBpcyBtaXNzaW5nIGF0IGEgZ2l2ZW4gbGV2ZWwsIGl0J3MgYXNzdW1lZCB0aGF0CiB0cmFuc2xhdGlvbiBpc24ndCBwb3NzaWJsZSwgaS5lLiwgdGhlIHJlZ2lzdGVycyBhcmUgbm90IHZpc2libGUgb24gdGhlCiBwYXJlbnQgYnVzLiAgVGhlIGZvcm1hdCBvZiB0aGUgInJhbmdlcyIgcHJvcGVydHkgZm9yIGEgYnVzIGlzIGEgbGlzdApAQCAtNzI3LDkgKzY3Nyw5IEBACiBQQ0k8LT5JU0EgYnJpZGdlLCB0aGF0IHdvdWxkIGJlIGEgUENJIGFkZHJlc3MuIEl0IGRlZmluZXMgdGhlIGJhc2UKIGFkZHJlc3MgaW4gdGhlIHBhcmVudCBidXMgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGF0IHJhbmdlIGlzIG1hcHBlZC4KIAotRm9yIGEgbmV3IDY0LWJpdCBwb3dlcnBjIGJvYXJkLCBJIHJlY29tbWVuZCBlaXRoZXIgdGhlIDIvMiBmb3JtYXQgb3IKK0ZvciBuZXcgNjQtYml0IGJvYXJkIHN1cHBvcnQsIEkgcmVjb21tZW5kIGVpdGhlciB0aGUgMi8yIGZvcm1hdCBvcgogQXBwbGUncyAyLzEgZm9ybWF0IHdoaWNoIGlzIHNsaWdodGx5IG1vcmUgY29tcGFjdCBzaW5jZSBzaXplcyB1c3VhbGx5Ci1maXQgaW4gYSBzaW5nbGUgMzItYml0IHdvcmQuICAgTmV3IDMyLWJpdCBwb3dlcnBjIGJvYXJkcyBzaG91bGQgdXNlIGEKK2ZpdCBpbiBhIHNpbmdsZSAzMi1iaXQgd29yZC4gICBOZXcgMzItYml0IGJvYXJkIHN1cHBvcnQgc2hvdWxkIHVzZSBhCiAxLzEgZm9ybWF0LCB1bmxlc3MgdGhlIHByb2Nlc3NvciBzdXBwb3J0cyBwaHlzaWNhbCBhZGRyZXNzZXMgZ3JlYXRlcgogdGhhbiAzMi1iaXRzLCBpbiB3aGljaCBjYXNlIGEgMi8xIGZvcm1hdCBpcyByZWNvbW1lbmRlZC4KIApAQCAtNzU0LDcgKzcwNCw3IEBACiBXaGlsZSBlYXJsaWVyIHVzZXJzIG9mIE9wZW4gRmlybXdhcmUgbGlrZSBPbGRXb3JsZCBtYWNpbnRvc2hlcyB0ZW5kZWQKIHRvIHVzZSB0aGUgYWN0dWFsIGRldmljZSBuYW1lIGZvciB0aGUgIm5hbWUiIHByb3BlcnR5LCBpdCdzIG5vd2FkYXlzCiBjb25zaWRlcmVkIGEgZ29vZCBwcmFjdGljZSB0byB1c2UgYSBuYW1lIHRoYXQgaXMgY2xvc2VyIHRvIHRoZSBkZXZpY2UKLWNsYXNzIChvZnRlbiBlcXVhbCB0byBkZXZpY2VfdHlwZSkuIEZvciBleGFtcGxlLCBub3dhZGF5cywgZXRoZXJuZXQKK2NsYXNzIChvZnRlbiBlcXVhbCB0byBkZXZpY2VfdHlwZSkuIEZvciBleGFtcGxlLCBub3dhZGF5cywgRXRoZXJuZXQKIGNvbnRyb2xsZXJzIGFyZSBuYW1lZCAiZXRoZXJuZXQiLCBhbiBhZGRpdGlvbmFsICJtb2RlbCIgcHJvcGVydHkKIGRlZmluaW5nIHByZWNpc2VseSB0aGUgY2hpcCB0eXBlL21vZGVsLCBhbmQgImNvbXBhdGlibGUiIHByb3BlcnR5CiBkZWZpbmluZyB0aGUgZmFtaWx5IGluIGNhc2UgYSBzaW5nbGUgZHJpdmVyIGNhbiBkcml2ZXIgbW9yZSB0aGFuIG9uZQpAQCAtNzcyLDcgKzcyMiw3IEBACiA0KSBOb3RlIGFib3V0IG5vZGUgYW5kIHByb3BlcnR5IG5hbWVzIGFuZCBjaGFyYWN0ZXIgc2V0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoaWxlIG9wZW4gZmlybXdhcmUgcHJvdmlkZXMgbW9yZSBmbGV4aWJsZSB1c2FnZSBvZiA4ODU5LTEsIHRoaXMKK1doaWxlIE9wZW4gRmlybXdhcmUgcHJvdmlkZXMgbW9yZSBmbGV4aWJsZSB1c2FnZSBvZiA4ODU5LTEsIHRoaXMKIHNwZWNpZmljYXRpb24gZW5mb3JjZXMgbW9yZSBzdHJpY3QgcnVsZXMuIE5vZGVzIGFuZCBwcm9wZXJ0aWVzIHNob3VsZAogYmUgY29tcHJpc2VkIG9ubHkgb2YgQVNDSUkgY2hhcmFjdGVycyAnYScgdG8gJ3onLCAnMCcgdG8KICc5JywgJywnLCAnLicsICdfJywgJysnLCAnIycsICc/JywgYW5kICctJy4gTm9kZSBuYW1lcyBhZGRpdGlvbmFsbHkKQEAgLTc5Miw3ICs3NDIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgVGhlc2UgYXJlIGFsbCB0aGF0IGFyZSBjdXJyZW50bHkgcmVxdWlyZWQuIEhvd2V2ZXIsIGl0IGlzIHN0cm9uZ2x5CiAgIHJlY29tbWVuZGVkIHRoYXQgeW91IGV4cG9zZSBQQ0kgaG9zdCBicmlkZ2VzIGFzIGRvY3VtZW50ZWQgaW4gdGhlCi0gIFBDSSBiaW5kaW5nIHRvIG9wZW4gZmlybXdhcmUsIGFuZCB5b3VyIGludGVycnVwdCB0cmVlIGFzIGRvY3VtZW50ZWQKKyAgUENJIGJpbmRpbmcgdG8gT3BlbiBGaXJtd2FyZSwgYW5kIHlvdXIgaW50ZXJydXB0IHRyZWUgYXMgZG9jdW1lbnRlZAogICBpbiBPRiBpbnRlcnJ1cHQgdHJlZSBzcGVjaWZpY2F0aW9uLgogCiAgIGEpIFRoZSByb290IG5vZGUKQEAgLTgwMiwyMCArNzUyLDEyIEBACiAgICAgLSBtb2RlbCA6IHRoaXMgaXMgeW91ciBib2FyZCBuYW1lL21vZGVsCiAgICAgLSAjYWRkcmVzcy1jZWxscyA6IGFkZHJlc3MgcmVwcmVzZW50YXRpb24gZm9yICJyb290IiBkZXZpY2VzCiAgICAgLSAjc2l6ZS1jZWxsczogdGhlIHNpemUgcmVwcmVzZW50YXRpb24gZm9yICJyb290IiBkZXZpY2VzCi0gICAgLSBkZXZpY2VfdHlwZSA6IFRoaXMgcHJvcGVydHkgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeS4gSG93ZXZlciwgaWYKLSAgICAgIHlvdSBkZWNpZGUgdG8gY3JlYXRlIGEgZGV2aWNlX3R5cGUgZm9yIHlvdXIgcm9vdCBub2RlLCBtYWtlIHN1cmUgaXQKLSAgICAgIGlzIF9ub3RfICJjaHJwIiB1bmxlc3MgeW91ciBwbGF0Zm9ybSBpcyBhIHBTZXJpZXMgb3IgUEFQUiBjb21wbGlhbnQKLSAgICAgIG9uZSBmb3IgNjQtYml0LCBvciBhIENIUlAtdHlwZSBtYWNoaW5lIGZvciAzMi1iaXQgYXMgdGhpcyB3aWxsCi0gICAgICBtYXRjaGVkIGJ5IHRoZSBrZXJuZWwgdGhpcyB3YXkuCi0KLSAgQWRkaXRpb25hbGx5LCBzb21lIHJlY29tbWVuZGVkIHByb3BlcnRpZXMgYXJlOgotCiAgICAgLSBjb21wYXRpYmxlIDogdGhlIGJvYXJkICJmYW1pbHkiIGdlbmVyYWxseSBmaW5kcyBpdHMgd2F5IGhlcmUsCiAgICAgICBmb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgMiBib2FyZCBtb2RlbHMgd2l0aCBhIHNpbWlsYXIgbGF5b3V0LAogICAgICAgdGhhdCB0eXBpY2FsbHkgZ2V0IGRyaXZlbiBieSB0aGUgc2FtZSBwbGF0Zm9ybSBjb2RlIGluIHRoZQotICAgICAga2VybmVsLCB5b3Ugd291bGQgdXNlIGEgZGlmZmVyZW50ICJtb2RlbCIgcHJvcGVydHkgYnV0IHB1dCBhCi0gICAgICB2YWx1ZSBpbiAiY29tcGF0aWJsZSIuIFRoZSBrZXJuZWwgZG9lc24ndCBkaXJlY3RseSB1c2UgdGhhdAotICAgICAgdmFsdWUgYnV0IGl0IGlzIGdlbmVyYWxseSB1c2VmdWwuCisgICAgICBrZXJuZWwsIHlvdSB3b3VsZCBzcGVjaWZ5IHRoZSBleGFjdCBib2FyZCBtb2RlbCBpbiB0aGUKKyAgICAgIGNvbXBhdGlibGUgcHJvcGVydHkgZm9sbG93ZWQgYnkgYW4gZW50cnkgdGhhdCByZXByZXNlbnRzIHRoZSBTb0MKKyAgICAgIG1vZGVsLgogCiAgIFRoZSByb290IG5vZGUgaXMgYWxzbyBnZW5lcmFsbHkgd2hlcmUgeW91IGFkZCBhZGRpdGlvbmFsIHByb3BlcnRpZXMKICAgc3BlY2lmaWMgdG8geW91ciBib2FyZCBsaWtlIHRoZSBzZXJpYWwgbnVtYmVyIGlmIGFueSwgdGhhdCBzb3J0IG9mCkBAIC04NDEsOCArNzgzLDExIEBACiAKICAgU28gdW5kZXIgL2NwdXMsIHlvdSBhcmUgc3VwcG9zZWQgdG8gY3JlYXRlIGEgbm9kZSBmb3IgZXZlcnkgQ1BVIG9uCiAgIHRoZSBtYWNoaW5lLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByZXN0cmljdGlvbiBvbiB0aGUgbmFtZSBvZiB0aGUKLSAgQ1BVLCB0aG91Z2ggSXQncyBjb21tb24gcHJhY3RpY2UgdG8gY2FsbCBpdCBQb3dlclBDLDxuYW1lPi4gRm9yCisgIENQVSwgdGhvdWdoIGl0J3MgY29tbW9uIHRvIGNhbGwgaXQgPGFyY2hpdGVjdHVyZT4sPGNvcmU+LiBGb3IKICAgZXhhbXBsZSwgQXBwbGUgdXNlcyBQb3dlclBDLEc1IHdoaWxlIElCTSB1c2VzIFBvd2VyUEMsOTcwRlguCisgIEhvd2V2ZXIsIHRoZSBHZW5lcmljIE5hbWVzIGNvbnZlbnRpb24gc3VnZ2VzdHMgdGhhdCBpdCB3b3VsZCBiZQorICBiZXR0ZXIgdG8gc2ltcGx5IHVzZSAnY3B1JyBmb3IgZWFjaCBjcHUgbm9kZSBhbmQgdXNlIHRoZSBjb21wYXRpYmxlCisgIHByb3BlcnR5IHRvIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBjcHUgY29yZS4KIAogICBSZXF1aXJlZCBwcm9wZXJ0aWVzOgogCkBAIC05MjMsNyArODY4LDcgQEAKIAogICBlKSBUaGUgL2Nob3NlbiBub2RlCiAKLSAgVGhpcyBub2RlIGlzIGEgYml0ICJzcGVjaWFsIi4gTm9ybWFsbHksIHRoYXQncyB3aGVyZSBvcGVuIGZpcm13YXJlCisgIFRoaXMgbm9kZSBpcyBhIGJpdCAic3BlY2lhbCIuIE5vcm1hbGx5LCB0aGF0J3Mgd2hlcmUgT3BlbiBGaXJtd2FyZQogICBwdXRzIHNvbWUgdmFyaWFibGUgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24sIGxpa2UgdGhlIGFyZ3VtZW50cywgb3IKICAgdGhlIGRlZmF1bHQgaW5wdXQvb3V0cHV0IGRldmljZXMuCiAKQEAgLTk0MCwxMSArODg1LDcgQEAKICAgICAgIGNvbnNvbGUgZGV2aWNlIGlmIGFueS4gVHlwaWNhbGx5LCBpZiB5b3UgaGF2ZSBzZXJpYWwgZGV2aWNlcyBvbgogICAgICAgeW91ciBib2FyZCwgeW91IG1heSB3YW50IHRvIHB1dCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBvbmUgc2V0IGFzCiAgICAgICB0aGUgZGVmYXVsdCBjb25zb2xlIGluIHRoZSBmaXJtd2FyZSBoZXJlLCBmb3IgdGhlIGtlcm5lbCB0byBwaWNrCi0gICAgICBpdCB1cCBhcyBpdHMgb3duIGRlZmF1bHQgY29uc29sZS4gSWYgeW91IGxvb2sgYXQgdGhlIGZ1bmN0aW9uCi0gICAgICBzZXRfcHJlZmVycmVkX2NvbnNvbGUoKSBpbiBhcmNoL3BwYzY0L2tlcm5lbC9zZXR1cC5jLCB5b3UnbGwgc2VlCi0gICAgICB0aGF0IHRoZSBrZXJuZWwgdHJpZXMgdG8gZmluZCBvdXQgdGhlIGRlZmF1bHQgY29uc29sZSBhbmQgaGFzCi0gICAgICBrbm93bGVkZ2Ugb2YgdmFyaW91cyB0eXBlcyBsaWtlIDgyNTAgc2VyaWFsIHBvcnRzLiBZb3UgbWF5IHdhbnQKLSAgICAgIHRvIGV4dGVuZCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCB5b3VyIG93bi4KKyAgICAgIGl0IHVwIGFzIGl0cyBvd24gZGVmYXVsdCBjb25zb2xlLgogCiAgIE5vdGUgdGhhdCB1LWJvb3QgY3JlYXRlcyBhbmQgZmlsbHMgaW4gdGhlIGNob3NlbiBub2RlIGZvciBwbGF0Zm9ybXMKICAgdGhhdCB1c2UgaXQuCkBAIC05NTUsMjMgKzg5NiwyMyBAQAogCiAgIGYpIHRoZSAvc29jPFNPQ25hbWU+IG5vZGUKIAotICBUaGlzIG5vZGUgaXMgdXNlZCB0byByZXByZXNlbnQgYSBzeXN0ZW0tb24tYS1jaGlwIChTT0MpIGFuZCBtdXN0IGJlCi0gIHByZXNlbnQgaWYgdGhlIHByb2Nlc3NvciBpcyBhIFNPQy4gVGhlIHRvcC1sZXZlbCBzb2Mgbm9kZSBjb250YWlucwotICBpbmZvcm1hdGlvbiB0aGF0IGlzIGdsb2JhbCB0byBhbGwgZGV2aWNlcyBvbiB0aGUgU09DLiBUaGUgbm9kZSBuYW1lCi0gIHNob3VsZCBjb250YWluIGEgdW5pdCBhZGRyZXNzIGZvciB0aGUgU09DLCB3aGljaCBpcyB0aGUgYmFzZSBhZGRyZXNzCi0gIG9mIHRoZSBtZW1vcnktbWFwcGVkIHJlZ2lzdGVyIHNldCBmb3IgdGhlIFNPQy4gVGhlIG5hbWUgb2YgYW4gc29jCisgIFRoaXMgbm9kZSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHN5c3RlbS1vbi1hLWNoaXAgKFNvQykgYW5kIG11c3QgYmUKKyAgcHJlc2VudCBpZiB0aGUgcHJvY2Vzc29yIGlzIGEgU29DLiBUaGUgdG9wLWxldmVsIHNvYyBub2RlIGNvbnRhaW5zCisgIGluZm9ybWF0aW9uIHRoYXQgaXMgZ2xvYmFsIHRvIGFsbCBkZXZpY2VzIG9uIHRoZSBTb0MuIFRoZSBub2RlIG5hbWUKKyAgc2hvdWxkIGNvbnRhaW4gYSB1bml0IGFkZHJlc3MgZm9yIHRoZSBTb0MsIHdoaWNoIGlzIHRoZSBiYXNlIGFkZHJlc3MKKyAgb2YgdGhlIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXIgc2V0IGZvciB0aGUgU29DLiBUaGUgbmFtZSBvZiBhbiBTb0MKICAgbm9kZSBzaG91bGQgc3RhcnQgd2l0aCAic29jIiwgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhlIG5hbWUgc2hvdWxkCiAgIHJlcHJlc2VudCB0aGUgcGFydCBudW1iZXIgZm9yIHRoZSBzb2MuICBGb3IgZXhhbXBsZSwgdGhlIE1QQzg1NDAncwogICBzb2Mgbm9kZSB3b3VsZCBiZSBjYWxsZWQgInNvYzg1NDAiLgogCiAgIFJlcXVpcmVkIHByb3BlcnRpZXM6CiAKLSAgICAtIGRldmljZV90eXBlIDogU2hvdWxkIGJlICJzb2MiCiAgICAgLSByYW5nZXMgOiBTaG91bGQgYmUgZGVmaW5lZCBhcyBzcGVjaWZpZWQgaW4gMSkgdG8gZGVzY3JpYmUgdGhlCi0gICAgICB0cmFuc2xhdGlvbiBvZiBTT0MgYWRkcmVzc2VzIGZvciBtZW1vcnkgbWFwcGVkIFNPQyByZWdpc3RlcnMuCi0gICAgLSBidXMtZnJlcXVlbmN5OiBDb250YWlucyB0aGUgYnVzIGZyZXF1ZW5jeSBmb3IgdGhlIFNPQyBub2RlLgorICAgICAgdHJhbnNsYXRpb24gb2YgU29DIGFkZHJlc3NlcyBmb3IgbWVtb3J5IG1hcHBlZCBTb0MgcmVnaXN0ZXJzLgorICAgIC0gYnVzLWZyZXF1ZW5jeTogQ29udGFpbnMgdGhlIGJ1cyBmcmVxdWVuY3kgZm9yIHRoZSBTb0Mgbm9kZS4KICAgICAgIFR5cGljYWxseSwgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQgaXMgZmlsbGVkIGluIGJ5IHRoZSBib290CiAgICAgICBsb2FkZXIuCisgICAgLSBjb21wYXRpYmxlIDogRXhhY3QgbW9kZWwgb2YgdGhlIFNvQwogCiAKICAgUmVjb21tZW5kZWQgcHJvcGVydGllczoKQEAgLTExNTUsMTIgKzEwOTYsMTMgQEAKIAogICAtIEFuIGV4YW1wbGUgb2YgY29kZSBmb3IgaXRlcmF0aW5nIG5vZGVzICYgcmV0cmlldmluZyBwcm9wZXJ0aWVzCiAgICAgZGlyZWN0bHkgZnJvbSB0aGUgZmxhdHRlbmVkIHRyZWUgZm9ybWF0IGNhbiBiZSBmb3VuZCBpbiB0aGUga2VybmVsCi0gICAgZmlsZSBhcmNoL3BwYzY0L2tlcm5lbC9wcm9tLmMsIGxvb2sgYXQgc2Nhbl9mbGF0X2R0KCkgZnVuY3Rpb24sCisgICAgZmlsZSBkcml2ZXJzL29mL2ZkdC5jLiAgTG9vayBhdCB0aGUgb2Zfc2Nhbl9mbGF0X2R0KCkgZnVuY3Rpb24sCiAgICAgaXRzIHVzYWdlIGluIGVhcmx5X2luaXRfZGV2dHJlZSgpLCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdmFyaW91cwogICAgIGVhcmx5X2luaXRfZHRfc2Nhbl8qKCkgY2FsbGJhY2tzLiBUaGF0IGNvZGUgY2FuIGJlIHJlLXVzZWQgaW4gYQogICAgIEdQTCBib290bG9hZGVyLCBhbmQgYXMgdGhlIGF1dGhvciBvZiB0aGF0IGNvZGUsIEkgd291bGQgYmUgaGFwcHkKICAgICB0byBkaXNjdXNzIHBvc3NpYmxlIGZyZWUgbGljZW5zaW5nIHRvIGFueSB2ZW5kb3Igd2hvIHdpc2hlcyB0bwogICAgIGludGVncmF0ZSBhbGwgb3IgcGFydCBvZiB0aGlzIGNvZGUgaW50byBhIG5vbi1HUEwgYm9vdGxvYWRlci4KKyAgICAocmVmZXJlbmNlIG5lZWRlZDsgd2hvIGlzICdJJyBoZXJlPyAtLS1nY2wgSmFuIDMxLCAyMDExKQogCiAKIApAQCAtMTIwMywxOCArMTE0NSwxOSBAQAogMikgUmVwcmVzZW50aW5nIGRldmljZXMgd2l0aG91dCBhIGN1cnJlbnQgT0Ygc3BlY2lmaWNhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1DdXJyZW50bHksIHRoZXJlIGFyZSBtYW55IGRldmljZXMgb24gU09DcyB0aGF0IGRvIG5vdCBoYXZlIGEgc3RhbmRhcmQKLXJlcHJlc2VudGF0aW9uIHByZS1kZWZpbmVkIGFzIHBhcnQgb2YgdGhlIG9wZW4gZmlybXdhcmUKLXNwZWNpZmljYXRpb25zLCBtYWlubHkgYmVjYXVzZSB0aGUgYm9hcmRzIHRoYXQgY29udGFpbiB0aGVzZSBTT0NzIGFyZQotbm90IGN1cnJlbnRseSBib290ZWQgdXNpbmcgb3BlbiBmaXJtd2FyZS4gICBUaGlzIHNlY3Rpb24gY29udGFpbnMKLWRlc2NyaXB0aW9ucyBmb3IgdGhlIFNPQyBkZXZpY2VzIGZvciB3aGljaCBuZXcgbm9kZXMgaGF2ZSBiZWVuCi1kZWZpbmVkOyB0aGlzIGxpc3Qgd2lsbCBleHBhbmQgYXMgbW9yZSBhbmQgbW9yZSBTT0MtY29udGFpbmluZwotcGxhdGZvcm1zIGFyZSBtb3ZlZCBvdmVyIHRvIHVzZSB0aGUgZmxhdHRlbmVkLWRldmljZS10cmVlIG1vZGVsLgorQ3VycmVudGx5LCB0aGVyZSBhcmUgbWFueSBkZXZpY2VzIG9uIFNvQ3MgdGhhdCBkbyBub3QgaGF2ZSBhIHN0YW5kYXJkCityZXByZXNlbnRhdGlvbiBkZWZpbmVkIGFzIHBhcnQgb2YgdGhlIE9wZW4gRmlybXdhcmUgc3BlY2lmaWNhdGlvbnMsCittYWlubHkgYmVjYXVzZSB0aGUgYm9hcmRzIHRoYXQgY29udGFpbiB0aGVzZSBTb0NzIGFyZSBub3QgY3VycmVudGx5Citib290ZWQgdXNpbmcgT3BlbiBGaXJtd2FyZS4gIEJpbmRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgbmV3IGRldmljZXMKK3Nob3VsZCBiZSBhZGRlZCB0byB0aGUgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzIGRpcmVjdG9yeS4KK1RoYXQgZGlyZWN0b3J5IHdpbGwgZXhwYW5kIGFzIGRldmljZSB0cmVlIHN1cHBvcnQgaXMgYWRkZWQgdG8gbW9yZSBhbmQKK21vcmUgU29Dcy4KKwogCiBWSUkgLSBTcGVjaWZ5aW5nIGludGVycnVwdCBpbmZvcm1hdGlvbiBmb3IgZGV2aWNlcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBkZXZpY2UgdHJlZSByZXByZXNlbnRzIHRoZSBidXNzZXMgYW5kIGRldmljZXMgb2YgYSBoYXJkd2FyZQorVGhlIGRldmljZSB0cmVlIHJlcHJlc2VudHMgdGhlIGJ1c2VzIGFuZCBkZXZpY2VzIG9mIGEgaGFyZHdhcmUKIHN5c3RlbSBpbiBhIGZvcm0gc2ltaWxhciB0byB0aGUgcGh5c2ljYWwgYnVzIHRvcG9sb2d5IG9mIHRoZQogaGFyZHdhcmUuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCBiOTU5NjU5Li5iM2YzNWU1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC02MDMsMyArNjAzLDE5IEBACiBXaG86CUplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CW5vc3dhcGFjY291bnQga2VybmVsIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXIKK1doZW46CTIuNi40MAorV2h5OglUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gb2YgbWVtc3cgZmVhdHVyZSBlbmFibGVkIGJ5CisJQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUCBjb3VsZCBiZSBkaXNhYmxlZCBieSB0aGUgbm9zd2FwYWNjb3VudAorCWtlcm5lbCBwYXJhbWV0ZXIgKGludHJvZHVjZWQgaW4gMi42LjI5LXJjMSkuIExhdGVyIG9uLCB0aGlzIGRlY2lzaW9uCisJdHVybmVkIG91dCB0byBiZSBub3QgaWRlYWwgYmVjYXVzZSB3ZSBjYW5ub3QgaGF2ZSB0aGUgZmVhdHVyZSBjb21waWxlZAorCWluIGFuZCBkaXNhYmxlZCBieSBkZWZhdWx0IGFuZCBsZXQgb25seSBpbnRlcmVzdGVkIHRvIGVuYWJsZSBpdAorCShlLmcuIGdlbmVyYWwgZGlzdHJpYnV0aW9uIGtlcm5lbHMgbWlnaHQgbmVlZCBpdCkuIFRoZXJlZm9yZSB3ZSBoYXZlCisJYWRkZWQgc3dhcGFjY291bnRbPTB8MV0gcGFyYW1ldGVyIChpbnRyb2R1Y2VkIGluIDIuNi4zNykgd2hpY2ggcHJvdmlkZXMKKwl0aGUgYm90aCBwb3NzaWJpbGl0aWVzLiBJZiB3ZSByZW1vdmUgbm9zd2FwYWNjb3VudCB3ZSB3aWxsIGhhdmUKKwlsZXNzIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhbmQgd2UKKwljYW4gYWxzbyBjbGVhbnVwIHRoZSBwYXJhbWV0ZXIgaGFuZGxpbmcgYSBiaXQgKCkuCitXaG86CU1pY2hhbCBIb2NrbyA8bWhvY2tvQHN1c2UuY3o+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL250ZnMudHh0CmluZGV4IDZlZjhjZjMuLjkzM2JjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9udGZzLnR4dApAQCAtNDYwLDYgKzQ2MCw4IEBACiAyLjEuMzA6CiAJLSBGaXggd3JpdGV2KCkgKGl0IGtlcHQgd3JpdGluZyB0aGUgZmlyc3Qgc2VnbWVudCBvdmVyIGFuZCBvdmVyIGFnYWluCiAJICBpbnN0ZWFkIG9mIG1vdmluZyBvbnRvIHN1YnNlcXVlbnQgc2VnbWVudHMpLgorCS0gRml4IGNyYXNoIGluIG50ZnNfbWZ0X3JlY29yZF9hbGxvYygpIHdoZW4gbWFwcGluZyB0aGUgbmV3IGV4dGVudCBtZnQKKwkgIHJlY29yZCBmYWlsZWQuCiAyLjEuMjk6CiAJLSBGaXggYSBkZWFkbG9jayB3aGVuIG1vdW50aW5nIHJlYWQtd3JpdGUuCiAyLjEuMjg6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2pjNDIKaW5kZXggMGU3NmVmMS4uYTIyZWNmNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vamM0MgpAQCAtNTEsNyArNTEsOCBAQAogICAqIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvciBjaGlwcwogICAgIFByZWZpeDogJ2pjNDInCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDE4IC0gMHgxZgotICAgIERhdGFzaGVldDogLQorICAgIERhdGFzaGVldDoKKwlodHRwOi8vd3d3LmplZGVjLm9yZy9zaXRlcy9kZWZhdWx0L2ZpbGVzL2RvY3MvNF8wMV8wNFIxOS5wZGYKIAogQXV0aG9yOgogCUd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgpAQCAtNjAsNyArNjEsMTEgQEAKIERlc2NyaXB0aW9uCiAtLS0tLS0tLS0tLQogCi1UaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMuCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEpFREVDIEpDIDQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMsCit3aGljaCBhcmUgdXNlZCBvbiBtYW55IEREUjMgbWVtb3J5IG1vZHVsZXMgZm9yIG1vYmlsZSBkZXZpY2VzIGFuZCBzZXJ2ZXJzLiBTb21lCitzeXN0ZW1zIHVzZSB0aGUgc2Vuc29yIHRvIHByZXZlbnQgbWVtb3J5IG92ZXJoZWF0aW5nIGJ5IGF1dG9tYXRpY2FsbHkgdGhyb3R0bGluZwordGhlIG1lbW9yeSBjb250cm9sbGVyLgorCiBUaGUgZHJpdmVyIGF1dG8tZGV0ZWN0cyB0aGUgY2hpcHMgbGlzdGVkIGFib3ZlLCBidXQgY2FuIGJlIG1hbnVhbGx5IGluc3RhbnRpYXRlZAogdG8gc3VwcG9ydCBvdGhlciBKQyA0Mi40IGNvbXBsaWFudCBjaGlwcy4KIApAQCAtODEsMTUgKzg2LDE5IEBACiB3aGljaCBhcHBsaWVzIHRvIGFsbCBsaW1pdHMuIFRoaXMgcmVnaXN0ZXIgY2FuIGJlIHdyaXR0ZW4gYnkgd3JpdGluZyBpbnRvCiB0ZW1wMV9jcml0X2h5c3QuIE90aGVyIGh5c3RlcmVzaXMgYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgogCitJZiB0aGUgQklPUyBoYXMgY29uZmlndXJlZCB0aGUgc2Vuc29yIGZvciBhdXRvbWF0aWMgdGVtcGVyYXR1cmUgbWFuYWdlbWVudCwgaXQKK2lzIGxpa2VseSB0aGF0IGl0IGhhcyBsb2NrZWQgdGhlIHJlZ2lzdGVycywgaS5lLiwgdGhhdCB0aGUgdGVtcGVyYXR1cmUgbGltaXRzCitjYW5ub3QgYmUgY2hhbmdlZC4KKwogU3lzZnMgZW50cmllcwogLS0tLS0tLS0tLS0tLQogCiB0ZW1wMV9pbnB1dAkJVGVtcGVyYXR1cmUgKFJPKQotdGVtcDFfbWluCQlNaW5pbXVtIHRlbXBlcmF0dXJlIChSVykKLXRlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZSAoUlcpCi10ZW1wMV9jcml0CQlDcml0aWNhbCBoaWdoIHRlbXBlcmF0dXJlIChSVykKK3RlbXAxX21pbgkJTWluaW11bSB0ZW1wZXJhdHVyZSAoUk8gb3IgUlcpCit0ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUgKFJPIG9yIFJXKQordGVtcDFfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZSAoUk8gb3IgUlcpCiAKLXRlbXAxX2NyaXRfaHlzdAkJQ3JpdGljYWwgaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSAoUlcpCit0ZW1wMV9jcml0X2h5c3QJCUNyaXRpY2FsIGh5c3RlcmVzaXMgdGVtcGVyYXR1cmUgKFJPIG9yIFJXKQogdGVtcDFfbWF4X2h5c3QJCU1heGltdW0gaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSAoUk8pCiAKIHRlbXAxX21pbl9hbGFybQkJVGVtcGVyYXR1cmUgbG93IGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2sxMHRlbXAKaW5kZXggNjUyNmVlZS4uZDJiNTZhNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9rMTB0ZW1wCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vazEwdGVtcApAQCAtOSw2ICs5LDggQEAKICAgU29ja2V0IFMxRzM6IEF0aGxvbiBJSSwgU2VtcHJvbiwgVHVyaW9uIElJCiAqIEFNRCBGYW1pbHkgMTFoIHByb2Nlc3NvcnM6CiAgIFNvY2tldCBTMUcyOiBBdGhsb24gKFgyKSwgU2VtcHJvbiAoWDIpLCBUdXJpb24gWDIgKFVsdHJhKQorKiBBTUQgRmFtaWx5IDEyaCBwcm9jZXNzb3JzOiAiTGxhbm8iCisqIEFNRCBGYW1pbHkgMTRoIHByb2Nlc3NvcnM6ICJCcmF6b3MiIChDL0UvRy1TZXJpZXMpCiAKICAgUHJlZml4OiAnazEwdGVtcCcKICAgQWRkcmVzc2VzIHNjYW5uZWQ6IFBDSSBzcGFjZQpAQCAtMTcsMTAgKzE5LDE0IEBACiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvMzExMTYucGRmCiAgIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSAoQktERykgZm9yIEFNRCBGYW1pbHkgMTFoIFByb2Nlc3NvcnM6CiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDEyNTYucGRmCisgIEJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXIncyBHdWlkZSAoQktERykgZm9yIEFNRCBGYW1pbHkgMTRoIE1vZGVscyAwMGgtMEZoIFByb2Nlc3NvcnM6CisgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMxNzAucGRmCiAgIFJldmlzaW9uIEd1aWRlIGZvciBBTUQgRmFtaWx5IDEwaCBQcm9jZXNzb3JzOgogICAgIGh0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQxMzIyLnBkZgogICBSZXZpc2lvbiBHdWlkZSBmb3IgQU1EIEZhbWlseSAxMWggUHJvY2Vzc29yczoKICAgICBodHRwOi8vc3VwcG9ydC5hbWQuY29tL3VzL1Byb2Nlc3Nvcl9UZWNoRG9jcy80MTc4OC5wZGYKKyAgUmV2aXNpb24gR3VpZGUgZm9yIEFNRCBGYW1pbHkgMTRoIE1vZGVscyAwMGgtMEZoIFByb2Nlc3NvcnM6CisgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDc1MzQucGRmCiAgIEFNRCBGYW1pbHkgMTFoIFByb2Nlc3NvciBQb3dlciBhbmQgVGhlcm1hbCBEYXRhIFNoZWV0IGZvciBOb3RlYm9va3M6CiAgICAgaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9Qcm9jZXNzb3JfVGVjaERvY3MvNDMzNzMucGRmCiAgIEFNRCBGYW1pbHkgMTBoIFNlcnZlciBhbmQgV29ya3N0YXRpb24gUHJvY2Vzc29yIFBvd2VyIGFuZCBUaGVybWFsIERhdGEgU2hlZXQ6CkBAIC0zNCw3ICs0MCw3IEBACiAtLS0tLS0tLS0tLQogCiBUaGlzIGRyaXZlciBwZXJtaXRzIHJlYWRpbmcgb2YgdGhlIGludGVybmFsIHRlbXBlcmF0dXJlIHNlbnNvciBvZiBBTUQKLUZhbWlseSAxMGggYW5kIDExaCBwcm9jZXNzb3JzLgorRmFtaWx5IDEwaC8xMWgvMTJoLzE0aCBwcm9jZXNzb3JzLgogCiBBbGwgdGhlc2UgcHJvY2Vzc29ycyBoYXZlIGEgc2Vuc29yLCBidXQgb24gdGhvc2UgZm9yIFNvY2tldCBGIG9yIEFNMissCiB0aGUgc2Vuc29yIG1heSByZXR1cm4gaW5jb25zaXN0ZW50IHZhbHVlcyAoZXJyYXR1bSAzMTkpLiAgVGhlIGRyaXZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiNzJlMDcxLi5mNGEwNGMwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDMsMTEgKzQzLDExIEBACiAJQVZSMzIJQVZSMzIgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJQVgyNQlBcHByb3ByaWF0ZSBBWC4yNSBzdXBwb3J0IGlzIGVuYWJsZWQuCiAJQkxBQ0tGSU4gQmxhY2tmaW4gYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCisJRFJNCURpcmVjdCBSZW5kZXJpbmcgTWFuYWdlbWVudCBzdXBwb3J0IGlzIGVuYWJsZWQuCisJRFlOQU1JQ19ERUJVRyBCdWlsZCBpbiBkZWJ1ZyBtZXNzYWdlcyBhbmQgZW5hYmxlIHRoZW0gYXQgcnVudGltZQogCUVERAlCSU9TIEVuaGFuY2VkIERpc2sgRHJpdmUgU2VydmljZXMgKEVERCkgaXMgZW5hYmxlZAogCUVGSQlFRkkgUGFydGl0aW9uaW5nIChHUFQpIGlzIGVuYWJsZWQKIAlFSURFCUVJREUvQVRBUEkgc3VwcG9ydCBpcyBlbmFibGVkLgotCURSTQlEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZW1lbnQgc3VwcG9ydCBpcyBlbmFibGVkLgotCURZTkFNSUNfREVCVUcgQnVpbGQgaW4gZGVidWcgbWVzc2FnZXMgYW5kIGVuYWJsZSB0aGVtIGF0IHJ1bnRpbWUKIAlGQglUaGUgZnJhbWUgYnVmZmVyIGRldmljZSBpcyBlbmFibGVkLgogCUdDT1YJR0NPViBwcm9maWxpbmcgaXMgZW5hYmxlZC4KIAlIVwlBcHByb3ByaWF0ZSBoYXJkd2FyZSBpcyBlbmFibGVkLgpAQCAtMTQ0LDYgKzE0NCwxMSBAQAogYW5kIGlzIGJldHdlZW4gMjU2IGFuZCA0MDk2IGNoYXJhY3RlcnMuIEl0IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUKIC4vaW5jbHVkZS9hc20vc2V0dXAuaCBhcyBDT01NQU5EX0xJTkVfU0laRS4KIAorRmluYWxseSwgdGhlIFtLTUddIHN1ZmZpeCBpcyBjb21tb25seSBkZXNjcmliZWQgYWZ0ZXIgYSBudW1iZXIgb2Yga2VybmVsCitwYXJhbWV0ZXIgdmFsdWVzLiBUaGVzZSAnSycsICdNJywgYW5kICdHJyBsZXR0ZXJzIHJlcHJlc2VudCB0aGUgX2JpbmFyeV8KK211bHRpcGxpZXJzICdLaWxvJywgJ01lZ2EnLCBhbmQgJ0dpZ2EnLCBlcXVhbGxpbmcgMl4xMCwgMl4yMCwgYW5kIDJeMzAKK2J5dGVzIHJlc3BlY3RpdmVseS4gU3VjaCBsZXR0ZXIgc3VmZml4ZXMgY2FuIGFsc28gYmUgZW50aXJlbHkgb21pdHRlZC4KKwogCiAJYWNwaT0JCVtIVyxBQ1BJLFg4Nl0KIAkJCUFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZQpAQCAtNTQ1LDE2ICs1NTAsMjAgQEAKIAkJCUZvcm1hdDoKIAkJCTxmaXJzdF9zbG90Piw8bGFzdF9zbG90Piw8cG9ydD4sPGVudW1fYml0PlssPGRlYnVnPl0KIAotCWNyYXNoa2VybmVsPW5uW0tNR11Ac3NbS01HXQotCQkJW0tOTF0gUmVzZXJ2ZSBhIGNodW5rIG9mIHBoeXNpY2FsIG1lbW9yeSB0bwotCQkJaG9sZCBhIGtlcm5lbCB0byBzd2l0Y2ggdG8gd2l0aCBrZXhlYyBvbiBwYW5pYy4KKwljcmFzaGtlcm5lbD1zaXplW0tNR11bQG9mZnNldFtLTUddXQorCQkJW0tOTF0gVXNpbmcga2V4ZWMsIExpbnV4IGNhbiBzd2l0Y2ggdG8gYSAnY3Jhc2gga2VybmVsJworCQkJdXBvbiBwYW5pYy4gVGhpcyBwYXJhbWV0ZXIgcmVzZXJ2ZXMgdGhlIHBoeXNpY2FsCisJCQltZW1vcnkgcmVnaW9uIFtvZmZzZXQsIG9mZnNldCArIHNpemVdIGZvciB0aGF0IGtlcm5lbAorCQkJaW1hZ2UuIElmICdAb2Zmc2V0JyBpcyBvbWl0dGVkLCB0aGVuIGEgc3VpdGFibGUgb2Zmc2V0CisJCQlpcyBzZWxlY3RlZCBhdXRvbWF0aWNhbGx5LiBDaGVjaworCQkJRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQgZm9yIGZ1cnRoZXIgZGV0YWlscy4KIAogCWNyYXNoa2VybmVsPXJhbmdlMTpzaXplMVsscmFuZ2UyOnNpemUyLC4uLl1bQG9mZnNldF0KIAkJCVtLTkxdIFNhbWUgYXMgYWJvdmUsIGJ1dCBkZXBlbmRzIG9uIHRoZSBtZW1vcnkKIAkJCWluIHRoZSBydW5uaW5nIHN5c3RlbS4gVGhlIHN5bnRheCBvZiByYW5nZSBpcwogCQkJc3RhcnQtW2VuZF0gd2hlcmUgc3RhcnQgYW5kIGVuZCBhcmUgYm90aAogCQkJYSBtZW1vcnkgdW5pdCAoYW1vdW50W0tNR10pLiBTZWUgYWxzbwotCQkJRG9jdW1lbnRhdGlvbi9rZHVtcC9rZHVtcC50eHQgZm9yIGEgZXhhbXBsZS4KKwkJCURvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGZvciBhbiBleGFtcGxlLgogCiAJY3M4OXgwX2RtYT0JW0hXLE5FVF0KIAkJCUZvcm1hdDogPGRtYT4KQEAgLTEyNjIsMTAgKzEyNzEsOSBAQAogCQkJNiAoS0VSTl9JTkZPKQkJaW5mb3JtYXRpb25hbAogCQkJNyAoS0VSTl9ERUJVRykJCWRlYnVnLWxldmVsIG1lc3NhZ2VzCiAKLQlsb2dfYnVmX2xlbj1uCVNldHMgdGhlIHNpemUgb2YgdGhlIHByaW50ayByaW5nIGJ1ZmZlciwgaW4gYnl0ZXMuCi0JCQlGb3JtYXQ6IHsgbiB8IG5rIHwgbk0gfQotCQkJbiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgVGhlIGRlZmF1bHQgc2l6ZQotCQkJaXMgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUuCisJbG9nX2J1Zl9sZW49bltLTUddCVNldHMgdGhlIHNpemUgb2YgdGhlIHByaW50ayByaW5nIGJ1ZmZlciwKKwkJCWluIGJ5dGVzLiAgbiBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgVGhlIGRlZmF1bHQKKwkJCXNpemUgaXMgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnIGZpbGUuCiAKIAlsb2dvLm5vbG9nbwlbRkJdIERpc2FibGVzIGRpc3BsYXkgb2YgdGhlIGJ1aWx0LWluIExpbnV4IGxvZ28uCiAJCQlUaGlzIG1heSBiZSB1c2VkIHRvIHByb3ZpZGUgbW9yZSBzY3JlZW4gc3BhY2UgZm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKaW5kZXggZmU1YzA5OS4uNGVkZDc4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWApAQCAtNDAsOCArNDAsNiBAQAogCS0gaW5mbyBvbiB1c2luZyB0aGUgREVDbmV0IG5ldHdvcmtpbmcgbGF5ZXIgaW4gTGludXguCiBkZXBjYS50eHQKIAktIHRoZSBEaWdpdGFsIERFUENBL0V0aGVyV09SS1MgREUxPz8gYW5kIERFMj8/IExBTkNFIEV0aGVybmV0IGRyaXZlcgotZGdycy50eHQKLQktIHRoZSBEaWdpIEludGVybmF0aW9uYWwgUmlnaHRTd2l0Y2ggU0UtWCBFdGhlcm5ldCBkcml2ZXIKIGRtZmUudHh0CiAJLSBpbmZvIG9uIHRoZSBEYXZpY29tIERNOTEwMihBKS9ETTkxMzIvRE05ODAxIGZhc3QgZXRoZXJuZXQgZHJpdmVyLgogZTEwMC50eHQKQEAgLTUwLDggKzQ4LDYgQEAKIAktIGluZm8gb24gSW50ZWwncyBFMTAwMCBsaW5lIG9mIGdpZ2FiaXQgZXRoZXJuZXQgYm9hcmRzCiBlcWwudHh0CiAJLSBzZXJpYWwgSVAgbG9hZCBiYWxhbmNpbmcKLWV0aGVydGFwLnR4dAotCS0gdGhlIEV0aGVydGFwIHVzZXIgc3BhY2UgcGFja2V0IHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uIGRyaXZlcgogZXdyazMudHh0CiAJLSB0aGUgRGlnaXRhbCBFdGhlcldPUktTIDMgREUyMDMvNC81IEV0aGVybmV0IGRyaXZlcgogZmlsdGVyLnR4dApAQCAtMTA0LDggKzEwMCw2IEBACiAJLSBUVU4vVEFQIGRldmljZSBkcml2ZXIsIGFsbG93aW5nIHVzZXIgc3BhY2UgUngvVHggb2YgcGFja2V0cy4KIHZvcnRleC50eHQKIAktIGluZm8gb24gdXNpbmcgM0NvbSBWb3J0ZXggKDNjNTkwLCAzYzU5MiwgM2M1OTUsIDNjNTk3KSBFdGhlcm5ldCBjYXJkcy4KLXdhdmVsYW4udHh0Ci0JLSBBVCZUIEdJUyAobmVlIE5DUikgV2F2ZUxBTiBjYXJkOiBBbiBFdGhlcm5ldC1saWtlIHJhZGlvIHRyYW5zY2VpdmVyCiB4MjUudHh0CiAJLSBnZW5lcmFsIGluZm8gb24gWC4yNSBkZXZlbG9wbWVudC4KIHgyNS1pZmFjZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9NYWtlZmlsZQppbmRleCA1YWJhN2EzLi4yNGMzMDhkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTWFrZWZpbGUKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL01ha2VmaWxlCkBAIC00LDYgKzQsOCBAQAogIyBMaXN0IG9mIHByb2dyYW1zIHRvIGJ1aWxkCiBob3N0cHJvZ3MteSA6PSBpZmVuc2xhdmUKIAorSE9TVENGTEFHU19pZmVuc2xhdmUubyArPSAtSSQob2JqdHJlZSkvdXNyL2luY2x1ZGUKKwogIyBUZWxsIGtidWlsZCB0byBhbHdheXMgYnVpbGQgdGhlIHByb2dyYW1zCiBhbHdheXMgOj0gJChob3N0cHJvZ3MteSkKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CmluZGV4IDVkYzYzODcuLjI1ZDJmNDEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTQ5LDcgKzQ5LDggQEAKIDMuMwlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHdpdGggSWZlbnNsYXZlCiAzLjMuMQkJQ29uZmlndXJpbmcgTXVsdGlwbGUgQm9uZHMgTWFudWFsbHkKIDMuNAlDb25maWd1cmluZyBCb25kaW5nIE1hbnVhbGx5IHZpYSBTeXNmcwotMy41CU92ZXJyaWRpbmcgQ29uZmlndXJhdGlvbiBmb3IgU3BlY2lhbCBDYXNlcworMy41CUNvbmZpZ3VyYXRpb24gd2l0aCBJbnRlcmZhY2VzIFN1cHBvcnQKKzMuNglPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKIAogNC4gUXVlcnlpbmcgQm9uZGluZyBDb25maWd1cmF0aW9uCiA0LjEJQm9uZGluZyBDb25maWd1cmF0aW9uCkBAIC0xNjEsOCArMTYyLDggQEAKIGRlZmF1bHQga2VybmVsIHNvdXJjZSBpbmNsdWRlIGRpcmVjdG9yeS4KIAogU0VDT05EIElNUE9SVEFOVCBOT1RFOgotCUlmIHlvdSBwbGFuIHRvIGNvbmZpZ3VyZSBib25kaW5nIHVzaW5nIHN5c2ZzLCB5b3UgZG8gbm90IG5lZWQKLXRvIHVzZSBpZmVuc2xhdmUuCisJSWYgeW91IHBsYW4gdG8gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgc3lzZnMgb3IgdXNpbmcgdGhlCisvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyBmaWxlLCB5b3UgZG8gbm90IG5lZWQgdG8gdXNlIGlmZW5zbGF2ZS4KIAogMi4gQm9uZGluZyBEcml2ZXIgT3B0aW9ucwogPT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzc5LDIyICs3ODAsMjYgQEAKIAogCVlvdSBjYW4gY29uZmlndXJlIGJvbmRpbmcgdXNpbmcgZWl0aGVyIHlvdXIgZGlzdHJvJ3MgbmV0d29yawogaW5pdGlhbGl6YXRpb24gc2NyaXB0cywgb3IgbWFudWFsbHkgdXNpbmcgZWl0aGVyIGlmZW5zbGF2ZSBvciB0aGUKLXN5c2ZzIGludGVyZmFjZS4gIERpc3Ryb3MgZ2VuZXJhbGx5IHVzZSBvbmUgb2YgdHdvIHBhY2thZ2VzIGZvciB0aGUKLW5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMgb3Igc3lzY29uZmlnLiAgUmVjZW50Ci12ZXJzaW9ucyBvZiB0aGVzZSBwYWNrYWdlcyBoYXZlIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHdoaWxlIG9sZGVyCitzeXNmcyBpbnRlcmZhY2UuICBEaXN0cm9zIGdlbmVyYWxseSB1c2Ugb25lIG9mIHRocmVlIHBhY2thZ2VzIGZvciB0aGUKK25ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0czogaW5pdHNjcmlwdHMsIHN5c2NvbmZpZyBvciBpbnRlcmZhY2VzLgorUmVjZW50IHZlcnNpb25zIG9mIHRoZXNlIHBhY2thZ2VzIGhhdmUgc3VwcG9ydCBmb3IgYm9uZGluZywgd2hpbGUgb2xkZXIKIHZlcnNpb25zIGRvIG5vdC4KIAogCVdlIHdpbGwgZmlyc3QgZGVzY3JpYmUgdGhlIG9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGJvbmRpbmcgZm9yCi1kaXN0cm9zIHVzaW5nIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzIGFuZCBzeXNjb25maWcgd2l0aCBmdWxsIG9yCi1wYXJ0aWFsIHN1cHBvcnQgZm9yIGJvbmRpbmcsIHRoZW4gcHJvdmlkZSBpbmZvcm1hdGlvbiBvbiBlbmFibGluZworZGlzdHJvcyB1c2luZyB2ZXJzaW9ucyBvZiBpbml0c2NyaXB0cywgc3lzY29uZmlnIGFuZCBpbnRlcmZhY2VzIHdpdGggZnVsbAorb3IgcGFydGlhbCBzdXBwb3J0IGZvciBib25kaW5nLCB0aGVuIHByb3ZpZGUgaW5mb3JtYXRpb24gb24gZW5hYmxpbmcKIGJvbmRpbmcgd2l0aG91dCBzdXBwb3J0IGZyb20gdGhlIG5ldHdvcmsgaW5pdGlhbGl6YXRpb24gc2NyaXB0cyAoaS5lLiwKIG9sZGVyIHZlcnNpb25zIG9mIGluaXRzY3JpcHRzIG9yIHN5c2NvbmZpZykuCiAKLQlJZiB5b3UncmUgdW5zdXJlIHdoZXRoZXIgeW91ciBkaXN0cm8gdXNlcyBzeXNjb25maWcgb3IKLWluaXRzY3JpcHRzLCBvciBkb24ndCBrbm93IGlmIGl0J3MgbmV3IGVub3VnaCwgaGF2ZSBubyBmZWFyLgorCUlmIHlvdSdyZSB1bnN1cmUgd2hldGhlciB5b3VyIGRpc3RybyB1c2VzIHN5c2NvbmZpZywKK2luaXRzY3JpcHRzIG9yIGludGVyZmFjZXMsIG9yIGRvbid0IGtub3cgaWYgaXQncyBuZXcgZW5vdWdoLCBoYXZlIG5vIGZlYXIuCiBEZXRlcm1pbmluZyB0aGlzIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuCiAKLQlGaXJzdCwgaXNzdWUgdGhlIGNvbW1hbmQ6CisJRmlyc3QsIGxvb2sgZm9yIGEgZmlsZSBjYWxsZWQgaW50ZXJmYWNlcyBpbiAvZXRjL25ldHdvcmsgZGlyZWN0b3J5LgorSWYgdGhpcyBmaWxlIGlzIHByZXNlbnQgaW4geW91ciBzeXN0ZW0sIHRoZW4geW91ciBzeXN0ZW0gdXNlIGludGVyZmFjZXMuIFNlZQorQ29uZmlndXJhdGlvbiB3aXRoIEludGVyZmFjZXMgU3VwcG9ydC4KKworCUVsc2UsIGlzc3VlIHRoZSBjb21tYW5kOgogCiAkIHJwbSAtcWYgL3NiaW4vaWZ1cAogCkBAIC0xMzI3LDggKzEzMzIsNjIgQEAKIGVjaG8gK2V0aDIgPiAvc3lzL2NsYXNzL25ldC9ib25kMS9ib25kaW5nL3NsYXZlcwogZWNobyArZXRoMyA+IC9zeXMvY2xhc3MvbmV0L2JvbmQxL2JvbmRpbmcvc2xhdmVzCiAKLTMuNSBPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKKzMuNSBDb25maWd1cmF0aW9uIHdpdGggSW50ZXJmYWNlcyBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgIFRoaXMgc2VjdGlvbiBhcHBsaWVzIHRvIGRpc3Ryb3Mgd2hpY2ggdXNlIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGZpbGUKK3RvIGRlc2NyaWJlIG5ldHdvcmsgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24sIG1vc3Qgbm90YWJseSBEZWJpYW4gYW5kIGl0J3MKK2Rlcml2YXRpdmVzLgorCisJVGhlIGlmdXAgYW5kIGlmZG93biBjb21tYW5kcyBvbiBEZWJpYW4gZG9uJ3Qgc3VwcG9ydCBib25kaW5nIG91dCBvZgordGhlIGJveC4gVGhlIGlmZW5zbGF2ZS0yLjYgcGFja2FnZSBzaG91bGQgYmUgaW5zdGFsbGVkIHRvIHByb3ZpZGUgYm9uZGluZworc3VwcG9ydC4gIE9uY2UgaW5zdGFsbGVkLCB0aGlzIHBhY2thZ2Ugd2lsbCBwcm92aWRlIGJvbmQtKiBvcHRpb25zIHRvIGJlIHVzZWQKK2ludG8gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMuCisKKwlOb3RlIHRoYXQgaWZlbnNsYXZlLTIuNiBwYWNrYWdlIHdpbGwgbG9hZCB0aGUgYm9uZGluZyBtb2R1bGUgYW5kIHVzZQordGhlIGlmZW5zbGF2ZSBjb21tYW5kIHdoZW4gYXBwcm9wcmlhdGUuCisKK0V4YW1wbGUgQ29uZmlndXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSW4gL2V0Yy9uZXR3b3JrL2ludGVyZmFjZXMsIHRoZSBmb2xsb3dpbmcgc3RhbnphIHdpbGwgY29uZmlndXJlIGJvbmQwLCBpbgorYWN0aXZlLWJhY2t1cCBtb2RlLCB3aXRoIGV0aDAgYW5kIGV0aDEgYXMgc2xhdmVzLgorCithdXRvIGJvbmQwCitpZmFjZSBib25kMCBpbmV0IGRoY3AKKwlib25kLXNsYXZlcyBldGgwIGV0aDEKKwlib25kLW1vZGUgYWN0aXZlLWJhY2t1cAorCWJvbmQtbWlpbW9uIDEwMAorCWJvbmQtcHJpbWFyeSBldGgwIGV0aDEKKworSWYgdGhlIGFib3ZlIGNvbmZpZ3VyYXRpb24gZG9lc24ndCB3b3JrLCB5b3UgbWlnaHQgaGF2ZSBhIHN5c3RlbSB1c2luZwordXBzdGFydCBmb3Igc3lzdGVtIHN0YXJ0dXAuIFRoaXMgaXMgbW9zdCBub3RhYmx5IHRydWUgZm9yIHJlY2VudAorVWJ1bnR1IHZlcnNpb25zLiBUaGUgZm9sbG93aW5nIHN0YW56YSBpbiAvZXRjL25ldHdvcmsvaW50ZXJmYWNlcyB3aWxsCitwcm9kdWNlIHRoZSBzYW1lIHJlc3VsdCBvbiB0aG9zZSBzeXN0ZW1zLgorCithdXRvIGJvbmQwCitpZmFjZSBib25kMCBpbmV0IGRoY3AKKwlib25kLXNsYXZlcyBub25lCisJYm9uZC1tb2RlIGFjdGl2ZS1iYWNrdXAKKwlib25kLW1paW1vbiAxMDAKKworYXV0byBldGgwCitpZmFjZSBldGgwIGluZXQgbWFudWFsCisJYm9uZC1tYXN0ZXIgYm9uZDAKKwlib25kLXByaW1hcnkgZXRoMCBldGgxCisKK2F1dG8gZXRoMQoraWZhY2UgZXRoMSBpbmV0IG1hbnVhbAorCWJvbmQtbWFzdGVyIGJvbmQwCisJYm9uZC1wcmltYXJ5IGV0aDAgZXRoMQorCitGb3IgYSBmdWxsIGxpc3Qgb2YgYm9uZC0qIHN1cHBvcnRlZCBvcHRpb25zIGluIC9ldGMvbmV0d29yay9pbnRlcmZhY2VzIGFuZCBzb21lCittb3JlIGFkdmFuY2VkIGV4YW1wbGVzIHRhaWxvcmVkIHRvIHlvdSBwYXJ0aWN1bGFyIGRpc3Ryb3MsIHNlZSB0aGUgZmlsZXMgaW4KKy91c3Ivc2hhcmUvZG9jL2lmZW5zbGF2ZS0yLjYuCisKKzMuNiBPdmVycmlkaW5nIENvbmZpZ3VyYXRpb24gZm9yIFNwZWNpYWwgQ2FzZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hlbiB1c2luZyB0aGUgYm9uZGluZyBkcml2ZXIsIHRoZSBwaHlzaWNhbCBwb3J0IHdoaWNoIHRyYW5zbWl0cyBhIGZyYW1lIGlzCiB0eXBpY2FsbHkgc2VsZWN0ZWQgYnkgdGhlIGJvbmRpbmcgZHJpdmVyLCBhbmQgaXMgbm90IHJlbGV2YW50IHRvIHRoZSB1c2VyIG9yCiBzeXN0ZW0gYWRtaW5pc3RyYXRvci4gIFRoZSBvdXRwdXQgcG9ydCBpcyBzaW1wbHkgc2VsZWN0ZWQgdXNpbmcgdGhlIHBvbGljaWVzIG9mCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kbnNfcmVzb2x2ZXIudHh0CmluZGV4IGFlZmQxZTYuLjA0Y2EwNjMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZG5zX3Jlc29sdmVyLnR4dApAQCAtNjEsNyArNjEsNiBAQAogCWNyZWF0ZQlkbnNfcmVzb2x2ZXIgIAlmb286KgkqCS91c3Ivc2Jpbi9kbnMuZm9vICVrCiAKIAotCiA9PT09PQogVVNBR0UKID09PT09CkBAIC0xMDQsNiArMTAzLDE0IEBACiAgICAgIHJldHVybmVkIGFsc28uCiAKIAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorUkVBRElORyBETlMgS0VZUyBGUk9NIFVTRVJTUEFDRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitLZXlzIG9mIGRuc19yZXNvbHZlciB0eXBlIGNhbiBiZSByZWFkIGZyb20gdXNlcnNwYWNlIHVzaW5nIGtleWN0bF9yZWFkKCkgb3IKKyJrZXljdGwgcmVhZC9wcmludC9waXBlIi4KKworCiA9PT09PT09PT0KIE1FQ0hBTklTTQogPT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGQ5OTk0MGQuLmFjM2I0YTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0xODcsNyArMTg3LDcgQEAKIHRjcF9kc2FjayAtIEJPT0xFQU4KIAlBbGxvd3MgVENQIHRvIHNlbmQgImR1cGxpY2F0ZSIgU0FDS3MuCiAKLXRjcF9lY24gLSBCT09MRUFOCit0Y3BfZWNuIC0gSU5URUdFUgogCUVuYWJsZSBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiAoRUNOKSBpbiBUQ1AuIEVDTiBpcyBvbmx5CiAJdXNlZCB3aGVuIGJvdGggZW5kcyBvZiB0aGUgVENQIGZsb3cgc3VwcG9ydCBpdC4gSXQgaXMgdXNlZnVsIHRvCiAJYXZvaWQgbG9zc2VzIGR1ZSB0byBjb25nZXN0aW9uICh3aGVuIHRoZSBib3R0bGVuZWNrIHJvdXRlciBzdXBwb3J0cwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0IGIvRG9jdW1lbnRhdGlvbi9zY2hlZHVsZXIvc2NoZWQtc3RhdHMudHh0CmluZGV4IDAxZTY5NDAuLjFjZDVkNTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NoZWR1bGVyL3NjaGVkLXN0YXRzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NjaGVkdWxlci9zY2hlZC1zdGF0cy50eHQKQEAgLTEsMyArMSw3IEBACitWZXJzaW9uIDE1IG9mIHNjaGVkc3RhdHMgZHJvcHBlZCBjb3VudGVycyBmb3Igc29tZSBzY2hlZF95aWVsZDoKK3lsZF9leHBfZW1wdHksIHlsZF9hY3RfZW1wdHkgYW5kIHlsZF9ib3RoX2VtcHR5LiBPdGhlcndpc2UsIGl0IGlzCitpZGVudGljYWwgdG8gdmVyc2lvbiAxNC4KKwogVmVyc2lvbiAxNCBvZiBzY2hlZHN0YXRzIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHNjaGVkX2RvbWFpbnMsIHdoaWNoIGhpdCB0aGUKIG1haW5saW5lIGtlcm5lbCBpbiAyLjYuMjAgYWx0aG91Z2ggaXQgaXMgaWRlbnRpY2FsIHRvIHRoZSBzdGF0cyBmcm9tIHZlcnNpb24KIDEyIHdoaWNoIHdhcyBpbiB0aGUga2VybmVsIGZyb20gMi42LjEzLTIuNi4xOSAodmVyc2lvbiAxMyBuZXZlciBzYXcgYSBrZXJuZWwKQEAgLTI4LDMyICszMiwyNSBAQAogCiBDUFUgc3RhdGlzdGljcwogLS0tLS0tLS0tLS0tLS0KLWNwdTxOPiAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMgorY3B1PE4+IDEgMiAzIDQgNSA2IDcgOCA5CiAKLU5PVEU6IEluIHRoZSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpY3MsIHRoZSBhY3RpdmUgcXVldWUgaXMgY29uc2lkZXJlZCBlbXB0eQotICAgIGlmIGl0IGhhcyBvbmx5IG9uZSBwcm9jZXNzIGluIGl0LCBzaW5jZSBvYnZpb3VzbHkgdGhlIHByb2Nlc3MgY2FsbGluZwotICAgIHNjaGVkX3lpZWxkKCkgaXMgdGhhdCBwcm9jZXNzLgotCi1GaXJzdCBmb3VyIGZpZWxkcyBhcmUgc2NoZWRfeWllbGQoKSBzdGF0aXN0aWNzOgotICAgICAxKSAjIG9mIHRpbWVzIGJvdGggdGhlIGFjdGl2ZSBhbmQgdGhlIGV4cGlyZWQgcXVldWUgd2VyZSBlbXB0eQotICAgICAyKSAjIG9mIHRpbWVzIGp1c3QgdGhlIGFjdGl2ZSBxdWV1ZSB3YXMgZW1wdHkKLSAgICAgMykgIyBvZiB0aW1lcyBqdXN0IHRoZSBleHBpcmVkIHF1ZXVlIHdhcyBlbXB0eQotICAgICA0KSAjIG9mIHRpbWVzIHNjaGVkX3lpZWxkKCkgd2FzIGNhbGxlZAorRmlyc3QgZmllbGQgaXMgYSBzY2hlZF95aWVsZCgpIHN0YXRpc3RpYzoKKyAgICAgMSkgIyBvZiB0aW1lcyBzY2hlZF95aWVsZCgpIHdhcyBjYWxsZWQKIAogTmV4dCB0aHJlZSBhcmUgc2NoZWR1bGUoKSBzdGF0aXN0aWNzOgotICAgICA1KSAjIG9mIHRpbWVzIHdlIHN3aXRjaGVkIHRvIHRoZSBleHBpcmVkIHF1ZXVlIGFuZCByZXVzZWQgaXQKLSAgICAgNikgIyBvZiB0aW1lcyBzY2hlZHVsZSgpIHdhcyBjYWxsZWQKLSAgICAgNykgIyBvZiB0aW1lcyBzY2hlZHVsZSgpIGxlZnQgdGhlIHByb2Nlc3NvciBpZGxlCisgICAgIDIpICMgb2YgdGltZXMgd2Ugc3dpdGNoZWQgdG8gdGhlIGV4cGlyZWQgcXVldWUgYW5kIHJldXNlZCBpdAorICAgICAzKSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgd2FzIGNhbGxlZAorICAgICA0KSAjIG9mIHRpbWVzIHNjaGVkdWxlKCkgbGVmdCB0aGUgcHJvY2Vzc29yIGlkbGUKIAogTmV4dCB0d28gYXJlIHRyeV90b193YWtlX3VwKCkgc3RhdGlzdGljczoKLSAgICAgOCkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQKLSAgICAgOSkgIyBvZiB0aW1lcyB0cnlfdG9fd2FrZV91cCgpIHdhcyBjYWxsZWQgdG8gd2FrZSB1cCB0aGUgbG9jYWwgY3B1CisgICAgIDUpICMgb2YgdGltZXMgdHJ5X3RvX3dha2VfdXAoKSB3YXMgY2FsbGVkCisgICAgIDYpICMgb2YgdGltZXMgdHJ5X3RvX3dha2VfdXAoKSB3YXMgY2FsbGVkIHRvIHdha2UgdXAgdGhlIGxvY2FsIGNwdQogCiBOZXh0IHRocmVlIGFyZSBzdGF0aXN0aWNzIGRlc2NyaWJpbmcgc2NoZWR1bGluZyBsYXRlbmN5OgotICAgIDEwKSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgcnVubmluZyBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gamlmZmllcykKLSAgICAxMSkgc3VtIG9mIGFsbCB0aW1lIHNwZW50IHdhaXRpbmcgdG8gcnVuIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbgorICAgICA3KSBzdW0gb2YgYWxsIHRpbWUgc3BlbnQgcnVubmluZyBieSB0YXNrcyBvbiB0aGlzIHByb2Nlc3NvciAoaW4gamlmZmllcykKKyAgICAgOCkgc3VtIG9mIGFsbCB0aW1lIHNwZW50IHdhaXRpbmcgdG8gcnVuIGJ5IHRhc2tzIG9uIHRoaXMgcHJvY2Vzc29yIChpbgogICAgICAgICBqaWZmaWVzKQotICAgIDEyKSAjIG9mIHRpbWVzbGljZXMgcnVuIG9uIHRoaXMgY3B1CisgICAgIDkpICMgb2YgdGltZXNsaWNlcyBydW4gb24gdGhpcyBjcHUKIAogCiBEb21haW4gc3RhdGlzdGljcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0hELUF1ZGlvLU1vZGVscy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAppbmRleCAxNmFlNDMwLi4wY2FmNzdlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvSEQtQXVkaW8tTW9kZWxzLnR4dApAQCAtMjk2LDYgKzI5Niw3IEBACiA9PT09PT09PT09PT09CiAgIGxhcHRvcAlCYXNpYyBMYXB0b3AgY29uZmlnIChkZWZhdWx0KQogICBocC1sYXB0b3AJSFAgbGFwdG9wcywgZSBnIEc2MAorICBhc3VzCQlBc3VzIEs1MkpVLCBMZW5vdm8gRzU2MAogICBkZWxsLWxhcHRvcAlEZWxsIGxhcHRvcHMKICAgZGVsbC12b3N0cm8JRGVsbCBWb3N0cm8KICAgb2xwYy14by0xXzUJT0xQQyBYTyAxLjUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dCBiL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dAppbmRleCA5OTZhMjdkLi4wMWM1MTNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CkBAIC0xOTAsOSArMTkwLDkgQEAKIAkqIExvbmcgcnVubmluZyBDUFUgaW50ZW5zaXZlIHdvcmtsb2FkcyB3aGljaCBjYW4gYmUgYmV0dGVyCiAJICBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0gc2NoZWR1bGVyLgogCi0gIFdRX0ZSRUVaRUFCTEUKKyAgV1FfRlJFRVpBQkxFCiAKLQlBIGZyZWV6ZWFibGUgd3EgcGFydGljaXBhdGVzIGluIHRoZSBmcmVlemUgcGhhc2Ugb2YgdGhlIHN5c3RlbQorCUEgZnJlZXphYmxlIHdxIHBhcnRpY2lwYXRlcyBpbiB0aGUgZnJlZXplIHBoYXNlIG9mIHRoZSBzeXN0ZW0KIAlzdXNwZW5kIG9wZXJhdGlvbnMuICBXb3JrIGl0ZW1zIG9uIHRoZSB3cSBhcmUgZHJhaW5lZCBhbmQgbm8KIAluZXcgd29yayBpdGVtIHN0YXJ0cyBleGVjdXRpb24gdW50aWwgdGhhd2VkLgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDU1NTkyZjguLjU2MGVjY2UgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC04ODUsNyArODg1LDcgQEAKIAogQVJNL1FVQUxDT01NIE1TTSBNQUNISU5FIFNVUFBPUlQKIE06CURhdmlkIEJyb3duIDxkYXZpZGJAY29kZWF1cm9yYS5vcmc+Ci1NOglEYW5pZWwgV2Fsa2VyIDxkd2Fsa2VyQGNvZGVhdXJvcmEub3JnPgorTToJRGFuaWVsIFdhbGtlciA8ZHdhbGtlckBmaWZvOTkuY29tPgogTToJQnJ5YW4gSHVudHNtYW4gPGJyeWFuaEBjb2RlYXVyb3JhLm9yZz4KIEw6CWxpbnV4LWFybS1tc21Admdlci5rZXJuZWwub3JnCiBGOglhcmNoL2FybS9tYWNoLW1zbS8KQEAgLTk3OCw2ICs5NzgsOCBAQAogRjoJYXJjaC9hcm0vcGxhdC1zYW1zdW5nLwogRjoJYXJjaC9hcm0vcGxhdC1zM2MyNHh4LwogRjoJYXJjaC9hcm0vcGxhdC1zNXAvCitGOglkcml2ZXJzLyovKnMzYzI0MTAqCitGOglkcml2ZXJzLyovKi8qczNjMjQxMCoKIAogQVJNL1MzQzI0MTAgQVJNIEFSQ0hJVEVDVFVSRQogTToJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgpAQCAtMTAwOCw2ICsxMDEwLDE1IEBACiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXM1cCovCiAKK0FSTS9TQU1TVU5HIE1PQklMRSBNQUNISU5FIFNVUFBPUlQKK006CUt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorUzoJTWFpbnRhaW5lZAorRjoJYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKK0Y6CWFyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYworRjoJYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtdW5pdmVyc2FsX2MyMTAuYworRjoJYXJjaC9hcm0vbWFjaC1leHlub3M0L21hY2gtbnVyaS5jCisKIEFSTS9TQU1TVU5HIFM1UCBTRVJJRVMgRklNQyBTVVBQT1JUCiBNOglLeXVuZ21pbiBQYXJrIDxreXVuZ21pbi5wYXJrQHNhbXN1bmcuY29tPgogTToJU3lsd2VzdGVyIE5hd3JvY2tpIDxzLm5hd3JvY2tpQHNhbXN1bmcuY29tPgpAQCAtMTQ2NSw2ICsxNDc2LDcgQEAKIAogQk9ORElORyBEUklWRVIKIE06CUpheSBWb3NidXJnaCA8ZnViYXJAdXMuaWJtLmNvbT4KK006CUFuZHkgR29zcG9kYXJlayA8YW5keUBncmV5aG91c2UubmV0PgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9ib25kaW5nLwogUzoJU3VwcG9ydGVkCkBAIC0xNjkwLDYgKzE3MDIsMTMgQEAKIFM6CVN1cHBvcnRlZAogRjoJc2NyaXB0cy9jaGVja3BhdGNoLnBsCiAKK0NISU5FU0UgRE9DVU1FTlRBVElPTgorTToJSGFycnkgV2VpIDxoYXJyeXhpeW91QGdtYWlsLmNvbT4KK0w6CXhpeW91bGludXhrZXJuZWxncm91cEBnb29nbGVncm91cHMuY29tCitMOglsaW51eC1rZXJuZWxAemgta2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL3poX0NOLworCiBDSVNDTyBWSUMgRVRIRVJORVQgTklDIERSSVZFUgogTToJVmFzYW50aHkgS29sbHVyaSA8dmtvbGx1cmlAY2lzY28uY29tPgogTToJUm9vcGEgUHJhYmh1IDxyb3ByYWJodUBjaXNjby5jb20+CkBAIC0yMDI0LDcgKzIwNDMsNyBAQAogRjoJZHJpdmVycy9zY3NpL2RjMzk1eC4qCiAKIERDQ1AgUFJPVE9DT0wKLU06CUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+CitNOglHZXJyaXQgUmVua2VyIDxnZXJyaXRAZXJnLmFiZG4uYWMudWs+CiBMOglkY2NwQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eGZvdW5kYXRpb24ub3JnL2NvbGxhYm9yYXRlL3dvcmtncm91cHMvbmV0d29ya2luZy9kY2NwCiBTOglNYWludGFpbmVkCkBAIC0yMTI0LDYgKzIxNDMsNyBAQAogRjoJZnMvZGxtLwogCiBETUEgR0VORVJJQyBPRkZMT0FEIEVOR0lORSBTVUJTWVNURU0KK006CVZpbm9kIEtvdWwgPHZpbm9kLmtvdWxAaW50ZWwuY29tPgogTToJRGFuIFdpbGxpYW1zIDxkYW4uai53aWxsaWFtc0BpbnRlbC5jb20+CiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvZG1hLwpAQCAtMjc3Miw2ICsyNzkyLDE1IEBACiBGOglkcml2ZXJzL2lzZG4vZ2lnYXNldC8KIEY6CWluY2x1ZGUvbGludXgvZ2lnYXNldF9kZXYuaAogCitHUElPIFNVQlNZU1RFTQorTToJR3JhbnQgTGlrZWx5IDxncmFudC5saWtlbHlAc2VjcmV0bGFiLmNhPgorTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorVDoJZ2l0IGdpdDovL2dpdC5zZWNyZXRsYWIuY2EvZ2l0L2xpbnV4LTIuNi5naXQKK0Y6CURvY3VtZW50YXRpb24vZ3Bpby9ncGlvLnR4dAorRjoJZHJpdmVycy9ncGlvLworRjoJaW5jbHVkZS9saW51eC9ncGlvKgorCiBHUkVUSCAxMC8xMDAvMUcgRXRoZXJuZXQgTUFDIGRldmljZSBkcml2ZXIKIE06CUtyaXN0b2ZmZXIgR2xlbWJvIDxrcmlzdG9mZmVyQGdhaXNsZXIuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwpAQCAtMjg2MSw3ICsyODkwLDYgQEAKIEw6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKIFc6CWh0dHA6Ly93d3cubG0tc2Vuc29ycy5vcmcvCiBUOglxdWlsdCBrZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2pkZWx2YXJlL2xpbnV4LTIuNi9qZGVsdmFyZS1od21vbi8KLVQ6CXF1aWx0IGtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZ3JvZWNrL2xpbnV4LXN0YWdpbmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dyb2Vjay9saW51eC1zdGFnaW5nLmdpdAogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi8KQEAgLTMxMzksNiArMzE2NywxMiBAQAogRjoJbmV0L2llZWU4MDIxNTQvCiBGOglkcml2ZXJzL2llZWU4MDIxNTQvCiAKK0lLQU5PUy9BREkgRUFHTEUgQURTTCBVU0IgRFJJVkVSCitNOglNYXR0aGlldSBDYXN0ZXQgPGNhc3RldC5tYXR0aGlldUBmcmVlLmZyPgorTToJU3RhbmlzbGF3IEdydXN6a2EgPHN0Zl94bEB3cC5wbD4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKKwogSU5URUdSSVRZIE1FQVNVUkVNRU5UIEFSQ0hJVEVDVFVSRSAoSU1BKQogTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KIFM6CVN1cHBvcnRlZApAQCAtMzMyNyw3ICszMzYxLDYgQEAKIEY6CWluY2x1ZGUvbGludXgvd2ltYXgvaTI0MDBtLmgKIAogSU5URUwgV0lSRUxFU1MgV0lGSSBMSU5LIChpd2x3aWZpKQotTToJUmVpbmV0dGUgQ2hhdHJlIDxyZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tPgogTToJV2V5LVlpIEd1eSA8d2V5LXlpLncuZ3V5QGludGVsLmNvbT4KIE06CUludGVsIExpbnV4IFdpcmVsZXNzIDxpbHdAbGludXguaW50ZWwuY29tPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCkBAIC0zNDk2LDcgKzM1MjksNyBAQAogRjoJRG9jdW1lbnRhdGlvbi9od21vbi9qYzQyCiAKIEpGUyBGSUxFU1lTVEVNCi1NOglEYXZlIEtsZWlrYW1wIDxzaGFnZ3lAbGludXgudm5ldC5pYm0uY29tPgorTToJRGF2ZSBLbGVpa2FtcCA8c2hhZ2d5QGtlcm5lbC5vcmc+CiBMOglqZnMtZGlzY3Vzc2lvbkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9qZnMuc291cmNlZm9yZ2UubmV0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zaGFnZ3kvamZzLTIuNi5naXQKQEAgLTM2NzQsNiArMzcwNywyOCBAQAogRjoJaW5jbHVkZS9rZXlzLwogRjoJc2VjdXJpdHkva2V5cy8KIAorS0VZUy1UUlVTVEVECitNOglEYXZpZCBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorTToJTWltaSBab2hhciA8em9oYXJAdXMuaWJtLmNvbT4KK0w6CWxpbnV4LXNlY3VyaXR5LW1vZHVsZUB2Z2VyLmtlcm5lbC5vcmcKK0w6CWtleXJpbmdzQGxpbnV4LW5mcy5vcmcKK1M6CVN1cHBvcnRlZAorRjoJRG9jdW1lbnRhdGlvbi9rZXlzLXRydXN0ZWQtZW5jcnlwdGVkLnR4dAorRjoJaW5jbHVkZS9rZXlzL3RydXN0ZWQtdHlwZS5oCitGOglzZWN1cml0eS9rZXlzL3RydXN0ZWQuYworRjoJc2VjdXJpdHkva2V5cy90cnVzdGVkLmgKKworS0VZUy1FTkNSWVBURUQKK006CU1pbWkgWm9oYXIgPHpvaGFyQHVzLmlibS5jb20+CitNOglEYXZpZCBTYWZmb3JkIDxzYWZmb3JkQHdhdHNvbi5pYm0uY29tPgorTDoJbGludXgtc2VjdXJpdHktbW9kdWxlQHZnZXIua2VybmVsLm9yZworTDoJa2V5cmluZ3NAbGludXgtbmZzLm9yZworUzoJU3VwcG9ydGVkCitGOglEb2N1bWVudGF0aW9uL2tleXMtdHJ1c3RlZC1lbmNyeXB0ZWQudHh0CitGOglpbmNsdWRlL2tleXMvZW5jcnlwdGVkLXR5cGUuaAorRjoJc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYworRjoJc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuaAorCiBLR0RCIC8gS0RCIC9kZWJ1Z19jb3JlCiBNOglKYXNvbiBXZXNzZWwgPGphc29uLndlc3NlbEB3aW5kcml2ZXIuY29tPgogVzoJaHR0cDovL2tnZGIud2lraS5rZXJuZWwub3JnLwpAQCAtNDU2Miw3ICs0NjE3LDcgQEAKIAogT1BFTiBGSVJNV0FSRSBBTkQgRkxBVFRFTkVEIERFVklDRSBUUkVFCiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+Ci1MOglkZXZpY2V0cmVlLWRpc2N1c3NAbGlzdHMub3psYWJzLm9yZworTDoJZGV2aWNldHJlZS1kaXNjdXNzQGxpc3RzLm96bGFicy5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL2ZkdC5zZWNyZXRsYWIuY2EKIFQ6CWdpdCBnaXQ6Ly9naXQuc2VjcmV0bGFiLmNhL2dpdC9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCkBAIC01MTI2LDYgKzUxODEsNyBAQAogCiBSQVBJRElPIFNVQlNZU1RFTQogTToJTWF0dCBQb3J0ZXIgPG1wb3J0ZXJAa2VybmVsLmNyYXNoaW5nLm9yZz4KK006CUFsZXhhbmRyZSBCb3VuaW5lIDxhbGV4YW5kcmUuYm91bmluZUBpZHQuY29tPgogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9yYXBpZGlvLwogCkBAIC01MjI4LDcgKzUyODQsNyBAQAogRjoJZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLwogCiBSVEw4MTg3IFdJUkVMRVNTIERSSVZFUgotTToJSGVydG9uIFJvbmFsZG8gS3J6ZXNpbnNraSA8aGVydG9uQG1hbmRyaXZhLmNvbS5icj4KK006CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBjYW5vbmljYWwuY29tPgogTToJSGluLVRhayBMZXVuZyA8aHRsMTBAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogTToJTGFycnkgRmluZ2VyIDxMYXJyeS5GaW5nZXJAbHdmaW5nZXIubmV0PgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCkBAIC01NTIyLDEyICs1NTc4LDExIEBACiBGOglkcml2ZXJzL3Njc2kvYmUyaXNjc2kvCiAKIFNFUlZFUiBFTkdJTkVTIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIERSSVZFUgotTToJU2F0aHlhIFBlcmxhIDxzYXRoeWFwQHNlcnZlcmVuZ2luZXMuY29tPgotTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1c0BzZXJ2ZXJlbmdpbmVzLmNvbT4KLU06CVNhcnZlc2h3YXIgQmFuZGkgPHNhcnZlc2h3YXJiQHNlcnZlcmVuZ2luZXMuY29tPgotTToJQWppdCBLaGFwYXJkZSA8YWppdGtAc2VydmVyZW5naW5lcy5jb20+CitNOglTYXRoeWEgUGVybGEgPHNhdGh5YS5wZXJsYUBlbXVsZXguY29tPgorTToJU3ViYnUgU2VldGhhcmFtYW4gPHN1YmJ1LnNlZXRoYXJhbWFuQGVtdWxleC5jb20+CitNOglBaml0IEtoYXBhcmRlIDxhaml0LmtoYXBhcmRlQGVtdWxleC5jb20+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3LnNlcnZlcmVuZ2luZXMuY29tCitXOglodHRwOi8vd3d3LmVtdWxleC5jb20KIFM6CVN1cHBvcnRlZAogRjoJZHJpdmVycy9uZXQvYmVuZXQvCiAKQEAgLTU1ODcsMTggKzU2NDIsMjAgQEAKIAogU0lNVEVDIEVCMTEwQVRYIChDaGFsaWNlIENBVFMpCiBQOglCZW4gRG9va3MKLU06CVZpbmNlbnQgU2FuZGVycyA8c3VwcG9ydEBzaW10ZWMuY28udWs+CitQOglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQHNpbXRlYy5jby51az4KK006CVNpbXRlYyBMaW51eCBUZWFtIDxsaW51eEBzaW10ZWMuY28udWs+CiBXOglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9FQjExMEFUWC8KIFM6CVN1cHBvcnRlZAogCiBTSU1URUMgRUIyNDEwSVRYIChCQVNUKQogUDoJQmVuIERvb2tzCi1NOglWaW5jZW50IFNhbmRlcnMgPHN1cHBvcnRAc2ltdGVjLmNvLnVrPgorUDoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBzaW10ZWMuY28udWs+CitNOglTaW10ZWMgTGludXggVGVhbSA8bGludXhAc2ltdGVjLmNvLnVrPgogVzoJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLwogUzoJU3VwcG9ydGVkCi1GOglhcmNoL2FybS9tYWNoLXMzYzI0MTAvCi1GOglkcml2ZXJzLyovKnMzYzI0MTAqCi1GOglkcml2ZXJzLyovKi8qczNjMjQxMCoKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworRjoJYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Jhc3QtaWRlLmMKK0Y6CWFyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCiAKIFRJIERBVklOQ0kgTUFDSElORSBTVVBQT1JUCiBNOglLZXZpbiBIaWxtYW4gPGtoaWxtYW5AZGVlcHJvb3RzeXN0ZW1zLmNvbT4KQEAgLTYwNjUsNyArNjEyMiw3IEBACiBGOglzZWN1cml0eS90b21veW8vCiAKIFRPUFNUQVIgTEFQVE9QIEVYVFJBUyBEUklWRVIKLU06CUhlcnRvbiBSb25hbGRvIEtyemVzaW5za2kgPGhlcnRvbkBtYW5kcml2YS5jb20uYnI+CitNOglIZXJ0b24gUm9uYWxkbyBLcnplc2luc2tpIDxoZXJ0b25AY2Fub25pY2FsLmNvbT4KIEw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3BzdGFyLWxhcHRvcC5jCkBAIC02NTczLDYgKzY2MzAsMTYgQEAKIEY6CWRyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCiBGOglpbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKIAorVklSVElPIENPUkUsIE5FVCBBTkQgQkxPQ0sgRFJJVkVSUworTToJUnVzdHkgUnVzc2VsbCA8cnVzdHlAcnVzdGNvcnAuY29tLmF1PgorTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgorTDoJdmlydHVhbGl6YXRpb25AbGlzdHMubGludXgtZm91bmRhdGlvbi5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdmlydGlvLworRjoJZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCitGOglkcml2ZXJzL2Jsb2NrL3ZpcnRpb19ibGsuYworRjoJaW5jbHVkZS9saW51eC92aXJ0aW9fKi5oCisKIFZJUlRJTyBIT1NUIChWSE9TVCkKIE06CSJNaWNoYWVsIFMuIFRzaXJraW4iIDxtc3RAcmVkaGF0LmNvbT4KIEw6CWt2bUB2Z2VyLmtlcm5lbC5vcmcKQEAgLTY3NDYsMTIgKzY4MTMsMTIgQEAKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS8qCiAKIFdMMTI3MSBXSVJFTEVTUyBEUklWRVIKLU06CUx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CitNOglMdWNpYW5vIENvZWxobyA8Y29lbGhvQHRpLmNvbT4KIEw6CWxpbnV4LXdpcmVsZXNzQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3dpcmVsZXNzLmtlcm5lbC5vcmcKK1c6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL3VzZXJzL0RyaXZlcnMvd2wxMnh4CiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2x1Y2Evd2wxMnh4LmdpdAogUzoJTWFpbnRhaW5lZAotRjoJZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MSoKK0Y6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC8KIEY6CWluY2x1ZGUvbGludXgvd2wxMnh4LmgKIAogV0wzNTAxIFdJUkVMRVNTIFBDTUNJQSBDQVJEIERSSVZFUgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxZjQ3NDk1Li41MDRmNzg4IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAzOAotRVhUUkFWRVJTSU9OID0gLXJjMgorRVhUUkFWRVJTSU9OID0gLXJjOAogTkFNRSA9IEZsZXNoLUVhdGluZyBCYXRzIHdpdGggRmFuZ3MKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCA0N2Y2M2Q0Li5jYzMxYmVjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC0xMSw2ICsxMSw3IEBACiAJc2VsZWN0IEhBVkVfR0VORVJJQ19IQVJESVJRUwogCXNlbGVjdCBHRU5FUklDX0lSUV9QUk9CRQogCXNlbGVjdCBBVVRPX0lSUV9BRkZJTklUWSBpZiBTTVAKKwlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19ERVBSRUNBVEVECiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnEuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCmluZGV4IDlhYjIzNGYuLmExOWQ2MDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycS5jCkBAIC00NCwxMSArNDQsMTYgQEAKIAogaW50IGlycV9zZWxlY3RfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzY1tpcnFdOworCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9nZXRfaXJxX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAJc3RhdGljIGludCBsYXN0X2NwdTsKIAlpbnQgY3B1ID0gbGFzdF9jcHUgKyAxOwogCi0JaWYgKCFkZXNjIHx8ICFnZXRfaXJxX2Rlc2NfY2hpcChkZXNjKS0+c2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCisJaWYgKCFkYXRhKQorCQlyZXR1cm4gMTsKKwljaGlwID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwKGRhdGEpOworCisJaWYgKCFjaGlwLT5pcnFfc2V0X2FmZmluaXR5IHx8IGlycV91c2VyX2FmZmluaXR5W2lycV0pCiAJCXJldHVybiAxOwogCiAJd2hpbGUgKCFjcHVfcG9zc2libGUoY3B1KSB8fApAQCAtNTYsOCArNjEsOCBAQAogCQljcHUgPSAoY3B1IDwgKE5SX0NQVVMtMSkgPyBjcHUgKyAxIDogMCk7CiAJbGFzdF9jcHUgPSBjcHU7CiAKLQljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIGNwdW1hc2tfb2YoY3B1KSk7Ci0JZ2V0X2lycV9kZXNjX2NoaXAoZGVzYyktPnNldF9hZmZpbml0eShpcnEsIGNwdW1hc2tfb2YoY3B1KSk7CisJY3B1bWFza19jb3B5KGRhdGEtPmFmZmluaXR5LCBjcHVtYXNrX29mKGNwdSkpOworCWNoaXAtPmlycV9zZXRfYWZmaW5pdHkoZGF0YSwgY3B1bWFza19vZihjcHUpLCBmYWxzZSk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2FscGhhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwppbmRleCAyZDA2NzliLi40MTFjYTExIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfYWxwaGEuYwpAQCAtMjI4LDE0ICsyMjgsOSBAQAogdm9pZCBfX2luaXQKIGluaXRfcnRjX2lycSh2b2lkKQogewotCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKFJUQ19JUlEpOwotCi0JaWYgKGRlc2MpIHsKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKLQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoUlRDX0lSUSwgJm5vX2lycV9jaGlwLAotCQkJaGFuZGxlX3NpbXBsZV9pcnEsICJSVEMiKTsKLQkJc2V0dXBfaXJxKFJUQ19JUlEsICZ0aW1lcl9pcnFhY3Rpb24pOwotCX0KKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShSVENfSVJRLCAmbm9faXJxX2NoaXAsCisJCQkJICAgICAgaGFuZGxlX3NpbXBsZV9pcnEsICJSVEMiKTsKKwlzZXR1cF9pcnEoUlRDX0lSUSwgJnRpbWVyX2lycWFjdGlvbik7CiB9CiAKIC8qIER1bW15IGlycWFjdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2k4MjU5LmMgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwppbmRleCA5NTZlYTBlLi5jN2NjOTgxIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaTgyNTkuYwpAQCAtMzMsMTAgKzMzLDEwIEBACiB9CiAKIGlubGluZSB2b2lkCi1pODI1OWFfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoraTgyNTlhX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNwaW5fbG9jaygmaTgyNTlfaXJxX2xvY2spOwotCWk4MjU5X3VwZGF0ZV9pcnFfaHcoaXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGlycSkpOworCWk4MjU5X3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IGQtPmlycSkpOwogCXNwaW5fdW5sb2NrKCZpODI1OV9pcnFfbG9jayk7CiB9CiAKQEAgLTQ3LDE2ICs0NywxOCBAQAogfQogCiB2b2lkCi1pODI1OWFfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2k4MjU5YV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZpODI1OV9pcnFfbG9jayk7Ci0JX19pODI1OWFfZGlzYWJsZV9pcnEoaXJxKTsKKwlfX2k4MjU5YV9kaXNhYmxlX2lycShkLT5pcnEpOwogCXNwaW5fdW5sb2NrKCZpODI1OV9pcnFfbG9jayk7CiB9CiAKIHZvaWQKLWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCitpODI1OWFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCXNwaW5fbG9jaygmaTgyNTlfaXJxX2xvY2spOwogCV9faTgyNTlhX2Rpc2FibGVfaXJxKGlycSk7CiAKQEAgLTcxLDkgKzczLDkgQEAKIAogc3RydWN0IGlycV9jaGlwIGk4MjU5YV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiWFQtUElDIiwKLQkudW5tYXNrCQk9IGk4MjU5YV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IGk4MjU5YV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBpODI1OWFfbWFza19hbmRfYWNrX2lycSwKKwkuaXJxX3VubWFzawk9IGk4MjU5YV9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGk4MjU5YV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaTgyNTlhX21hc2tfYW5kX2Fja19pcnEsCiB9OwogCiB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2ltcGwuaCBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9pbXBsLmgKaW5kZXggYjYzY2NkNy4uZDUwN2EyMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX2ltcGwuaAorKysgYi9hcmNoL2FscGhhL2tlcm5lbC9pcnFfaW1wbC5oCkBAIC0zMSwxMSArMzEsOSBAQAogCiBleHRlcm4gdm9pZCBjb21tb25faW5pdF9pc2FfZG1hKHZvaWQpOwogCi1leHRlcm4gdm9pZCBpODI1OWFfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgaTgyNTlhX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBpODI1OWFfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBpODI1OWFfc3RhcnR1cF9pcnEodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIGk4MjU5YV9lbmRfaXJxKHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBpODI1OWFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOworZXh0ZXJuIHZvaWQgaTgyNTlhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitleHRlcm4gdm9pZCBpODI1OWFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpOwogZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBpODI1OWFfaXJxX3R5cGU7CiBleHRlcm4gdm9pZCBpbml0X2k4MjU5YV9pcnFzKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfcHl4aXMuYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCmluZGV4IDI4NjM0NTguLmIzMDIyN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9weXhpcy5jCkBAIC0yOSwyMSArMjksMjEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1weXhpc19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitweXhpc19lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlweXhpc191cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayB8PSAxVUwgPDwgKGlycSAtIDE2KSk7CisJcHl4aXNfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChkLT5pcnEgLSAxNikpOwogfQogCiBzdGF0aWMgdm9pZAotcHl4aXNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3B5eGlzX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlweXhpc191cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayAmPSB+KDFVTCA8PCAoaXJxIC0gMTYpKSk7CisJcHl4aXNfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGQtPmlycSAtIDE2KSkpOwogfQogCiBzdGF0aWMgdm9pZAotcHl4aXNfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcHl4aXNfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKGlycSAtIDE2KTsKKwl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAoZC0+aXJxIC0gMTYpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IGNhY2hlZF9pcnFfbWFzayAmPSB+Yml0OwogCiAJLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0LiAgKi8KQEAgLTU4LDkgKzU4LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweXhpc19pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUFlYSVMiLAotCS5tYXNrX2Fjawk9IHB5eGlzX21hc2tfYW5kX2Fja19pcnEsCi0JLm1hc2sJCT0gcHl4aXNfZGlzYWJsZV9pcnEsCi0JLnVubWFzawkJPSBweXhpc19lbmFibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBweXhpc19tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfbWFzawk9IHB5eGlzX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrCT0gcHl4aXNfZW5hYmxlX2lycSwKIH07CiAKIHZvaWQgCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJaWYgKChpZ25vcmVfbWFzayA+PiBpKSAmIDEpCiAJCQljb250aW51ZTsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZweXhpc19pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCXNldHVwX2lycSgxNis3LCAmaXNhX2Nhc2NhZGVfaXJxYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYyBiL2FyY2gvYWxwaGEva2VybmVsL2lycV9zcm0uYwppbmRleCAwZTU3ZTgyLi44MmE0N2JiIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9pcnFfc3JtLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvaXJxX3NybS5jCkBAIC0xOCwyNyArMTgsMjcgQEAKIERFRklORV9TUElOTE9DSyhzcm1faXJxX2xvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXNybV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzcm1fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZzcm1faXJxX2xvY2spOwotCWNzZXJ2ZV9lbmEoaXJxIC0gMTYpOworCWNzZXJ2ZV9lbmEoZC0+aXJxIC0gMTYpOwogCXNwaW5fdW5sb2NrKCZzcm1faXJxX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZAotc3JtX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzcm1fZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXNwaW5fbG9jaygmc3JtX2lycV9sb2NrKTsKLQljc2VydmVfZGlzKGlycSAtIDE2KTsKKwljc2VydmVfZGlzKGQtPmlycSAtIDE2KTsKIAlzcGluX3VubG9jaygmc3JtX2lycV9sb2NrKTsKIH0KIAogLyogSGFuZGxlIGludGVycnVwdHMgZnJvbSB0aGUgU1JNLCBhc3N1bWluZyBubyBhZGRpdGlvbmFsIHdlaXJkbmVzcy4gICovCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNybV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiU1JNIiwKLQkudW5tYXNrCQk9IHNybV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHNybV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBzcm1fZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBzcm1fZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBzcm1fZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHNybV9kaXNhYmxlX2lycSwKIH07CiAKIHZvaWQgX19pbml0CkBAIC01Miw3ICs1Miw3IEBACiAJCWlmIChpIDwgNjQgJiYgKChpZ25vcmVfbWFzayA+PiBpKSAmIDEpKQogCQkJY29udGludWU7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmc3JtX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfYWxjb3IuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCmluZGV4IDdiZWY2MTcuLjg4ZDk1ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jCkBAIC00NCwzMSArNDQsMzEgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1hbGNvcl9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCithbGNvcl9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlhbGNvcl91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayB8PSAxVUwgPDwgKGlycSAtIDE2KSk7CisJYWxjb3JfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChkLT5pcnEgLSAxNikpOwogfQogCiBzdGF0aWMgdm9pZAotYWxjb3JfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2FsY29yX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQlhbGNvcl91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayAmPSB+KDFVTCA8PCAoaXJxIC0gMTYpKSk7CisJYWxjb3JfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGQtPmlycSAtIDE2KSkpOwogfQogCiBzdGF0aWMgdm9pZAotYWxjb3JfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorYWxjb3JfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JYWxjb3JfZGlzYWJsZV9pcnEoaXJxKTsKKwlhbGNvcl9kaXNhYmxlX2lycShkKTsKIAogCS8qIE9uIEFMQ09SL1hMVCwgbmVlZCB0byBkaXNtaXNzIGludGVycnVwdCB2aWEgR1JVLiAqLwotCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMSA8PCAoaXJxIC0gMTYpOyBtYigpOworCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMSA8PCAoZC0+aXJxIC0gMTYpOyBtYigpOwogCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMDsgbWIoKTsKIH0KIAogc3RhdGljIHZvaWQKLWFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCithbGNvcl9pc2FfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JaTgyNTlhX21hc2tfYW5kX2Fja19pcnEoaXJxKTsKKwlpODI1OWFfbWFza19hbmRfYWNrX2lycShkKTsKIAogCS8qIE9uIEFMQ09SL1hMVCwgbmVlZCB0byBkaXNtaXNzIGludGVycnVwdCB2aWEgR1JVLiAqLwogCSoodnVpcClHUlVfSU5UX0NMRUFSID0gMHg4MDAwMDAwMDsgbWIoKTsKQEAgLTc3LDkgKzc3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhbGNvcl9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiQUxDT1IiLAotCS51bm1hc2sJCT0gYWxjb3JfZW5hYmxlX2lycSwKLQkubWFzawkJPSBhbGNvcl9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBhbGNvcl9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gYWxjb3JfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBhbGNvcl9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gYWxjb3JfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjYsOSArMTI2LDkgQEAKIAkJaWYgKGkgPj0gMTYrMjAgJiYgaSA8PSAxNiszMCkKIAkJCWNvbnRpbnVlOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmFsY29yX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQotCWk4MjU5YV9pcnFfdHlwZS5hY2sgPSBhbGNvcl9pc2FfbWFza19hbmRfYWNrX2lycTsKKwlpODI1OWFfaXJxX3R5cGUuaXJxX2FjayA9IGFsY29yX2lzYV9tYXNrX2FuZF9hY2tfaXJxOwogCiAJaW5pdF9pODI1OWFfaXJxcygpOwogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19jYWJyaW9sZXQuYwppbmRleCBiMGM5MTY0Li41N2ViNjMwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfY2FicmlvbGV0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2NhYnJpb2xldC5jCkBAIC00NiwyMiArNDYsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1jYWJyaW9sZXRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY2FicmlvbGV0X2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGlycSkpOworCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGQtPmlycSkpOwogfQogCiBzdGF0aWMgdm9pZAotY2FicmlvbGV0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitjYWJyaW9sZXRfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBpcnEpOworCWNhYnJpb2xldF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBkLT5pcnEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGNhYnJpb2xldF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiQ0FCUklPTEVUIiwKLQkudW5tYXNrCQk9IGNhYnJpb2xldF9lbmFibGVfaXJxLAotCS5tYXNrCQk9IGNhYnJpb2xldF9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBjYWJyaW9sZXRfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBjYWJyaW9sZXRfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSBjYWJyaW9sZXRfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IGNhYnJpb2xldF9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWZvciAoaSA9IDE2OyBpIDwgMzU7ICsraSkgewogCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZjYWJyaW9sZXRfaXJxX3R5cGUsCiAJCQkJaGFuZGxlX2xldmVsX2lycSk7Ci0JCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKKwkJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19kcDI2NC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKaW5kZXggZWRhZDVmNy4uNDgxZGY0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2RwMjY0LmMKQEAgLTk4LDM3ICs5OCwzNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZHAyNjRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorZHAyNjRfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZkcDI2NF9pcnFfbG9jayk7Ci0JY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBpcnE7CisJY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCBkLT5pcnE7CiAJdHN1bmFtaV91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayk7CiAJc3Bpbl91bmxvY2soJmRwMjY0X2lycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKLWRwMjY0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitkcDI2NF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc3Bpbl9sb2NrKCZkcDI2NF9pcnFfbG9jayk7Ci0JY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGlycSk7CisJY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IGQtPmlycSk7CiAJdHN1bmFtaV91cGRhdGVfaXJxX2h3KGNhY2hlZF9pcnFfbWFzayk7CiAJc3Bpbl91bmxvY2soJmRwMjY0X2lycV9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQKLWNsaXBwZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorY2xpcHBlcl9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChpcnEgLSAxNik7CisJY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoZC0+aXJxIC0gMTYpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkCi1jbGlwcGVyX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitjbGlwcGVyX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSk7CisJY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IChkLT5pcnEgLSAxNikpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiB9CkBAIC0xNDksMTAgKzE0OSwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1kcDI2NF9zZXRfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQoteyAKK2RwMjY0X3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgYm9vbCBmb3JjZSkKK3sKIAlzcGluX2xvY2soJmRwMjY0X2lycV9sb2NrKTsKLQljcHVfc2V0X2lycV9hZmZpbml0eShpcnEsICphZmZpbml0eSk7CisJY3B1X3NldF9pcnFfYWZmaW5pdHkoZC0+aXJxLCAqYWZmaW5pdHkpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiAKQEAgLTE2MCwxMCArMTYxLDExIEBACiB9CiAKIHN0YXRpYyBpbnQKLWNsaXBwZXJfc2V0X2FmZmluaXR5KHVuc2lnbmVkIGludCBpcnEsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSkKLXsgCitjbGlwcGVyX3NldF9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgICBib29sIGZvcmNlKQorewogCXNwaW5fbG9jaygmZHAyNjRfaXJxX2xvY2spOwotCWNwdV9zZXRfaXJxX2FmZmluaXR5KGlycSAtIDE2LCAqYWZmaW5pdHkpOworCWNwdV9zZXRfaXJxX2FmZmluaXR5KGQtPmlycSAtIDE2LCAqYWZmaW5pdHkpOwogCXRzdW5hbWlfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2spOwogCXNwaW5fdW5sb2NrKCZkcDI2NF9pcnFfbG9jayk7CiAKQEAgLTE3MSwxOSArMTczLDE5IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZHAyNjRfaXJxX3R5cGUgPSB7Ci0JLm5hbWUJCT0gIkRQMjY0IiwKLQkudW5tYXNrCQk9IGRwMjY0X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZHAyNjRfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZHAyNjRfZGlzYWJsZV9pcnEsCi0JLnNldF9hZmZpbml0eQk9IGRwMjY0X3NldF9hZmZpbml0eSwKKwkubmFtZQkJCT0gIkRQMjY0IiwKKwkuaXJxX3VubWFzawkJPSBkcDI2NF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawkJPSBkcDI2NF9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCQk9IGRwMjY0X2Rpc2FibGVfaXJxLAorCS5pcnFfc2V0X2FmZmluaXR5CT0gZHAyNjRfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjbGlwcGVyX2lycV90eXBlID0gewotCS5uYW1lCQk9ICJDTElQUEVSIiwKLQkudW5tYXNrCQk9IGNsaXBwZXJfZW5hYmxlX2lycSwKLQkubWFzawkJPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAotCS5tYXNrX2Fjawk9IGNsaXBwZXJfZGlzYWJsZV9pcnEsCi0JLnNldF9hZmZpbml0eQk9IGNsaXBwZXJfc2V0X2FmZmluaXR5LAorCS5uYW1lCQkJPSAiQ0xJUFBFUiIsCisJLmlycV91bm1hc2sJCT0gY2xpcHBlcl9lbmFibGVfaXJxLAorCS5pcnFfbWFzawkJPSBjbGlwcGVyX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJCT0gY2xpcHBlcl9kaXNhYmxlX2lycSwKKwkuaXJxX3NldF9hZmZpbml0eQk9IGNsaXBwZXJfc2V0X2FmZmluaXR5LAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI2OCw4ICsyNzAsOCBAQAogewogCWxvbmcgaTsKIAlmb3IgKGkgPSBpbWluOyBpIDw9IGltYXg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksIG9wcywgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWI2NHAuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCmluZGV4IGFlNWYyOWQuLjQwMmU5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19lYjY0cC5jCkBAIC00NCwyMiArNDQsMjIgQEAKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCi1lYjY0cF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitlYjY0cF9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQllYjY0cF91cGRhdGVfaXJxX2h3KGlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBpcnEpKTsKKwllYjY0cF91cGRhdGVfaXJxX2h3KGQtPmlycSwgY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBkLT5pcnEpKTsKIH0KIAogc3RhdGljIHZvaWQKLWViNjRwX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitlYjY0cF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JZWI2NHBfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGlycSk7CisJZWI2NHBfdXBkYXRlX2lycV9odyhkLT5pcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IGQtPmlycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWI2NHBfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIkVCNjRQIiwKLQkudW5tYXNrCQk9IGViNjRwX2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZWI2NHBfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZWI2NHBfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBlYjY0cF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGViNjRwX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBlYjY0cF9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTE4LDkgKzExOCw5IEBACiAJaW5pdF9pODI1OWFfaXJxcygpOwogCiAJZm9yIChpID0gMTY7IGkgPCAzMjsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmViNjRwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQl9CQkKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKKwl9CiAKIAljb21tb25faW5pdF9pc2FfZG1hKCk7CiAJc2V0dXBfaXJxKDE2KzUsICZpc2FfY2FzY2FkZV9pcnFhY3Rpb24pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2VpZ2VyLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwppbmRleCAxMTIxYmM1Li4wYjQ0YTU0IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfZWlnZXIuYwpAQCAtNTEsMTYgKzUxLDE4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZWlnZXJfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorZWlnZXJfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJbWFzayA9IChjYWNoZWRfaXJxX21hc2tbaXJxID49IDY0XSAmPSB+KDFVTCA8PCAoaXJxICYgNjMpKSk7CiAJZWlnZXJfdXBkYXRlX2lycV9odyhpcnEsIG1hc2spOwogfQogCiBzdGF0aWMgdm9pZAotZWlnZXJfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK2VpZ2VyX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKGNhY2hlZF9pcnFfbWFza1tpcnEgPj0gNjRdIHw9IDFVTCA8PCAoaXJxICYgNjMpKTsKIAllaWdlcl91cGRhdGVfaXJxX2h3KGlycSwgbWFzayk7CkBAIC02OCw5ICs3MCw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZWlnZXJfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIkVJR0VSIiwKLQkudW5tYXNrCQk9IGVpZ2VyX2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gZWlnZXJfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gZWlnZXJfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSBlaWdlcl9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGVpZ2VyX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBlaWdlcl9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzYsOCArMTM4LDggQEAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CiAKIAlmb3IgKGkgPSAxNjsgaSA8IDEyODsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmVpZ2VyX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19qZW5zZW4uYwppbmRleCAzNGY1NWUwLi4wMDM0MWI3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfamVuc2VuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2plbnNlbi5jCkBAIC02MywzNCArNjMsMzQgQEAKICAqLwogCiBzdGF0aWMgdm9pZAotamVuc2VuX2xvY2FsX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoramVuc2VuX2xvY2FsX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogdGhlIHBhcnBvcnQgaXMgcmVhbGx5IGh3IElSUSAxLCBzaWxseSBKZW5zZW4uICAqLwotCWlmIChpcnEgPT0gNykKLQkJaTgyNTlhX2VuYWJsZV9pcnEoMSk7CisJaWYgKGQtPmlycSA9PSA3KQorCQlpODI1OWFfZW5hYmxlX2lycShkKTsKIH0KIAogc3RhdGljIHZvaWQKLWplbnNlbl9sb2NhbF9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCitqZW5zZW5fbG9jYWxfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyogdGhlIHBhcnBvcnQgaXMgcmVhbGx5IGh3IElSUSAxLCBzaWxseSBKZW5zZW4uICAqLwotCWlmIChpcnEgPT0gNykKLQkJaTgyNTlhX2Rpc2FibGVfaXJxKDEpOworCWlmIChkLT5pcnEgPT0gNykKKwkJaTgyNTlhX2Rpc2FibGVfaXJxKGQpOwogfQogCiBzdGF0aWMgdm9pZAotamVuc2VuX2xvY2FsX21hc2tfYWNrKHVuc2lnbmVkIGludCBpcnEpCitqZW5zZW5fbG9jYWxfbWFza19hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCS8qIHRoZSBwYXJwb3J0IGlzIHJlYWxseSBodyBJUlEgMSwgc2lsbHkgSmVuc2VuLiAgKi8KLQlpZiAoaXJxID09IDcpCi0JCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKDEpOworCWlmIChkLT5pcnEgPT0gNykKKwkJaTgyNTlhX21hc2tfYW5kX2Fja19pcnEoZCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgamVuc2VuX2xvY2FsX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJMT0NBTCIsCi0JLnVubWFzawkJPSBqZW5zZW5fbG9jYWxfZW5hYmxlLAotCS5tYXNrCQk9IGplbnNlbl9sb2NhbF9kaXNhYmxlLAotCS5tYXNrX2Fjawk9IGplbnNlbl9sb2NhbF9tYXNrX2FjaywKKwkuaXJxX3VubWFzawk9IGplbnNlbl9sb2NhbF9lbmFibGUsCisJLmlycV9tYXNrCT0gamVuc2VuX2xvY2FsX2Rpc2FibGUsCisJLmlycV9tYXNrX2Fjawk9IGplbnNlbl9sb2NhbF9tYXNrX2FjaywKIH07CiAKIHN0YXRpYyB2b2lkIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21hcnZlbC5jCmluZGV4IDJiZmM5ZjEuLmU2MTkxMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19tYXJ2ZWwuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWFydmVsLmMKQEAgLTEwNCw5ICsxMDQsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlvN19lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitpbzdfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqY3RsOworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJc3RydWN0IGlvNyAqaW83OwogCiAJY3RsID0gaW83X2dldF9pcnFfY3RsKGlycSwgJmlvNyk7CkBAIC0xMTUsNyArMTE2LDcgQEAKIAkJICAgICAgIF9fZnVuY19fLCBpcnEpOwogCQlyZXR1cm47CiAJfQotCQkKKwogCXNwaW5fbG9jaygmaW83LT5pcnFfbG9jayk7CiAJKmN0bCB8PSAxVUwgPDwgMjQ7CiAJbWIoKTsKQEAgLTEyNCw5ICsxMjUsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWlvN19kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoraW83X2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICpjdGw7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAlzdHJ1Y3QgaW83ICppbzc7CiAKIAljdGwgPSBpbzdfZ2V0X2lycV9jdGwoaXJxLCAmaW83KTsKQEAgLTEzNSw3ICsxMzcsNyBAQAogCQkgICAgICAgX19mdW5jX18sIGlycSk7CiAJCXJldHVybjsKIAl9Ci0JCQorCiAJc3Bpbl9sb2NrKCZpbzctPmlycV9sb2NrKTsKIAkqY3RsICY9IH4oMVVMIDw8IDI0KTsKIAltYigpOwpAQCAtMTQ0LDM1ICsxNDYsMjkgQEAKIH0KIAogc3RhdGljIHZvaWQKLW1hcnZlbF9pcnFfbm9vcCh1bnNpZ25lZCBpbnQgaXJxKSAKLXsgCi0JcmV0dXJuOyAKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotbWFydmVsX2lycV9ub29wX3JldHVybih1bnNpZ25lZCBpbnQgaXJxKSAKLXsgCi0JcmV0dXJuIDA7IAorbWFydmVsX2lycV9ub29wKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbWFydmVsX2xlZ2FjeV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiTEVHQUNZIiwKLQkubWFzawkJPSBtYXJ2ZWxfaXJxX25vb3AsCi0JLnVubWFzawkJPSBtYXJ2ZWxfaXJxX25vb3AsCisJLmlycV9tYXNrCT0gbWFydmVsX2lycV9ub29wLAorCS5pcnFfdW5tYXNrCT0gbWFydmVsX2lycV9ub29wLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbzdfbHNpX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJMU0kiLAotCS51bm1hc2sJCT0gaW83X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gaW83X2Rpc2FibGVfaXJxLAotCS5tYXNrX2Fjawk9IGlvN19kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IGlvN19lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IGlvN19kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gaW83X2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbzdfbXNpX2lycV90eXBlID0gewogCS5uYW1lCQk9ICJNU0kiLAotCS51bm1hc2sJCT0gaW83X2VuYWJsZV9pcnEsCi0JLm1hc2sJCT0gaW83X2Rpc2FibGVfaXJxLAotCS5hY2sJCT0gbWFydmVsX2lycV9ub29wLAorCS5pcnFfdW5tYXNrCT0gaW83X2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gaW83X2Rpc2FibGVfaXJxLAorCS5pcnFfYWNrCT0gbWFydmVsX2lycV9ub29wLAogfTsKIAogc3RhdGljIHZvaWQKQEAgLTI4MCw4ICsyNzYsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBsc2kgaXJxcy4gICovCiAJZm9yIChpID0gMDsgaSA8IDEyODsgKytpKSB7Ci0JCWlycV90b19kZXNjKGJhc2UgKyBpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGJhc2UgKyBpLCBsc2lfb3BzLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiAKIAkvKiBEaXNhYmxlIHRoZSBpbXBsZW1lbnRlZCBpcnFzIGluIGhhcmR3YXJlLiAgKi8KQEAgLTI5NCw4ICsyOTAsOCBAQAogCiAJLyogU2V0IHVwIHRoZSBtc2kgaXJxcy4gICovCiAJZm9yIChpID0gMTI4OyBpIDwgKDEyOCArIDUxMik7ICsraSkgewotCQlpcnFfdG9fZGVzYyhiYXNlICsgaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihiYXNlICsgaSwgbXNpX29wcywgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IDE2OyArK2kpCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfbWlrYXNhLmMKaW5kZXggYmNjMTYzOS4uY2Y3ZjQzZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX21pa2FzYS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19taWthc2EuYwpAQCAtNDMsMjIgKzQzLDIyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotbWlrYXNhX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK21pa2FzYV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoaXJxIC0gMTYpKTsKKwltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLW1pa2FzYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorbWlrYXNhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKLQltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChpcnEgLSAxNikpKTsKKwltaWthc2FfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtaWthc2FfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIk1JS0FTQSIsCi0JLnVubWFzawkJPSBtaWthc2FfZW5hYmxlX2lycSwKLQkubWFzawkJPSBtaWthc2FfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gbWlrYXNhX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrCT0gbWlrYXNhX2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gbWlrYXNhX2Rpc2FibGVfaXJxLAorCS5pcnFfbWFza19hY2sJPSBtaWthc2FfZGlzYWJsZV9pcnEsCiB9OwogCiBzdGF0aWMgdm9pZCAKQEAgLTk4LDggKzk4LDggQEAKIAltaWthc2FfdXBkYXRlX2lycV9odygwKTsKIAogCWZvciAoaSA9IDE2OyBpIDwgMzI7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZtaWthc2FfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCWluaXRfaTgyNTlhX2lycXMoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19ub3JpdGFrZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKaW5kZXggZTg4ZjRhZS4uOTJiYzE4OCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX25vcml0YWtlLmMKQEAgLTQ4LDIyICs0OCwyMiBAQAogfQogCiBzdGF0aWMgdm9pZAotbm9yaXRha2VfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorbm9yaXRha2VfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm9yaXRha2VfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayB8PSAxIDw8IChpcnEgLSAxNikpOworCW5vcml0YWtlX3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgfD0gMSA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLW5vcml0YWtlX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitub3JpdGFrZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0Jbm9yaXRha2VfdXBkYXRlX2lycV9odyhpcnEsIGNhY2hlZF9pcnFfbWFzayAmPSB+KDEgPDwgKGlycSAtIDE2KSkpOworCW5vcml0YWtlX3VwZGF0ZV9pcnFfaHcoZC0+aXJxLCBjYWNoZWRfaXJxX21hc2sgJj0gfigxIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBub3JpdGFrZV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiTk9SSVRBS0UiLAotCS51bm1hc2sJCT0gbm9yaXRha2VfZW5hYmxlX2lycSwKLQkubWFzawkJPSBub3JpdGFrZV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSBub3JpdGFrZV9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IG5vcml0YWtlX2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gbm9yaXRha2VfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IG5vcml0YWtlX2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHZvaWQgCkBAIC0xMjcsOCArMTI3LDggQEAKIAlvdXR3KDAsIDB4NTRjKTsKIAogCWZvciAoaSA9IDE2OyBpIDwgNDg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZub3JpdGFrZV9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yYXdoaWRlLmMKaW5kZXggNmE1MTM2NC4uOTM2ZDQxNCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Jhd2hpZGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcmF3aGlkZS5jCkBAIC01Niw5ICs1NiwxMCBAQAogICAoKChoKSA8IE1DUENJQV9NQVhfSE9TRVMpICYmIChjYWNoZWRfaXJxX21hc2tzWyhoKV0gIT0gMCkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKLXJhd2hpZGVfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcmF3aGlkZV9lbmFibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzaywgaG9zZTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCiAJaXJxIC09IDE2OwogCWhvc2UgPSBpcnEgLyAyNDsKQEAgLTc2LDkgKzc3LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIAotcmF3aGlkZV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcmF3aGlkZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IG1hc2ssIGhvc2U7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAogCWlycSAtPSAxNjsKIAlob3NlID0gaXJxIC8gMjQ7CkBAIC05Niw5ICs5OCwxMCBAQAogfQogCiBzdGF0aWMgdm9pZAotcmF3aGlkZV9tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCityYXdoaWRlX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBtYXNrLCBtYXNrMSwgaG9zZTsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCiAJaXJxIC09IDE2OwogCWhvc2UgPSBpcnEgLyAyNDsKQEAgLTEyMyw5ICsxMjYsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHJhd2hpZGVfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIlJBV0hJREUiLAotCS51bm1hc2sJCT0gcmF3aGlkZV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHJhd2hpZGVfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gcmF3aGlkZV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gcmF3aGlkZV9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IHJhd2hpZGVfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHJhd2hpZGVfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtMTc3LDggKzE4MCw4IEBACiAJfQogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZyYXdoaWRlX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJaXJxX3NldF9zdGF0dXNfZmxhZ3MoaSwgSVJRX0xFVkVMKTsKIAl9CiAKIAlpbml0X2k4MjU5YV9pcnFzKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19yeDE2NC5jCmluZGV4IDg5ZTdlMzdlLi5jZWEyMmE2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcngxNjQuYwpAQCAtNDcsMjIgKzQ3LDIyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotcngxNjRfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorcngxNjRfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JcngxNjRfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgfD0gMVVMIDw8IChpcnEgLSAxNikpOworCXJ4MTY0X3VwZGF0ZV9pcnFfaHcoY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoZC0+aXJxIC0gMTYpKTsKIH0KIAogc3RhdGljIHZvaWQKLXJ4MTY0X2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCityeDE2NF9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JcngxNjRfdXBkYXRlX2lycV9odyhjYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSkpOworCXJ4MTY0X3VwZGF0ZV9pcnFfaHcoY2FjaGVkX2lycV9tYXNrICY9IH4oMVVMIDw8IChkLT5pcnEgLSAxNikpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCByeDE2NF9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiUlgxNjQiLAotCS51bm1hc2sJCT0gcngxNjRfZW5hYmxlX2lycSwKLQkubWFzawkJPSByeDE2NF9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSByeDE2NF9kaXNhYmxlX2lycSwKKwkuaXJxX3VubWFzawk9IHJ4MTY0X2VuYWJsZV9pcnEsCisJLmlycV9tYXNrCT0gcngxNjRfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHJ4MTY0X2Rpc2FibGVfaXJxLAogfTsKIAogc3RhdGljIHZvaWQgCkBAIC05OSw4ICs5OSw4IEBACiAKIAlyeDE2NF91cGRhdGVfaXJxX2h3KDApOwogCWZvciAoaSA9IDE2OyBpIDwgNDA7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZyeDE2NF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJaW5pdF9pODI1OWFfaXJxcygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3NhYmxlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwppbmRleCA1YzQ0MjNkLi5hMzQ5NTM4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2FibGUuYwpAQCAtNDQzLDExICs0NDMsMTEgQEAKIC8qIEdFTkVSSUMgaXJxIHJvdXRpbmVzICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc2FibGVfbHlueF9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzYWJsZV9seW54X2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgYml0LCBtYXNrOwogCi0JYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbaXJxXTsKKwliaXQgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5pcnFfdG9fbWFza1tkLT5pcnFdOwogCXNwaW5fbG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAJbWFzayA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnNoYWRvd19tYXNrICY9IH4oMVVMIDw8IGJpdCk7CiAJc2FibGVfbHlueF9pcnFfc3dpenpsZS0+dXBkYXRlX2lycV9odyhiaXQsIG1hc2spOwpAQCAtNDU5LDExICs0NTksMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNhYmxlX2x5bnhfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3NhYmxlX2x5bnhfZGlzYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGxvbmcgYml0LCBtYXNrOwogCi0JYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbaXJxXTsKKwliaXQgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5pcnFfdG9fbWFza1tkLT5pcnFdOwogCXNwaW5fbG9jaygmc2FibGVfbHlueF9pcnFfbG9jayk7CiAJbWFzayA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnNoYWRvd19tYXNrIHw9IDFVTCA8PCBiaXQ7CiAJc2FibGVfbHlueF9pcnFfc3dpenpsZS0+dXBkYXRlX2lycV9odyhiaXQsIG1hc2spOwpAQCAtNDc1LDExICs0NzUsMTEgQEAKIH0KIAogc3RhdGljIHZvaWQKLXNhYmxlX2x5bnhfbWFza19hbmRfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc2FibGVfbHlueF9tYXNrX2FuZF9hY2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdCwgbWFzazsKIAotCWJpdCA9IHNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPmlycV90b19tYXNrW2lycV07CisJYml0ID0gc2FibGVfbHlueF9pcnFfc3dpenpsZS0+aXJxX3RvX21hc2tbZC0+aXJxXTsKIAlzcGluX2xvY2soJnNhYmxlX2x5bnhfaXJxX2xvY2spOwogCW1hc2sgPSBzYWJsZV9seW54X2lycV9zd2l6emxlLT5zaGFkb3dfbWFzayB8PSAxVUwgPDwgYml0OwogCXNhYmxlX2x5bnhfaXJxX3N3aXp6bGUtPnVwZGF0ZV9pcnFfaHcoYml0LCBtYXNrKTsKQEAgLTQ4OSw5ICs0ODksOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhYmxlX2x5bnhfaXJxX3R5cGUgPSB7CiAJLm5hbWUJCT0gIlNBQkxFL0xZTlgiLAotCS51bm1hc2sJCT0gc2FibGVfbHlueF9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCi0JLm1hc2tfYWNrCT0gc2FibGVfbHlueF9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gc2FibGVfbHlueF9lbmFibGVfaXJxLAorCS5pcnFfbWFzawk9IHNhYmxlX2x5bnhfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHNhYmxlX2x5bnhfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIApAQCAtNTE4LDkgKzUxOCw5IEBACiAJbG9uZyBpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yX29mX2lycXM7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZzYWJsZV9seW54X2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGksIElSUV9MRVZFTCk7CiAJfQogCiAJY29tbW9uX2luaXRfaXNhX2RtYSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Rha2FyYS5jCmluZGV4IGY4YTFlOGEuLjQyYTUzMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190YWthcmEuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfdGFrYXJhLmMKQEAgLTQ1LDE2ICs0NSwxOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRha2FyYV9lbmFibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit0YWthcmFfZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJbWFzayA9IChjYWNoZWRfaXJxX21hc2tbaXJxID49IDY0XSAmPSB+KDFVTCA8PCAoaXJxICYgNjMpKSk7CiAJdGFrYXJhX3VwZGF0ZV9pcnFfaHcoaXJxLCBtYXNrKTsKIH0KIAogc3RhdGljIHZvaWQKLXRha2FyYV9kaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordGFrYXJhX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKKwl1bnNpZ25lZCBpbnQgaXJxID0gZC0+aXJxOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKGNhY2hlZF9pcnFfbWFza1tpcnEgPj0gNjRdIHw9IDFVTCA8PCAoaXJxICYgNjMpKTsKIAl0YWthcmFfdXBkYXRlX2lycV9odyhpcnEsIG1hc2spOwpAQCAtNjIsOSArNjQsOSBAQAogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHRha2FyYV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiVEFLQVJBIiwKLQkudW5tYXNrCQk9IHRha2FyYV9lbmFibGVfaXJxLAotCS5tYXNrCQk9IHRha2FyYV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSB0YWthcmFfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sJPSB0YWthcmFfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSB0YWthcmFfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2Fjawk9IHRha2FyYV9kaXNhYmxlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0xMzYsOCArMTM4LDggQEAKIAkJdGFrYXJhX3VwZGF0ZV9pcnFfaHcoaSwgLTEpOwogCiAJZm9yIChpID0gMTY7IGkgPCAxMjg7ICsraSkgewotCQlpcnFfdG9fZGVzYyhpKS0+c3RhdHVzIHw9IElSUV9MRVZFTDsKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZ0YWthcmFfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIAogCWNvbW1vbl9pbml0X2lzYV9kbWEoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c190aXRhbi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKaW5kZXggZTAyNDk0Yi4uZjZjMTA4YSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3RpdGFuLmMKQEAgLTExMiw4ICsxMTIsOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRpdGFuX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3RpdGFuX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CiAJc3Bpbl9sb2NrKCZ0aXRhbl9pcnFfbG9jayk7CiAJdGl0YW5fY2FjaGVkX2lycV9tYXNrIHw9IDFVTCA8PCAoaXJxIC0gMTYpOwogCXRpdGFuX3VwZGF0ZV9pcnFfaHcodGl0YW5fY2FjaGVkX2lycV9tYXNrKTsKQEAgLTEyMSw4ICsxMjIsOSBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLXRpdGFuX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit0aXRhbl9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKIAlzcGluX2xvY2soJnRpdGFuX2lycV9sb2NrKTsKIAl0aXRhbl9jYWNoZWRfaXJxX21hc2sgJj0gfigxVUwgPDwgKGlycSAtIDE2KSk7CiAJdGl0YW5fdXBkYXRlX2lycV9odyh0aXRhbl9jYWNoZWRfaXJxX21hc2spOwpAQCAtMTQ0LDcgKzE0Niw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLXRpdGFuX3NldF9pcnFfYWZmaW5pdHkodW5zaWduZWQgaW50IGlycSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFmZmluaXR5KQordGl0YW5fc2V0X2lycV9hZmZpbml0eShzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICphZmZpbml0eSwKKwkJICAgICAgIGJvb2wgZm9yY2UpCiB7IAogCXNwaW5fbG9jaygmdGl0YW5faXJxX2xvY2spOwogCXRpdGFuX2NwdV9zZXRfaXJxX2FmZmluaXR5KGlycSAtIDE2LCAqYWZmaW5pdHkpOwpAQCAtMTc1LDE3ICsxNzgsMTcgQEAKIHsKIAlsb25nIGk7CiAJZm9yIChpID0gaW1pbjsgaSA8PSBpbWF4OyArK2kpIHsKLQkJaXJxX3RvX2Rlc2MoaSktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCBvcHMsIGhhbmRsZV9sZXZlbF9pcnEpOworCQlpcnFfc2V0X3N0YXR1c19mbGFncyhpLCBJUlFfTEVWRUwpOwogCX0KIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB0aXRhbl9pcnFfdHlwZSA9IHsKLSAgICAgICAubmFtZQkJPSAiVElUQU4iLAotICAgICAgIC51bm1hc2sJCT0gdGl0YW5fZW5hYmxlX2lycSwKLSAgICAgICAubWFzawkJPSB0aXRhbl9kaXNhYmxlX2lycSwKLSAgICAgICAubWFza19hY2sJPSB0aXRhbl9kaXNhYmxlX2lycSwKLSAgICAgICAuc2V0X2FmZmluaXR5CT0gdGl0YW5fc2V0X2lycV9hZmZpbml0eSwKKyAgICAgICAubmFtZQkJCT0gIlRJVEFOIiwKKyAgICAgICAuaXJxX3VubWFzawkJPSB0aXRhbl9lbmFibGVfaXJxLAorICAgICAgIC5pcnFfbWFzawkJPSB0aXRhbl9kaXNhYmxlX2lycSwKKyAgICAgICAuaXJxX21hc2tfYWNrCQk9IHRpdGFuX2Rpc2FibGVfaXJxLAorICAgICAgIC5pcnFfc2V0X2FmZmluaXR5CT0gdGl0YW5fc2V0X2lycV9hZmZpbml0eSwKIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3dpbGRmaXJlLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwppbmRleCBlZWM1MjU5Li5jYTYwYTM4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfd2lsZGZpcmUuYwpAQCAtMTA0LDEwICsxMDQsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3dpbGRmaXJlX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CisKIAlpZiAoaXJxIDwgMTYpCi0JCWk4MjU5YV9lbmFibGVfaXJxKGlycSk7CisJCWk4MjU5YV9lbmFibGVfaXJxKGQpOwogCiAJc3Bpbl9sb2NrKCZ3aWxkZmlyZV9pcnFfbG9jayk7CiAJc2V0X2JpdChpcnEsICZjYWNoZWRfaXJxX21hc2spOwpAQCAtMTE2LDEwICsxMTgsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX2Rpc2FibGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCit3aWxkZmlyZV9kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CisJdW5zaWduZWQgaW50IGlycSA9IGQtPmlycTsKKwogCWlmIChpcnEgPCAxNikKLQkJaTgyNTlhX2Rpc2FibGVfaXJxKGlycSk7CisJCWk4MjU5YV9kaXNhYmxlX2lycShkKTsKIAogCXNwaW5fbG9jaygmd2lsZGZpcmVfaXJxX2xvY2spOwogCWNsZWFyX2JpdChpcnEsICZjYWNoZWRfaXJxX21hc2spOwpAQCAtMTI4LDEwICsxMzIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQKLXdpbGRmaXJlX21hc2tfYW5kX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKK3dpbGRmaXJlX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogeworCXVuc2lnbmVkIGludCBpcnEgPSBkLT5pcnE7CisKIAlpZiAoaXJxIDwgMTYpCi0JCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKGlycSk7CisJCWk4MjU5YV9tYXNrX2FuZF9hY2tfaXJxKGQpOwogCiAJc3Bpbl9sb2NrKCZ3aWxkZmlyZV9pcnFfbG9jayk7CiAJY2xlYXJfYml0KGlycSwgJmNhY2hlZF9pcnFfbWFzayk7CkBAIC0xNDEsOSArMTQ3LDkgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB3aWxkZmlyZV9pcnFfdHlwZSA9IHsKIAkubmFtZQkJPSAiV0lMREZJUkUiLAotCS51bm1hc2sJCT0gd2lsZGZpcmVfZW5hYmxlX2lycSwKLQkubWFzawkJPSB3aWxkZmlyZV9kaXNhYmxlX2lycSwKLQkubWFza19hY2sJPSB3aWxkZmlyZV9tYXNrX2FuZF9hY2tfaXJxLAorCS5pcnFfdW5tYXNrCT0gd2lsZGZpcmVfZW5hYmxlX2lycSwKKwkuaXJxX21hc2sJPSB3aWxkZmlyZV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrCT0gd2lsZGZpcmVfbWFza19hbmRfYWNrX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdApAQCAtMTc3LDIxICsxODMsMjEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewogCQlpZiAoaSA9PSAyKQogCQkJY29udGludWU7Ci0JCWlycV90b19kZXNjKGkraXJxX2JpYXMpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaStpcnFfYmlhcywgJndpbGRmaXJlX2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGkgKyBpcnFfYmlhcywgSVJRX0xFVkVMKTsKIAl9CiAKLQlpcnFfdG9fZGVzYygzNitpcnFfYmlhcyktPnN0YXR1cyB8PSBJUlFfTEVWRUw7CiAJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKDM2K2lycV9iaWFzLCAmd2lsZGZpcmVfaXJxX3R5cGUsCiAJCWhhbmRsZV9sZXZlbF9pcnEpOworCWlycV9zZXRfc3RhdHVzX2ZsYWdzKDM2ICsgaXJxX2JpYXMsIElSUV9MRVZFTCk7CiAJZm9yIChpID0gNDA7IGkgPCA2NDsgKytpKSB7Ci0JCWlycV90b19kZXNjKGkraXJxX2JpYXMpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOwogCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaStpcnFfYmlhcywgJndpbGRmaXJlX2lycV90eXBlLAogCQkJaGFuZGxlX2xldmVsX2lycSk7CisJCWlycV9zZXRfc3RhdHVzX2ZsYWdzKGkgKyBpcnFfYmlhcywgSVJRX0xFVkVMKTsKIAl9CiAKLQlzZXR1cF9pcnEoMzIraXJxX2JpYXMsICZpc2FfZW5hYmxlKTsJCisJc2V0dXBfaXJxKDMyK2lycV9iaWFzLCAmaXNhX2VuYWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZyBiL2FyY2gvYXJtL0tjb25maWcKaW5kZXggNWNmZjE2NS4uMzhiZjY4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZworKysgYi9hcmNoL2FybS9LY29uZmlnCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlib29sICJGb290QnJpZGdlIgogCXNlbGVjdCBDUFVfU0ExMTAKIAlzZWxlY3QgRk9PVEJSSURHRQotCXNlbGVjdCBBUkNIX1VTRVNfR0VUVElNRU9GRlNFVAorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCiAJaGVscAogCSAgU3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgREMyMTI4NSBjb21wYW5pb24gY2hpcAogCSAgKCJGb290QnJpZGdlIiksIHN1Y2ggYXMgdGhlIFNpbXRlYyBDQVRTIGFuZCB0aGUgUmViZWwgTmV0V2luZGVyLgpAQCAtODc1LDYgKzg3NSwxNiBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFNUJ3MgU1BFQXIgcGxhdGZvcm0gKFNQRUFyM3h4LCBTUEVBcjZ4eCBhbmQgU1BFQXIxM3h4KS4KIAorY29uZmlnIEFSQ0hfVlQ4NTAwCisJYm9vbCAiVklBL1dvbmRlck1lZGlhIDg1eHgiCisJc2VsZWN0IENQVV9BUk05MjZUCisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBBUkNIX0hBU19DUFVGUkVRCisJc2VsZWN0IEdFTkVSSUNfQ0xPQ0tFVkVOVFMKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgSEFWRV9QV00KKwloZWxwCisJICBTdXBwb3J0IGZvciBWSUEvV29uZGVyTWVkaWEgVlQ4NTAwL1dNODV4eCBTeXN0ZW0tb24tQ2hpcC4KIGVuZGNob2ljZQogCiAjCkBAIC0xMDA3LDYgKzEwMTcsOCBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdmV4cHJlc3MvS2NvbmZpZyIKIAorc291cmNlICJhcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdzkweDkwMC9LY29uZmlnIgogCiAjIERlZmluaXRpb25zIHRvIG1ha2UgbGlmZSBlYXNpZXIKQEAgLTExNzcsNiArMTE4OSw1MyBAQAogCSAgdmlzaWJsZSBpbXBhY3Qgb24gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3IgcG93ZXIgY29uc3VtcHRpb24gb2YgdGhlCiAJICBwcm9jZXNzb3IuCiAKK2NvbmZpZyBBUk1fRVJSQVRBXzc1MTQ3MgorCWJvb2wgIkFSTSBlcnJhdGE6IEludGVycnVwdGVkIElDSUFMTFVJUyBtYXkgcHJldmVudCBjb21wbGV0aW9uIG9mIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiIKKwlkZXBlbmRzIG9uIENQVV9WNyAmJiBTTVAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzUxNDcyIENvcnRleC1BOSAocHJpb3IKKwkgIHRvIHIzcDApIGVycmF0dW0uIEFuIGludGVycnVwdGVkIElDSUFMTFVJUyBvcGVyYXRpb24gbWF5IHByZXZlbnQgdGhlCisJICBjb21wbGV0aW9uIG9mIGEgZm9sbG93aW5nIGJyb2FkY2FzdGVkIG9wZXJhdGlvbiBpZiB0aGUgc2Vjb25kCisJICBvcGVyYXRpb24gaXMgcmVjZWl2ZWQgYnkgYSBDUFUgYmVmb3JlIHRoZSBJQ0lBTExVSVMgaGFzIGNvbXBsZXRlZCwKKwkgIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY29ycnVwdGVkIGVudHJpZXMgaW4gdGhlIGNhY2hlIG9yIFRMQi4KKworY29uZmlnIEFSTV9FUlJBVEFfNzUzOTcwCisJYm9vbCAiQVJNIGVycmF0YTogY2FjaGUgc3luYyBvcGVyYXRpb24gbWF5IGJlIGZhdWx0eSIKKwlkZXBlbmRzIG9uIENBQ0hFX1BMMzEwCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgd29ya2Fyb3VuZCBmb3IgdGhlIDc1Mzk3MCBQTDMxMCAocjNwMCkgZXJyYXR1bS4KKworCSAgVW5kZXIgc29tZSBjb25kaXRpb24gdGhlIGVmZmVjdCBvZiBjYWNoZSBzeW5jIG9wZXJhdGlvbiBvbgorCSAgdGhlIHN0b3JlIGJ1ZmZlciBzdGlsbCByZW1haW5zIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuCisJICBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0b3JlIGJ1ZmZlciBpcyBhbHdheXMgYXNrZWQgdG8gZHJhaW4gYW5kCisJICB0aGlzIHByZXZlbnRzIGl0IGZyb20gbWVyZ2luZyBhbnkgZnVydGhlciB3cml0ZXMuIFRoZSB3b3JrYXJvdW5kCisJICBpcyB0byByZXBsYWNlIHRoZSBub3JtYWwgb2Zmc2V0IG9mIGNhY2hlIHN5bmMgb3BlcmF0aW9uICgweDczMCkKKwkgIGJ5IGFub3RoZXIgb2Zmc2V0IHRhcmdldGluZyBhbiB1bm1hcHBlZCBQTDMxMCByZWdpc3RlciAweDc0MC4KKwkgIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyB0aGUgY2FjaGUgc3luYyBvcGVyYXRpb246IHN0b3JlIGJ1ZmZlcgorCSAgZHJhaW4gYW5kIHdhaXRpbmcgZm9yIGFsbCBidWZmZXJzIGVtcHR5LgorCitjb25maWcgQVJNX0VSUkFUQV83NTQzMjIKKwlib29sICJBUk0gZXJyYXRhOiBwb3NzaWJsZSBmYXVsdHkgTU1VIHRyYW5zbGF0aW9ucyBmb2xsb3dpbmcgYW4gQVNJRCBzd2l0Y2giCisJZGVwZW5kcyBvbiBDUFVfVjcKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB3b3JrYXJvdW5kIGZvciB0aGUgNzU0MzIyIENvcnRleC1BOSAocjJwKiwKKwkgIHIzcCopIGVycmF0dW0uIEEgc3BlY3VsYXRpdmUgbWVtb3J5IGFjY2VzcyBtYXkgY2F1c2UgYSBwYWdlIHRhYmxlIHdhbGsKKwkgIHdoaWNoIHN0YXJ0cyBwcmlvciB0byBhbiBBU0lEIHN3aXRjaCBidXQgY29tcGxldGVzIGFmdGVyd2FyZHMuIFRoaXMKKwkgIGNhbiBwb3B1bGF0ZSB0aGUgbWljcm8tVExCIHdpdGggYSBzdGFsZSBlbnRyeSB3aGljaCBtYXkgYmUgaGl0IHdpdGgKKwkgIHRoZSBuZXcgQVNJRC4gVGhpcyB3b3JrYXJvdW5kIHBsYWNlcyB0d28gZHNiIGluc3RydWN0aW9ucyBpbiB0aGUgbW0KKwkgIHN3aXRjaGluZyBjb2RlIHNvIHRoYXQgbm8gcGFnZSB0YWJsZSB3YWxrcyBjYW4gY3Jvc3MgdGhlIEFTSUQgc3dpdGNoLgorCitjb25maWcgQVJNX0VSUkFUQV83NTQzMjcKKwlib29sICJBUk0gZXJyYXRhOiBubyBhdXRvbWF0aWMgU3RvcmUgQnVmZmVyIGRyYWluIgorCWRlcGVuZHMgb24gQ1BVX1Y3ICYmIFNNUAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIHdvcmthcm91bmQgZm9yIHRoZSA3NTQzMjcgQ29ydGV4LUE5IChwcmlvciB0bworCSAgcjJwMCkgZXJyYXR1bS4gVGhlIFN0b3JlIEJ1ZmZlciBkb2VzIG5vdCBoYXZlIGFueSBhdXRvbWF0aWMgZHJhaW5pbmcKKwkgIG1lY2hhbmlzbSBhbmQgdGhlcmVmb3JlIGEgbGl2ZWxvY2sgbWF5IG9jY3VyIGlmIGFuIGV4dGVybmFsIGFnZW50CisJICBjb250aW51b3VzbHkgcG9sbHMgYSBtZW1vcnkgbG9jYXRpb24gd2FpdGluZyB0byBvYnNlcnZlIGFuIHVwZGF0ZS4KKwkgIFRoaXMgd29ya2Fyb3VuZCBkZWZpbmVzIGNwdV9yZWxheCgpIGFzIHNtcF9tYigpLCBwcmV2ZW50aW5nIGNvcnJlY3RseQorCSAgd3JpdHRlbiBwb2xsaW5nIGxvb3BzIGZyb20gZGVueWluZyB2aXNpYmlsaXR5IG9mIHVwZGF0ZXMgdG8gbWVtb3J5LgorCiBlbmRtZW51CiAKIHNvdXJjZSAiYXJjaC9hcm0vY29tbW9uL0tjb25maWciCkBAIC0xMzkxLDcgKzE0NTAsNyBAQAogCiBjb25maWcgT0FCSV9DT01QQVQKIAlib29sICJBbGxvdyBvbGQgQUJJIGJpbmFyaWVzIHRvIHJ1biB3aXRoIHRoaXMga2VybmVsIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gQUVBQkkgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBBRUFCSSAmJiBFWFBFUklNRU5UQUwgJiYgIVRIVU1CMl9LRVJORUwKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBwcmVzZXJ2ZXMgdGhlIG9sZCBzeXNjYWxsIGludGVyZmFjZSBhbG9uZyB3aXRoIHRoZQpAQCAtMTYxOSw2ICsxNjc4LDE4IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSBpbnRlbmQgdG8gZXhlY3V0ZSB5b3VyIGNvbXByZXNzZWQga2VybmVsIGltYWdlCiAJICAoekltYWdlKSBkaXJlY3RseSBmcm9tIFJPTSBvciBmbGFzaC4gIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBaQk9PVF9ST01fTU1DSUYKKwlib29sICJJbmNsdWRlIE1NQ0lGIGxvYWRlciBpbiB6SW1hZ2UgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBaQk9PVF9ST00gJiYgQVJDSF9TSDczNzIgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIGV4cGVyaW1lbnRhbCBNTUNJRiBsb2FkaW5nIGNvZGUgaW4gdGhlCisJICBST00tYWJsZSB6SW1hZ2UuIFdpdGggdGhpcyBlbmFibGVkIGl0IGlzIHBvc3NpYmxlIHRvIHdyaXRlIHRoZQorCSAgdGhlIFJPTS1hYmxlIHpJbWFnZSBrZXJuZWwgaW1hZ2UgdG8gYW4gTU1DIGNhcmQgYW5kIGJvb3QgdGhlCisJICBrZXJuZWwgc3RyYWlnaHQgZnJvbSB0aGUgcmVzZXQgdmVjdG9yLiBBdCByZXNldCB0aGUgcHJvY2Vzc29yCisJICBNYXNrIFJPTSB3aWxsIGxvYWQgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHRoZSBST00tYWJsZSB6SW1hZ2UKKwkgIHdoaWNoIGluIHR1cm4gbG9hZHMgdGhlIHJlc3QgdGhlIGtlcm5lbCBpbWFnZSB0byBSQU0gdXNpbmcgdGhlCisJICBNTUNJRiBoYXJkd2FyZSBibG9jay4KKwogY29uZmlnIENNRExJTkUKIAlzdHJpbmcgIkRlZmF1bHQga2VybmVsIGNvbW1hbmQgc3RyaW5nIgogCWRlZmF1bHQgIiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL01ha2VmaWxlIGIvYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggYzIyYzFhZC4uY2Q1NmM5MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vTWFrZWZpbGUKQEAgLTE1LDcgKzE1LDcgQEAKIExERkxBR1Nfdm1saW51eAkrPSAtLWJlOAogZW5kaWYKIAotT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5ub3RlIC1SIC5ub3RlLmdudS5idWlsZC1pZCAtUiAuY29tbWVudCAtUworT0JKQ09QWUZMQUdTCTo9LU8gYmluYXJ5IC1SIC5jb21tZW50IC1TCiBHWkZMQUdTCQk6PS05CiAjS0JVSUxEX0NGTEFHUwkrPS1waXBlCiAjIEV4cGxpY2l0bHkgc3BlY2lmaXkgMzItYml0IEFSTSBJU0Egc2luY2UgdG9vbGNoYWluIGRlZmF1bHQgY2FuIGJlIC1tdGh1bWI6CkBAIC0xOTAsNiArMTkwLDcgQEAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9VODUwMCkJCTo9IHV4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQk6PSB2ZXJzYXRpbGUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9WRVhQUkVTUykJCTo9IHZleHByZXNzCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfVlQ4NTAwKQkJOj0gdnQ4NTAwCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVzkwWDkwMCkJCTo9IHc5MHg5MDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9OVUM5M1gpCQk6PSBudWM5M3gKIG1hY2hpbmUtJChDT05GSUdfRk9PVEJSSURHRSkJCTo9IGZvb3RicmlkZ2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC8uZ2l0aWdub3JlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKaW5kZXggYWIyMDRkYi4uYzYwMjg5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkLy5naXRpZ25vcmUKQEAgLTEsMyArMSw3IEBACiBmb250LmMKLXBpZ2d5Lmd6CitsaWIxZnVuY3MuUworcGlnZ3kuZ3ppcAorcGlnZ3kubHpvCitwaWdneS5sem1hCit2bWxpbnV4CiB2bWxpbnV4LmxkcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDBhOGY3NDguLjVmM2ExNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTQsOSArNCwyMCBAQAogIyBjcmVhdGUgYSBjb21wcmVzc2VkIHZtbGludXogaW1hZ2UgZnJvbSB0aGUgb3JpZ2luYWwgdm1saW51eAogIwogCitPQkpTCQk9CisKKyMgRW5zdXJlIHRoYXQgbW1jaWYgbG9hZGVyIGNvZGUgYXBwZWFycyBlYXJseSBpbiB0aGUgaW1hZ2UKKyMgdG8gbWluaW1pc2UgdGhhdCBudW1iZXIgb2YgYm9ja3MgdGhhdCBoYXZlIHRvIGJlIHJlYWQgaW4KKyMgb3JkZXIgdG8gbG9hZCBpdC4KK2lmZXEgKCQoQ09ORklHX1pCT09UX1JPTV9NTUNJRikseSkKK2lmZXEgKCQoQ09ORklHX0FSQ0hfU0g3MzcyKSx5KQorT0JKUwkJKz0gbW1jaWYtc2g3MzcyLm8KK2VuZGlmCitlbmRpZgorCiBBRkxBR1NfaGVhZC5vICs9IC1EVEVYVF9PRkZTRVQ9JChURVhUX09GRlNFVCkKIEhFQUQJPSBoZWFkLm8KLU9CSlMJPSBtaXNjLm8gZGVjb21wcmVzcy5vCitPQkpTCSs9IG1pc2MubyBkZWNvbXByZXNzLm8KIEZPTlRDCT0gJChzcmN0cmVlKS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvZm9udF9hY29ybl84eDguYwogCiAjCkBAIC0yOSw2ICs0MCwxMCBAQAogT0JKUwkJKz0gaGVhZC1zYTExMDAubwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfQVJDSF9WVDg1MDApLHkpCitPQkpTCQkrPSBoZWFkLXZ0ODUwMC5vCitlbmRpZgorCiBpZmVxICgkKENPTkZJR19DUFVfWFNDQUxFKSx5KQogT0JKUwkJKz0gaGVhZC14c2NhbGUubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC1zaG1vYmlsZS5TCmluZGV4IDMwOTczYjcuLmM5NDNkMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXNobW9iaWxlLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtc2htb2JpbGUuUwpAQCAtMjUsNiArMjUsMzYgQEAKIAkvKiBsb2FkIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KICNpbmNsdWRlIDxtYWNoL3pib290Lmg+CiAKKyNpZmRlZiBDT05GSUdfWkJPT1RfUk9NX01NQ0lGCisJLyogTG9hZCBpbWFnZSBmcm9tIE1NQyAqLworCWFkcglzcCwgX190bXBfc3RhY2sgKyAxMjgKKwlsZHIJcjAsIF9faW1hZ2Vfc3RhcnQKKwlsZHIJcjEsIF9faW1hZ2VfZW5kCisJc3VicwlyMSwgcjEsIHIwCisJbGRyCXIwLCBfX2xvYWRfYmFzZQorCWJsCW1tY2lmX2xvYWRlcgorCisJLyogSnVtcCB0byBsb2FkZWQgY29kZSAqLworCWxkcglyMCwgX19sb2FkZWQKKwlsZHIJcjEsIF9faW1hZ2Vfc3RhcnQKKwlzdWIJcjAsIHIwLCByMQorCWxkcglyMSwgX19sb2FkX2Jhc2UKKwlhZGQJcGMsIHIwLCByMQorCitfX2ltYWdlX3N0YXJ0OgorCS5sb25nCV9zdGFydAorX19pbWFnZV9lbmQ6CisJLmxvbmcJX2dvdF9lbmQKK19fbG9hZF9iYXNlOgorCS5sb25nCUNPTkZJR19NRU1PUllfU1RBUlQgKyAweDAyMDAwMDAwIEAgTG9hZCBhdCAzMk1iIGludG8gU0RSQU0KK19fbG9hZGVkOgorCS5sb25nCV9fY29udGludWUKKwkuYWxpZ24KK19fdG1wX3N0YWNrOgorCS5zcGFjZQkxMjgKK19fY29udGludWU6CisjZW5kaWYgLyogQ09ORklHX1pCT09UX1JPTV9NTUNJRiAqLworCiAJYgkxZgogX19hdGFnczpAIHRhZyAjMQogCS5sb25nCTEyCQkJQCB0YWctPmhkci5zaXplID0gdGFnX3NpemUodGFnX2NvcmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtdnQ4NTAwLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC12dDg1MDAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGMxZTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQtdnQ4NTAwLlMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLXZ0ODUwMC5TCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBWSUEgVlQ4NTAwIHNwZWNpZmljIHR3ZWFrcy4gVGhpcyBpcyBtZXJnZWQgaW50byBoZWFkLlMgYnkgdGhlIGxpbmtlci4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisJCS5zZWN0aW9uICAgICAgICAiLnN0YXJ0IiwgImF4IgorCitfX1ZUODUwMF9zdGFydDoKKwlAIENvbXBhcmUgdGhlIFNDQyBJRCByZWdpc3RlciBhZ2FpbnN0IGEgbGlzdCBvZiBrbm93biB2YWx1ZXMKKwlsZHIJcjEsIC5TQ0NJRAorCWxkcglyMywgW3IxXQorCisJQCBWVDg1MDAgb3ZlcnJpZGUKKwlsZHIJcjQsIC5WVDg1MDBTQ0MKKwljbXAJcjMsIHI0CisJbGRyZXEJcjcsIC5JRF9CVjA3CisJYmVxCS5MZW5kdnQ4NTAwCisKKwlAIFdNODUwNSBvdmVycmlkZQorCWxkcglyNCwgLldNODUwNVNDQworCWNtcAlyMywgcjQKKwlsZHJlcQlyNywgLklEXzg1MDUKKwliZXEJLkxlbmR2dDg1MDAKKworCUAgT3RoZXJ3aXNlLCBsZWF2ZSB0aGUgYm9vdGxvYWRlcidzIG1hY2hpbmUgaWQgdW50b3VjaGVkCisKKy5TQ0NJRDoKKwkud29yZAkweGQ4MTIwMDAwCisuVlQ4NTAwU0NDOgorCS53b3JkCTB4MzQwMDAxMDIKKy5XTTg1MDVTQ0M6CisJLndvcmQJMHgzNDI2MDEwMworCisuSURfQlYwNzoKKwkud29yZAlNQUNIX1RZUEVfQlYwNworLklEXzg1MDU6CisJLndvcmQJTUFDSF9UWVBFX1dNODUwNV83SU5fTkVUQk9PSworCisuTGVuZHZ0ODUwMDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9tbWNpZi1zaDczNzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjE4MGFmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21tY2lmLXNoNzM3Mi5jCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBzaDczNzIgTU1DSUYgbG9hZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2ltb24gSG9ybWFuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jaWYuaD4KKworI2RlZmluZSBNTUNJRl9CQVNFICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTZiZDAwMDAKKworI2RlZmluZSBQT1JUODRDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NAorI2RlZmluZSBQT1JUODVDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NQorI2RlZmluZSBQT1JUODZDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NgorI2RlZmluZSBQT1JUODdDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1NworI2RlZmluZSBQT1JUODhDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1OAorI2RlZmluZSBQT1JUODlDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1OQorI2RlZmluZSBQT1JUOTBDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YQorI2RlZmluZSBQT1JUOTFDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YgorI2RlZmluZSBQT1JUOTJDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA1YworI2RlZmluZSBQT1JUOTlDUgkodm9pZCBfX2lvbWVtICopMHhlNjA1MDA2MworCisjZGVmaW5lIFNNU1RQQ1IzCSh2b2lkIF9faW9tZW0gKikweGU2MTUwMTNjCisKKy8qIFNINzM3MiBzcGVjaWZpYyBNTUNJRiBsb2FkZXIKKyAqCisgKiBsb2FkcyB0aGUgekltYWdlIGZyb20gYW4gTU1DIGNhcmQgc3RhcnRpbmcgZnJvbSBibG9jayAxLgorICoKKyAqIFRoZSBpbWFnZSBtdXN0IGJlIHN0YXJ0IHdpdGggYSB2cmw0IGhlYWRlciBhbmQKKyAqIHRoZSB6SW1hZ2UgbXVzdCBzdGFydCBhdCBvZmZzZXQgNTEyIG9mIHRoZSBpbWFnZS4gVGhhdCBpcywKKyAqIGF0IGJsb2NrIDIgKD1ieXRlIDEwMjQpIG9uIHRoZSBtZWRpYQorICoKKyAqIFVzZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gd3JpdGUgdGhlIHZybDQgZm9ybWF0ZWQgekltYWdlCisgKiB0byBhbiBNTUMgY2FyZAorICogIyBkZCBpZj12cmw0Lm91dCBvZj0vZGV2L3NkeCBicz01MTIgc2Vlaz0xCisgKi8KK2FzbWxpbmthZ2Ugdm9pZCBtbWNpZl9sb2FkZXIodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKwltbWNpZl9pbml0X3Byb2dyZXNzKCk7CisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0VOVEVSKTsKKworCS8qIEluaXRpYWxpc2UgTU1DCisJICogcmVnaXN0ZXJzOiBQT1JUODRDUi1QT1JUOTJDUgorCSAqICAgICAgICAgICAgKE1NQ0QwXzAtTU1DRDBfNyxNTUNDTUQwIENvbnRyb2wpCisJICogdmFsdWU6IDB4MDQgLSBzZWxlY3QgZnVuY3Rpb24gNAorCSAqLworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg0Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg1Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg2Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg3Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg4Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDg5Q1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkwQ1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkxQ1IpOworCSBfX3Jhd193cml0ZWIoMHgwNCwgUE9SVDkyQ1IpOworCisJLyogSW5pdGlhbGlzZSBNTUMKKwkgKiByZWdpc3RlcnM6IFBPUlQ5OUNSIChNTUNDTEswIENvbnRyb2wpCisJICogdmFsdWU6IDB4MTAgfCAweDA0IC0gZW5hYmxlIG91dHB1dCB8IHNlbGVjdCBmdW5jdGlvbiA0CisJICovCisJX19yYXdfd3JpdGViKDB4MTQsIFBPUlQ5OUNSKTsKKworCS8qIEVuYWJsZSBjbG9jayB0byBNTUMgaGFyZHdhcmUgYmxvY2sgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoU01TVFBDUjMpICYgfigxIDw8IDEyKSwgU01TVFBDUjMpOworCisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0lOSVQpOworCisJLyogc2V0dXAgTU1DSUYgaGFyZHdhcmUgKi8KKwlzaF9tbWNpZl9ib290X2luaXQoTU1DSUZfQkFTRSk7CisKKwltbWNpZl91cGRhdGVfcHJvZ3Jlc3MoTU1DSUZfUFJPR1JFU1NfTE9BRCk7CisKKwkvKiBsb2FkIGtlcm5lbCB2aWEgTU1DSUYgaW50ZXJmYWNlICovCisJc2hfbW1jaWZfYm9vdF9kb19yZWFkKE1NQ0lGX0JBU0UsIDIsIC8qIEtlcm5lbCBpcyBhdCBibG9jayAyICovCisJCQkgICAgICAobGVuICsgU0hfTU1DSUZfQkJTIC0gMSkgLyBTSF9NTUNJRl9CQlMsIGJ1Zik7CisKKworCS8qIERpc2FibGUgY2xvY2sgdG8gTU1DIGhhcmR3YXJlIGJsb2NrICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNNU1RQQ1IzKSAmICgxIDw8IDEyKSwgU01TVFBDUjMpOworCisJbW1jaWZfdXBkYXRlX3Byb2dyZXNzKE1NQ0lGX1BST0dSRVNTX0RPTkUpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL0tjb25maWcgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwppbmRleCA3Nzg2NTVmLi5lYTVlZTRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vS2NvbmZpZworKysgYi9hcmNoL2FybS9jb21tb24vS2NvbmZpZwpAQCAtNiw2ICs2LDggQEAKIAogY29uZmlnIEFSTV9WSUNfTlIKIAlpbnQKKwlkZWZhdWx0IDQgaWYgQVJDSF9TNVBWMjEwCisJZGVmYXVsdCAzIGlmIEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UEMxMDAKIAlkZWZhdWx0IDIKIAlkZXBlbmRzIG9uIEFSTV9WSUMKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggM2FjZDhmYS4uMThhNTY2NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGV0eXBlLmg+CiAjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KQEAgLTIwLDEyMyArMjAsNiBAQAogI2RlZmluZSBDQUNIRV9DT0xPVVIodmFkZHIpCSgodmFkZHIgJiAoU0hNTEJBIC0gMSkpID4+IFBBR0VfU0hJRlQpCiAKIC8qCi0gKglDYWNoZSBNb2RlbAotICoJPT09PT09PT09PT0KLSAqLwotI3VuZGVmIF9DQUNIRQotI3VuZGVmIE1VTFRJX0NBQ0hFCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjMpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2MwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2NAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNMTAyNikKLSMgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQotIyBpZmRlZiBfQ0FDSEUKLSMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCi0jIGVsc2UKLSMgIGRlZmluZSBfQ0FDSEUgZmEKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNlQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05MjYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0MFQpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05NDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0NkUpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBhcm05NDYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB2NHdiCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB4c2NhbGUKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQzMpCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSB4c2MzCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCi0jIGlmZGVmIF9DQUNIRQotIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKLSMgZWxzZQotIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQotIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCi0vLyMgaWZkZWYgX0NBQ0hFCi0jICBkZWZpbmUgTVVMVElfQ0FDSEUgMQotLy8jIGVsc2UKLS8vIyAgZGVmaW5lIF9DQUNIRSB2NgotLy8jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKLS8vIyBpZmRlZiBfQ0FDSEUKLSMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCi0vLyMgZWxzZQotLy8jICBkZWZpbmUgX0NBQ0hFIHY3Ci0vLyMgZW5kaWYKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKLSNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAotI2VuZGlmCi0KLS8qCiAgKiBUaGlzIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwYWdlIHBvaW50ZWQgdG8gYnkgYSBwdGUgaXMgY2xlYW4KICAqIGFuZCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuaW5nIGJlZm9yZSByZXR1cm5pbmcgaXQgdG8gdGhlIHVzZXIuCiAgKi8KQEAgLTI0OSwxOSArMTMyLDExIEBACiAgKiB2aXNpYmxlIHRvIHRoZSBDUFUuCiAgKi8KICNkZWZpbmUgZG1hY19tYXBfYXJlYQkJCWNwdV9jYWNoZS5kbWFfbWFwX2FyZWEKLSNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQljcHVfY2FjaGUuZG1hX3VubWFwX2FyZWEKKyNkZWZpbmUgZG1hY191bm1hcF9hcmVhCQkJY3B1X2NhY2hlLmRtYV91bm1hcF9hcmVhCiAjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UJCWNwdV9jYWNoZS5kbWFfZmx1c2hfcmFuZ2UKIAogI2Vsc2UKIAotI2RlZmluZSBfX2NwdWNfZmx1c2hfaWNhY2hlX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfaWNhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX2tlcm5fYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfYWxsCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX2FsbCkKLSNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlCV9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X2tlcm5fcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19jb2hlcmVudF91c2VyX3JhbmdlCV9fZ2x1ZShfQ0FDSEUsX2NvaGVyZW50X3VzZXJfcmFuZ2UpCi0jZGVmaW5lIF9fY3B1Y19mbHVzaF9kY2FjaGVfYXJlYQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2RjYWNoZV9hcmVhKQotCiBleHRlcm4gdm9pZCBfX2NwdWNfZmx1c2hfaWNhY2hlX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIF9fY3B1Y19mbHVzaF91c2VyX2FsbCh2b2lkKTsKQEAgLTI3NiwxMCArMTUxLDYgQEAKICAqIGlzIHZpc2libGUgdG8gRE1BLCBvciBkYXRhIHdyaXR0ZW4gYnkgRE1BIHRvIHN5c3RlbSBtZW1vcnkgaXMKICAqIHZpc2libGUgdG8gdGhlIENQVS4KICAqLwotI2RlZmluZSBkbWFjX21hcF9hcmVhCQkJX19nbHVlKF9DQUNIRSxfZG1hX21hcF9hcmVhKQotI2RlZmluZSBkbWFjX3VubWFwX2FyZWEJCV9fZ2x1ZShfQ0FDSEUsX2RtYV91bm1hcF9hcmVhKQotI2RlZmluZSBkbWFjX2ZsdXNoX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9kbWFfZmx1c2hfcmFuZ2UpCi0KIGV4dGVybiB2b2lkIGRtYWNfbWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX3VubWFwX2FyZWEoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CiBleHRlcm4gdm9pZCBkbWFjX2ZsdXNoX3JhbmdlKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtbXVsdGkzMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmI1YjBiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1tdWx0aTMyLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIFJ1c3NlbGwgS2luZwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi1zdHJ1Y3QgbW1fc3RydWN0OwotCi0vKgotICogRG9uJ3QgY2hhbmdlIHRoaXMgc3RydWN0dXJlIC0gQVNNIGNvZGUKLSAqIHJlbGllcyBvbiBpdC4KLSAqLwotZXh0ZXJuIHN0cnVjdCBwcm9jZXNzb3IgewotCS8qIE1JU0MKLQkgKiBnZXQgZGF0YSBhYm9ydCBhZGRyZXNzL2ZsYWdzCi0JICovCi0Jdm9pZCAoKl9kYXRhX2Fib3J0KSh1bnNpZ25lZCBsb25nIHBjKTsKLQkvKgotCSAqIFJldHJpZXZlIHByZWZldGNoIGZhdWx0IGFkZHJlc3MKLQkgKi8KLQl1bnNpZ25lZCBsb25nICgqX3ByZWZldGNoX2Fib3J0KSh1bnNpZ25lZCBsb25nIGxyKTsKLQkvKgotCSAqIFNldCB1cCBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcwotCSAqLwotCXZvaWQgKCpfcHJvY19pbml0KSh2b2lkKTsKLQkvKgotCSAqIERpc2FibGUgYW55IHByb2Nlc3NvciBzcGVjaWZpY3MKLQkgKi8KLQl2b2lkICgqX3Byb2NfZmluKSh2b2lkKTsKLQkvKgotCSAqIFNwZWNpYWwgc3R1ZmYgZm9yIGEgcmVzZXQKLQkgKi8KLQl2b2lkICgqcmVzZXQpKHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKLQkvKgotCSAqIElkbGUgdGhlIHByb2Nlc3NvcgotCSAqLwotCWludCAoKl9kb19pZGxlKSh2b2lkKTsKLQkvKgotCSAqIFByb2Nlc3NvciBhcmNoaXRlY3R1cmUgc3BlY2lmaWMKLQkgKi8KLQkvKgotCSAqIGNsZWFuIGEgdmlydHVhbCBhZGRyZXNzIHJhbmdlIGZyb20gdGhlCi0JICogRC1jYWNoZSB3aXRob3V0IGZsdXNoaW5nIHRoZSBjYWNoZS4KLQkgKi8KLQl2b2lkICgqZGNhY2hlX2NsZWFuX2FyZWEpKHZvaWQgKmFkZHIsIGludCBzaXplKTsKLQotCS8qCi0JICogU2V0IHRoZSBwYWdlIHRhYmxlCi0JICovCi0Jdm9pZCAoKnN3aXRjaF9tbSkodW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotCS8qCi0JICogU2V0IGEgcG9zc2libHkgZXh0ZW5kZWQgUFRFLiAgTm9uLWV4dGVuZGVkIFBURXMgc2hvdWxkCi0JICogaWdub3JlICdleHQnLgotCSAqLwotCXZvaWQgKCpzZXRfcHRlX2V4dCkocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSwgdW5zaWduZWQgaW50IGV4dCk7Ci19IHByb2Nlc3NvcjsKLQotI2RlZmluZSBjcHVfcHJvY19pbml0KCkJCQlwcm9jZXNzb3IuX3Byb2NfaW5pdCgpCi0jZGVmaW5lIGNwdV9wcm9jX2ZpbigpCQkJcHJvY2Vzc29yLl9wcm9jX2ZpbigpCi0jZGVmaW5lIGNwdV9yZXNldChhZGRyKQkJCXByb2Nlc3Nvci5yZXNldChhZGRyKQotI2RlZmluZSBjcHVfZG9faWRsZSgpCQkJcHJvY2Vzc29yLl9kb19pZGxlKCkKLSNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCXByb2Nlc3Nvci5kY2FjaGVfY2xlYW5fYXJlYShhZGRyLHN6KQotI2RlZmluZSBjcHVfc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQlwcm9jZXNzb3Iuc2V0X3B0ZV9leHQocHRlcCxwdGUsZXh0KQotI2RlZmluZSBjcHVfZG9fc3dpdGNoX21tKHBnZCxtbSkJcHJvY2Vzc29yLnN3aXRjaF9tbShwZ2QsbW0pCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwNzNhNmQyYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHUtc2luZ2xlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKgotICogIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdS1zaW5nbGUuaAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotLyoKLSAqIFNpbmdsZSBDUFUKLSAqLwotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lIF9fY2F0aWZ5X2ZuKG5hbWUseCkJbmFtZSMjeAotI2Vsc2UKLSNkZWZpbmUgX19jYXRpZnlfZm4obmFtZSx4KQluYW1lLyoqL3gKLSNlbmRpZgotI2RlZmluZSBfX2NwdV9mbihuYW1lLHgpCV9fY2F0aWZ5X2ZuKG5hbWUseCkKLQotLyoKLSAqIElmIHdlIGFyZSBzdXBwb3J0aW5nIG11bHRpcGxlIENQVXMsIHRoZW4gd2UgbXVzdCB1c2UgYSB0YWJsZSBvZgotICogZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoaXMgbG90LiAgT3RoZXJ3aXNlLCB3ZSBjYW4gb3B0aW1pc2UgdGhlCi0gKiB0YWJsZSBhd2F5LgotICovCi0jZGVmaW5lIGNwdV9wcm9jX2luaXQJCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19pbml0KQotI2RlZmluZSBjcHVfcHJvY19maW4JCQlfX2NwdV9mbihDUFVfTkFNRSxfcHJvY19maW4pCi0jZGVmaW5lIGNwdV9yZXNldAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9yZXNldCkKLSNkZWZpbmUgY3B1X2RvX2lkbGUJCQlfX2NwdV9mbihDUFVfTkFNRSxfZG9faWRsZSkKLSNkZWZpbmUgY3B1X2RjYWNoZV9jbGVhbl9hcmVhCQlfX2NwdV9mbihDUFVfTkFNRSxfZGNhY2hlX2NsZWFuX2FyZWEpCi0jZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0JCV9fY3B1X2ZuKENQVV9OQU1FLF9zd2l0Y2hfbW0pCi0jZGVmaW5lIGNwdV9zZXRfcHRlX2V4dAkJCV9fY3B1X2ZuKENQVV9OQU1FLF9zZXRfcHRlX2V4dCkKLQotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0KLXN0cnVjdCBtbV9zdHJ1Y3Q7Ci0KLS8qIGRlY2xhcmUgYWxsIHRoZSBmdW5jdGlvbnMgYXMgZXh0ZXJuICovCi1leHRlcm4gdm9pZCBjcHVfcHJvY19pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgY3B1X3Byb2NfZmluKHZvaWQpOwotZXh0ZXJuIGludCBjcHVfZG9faWRsZSh2b2lkKTsKLWV4dGVybiB2b2lkIGNwdV9kY2FjaGVfY2xlYW5fYXJlYSh2b2lkICosIGludCk7Ci1leHRlcm4gdm9pZCBjcHVfZG9fc3dpdGNoX21tKHVuc2lnbmVkIGxvbmcgcGdkX3BoeXMsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGNwdV9zZXRfcHRlX2V4dChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKLWV4dGVybiB2b2lkIGNwdV9yZXNldCh1bnNpZ25lZCBsb25nIGFkZHIpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9mbmNweS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZm5jcHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTUzNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZm5jcHkuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogYXJjaC9hcm0vaW5jbHVkZS9hc20vZm5jcHkuaCAtIGhlbHBlciBtYWNyb3MgZm9yIGZ1bmN0aW9uIGJvZHkgY29weWluZworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBMaW5hcm8gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgZm9yIHVzZSB3aGVuIHRoZXJlIGlzIGEgbmVlZCB0byBjb3B5IGEgbG93LWxldmVsCisgKiBmdW5jdGlvbiBib2R5IGludG8gc3BlY2lhbCBtZW1vcnkuCisgKgorICogRm9yIGV4YW1wbGUsIHdoZW4gcmVjb25maWd1cmluZyB0aGUgU0RSQU0gY29udHJvbGxlciwgdGhlIGNvZGUgZG9pbmcgdGhlCisgKiByZWNvbmZpZ3VyYXRpb24gbWF5IG5lZWQgdG8gcnVuIGZyb20gU1JBTS4KKyAqCisgKiBOT1RFOiB0aGF0IHRoZSBjb3BpZWQgZnVuY3Rpb24gYm9keSBtdXN0IGJlIGVudGlyZWx5IHNlbGYtY29udGFpbmVkIGFuZAorICogcG9zaXRpb24taW5kZXBlbmRlbnQgaW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseS4KKyAqCisgKiBOT1RFOiBpbiBvcmRlciBmb3IgZW1iZWRkZWQgbGl0ZXJhbHMgYW5kIGRhdGEgdG8gZ2V0IHJlZmVyZW5jZWQgY29ycmVjdGx5LAorICogdGhlIGFsaWdubWVudCBvZiBmdW5jdGlvbnMgbXVzdCBiZSBwcmVzZXJ2ZWQgd2hlbiBjb3B5aW5nLiAgVG8gZW5zdXJlIHRoaXMsCisgKiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgZm9yIGZuY3B5KCkgbXVzdCBiZSBhbGlnbmVkIHRvIGEKKyAqIG11bHRpcGxlIG9mIDggYnl0ZXM6IHlvdSB3aWxsIGJlIGdldCBhIEJVRygpIGlmIHRoaXMgY29uZGl0aW9uIGlzIG5vdCBtZXQuCisgKiBZb3Ugd2lsbCB0eXBpY2FsbHkgbmVlZCBhICIuYWxpZ24gMyIgZGlyZWN0aXZlIGluIHRoZSBhc3NlbWJsZXIgd2hlcmUgdGhlCisgKiBmdW5jdGlvbiB0byBiZSBjb3BpZWQgaXMgZGVmaW5lZCwgYW5kIGVuc3VyZSB0aGF0IHlvdXIgYWxsb2NhdG9yIGZvciB0aGUKKyAqIGRlc3RpbmF0aW9uIGJ1ZmZlciByZXR1cm5zIDgtYnl0ZS1hbGlnbmVkIHBvaW50ZXJzLgorICoKKyAqIFR5cGljYWwgdXNhZ2UgZXhhbXBsZToKKyAqCisgKiBleHRlcm4gaW50IGYoYXJncyk7CisgKiBleHRlcm4gdWludDMyX3Qgc2l6ZV9vZl9mOworICogaW50ICgqY29waWVkX2YpKGFyZ3MpOworICogdm9pZCAqc3JhbV9idWZmZXI7CisgKgorICogY29waWVkX2YgPSBmbmNweShzcmFtX2J1ZmZlciwgJmYsIHNpemVfb2ZfZik7CisgKgorICogLi4uIGxhdGVyLCBjYWxsIHRoZSBmdW5jdGlvbjogLi4uCisgKgorICogY29waWVkX2YoYXJncyk7CisgKgorICogVGhlIHNpemUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNvcGllZCBjYW4ndCBiZSBkZXRlcm1pbmVkIGZyb20gQzoKKyAqIHRoaXMgbXVzdCBiZSBkZXRlcm1pbmVkIGJ5IG90aGVyIG1lYW5zLCBzdWNoIGFzIGFkZGluZyBhc3NtYmxlciBkaXJlY3RpdmVzCisgKiBpbiB0aGUgZmlsZSB3aGVyZSBmIGlzIGRlZmluZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9GTkNQWV9ICisjZGVmaW5lIF9fQVNNX0ZOQ1BZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vYnVnLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworLyoKKyAqIE1pbmltdW0gYWxpZ25tZW50IHJlcXVpcmVtZW50IGZvciB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMKKyAqIGZvciBmdW5jdGlvbiBjb3B5aW5nLgorICovCisjZGVmaW5lIEZOQ1BZX0FMSUdOIDgKKworI2RlZmluZSBmbmNweShkZXN0X2J1ZiwgZnVuY3AsIHNpemUpICh7CQkJCQlcCisJdWludHB0cl90IF9fZnVuY3BfYWRkcmVzczsJCQkJCVwKKwl0eXBlb2YoZnVuY3ApIF9fcmVzdWx0OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlhc20oIiIgOiAiPXIiIChfX2Z1bmNwX2FkZHJlc3MpIDogIjAiIChmdW5jcCkpOwkJCVwKKwkJCQkJCQkJCVwKKwkvKgkJCQkJCQkJXAorCSAqIEVuc3VyZSBhbGlnbm1lbnQgb2Ygc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhZGRyZXNzZXMsCVwKKwkgKiBkaXNyZWdhcmRpbmcgdGhlIGZ1bmN0aW9uJ3MgVGh1bWIgYml0OgkJCVwKKwkgKi8JCQkJCQkJCVwKKwlCVUdfT04oKHVpbnRwdHJfdCkoZGVzdF9idWYpICYgKEZOQ1BZX0FMSUdOIC0gMSkgfHwJCVwKKwkJKF9fZnVuY3BfYWRkcmVzcyAmIH4odWludHB0cl90KTEgJiAoRk5DUFlfQUxJR04gLSAxKSkpOwlcCisJCQkJCQkJCQlcCisJbWVtY3B5KGRlc3RfYnVmLCAodm9pZCBjb25zdCAqKShfX2Z1bmNwX2FkZHJlc3MgJiB+MSksIHNpemUpOwlcCisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKShkZXN0X2J1ZiksCQkJXAorCQkodW5zaWduZWQgbG9uZykoZGVzdF9idWYpICsgKHNpemUpKTsJCQlcCisJCQkJCQkJCQlcCisJYXNtKCIiIDogIj1yIiAoX19yZXN1bHQpCQkJCQlcCisJCTogIjAiICgodWludHB0cl90KShkZXN0X2J1ZikgfCAoX19mdW5jcF9hZGRyZXNzICYgMSkpKTsJXAorCQkJCQkJCQkJXAorCV9fcmVzdWx0OwkJCQkJCQlcCit9KQorCisjZW5kaWYgLyogIV9fQVNNX0ZOQ1BZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTkxZDM1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtY2FjaGUuaApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWNhY2hlLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01fR0xVRV9DQUNIRV9ICisjZGVmaW5lIEFTTV9HTFVFX0NBQ0hFX0gKKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKglDYWNoZSBNb2RlbAorICoJPT09PT09PT09PT0KKyAqLworI3VuZGVmIF9DQUNIRQorI3VuZGVmIE1VTFRJX0NBQ0hFCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjMpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2MworIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2NAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTIwVCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyMlQpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTI1VCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTEwMjApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfQVJNMTAyNikKKyMgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZBNTI2KQorIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisjIGVsc2UKKyMgIGRlZmluZSBfQ0FDSEUgZmEKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTkyNlQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBhcm05MjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0MFQpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBhcm05NDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTk0NkUpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBhcm05NDYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0V0IpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB2NHdiCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9YU0NBTEUpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB4c2NhbGUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1hTQzMpCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSB4c2MzCisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9NT0hBV0spCisjIGlmZGVmIF9DQUNIRQorIyAgZGVmaW5lIE1VTFRJX0NBQ0hFIDEKKyMgZWxzZQorIyAgZGVmaW5lIF9DQUNIRSBtb2hhd2sKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0ZFUk9DRU9OKQorIyBkZWZpbmUgTVVMVElfQ0FDSEUgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCisvLyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorLy8jIGVsc2UKKy8vIyAgZGVmaW5lIF9DQUNIRSB2NgorLy8jIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9WNykKKy8vIyBpZmRlZiBfQ0FDSEUKKyMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCisvLyMgZWxzZQorLy8jICBkZWZpbmUgX0NBQ0hFIHY3CisvLyMgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX0NBQ0hFKSAmJiAhZGVmaW5lZChNVUxUSV9DQUNIRSkKKyNlcnJvciBVbmtub3duIGNhY2hlIG1haW50YWluZW5jZSBtb2RlbAorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElfQ0FDSEUKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2ljYWNoZV9hbGwJCV9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX2ljYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9rZXJuX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX2FsbAkJX19nbHVlKF9DQUNIRSxfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX3JhbmdlCQlfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZQlfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF9rZXJuX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZQlfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF91c2VyX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX2FyZWEJX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9kY2FjaGVfYXJlYSkKKworI2RlZmluZSBkbWFjX21hcF9hcmVhCQkJX19nbHVlKF9DQUNIRSxfZG1hX21hcF9hcmVhKQorI2RlZmluZSBkbWFjX3VubWFwX2FyZWEJCQlfX2dsdWUoX0NBQ0hFLF9kbWFfdW5tYXBfYXJlYSkKKyNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZQkJX19nbHVlKF9DQUNIRSxfZG1hX2ZsdXNoX3JhbmdlKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NGQ1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLWRmLmgKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiAgYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1kZi5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IFJ1c3NlbGwgS2luZworICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAyIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQVNNX0dMVUVfREZfSAorI2RlZmluZSBBU01fR0xVRV9ERl9ICisKKyNpbmNsdWRlIDxhc20vZ2x1ZS5oPgorCisvKgorICoJRGF0YSBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgYXJtNiAgICAgICAgICAtIEFSTTYgc3R5bGUKKyAqCSAgYXJtNwkJLSBBUk03IHN0eWxlCisgKgkgIHY0X2Vhcmx5CS0gQVJNdjQgd2l0aG91dCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCisgKgkgIHY0dF9sYXRlCS0gQVJNdjQgd2l0aCBUaHVtYiBsYXRlIGFib3J0IGhhbmRsZXIKKyAqCSAgdjR0X2Vhcmx5CS0gQVJNdjQgd2l0aCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCisgKgkgIHY1dGVqX2Vhcmx5CS0gQVJNdjUgd2l0aCBUaHVtYiBhbmQgSmF2YSBlYXJseSBhYm9ydCBoYW5kbGVyCisgKgkgIHhzY2FsZQktIEFSTXY1IHdpdGggVGh1bWIgd2l0aCBYc2NhbGUgZXh0ZW5zaW9ucworICoJICB2Nl9lYXJseQktIEFSTXY2IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgorICoJICB2N19lYXJseQktIEFSTXY3IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgorICovCisjdW5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjdW5kZWYgTVVMVElfREFCT1JUCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNjEwKQorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIGNwdV9hcm02X2RhdGFfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTcxMCkKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtN19kYXRhX2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9MVjRUCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2xhdGVfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNAorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjRUCisjIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjVUSgorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY1dGpfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNVQKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NXRfZWFybHlfYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNgorIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKKyMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY2X2Vhcmx5X2Fib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjcKKyMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfREFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2N19lYXJseV9hYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCisjZXJyb3IgVW5rbm93biBkYXRhIGFib3J0IGhhbmRsZXIgdHlwZQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wZi5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS1wZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzODVmMzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXBmLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXBmLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBBU01fR0xVRV9QRl9ICisjZGVmaW5lIEFTTV9HTFVFX1BGX0gKKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKglQcmVmZXRjaCBBYm9ydCBNb2RlbAorICoJPT09PT09PT09PT09PT09PQorICoKKyAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKKyAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgorICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgorICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgorICovCisKKyN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKKyN1bmRlZiBNVUxUSV9QQUJPUlQKKworI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgbGVnYWN5X3BhYm9ydAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2CisjIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgorIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjZfcGFib3J0CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfVjcKKyMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCisjICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiB2N19wYWJvcnQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENQVV9QQUJPUlRfSEFORExFUgorI2Vycm9yIFVua25vd24gcHJlZmV0Y2ggYWJvcnQgaGFuZGxlciB0eXBlCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUtcHJvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0Njk1MjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaApAQCAtMCwwICsxLDI2NCBAQAorLyoKKyAqICBhcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLXByb2MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTctMTk5OSBSdXNzZWxsIEtpbmcKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTV9HTFVFX1BST0NfSAorI2RlZmluZSBBU01fR0xVRV9QUk9DX0gKKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisKKy8qCisgKiBXb3JrIG91dCBpZiB3ZSBuZWVkIG11bHRpcGxlIENQVSBzdXBwb3J0CisgKi8KKyN1bmRlZiBNVUxUSV9DUFUKKyN1bmRlZiBDUFVfTkFNRQorCisvKgorICogQ1BVX05BTUUgLSB0aGUgcHJlZml4IGZvciBDUFUgcmVsYXRlZCBmdW5jdGlvbnMKKyAqLworCisjaWZkZWYgQ09ORklHX0NQVV9BUk02MTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm02CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNN1RETUkKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03dGRtaQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTcxMAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk03MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzIwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNNzQwVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTc0MAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTlURE1JCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOXRkbWkKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjBUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTIwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTIyVAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZBNTI2CisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmE1MjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05MjVUCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI1CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNOTI2VAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNgorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTk0MFQKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05NDAKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9BUk05NDZFCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQ2CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfU0ExMTAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwMAorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3NhMTEwMAorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjAKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNMTAyMEUKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIwZQorIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjIKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDIyCisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfQVJNMTAyNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTEwMjYKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9YU0NBTEUKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV94c2NhbGUKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9YU0MzCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjMworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX01PSEFXSworIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X21vaGF3aworIyBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZFUk9DRU9OCisjIGlmZGVmIENQVV9OQU1FCisjICB1bmRlZiAgTVVMVElfQ1BVCisjICBkZWZpbmUgTVVMVElfQ1BVCisjIGVsc2UKKyMgIGRlZmluZSBDUFVfTkFNRSBjcHVfZmVyb2Nlb24KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9WNgorIyBpZmRlZiBDUFVfTkFNRQorIyAgdW5kZWYgIE1VTFRJX0NQVQorIyAgZGVmaW5lIE1VTFRJX0NQVQorIyBlbHNlCisjICBkZWZpbmUgQ1BVX05BTUUgY3B1X3Y2CisjIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfVjcKKyMgaWZkZWYgQ1BVX05BTUUKKyMgIHVuZGVmICBNVUxUSV9DUFUKKyMgIGRlZmluZSBNVUxUSV9DUFUKKyMgZWxzZQorIyAgZGVmaW5lIENQVV9OQU1FIGNwdV92NworIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTVVMVElfQ1BVCisjZGVmaW5lIGNwdV9wcm9jX2luaXQJCQlfX2dsdWUoQ1BVX05BTUUsX3Byb2NfaW5pdCkKKyNkZWZpbmUgY3B1X3Byb2NfZmluCQkJX19nbHVlKENQVV9OQU1FLF9wcm9jX2ZpbikKKyNkZWZpbmUgY3B1X3Jlc2V0CQkJX19nbHVlKENQVV9OQU1FLF9yZXNldCkKKyNkZWZpbmUgY3B1X2RvX2lkbGUJCQlfX2dsdWUoQ1BVX05BTUUsX2RvX2lkbGUpCisjZGVmaW5lIGNwdV9kY2FjaGVfY2xlYW5fYXJlYQkJX19nbHVlKENQVV9OQU1FLF9kY2FjaGVfY2xlYW5fYXJlYSkKKyNkZWZpbmUgY3B1X2RvX3N3aXRjaF9tbQkJX19nbHVlKENQVV9OQU1FLF9zd2l0Y2hfbW0pCisjZGVmaW5lIGNwdV9zZXRfcHRlX2V4dAkJCV9fZ2x1ZShDUFVfTkFNRSxfc2V0X3B0ZV9leHQpCisjZGVmaW5lIGNwdV9zdXNwZW5kX3NpemUJCV9fZ2x1ZShDUFVfTkFNRSxfc3VzcGVuZF9zaXplKQorI2RlZmluZSBjcHVfZG9fc3VzcGVuZAkJCV9fZ2x1ZShDUFVfTkFNRSxfZG9fc3VzcGVuZCkKKyNkZWZpbmUgY3B1X2RvX3Jlc3VtZQkJCV9fZ2x1ZShDUFVfTkFNRSxfZG9fcmVzdW1lKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZ2x1ZS5oCmluZGV4IDIzNGEzZmMuLjBlYzM1ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2dsdWUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9nbHVlLmgKQEAgLTE1LDcgKzE1LDYgQEAKICAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAotCiAjaWZkZWYgX19TVERDX18KICNkZWZpbmUgX19fX2dsdWUobmFtZSxmbikJbmFtZSMjZm4KICNlbHNlCkBAIC0yMywxNDEgKzIyLDQgQEAKICNlbmRpZgogI2RlZmluZSBfX2dsdWUobmFtZSxmbikJCV9fX19nbHVlKG5hbWUsZm4pCiAKLQotCi0vKgotICoJRGF0YSBBYm9ydCBNb2RlbAotICoJPT09PT09PT09PT09PT09PQotICoKLSAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKLSAqCSAgYXJtNiAgICAgICAgICAtIEFSTTYgc3R5bGUKLSAqCSAgYXJtNwkJLSBBUk03IHN0eWxlCi0gKgkgIHY0X2Vhcmx5CS0gQVJNdjQgd2l0aG91dCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCi0gKgkgIHY0dF9sYXRlCS0gQVJNdjQgd2l0aCBUaHVtYiBsYXRlIGFib3J0IGhhbmRsZXIKLSAqCSAgdjR0X2Vhcmx5CS0gQVJNdjQgd2l0aCBUaHVtYiBlYXJseSBhYm9ydCBoYW5kbGVyCi0gKgkgIHY1dGVqX2Vhcmx5CS0gQVJNdjUgd2l0aCBUaHVtYiBhbmQgSmF2YSBlYXJseSBhYm9ydCBoYW5kbGVyCi0gKgkgIHhzY2FsZQktIEFSTXY1IHdpdGggVGh1bWIgd2l0aCBYc2NhbGUgZXh0ZW5zaW9ucwotICoJICB2Nl9lYXJseQktIEFSTXY2IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgotICoJICB2N19lYXJseQktIEFSTXY3IGdlbmVyaWMgZWFybHkgYWJvcnQgaGFuZGxlcgotICovCi0jdW5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jdW5kZWYgTVVMVElfREFCT1JUCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNNjEwKQotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIGNwdV9hcm02X2RhdGFfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTcxMCkKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiBjcHVfYXJtN19kYXRhX2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9MVjRUCi0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2xhdGVfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNAotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY0X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjRUCi0jIGlmZGVmIENQVV9EQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX0RBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfREFCT1JUX0hBTkRMRVIgdjR0X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjVUSgotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY1dGpfZWFybHlfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNVQKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2NXRfZWFybHlfYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BQlJUX0VWNgotIyBpZmRlZiBDUFVfREFCT1JUX0hBTkRMRVIKLSMgIGRlZmluZSBNVUxUSV9EQUJPUlQgMQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX0RBQk9SVF9IQU5ETEVSIHY2X2Vhcmx5X2Fib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQUJSVF9FVjcKLSMgaWZkZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfREFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9EQUJPUlRfSEFORExFUiB2N19lYXJseV9hYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgQ1BVX0RBQk9SVF9IQU5ETEVSCi0jZXJyb3IgVW5rbm93biBkYXRhIGFib3J0IGhhbmRsZXIgdHlwZQotI2VuZGlmCi0KLS8qCi0gKglQcmVmZXRjaCBBYm9ydCBNb2RlbAotICoJPT09PT09PT09PT09PT09PQotICoKLSAqCVdlIGhhdmUgdGhlIGZvbGxvd2luZyB0byBjaG9vc2UgZnJvbToKLSAqCSAgbGVnYWN5CS0gbm8gSUZTUiwgbm8gSUZBUgotICoJICB2NgkJLSBBUk12NjogSUZTUiwgbm8gSUZBUgotICoJICB2NwkJLSBBUk12NzogSUZTUiBhbmQgSUZBUgotICovCi0KLSN1bmRlZiBDUFVfUEFCT1JUX0hBTkRMRVIKLSN1bmRlZiBNVUxUSV9QQUJPUlQKLQotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfTEVHQUNZCi0jIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgbGVnYWN5X3BhYm9ydAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1BBQlJUX1Y2Ci0jIGlmZGVmIENQVV9QQUJPUlRfSEFORExFUgotIyAgZGVmaW5lIE1VTFRJX1BBQk9SVCAxCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfUEFCT1JUX0hBTkRMRVIgdjZfcGFib3J0Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfUEFCUlRfVjcKLSMgaWZkZWYgQ1BVX1BBQk9SVF9IQU5ETEVSCi0jICBkZWZpbmUgTVVMVElfUEFCT1JUIDEKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9QQUJPUlRfSEFORExFUiB2N19wYWJvcnQKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIENQVV9QQUJPUlRfSEFORExFUgotI2Vycm9yIFVua25vd24gcHJlZmV0Y2ggYWJvcnQgaGFuZGxlciB0eXBlCi0jZW5kaWYKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmgKaW5kZXggNWFlZWMxZS4uMTZiZDQ4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvY2FjaGUtbDJ4MC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2NhY2hlLWwyeDAuaApAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBMMlgwX1JBV19JTlRSX1NUQVQJCTB4MjFDCiAjZGVmaW5lIEwyWDBfSU5UUl9DTEVBUgkJCTB4MjIwCiAjZGVmaW5lIEwyWDBfQ0FDSEVfU1lOQwkJCTB4NzMwCisjZGVmaW5lIEwyWDBfRFVNTVlfUkVHCQkJMHg3NDAKICNkZWZpbmUgTDJYMF9JTlZfTElORV9QQQkJMHg3NzAKICNkZWZpbmUgTDJYMF9JTlZfV0FZCQkJMHg3N0MKICNkZWZpbmUgTDJYMF9DTEVBTl9MSU5FX1BBCQkweDdCMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NwODEwLmgKaW5kZXggYTEwMWYxMC4uZTBkMWMwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvc3A4MTAuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zcDgxMC5oCkBAIC01MCw4ICs1MCwxNyBAQAogI2RlZmluZSBTQ1BDRUxMSUQyCQkweEZGOAogI2RlZmluZSBTQ1BDRUxMSUQzCQkweEZGQwogCisjZGVmaW5lIFNDQ1RSTF9USU1FUkVOMFNFTF9SRUZDTEsJKDAgPDwgMTUpCisjZGVmaW5lIFNDQ1RSTF9USU1FUkVOMFNFTF9USU1DTEsJKDEgPDwgMTUpCisKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4xU0VMX1JFRkNMSwkoMCA8PCAxNykKKyNkZWZpbmUgU0NDVFJMX1RJTUVSRU4xU0VMX1RJTUNMSwkoMSA8PCAxNykKKwogc3RhdGljIGlubGluZSB2b2lkIHN5c2N0bF9zb2Z0X3Jlc2V0KHZvaWQgX19pb21lbSAqYmFzZSkKIHsKKwkvKiBzd2l0Y2ggdG8gc2xvdyBtb2RlICovCisJd3JpdGVsKDB4MiwgYmFzZSArIFNDQ1RSTCk7CisKIAkvKiB3cml0aW5nIGFueSB2YWx1ZSB0byBTQ1NZU1NUQVQgcmVnIHdpbGwgcmVzZXQgc3lzdGVtICovCiAJd3JpdGVsKDAsIGJhc2UgKyBTQ1NZU1NUQVQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggMjBlMGY3Yy4uZDY2NjA1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaW8uaApAQCAtOTUsNiArOTUsMTUgQEAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKWFkZHI7CiB9CiAKKy8qIElPIGJhcnJpZXJzICovCisjaWZkZWYgQ09ORklHX0FSTV9ETUFfTUVNX0JVRkZFUkFCTEUKKyNkZWZpbmUgX19pb3JtYigpCQlybWIoKQorI2RlZmluZSBfX2lvd21iKCkJCXdtYigpCisjZWxzZQorI2RlZmluZSBfX2lvcm1iKCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19pb3dtYigpCQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogLyoKICAqIE5vdywgcGljayB1cCB0aGUgbWFjaGluZS1kZWZpbmVkIElPIGRlZmluaXRpb25zCiAgKi8KQEAgLTEyNSwxNyArMTM0LDE3IEBACiAgKiBUaGUge2luLG91dH1bYndsXSBtYWNyb3MgYXJlIGZvciBlbXVsYXRpbmcgeDg2LXN0eWxlIFBDSS9JU0EgSU8gc3BhY2UuCiAgKi8KICNpZmRlZiBfX2lvCi0jZGVmaW5lIG91dGIodixwKQkJX19yYXdfd3JpdGViKHYsX19pbyhwKSkKLSNkZWZpbmUgb3V0dyh2LHApCQlfX3Jhd193cml0ZXcoKF9fZm9yY2UgX191MTYpIFwKLQkJCQkJY3B1X3RvX2xlMTYodiksX19pbyhwKSkKLSNkZWZpbmUgb3V0bCh2LHApCQlfX3Jhd193cml0ZWwoKF9fZm9yY2UgX191MzIpIFwKLQkJCQkJY3B1X3RvX2xlMzIodiksX19pbyhwKSkKKyNkZWZpbmUgb3V0Yih2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGViKHYsX19pbyhwKSk7IH0pCisjZGVmaW5lIG91dHcodixwKQkoeyBfX2lvd21iKCk7IF9fcmF3X3dyaXRldygoX19mb3JjZSBfX3UxNikgXAorCQkJCQljcHVfdG9fbGUxNih2KSxfX2lvKHApKTsgfSkKKyNkZWZpbmUgb3V0bCh2LHApCSh7IF9faW93bWIoKTsgX19yYXdfd3JpdGVsKChfX2ZvcmNlIF9fdTMyKSBcCisJCQkJCWNwdV90b19sZTMyKHYpLF9faW8ocCkpOyB9KQogCi0jZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX3Y7IH0pCisjZGVmaW5lIGluYihwKQkoeyBfX3U4IF9fdiA9IF9fcmF3X3JlYWRiKF9faW8ocCkpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgaW53KHApCSh7IF9fdTE2IF9fdiA9IGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNikgXAotCQkJX19yYXdfcmVhZHcoX19pbyhwKSkpOyBfX3Y7IH0pCisJCQlfX3Jhd19yZWFkdyhfX2lvKHApKSk7IF9faW9ybWIoKTsgX192OyB9KQogI2RlZmluZSBpbmwocCkJKHsgX191MzIgX192ID0gbGUzMl90b19jcHUoKF9fZm9yY2UgX19sZTMyKSBcCi0JCQlfX3Jhd19yZWFkbChfX2lvKHApKSk7IF9fdjsgfSkKKwkJCV9fcmF3X3JlYWRsKF9faW8ocCkpKTsgX19pb3JtYigpOyBfX3Y7IH0pCiAKICNkZWZpbmUgb3V0c2IocCxkLGwpCQlfX3Jhd193cml0ZXNiKF9faW8ocCksZCxsKQogI2RlZmluZSBvdXRzdyhwLGQsbCkJCV9fcmF3X3dyaXRlc3coX19pbyhwKSxkLGwpCkBAIC0xOTIsMTQgKzIwMSw2IEBACiAjZGVmaW5lIHdyaXRlbF9yZWxheGVkKHYsYykJKCh2b2lkKV9fcmF3X3dyaXRlbCgoX19mb3JjZSB1MzIpIFwKIAkJCQkJY3B1X3RvX2xlMzIodiksX19tZW1fcGNpKGMpKSkKIAotI2lmZGVmIENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFCi0jZGVmaW5lIF9faW9ybWIoKQkJcm1iKCkKLSNkZWZpbmUgX19pb3dtYigpCQl3bWIoKQotI2Vsc2UKLSNkZWZpbmUgX19pb3JtYigpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIF9faW93bWIoKQkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNkZWZpbmUgcmVhZGIoYykJCSh7IHU4ICBfX3YgPSByZWFkYl9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZHcoYykJCSh7IHUxNiBfX3YgPSByZWFkd19yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKICNkZWZpbmUgcmVhZGwoYykJCSh7IHUzMiBfX3YgPSByZWFkbF9yZWxheGVkKGMpOyBfX2lvcm1iKCk7IF9fdjsgfSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvYXJjaC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKaW5kZXggM2EwODkzYS4uYmYxM2I4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vbWFjaC9hcmNoLmgKQEAgLTE1LDEwICsxNSw2IEBACiBzdHJ1Y3Qgc3lzX3RpbWVyOwogCiBzdHJ1Y3QgbWFjaGluZV9kZXNjIHsKLQkvKgotCSAqIE5vdGUhIFRoZSBmaXJzdCB0d28gZWxlbWVudHMgYXJlIHVzZWQKLQkgKiBieSBhc3NlbWJsZXIgY29kZSBpbiBoZWFkLlMsIGhlYWQtY29tbW9uLlMKLQkgKi8KIAl1bnNpZ25lZCBpbnQJCW5yOwkJLyogYXJjaGl0ZWN0dXJlIG51bWJlcgkqLwogCWNvbnN0IGNoYXIJCSpuYW1lOwkJLyogYXJjaGl0ZWN0dXJlIG5hbWUJKi8KIAl1bnNpZ25lZCBsb25nCQlib290X3BhcmFtczsJLyogdGFnZ2VkIGxpc3QJCSovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tZW1vcnkuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCmluZGV4IDIzYzJlOGUuLmQwZWU3NGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21lbW9yeS5oCkBAIC0xODgsNyArMTg4LDcgQEAKICAqIHRyYW5zbGF0aW9uIGZvciB0cmFuc2xhdGluZyBETUEgYWRkcmVzc2VzLiAgVXNlIHRoZSBkcml2ZXIKICAqIERNQSBzdXBwb3J0IC0gc2VlIGRtYS1tYXBwaW5nLmguCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9pZCAqeCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXMoY29uc3Qgdm9sYXRpbGUgdm9pZCAqeCkKIHsKIAlyZXR1cm4gX192aXJ0X3RvX3BoeXMoKHVuc2lnbmVkIGxvbmcpKHgpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BnYWxsb2MuaAppbmRleCA5NzYzYmUwLi4yMmRlMDA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGdhbGxvYy5oCkBAIC0xMCw2ICsxMCw4IEBACiAjaWZuZGVmIF9BU01BUk1fUEdBTExPQ19ICiAjZGVmaW5lIF9BU01BUk1fUEdBTExPQ19ICiAKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisKICNpbmNsdWRlIDxhc20vZG9tYWluLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvYy1mbnMuaAppbmRleCA4ZmRhZTliLi44ZWM1MzVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jLWZucy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3Byb2MtZm5zLmgKQEAgLTEzLDI1MCArMTMsODYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotCi0vKgotICogV29yayBvdXQgaWYgd2UgbmVlZCBtdWx0aXBsZSBDUFUgc3VwcG9ydAotICovCi0jdW5kZWYgTVVMVElfQ1BVCi0jdW5kZWYgQ1BVX05BTUUKLQotLyoKLSAqIENQVV9OQU1FIC0gdGhlIHByZWZpeCBmb3IgQ1BVIHJlbGF0ZWQgZnVuY3Rpb25zCi0gKi8KLQotI2lmZGVmIENPTkZJR19DUFVfQVJNNjEwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTdURE1JCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk03MTAKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNNzIwVAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTcyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTc0MFQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03NDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk05VERNSQotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTl0ZG1pCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTIwVAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyMlQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjIKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9GQTUyNgotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2ZhNTI2Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTI1VAotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTkyNQotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTkyNlQKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05MjYKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk05NDBUCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTQwCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfQVJNOTQ2RQotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0NgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1NBMTEwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfc2ExMTAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9TQTExMDAKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9zYTExMDAKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIwCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjBFCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMGUKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9BUk0xMDIyCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtMTAyMgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX0FSTTEwMjYKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm0xMDI2Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfWFNDQUxFCi0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfeHNjYWxlCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfWFNDMwotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X3hzYzMKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9NT0hBV0sKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV9tb2hhd2sKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0NQVV9GRVJPQ0VPTgotIyBpZmRlZiBDUFVfTkFNRQotIyAgdW5kZWYgIE1VTFRJX0NQVQotIyAgZGVmaW5lIE1VTFRJX0NQVQotIyBlbHNlCi0jICBkZWZpbmUgQ1BVX05BTUUgY3B1X2Zlcm9jZW9uCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19DUFVfVjYKLSMgaWZkZWYgQ1BVX05BTUUKLSMgIHVuZGVmICBNVUxUSV9DUFUKLSMgIGRlZmluZSBNVUxUSV9DUFUKLSMgZWxzZQotIyAgZGVmaW5lIENQVV9OQU1FIGNwdV92NgotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQ1BVX1Y3Ci0jIGlmZGVmIENQVV9OQU1FCi0jICB1bmRlZiAgTVVMVElfQ1BVCi0jICBkZWZpbmUgTVVMVElfQ1BVCi0jIGVsc2UKLSMgIGRlZmluZSBDUFVfTkFNRSBjcHVfdjcKLSMgZW5kaWYKLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9nbHVlLXByb2MuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCitzdHJ1Y3QgbW1fc3RydWN0OworCisvKgorICogRG9uJ3QgY2hhbmdlIHRoaXMgc3RydWN0dXJlIC0gQVNNIGNvZGUgcmVsaWVzIG9uIGl0LgorICovCitleHRlcm4gc3RydWN0IHByb2Nlc3NvciB7CisJLyogTUlTQworCSAqIGdldCBkYXRhIGFib3J0IGFkZHJlc3MvZmxhZ3MKKwkgKi8KKwl2b2lkICgqX2RhdGFfYWJvcnQpKHVuc2lnbmVkIGxvbmcgcGMpOworCS8qCisJICogUmV0cmlldmUgcHJlZmV0Y2ggZmF1bHQgYWRkcmVzcworCSAqLworCXVuc2lnbmVkIGxvbmcgKCpfcHJlZmV0Y2hfYWJvcnQpKHVuc2lnbmVkIGxvbmcgbHIpOworCS8qCisJICogU2V0IHVwIGFueSBwcm9jZXNzb3Igc3BlY2lmaWNzCisJICovCisJdm9pZCAoKl9wcm9jX2luaXQpKHZvaWQpOworCS8qCisJICogRGlzYWJsZSBhbnkgcHJvY2Vzc29yIHNwZWNpZmljcworCSAqLworCXZvaWQgKCpfcHJvY19maW4pKHZvaWQpOworCS8qCisJICogU3BlY2lhbCBzdHVmZiBmb3IgYSByZXNldAorCSAqLworCXZvaWQgKCpyZXNldCkodW5zaWduZWQgbG9uZyBhZGRyKSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOworCS8qCisJICogSWRsZSB0aGUgcHJvY2Vzc29yCisJICovCisJaW50ICgqX2RvX2lkbGUpKHZvaWQpOworCS8qCisJICogUHJvY2Vzc29yIGFyY2hpdGVjdHVyZSBzcGVjaWZpYworCSAqLworCS8qCisJICogY2xlYW4gYSB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UgZnJvbSB0aGUKKwkgKiBELWNhY2hlIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgorCSAqLworCXZvaWQgKCpkY2FjaGVfY2xlYW5fYXJlYSkodm9pZCAqYWRkciwgaW50IHNpemUpOworCisJLyoKKwkgKiBTZXQgdGhlIHBhZ2UgdGFibGUKKwkgKi8KKwl2b2lkICgqc3dpdGNoX21tKSh1bnNpZ25lZCBsb25nIHBnZF9waHlzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisJLyoKKwkgKiBTZXQgYSBwb3NzaWJseSBleHRlbmRlZCBQVEUuICBOb24tZXh0ZW5kZWQgUFRFcyBzaG91bGQKKwkgKiBpZ25vcmUgJ2V4dCcuCisJICovCisJdm9pZCAoKnNldF9wdGVfZXh0KShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCB1bnNpZ25lZCBpbnQgZXh0KTsKKworCS8qIFN1c3BlbmQvcmVzdW1lICovCisJdW5zaWduZWQgaW50IHN1c3BlbmRfc2l6ZTsKKwl2b2lkICgqZG9fc3VzcGVuZCkodm9pZCAqKTsKKwl2b2lkICgqZG9fcmVzdW1lKSh2b2lkICopOworfSBwcm9jZXNzb3I7CisKICNpZm5kZWYgTVVMVElfQ1BVCi0jaW5jbHVkZSA8YXNtL2NwdS1zaW5nbGUuaD4KK2V4dGVybiB2b2lkIGNwdV9wcm9jX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBjcHVfcHJvY19maW4odm9pZCk7CitleHRlcm4gaW50IGNwdV9kb19pZGxlKHZvaWQpOworZXh0ZXJuIHZvaWQgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKHZvaWQgKiwgaW50KTsKK2V4dGVybiB2b2lkIGNwdV9kb19zd2l0Y2hfbW0odW5zaWduZWQgbG9uZyBwZ2RfcGh5cywgc3RydWN0IG1tX3N0cnVjdCAqbW0pOworZXh0ZXJuIHZvaWQgY3B1X3NldF9wdGVfZXh0KHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUsIHVuc2lnbmVkIGludCBleHQpOworZXh0ZXJuIHZvaWQgY3B1X3Jlc2V0KHVuc2lnbmVkIGxvbmcgYWRkcikgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKICNlbHNlCi0jaW5jbHVkZSA8YXNtL2NwdS1tdWx0aTMyLmg+CisjZGVmaW5lIGNwdV9wcm9jX2luaXQoKQkJCXByb2Nlc3Nvci5fcHJvY19pbml0KCkKKyNkZWZpbmUgY3B1X3Byb2NfZmluKCkJCQlwcm9jZXNzb3IuX3Byb2NfZmluKCkKKyNkZWZpbmUgY3B1X3Jlc2V0KGFkZHIpCQkJcHJvY2Vzc29yLnJlc2V0KGFkZHIpCisjZGVmaW5lIGNwdV9kb19pZGxlKCkJCQlwcm9jZXNzb3IuX2RvX2lkbGUoKQorI2RlZmluZSBjcHVfZGNhY2hlX2NsZWFuX2FyZWEoYWRkcixzeikJcHJvY2Vzc29yLmRjYWNoZV9jbGVhbl9hcmVhKGFkZHIsc3opCisjZGVmaW5lIGNwdV9zZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpCXByb2Nlc3Nvci5zZXRfcHRlX2V4dChwdGVwLHB0ZSxleHQpCisjZGVmaW5lIGNwdV9kb19zd2l0Y2hfbW0ocGdkLG1tKQlwcm9jZXNzb3Iuc3dpdGNoX21tKHBnZCxtbSkKICNlbmRpZgogCitleHRlcm4gdm9pZCBjcHVfcmVzdW1lKHZvaWQpOworCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHJvY2Vzc29yLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCA2NzM1N2JhLi43YTFmMDNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaApAQCAtOTUsNyArOTUsNyBAQAogCiB1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogCi0jaWYgX19MSU5VWF9BUk1fQVJDSF9fID09IDYKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPT0gNiB8fCBkZWZpbmVkKENPTkZJR19BUk1fRVJSQVRBXzc1NDMyNykKICNkZWZpbmUgY3B1X3JlbGF4KCkJCQlzbXBfbWIoKQogI2Vsc2UKICNkZWZpbmUgY3B1X3JlbGF4KCkJCQliYXJyaWVyKCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9zY3UuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3NtcF9zY3UuaAppbmRleCAyMzc2ODM1Li40ZWI2ZDAwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zbXBfc2N1LmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vc21wX3NjdS5oCkBAIC0xLDcgKzEsMTQgQEAKICNpZm5kZWYgX19BU01BUk1fQVJDSF9TQ1VfSAogI2RlZmluZSBfX0FTTUFSTV9BUkNIX1NDVV9ICiAKKyNkZWZpbmUgU0NVX1BNX05PUk1BTAkwCisjZGVmaW5lIFNDVV9QTV9ET1JNQU5UCTIKKyNkZWZpbmUgU0NVX1BNX1BPV0VST0ZGCTMKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCiB1bnNpZ25lZCBpbnQgc2N1X2dldF9jb3JlX2NvdW50KHZvaWQgX19pb21lbSAqKTsKIHZvaWQgc2N1X2VuYWJsZSh2b2lkIF9faW9tZW0gKik7CitpbnQgc2N1X3Bvd2VyX21vZGUodm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGludCk7CisjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCmluZGV4IGY0MWE2ZjUuLjgyZGZlNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0xOCwxNiArMTgsMzQgQEAKICNkZWZpbmUgX19BU01BUk1fVExCX0gKIAogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKICNpZm5kZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorCisjZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGxiLmg+CiAKICNlbHNlIC8qICFDT05GSUdfTU1VICovCiAKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworLyoKKyAqIFdlIG5lZWQgdG8gZGVsYXkgcGFnZSBmcmVlaW5nIGZvciBTTVAgYXMgb3RoZXIgQ1BVcyBjYW4gYWNjZXNzIHBhZ2VzCisgKiB3aGljaCBoYXZlIGJlZW4gcmVtb3ZlZCBidXQgbm90IHlldCBoYWQgdGhlaXIgVExCIGVudHJpZXMgaW52YWxpZGF0ZWQuCisgKiBBbHNvLCBhcyBBUk12NyBzcGVjdWxhdGl2ZSBwcmVmZXRjaCBjYW4gZHJhZyBuZXcgZW50cmllcyBpbnRvIHRoZSBUTEIsCisgKiB3ZSBuZWVkIHRvIGFwcGx5IHRoaXMgc2FtZSBkZWxheWluZyB0YWN0aWMgdG8gZW5zdXJlIGNvcnJlY3Qgb3BlcmF0aW9uLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfMzJ2NykKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTAKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTUwMAorI2Vsc2UKKyNkZWZpbmUgdGxiX2Zhc3RfbW9kZSh0bGIpCTEKKyNkZWZpbmUgRlJFRV9QVEVfTlIJCTAKKyNlbmRpZgogCiAvKgogICogVExCIGhhbmRsaW5nLiAgVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHBhZ2VzIGZyb20gdGhlIHBhZ2UKQEAgLTM2LDEyICs1NCw1OCBAQAogc3RydWN0IG1tdV9nYXRoZXIgewogCXN0cnVjdCBtbV9zdHJ1Y3QJKm1tOwogCXVuc2lnbmVkIGludAkJZnVsbG1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdAkqdm1hOwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcJCXJhbmdlX2VuZDsKKwl1bnNpZ25lZCBpbnQJCW5yOworCXN0cnVjdCBwYWdlCQkqcGFnZXNbRlJFRV9QVEVfTlJdOwogfTsKIAogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBtbXVfZ2F0aGVyLCBtbXVfZ2F0aGVycyk7CiAKKy8qCisgKiBUaGlzIGlzIHVubmVjZXNzYXJpbHkgY29tcGxleC4gIFRoZXJlJ3MgdGhyZWUgd2F5cyB0aGUgVExCIHNob290ZG93bgorICogY29kZSBpcyB1c2VkOgorICogIDEuIFVubWFwcGluZyBhIHJhbmdlIG9mIHZtYXMuICBTZWUgemFwX3BhZ2VfcmFuZ2UoKSwgdW5tYXBfcmVnaW9uKCkuCisgKiAgICAgdGxiLT5mdWxsbW0gPSAwLCBhbmQgdGxiX3N0YXJ0X3ZtYS90bGJfZW5kX3ZtYSB3aWxsIGJlIGNhbGxlZC4KKyAqICAgICB0bGItPnZtYSB3aWxsIGJlIG5vbi1OVUxMLgorICogIDIuIFVubWFwcGluZyBhbGwgdm1hcy4gIFNlZSBleGl0X21tYXAoKS4KKyAqICAgICB0bGItPmZ1bGxtbSA9IDEsIGFuZCB0bGJfc3RhcnRfdm1hL3RsYl9lbmRfdm1hIHdpbGwgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgbm9uLU5VTEwuICBBZGRpdGlvbmFsbHksIHBhZ2UgdGFibGVzIHdpbGwgYmUgZnJlZWQuCisgKiAgMy4gVW5tYXBwaW5nIGFyZ3VtZW50IHBhZ2VzLiAgU2VlIHNoaWZ0X2FyZ19wYWdlcygpLgorICogICAgIHRsYi0+ZnVsbG1tID0gMCwgYnV0IHRsYl9zdGFydF92bWEvdGxiX2VuZF92bWEgd2lsbCBub3QgYmUgY2FsbGVkLgorICogICAgIHRsYi0+dm1hIHdpbGwgYmUgTlVMTC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiKQoreworCWlmICh0bGItPmZ1bGxtbSB8fCAhdGxiLT52bWEpCisJCWZsdXNoX3RsYl9tbSh0bGItPm1tKTsKKwllbHNlIGlmICh0bGItPnJhbmdlX2VuZCA+IDApIHsKKwkJZmx1c2hfdGxiX3JhbmdlKHRsYi0+dm1hLCB0bGItPnJhbmdlX3N0YXJ0LCB0bGItPnJhbmdlX2VuZCk7CisJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBUQVNLX1NJWkU7CisJCXRsYi0+cmFuZ2VfZW5kID0gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0bGJfYWRkX2ZsdXNoKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlpZiAoIXRsYi0+ZnVsbG1tKSB7CisJCWlmIChhZGRyIDwgdGxiLT5yYW5nZV9zdGFydCkKKwkJCXRsYi0+cmFuZ2Vfc3RhcnQgPSBhZGRyOworCQlpZiAoYWRkciArIFBBR0VfU0laRSA+IHRsYi0+cmFuZ2VfZW5kKQorCQkJdGxiLT5yYW5nZV9lbmQgPSBhZGRyICsgUEFHRV9TSVpFOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHRsYl9mbHVzaF9tbXUoc3RydWN0IG1tdV9nYXRoZXIgKnRsYikKK3sKKwl0bGJfZmx1c2godGxiKTsKKwlpZiAoIXRsYl9mYXN0X21vZGUodGxiKSkgeworCQlmcmVlX3BhZ2VzX2FuZF9zd2FwX2NhY2hlKHRsYi0+cGFnZXMsIHRsYi0+bnIpOworCQl0bGItPm5yID0gMDsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG1tdV9nYXRoZXIgKgogdGxiX2dhdGhlcl9tbXUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCBmdWxsX21tX2ZsdXNoKQogewpAQCAtNDksNiArMTEzLDggQEAKIAogCXRsYi0+bW0gPSBtbTsKIAl0bGItPmZ1bGxtbSA9IGZ1bGxfbW1fZmx1c2g7CisJdGxiLT52bWEgPSBOVUxMOworCXRsYi0+bnIgPSAwOwogCiAJcmV0dXJuIHRsYjsKIH0KQEAgLTU2LDggKzEyMiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9maW5pc2hfbW11KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCWlmICh0bGItPmZ1bGxtbSkKLQkJZmx1c2hfdGxiX21tKHRsYi0+bW0pOworCXRsYl9mbHVzaF9tbXUodGxiKTsKIAogCS8qIGtlZXAgdGhlIHBhZ2UgdGFibGUgY2FjaGUgd2l0aGluIGJvdW5kcyAqLwogCWNoZWNrX3BndF9jYWNoZSgpOwpAQCAtNzEsMTIgKzEzNiw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHRsYl9yZW1vdmVfdGxiX2VudHJ5KHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHB0ZV90ICpwdGVwLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSkgewotCQlpZiAoYWRkciA8IHRsYi0+cmFuZ2Vfc3RhcnQpCi0JCQl0bGItPnJhbmdlX3N0YXJ0ID0gYWRkcjsKLQkJaWYgKGFkZHIgKyBQQUdFX1NJWkUgPiB0bGItPnJhbmdlX2VuZCkKLQkJCXRsYi0+cmFuZ2VfZW5kID0gYWRkciArIFBBR0VfU0laRTsKLQl9CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOwogfQogCiAvKgpAQCAtODksNiArMTQ5LDcgQEAKIHsKIAlpZiAoIXRsYi0+ZnVsbG1tKSB7CiAJCWZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOworCQl0bGItPnZtYSA9IHZtYTsKIAkJdGxiLT5yYW5nZV9zdGFydCA9IFRBU0tfU0laRTsKIAkJdGxiLT5yYW5nZV9lbmQgPSAwOwogCX0KQEAgLTk3LDEyICsxNTgsMzAgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogdGxiX2VuZF92bWEoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JaWYgKCF0bGItPmZ1bGxtbSAmJiB0bGItPnJhbmdlX2VuZCA+IDApCi0JCWZsdXNoX3RsYl9yYW5nZSh2bWEsIHRsYi0+cmFuZ2Vfc3RhcnQsIHRsYi0+cmFuZ2VfZW5kKTsKKwlpZiAoIXRsYi0+ZnVsbG1tKQorCQl0bGJfZmx1c2godGxiKTsKIH0KIAotI2RlZmluZSB0bGJfcmVtb3ZlX3BhZ2UodGxiLHBhZ2UpCWZyZWVfcGFnZV9hbmRfc3dhcF9jYWNoZShwYWdlKQotI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQlwdGVfZnJlZSgodGxiKS0+bW0sIHB0ZXApCitzdGF0aWMgaW5saW5lIHZvaWQgdGxiX3JlbW92ZV9wYWdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICh0bGJfZmFzdF9tb2RlKHRsYikpIHsKKwkJZnJlZV9wYWdlX2FuZF9zd2FwX2NhY2hlKHBhZ2UpOworCX0gZWxzZSB7CisJCXRsYi0+cGFnZXNbdGxiLT5ucisrXSA9IHBhZ2U7CisJCWlmICh0bGItPm5yID49IEZSRUVfUFRFX05SKQorCQkJdGxiX2ZsdXNoX21tdSh0bGIpOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIF9fcHRlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfdCBwdGUsCisJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBndGFibGVfcGFnZV9kdG9yKHB0ZSk7CisJdGxiX2FkZF9mbHVzaCh0bGIsIGFkZHIpOworCXRsYl9yZW1vdmVfcGFnZSh0bGIsIHB0ZSk7Cit9CisKKyNkZWZpbmUgcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCwgYWRkcikJX19wdGVfZnJlZV90bGIodGxiLCBwdGVwLCBhZGRyKQogI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwLCBhZGRyKQlwbWRfZnJlZSgodGxiKS0+bW0sIHBtZHApCiAKICNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKQkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKaW5kZXggY2U3Mzc4ZWEuLmQyMDA1ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3RsYmZsdXNoLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdGxiZmx1c2guaApAQCAtMTAsMTIgKzEwLDcgQEAKICNpZm5kZWYgX0FTTUFSTV9UTEJGTFVTSF9ICiAjZGVmaW5lIF9BU01BUk1fVExCRkxVU0hfSAogCi0KLSNpZm5kZWYgQ09ORklHX01NVQotCi0jZGVmaW5lIHRsYl9mbHVzaCh0bGIpCSgodm9pZCkgdGxiKQotCi0jZWxzZSAvKiBDT05GSUdfTU1VICovCisjaWZkZWYgQ09ORklHX01NVQogCiAjaW5jbHVkZSA8YXNtL2dsdWUuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCmluZGV4IDE4NWVlODIuLjc0NTU0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKQEAgLTI5LDYgKzI5LDcgQEAKIG9iai0kKENPTkZJR19BUlRIVVIpCQkrPSBhcnRodXIubwogb2JqLSQoQ09ORklHX0lTQV9ETUEpCQkrPSBkbWEtaXNhLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubyBpc2Eubworb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubwogb2JqLSQoQ09ORklHX0hBVkVfU0NIRURfQ0xPQ0spCSs9IHNjaGVkX2Nsb2NrLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubyBzbXBfdGxiLm8KIG9iai0kKENPTkZJR19IQVZFX0FSTV9TQ1UpCSs9IHNtcF9zY3UubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwppbmRleCA4MmRhNjYxLi45Mjc1MjJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMTMsNiArMTMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtZGYuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wZi5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CkBAIC0xMTQsNiArMTE3LDE0IEBACiAjaWZkZWYgTVVMVElfUEFCT1JUCiAgIERFRklORShQUk9DRVNTT1JfUEFCVF9GVU5DLAlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBfcHJlZmV0Y2hfYWJvcnQpKTsKICNlbmRpZgorI2lmZGVmIE1VTFRJX0NQVQorICBERUZJTkUoQ1BVX1NMRUVQX1NJWkUsCW9mZnNldG9mKHN0cnVjdCBwcm9jZXNzb3IsIHN1c3BlbmRfc2l6ZSkpOworICBERUZJTkUoQ1BVX0RPX1NVU1BFTkQsCW9mZnNldG9mKHN0cnVjdCBwcm9jZXNzb3IsIGRvX3N1c3BlbmQpKTsKKyAgREVGSU5FKENQVV9ET19SRVNVTUUsCQlvZmZzZXRvZihzdHJ1Y3QgcHJvY2Vzc29yLCBkb19yZXN1bWUpKTsKKyNlbmRpZgorI2lmZGVmIE1VTFRJX0NBQ0hFCisgIERFRklORShDQUNIRV9GTFVTSF9LRVJOX0FMTCwJb2Zmc2V0b2Yoc3RydWN0IGNwdV9jYWNoZV9mbnMsIGZsdXNoX2tlcm5fYWxsKSk7CisjZW5kaWYKICAgQkxBTksoKTsKICAgREVGSU5FKERNQV9CSURJUkVDVElPTkFMLAlETUFfQklESVJFQ1RJT05BTCk7CiAgIERFRklORShETUFfVE9fREVWSUNFLAkJRE1BX1RPX0RFVklDRSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCAyYjQ2ZmVhLi5lOGQ4ODU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTE2LDcgKzE2LDggQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtZGYuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wZi5oPgogI2luY2x1ZGUgPGFzbS92ZnBtYWNyb3MuaD4KICNpbmNsdWRlIDxtYWNoL2VudHJ5LW1hY3JvLlM+CiAjaW5jbHVkZSA8YXNtL3RocmVhZF9ub3RpZnkuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCmluZGV4IGYxN2Q5YTAuLmYwNmZmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwpAQCAtMzkxLDI1ICszOTEsMjQgQEAKIAogCiAjaWZkZWYgQ09ORklHX1NNUF9PTl9VUAorCV9fSU5JVAogX19maXh1cF9zbXA6Ci0JbW92CXI0LCAjMHgwMDA3MDAwMAotCW9ycglyMywgcjQsICMweGZmMDAwMDAwCUAgbWFzayAweGZmMDcwMDAwCi0Jb3JyCXI0LCByNCwgIzB4NDEwMDAwMDAJQCB2YWwgMHg0MTA3MDAwMAotCWFuZAlyMCwgcjksIHIzCi0JdGVxCXIwLCByNAkJCUAgQVJNIENQVSBhbmQgQVJNdjYvdjc/CisJYW5kCXIzLCByOSwgIzB4MDAwZjAwMDAJQCBhcmNoaXRlY3R1cmUgdmVyc2lvbgorCXRlcQlyMywgIzB4MDAwZjAwMDAJCUAgQ1BVIElEIHN1cHBvcnRlZD8KIAlibmUJX19maXh1cF9zbXBfb25fdXAJQCBubywgYXNzdW1lIFVQCiAKLQlvcnIJcjMsIHIzLCAjMHgwMDAwZmYwMAotCW9ycglyMywgcjMsICMweDAwMDAwMGYwCUAgbWFzayAweGZmMDdmZmYwCisJYmljCXIzLCByOSwgIzB4MDBmZjAwMDAKKwliaWMJcjMsIHIzLCAjMHgwMDAwMDAwZglAIG1hc2sgMHhmZjAwZmZmMAorCW1vdglyNCwgIzB4NDEwMDAwMDAKIAlvcnIJcjQsIHI0LCAjMHgwMDAwYjAwMAotCW9ycglyNCwgcjQsICMweDAwMDAwMDIwCUAgdmFsIDB4NDEwN2IwMjAKLQlhbmQJcjAsIHI5LCByMwotCXRlcQlyMCwgcjQJCQlAIEFSTSAxMU1QQ29yZT8KKwlvcnIJcjQsIHI0LCAjMHgwMDAwMDAyMAlAIHZhbCAweDQxMDBiMDIwCisJdGVxCXIzLCByNAkJCUAgQVJNIDExTVBDb3JlPwogCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIAltcmMJcDE1LCAwLCByMCwgYzAsIGMwLCA1CUAgcmVhZCBNUElEUgotCXRzdAlyMCwgIzEgPDwgMzEKLQltb3ZuZQlwYywgbHIJCQlAIGJpdCAzMSA9PiBTTVAKKwlhbmQJcjAsIHIwLCAjMHhjMDAwMDAwMAlAIG11bHRpcHJvY2Vzc2luZyBleHRlbnNpb25zIGFuZAorCXRlcQlyMCwgIzB4ODAwMDAwMDAJCUAgbm90IHBhcnQgb2YgYSB1bmlwcm9jZXNzb3Igc3lzdGVtPworCW1vdmVxCXBjLCBscgkJCUAgeWVzLCBhc3N1bWUgU01QCiAKIF9fZml4dXBfc21wX29uX3VwOgogCWFkcglyMCwgMWYKQEAgLTQxNywxOCArNDE2LDcgQEAKIAlzdWIJcjMsIHIwLCByMwogCWFkZAlyNCwgcjQsIHIzCiAJYWRkCXI1LCByNSwgcjMKLTI6CWNtcAlyNCwgcjUKLQltb3ZocwlwYywgbHIKLQlsZG1pYQlyNCEsIHtyMCwgcjZ9Ci0gQVJNKAlzdHIJcjYsIFtyMCwgcjNdCSkKLSBUSFVNQigJYWRkCXIwLCByMCwgcjMJKQotI2lmZGVmIF9fQVJNRUJfXwotIFRIVU1CKAltb3YJcjYsIHI2LCByb3IgIzE2CSkJQCBDb252ZXJ0IHdvcmQgb3JkZXIgZm9yIGJpZy1lbmRpYW4uCi0jZW5kaWYKLSBUSFVNQigJc3RyaAlyNiwgW3IwXSwgIzIJKQlAIEZvciBUaHVtYi0yLCBzdG9yZSBhcyB0d28gaGFsZndvcmRzCi0gVEhVTUIoCW1vdglyNiwgcjYsIGxzciAjMTYJKQlAIHRvIGJlIHJvYnVzdCBhZ2FpbnN0IG1pc2FsaWduZWQgcjMuCi0gVEhVTUIoCXN0cmgJcjYsIFtyMF0JKQotCWIJMmIKKwliCV9fZG9fZml4dXBfc21wX29uX3VwCiBFTkRQUk9DKF9fZml4dXBfc21wKQogCiAJLmFsaWduCkBAIC00NDIsNyArNDMwLDMxIEBACiAJQUxUX1NNUCgubG9uZwkxKQogCUFMVF9VUCgubG9uZwkwKQogCS5wb3BzZWN0aW9uCi0KICNlbmRpZgogCisJLnRleHQKK19fZG9fZml4dXBfc21wX29uX3VwOgorCWNtcAlyNCwgcjUKKwltb3ZocwlwYywgbHIKKwlsZG1pYQlyNCEsIHtyMCwgcjZ9CisgQVJNKAlzdHIJcjYsIFtyMCwgcjNdCSkKKyBUSFVNQigJYWRkCXIwLCByMCwgcjMJKQorI2lmZGVmIF9fQVJNRUJfXworIFRIVU1CKAltb3YJcjYsIHI2LCByb3IgIzE2CSkJQCBDb252ZXJ0IHdvcmQgb3JkZXIgZm9yIGJpZy1lbmRpYW4uCisjZW5kaWYKKyBUSFVNQigJc3RyaAlyNiwgW3IwXSwgIzIJKQlAIEZvciBUaHVtYi0yLCBzdG9yZSBhcyB0d28gaGFsZndvcmRzCisgVEhVTUIoCW1vdglyNiwgcjYsIGxzciAjMTYJKQlAIHRvIGJlIHJvYnVzdCBhZ2FpbnN0IG1pc2FsaWduZWQgcjMuCisgVEhVTUIoCXN0cmgJcjYsIFtyMF0JKQorCWIJX19kb19maXh1cF9zbXBfb25fdXAKK0VORFBST0MoX19kb19maXh1cF9zbXBfb25fdXApCisKK0VOVFJZKGZpeHVwX3NtcCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI2LCBscn0KKwltb3YJcjQsIHIwCisJYWRkCXI1LCByMCwgcjEKKwltb3YJcjMsICMwCisJYmwJX19kb19maXh1cF9zbXBfb25fdXAKKwlsZG1mZAlzcCEsIHtyNCAtIHI2LCBwY30KK0VORFBST0MoZml4dXBfc21wKQorCiAjaW5jbHVkZSAiaGVhZC1jb21tb24uUyIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9hcmNoL2FybS9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGM5ZjNmMDQuLjQ0Yjg0ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9od19icmVha3BvaW50LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2h3X2JyZWFrcG9pbnQuYwpAQCAtMTM3LDExICsxMzcsMTAgQEAKIAl1MzIgZGlkcjsKIAogCS8qIERvIHdlIGltcGxlbWVudCB0aGUgZXh0ZW5kZWQgQ1BVSUQgaW50ZXJmYWNlPyAqLwotCWlmICgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZikgewotCQlwcl93YXJuaW5nKCJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCi0JCQkJIkFzc3VtaW5nIHY2IGRlYnVnIGlzIHByZXNlbnQuXG4iKTsKKwlpZiAoV0FSTl9PTkNFKCgoKHJlYWRfY3B1aWRfaWQoKSA+PiAxNikgJiAweGYpICE9IDB4ZiksCisJICAgICJDUFVJRCBmZWF0dXJlIHJlZ2lzdGVycyBub3Qgc3VwcG9ydGVkLiAiCisJICAgICJBc3N1bWluZyB2NiBkZWJ1ZyBpcyBwcmVzZW50LlxuIikpCiAJCXJldHVybiBBUk1fREVCVUdfQVJDSF9WNjsKLQl9CiAKIAlBUk1fREJHX1JFQUQoYzAsIDAsIGRpZHIpOwogCXJldHVybiAoZGlkciA+PiAxNikgJiAweGY7CkBAIC0xNTIsNiArMTUxLDEyIEBACiAJcmV0dXJuIGRlYnVnX2FyY2g7CiB9CiAKK3N0YXRpYyBpbnQgZGVidWdfYXJjaF9zdXBwb3J0ZWQodm9pZCkKK3sKKwl1OCBhcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKKwlyZXR1cm4gYXJjaCA+PSBBUk1fREVCVUdfQVJDSF9WNiAmJiBhcmNoIDw9IEFSTV9ERUJVR19BUkNIX1Y3X0VDUDE0OworfQorCiAvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIEJSUCByZWdpc3RlciBhdmFpbGFibGUuICovCiBzdGF0aWMgaW50IGdldF9udW1fYnJwX3Jlc291cmNlcyh2b2lkKQogewpAQCAtMjY4LDYgKzI3Myw5IEBACiAKIGludCBod19icmVha3BvaW50X3Nsb3RzKGludCB0eXBlKQogeworCWlmICghZGVidWdfYXJjaF9zdXBwb3J0ZWQoKSkKKwkJcmV0dXJuIDA7CisKIAkvKgogCSAqIFdlIGNhbiBiZSBjYWxsZWQgZWFybHksIHNvIGRvbid0IHJlbHkgb24KIAkgKiBvdXIgc3RhdGljIHZhcmlhYmxlcyBiZWluZyBpbml0aWFsaXNlZC4KQEAgLTgyOCwyMCArODM2LDMzIEBACiAvKgogICogT25lLXRpbWUgaW5pdGlhbGlzYXRpb24uCiAgKi8KLXN0YXRpYyB2b2lkIHJlc2V0X2N0cmxfcmVncyh2b2lkICp1bnVzZWQpCitzdGF0aWMgdm9pZCByZXNldF9jdHJsX3JlZ3Modm9pZCAqaW5mbykKIHsKLQlpbnQgaTsKKwlpbnQgaSwgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXUzMiBkYmdfcG93ZXI7CisJY3B1bWFza190ICpjcHVtYXNrID0gaW5mbzsKIAogCS8qCiAJICogdjcgZGVidWcgY29udGFpbnMgc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlcnMgc28gdGhhdCBkZWJ1ZyBzdGF0ZQotCSAqIGNhbiBiZSBtYWludGFpbmVkIGFjcm9zcyBsb3ctcG93ZXIgbW9kZXMgd2l0aG91dCBsZWF2aW5nCi0JICogdGhlIGRlYnVnIGxvZ2ljIHBvd2VyZWQgdXAuIEl0IGlzIElNUExFTUVOVEFUSU9OIERFRklORUQgd2hldGhlcgotCSAqIHdlIGNhbiB3cml0ZSB0byB0aGUgZGVidWcgcmVnaXN0ZXJzIG91dCBvZiByZXNldCwgc28gd2UgbXVzdAotCSAqIHVubG9jayB0aGUgT1MgTG9jayBBY2Nlc3MgUmVnaXN0ZXIgdG8gYXZvaWQgdGFraW5nIHVuZGVmaW5lZAotCSAqIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMgbGF0ZXIgb24uCisJICogY2FuIGJlIG1haW50YWluZWQgYWNyb3NzIGxvdy1wb3dlciBtb2RlcyB3aXRob3V0IGxlYXZpbmcgdGhlIGRlYnVnCisJICogbG9naWMgcG93ZXJlZCB1cC4gSXQgaXMgSU1QTEVNRU5UQVRJT04gREVGSU5FRCB3aGV0aGVyIHdlIGNhbiBhY2Nlc3MKKwkgKiB0aGUgZGVidWcgcmVnaXN0ZXJzIG91dCBvZiByZXNldCwgc28gd2UgbXVzdCB1bmxvY2sgdGhlIE9TIExvY2sKKwkgKiBBY2Nlc3MgUmVnaXN0ZXIgdG8gYXZvaWQgdGFraW5nIHVuZGVmaW5lZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zCisJICogbGF0ZXIgb24uCiAJICovCiAJaWYgKGRlYnVnX2FyY2ggPj0gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKIAkJLyoKKwkJICogRW5zdXJlIHN0aWNreSBwb3dlci1kb3duIGlzIGNsZWFyIChpLmUuIGRlYnVnIGxvZ2ljIGlzCisJCSAqIHBvd2VyZWQgdXApLgorCQkgKi8KKwkJYXNtIHZvbGF0aWxlKCJtcmMgcDE0LCAwLCAlMCwgYzEsIGM1LCA0IiA6ICI9ciIgKGRiZ19wb3dlcikpOworCQlpZiAoKGRiZ19wb3dlciAmIDB4MSkgPT0gMCkgeworCQkJcHJfd2FybmluZygiQ1BVICVkIGRlYnVnIGlzIHBvd2VyZWQgZG93biFcbiIsIGNwdSk7CisJCQljcHVtYXNrX29yKGNwdW1hc2ssIGNwdW1hc2ssIGNwdW1hc2tfb2YoY3B1KSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgogCQkgKiBVbmNvbmRpdGlvbmFsbHkgY2xlYXIgdGhlIGxvY2sgYnkgd3JpdGluZyBhIHZhbHVlCiAJCSAqIG90aGVyIHRoYW4gMHhDNUFDQ0U1NSB0byB0aGUgYWNjZXNzIHJlZ2lzdGVyLgogCQkgKi8KQEAgLTg3OSwxMCArOTAwLDExIEBACiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX2h3X2JyZWFrcG9pbnRfaW5pdCh2b2lkKQogewogCXUzMiBkc2NyOworCWNwdW1hc2tfdCBjcHVtYXNrID0geyBDUFVfQklUU19OT05FIH07CiAKIAlkZWJ1Z19hcmNoID0gZ2V0X2RlYnVnX2FyY2goKTsKIAotCWlmIChkZWJ1Z19hcmNoID4gQVJNX0RFQlVHX0FSQ0hfVjdfRUNQMTQpIHsKKwlpZiAoIWRlYnVnX2FyY2hfc3VwcG9ydGVkKCkpIHsKIAkJcHJfaW5mbygiZGVidWcgYXJjaGl0ZWN0dXJlIDB4JXggdW5zdXBwb3J0ZWQuXG4iLCBkZWJ1Z19hcmNoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtODk5LDE4ICs5MjEsMjQgQEAKIAkJcHJfaW5mbygiJWQgYnJlYWtwb2ludChzKSByZXNlcnZlZCBmb3Igd2F0Y2hwb2ludCAiCiAJCQkJInNpbmdsZS1zdGVwLlxuIiwgY29yZV9udW1fcmVzZXJ2ZWRfYnJwcyk7CiAKKwkvKgorCSAqIFJlc2V0IHRoZSBicmVha3BvaW50IHJlc291cmNlcy4gV2UgYXNzdW1lIHRoYXQgYSBoYWx0aW5nCisJICogZGVidWdnZXIgd2lsbCBsZWF2ZSB0aGUgd29ybGQgaW4gYSBuaWNlIHN0YXRlIGZvciB1cy4KKwkgKi8KKwlvbl9lYWNoX2NwdShyZXNldF9jdHJsX3JlZ3MsICZjcHVtYXNrLCAxKTsKKwlpZiAoIWNwdW1hc2tfZW1wdHkoJmNwdW1hc2spKSB7CisJCWNvcmVfbnVtX2JycHMgPSAwOworCQljb3JlX251bV9yZXNlcnZlZF9icnBzID0gMDsKKwkJY29yZV9udW1fd3JwcyA9IDA7CisJCXJldHVybiAwOworCX0KKwogCUFSTV9EQkdfUkVBRChjMSwgMCwgZHNjcik7CiAJaWYgKGRzY3IgJiBBUk1fRFNDUl9IREJHRU4pIHsKKwkJbWF4X3dhdGNocG9pbnRfbGVuID0gNDsKIAkJcHJfd2FybmluZygiaGFsdGluZyBkZWJ1ZyBtb2RlIGVuYWJsZWQuIEFzc3VtaW5nIG1heGltdW0gIgotCQkJCSJ3YXRjaHBvaW50IHNpemUgb2YgNCBieXRlcy4iKTsKKwkJCSAgICJ3YXRjaHBvaW50IHNpemUgb2YgJXUgYnl0ZXMuIiwgbWF4X3dhdGNocG9pbnRfbGVuKTsKIAl9IGVsc2UgewotCQkvKgotCQkgKiBSZXNldCB0aGUgYnJlYWtwb2ludCByZXNvdXJjZXMuIFdlIGFzc3VtZSB0aGF0IGEgaGFsdGluZwotCQkgKiBkZWJ1Z2dlciB3aWxsIGxlYXZlIHRoZSB3b3JsZCBpbiBhIG5pY2Ugc3RhdGUgZm9yIHVzLgotCQkgKi8KLQkJc21wX2NhbGxfZnVuY3Rpb24ocmVzZXRfY3RybF9yZWdzLCBOVUxMLCAxKTsKLQkJcmVzZXRfY3RybF9yZWdzKE5VTEwpOwotCiAJCS8qIFdvcmsgb3V0IHRoZSBtYXhpbXVtIHN1cHBvcnRlZCB3YXRjaHBvaW50IGxlbmd0aC4gKi8KIAkJbWF4X3dhdGNocG9pbnRfbGVuID0gZ2V0X21heF93cF9sZW4oKTsKIAkJcHJfaW5mbygibWF4aW11bSB3YXRjaHBvaW50IHNpemUgaXMgJXUgYnl0ZXMuXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwppbmRleCAyYzFmMDA1Li44ZjZlZDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy1kZWNvZGUuYwpAQCAtMTQzNyw3ICsxNDM3LDcgQEAKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMTAwXzAxMHgoaW5zbiwgYXNpKTsKIAotCX0gZWxzZSBpZiAoKGluc24gJiAweDBlMDAwMDAwKSA9PSAweDBjNDAwMDAwKSB7CisJfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGMwMDAwMDApIHsKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMTB4KGluc24sIGFzaSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYwppbmRleCAyY2ZlODE2Li42ZDQxMDVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgorI2luY2x1ZGUgPGFzbS9zbXBfcGxhdC5oPgogI2luY2x1ZGUgPGFzbS91bndpbmQuaD4KIAogI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCkBAIC0yNjgsMTIgKzI2OSwyOCBAQAogCWNvbnN0IEVsZl9TaGRyICp0eHRfc2VjOwogfTsKIAorc3RhdGljIGNvbnN0IEVsZl9TaGRyICpmaW5kX21vZF9zZWN0aW9uKGNvbnN0IEVsZjMyX0VoZHIgKmhkciwKKwljb25zdCBFbGZfU2hkciAqc2VjaGRycywgY29uc3QgY2hhciAqbmFtZSkKK3sKKwljb25zdCBFbGZfU2hkciAqcywgKnNlOworCWNvbnN0IGNoYXIgKnNlY3N0cnMgPSAodm9pZCAqKWhkciArIHNlY2hkcnNbaGRyLT5lX3Noc3RybmR4XS5zaF9vZmZzZXQ7CisKKwlmb3IgKHMgPSBzZWNoZHJzLCBzZSA9IHNlY2hkcnMgKyBoZHItPmVfc2hudW07IHMgPCBzZTsgcysrKQorCQlpZiAoc3RyY21wKG5hbWUsIHNlY3N0cnMgKyBzLT5zaF9uYW1lKSA9PSAwKQorCQkJcmV0dXJuIHM7CisKKwlyZXR1cm4gTlVMTDsKK30KKworZXh0ZXJuIHZvaWQgZml4dXBfc21wKGNvbnN0IHZvaWQgKiwgdW5zaWduZWQgbG9uZyk7CisKIGludCBtb2R1bGVfZmluYWxpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLCBjb25zdCBFbGZfU2hkciAqc2VjaGRycywKIAkJICAgIHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKKwljb25zdCBFbGZfU2hkciAqIF9fbWF5YmVfdW51c2VkIHMgPSBOVUxMOwogI2lmZGVmIENPTkZJR19BUk1fVU5XSU5ECiAJY29uc3QgY2hhciAqc2Vjc3RycyA9ICh2b2lkICopaGRyICsgc2VjaGRyc1toZHItPmVfc2hzdHJuZHhdLnNoX29mZnNldDsKLQljb25zdCBFbGZfU2hkciAqcywgKnNlY2hkcnNfZW5kID0gc2VjaGRycyArIGhkci0+ZV9zaG51bTsKKwljb25zdCBFbGZfU2hkciAqc2VjaGRyc19lbmQgPSBzZWNoZHJzICsgaGRyLT5lX3NobnVtOwogCXN0cnVjdCBtb2RfdW53aW5kX21hcCBtYXBzW0FSTV9TRUNfTUFYXTsKIAlpbnQgaTsKIApAQCAtMzE1LDYgKzMzMiw5IEBACiAJCQkJCSAgICAgICAgIG1hcHNbaV0udHh0X3NlYy0+c2hfYWRkciwKIAkJCQkJICAgICAgICAgbWFwc1tpXS50eHRfc2VjLT5zaF9zaXplKTsKICNlbmRpZgorCXMgPSBmaW5kX21vZF9zZWN0aW9uKGhkciwgc2VjaGRycywgIi5hbHQuc21wLmluaXQiKTsKKwlpZiAocyAmJiAhaXNfc21wKCkpCisJCWZpeHVwX3NtcCgodm9pZCAqKXMtPnNoX2FkZHIsIHMtPnNoX3NpemUpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA1ZWZhMjY0Li5kMTUwYWQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTcwMCw3ICs3MDAsNyBAQAogCSAqIEZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjawogCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpLgogCSAqLwotCWlmICh0YWlsID49IGJ1ZnRhaWwuZnApCisJaWYgKHRhaWwgKyAxID49IGJ1ZnRhaWwuZnApCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGJ1ZnRhaWwuZnAgLSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BtdS5jIGIvYXJjaC9hcm0va2VybmVsL3BtdS5jCmluZGV4IGI4YWY5NmUuLjJjNzllZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9wbXUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcG11LmMKQEAgLTk3LDI4ICs5NywzNCBAQAogCQkJICAgaXJxLCBjcHUpOwogCXJldHVybiBlcnI7CiAjZWxzZQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCiB9CiAKIHN0YXRpYyBpbnQKIGluaXRfY3B1X3BtdSh2b2lkKQogewotCWludCBpLCBlcnIgPSAwOworCWludCBpLCBpcnFzLCBlcnIgPSAwOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwbXVfZGV2aWNlc1tBUk1fUE1VX0RFVklDRV9DUFVdOwogCi0JaWYgKCFwZGV2KSB7Ci0JCWVyciA9IC1FTk9ERVY7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoIXBkZXYpCisJCXJldHVybiAtRU5PREVWOwogCi0JZm9yIChpID0gMDsgaSA8IHBkZXYtPm51bV9yZXNvdXJjZXM7ICsraSkgeworCWlycXMgPSBwZGV2LT5udW1fcmVzb3VyY2VzOworCisJLyoKKwkgKiBJZiB3ZSBoYXZlIGEgc2luZ2xlIFBNVSBpbnRlcnJ1cHQgdGhhdCB3ZSBjYW4ndCBzaGlmdCwgYXNzdW1lIHRoYXQKKwkgKiB3ZSdyZSBydW5uaW5nIG9uIGEgdW5pcHJvY2Vzc29yIG1hY2hpbmUgYW5kIGNvbnRpbnVlLgorCSAqLworCWlmIChpcnFzID09IDEgJiYgIWlycV9jYW5fc2V0X2FmZmluaXR5KHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCkpKQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IGkgPCBpcnFzOyArK2kpIHsKIAkJZXJyID0gc2V0X2lycV9hZmZpbml0eShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIGkpLCBpKTsKIAkJaWYgKGVycikKIAkJCWJyZWFrOwogCX0KIAotb3V0OgogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwppbmRleCAxOWM2ODE2Li5iMTNlNzBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCkBAIC05OTYsMTAgKzk5NiwxMCBAQAogCQl3aGlsZSAoIShhcmNoX2N0cmwubGVuICYgMHgxKSkKIAkJCWFyY2hfY3RybC5sZW4gPj49IDE7CiAKLQkJaWYgKGlkeCAmIDB4MSkKLQkJCXJlZyA9IGVuY29kZV9jdHJsX3JlZyhhcmNoX2N0cmwpOwotCQllbHNlCisJCWlmIChudW0gJiAweDEpCiAJCQlyZWcgPSBicC0+YXR0ci5icF9hZGRyOworCQllbHNlCisJCQlyZWcgPSBlbmNvZGVfY3RybF9yZWcoYXJjaF9jdHJsKTsKIAl9CiAKIHB1dDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9hcm0va2VybmVsL3NldHVwLmMKaW5kZXggNDIwYjhkNi4uNWVhNGZiNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zZXR1cC5jCkBAIC0yMjYsOCArMjI2LDggQEAKIAkJICogUmVnaXN0ZXIgMCBhbmQgY2hlY2sgZm9yIFZNU0F2NyBvciBQTVNBdjcgKi8KIAkJYXNtKCJtcmMJcDE1LCAwLCAlMCwgYzAsIGMxLCA0IgogCQkgICAgOiAiPXIiIChtbWZyMCkpOwotCQlpZiAoKG1tZnIwICYgMHgwMDAwMDAwZikgPT0gMHgwMDAwMDAwMyB8fAotCQkgICAgKG1tZnIwICYgMHgwMDAwMDBmMCkgPT0gMHgwMDAwMDAzMCkKKwkJaWYgKChtbWZyMCAmIDB4MDAwMDAwMGYpID49IDB4MDAwMDAwMDMgfHwKKwkJICAgIChtbWZyMCAmIDB4MDAwMDAwZjApID49IDB4MDAwMDAwMzApCiAJCQljcHVfYXJjaCA9IENQVV9BUkNIX0FSTXY3OwogCQllbHNlIGlmICgobW1mcjAgJiAweDAwMDAwMDBmKSA9PSAweDAwMDAwMDAyIHx8CiAJCQkgKG1tZnIwICYgMHgwMDAwMDBmMCkgPT0gMHgwMDAwMDAyMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCA5MDdkNWE2Li5hYmFmODQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC00NzQsNyArNDc0LDkgQEAKIAl1bnNpZ25lZCBsb25nIGhhbmRsZXIgPSAodW5zaWduZWQgbG9uZylrYS0+c2Euc2FfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIHJldGNvZGU7CiAJaW50IHRodW1iID0gMDsKLQl1bnNpZ25lZCBsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzciAmIH5QU1JfZjsKKwl1bnNpZ25lZCBsb25nIGNwc3IgPSByZWdzLT5BUk1fY3BzciAmIH4oUFNSX2YgfCBQU1JfRV9CSVQpOworCisJY3BzciB8PSBQU1JfRU5EU1RBVEU7CiAKIAkvKgogCSAqIE1heWJlIHdlIG5lZWQgdG8gZGVsaXZlciBhIDMyLWJpdCBzaWduYWwgdG8gYSAyNi1iaXQgdGFzay4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbGVlcC5TIGIvYXJjaC9hcm0va2VybmVsL3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZhZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zbGVlcC5TCkBAIC0wLDAgKzEsMTM0IEBACisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2dsdWUtY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vZ2x1ZS1wcm9jLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorCS50ZXh0CisKKy8qCisgKiBTYXZlIENQVSBzdGF0ZSBmb3IgYSBzdXNwZW5kCisgKiAgcjEgPSB2OnAgb2Zmc2V0CisgKiAgcjMgPSB2aXJ0dWFsIHJldHVybiBmdW5jdGlvbgorICogTm90ZTogc3AgaXMgZGVjcmVtZW50ZWQgdG8gYWxsb2NhdGUgc3BhY2UgZm9yIENQVSBzdGF0ZSBvbiBzdGFjaworICogcjAtcjMscjkscjEwLGxyIGNvcnJ1cHRlZAorICovCitFTlRSWShjcHVfc3VzcGVuZCkKKwltb3YJcjksIGxyCisjaWZkZWYgTVVMVElfQ1BVCisJbGRyCXIxMCwgPXByb2Nlc3NvcgorCW1vdglyMiwgc3AJCQlAIGN1cnJlbnQgdmlydHVhbCBTUAorCWxkcglyMCwgW3IxMCwgI0NQVV9TTEVFUF9TSVpFXSBAIHNpemUgb2YgQ1BVIHNsZWVwIHN0YXRlCisJbGRyCWlwLCBbcjEwLCAjQ1BVX0RPX1JFU1VNRV0gQCB2aXJ0dWFsIHJlc3VtZSBmdW5jdGlvbgorCXN1YglzcCwgc3AsIHIwCQlAIGFsbG9jYXRlIENQVSBzdGF0ZSBvbiBzdGFjaworCW1vdglyMCwgc3AJCQlAIHNhdmUgcG9pbnRlcgorCWFkZAlpcCwgaXAsIHIxCQlAIGNvbnZlcnQgcmVzdW1lIGZuIHRvIHBoeXMKKwlzdG1mZAlzcCEsIHtyMSwgcjIsIHIzLCBpcH0JQCBzYXZlIHY6cCwgdmlydCBTUCwgcmV0Zm4sIHBoeXMgcmVzdW1lIGZuCisJbGRyCXIzLCA9c2xlZXBfc2F2ZV9zcAorCWFkZAlyMiwgc3AsIHIxCQlAIGNvbnZlcnQgU1AgdG8gcGh5cworI2lmZGVmIENPTkZJR19TTVAKKwlBTFRfU01QKG1yYyBwMTUsIDAsIGxyLCBjMCwgYzAsIDUpCisJQUxUX1VQKG1vdiBsciwgIzApCisJYW5kCWxyLCBsciwgIzE1CisJc3RyCXIyLCBbcjMsIGxyLCBsc2wgIzJdCUAgc2F2ZSBwaHlzIFNQCisjZWxzZQorCXN0cglyMiwgW3IzXQkJQCBzYXZlIHBoeXMgU1AKKyNlbmRpZgorCW1vdglsciwgcGMKKwlsZHIJcGMsIFtyMTAsICNDUFVfRE9fU1VTUEVORF0gQCBzYXZlIENQVSBzdGF0ZQorI2Vsc2UKKwltb3YJcjIsIHNwCQkJQCBjdXJyZW50IHZpcnR1YWwgU1AKKwlsZHIJcjAsID1jcHVfc3VzcGVuZF9zaXplCisJc3ViCXNwLCBzcCwgcjAJCUAgYWxsb2NhdGUgQ1BVIHN0YXRlIG9uIHN0YWNrCisJbW92CXIwLCBzcAkJCUAgc2F2ZSBwb2ludGVyCisJc3RtZmQJc3AhLCB7cjEsIHIyLCByM30JQCBzYXZlIHY6cCwgdmlydCBTUCwgcmV0dXJuIGZuCisJbGRyCXIzLCA9c2xlZXBfc2F2ZV9zcAorCWFkZAlyMiwgc3AsIHIxCQlAIGNvbnZlcnQgU1AgdG8gcGh5cworI2lmZGVmIENPTkZJR19TTVAKKwlBTFRfU01QKG1yYyBwMTUsIDAsIGxyLCBjMCwgYzAsIDUpCisJQUxUX1VQKG1vdiBsciwgIzApCisJYW5kCWxyLCBsciwgIzE1CisJc3RyCXIyLCBbcjMsIGxyLCBsc2wgIzJdCUAgc2F2ZSBwaHlzIFNQCisjZWxzZQorCXN0cglyMiwgW3IzXQkJQCBzYXZlIHBoeXMgU1AKKyNlbmRpZgorCWJsCWNwdV9kb19zdXNwZW5kCisjZW5kaWYKKworCUAgZmx1c2ggZGF0YSBjYWNoZQorI2lmZGVmIE1VTFRJX0NBQ0hFCisJbGRyCXIxMCwgPWNwdV9jYWNoZQorCW1vdglsciwgcjkKKwlsZHIJcGMsIFtyMTAsICNDQUNIRV9GTFVTSF9LRVJOX0FMTF0KKyNlbHNlCisJbW92CWxyLCByOQorCWIJX19jcHVjX2ZsdXNoX2tlcm5fYWxsCisjZW5kaWYKK0VORFBST0MoY3B1X3N1c3BlbmQpCisJLmx0b3JnCisKKy8qCisgKiByMCA9IGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqIHIxID0gdjpwIG9mZnNldCAocHJlc2VydmVkIGJ5IGNwdV9kb19yZXN1bWUpCisgKiByMiA9IHBoeXMgcGFnZSB0YWJsZSBiYXNlCisgKiByMyA9IEwxIHNlY3Rpb24gZmxhZ3MKKyAqLworRU5UUlkoY3B1X3Jlc3VtZV9tbXUpCisJYWRyCXI0LCBjcHVfcmVzdW1lX3R1cm5fbW11X29uCisJbW92CXI0LCByNCwgbHNyICMyMAorCW9ycglyMywgcjMsIHI0LCBsc2wgIzIwCisJbGRyCXI1LCBbcjIsIHI0LCBsc2wgIzJdCUAgc2F2ZSBvbGQgbWFwcGluZworCXN0cglyMywgW3IyLCByNCwgbHNsICMyXQlAIHNldHVwIDE6MSBtYXBwaW5nIGZvciBtbXUgY29kZQorCXN1YglyMiwgcjIsIHIxCisJbGRyCXIzLCA9Y3B1X3Jlc3VtZV9hZnRlcl9tbXUKKwliaWMJcjEsIHIwLCAjQ1JfQwkJQCBlbnN1cmUgRC1jYWNoZSBpcyBkaXNhYmxlZAorCWIJY3B1X3Jlc3VtZV90dXJuX21tdV9vbgorRU5EUFJPQyhjcHVfcmVzdW1lX21tdSkKKwkubHRvcmcKKwkuYWxpZ24JNQorY3B1X3Jlc3VtZV90dXJuX21tdV9vbjoKKwltY3IJcDE1LCAwLCByMSwgYzEsIGMwLCAwCUAgdHVybiBvbiBNTVUsIEktY2FjaGUsIGV0YworCW1yYwlwMTUsIDAsIHIxLCBjMCwgYzAsIDAJQCByZWFkIGlkIHJlZworCW1vdglyMSwgcjEKKwltb3YJcjEsIHIxCisJbW92CXBjLCByMwkJCUAganVtcCB0byB2aXJ0dWFsIGFkZHJlc3MKK0VORFBST0MoY3B1X3Jlc3VtZV90dXJuX21tdV9vbikKK2NwdV9yZXN1bWVfYWZ0ZXJfbW11OgorCXN0cglyNSwgW3IyLCByNCwgbHNsICMyXQlAIHJlc3RvcmUgb2xkIG1hcHBpbmcKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCUAgdHVybiBvbiBELWNhY2hlCisJbW92CXBjLCBscgorRU5EUFJPQyhjcHVfcmVzdW1lX2FmdGVyX21tdSkKKworLyoKKyAqIE5vdGU6IFllcywgcGFydCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbG9jYXRlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uLgorICogICAgICAgVGhpcyBpcyB0byBhbGxvdyBzbGVlcF9zYXZlX3NwIHRvIGJlIGFjY2Vzc2VkIHdpdGggYSByZWxhdGl2ZSBsb2FkCisgKiAgICAgICB3aGlsZSB3ZSBjYW4ndCByZWx5IG9uIGFueSBNTVUgdHJhbnNsYXRpb24uICBXZSBjb3VsZCBoYXZlIHB1dAorICogICAgICAgc2xlZXBfc2F2ZV9zcCBpbiB0aGUgLnRleHQgc2VjdGlvbiBhcyB3ZWxsLCBidXQgc29tZSBzZXR1cHMgbWlnaHQKKyAqICAgICAgIGluc2lzdCBvbiBpdCB0byBiZSB0cnVseSByZWFkLW9ubHkuCisgKi8KKwkuZGF0YQorCS5hbGlnbgorRU5UUlkoY3B1X3Jlc3VtZSkKKyNpZmRlZiBDT05GSUdfU01QCisJYWRyCXIwLCBzbGVlcF9zYXZlX3NwCisJQUxUX1NNUChtcmMgcDE1LCAwLCByMSwgYzAsIGMwLCA1KQorCUFMVF9VUChtb3YgcjEsICMwKQorCWFuZAlyMSwgcjEsICMxNQorCWxkcglyMCwgW3IwLCByMSwgbHNsICMyXQlAIHN0YWNrIHBoeXMgYWRkcgorI2Vsc2UKKwlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJQCBzdGFjayBwaHlzIGFkZHIKKyNlbmRpZgorCW1zcgljcHNyX2MsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERSBAIHNldCBTVkMsIGlycXMgb2ZmCisjaWZkZWYgTVVMVElfQ1BVCisJbGRtaWEJcjAhLCB7cjEsIHNwLCBsciwgcGN9CUAgbG9hZCB2OnAsIHN0YWNrLCByZXR1cm4gZm4sIHJlc3VtZSBmbgorI2Vsc2UKKwlsZG1pYQlyMCEsIHtyMSwgc3AsIGxyfQlAIGxvYWQgdjpwLCBzdGFjaywgcmV0dXJuIGZuCisJYgljcHVfZG9fcmVzdW1lCisjZW5kaWYKK0VORFBST0MoY3B1X3Jlc3VtZSkKKworc2xlZXBfc2F2ZV9zcDoKKwkucmVwdAlDT05GSUdfTlJfQ1BVUworCS5sb25nCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCisJLmVuZHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3NjdS5jCmluZGV4IDlhYjQxNDkuLmExZTc1N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfc2N1LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF9zY3UuYwpAQCAtNTAsMyArNTAsMjYgQEAKIAkgKi8KIAlmbHVzaF9jYWNoZV9hbGwoKTsKIH0KKworLyoKKyAqIFNldCB0aGUgZXhlY3V0aW5nIENQVXMgcG93ZXIgbW9kZSBhcyBkZWZpbmVkLiAgVGhpcyB3aWxsIGJlIGluCisgKiBwcmVwYXJhdGlvbiBmb3IgaXQgZXhlY3V0aW5nIGEgV0ZJIGluc3RydWN0aW9uLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aCBwcmVlbXB0aW9uIGRpc2FibGVkLCBhbmQgYXMgaXQKKyAqIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgZGlzYWJsaW5nIGNvaGVyZW5jeSwgY2FjaGVzIG11c3QgaGF2ZSBiZWVuCisgKiBmbHVzaGVkLiAgSW50ZXJydXB0cyBtdXN0IGFsc28gaGF2ZSBiZWVuIGRpc2FibGVkLgorICovCitpbnQgc2N1X3Bvd2VyX21vZGUodm9pZCBfX2lvbWVtICpzY3VfYmFzZSwgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKG1vZGUgPiAzIHx8IG1vZGUgPT0gMSB8fCBjcHUgPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IF9fcmF3X3JlYWRiKHNjdV9iYXNlICsgU0NVX0NQVV9TVEFUVVMgKyBjcHUpICYgfjB4MDM7CisJdmFsIHw9IG1vZGU7CisJX19yYXdfd3JpdGViKHZhbCwgc2N1X2Jhc2UgKyBTQ1VfQ1BVX1NUQVRVUyArIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMgYi9hcmNoL2FybS9rZXJuZWwvc21wX3R3ZC5jCmluZGV4IGZkOTE1NjYuLjYwNjM2ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXBfdHdkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NtcF90d2QuYwpAQCAtMzYsNiArMzYsNyBAQAogCQkvKiB0aW1lciBsb2FkIGFscmVhZHkgc2V0IHVwICovCiAJCWN0cmwgPSBUV0RfVElNRVJfQ09OVFJPTF9FTkFCTEUgfCBUV0RfVElNRVJfQ09OVFJPTF9JVF9FTkFCTEUKIAkJCXwgVFdEX1RJTUVSX0NPTlRST0xfUEVSSU9ESUM7CisJCV9fcmF3X3dyaXRlbCh0d2RfdGltZXJfcmF0ZSAvIEhaLCB0d2RfYmFzZSArIFRXRF9USU1FUl9MT0FEKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgogCQkvKiBwZXJpb2Qgc2V0LCBhbmQgdGltZXIgZW5hYmxlZCBpbiAnbmV4dF9ldmVudCcgaG9vayAqLwpAQCAtODEsNyArODIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgdHdkX2NhbGlicmF0ZV9yYXRlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBsb2FkLCBjb3VudDsKKwl1bnNpZ25lZCBsb25nIGNvdW50OwogCXU2NCB3YWl0amlmZmllczsKIAogCS8qCkBAIC0xMTYsMTAgKzExNyw2IEBACiAJCXByaW50aygiJWx1LiUwMmx1TUh6LlxuIiwgdHdkX3RpbWVyX3JhdGUgLyAxMDAwMDAwLAogCQkJKHR3ZF90aW1lcl9yYXRlIC8gMTAwMDAwMCkgJSAxMDApOwogCX0KLQotCWxvYWQgPSB0d2RfdGltZXJfcmF0ZSAvIEhaOwotCi0JX19yYXdfd3JpdGVsKGxvYWQsIHR3ZF9iYXNlICsgVFdEX1RJTUVSX0xPQUQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA4NmI2NmYzLi42MTQ2Mjc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2FybS9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjEsNiArMjEsMTIgQEAKICNkZWZpbmUgQVJNX0NQVV9LRUVQKHgpCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX1NNUF9PTl9VUCkgJiYgIWRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorI2RlZmluZSBBUk1fRVhJVF9LRUVQKHgpCXgKKyNlbHNlCisjZGVmaW5lIEFSTV9FWElUX0tFRVAoeCkKKyNlbmRpZgorCiBPVVRQVVRfQVJDSChhcm0pCiBFTlRSWShzdGV4dCkKIApAQCAtNDMsNiArNDksNyBAQAogCQlfc2luaXR0ZXh0ID0gLjsKIAkJCUhFQURfVEVYVAogCQkJSU5JVF9URVhUCisJCQlBUk1fRVhJVF9LRUVQKEVYSVRfVEVYVCkKIAkJX2Vpbml0dGV4dCA9IC47CiAJCUFSTV9DUFVfRElTQ0FSRChQUk9DX0lORk8pCiAJCV9fYXJjaF9pbmZvX2JlZ2luID0gLjsKQEAgLTY3LDYgKzc0LDcgQEAKICNpZm5kZWYgQ09ORklHX1hJUF9LRVJORUwKIAkJX19pbml0X2JlZ2luID0gX3N0ZXh0OwogCQlJTklUX0RBVEEKKwkJQVJNX0VYSVRfS0VFUChFWElUX0RBVEEpCiAjZW5kaWYKIAl9CiAKQEAgLTE2Miw2ICsxNzAsNyBAQAogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJX19pbml0X2JlZ2luID0gLjsKIAkJSU5JVF9EQVRBCisJCUFSTV9FWElUX0tFRVAoRVhJVF9EQVRBKQogCQkuID0gQUxJR04oUEFHRV9TSVpFKTsKIAkJX19pbml0X2VuZCA9IC47CiAjZW5kaWYKQEAgLTI0Nyw2ICsyNTYsOCBAQAogCX0KICNlbmRpZgogCisJTk9URVMKKwogCUJTU19TRUNUSU9OKDAsIDAsIDApCiAJX2VuZCA9IC47CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1zbmFwcGVyOTI2MC5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKaW5kZXggMGE5OWIzYy4uMTdmN2Q5YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLXNuYXBwZXI5MjYwLmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCXsKIAkJLyogUlRDICovCiAJCUkyQ19CT0FSRF9JTkZPKCJpc2wxMjA4IiwgMHg2ZiksCisJCS5pcnEgPSBncGlvX3RvX2lycShBVDkxX1BJTl9QQTMxKSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBiZmRkOGFiLi5kZGViNjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjIwLDE1ICsyMjAsOCBAQAogI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCiAjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGdwaW87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlycV90b19ncGlvKHVuc2lnbmVkIGlycSkKLXsKLQlyZXR1cm4gaXJxOwotfQorI2RlZmluZSBncGlvX3RvX2lycShncGlvKSAoZ3BpbykKKyNkZWZpbmUgaXJxX3RvX2dwaW8oaXJxKSAgKGlycSkKIAogI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYwppbmRleCAzNDNkZTczLi40YTY4YzJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGRhdmluY2lfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgaW50IGRhdmluY2lfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAJc3RydWN0IGRhdmluY2lfY3B1ZnJlcV9jb25maWcgKnBkYXRhID0gY3B1ZnJlcS5kZXYtPnBsYXRmb3JtX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwppbmRleCA5ZWVjNjMwLi5iZWRhOGE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKQEAgLTQ4MCw4ICs0ODAsMTUgQEAKIAkucmVzb3VyY2UJPSBkYTg1MF9tY2FzcF9yZXNvdXJjZXMsCiB9OwogCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRhdmluY2lfcGNtX2RldmljZSA9IHsKKwkubmFtZQk9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCisJLmlkCT0gLTEsCit9OworCiB2b2lkIF9faW5pdCBkYTh4eF9yZWdpc3Rlcl9tY2FzcChpbnQgaWQsIHN0cnVjdCBzbmRfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkYXZpbmNpX3BjbV9kZXZpY2UpOworCiAJLyogREE4MzAvT01BUC1MMTM3IGhhcyAzIGluc3RhbmNlcyBvZiBNY0FTUCAqLwogCWlmIChjcHVfaXNfZGF2aW5jaV9kYTgzMCgpICYmIGlkID09IDEpIHsKIAkJZGE4MzBfbWNhc3AxX2RldmljZS5kZXYucGxhdGZvcm1fZGF0YSA9IHBkYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2dwaW8tdG5ldHYxMDd4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYwppbmRleCBkMTAyOTg2Li4zZmEzZTI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvZ3Bpby10bmV0djEwN3guYwpAQCAtNTgsNyArNTgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIAotCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmVuYWJsZSwgZ3Bpbyk7CisJZ3Bpb19yZWdfc2V0X2JpdChyZWdzLT5lbmFibGUsIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCkBAIC03NCw3ICs3NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCi0JZ3Bpb19yZWdfY2xlYXJfYml0KCZyZWdzLT5lbmFibGUsIGdwaW8pOworCWdwaW9fcmVnX2NsZWFyX2JpdChyZWdzLT5lbmFibGUsIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogfQpAQCAtODgsNyArODgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIAotCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmRpcmVjdGlvbiwgZ3Bpbyk7CisJZ3Bpb19yZWdfc2V0X2JpdChyZWdzLT5kaXJlY3Rpb24sIGdwaW8pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCkBAIC0xMDYsMTEgKzEwNiwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAodmFsdWUpCi0JCWdwaW9fcmVnX3NldF9iaXQoJnJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKKwkJZ3Bpb19yZWdfc2V0X2JpdChyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CiAJZWxzZQotCQlncGlvX3JlZ19jbGVhcl9iaXQoJnJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKKwkJZ3Bpb19yZWdfY2xlYXJfYml0KHJlZ3MtPmRhdGFfb3V0LCBncGlvKTsKIAotCWdwaW9fcmVnX2NsZWFyX2JpdCgmcmVncy0+ZGlyZWN0aW9uLCBncGlvKTsKKwlncGlvX3JlZ19jbGVhcl9iaXQocmVncy0+ZGlyZWN0aW9uLCBncGlvKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN0bHItPmxvY2ssIGZsYWdzKTsKIApAQCAtMTI0LDcgKzEyNCw3IEBACiAJdW5zaWduZWQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CiAJaW50IHJldDsKIAotCXJldCA9IGdwaW9fcmVnX2dldF9iaXQoJnJlZ3MtPmRhdGFfaW4sIGdwaW8pOworCXJldCA9IGdwaW9fcmVnX2dldF9iaXQocmVncy0+ZGF0YV9pbiwgZ3Bpbyk7CiAKIAlyZXR1cm4gcmV0ID8gMSA6IDA7CiB9CkBAIC0xNDAsOSArMTQwLDkgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3Rsci0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKHZhbHVlKQotCQlncGlvX3JlZ19zZXRfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisJCWdwaW9fcmVnX3NldF9iaXQocmVncy0+ZGF0YV9vdXQsIGdwaW8pOwogCWVsc2UKLQkJZ3Bpb19yZWdfY2xlYXJfYml0KCZyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CisJCWdwaW9fcmVnX2NsZWFyX2JpdChyZWdzLT5kYXRhX291dCwgZ3Bpbyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdGxyLT5sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAppbmRleCA3MzBjNDlkLi4xNGE1MDQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvY2xrZGV2LmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTUFDSF9DTEtERVZfSAogI2RlZmluZSBfX01BQ0hfQ0xLREVWX0gKIAorc3RydWN0IGNsazsKKwogc3RhdGljIGlubGluZSBpbnQgX19jbGtfZ2V0KHN0cnVjdCBjbGsgKmNsaykKIHsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2NvcmUuYwppbmRleCBmZmRmODdiLi44MjA3OTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvY29yZS5jCkBAIC04MzgsNyArODM4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXA5M3h4X2FjOTdfcmVzb3VyY2VzW10gPSB7CiAJewogCQkuc3RhcnQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSwKLQkJLmVuZAk9IEVQOTNYWF9BQUNfUEhZU19CQVNFICsgMHhiMCAtIDEsCisJCS5lbmQJPSBFUDkzWFhfQUFDX1BIWVNfQkFTRSArIDB4YWMgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCXsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzeHguYwppbmRleCA0YjA0MzE2Li45OTY5YmIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5M3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTN4eC5jCkBAIC0zMCw4ICszMCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKworI2luY2x1ZGUgPHNvdW5kL2NzNDI3MS5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvZmIuaD4KKyNpbmNsdWRlIDxtYWNoL2VwOTN4eF9zcGkuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgpAQCAtOTMsNiArOTgsODMgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRURCOTN4eCBTUEkgcGVyaXBoZXJhbCBoYW5kbGluZworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGNzNDI3MV9wbGF0Zm9ybV9kYXRhIGVkYjkzeHhfY3M0MjcxX2RhdGEgPSB7CisJLmdwaW9fbnJlc2V0CT0gLUVJTlZBTCwJLyogZmlsbGVkIGluIGxhdGVyICovCit9OworCitzdGF0aWMgaW50IGVkYjkzeHhfY3M0MjcxX2h3X3NldHVwKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCit7CisJcmV0dXJuIGdwaW9fcmVxdWVzdF9vbmUoRVA5M1hYX0dQSU9fTElORV9FR1BJTzYsCisJCQkJR1BJT0ZfT1VUX0lOSVRfSElHSCwgc3BpLT5tb2RhbGlhcyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkYjkzeHhfY3M0MjcxX2h3X2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlncGlvX2ZyZWUoRVA5M1hYX0dQSU9fTElORV9FR1BJTzYpOworfQorCitzdGF0aWMgdm9pZCBlZGI5M3h4X2NzNDI3MV9od19jc19jb250cm9sKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIGludCB2YWx1ZSkKK3sKKwlncGlvX3NldF92YWx1ZShFUDkzWFhfR1BJT19MSU5FX0VHUElPNiwgdmFsdWUpOworfQorCitzdGF0aWMgc3RydWN0IGVwOTN4eF9zcGlfY2hpcF9vcHMgZWRiOTN4eF9jczQyNzFfaHcgPSB7CisJLnNldHVwCQk9IGVkYjkzeHhfY3M0MjcxX2h3X3NldHVwLAorCS5jbGVhbnVwCT0gZWRiOTN4eF9jczQyNzFfaHdfY2xlYW51cCwKKwkuY3NfY29udHJvbAk9IGVkYjkzeHhfY3M0MjcxX2h3X2NzX2NvbnRyb2wsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIGVkYjkzeHhfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzCQk9ICJjczQyNzEiLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZWRiOTN4eF9jczQyNzFfZGF0YSwKKwkJLmNvbnRyb2xsZXJfZGF0YQk9ICZlZGI5M3h4X2NzNDI3MV9odywKKwkJLm1heF9zcGVlZF9oegkJPSA2MDAwMDAwLAorCQkuYnVzX251bQkJPSAwLAorCQkuY2hpcF9zZWxlY3QJCT0gMCwKKwkJLm1vZGUJCQk9IFNQSV9NT0RFXzMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZXA5M3h4X3NwaV9pbmZvIGVkYjkzeHhfc3BpX2luZm8gX19pbml0ZGF0YSA9IHsKKwkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKGVkYjkzeHhfc3BpX2JvYXJkX2luZm8pLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGVkYjkzeHhfcmVnaXN0ZXJfc3BpKHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZWRiOTMwMSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwMigpKQorCQllZGI5M3h4X2NzNDI3MV9kYXRhLmdwaW9fbnJlc2V0ID0gRVA5M1hYX0dQSU9fTElORV9FR1BJTzE7CisJZWxzZSBpZiAobWFjaGluZV9pc19lZGI5MzAyYSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwN2EoKSkKKwkJZWRiOTN4eF9jczQyNzFfZGF0YS5ncGlvX25yZXNldCA9IEVQOTNYWF9HUElPX0xJTkVfSCgyKTsKKwllbHNlIGlmIChtYWNoaW5lX2lzX2VkYjkzMTVhKCkpCisJCWVkYjkzeHhfY3M0MjcxX2RhdGEuZ3Bpb19ucmVzZXQgPSBFUDkzWFhfR1BJT19MSU5FX0VHUElPMTQ7CisKKwllcDkzeHhfcmVnaXN0ZXJfc3BpKCZlZGI5M3h4X3NwaV9pbmZvLCBlZGI5M3h4X3NwaV9ib2FyZF9pbmZvLAorCQkJICAgIEFSUkFZX1NJWkUoZWRiOTN4eF9zcGlfYm9hcmRfaW5mbykpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFREI5M3h4IEkyUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9faW5pdCBlZGI5M3h4X2hhc19hdWRpbyh2b2lkKQoreworCXJldHVybiAobWFjaGluZV9pc19lZGI5MzAxKCkgfHwgbWFjaGluZV9pc19lZGI5MzAyKCkgfHwKKwkJbWFjaGluZV9pc19lZGI5MzAyYSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMwN2EoKSB8fAorCQltYWNoaW5lX2lzX2VkYjkzMTVhKCkpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9yZWdpc3Rlcl9pMnModm9pZCkKK3sKKwlpZiAoZWRiOTN4eF9oYXNfYXVkaW8oKSkgeworCQllcDkzeHhfcmVnaXN0ZXJfaTJzKCk7CisJfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBFREI5M3h4IHB3bQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9yZWdpc3Rlcl9wd20odm9pZCkKQEAgLTExMSwxMyArMTkzLDQ3IEBACiB9CiAKIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVEQjkzeHggZnJhbWVidWZmZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHN0cnVjdCBlcDkzeHhmYl9tYWNoX2luZm8gX19pbml0ZGF0YSBlZGI5M3h4ZmJfaW5mbyA9IHsKKwkubnVtX21vZGVzCT0gRVA5M1hYRkJfVVNFX01PREVEQiwKKwkuYnBwCQk9IDE2LAorCS5mbGFncwkJPSAwLAorfTsKKworc3RhdGljIGludCBfX2luaXQgZWRiOTN4eF9oYXNfZmIodm9pZCkKK3sKKwkvKiBUaGVzZSBwbGF0Zm9ybXMgaGF2ZSBhbiBlcDkzeHggd2l0aCB2aWRlbyBjYXBhYmlsaXR5ICovCisJcmV0dXJuIG1hY2hpbmVfaXNfZWRiOTMwNygpIHx8IG1hY2hpbmVfaXNfZWRiOTMwN2EoKSB8fAorCSAgICAgICBtYWNoaW5lX2lzX2VkYjkzMTIoKSB8fCBtYWNoaW5lX2lzX2VkYjkzMTUoKSB8fAorCSAgICAgICBtYWNoaW5lX2lzX2VkYjkzMTVhKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlZGI5M3h4X3JlZ2lzdGVyX2ZiKHZvaWQpCit7CisJaWYgKCFlZGI5M3h4X2hhc19mYigpKQorCQlyZXR1cm47CisKKwlpZiAobWFjaGluZV9pc19lZGI5MzA3YSgpIHx8IG1hY2hpbmVfaXNfZWRiOTMxNWEoKSkKKwkJZWRiOTN4eGZiX2luZm8uZmxhZ3MgfD0gRVA5M1hYRkJfVVNFX1NEQ1NOMDsKKwllbHNlCisJCWVkYjkzeHhmYl9pbmZvLmZsYWdzIHw9IEVQOTNYWEZCX1VTRV9TRENTTjM7CisKKwllcDkzeHhfcmVnaXN0ZXJfZmIoJmVkYjkzeHhmYl9pbmZvKTsKK30KKworCiBzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTN4eF9pbml0X21hY2hpbmUodm9pZCkKIHsKIAllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CiAJZWRiOTN4eF9yZWdpc3Rlcl9mbGFzaCgpOwogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJmVkYjkzeHhfZXRoX2RhdGEsIDEpOwogCWVkYjkzeHhfcmVnaXN0ZXJfaTJjKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9zcGkoKTsKKwllZGI5M3h4X3JlZ2lzdGVyX2kycygpOwogCWVkYjkzeHhfcmVnaXN0ZXJfcHdtKCk7CisJZWRiOTN4eF9yZWdpc3Rlcl9mYigpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2dwaW8uYwppbmRleCBmM2RjNzZmLi5hODg5ZmE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvZ3Bpby5jCkBAIC02MSw3ICs2MSw3IEBACiAJZ3Bpb19pbnRfdW5tYXNrZWRbbGluZSA+PiAzXSAmPSB+KDEgPDwgKGxpbmUgJiA3KSk7CiB9CiAKLXZvaWQgZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgYm9vbCBlbmFibGUpCiB7CiAJaW50IGxpbmUgPSBpcnFfdG9fZ3BpbyhpcnEpOwogCWludCBwb3J0ID0gbGluZSA+PiAzOwpAQCAtNzUsNyArNzUsNiBAQAogCV9fcmF3X3dyaXRlYihncGlvX2ludF9kZWJvdW5jZVtwb3J0XSwKIAkJRVA5M1hYX0dQSU9fUkVHKGludF9kZWJvdW5jZV9yZWdpc3Rlcl9vZmZzZXRbcG9ydF0pKTsKIH0KLUVYUE9SVF9TWU1CT0woZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKTsKIAogc3RhdGljIHZvaWQgZXA5M3h4X2dwaW9fYWJfaXJxX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewpAQCAtMzM1LDYgKzMzNCwyMCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBlcDkzeHhfZ3Bpb19zZXRfZGVib3VuY2Uoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBkZWJvdW5jZSkKK3sKKwlpbnQgZ3BpbyA9IGNoaXAtPmJhc2UgKyBvZmZzZXQ7CisJaW50IGlycSA9IGdwaW9fdG9faXJxKGdwaW8pOworCisJaWYgKGlycSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZXA5M3h4X2dwaW9faW50X2RlYm91bmNlKGlycSwgZGVib3VuY2UgPyB0cnVlIDogZmFsc2UpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIGVwOTN4eF9ncGlvX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKIHsKIAlzdHJ1Y3QgZXA5M3h4X2dwaW9fY2hpcCAqZXA5M3h4X2NoaXAgPSB0b19lcDkzeHhfZ3Bpb19jaGlwKGNoaXApOwpAQCAtNDI3LDYgKzQ0MCwyNSBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspCi0JCWdwaW9jaGlwX2FkZCgmZXA5M3h4X2dwaW9fYmFua3NbaV0uY2hpcCk7CisJLyogU2V0IFBvcnRzIEMsIEQsIEUsIEcsIGFuZCBIIGZvciBHUElPIHVzZSAqLworCWVwOTN4eF9kZXZjZmdfc2V0X2JpdHMoRVA5M1hYX1NZU0NPTl9ERVZDRkdfS0VZUyB8CisJCQkJIEVQOTNYWF9TWVNDT05fREVWQ0ZHX0dPTksgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19FT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19HT05JREUgfAorCQkJCSBFUDkzWFhfU1lTQ09OX0RFVkNGR19IT05JREUpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXA5M3h4X2dwaW9fYmFua3MpOyBpKyspIHsKKwkJc3RydWN0IGdwaW9fY2hpcCAqY2hpcCA9ICZlcDkzeHhfZ3Bpb19iYW5rc1tpXS5jaGlwOworCisJCS8qCisJCSAqIFBvcnRzIEEsIEIsIGFuZCBGIHN1cHBvcnQgaW5wdXQgZGVib3VuY2luZyB3aGVuCisJCSAqIHVzZWQgYXMgaW50ZXJydXB0cy4KKwkJICovCisJCWlmICghc3RyY21wKGNoaXAtPmxhYmVsLCAiQSIpIHx8CisJCSAgICAhc3RyY21wKGNoaXAtPmxhYmVsLCAiQiIpIHx8CisJCSAgICAhc3RyY21wKGNoaXAtPmxhYmVsLCAiRiIpKQorCQkJY2hpcC0+c2V0X2RlYm91bmNlID0gZXA5M3h4X2dwaW9fc2V0X2RlYm91bmNlOworCisJCWdwaW9jaGlwX2FkZChjaGlwKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCBjOTkxYjE0Li5jNTcxNTJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTk5LDggKzk5LDYgQEAKIC8qIG1heGltdW0gdmFsdWUgZm9yIGlycSBjYXBhYmxlIGxpbmUgaWRlbnRpZmllcnMgKi8KICNkZWZpbmUgRVA5M1hYX0dQSU9fTElORV9NQVhfSVJRCUVQOTNYWF9HUElPX0xJTkVfRig3KQogCi1leHRlcm4gdm9pZCBlcDkzeHhfZ3Bpb19pbnRfZGVib3VuY2UodW5zaWduZWQgaW50IGlycSwgaW50IGVuYWJsZSk7Ci0KIC8qIG5ldyBnZW5lcmljIEdQSU8gQVBJIC0gc2VlIERvY3VtZW50YXRpb24vZ3Bpby50eHQgKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2dwaW8uaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS10aW1lci5jCmluZGV4IGJjNWU4M2YuLmE5MjFmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUtdGltZXIuYwpAQCAtNCwxMCArNCwxMSBAQAogICogIENvcHlyaWdodCAoQykgMTk5OCBSdXNzZWxsIEtpbmcuCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFBoaWwgQmx1bmRlbGwKICAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja3NvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0xNiwzMiArMTcsNzYgQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCi0vKgotICogRm9vdGJyaWRnZSB0aW1lciAxIHN1cHBvcnQuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyMV9sYXRjaDsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXIxX2dldHRpbWVvZmZzZXQgKHZvaWQpCitzdGF0aWMgY3ljbGVfdCBja3NyY19kYzIxMjg1X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKLQl1bnNpZ25lZCBsb25nIHZhbHVlID0gdGltZXIxX2xhdGNoIC0gKkNTUl9USU1FUjFfVkFMVUU7Ci0KLQlyZXR1cm4gKCh0aWNrX25zZWMgLyAxMDAwKSAqIHZhbHVlKSAvIHRpbWVyMV9sYXRjaDsKKwlyZXR1cm4gY3MtPm1hc2sgLSAqQ1NSX1RJTUVSMl9WQUxVRTsKIH0KIAotc3RhdGljIGlycXJldHVybl90Ci10aW1lcjFfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgY2tzcmNfZGMyMTI4NV9lbmFibGUoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKKwkqQ1NSX1RJTUVSMl9MT0FEID0gY3MtPm1hc2s7CisJKkNTUl9USU1FUjJfQ0xSID0gMDsKKwkqQ1NSX1RJTUVSMl9DTlRMID0gVElNRVJfQ05UTF9FTkFCTEUgfCBUSU1FUl9DTlRMX0RJVjE2OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNrc3JjX2RjMjEyODVfZGlzYWJsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQoreworCSpDU1JfVElNRVIyX0NOVEwgPSAwOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNrc3JjX2RjMjEyODUgPSB7CisJLm5hbWUJCT0gImRjMjEyODVfdGltZXIyIiwKKwkucmF0aW5nCQk9IDIwMCwKKwkucmVhZAkJPSBja3NyY19kYzIxMjg1X3JlYWQsCisJLmVuYWJsZQkJPSBja3NyY19kYzIxMjg1X2VuYWJsZSwKKwkuZGlzYWJsZQk9IGNrc3JjX2RjMjEyODVfZGlzYWJsZSwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDI0KSwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgdm9pZCBja2V2dF9kYzIxMjg1X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmMpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJKkNTUl9USU1FUjFfQ0xSID0gMDsKKwkJKkNTUl9USU1FUjFfTE9BRCA9IChtZW1fZmNsa18yMTI4NSArIDggKiBIWikgLyAoMTYgKiBIWik7CisJCSpDU1JfVElNRVIxX0NOVEwgPSBUSU1FUl9DTlRMX0VOQUJMRSB8IFRJTUVSX0NOVExfQVVUT1JFTE9BRCB8CisJCQkJICAgVElNRVJfQ05UTF9ESVYxNjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQkqQ1NSX1RJTUVSMV9DTlRMID0gMDsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBja2V2dF9kYzIxMjg1ID0geworCS5uYW1lCQk9ICJkYzIxMjg1X3RpbWVyMSIsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMsCisJLnJhdGluZwkJPSAyMDAsCisJLmlycQkJPSBJUlFfVElNRVIxLAorCS5zZXRfbW9kZQk9IGNrZXZ0X2RjMjEyODVfc2V0X21vZGUsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdGltZXIxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2UgPSBkZXZfaWQ7CisKIAkqQ1NSX1RJTUVSMV9DTFIgPSAwOwogCi0JdGltZXJfdGljaygpOworCWNlLT5ldmVudF9oYW5kbGVyKGNlKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gZm9vdGJyaWRnZV90aW1lcl9pcnEgPSB7Ci0JLm5hbWUJCT0gIlRpbWVyMSB0aW1lciB0aWNrIiwKKwkubmFtZQkJPSAiZGMyMTI4NV90aW1lcjEiLAogCS5oYW5kbGVyCT0gdGltZXIxX2ludGVycnVwdCwKIAkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCisJLmRldl9pZAkJPSAmY2tldnRfZGMyMTI4NSwKIH07CiAKIC8qCkBAIC00OSwxNiArOTQsMTkgQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IGZvb3RicmlkZ2VfdGltZXJfaW5pdCh2b2lkKQogewotCXRpbWVyMV9sYXRjaCA9IChtZW1fZmNsa18yMTI4NSArIDggKiBIWikgLyAoMTYgKiBIWik7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2UgPSAmY2tldnRfZGMyMTI4NTsKIAotCSpDU1JfVElNRVIxX0NMUiAgPSAwOwotCSpDU1JfVElNRVIxX0xPQUQgPSB0aW1lcjFfbGF0Y2g7Ci0JKkNTUl9USU1FUjFfQ05UTCA9IFRJTUVSX0NOVExfRU5BQkxFIHwgVElNRVJfQ05UTF9BVVRPUkVMT0FEIHwgVElNRVJfQ05UTF9ESVYxNjsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2tzcmNfZGMyMTI4NSwgKG1lbV9mY2xrXzIxMjg1ICsgOCkgLyAxNik7CiAKLQlzZXR1cF9pcnEoSVJRX1RJTUVSMSwgJmZvb3RicmlkZ2VfdGltZXJfaXJxKTsKKwlzZXR1cF9pcnEoY2UtPmlycSwgJmZvb3RicmlkZ2VfdGltZXJfaXJxKTsKKworCWNsb2NrZXZlbnRzX2NhbGNfbXVsdF9zaGlmdChjZSwgbWVtX2ZjbGtfMjEyODUsIDUpOworCWNlLT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmLCBjZSk7CisJY2UtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgwMDAwMDQsIGNlKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZSk7CiB9CiAKIHN0cnVjdCBzeXNfdGltZXIgZm9vdGJyaWRnZV90aW1lciA9IHsKIAkuaW5pdAkJPSBmb290YnJpZGdlX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSB0aW1lcjFfZ2V0dGltZW9mZnNldCwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggM2M5ZTBjNC4uMzBiOTcxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpAQCAtMTcsOCArMTcsOCBAQAogCS8qIEZvciBOZXRXaW5kZXIgZGVidWdnaW5nICovCiAJCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CiAJCW1vdglccnAsICMweDAwMDAwM2Y4Ci0JCW9ycglccnYsIFxycCwgIzB4N2MwMDAwMDAJQCBwaHlzaWNhbAotCQlvcnIJXHJwLCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJ2LCBccnAsICMweGZmMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJwLCBccnAsICMweDdjMDAwMDAwCUAgcGh5c2ljYWwKIAkJLmVuZG0KIAogI2RlZmluZSBVQVJUX1NISUZUCTAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYwppbmRleCBmNDg4ZmEyLi40NDFjNmNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCkBAIC00LDEwICs0LDEzIEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4IFJ1c3NlbGwgS2luZy4KICAqICBDb3B5cmlnaHQgKEMpIDE5OTggUGhpbCBCbHVuZGVsbAogICovCisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApAQCAtMTUsNzcgKzE4LDExNSBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qCi0gKiBJU0EgdGltZXIgdGljayBzdXBwb3J0Ci0gKi8KLSNkZWZpbmUgbVNFQ18xMF9mcm9tXzE0ICgoMTQzMTgxODAgKyAxMDApIC8gMjAwKQorI2RlZmluZSBQSVRfTU9ERQkweDQzCisjZGVmaW5lIFBJVF9DSDAJCTB4NDAKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaXNhX2dldHRpbWVvZmZzZXQodm9pZCkKKyNkZWZpbmUgUElUX0xBVENICSgoUElUX1RJQ0tfUkFURSArIEhaIC8gMikgLyBIWikKKworc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyBpbnQgb2xkX2NvdW50OworCXN0YXRpYyB1MzIgb2xkX2ppZnM7CiAJaW50IGNvdW50OworCXUzMiBqaWZzOwogCi0Jc3RhdGljIGludCBjb3VudF9wID0gKG1TRUNfMTBfZnJvbV8xNC82KTsgICAgLyogZm9yIHRoZSBmaXJzdCBjYWxsIGFmdGVyIGJvb3QgKi8KLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBqaWZmaWVzX3AgPSAwOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKLQkvKgotCSAqIGNhY2hlIHZvbGF0aWxlIGppZmZpZXMgdGVtcG9yYXJpbHk7IHdlIGhhdmUgSVJRcyB0dXJuZWQgb2ZmLiAKLQkgKi8KLQl1bnNpZ25lZCBsb25nIGppZmZpZXNfdDsKKwlqaWZzID0gamlmZmllczsKKwlvdXRiX3AoMHgwMCwgUElUX01PREUpOwkJLyogbGF0Y2ggdGhlIGNvdW50ICovCisJY291bnQgPSBpbmJfcChQSVRfQ0gwKTsJCS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KKwljb3VudCB8PSBpbmJfcChQSVRfQ0gwKSA8PCA4OwogCi0JLyogdGltZXIgY291bnQgbWF5IHVuZGVyZmxvdyByaWdodCBoZXJlICovCi0Jb3V0Yl9wKDB4MDAsIDB4NDMpOwkvKiBsYXRjaCB0aGUgY291bnQgQVNBUCAqLworCWlmIChjb3VudCA+IG9sZF9jb3VudCAmJiBqaWZzID09IG9sZF9qaWZzKQorCQljb3VudCA9IG9sZF9jb3VudDsKIAotCWNvdW50ID0gaW5iX3AoMHg0MCk7CS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KKwlvbGRfY291bnQgPSBjb3VudDsKKwlvbGRfamlmcyA9IGppZnM7CiAKLQkvKgotCSAqIFdlIGRvIHRoaXMgZ3VhcmFudGVlZCBkb3VibGUgbWVtb3J5IGFjY2VzcyBpbnN0ZWFkIG9mIGEgX3AgCi0JICogcG9zdGZpeCBpbiB0aGUgcHJldmlvdXMgcG9ydCBhY2Nlc3MuIFdoZWVlLCBoYWNrYWR5IGhhY2sKLQkgKi8KLSAJamlmZmllc190ID0gamlmZmllczsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCi0JY291bnQgfD0gaW5iX3AoMHg0MCkgPDwgODsKKwljb3VudCA9IChQSVRfTEFUQ0ggLSAxKSAtIGNvdW50OwogCi0JLyogRGV0ZWN0IHRpbWVyIHVuZGVyZmxvd3MuICBJZiB3ZSBoYXZlbid0IGhhZCBhIHRpbWVyIHRpY2sgc2luY2UgCi0JICAgdGhlIGxhc3QgdGltZSB3ZSB3ZXJlIGNhbGxlZCwgYW5kIHRpbWUgaXMgYXBwYXJlbnRseSBnb2luZwotCSAgIGJhY2t3YXJkcywgdGhlIGNvdW50ZXIgbXVzdCBoYXZlIHdyYXBwZWQgZHVyaW5nIHRoaXMgcm91dGluZS4gKi8KLQlpZiAoKGppZmZpZXNfdCA9PSBqaWZmaWVzX3ApICYmIChjb3VudCA+IGNvdW50X3ApKQotCQljb3VudCAtPSAobVNFQ18xMF9mcm9tXzE0LzYpOwotCWVsc2UKLQkJamlmZmllc19wID0gamlmZmllc190OwotCi0JY291bnRfcCA9IGNvdW50OwotCi0JY291bnQgPSAoKChtU0VDXzEwX2Zyb21fMTQvNiktMSkgLSBjb3VudCkgKiAodGlja19uc2VjIC8gMTAwMCk7Ci0JY291bnQgPSAoY291bnQgKyAobVNFQ18xMF9mcm9tXzE0LzYpLzIpIC8gKG1TRUNfMTBfZnJvbV8xNC82KTsKLQotCXJldHVybiBjb3VudDsKKwlyZXR1cm4gKGN5Y2xlX3QpKGppZnMgKiBQSVRfTEFUQ0gpICsgY291bnQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdAotaXNhX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIHBpdF9jcyA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkucmF0aW5nCQk9IDExMCwKKwkucmVhZAkJPSBwaXRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKK307CisKK3N0YXRpYyB2b2lkIHBpdF9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JdGltZXJfdGljaygpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJb3V0Yl9wKDB4MzQsIFBJVF9NT0RFKTsKKwkJb3V0Yl9wKFBJVF9MQVRDSCAmIDB4ZmYsIFBJVF9DSDApOworCQlvdXRiX3AoUElUX0xBVENIID4+IDgsIFBJVF9DSDApOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CisJCW91dGJfcCgweDMwLCBQSVRfTU9ERSk7CisJCW91dGJfcCgwLCBQSVRfQ0gwKTsKKwkJb3V0Yl9wKDAsIFBJVF9DSDApOworCQlicmVhazsKKworCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYnJlYWs7CisJfQorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBwaXRfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHBpdF9jZSA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKKwkuc2V0X21vZGUJPSBwaXRfc2V0X21vZGUsCisJLnNldF9uZXh0X2V2ZW50CT0gcGl0X3NldF9uZXh0X2V2ZW50LAorCS5zaGlmdAkJPSAzMiwKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwaXRfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZSA9IGRldl9pZDsKKwljZS0+ZXZlbnRfaGFuZGxlcihjZSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpc2FfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJJU0EgdGltZXIgdGljayIsCi0JLmhhbmRsZXIJPSBpc2FfdGltZXJfaW50ZXJydXB0LAorc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcGl0X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkuaGFuZGxlcgk9IHBpdF90aW1lcl9pbnRlcnJ1cHQsCiAJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5kZXZfaWQJCT0gJnBpdF9jZSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpc2FfdGltZXJfaW5pdCh2b2lkKQogewotCS8qIGVuYWJsZSBQSVQgdGltZXIgKi8KLQkvKiBzZXQgZm9yIHBlcmlvZGljICg0KSBhbmQgTFNCL01TQiB3cml0ZSAoMHgzMCkgKi8KLQlvdXRiKDB4MzQsIDB4NDMpOwotCW91dGIoKG1TRUNfMTBfZnJvbV8xNC82KSAmIDB4RkYsIDB4NDApOwotCW91dGIoKG1TRUNfMTBfZnJvbV8xNC82KSA+PiA4LCAweDQwKTsKKwlwaXRfY2UuY3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwaXRfY2UubXVsdCA9IGRpdl9zYyhQSVRfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsIHBpdF9jZS5zaGlmdCk7CisJcGl0X2NlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3ZmZmLCAmcGl0X2NlKTsKKwlwaXRfY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDAwMGYsICZwaXRfY2UpOwogCi0Jc2V0dXBfaXJxKElSUV9JU0FfVElNRVIsICZpc2FfdGltZXJfaXJxKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmcGl0X2NzLCBQSVRfVElDS19SQVRFKTsKKworCXNldHVwX2lycShwaXRfY2UuaXJxLCAmcGl0X3RpbWVyX2lycSk7CisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2UpOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGlzYV90aW1lciA9IHsKIAkuaW5pdAkJPSBpc2FfdGltZXJfaW5pdCwKLQkub2Zmc2V0CQk9IGlzYV9nZXR0aW1lb2Zmc2V0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYyBiL2FyY2gvYXJtL21hY2gtaW14L21hY2gtbXgyNV8zZHMuYwppbmRleCBhYTc2Y2ZkLi44MzgyZTc5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9tYWNoLW14MjVfM2RzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDI1XzNkcy5jCkBAIC0xODAsNyArMTgwLDcgQEAKIAlLRVkoMywgMywgS0VZX1BPV0VSKSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIG14MjVwZGtfa2V5bWFwX2RhdGEgX19pbml0Y29uc3QgPSB7CiAJLmtleW1hcAkJPSBteDI1cGRrX2tleW1hcCwKIAkua2V5bWFwX3NpemUJPSBBUlJBWV9TSVpFKG14MjVwZGtfa2V5bWFwKSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDRkYzY4ZDYuLjlmZDg5NDIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC00MzIsNyArNDMyLDcgQEAKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi11bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxID0gRlJFUTsKK3Vuc2lnbmVkIGxvbmcgaXhwNHh4X3RpbWVyX2ZyZXEgPSBJWFA0WFhfVElNRVJfRlJFUTsKIEVYUE9SVF9TWU1CT0woaXhwNHh4X3RpbWVyX2ZyZXEpOwogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpCiB7CkBAIC00OTYsNyArNDk2LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGl4cDR4eF9jbG9ja2V2ZW50X2luaXQodm9pZCkKIHsKLQljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKEZSRVEsIE5TRUNfUEVSX1NFQywKKwljbG9ja2V2ZW50X2l4cDR4eC5tdWx0ID0gZGl2X3NjKElYUDRYWF9USU1FUl9GUkVRLCBOU0VDX1BFUl9TRUMsCiAJCQkJCWNsb2NrZXZlbnRfaXhwNHh4LnNoaWZ0KTsKIAljbG9ja2V2ZW50X2l4cDR4eC5tYXhfZGVsdGFfbnMgPQogCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZmZmZmZmZmUsICZjbG9ja2V2ZW50X2l4cDR4eCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCmluZGV4IDJjM2Y5M2MuLmM5ZTkzMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0xMCw2ICsxMCw3IEBACiAgKiA2Ni42Ni4uLiBNSHouIFdlIGRvIGEgY29udnVsdGVkIGNhbGN1bGF0aW9uIG9mIENMT0NLX1RJQ0tfUkFURSBiL2MgdGhlCiAgKiB0aW1lciByZWdpc3RlciBpZ25vcmVzIHRoZSBib3R0b20gMiBiaXRzIG9mIHRoZSBMQVRDSCB2YWx1ZS4KICAqLwotI2RlZmluZSBGUkVRIDY2NjY2MDAwCi0jZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoKChGUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQorI2RlZmluZSBJWFA0WFhfVElNRVJfRlJFUSA2NjY2NjAwMAorI2RlZmluZSBDTE9DS19USUNLX1JBVEUgXAorCSgoKElYUDRYWF9USU1FUl9GUkVRIC8gSFogJiB+SVhQNFhYX09TVF9SRUxPQURfTUFTSykgKyAxKSAqIEhaKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaXhwNHh4X3FtZ3IuYwppbmRleCBiZmRiZTRiLi44NTJmN2M5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9peHA0eHhfcW1nci5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2l4cDR4eF9xbWdyLmMKQEAgLTI2NSw2ICsyNjUsMTEgQEAKIAkgICAgICAgcW1ncl9xdWV1ZV9kZXNjc1txdWV1ZV0sIHF1ZXVlKTsKIAlxbWdyX3F1ZXVlX2Rlc2NzW3F1ZXVlXVswXSA9ICdceDAnOwogI2VuZGlmCisKKwl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQorCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAorCQkgICAgICAgcXVldWUsIGFkZHIpOworCiAJX19yYXdfd3JpdGVsKDAsICZxbWdyX3JlZ3MtPnNyYW1bcXVldWVdKTsKIAogCXVzZWRfc3JhbV9iaXRtYXBbMF0gJj0gfm1hc2tbMF07CkBAIC0yNzUsMTAgKzI4MCw2IEBACiAJc3Bpbl91bmxvY2tfaXJxKCZxbWdyX2xvY2spOwogCiAJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7Ci0KLQl3aGlsZSAoKGFkZHIgPSBxbWdyX2dldF9lbnRyeShxdWV1ZSkpKQotCQlwcmludGsoS0VSTl9FUlIgInFtZ3I6IHJlbGVhc2VkIHF1ZXVlICVpIG5vdCBlbXB0eTogMHglMDhYXG4iLAotCQkgICAgICAgcXVldWUsIGFkZHIpOwogfQogCiBzdGF0aWMgaW50IHFtZ3JfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyMy5jCmluZGV4IGIxYTM2MmUuLmNhNzJhMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjMuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDIzLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJlZyA9IF9fcmF3X3JlYWRsKENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJCVwKIAlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAotCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAorCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQkJXAogCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJfQkJCQkJCQkJXApAQCAtMzQ3LDcgKzM0Nyw3IEBACiB7CQkJCQkJCQkJXAogCWlmIChwYXJlbnQgIT0gY2xrLT5wYXJlbnQpIHsJCQkJCVwKIAkJX19yYXdfd3JpdGVsKEJNX0NMS0NUUkxfQ0xLU0VRX0JZUEFTU18jI2JpdCwJCVwKLQkJCSBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwkJCVwKKwkJCSBDTEtDVFJMX0JBU0VfQUREUiArIEhXX0NMS0NUUkxfQ0xLU0VRX1RPRyk7CVwKIAkJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CQkJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDU2MzEyYzAuLmZkMWM0YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTM1NSwxMiArMzU1LDEyIEBACiAJfSBlbHNlIHsJCQkJCQkJXAogCQlyZWcgJj0gfkJNX0NMS0NUUkxfIyNkciMjX0RJVjsJCQkJXAogCQlyZWcgfD0gZGl2IDw8IEJQX0NMS0NUUkxfIyNkciMjX0RJVjsJCQlcCi0JCWlmIChyZWcgfCAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCisJCWlmIChyZWcgJiAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdCkpIHsJCQlcCiAJCQlwcl9lcnIoIiVzOiBjbG9jayBpcyBnYXRlZFxuIiwgX19mdW5jX18pOwlcCiAJCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAkJfQkJCQkJCQlcCiAJfQkJCQkJCQkJXAotCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF9DUFUpOwkJXAorCV9fcmF3X3dyaXRlbChyZWcsIENMS0NUUkxfQkFTRV9BRERSICsgSFdfQ0xLQ1RSTF8jI2RyKTsJCVwKIAkJCQkJCQkJCVwKIAlmb3IgKGkgPSAxMDAwMDsgaTsgaS0tKQkJCQkJCVwKIAkJaWYgKCEoX19yYXdfcmVhZGwoQ0xLQ1RSTF9CQVNFX0FERFIgKwkJCVwKQEAgLTQ4Myw3ICs0ODMsNyBAQAogewkJCQkJCQkJCVwKIAlpZiAocGFyZW50ICE9IGNsay0+cGFyZW50KSB7CQkJCQlcCiAJCV9fcmF3X3dyaXRlbChCTV9DTEtDVFJMX0NMS1NFUV9CWVBBU1NfIyNiaXQsCQlcCi0JCQkgSFdfQ0xLQ1RSTF9DTEtTRVFfVE9HKTsJCQlcCisJCQkgQ0xLQ1RSTF9CQVNFX0FERFIgKyBIV19DTEtDVFJMX0NMS1NFUV9UT0cpOwlcCiAJCWNsay0+cGFyZW50ID0gcGFyZW50OwkJCQkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTYwOSw3ICs2MDksNiBAQAogCV9SRUdJU1RFUl9DTE9DSygiZHVhcnQiLCBOVUxMLCB1YXJ0X2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteDI4LWZlYy4xIiwgTlVMTCwgZmVjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soInJ0YyIsIE5VTEwsIHJ0Y19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJwbGwyIiwgTlVMTCwgcGxsMl9jbGspCiAJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJoY2xrIiwgaGJ1c19jbGspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2suYwppbmRleCBlN2QyMjY5Li5hNzA5M2M4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLmMKQEAgLTU3LDcgKzU3LDYgQEAKIAkJaWYgKGNsay0+ZGlzYWJsZSkKIAkJCWNsay0+ZGlzYWJsZShjbGspOwogCQlfX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZGlzYWJsZShjbGstPnNlY29uZGFyeSk7CiAJfQogfQogCkBAIC02OCw3ICs2Nyw2IEBACiAKIAlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKIAkJX19jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKLQkJX19jbGtfZW5hYmxlKGNsay0+c2Vjb25kYXJ5KTsKIAogCQlpZiAoY2xrLT5lbmFibGUpCiAJCQljbGstPmVuYWJsZShjbGspOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1teHMvZ3Bpby5jCmluZGV4IGQ3YWQ3YTYuLjYxOTkxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2dwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9ncGlvLmMKQEAgLTY4LDI5ICs2OCwyOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycSh1MzIgaXJxKQorc3RhdGljIHZvaWQgbXhzX2dwaW9fYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7Ci0JdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhpcnEpOworCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oZC0+aXJxKTsKIAljbGVhcl9ncGlvX2lycXN0YXR1cygmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXSwgZ3BpbyAmIDB4MWYpOwogfQogCi1zdGF0aWMgdm9pZCBteHNfZ3Bpb19tYXNrX2lycSh1MzIgaXJxKQorc3RhdGljIHZvaWQgbXhzX2dwaW9fbWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc2V0X2dwaW9faXJxZW5hYmxlKCZteHNfZ3Bpb19wb3J0c1tncGlvIC8gMzJdLCBncGlvICYgMHgxZiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIG14c19ncGlvX3VubWFza19pcnEodTMyIGlycSkKK3N0YXRpYyB2b2lkIG14c19ncGlvX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJc2V0X2dwaW9faXJxZW5hYmxlKCZteHNfZ3Bpb19wb3J0c1tncGlvIC8gMzJdLCBncGlvICYgMHgxZiwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgbXhzX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCk7CiAKLXN0YXRpYyBpbnQgbXhzX2dwaW9fc2V0X2lycV90eXBlKHUzMiBpcnEsIHUzMiB0eXBlKQorc3RhdGljIGludCBteHNfZ3Bpb19zZXRfaXJxX3R5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKLQl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGlycSk7CisJdTMyIGdwaW8gPSBpcnFfdG9fZ3BpbyhkLT5pcnEpOwogCXUzMiBwaW5fbWFzayA9IDEgPDwgKGdwaW8gJiAzMSk7CiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKIAl2b2lkIF9faW9tZW0gKnBpbl9hZGRyOwpAQCAtMTM5LDYgKzEzOSw4IEBACiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAoc3RydWN0IG14c19ncGlvX3BvcnQgKilnZXRfaXJxX2RhdGEoaXJxKTsKIAl1MzIgZ3Bpb19pcnFfbm9fYmFzZSA9IHBvcnQtPnZpcnR1YWxfaXJxX3N0YXJ0OwogCisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOworCiAJaXJxX3N0YXQgPSBfX3Jhd19yZWFkbChwb3J0LT5iYXNlICsgUElOQ1RSTF9JUlFTVEFUKHBvcnQtPmlkKSkgJgogCQkJX19yYXdfcmVhZGwocG9ydC0+YmFzZSArIFBJTkNUUkxfSVJRRU4ocG9ydC0+aWQpKTsKIApAQCAtMTU4LDkgKzE2MCw5IEBACiAgKiBAcGFyYW0gIGVuYWJsZSAgICAgICBlbmFibGUgYXMgd2FrZS11cCBpZiBlcXVhbCB0byBub24temVybwogICogQHJldHVybiAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1zdGF0aWMgaW50IG14c19ncGlvX3NldF93YWtlX2lycSh1MzIgaXJxLCB1MzIgZW5hYmxlKQorc3RhdGljIGludCBteHNfZ3Bpb19zZXRfd2FrZV9pcnEoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZW5hYmxlKQogewotCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oaXJxKTsKKwl1MzIgZ3BpbyA9IGlycV90b19ncGlvKGQtPmlycSk7CiAJdTMyIGdwaW9faWR4ID0gZ3BpbyAmIDB4MWY7CiAJc3RydWN0IG14c19ncGlvX3BvcnQgKnBvcnQgPSAmbXhzX2dwaW9fcG9ydHNbZ3BpbyAvIDMyXTsKIApAQCAtMTgwLDExICsxODIsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewotCS5hY2sgPSBteHNfZ3Bpb19hY2tfaXJxLAotCS5tYXNrID0gbXhzX2dwaW9fbWFza19pcnEsCi0JLnVubWFzayA9IG14c19ncGlvX3VubWFza19pcnEsCi0JLnNldF90eXBlID0gbXhzX2dwaW9fc2V0X2lycV90eXBlLAotCS5zZXRfd2FrZSA9IG14c19ncGlvX3NldF93YWtlX2lycSwKKwkuaXJxX2FjayA9IG14c19ncGlvX2Fja19pcnEsCisJLmlycV9tYXNrID0gbXhzX2dwaW9fbWFza19pcnEsCisJLmlycV91bm1hc2sgPSBteHNfZ3Bpb191bm1hc2tfaXJxLAorCS5pcnFfc2V0X3R5cGUgPSBteHNfZ3Bpb19zZXRfaXJxX3R5cGUsCisJLmlycV9zZXRfd2FrZSA9IG14c19ncGlvX3NldF93YWtlX2lycSwKIH07CiAKIHN0YXRpYyB2b2lkIG14c19zZXRfZ3Bpb19kaXJlY3Rpb24oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaWNvbGwuYyBiL2FyY2gvYXJtL21hY2gtbXhzL2ljb2xsLmMKaW5kZXggNWRkNDNiYS4uMGY0YzEyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teHMvaWNvbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9pY29sbC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmljb2xsX2Jhc2UgPSBNWFNfSU9fQUREUkVTUyhNWFNfSUNPTExfQkFTRV9BRERSKTsKIAotc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaWNvbGxfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJLyoKIAkgKiBUaGUgSW50ZXJydXB0IENvbGxlY3RvciBpcyBhYmxlIHRvIHByaW9yaXRpemUgaXJxcy4KQEAgLTQ1LDIyICs0NSwyMiBAQAogCQkJaWNvbGxfYmFzZSArIEhXX0lDT0xMX0xFVkVMQUNLKTsKIH0KIAotc3RhdGljIHZvaWQgaWNvbGxfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGljb2xsX21hc2tfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAlfX3Jhd193cml0ZWwoQk1fSUNPTExfSU5URVJSVVBUbl9FTkFCTEUsCi0JCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoaXJxKSk7CisJCQlpY29sbF9iYXNlICsgSFdfSUNPTExfSU5URVJSVVBUbl9DTFIoZC0+aXJxKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGljb2xsX3VubWFza19pcnEoc3RydWN0IGlycV9kYXRhICpkKQogewogCV9fcmF3X3dyaXRlbChCTV9JQ09MTF9JTlRFUlJVUFRuX0VOQUJMRSwKLQkJCWljb2xsX2Jhc2UgKyBIV19JQ09MTF9JTlRFUlJVUFRuX1NFVChpcnEpKTsKKwkJCWljb2xsX2Jhc2UgKyBIV19JQ09MTF9JTlRFUlJVUFRuX1NFVChkLT5pcnEpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBteHNfaWNvbGxfY2hpcCA9IHsKLQkuYWNrID0gaWNvbGxfYWNrX2lycSwKLQkubWFzayA9IGljb2xsX21hc2tfaXJxLAotCS51bm1hc2sgPSBpY29sbF91bm1hc2tfaXJxLAorCS5pcnFfYWNrID0gaWNvbGxfYWNrX2lycSwKKwkuaXJxX21hc2sgPSBpY29sbF9tYXNrX2lycSwKKwkuaXJxX3VubWFzayA9IGljb2xsX3VubWFza19pcnEsCiB9OwogCiB2b2lkIF9faW5pdCBpY29sbF9pbml0X2lycSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvaW5jbHVkZS9tYWNoL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaAppbmRleCAwNDFlMjc2Li41OTJjOWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLW14cy9pbmNsdWRlL21hY2gvY2xvY2suaApAQCAtMjksOCArMjksNiBAQAogCWludCBpZDsKIAkvKiBTb3VyY2UgY2xvY2sgdGhpcyBjbGsgZGVwZW5kcyBvbiAqLwogCXN0cnVjdCBjbGsgKnBhcmVudDsKLQkvKiBTZWNvbmRhcnkgY2xvY2sgdG8gZW5hYmxlL2Rpc2FibGUgd2l0aCB0aGlzIGNsb2NrICovCi0Jc3RydWN0IGNsayAqc2Vjb25kYXJ5OwogCS8qIFJlZmVyZW5jZSBjb3VudCBvZiBjbG9jayBlbmFibGUvZGlzYWJsZSAqLwogCV9fczggdXNlY291bnQ7CiAJLyogUmVnaXN0ZXIgYml0IHBvc2l0aW9uIGZvciBjbG9jaydzIGVuYWJsZS9kaXNhYmxlIGNvbnRyb2wuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAxL0tjb25maWcKaW5kZXggOGQyZjJkYS4uZTBhMDI4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvS2NvbmZpZwpAQCAtOSw2ICs5LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKIAlib29sICJPTUFQNzMwIEJhc2VkIFN5c3RlbSIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKKwlzZWxlY3QgT01BUF9NUFVfVElNRVIKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCiBjb25maWcgQVJDSF9PTUFQODUwCkBAIC0yMiw2ICsyMyw3IEBACiAJZGVmYXVsdCB5CiAJYm9vbCAiT01BUDE1eHggQmFzZWQgU3lzdGVtIgogCXNlbGVjdCBDUFVfQVJNOTI1VAorCXNlbGVjdCBPTUFQX01QVV9USU1FUgogCiBjb25maWcgQVJDSF9PTUFQMTZYWAogCWRlcGVuZHMgb24gQVJDSF9PTUFQMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKaW5kZXggNmVlMTk1MC4uYmE2MDA5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCkBAIC0zLDEyICszLDExIEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gaXJxLm8gbXV4Lm8gZmxhc2gubyBzZXJpYWwubyBkZXZpY2VzLm8gZG1hLm8KK29iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gdGltZS5vIGlycS5vIG11eC5vIGZsYXNoLm8gc2VyaWFsLm8gZGV2aWNlcy5vIGRtYS5vCiBvYmoteSArPSBjbG9jay5vIGNsb2NrX2RhdGEubyBvcHBfZGF0YS5vCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKLW9iai0kKENPTkZJR19PTUFQX01QVV9USU1FUikJKz0gdGltZS5vCiBvYmotJChDT05GSUdfT01BUF8zMktfVElNRVIpCSs9IHRpbWVyMzJrLm8KIAogIyBQb3dlciBNYW5hZ2VtZW50CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBjOWJlNmQ0Li5iZmI0ZmIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTE0LDE5ICsxNCw2IEBACiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCi0vKgotICogV2UgdXNlIF9fZ2x1ZSB0byBhdm9pZCBlcnJvcnMgd2l0aCBtdWx0aXBsZSBkZWZpbml0aW9ucyBvZgotICogLmdsb2JsIG9tYXBfaXJxX2ZsYWdzIGFzIGl0J3MgaW5jbHVkZWQgZnJvbSBlbnRyeS1hcm12LlMgYnV0IG5vdAotICogZnJvbSBlbnRyeS1jb21tb24uUy4KLSAqLwotI2lmZGVmIF9fZ2x1ZQotCQkucHVzaHNlY3Rpb24gLmRhdGEKLQkJLmdsb2JsCW9tYXBfaXJxX2ZsYWdzCi1vbWFwX2lycV9mbGFnczoKLQkJLndvcmQJMAotCQkucG9wc2VjdGlvbgotI2VuZGlmCi0KICAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCA0NzcwMTU4Li43MzFkZDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHdha2VfZW5hYmxlOwogfTsKIAordTMyIG9tYXBfaXJxX2ZsYWdzOwogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfYmFua19jb3VudDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9pcnFfYmFuayAqaXJxX2JhbmtzOwogCkBAIC0xNzYsNyArMTc3LDYgQEAKIAogdm9pZCBfX2luaXQgb21hcF9pbml0X2lycSh2b2lkKQogewotCWV4dGVybiB1bnNpZ25lZCBpbnQgb21hcF9pcnFfZmxhZ3M7CiAJaW50IGksIGo7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDg1MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbGNkX2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKaW5kZXggYzkwODhkOC4uNDUzODA5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9sY2RfZG1hLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkgKiBPbiBPTUFQMTUxMCwgaW50ZXJuYWwgTENEIGNvbnRyb2xsZXIgd2lsbCBzdGFydCB0aGUgdHJhbnNmZXIKIAkgKiB3aGVuIGl0IGdldHMgZW5hYmxlZCwgc28gYXNzdW1lIERNQSBydW5uaW5nIGlmIExDRCBlbmFibGVkLgogCSAqLwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkpCiAJCWlmIChvbWFwX3JlYWR3KE9NQVBfTENEQ19DT05UUk9MKSAmIE9NQVBfTENEQ19DVFJMX0xDRF9FTikKIAkJCXJldHVybiAxOwogCkBAIC05NSw3ICs5NSw3IEBACiAKIHZvaWQgb21hcF9zZXRfbGNkX2RtYV9iMV9yb3RhdGlvbihpbnQgcm90YXRlKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSByb3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIDE1MTAgbW9kZVxuIik7CiAJCUJVRygpOwogCQlyZXR1cm47CkBAIC0xMDYsNyArMTA2LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX21pcnJvcihpbnQgbWlycm9yKQogewotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkRNQSBtaXJyb3IgaXMgbm90IHN1cHBvcnRlZCBpbiAxNTEwIG1vZGVcbiIpOwogCQlCVUcoKTsKIAl9CkBAIC0xMTYsNyArMTE2LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3Z4cmVzKHVuc2lnbmVkIGxvbmcgdnhyZXMpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHZpcnR1YWwgcmVzdWxvdGlvbiBpcyBub3Qgc3VwcG9ydGVkICIKIAkJCQkiaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogdm9pZCBvbWFwX3NldF9sY2RfZG1hX2IxX3NjYWxlKHVuc2lnbmVkIGludCB4c2NhbGUsIHVuc2lnbmVkIGludCB5c2NhbGUpCiB7Ci0JaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRE1BIHNjYWxlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gMTUxMCBtb2RlXG4iKTsKIAkJQlVHKCk7CiAJfQpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJCQlib3R0b20gPSBQSVhBRERSKGxjZF9kbWEueHJlcyAtIDEsIGxjZF9kbWEueXJlcyAtIDEpOwogCQkJLyogMTUxMCBETUEgcmVxdWlyZXMgdGhlIGJvdHRvbSBhZGRyZXNzIHRvIGJlIDIgbW9yZQogCQkJICogdGhhbiB0aGUgYWN0dWFsIGxhc3QgbWVtb3J5IGFjY2VzcyBsb2NhdGlvbi4gKi8KLQkJCWlmIChjcHVfaXNfb21hcDE1MTAoKSAmJgorCQkJaWYgKGNwdV9pc19vbWFwMTV4eCgpICYmCiAJCQkJbGNkX2RtYS5kYXRhX3R5cGUgPT0gT01BUF9ETUFfREFUQV9UWVBFX1MzMikKIAkJCQkJYm90dG9tICs9IDI7CiAJCQllaSA9IFBJWFNURVAoMCwgMCwgMSwgMCk7CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJcmV0dXJuOwkvKiBTdXBwcmVzcyB3YXJuaW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgdmFycyAqLwogCX0KIAotCWlmIChjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlvbWFwX3dyaXRldyh0b3AgPj4gMTYsIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX1UpOwogCQlvbWFwX3dyaXRldyh0b3AsIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wpOwogCQlvbWFwX3dyaXRldyhib3R0b20gPj4gMTYsIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UpOwpAQCAtMzQzLDcgKzM0Myw3IEBACiAJCUJVRygpOwogCQlyZXR1cm47CiAJfQotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJaWYgKCFjcHVfaXNfb21hcDE1eHgoKSkKIAkJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQMTYxMF9ETUFfTENEX0NDUikgJiB+MSwKIAkJCSAgICBPTUFQMTYxMF9ETUFfTENEX0NDUik7CiAJbGNkX2RtYS5yZXNlcnZlZCA9IDA7CkBAIC0zNjAsNyArMzYwLDcgQEAKIAkgKiBjb25uZWN0ZWQuIE90aGVyd2lzZSB0aGUgT01BUCBpbnRlcm5hbCBjb250cm9sbGVyIHdpbGwKIAkgKiBzdGFydCB0aGUgdHJhbnNmZXIgd2hlbiBpdCBnZXRzIGVuYWJsZWQuCiAJICovCi0JaWYgKGNwdV9pc19vbWFwMTUxMCgpIHx8ICFsY2RfZG1hLmV4dF9jdHJsKQorCWlmIChjcHVfaXNfb21hcDE1eHgoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKIAkJcmV0dXJuOwogCiAJdyA9IG9tYXBfcmVhZHcoT01BUDE2MTBfRE1BX0xDRF9DVFJMKTsKQEAgLTM3OCwxNCArMzc4LDE0IEBACiB2b2lkIG9tYXBfc2V0dXBfbGNkX2RtYSh2b2lkKQogewogCUJVR19PTihsY2RfZG1hLmFjdGl2ZSk7Ci0JaWYgKCFjcHVfaXNfb21hcDE1MTAoKSkgeworCWlmICghY3B1X2lzX29tYXAxNXh4KCkpIHsKIAkJLyogU2V0IHNvbWUgcmVhc29uYWJsZSBkZWZhdWx0cyAqLwogCQlvbWFwX3dyaXRldygweDU0NDAsIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKIAkJb21hcF93cml0ZXcoMHg5MTAyLCBPTUFQMTYxMF9ETUFfTENEX0NTRFApOwogCQlvbWFwX3dyaXRldygweDAwMDQsIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwpOwogCX0KIAlzZXRfYjFfcmVncygpOwotCWlmICghY3B1X2lzX29tYXAxNTEwKCkpIHsKKwlpZiAoIWNwdV9pc19vbWFwMTV4eCgpKSB7CiAJCXUxNiB3OwogCiAJCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKQEAgLTQwNyw3ICs0MDcsNyBAQAogCXUxNiB3OwogCiAJbGNkX2RtYS5hY3RpdmUgPSAwOwotCWlmIChjcHVfaXNfb21hcDE1MTAoKSB8fCAhbGNkX2RtYS5leHRfY3RybCkKKwlpZiAoY3B1X2lzX29tYXAxNXh4KCkgfHwgIWxjZF9kbWEuZXh0X2N0cmwpCiAJCXJldHVybjsKIAogCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ0NSKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uaAppbmRleCA1NmE2NDc5Li5jZDkyNmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5oCkBAIC0xMjMsOSArMTIzLDkgQEAKIGV4dGVybiB2b2lkIG9tYXAxX3BtX2lkbGUodm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwMV9wbV9zdXNwZW5kKHZvaWQpOwogCi1leHRlcm4gdm9pZCBvbWFwN3h4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCk7Ci1leHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQpOwotZXh0ZXJuIHZvaWQgb21hcDE2MTBfY3B1X3N1c3BlbmQodW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK2V4dGVybiB2b2lkIG9tYXA3eHhfY3B1X3N1c3BlbmQodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBvbWFwMTUxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiB2b2lkIG9tYXAxNjEwX2NwdV9zdXNwZW5kKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHZvaWQgb21hcDd4eF9pZGxlX2xvb3Bfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAxNTEwX2lkbGVfbG9vcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKaW5kZXggZWY3NzFjZTguLmM4NzViZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NsZWVwLlMKQEAgLTU4LDYgKzU4LDcgQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA4NTApCisJLmFsaWduCTMKIEVOVFJZKG9tYXA3eHhfY3B1X3N1c3BlbmQpCiAKIAlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCkBAIC0xMzcsNiArMTM4LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQNzMwIHx8IENPTkZJR19BUkNIX09NQVA4NTAgKi8KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCisJLmFsaWduCTMKIEVOVFJZKG9tYXAxNTEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpAQCAtMjExLDYgKzIxMyw3IEBACiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDE1WFggKi8KIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpCisJLmFsaWduCTMKIEVOVFJZKG9tYXAxNjEwX2NwdV9zdXNwZW5kKQogCiAJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zcmFtLlMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUwppbmRleCA3NzI0ZTUyLi42OTI1ODdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NyYW0uUwpAQCAtMTgsNiArMTgsNyBAQAogLyoKICAqIFJlcHJvZ3JhbXMgVUxQRCBhbmQgQ0tDVEwuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDFfc3JhbV9yZXByb2dyYW1fY2xvY2spCiAJc3RtZmQJc3AhLCB7cjAgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCmluZGV4IGVkN2E2MWYuLjY4ODVkMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZS5jCkBAIC00OSwxMSArNDksMTUgQEAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2xlZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NjaGVkX2Nsb2NrLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogCisjaWZkZWYgQ09ORklHX09NQVBfTVBVX1RJTUVSCisKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfQkFTRQkJT01BUF9NUFVfVElNRVIxX0JBU0UKICNkZWZpbmUgT01BUF9NUFVfVElNRVJfT0ZGU0VUCQkweDEwMAogCkBAIC02Nyw3ICs3MSw3IEBACiAoKHZvbGF0aWxlIG9tYXBfbXB1X3RpbWVyX3JlZ3NfdCopT01BUDFfSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsJXAogCQkJCSAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG9tYXBfbXB1X3RpbWVyX3JlYWQoaW50IG5yKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vdHJhY2Ugb21hcF9tcHVfdGltZXJfcmVhZChpbnQgbnIpCiB7CiAJdm9sYXRpbGUgb21hcF9tcHVfdGltZXJfcmVnc190KiB0aW1lciA9IG9tYXBfbXB1X3RpbWVyX2Jhc2UobnIpOwogCXJldHVybiB0aW1lci0+cmVhZF90aW07CkBAIC0yMTIsNiArMjE2LDMyIEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAorc3RhdGljIERFRklORV9DTE9DS19EQVRBKGNkKTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBfb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljID0gbXB1X3JlYWQoJmNsb2Nrc291cmNlX21wdSk7CisJcmV0dXJuIGN5Y190b19zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKKyNpZm5kZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCXJldHVybiBfb21hcF9tcHVfc2NoZWRfY2xvY2soKTsKK30KKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF9tcHVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfbXB1X3NjaGVkX2Nsb2NrKCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbm90cmFjZSBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrKHZvaWQpCit7CisJdTMyIGN5YyA9IG1wdV9yZWFkKCZjbG9ja3NvdXJjZV9tcHUpOworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2UodW5zaWduZWQgbG9uZyByYXRlKQogewogCXN0YXRpYyBjaGFyIGVycltdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgpAQCAtMjE5LDE3ICsyNDksMTMgQEAKIAogCXNldHVwX2lycShJTlRfVElNRVIyLCAmb21hcF9tcHVfdGltZXIyX2lycSk7CiAJb21hcF9tcHVfdGltZXJfc3RhcnQoMSwgfjAsIDEpOworCWluaXRfc2NoZWRfY2xvY2soJmNkLCBtcHVfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgcmF0ZSk7CiAKIAlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21wdSwgcmF0ZSkpCiAJCXByaW50ayhlcnIsIGNsb2Nrc291cmNlX21wdS5uYW1lKTsKIH0KIAotLyoKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogVGltZXIgaW5pdGlhbGl6YXRpb24KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQogewogCXN0cnVjdCBjbGsJKmNrX3JlZiA9IGNsa19nZXQoTlVMTCwgImNrX3JlZiIpOwogCXVuc2lnbmVkIGxvbmcJcmF0ZTsKQEAgLTI0Niw2ICsyNzIsNjYgQEAKIAlvbWFwX2luaXRfY2xvY2tzb3VyY2UocmF0ZSk7CiB9CiAKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9tcHVfdGltZXJfaW5pdCh2b2lkKQoreworCXByX2VycigiQm9ndXMgdGltZXIsIHNob3VsZCBub3QgaGFwcGVuXG4iKTsKK30KKyNlbmRpZgkvKiBDT05GSUdfT01BUF9NUFVfVElNRVIgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVBVX1RJTUVSKSAmJiBkZWZpbmVkKENPTkZJR19PTUFQXzMyS19USU1FUikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKCpwcmVmZXJyZWRfc2NoZWRfY2xvY2spKHZvaWQpOworCit1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQoreworCWlmICghcHJlZmVycmVkX3NjaGVkX2Nsb2NrKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBwcmVmZXJyZWRfc2NoZWRfY2xvY2soKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZWZlcnJlZF9zY2hlZF9jbG9ja19pbml0KGJvb2wgdXNlXzMya19zY2hlZF9jbG9jaykKK3sKKwlpZiAodXNlXzMya19zY2hlZF9jbG9jaykKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrID0gb21hcF8zMmtfc2NoZWRfY2xvY2s7CisJZWxzZQorCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2sgPSBvbWFwX21wdV9zY2hlZF9jbG9jazsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoYm9vbCB1c2VfMzJrX3NjaGVkX2NsY29rKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfMzJrX3RpbWVyX3VzYWJsZSh2b2lkKQoreworCWludCByZXMgPSBmYWxzZTsKKworCWlmIChjcHVfaXNfb21hcDczMCgpIHx8IGNwdV9pc19vbWFwMTV4eCgpKQorCQlyZXR1cm4gcmVzOworCisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJcmVzID0gb21hcF8zMmtfdGltZXJfaW5pdCgpOworI2VuZGlmCisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUaW1lciBpbml0aWFsaXphdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAob21hcF8zMmtfdGltZXJfdXNhYmxlKCkpIHsKKwkJcHJlZmVycmVkX3NjaGVkX2Nsb2NrX2luaXQoMSk7CisJfSBlbHNlIHsKKwkJb21hcF9tcHVfdGltZXJfaW5pdCgpOworCQlwcmVmZXJyZWRfc2NoZWRfY2xvY2tfaW5pdCgwKTsKKwl9Cit9CisKIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lciA9IHsKIAkuaW5pdAkJPSBvbWFwX3RpbWVyX2luaXQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS90aW1lcjMyay5jCmluZGV4IDIwY2ZiY2MuLjEzZDdiOGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvdGltZXIzMmsuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyMzJrLmMKQEAgLTUyLDEwICs1Miw5IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPHBsYXQvZG10aW1lci5oPgogCi1zdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7Ci0KIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIDMyS0h6IE9TIHRpbWVyCkBAIC0xODEsMTQgKzE4MCwxNCBAQAogICogVGltZXIgaW5pdGlhbGl6YXRpb24KICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgb21hcF90aW1lcl9pbml0KHZvaWQpCitib29sIF9faW5pdCBvbWFwXzMya190aW1lcl9pbml0KHZvaWQpCiB7CisJb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyaygpOworCiAjaWZkZWYgQ09ORklHX09NQVBfRE1fVElNRVIKIAlvbWFwX2RtX3RpbWVyX2luaXQoKTsKICNlbmRpZgogCW9tYXBfaW5pdF8zMmtfdGltZXIoKTsKLX0KIAotc3RydWN0IHN5c190aW1lciBvbWFwX3RpbWVyID0gewotCS5pbml0CQk9IG9tYXBfdGltZXJfaW5pdCwKLX07CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNTE3LmMKaW5kZXggNWIwYzc3Ny4uOGY5YTY0ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUxNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1MTcuYwpAQCAtMTI0LDggKzEyNCw5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMCkgfHwgZGVmaW5lZChDT05GSUdfUlRDX0RSVl9WMzAyMF9NT0RVTEUpCiAjZGVmaW5lIFJUQ19JT19HUElPCQkoMTUzKQogI2RlZmluZSBSVENfV1JfR1BJTwkJKDE1NCkKLSNkZWZpbmUgUlRDX1JEX0dQSU8JCSgxNjApCisjZGVmaW5lIFJUQ19SRF9HUElPCQkoNTMpCiAjZGVmaW5lIFJUQ19DU19HUElPCQkoMTYzKQorI2RlZmluZSBSVENfQ1NfRU5fR1BJTwkJKDE2MCkKIAogc3RydWN0IHYzMDIwX3BsYXRmb3JtX2RhdGEgY21fdDM1MTdfdjMwMjBfcGRhdGEgPSB7CiAJLnVzZV9ncGlvCT0gMSwKQEAgLTE0NSw2ICsxNDYsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNTE3X2luaXRfcnRjKHZvaWQpCiB7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChSVENfQ1NfRU5fR1BJTywgInJ0YyBjcyBlbiIpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJDTS1UMzUxNzogcnRjIGNzIGVuIGdwaW8gcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLCBlcnIpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFJUQ19DU19FTl9HUElPLCAxKTsKKwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY21fdDM1MTdfcnRjX2RldmljZSk7CiB9CiAjZWxzZQpAQCAtMjE0LDEyICsyMjUsMTIgQEAKIAl9LAogCXsKIAkJLm5hbWUgICAgICAgICAgID0gImxpbnV4IiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IDMyICogTkFORF9CTE9DS19TSVpFLAogCX0sCiAJewogCQkubmFtZSAgICAgICAgICAgPSAicm9vdGZzIiwKLQkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NkEwMDAwICovCiAJCS5zaXplICAgICAgICAgICA9IE1URFBBUlRfU0laX0ZVTEwsCiAJfSwKIH07CkBAIC0yNTYsMTEgKzI2NywxOSBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewogCS8qIEdQSU8xODYgLSBHcmVlbiBMRUQgKi8KIAlPTUFQM19NVVgoU1lTX0NMS09VVDIsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKLQkvKiBSVEMgR1BJT3M6IElPLCBXUiMsIFJEIywgQ1MjICovCisKKwkvKiBSVEMgR1BJT3M6ICovCisJLyogSU8gLSBHUElPMTUzICovCiAJT01BUDNfTVVYKE1DQlNQNF9EUiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisJLyogV1IjIC0gR1BJTzE1NCAqLwogCU9NQVAzX01VWChNQ0JTUDRfRFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVQpLAotCU9NQVAzX01VWChNQ0JTUF9DTEtTLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBSRCMgLSBHUElPNTMgKi8KKwlPTUFQM19NVVgoR1BNQ19OQ1MyLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyMgLSBHUElPMTYzICovCiAJT01BUDNfTVVYKFVBUlQzX0NUU19SQ1RYLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX0lOUFVUKSwKKwkvKiBDUyBFTiAtIEdQSU8xNjAgKi8KKwlPTUFQM19NVVgoTUNCU1BfQ0xLUywgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9JTlBVVCksCisKIAkvKiBIU1VTQjEgUkVTRVQgKi8KIAlPTUFQM19NVVgoVUFSVDJfVFgsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKIAkvKiBIU1VTQjIgUkVTRVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZGV2a2l0ODAwMC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKaW5kZXggMDBiYjFmYy4uOWEyYTMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTExNSw5ICsxMTUsNiBAQAogCiBzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JdHdsX2kyY193cml0ZV91OChUV0w0MDMwX01PRFVMRV9HUElPLCAweDgwLCBSRUdfR1BJT0RBVEFESVIxKTsKLQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0xFRCwgMHgwLCAweDApOwotCiAJaWYgKGdwaW9faXNfdmFsaWQoZHNzZGV2LT5yZXNldF9ncGlvKSkKIAkJZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAoZHNzZGV2LT5yZXNldF9ncGlvLCAxKTsKIAlyZXR1cm4gMDsKQEAgLTI0Nyw2ICsyNDQsOCBAQAogc3RhdGljIGludCBkZXZraXQ4MDAwX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7CisJaW50IHJldDsKKwogCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOwogCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CkBAIC0yNTUsMTcgKzI1NCwyMyBAQAogCS8qIFRXTDQwMzBfR1BJT19NQVggKyAxID09IGxlZEIsIFBNVV9TVEFUIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwogCi0gICAgICAgIC8qIGdwaW8gKyAxIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLwotCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIDE7Ci0JZ3Bpb19yZXF1ZXN0KGRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvLCAiTENEX1BXUkVOIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwIGlzICJMQ0RfUFdSRU4iIChvdXQsIGFjdGl2ZSBoaWdoKSAqLworCWRldmtpdDgwMDBfbGNkX2RldmljZS5yZXNldF9ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAwOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9sY2RfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJMQ0RfUFdSRU4iKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZraXQ4MDAwX2xjZF9kZXZpY2UucmVzZXRfZ3BpbyA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgR1BJTyBmb3IgTENEX1BXUk5cbiIpOworCX0KIAogCS8qIGdwaW8gKyA3IGlzICJEVklfUEQiIChvdXQsIGFjdGl2ZSBsb3cpICovCiAJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSBncGlvICsgNzsKLQlncGlvX3JlcXVlc3QoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sICJEVkkgUG93ZXJEb3duIik7Ci0JLyogRGlzYWJsZSB1bnRpbCBuZWVkZWQgKi8KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sIDApOworCXJldCA9IGdwaW9fcmVxdWVzdF9vbmUoZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8sCisJCQlHUElPRl9ESVJfT1VUIHwgR1BJT0ZfSU5JVF9MT1csICJEVkkgUG93ZXJEb3duIik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2a2l0ODAwMF9kdmlfZGV2aWNlLnJlc2V0X2dwaW8gPSAtRUlOVkFMOworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gZm9yIERWSSBQb3dlckRvd25cbiIpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjc1LDggKzI4MCw3IEBACiAJLmlycV9iYXNlCT0gVFdMNDAzMF9HUElPX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9HUElPX0lSUV9FTkQsCiAJLnVzZV9sZWRzCT0gdHJ1ZSwKLQkucHVsbHVwcwk9IEJJVCgxKSwKLQkucHVsbGRvd25zCT0gQklUKDIpIHwgQklUKDYpIHwgQklUKDcpIHwgQklUKDgpIHwgQklUKDEzKQorCS5wdWxsZG93bnMJPSBCSVQoMSkgfCBCSVQoMikgfCBCSVQoNikgfCBCSVQoOCkgfCBCSVQoMTMpCiAJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCiAJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwNHBhbmRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwppbmRleCBlMDAxYTA0Li5lOTQ0MDI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXA0cGFuZGEuYwpAQCAtNDA5LDggKzQwOSw2IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGFuZGFfZGV2aWNlcywgQVJSQVlfU0laRShwYW5kYV9kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW9tYXA0X3R3bDYwMzBfaHNtbWNfaW5pdChtbWMpOwotCS8qIE9NQVA0IFBhbmRhIHVzZXMgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgc28gcmVnaXN0ZXIgbm9wIHRyYW5zY2VpdmVyICovCi0JdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOwogCW9tYXA0X2VoY2lfaW5pdCgpOwogCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJtNjgwLmMKaW5kZXggY2I3N2JlNy4uMzlhNzFiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1ybTY4MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcm02ODAuYwpAQCAtNDAsOSArNDAsNiBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHJtNjgwX3ZlbW1jID0gewogCS5jb25zdHJhaW50cyA9CXsKIAkJLm5hbWUJCQk9ICJybTY4MF92ZW1tYyIsCi0JCS5taW5fdVYJCQk9IDI5MDAwMDAsCi0JCS5tYXhfdVYJCQk9IDI5MDAwMDAsCi0JCS5hcHBseV91VgkJPSAxLAogCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAogCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCiAJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdF9kcGxsLmMKaW5kZXggMzM3MzkyYy4uYWNiN2FlNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJZGQgPSBjbGstPmRwbGxfZGF0YTsKIAogCS8qIERQTEwgZGl2aWRlciBtdXN0IHJlc3VsdCBpbiBhIHZhbGlkIGppdHRlciBjb3JyZWN0aW9uIHZhbCAqLwotCWZpbnQgPSBjbGstPnBhcmVudC0+cmF0ZSAvIChuICsgMSk7CisJZmludCA9IGNsay0+cGFyZW50LT5yYXRlIC8gbjsKIAlpZiAoZmludCA8IERQTExfRklOVF9CQU5EMV9NSU4pIHsKIAogCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCmluZGV4IGU4Y2IzMmYuLmRlOWVjOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJjbTJfNDR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgInBybTQ0eHguaCIKLSNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtNDR4eC5oIgogI2luY2x1ZGUgImNvbnRyb2wuaCIKICNpbmNsdWRlICJzY3JtNDR4eC5oIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCmluZGV4IGUyMGI5ODYuLjU4ZTQyZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKQEAgLTQyMyw2ICs0MjMsMTIgQEAKIHsKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAorCWlmICghY3B1X2lzX29tYXAyNHh4KCkgJiYgIWNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXByX2VycigiY2xvY2tkb21haW46ICVzLyVzOiAlczogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwKKwkJICAgICAgIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC00NTgsNiArNDY0LDEyIEBACiB7CiAJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlcy8lczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNTAwLDYgKzUxMiwxMiBAQAogCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSAmJiAhY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXMvJXM6ICVzOiBub3QgeWV0IGltcGxlbWVudGVkXG4iLAorCQkgICAgICAgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPndrZGVwX3NyY3MpOwogCWlmIChJU19FUlIoY2QpKSB7CiAJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciB3YWtlIHVwIG9mICIKQEAgLTUyNyw2ICs1NDUsMTIgQEAKIAlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAl1MzIgbWFzayA9IDA7CiAKKwlpZiAoIWNwdV9pc19vbWFwMjR4eCgpICYmICFjcHVfaXNfb21hcDM0eHgoKSkgeworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogJXM6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsCisJCSAgICAgICBjbGtkbS0+bmFtZSwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAoIWNsa2RtKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODMwLDggKzg1NCw3IEBACiAJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KIAkgKi8KIAlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgotCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwkJcHJfZXJyKCJjbG9ja2RvbWFpbjogJXM6IE9NQVA0IHdha2V1cC9zbGVlcCBkZXBlbmRlbmN5IHN1cHBvcnQ6IG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIsIGNsa2RtLT5uYW1lKTsKIAl9IGVsc2UgewogCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQogCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CkBAIC04NzIsOCArODk1LDcgQEAKIAkgKiBkZXBlbmRlbmN5IGNvZGUgYW5kIGRhdGEgZm9yIE9NQVA0LgogCSAqLwogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlXQVJOX09OQ0UoMSwgImNsb2NrZG9tYWluOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSAiCi0JCQkgICJzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCQlwcl9lcnIoImNsb2NrZG9tYWluOiAlczogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgc3VwcG9ydDogbm90IHlldCBpbXBsZW1lbnRlZFxuIiwgY2xrZG0tPm5hbWUpOwogCX0gZWxzZSB7CiAJCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCiAJCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluczQ0eHhfZGF0YS5jCmluZGV4IDUxOTIwZmMuLjEwNjIyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4X2RhdGEuYwpAQCAtMzAsOCArMzAsNiBAQAogI2luY2x1ZGUgImNtMV80NHh4LmgiCiAjaW5jbHVkZSAiY20yXzQ0eHguaCIKIAotI2luY2x1ZGUgImNtMV80NHh4LmgiCi0jaW5jbHVkZSAiY20yXzQ0eHguaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKICNpbmNsdWRlICJwcm00NHh4LmgiCiAjaW5jbHVkZSAicHJjbTQ0eHguaCIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RtYS5jCmluZGV4IGQyZjE1ZjUuLjM0OTIyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9kbWEuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiAJaWYgKElTX0VSUihvZCkpIHsKIAkJcHJfZXJyKCIlczogQ2FudCBidWlsZCBvbWFwX2RldmljZSBmb3IgJXM6JXMuXG4iLAogCQkJX19mdW5jX18sIG5hbWUsIG9oLT5uYW1lKTsKLQkJcmV0dXJuIElTX0VSUihvZCk7CisJCXJldHVybiBQVFJfRVJSKG9kKTsKIAl9CiAKIAltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoJm9kLT5wZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCBiZWZhMzIxLi44MTk4NWE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTM4LDIwICszOCw2IEBACiAgKi8KIAogI2lmZGVmIE1VTFRJX09NQVAyCi0KLS8qCi0gKiBXZSB1c2UgX19nbHVlIHRvIGF2b2lkIGVycm9ycyB3aXRoIG11bHRpcGxlIGRlZmluaXRpb25zIG9mCi0gKiAuZ2xvYmwgb21hcF9pcnFfYmFzZSBhcyBpdCdzIGluY2x1ZGVkIGZyb20gZW50cnktYXJtdi5TIGJ1dCBub3QKLSAqIGZyb20gZW50cnktY29tbW9uLlMuCi0gKi8KLSNpZmRlZiBfX2dsdWUKLQkJLnB1c2hzZWN0aW9uIC5kYXRhCi0JCS5nbG9ibAlvbWFwX2lycV9iYXNlCi1vbWFwX2lycV9iYXNlOgotCQkud29yZAkwCi0JCS5wb3BzZWN0aW9uCi0jZW5kaWYKLQogCQkvKgogCQkgKiBDb25maWd1cmUgdGhlIGludGVycnVwdCBiYXNlIG9uIHRoZSBmaXJzdCBpbnRlcnJ1cHQuCiAJCSAqIFNlZSBhbHNvIG9tYXBfaXJxX2Jhc2VfaW5pdCBmb3Igc2V0dGluZyBvbWFwX2lycV9iYXNlLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IGU2NjY4N2IuLmMyMDMyMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTMxNCwxNCArMzE0LDEzIEBACiAJcmV0dXJuIG9tYXBfaHdtb2Rfc2V0X3Bvc3RzZXR1cF9zdGF0ZShvaCwgKih1OCAqKWRhdGEpOwogfQogCit2b2lkIF9faW9tZW0gKm9tYXBfaXJxX2Jhc2U7CisKIC8qCiAgKiBJbml0aWFsaXplIGFzbV9pcnFfYmFzZSBmb3IgZW50cnktbWFjcm8uUwogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pcnFfYmFzZV9pbml0KHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgX19pb21lbSAqb21hcF9pcnFfYmFzZTsKLQotI2lmZGVmIE1VTFRJX09NQVAyCiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKQEAgLTMzMCw3ICszMjksNiBAQAogCQlvbWFwX2lycV9iYXNlID0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDRYWF9HSUNfQ1BVX0JBU0UpOwogCWVsc2UKIAkJcHJfZXJyKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBvbWFwX2lycV9iYXNlXG4iKTsKLSNlbmRpZgogfQogCiB2b2lkIF9faW5pdCBvbWFwMl9pbml0X2NvbW1vbl9pbmZyYXN0cnVjdHVyZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwppbmRleCAzOTQ0MTNkLi4yNGI4ODUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21haWxib3guYwpAQCAtMTkzLDEwICsxOTMsMTIgQEAKIAkJb21hcF9tYm94X3R5cGVfdCBpcnEpCiB7CiAJc3RydWN0IG9tYXBfbWJveDJfcHJpdiAqcCA9IG1ib3gtPnByaXY7Ci0JdTMyIGwsIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKLQlsID0gbWJveF9yZWFkX3JlZyhwLT5pcnFkaXNhYmxlKTsKLQlsICY9IH5iaXQ7Ci0JbWJveF93cml0ZV9yZWcobCwgcC0+aXJxZGlzYWJsZSk7CisJdTMyIGJpdCA9IChpcnEgPT0gSVJRX1RYKSA/IHAtPm5vdGZ1bGxfYml0IDogcC0+bmV3bXNnX2JpdDsKKworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCWJpdCA9IG1ib3hfcmVhZF9yZWcocC0+aXJxZGlzYWJsZSkgJiB+Yml0OworCisJbWJveF93cml0ZV9yZWcoYml0LCBwLT5pcnFkaXNhYmxlKTsKIH0KIAogc3RhdGljIHZvaWQgb21hcDJfbWJveF9hY2tfaXJxKHN0cnVjdCBvbWFwX21ib3ggKm1ib3gsCkBAIC0zMzQsNyArMzM2LDcgQEAKIAkucHJpdgk9ICZvbWFwMl9tYm94X2l2YV9wcml2LAogfTsKIAotc3RydWN0IG9tYXBfbWJveCAqb21hcDJfbWJveGVzW10gPSB7ICZtYm94X2l2YV9pbmZvLCAmbWJveF9kc3BfaW5mbywgTlVMTCB9Oworc3RydWN0IG9tYXBfbWJveCAqb21hcDJfbWJveGVzW10gPSB7ICZtYm94X2RzcF9pbmZvLCAmbWJveF9pdmFfaW5mbywgTlVMTCB9OwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKaW5kZXggZGY4ZDJmMi4uNmM4NDY1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tdXggKm11eCA9IE5VTEw7CiAJc3RydWN0IG9tYXBfbXV4X2VudHJ5ICplOwogCWNvbnN0IGNoYXIgKm1vZGVfbmFtZTsKLQlpbnQgZm91bmQgPSAwLCBmb3VuZF9tb2RlLCBtb2RlMF9sZW4gPSAwOworCWludCBmb3VuZCA9IDAsIGZvdW5kX21vZGUgPSAwLCBtb2RlMF9sZW4gPSAwOwogCXN0cnVjdCBsaXN0X2hlYWQgKm11eG1vZGVzID0gJnBhcnRpdGlvbi0+bXV4bW9kZXM7CiAKIAltb2RlX25hbWUgPSBzdHJjaHIobXV4bmFtZSwgJy4nKTsKQEAgLTYwNSw3ICs2MDUsNyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnBhcnRpdGlvbi0+bXV4bW9kZXMsIG5vZGUpIHsKIAkJc3RydWN0IG9tYXBfbXV4ICptID0gJmUtPm11eDsKIAotCQkodm9pZClkZWJ1Z2ZzX2NyZWF0ZV9maWxlKG0tPm11eG5hbWVzWzBdLCBTX0lXVUdPLCBtdXhfZGJnX2RpciwKKwkJKHZvaWQpZGVidWdmc19jcmVhdGVfZmlsZShtLT5tdXhuYW1lc1swXSwgU19JV1VTUiwgbXV4X2RiZ19kaXIsCiAJCQkJCSAgbSwgJm9tYXBfbXV4X2RiZ19zaWduYWxfZm9wcyk7CiAJfQogfQpAQCAtMTAwMCw2ICsxMDAwLDcgQEAKIAlpZiAoIXBhcnRpdGlvbi0+YmFzZSkgewogCQlwcl9lcnIoIiVzOiBDb3VsZCBub3QgaW9yZW1hcCBtdXggcGFydGl0aW9uIGF0IDB4JTA4eFxuIiwKIAkJCV9fZnVuY19fLCBwYXJ0aXRpb24tPnBoeXMpOworCQlrZnJlZShwYXJ0aXRpb24pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCAxMjVmNTY1Li5hNWE4M2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC02MzcsMTQgKzYzNywxNCBAQAogCiAJCX0KIAotCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJlbmFibGVfb2ZmX21vZGUiLCBTX0lSVUdPIHwgU19JV1VHTywgZCwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiZW5hYmxlX29mZl9tb2RlIiwgU19JUlVHTyB8IFNfSVdVU1IsIGQsCiAJCQkJICAgJmVuYWJsZV9vZmZfbW9kZSwgJnBtX2RiZ19vcHRpb25fZm9wcyk7Ci0JKHZvaWQpIGRlYnVnZnNfY3JlYXRlX2ZpbGUoInNsZWVwX3doaWxlX2lkbGUiLCBTX0lSVUdPIHwgU19JV1VHTywgZCwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgic2xlZXBfd2hpbGVfaWRsZSIsIFNfSVJVR08gfCBTX0lXVVNSLCBkLAogCQkJCSAgICZzbGVlcF93aGlsZV9pZGxlLCAmcG1fZGJnX29wdGlvbl9mb3BzKTsKLQkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgid2FrZXVwX3RpbWVyX3NlY29uZHMiLCBTX0lSVUdPIHwgU19JV1VHTywgZCwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgid2FrZXVwX3RpbWVyX3NlY29uZHMiLCBTX0lSVUdPIHwgU19JV1VTUiwgZCwKIAkJCQkgICAmd2FrZXVwX3RpbWVyX3NlY29uZHMsICZwbV9kYmdfb3B0aW9uX2ZvcHMpOwogCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ3YWtldXBfdGltZXJfbWlsbGlzZWNvbmRzIiwKLQkJCVNfSVJVR08gfCBTX0lXVUdPLCBkLCAmd2FrZXVwX3RpbWVyX21pbGxpc2Vjb25kcywKKwkJCVNfSVJVR08gfCBTX0lXVVNSLCBkLCAmd2FrZXVwX3RpbWVyX21pbGxpc2Vjb25kcywKIAkJCSZwbV9kYmdfb3B0aW9uX2ZvcHMpOwogCXBtX2RiZ19pbml0X2RvbmUgPSAxOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKaW5kZXggMWMxYjBhYi4uMzk1ODBlNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaApAQCAtOTIsNyArOTIsNyBAQAogZXh0ZXJuIHZvaWQgb21hcDI0eHhfY3B1X3N1c3BlbmQodTMyIGRsbF9jdHJsLCB2b2lkIF9faW9tZW0gKnNkcmNfZGxsYV9jdHJsLAogCQkJCQl2b2lkIF9faW9tZW0gKnNkcmNfcG93ZXIpOwogZXh0ZXJuIHZvaWQgb21hcDM0eHhfY3B1X3N1c3BlbmQodTMyICphZGRyLCBpbnQgc2F2ZV9zdGF0ZSk7Ci1leHRlcm4gdm9pZCBzYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgKmFkZHIpOworZXh0ZXJuIGludCBzYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgKmFkZHIpOwogZXh0ZXJuIHZvaWQgb21hcDNfc2F2ZV9zY3JhdGNocGFkX2NvbnRlbnRzKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgaW50IG9tYXAyNHh4X2lkbGVfbG9vcF9zdXNwZW5kX3N6OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKaW5kZXggOWU1ZGM4ZS4uOTdmZWIzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAogCS8qIEJsb2NrIGNvbnNvbGUgb3V0cHV0IGluIGNhc2UgaXQgaXMgb24gb25lIG9mIHRoZSBPTUFQIFVBUlRzICovCiAJaWYgKCFpc19zdXNwZW5kaW5nKCkpCi0JCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQlpZiAoIWNvbnNvbGVfdHJ5bG9jaygpKQogCQkJZ290byBub19zbGVlcDsKIAogCW9tYXBfdWFydF9wcmVwYXJlX2lkbGUoMCk7CkBAIC0xNTEsNyArMTUxLDcgQEAKIAlvbWFwX3VhcnRfcmVzdW1lX2lkbGUoMCk7CiAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiBub19zbGVlcDoKIAlpZiAob21hcDJfcG1fZGVidWcpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCmluZGV4IDhjYmJlYWQuLjJmODY0ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYwpAQCAtMTY4LDkgKzE2OCwxMCBAQAogICogb25jZSBkdXJpbmcgYm9vdCBzZXF1ZW5jZSwgYnV0IHRoaXMgd29ya3MgYXMgd2UgYXJlIG5vdCB1c2luZyBzZWN1cmUKICAqIHNlcnZpY2VzLgogICovCi1zdGF0aWMgdm9pZCBvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCh1MzIgdGFyZ2V0X21wdV9zdGF0ZSkKK3N0YXRpYyB2b2lkIG9tYXAzX3NhdmVfc2VjdXJlX3JhbV9jb250ZXh0KHZvaWQpCiB7CiAJdTMyIHJldDsKKwlpbnQgbXB1X25leHRfc3RhdGUgPSBwd3JkbV9yZWFkX25leHRfcHdyc3QobXB1X3B3cmRtKTsKIAogCWlmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkgewogCQkvKgpAQCAtMTgxLDcgKzE4Miw3IEBACiAJCXB3cmRtX3NldF9uZXh0X3B3cnN0KG1wdV9wd3JkbSwgUFdSRE1fUE9XRVJfT04pOwogCQlyZXQgPSBfb21hcF9zYXZlX3NlY3VyZV9zcmFtKCh1MzIgKikKIAkJCQlfX3BhKG9tYXAzX3NlY3VyZV9yYW1fc3RvcmFnZSkpOwotCQlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcHdyZG0sIHRhcmdldF9tcHVfc3RhdGUpOworCQlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcHdyZG0sIG1wdV9uZXh0X3N0YXRlKTsKIAkJLyogRm9sbG93aW5nIGlzIGZvciBlcnJvciB0cmFja2luZywgaXQgc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAkJaWYgKHJldCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzYXZlX3NlY3VyZV9zcmFtKCkgcmV0dXJucyAlMDh4XG4iLApAQCAtMzk4LDcgKzM5OSw3IEBACiAJaWYgKCFpc19zdXNwZW5kaW5nKCkpCiAJCWlmIChwZXJfbmV4dF9zdGF0ZSA8IFBXUkRNX1BPV0VSX09OIHx8CiAJCSAgICBjb3JlX25leHRfc3RhdGUgPCBQV1JETV9QT1dFUl9PTikKLQkJCWlmICh0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSgpKQorCQkJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJCQlnb3RvIGNvbnNvbGVfc3RpbGxfYWN0aXZlOwogCiAJLyogUEVSICovCkBAIC00ODEsNyArNDgyLDcgQEAKIAl9CiAKIAlpZiAoIWlzX3N1c3BlbmRpbmcoKSkKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiBjb25zb2xlX3N0aWxsX2FjdGl2ZToKIAkvKiBEaXNhYmxlIElPLVBBRCBhbmQgSU8tQ0hBSU4gd2FrZXVwICovCkBAIC0xMDk0LDcgKzEwOTUsNyBAQAogCQlsb2NhbF9maXFfZGlzYWJsZSgpOwogCiAJCW9tYXBfZG1hX2dsb2JhbF9jb250ZXh0X3NhdmUoKTsKLQkJb21hcDNfc2F2ZV9zZWN1cmVfcmFtX2NvbnRleHQoUFdSRE1fUE9XRVJfT04pOworCQlvbWFwM19zYXZlX3NlY3VyZV9yYW1fY29udGV4dCgpOwogCQlvbWFwX2RtYV9nbG9iYWxfY29udGV4dF9yZXN0b3JlKCk7CiAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbjJ4eHhfM3h4eC5jCmluZGV4IGQ1MjMzODkuLmNmNjAwZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluMnh4eF8zeHh4LmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogI2luY2x1ZGUgInBvd2VyZG9tYWluLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtX21wdTQ0eHguaAppbmRleCA3MjlhNjQ0Li4zMzAwZmY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY21fbXB1NDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbV9tcHU0NHh4LmgKQEAgLTM4LDggKzM4LDggQEAKICNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9JTlNUCQkweDA4MDAKIAogLyogUFJDTV9NUFUgY2xvY2tkb21haW4gcmVnaXN0ZXIgb2Zmc2V0cyAoZnJvbSBpbnN0YW5jZSBzdGFydCkgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMF9NUFVfQ0RPRkZTCTB4MDAwMAotI2RlZmluZSBPTUFQNDQzMF9QUkNNX01QVV9DUFUxX01QVV9DRE9GRlMJMHgwMDAwCisjZGVmaW5lIE9NQVA0NDMwX1BSQ01fTVBVX0NQVTBfTVBVX0NET0ZGUwkweDAwMTgKKyNkZWZpbmUgT01BUDQ0MzBfUFJDTV9NUFVfQ1BVMV9NUFVfQ0RPRkZTCTB4MDAxOAogCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCAzMDJkYTc0Li4zMmU5MWE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTgxMiw3ICs4MTIsNyBAQAogCiAJb2gtPmRldl9hdHRyID0gdWFydDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsgLyogaW4gY2FzZSB0aGUgZWFybHljb24gaXMgb24gdGhlIFVBUlQgKi8KKwljb25zb2xlX2xvY2soKTsgLyogaW4gY2FzZSB0aGUgZWFybHljb24gaXMgb24gdGhlIFVBUlQgKi8KIAogCS8qCiAJICogQmVjYXVzZSBvZiBlYXJseSBVQVJUIHByb2JpbmcsIFVBUlQgZGlkIG5vdCBnZXQgaWRsZWQKQEAgLTgzOCw3ICs4MzgsNyBAQAogCW9tYXBfdWFydF9ibG9ja19zbGVlcCh1YXJ0KTsKIAl1YXJ0LT50aW1lb3V0ID0gREVGQVVMVF9USU1FT1VUOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHVhcnQtPnBhZGNvbmYpIHx8CiAJICAgICh1YXJ0LT53a19lbiAmJiB1YXJ0LT53a19tYXNrKSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDI0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAyNHh4LlMKaW5kZXggYzc3ODBjYy4uYjUwNzFhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDI0eHguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMjR4eC5TCkBAIC00Nyw2ICs0Nyw3IEBACiAgKiBOb3RlOiBUaGlzIGNvZGUgZ2V0J3MgY29waWVkIHRvIGludGVybmFsIFNSQU0gYXQgYm9vdC4gV2hlbiB0aGUgT01BUAogICoJIHdha2VzIHVwIGl0IGNvbnRpbnVlcyBleGVjdXRpb24gYXQgdGhlIHBvaW50IGl0IHdlbnQgdG8gc2xlZXAuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDI0eHhfaWRsZV9sb29wX3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjAsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCW1vdglyMCwgIzAJCQlAIGNsZWFyIGZvciBtY3Igc2V0dXAKQEAgLTgyLDYgKzgzLDcgQEAKICAqIFRoZSBETEwgbG9hZCB2YWx1ZSBpcyBub3Qga2VwdCBpbiBSRVRFTlRJT04gb3IgT0ZGLglJdCBuZWVkcyB0byBiZSByZXN0b3JlZAogICogYXQgd2FrZQogICovCisJLmFsaWduCTMKIEVOVFJZKG9tYXAyNHh4X2NwdV9zdXNwZW5kKQogCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCW1vdglyMywgIzB4MAkJQCBjbGVhciBmb3IgbWNyIGNhbGwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCmluZGV4IDk4ZDgyMzIuLjk1MWEwYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUwpAQCAtMTE4LDYgKzExOCw3IEBACiAKIAkudGV4dAogLyogRnVuY3Rpb24gdG8gY2FsbCByb20gY29kZSB0byBzYXZlIHNlY3VyZSByYW0gY29udGV4dCAqLworCS5hbGlnbgkzCiBFTlRSWShzYXZlX3NlY3VyZV9yYW1fY29udGV4dCkKIAlzdG1mZAlzcCEsIHtyMS1yMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJYWRyCXIzLCBhcGlfcGFyYW1zCQlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCkBAIC0xNjksNiArMTcwLDcgQEAKICAqICAgZGVwZW5kaW5nIG9uIHRoZSBsb3cgcG93ZXIgbW9kZSAobm9uLU9GRiB2cyBPRkYgbW9kZXMpLAogICogICBjZi4gJ1Jlc3VtZSBwYXRoIGZvciB4eHggbW9kZScgY29tbWVudHMuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDM0eHhfY3B1X3N1c3BlbmQpCiAJc3RtZmQJc3AhLCB7cjAtcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NtYXJ0cmVmbGV4LmMKaW5kZXggNzdlY2ViZi4uMWE3NzdlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbWFydHJlZmxleC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc21hcnRyZWZsZXguYwpAQCAtMjgyLDYgKzI4Miw3IEBACiAJCWRldl9lcnIoJnNyX2luZm8tPnBkZXYtPmRldiwgIiVzOiBFUlJPUiBpbiByZWdpc3RlcmluZyIKIAkJCSJpbnRlcnJ1cHQgaGFuZGxlci4gU21hcnRyZWZsZXggd2lsbCIKIAkJCSJub3QgZnVuY3Rpb24gYXMgZGVzaXJlZFxuIiwgX19mdW5jX18pOworCQlrZnJlZShuYW1lKTsKIAkJa2ZyZWUoc3JfaW5mbyk7CiAJCXJldHVybiByZXQ7CiB9CkBAIC03ODAsOCArNzgxLDcgQEAKIAlzdHJ1Y3Qgb21hcF9zciAqc3JfaW5mbyA9IChzdHJ1Y3Qgb21hcF9zciAqKSBkYXRhOwogCiAJaWYgKCFzcl9pbmZvKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAotCQkJX19mdW5jX18sIHNyX2luZm8tPnZvbHRkbS0+bmFtZSk7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03OTUsOCArNzk1LDcgQEAKIAlzdHJ1Y3Qgb21hcF9zciAqc3JfaW5mbyA9IChzdHJ1Y3Qgb21hcF9zciAqKSBkYXRhOwogCiAJaWYgKCFzcl9pbmZvKSB7Ci0JCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBmb3Igc3JfJXMgbm90IGZvdW5kXG4iLAotCQkJX19mdW5jX18sIHNyX2luZm8tPnZvbHRkbS0+bmFtZSk7CisJCXByX3dhcm5pbmcoIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MzQsNyArODMzLDggQEAKIAogCWlmICghcGRhdGEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBsYXRmb3JtIGRhdGEgbWlzc2luZ1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZnJlZV9kZXZpbmZvOwogCX0KIAogCW1lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CkBAIC04ODAsNyArODgwLDcgQEAKIAkJcmV0ID0gc3JfbGF0ZV9pbml0KHNyX2luZm8pOwogCQlpZiAocmV0KSB7CiAJCQlwcl93YXJuaW5nKCIlczogRXJyb3IgaW4gU1IgbGF0ZSBpbml0XG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gcmV0OworCQkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJCX0KIAl9CiAKQEAgLTg5MSwxNyArODkxLDIwIEBACiAJICogbm90IHRyeSB0byBjcmVhdGUgcmVzdCBvZiB0aGUgZGVidWdmcyBlbnRyaWVzLgogCSAqLwogCXZkZF9kYmdfZGlyID0gb21hcF92b2x0YWdlX2dldF9kYmdkaXIoc3JfaW5mby0+dm9sdGRtKTsKLQlpZiAoIXZkZF9kYmdfZGlyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXZkZF9kYmdfZGlyKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOworCX0KIAogCWRiZ19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNtYXJ0cmVmbGV4IiwgdmRkX2RiZ19kaXIpOwogCWlmIChJU19FUlIoZGJnX2RpcikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnlcbiIsCiAJCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiBQVFJfRVJSKGRiZ19kaXIpOworCQlyZXQgPSBQVFJfRVJSKGRiZ19kaXIpOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKLQkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b2NvbXAiLCBTX0lSVUdPIHwgU19JV1VHTywgZGJnX2RpciwKKwkodm9pZCkgZGVidWdmc19jcmVhdGVfZmlsZSgiYXV0b2NvbXAiLCBTX0lSVUdPIHwgU19JV1VTUiwgZGJnX2RpciwKIAkJCQkodm9pZCAqKXNyX2luZm8sICZwbV9zcl9mb3BzKTsKIAkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKCJlcnJ3ZWlnaHQiLCBTX0lSVUdPLCBkYmdfZGlyLAogCQkJJnNyX2luZm8tPmVycl93ZWlnaHQpOwpAQCAtOTE0LDcgKzkxNyw4IEBACiAJaWYgKElTX0VSUihudmFsdWVfZGlyKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSIKIAkJCSJmb3Igbi12YWx1ZXNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIFBUUl9FUlIobnZhbHVlX2Rpcik7CisJCXJldCA9IFBUUl9FUlIobnZhbHVlX2Rpcik7CisJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIAogCW9tYXBfdm9sdGFnZV9nZXRfdm9sdHRhYmxlKHNyX2luZm8tPnZvbHRkbSwgJnZvbHRfZGF0YSk7CkBAIC05MjMsMjQgKzkyNywxNiBAQAogCQkJIiBjb3JyZXNwb25kaW5nIHZkZCB2ZGRfJXMuIENhbm5vdCBjcmVhdGUgZGVidWdmcyIKIAkJCSJlbnRyaWVzIGZvciBuLXZhbHVlc1xuIiwKIAkJCV9fZnVuY19fLCBzcl9pbmZvLT52b2x0ZG0tPm5hbWUpOwotCQlyZXR1cm4gLUVOT0RBVEE7CisJCXJldCA9IC1FTk9EQVRBOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3JfaW5mby0+bnZhbHVlX2NvdW50OyBpKyspIHsKLQkJY2hhciAqbmFtZTsKLQkJY2hhciB2b2x0X25hbWVbMzJdOworCQljaGFyIG5hbWVbTlZBTFVFX05BTUVfTEVOICsgMV07CiAKLQkJbmFtZSA9IGt6YWxsb2MoTlZBTFVFX05BTUVfTEVOICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbmFtZSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkiCi0JCQkJIiBmb3Igbi12YWx1ZSBkaXJlY3RvcnkgbmFtZVxuIiwgIF9fZnVuY19fKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0KLQkJc3RyY3B5KG5hbWUsICJ2b2x0XyIpOwotCQlzcHJpbnRmKHZvbHRfbmFtZSwgIiVkIiwgdm9sdF9kYXRhW2ldLnZvbHRfbm9taW5hbCk7Ci0JCXN0cmNhdChuYW1lLCB2b2x0X25hbWUpOwotCQkodm9pZCkgZGVidWdmc19jcmVhdGVfeDMyKG5hbWUsIFNfSVJVR08gfCBTX0lXVUdPLCBudmFsdWVfZGlyLAorCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJ2b2x0XyVkIiwKKwkJCSB2b2x0X2RhdGFbaV0udm9sdF9ub21pbmFsKTsKKwkJKHZvaWQpIGRlYnVnZnNfY3JlYXRlX3gzMihuYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgbnZhbHVlX2RpciwKIAkJCQkmKHNyX2luZm8tPm52YWx1ZV90YWJsZVtpXS5udmFsdWUpKTsKIAl9CiAKQEAgLTk2Niw3ICs5NjIsNyBAQAogCX0KIAogCXNyX2luZm8gPSBfc3JfbG9va3VwKHBkYXRhLT52b2x0ZG0pOwotCWlmICghc3JfaW5mbykgeworCWlmIChJU19FUlIoc3JfaW5mbykpIHsKIAkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiVzOiBvbWFwX3NyIHN0cnVjdCBub3QgZm91bmRcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQyeC5TCmluZGV4IDA1NTMxMGMuLmZmOWI5ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0MnguUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDJ4LlMKQEAgLTM5LDYgKzM5LDcgQEAKIAogCS50ZXh0CiAKKwkuYWxpZ24JMwogRU5UUlkob21hcDI0Mnhfc3JhbV9kZHJfaW5pdCkKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMiwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKIApAQCAtMTQzLDYgKzE0NCw3IEBACiAgKiByMCA9IFtQUkNNX0ZVTEwgfCBQUkNNX0hBTEZdIHIxID0gU0RSQ19ETExBX0NUUkwgdmFsdWUgcjIgPSBbRERSIHwgU0RSXQogICogUFJDTV9GVUxMID0gMiwgUFJDTV9IQUxGID0gMSwgRERSID0gMSwgU0RSID0gMAogICovCisJLmFsaWduCTMKIEVOVFJZKG9tYXAyNDJ4X3NyYW1fcmVwcm9ncmFtX3NkcmMpCiAJc3RtZmQJc3AhLCB7cjAgLSByMTAsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCiAJbW92CXIzLCAjMHgwCQlAIGNsZWFyIGZvciBtcmMgY2FsbApAQCAtMjM4LDYgKzI0MCw3IEBACiAvKgogICogU2V0IGRpdmlkZXJzIGFuZCBwbGwuIEFsc28gcmVjYWxjdWxhdGUgRExMIHZhbHVlIGZvciBERFIgYW5kIHVubG9jayBtb2RlLgogICovCisJLmFsaWduCTMKIEVOVFJZKG9tYXAyNDJ4X3NyYW1fc2V0X3ByY20pCiAJc3RtZmQJc3AhLCB7cjAtcjEyLCBscn0JQCByZWdzIHRvIHN0YWNrCiAJYWRyCXI0LCBwYmVnaW4JCUAgYWRkciBvZiBwcmVsb2FkIHN0YXJ0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0yNDN4LlMKaW5kZXggZjkwMDc1OC4uNzY3MzAyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMjQzeC5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTI0M3guUwpAQCAtMzksNiArMzksNyBAQAogCiAJLnRleHQKIAorCS5hbGlnbgkzCiBFTlRSWShvbWFwMjQzeF9zcmFtX2Rkcl9pbml0KQogCXN0bWZkCXNwISwge3IwIC0gcjEyLCBscn0JQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawogCkBAIC0xNDMsNiArMTQ0LDcgQEAKICAqIHIwID0gW1BSQ01fRlVMTCB8IFBSQ01fSEFMRl0gcjEgPSBTRFJDX0RMTEFfQ1RSTCB2YWx1ZSByMiA9IFtERFIgfCBTRFJdCiAgKiBQUkNNX0ZVTEwgPSAyLCBQUkNNX0hBTEYgPSAxLCBERFIgPSAxLCBTRFIgPSAwCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDI0M3hfc3JhbV9yZXByb2dyYW1fc2RyYykKIAlzdG1mZAlzcCEsIHtyMCAtIHIxMCwgbHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKIAltb3YJcjMsICMweDAJCUAgY2xlYXIgZm9yIG1yYyBjYWxsCkBAIC0yMzgsNiArMjQwLDcgQEAKIC8qCiAgKiBTZXQgZGl2aWRlcnMgYW5kIHBsbC4gQWxzbyByZWNhbGN1bGF0ZSBETEwgdmFsdWUgZm9yIEREUiBhbmQgdW5sb2NrIG1vZGUuCiAgKi8KKwkuYWxpZ24JMwogRU5UUlkob21hcDI0M3hfc3JhbV9zZXRfcHJjbSkKIAlzdG1mZAlzcCEsIHtyMC1yMTIsIGxyfQlAIHJlZ3MgdG8gc3RhY2sKIAlhZHIJcjQsIHBiZWdpbgkJQCBhZGRyIG9mIHByZWxvYWQgc3RhcnQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc3JhbTM0eHguUwppbmRleCA3Zjg5M2EyLi4yNTAxMWNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NyYW0zNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zcmFtMzR4eC5TCkBAIC0xMTEsNiArMTExLDcgQEAKICAqIHNpbmNlIGl0IHdpbGwgY2F1c2UgdGhlIEFSTSBNTVUgdG8gYXR0ZW1wdCB0byB3YWxrIHRoZSBwYWdlIHRhYmxlcy4KICAqIFRoZXNlIGNyYXNoZXMgbWF5IGJlIGludGVybWl0dGVudC4KICAqLworCS5hbGlnbgkzCiBFTlRSWShvbWFwM19zcmFtX2NvbmZpZ3VyZV9jb3JlX2RwbGwpCiAJc3RtZmQJc3AhLCB7cjEtcjEyLCBscn0JQCBzdG9yZSByZWdzIHRvIHN0YWNrCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCA0ZTQ4ZTc4Li4wZmM1NTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC0zOSw5ICszOSwxMiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KICNpbmNsdWRlIDxwbGF0L2RtdGltZXIuaD4KICNpbmNsdWRlIDxhc20vbG9jYWx0aW1lci5oPgorI2luY2x1ZGUgPGFzbS9zY2hlZF9jbG9jay5oPgogCiAjaW5jbHVkZSAidGltZXItZ3AuaCIKIAorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisKIC8qIE1BWF9HUFRJTUVSX0lEOiBudW1iZXIgb2YgR1BUSU1FUnMgb24gdGhlIGNoaXAgKi8KICNkZWZpbmUgTUFYX0dQVElNRVJfSUQJCTEyCiAKQEAgLTE3NiwxNCArMTc5LDE5IEBACiAvKiAKICAqIFdoZW4gMzJrLXRpbWVyIGlzIGVuYWJsZWQsIGRvbid0IHVzZSBHUFRpbWVyIGZvciBjbG9ja3NvdXJjZQogICogaW5zdGVhZCwganVzdCBsZWF2ZSBkZWZhdWx0IGNsb2Nrc291cmNlIHdoaWNoIHVzZXMgdGhlIDMyawotICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHNlZSBwbGF0LW9tYXAvY29tbW9uLmMuIAorICogc3luYyBjb3VudGVyLiAgU2VlIGNsb2Nrc291cmNlIHNldHVwIGluIHBsYXQtb21hcC9jb3VudGVyXzMyay5jCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBvbWFwMl9ncF9jbG9ja3NvdXJjZV9pbml0KHZvaWQpIHt9CitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ3BfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCW9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsoKTsKK30KKwogI2Vsc2UKIC8qCiAgKiBjbG9ja3NvdXJjZQogICovCitzdGF0aWMgREVGSU5FX0NMT0NLX0RBVEEoY2QpOwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyICpncHRfY2xvY2tzb3VyY2U7CiBzdGF0aWMgY3ljbGVfdCBjbG9ja3NvdXJjZV9yZWFkX2N5Y2xlcyhzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQogewpAQCAtMTk4LDYgKzIwNiwxNSBAQAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKK3N0YXRpYyB2b2lkIG5vdHJhY2UgZG10aW1lcl91cGRhdGVfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwl1MzIgY3ljOworCisJY3ljID0gb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoZ3B0X2Nsb2Nrc291cmNlKTsKKworCXVwZGF0ZV9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCk7Cit9CisKIC8qIFNldHVwIGZyZWUtcnVubmluZyBjb3VudGVyIGZvciBjbG9ja3NvdXJjZSAqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAyX2dwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKIHsKQEAgLTIxOCw2ICsyMzUsOCBAQAogCiAJb21hcF9kbV90aW1lcl9zZXRfbG9hZF9zdGFydChncHQsIDEsIDApOwogCisJaW5pdF9zY2hlZF9jbG9jaygmY2QsIGRtdGltZXJfdXBkYXRlX3NjaGVkX2Nsb2NrLCAzMiwgdGlja19yYXRlKTsKKwogCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfZ3B0LCB0aWNrX3JhdGUpKQogCQlwcmludGsoZXJyMiwgY2xvY2tzb3VyY2VfZ3B0Lm5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ZvbHRhZ2UuYwppbmRleCBlZDYwNzljOS4uMTJiZTUyNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTQ3MSw2ICs0NzEsNyBAQAogCXN0cmNhdChuYW1lLCB2ZGQtPnZvbHRkbS5uYW1lKTsKIAogCXZkZC0+ZGVidWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKG5hbWUsIHZvbHRhZ2VfZGlyKTsKKwlrZnJlZShuYW1lKTsKIAlpZiAoSVNfRVJSKHZkZC0+ZGVidWdfZGlyKSkgewogCQlwcl93YXJuaW5nKCIlczogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IiCiAJCQkiIHZkZF8lc1xuIiwgX19mdW5jX18sIHZkZC0+dm9sdGRtLm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKaW5kZXggNmIyYzgwMC4uMjhmNjY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCkBAIC01MCw3ICs1MCw3IEBACiAJCQlHUElPMF9DT0xJQlJJX1BYQTI3MF9TRF9ERVRFQ1Q7CiAJaWYgKG1hY2hpbmVfaXNfY29saWJyaTMwMCgpKQkvKiBQWEEzMDAgQ29saWJyaSAqLwogCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQotCQkJR1BJTzM5X0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVDsKKwkJCUdQSU8xM19DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1Q7CiAJZWxzZQkJCQkvKiBQWEEzMjAgQ29saWJyaSAqLwogCQljb2xpYnJpX21jaV9wbGF0Zm9ybV9kYXRhLmdwaW9fY2FyZF9kZXRlY3QgPQogCQkJR1BJTzI4X0NPTElCUklfUFhBMzIwX1NEX0RFVEVDVDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTMwMC5jCmluZGV4IGZkZGIxNmQuLjY2ZGQ4MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMzAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEzMDAuYwpAQCAtNDEsNyArNDEsNyBAQAogCUdQSU80X01NQzFfREFUMSwKIAlHUElPNV9NTUMxX0RBVDIsCiAJR1BJTzZfTU1DMV9EQVQzLAotCUdQSU8zOV9HUElPLAkvKiBTRCBkZXRlY3QgKi8KKwlHUElPMTNfR1BJTywJLyogR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVCAqLwogCiAJLyogVUhDICovCiAJR1BJTzBfMl9VU0JIX1BFTiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvY29saWJyaS5oCmluZGV4IDM4OGE5NmYuLmNiNDIzNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9jb2xpYnJpLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2NvbGlicmkuaApAQCAtNjAsNyArNjAsNyBAQAogI2RlZmluZSBHUElPMTEzX0NPTElCUklfUFhBMjcwX1RTX0lSUQkxMTMKIAogLyogR1BJTyBkZWZpbml0aW9ucyBmb3IgQ29saWJyaSBQWEEzMDAvMzEwICovCi0jZGVmaW5lIEdQSU8zOV9DT0xJQlJJX1BYQTMwMF9TRF9ERVRFQ1QJMzkKKyNkZWZpbmUgR1BJTzEzX0NPTElCUklfUFhBMzAwX1NEX0RFVEVDVAkxMwogCiAvKiBHUElPIGRlZmluaXRpb25zIGZvciBDb2xpYnJpIFBYQTMyMCAqLwogI2RlZmluZSBHUElPMjhfQ09MSUJSSV9QWEEzMjBfU0RfREVURUNUCTI4CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcG0uaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCmluZGV4IGZkODM2MGMuLmYxNWFmZTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wbS5oCkBAIC0yMiw5ICsyMiw4IEBACiBleHRlcm4gc3RydWN0IHB4YV9jcHVfcG1fZm5zICpweGFfY3B1X3BtX2ZuczsKIAogLyogc2xlZXAuUyAqLwotZXh0ZXJuIHZvaWQgcHhhMjV4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIGludCk7Ci1leHRlcm4gdm9pZCBweGEyN3hfY3B1X3N1c3BlbmQodW5zaWduZWQgaW50KTsKLWV4dGVybiB2b2lkIHB4YV9jcHVfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgcHhhMjV4X2NwdV9zdXNwZW5kKHVuc2lnbmVkIGludCwgbG9uZyk7CitleHRlcm4gdm9pZCBweGEyN3hfY3B1X3N1c3BlbmQodW5zaWduZWQgaW50LCBsb25nKTsKIAogZXh0ZXJuIGludCBweGFfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgcHhhX3BtX3ByZXBhcmUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtMjd4LmMKaW5kZXggNDA1YjkyYS4uMzU1NzJjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG0yN3guYwpAQCAtMzIzLDcgKzMyMyw3IEBACiAJLnB3bV9pZAkJPSAwLAogCS5tYXhfYnJpZ2h0bmVzcwk9IDB4ZmUsCiAJLmRmdF9icmlnaHRuZXNzCT0gMHg3ZSwKLQkucHdtX3BlcmlvZF9ucwk9IDM1MDAsCisJLnB3bV9wZXJpb2RfbnMJPSAzNTAwICogMTAyNCwKIAkuaW5pdAkJPSBwYWxtMjd4X2JhY2tsaWdodF9pbml0LAogCS5ub3RpZnkJCT0gcGFsbTI3eF9iYWNrbGlnaHRfbm90aWZ5LAogCS5leGl0CQk9IHBhbG0yN3hfYmFja2xpZ2h0X2V4aXQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKaW5kZXggN2JmNDAxNy4uMzAxMDE5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiBzdGF0aWMgaW50IHBhbG16NzJfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQogewogCS8qIHNldHVwIHRoZSByZXN1bWVfaW5mbyBzdHJ1Y3QgZm9yIHRoZSBvcmlnaW5hbCBib290bG9hZGVyICovCi0JcGFsbXo3Ml9yZXN1bWVfaW5mby5yZXN1bWVfYWRkciA9ICh1MzIpIHB4YV9jcHVfcmVzdW1lOworCXBhbG16NzJfcmVzdW1lX2luZm8ucmVzdW1lX2FkZHIgPSAodTMyKSBjcHVfcmVzdW1lOwogCiAJLyogU3RvcmluZyBtZW1vcnkgdG91Y2hlZCBieSBST00gKi8KIAlzdG9yZV9wdHIgPSAqUEFMTVo3Ml9TQVZFX0RXT1JEOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKaW5kZXggOTc4ZTFiMi4uNTFlMTU4MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCkBAIC0zMyw3ICszMyw3IEBACiAjZW5kaWYKIAogCS8qIHNraXAgcmVnaXN0ZXJzIHNhdmluZyBmb3Igc3RhbmRieSAqLwotCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX1NUQU5EQlkpIHsKKwlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZICYmIHB4YV9jcHVfcG1fZm5zLT5zYXZlKSB7CiAJCXB4YV9jcHVfcG1fZm5zLT5zYXZlKHNsZWVwX3NhdmUpOwogCQkvKiBiZWZvcmUgc2xlZXBpbmcsIGNhbGN1bGF0ZSBhbmQgc2F2ZSBhIGNoZWNrc3VtICovCiAJCWZvciAoaSA9IDA7IGkgPCBweGFfY3B1X3BtX2Zucy0+c2F2ZV9jb3VudCAtIDE7IGkrKykKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlweGFfY3B1X3BtX2Zucy0+ZW50ZXIoc3RhdGUpOwogCWNwdV9pbml0KCk7CiAKLQlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9TVEFOREJZKSB7CisJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfU1RBTkRCWSAmJiBweGFfY3B1X3BtX2Zucy0+cmVzdG9yZSkgewogCQkvKiBhZnRlciBzbGVlcGluZywgdmFsaWRhdGUgdGhlIGNoZWNrc3VtICovCiAJCWZvciAoaSA9IDA7IGkgPCBweGFfY3B1X3BtX2Zucy0+c2F2ZV9jb3VudCAtIDE7IGkrKykKIAkJCWNoZWNrc3VtICs9IHNsZWVwX3NhdmVbaV07CkBAIC02NywxMSArNjcsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChweGFfcG1fZW50ZXIpOwogCi11bnNpZ25lZCBsb25nIHNsZWVwX3BoeXNfc3Aodm9pZCAqc3ApCi17Ci0JcmV0dXJuIHZpcnRfdG9fcGh5cyhzcCk7Ci19Ci0KIHN0YXRpYyBpbnQgcHhhX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpZiAocHhhX2NwdV9wbV9mbnMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCmluZGV4IGZiYzViNzcuLjZiZGU1OTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI1eC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlweGEyNXhfY3B1X3N1c3BlbmQoUFdSTU9ERV9TTEVFUCk7CisJCXB4YTI1eF9jcHVfc3VzcGVuZChQV1JNT0RFX1NMRUVQLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0yNTIsNyArMjUyLDcgQEAKIHN0YXRpYyBpbnQgcHhhMjV4X2NwdV9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMocHhhX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM0Nyw2ICszNDcsNyBAQAogCSZweGEyNXhfZGV2aWNlX2Fzc3AsCiAJJnB4YTI1eF9kZXZpY2VfcHdtMCwKIAkmcHhhMjV4X2RldmljZV9wd20xLAorCSZweGFfZGV2aWNlX2Fzb2NfcGxhdGZvcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjV4X3N5c2RldltdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwppbmRleCA5ODczMDFmLi4yOGIxMWJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAJCXB4YV9jcHVfc3RhbmRieSgpOwogCQlicmVhazsKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlweGEyN3hfY3B1X3N1c3BlbmQocHdybW9kZSk7CisJCXB4YTI3eF9jcHVfc3VzcGVuZChwd3Jtb2RlLCBQTEFUX1BIWVNfT0ZGU0VUIC0gUEFHRV9PRkZTRVQpOwogCQlicmVhazsKIAl9CiB9CkBAIC0zMTMsNyArMzEzLDcgQEAKIHN0YXRpYyBpbnQgcHhhMjd4X2NwdV9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMocHhhX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTN4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKaW5kZXggYTdhMTllMS4uMTIzMDM0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMKQEAgLTE0Miw4ICsxNDIsNyBAQAogCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnAgPSAodm9sYXRpbGUgdm9pZCAqKTB4YzAwMDAwMDA7CiAJdW5zaWduZWQgbG9uZyBzYXZlZF9kYXRhID0gKnA7CiAKLQlleHRlcm4gdm9pZCBweGEzeHhfY3B1X3N1c3BlbmQodm9pZCk7Ci0JZXh0ZXJuIHZvaWQgcHhhM3h4X2NwdV9yZXN1bWUodm9pZCk7CisJZXh0ZXJuIHZvaWQgcHhhM3h4X2NwdV9zdXNwZW5kKGxvbmcpOwogCiAJLyogcmVzdW1pbmcgZnJvbSBEMiByZXF1aXJlcyB0aGUgSFNJTzIvQk9PVC9UUE0gY2xvY2tzIGVuYWJsZWQgKi8KIAlDS0VOQSB8PSAoMSA8PCBDS0VOX0JPT1QpIHwgKDEgPDwgQ0tFTl9UUE0pOwpAQCAtMTYxLDkgKzE2MCw5IEBACiAJUFNQUiA9IDB4NWMwMTQwMDA7CiAKIAkvKiBvdmVyd3JpdGUgd2l0aCB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KLQkqcCA9IHZpcnRfdG9fcGh5cyhweGEzeHhfY3B1X3Jlc3VtZSk7CisJKnAgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAKLQlweGEzeHhfY3B1X3N1c3BlbmQoKTsKKwlweGEzeHhfY3B1X3N1c3BlbmQoUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCSpwID0gc2F2ZWRfZGF0YTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtcHhhL3NsZWVwLlMKaW5kZXggYzU1MWRhOC4uNmY1MzY4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zbGVlcC5TCkBAIC0yMiwxMzMgKzIyLDI2IEBACiAKIAkJLnRleHQKIAotcHhhX2NwdV9zYXZlX2NwOgotCUAgZ2V0IGNvcHJvY2Vzc29yIHJlZ2lzdGVycwotCW1yYwlwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgZm9yIHR1cmJvIG1vZGUKLQltcmMJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCi0JbXJjCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbXJjIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbXJjIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbXJjCXAxNSwgMCwgcjgsIGMxLCBjMSwgMCAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKLQltcmMgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCBjb250cm9sIHJlZwotCi0JYmljCXIzLCByMywgIzIJCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0Ci0KLQlAIHN0b3JlIHRoZW0gcGx1cyBjdXJyZW50IHZpcnR1YWwgc3RhY2sgcHRyIG9uIHN0YWNrCi0JbW92CXIxMCwgc3AKLQlzdG1mZAlzcCEsIHtyMyAtIHIxMH0KLQotCW1vdglwYywgbHIKLQotcHhhX2NwdV9zYXZlX3NwOgotCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCi0JbW92CXIwLCBzcAotCXN0cglsciwgW3NwLCAjLTRdIQotCWJsCXNsZWVwX3BoeXNfc3AKLQlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCi0Jc3RyCXIwLCBbcjFdCi0JbGRyCXBjLCBbc3BdLCAjNAotCiAjaWZkZWYgQ09ORklHX1BYQTN4eAogLyoKICAqIHB4YTN4eF9jcHVfc3VzcGVuZCgpIC0gZm9yY2VzIENQVSBpbnRvIHNsZWVwIHN0YXRlIChTMkQzQzQpCiAgKgotICogTk9URTogIHVuZm9ydHVuYXRlbHksIHB4YV9jcHVfc2F2ZV9jcCBjYW4gbm90IGJlIHJldXNlZCBoZXJlIHNpbmNlCi0gKiB0aGUgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpcyBkaWZmZXJlbnQgYmV0d2VlbiBweGEzeHgKLSAqIGFuZCBweGF7MjV4LDI3eH0KKyAqIHIwID0gdjpwIG9mZnNldAogICovCi0KIEVOVFJZKHB4YTN4eF9jcHVfc3VzcGVuZCkKIAogI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAogI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0KLQltcmMJcDE0LCAwLCByMywgYzYsIGMwLCAwCQlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGZvciB0dXJibyBtb2RlCi0JbXJjCXAxNSwgMCwgcjQsIGMxNSwgYzEsIDAJCUAgQ1AgYWNjZXNzIHJlZwotCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAwCQlAIFBJRAotCW1yYyAJcDE1LCAwLCByNiwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1yYyAJcDE1LCAwLCByNywgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgotCW1yYwlwMTUsIDAsIHI4LCBjMSwgYzAsIDEgICAgICAgICAgIEAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCi0JbXJjIAlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCUAgY29udHJvbCByZWcKLQotCWJpYwlyMywgcjMsICMyCQkJQCBjbGVhciBmcmVxdWVuY3kgY2hhbmdlIGJpdAotCi0JQCBzdG9yZSB0aGVtIHBsdXMgY3VycmVudCB2aXJ0dWFsIHN0YWNrIHB0ciBvbiBzdGFjawotCW1vdglyMTAsIHNwCi0Jc3RtZmQJc3AhLCB7cjMgLSByMTB9Ci0KLQlAIHN0b3JlIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygc3RhY2sgcG9pbnRlcgotCW1vdglyMCwgc3AKLQlibAlzbGVlcF9waHlzX3NwCi0JbGRyCXIxLCA9c2xlZXBfc2F2ZV9zcAotCXN0cglyMCwgW3IxXQotCi0JQCBjbGVhbiBkYXRhIGNhY2hlCi0JYmwJeHNjM19mbHVzaF9rZXJuX2NhY2hlX2FsbAorCW1vdglyMSwgcjAKKwlsZHIJcjMsID1weGFfY3B1X3Jlc3VtZQlAIHJlc3VtZSBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAKIAltb3YJcjAsICMweDA2CQlAIFMyRDNDNCBtb2RlCiAJbWNyCXAxNCwgMCwgcjAsIGM3LCBjMCwgMAlAIGVudGVyIHNsZWVwCiAKIDIwOgliCTIwYgkJCUAgd2FpdGluZyBmb3Igc2xlZXAKLQotCS5kYXRhCi0JLmFsaWduIDUKLS8qCi0gKiBweGEzeHhfY3B1X3Jlc3VtZQotICovCi0KLUVOVFJZKHB4YTN4eF9jcHVfcmVzdW1lKQotCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUJQCBzZXQgU1ZDLCBpcnFzIG9mZgotCW1zcgljcHNyX2MsIHIwCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcywgQlRCCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgKCZmaWxsKSBidWZmZXIKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCA0CQlAIGZsdXNoIHByZWZldGNoIGJ1ZmZlcgotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAgICAJQCBpbnZhbGlkYXRlIEkgJiBEIFRMQnMKLQotCW1jcglwMTQsIDAsIHIzLCBjNiwgYzAsIDAJCUAgY2xvY2sgY29uZmlndXJhdGlvbiwgdHVyYm8gbW9kZS4KLQltY3IJcDE1LCAwLCByNCwgYzE1LCBjMSwgMAkJQCBDUCBhY2Nlc3MgcmVnCi0JbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDAJCUAgUElECi0JbWNyIAlwMTUsIDAsIHI2LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbWNyIAlwMTUsIDAsIHI3LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjgsIGMxLCBjMCwgMSAgICAgICAgICAgQCBhdXhpbGlhcnkgY29udHJvbCByZWcKLQotCUAgdGVtcG9yYXJpbHkgbWFwIHJlc3VtZV90dXJuX29uX21tdSBpbnRvIHRoZSBwYWdlIHRhYmxlLAotCUAgb3RoZXJ3aXNlIHByZWZldGNoIGFib3J0IG9jY3VycyBhZnRlciBNTVUgaXMgdHVybmVkIG9uCi0JbW92CXIxLCByNwotCWJpYwlyMSwgcjEsICMweDAwZmYKLQliaWMJcjEsIHIxLCAjMHgzZjAwCi0JbGRyCXIyLCA9MHg1NDJlCi0KLQlhZHIJcjMsIHJlc3VtZV90dXJuX29uX21tdQotCW1vdglyMywgcjMsIGxzciAjMjAKLQlvcnIJcjQsIHIyLCByMywgbHNsICMyMAotCWxkcglyNSwgW3IxLCByMywgbHNsICMyXQotCXN0ciAgICAgcjQsIFtyMSwgcjMsIGxzbCAjMl0KLQotCUAgTWFwcGluZyBwYWdlIHRhYmxlIGFkZHJlc3MgaW4gdGhlIHBhZ2UgdGFibGUKLQltb3YJcjYsIHIxLCBsc3IgIzIwCi0Jb3JyCXI3LCByMiwgcjYsIGxzbCAjMjAKLQlsZHIJcjgsIFtyMSwgcjYsIGxzbCAjMl0KLQlzdHIJcjcsIFtyMSwgcjYsIGxzbCAjMl0KLQotCWxkcglyMiwgPXB4YTN4eF9yZXN1bWVfYWZ0ZXJfbW11CUAgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JYglyZXN1bWVfdHVybl9vbl9tbXUJCUAgY2FjaGUgYWxpZ24gZXhlY3V0aW9uCi0KLQkudGV4dAotcHhhM3h4X3Jlc3VtZV9hZnRlcl9tbXU6Ci0JLyogcmVzdG9yZSB0aGUgdGVtcG9yYXJ5IG1hcHBpbmcgKi8KLQlzdHIJcjUsIFtyMSwgcjMsIGxzbCAjMl0KLQlzdHIJcjgsIFtyMSwgcjYsIGxzbCAjMl0KLQliCXJlc3VtZV9hZnRlcl9tbXUKLQogI2VuZGlmIC8qIENPTkZJR19QWEEzeHggKi8KIAogI2lmZGVmIENPTkZJR19QWEEyN3gKQEAgLTE1OCwyOCArNTEsMjMgQEAKICAqIEZvcmNlcyBDUFUgaW50byBzbGVlcCBzdGF0ZS4KICAqCiAgKiByMCA9IHZhbHVlIGZvciBQV1JNT0RFIE0gZmllbGQgZm9yIGRlc2lyZWQgc2xlZXAgc3RhdGUKKyAqIHIxID0gdjpwIG9mZnNldAogICovCi0KIEVOVFJZKHB4YTI3eF9jcHVfc3VzcGVuZCkKIAogI2lmbmRlZiBDT05GSUdfSVdNTVhUCiAJbXJhCXIyLCByMywgYWNjMAogI2VuZGlmCiAJc3RtZmQJc3AhLCB7cjIgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JYmwJcHhhX2NwdV9zYXZlX2NwCi0KLQltb3YJcjUsIHIwCQkJCUAgc2F2ZSBzbGVlcCBtb2RlCi0JYmwJcHhhX2NwdV9zYXZlX3NwCi0KLQlAIGNsZWFuIGRhdGEgY2FjaGUKLQlibAl4c2NhbGVfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltb3YJcjQsIHIwCQkJCUAgc2F2ZSBzbGVlcCBtb2RlCisJbGRyCXIzLCA9cHhhX2NwdV9yZXN1bWUJCUAgcmVzdW1lIGZ1bmN0aW9uCisJYmwJY3B1X3N1c3BlbmQKIAogCUAgUHV0IHRoZSBwcm9jZXNzb3IgdG8gc2xlZXAKIAlAIChhbHNvIHdvcmthcm91bmQgZm9yIHNpZ2h0aW5nIDI4MDcxKQogCiAJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCi0JbW92CXIxLCByNQkJCQlAIHNsZWVwIG1vZGUKKwltb3YJcjEsIHI0CQkJCUAgc2xlZXAgbW9kZQogCiAJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQogCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMApAQCAtMjE2LDIxICsxMDQsMTYgQEAKICAqIEZvcmNlcyBDUFUgaW50byBzbGVlcCBzdGF0ZS4KICAqCiAgKiByMCA9IHZhbHVlIGZvciBQV1JNT0RFIE0gZmllbGQgZm9yIGRlc2lyZWQgc2xlZXAgc3RhdGUKKyAqIHIxID0gdjpwIG9mZnNldAogICovCiAKIEVOVFJZKHB4YTI1eF9jcHVfc3VzcGVuZCkKIAlzdG1mZAlzcCEsIHtyMiAtIHIxMiwgbHJ9CQlAIHNhdmUgcmVnaXN0ZXJzIG9uIHN0YWNrCi0KLQlibAlweGFfY3B1X3NhdmVfY3AKLQotCW1vdglyNSwgcjAJCQkJQCBzYXZlIHNsZWVwIG1vZGUKLQlibAlweGFfY3B1X3NhdmVfc3AKLQotCUAgY2xlYW4gZGF0YSBjYWNoZQotCWJsCXhzY2FsZV9mbHVzaF9rZXJuX2NhY2hlX2FsbAotCisJbW92CXI0LCByMAkJCQlAIHNhdmUgc2xlZXAgbW9kZQorCWxkcglyMywgPXB4YV9jcHVfcmVzdW1lCQlAIHJlc3VtZSBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAJQCBwcmVwYXJlIHZhbHVlIGZvciBzbGVlcCBtb2RlCi0JbW92CXIxLCByNQkJCQlAIHNsZWVwIG1vZGUKKwltb3YJcjEsIHI0CQkJCUAgc2xlZXAgbW9kZQogCiAJQCBwcmVwYXJlIHBvaW50ZXIgdG8gcGh5c2ljYWwgYWRkcmVzcyAwICh2aXJ0dWFsIG1hcHBpbmcgaW4gZ2VuZXJpYy5jKQogCW1vdglyMiwgI1VOQ0FDSEVEX1BIWVNfMApAQCAtMzE3LDUzICsyMDAsOSBAQAogICogcHhhX2NwdV9yZXN1bWUoKQogICoKICAqIGVudHJ5IHBvaW50IGZyb20gYm9vdGxvYWRlciBpbnRvIGtlcm5lbCBkdXJpbmcgcmVzdW1lCi0gKgotICogTm90ZTogWWVzLCBwYXJ0IG9mIHRoZSBmb2xsb3dpbmcgY29kZSBpcyBsb2NhdGVkIGludG8gdGhlIC5kYXRhIHNlY3Rpb24uCi0gKiAgICAgICBUaGlzIGlzIHRvIGFsbG93IHNsZWVwX3NhdmVfc3AgdG8gYmUgYWNjZXNzZWQgd2l0aCBhIHJlbGF0aXZlIGxvYWQKLSAqICAgICAgIHdoaWxlIHdlIGNhbid0IHJlbHkgb24gYW55IE1NVSB0cmFuc2xhdGlvbi4gIFdlIGNvdWxkIGhhdmUgcHV0Ci0gKiAgICAgICBzbGVlcF9zYXZlX3NwIGluIHRoZSAudGV4dCBzZWN0aW9uIGFzIHdlbGwsIGJ1dCBzb21lIHNldHVwcyBtaWdodAotICogICAgICAgaW5zaXN0IG9uIGl0IHRvIGJlIHRydWx5IHJlYWQtb25seS4KICAqLwotCi0JLmRhdGEKIAkuYWxpZ24gNQotRU5UUlkocHhhX2NwdV9yZXN1bWUpCi0JbW92CXIwLCAjUFNSX0lfQklUIHwgUFNSX0ZfQklUIHwgU1ZDX01PREUJQCBzZXQgU1ZDLCBpcnFzIG9mZgotCW1zcgljcHNyX2MsIHIwCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JbGRtZmQJcjAsIHtyMyAtIHI5LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgaW52YWxpZGF0ZSBJICYgRCBjYWNoZXMsIEJUQgotCi0JbWNyCXAxNCwgMCwgcjMsIGM2LCBjMCwgMAkJQCBjbG9jayBjb25maWd1cmF0aW9uLCB0dXJibyBtb2RlLgotCW1jcglwMTUsIDAsIHI0LCBjMTUsIGMxLCAwCQlAIENQIGFjY2VzcyByZWcKLQltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMAkJQCBQSUQKLQltY3IgCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAkJQCBkb21haW4gSUQKLQltY3IgCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAkJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKLQltY3IJcDE1LCAwLCByOCwgYzEsIGMxLCAwICAgICAgICAgICBAIGF1eGlsaWFyeSBjb250cm9sIHJlZwotCWIJcmVzdW1lX3R1cm5fb25fbW11CQlAIGNhY2hlIGFsaWduIGV4ZWN1dGlvbgotCi0JLmFsaWduIDUKLXJlc3VtZV90dXJuX29uX21tdToKLQltY3IgCXAxNSwgMCwgcjksIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgY2FjaGVzLCBldGMuCi0KLQlAIExldCB1cyBlbnN1cmUgd2UganVtcCB0byByZXN1bWVfYWZ0ZXJfbW11IG9ubHkgd2hlbiB0aGUgbWNyIGFib3ZlCi0JQCBhY3R1YWxseSB0b29rIGVmZmVjdC4gIFRoZXkgY2FsbCBpdCB0aGUgImNwd2FpdCIgb3BlcmF0aW9uLgotCW1yYwlwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgcXVldWUgYSBkZXBlbmRlbmN5IG9uIENQMTUKLQlzdWIJcGMsIHIyLCByMCwgbHNyICMzMgkJQCBqdW1wIHRvIHZpcnR1YWwgYWRkcgotCW5vcAotCW5vcAotCW5vcAotCi1zbGVlcF9zYXZlX3NwOgotCS53b3JkCTAJCQkJQCBwcmVzZXJ2ZSBzdGFjayBwaHlzIHB0ciBoZXJlCi0KLQkudGV4dAotcmVzdW1lX2FmdGVyX21tdToKK3B4YV9jcHVfcmVzdW1lOgogCWxkbWZkCXNwISwge3IyLCByM30KICNpZm5kZWYgQ09ORklHX0lXTU1YVAogCW1hcglhY2MwLCByMiwgcjMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EtYnQuYwppbmRleCBjMzFlNjAxLi5iOWIxZTVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLWJ0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS1idC5jCkBAIC04MSw4ICs4MSw2IEBACiAJCWdvdG8gZXJyX3Jma19hbGxvYzsKIAl9CiAKLQlyZmtpbGxfc2V0X2xlZF90cmlnZ2VyX25hbWUocmZrLCAidG9zYS1idCIpOwotCiAJcmMgPSByZmtpbGxfcmVnaXN0ZXIocmZrKTsKIAlpZiAocmMpCiAJCWdvdG8gZXJyX3Jma2lsbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3Rvc2EuYwppbmRleCBhZjE1MmU3Li5mMjU4MmVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC04NzUsNiArODc1LDExIEBACiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJnNoYXJwc2xfcm9tX2RhdGEsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB3bTk3MTJfZGV2aWNlID0geworCS5uYW1lCT0gIndtOTcxMi1jb2RlYyIsCisJLmlkCT0gLTEsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnRvc2FzY29vcF9kZXZpY2UsCiAJJnRvc2FzY29vcF9qY19kZXZpY2UsCkBAIC04ODUsNiArODkwLDcgQEAKIAkmdG9zYWxlZF9kZXZpY2UsCiAJJnRvc2FfYnRfZGV2aWNlLAogCSZzaGFycHNsX3JvbV9kZXZpY2UsCisJJndtOTcxMl9kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCB0b3NhX3Bvd2Vyb2ZmKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKaW5kZXggZjRiMDUzYi4uYjkyYWEzYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpAQCAtNjc2LDcgKzY3Niw3IEBACiBzdGF0aWMgdm9pZCB6ZXVzX3Bvd2VyX29mZih2b2lkKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKKwlweGEyN3hfY3B1X3N1c3BlbmQoUFdSTU9ERV9ERUVQU0xFRVAsIFBMQVRfUEhZU19PRkZTRVQgLSBQQUdFX09GRlNFVCk7CiB9CiAjZWxzZQogI2RlZmluZSB6ZXVzX3Bvd2VyX29mZiAgIE5VTEwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvS2NvbmZpZwppbmRleCBiNDU3NWFlLi43Y2ExMzhhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9LY29uZmlnCkBAIC0yLDUyICsyLDU2IEBACiAJZGVwZW5kcyBvbiBBUkNIX1JFQUxWSUVXCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX0VCCi0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9FQiBwbGF0Zm9ybSIKKwlib29sICJTdXBwb3J0IFJlYWxWaWV3KFIpIEVtdWxhdGlvbiBCYXNlYm9hcmQiCiAJc2VsZWN0IEFSTV9HSUMKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgRW11bGF0aW9uIEJhc2Vib2FyZCBwbGF0Zm9ybS4KKwkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBSZWFsVmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkCisJICBwbGF0Zm9ybS4KIAogY29uZmlnIFJFQUxWSUVXX0VCX0E5TVAKLQlib29sICJTdXBwb3J0IE11bHRpY29yZSBDb3J0ZXgtQTkiCisJYm9vbCAiU3VwcG9ydCBNdWx0aWNvcmUgQ29ydGV4LUE5IFRpbGUiCiAJZGVwZW5kcyBvbiBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV9WNwogCWhlbHAKLQkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgQ29ydGV4LUE5TVBDb3JlIHRpbGUgb24gdGhlIFJlYWx2aWV3IHBsYXRmb3JtLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBDb3J0ZXgtQTlNUENvcmUgdGlsZSBmaXR0ZWQgdG8gdGhlCisJICBSZWFsdmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLgogCiBjb25maWcgUkVBTFZJRVdfRUJfQVJNMTFNUAotCWJvb2wgIlN1cHBvcnQgQVJNMTFNUENvcmUgdGlsZSIKKwlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFRpbGUiCiAJZGVwZW5kcyBvbiBNQUNIX1JFQUxWSUVXX0VCCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUkNIX0hBU19CQVJSSUVSUyBpZiBTTVAKIAloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIHRpbGUgb24gdGhlIFJlYWx2aWV3IHBsYXRmb3JtLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUk0xMU1QQ29yZSB0aWxlIGZpdHRlZCB0byB0aGUgUmVhbHZpZXcoUikKKwkgIEVtdWxhdGlvbiBCYXNlYm9hcmQgcGxhdGZvcm0uCiAKIGNvbmZpZyBSRUFMVklFV19FQl9BUk0xMU1QX1JFVkIKLQlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFJldkIgdGlsZSIKKwlib29sICJTdXBwb3J0IEFSTTExTVBDb3JlIFJldkIgVGlsZSIKIAlkZXBlbmRzIG9uIFJFQUxWSUVXX0VCX0FSTTExTVAKIAloZWxwCi0JICBFbmFibGUgc3VwcG9ydCBmb3IgdGhlIEFSTTExTVBDb3JlIFJldkIgdGlsZSBvbiB0aGUgUmVhbHZpZXcKLQkgIHBsYXRmb3JtLiBTaW5jZSB0aGVyZSBhcmUgZGV2aWNlIGFkZHJlc3MgZGlmZmVyZW5jZXMsIGEKLQkgIGtlcm5lbCBidWlsdCB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgaXMgbm90IGNvbXBhdGlibGUgd2l0aAotCSAgb3RoZXIgcmV2aXNpb25zIG9mIHRoZSBBUk0xMU1QQ29yZSB0aWxlLgorCSAgRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBBUk0xMU1QQ29yZSBSZXZpc2lvbiBCIHRpbGUgb24gdGhlCisJICBSZWFsdmlldyhSKSBFbXVsYXRpb24gQmFzZWJvYXJkIHBsYXRmb3JtLiBTaW5jZSB0aGVyZSBhcmUgZGV2aWNlCisJICBhZGRyZXNzIGRpZmZlcmVuY2VzLCBhIGtlcm5lbCBidWlsdCB3aXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQgaXMKKwkgIG5vdCBjb21wYXRpYmxlIHdpdGggb3RoZXIgcmV2aXNpb25zIG9mIHRoZSBBUk0xMU1QQ29yZSB0aWxlLgogCiBjb25maWcgTUFDSF9SRUFMVklFV19QQjExTVAKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCMTFNUENvcmUgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgZm9yIEFSTTExTVBDb3JlIgogCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAlzZWxlY3QgQVJDSF9IQVNfQkFSUklFUlMgaWYgU01QCiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IE1QQ29yZSBQbGF0Zm9ybSBCYXNlYm9hcmQuCi0JICBQQjExTVBDb3JlIGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBBUk0xMU1QQ29yZSBhbmQgaGFzCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgdGhlIEFSTTExTVBDb3JlLiAgVGhpcyBwbGF0Zm9ybSBoYXMgYW4gb24tYm9hcmQgQVJNMTFNUENvcmUgYW5kIGhhcwogCSAgc3VwcG9ydCBmb3IgUENJLUUgYW5kIENvbXBhY3QgRmxhc2guCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCMTE3NgotCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcvUEIxMTc2IHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBBUk0xMTc2SlpGLVMiCiAJc2VsZWN0IENQVV9WNgogCXNlbGVjdCBBUk1fR0lDCiAJaGVscAotCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3IEFSTTExNzYgUGxhdGZvcm0gQmFzZWJvYXJkLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IKKwkgIEFSTTExNzZKWkYtUy4KIAogY29uZmlnIFJFQUxWSUVXX1BCMTE3Nl9TRUNVUkVfRkxBU0gKIAlib29sICJBbGxvdyBhY2Nlc3MgdG8gdGhlIHNlY3VyZSBmbGFzaCBtZW1vcnkgYmxvY2siCkBAIC01OSwyMyArNjMsMjQgQEAKIAkgIGJsb2NrICg2NE1CIEAgMHgzYzAwMDAwMCkgaXMgcmVxdWlyZWQuCiAKIGNvbmZpZyBNQUNIX1JFQUxWSUVXX1BCQTgKLQlib29sICJTdXBwb3J0IFJlYWxWaWV3L1BCLUE4IHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgUmVhbFZpZXcoUikgUGxhdGZvcm0gQmFzZWJvYXJkIGZvciBDb3J0ZXgodG0pLUE4IHBsYXRmb3JtIgogCXNlbGVjdCBDUFVfVjcKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgQ29ydGV4LUE4IFBsYXRmb3JtIEJhc2Vib2FyZC4KLQkgIFBCLUE4IGlzIGEgcGxhdGZvcm0gd2l0aCBhbiBvbi1ib2FyZCBDb3J0ZXgtQTggYW5kIGhhcyBzdXBwb3J0IGZvcgotCSAgUENJLUUgYW5kIENvbXBhY3QgRmxhc2guCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgUGxhdGZvcm0gQmFzZWJvYXJkIGZvcgorCSAgQ29ydGV4KHRtKS1BOC4gIFRoaXMgcGxhdGZvcm0gaGFzIGFuIG9uLWJvYXJkIENvcnRleC1BOCBhbmQgaGFzCisJICBzdXBwb3J0IGZvciBQQ0ktRSBhbmQgQ29tcGFjdCBGbGFzaC4KIAogY29uZmlnIE1BQ0hfUkVBTFZJRVdfUEJYCi0JYm9vbCAiU3VwcG9ydCBSZWFsVmlldy9QQlggcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBSZWFsVmlldyhSKSBQbGF0Zm9ybSBCYXNlYm9hcmQgRXhwbG9yZSIKIAlzZWxlY3QgQVJNX0dJQwogCXNlbGVjdCBIQVZFX1BBVEFfUExBVEZPUk0KIAlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFIGlmIENQVV9WNyAmJiAhUkVBTFZJRVdfSElHSF9QSFlTX09GRlNFVAogCXNlbGVjdCBaT05FX0RNQSBpZiBTUEFSU0VNRU0KIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgUmVhbFZpZXcgUEJYIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFJlYWxWaWV3KFIpIFBsYXRmb3JtIEJhc2Vib2FyZAorCSAgRXhwbG9yZS4KIAogY29uZmlnIFJFQUxWSUVXX0hJR0hfUEhZU19PRkZTRVQKIAlib29sICJIaWdoIHBoeXNpY2FsIGJhc2UgYWRkcmVzcyBmb3IgdGhlIFJlYWxWaWV3IHBsYXRmb3JtIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9wbGF0c21wLmMgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwppbmRleCBhMjJiZjY3Li42OTU5ZDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYworKysgYi9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L3BsYXRzbXAuYwpAQCAtNDEsNyArNDEsNyBAQAogICogb2JzZXJ2ZXJzLCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGV5J3JlIHRha2luZyBwYXJ0IGluIGNvaGVyZW5jeQogICogb3Igbm90LiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yIHRoZSBob3RwbHVnIGNvZGUgdG8gd29yayByZWxpYWJseS4KICAqLwotc3RhdGljIHZvaWQgd3JpdGVfcGVuX3JlbGVhc2UoaW50IHZhbCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQogewogCXBlbl9yZWxlYXNlID0gdmFsOwogCXNtcF93bWIoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKaW5kZXggYTBjYjI1OC4uNTA4MjVhMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcKQEAgLTk5LDYgKzk5LDcgQEAKIAlzZWxlY3QgUE9XRVJfU1VQUExZCiAJc2VsZWN0IE1BQ0hfTkVPMTk3MwogCXNlbGVjdCBTM0MyNDEwX1BXTQorCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCiAJaGVscAogCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgT3Blbm1va28gR1RBMDIgLyBGcmVlcnVubmVyIEdTTSBQaG9uZQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmgKaW5kZXggOTUzMzMxZC4uM2E1NmEyMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2luY2x1ZGUvbWFjaC9ndGEwMi5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pbmNsdWRlL21hY2gvZ3RhMDIuaApAQCAtNDQsMTkgKzQ0LDE5IEBACiAjZGVmaW5lIEdUQTAydjNfR1BJT19uVVNCX0ZMVAlTM0MyNDEwX0dQRygxMCkJLyogdjMgKyB2NCBvbmx5ICovCiAjZGVmaW5lIEdUQTAydjNfR1BJT19uR1NNX09DCVMzQzI0MTBfR1BHKDExKQkvKiB2MyArIHY0IG9ubHkgKi8KIAotI2RlZmluZSBHVEEwMl9HUElPX0FNUF9TSFVUCVMzQzI0NDBfR1BKMQkvKiB2MiArIHYzICsgdjQgb25seSAqLwotI2RlZmluZSBHVEEwMnYxX0dQSU9fV0xBTl9HUElPMTAJUzNDMjQ0MF9HUEoyCi0jZGVmaW5lIEdUQTAyX0dQSU9fSFBfSU4JUzNDMjQ0MF9HUEoyCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fSU5UMAkJUzNDMjQ0MF9HUEozCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fbkdTTV9FTglTM0MyNDQwX0dQSjQKLSNkZWZpbmUgR1RBMDJfR1BJT18zRF9SRVNFVAlTM0MyNDQwX0dQSjUKLSNkZWZpbmUgR1RBMDJfR1BJT19uRExfR1NNCVMzQzI0NDBfR1BKNgkvKiB2NCArIHY1IG9ubHkgKi8KLSNkZWZpbmUgR1RBMDJfR1BJT19XTEFOX0dQSU8wCVMzQzI0NDBfR1BKNwotI2RlZmluZSBHVEEwMnYxX0dQSU9fQkFUX0lECVMzQzI0NDBfR1BKOAotI2RlZmluZSBHVEEwMl9HUElPX0tFRVBBQ1QJUzNDMjQ0MF9HUEo4Ci0jZGVmaW5lIEdUQTAydjFfR1BJT19IUF9JTglTM0MyNDQwX0dQSjEwCi0jZGVmaW5lIEdUQTAyX0NISVBfUFdECQlTM0MyNDQwX0dQSjExCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCi0jZGVmaW5lIEdUQTAyX0dQSU9fbldMQU5fUkVTRVQJUzNDMjQ0MF9HUEoxMgkvKiB2MiArIHYzICsgdjQgb25seSAqLworI2RlZmluZSBHVEEwMl9HUElPX0FNUF9TSFVUCVMzQzI0MTBfR1BKKDEpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAydjFfR1BJT19XTEFOX0dQSU8xMAlTM0MyNDEwX0dQSigyKQorI2RlZmluZSBHVEEwMl9HUElPX0hQX0lOCVMzQzI0MTBfR1BKKDIpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAyX0dQSU9fSU5UMAkJUzNDMjQxMF9HUEooMykJLyogdjIgKyB2MyArIHY0IG9ubHkgKi8KKyNkZWZpbmUgR1RBMDJfR1BJT19uR1NNX0VOCVMzQzI0MTBfR1BKKDQpCisjZGVmaW5lIEdUQTAyX0dQSU9fM0RfUkVTRVQJUzNDMjQxMF9HUEooNSkKKyNkZWZpbmUgR1RBMDJfR1BJT19uRExfR1NNCVMzQzI0MTBfR1BKKDYpCS8qIHY0ICsgdjUgb25seSAqLworI2RlZmluZSBHVEEwMl9HUElPX1dMQU5fR1BJTzAJUzNDMjQxMF9HUEooNykKKyNkZWZpbmUgR1RBMDJ2MV9HUElPX0JBVF9JRAlTM0MyNDEwX0dQSig4KQorI2RlZmluZSBHVEEwMl9HUElPX0tFRVBBQ1QJUzNDMjQxMF9HUEooOCkKKyNkZWZpbmUgR1RBMDJ2MV9HUElPX0hQX0lOCVMzQzI0MTBfR1BKKDEwKQorI2RlZmluZSBHVEEwMl9DSElQX1BXRAkJUzNDMjQxMF9HUEooMTEpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCisjZGVmaW5lIEdUQTAyX0dQSU9fbldMQU5fUkVTRVQJUzNDMjQxMF9HUEooMTIpCS8qIHYyICsgdjMgKyB2NCBvbmx5ICovCiAKICNkZWZpbmUgR1RBMDJfSVJRX0dTRU5TT1JfMQlJUlFfRUlOVDAKICNkZWZpbmUgR1RBMDJfSVJRX01PREVNCQlJUlFfRUlOVDEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKaW5kZXggZGQzNzgyMC4uZmRmYzRkNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKQEAgLTE1MSw2ICsxNTEsMTIgQEAKIAkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKIAkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfSUlDLAogCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0M2NDEwX0NMS0NPTl9QQ0xLX0kyQzEsCisJfSwgewogCQkubmFtZQkJPSAiaWlzIiwKIAkJLmlkCQk9IDAsCiAJCS5wYXJlbnQJCT0gJmNsa19wLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCmluZGV4IDEzNWRiMWIuLmMzNTU4NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKQEAgLTY5MCwxMiArNjkwLDEyIEBACiAKIAlyZWdwdHIgPSByZWdzICsgUEwwODBfQ3hfQkFTRSgwKTsKIAotCWZvciAoY2ggPSAwOyBjaCA8IDg7IGNoKyssIGNobm8rKywgY2hwdHIrKykgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgY2hubywgcmVncHRyKTsKKwlmb3IgKGNoID0gMDsgY2ggPCA4OyBjaCsrLCBjaHB0cisrKSB7CisJCXByX2RlYnVnKCIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCisJCQkgX19mdW5jX18sIGNobm8gKyBjaCwgcmVncHRyKTsKIAogCQljaHB0ci0+Yml0ID0gMSA8PCBjaDsKLQkJY2hwdHItPm51bWJlciA9IGNobm87CisJCWNocHRyLT5udW1iZXIgPSBjaG5vICsgY2g7CiAJCWNocHRyLT5kbWFjID0gZG1hYzsKIAkJY2hwdHItPnJlZ3MgPSByZWdwdHI7CiAJCXJlZ3B0ciArPSBQTDA4MF9DeF9TVFJJREU7CkBAIC03MDQsNyArNzA0LDggQEAKIAkvKiBmb3IgdGhlIG1vbWVudCwgcGVybWFuZW50bHkgZW5hYmxlIHRoZSBjb250cm9sbGVyICovCiAJd3JpdGVsKFBMMDgwX0NPTkZJR19FTkFCTEUsIHJlZ3MgKyBQTDA4MF9DT05GSUcpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiUEwwODA6IElSUSAlZCwgYXQgJXBcbiIsIGlycSwgcmVncyk7CisJcHJpbnRrKEtFUk5fSU5GTyAiUEwwODA6IElSUSAlZCwgYXQgJXAsIGNoYW5uZWxzICVkLi4lZFxuIiwKKwkgICAgICAgaXJxLCByZWdzLCBjaG5vLCBjaG5vKzgpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jCmluZGV4IGZkOTlhODIuLjkyYjA5MDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2dwaW9saWIuYwpAQCAtNzIsNyArNzIsNyBAQAogCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAogfTsKIAotaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BtKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKK3N0YXRpYyBpbnQgczNjNjR4eF9ncGlvMmludF9ncG0oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQogewogCXJldHVybiBwaW4gPCA1ID8gSVJRX0VJTlQoMjMpICsgcGluIDogLUVOWElPOwogfQpAQCAtMTM4LDcgKzEzOCw3IEBACiAJfSwKIH07CiAKLWludCBzM2M2NHh4X2dwaW8yaW50X2dwbChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCitzdGF0aWMgaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BsKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKIHsKIAlyZXR1cm4gcGluID49IDggPyBJUlFfRUlOVCgxNikgKyBwaW4gLSA4IDogLUVOWElPOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMKaW5kZXggZTg1MTkyYS4uYTgwYTMxNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9maXhlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKICNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgpAQCAtMzUxLDcgKzM1Miw3IEBACiAvKiBWRERfVUhfTU1DLCBMRE81IG9uIEo1ICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmRkdWhfbW1jID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9VSC9QVkREX01NQyIsCisJCS5uYW1lID0gIlBWRERfVUgrUFZERF9NTUMiLAogCQkuYWx3YXlzX29uID0gMSwKIAl9LAogfTsKQEAgLTQxNyw3ICs0MTgsNyBAQAogLyogUzNDNjR4eCBpbnRlcm5hbCBsb2dpYyAmIFBMTCAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjMV9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9JTlQvUFZERF9QTEwiLAorCQkubmFtZSA9ICJQVkREX0lOVCtQVkREX1BMTCIsCiAJCS5taW5fdVYgPSAxMjAwMDAwLAogCQkubWF4X3VWID0gMTIwMDAwMCwKIAkJLmFsd2F5c19vbiA9IDEsCkBAIC00NTIsNyArNDUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjNF9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9ISS9QVkREX0VYVC9QVkREX1NZUy9QVkNDTTJNVFYiLAorCQkubmFtZSA9ICJQVkREX0hJK1BWRERfRVhUK1BWRERfU1lTK1BWQ0NNMk1UViIsCiAJCS5taW5fdVYgPSAzMDAwMDAwLAogCQkubWF4X3VWID0gMzAwMDAwMCwKIAkJLmFsd2F5c19vbiA9IDEsCkBAIC00NjQsNyArNDY1LDcgQEAKIC8qIE9UR2kvMTE5MC1FVjEgSFBWREQgJiBBVkREICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204MzUwX2xkbzRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfT1RHSS9IUFZERC9BVkREIiwKKwkJLm5hbWUgPSAiUFZERF9PVEdJK0hQVkREK0FWREQiLAogCQkubWluX3VWID0gMTIwMDAwMCwKIAkJLm1heF91ViA9IDEyMDAwMDAsCiAJCS5hcHBseV91ViA9IDEsCkBAIC01NTIsNyArNTUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtMTE5Ml9kY2RjMyA9IHsKIAkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfTUVNL1BWRERfR1BTIiwKKwkJLm5hbWUgPSAiUFZERF9NRU0rUFZERF9HUFMiLAogCQkuYWx3YXlzX29uID0gMSwKIAl9LAogfTsKQEAgLTU2Myw3ICs1NjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd20xMTkyX2xkbzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJQVkREX0xDRC9QVkREX0VYVCIsCisJCS5uYW1lID0gIlBWRERfTENEK1BWRERfRVhUIiwKIAkJLmFsd2F5c19vbiA9IDEsCiAJfSwKIAkuY29uc3VtZXJfc3VwcGxpZXMgPSB3bTExOTJfbGRvMV9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAta2V5cGFkLmMKaW5kZXggZjhlZDBkMi4uMWQ0ZDBlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWtleXBhZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1rZXlwYWQuYwpAQCAtMTcsNyArMTcsNyBAQAogdm9pZCBzYW1zdW5nX2tleXBhZF9jZmdfZ3Bpbyh1bnNpZ25lZCBpbnQgcm93cywgdW5zaWduZWQgaW50IGNvbHMpCiB7CiAJLyogU2V0IGFsbCB0aGUgbmVjZXNzYXJ5IEdQSyBwaW5zIHRvIHNwZWNpYWwtZnVuY3Rpb24gMzogS1BfUk9XW3hdICovCi0JczNjX2dwaW9fY2ZncmFuZ2Vfbm9wdWxsKFMzQzY0WFhfR1BLKDgpLCA4ICsgcm93cywgUzNDX0dQSU9fU0ZOKDMpKTsKKwlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzNDNjRYWF9HUEsoOCksIHJvd3MsIFMzQ19HUElPX1NGTigzKSk7CiAKIAkvKiBTZXQgYWxsIHRoZSBuZWNlc3NhcnkgR1BMIHBpbnMgdG8gc3BlY2lhbC1mdW5jdGlvbiAzOiBLUF9DT0xbeF0gKi8KIAlzM2NfZ3Bpb19jZmdyYW5nZV9ub3B1bGwoUzNDNjRYWF9HUEwoMCksIGNvbHMsIFMzQ19HUElPX1NGTigzKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCmluZGV4IDFhOTQyMDMuLmYzNDRhMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCkBAIC01Niw3ICs1Niw3IEBACiAJZWxzZQogCQljdHJsMyA9IChTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwxIHwgUzNDX1NESENJX0NUUkwzX0ZDU0VMMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogQ1RSTCAyPSUwOHgsIDM9JTA4eFxuIiwgX19mdW5jX18sIGN0cmwyLCBjdHJsMyk7CisJcHJfZGVidWcoIiVzOiBDVFJMIDI9JTA4eCwgMz0lMDh4XG4iLCBfX2Z1bmNfXywgY3RybDIsIGN0cmwzKTsKIAl3cml0ZWwoY3RybDIsIHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOwogCXdyaXRlbChjdHJsMywgciArIFMzQ19TREhDSV9DT05UUk9MMyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCmluZGV4IGIyZWY0NDMuLmFmZTVhNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCkBAIC0zMiwyNSArMzIsMTMgQEAKIAkgKiBjb2RlIGFmdGVyIHJlc3VtZS4KIAkgKgogCSAqIGVudHJ5OgotCSAqCXIwID0gcG9pbnRlciB0byB0aGUgc2F2ZSBibG9jaworCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KLQotCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKLQltcmMJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECi0JbXJjCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0JbXJjCXAxNSwgMCwgcjcsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UxCi0JbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMglAIFRyYW5zbGF0aW9uIFRhYmxlIENvbnRyb2wKLQltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAwCUAgQ29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKLQltcmMJcDE1LCAwLCByMTEsIGMxLCBjMCwgMglAIENvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbHMKLQotCXN0bWlhCXIwLCB7IHI0IC0gcjEzIH0JQCBTYXZlIENQIHJlZ2lzdGVycyBhbmQgU1AKLQotCUBAIHNhdmUgb3VyIHN0YXRlIHRvIHJhbQotCWJsCXMzY19wbV9jYl9mbHVzaGNhY2hlCisJbGRyCXIzLCA9cmVzdW1lX3dpdGhfbW11CisJYmwJY3B1X3N1c3BlbmQKIAogCUBAIGNhbGwgZmluYWwgc3VzcGVuZCBjb2RlCiAJbGRyCXIwLCA9cG1fY3B1X3NsZWVwCkBAIC02MSwxOCArNDksNiBAQAogcmVzdW1lX3dpdGhfbW11OgogCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQlAIHJldHVybiwgZnJvbSBzcCBmcm9tIHMzY19jcHVfc2F2ZQogCi0JLmRhdGEKLQotCS8qIHRoZSBuZXh0IGJpdCBpcyBjb2RlLCBidXQgaXQgcmVxdWlyZXMgZWFzeSBhY2Nlc3MgdG8gdGhlCi0JICogczNjX3NsZWVwX3NhdmVfcGh5cyBkYXRhIGJlZm9yZSB0aGUgTU1VIGlzIHN3aXRjaGVkIG9uLCBzbwotCSAqIHdlIHN0b3JlIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLmRhdGEgd2hlcmUKLQkgKiB0aGUgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gdG8gKHRoZSAudGV4dCBzZWdtZW50IGlzIFJPKS4KLQkqLwotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQogCS8qIFNsZWVwIG1hZ2ljLCB0aGUgd29yZCBiZWZvcmUgdGhlIHJlc3VtZSBlbnRyeSBwb2ludCBzbyB0aGF0IHRoZQogCSAqIGJvb3Rsb2FkZXIgY2FuIGNoZWNrIGZvciBhIHJlc3VtZWFibGUgaW1hZ2UuICovCiAKQEAgLTExMCwzNSArODYsNCBAQAogCW9ycglyMCwgcjAsICMxIDw8IDE1CQkJQCBHUE4xNQogCXN0cglyMCwgWyByMywgI1MzQzY0WFhfR1BOREFUIF0KICNlbmRpZgotCi0JLyogX192Nl9zZXR1cCBmcm9tIGFyY2gvYXJtL21tL3Byb2MtdjYuUywgZW5zdXJlIHRoYXQgdGhlIGNhY2hlcwotCSAqIGFyZSB0aG9yb3VnaGx5IGNsZWFuZWQganVzdCBpbiBjYXNlIHRoZSBib290bG9hZGVyIGRpZG4ndCBkbyBpdAotCSAqIGZvciB1cy4gKi8KLQltb3YJcjAsICMwCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKLQltY3IJcDE1LCAwLCByMCwgYzcsIGMxNSwgMAkJQCBjbGVhbitpbnZhbGlkYXRlIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gd3JpdGUgYnVmZmVyCi0JQEBtY3IJcDE1LCAwLCByMCwgYzgsIGM3LCAwCQlAIGludmFsaWRhdGUgSSArIEQgVExCcwotCUBAbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBJbnZhbGlkYXRlIEkgKyBEIGNhY2hlcwotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCi0JbGRtaWEJcjAsIHsgcjQgLSByMTMgfQotCi0JbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAotCW1jcglwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTAKLQltY3IJcDE1LCAwLCByNywgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAyCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1jcglwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKLQotCW1vdglyMCwgIzAJCQlAIHJlc3RvcmUgY29wcm8gYWNjZXNzIGNvbnRyb2xzCi0JbWNyCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2xzCi0JbWNyIAlwMTUsIDAsIHIwLCBjNywgYzUsIDQKLQotCWxkcglyMiwgPXJlc3VtZV93aXRoX21tdQotCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDAJCS8qIHR1cm4gbW11IGJhY2sgb24gKi8KLQlub3AKLQltb3YJcGMsIHIyCQkJCS8qIGp1bXAgYmFjayAqLwotCi0JLmVuZAorCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvbWFwLmgKaW5kZXggMjAzZGQ1YS4uMDU4ZGFiNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0xLDYgKzEsNiBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaAogICoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KICAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLwogICoKICAqIFM1UDY0NDIgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiw1NiArMTYsNjEgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0NDJfUEFfQ0hJUElECisjZGVmaW5lIFM1UDY0NDJfUEFfU0RSQU0JMHgyMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVA2NDQyX1BBX0kyUzAJCTB4QzBCMDAwMDAKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JMlMxCQkweEYyMjAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9DSElQSUQJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMAkJKDB4RTQwMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJKDB4RTQxMDAwMDApCi0jZGVmaW5lIFM1UDY0NDJfUEFfVklDMgkJKDB4RTQyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCTB4RTAxMDAwMDAKIAotI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCSgweEU3MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UDY0NDJfUEFfU1JPTUMKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9HUElPCQkweEUwMjAwMDAwCisKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0NDJfUEFfVklDMQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVA2NDQyX1BBX1ZJQzIJCTB4RTQyMDAwMDAKKworI2RlZmluZSBTNVA2NDQyX1BBX1NST01DCTB4RTcwMDAwMDAKIAogI2RlZmluZSBTNVA2NDQyX1BBX01ETUEJCTB4RTgwMDAwMDAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9QRE1BCQkweEU5MDAwMDAwCiAKLSNkZWZpbmUgUzVQNjQ0Ml9QQV9USU1FUgkoMHhFQTAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NDQyX1BBX1RJTUVSCisjZGVmaW5lIFM1UDY0NDJfUEFfVElNRVIJMHhFQTAwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIgICAJKDB4RUExMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTVElNRVIJMHhFQTEwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJKDB4RUEyMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfV0FUQ0hET0cJMHhFQTIwMDAwMAogCi0jZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisjZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJMHhFQzAwMDAwMAogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UDY0NDJfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQNjQ0Ml9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UDY0NDJfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2Ci0KLSNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLQotI2RlZmluZSBTNVA2NDQyX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UDY0NDJfUEFfU0RSQU0KKyNkZWZpbmUgUzVQNjQ0Ml9QQV9JSUMwCQkweEVDMTAwMDAwCiAKICNkZWZpbmUgUzVQNjQ0Ml9QQV9TUEkJCTB4RUMzMDAwMDAKIAotLyogSTJTICovCi0jZGVmaW5lIFM1UDY0NDJfUEFfSTJTMAkJMHhDMEIwMDAwMAotI2RlZmluZSBTNVA2NDQyX1BBX0kyUzEJCTB4RjIyMDAwMDAKLQotLyogUENNICovCiAjZGVmaW5lIFM1UDY0NDJfUEFfUENNMAkJMHhGMjQwMDAwMAogI2RlZmluZSBTNVA2NDQyX1BBX1BDTTEJCTB4RjI1MDAwMDAKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLworCiAjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDJfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NDQyX1BBX1dBVENIRE9HCisKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJUzVQNjQ0Ml9QQV9DSElQSUQKKyNkZWZpbmUgUzVQX1BBX1NEUkFNCQlTNVA2NDQyX1BBX1NEUkFNCisjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjQ0Ml9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UDY0NDJfUEFfVElNRVIKKworLyogVUFSVCAqLworCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJUzVQX1BBX1VBUlQoMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQxCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCVM1UF9QQV9VQVJUKDIpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgogCiAjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaAppbmRleCA1NDg2YzhmLi5hZGI1ZjI5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBTNVA2NDQwX0dQSU9fQV9OUgkoNikKICNkZWZpbmUgUzVQNjQ0MF9HUElPX0JfTlIJKDcpCiAjZGVmaW5lIFM1UDY0NDBfR1BJT19DX05SCSg4KQotI2RlZmluZSBTNVA2NDQwX0dQSU9fRl9OUgkoMikKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX0ZfTlIJKDE2KQogI2RlZmluZSBTNVA2NDQwX0dQSU9fR19OUgkoNykKICNkZWZpbmUgUzVQNjQ0MF9HUElPX0hfTlIJKDEwKQogI2RlZmluZSBTNVA2NDQwX0dQSU9fSV9OUgkoMTYpCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIFM1UDY0NTBfR1BJT19CX05SCSg3KQogI2RlZmluZSBTNVA2NDUwX0dQSU9fQ19OUgkoOCkKICNkZWZpbmUgUzVQNjQ1MF9HUElPX0RfTlIJKDgpCi0jZGVmaW5lIFM1UDY0NTBfR1BJT19GX05SCSgyKQorI2RlZmluZSBTNVA2NDUwX0dQSU9fRl9OUgkoMTYpCiAjZGVmaW5lIFM1UDY0NTBfR1BJT19HX05SCSgxNCkKICNkZWZpbmUgUzVQNjQ1MF9HUElPX0hfTlIJKDEwKQogI2RlZmluZSBTNVA2NDUwX0dQSU9fSV9OUgkoMTYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NHgwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCBhOTM2NWU1Li45NWM5MTI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjR4MC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0eDAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbQogICoKICAqIFM1UDY0WDAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCkBAIC0xNiwzMCArMTYsNjMgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9TRFJBTQkoMHgyMDAwMDAwMCkKKyNkZWZpbmUgUzVQNjRYMF9QQV9TRFJBTQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCisjZGVmaW5lIFM1UDY0WDBfUEFfQ0hJUElECTB4RTAwMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX1NZU0NPTgkweEUwMTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9HUElPCQkweEUwMzA4MDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9WSUMwCQkweEU0MDAwMDAwCisjZGVmaW5lIFM1UDY0WDBfUEFfVklDMQkJMHhFNDEwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfU1JPTUMJMHhFNzAwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfUERNQQkJMHhFOTAwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfVElNRVIJMHhFQTAwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1JUQwkJMHhFQTEwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1dEVAkJMHhFQTIwMDAwMAorCisjZGVmaW5lIFM1UDY0NDBfUEFfSUlDMAkJMHhFQzEwNDAwMAorI2RlZmluZSBTNVA2NDQwX1BBX0lJQzEJCTB4RUMyMEYwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMwCQkweEVDMTAwMDAwCisjZGVmaW5lIFM1UDY0NTBfUEFfSUlDMQkJMHhFQzIwMDAwMAorCisjZGVmaW5lIFM1UDY0WDBfUEFfU1BJMAkJMHhFQzQwMDAwMAorI2RlZmluZSBTNVA2NFgwX1BBX1NQSTEJCTB4RUM1MDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0hTT1RHCTB4RUQxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0hTTU1DKHgpCSgweEVEODAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKworI2RlZmluZSBTNVA2NFgwX1BBX0kyUwkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVA2NDUwX1BBX0kyUzEJCTB4RjI4MDAwMDAKKyNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMyCQkweEYyOTAwMDAwCisKKyNkZWZpbmUgUzVQNjRYMF9QQV9QQ00JCTB4RjIxMDAwMDAKKworI2RlZmluZSBTNVA2NFgwX1BBX0FEQwkJMHhGMzAwMDAwMAorCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KKworI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTNVA2NFgwX1BBX0hTTU1DKDApCisjZGVmaW5lIFMzQ19QQV9IU01NQzEJCVM1UDY0WDBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJUzVQNjRYMF9QQV9IU01NQygyKQorI2RlZmluZSBTM0NfUEFfSUlDCQlTNVA2NDQwX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX0lJQzEJCVM1UDY0NDBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfUlRDCQlTNVA2NFgwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfV0RUCQlTNVA2NFgwX1BBX1dEVAorCiAjZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UDY0WDBfUEFfQ0hJUElECi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9TWVNDT04JKDB4RTAxMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UDY0WDBfUEFfU1lTQ09OCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9HUElPCQkoMHhFMDMwODAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQotI2RlZmluZSBTNVA2NFgwX1BBX1ZJQzEJCSgweEU0MTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfU1JPTUMJKDB4RTcwMDAwMDApCiAjZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQNjRYMF9QQV9TUk9NQwotCi0jZGVmaW5lIFM1UDY0WDBfUEFfUERNQQkJKDB4RTkwMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9USU1FUgkoMHhFQTAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJUzVQNjRYMF9QQV9TWVNDT04KICNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVA2NFgwX1BBX1RJTUVSCiAKLSNkZWZpbmUgUzVQNjRYMF9QQV9SVEMJCSgweEVBMTAwMDAwKQorI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQNjRYMF9QQV9BREMKIAotI2RlZmluZSBTNVA2NFgwX1BBX1dEVAkJKDB4RUEyMDAwMDApCisvKiBVQVJUICovCiAKICNkZWZpbmUgUzVQNjQ0MF9QQV9VQVJUKHgpCSgweEVDMDAwMDAwICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCiAjZGVmaW5lIFM1UDY0NTBfUEFfVUFSVCh4KQkoKHggPCA1KSA/ICgweEVDODAwMDAwICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpIDogKDB4RUMwMDAwMDApKQpAQCAtNTMsMzYgKzg2LDQgQEAKIAogI2RlZmluZSBTNVBfU1pfVUFSVAkJU1pfMjU2CiAKLSNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMwCQkoMHhFQzEwNDAwMCkKLSNkZWZpbmUgUzVQNjQ0MF9QQV9JSUMxCQkoMHhFQzIwRjAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMwCQkoMHhFQzEwMDAwMCkKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JSUMxCQkoMHhFQzIwMDAwMCkKLQotI2RlZmluZSBTNVA2NFgwX1BBX1NQSTAJCSgweEVDNDAwMDAwKQotI2RlZmluZSBTNVA2NFgwX1BBX1NQSTEJCSgweEVDNTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfSFNPVEcJKDB4RUQxMDAwMDApCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9IU01NQyh4KQkoMHhFRDgwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9JMlMJCSgweEYyMDAwMDAwKQotI2RlZmluZSBTNVA2NDUwX1BBX0kyUzEJCTB4RjI4MDAwMDAKLSNkZWZpbmUgUzVQNjQ1MF9QQV9JMlMyCQkweEYyOTAwMDAwCi0KLSNkZWZpbmUgUzVQNjRYMF9QQV9QQ00JCSgweEYyMTAwMDAwKQotCi0jZGVmaW5lIFM1UDY0WDBfUEFfQURDCQkoMHhGMzAwMDAwMCkKLQotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UDY0WDBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQNjRYMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVA2NFgwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9JSUMJCVM1UDY0NDBfUEFfSUlDMAotI2RlZmluZSBTM0NfUEFfSUlDMQkJUzVQNjQ0MF9QQV9JSUMxCi0jZGVmaW5lIFMzQ19QQV9SVEMJCVM1UDY0WDBfUEFfUlRDCi0jZGVmaW5lIFMzQ19QQV9XRFQJCVM1UDY0WDBfUEFfV0RUCi0KLSNkZWZpbmUgU0FNU1VOR19QQV9BREMJCVM1UDY0WDBfUEFfQURDCi0KICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC9tYXAuaAppbmRleCAzMjg0NjdiLi5jY2JlNmI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTEsNSArMSw4IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL21hcC5oCiAgKgorICogQ29weXJpZ2h0IChjKSAyMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCiAgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLgogICoJQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgogICoKQEAgLTE2LDE0NSArMTksMTE1IEBACiAjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgogI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgogCi0vKgotICogbWFwLWJhc2UuaCBoYXMgYWxyZWFkeSBkZWZpbmVkIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MKLSAqIFMzQ19WQV9JUlEJCVMzQ19BRERSKDB4MDAwMDAwMDApCWlycSBjb250cm9sbGVyKHMpCi0gKiBTM0NfVkFfU1lTCQlTM0NfQUREUigweDAwMTAwMDAwKQlzeXN0ZW0gY29udHJvbAotICogUzNDX1ZBX01FTQkJUzNDX0FERFIoMHgwMDIwMDAwMCkJc3lzdGVtIGNvbnRyb2wgKG5vdCB1c2VkKQotICogUzNDX1ZBX1RJTUVSCQlTM0NfQUREUigweDAwMzAwMDAwKQl0aW1lciBibG9jawotICogUzNDX1ZBX1dBVENIRE9HCVMzQ19BRERSKDB4MDA0MDAwMDApCXdhdGNoZG9nCi0gKiBTM0NfVkFfVUFSVAkJUzNDX0FERFIoMHgwMTAwMDAwMCkJVUFSVAotICoKLSAqIFM1UEMxMDAgc3BlY2lmaWMgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBjYW4gYmUgZGVmaW5lZCBoZXJlCi0gKiBTNVBDMVhYX1ZBX0dQSU8JUzNDX0FERFIoMHgwMDUwMDAwMCkJR1BJTwotICoKLSAqLworI2RlZmluZSBTNVBDMTAwX1BBX1NEUkFNCQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgkoMHhCMDAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9TWl9PTkVOQU5EX0JVRgkoU1pfMjU2TSAtIFNaXzMyTSkKKyNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5ECQkweEU3MTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfT05FTkFORF9CVUYJCTB4QjAwMDAwMDAKIAotLyogQ2hpcCBJRCAqLworI2RlZmluZSBTNVBDMTAwX1BBX0NISVBJRAkJMHhFMDAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQ0hJUElECSgweEUwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVBDMTAwX1BBX0NISVBJRAorI2RlZmluZSBTNVBDMTAwX1BBX1NZU0NPTgkJMHhFMDEwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVBDMTAwX1BBX1NZU0NPTgorI2RlZmluZSBTNVBDMTAwX1BBX09USEVSUwkJMHhFMDIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfT1RIRVJTCSgweEUwMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1ZBX09USEVSUwkoUzNDX1ZBX1NZUyArIDB4MTAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfR1BJTwkJCTB4RTAzMDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0dQSU8JCSgweEUwMzAwMDAwKQotI2RlZmluZSBTNVBDMVhYX1ZBX0dQSU8JCVMzQ19BRERSKDB4MDA1MDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVklDMAkJCTB4RTQwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9WSUMxCQkJMHhFNDEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzIJCQkweEU0MjAwMDAwCiAKLS8qIEludGVycnVwdCAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzEJCSgweEU0MTAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1ZJQzIJCSgweEU0MjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQwkJUzNDX1ZBX0lSUQotI2RlZmluZSBTNVBDMTAwX1ZBX1ZJQ19PRkZTRVQJMHgxMDAwMAotI2RlZmluZSBTNVBDMVhYX1ZBX1ZJQyh4KQkoUzVQQzEwMF9WQV9WSUMgKyAoKHgpICogUzVQQzEwMF9WQV9WSUNfT0ZGU0VUKSkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUk9NQwkJMHhFNzAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1JPTUMJKDB4RTcwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TUk9NQwkJUzVQQzEwMF9QQV9TUk9NQworI2RlZmluZSBTNVBDMTAwX1BBX0NGQ09OCQkweEU3ODAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9PTkVOQU5ECSgweEU3MTAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX01ETUEJCQkweEU4MTAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUERNQTAJCTB4RTkwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMQkJMHhFOTIwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQ0ZDT04JKDB4RTc4MDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVElNRVIJCTB4RUEwMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkJMHhFQTEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCQkweEVBMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUlRDCQkJMHhFQTMwMDAwMAogCi0vKiBETUEgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9NRE1BCQkoMHhFODEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMAkoMHhFOTAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9QRE1BMQkoMHhFOTIwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkJMHhFQzAwMDAwMAogCi0vKiBUaW1lciAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1RJTUVSCSgweEVBMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UEMxMDBfUEFfVElNRVIKKyNkZWZpbmUgUzVQQzEwMF9QQV9JSUMwCQkJMHhFQzEwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0lJQzEJCQkweEVDMjAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TWVNUSU1FUgkoMHhFQTEwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9TUEkwCQkJMHhFQzMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX1NQSTEJCQkweEVDNDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfU1BJMgkJCTB4RUM1MDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX1dBVENIRE9HCSgweEVBMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1JUQwkJKDB4RUEzMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTT1RHCQkweEVEMjAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTUEhZCQkweEVEMzAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9VQVJUCQkoMHhFQzAwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9IU01NQyh4KQkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQogCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJKFM1UEMxMDBfUEFfVUFSVCArIDB4MCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQxCQkoUzVQQzEwMF9QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJKFM1UEMxMDBfUEFfVUFSVCArIDB4ODAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDMJCShTNVBDMTAwX1BBX1VBUlQgKyAweEMwMCkKLSNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgorI2RlZmluZSBTNVBDMTAwX1BBX0ZCCQkJMHhFRTAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSUlDMAkJKDB4RUMxMDAwMDApCi0jZGVmaW5lIFM1UEMxMDBfUEFfSUlDMQkJKDB4RUMyMDAwMDApCisjZGVmaW5lIFM1UEMxMDBfUEFfRklNQzAJCTB4RUUyMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9GSU1DMQkJMHhFRTMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMyCQkweEVFNDAwMDAwCiAKLS8qIFNQSSAqLwotI2RlZmluZSBTNVBDMTAwX1BBX1NQSTAJCTB4RUMzMDAwMDAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TUEkxCQkweEVDNDAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfU1BJMgkJMHhFQzUwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0kyUzAJCQkweEYyMDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfSTJTMQkJCTB4RjIxMDAwMDAKKyNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkJMHhGMjIwMDAwMAogCi0vKiBVU0IgSFMgT1RHICovCi0jZGVmaW5lIFM1UEMxMDBfUEFfVVNCX0hTT1RHCSgweEVEMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX1VTQl9IU1BIWQkoMHhFRDMwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9BQzk3CQkJMHhGMjMwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfRkIJCSgweEVFMDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1BDTTAJCQkweEYyNDAwMDAwCisjZGVmaW5lIFM1UEMxMDBfUEFfUENNMQkJCTB4RjI1MDAwMDAKIAotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMwCSgweEVFMjAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMxCSgweEVFMzAwMDAwKQotI2RlZmluZSBTNVBDMTAwX1BBX0ZJTUMyCSgweEVFNDAwMDAwKQorI2RlZmluZSBTNVBDMTAwX1BBX1NQRElGCQkweEYyNjAwMDAwCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMwCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMxCQkoMHhGMjEwMDAwMCkKLSNkZWZpbmUgUzVQQzEwMF9QQV9JMlMyCQkoMHhGMjIwMDAwMCkKKyNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkJMHhGMzAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfQUM5NwkJMHhGMjMwMDAwMAorI2RlZmluZSBTNVBDMTAwX1BBX0tFWVBBRAkJMHhGMzEwMDAwMAogCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9QQ00wCQkweEYyNDAwMDAwCi0jZGVmaW5lIFM1UEMxMDBfUEFfUENNMQkJMHhGMjUwMDAwMAorLyogQ29tcGF0aWJpbHRpeSBEZWZpbmVzICovCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9TUERJRgkweEYyNjAwMDAwCisjZGVmaW5lIFMzQ19QQV9GQgkJCVM1UEMxMDBfUEFfRkIKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJCVM1UEMxMDBfUEFfSFNNTUMoMCkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJCVM1UEMxMDBfUEFfSFNNTUMoMSkKKyNkZWZpbmUgUzNDX1BBX0hTTU1DMgkJCVM1UEMxMDBfUEFfSFNNTUMoMikKKyNkZWZpbmUgUzNDX1BBX0lJQwkJCVM1UEMxMDBfUEFfSUlDMAorI2RlZmluZSBTM0NfUEFfSUlDMQkJCVM1UEMxMDBfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfS0VZUEFECQkJUzVQQzEwMF9QQV9LRVlQQUQKKyNkZWZpbmUgUzNDX1BBX09ORU5BTkQJCQlTNVBDMTAwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzNDX1BBX09ORU5BTkRfQlVGCQlTNVBDMTAwX1BBX09ORU5BTkRfQlVGCisjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBDMTAwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfVFNBREMJCQlTNVBDMTAwX1BBX1RTQURDCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNPVEcJCVM1UEMxMDBfUEFfVVNCX0hTT1RHCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNQSFkJCVM1UEMxMDBfUEFfVVNCX0hTUEhZCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBDMTAwX1BBX1dBVENIRE9HCiAKLSNkZWZpbmUgUzVQQzEwMF9QQV9UU0FEQwkoMHhGMzAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJCVM1UEMxMDBfUEFfQ0hJUElECisjZGVmaW5lIFM1UF9QQV9GSU1DMAkJCVM1UEMxMDBfUEFfRklNQzAKKyNkZWZpbmUgUzVQX1BBX0ZJTUMxCQkJUzVQQzEwMF9QQV9GSU1DMQorI2RlZmluZSBTNVBfUEFfRklNQzIJCQlTNVBDMTAwX1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UEMxMDBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQQzEwMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQQzEwMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQQzEwMF9QQV9USU1FUgogCi0vKiBLRVlQQUQgKi8KLSNkZWZpbmUgUzVQQzEwMF9QQV9LRVlQQUQJKDB4RjMxMDAwMDApCisjZGVmaW5lIFNBTVNVTkdfUEFfQURDCQkJUzVQQzEwMF9QQV9UU0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCQlTNVBDMTAwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlTNVBDMTAwX1BBX0tFWVBBRAogCi0jZGVmaW5lIFM1UEMxMDBfUEFfSFNNTUMoeCkJKDB4RUQ4MDAwMDAgKyAoKHgpICogMHgxMDAwMDApKQorI2RlZmluZSBTNVBDMTAwX1ZBX09USEVSUwkJKFMzQ19WQV9TWVMgKyAweDEwMDAwKQogCi0jZGVmaW5lIFM1UEMxMDBfUEFfU0RSQU0JKDB4MjAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TRFJBTQkJUzVQQzEwMF9QQV9TRFJBTQorI2RlZmluZSBTM0NfU1pfT05FTkFORF9CVUYJCShTWl8yNTZNIC0gU1pfMzJNKQogCi0vKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCi0jZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVBDMTAwX1BBX1VBUlQKLSNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQQzEwMF9QQV9JSUMwCi0jZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBDMTAwX1BBX0lJQzEKLSNkZWZpbmUgUzNDX1BBX0ZCCQlTNVBDMTAwX1BBX0ZCCi0jZGVmaW5lIFMzQ19QQV9HMkQJCVM1UEMxMDBfUEFfRzJECi0jZGVmaW5lIFMzQ19QQV9HM0QJCVM1UEMxMDBfUEFfRzNECi0jZGVmaW5lIFMzQ19QQV9KUEVHCQlTNVBDMTAwX1BBX0pQRUcKLSNkZWZpbmUgUzNDX1BBX1JPVEFUT1IJCVM1UEMxMDBfUEFfUk9UQVRPUgotI2RlZmluZSBTNVBfVkFfVklDMAkJUzVQQzFYWF9WQV9WSUMoMCkKLSNkZWZpbmUgUzVQX1ZBX1ZJQzEJCVM1UEMxWFhfVkFfVklDKDEpCi0jZGVmaW5lIFM1UF9WQV9WSUMyCQlTNVBDMVhYX1ZBX1ZJQygyKQotI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVM1UEMxMDBfUEFfVVNCX0hTT1RHCi0jZGVmaW5lIFMzQ19QQV9VU0JfSFNQSFkJUzVQQzEwMF9QQV9VU0JfSFNQSFkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMAkJUzVQQzEwMF9QQV9IU01NQygwKQotI2RlZmluZSBTM0NfUEFfSFNNTUMxCQlTNVBDMTAwX1BBX0hTTU1DKDEpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzIJCVM1UEMxMDBfUEFfSFNNTUMoMikKLSNkZWZpbmUgUzNDX1BBX0tFWVBBRAkJUzVQQzEwMF9QQV9LRVlQQUQKLSNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQQzEwMF9QQV9XQVRDSERPRwotI2RlZmluZSBTM0NfUEFfVFNBREMJCVM1UEMxMDBfUEFfVFNBREMKLSNkZWZpbmUgUzNDX1BBX09ORU5BTkQJCVM1UEMxMDBfUEFfT05FTkFORAotI2RlZmluZSBTM0NfUEFfT05FTkFORF9CVUYJUzVQQzEwMF9QQV9PTkVOQU5EX0JVRgotI2RlZmluZSBTM0NfU1pfT05FTkFORF9CVUYJUzVQQzEwMF9TWl9PTkVOQU5EX0JVRgotI2RlZmluZSBTM0NfUEFfUlRDCQlTNVBDMTAwX1BBX1JUQworLyogVUFSVCAqLwogCi0jZGVmaW5lIFNBTVNVTkdfUEFfQURDCQlTNVBDMTAwX1BBX1RTQURDCi0jZGVmaW5lIFNBTVNVTkdfUEFfQ0ZDT04JUzVQQzEwMF9QQV9DRkNPTgotI2RlZmluZSBTQU1TVU5HX1BBX0tFWVBBRAlTNVBDMTAwX1BBX0tFWVBBRAorI2RlZmluZSBTM0NfUEFfVUFSVAkJCVM1UEMxMDBfUEFfVUFSVAogCi0jZGVmaW5lIFM1UF9QQV9GSU1DMAkJUzVQQzEwMF9QQV9GSU1DMAotI2RlZmluZSBTNVBfUEFfRklNQzEJCVM1UEMxMDBfUEFfRklNQzEKLSNkZWZpbmUgUzVQX1BBX0ZJTUMyCQlTNVBDMTAwX1BBX0ZJTUMyCisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0MxMDBfTUFQX0ggKi8KKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDM2MTE0OTIuLjFkZDU4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KICAqCiAgKiBTNVBWMjEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMTYsMTIyICsxNiwxMjAgQEAKICNpbmNsdWRlIDxwbGF0L21hcC1iYXNlLmg+CiAjaW5jbHVkZSA8cGxhdC9tYXAtczVwLmg+CiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TUk9NX0JBTks1CSgweEE4MDAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCQkweDIwMDAwMDAwCiAKLSNkZWZpbmUgUzVQQzExMF9QQV9PTkVOQU5ECSgweEIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORAkJUzVQQzExMF9QQV9PTkVOQU5ECisjZGVmaW5lIFM1UFYyMTBfUEFfU1JPTV9CQU5LNQkJMHhBODAwMDAwMAogCi0jZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORF9ETUEJKDB4QjA2MDAwMDApCi0jZGVmaW5lIFM1UF9QQV9PTkVOQU5EX0RNQQlTNVBDMTEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UEMxMTBfUEFfT05FTkFORAkJMHhCMDAwMDAwMAorI2RlZmluZSBTNVBDMTEwX1BBX09ORU5BTkRfRE1BCQkweEIwNjAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9DSElQSUQJKDB4RTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCVM1UFYyMTBfUEFfQ0hJUElECisjZGVmaW5lIFM1UFYyMTBfUEFfQ0hJUElECQkweEUwMDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9TWVNDT04JKDB4RTAxMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9TWVNDT04JCVM1UFYyMTBfUEFfU1lTQ09OCisjZGVmaW5lIFM1UFYyMTBfUEFfU1lTQ09OCQkweEUwMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9HUElPCQkoMHhFMDIwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9HUElPCQkJMHhFMDIwMDAwMAogCi0vKiBTUEkgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9TUEkwCQkweEUxMzAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BJMQkJMHhFMTQwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1NQRElGCQkweEUxMTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9LRVlQQUQJKDB4RTE2MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfU1BJMAkJCTB4RTEzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TUEkxCQkJMHhFMTQwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMAkJKDB4RTE4MDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMQkJKDB4RkFCMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlDMgkJKDB4RTFBMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfS0VZUEFECQkweEUxNjAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9USU1FUgkoMHhFMjUwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1RJTUVSCQlTNVBWMjEwX1BBX1RJTUVSCisjZGVmaW5lIFM1UFYyMTBfUEFfQURDCQkJMHhFMTcwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1lTVElNRVIJKDB4RTI2MDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlDMAkJCTB4RTE4MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSUMxCQkJMHhGQUIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJQzIJCQkweEUxQTAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9XQVRDSERPRwkoMHhFMjcwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9BQzk3CQkJMHhFMjIwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkoMHhFMjgwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkoMHhFMjkwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9QQ00wCQkJMHhFMjMwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BDTTEJCQkweEUxMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUENNMgkJCTB4RTJCMDAwMDAKIAotI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVBWMjEwX1BBX1VBUlQgKyAweDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJKFM1UFYyMTBfUEFfVUFSVCArIDB4NDAwKQotI2RlZmluZSBTNVBfUEFfVUFSVDIJCShTNVBWMjEwX1BBX1VBUlQgKyAweDgwMCkKLSNkZWZpbmUgUzVQX1BBX1VBUlQzCQkoUzVQVjIxMF9QQV9VQVJUICsgMHhDMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfVElNRVIJCTB4RTI1MDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9TWVNUSU1FUgkJMHhFMjYwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1dBVENIRE9HCQkweEUyNzAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUlRDCQkJMHhFMjgwMDAwMAogCi0jZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKKyNkZWZpbmUgUzVQVjIxMF9QQV9VQVJUCQkJMHhFMjkwMDAwMAogCi0jZGVmaW5lIFMzQ19WQV9VQVJUeCh4KQkJKFMzQ19WQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UFYyMTBfUEFfU1JPTUMJCTB4RTgwMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NST01DCSgweEU4MDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU1JPTUMJCVM1UFYyMTBfUEFfU1JPTUMKKyNkZWZpbmUgUzVQVjIxMF9QQV9DRkNPTgkJMHhFODIwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQ0ZDT04JKDB4RTgyMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfSFNNTUMoeCkJCSgweEVCMDAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKIAotI2RlZmluZSBTNVBWMjEwX1BBX01ETUEJCTB4RkEyMDAwMDAKLSNkZWZpbmUgUzVQVjIxMF9QQV9QRE1BMAkweEUwOTAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUERNQTEJMHhFMEEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0hTT1RHCQkweEVDMDAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSFNQSFkJCTB4RUMxMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0ZCCQkoMHhGODAwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSVMwCQkJMHhFRUUzMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0lJUzEJCQkweEUyMTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfSUlTMgkJCTB4RTJBMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCSgweEZCMjAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMxCSgweEZCMzAwMDAwKQotI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMyCSgweEZCNDAwMDAwKQorI2RlZmluZSBTNVBWMjEwX1BBX0RNQzAJCQkweEYwMDAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRE1DMQkJCTB4RjE0MDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX0hTTU1DKHgpCSgweEVCMDAwMDAwICsgKCh4KSAqIDB4MTAwMDAwKSkKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMwCQkJMHhGMjAwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1ZJQzEJCQkweEYyMTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMgkJCTB4RjIyMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMzCQkJMHhGMjMwMDAwMAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfSFNPVEcJKDB4RUMwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfSFNQSFkJKDB4RUMxMDAwMDApCisjZGVmaW5lIFM1UFYyMTBfUEFfRkIJCQkweEY4MDAwMDAwCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMwCQkoMHhGMjAwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMxCQkoMHhGMjEwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMyCQkoMHhGMjIwMDAwMCkKLSNkZWZpbmUgUzVQVjIxMF9QQV9WSUMzCQkoMHhGMjMwMDAwMCkKKyNkZWZpbmUgUzVQVjIxMF9QQV9NRE1BCQkJMHhGQTIwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX1BETUEwCQkweEUwOTAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfUERNQTEJCTB4RTBBMDAwMDAKIAotI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCSgweDIwMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UFYyMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQVjIxMF9QQV9NSVBJX0NTSVMJCTB4RkE2MDAwMDAKIAotLyogUy9QRElGICovCi0jZGVmaW5lIFM1UFYyMTBfUEFfU1BESUYJMHhFMTEwMDAwMAorI2RlZmluZSBTNVBWMjEwX1BBX0ZJTUMwCQkweEZCMjAwMDAwCisjZGVmaW5lIFM1UFYyMTBfUEFfRklNQzEJCTB4RkIzMDAwMDAKKyNkZWZpbmUgUzVQVjIxMF9QQV9GSU1DMgkJMHhGQjQwMDAwMAogCi0vKiBJMlMgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9JSVMwCQkweEVFRTMwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfSUlTMQkJMHhFMjEwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX0lJUzIJCTB4RTJBMDAwMDAKKy8qIENvbXBhdGliaWx0aXkgRGVmaW5lcyAqLwogCi0vKiBQQ00gKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9QQ00wCQkweEUyMzAwMDAwCi0jZGVmaW5lIFM1UFYyMTBfUEFfUENNMQkJMHhFMTIwMDAwMAotI2RlZmluZSBTNVBWMjEwX1BBX1BDTTIJCTB4RTJCMDAwMDAKKyNkZWZpbmUgUzNDX1BBX0ZCCQkJUzVQVjIxMF9QQV9GQgorI2RlZmluZSBTM0NfUEFfSFNNTUMwCQkJUzVQVjIxMF9QQV9IU01NQygwKQorI2RlZmluZSBTM0NfUEFfSFNNTUMxCQkJUzVQVjIxMF9QQV9IU01NQygxKQorI2RlZmluZSBTM0NfUEFfSFNNTUMyCQkJUzVQVjIxMF9QQV9IU01NQygyKQorI2RlZmluZSBTM0NfUEFfSFNNTUMzCQkJUzVQVjIxMF9QQV9IU01NQygzKQorI2RlZmluZSBTM0NfUEFfSUlDCQkJUzVQVjIxMF9QQV9JSUMwCisjZGVmaW5lIFMzQ19QQV9JSUMxCQkJUzVQVjIxMF9QQV9JSUMxCisjZGVmaW5lIFMzQ19QQV9JSUMyCQkJUzVQVjIxMF9QQV9JSUMyCisjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMjEwX1BBX1JUQworI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCQlTNVBWMjEwX1BBX0hTT1RHCisjZGVmaW5lIFMzQ19QQV9XRFQJCQlTNVBWMjEwX1BBX1dBVENIRE9HCiAKLS8qIEFDOTcgKi8KLSNkZWZpbmUgUzVQVjIxMF9QQV9BQzk3CQkweEUyMjAwMDAwCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMjEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBfUEFfRklNQzAJCQlTNVBWMjEwX1BBX0ZJTUMwCisjZGVmaW5lIFM1UF9QQV9GSU1DMQkJCVM1UFYyMTBfUEFfRklNQzEKKyNkZWZpbmUgUzVQX1BBX0ZJTUMyCQkJUzVQVjIxMF9QQV9GSU1DMgorI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjIxMF9QQV9NSVBJX0NTSVMKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMTEwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMTEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYyMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjIxMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjIxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjIxMF9QQV9USU1FUgogCi0jZGVmaW5lIFM1UFYyMTBfUEFfQURDCQkoMHhFMTcwMDAwMCkKKyNkZWZpbmUgU0FNU1VOR19QQV9BREMJCQlTNVBWMjEwX1BBX0FEQworI2RlZmluZSBTQU1TVU5HX1BBX0NGQ09OCQlTNVBWMjEwX1BBX0NGQ09OCisjZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECQlTNVBWMjEwX1BBX0tFWVBBRAogCi0jZGVmaW5lIFM1UFYyMTBfUEFfRE1DMAkJKDB4RjAwMDAwMDApCi0jZGVmaW5lIFM1UFYyMTBfUEFfRE1DMQkJKDB4RjE0MDAwMDApCisvKiBVQVJUICovCiAKLSNkZWZpbmUgUzVQVjIxMF9QQV9NSVBJX0NTSVMJMHhGQTYwMDAwMAorI2RlZmluZSBTM0NfVkFfVUFSVHgoeCkJCQkoUzNDX1ZBX1VBUlQgKyAoKHgpICogUzNDX1VBUlRfT0ZGU0VUKSkKIAotLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLwotI2RlZmluZSBTM0NfUEFfVUFSVAkJUzVQVjIxMF9QQV9VQVJUCi0jZGVmaW5lIFMzQ19QQV9IU01NQzAJCVM1UFYyMTBfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDX1BBX0hTTU1DMQkJUzVQVjIxMF9QQV9IU01NQygxKQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTNVBWMjEwX1BBX0hTTU1DKDIpCi0jZGVmaW5lIFMzQ19QQV9IU01NQzMJCVM1UFYyMTBfUEFfSFNNTUMoMykKLSNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQVjIxMF9QQV9JSUMwCi0jZGVmaW5lIFMzQ19QQV9JSUMxCQlTNVBWMjEwX1BBX0lJQzEKLSNkZWZpbmUgUzNDX1BBX0lJQzIJCVM1UFYyMTBfUEFfSUlDMgotI2RlZmluZSBTM0NfUEFfRkIJCVM1UFYyMTBfUEFfRkIKLSNkZWZpbmUgUzNDX1BBX1JUQwkJUzVQVjIxMF9QQV9SVEMKLSNkZWZpbmUgUzNDX1BBX1dEVAkJUzVQVjIxMF9QQV9XQVRDSERPRwotI2RlZmluZSBTM0NfUEFfVVNCX0hTT1RHCVM1UFYyMTBfUEFfSFNPVEcKLSNkZWZpbmUgUzVQX1BBX0ZJTUMwCQlTNVBWMjEwX1BBX0ZJTUMwCi0jZGVmaW5lIFM1UF9QQV9GSU1DMQkJUzVQVjIxMF9QQV9GSU1DMQotI2RlZmluZSBTNVBfUEFfRklNQzIJCVM1UFYyMTBfUEFfRklNQzIKLSNkZWZpbmUgUzVQX1BBX01JUElfQ1NJUzAJUzVQVjIxMF9QQV9NSVBJX0NTSVMKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMjEwX1BBX1VBUlQKIAotI2RlZmluZSBTQU1TVU5HX1BBX0FEQwkJUzVQVjIxMF9QQV9BREMKLSNkZWZpbmUgU0FNU1VOR19QQV9DRkNPTglTNVBWMjEwX1BBX0NGQ09OCi0jZGVmaW5lIFNBTVNVTkdfUEFfS0VZUEFECVM1UFYyMTBfUEFfS0VZUEFECisjZGVmaW5lIFM1UF9QQV9VQVJUKHgpCQkJKFMzQ19QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisjZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCisjZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtYXF1aWxhLmMKaW5kZXggNDYxYWEwMzUuLjU1N2FkZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWFxdWlsYS5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGFxdWlsYV9sZG8zX2RhdGEgPSB7CiAJLmNvbnN0cmFpbnRzCT0gewotCQkubmFtZQkJPSAiVlVTQi9NSVBJXzEuMVYiLAorCQkubmFtZQkJPSAiVlVTQitNSVBJXzEuMVYiLAogCQkubWluX3VWCQk9IDExMDAwMDAsCiAJCS5tYXhfdVYJCT0gMTEwMDAwMCwKIAkJLmFwcGx5X3VWCT0gMSwKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgYXF1aWxhX2xkbzhfZGF0YSA9IHsKIAkuY29uc3RyYWludHMJPSB7Ci0JCS5uYW1lCQk9ICJWVVNCL1ZBRENfMy4zViIsCisJCS5uYW1lCQk9ICJWVVNCK1ZBRENfMy4zViIsCiAJCS5taW5fdVYJCT0gMzMwMDAwMCwKIAkJLm1heF91VgkJPSAzMzAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMjA3LDcgKzIwNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhcXVpbGFfbGRvOV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZDQy9WQ0FNXzIuOFYiLAorCQkubmFtZQkJPSAiVkNDK1ZDQU1fMi44ViIsCiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtMzgxLDkgKzM4MSwxMiBAQAogCS5idWNrMV9zZXQxCT0gUzVQVjIxMF9HUEgwKDMpLAogCS5idWNrMV9zZXQyCT0gUzVQVjIxMF9HUEgwKDQpLAogCS5idWNrMl9zZXQzCT0gUzVQVjIxMF9HUEgwKDUpLAotCS5idWNrMV9tYXhfdm9sdGFnZTEgPSAxMjAwMDAwLAotCS5idWNrMV9tYXhfdm9sdGFnZTIgPSAxMjAwMDAwLAotCS5idWNrMl9tYXhfdm9sdGFnZSA9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTIJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMwk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2U0CT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTEJPSAxMjAwMDAwLAorCS5idWNrMl92b2x0YWdlMgk9IDEyMDAwMDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9tYWNoLWdvbmkuYwppbmRleCBlMjJkNTExLi4wNTZmNWM3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1nb25pLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtZ29uaS5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvM19kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvTUlQSV8xLjFWIiwKKwkJLm5hbWUJCT0gIlZVU0IrTUlQSV8xLjFWIiwKIAkJLm1pbl91VgkJPSAxMTAwMDAwLAogCQkubWF4X3VWCQk9IDExMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0zMzcsNyArMzM3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOF9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZVU0IvVkFEQ18zLjNWIiwKKwkJLm5hbWUJCT0gIlZVU0IrVkFEQ18zLjNWIiwKIAkJLm1pbl91VgkJPSAzMzAwMDAwLAogCQkubWF4X3VWCQk9IDMzMDAwMDAsCiAJCS5hcHBseV91Vgk9IDEsCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGdvbmlfbGRvOV9kYXRhID0gewogCS5jb25zdHJhaW50cwk9IHsKLQkJLm5hbWUJCT0gIlZDQy9WQ0FNXzIuOFYiLAorCQkubmFtZQkJPSAiVkNDK1ZDQU1fMi44ViIsCiAJCS5taW5fdVYJCT0gMjgwMDAwMCwKIAkJLm1heF91VgkJPSAyODAwMDAwLAogCQkuYXBwbHlfdVYJPSAxLApAQCAtNTIxLDkgKzUyMSwxMiBAQAogCS5idWNrMV9zZXQxCT0gUzVQVjIxMF9HUEgwKDMpLAogCS5idWNrMV9zZXQyCT0gUzVQVjIxMF9HUEgwKDQpLAogCS5idWNrMl9zZXQzCT0gUzVQVjIxMF9HUEgwKDUpLAotCS5idWNrMV9tYXhfdm9sdGFnZTEgPSAxMjAwMDAwLAotCS5idWNrMV9tYXhfdm9sdGFnZTIgPSAxMjAwMDAwLAotCS5idWNrMl9tYXhfdm9sdGFnZSA9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2UxCT0gMTIwMDAwMCwKKwkuYnVjazFfdm9sdGFnZTIJPSAxMjAwMDAwLAorCS5idWNrMV92b2x0YWdlMwk9IDEyMDAwMDAsCisJLmJ1Y2sxX3ZvbHRhZ2U0CT0gMTIwMDAwMCwKKwkuYnVjazJfdm9sdGFnZTEJPSAxMjAwMDAwLAorCS5idWNrMl92b2x0YWdlMgk9IDEyMDAwMDAsCiB9OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKaW5kZXggZDRkMjIyYi4uYTNkNjQ5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMKQEAgLTM1LDUwICszNSwyNCBAQAogCS8qIHMzY19jcHVfc2F2ZQogCSAqCiAJICogZW50cnk6Ci0JICoJcjAgPSBzYXZlIGFkZHJlc3MgKHZpcnR1YWwgYWRkciBvZiBzM2Nfc2xlZXBfc2F2ZV9waHlzKQorCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAogCXN0bWZkCXNwISwgeyByMyAtIHIxMiwgbHIgfQotCi0JbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAotCW1yYwlwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKLQltcmMJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTAKLQltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAyCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDAJQCBDb250cm9sIHJlZ2lzdGVyCi0JbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCW1yYwlwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9scwotCW1yYwlwMTUsIDAsIHIxMiwgYzEwLCBjMiwgMAlAIFJlYWQgUFJSUgotCW1yYwlwMTUsIDAsIHIzLCBjMTAsIGMyLCAxCUAgUkVBRCBOTVJSCi0KLQlzdG1pYQlyMCwgeyByMyAtIHIxMyB9Ci0KLQlibAlzM2NfcG1fY2JfZmx1c2hjYWNoZQorCWxkcglyMywgPXJlc3VtZV93aXRoX21tdQorCWJsCWNwdV9zdXNwZW5kCiAKIAlsZHIJcjAsID1wbV9jcHVfc2xlZXAKIAlsZHIJcjAsIFsgcjAgXQogCW1vdglwYywgcjAKIAogcmVzdW1lX3dpdGhfbW11OgotCS8qCi0JICogQWZ0ZXIgTU1VIGlzIHR1cm5lZCBvbiwgcmVzdG9yZSB0aGUgcHJldmlvdXMgTU1VIHRhYmxlLgotCSAqLwotCWxkcglyOSAsID0oUEFHRV9PRkZTRVQgLSBQSFlTX09GRlNFVCkKLQlhZGQJcjQsIHI0LCByOQotCXN0cglyMTIsIFtyNF0KLQogCWxkbWZkCXNwISwgeyByMyAtIHIxMiwgcGMgfQogCiAJLmx0b3JnCiAKLQkuZGF0YQotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQogCS8qIHNsZWVwIG1hZ2ljLCB0byBhbGxvdyB0aGUgYm9vdGxvYWRlciB0byBjaGVjayBmb3IgYW4gdmFsaWQKIAkgKiBpbWFnZSB0byByZXN1bWUgdG8uIE11c3QgYmUgdGhlIGZpcnN0IHdvcmQgYmVmb3JlIHRoZQogCSAqIHMzY19jcHVfcmVzdW1lIGVudHJ5LgpAQCAtOTYsNzUgKzcwLDQgQEAKIAkqLwogCiBFTlRSWShzM2NfY3B1X3Jlc3VtZSkKLQltb3YJcjAsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERQotCW1zcgljcHNyX2MsIHIwCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIFRMQnMKLQltY3IJcDE1LCAwLCByMSwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBDYWNoZQotCi0JbGRyCXIwLCBzM2Nfc2xlZXBfc2F2ZV9waHlzCQlAIGFkZHJlc3Mgb2YgcmVzdG9yZSBibG9jawotCWxkbWlhCXIwLCB7IHIzIC0gcjEzIH0KLQotCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCQlAIEZDU0UvUElECi0JbWNyCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAkJQCBEb21haW4gSUQKLQotCW1jcglwMTUsIDAsIHI4LCBjMiwgYzAsIDIJCUAgVHJhbnNsYXRpb24gVGFibGUgQ29udHJvbAotCW1jcglwMTUsIDAsIHI3LCBjMiwgYzAsIDEJCUAgVHJhbnNsYXRpb24gVGFibGUgQkFTRTEKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0KLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQkJQCBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlcgotCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjOCwgYzcsIDAJCUAgSW52YWxpZGF0ZSBJICYgRCBUTEIKLQotCW1vdglyMCwgIzAJCQkJQCByZXN0b3JlIGNvcHJvIGFjY2VzcwotCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCQlAIENvLXByb2Nlc3NvciBhY2Nlc3MKLQltY3IgCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAotCi0JbWNyCXAxNSwgMCwgcjEyLCBjMTAsIGMyLCAwCQlAIHdyaXRlIFBSUlIKLQltY3IJcDE1LCAwLCByMywgYzEwLCBjMiwgMQkJQCB3cml0ZSBOTVJSCi0KLQkvKgotCSAqIEluIENvcnRleC1BOCwgd2hlbiBNTVUgaXMgdHVybmVkIG9uLCB0aGUgcGlwZWxpbmUgaXMgZmx1c2hlZC4KLQkgKiBBbmQgdGhlcmUgYXJlIG5vIHZhbGlkIGVudHJpZXMgaW4gdGhlIE1NVSB0YWJsZSBhdCB0aGlzIHBvaW50LgotCSAqIFNvIGJlZm9yZSB0dXJuaW5nIG9uIHRoZSBNTVUsIHRoZSBNTVUgZW50cnkgZm9yIHRoZSBEUkFNIGFkZHJlc3MKLQkgKiByYW5nZSBpcyBhZGRlZC4gQWZ0ZXIgdGhlIE1NVSBpcyB0dXJuZWQgb24sIHRoZSBvdGhlciBlbnRyaWVzCi0JICogaW4gdGhlIE1NVSB0YWJsZSB3aWxsIGJlIHJlc3RvcmVkLgotCSovCi0KLQkvKiByNiA9IFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwICovCi0JbW92CXI0LCByNgotCW1vdglyNCwgcjQsIExTUiAjMTQKLQltb3YJcjQsIHI0LCBMU0wgIzE0Ci0KLQkvKiBMb2FkIGFkZHJlc3MgZm9yIGFkZGluZyB0byBNTVUgdGFibGUgbGlzdCAqLwotCWxkcglyMTEsID0weEUwMTBGMDAwCQlAIElORk9STTAgcmVnLgotCWxkcglyMTAsIFtyMTEsICMwXQotCW1vdglyMTAsIHIxMCwgTFNSICMxOAotCWJpYwlyMTAsIHIxMCwgIzB4MwotCW9ycglyNCwgcjQsIHIxMAotCi0JLyogQ2FsY3VsYXRlIE1NVSB0YWJsZSBlbnRyeSAqLwotCW1vdiAJcjEwLCByMTAsIExTTCAjMTgKLQlsZHIJcjUsID0weDQwRQotCW9ycglyMTAsIHIxMCwgcjUKLQotCS8qIEJhY2sgdXAgb3JpZ2luYWxseSBkYXRhICovCi0JbGRyCXIxMiwgW3I0XQotCi0JLyogQWRkIGNhbGN1bGF0ZWQgTU1VIHRhYmxlIGVudHJ5IGludG8gTU1VIHRhYmxlIGxpc3QgKi8KLQlzdHIJcjEwLCBbcjRdCi0KLQlsZHIJcjIsID1yZXN1bWVfd2l0aF9tbXUKLQltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBldGMKLQotCW5vcAotCW5vcAotCW5vcAotCW5vcAotCW5vcAkJCQkJQCBzZWNvbmQtdG8tbGFzdCBiZWZvcmUgbW11Ci0KLQltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKLQotCS5sdG9yZworCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwppbmRleCAwOWM0YzIxLi5iMmE5YWNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvS2NvbmZpZwpAQCAtMTIyLDYgKzEyMiw3IEBACiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMyCiAJc2VsZWN0IFMzQ19ERVZfSFNNTUMzCiAJc2VsZWN0IFM1UFYzMTBfREVWX1BECisJc2VsZWN0IFM1UFYzMTBfREVWX1NZU01NVQogCXNlbGVjdCBTNVBWMzEwX1NFVFVQX0kyQzEKIAlzZWxlY3QgUzVQVjMxMF9TRVRVUF9TREhDSQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL21hcC5oCmluZGV4IDc0ZDQwMDYuLjkwMTY1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjMxMC9pbmNsdWRlL21hY2gvbWFwLmgKICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoYykgMjAxMC0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCiAgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KICAqCiAgKiBTNVBWMzEwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucwpAQCAtMjMsOTAgKzIzLDQzIEBACiAKICNpbmNsdWRlIDxwbGF0L21hcC1zNXAuaD4KIAotI2RlZmluZSBTNVBWMzEwX1BBX1NZU1JBTQkJKDB4MDIwMjUwMDApCisjZGVmaW5lIFM1UFYzMTBfUEFfU1lTUkFNCQkweDAyMDI1MDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkJMHgwMzgzMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0kyUzEJCQkweEUzMTAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfSTJTMgkJCTB4RTJBMDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1BDTTAJCQkweDAzODQwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUENNMQkJCTB4MTM5ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkJMHgxMzk5MDAwMAogCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1JPTV9CQU5LKHgpCQkoMHgwNDAwMDAwMCArICgoeCkgKiAweDAxMDAwMDAwKSkKIAotI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkQJCSgweDBDMDAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORAkJCVM1UEMyMTBfUEFfT05FTkFORAorI2RlZmluZSBTNVBDMjEwX1BBX09ORU5BTkQJCTB4MEMwMDAwMDAKKyNkZWZpbmUgUzVQQzIxMF9QQV9PTkVOQU5EX0RNQQkJMHgwQzYwMDAwMAogCi0jZGVmaW5lIFM1UEMyMTBfUEFfT05FTkFORF9ETUEJCSgweDBDNjAwMDAwKQotI2RlZmluZSBTNVBfUEFfT05FTkFORF9ETUEJCVM1UEMyMTBfUEFfT05FTkFORF9ETUEKKyNkZWZpbmUgUzVQVjMxMF9QQV9DSElQSUQJCTB4MTAwMDAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX0NISVBJRAkJKDB4MTAwMDAwMDApCi0jZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAorI2RlZmluZSBTNVBWMzEwX1BBX1NZU0NPTgkJMHgxMDAxMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1BNVQkJCTB4MTAwMjAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9DTVUJCQkweDEwMDMwMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9TWVNDT04JCSgweDEwMDEwMDAwKQotI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQVjMxMF9QQV9XQVRDSERPRwkJMHgxMDA2MDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX1JUQwkJCTB4MTAwNzAwMDAKIAotI2RlZmluZSBTNVBWMzEwX1BBX1BNVQkJCSgweDEwMDIwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0RNQzAJCQkweDEwNDAwMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9DTVUJCQkoMHgxMDAzMDAwMCkKKyNkZWZpbmUgUzVQVjMxMF9QQV9DT01CSU5FUgkJMHgxMDQ0ODAwMAogCi0jZGVmaW5lIFM1UFYzMTBfUEFfV0FUQ0hET0cJCSgweDEwMDYwMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX1JUQwkJCSgweDEwMDcwMDAwKQorI2RlZmluZSBTNVBWMzEwX1BBX0NPUkVQRVJJCQkweDEwNTAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0NQVQkJMHgxMDUwMDEwMAorI2RlZmluZSBTNVBWMzEwX1BBX1RXRAkJCTB4MTA1MDA2MDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9HSUNfRElTVAkJMHgxMDUwMTAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0wyQ0MJCQkweDEwNTAyMDAwCiAKLSNkZWZpbmUgUzVQVjMxMF9QQV9ETUMwCQkJKDB4MTA0MDAwMDApCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT01CSU5FUgkJKDB4MTA0NDgwMDApCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9DT1JFUEVSSQkJKDB4MTA1MDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0NQVQkJKDB4MTA1MDAxMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfVFdECQkJKDB4MTA1MDA2MDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR0lDX0RJU1QJCSgweDEwNTAxMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX0wyQ0MJCQkoMHgxMDUwMjAwMCkKLQotLyogRE1BICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfTURNQQkJMHgxMDgxMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BETUEwCTB4MTI2ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMQkweDEyNjkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMQkJKDB4MTE0MDAwMDApCi0jZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzIJCSgweDExMDAwMDAwKQotI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8zCQkoMHgwMzg2MDAwMCkKLQotI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzAJCTB4MTE4ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9NSVBJX0NTSVMxCQkweDExODkwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9IU01NQyh4KQkJKDB4MTI1MTAwMDAgKyAoKHgpICogMHgxMDAwMCkpCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NQwkJKDB4MTI1NzAwMDApCi0jZGVmaW5lIFM1UF9QQV9TUk9NQwkJCVM1UFYzMTBfUEFfU1JPTUMKLQotLyogUy9QRElGICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfU1BESUYJMHhFMTEwMDAwMAotCi0vKiBJMlMgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9JMlMwCQkweDAzODMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfUEFfSTJTMQkJMHhFMzEwMDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX0kyUzIJCTB4RTJBMDAwMDAKLQotLyogUENNICovCi0jZGVmaW5lIFM1UFYzMTBfUEFfUENNMAkJMHgwMzg0MDAwMAotI2RlZmluZSBTNVBWMzEwX1BBX1BDTTEJCTB4MTM5ODAwMDAKLSNkZWZpbmUgUzVQVjMxMF9QQV9QQ00yCQkweDEzOTkwMDAwCi0KLS8qIEFDOTcgKi8KLSNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkweDEzOUEwMDAwCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9VQVJUCQkJKDB4MTM4MDAwMDApCi0KLSNkZWZpbmUgUzVQX1BBX1VBUlQoeCkJCQkoUzVQVjMxMF9QQV9VQVJUICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMAkJCVM1UF9QQV9VQVJUKDApCi0jZGVmaW5lIFM1UF9QQV9VQVJUMQkJCVM1UF9QQV9VQVJUKDEpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMgkJCVM1UF9QQV9VQVJUKDIpCi0jZGVmaW5lIFM1UF9QQV9VQVJUMwkJCVM1UF9QQV9VQVJUKDMpCi0jZGVmaW5lIFM1UF9QQV9VQVJUNAkJCVM1UF9QQV9VQVJUKDQpCi0KLSNkZWZpbmUgUzVQX1NaX1VBUlQJCQlTWl8yNTYKLQotI2RlZmluZSBTNVBWMzEwX1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCi0KLSNkZWZpbmUgUzVQVjMxMF9QQV9USU1FUgkJKDB4MTM5RDAwMDApCi0jZGVmaW5lIFM1UF9QQV9USU1FUgkJCVM1UFYzMTBfUEFfVElNRVIKLQotI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkoMHg0MDAwMDAwMCkKLSNkZWZpbmUgUzVQX1BBX1NEUkFNCQkJUzVQVjMxMF9QQV9TRFJBTQorI2RlZmluZSBTNVBWMzEwX1BBX01ETUEJCQkweDEwODEwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfUERNQTAJCTB4MTI2ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9QRE1BMQkJMHgxMjY5MDAwMAogCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01ETUEJCTB4MTBBNDAwMDAKICNkZWZpbmUgUzVQVjMxMF9QQV9TWVNNTVVfU1NTCQkweDEwQTUwMDAwCkBAIC0xMjQsMTEgKzc3LDMyIEBACiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX1RWCQkweDEyRTIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19MCQkweDEzNjIwMDAwCiAjZGVmaW5lIFM1UFYzMTBfUEFfU1lTTU1VX01GQ19SCQkweDEzNjMwMDAwCi0jZGVmaW5lIFM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCTE2Ci0jZGVmaW5lIFM1UF9TWVNNTVVfVE9UQUxfSVBOVU0JCVM1UFYzMTBfU1lTTU1VX1RPVEFMX0lQTlVNCiAKLS8qIGNvbXBhdGliaWx0aXkgZGVmaW5lcy4gKi8KLSNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKKyNkZWZpbmUgUzVQVjMxMF9QQV9HUElPMQkJMHgxMTQwMDAwMAorI2RlZmluZSBTNVBWMzEwX1BBX0dQSU8yCQkweDExMDAwMDAwCisjZGVmaW5lIFM1UFYzMTBfUEFfR1BJTzMJCTB4MDM4NjAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX01JUElfQ1NJUzAJCTB4MTE4ODAwMDAKKyNkZWZpbmUgUzVQVjMxMF9QQV9NSVBJX0NTSVMxCQkweDExODkwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9IU01NQyh4KQkJKDB4MTI1MTAwMDAgKyAoKHgpICogMHgxMDAwMCkpCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TUk9NQwkJMHgxMjU3MDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfVUFSVAkJCTB4MTM4MDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX0lJQyh4KQkJKDB4MTM4NjAwMDAgKyAoKHgpICogMHgxMDAwMCkpCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9BQzk3CQkJMHgxMzlBMDAwMAorCisjZGVmaW5lIFM1UFYzMTBfUEFfVElNRVIJCTB4MTM5RDAwMDAKKworI2RlZmluZSBTNVBWMzEwX1BBX1NEUkFNCQkweDQwMDAwMDAwCisKKyNkZWZpbmUgUzVQVjMxMF9QQV9TUERJRgkJMHhFMTEwMDAwMAorCisvKiBDb21wYXRpYmlsdGl5IERlZmluZXMgKi8KKwogI2RlZmluZSBTM0NfUEFfSFNNTUMwCQkJUzVQVjMxMF9QQV9IU01NQygwKQogI2RlZmluZSBTM0NfUEFfSFNNTUMxCQkJUzVQVjMxMF9QQV9IU01NQygxKQogI2RlZmluZSBTM0NfUEFfSFNNTUMyCQkJUzVQVjMxMF9QQV9IU01NQygyKQpAQCAtMTQzLDcgKzExNywyOCBAQAogI2RlZmluZSBTM0NfUEFfSUlDNwkJCVM1UFYzMTBfUEFfSUlDKDcpCiAjZGVmaW5lIFMzQ19QQV9SVEMJCQlTNVBWMzEwX1BBX1JUQwogI2RlZmluZSBTM0NfUEFfV0RUCQkJUzVQVjMxMF9QQV9XQVRDSERPRworCisjZGVmaW5lIFM1UF9QQV9DSElQSUQJCQlTNVBWMzEwX1BBX0NISVBJRAogI2RlZmluZSBTNVBfUEFfTUlQSV9DU0lTMAkJUzVQVjMxMF9QQV9NSVBJX0NTSVMwCiAjZGVmaW5lIFM1UF9QQV9NSVBJX0NTSVMxCQlTNVBWMzEwX1BBX01JUElfQ1NJUzEKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkQJCQlTNVBDMjEwX1BBX09ORU5BTkQKKyNkZWZpbmUgUzVQX1BBX09ORU5BTkRfRE1BCQlTNVBDMjEwX1BBX09ORU5BTkRfRE1BCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJCVM1UFYzMTBfUEFfU0RSQU0KKyNkZWZpbmUgUzVQX1BBX1NST01DCQkJUzVQVjMxMF9QQV9TUk9NQworI2RlZmluZSBTNVBfUEFfU1lTQ09OCQkJUzVQVjMxMF9QQV9TWVNDT04KKyNkZWZpbmUgUzVQX1BBX1RJTUVSCQkJUzVQVjMxMF9QQV9USU1FUgorCisvKiBVQVJUICovCisKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCQlTNVBWMzEwX1BBX1VBUlQKKworI2RlZmluZSBTNVBfUEFfVUFSVCh4KQkJCShTM0NfUEFfVUFSVCArICgoeCkgKiBTM0NfVUFSVF9PRkZTRVQpKQorI2RlZmluZSBTNVBfUEFfVUFSVDAJCQlTNVBfUEFfVUFSVCgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCQlTNVBfUEFfVUFSVCgxKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCQlTNVBfUEFfVUFSVCgyKQorI2RlZmluZSBTNVBfUEFfVUFSVDMJCQlTNVBfUEFfVUFSVCgzKQorI2RlZmluZSBTNVBfUEFfVUFSVDQJCQlTNVBfUEFfVUFSVCg0KQorCisjZGVmaW5lIFM1UF9TWl9VQVJUCQkJU1pfMjU2CiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAppbmRleCA2NjJmZTg1Zi4uNTk4ZmM1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXB2MzEwL2luY2x1ZGUvbWFjaC9zeXNtbXUuaAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYzMTAvaW5jbHVkZS9tYWNoL3N5c21tdS5oCkBAIC0xMyw2ICsxMyw5IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX1NZU01NVV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX1NZU01NVV9IIF9fRklMRV9fCiAKKyNkZWZpbmUgUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0JMTYKKyNkZWZpbmUgUzVQX1NZU01NVV9UT1RBTF9JUE5VTQkJUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU0KKwogZW51bSBzNXB2MzEwX3N5c21tdV9pcHMgewogCVNZU01NVV9NRE1BLAogCVNZU01NVV9TU1MsCkBAIC0zMiw3ICszNSw3IEBACiAJU1lTTU1VX01GQ19SLAogfTsKIAotc3RhdGljIGNoYXIgKnN5c21tdV9pcHNfbmFtZVtTNVBfU1lTTU1VX1RPVEFMX0lQTlVNXSA9IHsKK3N0YXRpYyBjaGFyICpzeXNtbXVfaXBzX25hbWVbUzVQVjMxMF9TWVNNTVVfVE9UQUxfSVBOVU1dID0gewogCSJTWVNNTVVfTURNQSIJLAogCSJTWVNNTVVfU1NTIgksCiAJIlNZU01NVV9GSU1DMCIJLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvY29sbGllLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwppbmRleCBkNDNjNWVmLi5iZDNlMWJmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYwpAQCAtMjQxLDYgKzI0MSw5IEBACiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGxpZV9sb2NvbW9fZGV2aWNlID0gewogCS5uYW1lCQk9ICJsb2NvbW8iLAogCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsb2NvbW9faW5mbywKKwl9LAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsb2NvbW9fcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBsb2NvbW9fcmVzb3VyY2VzLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCmluZGV4IGFiOWZjNDQuLmM0NjYxYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYwpAQCAtMzIsOCArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKLWV4dGVybiB2b2lkIHNhMTEwMF9jcHVfc3VzcGVuZCh2b2lkKTsKLWV4dGVybiB2b2lkIHNhMTEwMF9jcHVfcmVzdW1lKHZvaWQpOworZXh0ZXJuIHZvaWQgc2ExMTAwX2NwdV9zdXNwZW5kKGxvbmcpOwogCiAjZGVmaW5lIFNBVkUoeCkJCXNsZWVwX3NhdmVbU0xFRVBfU0FWRV8jI3hdID0geAogI2RlZmluZSBSRVNUT1JFKHgpCXggPSBzbGVlcF9zYXZlW1NMRUVQX1NBVkVfIyN4XQpAQCAtNzMsMTAgKzcyLDEwIEBACiAJUkNTUiA9IFJDU1JfSFdSIHwgUkNTUl9TV1IgfCBSQ1NSX1dEUiB8IFJDU1JfU01SOwogCiAJLyogc2V0IHJlc3VtZSByZXR1cm4gYWRkcmVzcyAqLwotCVBTUFIgPSB2aXJ0X3RvX3BoeXMoc2ExMTAwX2NwdV9yZXN1bWUpOworCVBTUFIgPSB2aXJ0X3RvX3BoeXMoY3B1X3Jlc3VtZSk7CiAKIAkvKiBnbyB6enogKi8KLQlzYTExMDBfY3B1X3N1c3BlbmQoKTsKKwlzYTExMDBfY3B1X3N1c3BlbmQoUExBVF9QSFlTX09GRlNFVCAtIFBBR0VfT0ZGU0VUKTsKIAogCWNwdV9pbml0KCk7CiAKQEAgLTExNSwxMSArMTE0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBzbGVlcF9waHlzX3NwKHZvaWQgKnNwKQotewotCXJldHVybiB2aXJ0X3RvX3BoeXMoc3ApOwotfQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHNhMTF4MF9wbV9vcHMgPSB7CiAJLmVudGVyCQk9IHNhMTF4MF9wbV9lbnRlciwKIAkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zbGVlcC5TCmluZGV4IDgwZjMxYmEuLjA0ZjJhNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvc2xlZXAuUwpAQCAtMjAsMTIgKzIwLDcgQEAKICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0KLQogCQkudGV4dAotCi0KLQogLyoKICAqIHNhMTEwMF9jcHVfc3VzcGVuZCgpCiAgKgpAQCAtMzQsMjcgKzI5LDEwIEBACiAgKi8KIAogRU5UUlkoc2ExMTAwX2NwdV9zdXNwZW5kKQotCiAJc3RtZmQJc3AhLCB7cjQgLSByMTIsIGxyfQkJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjawotCi0JQCBnZXQgY29wcm9jZXNzb3IgcmVnaXN0ZXJzCi0JbXJjIAlwMTUsIDAsIHI0LCBjMywgYzAsIDAJCUAgZG9tYWluIElECi0JbXJjIAlwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECi0JbXJjIAlwMTUsIDAsIHI3LCBjMSwgYzAsIDAJCUAgY29udHJvbCByZWcKLQotCUAgc3RvcmUgdGhlbSBwbHVzIGN1cnJlbnQgdmlydHVhbCBzdGFjayBwdHIgb24gc3RhY2sKLQltb3YJcjgsIHNwCi0Jc3RtZmQJc3AhLCB7cjQgLSByOH0KLQotCUAgcHJlc2VydmUgcGh5cyBhZGRyZXNzIG9mIHN0YWNrCi0JbW92CXIwLCBzcAotCWJsCXNsZWVwX3BoeXNfc3AKLQlsZHIJcjEsID1zbGVlcF9zYXZlX3NwCi0Jc3RyCXIwLCBbcjFdCi0KLQlAIGNsZWFuIGRhdGEgY2FjaGUgYW5kIGludmFsaWRhdGUgV0IKLQlibAl2NHdiX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJbW92CXIxLCByMAorCWxkcglyMywgPXNhMTEwMF9jcHVfcmVzdW1lCQlAIHJldHVybiBmdW5jdGlvbgorCWJsCWNwdV9zdXNwZW5kCiAKIAlAIGRpc2FibGUgY2xvY2sgc3dpdGNoaW5nCiAJbWNyCXAxNSwgMCwgcjEsIGMxNSwgYzIsIDIKQEAgLTE2Niw1MCArMTQ0LDggQEAKICAqIGNwdV9zYTExMDBfcmVzdW1lKCkKICAqCiAgKiBlbnRyeSBwb2ludCBmcm9tIGJvb3Rsb2FkZXIgaW50byBrZXJuZWwgZHVyaW5nIHJlc3VtZQotICoKLSAqIE5vdGU6IFllcywgcGFydCBvZiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgbG9jYXRlZCBpbnRvIHRoZSAuZGF0YSBzZWN0aW9uLgotICogICAgICAgVGhpcyBpcyB0byBhbGxvdyBzbGVlcF9zYXZlX3NwIHRvIGJlIGFjY2Vzc2VkIHdpdGggYSByZWxhdGl2ZSBsb2FkCi0gKiAgICAgICB3aGlsZSB3ZSBjYW4ndCByZWx5IG9uIGFueSBNTVUgdHJhbnNsYXRpb24uICBXZSBjb3VsZCBoYXZlIHB1dAotICogICAgICAgc2xlZXBfc2F2ZV9zcCBpbiB0aGUgLnRleHQgc2VjdGlvbiBhcyB3ZWxsLCBidXQgc29tZSBzZXR1cHMgbWlnaHQKLSAqICAgICAgIGluc2lzdCBvbiBpdCB0byBiZSB0cnVseSByZWFkLW9ubHkuCiAgKi8KLQotCS5kYXRhCiAJLmFsaWduIDUKLUVOVFJZKHNhMTEwMF9jcHVfcmVzdW1lKQotCW1vdglyMCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCi0JbXNyCWNwc3JfYywgcjAJCQlAIHNldCBTVkMsIGlycXMgb2ZmCi0KLQlsZHIJcjAsIHNsZWVwX3NhdmVfc3AJCUAgc3RhY2sgcGh5cyBhZGRyCi0JbGRyCXIyLCA9cmVzdW1lX2FmdGVyX21tdQkJQCBpdHMgYWJzb2x1dGUgdmlydHVhbCBhZGRyZXNzCi0JbGRtZmQJcjAsIHtyNCAtIHI3LCBzcH0JCUAgQ1AgcmVncyArIHZpcnQgc3RhY2sgcHRyCi0KLQltb3YJcjEsICMwCi0JbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMCAgIAlAIGZsdXNoIEkrRCBUTEJzCi0JbWNyCXAxNSwgMCwgcjEsIGM3LCBjNywgMAkJQCBmbHVzaCBJJkQgY2FjaGUKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCAwCQlAIGludmFsaWRhdGUgUkIKLQltY3IJcDE1LCAwLCByMSwgYzksIGMwLCA1CQlAIGFsbG93IHVzZXIgc3BhY2UgdG8gdXNlIFJCCi0KLQltY3IJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAotCW1jcglwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCi0JbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECi0JYglyZXN1bWVfdHVybl9vbl9tbXUJCUAgY2FjaGUgYWxpZ24gZXhlY3V0aW9uCi0KLQkuYWxpZ24gNQotcmVzdW1lX3R1cm5fb25fbW11OgotCW1jciAJcDE1LCAwLCByNywgYzEsIGMwLCAwCQlAIHR1cm4gb24gTU1VLCBjYWNoZXMsIGV0Yy4KLQlub3AKLQltb3YJcGMsIHIyCQkJCUAganVtcCB0byB2aXJ0dWFsIGFkZHIKLQlub3AKLQlub3AKLQlub3AKLQotc2xlZXBfc2F2ZV9zcDoKLQkud29yZAkwCQkJCUAgcHJlc2VydmUgc3RhY2sgcGh5cyBwdHIgaGVyZQotCi0JLnRleHQKLXJlc3VtZV9hZnRlcl9tbXU6CitzYTExMDBfY3B1X3Jlc3VtZToKIAltY3IJcDE1LCAwLCByMSwgYzE1LCBjMSwgMgkJQCBlbmFibGUgY2xvY2sgc3dpdGNoaW5nCiAJbGRtZmQJc3AhLCB7cjQgLSByMTIsIHBjfQkJQCByZXR1cm4gdG8gY2FsbGVyCi0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9LY29uZmlnCmluZGV4IDRkMWI0YzUuLjBjOGY2Y2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKQEAgLTYwLDYgKzYwLDggQEAKIAogY29uZmlnIE1BQ0hfQUc1RVZNCiAJYm9vbCAiQUc1RVZNIGJvYXJkIgorCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTSF9MQ0RfTUlQSV9EU0kKIAlkZXBlbmRzIG9uIEFSQ0hfU0g3M0EwCiAKIGNvbmZpZyBNQUNIX01BQ0tFUkVMCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hZzVldm0uYwppbmRleCBjMThhNzQwLi40MzAzYTg2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFnNWV2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYWc1ZXZtLmMKQEAgLTM0LDkgKzM0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5wdXQvc2hfa2V5c2MuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9zaF9tbWNpZi5oPgotCisjaW5jbHVkZSA8bGludXgvc2hfY2xrLmg+CisjaW5jbHVkZSA8dmlkZW8vc2hfbW9iaWxlX2xjZGMuaD4KKyNpbmNsdWRlIDx2aWRlby9zaF9taXBpX2RzaS5oPgogI2luY2x1ZGUgPHNvdW5kL3NoX2ZzaS5oPgotCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvc2g3M2EwLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KQEAgLTE4MywxMSArMTg0LDE2NSBAQAogCS5yZXNvdXJjZQk9IHNoX21tY2lmX3Jlc291cmNlcywKIH07CiAKKy8qIElyREEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXJkYV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IDB4RTZEMDAwMDAsCisJCS5lbmQJPSAweEU2RDAxRkQ0IC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBnaWNfc3BpKDk1KSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcmRhX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfaXJkYSIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlICAgICAgID0gaXJkYV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShpcmRhX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgdW5zaWduZWQgY2hhciBsY2RfYmFja2xpZ2h0X3NlcVszXVsyXSA9IHsKKwl7IDB4MDQsIDB4MDcgfSwKKwl7IDB4MjMsIDB4ODAgfSwKKwl7IDB4MDMsIDB4MDEgfSwKK307CisKK3N0YXRpYyB2b2lkIGxjZF9iYWNrbGlnaHRfb24odm9pZCkKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmE7CisJc3RydWN0IGkyY19tc2cgbXNnOworCWludCBrOworCisJYSA9IGkyY19nZXRfYWRhcHRlcigxKTsKKwlmb3IgKGsgPSAwOyBhICYmIGsgPCAzOyBrKyspIHsKKwkJbXNnLmFkZHIgPSAweDZkOworCQltc2cuYnVmID0gJmxjZF9iYWNrbGlnaHRfc2VxW2tdWzBdOworCQltc2cubGVuID0gMjsKKwkJbXNnLmZsYWdzID0gMDsKKwkJaWYgKGkyY190cmFuc2ZlcihhLCAmbXNnLCAxKSAhPSAxKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBsY2RfYmFja2xpZ2h0X3Jlc2V0KHZvaWQpCit7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUMjM1LCAwKTsKKwltZGVsYXkoMjQpOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVDIzNSwgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vbih2b2lkICpib2FyZF9kYXRhLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlsY2RfYmFja2xpZ2h0X29uKCk7Cit9CisKK3N0YXRpYyB2b2lkIGxjZF9vZmYodm9pZCAqYm9hcmRfZGF0YSkKK3sKKwlsY2RfYmFja2xpZ2h0X3Jlc2V0KCk7Cit9CisKKy8qIExDREMwICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBsY2RjMF9tb2Rlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIlI2MzMwMihRSEQpIiwKKwkJLnhyZXMJCT0gNTQ0LAorCQkueXJlcwkJPSA5NjEsCisJCS5sZWZ0X21hcmdpbgk9IDcyLAorCQkucmlnaHRfbWFyZ2luCT0gNjAwLAorCQkuaHN5bmNfbGVuCT0gMTYsCisJCS51cHBlcl9tYXJnaW4JPSA4LAorCQkubG93ZXJfbWFyZ2luCT0gOCwKKwkJLnZzeW5jX2xlbgk9IDIsCisJCS5zeW5jCQk9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfSE9SX0hJR0hfQUNULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9sY2RjX2luZm8gbGNkYzBfaW5mbyA9IHsKKwkuY2xvY2tfc291cmNlID0gTENEQ19DTEtfUEVSSVBIRVJBTCwKKwkuY2hbMF0gPSB7CisJCS5jaGFuID0gTENEQ19DSEFOX01BSU5MQ0QsCisJCS5pbnRlcmZhY2VfdHlwZSA9IFJHQjI0LAorCQkuY2xvY2tfZGl2aWRlciA9IDEsCisJCS5mbGFncyA9IExDRENfRkxBR1NfRFdQT0wsCisJCS5sY2Rfc2l6ZV9jZmcud2lkdGggPSA0NCwKKwkJLmxjZF9zaXplX2NmZy5oZWlnaHQgPSA3OSwKKwkJLmJwcCA9IDE2LAorCQkubGNkX2NmZyA9IGxjZGMwX21vZGVzLAorCQkubnVtX2NmZyA9IEFSUkFZX1NJWkUobGNkYzBfbW9kZXMpLAorCQkuYm9hcmRfY2ZnID0geworCQkJLmRpc3BsYXlfb24gPSBsY2Rfb24sCisJCQkuZGlzcGxheV9vZmYgPSBsY2Rfb2ZmLAorCQl9LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGNkYzBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJMQ0RDMCIsCisJCS5zdGFydAk9IDB4ZmU5NDAwMDAsIC8qIFA0LW9ubHkgc3BhY2UgKi8KKwkJLmVuZAk9IDB4ZmU5NDNmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBpbnRjc19ldnQyaXJxKDB4NTgwKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxjZGMwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfbW9iaWxlX2xjZGNfZmIiLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsY2RjMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGxjZGMwX3Jlc291cmNlcywKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxjZGMwX2luZm8sCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAorCX0sCit9OworCisvKiBNSVBJLURTSSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtaXBpZHNpMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCAgPSAweGZlYWIwMDAwLAorCQkuZW5kICAgID0gMHhmZWFiM2ZmZiwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgID0gMHhmZWFiNDAwMCwKKwkJLmVuZCAgICA9IDB4ZmVhYjdmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9taXBpX2RzaV9pbmZvIG1pcGlkc2kwX2luZm8gPSB7CisJLmRhdGFfZm9ybWF0CT0gTUlQSV9SR0I4ODgsCisJLmxjZF9jaGFuCT0gJmxjZGMwX2luZm8uY2hbMF0sCisJLnZzeW53X29mZnNldAk9IDIwLAorCS5jbGtzcmMJCT0gMSwKKwkuZmxhZ3MJCT0gU0hfTUlQSV9EU0lfSFNBQk0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBtaXBpZHNpMF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gInNoLW1pcGktZHNpIiwKKwkubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG1pcGlkc2kwX3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gbWlwaWRzaTBfcmVzb3VyY2VzLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbWlwaWRzaTBfaW5mbywKKwl9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFnNWV2bV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmZXRoX2RldmljZSwKIAkma2V5c2NfZGV2aWNlLAogCSZmc2lfZGV2aWNlLAogCSZtbWNfZGV2aWNlLAorCSZpcmRhX2RldmljZSwKKwkmbGNkYzBfZGV2aWNlLAorCSZtaXBpZHNpMF9kZXZpY2UsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFnNWV2bV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTIyNCw2ICszNzksOCBAQAogCV9fcmF3X3dyaXRldyhfX3Jhd19yZWFkdyhQSU5UQ1IwQSkgfCAoMjw8MTApLCBQSU5UQ1IwQSk7CiB9CiAKKyNkZWZpbmUgRFNJMFBIWUNSCTB4ZTYxNTAwNmMKKwogc3RhdGljIHZvaWQgX19pbml0IGFnNWV2bV9pbml0KHZvaWQpCiB7CiAJc2g3M2EwX3Bpbm11eF9pbml0KCk7CkBAIC0yODcsNiArNDQ0LDI2IEBACiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRlNJQUlTTEQsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0ZTSUFPU0xELCBOVUxMKTsKIAorCS8qIElyREEgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQxX0lSREFfT1VULCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQyX0lSREFfSU4sICBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QT1JUMjQzX0lSREFfRklSU0VMLCBOVUxMKTsKKworCS8qIExDRCBwYW5lbCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQyMTcsIE5VTEwpOyAvKiBSRVNFVCAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQyMTcsIDApOworCW1kZWxheSgxKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1BPUlQyMTcsIDEpOworCW1kZWxheSgxMDApOworCisJLyogTENEIGJhY2tsaWdodCBjb250cm9sbGVyICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDIzNSwgTlVMTCk7IC8qIFJFU0VUICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDIzNSwgMCk7CisJbGNkX2JhY2tsaWdodF9yZXNldCgpOworCisJLyogTUlQSS1EU0kgY2xvY2sgc2V0dXAgKi8KKwlfX3Jhd193cml0ZWwoMHgyYTgwOTAxMCwgRFNJMFBIWUNSKTsKKwogI2lmZGVmIENPTkZJR19DQUNIRV9MMlgwCiAJLyogU2hhcmVkIGF0dHJpYnV0ZSBvdmVycmlkZSBlbmFibGUsIDY0Syo4d2F5ICovCiAJbDJ4MF9pbml0KF9faW8oMHhmMDEwMDAwMCksIDB4MDA0NjAwMDAsIDB4YzIwMDBmZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtYXA0ZXZiLmMKaW5kZXggM2NmMDk1MS4uODFkNjUzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jCkBAIC0xMzAzLDcgKzEzMDMsNyBAQAogCiAJbGNkY19pbmZvLmNsb2NrX3NvdXJjZQkJCT0gTENEQ19DTEtfQlVTOwogCWxjZGNfaW5mby5jaFswXS5pbnRlcmZhY2VfdHlwZQkJPSBSR0IxODsKLQlsY2RjX2luZm8uY2hbMF0uY2xvY2tfZGl2aWRlcgkJPSAyOworCWxjZGNfaW5mby5jaFswXS5jbG9ja19kaXZpZGVyCQk9IDM7CiAJbGNkY19pbmZvLmNoWzBdLmZsYWdzCQkJPSAwOwogCWxjZGNfaW5mby5jaFswXS5sY2Rfc2l6ZV9jZmcud2lkdGgJPSAxNTI7CiAJbGNkY19pbmZvLmNoWzBdLmxjZF9zaXplX2NmZy5oZWlnaHQJPSA5MTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYwppbmRleCA2ODZiMzA0Li5lZjQ2MTNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nM2V2bS5jCkBAIC0zNDcsNyArMzQ3LDYgQEAKIAlncGlvX3JlcXVlc3QoR1BJT19GTl9JUkRBX09VVCwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9JTiwgTlVMTCk7CiAJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fSVJEQV9GSVJTRUwsIE5VTEwpOwotCXNldF9pcnFfdHlwZShldnQyaXJxKDB4NDgwKSwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKIAogCXNoNzM2N19hZGRfc3RhbmRhcmRfZGV2aWNlcygpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLW1hY2tlcmVsLmMKaW5kZXggN2IxNWQyMS4uMTY1N2VhYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1tYWNrZXJlbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtbWFja2VyZWwuYwpAQCAtMTY5LDkgKzE2OSw4IEBACiAgKglTVzEJfAlTVzMzCiAgKgkJfCBiaXQxIHwgYml0MiB8IGJpdDMgfCBiaXQ0CiAgKiAtLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0KLSAqIE1NQzAJICBPRkYJfCAgT0ZGIHwgIE9OICB8ICBPTiAgfCAgWAotICogTU1DMQkgIE9OCXwgIE9GRiB8ICBPTiAgfCAgWCAgIHwgT04KLSAqIFNESEkxICBPRkYJfCAgT04gIHwgICBYICB8ICBPRkYgfCBPTgorICogTU1DMCAgIE9GRgl8ICBPRkYgfCAgIFggIHwgIE9OICB8ICBYICAgICAgIChVc2UgTU1DSUYpCisgKiBTREhJMSAgT0ZGCXwgIE9OICB8ICAgWCAgfCAgT0ZGIHwgIFggICAgICAgKFVzZSBNRkRfU0hfTU9CSUxFX1NESEkpCiAgKgogICovCiAKQEAgLTMwNCw3ICszMDMsNyBAQAogCQkubGNkX2NmZyA9IG1hY2tlcmVsX2xjZGNfbW9kZXMsCiAJCS5udW1fY2ZnID0gQVJSQVlfU0laRShtYWNrZXJlbF9sY2RjX21vZGVzKSwKIAkJLmludGVyZmFjZV90eXBlCQk9IFJHQjI0LAotCQkuY2xvY2tfZGl2aWRlcgkJPSAyLAorCQkuY2xvY2tfZGl2aWRlcgkJPSAzLAogCQkuZmxhZ3MJCQk9IDAsCiAJCS5sY2Rfc2l6ZV9jZmcud2lkdGgJPSAxNTIsCiAJCS5sY2Rfc2l6ZV9jZmcuaGVpZ2h0CT0gOTEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNzIuYwppbmRleCA5YWE4ZDY4Li5lOTczMWI1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM3Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3MzcyLmMKQEAgLTIzNCw3ICsyMzQsOSBAQAogCiAJdmFsdWUgPSBfX3Jhd19yZWFkbChQTExDMkNSKSAmIH4oMHgzZiA8PCAyNCk7CiAKLQlfX3Jhd193cml0ZWwoKHZhbHVlICYgfjB4ODAwMDAwMDApIHwgKChpZHggKyAxOSkgPDwgMjQpLCBQTExDMkNSKTsKKwlfX3Jhd193cml0ZWwodmFsdWUgfCAoKGlkeCArIDE5KSA8PCAyNCksIFBMTEMyQ1IpOworCisJY2xrLT5yYXRlID0gY2xrLT5mcmVxX3RhYmxlW2lkeF0uZnJlcXVlbmN5OwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczYTAuYwppbmRleCA3MjBhNzE0Li43ZTU4OTA0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY2xvY2stc2g3M2EwLmMKQEAgLTExOCw4ICsxMTgsMTYgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG11bHQgPSAxOwogCi0JaWYgKF9fcmF3X3JlYWRsKFBMTEVDUikgJiAoMSA8PCBjbGstPmVuYWJsZV9iaXQpKQorCWlmIChfX3Jhd19yZWFkbChQTExFQ1IpICYgKDEgPDwgY2xrLT5lbmFibGVfYml0KSkgewogCQltdWx0ID0gKCgoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSA+PiAyNCkgJiAweDNmKSArIDEpOworCQkvKiBoYW5kbGUgQ0ZHIGJpdCBmb3IgUExMMSBhbmQgUExMMiAqLworCQlzd2l0Y2ggKGNsay0+ZW5hYmxlX2JpdCkgeworCQljYXNlIDE6CisJCWNhc2UgMjoKKwkJCWlmIChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYgKDEgPDwgMjApKQorCQkJCW11bHQgKj0gMjsKKwkJfQorCX0KIAogCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAqIG11bHQ7CiB9CkBAIC0yMTIsNyArMjIwLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRpdjRfY2xrc1tESVY0X05SXSA9IHsKIAlbRElWNF9JXSA9IERJVjQoRlJRQ1JBLCAyMCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCiAJW0RJVjRfWkddID0gRElWNChGUlFDUkEsIDE2LCAweGJmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKLQlbRElWNF9NM10gPSBESVY0KEZSUUNSQSwgOCwgMHhmZmYsIENMS19FTkFCTEVfT05fSU5JVCksCisJW0RJVjRfTTNdID0gRElWNChGUlFDUkEsIDEyLCAweGZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9CXSA9IERJVjQoRlJRQ1JBLCA4LCAweGZmZiwgQ0xLX0VOQUJMRV9PTl9JTklUKSwKIAlbRElWNF9NMV0gPSBESVY0KEZSUUNSQSwgNCwgMHhmZmYsIDApLAogCVtESVY0X00yXSA9IERJVjQoRlJRQ1JBLCAwLCAweGZmZiwgMCksCkBAIC0yNTUsMTAgKzI2MywxMCBAQAogfTsKIAogZW51bSB7IE1TVFAwMDEsCi0JTVNUUDEyNSwgTVNUUDExNiwKKwlNU1RQMTI5LCBNU1RQMTI4LCBNU1RQMTI3LCBNU1RQMTI2LCBNU1RQMTI1LCBNU1RQMTE4LCBNU1RQMTE2LCBNU1RQMTAwLAogCU1TVFAyMTksCiAJTVNUUDIwNywgTVNUUDIwNiwgTVNUUDIwNCwgTVNUUDIwMywgTVNUUDIwMiwgTVNUUDIwMSwgTVNUUDIwMCwKLQlNU1RQMzMxLCBNU1RQMzI5LCBNU1RQMzIzLCBNU1RQMzEyLAorCU1TVFAzMzEsIE1TVFAzMjksIE1TVFAzMjUsIE1TVFAzMjMsIE1TVFAzMTIsCiAJTVNUUDQxMSwgTVNUUDQxMCwgTVNUUDQwMywKIAlNU1RQX05SIH07CiAKQEAgLTI2Nyw4ICsyNzUsMTQgQEAKIAogc3RhdGljIHN0cnVjdCBjbGsgbXN0cF9jbGtzW01TVFBfTlJdID0gewogCVtNU1RQMDAxXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjAsIDEsIDApLCAvKiBJSUMyICovCisJW01TVFAxMjldID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAyOSwgMCksIC8qIENFVTEgKi8KKwlbTVNUUDEyOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI4LCAwKSwgLyogQ1NJMi1SWDEgKi8KKwlbTVNUUDEyN10gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDI3LCAwKSwgLyogQ0VVMCAqLworCVtNU1RQMTI2XSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0JdLCBTTVNUUENSMSwgMjYsIDApLCAvKiBDU0kyLVJYMCAqLwogCVtNU1RQMTI1XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IxLCAyNSwgMCksIC8qIFRNVTAgKi8KKwlbTVNUUDExOF0gPSBNU1RQKCZkaXY0X2Nsa3NbRElWNF9CXSwgU01TVFBDUjEsIDE4LCAwKSwgLyogRFNJVFgwICovCiAJW01TVFAxMTZdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSMSwgMTYsIDApLCAvKiBJSUMwICovCisJW01TVFAxMDBdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfQl0sIFNNU1RQQ1IxLCAwLCAwKSwgLyogTENEQzAgKi8KIAlbTVNUUDIxOV0gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgMTksIDApLCAvKiBTQ0lGQTcgKi8KIAlbTVNUUDIwN10gPSBNU1RQKCZkaXY2X2Nsa3NbRElWNl9TVUJdLCBTTVNUUENSMiwgNywgMCksIC8qIFNDSUZBNSAqLwogCVtNU1RQMjA2XSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCA2LCAwKSwgLyogU0NJRkIgKi8KQEAgLTI3OSw2ICsyOTMsNyBAQAogCVtNU1RQMjAwXSA9IE1TVFAoJmRpdjZfY2xrc1tESVY2X1NVQl0sIFNNU1RQQ1IyLCAwLCAwKSwgLyogU0NJRkE0ICovCiAJW01TVFAzMzFdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDMxLCAwKSwgLyogU0NJRkE2ICovCiAJW01TVFAzMjldID0gTVNUUCgmcl9jbGssIFNNU1RQQ1IzLCAyOSwgMCksIC8qIENNVDEwICovCisJW01TVFAzMjVdID0gTVNUUCgmZGl2Nl9jbGtzW0RJVjZfU1VCXSwgU01TVFBDUjMsIDI1LCAwKSwgLyogSXJEQSAqLwogCVtNU1RQMzIzXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDIzLCAwKSwgLyogSUlDMSAqLwogCVtNU1RQMzEyXSA9IE1TVFAoJmRpdjRfY2xrc1tESVY0X0hQXSwgU01TVFBDUjMsIDEyLCAwKSwgLyogTU1DSUYwICovCiAJW01TVFA0MTFdID0gTVNUUCgmZGl2NF9jbGtzW0RJVjRfSFBdLCBTTVNUUENSNCwgMTEsIDApLCAvKiBJSUMzICovCkBAIC0yODgsMTYgKzMwMywzMiBAQAogCiAjZGVmaW5lIENMS0RFVl9DT05fSUQoX2lkLCBfY2xrKSB7IC5jb25faWQgPSBfaWQsIC5jbGsgPSBfY2xrIH0KICNkZWZpbmUgQ0xLREVWX0RFVl9JRChfaWQsIF9jbGspIHsgLmRldl9pZCA9IF9pZCwgLmNsayA9IF9jbGsgfQorI2RlZmluZSBDTEtERVZfSUNLX0lEKF9jaWQsIF9kaWQsIF9jbGspIHsgLmNvbl9pZCA9IF9jaWQsIC5kZXZfaWQgPSBfZGlkLCAuY2xrID0gX2NsayB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CiAJLyogbWFpbiBjbG9ja3MgKi8KIAlDTEtERVZfQ09OX0lEKCJyX2NsayIsICZyX2NsayksCiAKKwkvKiBESVY2IGNsb2NrcyAqLworCUNMS0RFVl9DT05fSUQoInZjazFfY2xrIiwgJmRpdjZfY2xrc1tESVY2X1ZDSzFdKSwKKwlDTEtERVZfQ09OX0lEKCJ2Y2syX2NsayIsICZkaXY2X2Nsa3NbRElWNl9WQ0syXSksCisJQ0xLREVWX0NPTl9JRCgidmNrM19jbGsiLCAmZGl2Nl9jbGtzW0RJVjZfVkNLM10pLAorCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjAiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaXRfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJVF0pLAorCUNMS0RFVl9JQ0tfSUQoImRzaTBwX2NsayIsICJzaC1taXBpLWRzaS4wIiwgJmRpdjZfY2xrc1tESVY2X0RTSTBQXSksCisJQ0xLREVWX0lDS19JRCgiZHNpMXBfY2xrIiwgInNoLW1pcGktZHNpLjEiLCAmZGl2Nl9jbGtzW0RJVjZfRFNJMVBdKSwKKwogCS8qIE1TVFAzMiBjbG9ja3MgKi8KIAlDTEtERVZfREVWX0lEKCJpMmMtc2hfbW9iaWxlLjIiLCAmbXN0cF9jbGtzW01TVFAwMDFdKSwgLyogSTJDMiAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9jZXUuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOV0pLCAvKiBDRVUxICovCisJQ0xLREVWX0RFVl9JRCgic2gtbW9iaWxlLWNzaTIuMSIsICZtc3RwX2Nsa3NbTVNUUDEyOF0pLCAvKiBDU0kyLVJYMSAqLworCUNMS0RFVl9ERVZfSUQoInNoX21vYmlsZV9jZXUuMCIsICZtc3RwX2Nsa3NbTVNUUDEyN10pLCAvKiBDRVUwICovCisJQ0xLREVWX0RFVl9JRCgic2gtbW9iaWxlLWNzaTIuMCIsICZtc3RwX2Nsa3NbTVNUUDEyNl0pLCAvKiBDU0kyLVJYMCAqLwogCUNMS0RFVl9ERVZfSUQoInNoX3RtdS4wIiwgJm1zdHBfY2xrc1tNU1RQMTI1XSksIC8qIFRNVTAwICovCiAJQ0xLREVWX0RFVl9JRCgic2hfdG11LjEiLCAmbXN0cF9jbGtzW01TVFAxMjVdKSwgLyogVE1VMDEgKi8KKwlDTEtERVZfREVWX0lEKCJzaC1taXBpLWRzaS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE4XSksIC8qIERTSVRYICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4wIiwgJm1zdHBfY2xrc1tNU1RQMTE2XSksIC8qIEkyQzAgKi8KKwlDTEtERVZfREVWX0lEKCJzaF9tb2JpbGVfbGNkY19mYi4wIiwgJm1zdHBfY2xrc1tNU1RQMTAwXSksIC8qIExDREMwICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjciLCAmbXN0cF9jbGtzW01TVFAyMTldKSwgLyogU0NJRkE3ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjUiLCAmbXN0cF9jbGtzW01TVFAyMDddKSwgLyogU0NJRkE1ICovCiAJQ0xLREVWX0RFVl9JRCgic2gtc2NpLjgiLCAmbXN0cF9jbGtzW01TVFAyMDZdKSwgLyogU0NJRkIgKi8KQEAgLTMwOCw2ICszMzksNyBAQAogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS40IiwgJm1zdHBfY2xrc1tNU1RQMjAwXSksIC8qIFNDSUZBNCAqLwogCUNMS0RFVl9ERVZfSUQoInNoLXNjaS42IiwgJm1zdHBfY2xrc1tNU1RQMzMxXSksIC8qIFNDSUZBNiAqLwogCUNMS0RFVl9ERVZfSUQoInNoX2NtdC4xMCIsICZtc3RwX2Nsa3NbTVNUUDMyOV0pLCAvKiBDTVQxMCAqLworCUNMS0RFVl9ERVZfSUQoInNoX2lyZGEuMCIsICZtc3RwX2Nsa3NbTVNUUDMyNV0pLCAvKiBJckRBICovCiAJQ0xLREVWX0RFVl9JRCgiaTJjLXNoX21vYmlsZS4xIiwgJm1zdHBfY2xrc1tNU1RQMzIzXSksIC8qIEkyQzEgKi8KIAlDTEtERVZfREVWX0lEKCJzaF9tbWNpZi4wIiwgJm1zdHBfY2xrc1tNU1RQMzEyXSksIC8qIE1NQ0lGMCAqLwogCUNMS0RFVl9ERVZfSUQoImkyYy1zaF9tb2JpbGUuMyIsICZtc3RwX2Nsa3NbTVNUUDQxMV0pLCAvKiBJMkMzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLWFwNGV2Yi50eHQgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLWFwNGV2Yi50eHQKaW5kZXggZWZkMzY4Ny4uMzAyOWFiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1hcDRldmIudHh0CisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hlYWQtYXA0ZXZiLnR4dApAQCAtNiwxMyArNiwxMCBAQAogRVcgMHhFNjAyMDAwNCwgMHhBNTAwCiBFVyAweEU2MDMwMDA0LCAweEE1MDAKIAotREQgMHgwMTAwMTAwMCwgMHgwMTAwMTAwMAotCiBMSVNUICJHUElPIFNldHRpbmciCiBFQiAweEU2MDUxMDEzLCAweEEyCiAKIExJU1QgIkNQRyIKLUVEIDB4RTYxNTAwODAsIDB4MDAwMDAxODAKIEVEIDB4RTYxNTAwQzAsIDB4MDAwMDAwMDIKIAogV0FJVCAxLCAweEZFNDAwMDlDCkBAIC0zNyw2ICszNCw5IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCitMSVNUICJTVUIvVVNCQ2xrIgorRUQgMHhFNjE1MDA4MCwgMHgwMDAwMDE4MAorCiBMSVNUICJCU0MiCiBFRCAweEZFQzEwMDAwLCAweDAwRTAwMDFCCiAKQEAgLTUzLDcgKzUzLDcgQEAKIEVEIDB4RkU0MDAwNEMsIDB4MDAxMTAyMDkKIEVEIDB4RkU0MDAwMTAsIDB4MDAwMDAwODcKIAotV0FJVCAxMCwgMHhGRTQwMDA5QworV0FJVCAzMCwgMHhGRTQwMDA5QwogCiBFRCAweEZFNDAwMDg0LCAweDAwMDAwMDNGCiBFQiAweEZFNTAwMDAwLCAweDAwCkBAIC04NCw3ICs4NCw3IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCi1FRCAweEU2MTUwMzU0LCAweDAwMDAwMDAyCitFRCAweEZFNDAwMzU0LCAweDAxQUQ4MDAyCiAKIExJU1QgIlNDSUYwIC0gU2VyaWFsIHBvcnQgZm9yIGVhcmx5cHJpbnRrIgogRUIgMHhFNjA1MzA5OCwgMHgxMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGVhZC1tYWNrZXJlbC50eHQgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLW1hY2tlcmVsLnR4dAppbmRleCBlZmQzNjg3Li4zMDI5YWJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLW1hY2tlcmVsLnR4dAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9oZWFkLW1hY2tlcmVsLnR4dApAQCAtNiwxMyArNiwxMCBAQAogRVcgMHhFNjAyMDAwNCwgMHhBNTAwCiBFVyAweEU2MDMwMDA0LCAweEE1MDAKIAotREQgMHgwMTAwMTAwMCwgMHgwMTAwMTAwMAotCiBMSVNUICJHUElPIFNldHRpbmciCiBFQiAweEU2MDUxMDEzLCAweEEyCiAKIExJU1QgIkNQRyIKLUVEIDB4RTYxNTAwODAsIDB4MDAwMDAxODAKIEVEIDB4RTYxNTAwQzAsIDB4MDAwMDAwMDIKIAogV0FJVCAxLCAweEZFNDAwMDlDCkBAIC0zNyw2ICszNCw5IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCitMSVNUICJTVUIvVVNCQ2xrIgorRUQgMHhFNjE1MDA4MCwgMHgwMDAwMDE4MAorCiBMSVNUICJCU0MiCiBFRCAweEZFQzEwMDAwLCAweDAwRTAwMDFCCiAKQEAgLTUzLDcgKzUzLDcgQEAKIEVEIDB4RkU0MDAwNEMsIDB4MDAxMTAyMDkKIEVEIDB4RkU0MDAwMTAsIDB4MDAwMDAwODcKIAotV0FJVCAxMCwgMHhGRTQwMDA5QworV0FJVCAzMCwgMHhGRTQwMDA5QwogCiBFRCAweEZFNDAwMDg0LCAweDAwMDAwMDNGCiBFQiAweEZFNTAwMDAwLCAweDAwCkBAIC04NCw3ICs4NCw3IEBACiAKIFdBSVQgMSwgMHhGRTQwMDA5QwogCi1FRCAweEU2MTUwMzU0LCAweDAwMDAwMDAyCitFRCAweEZFNDAwMzU0LCAweDAxQUQ4MDAyCiAKIExJU1QgIlNDSUYwIC0gU2VyaWFsIHBvcnQgZm9yIGVhcmx5cHJpbnRrIgogRUIgMHhFNjA1MzA5OCwgMHgxMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYtYXA0ZWIuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLWFwNGViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThkMDJiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLWFwNGViLmgKQEAgLTAsMCArMSwyOSBAQAorI2lmbmRlZiBNTUNJRl9BUDRFQl9ICisjZGVmaW5lIE1NQ0lGX0FQNEVCX0gKKworI2RlZmluZSBQT1JUMTg1Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiOQorI2RlZmluZSBQT1JUMTg2Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiYQorI2RlZmluZSBQT1JUMTg3Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiYgorI2RlZmluZSBQT1JUMTg4Q1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MjBiYworCisjZGVmaW5lIFBPUlRSMTkxXzE2MERSICh2b2lkIF9faW9tZW0gKikweGU2MDU2MDE0CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl9pbml0X3Byb2dyZXNzKHZvaWQpCit7CisgICAgICAgLyogSW5pdGlhbGlzZSBMRURTMS00CisgICAgICAgICogcmVnaXN0ZXJzOiBQT1JUMTg1Q1ItUE9SVDE4OENSIChMRUQxLUxFRDQgQ29udHJvbCkKKyAgICAgICAgKiB2YWx1ZTogICAgIDB4MTAgLSBlbmFibGUgb3V0cHV0CisgICAgICAgICovCisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODVDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODZDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODdDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxODhDUik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtbWNpZl91cGRhdGVfcHJvZ3Jlc3MoaW50IG4pCit7CisJX19yYXdfd3JpdGVsKChfX3Jhd19yZWFkbChQT1JUUjE5MV8xNjBEUikgJiB+KDB4ZiA8PCAyNSkpIHwKKwkJICAgICAoMSA8PCAoMjUgKyBuKSksIFBPUlRSMTkxXzE2MERSKTsKK30KKworI2VuZGlmIC8qIE1NQ0lGX0FQNEVCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL21tY2lmLW1hY2tlcmVsLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1tYWNrZXJlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNGY2OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi1tYWNrZXJlbC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgTU1DSUZfTUFDS0VSRUxfSAorI2RlZmluZSBNTUNJRl9NQUNLRVJFTF9ICisKKyNkZWZpbmUgUE9SVDBDUiAgICAgICh2b2lkIF9faW9tZW0gKikweGU2MDUxMDAwCisjZGVmaW5lIFBPUlQxQ1IgICAgICAodm9pZCBfX2lvbWVtICopMHhlNjA1MTAwMQorI2RlZmluZSBQT1JUMkNSICAgICAgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTEwMDIKKyNkZWZpbmUgUE9SVDE1OUNSICAgICh2b2lkIF9faW9tZW0gKikweGU2MDUwMDlmCisKKyNkZWZpbmUgUE9SVFIwMzFfMDAwRFIgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTUwMDAKKyNkZWZpbmUgUE9SVEwxNTlfMTI4RFIgKHZvaWQgX19pb21lbSAqKTB4ZTYwNTQwMTAKKworc3RhdGljIGlubGluZSB2b2lkIG1tY2lmX2luaXRfcHJvZ3Jlc3Modm9pZCkKK3sKKyAgICAgICAvKiBJbml0aWFsaXNlIExFRFMwLTMKKyAgICAgICAgKiByZWdpc3RlcnM6IFBPUlQwQ1ItUE9SVDJDUixQT1JUMTU5Q1IgKExFRDAtTEVEMyBDb250cm9sKQorICAgICAgICAqIHZhbHVlOiAgICAgMHgxMCAtIGVuYWJsZSBvdXRwdXQKKyAgICAgICAgKi8KKyAgICAgICBfX3Jhd193cml0ZWIoMHgxMCwgUE9SVDBDUik7CisgICAgICAgX19yYXdfd3JpdGViKDB4MTAsIFBPUlQxQ1IpOworICAgICAgIF9fcmF3X3dyaXRlYigweDEwLCBQT1JUMkNSKTsKKyAgICAgICBfX3Jhd193cml0ZWIoMHgxMCwgUE9SVDE1OUNSKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1tY2lmX3VwZGF0ZV9wcm9ncmVzcyhpbnQgbikKK3sKKwl1bnNpZ25lZCBhID0gMCwgYiA9IDA7CisKKwlpZiAobiA8IDMpCisJCWEgPSAxIDw8IG47CisJZWxzZQorCQliID0gMSA8PCAzMTsKKworCV9fcmF3X3dyaXRlbCgoX19yYXdfcmVhZGwoUE9SVFIwMzFfMDAwRFIpICYgfjB4NykgfCBhLAorCQkgICAgIFBPUlRSMDMxXzAwMERSKTsKKwlfX3Jhd193cml0ZWwoKF9fcmF3X3JlYWRsKFBPUlRMMTU5XzEyOERSKSAmIH4oMSA8PCAzMSkpIHwgYiwKKwkJICAgICBQT1JUTDE1OV8xMjhEUik7Cit9CisKKyNlbmRpZiAvKiBNTUNJRl9NQUNLRVJFTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tbWNpZi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGRjMzI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbW1jaWYuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIE1NQ0lGX0gKKyNkZWZpbmUgTU1DSUZfSAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgkJYm9hcmQgc3BlY2lmaWMgc2V0dGluZ3MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBDT05GSUdfTUFDSF9BUDRFVkIKKyNpbmNsdWRlICJtYWNoL21tY2lmLWFwNGViLmgiCisjZWxpZiBDT05GSUdfTUFDSF9NQUNLRVJFTAorI2luY2x1ZGUgIm1hY2gvbW1jaWYtbWFja2VyZWwuaCIKKyNlbHNlCisjZXJyb3IgInVuc3VwcG9ydGVkIGJvYXJkLiIKKyNlbmRpZgorCisjZW5kaWYgLyogTU1DSUZfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCmluZGV4IGY3OGExZWEuLmNhNWY5ZDEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzcyLmMKQEAgLTM2NSw2ICszNjUsNyBAQAogCiBlbnVtIHsKIAlVTlVTRURfSU5UQ1MgPSAwLAorCUVOQUJMRURfSU5UQ1MsCiAKIAlJTlRDUywKIApAQCAtNDEzLDcgKzQxNCw3IEBACiAJQ01UNCwKIAlEU0lUWDFfRFNJVFgxXzAsCiAJRFNJVFgxX0RTSVRYMV8xLAotCS8qIE1GSVMyICovCisJTUZJUzJfSU5UQ1MsIC8qIFByaW9yaXR5IGFsd2F5cyBlbmFibGVkIHVzaW5nIEVOQUJMRURfSU5UQ1MgKi8KIAlDUE9SVFMyUiwKIAkvKiBDRUMgKi8KIAlKUFU2RSwKQEAgLTQ3Nyw3ICs0NzgsNyBAQAogCUlOVENTX1ZFQ1QoQ01UNCwgMHgxOTgwKSwKIAlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMCwgMHgxOWEwKSwKIAlJTlRDU19WRUNUKERTSVRYMV9EU0lUWDFfMSwgMHgxOWMwKSwKLQkvKiBNRklTMiAqLworCUlOVENTX1ZFQ1QoTUZJUzJfSU5UQ1MsIDB4MWEwMCksCiAJSU5UQ1NfVkVDVChDUE9SVFMyUiwgMHgxYTIwKSwKIAkvKiBDRUMgKi8KIAlJTlRDU19WRUNUKEpQVTZFLCAweDFhODApLApAQCAtNTQzLDcgKzU0NCw3IEBACiAJICB7IDAsIFRNVTFfVFVOSTIsIFRNVTFfVFVOSTEsIFRNVTFfVFVOSTAsCiAJICAgIENNVDQsIERTSVRYMV9EU0lUWDFfMCwgRFNJVFgxX0RTSVRYMV8xLCAwIH0gfSwKIAl7IDB4ZmZkNTAxOWMsIDB4ZmZkNTAxZGMsIDgsIC8qIElNUjdTQTMgLyBJTUNSN1NBMyAqLwotCSAgeyAwLCBDUE9SVFMyUiwgMCwgMCwKKwkgIHsgTUZJUzJfSU5UQ1MsIENQT1JUUzJSLCAwLCAwLAogCSAgICBKUFU2RSwgMCwgMCwgMCB9IH0sCiAJeyAweGZmZDIwMTA0LCAwLCAxNiwgLyogSU5UQU1BU0sgKi8KIAkgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKQEAgLTU3MSw3ICs1NzIsOCBAQAogCXsgMHhmZmQ1MDAzMCwgMCwgMTYsIDQsIC8qIElQUk1TMyAqLyB7IFRNVTEsIDAsIDAsIDAgfSB9LAogCXsgMHhmZmQ1MDAzNCwgMCwgMTYsIDQsIC8qIElQUk5TMyAqLyB7IENNVDQsIERTSVRYMV9EU0lUWDFfMCwKIAkJCQkJICAgICAgIERTSVRYMV9EU0lUWDFfMSwgMCB9IH0sCi0JeyAweGZmZDUwMDM4LCAwLCAxNiwgNCwgLyogSVBST1MzICovIHsgMCwgQ1BPUlRTMlIsIDAsIDAgfSB9LAorCXsgMHhmZmQ1MDAzOCwgMCwgMTYsIDQsIC8qIElQUk9TMyAqLyB7IEVOQUJMRURfSU5UQ1MsIENQT1JUUzJSLAorCQkJCQkgICAgICAgMCwgMCB9IH0sCiAJeyAweGZmZDUwMDNjLCAwLCAxNiwgNCwgLyogSVBSUFMzICovIHsgSlBVNkUsIDAsIDAsIDAgfSB9LAogfTsKIApAQCAtNTkwLDYgKzU5Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaW50Y19kZXNjIGludGNzX2Rlc2MgX19pbml0ZGF0YSA9IHsKIAkubmFtZSA9ICJzaDczNzItaW50Y3MiLAorCS5mb3JjZV9lbmFibGUgPSBFTkFCTEVEX0lOVENTLAogCS5yZXNvdXJjZSA9IGludGNzX3Jlc291cmNlcywKIAkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW50Y3NfcmVzb3VyY2VzKSwKIAkuaHcgPSBJTlRDX0hXX0RFU0MoaW50Y3NfdmVjdG9ycywgaW50Y3NfZ3JvdXBzLCBpbnRjc19tYXNrX3JlZ2lzdGVycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwppbmRleCAzMjJkOGQ1Li41ZDBlMTUwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzNhMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczYTAuYwpAQCAtMjUyLDEwICsyNTIsMTEgQEAKIAogdm9pZCBfX2luaXQgc2g3M2EwX2luaXRfaXJxKHZvaWQpCiB7Ci0Jdm9pZCBfX2lvbWVtICpnaWNfYmFzZSA9IF9faW8oMHhmMDAwMTAwMCk7CisJdm9pZCBfX2lvbWVtICpnaWNfZGlzdF9iYXNlID0gX19pbygweGYwMDAxMDAwKTsKKwl2b2lkIF9faW9tZW0gKmdpY19jcHVfYmFzZSA9IF9faW8oMHhmMDAwMDEwMCk7CiAJdm9pZCBfX2lvbWVtICppbnRldnRzYSA9IGlvcmVtYXBfbm9jYWNoZSgweGZmZDIwMTAwLCBQQUdFX1NJWkUpOwogCi0JZ2ljX2luaXQoMCwgMjksIGdpY19iYXNlLCBnaWNfYmFzZSk7CisJZ2ljX2luaXQoMCwgMjksIGdpY19kaXN0X2Jhc2UsIGdpY19jcHVfYmFzZSk7CiAKIAlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNzX2Rlc2MpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2Nsb2NrLmMKaW5kZXggMThmZWJmOS4uOThiYzdlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvY2xvY2suYwpAQCAtMTMsOCArMTMsOCBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAKIC8qIHJvb3QgY2xrcyAqLwogLyogMzIgS0h6IG9zY2lsbGF0b3IgY2xvY2sgKi8KQEAgLTM5LDE4ICszOSw0MyBAQAogfTsKIAogLyogY2xvY2sgZGVyaXZlZCBmcm9tIDI0IE1IeiBvc2MgY2xrICovCisvKiBwbGwgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBsbF9jbGtfbWFza3MgcGxsMV9tYXNrcyA9IHsKKwkubW9kZV9tYXNrID0gUExMX01PREVfTUFTSywKKwkubW9kZV9zaGlmdCA9IFBMTF9NT0RFX1NISUZULAorCS5ub3JtX2ZkYmtfbV9tYXNrID0gUExMX05PUk1fRkRCS19NX01BU0ssCisJLm5vcm1fZmRia19tX3NoaWZ0ID0gUExMX05PUk1fRkRCS19NX1NISUZULAorCS5kaXRoX2ZkYmtfbV9tYXNrID0gUExMX0RJVEhfRkRCS19NX01BU0ssCisJLmRpdGhfZmRia19tX3NoaWZ0ID0gUExMX0RJVEhfRkRCS19NX1NISUZULAorCS5kaXZfcF9tYXNrID0gUExMX0RJVl9QX01BU0ssCisJLmRpdl9wX3NoaWZ0ID0gUExMX0RJVl9QX1NISUZULAorCS5kaXZfbl9tYXNrID0gUExMX0RJVl9OX01BU0ssCisJLmRpdl9uX3NoaWZ0ID0gUExMX0RJVl9OX1NISUZULAorfTsKKwogLyogcGxsMSBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBwbGxfY2xrX2NvbmZpZyBwbGwxX2NvbmZpZyA9IHsKIAkubW9kZV9yZWcgPSBQTEwxX0NUUiwKIAkuY2ZnX3JlZyA9IFBMTDFfRlJRLAorCS5tYXNrcyA9ICZwbGwxX21hc2tzLAorfTsKKworLyogcGxsIHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgcGxsX3JhdGVfdGJsIHBsbF9ydGJsW10gPSB7CisJey5tb2RlID0gMCwgLm0gPSAweDg1LCAubiA9IDB4MEMsIC5wID0gMHgxfSwgLyogMjY2IE1IeiAqLworCXsubW9kZSA9IDAsIC5tID0gMHhBNiwgLm4gPSAweDBDLCAucCA9IDB4MX0sIC8qIDMzMiBNSHogKi8KIH07CiAKIC8qIFBMTDEgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfY2xrID0geworCS5mbGFncyA9IEVOQUJMRURfT05fSU5JVCwKIAkucGNsayA9ICZvc2NfMjRtX2NsaywKIAkuZW5fcmVnID0gUExMMV9DVFIsCiAJLmVuX3JlZ19iaXQgPSBQTExfRU5BQkxFLAotCS5yZWNhbGMgPSAmcGxsMV9jbGtfcmVjYWxjLAorCS5jYWxjX3JhdGUgPSAmcGxsX2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJnBsbF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZwbGxfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtwbGxfcnRibCwgQVJSQVlfU0laRShwbGxfcnRibCksIDF9LAogCS5wcml2YXRlX2RhdGEgPSAmcGxsMV9jb25maWcsCiB9OwogCkBAIC03NiwzNiArMTAxLDgzIEBACiAJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAorLyogYWhiIG1hc2tzIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBidXNfY2xrX21hc2tzIGFoYl9tYXNrcyA9IHsKKwkubWFzayA9IFBMTF9IQ0xLX1JBVElPX01BU0ssCisJLnNoaWZ0ID0gUExMX0hDTEtfUkFUSU9fU0hJRlQsCit9OworCiAvKiBhaGIgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19jb25maWcgYWhiX2NvbmZpZyA9IHsKIAkucmVnID0gQ09SRV9DTEtfQ0ZHLAotCS5tYXNrID0gUExMX0hDTEtfUkFUSU9fTUFTSywKLQkuc2hpZnQgPSBQTExfSENMS19SQVRJT19TSElGVCwKKwkubWFza3MgPSAmYWhiX21hc2tzLAorfTsKKworLyogYWhiIHJhdGUgY29uZmlndXJhdGlvbiB0YWJsZSwgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzICovCitzdHJ1Y3QgYnVzX3JhdGVfdGJsIGJ1c19ydGJsW10gPSB7CisJey5kaXYgPSAzfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgNCAqLworCXsuZGl2ID0gMn0sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDMgKi8KKwl7LmRpdiA9IDF9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSAyICovCisJey5kaXYgPSAwfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgMSAqLwogfTsKIAogLyogYWhiIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAogCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmYnVzX2NhbGNfcmF0ZSwKIAkucmVjYWxjID0gJmJ1c19jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZidXNfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtidXNfcnRibCwgQVJSQVlfU0laRShidXNfcnRibCksIDJ9LAogCS5wcml2YXRlX2RhdGEgPSAmYWhiX2NvbmZpZywKIH07CiAKLS8qIHVhcnQgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgdWFydF9jb25maWcgPSB7CisvKiBhdXhpbGlhcnkgc3ludGhlc2l6ZXJzIG1hc2tzICovCitzdGF0aWMgc3RydWN0IGF1eF9jbGtfbWFza3MgYXV4X21hc2tzID0geworCS5lcV9zZWxfbWFzayA9IEFVWF9FUV9TRUxfTUFTSywKKwkuZXFfc2VsX3NoaWZ0ID0gQVVYX0VRX1NFTF9TSElGVCwKKwkuZXExX21hc2sgPSBBVVhfRVExX1NFTCwKKwkuZXEyX21hc2sgPSBBVVhfRVEyX1NFTCwKKwkueHNjYWxlX3NlbF9tYXNrID0gQVVYX1hTQ0FMRV9NQVNLLAorCS54c2NhbGVfc2VsX3NoaWZ0ID0gQVVYX1hTQ0FMRV9TSElGVCwKKwkueXNjYWxlX3NlbF9tYXNrID0gQVVYX1lTQ0FMRV9NQVNLLAorCS55c2NhbGVfc2VsX3NoaWZ0ID0gQVVYX1lTQ0FMRV9TSElGVCwKK307CisKKy8qIHVhcnQgc3ludGggY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgdWFydF9zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IFVBUlRfQ0xLX1NZTlQsCisJLm1hc2tzID0gJmF1eF9tYXNrcywKK307CisKKy8qIGF1eCByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IGF1eF9yYXRlX3RibCBhdXhfcnRibFtdID0geworCS8qIEZvciBQTEwxID0gMzMyIE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDgsIC5lcSA9IDF9LCAvKiA0MS41IE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDQsIC5lcSA9IDF9LCAvKiA4MyBNSHogKi8KKwl7LnhzY2FsZSA9IDEsIC55c2NhbGUgPSAyLCAuZXEgPSAxfSwgLyogMTY2IE1IeiAqLworfTsKKworLyogdWFydCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9zeW50aF9jbGsgPSB7CisJLmVuX3JlZyA9IFVBUlRfQ0xLX1NZTlQsCisJLmVuX3JlZ19iaXQgPSBBVVhfU1lOVF9FTkIsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZhdXhfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmF1eF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2F1eF9ydGJsLCBBUlJBWV9TSVpFKGF1eF9ydGJsKSwgMX0sCisJLnByaXZhdGVfZGF0YSA9ICZ1YXJ0X3N5bnRoX2NvbmZpZywKIH07CiAKIC8qIHVhcnQgcGFyZW50cyAqLwogc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gdWFydF9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJnVhcnRfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKQEAgLTEyMywyNSArMTk1LDM1IEBACiAJLmVuX3JlZ19iaXQgPSBVQVJUX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJnVhcnRfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gVUFSVF9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZhdXhfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJnVhcnRfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGZpcmRhIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGZpcmRhX2NvbmZpZyA9IHsKK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZmlyZGFfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBGSVJEQV9DTEtfU1lOVCwKKwkubWFza3MgPSAmYXV4X21hc2tzLAorfTsKKworLyogZmlyZGEgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZpcmRhX3N5bnRoX2NsayA9IHsKKwkuZW5fcmVnID0gRklSREFfQ0xLX1NZTlQsCisJLmVuX3JlZ19iaXQgPSBBVVhfU1lOVF9FTkIsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZhdXhfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmF1eF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2F1eF9ydGJsLCBBUlJBWV9TSVpFKGF1eF9ydGJsKSwgMX0sCisJLnByaXZhdGVfZGF0YSA9ICZmaXJkYV9zeW50aF9jb25maWcsCiB9OwogCiAvKiBmaXJkYSBwYXJlbnRzICovCiBzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBmaXJkYV9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmZpcmRhX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKIAl9LCB7CiAJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKLQkJLnBjbGtfbWFzayA9IEFVWF9DTEtfUExMM19NQVNLLAotCQkuc2NhbGFibGUgPSAwLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAogCX0sCiB9OwogCkBAIC0xNTksNzMgKzI0MSwxNTUgQEAKIAkuZW5fcmVnX2JpdCA9IEZJUkRBX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJmZpcmRhX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEZJUkRBX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmF1eF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZmlyZGFfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGdwdCBzeW50aGVzaXplciBtYXNrcyAqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX21hc2tzIGdwdF9tYXNrcyA9IHsKKwkubXNjYWxlX3NlbF9tYXNrID0gR1BUX01TQ0FMRV9NQVNLLAorCS5tc2NhbGVfc2VsX3NoaWZ0ID0gR1BUX01TQ0FMRV9TSElGVCwKKwkubnNjYWxlX3NlbF9tYXNrID0gR1BUX05TQ0FMRV9NQVNLLAorCS5uc2NhbGVfc2VsX3NoaWZ0ID0gR1BUX05TQ0FMRV9TSElGVCwKK307CisKKy8qIGdwdCByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IGdwdF9yYXRlX3RibCBncHRfcnRibFtdID0geworCS8qIEZvciBwbGwxID0gMzMyIE1IeiAqLworCXsubXNjYWxlID0gNCwgLm5zY2FsZSA9IDB9LCAvKiA0MS41IE1IeiAqLworCXsubXNjYWxlID0gMiwgLm5zY2FsZSA9IDB9LCAvKiA1NS4zIE1IeiAqLworCXsubXNjYWxlID0gMSwgLm5zY2FsZSA9IDB9LCAvKiA4MyBNSHogKi8KK307CisKKy8qIGdwdDAgc3ludGggY2xrIGNvbmZpZyovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDBfc3ludGhfY29uZmlnID0geworCS5zeW50aF9yZWcgPSBQUlNDMV9DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDBfc3ludGhfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmZ3B0X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZncHRfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtncHRfcnRibCwgQVJSQVlfU0laRShncHRfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF9zeW50aF9jb25maWcsCiB9OwogCiAvKiBncHQgcGFyZW50cyAqLwotc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0X3BjbGtfaW5mb1tdID0geworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0MF9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmdwdDBfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKIC8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLwotc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHRfcGNsa19zZWwgPSB7Ci0JLnBjbGtfaW5mbyA9IGdwdF9wY2xrX2luZm8sCi0JLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdF9wY2xrX2luZm8pLAorc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQwX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQwX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0MF9wY2xrX2luZm8pLAogCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAogCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAotLyogZ3B0MCBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBncHQwX2NvbmZpZyA9IHsKLQkuc3ludGhfcmVnID0gUFJTQzFfQ0xLX0NGRywKLX07Ci0KIC8qIGdwdDAgdGltZXIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDBfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLnBjbGtfc2VsID0gJmdwdDBfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUMF9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDBfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKLS8qIGdwdDEgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgZ3B0MV9jb25maWcgPSB7CisvKiBncHQxIHN5bnRoIGNsayBjb25maWd1cmF0aW9ucyAqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX2NvbmZpZyBncHQxX3N5bnRoX2NvbmZpZyA9IHsKIAkuc3ludGhfcmVnID0gUFJTQzJfQ0xLX0NGRywKKwkubWFza3MgPSAmZ3B0X21hc2tzLAorfTsKKworLyogZ3B0MSBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9zeW50aF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZncHRfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmdwdF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2dwdF9ydGJsLCBBUlJBWV9TSVpFKGdwdF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZncHQxX3N5bnRoX2NvbmZpZywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGdwdDFfcGNsa19pbmZvW10gPSB7CisJeworCQkucGNsayA9ICZncHQxX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKKwl9LCB7CisJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKKwl9LAorfTsKKworLyogZ3B0IHBhcmVudCBzZWxlY3Qgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBjbGtfc2VsIGdwdDFfcGNsa19zZWwgPSB7CisJLnBjbGtfaW5mbyA9IGdwdDFfcGNsa19pbmZvLAorCS5wY2xrX2NvdW50ID0gQVJSQVlfU0laRShncHQxX3BjbGtfaW5mbyksCisJLnBjbGtfc2VsX3JlZyA9IFBFUklQX0NMS19DRkcsCisJLnBjbGtfc2VsX21hc2sgPSBHUFRfQ0xLX01BU0ssCiB9OwogCiAvKiBncHQxIHRpbWVyIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBncHQxX2NsayA9IHsKIAkuZW5fcmVnID0gUEVSSVAxX0NMS19FTkIsCiAJLmVuX3JlZ19iaXQgPSBHUFQxX0NMS19FTkIsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkucGNsa19zZWwgPSAmZ3B0MV9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQxX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0MV9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAotLyogZ3B0MiBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBncHQyX2NvbmZpZyA9IHsKKy8qIGdwdDIgc3ludGggY2xrIGNvbmZpZ3VyYXRpb25zICovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDJfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBQUlNDM19DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQxIHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHQyX3N5bnRoX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmdwdF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmZ3B0X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7Z3B0X3J0YmwsIEFSUkFZX1NJWkUoZ3B0X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmdwdDJfc3ludGhfY29uZmlnLAorfTsKKworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0Ml9wY2xrX2luZm9bXSA9IHsKKwl7CisJCS5wY2xrID0gJmdwdDJfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAorCX0sIHsKKwkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAorCX0sCit9OworCisvKiBncHQgcGFyZW50IHNlbGVjdCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0Ml9wY2xrX3NlbCA9IHsKKwkucGNsa19pbmZvID0gZ3B0Ml9wY2xrX2luZm8sCisJLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdDJfcGNsa19pbmZvKSwKKwkucGNsa19zZWxfcmVnID0gUEVSSVBfQ0xLX0NGRywKKwkucGNsa19zZWxfbWFzayA9IEdQVF9DTEtfTUFTSywKIH07CiAKIC8qIGdwdDIgdGltZXIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfY2xrID0gewogCS5lbl9yZWcgPSBQRVJJUDFfQ0xLX0VOQiwKIAkuZW5fcmVnX2JpdCA9IEdQVDJfQ0xLX0VOQiwKLQkucGNsa19zZWwgPSAmZ3B0X3BjbGtfc2VsLAorCS5wY2xrX3NlbCA9ICZncHQyX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEdQVDJfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZncHQyX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCiAvKiBjbG9jayBkZXJpdmVkIGZyb20gcGxsMyBjbGsgKi8KQEAgLTI0NSwyNiArNDA5LDI3IEBACiAJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAotLyogY2xjZCBjbG9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgY2xjZF9jbGsgPSB7Ci0JLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCi0JLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKKy8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhaGIgY2xrICovCisvKiBhcGIgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGJ1c19jbGtfbWFza3MgYXBiX21hc2tzID0geworCS5tYXNrID0gSENMS19QQ0xLX1JBVElPX01BU0ssCisJLnNoaWZ0ID0gSENMS19QQ0xLX1JBVElPX1NISUZULAogfTsKIAotLyogY2xvY2sgZGVyaXZlZCBmcm9tIGFoYiBjbGsgKi8KIC8qIGFwYiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLwogc3RhdGljIHN0cnVjdCBidXNfY2xrX2NvbmZpZyBhcGJfY29uZmlnID0gewogCS5yZWcgPSBDT1JFX0NMS19DRkcsCi0JLm1hc2sgPSBIQ0xLX1BDTEtfUkFUSU9fTUFTSywKLQkuc2hpZnQgPSBIQ0xLX1BDTEtfUkFUSU9fU0hJRlQsCisJLm1hc2tzID0gJmFwYl9tYXNrcywKIH07CiAKIC8qIGFwYiBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgYXBiX2NsayA9IHsKIAkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKIAkucGNsayA9ICZhaGJfY2xrLAorCS5jYWxjX3JhdGUgPSAmYnVzX2NhbGNfcmF0ZSwKIAkucmVjYWxjID0gJmJ1c19jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZidXNfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtidXNfcnRibCwgQVJSQVlfU0laRShidXNfcnRibCksIDJ9LAogCS5wcml2YXRlX2RhdGEgPSAmYXBiX2NvbmZpZywKIH07CiAKQEAgLTMyNSw4ICs0OTAsMTcgQEAKIAkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMyMCkKKy8qIGVtaSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZW1pX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhaGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisjZW5kaWYKKwogLyogc3NwIGNsb2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBzc3BfY2xrID0geworc3RhdGljIHN0cnVjdCBjbGsgc3NwMF9jbGsgPSB7CiAJLnBjbGsgPSAmYXBiX2NsaywKIAkuZW5fcmVnID0gUEVSSVAxX0NMS19FTkIsCiAJLmVuX3JlZ19iaXQgPSBTU1BfQ0xLX0VOQiwKQEAgLTM0MywxNCArNTE3LDE0NSBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBkdW1teV9hcGJfcGNsazsKIAorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMDApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMTApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorLyogZnNtYyBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZnNtY19jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYWhiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworI2VuZGlmCisKKy8qIGNvbW1vbiBjbG9ja3MgdG8gc3BlYXIzMTAgYW5kIHNwZWFyMzIwICovCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMyMCkKKy8qIHVhcnQxIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiB1YXJ0MiBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9TUEVBUjMxMCB8fCBDT05GSUdfTUFDSF9TUEVBUjMyMCAqLworCisvKiBjb21tb24gY2xvY2tzIHRvIHNwZWFyMzAwIGFuZCBzcGVhcjMyMCAqLworI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMDApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMjApCisvKiBjbGNkIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBjbGNkX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwzXzQ4bV9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogc2RoY2kgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkaGNpX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhaGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisjZW5kaWYgLyogQ09ORklHX01BQ0hfU1BFQVIzMDAgfHwgQ09ORklHX01BQ0hfU1BFQVIzMjAgKi8KKworLyogc3BlYXIzMDAgbWFjaGluZSBzcGVjaWZpYyBjbG9jayBzdHJ1Y3R1cmVzICovCisjaWZkZWYgQ09ORklHX01BQ0hfU1BFQVIzMDAKKy8qIGdwaW8xIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncGlvMV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBrZXlib2FyZCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsga2JkX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKyNlbmRpZgorCisvKiBzcGVhcjMxMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMxMAorLyogdWFydDMgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHVhcnQ0IGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0NF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiB1YXJ0NSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydDVfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFwYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKyNlbmRpZgorCisvKiBzcGVhcjMyMCBtYWNoaW5lIHNwZWNpZmljIGNsb2NrIHN0cnVjdHVyZXMgKi8KKyNpZmRlZiBDT05GSUdfTUFDSF9TUEVBUjMyMAorLyogY2FuMCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgY2FuMF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBjYW4xIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBjYW4xX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIGkyYzEgY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJmFoYl9jbGssCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAorfTsKKworLyogc3NwMSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgc3NwMV9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmYXBiX2NsaywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBzc3AyIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBzc3AyX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisKKy8qIHB3bSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgcHdtX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZhcGJfY2xrLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKK307CisjZW5kaWYKKwogLyogYXJyYXkgb2YgYWxsIHNwZWFyIDN4eCBjbG9jayBsb29rdXBzICovCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgc3BlYXJfY2xrX2xvb2t1cHNbXSA9IHsKLQl7IC5jb25faWQgPSAiYXBiX3BjbGsiLAkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKKwl7IC5jb25faWQgPSAiYXBiX3BjbGsiLAkJLmNsayA9ICZkdW1teV9hcGJfcGNsa30sCiAJLyogcm9vdCBjbGtzICovCiAJeyAuY29uX2lkID0gIm9zY18zMmtfY2xrIiwJLmNsayA9ICZvc2NfMzJrX2Nsa30sCiAJeyAuY29uX2lkID0gIm9zY18yNG1fY2xrIiwJLmNsayA9ICZvc2NfMjRtX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIDMyIEtIeiBvc2MgY2xrICovCi0JeyAuZGV2X2lkID0gInJ0YyIsCQkuY2xrID0gJnJ0Y19jbGt9LAorCXsgLmRldl9pZCA9ICJydGMtc3BlYXIiLAkuY2xrID0gJnJ0Y19jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSAyNCBNSHogb3NjIGNsayAqLwogCXsgLmNvbl9pZCA9ICJwbGwxX2NsayIsCQkuY2xrID0gJnBsbDFfY2xrfSwKIAl7IC5jb25faWQgPSAicGxsM180OG1fY2xrIiwJLmNsayA9ICZwbGwzXzQ4bV9jbGt9LApAQCAtMzU4LDE4ICs2NjMsMjIgQEAKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gcGxsMSBjbGsgKi8KIAl7IC5jb25faWQgPSAiY3B1X2NsayIsCQkuY2xrID0gJmNwdV9jbGt9LAogCXsgLmNvbl9pZCA9ICJhaGJfY2xrIiwJCS5jbGsgPSAmYWhiX2Nsa30sCisJeyAuY29uX2lkID0gInVhcnRfc3ludGhfY2xrIiwJLmNsayA9ICZ1YXJ0X3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImZpcmRhX3N5bnRoX2NsayIsCS5jbGsgPSAmZmlyZGFfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0MF9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDBfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0MV9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDFfc3ludGhfY2xrfSwKKwl7IC5jb25faWQgPSAiZ3B0Ml9zeW50aF9jbGsiLAkuY2xrID0gJmdwdDJfc3ludGhfY2xrfSwKIAl7IC5kZXZfaWQgPSAidWFydCIsCQkuY2xrID0gJnVhcnRfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZmlyZGEiLAkJLmNsayA9ICZmaXJkYV9jbGt9LAogCXsgLmRldl9pZCA9ICJncHQwIiwJCS5jbGsgPSAmZ3B0MF9jbGt9LAogCXsgLmRldl9pZCA9ICJncHQxIiwJCS5jbGsgPSAmZ3B0MV9jbGt9LAogCXsgLmRldl9pZCA9ICJncHQyIiwJCS5jbGsgPSAmZ3B0Ml9jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwzIGNsayAqLwotCXsgLmRldl9pZCA9ICJ1c2JoIiwJCS5jbGsgPSAmdXNiaF9jbGt9LAotCXsgLmRldl9pZCA9ICJ1c2JkIiwJCS5jbGsgPSAmdXNiZF9jbGt9LAotCXsgLmRldl9pZCA9ICJjbGNkIiwJCS5jbGsgPSAmY2xjZF9jbGt9LAorCXsgLmRldl9pZCA9ICJkZXNpZ253YXJlX3VkYyIsICAgLmNsayA9ICZ1c2JkX2Nsa30sCisJeyAuY29uX2lkID0gInVzYmhfY2xrIiwJCS5jbGsgPSAmdXNiaF9jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhaGIgY2xrICovCiAJeyAuY29uX2lkID0gImFwYl9jbGsiLAkJLmNsayA9ICZhcGJfY2xrfSwKLQl7IC5kZXZfaWQgPSAiaTJjIiwJCS5jbGsgPSAmaTJjX2Nsa30sCisJeyAuZGV2X2lkID0gImkyY19kZXNpZ253YXJlLjAiLAkuY2xrID0gJmkyY19jbGt9LAogCXsgLmRldl9pZCA9ICJkbWEiLAkJLmNsayA9ICZkbWFfY2xrfSwKIAl7IC5kZXZfaWQgPSAianBlZyIsCQkuY2xrID0gJmpwZWdfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ21hYyIsCQkuY2xrID0gJmdtYWNfY2xrfSwKQEAgLTM3Nyw4ICs2ODYsNTAgQEAKIAl7IC5kZXZfaWQgPSAiYzMiLAkJLmNsayA9ICZjM19jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhcGIgY2xrICovCiAJeyAuZGV2X2lkID0gImFkYyIsCQkuY2xrID0gJmFkY19jbGt9LAotCXsgLmRldl9pZCA9ICJzc3AiLAkJLmNsayA9ICZzc3BfY2xrfSwKKwl7IC5kZXZfaWQgPSAic3NwLXBsMDIyLjAiLAkuY2xrID0gJnNzcDBfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ3BpbyIsCQkuY2xrID0gJmdwaW9fY2xrfSwKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzEwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorCXsgLmRldl9pZCA9ICJwaHlzbWFwLWZsYXNoIiwJLmNsayA9ICZlbWlfY2xrfSwKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMDApIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfU1BFQVIzMTApIHx8IFwKKwlkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorCXsgLmNvbl9pZCA9ICJmc21jIiwJCS5jbGsgPSAmZnNtY19jbGt9LAorI2VuZGlmCisKKy8qIGNvbW1vbiBjbG9ja3MgdG8gc3BlYXIzMTAgYW5kIHNwZWFyMzIwICovCisjaWYgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMxMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9TUEVBUjMyMCkKKwl7IC5kZXZfaWQgPSAidWFydDEiLAkJLmNsayA9ICZ1YXJ0MV9jbGt9LAorCXsgLmRldl9pZCA9ICJ1YXJ0MiIsCQkuY2xrID0gJnVhcnQyX2Nsa30sCisjZW5kaWYKKworCS8qIGNvbW1vbiBjbG9jayB0byBzcGVhcjMwMCBhbmQgc3BlYXIzMjAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzAwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX1NQRUFSMzIwKQorCXsgLmRldl9pZCA9ICJjbGNkIiwJCS5jbGsgPSAmY2xjZF9jbGt9LAorCXsgLmRldl9pZCA9ICJzZGhjaSIsCQkuY2xrID0gJnNkaGNpX2Nsa30sCisjZW5kaWYgLyogQ09ORklHX01BQ0hfU1BFQVIzMDAgfHwgQ09ORklHX01BQ0hfU1BFQVIzMjAgKi8KKworCS8qIHNwZWFyMzAwIG1hY2hpbmUgc3BlY2lmaWMgY2xvY2sgc3RydWN0dXJlcyAqLworI2lmZGVmIENPTkZJR19NQUNIX1NQRUFSMzAwCisJeyAuZGV2X2lkID0gImdwaW8xIiwJCS5jbGsgPSAmZ3BpbzFfY2xrfSwKKwl7IC5kZXZfaWQgPSAia2V5Ym9hcmQiLAkJLmNsayA9ICZrYmRfY2xrfSwKKyNlbmRpZgorCisJLyogc3BlYXIzMTAgbWFjaGluZSBzcGVjaWZpYyBjbG9jayBzdHJ1Y3R1cmVzICovCisjaWZkZWYgQ09ORklHX01BQ0hfU1BFQVIzMTAKKwl7IC5kZXZfaWQgPSAidWFydDMiLAkJLmNsayA9ICZ1YXJ0M19jbGt9LAorCXsgLmRldl9pZCA9ICJ1YXJ0NCIsCQkuY2xrID0gJnVhcnQ0X2Nsa30sCisJeyAuZGV2X2lkID0gInVhcnQ1IiwJCS5jbGsgPSAmdWFydDVfY2xrfSwKKworI2VuZGlmCisJLyogc3BlYXIzMjAgbWFjaGluZSBzcGVjaWZpYyBjbG9jayBzdHJ1Y3R1cmVzICovCisjaWZkZWYgQ09ORklHX01BQ0hfU1BFQVIzMjAKKwl7IC5kZXZfaWQgPSAiY19jYW5fcGxhdGZvcm0uMCIsCS5jbGsgPSAmY2FuMF9jbGt9LAorCXsgLmRldl9pZCA9ICJjX2Nhbl9wbGF0Zm9ybS4xIiwJLmNsayA9ICZjYW4xX2Nsa30sCisJeyAuZGV2X2lkID0gImkyY19kZXNpZ253YXJlLjEiLAkuY2xrID0gJmkyYzFfY2xrfSwKKwl7IC5kZXZfaWQgPSAic3NwLXBsMDIyLjEiLAkuY2xrID0gJnNzcDFfY2xrfSwKKwl7IC5kZXZfaWQgPSAic3NwLXBsMDIyLjIiLAkuY2xrID0gJnNzcDJfY2xrfSwKKwl7IC5kZXZfaWQgPSAicHdtIiwJCS5jbGsgPSAmcHdtX2Nsa30sCisjZW5kaWYKIH07CiAKIHZvaWQgX19pbml0IGNsa19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA5NDc2MjVkLi41M2RhNDIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTExLDkgKzExLDggQEAKICAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAqLwogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAJCS5tYWNybwlkaXNhYmxlX2ZpcQogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oCmluZGV4IGFmN2UwMmMuLjhlMzA2MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmgKQEAgLTE0LDExICsxNCwxMSBAQAogI2lmbmRlZiBfX01BQ0hfR0VORVJJQ19ICiAjZGVmaW5lIF9fTUFDSF9HRU5FUklDX0gKIAotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYW1iYS9idXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8cGxhdC9wYWRtdXguaD4KIAogLyogc3BlYXIzeHggZGVjbGFyYXRpb25zICovCkBAIC0zMywxNCArMzMsMTQgQEAKIC8qIEFkZCBzcGVhcjN4eCBmYW1pbHkgZGV2aWNlIHN0cnVjdHVyZSBkZWNsYXJhdGlvbnMgaGVyZSAqLwogZXh0ZXJuIHN0cnVjdCBhbWJhX2RldmljZSBncGlvX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdWFydF9kZXZpY2U7Ci1leHRlcm4gc3RydWN0IHN5c190aW1lciBzcGVhcl9zeXNfdGltZXI7CitleHRlcm4gc3RydWN0IHN5c190aW1lciBzcGVhcjN4eF90aW1lcjsKIAogLyogQWRkIHNwZWFyM3h4IGZhbWlseSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaGVyZSAqLwogdm9pZCBfX2luaXQgY2xrX2luaXQodm9pZCk7Cit2b2lkIF9faW5pdCBzcGVhcl9zZXR1cF90aW1lcih2b2lkKTsKIHZvaWQgX19pbml0IHNwZWFyM3h4X21hcF9pbyh2b2lkKTsKIHZvaWQgX19pbml0IHNwZWFyM3h4X2luaXRfaXJxKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXIzeHhfaW5pdCh2b2lkKTsKLXZvaWQgc3BlYXJfcG14X2luaXQoc3RydWN0IHBteF9kcml2ZXIgKnBteF9kcml2ZXIsIHVpbnQgYmFzZSwgdWludCBzaXplKTsKIAogLyogcGFkIG11eCBkZWNsYXJhdGlvbnMgKi8KICNkZWZpbmUgUE1YX0ZJUkRBX01BU0sJCSgxIDw8IDE0KQpAQCAtMTI5LDEyICsxMjksMTAgQEAKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9kYWM7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21faTJzOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX2Jvb3RfcGluczsKLWV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGlvXzRiaXQ7Ci1leHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2Rpb184Yml0OworZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaGNpXzRiaXQ7CitleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2RoY2lfOGJpdDsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfZ3BpbzE7CiAKLXZvaWQgc3BlYXIzMDBfcG14X2luaXQodm9pZCk7Ci0KIC8qIEFkZCBzcGVhcjMwMCBtYWNoaW5lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCiB2b2lkIF9faW5pdCBzcGVhcjMwMF9pbml0KHZvaWQpOwogCkBAIC0xNTQsOCArMTUyLDYgQEAKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfcnM0ODVfMF8xOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF90ZG0wOwogCi12b2lkIHNwZWFyMzEwX3BteF9pbml0KHZvaWQpOwotCiAvKiBBZGQgc3BlYXIzMTAgbWFjaGluZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaGVyZSAqLwogdm9pZCBfX2luaXQgc3BlYXIzMTBfaW5pdCh2b2lkKTsKIApAQCAtMTc2LDE0ICsxNzIsMTQgQEAKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfZW1pOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9mc21jOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9zcHA7Ci1leHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NkaW87CitleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NkaGNpOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9pMnM7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3VhcnQxOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF91YXJ0MV9tb2RlbTsKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfdWFydDI7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3RvdWNoc2NyZWVuOwogZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9jYW47Ci1leHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3NkaW9fbGVkOworZXh0ZXJuIHN0cnVjdCBwbXhfZGV2IHBteF9zZGhjaV9sZWQ7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3B3bTA7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3B3bTE7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X3B3bTI7CkBAIC0xOTUsOCArMTkxLDYgQEAKIGV4dGVybiBzdHJ1Y3QgcG14X2RldiBwbXhfc21paTE7CiBleHRlcm4gc3RydWN0IHBteF9kZXYgcG14X2kyYzE7CiAKLXZvaWQgc3BlYXIzMjBfcG14X2luaXQodm9pZCk7Ci0KIC8qIEFkZCBzcGVhcjMyMCBtYWNoaW5lIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCiB2b2lkIF9faW5pdCBzcGVhcjMyMF9pbml0KHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAppbmRleCA0YTg2ZTZhLi40NjYwYzBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTE0LDYgKzE0LDkgQEAKICNpZm5kZWYgX19NQUNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19NQUNIX0hBUkRXQVJFX0gKIAorI2luY2x1ZGUgPHBsYXQvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisKIC8qIFZpdHVhbCB0byBwaHlzaWNhbCB0cmFuc2xhdGlvbiBvZiBzdGF0aWNhbGx5IG1hcHBlZCBzcGFjZSAqLwogI2RlZmluZSBJT19BRERSRVNTKHgpCQkoeCB8IDB4RjAwMDAwMDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCA3Zjk0MGI4Li5hMWE3ZjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC02OSw3ICs2OSw3IEBACiAjZGVmaW5lIElSUV9DTENECQkJCUlSUV9HRU5fUkFTXzMKIAogLyogSVJRcyBzaGFyaW5nIElSUV9JTlRSQ09NTV9SQVNfQVJNICovCi0jZGVmaW5lIElSUV9TRElPCQkJCUlSUV9JTlRSQ09NTV9SQVNfQVJNCisjZGVmaW5lIElSUV9TREhDSQkJCQlJUlFfSU5UUkNPTU1fUkFTX0FSTQogCiAvKiBHUElPIHBpbnMgdmlydHVhbCBpcnFzICovCiAjZGVmaW5lIFNQRUFSX0dQSU9fSU5UX0JBU0UJCQkoVklSUV9TVEFSVCArIDkpCkBAIC0xMTUsNyArMTE1LDcgQEAKICNkZWZpbmUgVklSUV9TUFAJCQkJKFZJUlFfU1RBUlQgKyAyKQogCiAvKiBJUlFzIHNoYXJpbmcgSVJRX0dFTl9SQVNfMiAqLwotI2RlZmluZSBJUlFfU0RJTwkJCQlJUlFfR0VOX1JBU18yCisjZGVmaW5lIElSUV9TREhDSQkJCQlJUlFfR0VOX1JBU18yCiAKIC8qIElSUXMgc2hhcmluZyBJUlFfR0VOX1JBU18zICovCiAjZGVmaW5lIFZJUlFfUExHUElPCQkJCShWSVJRX1NUQVJUICsgMykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL21pc2NfcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKaW5kZXggMzhkNzY3YS4uNWJkOGNkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvbWlzY19yZWdzLmgKQEAgLTE0LDE2ICsxNCwxNiBAQAogI2lmbmRlZiBfX01BQ0hfTUlTQ19SRUdTX0gKICNkZWZpbmUgX19NQUNIX01JU0NfUkVHU19ICiAKLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCi0jZGVmaW5lIE1JU0NfQkFTRQkJVkFfU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFCisjZGVmaW5lIE1JU0NfQkFTRQkJSU9NRU0oVkFfU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFKQogCi0jZGVmaW5lIFNPQ19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAwMCkpCi0jZGVmaW5lIERJQUdfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDQpKQotI2RlZmluZSBQTEwxX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDgpKQotI2RlZmluZSBQTEwxX0ZSUQkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMEMpKQotI2RlZmluZSBQTEwxX01PRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTApKQotI2RlZmluZSBQTEwyX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTQpKQorI2RlZmluZSBTT0NfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MDAwKQorI2RlZmluZSBESUFHX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDAwNCkKKyNkZWZpbmUgUExMMV9DVFIJCShNSVNDX0JBU0UgKyAweDAwOCkKKyNkZWZpbmUgUExMMV9GUlEJCShNSVNDX0JBU0UgKyAweDAwQykKKyNkZWZpbmUgUExMMV9NT0QJCShNSVNDX0JBU0UgKyAweDAxMCkKKyNkZWZpbmUgUExMMl9DVFIJCShNSVNDX0JBU0UgKyAweDAxNCkKIC8qIFBMTF9DVFIgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgUExMX0VOQUJMRQkJMgogI2RlZmluZSBQTExfTU9ERV9TSElGVAkJNApAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBQTExfTU9ERV9ESVRIX0RTQgkyCiAjZGVmaW5lIFBMTF9NT0RFX0RJVEhfU1NCCTMKIAotI2RlZmluZSBQTEwyX0ZSUQkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMTgpKQorI2RlZmluZSBQTEwyX0ZSUQkJKE1JU0NfQkFTRSArIDB4MDE4KQogLyogUExMIEZSUSByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBQTExfRElWX05fU0hJRlQJCTAKICNkZWZpbmUgUExMX0RJVl9OX01BU0sJCTB4RkYKQEAgLTQ0LDE2ICs0NCwxNiBAQAogI2RlZmluZSBQTExfRElUSF9GREJLX01fU0hJRlQJMTYKICNkZWZpbmUgUExMX0RJVEhfRkRCS19NX01BU0sJMHhGRkZGCiAKLSNkZWZpbmUgUExMMl9NT0QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDFDKSkKLSNkZWZpbmUgUExMX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDIwKSkKLSNkZWZpbmUgQ09SRV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAyNCkpCisjZGVmaW5lIFBMTDJfTU9ECQkoTUlTQ19CQVNFICsgMHgwMUMpCisjZGVmaW5lIFBMTF9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwMjApCisjZGVmaW5lIENPUkVfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDI0KQogLyogQ09SRSBDTEsgQ0ZHIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFBMTF9IQ0xLX1JBVElPX1NISUZUCTEwCiAjZGVmaW5lIFBMTF9IQ0xLX1JBVElPX01BU0sJMHgzCiAjZGVmaW5lIEhDTEtfUENMS19SQVRJT19TSElGVAk4CiAjZGVmaW5lIEhDTEtfUENMS19SQVRJT19NQVNLCTB4MwogCi0jZGVmaW5lIFBFUklQX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDI4KSkKKyNkZWZpbmUgUEVSSVBfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDI4KQogLyogUEVSSVBfQ0xLX0NGRyByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBVQVJUX0NMS19TSElGVAkJNAogI2RlZmluZSBVQVJUX0NMS19NQVNLCQkweDEKQEAgLTYzLDEwICs2MywxMCBAQAogI2RlZmluZSBHUFQxX0NMS19TSElGVAkJMTEKICNkZWZpbmUgR1BUMl9DTEtfU0hJRlQJCTEyCiAjZGVmaW5lIEdQVF9DTEtfTUFTSwkJMHgxCi0jZGVmaW5lIEFVWF9DTEtfUExMM19NQVNLCTAKLSNkZWZpbmUgQVVYX0NMS19QTEwxX01BU0sJMQorI2RlZmluZSBBVVhfQ0xLX1BMTDNfVkFMCTAKKyNkZWZpbmUgQVVYX0NMS19QTEwxX1ZBTAkxCiAKLSNkZWZpbmUgUEVSSVAxX0NMS19FTkIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDJDKSkKKyNkZWZpbmUgUEVSSVAxX0NMS19FTkIJCShNSVNDX0JBU0UgKyAweDAyQykKIC8qIFBFUklQMV9DTEtfRU5CIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFVBUlRfQ0xLX0VOQgkJMwogI2RlZmluZSBTU1BfQ0xLX0VOQgkJNQpAQCAtODUsMzQgKzg1LDM1IEBACiAjZGVmaW5lIFVTQkhfQ0xLX0VOQgkJMjUKICNkZWZpbmUgQzNfQ0xLX0VOQgkJMzEKIAotI2RlZmluZSBTT0NfQ09SRV9JRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMzApKQotI2RlZmluZSBSQVNfQ0xLX0VOQgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMzQpKQotI2RlZmluZSBQRVJJUDFfU09GX1JTVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMzgpKQorI2RlZmluZSBTT0NfQ09SRV9JRAkJKE1JU0NfQkFTRSArIDB4MDMwKQorI2RlZmluZSBSQVNfQ0xLX0VOQgkJKE1JU0NfQkFTRSArIDB4MDM0KQorI2RlZmluZSBQRVJJUDFfU09GX1JTVAkJKE1JU0NfQkFTRSArIDB4MDM4KQogLyogUEVSSVAxX1NPRl9SU1QgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgSlBFR19TT0ZfUlNUCQk4CiAKLSNkZWZpbmUgU09DX1VTRVJfSUQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDNDKSkKLSNkZWZpbmUgUkFTX1NPRl9SU1QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDQwKSkKLSNkZWZpbmUgUFJTQzFfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNDQpKQotI2RlZmluZSBQUlNDMl9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0OCkpCi0jZGVmaW5lIFBSU0MzX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDRDKSkKKyNkZWZpbmUgU09DX1VTRVJfSUQJCShNSVNDX0JBU0UgKyAweDAzQykKKyNkZWZpbmUgUkFTX1NPRl9SU1QJCShNSVNDX0JBU0UgKyAweDA0MCkKKyNkZWZpbmUgUFJTQzFfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDQ0KQorI2RlZmluZSBQUlNDMl9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNDgpCisjZGVmaW5lIFBSU0MzX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA0QykKIC8qIGdwdCBzeW50aGVzaXplciByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBHUFRfTVNDQUxFX1NISUZUCTAKICNkZWZpbmUgR1BUX01TQ0FMRV9NQVNLCQkweEZGRgogI2RlZmluZSBHUFRfTlNDQUxFX1NISUZUCTEyCiAjZGVmaW5lIEdQVF9OU0NBTEVfTUFTSwkJMHhGCiAKLSNkZWZpbmUgQU1FTV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA1MCkpCi0jZGVmaW5lIEVYUElfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNTQpKQotI2RlZmluZSBDTENEX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA1QykpCi0jZGVmaW5lIEZJUkRBX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2MCkpCi0jZGVmaW5lIFVBUlRfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDY0KSkKLSNkZWZpbmUgR01BQ19DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNjgpKQotI2RlZmluZSBSQVMxX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2QykpCi0jZGVmaW5lIFJBUzJfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDcwKSkKLSNkZWZpbmUgUkFTM19DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNzQpKQotI2RlZmluZSBSQVM0X0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3OCkpCisjZGVmaW5lIEFNRU1fQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDUwKQorI2RlZmluZSBFWFBJX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA1NCkKKyNkZWZpbmUgQ0xDRF9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDVDKQorI2RlZmluZSBGSVJEQV9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDYwKQorI2RlZmluZSBVQVJUX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNjQpCisjZGVmaW5lIEdNQUNfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2OCkKKyNkZWZpbmUgUkFTMV9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDZDKQorI2RlZmluZSBSQVMyX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNzApCisjZGVmaW5lIFJBUzNfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA3NCkKKyNkZWZpbmUgUkFTNF9DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDc4KQogLyogYXV4IGNsayBzeW50aGVzaXNlciByZWdpc3RlciBtYXNrcyBmb3IgaXJkYSB0byByYXM0ICovCisjZGVmaW5lIEFVWF9TWU5UX0VOQgkJMzEKICNkZWZpbmUgQVVYX0VRX1NFTF9TSElGVAkzMAogI2RlZmluZSBBVVhfRVFfU0VMX01BU0sJCTEKICNkZWZpbmUgQVVYX0VRMV9TRUwJCTAKQEAgLTEyMiw0MiArMTIzLDQyIEBACiAjZGVmaW5lIEFVWF9ZU0NBTEVfU0hJRlQJMAogI2RlZmluZSBBVVhfWVNDQUxFX01BU0sJCTB4RkZGCiAKLSNkZWZpbmUgSUNNMV9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3QykpCi0jZGVmaW5lIElDTTJfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwODApKQotI2RlZmluZSBJQ00zX0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDg0KSkKLSNkZWZpbmUgSUNNNF9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4OCkpCi0jZGVmaW5lIElDTTVfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOEMpKQotI2RlZmluZSBJQ002X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDkwKSkKLSNkZWZpbmUgSUNNN19BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5NCkpCi0jZGVmaW5lIElDTThfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOTgpKQotI2RlZmluZSBJQ005X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDlDKSkKLSNkZWZpbmUgRE1BX0NITl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEEwKSkKLSNkZWZpbmUgVVNCMl9QSFlfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBNCkpCi0jZGVmaW5lIEdNQUNfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQTgpKQotI2RlZmluZSBFWFBJX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEFDKSkKLSNkZWZpbmUgUFJDMV9MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQzApKQotI2RlZmluZSBQUkMyX0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDNCkpCi0jZGVmaW5lIFBSQzNfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEM4KSkKLSNkZWZpbmUgUFJDNF9MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQ0MpKQotI2RlZmluZSBQUkMxX0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEQwKSkKLSNkZWZpbmUgUFJDMl9JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBENCkpCi0jZGVmaW5lIFBSQzNfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRDgpKQotI2RlZmluZSBQUkM0X0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MERDKSkKLSNkZWZpbmUgUFdSRE9XTl9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFMCkpCi0jZGVmaW5lIENPTVBTU1RMXzFWOF9DRkcJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRTQpKQotI2RlZmluZSBDT01QU1NUTF8yVjVfQ0ZHCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEU4KSkKLSNkZWZpbmUgQ09NUENPUl8zVjNfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFQykpCi0jZGVmaW5lIFNTVExQQURfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRjApKQotI2RlZmluZSBCSVNUMV9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGNCkpCi0jZGVmaW5lIEJJU1QyX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEY4KSkKLSNkZWZpbmUgQklTVDNfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRkMpKQotI2RlZmluZSBCSVNUNF9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwMCkpCi0jZGVmaW5lIEJJU1Q1X0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTA0KSkKLSNkZWZpbmUgQklTVDFfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMDgpKQotI2RlZmluZSBCSVNUMl9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwQykpCi0jZGVmaW5lIEJJU1QzX1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTEwKSkKLSNkZWZpbmUgQklTVDRfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMTQpKQotI2RlZmluZSBCSVNUNV9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExOCkpCi0jZGVmaW5lIFNZU0VSUl9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExQykpCisjZGVmaW5lIElDTTFfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDdDKQorI2RlZmluZSBJQ00yX0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4MCkKKyNkZWZpbmUgSUNNM19BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwODQpCisjZGVmaW5lIElDTTRfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDg4KQorI2RlZmluZSBJQ001X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4QykKKyNkZWZpbmUgSUNNNl9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOTApCisjZGVmaW5lIElDTTdfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDk0KQorI2RlZmluZSBJQ004X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5OCkKKyNkZWZpbmUgSUNNOV9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOUMpCisjZGVmaW5lIERNQV9DSE5fQ0ZHCQkoTUlTQ19CQVNFICsgMHgwQTApCisjZGVmaW5lIFVTQjJfUEhZX0NGRwkJKE1JU0NfQkFTRSArIDB4MEE0KQorI2RlZmluZSBHTUFDX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBBOCkKKyNkZWZpbmUgRVhQSV9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQUMpCisjZGVmaW5lIFBSQzFfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDMCkKKyNkZWZpbmUgUFJDMl9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MEM0KQorI2RlZmluZSBQUkMzX0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQzgpCisjZGVmaW5lIFBSQzRfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDQykKKyNkZWZpbmUgUFJDMV9JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRDApCisjZGVmaW5lIFBSQzJfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MEQ0KQorI2RlZmluZSBQUkMzX0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEOCkKKyNkZWZpbmUgUFJDNF9JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwREMpCisjZGVmaW5lIFBXUkRPV05fQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEUwKQorI2RlZmluZSBDT01QU1NUTF8xVjhfQ0ZHCShNSVNDX0JBU0UgKyAweDBFNCkKKyNkZWZpbmUgQ09NUFNTVExfMlY1X0NGRwkoTUlTQ19CQVNFICsgMHgwRTgpCisjZGVmaW5lIENPTVBDT1JfM1YzX0NGRwkJKE1JU0NfQkFTRSArIDB4MEVDKQorI2RlZmluZSBTU1RMUEFEX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGMCkKKyNkZWZpbmUgQklTVDFfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEY0KQorI2RlZmluZSBCSVNUMl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRjgpCisjZGVmaW5lIEJJU1QzX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGQykKKyNkZWZpbmUgQklTVDRfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MTAwKQorI2RlZmluZSBCSVNUNV9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMDQpCisjZGVmaW5lIEJJU1QxX1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDEwOCkKKyNkZWZpbmUgQklTVDJfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTBDKQorI2RlZmluZSBCSVNUM19TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMTApCisjZGVmaW5lIEJJU1Q0X1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDExNCkKKyNkZWZpbmUgQklTVDVfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTE4KQorI2RlZmluZSBTWVNFUlJfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MTFDKQogCiAjZW5kaWYgLyogX19NQUNIX01JU0NfUkVHU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhci5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIuaAppbmRleCBkY2NhODU2Li42M2ZkOTgzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhci5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyLmgKQEAgLTE0LDEyNCArMTQsNjEgQEAKICNpZm5kZWYgX19NQUNIX1NQRUFSM1hYX0gKICNkZWZpbmUgX19NQUNIX1NQRUFSM1hYX0gKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bWFjaC9zcGVhcjMwMC5oPgogI2luY2x1ZGUgPG1hY2gvc3BlYXIzMTAuaD4KICNpbmNsdWRlIDxtYWNoL3NwZWFyMzIwLmg+CiAKLSNkZWZpbmUgU1BFQVIzWFhfTUxfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9NTF9TRFJBTV9TSVpFCQkweDQwMDAwMDAwCisjZGVmaW5lIFNQRUFSM1hYX01MX1NEUkFNX0JBU0UJCVVMKDB4MDAwMDAwMDApCiAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNOV9CQVNFCQkweEMwMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTlfU0laRQkJMHgxMDAwMDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ005X0JBU0UJCVVMKDB4QzAwMDAwMDApCiAKIC8qIElDTTEgLSBMb3cgc3BlZWQgY29ubmVjdGlvbiAqLwotI2RlZmluZSBTUEVBUjNYWF9JQ00xXzJfQkFTRQkJMHhEMDAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00xXzJfU0laRQkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFCQkweEQwMDAwMDAwCisjZGVmaW5lIFNQRUFSM1hYX0lDTTFfMl9CQVNFCQlVTCgweEQwMDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRQkJVUwoMHhEMDAwMDAwMCkKICNkZWZpbmUgVkFfU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UJSU9fQUREUkVTUyhTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSkKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9VQVJUX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX0FEQ19CQVNFCQkweEQwMDgwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfQURDX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NTUF9CQVNFCQkweEQwMTAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfU1NQX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX0kyQ19CQVNFCQkweEQwMTgwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSTJDX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00xX0pQRUdfQkFTRQkJMHhEMDgwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00xX0pQRUdfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSVJEQV9CQVNFCQkweEQxMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTFfSVJEQV9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9TUkFNX0JBU0UJCTB4RDI4MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNMV9TUkFNX1NJWkUJCTB4MDU4MDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV9BRENfQkFTRQkJVUwoMHhEMDA4MDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV9TU1BfQkFTRQkJVUwoMHhEMDEwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV9JMkNfQkFTRQkJVUwoMHhEMDE4MDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNMV9KUEVHX0JBU0UJCVVMKDB4RDA4MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTFfSVJEQV9CQVNFCQlVTCgweEQxMDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00xX1NSQU1fQkFTRQkJVUwoMHhEMjgwMDAwMCkKIAogLyogSUNNMiAtIEFwcGxpY2F0aW9uIFN1YnN5c3RlbSAqLwotI2RlZmluZSBTUEVBUjNYWF9JQ00yX0hXQUNDRUwwX0JBU0UJMHhEODgwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00yX0hXQUNDRUwwX1NJWkUJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDFfQkFTRQkweEQ5MDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDFfU0laRQkweDAwODAwMDAwCisjZGVmaW5lIFNQRUFSM1hYX0lDTTJfSFdBQ0NFTDBfQkFTRQlVTCgweEQ4ODAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00yX0hXQUNDRUwxX0JBU0UJVUwoMHhEOTAwMDAwMCkKIAogLyogSUNNNCAtIEhpZ2ggU3BlZWQgQ29ubmVjdGlvbiAqLwotI2RlZmluZSBTUEVBUjNYWF9JQ000X0JBU0UJCTB4RTAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9TSVpFCQkweDA4MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9NSUlfQkFTRQkJMHhFMDgwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ000X01JSV9TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX0ZJRk9fQkFTRQkweEUxMDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9GSUZPX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9DU1JfQkFTRQkweEUxMTAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9DU1JfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JEX1BMRFRfQkFTRQkweEUxMjAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9QTERUX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX0VIQ0kwXzFfQkFTRQkweEUxODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX0VIQ0kwXzFfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfT0hDSTBfQkFTRQkweEUxOTAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kwX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kxX0JBU0UJMHhFMjEwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9PSENJMV9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9BUkJfQkFTRQkweEUyODAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX0FSQl9TSVpFCTB4MDAwMTAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9CQVNFCQlVTCgweEUwMDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ000X01JSV9CQVNFCQlVTCgweEUwODAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQkRfRklGT19CQVNFCVVMKDB4RTEwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCRF9DU1JfQkFTRQlVTCgweEUxMTAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQkRfUExEVF9CQVNFCVVMKDB4RTEyMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX0VIQ0kwXzFfQkFTRQlVTCgweEUxODAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ000X1VTQl9PSENJMF9CQVNFCVVMKDB4RTE5MDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTRfVVNCX09IQ0kxX0JBU0UJVUwoMHhFMjEwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNNF9VU0JfQVJCX0JBU0UJVUwoMHhFMjgwMDAwMCkKIAogLyogTUwxIC0gTXVsdGkgTGF5ZXIgQ1BVIFN1YnN5c3RlbSAqLwotI2RlZmluZSBTUEVBUjNYWF9JQ00zX01MMV8yX0JBU0UJMHhGMDAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX01MMV8yX1NJWkUJMHgwRjAwMDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX01MMV9UTVJfQkFTRQkJMHhGMDAwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9NTDFfVE1SX1NJWkUJCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9NTDFfVklDX0JBU0UJCTB4RjExMDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19NTDFfMl9CQVNFCVVMKDB4RjAwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX01MMV9UTVJfQkFTRQkJVUwoMHhGMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfTUwxX1ZJQ19CQVNFCQlVTCgweEYxMTAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjNYWF9NTDFfVklDX0JBU0UJSU9fQUREUkVTUyhTUEVBUjNYWF9NTDFfVklDX0JBU0UpCi0jZGVmaW5lIFNQRUFSM1hYX01MMV9WSUNfU0laRQkJMHgwMDEwMDAwMAogCiAvKiBJQ00zIC0gQmFzaWMgU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfU01FTV9CQVNFCQkweEY4MDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfU01FTV9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUlfQ1RSTF9CQVNFCTB4RkMwMDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUlfQ1RSTF9TSVpFCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX0RNQV9CQVNFCQkweEZDNDAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfRE1BX1NJWkUJCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NEUkFNX0NUUkxfQkFTRQkweEZDNjAwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfU0RSQU1fQ1RSTF9TSVpFCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1RNUjBfQkFTRQkJMHhGQzgwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1RNUjBfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfV0RUX0JBU0UJCTB4RkM4ODAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19XRFRfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfUlRDX0JBU0UJCTB4RkM5MDAwMDAKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19SVENfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfR1BJT19CQVNFCQkweEZDOTgwMDAwCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfR1BJT19TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9CQVNFCTB4RkNBMDAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19TTUVNX0JBU0UJCVVMKDB4RjgwMDAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfU01JX0NUUkxfQkFTRQlVTCgweEZDMDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX0RNQV9CQVNFCQlVTCgweEZDNDAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1NEUkFNX0NUUkxfQkFTRQlVTCgweEZDNjAwMDAwKQorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1RNUjBfQkFTRQkJVUwoMHhGQzgwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19XRFRfQkFTRQkJVUwoMHhGQzg4MDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19SVENfQkFTRQkJVUwoMHhGQzkwMDAwMCkKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19HUElPX0JBU0UJCVVMKDB4RkM5ODAwMDApCisjZGVmaW5lIFNQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRQlVTCgweEZDQTAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjNYWF9JQ00zX1NZU19DVFJMX0JBU0UJSU9fQUREUkVTUyhTUEVBUjNYWF9JQ00zX1NZU19DVFJMX0JBU0UpCi0jZGVmaW5lIFNQRUFSM1hYX0lDTTNfU1lTX0NUUkxfU0laRQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFCTB4RkNBODAwMDAKKyNkZWZpbmUgU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFCVVMKDB4RkNBODAwMDApCiAjZGVmaW5lIFZBX1NQRUFSM1hYX0lDTTNfTUlTQ19SRUdfQkFTRQlJT19BRERSRVNTKFNQRUFSM1hYX0lDTTNfTUlTQ19SRUdfQkFTRSkKLSNkZWZpbmUgU1BFQVIzWFhfSUNNM19NSVNDX1JFR19TSVpFCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1RNUjFfQkFTRQkJMHhGQ0IwMDAwMAotI2RlZmluZSBTUEVBUjNYWF9JQ00zX1RNUjFfU0laRQkJMHgwMDA4MDAwMAorI2RlZmluZSBTUEVBUjNYWF9JQ00zX1RNUjFfQkFTRQkJVUwoMHhGQ0IwMDAwMCkKIAogLyogRGVidWcgdWFydCBmb3IgbGludXgsIHdpbGwgYmUgdXNlZCBmb3IgZGVidWcgYW5kIHVuY29tcHJlc3MgbWVzc2FnZXMgKi8KICNkZWZpbmUgU1BFQVJfREJHX1VBUlRfQkFTRQkJU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzAwLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMwMC5oCmluZGV4IGNjYWE3NjUuLmM3MjM1MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzAwLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMDAuaApAQCAtMTcsMTEgKzE3LDkgQEAKICNkZWZpbmUgX19NQUNIX1NQRUFSMzAwX0gKIAogLyogQmFzZSBhZGRyZXNzIG9mIHZhcmlvdXMgSVBzICovCi0jZGVmaW5lIFNQRUFSMzAwX1RFTEVDT01fQkFTRQkJMHg1MDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9URUxFQ09NX1NJWkUJCTB4MTAwMDAwMDAKKyNkZWZpbmUgU1BFQVIzMDBfVEVMRUNPTV9CQVNFCQlVTCgweDUwMDAwMDAwKQogCiAvKiBJbnRlcnJ1cHQgcmVnaXN0ZXJzIG9mZnNldHMgYW5kIG1hc2tzICovCi0jZGVmaW5lIFNQRUFSMzAwX1RFTEVDT01fUkVHX1NJWkUJMHgwMDAxMDAwMAogI2RlZmluZSBJTlRfRU5CX01BU0tfUkVHCQkweDU0CiAjZGVmaW5lIElOVF9TVFNfTUFTS19SRUcJCTB4NTgKICNkZWZpbmUgSVRfUEVSU19TX0lSUV9NQVNLCQkoMSA8PCAwKQpAQCAtMzYsNDcgKzM0LDIwIEBACiAKICNkZWZpbmUgU0hJUlFfUkFTMV9NQVNLCQkJMHgxRkYKIAotI2RlZmluZSBTUEVBUjMwMF9DTENEX0JBU0UJCTB4NjAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfQ0xDRF9TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfU0RJT19CQVNFCQkweDcwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX1NESU9fU0laRQkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfMF9CQVNFCQkweDgwMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfMF9TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8xX0JBU0UJCTB4ODQwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMDBfTkFORF8xX1NJWkUJCTB4MDQwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMwMF9OQU5EXzJfQkFTRQkJMHg4ODAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OQU5EXzJfU0laRQkJMHgwNDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfM19CQVNFCQkweDhjMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX05BTkRfM19TSVpFCQkweDA0MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTk9SXzBfQkFTRQkJMHg5MDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OT1JfMF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTk9SXzFfQkFTRQkJMHg5MTAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OT1JfMV9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTk9SXzJfQkFTRQkJMHg5MjAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OT1JfMl9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfTk9SXzNfQkFTRQkJMHg5MzAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9OT1JfM19TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfRlNNQ19CQVNFCQkweDk0MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX0ZTTUNfU0laRQkJMHgwNTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzAwX1NPQ19DT05GSUdfQkFTRQkweDk5MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX1NPQ19DT05GSUdfU0laRQkweDAwMDAwMDA4Ci0KLSNkZWZpbmUgU1BFQVIzMDBfS0VZQk9BUkRfQkFTRQkJMHhBMDAwMDAwMAotI2RlZmluZSBTUEVBUjMwMF9LRVlCT0FSRF9TSVpFCQkweDA5MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMDBfR1BJT19CQVNFCQkweEE5MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzAwX0dQSU9fU0laRQkJMHgwNzAwMDAwMAorI2RlZmluZSBTUEVBUjMwMF9DTENEX0JBU0UJCVVMKDB4NjAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX1NESENJX0JBU0UJCVVMKDB4NzAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05BTkRfMF9CQVNFCQlVTCgweDgwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OQU5EXzFfQkFTRQkJVUwoMHg4NDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMDBfTkFORF8yX0JBU0UJCVVMKDB4ODgwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX05BTkRfM19CQVNFCQlVTCgweDhjMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OT1JfMF9CQVNFCQlVTCgweDkwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OT1JfMV9CQVNFCQlVTCgweDkxMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OT1JfMl9CQVNFCQlVTCgweDkyMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9OT1JfM19CQVNFCQlVTCgweDkzMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9GU01DX0JBU0UJCVVMKDB4OTQwMDAwMDApCisjZGVmaW5lIFNQRUFSMzAwX1NPQ19DT05GSUdfQkFTRQlVTCgweDk5MDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9LRVlCT0FSRF9CQVNFCQlVTCgweEEwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMwMF9HUElPX0JBU0UJCVVMKDB4QTkwMDAwMDApCiAKICNlbmRpZiAvKiBfX01BQ0hfU1BFQVIzMDBfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMxMC5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMTAuaAppbmRleCBiMjdiYjhhLi4xZTg1MzQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMxMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzEwLmgKQEAgLTE2LDMwICsxNiwxOCBAQAogI2lmbmRlZiBfX01BQ0hfU1BFQVIzMTBfSAogI2RlZmluZSBfX01BQ0hfU1BFQVIzMTBfSAogCi0jZGVmaW5lIFNQRUFSMzEwX05BTkRfQkFTRQkJMHg0MDAwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9OQU5EX1NJWkUJCTB4MDQwMDAwMDAKKyNkZWZpbmUgU1BFQVIzMTBfTkFORF9CQVNFCQlVTCgweDQwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMxMF9GU01DX0JBU0UJCVVMKDB4NDQwMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1VBUlQxX0JBU0UJCVVMKDB4QjIwMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1VBUlQyX0JBU0UJCVVMKDB4QjIwODAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1VBUlQzX0JBU0UJCVVMKDB4QjIxMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1VBUlQ0X0JBU0UJCVVMKDB4QjIxODAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1VBUlQ1X0JBU0UJCVVMKDB4QjIyMDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX0hETENfQkFTRQkJVUwoMHhCMjgwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMTBfUlM0ODVfMF9CQVNFCQlVTCgweEIzMDAwMDAwKQorI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8xX0JBU0UJCVVMKDB4QjM4MDAwMDApCisjZGVmaW5lIFNQRUFSMzEwX1NPQ19DT05GSUdfQkFTRQlVTCgweEI0MDAwMDAwKQogCi0jZGVmaW5lIFNQRUFSMzEwX0ZTTUNfQkFTRQkJMHg0NDAwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9GU01DX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMxMF9VQVJUMV9CQVNFCQkweEIyMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX1VBUlQyX0JBU0UJCTB4QjIwODAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfVUFSVDNfQkFTRQkJMHhCMjEwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9VQVJUNF9CQVNFCQkweEIyMTgwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX1VBUlQ1X0JBU0UJCTB4QjIyMDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfVUFSVF9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMTBfSERMQ19CQVNFCQkweEIyODAwMDAwCi0jZGVmaW5lIFNQRUFSMzEwX0hETENfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzEwX1JTNDg1XzBfQkFTRQkJMHhCMzAwMDAwMAotI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8wX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjMxMF9SUzQ4NV8xX0JBU0UJCTB4QjM4MDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfUlM0ODVfMV9TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMTBfU09DX0NPTkZJR19CQVNFCTB4QjQwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMTBfU09DX0NPTkZJR19TSVpFCTB4MDAwMDAwNzAKIC8qIEludGVycnVwdCByZWdpc3RlcnMgb2Zmc2V0cyBhbmQgbWFza3MgKi8KICNkZWZpbmUgSU5UX1NUU19NQVNLX1JFRwkJMHgwNAogI2RlZmluZSBTTUlJMF9JUlFfTUFTSwkJCSgxIDw8IDApCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMyMC5oIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9pbmNsdWRlL21hY2gvc3BlYXIzMjAuaAppbmRleCBjYWNmMTdhLi45NDBmMGQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L2luY2x1ZGUvbWFjaC9zcGVhcjMyMC5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvaW5jbHVkZS9tYWNoL3NwZWFyMzIwLmgKQEAgLTE2LDU0ICsxNiwyNSBAQAogI2lmbmRlZiBfX01BQ0hfU1BFQVIzMjBfSAogI2RlZmluZSBfX01BQ0hfU1BFQVIzMjBfSAogCi0jZGVmaW5lIFNQRUFSMzIwX0VNSV9DVFJMX0JBU0UJCTB4NDAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfRU1JX0NUUkxfU0laRQkJMHgwODAwMDAwMAorI2RlZmluZSBTUEVBUjMyMF9FTUlfQ1RSTF9CQVNFCQlVTCgweDQwMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9GU01DX0JBU0UJCVVMKDB4NEMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX05BTkRfQkFTRQkJVUwoMHg1MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfSTJTX0JBU0UJCVVMKDB4NjAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1NESENJX0JBU0UJCVVMKDB4NzAwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX0NMQ0RfQkFTRQkJVUwoMHg5MDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfUEFSX1BPUlRfQkFTRQkJVUwoMHhBMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfQ0FOMF9CQVNFCQlVTCgweEExMDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9DQU4xX0JBU0UJCVVMKDB4QTIwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1VBUlQxX0JBU0UJCVVMKDB4QTMwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1VBUlQyX0JBU0UJCVVMKDB4QTQwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1NTUDBfQkFTRQkJVUwoMHhBNTAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfU1NQMV9CQVNFCQlVTCgweEE2MDAwMDAwKQorI2RlZmluZSBTUEVBUjMyMF9JMkNfQkFTRQkJVUwoMHhBNzAwMDAwMCkKKyNkZWZpbmUgU1BFQVIzMjBfUFdNX0JBU0UJCVVMKDB4QTgwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1NNSUkwX0JBU0UJCVVMKDB4QUEwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1NNSUkxX0JBU0UJCVVMKDB4QUIwMDAwMDApCisjZGVmaW5lIFNQRUFSMzIwX1NPQ19DT05GSUdfQkFTRQlVTCgweEIzMDAwMDAwKQogCi0jZGVmaW5lIFNQRUFSMzIwX0ZTTUNfQkFTRQkJMHg0QzAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9GU01DX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9JMlNfQkFTRQkJMHg2MDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9JMlNfU0laRQkJMHgxMDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX1NESU9fQkFTRQkJMHg3MDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9TRElPX1NJWkUJCTB4MTAwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9DTENEX0JBU0UJCTB4OTAwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfQ0xDRF9TSVpFCQkweDEwMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfUEFSX1BPUlRfQkFTRQkJMHhBMDAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9QQVJfUE9SVF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfQ0FOMF9CQVNFCQkweEExMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX0NBTjBfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX0NBTjFfQkFTRQkJMHhBMjAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9DQU4xX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9VQVJUMV9CQVNFCQkweEEzMDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1VBUlQyX0JBU0UJCTB4QTQwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfVUFSVF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU1NQMF9CQVNFCQkweEE1MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1NTUDBfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX1NTUDFfQkFTRQkJMHhBNjAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9TU1AxX1NJWkUJCTB4MDEwMDAwMDAKLQotI2RlZmluZSBTUEVBUjMyMF9JMkNfQkFTRQkJMHhBNzAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9JMkNfU0laRQkJMHgwMTAwMDAwMAotCi0jZGVmaW5lIFNQRUFSMzIwX1BXTV9CQVNFCQkweEE4MDAwMDAwCi0jZGVmaW5lIFNQRUFSMzIwX1BXTV9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU01JSTBfQkFTRQkJMHhBQTAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9TTUlJMF9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU01JSTFfQkFTRQkJMHhBQjAwMDAwMAotI2RlZmluZSBTUEVBUjMyMF9TTUlJMV9TSVpFCQkweDAxMDAwMDAwCi0KLSNkZWZpbmUgU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFCTB4QjQwMDAwMDAKLSNkZWZpbmUgU1BFQVIzMjBfU09DX0NPTkZJR19TSVpFCTB4MDAwMDAwNzAKIC8qIEludGVycnVwdCByZWdpc3RlcnMgb2Zmc2V0cyBhbmQgbWFza3MgKi8KICNkZWZpbmUgSU5UX1NUU19NQVNLX1JFRwkJMHgwNAogI2RlZmluZSBJTlRfQ0xSX01BU0tfUkVHCQkweDA0CkBAIC03NCw3ICs0NSw3IEBACiAjZGVmaW5lIEVNSV9JUlFfTUFTSwkJCSgxIDw8IDcpCiAjZGVmaW5lIENMQ0RfSVJRX01BU0sJCQkoMSA8PCA4KQogI2RlZmluZSBTUFBfSVJRX01BU0sJCQkoMSA8PCA5KQotI2RlZmluZSBTRElPX0lSUV9NQVNLCQkJKDEgPDwgMTApCisjZGVmaW5lIFNESENJX0lSUV9NQVNLCQkJKDEgPDwgMTApCiAjZGVmaW5lIENBTl9VX0lSUV9NQVNLCQkJKDEgPDwgMTEpCiAjZGVmaW5lIENBTl9MX0lSUV9NQVNLCQkJKDEgPDwgMTIpCiAjZGVmaW5lIFVBUlQxX0lSUV9NQVNLCQkJKDEgPDwgMTMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwLmMKaW5kZXggNWFhMmQ1NC4uMjY5N2U2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDAuYwpAQCAtMTUsOSArMTUsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvcGwwNjEuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgogI2luY2x1ZGUgPHBsYXQvc2hpcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIHBhZCBtdWx0aXBsZXhpbmcgc3VwcG9ydCAqLwogLyogbXV4aW5nIHJlZ2lzdGVycyAqLwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJLmVuYl9vbl9yZXNldCA9IDEsCiB9OwogCi1zdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF90ZWxlY29tX3NkaW9fNGJpdF9tb2Rlc1tdID0geworc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfdGVsZWNvbV9zZGhjaV80Yml0X21vZGVzW10gPSB7CiAJewogCQkuaWRzID0gUEhPVE9fRlJBTUVfTU9ERSB8IExFTkRfSVBfUEhPTkVfTU9ERSB8CiAJCQlIRU5EX0lQX1BIT05FX01PREUgfCBMRU5EX1dJRklfUEhPTkVfTU9ERSB8CkBAIC0zMjMsMTQgKzMyMywxNCBAQAogCX0sCiB9OwogCi1zdHJ1Y3QgcG14X2RldiBwbXhfdGVsZWNvbV9zZGlvXzRiaXQgPSB7Ci0JLm5hbWUgPSAidGVsZWNvbV9zZGlvXzRiaXQiLAotCS5tb2RlcyA9IHBteF90ZWxlY29tX3NkaW9fNGJpdF9tb2RlcywKLQkubW9kZV9jb3VudCA9IEFSUkFZX1NJWkUocG14X3RlbGVjb21fc2Rpb180Yml0X21vZGVzKSwKK3N0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaGNpXzRiaXQgPSB7CisJLm5hbWUgPSAidGVsZWNvbV9zZGhjaV80Yml0IiwKKwkubW9kZXMgPSBwbXhfdGVsZWNvbV9zZGhjaV80Yml0X21vZGVzLAorCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfdGVsZWNvbV9zZGhjaV80Yml0X21vZGVzKSwKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2X21vZGUgcG14X3RlbGVjb21fc2Rpb184Yml0X21vZGVzW10gPSB7CitzdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF90ZWxlY29tX3NkaGNpXzhiaXRfbW9kZXNbXSA9IHsKIAl7CiAJCS5pZHMgPSBQSE9UT19GUkFNRV9NT0RFIHwgTEVORF9JUF9QSE9ORV9NT0RFIHwKIAkJCUhFTkRfSVBfUEhPTkVfTU9ERSB8IExFTkRfV0lGSV9QSE9ORV9NT0RFIHwKQEAgLTM0MiwxMCArMzQyLDEwIEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2IHBteF90ZWxlY29tX3NkaW9fOGJpdCA9IHsKLQkubmFtZSA9ICJ0ZWxlY29tX3NkaW9fOGJpdCIsCi0JLm1vZGVzID0gcG14X3RlbGVjb21fc2Rpb184Yml0X21vZGVzLAotCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfdGVsZWNvbV9zZGlvXzhiaXRfbW9kZXMpLAorc3RydWN0IHBteF9kZXYgcG14X3RlbGVjb21fc2RoY2lfOGJpdCA9IHsKKwkubmFtZSA9ICJ0ZWxlY29tX3NkaGNpXzhiaXQiLAorCS5tb2RlcyA9IHBteF90ZWxlY29tX3NkaGNpXzhiaXRfbW9kZXMsCisJLm1vZGVfY291bnQgPSBBUlJBWV9TSVpFKHBteF90ZWxlY29tX3NkaGNpXzhiaXRfbW9kZXMpLAogCS5lbmJfb25fcmVzZXQgPSAxLAogfTsKIApAQCAtMzcwLDI2ICszNzAsNiBAQAogCS5tdXhfcmVnID0gey5vZmZzZXQgPSBQQURfTVVYX0NPTkZJR19SRUcsIC5tYXNrID0gMHgwMDAwN2ZmZn0sCiB9OwogCi0vKiBBZGQgc3BlYXIzMDAgc3BlY2lmaWMgZGV2aWNlcyBoZXJlICovCi0vKiBhcm0gZ3BpbzEgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLwotc3RhdGljIHN0cnVjdCBwbDA2MV9wbGF0Zm9ybV9kYXRhIGdwaW8xX3BsYXRfZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCT0gOCwKLQkuaXJxX2Jhc2UJPSBTUEVBUl9HUElPMV9JTlRfQkFTRSwKLX07Ci0KLXN0cnVjdCBhbWJhX2RldmljZSBncGlvMV9kZXZpY2UgPSB7Ci0JLmRldiA9IHsKLQkJLmluaXRfbmFtZSA9ICJncGlvMSIsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmdwaW8xX3BsYXRfZGF0YSwKLQl9LAotCS5yZXMgPSB7Ci0JCS5zdGFydCA9IFNQRUFSMzAwX0dQSU9fQkFTRSwKLQkJLmVuZCA9IFNQRUFSMzAwX0dQSU9fQkFTRSArIFNQRUFSMzAwX0dQSU9fU0laRSAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JLmlycSA9IHtWSVJRX0dQSU8xLCBOT19JUlF9LAotfTsKLQogLyogc3BlYXIzeHggc2hhcmVkIGlycSAqLwogc3RydWN0IHNoaXJxX2Rldl9jb25maWcgc2hpcnFfcmFzMV9jb25maWdbXSA9IHsKIAl7CkBAIC00NDMsNiArNDIzLDI2IEBACiAJfSwKIH07CiAKKy8qIEFkZCBzcGVhcjMwMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KKy8qIGFybSBncGlvMSBkZXZpY2UgcmVnaXN0cmF0aW9uICovCitzdGF0aWMgc3RydWN0IHBsMDYxX3BsYXRmb3JtX2RhdGEgZ3BpbzFfcGxhdF9kYXRhID0geworCS5ncGlvX2Jhc2UJPSA4LAorCS5pcnFfYmFzZQk9IFNQRUFSX0dQSU8xX0lOVF9CQVNFLAorfTsKKworc3RydWN0IGFtYmFfZGV2aWNlIGdwaW8xX2RldmljZSA9IHsKKwkuZGV2ID0geworCQkuaW5pdF9uYW1lID0gImdwaW8xIiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZ3BpbzFfcGxhdF9kYXRhLAorCX0sCisJLnJlcyA9IHsKKwkJLnN0YXJ0ID0gU1BFQVIzMDBfR1BJT19CQVNFLAorCQkuZW5kID0gU1BFQVIzMDBfR1BJT19CQVNFICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS5pcnEgPSB7VklSUV9HUElPMSwgTk9fSVJRfSwKK307CisKIC8qIHNwZWFyMzAwIHJvdXRpbmVzICovCiB2b2lkIF9faW5pdCBzcGVhcjMwMF9pbml0KHZvaWQpCiB7CkBAIC00NTIsMTcgKzQ1MiwyMSBAQAogCXNwZWFyM3h4X2luaXQoKTsKIAogCS8qIHNoYXJlZCBpcnEgcmVnaXN0cmF0aW9uICovCi0Jc2hpcnFfcmFzMS5yZWdzLmJhc2UgPQotCQlpb3JlbWFwKFNQRUFSMzAwX1RFTEVDT01fQkFTRSwgU1BFQVIzMDBfVEVMRUNPTV9SRUdfU0laRSk7CisJc2hpcnFfcmFzMS5yZWdzLmJhc2UgPSBpb3JlbWFwKFNQRUFSMzAwX1RFTEVDT01fQkFTRSwgU1pfNEspOwogCWlmIChzaGlycV9yYXMxLnJlZ3MuYmFzZSkgewogCQlyZXQgPSBzcGVhcl9zaGlycV9yZWdpc3Rlcigmc2hpcnFfcmFzMSk7CiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlZ2lzdGVyaW5nIFNoYXJlZCBJUlFcbiIpOwogCX0KLX0KIAotdm9pZCBzcGVhcjMwMF9wbXhfaW5pdCh2b2lkKQotewotCXNwZWFyX3BteF9pbml0KCZwbXhfZHJpdmVyLCBTUEVBUjMwMF9TT0NfQ09ORklHX0JBU0UsCi0JCQlTUEVBUjMwMF9TT0NfQ09ORklHX1NJWkUpOworCS8qIHBteCBpbml0aWFsaXphdGlvbiAqLworCXBteF9kcml2ZXIuYmFzZSA9IGlvcmVtYXAoU1BFQVIzMDBfU09DX0NPTkZJR19CQVNFLCBTWl80Syk7CisJaWYgKHBteF9kcml2ZXIuYmFzZSkgeworCQlyZXQgPSBwbXhfcmVnaXN0ZXIoJnBteF9kcml2ZXIpOworCQlpZiAocmV0KQorCQkJcHJpbnRrKEtFUk5fRVJSICJwYWRtdXg6IHJlZ2lzdGVyYXRpb24gZmFpbGVkLiBlcnIgbm8iCisJCQkJCSI6ICVkXG4iLCByZXQpOworCQkvKiBGcmVlIE1hcHBpbmcsIGRldmljZSBzZWxlY3Rpb24gYWxyZWFkeSBkb25lICovCisJCWlvdW5tYXAocG14X2RyaXZlci5iYXNlKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwX2V2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMwMF9ldmIuYwppbmRleCBiYjIxZGIxLi40MmQyMjUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzAwX2V2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMDBfZXZiLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWRtdXggZGV2aWNlcyB0byBlbmFibGUgKi8KIHN0YXRpYyBzdHJ1Y3QgcG14X2RldiAqcG14X2RldnNbXSA9IHsKQEAgLTI4LDcgKzI4LDcgQEAKIAkvKiBzcGVhcjMwMCBzcGVjaWZpYyBkZXZpY2VzICovCiAJJnBteF9mc21jXzJfY2hpcHMsCiAJJnBteF9jbGNkLAotCSZwbXhfdGVsZWNvbV9zZGlvXzRiaXQsCisJJnBteF90ZWxlY29tX3NkaGNpXzRiaXQsCiAJJnBteF9ncGlvMSwKIH07CiAKQEAgLTUxLDE0ICs1MSwxMyBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JLyogY2FsbCBzcGVhcjMwMCBtYWNoaW5lIGluaXQgZnVuY3Rpb24gKi8KLQlzcGVhcjMwMF9pbml0KCk7Ci0KLQkvKiBwYWRtdXggaW5pdGlhbGl6YXRpb24gKi8KKwkvKiBwYWRtdXggaW5pdGlhbGl6YXRpb24sIG11c3QgYmUgZG9uZSBiZWZvcmUgc3BlYXIzMDBfaW5pdCAqLwogCXBteF9kcml2ZXIubW9kZSA9ICZwaG90b19mcmFtZV9tb2RlOwogCXBteF9kcml2ZXIuZGV2cyA9IHBteF9kZXZzOwogCXBteF9kcml2ZXIuZGV2c19jb3VudCA9IEFSUkFZX1NJWkUocG14X2RldnMpOwotCXNwZWFyMzAwX3BteF9pbml0KCk7CisKKwkvKiBjYWxsIHNwZWFyMzAwIG1hY2hpbmUgaW5pdCBmdW5jdGlvbiAqLworCXNwZWFyMzAwX2luaXQoKTsKIAogCS8qIEFkZCBQbGF0Zm9ybSBEZXZpY2VzICovCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdF9kZXZzLCBBUlJBWV9TSVpFKHBsYXRfZGV2cykpOwpAQCAtNzIsNiArNzEsNiBAQAogCS5ib290X3BhcmFtcwk9CTB4MDAwMDAxMDAsCiAJLm1hcF9pbwkJPQlzcGVhcjN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0Jc3BlYXIzeHhfaW5pdF9pcnEsCi0JLnRpbWVyCQk9CSZzcGVhcl9zeXNfdGltZXIsCisJLnRpbWVyCQk9CSZzcGVhcjN4eF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0Jc3BlYXIzMDBfZXZiX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMC5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMC5jCmluZGV4IDUzYjQxYjUuLjVjMGE2N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTAuYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwLmMKQEAgLTEzLDkgKzEzLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CiAjaW5jbHVkZSA8cGxhdC9zaGlycS5oPgorI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogcGFkIG11bHRpcGxleGluZyBzdXBwb3J0ICovCiAvKiBtdXhpbmcgcmVnaXN0ZXJzICovCkBAIC0xMzksOCArMTM5LDYgQEAKIAkubXV4X3JlZyA9IHsub2Zmc2V0ID0gUEFEX01VWF9DT05GSUdfUkVHLCAubWFzayA9IDB4MDAwMDdmZmZ9LAogfTsKIAotLyogQWRkIHNwZWFyMzEwIHNwZWNpZmljIGRldmljZXMgaGVyZSAqLwotCiAvKiBzcGVhcjN4eCBzaGFyZWQgaXJxICovCiBzdHJ1Y3Qgc2hpcnFfZGV2X2NvbmZpZyBzaGlycV9yYXMxX2NvbmZpZ1tdID0gewogCXsKQEAgLTI1Nyw2ICsyNTUsOCBAQAogCX0sCiB9OwogCisvKiBBZGQgc3BlYXIzMTAgc3BlY2lmaWMgZGV2aWNlcyBoZXJlICovCisKIC8qIHNwZWFyMzEwIHJvdXRpbmVzICovCiB2b2lkIF9faW5pdCBzcGVhcjMxMF9pbml0KHZvaWQpCiB7CkBAIC0yNjcsNyArMjY3LDcgQEAKIAlzcGVhcjN4eF9pbml0KCk7CiAKIAkvKiBzaGFyZWQgaXJxIHJlZ2lzdHJhdGlvbiAqLwotCWJhc2UgPSBpb3JlbWFwKFNQRUFSMzEwX1NPQ19DT05GSUdfQkFTRSwgU1BFQVIzMTBfU09DX0NPTkZJR19TSVpFKTsKKwliYXNlID0gaW9yZW1hcChTUEVBUjMxMF9TT0NfQ09ORklHX0JBU0UsIFNaXzRLKTsKIAlpZiAoYmFzZSkgewogCQkvKiBzaGlycSAxICovCiAJCXNoaXJxX3JhczEucmVncy5iYXNlID0gYmFzZTsKQEAgLTI5MywxMCArMjkzLDExIEBACiAJCWlmIChyZXQpCiAJCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlZ2lzdGVyaW5nIFNoYXJlZCBJUlEgNFxuIik7CiAJfQotfQogCi12b2lkIHNwZWFyMzEwX3BteF9pbml0KHZvaWQpCi17Ci0Jc3BlYXJfcG14X2luaXQoJnBteF9kcml2ZXIsIFNQRUFSMzEwX1NPQ19DT05GSUdfQkFTRSwKLQkJCVNQRUFSMzEwX1NPQ19DT05GSUdfU0laRSk7CisJLyogcG14IGluaXRpYWxpemF0aW9uICovCisJcG14X2RyaXZlci5iYXNlID0gYmFzZTsKKwlyZXQgPSBwbXhfcmVnaXN0ZXIoJnBteF9kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0VSUiAicGFkbXV4OiByZWdpc3RlcmF0aW9uIGZhaWxlZC4gZXJyIG5vOiAlZFxuIiwKKwkJCQlyZXQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMF9ldmIuYyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMTBfZXZiLmMKaW5kZXggN2ZhY2Y2Ni4uMmQ3ZjMzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMxMF9ldmIuYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzEwX2V2Yi5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bWFjaC9nZW5lcmljLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogcGFkbXV4IGRldmljZXMgdG8gZW5hYmxlICovCiBzdGF0aWMgc3RydWN0IHBteF9kZXYgKnBteF9kZXZzW10gPSB7CkBAIC01OCwxNCArNTgsMTMgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCS8qIGNhbGwgc3BlYXIzMTAgbWFjaGluZSBpbml0IGZ1bmN0aW9uICovCi0Jc3BlYXIzMTBfaW5pdCgpOwotCi0JLyogcGFkbXV4IGluaXRpYWxpemF0aW9uICovCisJLyogcGFkbXV4IGluaXRpYWxpemF0aW9uLCBtdXN0IGJlIGRvbmUgYmVmb3JlIHNwZWFyMzEwX2luaXQgKi8KIAlwbXhfZHJpdmVyLm1vZGUgPSBOVUxMOwogCXBteF9kcml2ZXIuZGV2cyA9IHBteF9kZXZzOwogCXBteF9kcml2ZXIuZGV2c19jb3VudCA9IEFSUkFZX1NJWkUocG14X2RldnMpOwotCXNwZWFyMzEwX3BteF9pbml0KCk7CisKKwkvKiBjYWxsIHNwZWFyMzEwIG1hY2hpbmUgaW5pdCBmdW5jdGlvbiAqLworCXNwZWFyMzEwX2luaXQoKTsKIAogCS8qIEFkZCBQbGF0Zm9ybSBEZXZpY2VzICovCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdF9kZXZzLCBBUlJBWV9TSVpFKHBsYXRfZGV2cykpOwpAQCAtNzksNiArNzgsNiBAQAogCS5ib290X3BhcmFtcwk9CTB4MDAwMDAxMDAsCiAJLm1hcF9pbwkJPQlzcGVhcjN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0Jc3BlYXIzeHhfaW5pdF9pcnEsCi0JLnRpbWVyCQk9CSZzcGVhcl9zeXNfdGltZXIsCisJLnRpbWVyCQk9CSZzcGVhcjN4eF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0Jc3BlYXIzMTBfZXZiX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMC5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMC5jCmluZGV4IDg4YjQ2NTIuLjc0MWMxZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjAuYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwLmMKQEAgLTEzLDkgKzEzLDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CiAjaW5jbHVkZSA8cGxhdC9zaGlycS5oPgorI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogLyogcGFkIG11bHRpcGxleGluZyBzdXBwb3J0ICovCiAvKiBtdXhpbmcgcmVnaXN0ZXJzICovCkBAIC0xMTAsNyArMTEwLDcgQEAKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2X21vZGUgcG14X3NkaW9fbW9kZXNbXSA9IHsKK3N0cnVjdCBwbXhfZGV2X21vZGUgcG14X3NkaGNpX21vZGVzW10gPSB7CiAJewogCQkuaWRzID0gQVVUT19ORVRfU01JSV9NT0RFIHwgQVVUT19ORVRfTUlJX01PREUgfAogCQkJU01BTExfUFJJTlRFUlNfTU9ERSwKQEAgLTExOCwxMCArMTE4LDEwIEBACiAJfSwKIH07CiAKLXN0cnVjdCBwbXhfZGV2IHBteF9zZGlvID0gewotCS5uYW1lID0gInNkaW8iLAotCS5tb2RlcyA9IHBteF9zZGlvX21vZGVzLAotCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfc2Rpb19tb2RlcyksCitzdHJ1Y3QgcG14X2RldiBwbXhfc2RoY2kgPSB7CisJLm5hbWUgPSAic2RoY2kiLAorCS5tb2RlcyA9IHBteF9zZGhjaV9tb2RlcywKKwkubW9kZV9jb3VudCA9IEFSUkFZX1NJWkUocG14X3NkaGNpX21vZGVzKSwKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKQEAgLTIxNSwxNyArMjE1LDE3IEBACiAJLmVuYl9vbl9yZXNldCA9IDEsCiB9OwogCi1zdHJ1Y3QgcG14X2Rldl9tb2RlIHBteF9zZGlvX2xlZF9tb2Rlc1tdID0geworc3RydWN0IHBteF9kZXZfbW9kZSBwbXhfc2RoY2lfbGVkX21vZGVzW10gPSB7CiAJewogCQkuaWRzID0gQVVUT19ORVRfU01JSV9NT0RFIHwgQVVUT19ORVRfTUlJX01PREUsCiAJCS5tYXNrID0gUE1YX1NTUF9DU19NQVNLLAogCX0sCiB9OwogCi1zdHJ1Y3QgcG14X2RldiBwbXhfc2Rpb19sZWQgPSB7Ci0JLm5hbWUgPSAic2Rpb19sZWQiLAotCS5tb2RlcyA9IHBteF9zZGlvX2xlZF9tb2RlcywKLQkubW9kZV9jb3VudCA9IEFSUkFZX1NJWkUocG14X3NkaW9fbGVkX21vZGVzKSwKK3N0cnVjdCBwbXhfZGV2IHBteF9zZGhjaV9sZWQgPSB7CisJLm5hbWUgPSAic2RoY2lfbGVkIiwKKwkubW9kZXMgPSBwbXhfc2RoY2lfbGVkX21vZGVzLAorCS5tb2RlX2NvdW50ID0gQVJSQVlfU0laRShwbXhfc2RoY2lfbGVkX21vZGVzKSwKIAkuZW5iX29uX3Jlc2V0ID0gMSwKIH07CiAKQEAgLTM4NCw4ICszODQsNiBAQAogCS5tdXhfcmVnID0gey5vZmZzZXQgPSBQQURfTVVYX0NPTkZJR19SRUcsIC5tYXNrID0gMHgwMDAwN2ZmZn0sCiB9OwogCi0vKiBBZGQgc3BlYXIzMjAgc3BlY2lmaWMgZGV2aWNlcyBoZXJlICovCi0KIC8qIHNwZWFyM3h4IHNoYXJlZCBpcnEgKi8KIHN0cnVjdCBzaGlycV9kZXZfY29uZmlnIHNoaXJxX3JhczFfY29uZmlnW10gPSB7CiAJewpAQCAtNTEwLDYgKzUwOCw4IEBACiAJfSwKIH07CiAKKy8qIEFkZCBzcGVhcjMyMCBzcGVjaWZpYyBkZXZpY2VzIGhlcmUgKi8KKwogLyogc3BlYXIzMjAgcm91dGluZXMgKi8KIHZvaWQgX19pbml0IHNwZWFyMzIwX2luaXQodm9pZCkKIHsKQEAgLTUyMCw3ICs1MjAsNyBAQAogCXNwZWFyM3h4X2luaXQoKTsKIAogCS8qIHNoYXJlZCBpcnEgcmVnaXN0cmF0aW9uICovCi0JYmFzZSA9IGlvcmVtYXAoU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFLCBTUEVBUjMyMF9TT0NfQ09ORklHX1NJWkUpOworCWJhc2UgPSBpb3JlbWFwKFNQRUFSMzIwX1NPQ19DT05GSUdfQkFTRSwgU1pfNEspOwogCWlmIChiYXNlKSB7CiAJCS8qIHNoaXJxIDEgKi8KIAkJc2hpcnFfcmFzMS5yZWdzLmJhc2UgPSBiYXNlOwpAQCAtNTQwLDEwICs1NDAsMTEgQEAKIAkJaWYgKHJldCkKIAkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVnaXN0ZXJpbmcgU2hhcmVkIElSUSA0XG4iKTsKIAl9Ci19CiAKLXZvaWQgc3BlYXIzMjBfcG14X2luaXQodm9pZCkKLXsKLQlzcGVhcl9wbXhfaW5pdCgmcG14X2RyaXZlciwgU1BFQVIzMjBfU09DX0NPTkZJR19CQVNFLAotCQkJU1BFQVIzMjBfU09DX0NPTkZJR19TSVpFKTsKKwkvKiBwbXggaW5pdGlhbGl6YXRpb24gKi8KKwlwbXhfZHJpdmVyLmJhc2UgPSBiYXNlOworCXJldCA9IHBteF9yZWdpc3RlcigmcG14X2RyaXZlcik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJwYWRtdXg6IHJlZ2lzdGVyYXRpb24gZmFpbGVkLiBlcnIgbm86ICVkXG4iLAorCQkJCXJldCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwX2V2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjMyMF9ldmIuYwppbmRleCA2MmFjNjg1Li44MjEzZTRiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyMzIwX2V2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzMjBfZXZiLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBwYWRtdXggZGV2aWNlcyB0byBlbmFibGUgKi8KIHN0YXRpYyBzdHJ1Y3QgcG14X2RldiAqcG14X2RldnNbXSA9IHsKQEAgLTI2LDcgKzI2LDcgQEAKIAogCS8qIHNwZWFyMzIwIHNwZWNpZmljIGRldmljZXMgKi8KIAkmcG14X2ZzbWMsCi0JJnBteF9zZGlvLAorCSZwbXhfc2RoY2ksCiAJJnBteF9pMnMsCiAJJnBteF91YXJ0MSwKIAkmcG14X3VhcnQyLApAQCAtNTUsMTQgKzU1LDEzIEBACiB7CiAJdW5zaWduZWQgaW50IGk7CiAKLQkvKiBjYWxsIHNwZWFyMzIwIG1hY2hpbmUgaW5pdCBmdW5jdGlvbiAqLwotCXNwZWFyMzIwX2luaXQoKTsKLQotCS8qIHBhZG11eCBpbml0aWFsaXphdGlvbiAqLworCS8qIHBhZG11eCBpbml0aWFsaXphdGlvbiwgbXVzdCBiZSBkb25lIGJlZm9yZSBzcGVhcjMyMF9pbml0ICovCiAJcG14X2RyaXZlci5tb2RlID0gJmF1dG9fbmV0X21paV9tb2RlOwogCXBteF9kcml2ZXIuZGV2cyA9IHBteF9kZXZzOwogCXBteF9kcml2ZXIuZGV2c19jb3VudCA9IEFSUkFZX1NJWkUocG14X2RldnMpOwotCXNwZWFyMzIwX3BteF9pbml0KCk7CisKKwkvKiBjYWxsIHNwZWFyMzIwIG1hY2hpbmUgaW5pdCBmdW5jdGlvbiAqLworCXNwZWFyMzIwX2luaXQoKTsKIAogCS8qIEFkZCBQbGF0Zm9ybSBEZXZpY2VzICovCiAJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdF9kZXZzLCBBUlJBWV9TSVpFKHBsYXRfZGV2cykpOwpAQCAtNzYsNiArNzUsNiBAQAogCS5ib290X3BhcmFtcwk9CTB4MDAwMDAxMDAsCiAJLm1hcF9pbwkJPQlzcGVhcjN4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0Jc3BlYXIzeHhfaW5pdF9pcnEsCi0JLnRpbWVyCQk9CSZzcGVhcl9zeXNfdGltZXIsCisJLnRpbWVyCQk9CSZzcGVhcjN4eF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0Jc3BlYXIzMjBfZXZiX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjN4eC5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjN4eC9zcGVhcjN4eC5jCmluZGV4IDUyZjU1M2MuLmQzYmE4Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXIzeHgvc3BlYXIzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyM3h4L3NwZWFyM3h4LmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIC8qIEFkZCBzcGVhcjN4eCBtYWNoaW5lcyBjb21tb24gZGV2aWNlcyBoZXJlICovCiAvKiBncGlvIGRldmljZSByZWdpc3RyYXRpb24gKi8KQEAgLTM1LDcgKzM1LDcgQEAKIAl9LAogCS5yZXMgPSB7CiAJCS5zdGFydCA9IFNQRUFSM1hYX0lDTTNfR1BJT19CQVNFLAotCQkuZW5kID0gU1BFQVIzWFhfSUNNM19HUElPX0JBU0UgKyBTUEVBUjNYWF9JQ00zX0dQSU9fU0laRSAtIDEsCisJCS5lbmQgPSBTUEVBUjNYWF9JQ00zX0dQSU9fQkFTRSArIFNaXzRLIC0gMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAkuaXJxID0ge0lSUV9CQVNJQ19HUElPLCBOT19JUlF9LApAQCAtNDgsNyArNDgsNyBAQAogCX0sCiAJLnJlcyA9IHsKIAkJLnN0YXJ0ID0gU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UsCi0JCS5lbmQgPSBTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSArIFNQRUFSM1hYX0lDTTFfVUFSVF9TSVpFIC0gMSwKKwkJLmVuZCA9IFNQRUFSM1hYX0lDTTFfVUFSVF9CQVNFICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCS5pcnEgPSB7SVJRX1VBUlQsIE5PX0lSUX0sCkBAIC03MSwyMiArNzEsMjIgQEAKIAl7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVIzWFhfSUNNMV9VQVJUX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjNYWF9JQ00xX1VBUlRfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVIzWFhfSUNNMV9VQVJUX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjNYWF9NTDFfVklDX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjNYWF9NTDFfVklDX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSM1hYX01MMV9WSUNfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRSwKIAkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFNQRUFSM1hYX0lDTTNfU1lTX0NUUkxfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVIzWFhfSUNNM19TWVNfQ1RSTF9TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oU1BFQVIzWFhfSUNNM19NSVNDX1JFR19CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjNYWF9JQ00zX01JU0NfUkVHX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCiB9OwpAQCAtNTIzLDI2ICs1MjMsMzUgQEAKIAkubW9kZV9jb3VudCA9IEFSUkFZX1NJWkUocG14X3BsZ3Bpb180NV80Nl80OV81MF9tb2RlcyksCiAJLmVuYl9vbl9yZXNldCA9IDEsCiB9OworI2VuZGlmIC8qIENPTkZJR19NQUNIX1NQRUFSMzEwIHx8IENPTkZJR19NQUNIX1NQRUFSMzIwICovCiAKLSNlbmRpZgotCi0vKiBzcGVhciBwYWRtdXggaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gKi8KLXZvaWQgc3BlYXJfcG14X2luaXQoc3RydWN0IHBteF9kcml2ZXIgKnBteF9kcml2ZXIsIHVpbnQgYmFzZSwgdWludCBzaXplKQorc3RhdGljIHZvaWQgX19pbml0IHNwZWFyM3h4X3RpbWVyX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gMDsKKwljaGFyIHBjbGtfbmFtZVtdID0gInBsbDNfNDhtX2NsayI7CisJc3RydWN0IGNsayAqZ3B0X2NsaywgKnBjbGs7CiAKLQkvKiBwYWQgbXV4IGluaXRpYWxpemF0aW9uICovCi0JcG14X2RyaXZlci0+YmFzZSA9IGlvcmVtYXAoYmFzZSwgc2l6ZSk7Ci0JaWYgKCFwbXhfZHJpdmVyLT5iYXNlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gcG14X2ZhaWw7CisJLyogZ2V0IHRoZSBzeXN0ZW0gdGltZXIgY2xvY2sgKi8KKwlncHRfY2xrID0gY2xrX2dldF9zeXMoImdwdDAiLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGdwdF9jbGspKSB7CisJCXByX2VycigiJXM6Y291bGRuJ3QgZ2V0IGNsayBmb3IgZ3B0XG4iLCBfX2Z1bmNfXyk7CisJCUJVRygpOwogCX0KIAotCXJldCA9IHBteF9yZWdpc3RlcihwbXhfZHJpdmVyKTsKLQlpb3VubWFwKHBteF9kcml2ZXItPmJhc2UpOworCS8qIGdldCB0aGUgc3VpdGFibGUgcGFyZW50IGNsb2NrIGZvciB0aW1lciovCisJcGNsayA9IGNsa19nZXQoTlVMTCwgcGNsa19uYW1lKTsKKwlpZiAoSVNfRVJSKHBjbGspKSB7CisJCXByX2VycigiJXM6Y291bGRuJ3QgZ2V0ICVzIGFzIHBhcmVudCBmb3IgZ3B0XG4iLAorCQkJCV9fZnVuY19fLCBwY2xrX25hbWUpOworCQlCVUcoKTsKKwl9CiAKLXBteF9mYWlsOgotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0VSUiAicGFkbXV4OiByZWdpc3RyYXRpb24gZmFpbGVkLiBlcnIgbm86ICVkXG4iLAotCQkJCXJldCk7CisJY2xrX3NldF9wYXJlbnQoZ3B0X2NsaywgcGNsayk7CisJY2xrX3B1dChncHRfY2xrKTsKKwljbGtfcHV0KHBjbGspOworCisJc3BlYXJfc2V0dXBfdGltZXIoKTsKIH0KKworc3RydWN0IHN5c190aW1lciBzcGVhcjN4eF90aW1lciA9IHsKKwkuaW5pdCA9IHNwZWFyM3h4X3RpbWVyX2luaXQsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9jbG9jay5jCmluZGV4IDM2ZmYwNTYuLjg4Yjc0OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2Nsb2NrLmMKQEAgLTEzLDggKzEzLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxtYWNoL21pc2NfcmVncy5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL21pc2NfcmVncy5oPgogCiAvKiByb290IGNsa3MgKi8KIC8qIDMyIEtIeiBvc2NpbGxhdG9yIGNsb2NrICovCkBAIC0zOSwxOCArMzksNDMgQEAKIH07CiAKIC8qIGNsb2NrIGRlcml2ZWQgZnJvbSAzMCBNSHogb3NjIGNsayAqLworLyogcGxsIG1hc2tzIHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwbGxfY2xrX21hc2tzIHBsbDFfbWFza3MgPSB7CisJLm1vZGVfbWFzayA9IFBMTF9NT0RFX01BU0ssCisJLm1vZGVfc2hpZnQgPSBQTExfTU9ERV9TSElGVCwKKwkubm9ybV9mZGJrX21fbWFzayA9IFBMTF9OT1JNX0ZEQktfTV9NQVNLLAorCS5ub3JtX2ZkYmtfbV9zaGlmdCA9IFBMTF9OT1JNX0ZEQktfTV9TSElGVCwKKwkuZGl0aF9mZGJrX21fbWFzayA9IFBMTF9ESVRIX0ZEQktfTV9NQVNLLAorCS5kaXRoX2ZkYmtfbV9zaGlmdCA9IFBMTF9ESVRIX0ZEQktfTV9TSElGVCwKKwkuZGl2X3BfbWFzayA9IFBMTF9ESVZfUF9NQVNLLAorCS5kaXZfcF9zaGlmdCA9IFBMTF9ESVZfUF9TSElGVCwKKwkuZGl2X25fbWFzayA9IFBMTF9ESVZfTl9NQVNLLAorCS5kaXZfbl9zaGlmdCA9IFBMTF9ESVZfTl9TSElGVCwKK307CisKIC8qIHBsbDEgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxsX2Nsa19jb25maWcgcGxsMV9jb25maWcgPSB7CiAJLm1vZGVfcmVnID0gUExMMV9DVFIsCiAJLmNmZ19yZWcgPSBQTEwxX0ZSUSwKKwkubWFza3MgPSAmcGxsMV9tYXNrcywKK307CisKKy8qIHBsbCByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IHBsbF9yYXRlX3RibCBwbGxfcnRibFtdID0geworCXsubW9kZSA9IDAsIC5tID0gMHg4NSwgLm4gPSAweDBDLCAucCA9IDB4MX0sIC8qIDI2NiBNSHogKi8KKwl7Lm1vZGUgPSAwLCAubSA9IDB4QTYsIC5uID0gMHgwQywgLnAgPSAweDF9LCAvKiAzMzIgTUh6ICovCiB9OwogCiAvKiBQTEwxIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBwbGwxX2NsayA9IHsKKwkuZmxhZ3MgPSBFTkFCTEVEX09OX0lOSVQsCiAJLnBjbGsgPSAmb3NjXzMwbV9jbGssCiAJLmVuX3JlZyA9IFBMTDFfQ1RSLAogCS5lbl9yZWdfYml0ID0gUExMX0VOQUJMRSwKLQkucmVjYWxjID0gJnBsbDFfY2xrX3JlY2FsYywKKwkuY2FsY19yYXRlID0gJnBsbF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZwbGxfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmcGxsX2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7cGxsX3J0YmwsIEFSUkFZX1NJWkUocGxsX3J0YmwpLCAxfSwKIAkucHJpdmF0ZV9kYXRhID0gJnBsbDFfY29uZmlnLAogfTsKIApAQCAtNzYsMzEgKzEwMSw4MyBAQAogCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKKy8qIGFoYiBtYXNrcyBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgYnVzX2Nsa19tYXNrcyBhaGJfbWFza3MgPSB7CisJLm1hc2sgPSBQTExfSENMS19SQVRJT19NQVNLLAorCS5zaGlmdCA9IFBMTF9IQ0xLX1JBVElPX1NISUZULAorfTsKKwogLyogYWhiIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGJ1c19jbGtfY29uZmlnIGFoYl9jb25maWcgPSB7CiAJLnJlZyA9IENPUkVfQ0xLX0NGRywKLQkubWFzayA9IFBMTF9IQ0xLX1JBVElPX01BU0ssCi0JLnNoaWZ0ID0gUExMX0hDTEtfUkFUSU9fU0hJRlQsCisJLm1hc2tzID0gJmFoYl9tYXNrcywKK307CisKKy8qIGFoYiByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IGJ1c19yYXRlX3RibCBidXNfcnRibFtdID0geworCXsuZGl2ID0gM30sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDQgKi8KKwl7LmRpdiA9IDJ9LCAvKiA9PSBwYXJlbnQgZGl2aWRlZCBieSAzICovCisJey5kaXYgPSAxfSwgLyogPT0gcGFyZW50IGRpdmlkZWQgYnkgMiAqLworCXsuZGl2ID0gMH0sIC8qID09IHBhcmVudCBkaXZpZGVkIGJ5IDEgKi8KIH07CiAKIC8qIGFoYiBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgYWhiX2NsayA9IHsKIAkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKIAkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmJ1c19jYWxjX3JhdGUsCiAJLnJlY2FsYyA9ICZidXNfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmYnVzX2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7YnVzX3J0YmwsIEFSUkFZX1NJWkUoYnVzX3J0YmwpLCAyfSwKIAkucHJpdmF0ZV9kYXRhID0gJmFoYl9jb25maWcsCiB9OwogCisvKiBhdXhpbGlhcnkgc3ludGhlc2l6ZXJzIG1hc2tzICovCitzdGF0aWMgc3RydWN0IGF1eF9jbGtfbWFza3MgYXV4X21hc2tzID0geworCS5lcV9zZWxfbWFzayA9IEFVWF9FUV9TRUxfTUFTSywKKwkuZXFfc2VsX3NoaWZ0ID0gQVVYX0VRX1NFTF9TSElGVCwKKwkuZXExX21hc2sgPSBBVVhfRVExX1NFTCwKKwkuZXEyX21hc2sgPSBBVVhfRVEyX1NFTCwKKwkueHNjYWxlX3NlbF9tYXNrID0gQVVYX1hTQ0FMRV9NQVNLLAorCS54c2NhbGVfc2VsX3NoaWZ0ID0gQVVYX1hTQ0FMRV9TSElGVCwKKwkueXNjYWxlX3NlbF9tYXNrID0gQVVYX1lTQ0FMRV9NQVNLLAorCS55c2NhbGVfc2VsX3NoaWZ0ID0gQVVYX1lTQ0FMRV9TSElGVCwKK307CisKKy8qIHVhcnQgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgdWFydF9zeW50aF9jb25maWcgPSB7CisJLnN5bnRoX3JlZyA9IFVBUlRfQ0xLX1NZTlQsCisJLm1hc2tzID0gJmF1eF9tYXNrcywKK307CisKKy8qIGF1eCByYXRlIGNvbmZpZ3VyYXRpb24gdGFibGUsIGluIGFzY2VuZGluZyBvcmRlciBvZiByYXRlcyAqLworc3RydWN0IGF1eF9yYXRlX3RibCBhdXhfcnRibFtdID0geworCS8qIEZvciBQTEwxID0gMzMyIE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDgsIC5lcSA9IDF9LCAvKiA0MS41IE1IeiAqLworCXsueHNjYWxlID0gMSwgLnlzY2FsZSA9IDQsIC5lcSA9IDF9LCAvKiA4MyBNSHogKi8KKwl7LnhzY2FsZSA9IDEsIC55c2NhbGUgPSAyLCAuZXEgPSAxfSwgLyogMTY2IE1IeiAqLworfTsKKworLyogdWFydCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9zeW50aF9jbGsgPSB7CisJLmVuX3JlZyA9IFVBUlRfQ0xLX1NZTlQsCisJLmVuX3JlZ19iaXQgPSBBVVhfU1lOVF9FTkIsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZhdXhfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmF1eF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2F1eF9ydGJsLCBBUlJBWV9TSVpFKGF1eF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZ1YXJ0X3N5bnRoX2NvbmZpZywKK307CisKIC8qIHVhcnQgcGFyZW50cyAqLwogc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gdWFydF9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJnVhcnRfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKQEAgLTExMiwxOSArMTg5LDEzIEBACiAJLnBjbGtfc2VsX21hc2sgPSBVQVJUX0NMS19NQVNLLAogfTsKIAotLyogdWFydCBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB1YXJ0X2NvbmZpZyA9IHsKLQkuc3ludGhfcmVnID0gVUFSVF9DTEtfU1lOVCwKLX07Ci0KIC8qIHVhcnQwIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayB1YXJ0MF9jbGsgPSB7CiAJLmVuX3JlZyA9IFBFUklQMV9DTEtfRU5CLAogCS5lbl9yZWdfYml0ID0gVUFSVDBfQ0xLX0VOQiwKIAkucGNsa19zZWwgPSAmdWFydF9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBVQVJUX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmF1eF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmdWFydF9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAogLyogdWFydDEgY2xvY2sgKi8KQEAgLTEzMywyNSArMjA0LDM1IEBACiAJLmVuX3JlZ19iaXQgPSBVQVJUMV9DTEtfRU5CLAogCS5wY2xrX3NlbCA9ICZ1YXJ0X3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IFVBUlRfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZ1YXJ0X2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCiAvKiBmaXJkYSBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBmaXJkYV9jb25maWcgPSB7CitzdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGZpcmRhX3N5bnRoX2NvbmZpZyA9IHsKIAkuc3ludGhfcmVnID0gRklSREFfQ0xLX1NZTlQsCisJLm1hc2tzID0gJmF1eF9tYXNrcywKK307CisKKy8qIGZpcmRhIHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBmaXJkYV9zeW50aF9jbGsgPSB7CisJLmVuX3JlZyA9IEZJUkRBX0NMS19TWU5ULAorCS5lbl9yZWdfYml0ID0gQVVYX1NZTlRfRU5CLAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmYXV4X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmF1eF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZhdXhfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHthdXhfcnRibCwgQVJSQVlfU0laRShhdXhfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZmlyZGFfc3ludGhfY29uZmlnLAogfTsKIAogLyogZmlyZGEgcGFyZW50cyAqLwogc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZmlyZGFfcGNsa19pbmZvW10gPSB7CiAJewotCQkucGNsayA9ICZwbGwxX2NsaywKLQkJLnBjbGtfbWFzayA9IEFVWF9DTEtfUExMMV9NQVNLLAotCQkuc2NhbGFibGUgPSAxLAorCQkucGNsayA9ICZmaXJkYV9zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCiAJfSwgewogCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCi0JCS5wY2xrX21hc2sgPSBBVVhfQ0xLX1BMTDNfTUFTSywKLQkJLnNjYWxhYmxlID0gMCwKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwzX1ZBTCwKIAl9LAogfTsKIApAQCAtMTY5LDI1ICsyNTAsMzUgQEAKIAkuZW5fcmVnX2JpdCA9IEZJUkRBX0NMS19FTkIsCiAJLnBjbGtfc2VsID0gJmZpcmRhX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEZJUkRBX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmF1eF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZmlyZGFfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGNsY2QgY29uZmlndXJhdGlvbnMgKi8KLXN0YXRpYyBzdHJ1Y3QgYXV4X2Nsa19jb25maWcgY2xjZF9jb25maWcgPSB7CitzdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGNsY2Rfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBDTENEX0NMS19TWU5ULAorCS5tYXNrcyA9ICZhdXhfbWFza3MsCit9OworCisvKiBmaXJkYSBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgY2xjZF9zeW50aF9jbGsgPSB7CisJLmVuX3JlZyA9IENMQ0RfQ0xLX1NZTlQsCisJLmVuX3JlZ19iaXQgPSBBVVhfU1lOVF9FTkIsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZhdXhfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmF1eF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2F1eF9ydGJsLCBBUlJBWV9TSVpFKGF1eF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZjbGNkX3N5bnRoX2NvbmZpZywKIH07CiAKIC8qIGNsY2QgcGFyZW50cyAqLwogc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gY2xjZF9wY2xrX2luZm9bXSA9IHsKIAl7Ci0JCS5wY2xrID0gJnBsbDFfY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwxX01BU0ssCi0JCS5zY2FsYWJsZSA9IDEsCisJCS5wY2xrID0gJmNsY2Rfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAogCX0sIHsKIAkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAotCQkucGNsa19tYXNrID0gQVVYX0NMS19QTEwzX01BU0ssCi0JCS5zY2FsYWJsZSA9IDAsCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCiAJfSwKIH07CiAKQEAgLTIwNSw4MiArMjk2LDE3MyBAQAogCS5lbl9yZWdfYml0ID0gQ0xDRF9DTEtfRU5CLAogCS5wY2xrX3NlbCA9ICZjbGNkX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IENMQ0RfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmYXV4X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZjbGNkX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisvKiBncHQgc3ludGhlc2l6ZXIgbWFza3MgKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19tYXNrcyBncHRfbWFza3MgPSB7CisJLm1zY2FsZV9zZWxfbWFzayA9IEdQVF9NU0NBTEVfTUFTSywKKwkubXNjYWxlX3NlbF9zaGlmdCA9IEdQVF9NU0NBTEVfU0hJRlQsCisJLm5zY2FsZV9zZWxfbWFzayA9IEdQVF9OU0NBTEVfTUFTSywKKwkubnNjYWxlX3NlbF9zaGlmdCA9IEdQVF9OU0NBTEVfU0hJRlQsCit9OworCisvKiBncHQgcmF0ZSBjb25maWd1cmF0aW9uIHRhYmxlLCBpbiBhc2NlbmRpbmcgb3JkZXIgb2YgcmF0ZXMgKi8KK3N0cnVjdCBncHRfcmF0ZV90YmwgZ3B0X3J0YmxbXSA9IHsKKwkvKiBGb3IgcGxsMSA9IDMzMiBNSHogKi8KKwl7Lm1zY2FsZSA9IDQsIC5uc2NhbGUgPSAwfSwgLyogNDEuNSBNSHogKi8KKwl7Lm1zY2FsZSA9IDIsIC5uc2NhbGUgPSAwfSwgLyogNTUuMyBNSHogKi8KKwl7Lm1zY2FsZSA9IDEsIC5uc2NhbGUgPSAwfSwgLyogODMgTUh6ICovCit9OworCisvKiBncHQwIHN5bnRoIGNsayBjb25maWcqLworc3RhdGljIHN0cnVjdCBncHRfY2xrX2NvbmZpZyBncHQwX3N5bnRoX2NvbmZpZyA9IHsKKwkuc3ludGhfcmVnID0gUFJTQzFfQ0xLX0NGRywKKwkubWFza3MgPSAmZ3B0X21hc2tzLAorfTsKKworLyogZ3B0IHN5bnRoIGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsayBncHQwX3N5bnRoX2NsayA9IHsKKwkuZmxhZ3MgPSBBTFdBWVNfRU5BQkxFRCwKKwkucGNsayA9ICZwbGwxX2NsaywKKwkuY2FsY19yYXRlID0gJmdwdF9jYWxjX3JhdGUsCisJLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKKwkuc2V0X3JhdGUgPSAmZ3B0X2Nsa19zZXRfcmF0ZSwKKwkucmF0ZV9jb25maWcgPSB7Z3B0X3J0YmwsIEFSUkFZX1NJWkUoZ3B0X3J0YmwpLCAyfSwKKwkucHJpdmF0ZV9kYXRhID0gJmdwdDBfc3ludGhfY29uZmlnLAogfTsKIAogLyogZ3B0IHBhcmVudHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGdwdF9wY2xrX2luZm9bXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGNsa19pbmZvIGdwdDBfcGNsa19pbmZvW10gPSB7CiAJewotCQkucGNsayA9ICZwbGwxX2NsaywKLQkJLnBjbGtfbWFzayA9IEFVWF9DTEtfUExMMV9NQVNLLAotCQkuc2NhbGFibGUgPSAxLAorCQkucGNsayA9ICZncHQwX3N5bnRoX2NsaywKKwkJLnBjbGtfdmFsID0gQVVYX0NMS19QTEwxX1ZBTCwKIAl9LCB7CiAJCS5wY2xrID0gJnBsbDNfNDhtX2NsaywKLQkJLnBjbGtfbWFzayA9IEFVWF9DTEtfUExMM19NQVNLLAotCQkuc2NhbGFibGUgPSAwLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAogCX0sCiB9OwogCiAvKiBncHQgcGFyZW50IHNlbGVjdCBzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0X3BjbGtfc2VsID0gewotCS5wY2xrX2luZm8gPSBncHRfcGNsa19pbmZvLAotCS5wY2xrX2NvdW50ID0gQVJSQVlfU0laRShncHRfcGNsa19pbmZvKSwKK3N0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0MF9wY2xrX3NlbCA9IHsKKwkucGNsa19pbmZvID0gZ3B0MF9wY2xrX2luZm8sCisJLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdDBfcGNsa19pbmZvKSwKIAkucGNsa19zZWxfcmVnID0gUEVSSVBfQ0xLX0NGRywKIAkucGNsa19zZWxfbWFzayA9IEdQVF9DTEtfTUFTSywKIH07CiAKLS8qIGdwdDBfMSBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBncHQwXzFfY29uZmlnID0gewotCS5zeW50aF9yZWcgPSBQUlNDMV9DTEtfQ0ZHLAotfTsKLQogLyogZ3B0MCBBUk0xIHN1YnN5c3RlbSB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0MF9jbGsgPSB7CiAJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCi0JLnBjbGtfc2VsID0gJmdwdF9wY2xrX3NlbCwKKwkucGNsa19zZWwgPSAmZ3B0MF9wY2xrX3NlbCwKIAkucGNsa19zZWxfc2hpZnQgPSBHUFQwX0NMS19TSElGVCwKLQkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAotCS5wcml2YXRlX2RhdGEgPSAmZ3B0MF8xX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCit9OworCisKKy8qIE5vdGU6IGdwdDAgYW5kIGdwdDEgc2hhcmUgc2FtZSBwYXJlbnQgY2xvY2tzICovCisvKiBncHQgcGFyZW50IHNlbGVjdCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0MV9wY2xrX3NlbCA9IHsKKwkucGNsa19pbmZvID0gZ3B0MF9wY2xrX2luZm8sCisJLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdDBfcGNsa19pbmZvKSwKKwkucGNsa19zZWxfcmVnID0gUEVSSVBfQ0xLX0NGRywKKwkucGNsa19zZWxfbWFzayA9IEdQVF9DTEtfTUFTSywKIH07CiAKIC8qIGdwdDEgdGltZXIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLnBjbGtfc2VsID0gJmdwdDFfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUMV9DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDBfMV9jb25maWcsCisJLnJlY2FsYyA9ICZmb2xsb3dfcGFyZW50LAogfTsKIAotLyogZ3B0MiBjb25maWd1cmF0aW9ucyAqLwotc3RhdGljIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyBncHQyX2NvbmZpZyA9IHsKKy8qIGdwdDIgc3ludGggY2xrIGNvbmZpZyovCitzdGF0aWMgc3RydWN0IGdwdF9jbGtfY29uZmlnIGdwdDJfc3ludGhfY29uZmlnID0gewogCS5zeW50aF9yZWcgPSBQUlNDMl9DTEtfQ0ZHLAorCS5tYXNrcyA9ICZncHRfbWFza3MsCit9OworCisvKiBncHQgc3ludGggY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfc3ludGhfY2xrID0geworCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrID0gJnBsbDFfY2xrLAorCS5jYWxjX3JhdGUgPSAmZ3B0X2NhbGNfcmF0ZSwKKwkucmVjYWxjID0gJmdwdF9jbGtfcmVjYWxjLAorCS5zZXRfcmF0ZSA9ICZncHRfY2xrX3NldF9yYXRlLAorCS5yYXRlX2NvbmZpZyA9IHtncHRfcnRibCwgQVJSQVlfU0laRShncHRfcnRibCksIDJ9LAorCS5wcml2YXRlX2RhdGEgPSAmZ3B0Ml9zeW50aF9jb25maWcsCit9OworCisvKiBncHQgcGFyZW50cyAqLworc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gZ3B0Ml9wY2xrX2luZm9bXSA9IHsKKwl7CisJCS5wY2xrID0gJmdwdDJfc3ludGhfY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDFfVkFMLAorCX0sIHsKKwkJLnBjbGsgPSAmcGxsM180OG1fY2xrLAorCQkucGNsa192YWwgPSBBVVhfQ0xLX1BMTDNfVkFMLAorCX0sCit9OworCisvKiBncHQgcGFyZW50IHNlbGVjdCBzdHJ1Y3R1cmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNsa19zZWwgZ3B0Ml9wY2xrX3NlbCA9IHsKKwkucGNsa19pbmZvID0gZ3B0Ml9wY2xrX2luZm8sCisJLnBjbGtfY291bnQgPSBBUlJBWV9TSVpFKGdwdDJfcGNsa19pbmZvKSwKKwkucGNsa19zZWxfcmVnID0gUEVSSVBfQ0xLX0NGRywKKwkucGNsa19zZWxfbWFzayA9IEdQVF9DTEtfTUFTSywKIH07CiAKIC8qIGdwdDIgdGltZXIgY2xvY2sgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfY2xrID0gewotCS5lbl9yZWcgPSBQRVJJUDFfQ0xLX0VOQiwKLQkuZW5fcmVnX2JpdCA9IEdQVDJfQ0xLX0VOQiwKLQkucGNsa19zZWwgPSAmZ3B0X3BjbGtfc2VsLAorCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAorCS5wY2xrX3NlbCA9ICZncHQyX3BjbGtfc2VsLAogCS5wY2xrX3NlbF9zaGlmdCA9IEdQVDJfQ0xLX1NISUZULAotCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCi0JLnByaXZhdGVfZGF0YSA9ICZncHQyX2NvbmZpZywKKwkucmVjYWxjID0gJmZvbGxvd19wYXJlbnQsCiB9OwogCi0vKiBncHQzIGNvbmZpZ3VyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGF1eF9jbGtfY29uZmlnIGdwdDNfY29uZmlnID0geworLyogZ3B0MyBzeW50aCBjbGsgY29uZmlnKi8KK3N0YXRpYyBzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgZ3B0M19zeW50aF9jb25maWcgPSB7CiAJLnN5bnRoX3JlZyA9IFBSU0MzX0NMS19DRkcsCisJLm1hc2tzID0gJmdwdF9tYXNrcywKK307CisKKy8qIGdwdCBzeW50aCBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19zeW50aF9jbGsgPSB7CisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGsgPSAmcGxsMV9jbGssCisJLmNhbGNfcmF0ZSA9ICZncHRfY2FsY19yYXRlLAorCS5yZWNhbGMgPSAmZ3B0X2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmdwdF9jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2dwdF9ydGJsLCBBUlJBWV9TSVpFKGdwdF9ydGJsKSwgMn0sCisJLnByaXZhdGVfZGF0YSA9ICZncHQzX3N5bnRoX2NvbmZpZywKK307CisKKy8qIGdwdCBwYXJlbnRzICovCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyBncHQzX3BjbGtfaW5mb1tdID0geworCXsKKwkJLnBjbGsgPSAmZ3B0M19zeW50aF9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMMV9WQUwsCisJfSwgeworCQkucGNsayA9ICZwbGwzXzQ4bV9jbGssCisJCS5wY2xrX3ZhbCA9IEFVWF9DTEtfUExMM19WQUwsCisJfSwKK307CisKKy8qIGdwdCBwYXJlbnQgc2VsZWN0IHN0cnVjdHVyZSAqLworc3RhdGljIHN0cnVjdCBwY2xrX3NlbCBncHQzX3BjbGtfc2VsID0geworCS5wY2xrX2luZm8gPSBncHQzX3BjbGtfaW5mbywKKwkucGNsa19jb3VudCA9IEFSUkFZX1NJWkUoZ3B0M19wY2xrX2luZm8pLAorCS5wY2xrX3NlbF9yZWcgPSBQRVJJUF9DTEtfQ0ZHLAorCS5wY2xrX3NlbF9tYXNrID0gR1BUX0NMS19NQVNLLAogfTsKIAogLyogZ3B0MyB0aW1lciBjbG9jayAqLwogc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19jbGsgPSB7Ci0JLmVuX3JlZyA9IFBFUklQMV9DTEtfRU5CLAotCS5lbl9yZWdfYml0ID0gR1BUM19DTEtfRU5CLAotCS5wY2xrX3NlbCA9ICZncHRfcGNsa19zZWwsCisJLmZsYWdzID0gQUxXQVlTX0VOQUJMRUQsCisJLnBjbGtfc2VsID0gJmdwdDNfcGNsa19zZWwsCiAJLnBjbGtfc2VsX3NoaWZ0ID0gR1BUM19DTEtfU0hJRlQsCi0JLnJlY2FsYyA9ICZncHRfY2xrX3JlY2FsYywKLQkucHJpdmF0ZV9kYXRhID0gJmdwdDNfY29uZmlnLAorCS5yZWNhbGMgPSAmZm9sbG93X3BhcmVudCwKIH07CiAKIC8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwzIGNsayAqLwpAQCAtMzA5LDE4ICs0OTEsMjYgQEAKIH07CiAKIC8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhaGIgY2xrICovCisvKiBhcGIgbWFza3Mgc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IGJ1c19jbGtfbWFza3MgYXBiX21hc2tzID0geworCS5tYXNrID0gSENMS19QQ0xLX1JBVElPX01BU0ssCisJLnNoaWZ0ID0gSENMS19QQ0xLX1JBVElPX1NISUZULAorfTsKKwogLyogYXBiIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IGJ1c19jbGtfY29uZmlnIGFwYl9jb25maWcgPSB7CiAJLnJlZyA9IENPUkVfQ0xLX0NGRywKLQkubWFzayA9IEhDTEtfUENMS19SQVRJT19NQVNLLAotCS5zaGlmdCA9IEhDTEtfUENMS19SQVRJT19TSElGVCwKKwkubWFza3MgPSAmYXBiX21hc2tzLAogfTsKIAogLyogYXBiIGNsb2NrICovCiBzdGF0aWMgc3RydWN0IGNsayBhcGJfY2xrID0gewogCS5mbGFncyA9IEFMV0FZU19FTkFCTEVELAogCS5wY2xrID0gJmFoYl9jbGssCisJLmNhbGNfcmF0ZSA9ICZidXNfY2FsY19yYXRlLAogCS5yZWNhbGMgPSAmYnVzX2Nsa19yZWNhbGMsCisJLnNldF9yYXRlID0gJmJ1c19jbGtfc2V0X3JhdGUsCisJLnJhdGVfY29uZmlnID0ge2J1c19ydGJsLCBBUlJBWV9TSVpFKGJ1c19ydGJsKSwgMn0sCiAJLnByaXZhdGVfZGF0YSA9ICZhcGJfY29uZmlnLAogfTsKIApAQCAtNDMyLDEyICs2MjIsMTIgQEAKIAogLyogYXJyYXkgb2YgYWxsIHNwZWFyIDZ4eCBjbG9jayBsb29rdXBzICovCiBzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgc3BlYXJfY2xrX2xvb2t1cHNbXSA9IHsKLQl7IC5jb25faWQgPSAiYXBiX3BjbGsiLAkuY2xrID0gJmR1bW15X2FwYl9wY2xrfSwKKwl7IC5jb25faWQgPSAiYXBiX3BjbGsiLAkJLmNsayA9ICZkdW1teV9hcGJfcGNsa30sCiAJLyogcm9vdCBjbGtzICovCiAJeyAuY29uX2lkID0gIm9zY18zMmtfY2xrIiwJLmNsayA9ICZvc2NfMzJrX2Nsa30sCiAJeyAuY29uX2lkID0gIm9zY18zMG1fY2xrIiwJLmNsayA9ICZvc2NfMzBtX2Nsa30sCiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIDMyIEtIeiBvcwkJIGNsayAqLwotCXsgLmRldl9pZCA9ICJydGMiLAkJLmNsayA9ICZydGNfY2xrfSwKKwl7IC5kZXZfaWQgPSAicnRjLXNwZWFyIiwJLmNsayA9ICZydGNfY2xrfSwKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gMzAgTUh6IG9zCQkgY2xrICovCiAJeyAuY29uX2lkID0gInBsbDFfY2xrIiwJCS5jbGsgPSAmcGxsMV9jbGt9LAogCXsgLmNvbl9pZCA9ICJwbGwzXzQ4bV9jbGsiLAkuY2xrID0gJnBsbDNfNDhtX2Nsa30sCkBAIC00NDUsNiArNjM1LDEyIEBACiAJLyogY2xvY2sgZGVyaXZlZCBmcm9tIHBsbDEgY2xrICovCiAJeyAuY29uX2lkID0gImNwdV9jbGsiLAkJLmNsayA9ICZjcHVfY2xrfSwKIAl7IC5jb25faWQgPSAiYWhiX2NsayIsCQkuY2xrID0gJmFoYl9jbGt9LAorCXsgLmNvbl9pZCA9ICJ1YXJ0X3N5bnRoX2NsayIsCS5jbGsgPSAmdWFydF9zeW50aF9jbGt9LAorCXsgLmNvbl9pZCA9ICJmaXJkYV9zeW50aF9jbGsiLAkuY2xrID0gJmZpcmRhX3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImNsY2Rfc3ludGhfY2xrIiwJLmNsayA9ICZjbGNkX3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImdwdDBfc3ludGhfY2xrIiwJLmNsayA9ICZncHQwX3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImdwdDJfc3ludGhfY2xrIiwJLmNsayA9ICZncHQyX3N5bnRoX2Nsa30sCisJeyAuY29uX2lkID0gImdwdDNfc3ludGhfY2xrIiwJLmNsayA9ICZncHQzX3N5bnRoX2Nsa30sCiAJeyAuZGV2X2lkID0gInVhcnQwIiwJCS5jbGsgPSAmdWFydDBfY2xrfSwKIAl7IC5kZXZfaWQgPSAidWFydDEiLAkJLmNsayA9ICZ1YXJ0MV9jbGt9LAogCXsgLmRldl9pZCA9ICJmaXJkYSIsCQkuY2xrID0gJmZpcmRhX2Nsa30sCkBAIC00NTQsMjIgKzY1MCwyMiBAQAogCXsgLmRldl9pZCA9ICJncHQyIiwJCS5jbGsgPSAmZ3B0Ml9jbGt9LAogCXsgLmRldl9pZCA9ICJncHQzIiwJCS5jbGsgPSAmZ3B0M19jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBwbGwzIGNsayAqLwotCXsgLmRldl9pZCA9ICJ1c2JoMCIsCQkuY2xrID0gJnVzYmgwX2Nsa30sCi0JeyAuZGV2X2lkID0gInVzYmgxIiwJCS5jbGsgPSAmdXNiaDFfY2xrfSwKLQl7IC5kZXZfaWQgPSAidXNiZCIsCQkuY2xrID0gJnVzYmRfY2xrfSwKKwl7IC5kZXZfaWQgPSAiZGVzaWdud2FyZV91ZGMiLAkuY2xrID0gJnVzYmRfY2xrfSwKKwl7IC5jb25faWQgPSAidXNiaC4wX2NsayIsCS5jbGsgPSAmdXNiaDBfY2xrfSwKKwl7IC5jb25faWQgPSAidXNiaC4xX2NsayIsCS5jbGsgPSAmdXNiaDFfY2xrfSwKIAkvKiBjbG9jayBkZXJpdmVkIGZyb20gYWhiIGNsayAqLwogCXsgLmNvbl9pZCA9ICJhcGJfY2xrIiwJCS5jbGsgPSAmYXBiX2Nsa30sCi0JeyAuZGV2X2lkID0gImkyYyIsCQkuY2xrID0gJmkyY19jbGt9LAorCXsgLmRldl9pZCA9ICJpMmNfZGVzaWdud2FyZS4wIiwJLmNsayA9ICZpMmNfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZG1hIiwJCS5jbGsgPSAmZG1hX2Nsa30sCiAJeyAuZGV2X2lkID0gImpwZWciLAkJLmNsayA9ICZqcGVnX2Nsa30sCiAJeyAuZGV2X2lkID0gImdtYWMiLAkJLmNsayA9ICZnbWFjX2Nsa30sCiAJeyAuZGV2X2lkID0gInNtaSIsCQkuY2xrID0gJnNtaV9jbGt9LAotCXsgLmRldl9pZCA9ICJmc21jIiwJCS5jbGsgPSAmZnNtY19jbGt9LAorCXsgLmNvbl9pZCA9ICJmc21jIiwJCS5jbGsgPSAmZnNtY19jbGt9LAogCS8qIGNsb2NrIGRlcml2ZWQgZnJvbSBhcGIgY2xrICovCiAJeyAuZGV2X2lkID0gImFkYyIsCQkuY2xrID0gJmFkY19jbGt9LAotCXsgLmRldl9pZCA9ICJzc3AwIiwJCS5jbGsgPSAmc3NwMF9jbGt9LAotCXsgLmRldl9pZCA9ICJzc3AxIiwJCS5jbGsgPSAmc3NwMV9jbGt9LAotCXsgLmRldl9pZCA9ICJzc3AyIiwJCS5jbGsgPSAmc3NwMl9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMCIsCS5jbGsgPSAmc3NwMF9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMSIsCS5jbGsgPSAmc3NwMV9jbGt9LAorCXsgLmRldl9pZCA9ICJzc3AtcGwwMjIuMiIsCS5jbGsgPSAmc3NwMl9jbGt9LAogCXsgLmRldl9pZCA9ICJncGlvMCIsCQkuY2xrID0gJmdwaW8wX2Nsa30sCiAJeyAuZGV2X2lkID0gImdwaW8xIiwJCS5jbGsgPSAmZ3BpbzFfY2xrfSwKIAl7IC5kZXZfaWQgPSAiZ3BpbzIiLAkJLmNsayA9ICZncGlvMl9jbGt9LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggOWVhZWNhZS4uOGEwYjBlZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xMSw5ICsxMSw4IEBACiAgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgKi8KIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCQkubWFjcm8JZGlzYWJsZV9maXEKIAkJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2dlbmVyaWMuaAppbmRleCAxNjIwNWE1Li45NGNmNGE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvZ2VuZXJpYy5oCkBAIC0xNCwxMSArMTQsMTEgQEAKICNpZm5kZWYgX19NQUNIX0dFTkVSSUNfSAogI2RlZmluZSBfX01BQ0hfR0VORVJJQ19ICiAKLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAvKgogICogRWFjaCBHUFQgaGFzIDIgdGltZXIgY2hhbm5lbHMKQEAgLTMxLDkgKzMxLDEwIEBACiAvKiBBZGQgc3BlYXI2eHggZmFtaWx5IGRldmljZSBzdHJ1Y3R1cmUgZGVjbGFyYXRpb25zIGhlcmUgKi8KIGV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgZ3Bpb19kZXZpY2VbXTsKIGV4dGVybiBzdHJ1Y3QgYW1iYV9kZXZpY2UgdWFydF9kZXZpY2VbXTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyX3N5c190aW1lcjsKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHNwZWFyNnh4X3RpbWVyOwogCiAvKiBBZGQgc3BlYXI2eHggZmFtaWx5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBoZXJlICovCit2b2lkIF9faW5pdCBzcGVhcl9zZXR1cF90aW1lcih2b2lkKTsKIHZvaWQgX19pbml0IHNwZWFyNnh4X21hcF9pbyh2b2lkKTsKIHZvaWQgX19pbml0IHNwZWFyNnh4X2luaXRfaXJxKHZvaWQpOwogdm9pZCBfX2luaXQgc3BlYXI2eHhfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IDc1NDUxMTYuLjBiM2Y5NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMTQsOCArMTQsMTAgQEAKICNpZm5kZWYgX19NQUNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19NQUNIX0hBUkRXQVJFX0gKIAorI2luY2x1ZGUgPHBsYXQvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisKIC8qIFZpdHVhbCB0byBwaHlzaWNhbCB0cmFuc2xhdGlvbiBvZiBzdGF0aWNhbGx5IG1hcHBlZCBzcGFjZSAqLwogI2RlZmluZSBJT19BRERSRVNTKHgpCQkoeCB8IDB4RjAwMDAwMDApCiAKICNlbmRpZiAvKiBfX01BQ0hfSEFSRFdBUkVfSCAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9taXNjX3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL21pc2NfcmVncy5oCmluZGV4IDAzOTA4MDMuLjY4YzIwYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL21pc2NfcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL21pc2NfcmVncy5oCkBAIC0xNCwxNiArMTQsMTYgQEAKICNpZm5kZWYgX19NQUNIX01JU0NfUkVHU19ICiAjZGVmaW5lIF9fTUFDSF9NSVNDX1JFR1NfSAogCi0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAotI2RlZmluZSBNSVNDX0JBU0UJCVZBX1NQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRQorI2RlZmluZSBNSVNDX0JBU0UJCUlPTUVNKFZBX1NQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSkKIAotI2RlZmluZSBTT0NfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMDApKQotI2RlZmluZSBESUFHX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDA0KSkKLSNkZWZpbmUgUExMMV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDA4KSkKLSNkZWZpbmUgUExMMV9GUlEJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDBDKSkKLSNkZWZpbmUgUExMMV9NT0QJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDEwKSkKLSNkZWZpbmUgUExMMl9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDE0KSkKKyNkZWZpbmUgU09DX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDAwMCkKKyNkZWZpbmUgRElBR19DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwMDQpCisjZGVmaW5lIFBMTDFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwMDgpCisjZGVmaW5lIFBMTDFfRlJRCQkoTUlTQ19CQVNFICsgMHgwMEMpCisjZGVmaW5lIFBMTDFfTU9ECQkoTUlTQ19CQVNFICsgMHgwMTApCisjZGVmaW5lIFBMTDJfQ1RSCQkoTUlTQ19CQVNFICsgMHgwMTQpCiAvKiBQTExfQ1RSIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIFBMTF9FTkFCTEUJCTIKICNkZWZpbmUgUExMX01PREVfU0hJRlQJCTQKQEAgLTMzLDcgKzMzLDcgQEAKICNkZWZpbmUgUExMX01PREVfRElUSF9EU0IJMgogI2RlZmluZSBQTExfTU9ERV9ESVRIX1NTQgkzCiAKLSNkZWZpbmUgUExMMl9GUlEJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDE4KSkKKyNkZWZpbmUgUExMMl9GUlEJCShNSVNDX0JBU0UgKyAweDAxOCkKIC8qIFBMTCBGUlEgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgUExMX0RJVl9OX1NISUZUCQkwCiAjZGVmaW5lIFBMTF9ESVZfTl9NQVNLCQkweEZGCkBAIC00NCwxNiArNDQsMTYgQEAKICNkZWZpbmUgUExMX0RJVEhfRkRCS19NX1NISUZUCTE2CiAjZGVmaW5lIFBMTF9ESVRIX0ZEQktfTV9NQVNLCTB4RkZGRgogCi0jZGVmaW5lIFBMTDJfTU9ECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAxQykpCi0jZGVmaW5lIFBMTF9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAyMCkpCi0jZGVmaW5lIENPUkVfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwMjQpKQorI2RlZmluZSBQTEwyX01PRAkJKE1JU0NfQkFTRSArIDB4MDFDKQorI2RlZmluZSBQTExfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDIwKQorI2RlZmluZSBDT1JFX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDAyNCkKIC8qIENPUkUgQ0xLIENGRyByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBQTExfSENMS19SQVRJT19TSElGVAkxMAogI2RlZmluZSBQTExfSENMS19SQVRJT19NQVNLCTB4MwogI2RlZmluZSBIQ0xLX1BDTEtfUkFUSU9fU0hJRlQJOAogI2RlZmluZSBIQ0xLX1BDTEtfUkFUSU9fTUFTSwkweDMKIAotI2RlZmluZSBQRVJJUF9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAyOCkpCisjZGVmaW5lIFBFUklQX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDAyOCkKIC8qIFBFUklQX0NMS19DRkcgcmVnaXN0ZXIgbWFza3MgKi8KICNkZWZpbmUgQ0xDRF9DTEtfU0hJRlQJCTIKICNkZWZpbmUgQ0xDRF9DTEtfTUFTSwkJMHgzCkBAIC02NiwxMCArNjYsMTAgQEAKICNkZWZpbmUgR1BUMl9DTEtfU0hJRlQJCTExCiAjZGVmaW5lIEdQVDNfQ0xLX1NISUZUCQkxMgogI2RlZmluZSBHUFRfQ0xLX01BU0sJCTB4MQotI2RlZmluZSBBVVhfQ0xLX1BMTDNfTUFTSwkwCi0jZGVmaW5lIEFVWF9DTEtfUExMMV9NQVNLCTEKKyNkZWZpbmUgQVVYX0NMS19QTEwzX1ZBTAkwCisjZGVmaW5lIEFVWF9DTEtfUExMMV9WQUwJMQogCi0jZGVmaW5lIFBFUklQMV9DTEtfRU5CCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAyQykpCisjZGVmaW5lIFBFUklQMV9DTEtfRU5CCQkoTUlTQ19CQVNFICsgMHgwMkMpCiAvKiBQRVJJUDFfQ0xLX0VOQiByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBVQVJUMF9DTEtfRU5CCQkzCiAjZGVmaW5lIFVBUlQxX0NMS19FTkIJCTQKQEAgLTk1LDM0ICs5NSwzNSBAQAogI2RlZmluZSBVU0JIMF9DTEtfRU5CCQkyNQogI2RlZmluZSBVU0JIMV9DTEtfRU5CCQkyNgogCi0jZGVmaW5lIFNPQ19DT1JFX0lECQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzMCkpCi0jZGVmaW5lIFJBU19DTEtfRU5CCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzNCkpCi0jZGVmaW5lIFBFUklQMV9TT0ZfUlNUCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDAzOCkpCisjZGVmaW5lIFNPQ19DT1JFX0lECQkoTUlTQ19CQVNFICsgMHgwMzApCisjZGVmaW5lIFJBU19DTEtfRU5CCQkoTUlTQ19CQVNFICsgMHgwMzQpCisjZGVmaW5lIFBFUklQMV9TT0ZfUlNUCQkoTUlTQ19CQVNFICsgMHgwMzgpCiAvKiBQRVJJUDFfU09GX1JTVCByZWdpc3RlciBtYXNrcyAqLwogI2RlZmluZSBKUEVHX1NPRl9SU1QJCTgKIAotI2RlZmluZSBTT0NfVVNFUl9JRAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwM0MpKQotI2RlZmluZSBSQVNfU09GX1JTVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNDApKQotI2RlZmluZSBQUlNDMV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA0NCkpCi0jZGVmaW5lIFBSU0MyX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDQ4KSkKLSNkZWZpbmUgUFJTQzNfQ0xLX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNEMpKQorI2RlZmluZSBTT0NfVVNFUl9JRAkJKE1JU0NfQkFTRSArIDB4MDNDKQorI2RlZmluZSBSQVNfU09GX1JTVAkJKE1JU0NfQkFTRSArIDB4MDQwKQorI2RlZmluZSBQUlNDMV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNDQpCisjZGVmaW5lIFBSU0MyX0NMS19DRkcJCShNSVNDX0JBU0UgKyAweDA0OCkKKyNkZWZpbmUgUFJTQzNfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDRDKQogLyogZ3B0IHN5bnRoZXNpemVyIHJlZ2lzdGVyIG1hc2tzICovCiAjZGVmaW5lIEdQVF9NU0NBTEVfU0hJRlQJMAogI2RlZmluZSBHUFRfTVNDQUxFX01BU0sJCTB4RkZGCiAjZGVmaW5lIEdQVF9OU0NBTEVfU0hJRlQJMTIKICNkZWZpbmUgR1BUX05TQ0FMRV9NQVNLCQkweEYKIAotI2RlZmluZSBBTUVNX0NMS19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDUwKSkKLSNkZWZpbmUgRVhQSV9DTEtfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA1NCkpCi0jZGVmaW5lIENMQ0RfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDVDKSkKLSNkZWZpbmUgRklSREFfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDYwKSkKLSNkZWZpbmUgVUFSVF9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNjQpKQotI2RlZmluZSBHTUFDX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA2OCkpCi0jZGVmaW5lIFJBUzFfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDZDKSkKLSNkZWZpbmUgUkFTMl9DTEtfU1lOVAkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwNzApKQotI2RlZmluZSBSQVMzX0NMS19TWU5UCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA3NCkpCi0jZGVmaW5lIFJBUzRfQ0xLX1NZTlQJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDc4KSkKKyNkZWZpbmUgQU1FTV9DTEtfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwNTApCisjZGVmaW5lIEVYUElfQ0xLX0NGRwkJKE1JU0NfQkFTRSArIDB4MDU0KQorI2RlZmluZSBDTENEX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNUMpCisjZGVmaW5lIEZJUkRBX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNjApCisjZGVmaW5lIFVBUlRfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA2NCkKKyNkZWZpbmUgR01BQ19DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDY4KQorI2RlZmluZSBSQVMxX0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNkMpCisjZGVmaW5lIFJBUzJfQ0xLX1NZTlQJCShNSVNDX0JBU0UgKyAweDA3MCkKKyNkZWZpbmUgUkFTM19DTEtfU1lOVAkJKE1JU0NfQkFTRSArIDB4MDc0KQorI2RlZmluZSBSQVM0X0NMS19TWU5UCQkoTUlTQ19CQVNFICsgMHgwNzgpCiAvKiBhdXggY2xrIHN5bnRoZXNpc2VyIHJlZ2lzdGVyIG1hc2tzIGZvciBpcmRhIHRvIHJhczQgKi8KKyNkZWZpbmUgQVVYX1NZTlRfRU5CCQkzMQogI2RlZmluZSBBVVhfRVFfU0VMX1NISUZUCTMwCiAjZGVmaW5lIEFVWF9FUV9TRUxfTUFTSwkJMQogI2RlZmluZSBBVVhfRVExX1NFTAkJMApAQCAtMTMyLDQyICsxMzMsNDIgQEAKICNkZWZpbmUgQVVYX1lTQ0FMRV9TSElGVAkwCiAjZGVmaW5lIEFVWF9ZU0NBTEVfTUFTSwkJMHhGRkYKIAotI2RlZmluZSBJQ00xX0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDdDKSkKLSNkZWZpbmUgSUNNMl9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4MCkpCi0jZGVmaW5lIElDTTNfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwODQpKQotI2RlZmluZSBJQ000X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDg4KSkKLSNkZWZpbmUgSUNNNV9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA4QykpCi0jZGVmaW5lIElDTTZfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOTApKQotI2RlZmluZSBJQ003X0FSQl9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MDk0KSkKLSNkZWZpbmUgSUNNOF9BUkJfQ0ZHCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDA5OCkpCi0jZGVmaW5lIElDTTlfQVJCX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwOUMpKQotI2RlZmluZSBETUFfQ0hOX0NGRwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQTApKQotI2RlZmluZSBVU0IyX1BIWV9DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEE0KSkKLSNkZWZpbmUgR01BQ19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBBOCkpCi0jZGVmaW5lIEVYUElfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQUMpKQotI2RlZmluZSBQUkMxX0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDMCkpCi0jZGVmaW5lIFBSQzJfTE9DS19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEM0KSkKLSNkZWZpbmUgUFJDM19MT0NLX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwQzgpKQotI2RlZmluZSBQUkM0X0xPQ0tfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBDQykpCi0jZGVmaW5lIFBSQzFfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRDApKQotI2RlZmluZSBQUkMyX0lSUV9DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEQ0KSkKLSNkZWZpbmUgUFJDM19JUlFfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBEOCkpCi0jZGVmaW5lIFBSQzRfSVJRX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwREMpKQotI2RlZmluZSBQV1JET1dOX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEUwKSkKLSNkZWZpbmUgQ09NUFNTVExfMVY4X0NGRwkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBFNCkpCi0jZGVmaW5lIENPTVBTU1RMXzJWNV9DRkcJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRTgpKQotI2RlZmluZSBDT01QQ09SXzNWM19DRkcJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEVDKSkKLSNkZWZpbmUgU1NUTFBBRF9DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGMCkpCi0jZGVmaW5lIEJJU1QxX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MEY0KSkKLSNkZWZpbmUgQklTVDJfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgwRjgpKQotI2RlZmluZSBCSVNUM19DRkdfQ1RSCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDBGQykpCi0jZGVmaW5lIEJJU1Q0X0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTAwKSkKLSNkZWZpbmUgQklTVDVfQ0ZHX0NUUgkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMDQpKQotI2RlZmluZSBCSVNUMV9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDEwOCkpCi0jZGVmaW5lIEJJU1QyX1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTBDKSkKLSNkZWZpbmUgQklTVDNfU1RTX1JFUwkJKCh1bnNpZ25lZCBpbnQgKikoTUlTQ19CQVNFICsgMHgxMTApKQotI2RlZmluZSBCSVNUNF9TVFNfUkVTCQkoKHVuc2lnbmVkIGludCAqKShNSVNDX0JBU0UgKyAweDExNCkpCi0jZGVmaW5lIEJJU1Q1X1NUU19SRVMJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTE4KSkKLSNkZWZpbmUgU1lTRVJSX0NGR19DVFIJCSgodW5zaWduZWQgaW50ICopKE1JU0NfQkFTRSArIDB4MTFDKSkKKyNkZWZpbmUgSUNNMV9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwN0MpCisjZGVmaW5lIElDTTJfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDgwKQorI2RlZmluZSBJQ00zX0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA4NCkKKyNkZWZpbmUgSUNNNF9BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwODgpCisjZGVmaW5lIElDTTVfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDhDKQorI2RlZmluZSBJQ002X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5MCkKKyNkZWZpbmUgSUNNN19BUkJfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwOTQpCisjZGVmaW5lIElDTThfQVJCX0NGRwkJKE1JU0NfQkFTRSArIDB4MDk4KQorI2RlZmluZSBJQ005X0FSQl9DRkcJCShNSVNDX0JBU0UgKyAweDA5QykKKyNkZWZpbmUgRE1BX0NITl9DRkcJCShNSVNDX0JBU0UgKyAweDBBMCkKKyNkZWZpbmUgVVNCMl9QSFlfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwQTQpCisjZGVmaW5lIEdNQUNfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEE4KQorI2RlZmluZSBFWFBJX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBBQykKKyNkZWZpbmUgUFJDMV9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MEMwKQorI2RlZmluZSBQUkMyX0xPQ0tfQ1RSCQkoTUlTQ19CQVNFICsgMHgwQzQpCisjZGVmaW5lIFBSQzNfTE9DS19DVFIJCShNSVNDX0JBU0UgKyAweDBDOCkKKyNkZWZpbmUgUFJDNF9MT0NLX0NUUgkJKE1JU0NfQkFTRSArIDB4MENDKQorI2RlZmluZSBQUkMxX0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEMCkKKyNkZWZpbmUgUFJDMl9JUlFfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRDQpCisjZGVmaW5lIFBSQzNfSVJRX0NUUgkJKE1JU0NfQkFTRSArIDB4MEQ4KQorI2RlZmluZSBQUkM0X0lSUV9DVFIJCShNSVNDX0JBU0UgKyAweDBEQykKKyNkZWZpbmUgUFdSRE9XTl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRTApCisjZGVmaW5lIENPTVBTU1RMXzFWOF9DRkcJKE1JU0NfQkFTRSArIDB4MEU0KQorI2RlZmluZSBDT01QU1NUTF8yVjVfQ0ZHCShNSVNDX0JBU0UgKyAweDBFOCkKKyNkZWZpbmUgQ09NUENPUl8zVjNfQ0ZHCQkoTUlTQ19CQVNFICsgMHgwRUMpCisjZGVmaW5lIFNTVExQQURfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEYwKQorI2RlZmluZSBCSVNUMV9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgwRjQpCisjZGVmaW5lIEJJU1QyX0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDBGOCkKKyNkZWZpbmUgQklTVDNfQ0ZHX0NUUgkJKE1JU0NfQkFTRSArIDB4MEZDKQorI2RlZmluZSBCSVNUNF9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMDApCisjZGVmaW5lIEJJU1Q1X0NGR19DVFIJCShNSVNDX0JBU0UgKyAweDEwNCkKKyNkZWZpbmUgQklTVDFfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTA4KQorI2RlZmluZSBCSVNUMl9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMEMpCisjZGVmaW5lIEJJU1QzX1NUU19SRVMJCShNSVNDX0JBU0UgKyAweDExMCkKKyNkZWZpbmUgQklTVDRfU1RTX1JFUwkJKE1JU0NfQkFTRSArIDB4MTE0KQorI2RlZmluZSBCSVNUNV9TVFNfUkVTCQkoTUlTQ19CQVNFICsgMHgxMTgpCisjZGVmaW5lIFNZU0VSUl9DRkdfQ1RSCQkoTUlTQ19CQVNFICsgMHgxMUMpCiAKICNlbmRpZiAvKiBfX01BQ0hfTUlTQ19SRUdTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL3NwZWFyLmggYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L2luY2x1ZGUvbWFjaC9zcGVhci5oCmluZGV4IGE4MzVmNWIuLjdmZDYyMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvaW5jbHVkZS9tYWNoL3NwZWFyLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9pbmNsdWRlL21hY2gvc3BlYXIuaApAQCAtMTQsMTUzICsxNCw3MCBAQAogI2lmbmRlZiBfX01BQ0hfU1BFQVI2WFhfSAogI2RlZmluZSBfX01BQ0hfU1BFQVI2WFhfSAogCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KICNpbmNsdWRlIDxtYWNoL3NwZWFyNjAwLmg+CiAKLSNkZWZpbmUgU1BFQVI2WFhfTUxfU0RSQU1fQkFTRQkJMHgwMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9NTF9TRFJBTV9TSVpFCQkweDQwMDAwMDAwCi0KKyNkZWZpbmUgU1BFQVI2WFhfTUxfU0RSQU1fQkFTRQkJVUwoMHgwMDAwMDAwMCkKIC8qIElDTTEgLSBMb3cgc3BlZWQgY29ubmVjdGlvbiAqLwotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0JBU0UJCTB4RDAwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TSVpFCQkweDA4MDAwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfQkFTRQkJVUwoMHhEMDAwMDAwMCkKIAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UJMHhEMDAwMDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UJVUwoMHhEMDAwMDAwMCkKICNkZWZpbmUgVkFfU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFCUlPX0FERFJFU1MoU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFKQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1VBUlQwX1NJWkUJMHgwMDA4MDAwMAogCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDFfQkFTRQkweEQwMDgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfVUFSVDFfU0laRQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TU1AwX0JBU0UJCTB4RDAxMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TU1AwX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDFfQkFTRQkJMHhEMDE4MDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDFfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfSTJDX0JBU0UJCTB4RDAyMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JMkNfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfSlBFR19CQVNFCQkweEQwODAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfSlBFR19TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JUkRBX0JBU0UJCTB4RDEwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JUkRBX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0ZTTUNfQkFTRQkJMHhEMTgwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00xX0ZTTUNfU0laRQkJMHgwMDgwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfTkFORF9CQVNFCQkweEQyMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTFfTkFORF9TSVpFCQkweDAwODAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TUkFNX0JBU0UJCTB4RDI4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMV9TUkFNX1NJWkUJCTB4MDA4MDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9VQVJUMV9CQVNFCVVMKDB4RDAwODAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1NQMF9CQVNFCQlVTCgweEQwMTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX1NTUDFfQkFTRQkJVUwoMHhEMDE4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9JMkNfQkFTRQkJVUwoMHhEMDIwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9KUEVHX0JBU0UJCVVMKDB4RDA4MDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfSVJEQV9CQVNFCQlVTCgweEQxMDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00xX0ZTTUNfQkFTRQkJVUwoMHhEMTgwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMV9OQU5EX0JBU0UJCVVMKDB4RDIwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTFfU1JBTV9CQVNFCQlVTCgweEQyODAwMDAwKQogCiAvKiBJQ00yIC0gQXBwbGljYXRpb24gU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfQkFTRQkJMHhEODAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX1NJWkUJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00yX1RNUjBfQkFTRQkJMHhEODAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX1RNUjBfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMV9CQVNFCQkweEQ4MDgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMV9TSVpFCQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UJCTB4RDgxMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9HUElPX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00yX1NQSTJfQkFTRQkJMHhEODE4MDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00yX1NQSTJfU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTJfQURDX0JBU0UJCTB4RDgyMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNMl9BRENfU0laRQkJMHgwMDA4MDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ00yX0JBU0UJCVVMKDB4RDgwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfVE1SMF9CQVNFCQlVTCgweEQ4MDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00yX1RNUjFfQkFTRQkJVUwoMHhEODA4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UJCVVMKDB4RDgxMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTJfU1NQMl9CQVNFCQlVTCgweEQ4MTgwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00yX0FEQ19CQVNFCQlVTCgweEQ4MjAwMDAwKQogCiAvKiBNTC0xLCAyIC0gTXVsdGkgTGF5ZXIgQ1BVIFN1YnN5c3RlbSAqLwotI2RlZmluZSBTUEVBUjZYWF9NTF9DUFVfQkFTRQkJMHhGMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9NTF9DUFVfU0laRQkJMHgwODAwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9UTVJfQkFTRQkJMHhGMDAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9DUFVfVE1SX1NJWkUJCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9DUFVfR1BJT19CQVNFCQkweEYwMTAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9HUElPX1NJWkUJCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFCTB4RjEwMDAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfTUxfQ1BVX0JBU0UJCVVMKDB4RjAwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0NQVV9UTVJfQkFTRQkJVUwoMHhGMDAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfQ1BVX0dQSU9fQkFTRQkJVUwoMHhGMDEwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19TRUNfQkFTRQlVTCgweEYxMDAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFCUlPX0FERFJFU1MoU1BFQVI2WFhfQ1BVX1ZJQ19TRUNfQkFTRSkKLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19TRUNfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRQkweEYxMTAwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0NQVV9WSUNfUFJJX0JBU0UJVUwoMHhGMTEwMDAwMCkKICNkZWZpbmUgVkFfU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRQlJT19BRERSRVNTKFNQRUFSNlhYX0NQVV9WSUNfUFJJX0JBU0UpCi0jZGVmaW5lIFNQRUFSNlhYX0NQVV9WSUNfUFJJX1NJWkUJMHgwMDEwMDAwMAogCiAvKiBJQ00zIC0gQmFzaWMgU3Vic3lzdGVtICovCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfQkFTRQkJMHhGODAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NJWkUJCTB4MDgwMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NNRU1fQkFTRQkJMHhGODAwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NNRU1fU0laRQkJMHgwNDAwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01JX0NUUkxfQkFTRQkweEZDMDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01JX0NUUkxfU0laRQkweDAwMjAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19DTENEX0JBU0UJCTB4RkMyMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19DTENEX1NJWkUJCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0RNQV9CQVNFCQkweEZDNDAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfRE1BX1NJWkUJCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1NEUkFNX0NUUkxfQkFTRQkweEZDNjAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU0RSQU1fQ1RSTF9TSVpFCTB4MDAyMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1RNUl9CQVNFCQkweEZDODAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfVE1SX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1dEVF9CQVNFCQkweEZDODgwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfV0RUX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX1JUQ19CQVNFCQkweEZDOTAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfUlRDX1NJWkUJCTB4MDAwODAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0dQSU9fQkFTRQkJMHhGQzk4MDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ00zX0dQSU9fU0laRQkJMHgwMDA4MDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU1lTX0NUUkxfQkFTRQkweEZDQTAwMDAwCisjZGVmaW5lIFNQRUFSNlhYX0lDTTNfQkFTRQkJVUwoMHhGODAwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19TTUVNX0JBU0UJCVVMKDB4RjgwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTNfU01JX0NUUkxfQkFTRQlVTCgweEZDMDAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ00zX0NMQ0RfQkFTRQkJVUwoMHhGQzIwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19ETUFfQkFTRQkJVUwoMHhGQzQwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19TRFJBTV9DVFJMX0JBU0UJVUwoMHhGQzYwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19UTVJfQkFTRQkJVUwoMHhGQzgwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19XRFRfQkFTRQkJVUwoMHhGQzg4MDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19SVENfQkFTRQkJVUwoMHhGQzkwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19HUElPX0JBU0UJCVVMKDB4RkM5ODAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTNfU1lTX0NUUkxfQkFTRQlVTCgweEZDQTAwMDAwKQogI2RlZmluZSBWQV9TUEVBUjZYWF9JQ00zX1NZU19DVFJMX0JBU0UJSU9fQUREUkVTUyhTUEVBUjZYWF9JQ00zX1NZU19DVFJMX0JBU0UpCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTNfU1lTX0NUUkxfU0laRQkweDAwMDgwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFCTB4RkNBODAwMDAKKyNkZWZpbmUgU1BFQVI2WFhfSUNNM19NSVNDX1JFR19CQVNFCVVMKDB4RkNBODAwMDApCiAjZGVmaW5lIFZBX1NQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRQlJT19BRERSRVNTKFNQRUFSNlhYX0lDTTNfTUlTQ19SRUdfQkFTRSkKLSNkZWZpbmUgU1BFQVI2WFhfSUNNM19NSVNDX1JFR19TSVpFCTB4MDAwODAwMDAKIAogLyogSUNNNCAtIEhpZ2ggU3BlZWQgQ29ubmVjdGlvbiAqLwotI2RlZmluZSBTUEVBUjZYWF9JQ000X0JBU0UJCTB4RTAwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9TSVpFCQkweDA4MDAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9HTUFDX0JBU0UJCTB4RTA4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9HTUFDX1NJWkUJCTB4MDA4MDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfRklGT19CQVNFCTB4RTEwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JEX0ZJRk9fU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JEX0NTUl9CQVNFCTB4RTExMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JEX0NTUl9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfUExEVF9CQVNFCTB4RTEyMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JEX1BMRFRfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfRUhDSTBfQkFTRQkweEUxODAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0VIQ0kwX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX09IQ0kwX0JBU0UJMHhFMTkwMDAwMAotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9PSENJMF9TSVpFCTB4MDAxMDAwMDAKLQotI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9FSENJMV9CQVNFCTB4RTIwMDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfRUhDSTFfU0laRQkweDAwMTAwMDAwCi0KLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTFfQkFTRQkweEUyMTAwMDAwCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX09IQ0kxX1NJWkUJMHgwMDEwMDAwMAotCi0jZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0FSQl9CQVNFCTB4RTI4MDAwMDAKLSNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfQVJCX1NJWkUJMHgwMDAxMDAwMAorI2RlZmluZSBTUEVBUjZYWF9JQ000X0JBU0UJCVVMKDB4RTAwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfR01BQ19CQVNFCQlVTCgweEUwODAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfRklGT19CQVNFCVVMKDB4RTEwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCRF9DU1JfQkFTRQlVTCgweEUxMTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQkRfUExEVF9CQVNFCVVMKDB4RTEyMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX0VIQ0kwX0JBU0UJVUwoMHhFMTgwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfT0hDSTBfQkFTRQlVTCgweEUxOTAwMDAwKQorI2RlZmluZSBTUEVBUjZYWF9JQ000X1VTQl9FSENJMV9CQVNFCVVMKDB4RTIwMDAwMDApCisjZGVmaW5lIFNQRUFSNlhYX0lDTTRfVVNCX09IQ0kxX0JBU0UJVUwoMHhFMjEwMDAwMCkKKyNkZWZpbmUgU1BFQVI2WFhfSUNNNF9VU0JfQVJCX0JBU0UJVUwoMHhFMjgwMDAwMCkKIAogLyogRGVidWcgdWFydCBmb3IgbGludXgsIHdpbGwgYmUgdXNlZCBmb3IgZGVidWcgYW5kIHVuY29tcHJlc3MgbWVzc2FnZXMgKi8KICNkZWZpbmUgU1BFQVJfREJHX1VBUlRfQkFTRQkJU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwLmMKaW5kZXggNWM0ODRjNC4uZDBlNmVlYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDAuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBBZGQgc3BlYXI2MDAgc3BlY2lmaWMgZGV2aWNlcyBoZXJlICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDBfZXZiLmMgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNjAwX2V2Yi5jCmluZGV4IGRhZmY4ZDAuLmYxOWNlZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2MDBfZXZiLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjYwMF9ldmIuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPG1hY2gvZ2VuZXJpYy5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgKmFtYmFfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJmdwaW9fZGV2aWNlWzBdLApAQCAtNDYsNiArNDYsNiBAQAogCS5ib290X3BhcmFtcwk9CTB4MDAwMDAxMDAsCiAJLm1hcF9pbwkJPQlzcGVhcjZ4eF9tYXBfaW8sCiAJLmluaXRfaXJxCT0Jc3BlYXI2eHhfaW5pdF9pcnEsCi0JLnRpbWVyCQk9CSZzcGVhcl9zeXNfdGltZXIsCisJLnRpbWVyCQk9CSZzcGVhcjZ4eF90aW1lciwKIAkuaW5pdF9tYWNoaW5lCT0Jc3BlYXI2MDBfZXZiX2luaXQsCiBNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjZ4eC5jIGIvYXJjaC9hcm0vbWFjaC1zcGVhcjZ4eC9zcGVhcjZ4eC5jCmluZGV4IGYyZmUxNGUuLjk4MTgxMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc3BlYXI2eHgvc3BlYXI2eHguYworKysgYi9hcmNoL2FybS9tYWNoLXNwZWFyNnh4L3NwZWFyNnh4LmMKQEAgLTE4LDkgKzE4LDkgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KLSNpbmNsdWRlIDxtYWNoL3NwZWFyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgogCiAvKiBBZGQgc3BlYXI2eHggbWFjaGluZXMgY29tbW9uIGRldmljZXMgaGVyZSAqLwogLyogdWFydCBkZXZpY2UgcmVnaXN0cmF0aW9uICovCkBAIC0zMSw4ICszMSw3IEBACiAJCX0sCiAJCS5yZXMgPSB7CiAJCQkuc3RhcnQgPSBTUEVBUjZYWF9JQ00xX1VBUlQwX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFICsKLQkJCQlTUEVBUjZYWF9JQ00xX1VBUlQwX1NJWkUgLSAxLAorCQkJLmVuZCA9IFNQRUFSNlhYX0lDTTFfVUFSVDBfQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9VQVJUXzAsIE5PX0lSUX0sCkBAIC00Miw4ICs0MSw3IEBACiAJCX0sCiAJCS5yZXMgPSB7CiAJCQkuc3RhcnQgPSBTUEVBUjZYWF9JQ00xX1VBUlQxX0JBU0UsCi0JCQkuZW5kID0gU1BFQVI2WFhfSUNNMV9VQVJUMV9CQVNFICsKLQkJCQlTUEVBUjZYWF9JQ00xX1VBUlQxX1NJWkUgLSAxLAorCQkJLmVuZCA9IFNQRUFSNlhYX0lDTTFfVUFSVDFfQkFTRSArIFNaXzRLIC0gMSwKIAkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCQl9LAogCQkuaXJxID0ge0lSUV9VQVJUXzEsIE5PX0lSUX0sCkBAIC03Miw4ICs3MCw3IEBACiAJCX0sCiAJCS5yZXMgPSB7CiAJCQkuc3RhcnQgPSBTUEVBUjZYWF9DUFVfR1BJT19CQVNFLAotCQkJLmVuZCA9IFNQRUFSNlhYX0NQVV9HUElPX0JBU0UgKwotCQkJCVNQRUFSNlhYX0NQVV9HUElPX1NJWkUgLSAxLAorCQkJLmVuZCA9IFNQRUFSNlhYX0NQVV9HUElPX0JBU0UgKyBTWl80SyAtIDEsCiAJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAkJfSwKIAkJLmlycSA9IHtJUlFfTE9DQUxfR1BJTywgTk9fSVJRfSwKQEAgLTg0LDggKzgxLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0lDTTNfR1BJT19CQVNFLAotCQkJLmVuZCA9IFNQRUFSNlhYX0lDTTNfR1BJT19CQVNFICsKLQkJCQlTUEVBUjZYWF9JQ00zX0dQSU9fU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfSUNNM19HUElPX0JBU0UgKyBTWl80SyAtIDEsCiAJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAkJfSwKIAkJLmlycSA9IHtJUlFfQkFTSUNfR1BJTywgTk9fSVJRfSwKQEAgLTk2LDggKzkyLDcgQEAKIAkJfSwKIAkJLnJlcyA9IHsKIAkJCS5zdGFydCA9IFNQRUFSNlhYX0lDTTJfR1BJT19CQVNFLAotCQkJLmVuZCA9IFNQRUFSNlhYX0lDTTJfR1BJT19CQVNFICsKLQkJCQlTUEVBUjZYWF9JQ00yX0dQSU9fU0laRSAtIDEsCisJCQkuZW5kID0gU1BFQVI2WFhfSUNNMl9HUElPX0JBU0UgKyBTWl80SyAtIDEsCiAJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAkJfSwKIAkJLmlycSA9IHtJUlFfQVBQTF9HUElPLCBOT19JUlF9LApAQCAtMTIyLDI3ICsxMTcsMjcgQEAKIAl7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oU1BFQVI2WFhfSUNNMV9VQVJUMF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjZYWF9JQ00xX1VBUlQwX1NJWkUsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjZYWF9DUFVfVklDX1BSSV9CQVNFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oU1BFQVI2WFhfQ1BVX1ZJQ19QUklfQkFTRSksCi0JCS5sZW5ndGgJCT0gU1BFQVI2WFhfQ1BVX1ZJQ19QUklfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwgewogCQkudmlydHVhbAk9IFZBX1NQRUFSNlhYX0NQVV9WSUNfU0VDX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9DUFVfVklDX1NFQ19CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjZYWF9DUFVfVklDX1NFQ19TSVpFLAorCQkubGVuZ3RoCQk9IFNaXzRLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UKIAl9LCB7CiAJCS52aXJ0dWFsCT0gVkFfU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9CQVNFLAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oU1BFQVI2WFhfSUNNM19TWVNfQ1RSTF9CQVNFKSwKLQkJLmxlbmd0aAkJPSBTUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UsCisJCS5sZW5ndGgJCT0gU1pfNEssCiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sIHsKIAkJLnZpcnR1YWwJPSBWQV9TUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTUEVBUjZYWF9JQ00zX01JU0NfUkVHX0JBU0UpLAotCQkubGVuZ3RoCQk9IFNQRUFSNlhYX0lDTTNfTUlTQ19SRUdfU0laRSwKKwkJLmxlbmd0aAkJPSBTWl80SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKIH07CkBAIC0xNTUsMyArMTUwLDM0IEBACiAJLyogVGhpcyB3aWxsIGluaXRpYWxpemUgY2xvY2sgZnJhbWV3b3JrICovCiAJY2xrX2luaXQoKTsKIH0KKworc3RhdGljIHZvaWQgX19pbml0IHNwZWFyNnh4X3RpbWVyX2luaXQodm9pZCkKK3sKKwljaGFyIHBjbGtfbmFtZVtdID0gInBsbDNfNDhtX2NsayI7CisJc3RydWN0IGNsayAqZ3B0X2NsaywgKnBjbGs7CisKKwkvKiBnZXQgdGhlIHN5c3RlbSB0aW1lciBjbG9jayAqLworCWdwdF9jbGsgPSBjbGtfZ2V0X3N5cygiZ3B0MCIsIE5VTEwpOworCWlmIChJU19FUlIoZ3B0X2NsaykpIHsKKwkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgY2xrIGZvciBncHRcbiIsIF9fZnVuY19fKTsKKwkJQlVHKCk7CisJfQorCisJLyogZ2V0IHRoZSBzdWl0YWJsZSBwYXJlbnQgY2xvY2sgZm9yIHRpbWVyKi8KKwlwY2xrID0gY2xrX2dldChOVUxMLCBwY2xrX25hbWUpOworCWlmIChJU19FUlIocGNsaykpIHsKKwkJcHJfZXJyKCIlczpjb3VsZG4ndCBnZXQgJXMgYXMgcGFyZW50IGZvciBncHRcbiIsCisJCQkJX19mdW5jX18sIHBjbGtfbmFtZSk7CisJCUJVRygpOworCX0KKworCWNsa19zZXRfcGFyZW50KGdwdF9jbGssIHBjbGspOworCWNsa19wdXQoZ3B0X2Nsayk7CisJY2xrX3B1dChwY2xrKTsKKworCXNwZWFyX3NldHVwX3RpbWVyKCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgc3BlYXI2eHhfdGltZXIgPSB7CisJLmluaXQgPSBzcGVhcjZ4eF90aW1lcl9pbml0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKaW5kZXggYmQwNjYyMC4uYWQ4MDQ4OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9ncGlvLmMKQEAgLTIwNyw5ICsyMDcsOSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmx2bF9sb2NrW3BvcnRdLCBmbGFncyk7CiAKIAlpZiAodHlwZSAmIChJUlFfVFlQRV9MRVZFTF9MT1cgfCBJUlFfVFlQRV9MRVZFTF9ISUdIKSkKLQkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoZC0+aXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAllbHNlIGlmICh0eXBlICYgKElSUV9UWVBFX0VER0VfRkFMTElORyB8IElSUV9UWVBFX0VER0VfUklTSU5HKSkKLQkJX19zZXRfaXJxX2hhbmRsZXJfdW5sb2NrZWQoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCQlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZChkLT5pcnEsIGhhbmRsZV9lZGdlX2lycSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2Nsay5oIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKaW5kZXggZDc3MjM5NS4uYTIxN2Y2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpZm5kZWYgX19NQUNIX0NMS19ICiAjZGVmaW5lIF9fTUFDSF9DTEtfSAogCitzdHJ1Y3QgY2xrOworCiB2b2lkIHRlZ3JhX3BlcmlwaF9yZXNldF9kZWFzc2VydChzdHJ1Y3QgY2xrICpjKTsKIHZvaWQgdGVncmFfcGVyaXBoX3Jlc2V0X2Fzc2VydChzdHJ1Y3QgY2xrICpjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvY2xrZGV2LmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAppbmRleCA0MTJmNWM2Li42NmNkM2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9jbGtkZXYuaApAQCAtMjAsNiArMjAsOCBAQAogI2lmbmRlZiBfX01BQ0hfQ0xLREVWX0gKICNkZWZpbmUgX19NQUNIX0NMS0RFVl9ICiAKK3N0cnVjdCBjbGs7CisKIHN0YXRpYyBpbmxpbmUgaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspCiB7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9rYmMuaCBiL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2tiYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0Yzc3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9rYmMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogUGxhdGZvcm0gZGVmaW5pdGlvbnMgZm9yIHRlZ3JhLWtiYyBrZXlib2FyZCBpbnB1dCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEFTTUFSTV9BUkNIX1RFR1JBX0tCQ19ICisjZGVmaW5lIEFTTUFSTV9BUkNIX1RFR1JBX0tCQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0L21hdHJpeF9rZXlwYWQuaD4KKworI2lmZGVmIENPTkZJR19BUkNIX1RFR1JBXzJ4X1NPQworI2RlZmluZSBLQkNfTUFYX0dQSU8JMjQKKyNkZWZpbmUgS0JDX01BWF9LUEVOVAk4CisjZWxzZQorI2RlZmluZSBLQkNfTUFYX0dQSU8JMjAKKyNkZWZpbmUgS0JDX01BWF9LUEVOVAk3CisjZW5kaWYKKworI2RlZmluZSBLQkNfTUFYX1JPVwkxNgorI2RlZmluZSBLQkNfTUFYX0NPTAk4CisjZGVmaW5lIEtCQ19NQVhfS0VZCShLQkNfTUFYX1JPVyAqIEtCQ19NQVhfQ09MKQorCitzdHJ1Y3QgdGVncmFfa2JjX3Bpbl9jZmcgeworCWJvb2wgaXNfcm93OworCXVuc2lnbmVkIGNoYXIgbnVtOworfTsKKworc3RydWN0IHRlZ3JhX2tiY193YWtlX2tleSB7CisJdTggcm93OjQ7CisJdTggY29sOjQ7Cit9OworCitzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBkZWJvdW5jZV9jbnQ7CisJdW5zaWduZWQgaW50IHJlcGVhdF9jbnQ7CisKKwl1bnNpZ25lZCBpbnQgd2FrZV9jbnQ7IC8qIDA6d2FrZSBvbiBhbnkga2V5ID4xOndha2Ugb24gd2FrZV9jZmcgKi8KKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3dha2Vfa2V5ICp3YWtlX2NmZzsKKworCXN0cnVjdCB0ZWdyYV9rYmNfcGluX2NmZyBwaW5fY2ZnW0tCQ19NQVhfR1BJT107CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CisKKwlib29sIHdha2V1cDsKKwlib29sIHVzZV9mbl9tYXA7Cit9OworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pcnEuYwppbmRleCBkZTdkZmFkLi4xN2M3NGQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXRlZ3JhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdGVncmEvaXJxLmMKQEAgLTQ2LDI0ICs0NiwyNCBAQAogI2RlZmluZSBJQ1RMUl9DT1BfSUVSX0NMUgkweDM4CiAjZGVmaW5lIElDVExSX0NPUF9JRVBfQ0xBU1MJMHgzYwogCi1zdGF0aWMgdm9pZCAoKmdpY19tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKLXN0YXRpYyB2b2lkICgqZ2ljX3VubWFza19pcnEpKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitzdGF0aWMgdm9pZCAoKnRlZ3JhX2dpY19tYXNrX2lycSkoc3RydWN0IGlycV9kYXRhICpkKTsKK3N0YXRpYyB2b2lkICgqdGVncmFfZ2ljX3VubWFza19pcnEpKHN0cnVjdCBpcnFfZGF0YSAqZCk7CiAKLSNkZWZpbmUgaXJxX3RvX2ljdGxyKGlycSkgKCgoaXJxKS0zMikgPj4gNSkKKyNkZWZpbmUgaXJxX3RvX2ljdGxyKGlycSkgKCgoaXJxKSAtIDMyKSA+PiA1KQogc3RhdGljIHZvaWQgX19pb21lbSAqdGVncmFfaWN0bHJfYmFzZSA9IElPX0FERFJFU1MoVEVHUkFfUFJJTUFSWV9JQ1RMUl9CQVNFKTsKLSNkZWZpbmUgaWN0bHJfdG9fdmlydChpY3RscikgKHRlZ3JhX2ljdGxyX2Jhc2UgKyAoaWN0bHIpKjB4MTAwKQorI2RlZmluZSBpY3Rscl90b192aXJ0KGljdGxyKSAodGVncmFfaWN0bHJfYmFzZSArIChpY3RscikgKiAweDEwMCkKIAogc3RhdGljIHZvaWQgdGVncmFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdm9pZCBfX2lvbWVtICphZGRyID0gaWN0bHJfdG9fdmlydChpcnFfdG9faWN0bHIoZC0+aXJxKSk7Ci0JZ2ljX21hc2tfaXJxKGQpOwotCXdyaXRlbCgxPDwoZC0+aXJxJjMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX0NMUik7CisJdGVncmFfZ2ljX21hc2tfaXJxKGQpOworCXdyaXRlbCgxIDw8IChkLT5pcnEgJiAzMSksIGFkZHIrSUNUTFJfQ1BVX0lFUl9DTFIpOwogfQogCiBzdGF0aWMgdm9pZCB0ZWdyYV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXZvaWQgX19pb21lbSAqYWRkciA9IGljdGxyX3RvX3ZpcnQoaXJxX3RvX2ljdGxyKGQtPmlycSkpOwotCWdpY191bm1hc2tfaXJxKGQpOworCXRlZ3JhX2dpY191bm1hc2tfaXJxKGQpOwogCXdyaXRlbCgxPDwoZC0+aXJxJjMxKSwgYWRkcitJQ1RMUl9DUFVfSUVSX1NFVCk7CiB9CiAKQEAgLTk4LDggKzk4LDggQEAKIAkJIElPX0FERFJFU1MoVEVHUkFfQVJNX1BFUklGX0JBU0UgKyAweDEwMCkpOwogCiAJZ2ljID0gZ2V0X2lycV9jaGlwKDI5KTsKLQlnaWNfdW5tYXNrX2lycSA9IGdpYy0+aXJxX3VubWFzazsKLQlnaWNfbWFza19pcnEgPSBnaWMtPmlycV9tYXNrOworCXRlZ3JhX2dpY191bm1hc2tfaXJxID0gZ2ljLT5pcnFfdW5tYXNrOworCXRlZ3JhX2dpY19tYXNrX2lycSA9IGdpYy0+aXJxX21hc2s7CiAJdGVncmFfaXJxLmlycV9hY2sgPSBnaWMtPmlycV9hY2s7CiAjaWZkZWYgQ09ORklHX1NNUAogCXRlZ3JhX2lycS5pcnFfc2V0X2FmZmluaXR5ID0gZ2ljLT5pcnFfc2V0X2FmZmluaXR5OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC11eDUwMC9LY29uZmlnCmluZGV4IDI0N2NhYTMuLjIwM2I5ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJc2VsZWN0IEFSTV9HSUMKIAlzZWxlY3QgSEFTX01UVQogCXNlbGVjdCBOT01BRElLX0dQSU8KKwlzZWxlY3QgQVJNX0VSUkFUQV83NTM5NzAKIAogbWVudSAiVXg1MDAgU29DIgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvS2NvbmZpZwppbmRleCAzZjdiNWU5Li45Y2RlYzVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL0tjb25maWcKQEAgLTIsMTcgKzIsMTkgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfVkVSU0FUSUxFCiAKIGNvbmZpZyBBUkNIX1ZFUlNBVElMRV9QQgotCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlL1BCIHBsYXRmb3JtIgorCWJvb2wgIlN1cHBvcnQgVmVyc2F0aWxlIFBsYXRmb3JtIEJhc2Vib2FyZCBmb3IgQVJNOTI2RUotUyIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgTUlHSFRfSEFWRV9QQ0kKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlL1BCIHBsYXRmb3JtLgorCSAgSW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgQVJNKFIpIFZlcnNhdGlsZSBQbGF0Zm9ybSBCYXNlYm9hcmQKKwkgIGZvciB0aGUgQVJNOTI2RUotUy4KIAogY29uZmlnIE1BQ0hfVkVSU0FUSUxFX0FCCi0JYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUvQUIgcGxhdGZvcm0iCisJYm9vbCAiU3VwcG9ydCBWZXJzYXRpbGUgQXBwbGljYXRpb24gQmFzZWJvYXJkIGZvciBBUk05MjZFSi1TIgogCXNlbGVjdCBDUFVfQVJNOTI2VAogCWhlbHAKLQkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEFSTShSKSBWZXJzYXRpbGUvQVAgcGxhdGZvcm0uCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBBUk0oUikgVmVyc2F0aWxlIEFwcGxpY2F0aW9uIEJhc2Vib2FyZAorCSAgZm9yIHRoZSBBUk05MjZFSi1TLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZleHByZXNzL3BsYXRzbXAuYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCmluZGV4IGIxNjg3YjYuLjYzNGJmMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvcGxhdHNtcC5jCkBAIC0zOSw3ICszOSw3IEBACiAgKiBvYnNlcnZlcnMsIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkncmUgdGFraW5nIHBhcnQgaW4gY29oZXJlbmN5CiAgKiBvciBub3QuICBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgdGhlIGhvdHBsdWcgY29kZSB0byB3b3JrIHJlbGlhYmx5LgogICovCi1zdGF0aWMgdm9pZCB3cml0ZV9wZW5fcmVsZWFzZShpbnQgdmFsKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHdyaXRlX3Blbl9yZWxlYXNlKGludCB2YWwpCiB7CiAJcGVuX3JlbGVhc2UgPSB2YWw7CiAJc21wX3dtYigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYyBiL2FyY2gvYXJtL21hY2gtdmV4cHJlc3MvdjJtLmMKaW5kZXggYTllZDM0Mi4uMWVkYWU2NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXhwcmVzcy92Mm0uYworKysgYi9hcmNoL2FybS9tYWNoLXZleHByZXNzL3YybS5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9hcm1fdGltZXIuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdGltZXItc3AuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3A4MTAuaD4KIAogI2luY2x1ZGUgPG1hY2gvbW90aGVyYm9hcmQuaD4KIApAQCAtNTAsOCArNTEsMTYgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IHYybV90aW1lcl9pbml0KHZvaWQpCiB7CisJdTMyIHNjY3RybDsKKwogCXZlcnNhdGlsZV9zY2hlZF9jbG9ja19pbml0KE1NSU9fUDJWKFYyTV9TWVNfMjRNSFopLCAyNDAwMDAwMCk7CiAKKwkvKiBTZWxlY3QgMU1IeiBUSU1DTEsgYXMgdGhlIHJlZmVyZW5jZSBjbG9jayBmb3IgU1A4MDQgdGltZXJzICovCisJc2NjdHJsID0gcmVhZGwoTU1JT19QMlYoVjJNX1NZU0NUTCArIFNDQ1RSTCkpOworCXNjY3RybCB8PSBTQ0NUUkxfVElNRVJFTjBTRUxfVElNQ0xLOworCXNjY3RybCB8PSBTQ0NUUkxfVElNRVJFTjFTRUxfVElNQ0xLOworCXdyaXRlbChzY2N0cmwsIE1NSU9fUDJWKFYyTV9TWVNDVEwgKyBTQ0NUUkwpKTsKKwogCXdyaXRlbCgwLCBNTUlPX1AyVihWMk1fVElNRVIwKSArIFRJTUVSX0NUUkwpOwogCXdyaXRlbCgwLCBNTUlPX1AyVihWMk1fVElNRVIxKSArIFRJTUVSX0NUUkwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzIwYTM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvS2NvbmZpZwpAQCAtMCwwICsxLDczIEBACitpZiBBUkNIX1ZUODUwMAorCitjb25maWcgVlRXTV9WRVJTSU9OX1ZUODUwMAorCWJvb2wKKworY29uZmlnIFZUV01fVkVSU0lPTl9XTTg1MDUKKwlib29sCisKK2NvbmZpZyBNQUNIX0JWMDcKKwlib29sICJCZW5pZ24gQlYwNy04NTAwIE1pbmkgTmV0Ym9vayIKKwlkZXBlbmRzIG9uIEFSQ0hfVlQ4NTAwCisJc2VsZWN0IFZUV01fVkVSU0lPTl9WVDg1MDAKKwloZWxwCisJICBBZGQgc3VwcG9ydCBmb3IgdGhlIGluZXhwZW5zaXZlIDctaW5jaCBuZXRib29rcyBzb2xkIGJ5IG1hbnkKKwkgIENoaW5lc2UgZGlzdHJpYnV0b3JzIHVuZGVyIHZhcmlvdXMgbmFtZXMuIE5vdGUgdGhhdCB0aGVyZSBhcmUKKwkgIG1hbnkgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zIGluIGlkZW50aWNhbCBleHRlcmlvciwgbWFrZSBzdXJlCisJICB0aGF0IHlvdXJzIGlzIGluZGVlZCBiYXNlZCBvbiBhIFZJQSBWVDg1MDAgY2hpcC4KKworY29uZmlnIE1BQ0hfV004NTA1XzdJTl9ORVRCT09LCisJYm9vbCAiV004NTA1IDctaW5jaCBnZW5lcmljIG5ldGJvb2siCisJZGVwZW5kcyBvbiBBUkNIX1ZUODUwMAorCXNlbGVjdCBWVFdNX1ZFUlNJT05fV004NTA1CisJaGVscAorCSAgQWRkIHN1cHBvcnQgZm9yIHRoZSBpbmV4cGVuc2l2ZSA3LWluY2ggbmV0Ym9va3Mgc29sZCBieSBtYW55CisJICBDaGluZXNlIGRpc3RyaWJ1dG9ycyB1bmRlciB2YXJpb3VzIG5hbWVzLiBOb3RlIHRoYXQgdGhlcmUgYXJlCisJICBtYW55IGhhcmR3YXJlIGltcGxlbWVudGF0aW9ucyBpbiBpZGVudGljYWwgZXh0ZXJpb3IsIG1ha2Ugc3VyZQorCSAgdGhhdCB5b3VycyBpcyBpbmRlZWQgYmFzZWQgb24gYSBXb25kZXJNZWRpYSBXTTg1MDUgY2hpcC4KKworY29tbWVudCAiTENEIHBhbmVsIHNpemUiCisKK2NvbmZpZyBXTVRfUEFORUxfODAwWDQ4MAorCWJvb2wgIjctaW5jaCB3aXRoIDgwMHg0ODAgcmVzb2x1dGlvbiIKKwlkZXBlbmRzIG9uIChGQl9WVDg1MDAgfHwgRkJfV004NTA1KQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoZXNlIGFyZSBmb3VuZCBpbiBtb3N0IG9mIHRoZSBuZXRib29rcyBpbiBnZW5lcmljIGNhc2VzLCBhcworCSAgd2VsbCBhcyBpbiBFa2VuIE0wMDEgdGFibGV0cyBhbmQgcG9zc2libHkgZWxzZXdoZXJlLgorCisJICBUbyBzZWxlY3QgdGhpcyBwYW5lbCBhdCBydW50aW1lLCBzYXkgeSBoZXJlIGFuZCBhcHBlbmQKKwkgICdwYW5lbD04MDB4NDgwJyB0byB5b3VyIGtlcm5lbCBjb21tYW5kIGxpbmUuIE90aGVyd2lzZSwgdGhlCisJICBsYXJnZXN0IG9uZSBhdmFpbGFibGUgd2lsbCBiZSB1c2VkLgorCitjb25maWcgV01UX1BBTkVMXzgwMFg2MDAKKwlib29sICI4LWluY2ggd2l0aCA4MDB4NjAwIHJlc29sdXRpb24iCisJZGVwZW5kcyBvbiAoRkJfVlQ4NTAwIHx8IEZCX1dNODUwNSkKKwloZWxwCisJICBUaGVzZSBhcmUgZm91bmQgaW4gRWtlbiBNMDAzIHRhYmxldHMgYW5kIHBvc3NpYmx5IGVsc2V3aGVyZS4KKworCSAgVG8gc2VsZWN0IHRoaXMgcGFuZWwgYXQgcnVudGltZSwgc2F5IHkgaGVyZSBhbmQgYXBwZW5kCisJICAncGFuZWw9ODAweDYwMCcgdG8geW91ciBrZXJuZWwgY29tbWFuZCBsaW5lLiBPdGhlcndpc2UsIHRoZQorCSAgbGFyZ2VzdCBvbmUgYXZhaWxhYmxlIHdpbGwgYmUgdXNlZC4KKworY29uZmlnIFdNVF9QQU5FTF8xMDI0WDU3NgorCWJvb2wgIjEwLWluY2ggd2l0aCAxMDI0eDU3NiByZXNvbHV0aW9uIgorCWRlcGVuZHMgb24gKEZCX1ZUODUwMCB8fCBGQl9XTTg1MDUpCisJaGVscAorCSAgVGhlc2UgYXJlIGZvdW5kIGluIENoZXJyeVBhbCBuZXRib29rcyBhbmQgcG9zc2libHkgZWxzZXdoZXJlLgorCisJICBUbyBzZWxlY3QgdGhpcyBwYW5lbCBhdCBydW50aW1lLCBzYXkgeSBoZXJlIGFuZCBhcHBlbmQKKwkgICdwYW5lbD0xMDI0eDU3NicgdG8geW91ciBrZXJuZWwgY29tbWFuZCBsaW5lLiBPdGhlcndpc2UsIHRoZQorCSAgbGFyZ2VzdCBvbmUgYXZhaWxhYmxlIHdpbGwgYmUgdXNlZC4KKworY29uZmlnIFdNVF9QQU5FTF8xMDI0WDYwMAorCWJvb2wgIjEwLWluY2ggd2l0aCAxMDI0eDYwMCByZXNvbHV0aW9uIgorCWRlcGVuZHMgb24gKEZCX1ZUODUwMCB8fCBGQl9XTTg1MDUpCisJaGVscAorCSAgVGhlc2UgYXJlIGZvdW5kIGluIEVrZW4gTTAwNiB0YWJsZXRzIGFuZCBwb3NzaWJseSBlbHNld2hlcmUuCisKKwkgIFRvIHNlbGVjdCB0aGlzIHBhbmVsIGF0IHJ1bnRpbWUsIHNheSB5IGhlcmUgYW5kIGFwcGVuZAorCSAgJ3BhbmVsPTEwMjR4NjAwJyB0byB5b3VyIGtlcm5lbCBjb21tYW5kIGxpbmUuIE90aGVyd2lzZSwgdGhlCisJICBsYXJnZXN0IG9uZSBhdmFpbGFibGUgd2lsbCBiZSB1c2VkLgorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWFlZGI3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUKQEAgLTAsMCArMSw5IEBACitvYmoteSArPSBkZXZpY2VzLm8gZ3Bpby5vIGlycS5vIHRpbWVyLm8KKworb2JqLSQoQ09ORklHX1ZUV01fVkVSU0lPTl9WVDg1MDApICs9IGRldmljZXMtdnQ4NTAwLm8KK29iai0kKENPTkZJR19WVFdNX1ZFUlNJT05fV004NTA1KSArPSBkZXZpY2VzLXdtODUwNS5vCisKK29iai0kKENPTkZJR19NQUNIX0JWMDcpICs9IGJ2MDcubworb2JqLSQoQ09ORklHX01BQ0hfV004NTA1XzdJTl9ORVRCT09LKSArPSB3bTg1MDVfN2luLm8KKworb2JqLSQoQ09ORklHX0hBVkVfUFdNKSArPSBwd20ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhY2M0ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwzIEBACisgICB6cmVsYWRkci15CTo9IDB4MDAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgwMDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9idjA3LmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9idjA3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhMjYxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2J2MDcuYwpAQCAtMCwwICsxLDc3IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2J2MDcuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnBtY19oaWJlcjsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZ2dDg1MDBfZGV2aWNlX3VhcnQwLAorCSZ2dDg1MDBfZGV2aWNlX2xjZGMsCisJJnZ0ODUwMF9kZXZpY2VfZWhjaSwKKwkmdnQ4NTAwX2RldmljZV9nZV9yb3BzLAorCSZ2dDg1MDBfZGV2aWNlX3B3bSwKKwkmdnQ4NTAwX2RldmljZV9wd21ibCwKKwkmdnQ4NTAwX2RldmljZV9ydGMsCit9OworCitzdGF0aWMgdm9pZCB2dDg1MDBfcG93ZXJfb2ZmKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl3cml0ZXcoNSwgcG1jX2hpYmVyKTsKKwlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOiA6ICJyIiAoMCkpOworfQorCit2b2lkIF9faW5pdCBidjA3X2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRkJfVlQ4NTAwCisJdm9pZCBfX2lvbWVtICpncGlvX211eF9yZWcgPSBpb3JlbWFwKHdtdF9ncGlvX2Jhc2UgKyAweDIwMCwgNCk7CisJaWYgKGdwaW9fbXV4X3JlZykgeworCQl3cml0ZWwocmVhZGwoZ3Bpb19tdXhfcmVnKSB8IDEsIGdwaW9fbXV4X3JlZyk7CisJCWlvdW5tYXAoZ3Bpb19tdXhfcmVnKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZW1hcCB0aGUgR1BJTyBtdXggcmVnaXN0ZXIsIGRpc3BsYXkgbWF5IG5vdCB3b3JrIHByb3Blcmx5IVxuIik7CisJfQorI2VuZGlmCisJcG1jX2hpYmVyID0gaW9yZW1hcCh3bXRfcG1jX2Jhc2UgKyAweDEyLCAyKTsKKwlpZiAocG1jX2hpYmVyKQorCQlwbV9wb3dlcl9vZmYgPSAmdnQ4NTAwX3Bvd2VyX29mZjsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiUE1DIEhpYmVybmF0aW9uIHJlZ2lzdGVyIGNvdWxkIG5vdCBiZSByZW1hcHBlZCwgbm90IGVuYWJsaW5nIHBvd2VyIG9mZiFcbiIpOworCisJdnQ4NTAwX3NldF9yZXNvdXJjZXMoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwl2dDg1MDBfZ3Bpb19pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQlYwNywgIkJlbmlnbiBCVjA3IE1pbmkgTmV0Ym9vayIpCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkucmVzZXJ2ZQk9IHZ0ODUwMF9yZXNlcnZlX21lbSwKKwkubWFwX2lvCQk9IHZ0ODUwMF9tYXBfaW8sCisJLmluaXRfaXJxCT0gdnQ4NTAwX2luaXRfaXJxLAorCS50aW1lcgkJPSAmdnQ4NTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBidjA3X2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy12dDg1MDAuYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMtdnQ4NTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MTlhZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMtdnQ4NTAwLmMKQEAgLTAsMCArMSw5MSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy12dDg1MDAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8bWFjaC92dDg1MDBfcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvdnQ4NTAwX2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL2k4MDQyLmg+CisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCit2b2lkIF9faW5pdCB2dDg1MDBfc2V0X3Jlc291cmNlcyh2b2lkKQoreworCXN0cnVjdCByZXNvdXJjZSB0bXBbM107CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX0xDRENfQkFTRSwgU1pfMUspOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9MQ0RDKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9sY2RjLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9VQVJUMF9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMCk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDAsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX1VBUlQxX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQxKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MSwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfVUFSVDJfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDIpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQyLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9VQVJUM19CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMyk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDMsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoVlQ4NTAwX0VIQ0lfQkFTRSwgU1pfNTEyKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfRUhDSSk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfZWhjaSwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhWVDg1MDBfR0VHRUFfQkFTRSwgU1pfMjU2KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9nZV9yb3BzLCB0bXAsIDEpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9QV01fQkFTRSwgMHg0NCk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfcHdtLCB0bXAsIDEpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFZUODUwMF9SVENfQkFTRSwgMHgyYyk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1JUQyk7CisJdG1wWzJdID0gd210X2lycV9yZXMoSVJRX1JUQ1NNKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9ydGMsIHRtcCwgMyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2dDg1MDBfc2V0X2V4dGVybnModm9pZCkKK3sKKwkvKiBOb24tcmVzb3VyY2UtYXdhcmUgc3R1ZmYgKi8KKwl3bXRfaWNfYmFzZSA9IFZUODUwMF9JQ19CQVNFOworCXdtdF9ncGlvX2Jhc2UgPSBWVDg1MDBfR1BJT19CQVNFOworCXdtdF9wbWNfYmFzZSA9IFZUODUwMF9QTUNfQkFTRTsKKwl3bXRfaTgwNDJfYmFzZSA9IFZUODUwMF9QUzJfQkFTRTsKKworCXdtdF9ucl9pcnFzID0gVlQ4NTAwX05SX0lSUVM7CisJd210X3RpbWVyX2lycSA9IElSUV9QTUNPUzA7CisJd210X2dwaW9fZXh0X2lycVswXSA9IElSUV9FWFQwOworCXdtdF9ncGlvX2V4dF9pcnFbMV0gPSBJUlFfRVhUMTsKKwl3bXRfZ3Bpb19leHRfaXJxWzJdID0gSVJRX0VYVDI7CisJd210X2dwaW9fZXh0X2lycVszXSA9IElSUV9FWFQzOworCXdtdF9ncGlvX2V4dF9pcnFbNF0gPSBJUlFfRVhUNDsKKwl3bXRfZ3Bpb19leHRfaXJxWzVdID0gSVJRX0VYVDU7CisJd210X2dwaW9fZXh0X2lycVs2XSA9IElSUV9FWFQ2OworCXdtdF9ncGlvX2V4dF9pcnFbN10gPSBJUlFfRVhUNzsKKwl3bXRfaTgwNDJfa2JkX2lycSA9IElSUV9QUzJLQkQ7CisJd210X2k4MDQyX2F1eF9pcnEgPSBJUlFfUFMyTU9VU0U7Cit9CisKK3ZvaWQgX19pbml0IHZ0ODUwMF9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQod210X2lvX2Rlc2MsIEFSUkFZX1NJWkUod210X2lvX2Rlc2MpKTsKKworCS8qIFNob3VsZCBiZSBkb25lIGJlZm9yZSBpbnRlcnJ1cHRzIGFuZCB0aW1lcnMgYXJlIGluaXRpYWxpemVkICovCisJdnQ4NTAwX3NldF9leHRlcm5zKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXdtODUwNS5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy13bTg1MDUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ1OTRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy13bTg1MDUuYwpAQCAtMCwwICsxLDk5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLXdtODUwNS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL3dtODUwNV9yZWdzLmg+CisjaW5jbHVkZSA8bWFjaC93bTg1MDVfaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvaTgwNDIuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3ZvaWQgX19pbml0IHdtODUwNV9zZXRfcmVzb3VyY2VzKHZvaWQpCit7CisJc3RydWN0IHJlc291cmNlIHRtcFszXTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfR09WUl9CQVNFLCBTWl81MTIpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3dtODUwNV9mYiwgdG1wLCAxKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfVUFSVDBfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDApOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQwLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9VQVJUMV9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUMSk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDEsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1VBUlQyX0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQyKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0MiwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfVUFSVDNfQkFTRSwgMHgxMDQwKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfVUFSVDMpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3VhcnQzLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9VQVJUNF9CQVNFLCAweDEwNDApOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9VQVJUNCk7CisJd210X3Jlc19hZGQoJnZ0ODUwMF9kZXZpY2VfdWFydDQsIHRtcCwgMik7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1VBUlQ1X0JBU0UsIDB4MTA0MCk7CisJdG1wWzFdID0gd210X2lycV9yZXMoSVJRX1VBUlQ1KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV91YXJ0NSwgdG1wLCAyKTsKKworCXRtcFswXSA9IHdtdF9tbWlvX3JlcyhXTTg1MDVfRUhDSV9CQVNFLCBTWl81MTIpOworCXRtcFsxXSA9IHdtdF9pcnFfcmVzKElSUV9FSENJKTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9laGNpLCB0bXAsIDIpOworCisJdG1wWzBdID0gd210X21taW9fcmVzKFdNODUwNV9HRUdFQV9CQVNFLCBTWl8yNTYpOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX2dlX3JvcHMsIHRtcCwgMSk7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1BXTV9CQVNFLCAweDQ0KTsKKwl3bXRfcmVzX2FkZCgmdnQ4NTAwX2RldmljZV9wd20sIHRtcCwgMSk7CisKKwl0bXBbMF0gPSB3bXRfbW1pb19yZXMoV004NTA1X1JUQ19CQVNFLCAweDJjKTsKKwl0bXBbMV0gPSB3bXRfaXJxX3JlcyhJUlFfUlRDKTsKKwl0bXBbMl0gPSB3bXRfaXJxX3JlcyhJUlFfUlRDU00pOworCXdtdF9yZXNfYWRkKCZ2dDg1MDBfZGV2aWNlX3J0YywgdG1wLCAzKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHdtODUwNV9zZXRfZXh0ZXJucyh2b2lkKQoreworCS8qIE5vbi1yZXNvdXJjZS1hd2FyZSBzdHVmZiAqLworCXdtdF9pY19iYXNlID0gV004NTA1X0lDX0JBU0U7CisJd210X3NpY19iYXNlID0gV004NTA1X1NJQ19CQVNFOworCXdtdF9ncGlvX2Jhc2UgPSBXTTg1MDVfR1BJT19CQVNFOworCXdtdF9wbWNfYmFzZSA9IFdNODUwNV9QTUNfQkFTRTsKKwl3bXRfaTgwNDJfYmFzZSA9IFdNODUwNV9QUzJfQkFTRTsKKworCXdtdF9ucl9pcnFzID0gV004NTA1X05SX0lSUVM7CisJd210X3RpbWVyX2lycSA9IElSUV9QTUNPUzA7CisJd210X2dwaW9fZXh0X2lycVswXSA9IElSUV9FWFQwOworCXdtdF9ncGlvX2V4dF9pcnFbMV0gPSBJUlFfRVhUMTsKKwl3bXRfZ3Bpb19leHRfaXJxWzJdID0gSVJRX0VYVDI7CisJd210X2dwaW9fZXh0X2lycVszXSA9IElSUV9FWFQzOworCXdtdF9ncGlvX2V4dF9pcnFbNF0gPSBJUlFfRVhUNDsKKwl3bXRfZ3Bpb19leHRfaXJxWzVdID0gSVJRX0VYVDU7CisJd210X2dwaW9fZXh0X2lycVs2XSA9IElSUV9FWFQ2OworCXdtdF9ncGlvX2V4dF9pcnFbN10gPSBJUlFfRVhUNzsKKwl3bXRfaTgwNDJfa2JkX2lycSA9IElSUV9QUzJLQkQ7CisJd210X2k4MDQyX2F1eF9pcnEgPSBJUlFfUFMyTU9VU0U7Cit9CisKK3ZvaWQgX19pbml0IHdtODUwNV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQod210X2lvX2Rlc2MsIEFSUkFZX1NJWkUod210X2lvX2Rlc2MpKTsKKworCS8qIFNob3VsZCBiZSBkb25lIGJlZm9yZSBpbnRlcnJ1cHRzIGFuZCB0aW1lcnMgYXJlIGluaXRpYWxpemVkICovCisJd204NTA1X3NldF9leHRlcm5zKCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZjZGMzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuYwpAQCAtMCwwICsxLDI3MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC12dDg1MDAvZGV2aWNlcy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1ibG9jay5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSA8bWFjaC92dDg1MDBmYi5oPgorI2luY2x1ZGUgPG1hY2gvaTgwNDIuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qIFRoZXNlIGNhbid0IHVzZSByZXNvdXJjZXMgY3VycmVudGx5ICovCit1bnNpZ25lZCBsb25nIHdtdF9pY19iYXNlIF9faW5pdGRhdGE7Cit1bnNpZ25lZCBsb25nIHdtdF9zaWNfYmFzZSBfX2luaXRkYXRhOwordW5zaWduZWQgbG9uZyB3bXRfZ3Bpb19iYXNlIF9faW5pdGRhdGE7Cit1bnNpZ25lZCBsb25nIHdtdF9wbWNfYmFzZSBfX2luaXRkYXRhOwordW5zaWduZWQgbG9uZyB3bXRfaTgwNDJfYmFzZSBfX2luaXRkYXRhOworCitpbnQgd210X25yX2lycXMgX19pbml0ZGF0YTsKK2ludCB3bXRfdGltZXJfaXJxIF9faW5pdGRhdGE7CitpbnQgd210X2dwaW9fZXh0X2lycVs4XSBfX2luaXRkYXRhOworCisvKiBTaG91bGQgcmVtYWluIGFjY2Vzc2libGUgYWZ0ZXIgaW5pdC4KKyAqIGk4MDQyIGRyaXZlciBkZXNwZXJhdGVseSBjYWxscyBmb3IgYXR0ZW50aW9uLi4uCisgKi8KK2ludCB3bXRfaTgwNDJfa2JkX2lycTsKK2ludCB3bXRfaTgwNDJfYXV4X2lycTsKKworc3RhdGljIHU2NCBmYl9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9sY2RjID0geworCS5uYW1lICAgICAgICAgICA9ICJ2dDg1MDAtbGNkIiwKKwkuaWQgICAgICAgICAgICAgPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sJPSAmZmJfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV93bTg1MDVfZmIgPSB7CisJLm5hbWUgICAgICAgICAgID0gIndtODUwNS1mYiIsCisJLmlkICAgICAgICAgICAgID0gMCwKK307CisKKy8qIFNtYWxsZXN0IHRvIGxhcmdlc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgdnQ4NTAwZmJfcGxhdGZvcm1fZGF0YSBwYW5lbHNbXSA9IHsKKyNpZmRlZiBDT05GSUdfV01UX1BBTkVMXzgwMFg0ODAKK3sKKwkueHJlc192aXJ0dWFsCT0gODAwLAorCS55cmVzX3ZpcnR1YWwJPSA0ODAgKiAyLAorCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIjgwMHg0ODAiLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwkJLmxlZnRfbWFyZ2luCT0gODgsCisJCS5yaWdodF9tYXJnaW4JPSA0MCwKKwkJLnVwcGVyX21hcmdpbgk9IDMyLAorCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCS5oc3luY19sZW4JPSAwLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKK30sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfV01UX1BBTkVMXzgwMFg2MDAKK3sKKwkueHJlc192aXJ0dWFsCT0gODAwLAorCS55cmVzX3ZpcnR1YWwJPSA2MDAgKiAyLAorCS5tb2RlCQk9IHsKKwkJLm5hbWUJCT0gIjgwMHg2MDAiLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDYwMCwKKwkJLmxlZnRfbWFyZ2luCT0gODgsCisJCS5yaWdodF9tYXJnaW4JPSA0MCwKKwkJLnVwcGVyX21hcmdpbgk9IDMyLAorCQkubG93ZXJfbWFyZ2luCT0gMTEsCisJCS5oc3luY19sZW4JPSAwLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKK30sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfV01UX1BBTkVMXzEwMjRYNTc2Cit7CisJLnhyZXNfdmlydHVhbAk9IDEwMjQsCisJLnlyZXNfdmlydHVhbAk9IDU3NiAqIDIsCisJLm1vZGUJCT0geworCQkubmFtZQkJPSAiMTAyNHg1NzYiLAorCQkueHJlcwkJPSAxMDI0LAorCQkueXJlcwkJPSA1NzYsCisJCS5sZWZ0X21hcmdpbgk9IDQwLAorCQkucmlnaHRfbWFyZ2luCT0gMjQsCisJCS51cHBlcl9tYXJnaW4JPSAzMiwKKwkJLmxvd2VyX21hcmdpbgk9IDExLAorCQkuaHN5bmNfbGVuCT0gOTYsCisJCS52c3luY19sZW4JPSAyLAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19XTVRfUEFORUxfMTAyNFg2MDAKK3sKKwkueHJlc192aXJ0dWFsCT0gMTAyNCwKKwkueXJlc192aXJ0dWFsCT0gNjAwICogMiwKKwkubW9kZQkJPSB7CisJCS5uYW1lCQk9ICIxMDI0eDYwMCIsCisJCS54cmVzCQk9IDEwMjQsCisJCS55cmVzCQk9IDYwMCwKKwkJLmxlZnRfbWFyZ2luCT0gNjYsCisJCS5yaWdodF9tYXJnaW4JPSAyLAorCQkudXBwZXJfbWFyZ2luCT0gMTksCisJCS5sb3dlcl9tYXJnaW4JPSAxLAorCQkuaHN5bmNfbGVuCT0gMjMsCisJCS52c3luY19sZW4JPSA4LAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorfSwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBjdXJyZW50X3BhbmVsX2lkeCBfX2luaXRkYXRhID0gQVJSQVlfU0laRShwYW5lbHMpIC0gMTsKKworc3RhdGljIGludCBfX2luaXQgcGFuZWxfc2V0dXAoY2hhciAqc3RyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocGFuZWxzKTsgaSsrKSB7CisJCWlmIChzdHJjbXAocGFuZWxzW2ldLm1vZGUubmFtZSwgc3RyKSA9PSAwKSB7CisJCQljdXJyZW50X3BhbmVsX2lkeCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworZWFybHlfcGFyYW0oInBhbmVsIiwgcGFuZWxfc2V0dXApOworCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlYWxsb2NhdGVfZmIoc3RydWN0IHZ0ODUwMGZiX3BsYXRmb3JtX2RhdGEgKnAsCisJCQkJICB1bnNpZ25lZCBsb25nIGFsaWduKSB7CisJcC0+dmlkZW9fbWVtX2xlbiA9IChwLT54cmVzX3ZpcnR1YWwgKiBwLT55cmVzX3ZpcnR1YWwgKiA0KSA+PgorCQkJKHAtPmJwcCA+IDE2ID8gMCA6IChwLT5icHAgPiA4ID8gMSA6CisJCQkJCSg4IC8gcC0+YnBwKSArIDEpKTsKKwlwLT52aWRlb19tZW1fcGh5cyA9ICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrX2FsbG9jKHAtPnZpZGVvX21lbV9sZW4sCisJCQkJCQkJICBhbGlnbik7CisJcC0+dmlkZW9fbWVtX3ZpcnQgPSBwaHlzX3RvX3ZpcnQocC0+dmlkZW9fbWVtX3BoeXMpOworfQorCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDAgPSB7CisJLm5hbWUJCT0gInZ0ODUwMF9zZXJpYWwiLAorCS5pZAkJPSAwLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQxID0geworCS5uYW1lCQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuaWQJCT0gMSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MiA9IHsKKwkubmFtZQkJPSAidnQ4NTAwX3NlcmlhbCIsCisJLmlkCQk9IDIsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDMgPSB7CisJLm5hbWUJCT0gInZ0ODUwMF9zZXJpYWwiLAorCS5pZAkJPSAzLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQ0ID0geworCS5uYW1lCQk9ICJ2dDg1MDBfc2VyaWFsIiwKKwkuaWQJCT0gNCwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0NSA9IHsKKwkubmFtZQkJPSAidnQ4NTAwX3NlcmlhbCIsCisJLmlkCQk9IDUsCit9OworCitzdGF0aWMgdTY0IGVoY2lfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfZWhjaSA9IHsKKwkubmFtZQkJPSAidnQ4NTAwLWVoY2kiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkuZG1hX21hc2sJPSAmZWhjaV9kbWFfbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX2dlX3JvcHMgPSB7CisJLm5hbWUJCT0gIndtdF9nZV9yb3BzIiwKKwkuaWQJCT0gLTEsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfcHdtID0geworCS5uYW1lCQk9ICJ2dDg1MDAtcHdtIiwKKwkuaWQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHZ0ODUwMF9wd21ibF9kYXRhID0geworCS5wd21faWQJCT0gMCwKKwkubWF4X2JyaWdodG5lc3MJPSAxMjgsCisJLmRmdF9icmlnaHRuZXNzID0gNzAsCisJLnB3bV9wZXJpb2RfbnMJPSAyNTAwMDAsIC8qIHJldmlzaXQgd2hlbiBjbG9ja3MgYXJlIGltcGxlbWVudGVkICovCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfcHdtYmwgPSB7CisJLm5hbWUJCT0gInB3bS1iYWNrbGlnaHQiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ2dDg1MDBfcHdtYmxfZGF0YSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3J0YyA9IHsKKwkubmFtZQkJPSAidnQ4NTAwLXJ0YyIsCisJLmlkCQk9IDAsCit9OworCitzdHJ1Y3QgbWFwX2Rlc2Mgd210X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qIFNvQyBNTUlPIHJlZ2lzdGVycyAqLworCVswXSA9IHsKKwkJLnZpcnR1YWwJPSAweGY4MDAwMDAwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhkODAwMDAwMCksCisJCS5sZW5ndGgJCT0gMHgwMDM5MDAwMCwgLyogbWF4IG9mIGFsbCBjaGlwIHZhcmlhbnRzICovCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJLyogUENJIEkvTyBzcGFjZSwgbnVtYmVycyB0aWVkIHRvIHRob3NlIGluIDxtYWNoL2lvLmg+ICovCisJWzFdID0geworCQkudmlydHVhbAk9IDB4ZjAwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweGMwMDAwMDAwKSwKKwkJLmxlbmd0aAkJPSBTWl82NEssCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCit9OworCit2b2lkIF9faW5pdCB2dDg1MDBfcmVzZXJ2ZV9tZW0odm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRkJfVlQ4NTAwCisJcGFuZWxzW2N1cnJlbnRfcGFuZWxfaWR4XS5icHAgPSAxNjsgLyogQWx3YXlzIHVzZSBSR0I1NjUgKi8KKwlwcmVhbGxvY2F0ZV9mYigmcGFuZWxzW2N1cnJlbnRfcGFuZWxfaWR4XSwgU1pfNE0pOworCXZ0ODUwMF9kZXZpY2VfbGNkYy5kZXYucGxhdGZvcm1fZGF0YSA9ICZwYW5lbHNbY3VycmVudF9wYW5lbF9pZHhdOworI2VuZGlmCit9CisKK3ZvaWQgX19pbml0IHdtODUwNV9yZXNlcnZlX21lbSh2b2lkKQoreworI2lmIGRlZmluZWQgQ09ORklHX0ZCX1dNODUwNQorCXBhbmVsc1tjdXJyZW50X3BhbmVsX2lkeF0uYnBwID0gMzI7IC8qIEFsd2F5cyB1c2UgUkdCODg4ICovCisJcHJlYWxsb2NhdGVfZmIoJnBhbmVsc1tjdXJyZW50X3BhbmVsX2lkeF0sIDMyKTsKKwl2dDg1MDBfZGV2aWNlX3dtODUwNV9mYi5kZXYucGxhdGZvcm1fZGF0YSA9ICZwYW5lbHNbY3VycmVudF9wYW5lbF9pZHhdOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4ZDRlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2RldmljZXMuaApAQCAtMCwwICsxLDg4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9kZXZpY2VzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX1ZUODUwMF9ERVZJQ0VTX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX1ZUODUwMF9ERVZJQ0VTX0gKKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCit2b2lkIF9faW5pdCB2dDg1MDBfaW5pdF9pcnEodm9pZCk7Cit2b2lkIF9faW5pdCB3bTg1MDVfaW5pdF9pcnEodm9pZCk7Cit2b2lkIF9faW5pdCB2dDg1MDBfbWFwX2lvKHZvaWQpOwordm9pZCBfX2luaXQgd204NTA1X21hcF9pbyh2b2lkKTsKK3ZvaWQgX19pbml0IHZ0ODUwMF9yZXNlcnZlX21lbSh2b2lkKTsKK3ZvaWQgX19pbml0IHdtODUwNV9yZXNlcnZlX21lbSh2b2lkKTsKK3ZvaWQgX19pbml0IHZ0ODUwMF9ncGlvX2luaXQodm9pZCk7Cit2b2lkIF9faW5pdCB2dDg1MDBfc2V0X3Jlc291cmNlcyh2b2lkKTsKK3ZvaWQgX19pbml0IHdtODUwNV9zZXRfcmVzb3VyY2VzKHZvaWQpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfaWNfYmFzZSBfX2luaXRkYXRhOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd210X3NpY19iYXNlIF9faW5pdGRhdGE7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfZ3Bpb19iYXNlIF9faW5pdGRhdGE7CitleHRlcm4gdW5zaWduZWQgbG9uZyB3bXRfcG1jX2Jhc2UgX19pbml0ZGF0YTsKKworZXh0ZXJuIGludCB3bXRfbnJfaXJxcyBfX2luaXRkYXRhOworZXh0ZXJuIGludCB3bXRfdGltZXJfaXJxIF9faW5pdGRhdGE7CitleHRlcm4gaW50IHdtdF9ncGlvX2V4dF9pcnFbOF0gX19pbml0ZGF0YTsKKworZXh0ZXJuIHN0cnVjdCBtYXBfZGVzYyB3bXRfaW9fZGVzY1syXSBfX2luaXRkYXRhOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZXNvdXJjZSB3bXRfbW1pb19yZXModTMyIHN0YXJ0LCB1MzIgc2l6ZSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgdG1wID0geworCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gc3RhcnQsCisJCS5lbmQgPSBzdGFydCArIHNpemUgLSAxLAorCX07CisKKwlyZXR1cm4gdG1wOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCByZXNvdXJjZSB3bXRfaXJxX3JlcyhpbnQgaXJxKQoreworCXN0cnVjdCByZXNvdXJjZSB0bXAgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBpcnEsCisJCS5lbmQgPSBpcnEsCisJfTsKKworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bXRfcmVzX2FkZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbnVtKQoreworCWlmICh1bmxpa2VseShwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyhwZGV2LCByZXMsIG51bSkpKQorCQlwcl9lcnIoIkZhaWxlZCB0byBhc3NpZ24gcmVzb3VyY2VzXG4iKTsKK30KKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgdnQ4NTAwX3RpbWVyOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQwOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0MTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDI7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3VhcnQzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV91YXJ0NDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfdWFydDU7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2VfbGNkYzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHZ0ODUwMF9kZXZpY2Vfd204NTA1X2ZiOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9laGNpOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9nZV9yb3BzOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9wd207CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSB2dDg1MDBfZGV2aWNlX3B3bWJsOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdnQ4NTAwX2RldmljZV9ydGM7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmNjMGVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvZ3Bpby5jCkBAIC0wLDAgKzEsMjQwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXZ0ODUwMC9ncGlvLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgdG9fdnQ4NTAwKF9fY2hpcCkgY29udGFpbmVyX29mKF9fY2hpcCwgc3RydWN0IHZ0ODUwMF9ncGlvX2NoaXAsIGNoaXApCisKKyNkZWZpbmUgRU5BQkxFX1JFR1MJMHgwCisjZGVmaW5lIERJUkVDVElPTl9SRUdTCTB4MjAKKyNkZWZpbmUgT1VUVkFMVUVfUkVHUwkweDQwCisjZGVmaW5lIElOVkFMVUVfUkVHUwkweDYwCisKKyNkZWZpbmUgRVhUX1JFR09GRgkweDFjCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnJlZ2Jhc2U7CisKK3N0cnVjdCB2dDg1MDBfZ3Bpb19jaGlwIHsKKwlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7CisJdW5zaWduZWQgaW50CQlzaGlmdDsKKwl1bnNpZ25lZCBpbnQJCXJlZ29mZjsKK307CisKK3N0YXRpYyBpbnQgZ3Bpb190b19pcnFfbWFwWzhdOworCitzdGF0aWMgaW50IHZ0ODUwMF9tdXhlZF9ncGlvX3JlcXVlc3Qoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIEVOQUJMRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwl2YWwgfD0gKDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIEVOQUJMRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdnQ4NTAwX211eGVkX2dwaW9fZnJlZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIEVOQUJMRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisKKwl2YWwgJj0gfigxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBFTkFCTEVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9tdXhlZF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHZ0ODUwMF9ncGlvX2NoaXAgKnZ0ODUwMF9jaGlwID0gdG9fdnQ4NTAwKGNoaXApOworCXVuc2lnbmVkIHZhbCA9IHJlYWRsKHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCisJdmFsICY9IH4oMSA8PCB2dDg1MDBfY2hpcC0+c2hpZnQgPDwgb2Zmc2V0KTsKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgRElSRUNUSU9OX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9tdXhlZF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHZ0ODUwMF9ncGlvX2NoaXAgKnZ0ODUwMF9jaGlwID0gdG9fdnQ4NTAwKGNoaXApOworCXVuc2lnbmVkIHZhbCA9IHJlYWRsKHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCisJdmFsIHw9ICgxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCisJaWYgKHZhbHVlKSB7CisJCXZhbCA9IHJlYWRsKHJlZ2Jhc2UgKyBPVVRWQUxVRV9SRUdTICsgdnQ4NTAwX2NoaXAtPnJlZ29mZik7CisJCXZhbCB8PSAoMSA8PCB2dDg1MDBfY2hpcC0+c2hpZnQgPDwgb2Zmc2V0KTsKKwkJd3JpdGVsKHZhbCwgcmVnYmFzZSArIE9VVFZBTFVFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX211eGVkX2dwaW9fZ2V0X3ZhbHVlKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisKKwlyZXR1cm4gKHJlYWRsKHJlZ2Jhc2UgKyBJTlZBTFVFX1JFR1MgKyB2dDg1MDBfY2hpcC0+cmVnb2ZmKQorCQk+PiB2dDg1MDBfY2hpcC0+c2hpZnQgPj4gb2Zmc2V0KSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODUwMF9tdXhlZF9ncGlvX3NldF92YWx1ZShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgdnQ4NTAwX2dwaW9fY2hpcCAqdnQ4NTAwX2NoaXAgPSB0b192dDg1MDAoY2hpcCk7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIElOVkFMVUVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworCisJaWYgKHZhbHVlKQorCQl2YWwgfD0gKDEgPDwgdnQ4NTAwX2NoaXAtPnNoaWZ0IDw8IG9mZnNldCk7CisJZWxzZQorCQl2YWwgJj0gfigxIDw8IHZ0ODUwMF9jaGlwLT5zaGlmdCA8PCBvZmZzZXQpOworCisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIElOVkFMVUVfUkVHUyArIHZ0ODUwMF9jaGlwLT5yZWdvZmYpOworfQorCisjZGVmaW5lIFZUODUwMF9HUElPX0JBTksoX19uYW1lLCBfX3NoaWZ0LCBfX29mZiwgX19iYXNlLCBfX251bSkJCVwKK3sJCQkJCQkJCQlcCisJLmNoaXAgPSB7CQkJCQkJCVwKKwkJLmxhYmVsCQkJPSBfX25hbWUsCQkJXAorCQkucmVxdWVzdAkJPSB2dDg1MDBfbXV4ZWRfZ3Bpb19yZXF1ZXN0LAlcCisJCS5mcmVlCQkJPSB2dDg1MDBfbXV4ZWRfZ3Bpb19mcmVlLAlcCisJCS5kaXJlY3Rpb25faW5wdXQgID0gdnQ4NTAwX211eGVkX2dwaW9fZGlyZWN0aW9uX2lucHV0LAlcCisJCS5kaXJlY3Rpb25fb3V0cHV0ID0gdnQ4NTAwX211eGVkX2dwaW9fZGlyZWN0aW9uX291dHB1dCwJXAorCQkuZ2V0CQkJPSB2dDg1MDBfbXV4ZWRfZ3Bpb19nZXRfdmFsdWUsCVwKKwkJLnNldAkJCT0gdnQ4NTAwX211eGVkX2dwaW9fc2V0X3ZhbHVlLAlcCisJCS5jYW5fc2xlZXAJCT0gMCwJCQkJXAorCQkuYmFzZQkJCT0gX19iYXNlLAkJCVwKKwkJLm5ncGlvCQkJPSBfX251bSwJCQlcCisJfSwJCQkJCQkJCVwKKwkuc2hpZnQJCT0gX19zaGlmdCwJCQkJCVwKKwkucmVnb2ZmCQk9IF9fb2ZmLAkJCQkJXAorfQorCitzdGF0aWMgc3RydWN0IHZ0ODUwMF9ncGlvX2NoaXAgdnQ4NTAwX211eGVkX2dwaW9zW10gPSB7CisJVlQ4NTAwX0dQSU9fQkFOSygidWFydDAiLAkwLAkweDAsCTgsCTQpLAorCVZUODUwMF9HUElPX0JBTksoInVhcnQxIiwJNCwJMHgwLAkxMiwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygic3BpMCIsCTgsCTB4MCwJMTYsCTQpLAorCVZUODUwMF9HUElPX0JBTksoInNwaTEiLAkxMiwJMHgwLAkyMCwJNCksCisJVlQ4NTAwX0dQSU9fQkFOSygic3BpMiIsCTE2LAkweDAsCTI0LAk0KSwKKwlWVDg1MDBfR1BJT19CQU5LKCJwd21vdXQiLAkyNCwJMHgwLAkyOCwJMiksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJzZG1tYyIsCTAsCTB4NCwJMzAsCTExKSwKKwlWVDg1MDBfR1BJT19CQU5LKCJtcyIsCQkxNiwJMHg0LAk0MSwJNyksCisJVlQ4NTAwX0dQSU9fQkFOSygiaTJjMCIsCTI0LAkweDQsCTQ4LAkyKSwKKwlWVDg1MDBfR1BJT19CQU5LKCJpMmMxIiwJMjYsCTB4NCwJNTAsCTIpLAorCisJVlQ4NTAwX0dQSU9fQkFOSygibWlpIiwJCTAsCTB4OCwJNTIsCTIwKSwKKwlWVDg1MDBfR1BJT19CQU5LKCJzZWUiLAkJMjAsCTB4OCwJNzIsCTQpLAorCVZUODUwMF9HUElPX0JBTksoImlkZSIsCQkyNCwJMHg4LAk3NiwJNyksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJjY2lyIiwJMCwJMHhjLAk4MywJMTkpLAorCisJVlQ4NTAwX0dQSU9fQkFOSygidHMiLAkJOCwJMHgxMCwJMTAyLAkxMSksCisKKwlWVDg1MDBfR1BJT19CQU5LKCJsY2QiLAkJMCwJMHgxNCwJMTEzLAkyMyksCit9OworCitzdGF0aWMgaW50IHZ0ODUwMF9ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQpCit7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgRVhUX1JFR09GRik7CisKKwl2YWwgJj0gfigxIDw8IG9mZnNldCk7CisJd3JpdGVsKHZhbCwgcmVnYmFzZSArIERJUkVDVElPTl9SRUdTICsgRVhUX1JFR09GRik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwl1bnNpZ25lZCB2YWwgPSByZWFkbChyZWdiYXNlICsgRElSRUNUSU9OX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKworCXZhbCB8PSAoMSA8PCBvZmZzZXQpOworCXdyaXRlbCh2YWwsIHJlZ2Jhc2UgKyBESVJFQ1RJT05fUkVHUyArIEVYVF9SRUdPRkYpOworCisJaWYgKHZhbHVlKSB7CisJCXZhbCA9IHJlYWRsKHJlZ2Jhc2UgKyBPVVRWQUxVRV9SRUdTICsgRVhUX1JFR09GRik7CisJCXZhbCB8PSAoMSA8PCBvZmZzZXQpOworCQl3cml0ZWwodmFsLCByZWdiYXNlICsgT1VUVkFMVUVfUkVHUyArIEVYVF9SRUdPRkYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2dDg1MDBfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgdW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiAocmVhZGwocmVnYmFzZSArIElOVkFMVUVfUkVHUyArIEVYVF9SRUdPRkYpID4+IG9mZnNldCkgJiAxOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfZ3Bpb19zZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgdmFsID0gcmVhZGwocmVnYmFzZSArIE9VVFZBTFVFX1JFR1MgKyBFWFRfUkVHT0ZGKTsKKworCWlmICh2YWx1ZSkKKwkJdmFsIHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQl2YWwgJj0gfigxIDw8IG9mZnNldCk7CisKKwl3cml0ZWwodmFsLCByZWdiYXNlICsgT1VUVkFMVUVfUkVHUyArIEVYVF9SRUdPRkYpOworfQorCitzdGF0aWMgaW50IHZ0ODUwMF9ncGlvX3RvX2lycShzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJaWYgKG9mZnNldCA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGdwaW9fdG9faXJxX21hcFtvZmZzZXRdOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCB2dDg1MDBfZXh0ZXJuYWxfZ3Bpb3MgPSB7CisJLmxhYmVsCQkJPSAiZXh0Z3BpbyIsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHZ0ODUwMF9ncGlvX2RpcmVjdGlvbl9pbnB1dCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHZ0ODUwMF9ncGlvX2RpcmVjdGlvbl9vdXRwdXQsCisJLmdldAkJCT0gdnQ4NTAwX2dwaW9fZ2V0X3ZhbHVlLAorCS5zZXQJCQk9IHZ0ODUwMF9ncGlvX3NldF92YWx1ZSwKKwkudG9faXJxCQkJPSB2dDg1MDBfZ3Bpb190b19pcnEsCisJLmNhbl9zbGVlcAkJPSAwLAorCS5iYXNlCQkJPSAwLAorCS5uZ3BpbwkJCT0gOCwKK307CisKK3ZvaWQgX19pbml0IHZ0ODUwMF9ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCWdwaW9fdG9faXJxX21hcFtpXSA9IHdtdF9ncGlvX2V4dF9pcnFbaV07CisKKwlyZWdiYXNlID0gaW9yZW1hcCh3bXRfZ3Bpb19iYXNlLCBTWl82NEspOworCWlmICghcmVnYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBtYXAgTU1JTyByZWdpc3RlcnMgZm9yIEdQSU9cbiIpOworCQlyZXR1cm47CisJfQorCisJZ3Bpb2NoaXBfYWRkKCZ2dDg1MDBfZXh0ZXJuYWxfZ3Bpb3MpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnQ4NTAwX211eGVkX2dwaW9zKTsgaSsrKQorCQlncGlvY2hpcF9hZGQoJnZ0ODUwMF9tdXhlZF9ncGlvc1tpXS5jaGlwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjExOTE2MgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworCS5tYWNybwlhZGRydWFydCwgcnAsIHJ2CisJbW92CVxycCwgICAgICAjMHgwMDIwMDAwMAorCW9ycglccnYsIFxycCwgIzB4ZjgwMDAwMDAKKwlvcnIJXHJwLCBccnAsICMweGQ4MDAwMDAwCisJLmVuZG0KKworCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCXN0cmIJXHJkLCBbXHJ4LCAjMF0KKwkuZW5kbQorCisJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4CisxMDAxOglsZHIJXHJkLCBbXHJ4LCAjMHgxY10KKwlhbmRzCVxyZCwgXHJkLCAjMHgyCisJYm5lCTEwMDFiCisJLmVuZG0KKworCS5tYWNybwl3YWl0dWFydCxyZCxyeAorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjg0YzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMCwwICsxLDMyIEBACisvKgorICogYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIFZJQSBWVDg1MDAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisJLm1hY3JvCWRpc2FibGVfZmlxCisJLmVuZG0KKworCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlAIHBoeXNpY2FsIDB4ZDgxNDAwMDAgaXMgdmlydHVhbCAweGY4MTQwMDAwCisJbW92CVxiYXNlLCAjMHhmODAwMDAwMAorCW9ycglcYmFzZSwgXGJhc2UsICMweDAwMTQwMDAwCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJbGRyCVxpcnFuciwgW1xiYXNlXQorCWNtcAlcaXJxbnIsICM2MyBAIG1heSBiZSBmYWxzZSBwb3NpdGl2ZSwgY2hlY2sgaW50ZXJydXB0IHN0YXR1cworCWJuZQkxMDAxZgorCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjMHg4NF0KKwlhbmRzCVxpcnFzdGF0LCAjMHg4MDAwMDAwMAorCW1vdmVxCVxpcnFuciwgIzAKKzEwMDE6CisJLmVuZG0KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRmZjI3NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZGVmaW5lIGdwaW9fZ2V0X3ZhbHVlCV9fZ3Bpb19nZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19zZXRfdmFsdWUJX19ncGlvX3NldF92YWx1ZQorI2RlZmluZSBncGlvX2NhbnNsZWVwCV9fZ3Bpb19jYW5zbGVlcAorI2RlZmluZSBncGlvX3RvX2lycQlfX2dwaW9fdG9faXJxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNDE2M2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDEyIEBACisvKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaTgwNDIuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pODA0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNzE0M2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaTgwNDIuaApAQCAtMCwwICsxLDE4IEBACisvKiBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaTgwNDIuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd210X2k4MDQyX2Jhc2UgX19pbml0ZGF0YTsKK2V4dGVybiBpbnQgd210X2k4MDQyX2tiZF9pcnE7CitleHRlcm4gaW50IHdtdF9pODA0Ml9hdXhfaXJxOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDc3MjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9JT19ICisKKyNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJX190eXBlc2FmZV9pbygoYSkgKyAweGYwMDAwMDAwKQorI2RlZmluZSBfX21lbV9wY2koYSkJKGEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTEyOWZkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qIFRoaXMgdmFsdWUgaXMganVzdCB0byBtYWtlIHRoZSBjb3JlIGhhcHB5LCBuZXZlciB1c2VkIG90aGVyd2lzZSAqLworI2RlZmluZSBOUl9JUlFTIDEyOApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NWY5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEFSTSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisvKgorICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCisgKi8KKyNkZWZpbmUgUEhZU19PRkZTRVQJVUwoMHgwMDAwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZjNzU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDE4IEBACisvKgorICogYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCisgKgorICovCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKy8qIFBNIFNvZnR3YXJlIFJlc2V0IHJlcXVlc3QgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX1BNU1JfVklSVAkweGY4MTMwMDYwCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUsIGNvbnN0IGNoYXIgKmNtZCkKK3sKKwl3cml0ZWwoMSwgVlQ4NTAwX1BNU1JfVklSVCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ODdlNGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDI2IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgTUFDSF9USU1FWF9ICisjZGVmaW5lIE1BQ0hfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDMwMDAwMDApCisKKyNlbmRpZiAvKiBNQUNIX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiOWUyZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtZG92ZS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2RlZmluZSBVQVJUMF9QSFlTIDB4ZDgyMDAwMDAKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIHZvaWQgcHV0Yyhjb25zdCBjaGFyIGMpCit7CisJd2hpbGUgKHJlYWRiKFVBUlQwX1BIWVMgKyAweDFjKSAmIDB4MikKKwkJLyogVHggYnVzeSwgd2FpdCBhbmQgcG9sbCAqLzsKKworCXdyaXRlYihjLCBVQVJUMF9QSFlTKTsKK30KKworc3RhdGljIHZvaWQgZmx1c2godm9pZCkKK3sKK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0MjI5MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTAsMCArMSwyMCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMCBSdXNzZWxsIEtpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZDAwMDAwMDBVTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2ZlZTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9pcnFzLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwX2lycXMuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgQWxleGV5IENoYXJrb3YgPGFsY2hhcmtAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisvKiBWVDg1MDAgSW50ZXJydXB0IFNvdXJjZXMgKi8KKworI2RlZmluZSBJUlFfSlBFR0VOQwkwCS8qIEpQRUcgRW5jb2RlciAqLworI2RlZmluZSBJUlFfSlBFR0RFQwkxCS8qIEpQRUcgRGVjb2RlciAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9QQVRBCTMJLyogUEFUQSBDb250cm9sbGVyICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX0RNQQkJNQkvKiBETUEgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfRVhUMAk2CS8qIEV4dGVybmFsIEludGVycnVwdCAwICovCisjZGVmaW5lIElSUV9FWFQxCTcJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDEgKi8KKyNkZWZpbmUgSVJRX0dFCQk4CS8qIEdyYXBoaWMgRW5naW5lICovCisjZGVmaW5lIElSUV9HT1YJCTkJLyogR3JhcGhpYyBPdmVybGF5IEVuZ2luZSAqLworI2RlZmluZSBJUlFfRVRIRVIJMTAJLyogRXRoZXJuZXQgTUFDICovCisjZGVmaW5lIElSUV9NUEVHVFMJMTEJLyogVHJhbnNwb3J0IFN0cmVhbSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSVJRX0xDREMJMTIJLyogTENEIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX0VYVDIJMTMJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDIgKi8KKyNkZWZpbmUgSVJRX0VYVDMJMTQJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDMgKi8KKyNkZWZpbmUgSVJRX0VYVDQJMTUJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDQgKi8KKyNkZWZpbmUgSVJRX0NJUEhFUgkxNgkvKiBDaXBoZXIgKi8KKyNkZWZpbmUgSVJRX1ZQUAkJMTcJLyogVmlkZW8gUG9zdC1Qcm9jZXNzb3IgKi8KKyNkZWZpbmUgSVJRX0kyQzEJMTgJLyogSTJDIDEgKi8KKyNkZWZpbmUgSVJRX0kyQzAJMTkJLyogSTJDIDAgKi8KKyNkZWZpbmUgSVJRX1NETU1DCTIwCS8qIFNEL01NQyBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9TRE1NQ19ETUEJMjEJLyogU0QvTU1DIENvbnRyb2xsZXIgRE1BICovCisjZGVmaW5lIElSUV9QTUNfV1UJMjIJLyogUG93ZXIgTWFuYWdlbWVudCBDb250cm9sbGVyIFdha2V1cCAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9TUEkwCTI0CS8qIFNQSSAwICovCisjZGVmaW5lIElSUV9TUEkxCTI1CS8qIFNQSSAxICovCisjZGVmaW5lIElSUV9TUEkyCTI2CS8qIFNQSSAyICovCisjZGVmaW5lIElSUV9MQ0RERgkyNwkvKiBMQ0QgRGF0YSBGb3JtYXR0ZXIgKi8KKyNkZWZpbmUgSVJRX05BTkQJMjgJLyogTkFORCBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9OQU5EX0RNQQkyOQkvKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRE1BICovCisjZGVmaW5lIElSUV9NUwkJMzAJLyogTWVtb3J5U3RpY2sgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfTVNfRE1BCTMxCS8qIE1lbW9yeVN0aWNrIENvbnRyb2xsZXIgRE1BICovCisjZGVmaW5lIElSUV9VQVJUMAkzMgkvKiBVQVJUIDAgKi8KKyNkZWZpbmUgSVJRX1VBUlQxCTMzCS8qIFVBUlQgMSAqLworI2RlZmluZSBJUlFfSTJTCQkzNAkvKiBJMlMgKi8KKyNkZWZpbmUgSVJRX1BDTQkJMzUJLyogUENNICovCisjZGVmaW5lIElSUV9QTUNPUzAJMzYJLyogUE1DIE9TIFRpbWVyIDAgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMQkzNwkvKiBQTUMgT1MgVGltZXIgMSAqLworI2RlZmluZSBJUlFfUE1DT1MyCTM4CS8qIFBNQyBPUyBUaW1lciAyICovCisjZGVmaW5lIElSUV9QTUNPUzMJMzkJLyogUE1DIE9TIFRpbWVyIDMgKi8KKyNkZWZpbmUgSVJRX1ZQVQkJNDAJLyogVmlkZW8gUHJvY2Vzc2luZyBVbml0ICovCisjZGVmaW5lIElSUV9WSUQJCTQxCS8qIFZpZGVvIERpZ2l0YWwgSW5wdXQgSW50ZXJmYWNlICovCisjZGVmaW5lIElSUV9BQzk3CTQyCS8qIEFDOTcgSW50ZXJmYWNlICovCisjZGVmaW5lIElSUV9FSENJCTQzCS8qIFVTQiAqLworI2RlZmluZSBJUlFfTk9SCQk0NAkvKiBOT1IgRmxhc2ggQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfUFMyTU9VU0UJNDUJLyogUFMvMiBNb3VzZSAqLworI2RlZmluZSBJUlFfUFMyS0JECTQ2CS8qIFBTLzIgS2V5Ym9hcmQgKi8KKyNkZWZpbmUgSVJRX1VBUlQyCTQ3CS8qIFVBUlQgMiAqLworI2RlZmluZSBJUlFfUlRDCQk0OAkvKiBSVEMgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9SVENTTQk0OQkvKiBSVEMgU2Vjb25kL01pbnV0ZSBVcGRhdGUgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9VQVJUMwk1MAkvKiBVQVJUIDMgKi8KKyNkZWZpbmUgSVJRX0FEQwkJNTEJLyogQURDICovCisjZGVmaW5lIElSUV9FWFQ1CTUyCS8qIEV4dGVybmFsIEludGVycnVwdCA1ICovCisjZGVmaW5lIElSUV9FWFQ2CTUzCS8qIEV4dGVybmFsIEludGVycnVwdCA2ICovCisjZGVmaW5lIElSUV9FWFQ3CTU0CS8qIEV4dGVybmFsIEludGVycnVwdCA3ICovCisjZGVmaW5lIElSUV9DSVIJCTU1CS8qIENJUiAqLworI2RlZmluZSBJUlFfRE1BMAk1NgkvKiBETUEgQ2hhbm5lbCAwICovCisjZGVmaW5lIElSUV9ETUExCTU3CS8qIERNQSBDaGFubmVsIDEgKi8KKyNkZWZpbmUgSVJRX0RNQTIJNTgJLyogRE1BIENoYW5uZWwgMiAqLworI2RlZmluZSBJUlFfRE1BMwk1OQkvKiBETUEgQ2hhbm5lbCAzICovCisjZGVmaW5lIElSUV9ETUE0CTYwCS8qIERNQSBDaGFubmVsIDQgKi8KKyNkZWZpbmUgSVJRX0RNQTUJNjEJLyogRE1BIENoYW5uZWwgNSAqLworI2RlZmluZSBJUlFfRE1BNgk2MgkvKiBETUEgQ2hhbm5lbCA2ICovCisjZGVmaW5lIElSUV9ETUE3CTYzCS8qIERNQSBDaGFubmVsIDcgKi8KKworI2RlZmluZSBWVDg1MDBfTlJfSVJRUwkJNjQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBfcmVncy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljNjNlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBfcmVncy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3Z0ODUwMF9yZWdzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKyNpZm5kZWYgX19BU01fQVJNX0FSQ0hfVlQ4NTAwX1JFR1NfSAorI2RlZmluZSBfX0FTTV9BUk1fQVJDSF9WVDg1MDBfUkVHU19ICisKKy8qIFZUODUwMCBSZWdpc3RlcnMgTWFwICovCisKKyNkZWZpbmUgVlQ4NTAwX1JFR1NfU1RBUlRfUEhZUwkweGQ4MDAwMDAwCS8qIFN0YXJ0IG9mIE1NSU8gcmVnaXN0ZXJzICovCisjZGVmaW5lIFZUODUwMF9SRUdTX1NUQVJUX1ZJUlQJMHhmODAwMDAwMAkvKiBWaXJ0dWFsIG1hcHBpbmcgc3RhcnQgKi8KKworI2RlZmluZSBWVDg1MDBfRERSX0JBU0UJCTB4ZDgwMDAwMDAJLyogMWsJRERSL0REUjIgTWVtb3J5CisJCQkJCQkJQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfRE1BX0JBU0UJCTB4ZDgwMDEwMDAJLyogMWsJRE1BIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX1NGTEFTSF9CQVNFCTB4ZDgwMDIwMDAJLyogMWsJU2VyaWFsIEZsYXNoIE1lbW9yeQorCQkJCQkJCUNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX0VUSEVSX0JBU0UJMHhkODAwNDAwMAkvKiAxawlFdGhlcm5ldCBNQUMgMCAqLworI2RlZmluZSBWVDg1MDBfQ0lQSEVSX0JBU0UJMHhkODAwNjAwMAkvKiA0awlDaXBoZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX1VTQl9CQVNFCQkweGQ4MDA3ODAwCS8qIDJrCVVTQiBPVEcgKi8KKyMgZGVmaW5lIFZUODUwMF9FSENJX0JBU0UJMHhkODAwNzkwMAkvKglFSENJICovCisjIGRlZmluZSBWVDg1MDBfVUhDSV9CQVNFCTB4ZDgwMDdiMDEJLyoJVUhDSSAqLworI2RlZmluZSBWVDg1MDBfUEFUQV9CQVNFCTB4ZDgwMDgwMDAJLyogNTEyCVBBVEEgKi8KKyNkZWZpbmUgVlQ4NTAwX1BTMl9CQVNFCQkweGQ4MDA4ODAwCS8qIDFrCVBTLzIgKi8KKyNkZWZpbmUgVlQ4NTAwX05BTkRfQkFTRQkweGQ4MDA5MDAwCS8qIDFrCU5BTkQgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfTk9SX0JBU0UJCTB4ZDgwMDk0MDAJLyogMWsJTk9SIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX1NETU1DX0JBU0UJMHhkODAwYTAwMAkvKiAxawlTRC9NTUMgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfTVNfQkFTRQkJMHhkODAwYjAwMAkvKiAxawlNUy9NU1BSTyBDb250cm9sbGVyICovCisjZGVmaW5lIFZUODUwMF9MQ0RDX0JBU0UJMHhkODAwZTQwMAkvKiAxawlMQ0QgQ29udHJvbGxlciAqLworI2RlZmluZSBWVDg1MDBfVlBVX0JBU0UJCTB4ZDgwNTAwMDAJLyogMjU2CVZQVSAqLworI2RlZmluZSBWVDg1MDBfR09WX0JBU0UJCTB4ZDgwNTAzMDAJLyogMjU2CUdPViAqLworI2RlZmluZSBWVDg1MDBfR0VHRUFfQkFTRQkweGQ4MDUwNDAwCS8qIDc2OAlHRS9HRSBBbHBoYSBNaXhpbmcgKi8KKyNkZWZpbmUgVlQ4NTAwX0xDREZfQkFTRQkweGQ4MDUwOTAwCS8qIDI1NglMQ0QgRm9ybWF0dGVyICovCisjZGVmaW5lIFZUODUwMF9WSURfQkFTRQkJMHhkODA1MGEwMAkvKiAyNTYJVklEICovCisjZGVmaW5lIFZUODUwMF9WUFBfQkFTRQkJMHhkODA1MGIwMAkvKiAyNTYJVlBQICovCisjZGVmaW5lIFZUODUwMF9UU0JLX0JBU0UJMHhkODBmNDAwMAkvKiA0awlUU0JLICovCisjZGVmaW5lIFZUODUwMF9KUEVHREVDX0JBU0UJMHhkODBmZTAwMAkvKiA0awlKUEVHIERlY29kZXIgKi8KKyNkZWZpbmUgVlQ4NTAwX0pQRUdFTkNfQkFTRQkweGQ4MGZmMDAwCS8qIDRrCUpQRUcgRW5jb2RlciAqLworI2RlZmluZSBWVDg1MDBfUlRDX0JBU0UJCTB4ZDgxMDAwMDAJLyogNjRrCVJUQyAqLworI2RlZmluZSBWVDg1MDBfR1BJT19CQVNFCTB4ZDgxMTAwMDAJLyogNjRrCUdQSU8gQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBWVDg1MDBfU0NDX0JBU0UJCTB4ZDgxMjAwMDAJLyogNjRrCVN5c3RlbSBDb25maWd1cmF0aW9uKi8KKyNkZWZpbmUgVlQ4NTAwX1BNQ19CQVNFCQkweGQ4MTMwMDAwCS8qIDY0awlQTUMgQ29uZmlndXJhdGlvbiAqLworI2RlZmluZSBWVDg1MDBfSUNfQkFTRQkJMHhkODE0MDAwMAkvKiA2NGsJSW50ZXJydXB0IENvbnRyb2xsZXIqLworI2RlZmluZSBWVDg1MDBfVUFSVDBfQkFTRQkweGQ4MjAwMDAwCS8qIDY0awlVQVJUIDAgKi8KKyNkZWZpbmUgVlQ4NTAwX1VBUlQyX0JBU0UJMHhkODIxMDAwMAkvKiA2NGsJVUFSVCAyICovCisjZGVmaW5lIFZUODUwMF9QV01fQkFTRQkJMHhkODIyMDAwMAkvKiA2NGsJUFdNIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgVlQ4NTAwX1NQSTBfQkFTRQkweGQ4MjQwMDAwCS8qIDY0awlTUEkgMCAqLworI2RlZmluZSBWVDg1MDBfU1BJMV9CQVNFCTB4ZDgyNTAwMDAJLyogNjRrCVNQSSAxICovCisjZGVmaW5lIFZUODUwMF9DSVJfQkFTRQkJMHhkODI3MDAwMAkvKiA2NGsJQ0lSICovCisjZGVmaW5lIFZUODUwMF9JMkMwX0JBU0UJMHhkODI4MDAwMAkvKiA2NGsJSTJDIDAgKi8KKyNkZWZpbmUgVlQ4NTAwX0FDOTdfQkFTRQkweGQ4MjkwMDAwCS8qIDY0awlBQzk3ICovCisjZGVmaW5lIFZUODUwMF9TUEkyX0JBU0UJMHhkODJhMDAwMAkvKiA2NGsJU1BJIDIgKi8KKyNkZWZpbmUgVlQ4NTAwX1VBUlQxX0JBU0UJMHhkODJiMDAwMAkvKiA2NGsJVUFSVCAxICovCisjZGVmaW5lIFZUODUwMF9VQVJUM19CQVNFCTB4ZDgyYzAwMDAJLyogNjRrCVVBUlQgMyAqLworI2RlZmluZSBWVDg1MDBfUENNX0JBU0UJCTB4ZDgyZDAwMDAJLyogNjRrCVBDTSAqLworI2RlZmluZSBWVDg1MDBfSTJDMV9CQVNFCTB4ZDgzMjAwMDAJLyogNjRrCUkyQyAxICovCisjZGVmaW5lIFZUODUwMF9JMlNfQkFTRQkJMHhkODMzMDAwMAkvKiA2NGsJSTJTICovCisjZGVmaW5lIFZUODUwMF9BRENfQkFTRQkJMHhkODM0MDAwMAkvKiA2NGsJQURDICovCisKKyNkZWZpbmUgVlQ4NTAwX1JFR1NfRU5EX1BIWVMJMHhkODM0ZmZmZgkvKiBFbmQgb2YgTU1JTyByZWdpc3RlcnMgKi8KKyNkZWZpbmUgVlQ4NTAwX1JFR1NfTEVOR1RICShWVDg1MDBfUkVHU19FTkRfUEhZUyBcCisJCQkJLSBWVDg1MDBfUkVHU19TVEFSVF9QSFlTICsgMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwZmIuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC92dDg1MDBmYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmMzk5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvdnQ4NTAwZmIuaApAQCAtMCwwICsxLDMxIEBACisvKgorICogIFZUODUwMC9XTTg1MDUgRnJhbWUgQnVmZmVyIHBsYXRmb3JtIGRhdGEgZGVmaW5pdGlvbnMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEVkIFNwaXJpZG9ub3YgPGVkby5ydXNAZ21haWwuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmbmRlZiBfVlQ4NTAwRkJfSAorI2RlZmluZSBfVlQ4NTAwRkJfSAorCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworc3RydWN0IHZ0ODUwMGZiX3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCBmYl92aWRlb21vZGUJbW9kZTsKKwl1MzIJCQl4cmVzX3ZpcnR1YWw7CisJdTMyCQkJeXJlc192aXJ0dWFsOworCXUzMgkJCWJwcDsKKwl1bnNpZ25lZCBsb25nCQl2aWRlb19tZW1fcGh5czsKKwl2b2lkCQkJKnZpZGVvX21lbV92aXJ0OworCXVuc2lnbmVkIGxvbmcJCXZpZGVvX21lbV9sZW47Cit9OworCisjZW5kaWYgLyogX1ZUODUwMEZCX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaW5jbHVkZS9tYWNoL3dtODUwNV9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjEyODYyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfaXJxcy5oCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfaXJxcy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKy8qIFdNODUwNSBJbnRlcnJ1cHQgU291cmNlcyAqLworCisjZGVmaW5lIElSUV9VSENJCTAJLyogVUhDIEZTIChVSENJPykgKi8KKyNkZWZpbmUgSVJRX0VIQ0kJMQkvKiBVSEMgSFMgKi8KKyNkZWZpbmUgSVJRX1VEQ0RNQQkyCS8qIFVEQyBETUEgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfUFMyTU9VU0UJNAkvKiBQUy8yIE1vdXNlICovCisjZGVmaW5lIElSUV9VREMJCTUJLyogVURDICovCisjZGVmaW5lIElSUV9FWFQwCTYJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDAgKi8KKyNkZWZpbmUgSVJRX0VYVDEJNwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgMSAqLworI2RlZmluZSBJUlFfS0VZUEFECTgJLyogS2V5cGFkICovCisjZGVmaW5lIElSUV9ETUEJCTkJLyogRE1BIENvbnRyb2xsZXIgKi8KKyNkZWZpbmUgSVJRX0VUSEVSCTEwCS8qIEV0aGVybmV0IE1BQyAqLworCQkJCS8qIFJlc2VydmVkICovCisJCQkJLyogUmVzZXJ2ZWQgKi8KKyNkZWZpbmUgSVJRX0VYVDIJMTMJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDIgKi8KKyNkZWZpbmUgSVJRX0VYVDMJMTQJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDMgKi8KKyNkZWZpbmUgSVJRX0VYVDQJMTUJLyogRXh0ZXJuYWwgSW50ZXJydXB0IDQgKi8KKyNkZWZpbmUgSVJRX0FQQgkJMTYJLyogQVBCIEJyaWRnZSAqLworI2RlZmluZSBJUlFfRE1BMAkxNwkvKiBETUEgQ2hhbm5lbCAwICovCisjZGVmaW5lIElSUV9JMkMxCTE4CS8qIEkyQyAxICovCisjZGVmaW5lIElSUV9JMkMwCTE5CS8qIEkyQyAwICovCisjZGVmaW5lIElSUV9TRE1NQwkyMAkvKiBTRC9NTUMgQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfU0RNTUNfRE1BCTIxCS8qIFNEL01NQyBDb250cm9sbGVyIERNQSAqLworI2RlZmluZSBJUlFfUE1DX1dVCTIyCS8qIFBvd2VyIE1hbmFnZW1lbnQgQ29udHJvbGxlciBXYWtldXAgKi8KKyNkZWZpbmUgSVJRX1BTMktCRAkyMwkvKiBQUy8yIEtleWJvYXJkICovCisjZGVmaW5lIElSUV9TUEkwCTI0CS8qIFNQSSAwICovCisjZGVmaW5lIElSUV9TUEkxCTI1CS8qIFNQSSAxICovCisjZGVmaW5lIElSUV9TUEkyCTI2CS8qIFNQSSAyICovCisjZGVmaW5lIElSUV9ETUExCTI3CS8qIERNQSBDaGFubmVsIDEgKi8KKyNkZWZpbmUgSVJRX05BTkQJMjgJLyogTkFORCBGbGFzaCBDb250cm9sbGVyICovCisjZGVmaW5lIElSUV9OQU5EX0RNQQkyOQkvKiBOQU5EIEZsYXNoIENvbnRyb2xsZXIgRE1BICovCisjZGVmaW5lIElSUV9VQVJUNQkzMAkvKiBVQVJUIDUgKi8KKyNkZWZpbmUgSVJRX1VBUlQ0CTMxCS8qIFVBUlQgNCAqLworI2RlZmluZSBJUlFfVUFSVDAJMzIJLyogVUFSVCAwICovCisjZGVmaW5lIElSUV9VQVJUMQkzMwkvKiBVQVJUIDEgKi8KKyNkZWZpbmUgSVJRX0RNQTIJMzQJLyogRE1BIENoYW5uZWwgMiAqLworI2RlZmluZSBJUlFfSTJTCQkzNQkvKiBJMlMgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMAkzNgkvKiBQTUMgT1MgVGltZXIgMCAqLworI2RlZmluZSBJUlFfUE1DT1MxCTM3CS8qIFBNQyBPUyBUaW1lciAxICovCisjZGVmaW5lIElSUV9QTUNPUzIJMzgJLyogUE1DIE9TIFRpbWVyIDIgKi8KKyNkZWZpbmUgSVJRX1BNQ09TMwkzOQkvKiBQTUMgT1MgVGltZXIgMyAqLworI2RlZmluZSBJUlFfRE1BMwk0MAkvKiBETUEgQ2hhbm5lbCAzICovCisjZGVmaW5lIElSUV9ETUE0CTQxCS8qIERNQSBDaGFubmVsIDQgKi8KKyNkZWZpbmUgSVJRX0FDOTcJNDIJLyogQUM5NyBJbnRlcmZhY2UgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfTk9SCQk0NAkvKiBOT1IgRmxhc2ggQ29udHJvbGxlciAqLworI2RlZmluZSBJUlFfRE1BNQk0NQkvKiBETUEgQ2hhbm5lbCA1ICovCisjZGVmaW5lIElSUV9ETUE2CTQ2CS8qIERNQSBDaGFubmVsIDYgKi8KKyNkZWZpbmUgSVJRX1VBUlQyCTQ3CS8qIFVBUlQgMiAqLworI2RlZmluZSBJUlFfUlRDCQk0OAkvKiBSVEMgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9SVENTTQk0OQkvKiBSVEMgU2Vjb25kL01pbnV0ZSBVcGRhdGUgSW50ZXJydXB0ICovCisjZGVmaW5lIElSUV9VQVJUMwk1MAkvKiBVQVJUIDMgKi8KKyNkZWZpbmUgSVJRX0RNQTcJNTEJLyogRE1BIENoYW5uZWwgNyAqLworI2RlZmluZSBJUlFfRVhUNQk1MgkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNSAqLworI2RlZmluZSBJUlFfRVhUNgk1MwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNiAqLworI2RlZmluZSBJUlFfRVhUNwk1NAkvKiBFeHRlcm5hbCBJbnRlcnJ1cHQgNyAqLworI2RlZmluZSBJUlFfQ0lSCQk1NQkvKiBDSVIgKi8KKyNkZWZpbmUgSVJRX1NJQzAJNTYJLyogU0lDIElSUTAgKi8KKyNkZWZpbmUgSVJRX1NJQzEJNTcJLyogU0lDIElSUTEgKi8KKyNkZWZpbmUgSVJRX1NJQzIJNTgJLyogU0lDIElSUTIgKi8KKyNkZWZpbmUgSVJRX1NJQzMJNTkJLyogU0lDIElSUTMgKi8KKyNkZWZpbmUgSVJRX1NJQzQJNjAJLyogU0lDIElSUTQgKi8KKyNkZWZpbmUgSVJRX1NJQzUJNjEJLyogU0lDIElSUTUgKi8KKyNkZWZpbmUgSVJRX1NJQzYJNjIJLyogU0lDIElSUTYgKi8KKyNkZWZpbmUgSVJRX1NJQzcJNjMJLyogU0lDIElSUTcgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfSlBFR0RFQwk2NQkvKiBKUEVHIERlY29kZXIgKi8KKyNkZWZpbmUgSVJRX1NBRQkJNjYJLyogU0FFICg/KSAqLworCQkJCS8qIFJlc2VydmVkICovCisjZGVmaW5lIElSUV9WUFUJCTc5CS8qIFZpZGVvIFByb2Nlc3NpbmcgVW5pdCAqLworI2RlZmluZSBJUlFfVlBQCQk4MAkvKiBWaWRlbyBQb3N0LVByb2Nlc3NvciAqLworI2RlZmluZSBJUlFfVklECQk4MQkvKiBWaWRlbyBEaWdpdGFsIElucHV0IEludGVyZmFjZSAqLworI2RlZmluZSBJUlFfU1BVCQk4MgkvKiBTUFUgKD8pICovCisjZGVmaW5lIElSUV9QSVAJCTgzCS8qIFBJUCBFcnJvciAqLworI2RlZmluZSBJUlFfR0UJCTg0CS8qIEdyYXBoaWMgRW5naW5lICovCisjZGVmaW5lIElSUV9HT1YJCTg1CS8qIEdyYXBoaWMgT3ZlcmxheSBFbmdpbmUgKi8KKyNkZWZpbmUgSVJRX0RWTwkJODYJLyogRGlnaXRhbCBWaWRlbyBPdXRwdXQgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfRE1BOAk5MgkvKiBETUEgQ2hhbm5lbCA4ICovCisjZGVmaW5lIElSUV9ETUE5CTkzCS8qIERNQSBDaGFubmVsIDkgKi8KKyNkZWZpbmUgSVJRX0RNQTEwCTk0CS8qIERNQSBDaGFubmVsIDEwICovCisjZGVmaW5lIElSUV9ETUExMQk5NQkvKiBETUEgQ2hhbm5lbCAxMSAqLworI2RlZmluZSBJUlFfRE1BMTIJOTYJLyogRE1BIENoYW5uZWwgMTIgKi8KKyNkZWZpbmUgSVJRX0RNQTEzCTk3CS8qIERNQSBDaGFubmVsIDEzICovCisjZGVmaW5lIElSUV9ETUExNAk5OAkvKiBETUEgQ2hhbm5lbCAxNCAqLworI2RlZmluZSBJUlFfRE1BMTUJOTkJLyogRE1BIENoYW5uZWwgMTUgKi8KKwkJCQkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBJUlFfR09WVwkxMTEJLyogR09WVyAoPykgKi8KKyNkZWZpbmUgSVJRX0dPVlJTRFNDRAkxMTIJLyogR09WUiBTRFNDRCAoPykgKi8KKyNkZWZpbmUgSVJRX0dPVlJTRE1JRgkxMTMJLyogR09WUiBTRE1JRiAoPykgKi8KKyNkZWZpbmUgSVJRX0dPVlJIRFNDRAkxMTQJLyogR09WUiBIRFNDRCAoPykgKi8KKyNkZWZpbmUgSVJRX0dPVlJIRE1JRgkxMTUJLyogR09WUiBIRE1JRiAoPykgKi8KKworI2RlZmluZSBXTTg1MDVfTlJfSVJRUwkJMTE2CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvd204NTA1X3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMTU1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pbmNsdWRlL21hY2gvd204NTA1X3JlZ3MuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogIGFyY2gvYXJtL21hY2gtdnQ4NTAwL2luY2x1ZGUvbWFjaC93bTg1MDVfcmVncy5oCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX1dNODUwNV9SRUdTX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfV004NTA1X1JFR1NfSAorCisvKiBXTTg1MDUgUmVnaXN0ZXJzIE1hcCAqLworCisjZGVmaW5lIFdNODUwNV9SRUdTX1NUQVJUX1BIWVMJMHhkODAwMDAwMAkvKiBTdGFydCBvZiBNTUlPIHJlZ2lzdGVycyAqLworI2RlZmluZSBXTTg1MDVfUkVHU19TVEFSVF9WSVJUCTB4ZjgwMDAwMDAJLyogVmlydHVhbCBtYXBwaW5nIHN0YXJ0ICovCisKKyNkZWZpbmUgV004NTA1X0REUl9CQVNFCQkweGQ4MDAwNDAwCS8qIDFrCUREUi9ERFIyIE1lbW9yeQorCQkJCQkJCUNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgV004NTA1X0RNQV9CQVNFCQkweGQ4MDAxODAwCS8qIDFrCURNQSBDb250cm9sbGVyICovCisjZGVmaW5lIFdNODUwNV9WRE1BX0JBU0UJMHhkODAwMWMwMAkvKiAxawlWRE1BICovCisjZGVmaW5lIFdNODUwNV9TRkxBU0hfQkFTRQkweGQ4MDAyMDAwCS8qIDFrCVNlcmlhbCBGbGFzaCBNZW1vcnkKKwkJCQkJCQlDb250cm9sbGVyICovCisjZGVmaW5lIFdNODUwNV9FVEhFUl9CQVNFCTB4ZDgwMDQwMDAJLyogMWsJRXRoZXJuZXQgTUFDIDAgKi8KKyNkZWZpbmUgV004NTA1X0NJUEhFUl9CQVNFCTB4ZDgwMDYwMDAJLyogNGsJQ2lwaGVyICovCisjZGVmaW5lIFdNODUwNV9VU0JfQkFTRQkJMHhkODAwNzAwMAkvKiAyawlVU0IgMi4wIEhvc3QgKi8KKyMgZGVmaW5lIFdNODUwNV9FSENJX0JBU0UJMHhkODAwNzEwMAkvKglFSENJICovCisjIGRlZmluZSBXTTg1MDVfVUhDSV9CQVNFCTB4ZDgwMDczMDEJLyoJVUhDSSAqLworI2RlZmluZSBXTTg1MDVfUFMyX0JBU0UJCTB4ZDgwMDg4MDAJLyogMWsJUFMvMiAqLworI2RlZmluZSBXTTg1MDVfTkFORF9CQVNFCTB4ZDgwMDkwMDAJLyogMWsJTkFORCBDb250cm9sbGVyICovCisjZGVmaW5lIFdNODUwNV9OT1JfQkFTRQkJMHhkODAwOTQwMAkvKiAxawlOT1IgQ29udHJvbGxlciAqLworI2RlZmluZSBXTTg1MDVfU0RNTUNfQkFTRQkweGQ4MDBhMDAwCS8qIDFrCVNEL01NQyBDb250cm9sbGVyICovCisjZGVmaW5lIFdNODUwNV9WUFVfQkFTRQkJMHhkODA1MDAwMAkvKiAyNTYJVlBVICovCisjZGVmaW5lIFdNODUwNV9HT1ZfQkFTRQkJMHhkODA1MDMwMAkvKiAyNTYJR09WICovCisjZGVmaW5lIFdNODUwNV9HRUdFQV9CQVNFCTB4ZDgwNTA0MDAJLyogNzY4CUdFL0dFIEFscGhhIE1peGluZyAqLworI2RlZmluZSBXTTg1MDVfR09WUl9CQVNFCTB4ZDgwNTA4MDAJLyogNTEyCUdPVlIgKGZyYW1idWZmZXIpICovCisjZGVmaW5lIFdNODUwNV9WSURfQkFTRQkJMHhkODA1MGEwMAkvKiAyNTYJVklEICovCisjZGVmaW5lIFdNODUwNV9TQ0xfQkFTRQkJMHhkODA1MGQwMAkvKiAyNTYJU0NMICovCisjZGVmaW5lIFdNODUwNV9WUFBfQkFTRQkJMHhkODA1MGYwMAkvKiAyNTYJVlBQICovCisjZGVmaW5lIFdNODUwNV9KUEVHREVDX0JBU0UJMHhkODBmZTAwMAkvKiA0awlKUEVHIERlY29kZXIgKi8KKyNkZWZpbmUgV004NTA1X1JUQ19CQVNFCQkweGQ4MTAwMDAwCS8qIDY0awlSVEMgKi8KKyNkZWZpbmUgV004NTA1X0dQSU9fQkFTRQkweGQ4MTEwMDAwCS8qIDY0awlHUElPIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgV004NTA1X1NDQ19CQVNFCQkweGQ4MTIwMDAwCS8qIDY0awlTeXN0ZW0gQ29uZmlndXJhdGlvbiovCisjZGVmaW5lIFdNODUwNV9QTUNfQkFTRQkJMHhkODEzMDAwMAkvKiA2NGsJUE1DIENvbmZpZ3VyYXRpb24gKi8KKyNkZWZpbmUgV004NTA1X0lDX0JBU0UJCTB4ZDgxNDAwMDAJLyogNjRrCUludGVycnVwdCBDb250cm9sbGVyKi8KKyNkZWZpbmUgV004NTA1X1NJQ19CQVNFCQkweGQ4MTUwMDAwCS8qIDY0awlTZWNvbmRhcnkgSUMgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQwX0JBU0UJMHhkODIwMDAwMAkvKiA2NGsJVUFSVCAwICovCisjZGVmaW5lIFdNODUwNV9VQVJUMl9CQVNFCTB4ZDgyMTAwMDAJLyogNjRrCVVBUlQgMiAqLworI2RlZmluZSBXTTg1MDVfUFdNX0JBU0UJCTB4ZDgyMjAwMDAJLyogNjRrCVBXTSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIFdNODUwNV9TUEkwX0JBU0UJMHhkODI0MDAwMAkvKiA2NGsJU1BJIDAgKi8KKyNkZWZpbmUgV004NTA1X1NQSTFfQkFTRQkweGQ4MjUwMDAwCS8qIDY0awlTUEkgMSAqLworI2RlZmluZSBXTTg1MDVfS0VZUEFEX0JBU0UJMHhkODI2MDAwMAkvKiA2NGsJS2V5cGFkIGNvbnRyb2wgKi8KKyNkZWZpbmUgV004NTA1X0NJUl9CQVNFCQkweGQ4MjcwMDAwCS8qIDY0awlDSVIgKi8KKyNkZWZpbmUgV004NTA1X0kyQzBfQkFTRQkweGQ4MjgwMDAwCS8qIDY0awlJMkMgMCAqLworI2RlZmluZSBXTTg1MDVfQUM5N19CQVNFCTB4ZDgyOTAwMDAJLyogNjRrCUFDOTcgKi8KKyNkZWZpbmUgV004NTA1X1NQSTJfQkFTRQkweGQ4MmEwMDAwCS8qIDY0awlTUEkgMiAqLworI2RlZmluZSBXTTg1MDVfVUFSVDFfQkFTRQkweGQ4MmIwMDAwCS8qIDY0awlVQVJUIDEgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQzX0JBU0UJMHhkODJjMDAwMAkvKiA2NGsJVUFSVCAzICovCisjZGVmaW5lIFdNODUwNV9JMkMxX0JBU0UJMHhkODMyMDAwMAkvKiA2NGsJSTJDIDEgKi8KKyNkZWZpbmUgV004NTA1X0kyU19CQVNFCQkweGQ4MzMwMDAwCS8qIDY0awlJMlMgKi8KKyNkZWZpbmUgV004NTA1X1VBUlQ0X0JBU0UJMHhkODM3MDAwMAkvKiA2NGsJVUFSVCA0ICovCisjZGVmaW5lIFdNODUwNV9VQVJUNV9CQVNFCTB4ZDgzODAwMDAJLyogNjRrCVVBUlQgNSAqLworCisjZGVmaW5lIFdNODUwNV9SRUdTX0VORF9QSFlTCTB4ZDgzOGZmZmYJLyogRW5kIG9mIE1NSU8gcmVnaXN0ZXJzICovCisjZGVmaW5lIFdNODUwNV9SRUdTX0xFTkdUSAkoV004NTA1X1JFR1NfRU5EX1BIWVMgXAorCQkJCS0gV004NTA1X1JFR1NfU1RBUlRfUEhZUyArIDEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjRkZGRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvaXJxLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC12dDg1MDAvaXJxLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgVlQ4NTAwX0lDX0RDVFIJCTB4NDAJCS8qIERlc3RpbmF0aW9uIGNvbnRyb2wKKwkJCQkJCXJlZ2lzdGVyLCA2NCp1OCAqLworI2RlZmluZSBWVDg1MDBfSU5UX0VOQUJMRQkoMSA8PCAzKQorI2RlZmluZSBWVDg1MDBfVFJJR0dFUl9ISUdICSgwIDw8IDQpCisjZGVmaW5lIFZUODUwMF9UUklHR0VSX1JJU0lORwkoMSA8PCA0KQorI2RlZmluZSBWVDg1MDBfVFJJR0dFUl9GQUxMSU5HCSgyIDw8IDQpCisjZGVmaW5lIFZUODUwMF9FREdFCQkoIFZUODUwMF9UUklHR0VSX1JJU0lORyBcCisJCQkJfCBWVDg1MDBfVFJJR0dFUl9GQUxMSU5HKQorI2RlZmluZSBWVDg1MDBfSUNfU1RBVFVTCTB4ODAJCS8qIEludGVycnVwdCBzdGF0dXMsIDIqdTMyICovCisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmljX3JlZ2Jhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpzaWNfcmVnYmFzZTsKKworc3RhdGljIHZvaWQgdnQ4NTAwX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gaWNfcmVnYmFzZTsKKwl1OCBlZGdlOworCisJaWYgKGlycSA+PSA2NCkgeworCQliYXNlID0gc2ljX3JlZ2Jhc2U7CisJCWlycSAtPSA2NDsKKwl9CisJZWRnZSA9IHJlYWRiKGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSkgJiBWVDg1MDBfRURHRTsKKwlpZiAoZWRnZSkgeworCQl2b2lkIF9faW9tZW0gKnN0YXRfcmVnID0gYmFzZSArIFZUODUwMF9JQ19TVEFUVVMKKwkJCQkJCSsgKGlycSA8IDMyID8gMCA6IDQpOworCQl1bnNpZ25lZCBzdGF0dXMgPSByZWFkbChzdGF0X3JlZyk7CisKKwkJc3RhdHVzIHw9ICgxIDw8IChpcnEgJiAweDFmKSk7CisJCXdyaXRlbChzdGF0dXMsIHN0YXRfcmVnKTsKKwl9IGVsc2UgeworCQl1OCBkY3RyID0gcmVhZGIoYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaXJxKTsKKworCQlkY3RyICY9IH5WVDg1MDBfSU5UX0VOQUJMRTsKKwkJd3JpdGViKGRjdHIsIGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGljX3JlZ2Jhc2U7CisJdTggZGN0cjsKKworCWlmIChpcnEgPj0gNjQpIHsKKwkJYmFzZSA9IHNpY19yZWdiYXNlOworCQlpcnEgLT0gNjQ7CisJfQorCWRjdHIgPSByZWFkYihiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpcnEpOworCWRjdHIgfD0gVlQ4NTAwX0lOVF9FTkFCTEU7CisJd3JpdGViKGRjdHIsIGJhc2UgKyBWVDg1MDBfSUNfRENUUiArIGlycSk7Cit9CisKK3N0YXRpYyBpbnQgdnQ4NTAwX2lycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGljX3JlZ2Jhc2U7CisJdW5zaWduZWQgaW50IG9yaWdfaXJxID0gaXJxOworCXU4IGRjdHI7CisKKwlpZiAoaXJxID49IDY0KSB7CisJCWJhc2UgPSBzaWNfcmVnYmFzZTsKKwkJaXJxIC09IDY0OworCX0KKworCWRjdHIgPSByZWFkYihiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpcnEpOworCWRjdHIgJj0gflZUODUwMF9FREdFOworCisJc3dpdGNoIChmbG93X3R5cGUpIHsKKwljYXNlIElSUUZfVFJJR0dFUl9MT1c6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgSVJRRl9UUklHR0VSX0hJR0g6CisJCWRjdHIgfD0gVlQ4NTAwX1RSSUdHRVJfSElHSDsKKwkJaXJxX2Rlc2Nbb3JpZ19pcnFdLmhhbmRsZV9pcnEgPSBoYW5kbGVfbGV2ZWxfaXJxOworCQlicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9GQUxMSU5HOgorCQlkY3RyIHw9IFZUODUwMF9UUklHR0VSX0ZBTExJTkc7CisJCWlycV9kZXNjW29yaWdfaXJxXS5oYW5kbGVfaXJxID0gaGFuZGxlX2VkZ2VfaXJxOworCQlicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9SSVNJTkc6CisJCWRjdHIgfD0gVlQ4NTAwX1RSSUdHRVJfUklTSU5HOworCQlpcnFfZGVzY1tvcmlnX2lycV0uaGFuZGxlX2lycSA9IGhhbmRsZV9lZGdlX2lycTsKKwkJYnJlYWs7CisJfQorCXdyaXRlYihkY3RyLCBiYXNlICsgVlQ4NTAwX0lDX0RDVFIgKyBpcnEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdnQ4NTAwX2lycV9jaGlwID0geworCS5uYW1lICAgICAgPSAidnQ4NTAwIiwKKwkuYWNrICAgICAgID0gdnQ4NTAwX2lycV9tYXNrLAorCS5tYXNrICAgICAgPSB2dDg1MDBfaXJxX21hc2ssCisJLnVubWFzayAgICA9IHZ0ODUwMF9pcnFfdW5tYXNrLAorCS5zZXRfdHlwZSAgPSB2dDg1MDBfaXJxX3NldF90eXBlLAorfTsKKwordm9pZCBfX2luaXQgdnQ4NTAwX2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlpY19yZWdiYXNlID0gaW9yZW1hcCh3bXRfaWNfYmFzZSwgU1pfNjRLKTsKKworCWlmIChpY19yZWdiYXNlKSB7CisJCS8qIEVuYWJsZSByb3RhdGluZyBwcmlvcml0eSBmb3IgSVJRICovCisJCXdyaXRlbCgoMSA8PCA2KSwgaWNfcmVnYmFzZSArIDB4MjApOworCQl3cml0ZWwoMCwgaWNfcmVnYmFzZSArIDB4MjQpOworCisJCWZvciAoaSA9IDA7IGkgPCB3bXRfbnJfaXJxczsgaSsrKSB7CisJCQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCByb3V0ZSB0aGVtIHRvIElSUSAqLworCQkJd3JpdGViKDB4MDAsIGljX3JlZ2Jhc2UgKyBWVDg1MDBfSUNfRENUUiArIGkpOworCisJCQlzZXRfaXJxX2NoaXAoaSwgJnZ0ODUwMF9pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVtYXAgdGhlIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVycywgbm90IGVuYWJsaW5nIElSUXMhXG4iKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IHdtODUwNV9pbml0X2lycSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCisJaWNfcmVnYmFzZSA9IGlvcmVtYXAod210X2ljX2Jhc2UsIFNaXzY0Syk7CisJc2ljX3JlZ2Jhc2UgPSBpb3JlbWFwKHdtdF9zaWNfYmFzZSwgU1pfNjRLKTsKKworCWlmIChpY19yZWdiYXNlICYmIHNpY19yZWdiYXNlKSB7CisJCS8qIEVuYWJsZSByb3RhdGluZyBwcmlvcml0eSBmb3IgSVJRICovCisJCXdyaXRlbCgoMSA8PCA2KSwgaWNfcmVnYmFzZSArIDB4MjApOworCQl3cml0ZWwoMCwgaWNfcmVnYmFzZSArIDB4MjQpOworCQl3cml0ZWwoKDEgPDwgNiksIHNpY19yZWdiYXNlICsgMHgyMCk7CisJCXdyaXRlbCgwLCBzaWNfcmVnYmFzZSArIDB4MjQpOworCisJCWZvciAoaSA9IDA7IGkgPCB3bXRfbnJfaXJxczsgaSsrKSB7CisJCQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGFuZCByb3V0ZSB0aGVtIHRvIElSUSAqLworCQkJaWYgKGkgPCA2NCkKKwkJCQl3cml0ZWIoMHgwMCwgaWNfcmVnYmFzZSArIFZUODUwMF9JQ19EQ1RSICsgaSk7CisJCQllbHNlCisJCQkJd3JpdGViKDB4MDAsIHNpY19yZWdiYXNlICsgVlQ4NTAwX0lDX0RDVFIKKwkJCQkJCQkJKyBpIC0gNjQpOworCisJCQlzZXRfaXJxX2NoaXAoaSwgJnZ0ODUwMF9pcnFfY2hpcCk7CisJCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVtYXAgdGhlIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVycywgbm90IGVuYWJsaW5nIElSUXMhXG4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC9wd20uYyBiL2FyY2gvYXJtL21hY2gtdnQ4NTAwL3B3bS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZDgyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC9wd20uYwpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdnQ4NTAwL3B3bS5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcHdtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorCisjZGVmaW5lIFZUODUwMF9OUl9QV01TIDQKKworc3RhdGljIERFRklORV9NVVRFWChwd21fbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHB3bV9saXN0KTsKKworc3RydWN0IHB3bV9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpwZGV2OworCisJY29uc3QgY2hhcgkqbGFiZWw7CisKKwl2b2lkIF9faW9tZW0JKnJlZ2Jhc2U7CisKKwl1bnNpZ25lZCBpbnQJdXNlX2NvdW50OworCXVuc2lnbmVkIGludAlwd21faWQ7Cit9OworCisjZGVmaW5lIG1zZWNzX3RvX2xvb3BzKHQpIChsb29wc19wZXJfamlmZnkgLyAxMDAwICogSFogKiB0KQorc3RhdGljIGlubGluZSB2b2lkIHB3bV9idXN5X3dhaXQodm9pZCBfX2lvbWVtICpyZWcsIHU4IGJpdG1hc2spCit7CisJaW50IGxvb3BzID0gbXNlY3NfdG9fbG9vcHMoMTApOworCXdoaWxlICgocmVhZGIocmVnKSAmIGJpdG1hc2spICYmIC0tbG9vcHMpCisJCWNwdV9yZWxheCgpOworCisJaWYgKHVubGlrZWx5KCFsb29wcykpCisJCXByX3dhcm5pbmcoIldhaXRpbmcgZm9yIHN0YXR1cyBiaXRzIDB4JXggdG8gY2xlYXIgdGltZWQgb3V0XG4iLAorCQkJICAgYml0bWFzayk7Cit9CisKK2ludCBwd21fY29uZmlnKHN0cnVjdCBwd21fZGV2aWNlICpwd20sIGludCBkdXR5X25zLCBpbnQgcGVyaW9kX25zKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBjOworCXVuc2lnbmVkIGxvbmcgcGVyaW9kX2N5Y2xlcywgcHJlc2NhbGUsIHB2LCBkYzsKKworCWlmIChwd20gPT0gTlVMTCB8fCBwZXJpb2RfbnMgPT0gMCB8fCBkdXR5X25zID4gcGVyaW9kX25zKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWMgPSAyNTAwMDAwMC8yOyAvKiB3aWxkIGd1ZXNzIC0tLSBuZWVkIHRvIGltcGxlbWVudCBjbG9ja3MgKi8KKwljID0gYyAqIHBlcmlvZF9uczsKKwlkb19kaXYoYywgMTAwMDAwMDAwMCk7CisJcGVyaW9kX2N5Y2xlcyA9IGM7CisKKwlpZiAocGVyaW9kX2N5Y2xlcyA8IDEpCisJCXBlcmlvZF9jeWNsZXMgPSAxOworCXByZXNjYWxlID0gKHBlcmlvZF9jeWNsZXMgLSAxKSAvIDQwOTY7CisJcHYgPSBwZXJpb2RfY3ljbGVzIC8gKHByZXNjYWxlICsgMSkgLSAxOworCWlmIChwdiA+IDQwOTUpCisJCXB2ID0gNDA5NTsKKworCWlmIChwcmVzY2FsZSA+IDEwMjMpCisJCXJldHVybiAtRUlOVkFMOworCisJYyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcHYgKiBkdXR5X25zOworCWRvX2RpdihjLCBwZXJpb2RfbnMpOworCWRjID0gYzsKKworCXB3bV9idXN5X3dhaXQocHdtLT5yZWdiYXNlICsgMHg0MCArIHB3bS0+cHdtX2lkLCAoMSA8PCAxKSk7CisJd3JpdGVsKHByZXNjYWxlLCBwd20tPnJlZ2Jhc2UgKyAweDQgKyAocHdtLT5wd21faWQgPDwgNCkpOworCisJcHdtX2J1c3lfd2FpdChwd20tPnJlZ2Jhc2UgKyAweDQwICsgcHdtLT5wd21faWQsICgxIDw8IDIpKTsKKwl3cml0ZWwocHYsIHB3bS0+cmVnYmFzZSArIDB4OCArIChwd20tPnB3bV9pZCA8PCA0KSk7CisKKwlwd21fYnVzeV93YWl0KHB3bS0+cmVnYmFzZSArIDB4NDAgKyBwd20tPnB3bV9pZCwgKDEgPDwgMykpOworCXdyaXRlbChkYywgcHdtLT5yZWdiYXNlICsgMHhjICsgKHB3bS0+cHdtX2lkIDw8IDQpKTsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChwd21fY29uZmlnKTsKKworaW50IHB3bV9lbmFibGUoc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKK3sKKwlwd21fYnVzeV93YWl0KHB3bS0+cmVnYmFzZSArIDB4NDAgKyBwd20tPnB3bV9pZCwgKDEgPDwgMCkpOworCXdyaXRlbCg1LCBwd20tPnJlZ2Jhc2UgKyAocHdtLT5wd21faWQgPDwgNCkpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChwd21fZW5hYmxlKTsKKwordm9pZCBwd21fZGlzYWJsZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCXB3bV9idXN5X3dhaXQocHdtLT5yZWdiYXNlICsgMHg0MCArIHB3bS0+cHdtX2lkLCAoMSA8PCAwKSk7CisJd3JpdGVsKDAsIHB3bS0+cmVnYmFzZSArIChwd20tPnB3bV9pZCA8PCA0KSk7Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9kaXNhYmxlKTsKKworc3RydWN0IHB3bV9kZXZpY2UgKnB3bV9yZXF1ZXN0KGludCBwd21faWQsIGNvbnN0IGNoYXIgKmxhYmVsKQoreworCXN0cnVjdCBwd21fZGV2aWNlICpwd207CisJaW50IGZvdW5kID0gMDsKKworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocHdtLCAmcHdtX2xpc3QsIG5vZGUpIHsKKwkJaWYgKHB3bS0+cHdtX2lkID09IHB3bV9pZCkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJaWYgKHB3bS0+dXNlX2NvdW50ID09IDApIHsKKwkJCXB3bS0+dXNlX2NvdW50Kys7CisJCQlwd20tPmxhYmVsID0gbGFiZWw7CisJCX0gZWxzZSB7CisJCQlwd20gPSBFUlJfUFRSKC1FQlVTWSk7CisJCX0KKwl9IGVsc2UgeworCQlwd20gPSBFUlJfUFRSKC1FTk9FTlQpOworCX0KKworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworCXJldHVybiBwd207Cit9CitFWFBPUlRfU1lNQk9MKHB3bV9yZXF1ZXN0KTsKKwordm9pZCBwd21fZnJlZShzdHJ1Y3QgcHdtX2RldmljZSAqcHdtKQoreworCW11dGV4X2xvY2soJnB3bV9sb2NrKTsKKworCWlmIChwd20tPnVzZV9jb3VudCkgeworCQlwd20tPnVzZV9jb3VudC0tOworCQlwd20tPmxhYmVsID0gTlVMTDsKKwl9IGVsc2UgeworCQlwcl93YXJuaW5nKCJQV00gZGV2aWNlIGFscmVhZHkgZnJlZWRcbiIpOworCX0KKworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworfQorRVhQT1JUX1NZTUJPTChwd21fZnJlZSk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FkZF9wd20oc3RydWN0IHB3bV9kZXZpY2UgKnB3bSkKK3sKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcHdtLT5ub2RlLCAmcHdtX2xpc3QpOworCW11dGV4X3VubG9jaygmcHdtX2xvY2spOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwd21fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IHJldCA9IDA7CisJaW50IGk7CisKKwlwd21zID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHB3bV9kZXZpY2UpICogVlQ4NTAwX05SX1BXTVMsIEdGUF9LRVJORUwpOworCWlmIChwd21zID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBWVDg1MDBfTlJfUFdNUzsgaSsrKSB7CisJCXB3bXNbaV0udXNlX2NvdW50ID0gMDsKKwkJcHdtc1tpXS5wd21faWQgPSBpOworCQlwd21zW2ldLnBkZXYgPSBwZGV2OworCX0KKworCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gbWVtb3J5IHJlc291cmNlIGRlZmluZWRcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXIgPSByZXF1ZXN0X21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUociksIHBkZXYtPm5hbWUpOworCWlmIChyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCXB3bXNbMF0ucmVnYmFzZSA9IGlvcmVtYXAoci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCWlmIChwd21zWzBdLnJlZ2Jhc2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCgpIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWZvciAoaSA9IDE7IGkgPCBWVDg1MDBfTlJfUFdNUzsgaSsrKQorCQlwd21zW2ldLnJlZ2Jhc2UgPSBwd21zWzBdLnJlZ2Jhc2U7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlQ4NTAwX05SX1BXTVM7IGkrKykKKwkJX19hZGRfcHdtKCZwd21zW2ldKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHB3bXMpOworCXJldHVybiAwOworCitlcnJfZnJlZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKK2Vycl9mcmVlOgorCWtmcmVlKHB3bXMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHB3bV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcHdtX2RldmljZSAqcHdtczsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGk7CisKKwlwd21zID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaWYgKHB3bXMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltdXRleF9sb2NrKCZwd21fbG9jayk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVlQ4NTAwX05SX1BXTVM7IGkrKykKKwkJbGlzdF9kZWwoJnB3bXNbaV0ubm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZwd21fbG9jayk7CisKKwlpb3VubWFwKHB3bXNbMF0ucmVnYmFzZSk7CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oci0+c3RhcnQsIHJlc291cmNlX3NpemUocikpOworCisJa2ZyZWUocHdtcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHB3bV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInZ0ODUwMC1wd20iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBwd21fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwd21fcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHB3bV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcHdtX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKHB3bV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHB3bV9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnB3bV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQocHdtX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZ0ODUwMC90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTM3NmM1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvdGltZXIuYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC90aW1lci5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBBbGV4ZXkgQ2hhcmtvdiA8YWxjaGFya0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgVlQ4NTAwX1RJTUVSX09GRlNFVAkweDAxMDAKKyNkZWZpbmUgVElNRVJfTUFUQ0hfVkFMCQkweDAwMDAKKyNkZWZpbmUgVElNRVJfQ09VTlRfVkFMCQkweDAwMTAKKyNkZWZpbmUgVElNRVJfU1RBVFVTX1ZBTAkweDAwMTQKKyNkZWZpbmUgVElNRVJfSUVSX1ZBTAkJMHgwMDFjCQkvKiBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIFRJTUVSX0NUUkxfVkFMCQkweDAwMjAKKyNkZWZpbmUgVElNRVJfQVNfVkFMCQkweDAwMjQJCS8qIGFjY2VzcyBzdGF0dXMgKi8KKyNkZWZpbmUgVElNRVJfQ09VTlRfUl9BQ1RJVkUJKDEgPDwgNSkJLyogbm90IHJlYWR5IGZvciByZWFkICovCisjZGVmaW5lIFRJTUVSX0NPVU5UX1dfQUNUSVZFCSgxIDw8IDQpCS8qIG5vdCByZWFkeSBmb3Igd3JpdGUgKi8KKyNkZWZpbmUgVElNRVJfTUFUQ0hfV19BQ1RJVkUJKDEgPDwgMCkJLyogbm90IHJlYWR5IGZvciB3cml0ZSAqLworI2RlZmluZSBWVDg1MDBfVElNRVJfSFoJCTMwMDAwMDAKKworI2RlZmluZSBtc2Vjc190b19sb29wcyh0KSAobG9vcHNfcGVyX2ppZmZ5IC8gMTAwMCAqIEhaICogdCkKKworc3RhdGljIHZvaWQgX19pb21lbSAqcmVnYmFzZTsKKworc3RhdGljIGN5Y2xlX3QgdnQ4NTAwX3RpbWVyX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKK3sKKwlpbnQgbG9vcHMgPSBtc2Vjc190b19sb29wcygxMCk7CisJd3JpdGVsKDMsIHJlZ2Jhc2UgKyBUSU1FUl9DVFJMX1ZBTCk7CisJd2hpbGUgKChyZWFkbCgocmVnYmFzZSArIFRJTUVSX0FTX1ZBTCkpICYgVElNRVJfQ09VTlRfUl9BQ1RJVkUpCisJCQkJCQkmJiAtLWxvb3BzKQorCQljcHVfcmVsYXgoKTsKKwlyZXR1cm4gcmVhZGwocmVnYmFzZSArIFRJTUVSX0NPVU5UX1ZBTCk7Cit9CisKK3N0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAidnQ4NTAwX3RpbWVyIiwKKwkucmF0aW5nICAgICAgICAgPSAyMDAsCisJLnJlYWQgICAgICAgICAgID0gdnQ4NTAwX3RpbWVyX3JlYWQsCisJLm1hc2sgICAgICAgICAgID0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLmZsYWdzICAgICAgICAgID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgaW50IHZ0ODUwMF90aW1lcl9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGN5Y2xlcywKKwkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCWludCBsb29wcyA9IG1zZWNzX3RvX2xvb3BzKDEwKTsKKwljeWNsZV90IGFsYXJtID0gY2xvY2tzb3VyY2UucmVhZCgmY2xvY2tzb3VyY2UpICsgY3ljbGVzOworCXdoaWxlICgocmVhZGwocmVnYmFzZSArIFRJTUVSX0FTX1ZBTCkgJiBUSU1FUl9NQVRDSF9XX0FDVElWRSkKKwkJCQkJCSYmIC0tbG9vcHMpCisJCWNwdV9yZWxheCgpOworCXdyaXRlbCgodW5zaWduZWQgbG9uZylhbGFybSwgcmVnYmFzZSArIFRJTUVSX01BVENIX1ZBTCk7CisKKwlpZiAoKHNpZ25lZCkoYWxhcm0gLSBjbG9ja3NvdXJjZS5yZWFkKCZjbG9ja3NvdXJjZSkpIDw9IDE2KQorCQlyZXR1cm4gLUVUSU1FOworCisJd3JpdGVsKDEsIHJlZ2Jhc2UgKyBUSU1FUl9JRVJfVkFMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2dDg1MDBfdGltZXJfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJCQkgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJYnJlYWs7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCXdyaXRlbChyZWFkbChyZWdiYXNlICsgVElNRVJfQ1RSTF9WQUwpIHwgMSwKKwkJCXJlZ2Jhc2UgKyBUSU1FUl9DVFJMX1ZBTCk7CisJCXdyaXRlbCgwLCByZWdiYXNlICsgVElNRVJfSUVSX1ZBTCk7CisJCWJyZWFrOworCX0KK30KKworc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50ID0geworCS5uYW1lICAgICAgICAgICA9ICJ2dDg1MDBfdGltZXIiLAorCS5mZWF0dXJlcyAgICAgICA9IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnJhdGluZyAgICAgICAgID0gMjAwLAorCS5zZXRfbmV4dF9ldmVudCA9IHZ0ODUwMF90aW1lcl9zZXRfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUgICAgICAgPSB2dDg1MDBfdGltZXJfc2V0X21vZGUsCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgdnQ4NTAwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gZGV2X2lkOworCXdyaXRlbCgweGYsIHJlZ2Jhc2UgKyBUSU1FUl9TVEFUVVNfVkFMKTsKKwlldnQtPmV2ZW50X2hhbmRsZXIoZXZ0KTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RydWN0IGlycWFjdGlvbiBpcnEgPSB7CisJLm5hbWUgICAgPSAidnQ4NTAwX3RpbWVyIiwKKwkuZmxhZ3MgICA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5oYW5kbGVyID0gdnQ4NTAwX3RpbWVyX2ludGVycnVwdCwKKwkuZGV2X2lkICA9ICZjbG9ja2V2ZW50LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHZ0ODUwMF90aW1lcl9pbml0KHZvaWQpCit7CisJcmVnYmFzZSA9IGlvcmVtYXAod210X3BtY19iYXNlICsgVlQ4NTAwX1RJTUVSX09GRlNFVCwgMHgyOCk7CisJaWYgKCFyZWdiYXNlKQorCQlwcmludGsoS0VSTl9FUlIgInZ0ODUwMF90aW1lcl9pbml0OiBmYWlsZWQgdG8gbWFwIE1NSU8gcmVnaXN0ZXJzXG4iKTsKKworCXdyaXRlbCgxLCByZWdiYXNlICsgVElNRVJfQ1RSTF9WQUwpOworCXdyaXRlbCgweGYsIHJlZ2Jhc2UgKyBUSU1FUl9TVEFUVVNfVkFMKTsKKwl3cml0ZWwofjAsIHJlZ2Jhc2UgKyBUSU1FUl9NQVRDSF9WQUwpOworCisJaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZSwgVlQ4NTAwX1RJTUVSX0haKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJ2dDg1MDBfdGltZXJfaW5pdDogY2xvY2tzb3VyY2VfcmVnaXN0ZXIgZmFpbGVkIGZvciAlc1xuIiwKKwkJCQkJY2xvY2tzb3VyY2UubmFtZSk7CisKKwljbG9ja2V2ZW50c19jYWxjX211bHRfc2hpZnQoJmNsb2NrZXZlbnQsIFZUODUwMF9USU1FUl9IWiwgNCk7CisKKwkvKiBjb3B5LXBhc3RlZCBmcm9tIG1hY2gtbXNtOyBubyBpZGVhICovCisJY2xvY2tldmVudC5tYXhfZGVsdGFfbnMgPQorCQljbG9ja2V2ZW50X2RlbHRhMm5zKDB4ZjAwMDAwMDAsICZjbG9ja2V2ZW50KTsKKwljbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoNCwgJmNsb2NrZXZlbnQpOworCWNsb2NrZXZlbnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CisKKwlpZiAoc2V0dXBfaXJxKHdtdF90aW1lcl9pcnEsICZpcnEpKQorCQlwcmludGsoS0VSTl9FUlIgInZ0ODUwMF90aW1lcl9pbml0OiBzZXR1cF9pcnEgZmFpbGVkIGZvciAlc1xuIiwKKwkJCQkJY2xvY2tldmVudC5uYW1lKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmNsb2NrZXZlbnQpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHZ0ODUwMF90aW1lciA9IHsKKwkuaW5pdCA9IHZ0ODUwMF90aW1lcl9pbml0Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12dDg1MDAvd204NTA1Xzdpbi5jIGIvYXJjaC9hcm0vbWFjaC12dDg1MDAvd204NTA1Xzdpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3M2FhZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXZ0ODUwMC93bTg1MDVfN2luLmMKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqICBhcmNoL2FybS9tYWNoLXZ0ODUwMC93bTg1MDVfN2luLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEFsZXhleSBDaGFya292IDxhbGNoYXJrQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpwbWNfaGliZXI7CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmdnQ4NTAwX2RldmljZV91YXJ0MCwKKwkmdnQ4NTAwX2RldmljZV9laGNpLAorCSZ2dDg1MDBfZGV2aWNlX3dtODUwNV9mYiwKKwkmdnQ4NTAwX2RldmljZV9nZV9yb3BzLAorCSZ2dDg1MDBfZGV2aWNlX3B3bSwKKwkmdnQ4NTAwX2RldmljZV9wd21ibCwKKwkmdnQ4NTAwX2RldmljZV9ydGMsCit9OworCitzdGF0aWMgdm9pZCB2dDg1MDBfcG93ZXJfb2ZmKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwl3cml0ZXcoNSwgcG1jX2hpYmVyKTsKKwlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOiA6ICJyIiAoMCkpOworfQorCit2b2lkIF9faW5pdCB3bTg1MDVfN2luX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfRkJfV004NTA1CisJdm9pZCBfX2lvbWVtICpncGlvX211eF9yZWcgPSBpb3JlbWFwKHdtdF9ncGlvX2Jhc2UgKyAweDIwMCwgNCk7CisJaWYgKGdwaW9fbXV4X3JlZykgeworCQl3cml0ZWwocmVhZGwoZ3Bpb19tdXhfcmVnKSB8IDB4ODAwMDAwMDAsIGdwaW9fbXV4X3JlZyk7CisJCWlvdW5tYXAoZ3Bpb19tdXhfcmVnKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCByZW1hcCB0aGUgR1BJTyBtdXggcmVnaXN0ZXIsIGRpc3BsYXkgbWF5IG5vdCB3b3JrIHByb3Blcmx5IVxuIik7CisJfQorI2VuZGlmCisJcG1jX2hpYmVyID0gaW9yZW1hcCh3bXRfcG1jX2Jhc2UgKyAweDEyLCAyKTsKKwlpZiAocG1jX2hpYmVyKQorCQlwbV9wb3dlcl9vZmYgPSAmdnQ4NTAwX3Bvd2VyX29mZjsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiUE1DIEhpYmVybmF0aW9uIHJlZ2lzdGVyIGNvdWxkIG5vdCBiZSByZW1hcHBlZCwgbm90IGVuYWJsaW5nIHBvd2VyIG9mZiFcbiIpOworCisJd204NTA1X3NldF9yZXNvdXJjZXMoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKwl2dDg1MDBfZ3Bpb19pbml0KCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoV004NTA1XzdJTl9ORVRCT09LLCAiV004NTA1IDctaW5jaCBnZW5lcmljIG5ldGJvb2siKQorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLnJlc2VydmUJPSB3bTg1MDVfcmVzZXJ2ZV9tZW0sCisJLm1hcF9pbwkJPSB3bTg1MDVfbWFwX2lvLAorCS5pbml0X2lycQk9IHdtODUwNV9pbml0X2lycSwKKwkudGltZXIJCT0gJnZ0ODUwMF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gd204NTA1Xzdpbl9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IDlkMzBjNmYuLmU0NTA5YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtNDA1LDcgKzQwNSw3IEBACiBjb25maWcgQ1BVXzMydjZLCiAJYm9vbCAiU3VwcG9ydCBBUk0gVjZLIHByb2Nlc3NvciBleHRlbnNpb25zIiBpZiAhU01QCiAJZGVwZW5kcyBvbiBDUFVfVjYgfHwgQ1BVX1Y3Ci0JZGVmYXVsdCB5IGlmIFNNUCAmJiAhKEFSQ0hfTVgzIHx8IEFSQ0hfT01BUDIpCisJZGVmYXVsdCB5IGlmIFNNUAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91ciBBUk12NiBwcm9jZXNzb3Igc3VwcG9ydHMgdGhlICdLJyBleHRlbnNpb24uCiAJICBUaGlzIGVuYWJsZXMgdGhlIGtlcm5lbCB0byB1c2Ugc29tZSBpbnN0cnVjdGlvbnMgbm90IHByZXNlbnQKQEAgLTQxNiw3ICs0MTYsNyBAQAogIyBBUk12NwogY29uZmlnIENQVV9WNwogCWJvb2wgIlN1cHBvcnQgQVJNIFY3IHByb2Nlc3NvciIgaWYgQVJDSF9JTlRFR1JBVE9SIHx8IE1BQ0hfUkVBTFZJRVdfRUIgfHwgTUFDSF9SRUFMVklFV19QQlgKLQlzZWxlY3QgQ1BVXzMydjZLIGlmICFBUkNIX09NQVAyCisJc2VsZWN0IENQVV8zMnY2SwogCXNlbGVjdCBDUFVfMzJ2NwogCXNlbGVjdCBDUFVfQUJSVF9FVjcKIAlzZWxlY3QgQ1BVX1BBQlJUX1Y3CkBAIC02NDQsNyArNjQ0LDcgQEAKIAogY29uZmlnIFNXUF9FTVVMQVRFCiAJYm9vbCAiRW11bGF0ZSBTV1AvU1dQQiBpbnN0cnVjdGlvbnMiCi0JZGVwZW5kcyBvbiBDUFVfVjcgJiYgIUNQVV9WNgorCWRlcGVuZHMgb24gIUNQVV9VU0VfRE9NQUlOUyAmJiBDUFVfVjcgJiYgIUNQVV9WNgogCXNlbGVjdCBIQVZFX1BST0NfQ1BVIGlmIFBST0NfRlMKIAlkZWZhdWx0IHkgaWYgU01QCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jIGIvYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC5jCmluZGV4IDE3MGM5YmIuLmYyY2UzOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NhY2hlLWwyeDAuYworKysgYi9hcmNoL2FybS9tbS9jYWNoZS1sMngwLmMKQEAgLTQ5LDcgKzQ5LDEzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY2FjaGVfc3luYyh2b2lkKQogewogCXZvaWQgX19pb21lbSAqYmFzZSA9IGwyeDBfYmFzZTsKKworI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzc1Mzk3MAorCS8qIHdyaXRlIHRvIGFuIHVubW1hcHBlZCByZWdpc3RlciAqLworCXdyaXRlbF9yZWxheGVkKDAsIGJhc2UgKyBMMlgwX0RVTU1ZX1JFRyk7CisjZWxzZQogCXdyaXRlbF9yZWxheGVkKDAsIGJhc2UgKyBMMlgwX0NBQ0hFX1NZTkMpOworI2VuZGlmCiAJY2FjaGVfd2FpdChiYXNlICsgTDJYMF9DQUNIRV9TWU5DLCAxKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IDUxNjQwNjkuLmNkZGQ2ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTI5Nyw2ICsyOTcsMTIgQEAKIAltZW1ibG9ja19yZXNlcnZlKF9fcGEoX3N0ZXh0KSwgX2VuZCAtIF9zdGV4dCk7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKKwlpZiAocGh5c19pbml0cmRfc2l6ZSAmJgorCSAgICBtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQocGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpKSB7CisJCXByX2VycigiSU5JVFJEOiAweCUwOGx4KzB4JTA4bHggb3ZlcmxhcHMgaW4tdXNlIG1lbW9yeSByZWdpb24gLSBkaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkgICAgICAgcGh5c19pbml0cmRfc3RhcnQsIHBoeXNfaW5pdHJkX3NpemUpOworCQlwaHlzX2luaXRyZF9zdGFydCA9IHBoeXNfaW5pdHJkX3NpemUgPSAwOworCX0KIAlpZiAocGh5c19pbml0cmRfc2l6ZSkgewogCQltZW1ibG9ja19yZXNlcnZlKHBoeXNfaW5pdHJkX3N0YXJ0LCBwaHlzX2luaXRyZF9zaXplKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwppbmRleCBiY2Y3NDhkLi4yMjZlM2Q4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjAuUwpAQCAtNDkzLDYgKzQ5Myw5IEBACiAJLndvcmQJY3B1X2FybTEwMjBfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyMF9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjBfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjBlLlMKaW5kZXggYWI3ZWMyNi4uODZkOWMyYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIwZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMGUuUwpAQCAtNDc0LDYgKzQ3NCw5IEBACiAJLndvcmQJY3B1X2FybTEwMjBlX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTEwMjBlX3N3aXRjaF9tbQogCS53b3JkCWNwdV9hcm0xMDIwZV9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTEwMjBlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDIwZV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtMTAyMi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKaW5kZXggODMxYzVlNS4uODNkM2RkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDIyLlMKQEAgLTQ1Nyw2ICs0NTcsOSBAQAogCS53b3JkCWNwdV9hcm0xMDIyX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTEwMjJfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTEwMjJfc2V0X3B0ZV9leHQKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm0xMDIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm0xMDI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwppbmRleCBlM2Y3ZTlhLi42ODYwNDNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTEwMjYuUwpAQCAtNDUyLDYgKzQ1Miw5IEBACiAJLndvcmQJY3B1X2FybTEwMjZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtMTAyNl9zd2l0Y2hfbW0KIAkud29yZAljcHVfYXJtMTAyNl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTEwMjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gLnJvZGF0YQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNl83LlMKaW5kZXggNmE3YmUxOC4uNWY3OWRjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm02XzcuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTZfNy5TCkBAIC0yODQsNiArMjg0LDkgQEAKIAkJLndvcmQJY3B1X2FybTZfZGNhY2hlX2NsZWFuX2FyZWEKIAkJLndvcmQJY3B1X2FybTZfc3dpdGNoX21tCiAJCS53b3JkCWNwdV9hcm02X3NldF9wdGVfZXh0CisJCS53b3JkCTAKKwkJLndvcmQJMAorCQkud29yZAkwCiAJCS5zaXplCWFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAvKgpAQCAtMzAxLDYgKzMwNCw5IEBACiAJCS53b3JkCWNwdV9hcm03X2RjYWNoZV9jbGVhbl9hcmVhCiAJCS53b3JkCWNwdV9hcm03X3N3aXRjaF9tbQogCQkud29yZAljcHVfYXJtN19zZXRfcHRlX2V4dAorCQkud29yZAkwCisJCS53b3JkCTAKKwkJLndvcmQJMAogCQkuc2l6ZQlhcm03X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm03X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCQkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTcyMC5TCmluZGV4IGMyODUzOTUuLjY2NTI2NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtNzIwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03MjAuUwpAQCAtMTg1LDYgKzE4NSw5IEBACiAJCS53b3JkCWNwdV9hcm03MjBfZGNhY2hlX2NsZWFuX2FyZWEKIAkJLndvcmQJY3B1X2FybTcyMF9zd2l0Y2hfbW0KIAkJLndvcmQJY3B1X2FybTcyMF9zZXRfcHRlX2V4dAorCQkud29yZAkwCisJCS53b3JkCTAKKwkJLndvcmQJMAogCQkuc2l6ZQlhcm03MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTcyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUwppbmRleCAzOGIyN2RjLi42ZjlkMTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTc0MC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKQEAgLTEzMCw2ICsxMzAsOSBAQAogCS53b3JkCWNwdV9hcm03NDBfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfYXJtNzQwX3N3aXRjaF9tbQogCS53b3JkCTAJCQlAIGNwdV8qX3NldF9wdGUKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwppbmRleCAwYzk3ODZkLi5lNGMxNjVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTd0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCkBAIC03MCw2ICs3MCw5IEBACiAJCS53b3JkCWNwdV9hcm03dGRtaV9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtN3RkbWlfc3dpdGNoX21tCiAJCS53b3JkCTAJCUAgY3B1Xypfc2V0X3B0ZQorCQkud29yZAkwCisJCS53b3JkCTAKKwkJLndvcmQJMAogCQkuc2l6ZQlhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMKaW5kZXggNjEwOWYyNy4uMjE5OTgwZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMC5TCkBAIC0zODcsNiArMzg3LDQwIEBACiAjZW5kaWYKIAltb3YJcGMsIGxyCiAKKy8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IHRha2VuIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgKi8KKy5nbG9ibAljcHVfYXJtOTIwX3N1c3BlbmRfc2l6ZQorLmVxdQljcHVfYXJtOTIwX3N1c3BlbmRfc2l6ZSwgNCAqIDMKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV9hcm05MjBfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI3LCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIFBJRAorCW1yYwlwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKKwltcmMJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVFRCIGFkZHJlc3MKKwltcmMJcDE1LCAwLCByNywgYzEsIGMwLCAwCUAgQ29udHJvbCByZWdpc3RlcgorCXN0bWlhCXIwLCB7cjQgLSByN30KKwlsZG1mZAlzcCEsIHtyNCAtIHI3LCBwY30KK0VORFBST0MoY3B1X2FybTkyMF9kb19zdXNwZW5kKQorCitFTlRSWShjcHVfYXJtOTIwX2RvX3Jlc3VtZSkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAlAIGludmFsaWRhdGUgSStEIFRMQnMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCUAgaW52YWxpZGF0ZSBJK0QgY2FjaGVzCisJbGRtaWEJcjAsIHtyNCAtIHI3fQorCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbWNyCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1jcglwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUVEIgYWRkcmVzcworCW1vdglyMCwgcjcJCQlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJcjIsIHI2LCBsc3IgIzE0CQlAIGdldCBUVEIwIGJhc2UKKwltb3YJcjIsIHIyLCBsc2wgIzE0CisJbGRyCXIzLCA9UE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCSAgICAgUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9BUF9XUklURQorCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X2FybTkyMF9kb19yZXN1bWUpCisjZWxzZQorI2RlZmluZSBjcHVfYXJtOTIwX2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfYXJtOTIwX2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAJLnR5cGUJX19hcm05MjBfc2V0dXAsICNmdW5jdGlvbgpAQCAtNDMyLDYgKzQ2Niw5IEBACiAJLndvcmQJY3B1X2FybTkyMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05MjBfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTkyMF9zZXRfcHRlX2V4dAorCS53b3JkCWNwdV9hcm05MjBfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X2FybTkyMF9kb19zdXNwZW5kCisJLndvcmQJY3B1X2FybTkyMF9kb19yZXN1bWUKIAkuc2l6ZQlhcm05MjBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTkyMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyMi5TCmluZGV4IGJiMmYwZjQuLjM2MTU0YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTIyLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjIuUwpAQCAtNDM2LDYgKzQzNiw5IEBACiAJLndvcmQJY3B1X2FybTkyMl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05MjJfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTkyMl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTkyMl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTIyX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKaW5kZXggYzEzZTAxYS4uODljNWUwMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI1LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjUuUwpAQCAtNTAzLDYgKzUwMyw5IEBACiAJLndvcmQJY3B1X2FybTkyNV9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05MjVfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTkyNV9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWFybTkyNV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOTI1X3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKaW5kZXggNDJlYjQzMS4uNmE0YmRiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCkBAIC00MDEsNiArNDAxLDQwIEBACiAjZW5kaWYKIAltb3YJcGMsIGxyCiAKKy8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IHRha2VuIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgKi8KKy5nbG9ibAljcHVfYXJtOTI2X3N1c3BlbmRfc2l6ZQorLmVxdQljcHVfYXJtOTI2X3N1c3BlbmRfc2l6ZSwgNCAqIDMKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV9hcm05MjZfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI3LCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIFBJRAorCW1yYwlwMTUsIDAsIHI1LCBjMywgYzAsIDAJQCBEb21haW4gSUQKKwltcmMJcDE1LCAwLCByNiwgYzIsIGMwLCAwCUAgVFRCIGFkZHJlc3MKKwltcmMJcDE1LCAwLCByNywgYzEsIGMwLCAwCUAgQ29udHJvbCByZWdpc3RlcgorCXN0bWlhCXIwLCB7cjQgLSByN30KKwlsZG1mZAlzcCEsIHtyNCAtIHI3LCBwY30KK0VORFBST0MoY3B1X2FybTkyNl9kb19zdXNwZW5kKQorCitFTlRSWShjcHVfYXJtOTI2X2RvX3Jlc3VtZSkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAlAIGludmFsaWRhdGUgSStEIFRMQnMKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM3LCAwCUAgaW52YWxpZGF0ZSBJK0QgY2FjaGVzCisJbGRtaWEJcjAsIHtyNCAtIHI3fQorCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECisJbWNyCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1jcglwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUVEIgYWRkcmVzcworCW1vdglyMCwgcjcJCQlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJcjIsIHI2LCBsc3IgIzE0CQlAIGdldCBUVEIwIGJhc2UKKwltb3YJcjIsIHIyLCBsc2wgIzE0CisJbGRyCXIzLCA9UE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCSAgICAgUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9BUF9XUklURQorCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X2FybTkyNl9kb19yZXN1bWUpCisjZWxzZQorI2RlZmluZSBjcHVfYXJtOTI2X2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfYXJtOTI2X2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAJLnR5cGUJX19hcm05MjZfc2V0dXAsICNmdW5jdGlvbgpAQCAtNDU2LDYgKzQ5MCw5IEBACiAJLndvcmQJY3B1X2FybTkyNl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05MjZfc3dpdGNoX21tCiAJLndvcmQJY3B1X2FybTkyNl9zZXRfcHRlX2V4dAorCS53b3JkCWNwdV9hcm05MjZfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X2FybTkyNl9kb19zdXNwZW5kCisJLndvcmQJY3B1X2FybTkyNl9kb19yZXN1bWUKIAkuc2l6ZQlhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTkyNl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TCmluZGV4IDdiMTFjZGIuLjI2YWVhM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwpAQCAtMzYzLDYgKzM2Myw5IEBACiAJLndvcmQJY3B1X2FybTk0MF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9hcm05NDBfc3dpdGNoX21tCiAJLndvcmQJMAkJQCBjcHVfKl9zZXRfcHRlCisJLndvcmQJMAorCS53b3JkCTAKKwkud29yZAkwCiAJLnNpemUJYXJtOTQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwppbmRleCAxYTViYmYwOC4uODA2MzM0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TCkBAIC00MTksNiArNDE5LDkgQEAKIAkud29yZAljcHVfYXJtOTQ2X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2FybTk0Nl9zd2l0Y2hfbW0KIAkud29yZAkwCQlAIGNwdV8qX3NldF9wdGUKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlhcm05NDZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwppbmRleCBkYjY3ZTMxLi43YjdlYmQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLWFybTl0ZG1pLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCkBAIC03MCw2ICs3MCw5IEBACiAJCS53b3JkCWNwdV9hcm05dGRtaV9kY2FjaGVfY2xlYW5fYXJlYQogCQkud29yZAljcHVfYXJtOXRkbWlfc3dpdGNoX21tCiAJCS53b3JkCTAJCUAgY3B1Xypfc2V0X3B0ZQorCQkud29yZAkwCisJCS53b3JkCTAKKwkJLndvcmQJMAogCQkuc2l6ZQlhcm05dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TIGIvYXJjaC9hcm0vbW0vcHJvYy1mYTUyNi5TCmluZGV4IDdjOWFkNjIuLmZjMmE0YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtZmE1MjYuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLWZhNTI2LlMKQEAgLTE5NSw2ICsxOTUsOSBAQAogCS53b3JkCWNwdV9mYTUyNl9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9mYTUyNl9zd2l0Y2hfbW0KIAkud29yZAljcHVfZmE1MjZfc2V0X3B0ZV9leHQKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlmYTUyNl9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gZmE1MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMgYi9hcmNoL2FybS9tbS9wcm9jLWZlcm9jZW9uLlMKaW5kZXggYjQ1OTdlZC4uZDM4ODNlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1mZXJvY2Vvbi5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtZmVyb2Nlb24uUwpAQCAtNTU0LDYgKzU1NCw5IEBACiAJLndvcmQJY3B1X2Zlcm9jZW9uX2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X2Zlcm9jZW9uX3N3aXRjaF9tbQogCS53b3JkCWNwdV9mZXJvY2Vvbl9zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCWZlcm9jZW9uX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBmZXJvY2Vvbl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMgYi9hcmNoL2FybS9tbS9wcm9jLW1vaGF3ay5TCmluZGV4IDQ0NThlZTYuLjlkNGYyYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtbW9oYXdrLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1tb2hhd2suUwpAQCAtMzg4LDYgKzM4OCw5IEBACiAJLndvcmQJY3B1X21vaGF3a19kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9tb2hhd2tfc3dpdGNoX21tCiAJLndvcmQJY3B1X21vaGF3a19zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCW1vaGF3a19wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gbW9oYXdrX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKIAogCS5zZWN0aW9uICIucm9kYXRhIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMC5TCmluZGV4IDVhYThkNTkuLjQ2ZjA5ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAuUworKysgYi9hcmNoL2FybS9tbS9wcm9jLXNhMTEwLlMKQEAgLTIwMyw2ICsyMDMsOSBAQAogCS53b3JkCWNwdV9zYTExMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9zYTExMF9zd2l0Y2hfbW0KIAkud29yZAljcHVfc2ExMTBfc2V0X3B0ZV9leHQKKwkud29yZAkwCisJLndvcmQJMAorCS53b3JkCTAKIAkuc2l6ZQlzYTExMF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gc2ExMTBfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1zYTExMDAuUwppbmRleCAyYWM0ZTZmLi43NDQ4M2QxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXNhMTEwMC5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2Mtc2ExMTAwLlMKQEAgLTE2OSw2ICsxNjksNDIgQEAKICNlbmRpZgogCW1vdglwYywgbHIKIAorLmdsb2JsCWNwdV9zYTExMDBfc3VzcGVuZF9zaXplCisuZXF1CWNwdV9zYTExMDBfc3VzcGVuZF9zaXplLCA0KjQKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV9zYTExMDBfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHI3LCBscn0KKwltcmMJcDE1LCAwLCByNCwgYzMsIGMwLCAwCQlAIGRvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI1LCBjMiwgYzAsIDAJCUAgdHJhbnNsYXRpb24gdGFibGUgYmFzZSBhZGRyCisJbXJjCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJCUAgUElECisJbXJjCXAxNSwgMCwgcjcsIGMxLCBjMCwgMAkJQCBjb250cm9sIHJlZworCXN0bWlhCXIwLCB7cjQgLSByN30JCQlAIHN0b3JlIGNwIHJlZ3MKKwlsZG1mZAlzcCEsIHtyNCAtIHI3LCBwY30KK0VORFBST0MoY3B1X3NhMTEwMF9kb19zdXNwZW5kKQorCitFTlRSWShjcHVfc2ExMTAwX2RvX3Jlc3VtZSkKKwlsZG1pYQlyMCwge3I0IC0gcjd9CQkJQCBsb2FkIGNwIHJlZ3MKKwltb3YJcjEsICMwCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkJQCBmbHVzaCBJK0QgVExCcworCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUAgZmx1c2ggSSZEIGNhY2hlCisJbWNyCXAxNSwgMCwgcjEsIGM5LCBjMCwgMAkJQCBpbnZhbGlkYXRlIFJCCisJbWNyCXAxNSwgMCwgcjEsIGM5LCBjMCwgNQkJQCBhbGxvdyB1c2VyIHNwYWNlIHRvIHVzZSBSQgorCisJbWNyCXAxNSwgMCwgcjQsIGMzLCBjMCwgMAkJQCBkb21haW4gSUQKKwltY3IJcDE1LCAwLCByNSwgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1jcglwMTUsIDAsIHI2LCBjMTMsIGMwLCAwCQlAIFBJRAorCW1vdglyMCwgcjcJCQkJQCBjb250cm9sIHJlZ2lzdGVyCisJbW92CXIyLCByNSwgbHNyICMxNAkJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID1QTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJICAgICBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfU0VDVF9BUF9XUklURQorCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X3NhMTEwMF9kb19yZXN1bWUpCisjZWxzZQorI2RlZmluZSBjcHVfc2ExMTAwX2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfc2ExMTAwX2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAJLnR5cGUJX19zYTExMDBfc2V0dXAsICNmdW5jdGlvbgpAQCAtMjE4LDYgKzI1NCw5IEBACiAJLndvcmQJY3B1X3NhMTEwMF9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV9zYTExMDBfc3dpdGNoX21tCiAJLndvcmQJY3B1X3NhMTEwMF9zZXRfcHRlX2V4dAorCS53b3JkCWNwdV9zYTExMDBfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X3NhMTEwMF9kb19zdXNwZW5kCisJLndvcmQJY3B1X3NhMTEwMF9kb19yZXN1bWUKIAkuc2l6ZQlzYTExMDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHNhMTEwMF9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjYuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjYuUwppbmRleCA1OWE3ZTFmLi44MzJiNmJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ni5TCkBAIC0xMjEsNiArMTIxLDUzIEBACiAjZW5kaWYKIAltb3YJcGMsIGxyCiAKKy8qIFN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6IHRha2VuIGZyb20gYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NsZWVwLlMgKi8KKy5nbG9ibAljcHVfdjZfc3VzcGVuZF9zaXplCisuZXF1CWNwdV92Nl9zdXNwZW5kX3NpemUsIDQgKiA4CisjaWZkZWYgQ09ORklHX1BNCitFTlRSWShjcHVfdjZfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHIxMSwgbHJ9CisJbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAorCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAxCUAgQ29udGV4dCBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKKwltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVHJhbnNsYXRpb24gdGFibGUgYmFzZSAwCisJbXJjCXAxNSwgMCwgcjgsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgMQorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGxhcnkgY29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAyCUAgY28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCisJbXJjCXAxNSwgMCwgcjExLCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZ2lzdGVyCisJc3RtaWEJcjAsIHtyNCAtIHIxMX0KKwlsZG1mZAlzcCEsIHtyNC0gcjExLCBwY30KK0VORFBST0MoY3B1X3Y2X2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV92Nl9kb19yZXN1bWUpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE0LCAwCUAgY2xlYW4raW52YWxpZGF0ZSBEIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzE1LCAwCUAgY2xlYW4raW52YWxpZGF0ZSBjYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjNywgYzEwLCA0CUAgZHJhaW4gd3JpdGUgYnVmZmVyCisJbGRtaWEJcjAsIHtyNCAtIHIxMX0KKwltY3IJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECisJbWNyCXAxNSwgMCwgcjUsIGMxMywgYzAsIDEJQCBDb250ZXh0IElECisJbWNyCXAxNSwgMCwgcjYsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1jcglwMTUsIDAsIHI3LCBjMiwgYzAsIDAJQCBUcmFuc2xhdGlvbiB0YWJsZSBiYXNlIDAKKwltY3IJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVHJhbnNsYXRpb24gdGFibGUgYmFzZSAxCisJbWNyCXAxNSwgMCwgcjksIGMxLCBjMCwgMQlAIGF1eGlsbGFyeSBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDIJQCBjby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2wKKwltY3IJcDE1LCAwLCBpcCwgYzIsIGMwLCAyCUAgVFRCIGNvbnRyb2wgcmVnaXN0ZXIKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM1LCA0CUAgSVNCCisJbW92CXIwLCByMTEJCQlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJcjIsIHI3LCBsc3IgIzE0CQlAIGdldCBUVEIwIGJhc2UKKwltb3YJcjIsIHIyLCBsc2wgIzE0CisJbGRyCXIzLCBjcHVfcmVzdW1lX2wxX2ZsYWdzCisJYgljcHVfcmVzdW1lX21tdQorRU5EUFJPQyhjcHVfdjZfZG9fcmVzdW1lKQorY3B1X3Jlc3VtZV9sMV9mbGFnczoKKwlBTFRfU01QKC5sb25nIFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9GTEFHU19TTVApCisJQUxUX1VQKC5sb25nICBQTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfRkxBR1NfVVApCisjZWxzZQorI2RlZmluZSBjcHVfdjZfZG9fc3VzcGVuZCAwCisjZGVmaW5lIGNwdV92Nl9kb19yZXN1bWUgMAorI2VuZGlmCiAKIAogCS50eXBlCWNwdV92Nl9uYW1lLCAjb2JqZWN0CkBAIC0yMDYsNiArMjUzLDkgQEAKIAkud29yZAljcHVfdjZfZGNhY2hlX2NsZWFuX2FyZWEKIAkud29yZAljcHVfdjZfc3dpdGNoX21tCiAJLndvcmQJY3B1X3Y2X3NldF9wdGVfZXh0CisJLndvcmQJY3B1X3Y2X3N1c3BlbmRfc2l6ZQorCS53b3JkCWNwdV92Nl9kb19zdXNwZW5kCisJLndvcmQJY3B1X3Y2X2RvX3Jlc3VtZQogCS5zaXplCXY2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSB2Nl9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtdjcuUyBiL2FyY2gvYXJtL21tL3Byb2MtdjcuUwppbmRleCAwYzExNzJiLi4yNjJmYTg4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXY3LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy12Ny5TCkBAIC0xMDgsMTAgKzEwOCwxNiBAQAogI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MwogCW1jcglwMTUsIDAsIHIyLCBjNywgYzUsIDYJCUAgZmx1c2ggQlRBQy9CVEIKICNlbmRpZgorI2lmZGVmIENPTkZJR19BUk1fRVJSQVRBXzc1NDMyMgorCWRzYgorI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjIsIGMxMywgYzAsIDEJCUAgc2V0IHJlc2VydmVkIGNvbnRleHQgSUQKIAlpc2IKIDE6CW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgc2V0IFRUQiAwCiAJaXNiCisjaWZkZWYgQ09ORklHX0FSTV9FUlJBVEFfNzU0MzIyCisJZHNiCisjZW5kaWYKIAltY3IJcDE1LCAwLCByMSwgYzEzLCBjMCwgMQkJQCBzZXQgY29udGV4dCBJRAogCWlzYgogI2VuZGlmCkBAIC0xNzEsNiArMTc3LDg3IEBACiAJLmFzY2lpCSJBUk12NyBQcm9jZXNzb3IiCiAJLmFsaWduCiAKKwkvKgorCSAqIE1lbW9yeSByZWdpb24gYXR0cmlidXRlcyB3aXRoIFNDVExSLlRSRT0xCisJICoKKwkgKiAgIG4gPSBURVhbMF0sQyxCCisJICogICBUUiA9IFBSUlJbMm4rMToybl0JCS0gbWVtb3J5IHR5cGUKKwkgKiAgIElSID0gTk1SUlsybisxOjJuXQkJLSBpbm5lciBjYWNoZWFibGUgcHJvcGVydHkKKwkgKiAgIE9SID0gTk1SUlsybisxNzoybisxNl0JLSBvdXRlciBjYWNoZWFibGUgcHJvcGVydHkKKwkgKgorCSAqCQkJbglUUglJUglPUgorCSAqICAgVU5DQUNIRUQJCTAwMAkwMAorCSAqICAgQlVGRkVSQUJMRQkJMDAxCTEwCTAwCTAwCisJICogICBXUklURVRIUk9VR0gJMDEwCTEwCTEwCTEwCisJICogICBXUklURUJBQ0sJCTAxMQkxMAkxMQkxMQorCSAqICAgcmVzZXJ2ZWQJCTExMAorCSAqICAgV1JJVEVBTExPQwkJMTExCTEwCTAxCTAxCisJICogICBERVZfU0hBUkVECQkxMDAJMDEKKwkgKiAgIERFVl9OT05TSEFSRUQJMTAwCTAxCisJICogICBERVZfV0MJCTAwMQkxMAorCSAqICAgREVWX0NBQ0hFRAkJMDExCTEwCisJICoKKwkgKiBPdGhlciBhdHRyaWJ1dGVzOgorCSAqCisJICogICBEUzAgPSBQUlJSWzE2XSA9IDAJCS0gZGV2aWNlIHNoYXJlYWJsZSBwcm9wZXJ0eQorCSAqICAgRFMxID0gUFJSUlsxN10gPSAxCQktIGRldmljZSBzaGFyZWFibGUgcHJvcGVydHkKKwkgKiAgIE5TMCA9IFBSUlJbMThdID0gMAkJLSBub3JtYWwgc2hhcmVhYmxlIHByb3BlcnR5CisJICogICBOUzEgPSBQUlJSWzE5XSA9IDEJCS0gbm9ybWFsIHNoYXJlYWJsZSBwcm9wZXJ0eQorCSAqICAgTk9TID0gUFJSUlsyNCtuXSA9IDEJLSBub3Qgb3V0ZXIgc2hhcmVhYmxlCisJICovCisuZXF1CVBSUlIsCTB4ZmYwYTgxYTgKKy5lcXUJTk1SUiwJMHg0MGUwNDBlMAorCisvKiBTdXNwZW5kL3Jlc3VtZSBzdXBwb3J0OiBkZXJpdmVkIGZyb20gYXJjaC9hcm0vbWFjaC1zNXB2MjEwL3NsZWVwLlMgKi8KKy5nbG9ibAljcHVfdjdfc3VzcGVuZF9zaXplCisuZXF1CWNwdV92N19zdXNwZW5kX3NpemUsIDQgKiA4CisjaWZkZWYgQ09ORklHX1BNCitFTlRSWShjcHVfdjdfZG9fc3VzcGVuZCkKKwlzdG1mZAlzcCEsIHtyNCAtIHIxMSwgbHJ9CisJbXJjCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJQCBGQ1NFL1BJRAorCW1yYwlwMTUsIDAsIHI1LCBjMTMsIGMwLCAxCUAgQ29udGV4dCBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMywgYzAsIDAJQCBEb21haW4gSUQKKwltcmMJcDE1LCAwLCByNywgYzIsIGMwLCAwCUAgVFRCIDAKKwltcmMJcDE1LCAwLCByOCwgYzIsIGMwLCAxCUAgVFRCIDEKKwltcmMJcDE1LCAwLCByOSwgYzEsIGMwLCAwCUAgQ29udHJvbCByZWdpc3RlcgorCW1yYwlwMTUsIDAsIHIxMCwgYzEsIGMwLCAxCUAgQXV4aWxpYXJ5IGNvbnRyb2wgcmVnaXN0ZXIKKwltcmMJcDE1LCAwLCByMTEsIGMxLCBjMCwgMglAIENvLXByb2Nlc3NvciBhY2Nlc3MgY29udHJvbAorCXN0bWlhCXIwLCB7cjQgLSByMTF9CisJbGRtZmQJc3AhLCB7cjQgLSByMTEsIHBjfQorRU5EUFJPQyhjcHVfdjdfZG9fc3VzcGVuZCkKKworRU5UUlkoY3B1X3Y3X2RvX3Jlc3VtZSkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAlAIGludmFsaWRhdGUgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDAJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwlsZG1pYQlyMCwge3I0IC0gcjExfQorCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKKwltY3IJcDE1LCAwLCByNSwgYzEzLCBjMCwgMQlAIENvbnRleHQgSUQKKwltY3IJcDE1LCAwLCByNiwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMAlAIFRUQiAwCisJbWNyCXAxNSwgMCwgcjgsIGMyLCBjMCwgMQlAIFRUQiAxCisJbWNyCXAxNSwgMCwgaXAsIGMyLCBjMCwgMglAIFRUQiBjb250cm9sIHJlZ2lzdGVyCisJbWNyCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDEJQCBBdXhpbGxhcnkgY29udHJvbCByZWdpc3RlcgorCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9sCisJbGRyCXI0LCA9UFJSUgkJQCBQUlJSCisJbGRyCXI1LCA9Tk1SUgkJQCBOTVJSCisJbWNyCXAxNSwgMCwgcjQsIGMxMCwgYzIsIDAJQCB3cml0ZSBQUlJSCisJbWNyCXAxNSwgMCwgcjUsIGMxMCwgYzIsIDEJQCB3cml0ZSBOTVJSCisJaXNiCisJbW92CXIwLCByOQkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjcsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsIGNwdV9yZXN1bWVfbDFfZmxhZ3MKKwliCWNwdV9yZXN1bWVfbW11CitFTkRQUk9DKGNwdV92N19kb19yZXN1bWUpCitjcHVfcmVzdW1lX2wxX2ZsYWdzOgorCUFMVF9TTVAoLmxvbmcgUE1EX1RZUEVfU0VDVCB8IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX0ZMQUdTX1NNUCkKKwlBTFRfVVAoLmxvbmcgIFBNRF9UWVBFX1NFQ1QgfCBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9GTEFHU19VUCkKKyNlbHNlCisjZGVmaW5lIGNwdV92N19kb19zdXNwZW5kCTAKKyNkZWZpbmUgY3B1X3Y3X2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAvKgpAQCAtMjY0LDYgKzM1MSwxMiBAQAogCW9ycmVxCXIxMCwgcjEwLCAjMSA8PCA2CQlAIHNldCBiaXQgIzYKIAltY3JlcQlwMTUsIDAsIHIxMCwgYzE1LCBjMCwgMQkJQCB3cml0ZSBkaWFnbm9zdGljIHJlZ2lzdGVyCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJNX0VSUkFUQV83NTE0NzIKKwljbXAJcjYsICMweDMwCQkJQCBwcmVzZW50IHByaW9yIHRvIHIzcDAKKwltcmNsdAlwMTUsIDAsIHIxMCwgYzE1LCBjMCwgMQkJQCByZWFkIGRpYWdub3N0aWMgcmVnaXN0ZXIKKwlvcnJsdAlyMTAsIHIxMCwgIzEgPDwgMTEJCUAgc2V0IGJpdCAjMTEKKwltY3JsdAlwMTUsIDAsIHIxMCwgYzE1LCBjMCwgMQkJQCB3cml0ZSBkaWFnbm9zdGljIHJlZ2lzdGVyCisjZW5kaWYKIAogMzoJbW92CXIxMCwgIzAKICNpZmRlZiBIQVJWQVJEX0NBQ0hFCkBAIC0yNzYsMzYgKzM2OSw4IEBACiAJQUxUX1NNUChvcnIJcjQsIHI0LCAjVFRCX0ZMQUdTX1NNUCkKIAlBTFRfVVAob3JyCXI0LCByNCwgI1RUQl9GTEFHU19VUCkKIAltY3IJcDE1LCAwLCByNCwgYzIsIGMwLCAxCQlAIGxvYWQgVFRCMQotCS8qCi0JICogTWVtb3J5IHJlZ2lvbiBhdHRyaWJ1dGVzIHdpdGggU0NUTFIuVFJFPTEKLQkgKgotCSAqICAgbiA9IFRFWFswXSxDLEIKLQkgKiAgIFRSID0gUFJSUlsybisxOjJuXQkJLSBtZW1vcnkgdHlwZQotCSAqICAgSVIgPSBOTVJSWzJuKzE6Mm5dCQktIGlubmVyIGNhY2hlYWJsZSBwcm9wZXJ0eQotCSAqICAgT1IgPSBOTVJSWzJuKzE3OjJuKzE2XQktIG91dGVyIGNhY2hlYWJsZSBwcm9wZXJ0eQotCSAqCi0JICoJCQluCVRSCUlSCU9SCi0JICogICBVTkNBQ0hFRAkJMDAwCTAwCi0JICogICBCVUZGRVJBQkxFCQkwMDEJMTAJMDAJMDAKLQkgKiAgIFdSSVRFVEhST1VHSAkwMTAJMTAJMTAJMTAKLQkgKiAgIFdSSVRFQkFDSwkJMDExCTEwCTExCTExCi0JICogICByZXNlcnZlZAkJMTEwCi0JICogICBXUklURUFMTE9DCQkxMTEJMTAJMDEJMDEKLQkgKiAgIERFVl9TSEFSRUQJCTEwMAkwMQotCSAqICAgREVWX05PTlNIQVJFRAkxMDAJMDEKLQkgKiAgIERFVl9XQwkJMDAxCTEwCi0JICogICBERVZfQ0FDSEVECQkwMTEJMTAKLQkgKgotCSAqIE90aGVyIGF0dHJpYnV0ZXM6Ci0JICoKLQkgKiAgIERTMCA9IFBSUlJbMTZdID0gMAkJLSBkZXZpY2Ugc2hhcmVhYmxlIHByb3BlcnR5Ci0JICogICBEUzEgPSBQUlJSWzE3XSA9IDEJCS0gZGV2aWNlIHNoYXJlYWJsZSBwcm9wZXJ0eQotCSAqICAgTlMwID0gUFJSUlsxOF0gPSAwCQktIG5vcm1hbCBzaGFyZWFibGUgcHJvcGVydHkKLQkgKiAgIE5TMSA9IFBSUlJbMTldID0gMQkJLSBub3JtYWwgc2hhcmVhYmxlIHByb3BlcnR5Ci0JICogICBOT1MgPSBQUlJSWzI0K25dID0gMQktIG5vdCBvdXRlciBzaGFyZWFibGUKLQkgKi8KLQlsZHIJcjUsID0weGZmMGE4MWE4CQkJQCBQUlJSCi0JbGRyCXI2LCA9MHg0MGUwNDBlMAkJCUAgTk1SUgorCWxkcglyNSwgPVBSUlIJCQlAIFBSUlIKKwlsZHIJcjYsID1OTVJSCQkJQCBOTVJSCiAJbWNyCXAxNSwgMCwgcjUsIGMxMCwgYzIsIDAJCUAgd3JpdGUgUFJSUgogCW1jcglwMTUsIDAsIHI2LCBjMTAsIGMyLCAxCQlAIHdyaXRlIE5NUlIKICNlbmRpZgpAQCAtMzUxLDYgKzQxNiw5IEBACiAJLndvcmQJY3B1X3Y3X2RjYWNoZV9jbGVhbl9hcmVhCiAJLndvcmQJY3B1X3Y3X3N3aXRjaF9tbQogCS53b3JkCWNwdV92N19zZXRfcHRlX2V4dAorCS53b3JkCTAKKwkud29yZAkwCisJLndvcmQJMAogCS5zaXplCXY3X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSB2N19wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjMy5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKaW5kZXggZWMyNjM1NS4uNjNkOGIyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2MzLlMKQEAgLTQxMyw5ICs0MTMsNTIgQEAKIAltb3YJcGMsIGxyCiAKIAkubHRvcmcKLQogCS5hbGlnbgogCisuZ2xvYmwJY3B1X3hzYzNfc3VzcGVuZF9zaXplCisuZXF1CWNwdV94c2MzX3N1c3BlbmRfc2l6ZSwgNCAqIDgKKyNpZmRlZiBDT05GSUdfUE0KK0VOVFJZKGNwdV94c2MzX2RvX3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjQgLSByMTAsIGxyfQorCW1yYwlwMTQsIDAsIHI0LCBjNiwgYzAsIDAJQCBjbG9jayBjb25maWd1cmF0aW9uLCBmb3IgdHVyYm8gbW9kZQorCW1yYwlwMTUsIDAsIHI1LCBjMTUsIGMxLCAwCUAgQ1AgYWNjZXNzIHJlZworCW1yYwlwMTUsIDAsIHI2LCBjMTMsIGMwLCAwCUAgUElECisJbXJjIAlwMTUsIDAsIHI3LCBjMywgYzAsIDAJQCBkb21haW4gSUQKKwltcmMgCXAxNSwgMCwgcjgsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1yYwlwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKwltcmMgCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZworCWJpYwlyNCwgcjQsICMyCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0CisJc3RtaWEJcjAsIHtyMSwgcjQgLSByMTB9CUAgc3RvcmUgdjpwIG9mZnNldCArIGNwIHJlZ3MKKwlsZG1pYQlzcCEsIHtyNCAtIHIxMCwgcGN9CitFTkRQUk9DKGNwdV94c2MzX2RvX3N1c3BlbmQpCisKK0VOVFJZKGNwdV94c2MzX2RvX3Jlc3VtZSkKKwlsZG1pYQlyMCwge3IxLCByNCAtIHIxMH0JQCBsb2FkIHY6cCBvZmZzZXQgKyBjcCByZWdzCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcywgQlRCCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJQCBkcmFpbiB3cml0ZSAoJmZpbGwpIGJ1ZmZlcgorCW1jcglwMTUsIDAsIGlwLCBjNywgYzUsIDQJQCBmbHVzaCBwcmVmZXRjaCBidWZmZXIKKwltY3IJcDE1LCAwLCBpcCwgYzgsIGM3LCAwCUAgaW52YWxpZGF0ZSBJICYgRCBUTEJzCisJbWNyCXAxNCwgMCwgcjQsIGM2LCBjMCwgMAlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIHR1cmJvIG1vZGUuCisJbWNyCXAxNSwgMCwgcjUsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnCisJbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJQCBQSUQKKwltY3IJcDE1LCAwLCByNywgYzMsIGMwLCAwCUAgZG9tYWluIElECisJbWNyCXAxNSwgMCwgcjgsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1jcglwMTUsIDAsIHI5LCBjMSwgYzAsIDEJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKworCUAgdGVtcG9yYXJpbHkgbWFwIHJlc3VtZV90dXJuX29uX21tdSBpbnRvIHRoZSBwYWdlIHRhYmxlLAorCUAgb3RoZXJ3aXNlIHByZWZldGNoIGFib3J0IG9jY3VycyBhZnRlciBNTVUgaXMgdHVybmVkIG9uCisJbW92CXIwLCByMTAJCQlAIGNvbnRyb2wgcmVnaXN0ZXIKKwltb3YJcjIsIHI4LCBsc3IgIzE0CQlAIGdldCBUVEIwIGJhc2UKKwltb3YJcjIsIHIyLCBsc2wgIzE0CisJbGRyCXIzLCA9MHg1NDJlCQlAIHNlY3Rpb24gZmxhZ3MKKwliCWNwdV9yZXN1bWVfbW11CitFTkRQUk9DKGNwdV94c2MzX2RvX3Jlc3VtZSkKKyNlbHNlCisjZGVmaW5lIGNwdV94c2MzX2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfeHNjM19kb19yZXN1bWUJMAorI2VuZGlmCisKIAlfX0NQVUlOSVQKIAogCS50eXBlCV9feHNjM19zZXR1cCwgI2Z1bmN0aW9uCkBAIC00NzYsNiArNTE5LDkgQEAKIAkud29yZAljcHVfeHNjM19kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV94c2MzX3N3aXRjaF9tbQogCS53b3JkCWNwdV94c2MzX3NldF9wdGVfZXh0CisJLndvcmQJY3B1X3hzYzNfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X3hzYzNfZG9fc3VzcGVuZAorCS53b3JkCWNwdV94c2MzX2RvX3Jlc3VtZQogCS5zaXplCXhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHhzYzNfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCiAJLnNlY3Rpb24gIi5yb2RhdGEiCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCA1YTM3YzVlLi4wODYwMzhjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTUxMywxMSArNTEzLDQ5IEBACiAJeHNjYWxlX3NldF9wdGVfZXh0X2VwaWxvZ3VlCiAJbW92CXBjLCBscgogCi0KIAkubHRvcmcKLQogCS5hbGlnbgogCisuZ2xvYmwJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUKKy5lcXUJY3B1X3hzY2FsZV9zdXNwZW5kX3NpemUsIDQgKiA3CisjaWZkZWYgQ09ORklHX1BNCitFTlRSWShjcHVfeHNjYWxlX2RvX3N1c3BlbmQpCisJc3RtZmQJc3AhLCB7cjQgLSByMTAsIGxyfQorCW1yYwlwMTQsIDAsIHI0LCBjNiwgYzAsIDAJQCBjbG9jayBjb25maWd1cmF0aW9uLCBmb3IgdHVyYm8gbW9kZQorCW1yYwlwMTUsIDAsIHI1LCBjMTUsIGMxLCAwCUAgQ1AgYWNjZXNzIHJlZworCW1yYwlwMTUsIDAsIHI2LCBjMTMsIGMwLCAwCUAgUElECisJbXJjCXAxNSwgMCwgcjcsIGMzLCBjMCwgMAlAIGRvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDAJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHIKKwltcmMJcDE1LCAwLCByOSwgYzEsIGMxLCAwCUAgYXV4aWxpYXJ5IGNvbnRyb2wgcmVnCisJbXJjCXAxNSwgMCwgcjEwLCBjMSwgYzAsIDAJQCBjb250cm9sIHJlZworCWJpYwlyNCwgcjQsICMyCQlAIGNsZWFyIGZyZXF1ZW5jeSBjaGFuZ2UgYml0CisJc3RtaWEJcjAsIHtyNCAtIHIxMH0JCUAgc3RvcmUgY3AgcmVncworCWxkbWZkCXNwISwge3I0IC0gcjEwLCBwY30KK0VORFBST0MoY3B1X3hzY2FsZV9kb19zdXNwZW5kKQorCitFTlRSWShjcHVfeHNjYWxlX2RvX3Jlc3VtZSkKKwlsZG1pYQlyMCwge3I0IC0gcjEwfQkJQCBsb2FkIGNwIHJlZ3MKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM4LCBjNywgMAlAIGludmFsaWRhdGUgSSAmIEQgVExCcworCW1jcglwMTUsIDAsIGlwLCBjNywgYzcsIDAJQCBpbnZhbGlkYXRlIEkgJiBEIGNhY2hlcywgQlRCCisJbWNyCXAxNCwgMCwgcjQsIGM2LCBjMCwgMAlAIGNsb2NrIGNvbmZpZ3VyYXRpb24sIHR1cmJvIG1vZGUuCisJbWNyCXAxNSwgMCwgcjUsIGMxNSwgYzEsIDAJQCBDUCBhY2Nlc3MgcmVnCisJbWNyCXAxNSwgMCwgcjYsIGMxMywgYzAsIDAJQCBQSUQKKwltY3IJcDE1LCAwLCByNywgYzMsIGMwLCAwCUAgZG9tYWluIElECisJbWNyCXAxNSwgMCwgcjgsIGMyLCBjMCwgMAlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UgYWRkcgorCW1jcglwMTUsIDAsIHI5LCBjMSwgYzEsIDAJQCBhdXhpbGlhcnkgY29udHJvbCByZWcKKwltb3YJcjAsIHIxMAkJCUAgY29udHJvbCByZWdpc3RlcgorCW1vdglyMiwgcjgsIGxzciAjMTQJCUAgZ2V0IFRUQjAgYmFzZQorCW1vdglyMiwgcjIsIGxzbCAjMTQKKwlsZHIJcjMsID1QTURfVFlQRV9TRUNUIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKKwkJICAgICBQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfU0VDVF9BUF9XUklURQorCWIJY3B1X3Jlc3VtZV9tbXUKK0VORFBST0MoY3B1X3hzY2FsZV9kb19yZXN1bWUpCisjZWxzZQorI2RlZmluZSBjcHVfeHNjYWxlX2RvX3N1c3BlbmQJMAorI2RlZmluZSBjcHVfeHNjYWxlX2RvX3Jlc3VtZQkwCisjZW5kaWYKKwogCV9fQ1BVSU5JVAogCiAJLnR5cGUJX194c2NhbGVfc2V0dXAsICNmdW5jdGlvbgpAQCAtNTY1LDYgKzYwMyw5IEBACiAJLndvcmQJY3B1X3hzY2FsZV9kY2FjaGVfY2xlYW5fYXJlYQogCS53b3JkCWNwdV94c2NhbGVfc3dpdGNoX21tCiAJLndvcmQJY3B1X3hzY2FsZV9zZXRfcHRlX2V4dAorCS53b3JkCWNwdV94c2NhbGVfc3VzcGVuZF9zaXplCisJLndvcmQJY3B1X3hzY2FsZV9kb19zdXNwZW5kCisJLndvcmQJY3B1X3hzY2FsZV9kb19yZXN1bWUKIAkuc2l6ZQl4c2NhbGVfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIHhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCiAKIAkuc2VjdGlvbiAiLnJvZGF0YSIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL2NvbW1vbi5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvY29tbW9uLmMKaW5kZXggOGFhOTc0NC4uYzA3NGU2NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvY29tbW9uLmMKQEAgLTEwLDggKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvb3Byb2ZpbGUuaD4KQEAgLTQ2LDYgKzQ0LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgcmVwb3J0X3RyYWNlKHN0cnVjdCBzdGFja2ZyYW1lICpmcmFtZSwgdm9pZCAqZCkKIHsKQEAgLTg1LDcgKzg0LDcgQEAKIAogCS8qIGZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjawogCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpICovCi0JaWYgKHRhaWwgPj0gYnVmdGFpbFswXS5mcCkKKwlpZiAodGFpbCArIDEgPj0gYnVmdGFpbFswXS5mcCkKIAkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gYnVmdGFpbFswXS5mcC0xOwpAQCAtMTExLDYgKzExMCw3IEBACiAKIGludCBfX2luaXQgb3Byb2ZpbGVfYXJjaF9pbml0KHN0cnVjdCBvcHJvZmlsZV9vcGVyYXRpb25zICpvcHMpCiB7CisJLyogcHJvdmlkZSBiYWNrdHJhY2Ugc3VwcG9ydCBhbHNvIGluIHRpbWVyIG1vZGU6ICovCiAJb3BzLT5iYWNrdHJhY2UJCT0gYXJtX2JhY2t0cmFjZTsKIAogCXJldHVybiBvcHJvZmlsZV9wZXJmX2luaXQob3BzKTsKQEAgLTEyMCwxMSArMTIwLDMgQEAKIHsKIAlvcHJvZmlsZV9wZXJmX2V4aXQoKTsKIH0KLSNlbHNlCi1pbnQgX19pbml0IG9wcm9maWxlX2FyY2hfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQotewotCXByX2luZm8oIm9wcm9maWxlOiBoYXJkd2FyZSBjb3VudGVycyBub3QgYXZhaWxhYmxlXG4iKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLXZvaWQgX19leGl0IG9wcm9maWxlX2FyY2hfZXhpdCh2b2lkKSB7fQotI2VuZGlmIC8qIENPTkZJR19IV19QRVJGX0VWRU5UUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggM2E3MGViZi4uZmY0NjljNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC05NSw2ICs5NSw3IEBACiAJY2FzZSBNQUNIX1RZUEVfTVgzNV8zRFM6CiAJY2FzZSBNQUNIX1RZUEVfUENNMDQzOgogCWNhc2UgTUFDSF9UWVBFX0xJTExZMTEzMToKKwljYXNlIE1BQ0hfVFlQRV9WUFIyMDA6CiAJCXVhcnRfYmFzZSA9IE1YM1hfVUFSVDFfQkFTRV9BRERSOwogCQlicmVhazsKIAljYXNlIE1BQ0hfVFlQRV9NQUdYX1pONToKQEAgLTEwMiw2ICsxMDMsNyBAQAogCQlicmVhazsKIAljYXNlIE1BQ0hfVFlQRV9NWDUxX0JBQkJBR0U6CiAJY2FzZSBNQUNIX1RZUEVfRVVLUkVBX0NQVUlNWDUxU0Q6CisJY2FzZSBNQUNIX1RZUEVfTVg1MV8zRFM6CiAJCXVhcnRfYmFzZSA9IE1YNTFfVUFSVDFfQkFTRV9BRERSOwogCQlicmVhazsKIAljYXNlIE1BQ0hfVFlQRV9NWDUwX1JEUDoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKaW5kZXggMThmZTNjYi4uYjYzMzNhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcKQEAgLTE0NCwxMiArMTQ0LDkgQEAKIGNvbmZpZyBPTUFQX0lPTU1VX0lWQTIKIAlib29sCiAKLWNob2ljZQotCXByb21wdCAiU3lzdGVtIHRpbWVyIgotCWRlZmF1bHQgT01BUF8zMktfVElNRVIgaWYgIUFSQ0hfT01BUDE1WFgKLQogY29uZmlnIE9NQVBfTVBVX1RJTUVSCiAJYm9vbCAiVXNlIG1wdSB0aW1lciIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDEKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPTUFQIG1wdSB0aW1lci4gVGhpcwogCSAgdGltZXIgcHJvdmlkZXMgbW9yZSBpbnRyYS10aWNrIHJlc29sdXRpb24gdGhhbiB0aGUgMzJLSHogdGltZXIsCkBAIC0xNTgsNiArMTU1LDcgQEAKIGNvbmZpZyBPTUFQXzMyS19USU1FUgogCWJvb2wgIlVzZSAzMktIeiB0aW1lciIKIAlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMlBMVVMKKwlkZWZhdWx0IHkgaWYgKEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMlBMVVMpCiAJaGVscAogCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGVuYWJsZSB0aGUgT01BUCAzMktIeiB0aW1lci4KIAkgIFRoaXMgdGltZXIgc2F2ZXMgcG93ZXIgY29tcGFyZWQgdG8gdGhlIE9NQVBfTVBVX1RJTUVSLCBhbmQgaGFzCkBAIC0xNjUsOCArMTYzLDYgQEAKIAkgIGludHJhLXRpY2sgcmVzb2x1dGlvbiB0aGFuIE9NQVBfTVBVX1RJTUVSLiBUaGUgMzJLSHogdGltZXIgaXMKIAkgIGN1cnJlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgT01BUDE2WFgsIDI0WFgsIDM0WFggYW5kIE9NQVA0LgogCi1lbmRjaG9pY2UKLQogY29uZmlnIE9NQVAzX0wyX0FVWF9TRUNVUkVfU0FWRV9SRVNUT1JFCiAJYm9vbCAiT01BUDMgSFMvRU1VIHNhdmUgYW5kIHJlc3RvcmUgZm9yIEwyIEFVWCBjb250cm9sIHJlZ2lzdGVyIgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBQTQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvdW50ZXJfMzJrLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYwppbmRleCBlYTQ2NDQwLi44NjJkZGE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvY291bnRlcl8zMmsuYwpAQCAtMzYsOCArMzYsNiBAQAogCiAjZGVmaW5lIE9NQVAxNlhYX1RJTUVSXzMyS19TWU5DSFJPTklaRUQJCTB4ZmZmYmM0MTAKIAotI2lmICEoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNzMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNVhYKSkKLQogI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAKIC8qCkBAIC0xMjIsMTIgKzEyMCwyNCBAQAogI2RlZmluZSBTQ19NVUxUCQk0MDAwMDAwMDAwdQogI2RlZmluZSBTQ19TSElGVAkxNwogCi11bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBzY2hlZF9jbG9jayh2b2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgbm90cmFjZSBfb21hcF8zMmtfc2NoZWRfY2xvY2sodm9pZCkKIHsKIAl1MzIgY3ljID0gY2xvY2tzb3VyY2VfMzJrLnJlYWQoJmNsb2Nrc291cmNlXzMyayk7CiAJcmV0dXJuIGN5Y190b19maXhlZF9zY2hlZF9jbG9jaygmY2QsIGN5YywgKHUzMil+MCwgU0NfTVVMVCwgU0NfU0hJRlQpOwogfQogCisjaWZuZGVmIENPTkZJR19PTUFQX01QVV9USU1FUgordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfMzJrX3NjaGVkX2Nsb2NrKCk7Cit9CisjZWxzZQordW5zaWduZWQgbG9uZyBsb25nIG5vdHJhY2Ugb21hcF8zMmtfc2NoZWRfY2xvY2sodm9pZCkKK3sKKwlyZXR1cm4gX29tYXBfMzJrX3NjaGVkX2Nsb2NrKCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgbm90cmFjZSBvbWFwX3VwZGF0ZV9zY2hlZF9jbG9jayh2b2lkKQogewogCXUzMiBjeWMgPSBjbG9ja3NvdXJjZV8zMmsucmVhZCgmY2xvY2tzb3VyY2VfMzJrKTsKQEAgLTE2MCw3ICsxNzAsNyBAQAogCSp0cyA9ICp0c3A7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmsodm9pZCkKK2ludCBfX2luaXQgb21hcF9pbml0X2Nsb2Nrc291cmNlXzMyayh2b2lkKQogewogCXN0YXRpYyBjaGFyIGVycltdIF9faW5pdGRhdGEgPSBLRVJOX0VSUgogCQkJIiVzOiBjYW4ndCByZWdpc3RlciBjbG9ja3NvdXJjZSFcbiI7CkBAIC0xOTUsNyArMjA1LDMgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKG9tYXBfaW5pdF9jbG9ja3NvdXJjZV8zMmspOwotCi0jZW5kaWYJLyogIShkZWZpbmVkKENPTkZJR19BUkNIX09NQVA3MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE1WFgpKSAqLwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggYzRiMmI0Ny4uODUzNjMwOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtNTMsNyArNTMsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgT01BUF9ETUFfQUNUSVZFCQkJMHgwMQotI2RlZmluZSBPTUFQMl9ETUFfQ1NSX0NMRUFSX01BU0sJMHhmZmUKKyNkZWZpbmUgT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLCTB4ZmZmZmZmZmYKIAogI2RlZmluZSBPTUFQX0ZVTkNfTVVYX0FSTV9CQVNFCQkoMHhmZmZlMTAwMCArIDB4ZWMpCiAKQEAgLTE4NzMsNyArMTg3Myw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIkRNQSBtaXNhbGlnbmVkIGVycm9yIHdpdGggZGV2aWNlICVkXG4iLAogCQkgICAgICAgZG1hX2NoYW5bY2hdLmRldl9pZCk7CiAKLQlwLT5kbWFfd3JpdGUoT01BUDJfRE1BX0NTUl9DTEVBUl9NQVNLLCBDU1IsIGNoKTsKKwlwLT5kbWFfd3JpdGUoc3RhdHVzLCBDU1IsIGNoKTsKIAlwLT5kbWFfd3JpdGUoMSA8PCBjaCwgSVJRU1RBVFVTX0wwLCBjaCk7CiAJLyogcmVhZCBiYWNrIHRoZSByZWdpc3RlciB0byBmbHVzaCB0aGUgd3JpdGUgKi8KIAlwLT5kbWFfcmVhZChJUlFTVEFUVVNfTDAsIGNoKTsKQEAgLTE4OTMsMTAgKzE4OTMsOSBAQAogCQkJT01BUF9ETUFfQ0hBSU5fSU5DUUhFQUQoY2hhaW5faWQpOwogCiAJCXN0YXR1cyA9IHAtPmRtYV9yZWFkKENTUiwgY2gpOworCQlwLT5kbWFfd3JpdGUoc3RhdHVzLCBDU1IsIGNoKTsKIAl9CiAKLQlwLT5kbWFfd3JpdGUoc3RhdHVzLCBDU1IsIGNoKTsKLQogCWlmIChsaWtlbHkoZG1hX2NoYW5bY2hdLmNhbGxiYWNrICE9IE5VTEwpKQogCQlkbWFfY2hhbltjaF0uY2FsbGJhY2soY2gsIHN0YXR1cywgZG1hX2NoYW5bY2hdLmRhdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAppbmRleCA2YjgwODhlLi4yOWIyYWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKQEAgLTM1LDYgKzM1LDkgQEAKIAogZXh0ZXJuIHZvaWQgb21hcF9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgb21hcF90aW1lcjsKK2V4dGVybiBib29sIG9tYXBfMzJrX3RpbWVyX2luaXQodm9pZCk7CitleHRlcm4gaW50IF9faW5pdCBvbWFwX2luaXRfY2xvY2tzb3VyY2VfMzJrKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBub3RyYWNlIG9tYXBfMzJrX3NjaGVkX2Nsb2NrKHZvaWQpOwogCiBleHRlcm4gdm9pZCBvbWFwX3Jlc2VydmUodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc3JhbS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmgKaW5kZXggOTk2N2Q1ZS4uZjUwMGZjMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zcmFtLmgKQEAgLTEyLDcgKzEyLDE5IEBACiAjZGVmaW5lIF9fQVJDSF9BUk1fT01BUF9TUkFNX0gKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkICogb21hcF9zcmFtX3B1c2godm9pZCAqIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHNpemUpOworI2luY2x1ZGUgPGFzbS9mbmNweS5oPgorCitleHRlcm4gdm9pZCAqb21hcF9zcmFtX3B1c2hfYWRkcmVzcyh1bnNpZ25lZCBsb25nIHNpemUpOworCisvKiBNYWNybyB0byBwdXNoIGEgZnVuY3Rpb24gdG8gdGhlIGludGVybmFsIFNSQU0sIHVzaW5nIHRoZSBmbmNweSBBUEkgKi8KKyNkZWZpbmUgb21hcF9zcmFtX3B1c2goZnVuY3AsIHNpemUpICh7CQkJCVwKKwl0eXBlb2YoJihmdW5jcCkpIF9yZXMgPSBOVUxMOwkJCQlcCisJdm9pZCAqX3NyYW1fYWRkcmVzcyA9IG9tYXBfc3JhbV9wdXNoX2FkZHJlc3Moc2l6ZSk7CVwKKwlpZiAoX3NyYW1fYWRkcmVzcykJCQkJCVwKKwkJX3JlcyA9IGZuY3B5KF9zcmFtX2FkZHJlc3MsICYoZnVuY3ApLCBzaXplKTsJXAorCV9yZXM7CQkJCQkJCVwKK30pCisKIGV4dGVybiB2b2lkIG9tYXBfc3JhbV9yZXByb2dyYW1fY2xvY2sodTMyIGRwbGxjdGwsIHUzMiBja2N0bCk7CiAKIGV4dGVybiB2b2lkIG9tYXAyX3NyYW1fZGRyX2luaXQodTMyICpzbG93X2RsbF9jdHJsLCB1MzIgZmFzdF9kbGxfY3RybCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCmluZGV4IDQ1OWIzMTkuLjQ5ZDMyMDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYwpAQCAtMzIyLDE1ICszMjIsMTggQEAKIAogc3RydWN0IG9tYXBfbWJveCAqb21hcF9tYm94X2dldChjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQogewotCXN0cnVjdCBvbWFwX21ib3ggKm1ib3g7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qgb21hcF9tYm94ICpfbWJveCwgKm1ib3ggPSBOVUxMOworCWludCBpLCByZXQ7CiAKIAlpZiAoIW1ib3hlcykKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAKLQlmb3IgKG1ib3ggPSAqbWJveGVzOyBtYm94OyBtYm94KyspCi0JCWlmICghc3RyY21wKG1ib3gtPm5hbWUsIG5hbWUpKQorCWZvciAoaSA9IDA7IChfbWJveCA9IG1ib3hlc1tpXSk7IGkrKykgeworCQlpZiAoIXN0cmNtcChfbWJveC0+bmFtZSwgbmFtZSkpIHsKKwkJCW1ib3ggPSBfbWJveDsKIAkJCWJyZWFrOworCQl9CisJfQogCiAJaWYgKCFtYm94KQogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCmluZGV4IGUyNmU1MDQuLjY4ZmNjN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwpAQCAtMjQyLDcgKzI0MiwxNCBAQAogCSAgICAgICBvbWFwX3NyYW1fc2l6ZSAtIFNSQU1fQk9PVExPQURFUl9TWik7CiB9CiAKLXZvaWQgKiBvbWFwX3NyYW1fcHVzaCh2b2lkICogc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKKy8qCisgKiBNZW1vcnkgYWxsb2NhdG9yIGZvciBTUkFNOiBjYWxjdWxhdGVzIHRoZSBuZXcgY2VpbGluZyBhZGRyZXNzCisgKiBmb3IgcHVzaGluZyBhIGZ1bmN0aW9uIHVzaW5nIHRoZSBmbmNweSBBUEkuCisgKgorICogTm90ZSB0aGF0IGZuY3B5IHJlcXVpcmVzIHRoZSByZXR1cm5lZCBhZGRyZXNzIHRvIGJlIGFsaWduZWQKKyAqIHRvIGFuIDgtYnl0ZSBib3VuZGFyeS4KKyAqLwordm9pZCAqb21hcF9zcmFtX3B1c2hfYWRkcmVzcyh1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKHNpemUgPiAob21hcF9zcmFtX2NlaWwgLSAob21hcF9zcmFtX2Jhc2UgKyBTUkFNX0JPT1RMT0FERVJfU1opKSkgewogCQlwcmludGsoS0VSTl9FUlIgIk5vdCBlbm91Z2ggc3BhY2UgaW4gU1JBTVxuIik7CkBAIC0yNTAsMTAgKzI1Nyw3IEBACiAJfQogCiAJb21hcF9zcmFtX2NlaWwgLT0gc2l6ZTsKLQlvbWFwX3NyYW1fY2VpbCA9IFJPVU5EX0RPV04ob21hcF9zcmFtX2NlaWwsIHNpemVvZih2b2lkICopKTsKLQltZW1jcHkoKHZvaWQgKilvbWFwX3NyYW1fY2VpbCwgc3RhcnQsIHNpemUpOwotCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylvbWFwX3NyYW1fY2VpbCwKLQkJKHVuc2lnbmVkIGxvbmcpKG9tYXBfc3JhbV9jZWlsICsgc2l6ZSkpOworCW9tYXBfc3JhbV9jZWlsID0gUk9VTkRfRE9XTihvbWFwX3NyYW1fY2VpbCwgRk5DUFlfQUxJR04pOwogCiAJcmV0dXJuICh2b2lkICopb21hcF9zcmFtX2NlaWw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCmluZGV4IGI3N2UwMTguLmE5YWE1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCkBAIC0xMzksMTAgKzEzOSwxMSBAQAogI2RlZmluZSBtZnBfY29uZmlndXJlZChwKQkoKHApLT5jb25maWcgIT0gLTEpCiAKIC8qCi0gKiBwZXJmb3JtIGEgcmVhZC1iYWNrIG9mIGFueSBNRlBSIHJlZ2lzdGVyIHRvIG1ha2Ugc3VyZSB0aGUKKyAqIHBlcmZvcm0gYSByZWFkLWJhY2sgb2YgYW55IHZhbGlkIE1GUFIgcmVnaXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQogICogcHJldmlvdXMgd3JpdGluZ3MgYXJlIGZpbmlzaGVkCiAgKi8KLSNkZWZpbmUgbWZwcl9zeW5jKCkJKHZvaWQpX19yYXdfcmVhZGwobWZwcl9tbWlvX2Jhc2UgKyAwKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgbWZwcl9vZmZfcmVhZGJhY2s7CisjZGVmaW5lIG1mcHJfc3luYygpCSh2b2lkKV9fcmF3X3JlYWRsKG1mcHJfbW1pb19iYXNlICsgbWZwcl9vZmZfcmVhZGJhY2spCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX21mcF9jb25maWdfcnVuKHN0cnVjdCBtZnBfcGluICpwKQogewpAQCAtMjQ4LDYgKzI0OSw5IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWZwX3NwaW5fbG9jaywgZmxhZ3MpOwogCisJLyogbWZwIG9mZnNldCBmb3IgcmVhZGJhY2sgKi8KKwltZnByX29mZl9yZWFkYmFjayA9IG1hcFswXS5vZmZzZXQ7CisKIAlmb3IgKHAgPSBtYXA7IHAtPnN0YXJ0ICE9IE1GUF9QSU5fSU5WQUxJRDsgcCsrKSB7CiAJCW9mZnNldCA9IHAtPm9mZnNldDsKIAkJaSA9IHAtPnN0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvc2xlZXAuUwppbmRleCBlNzNlM2I2ZS4uZmQ3MDMyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3NsZWVwLlMKQEAgLTQ0LDIzICs0NCwxMyBAQAogCS8qIHMzY19jcHVfc2F2ZQogCSAqCiAJICogZW50cnk6Ci0JICoJcjAgPSBzYXZlIGFkZHJlc3MgKHZpcnR1YWwgYWRkciBvZiBzM2Nfc2xlZXBfc2F2ZV9waHlzKQorCSAqCXIxID0gdjpwIG9mZnNldAogCSovCiAKIEVOVFJZKHMzY19jcHVfc2F2ZSkKIAlzdG1mZAlzcCEsIHsgcjQgLSByMTIsIGxyIH0KLQotCUBAIHN0b3JlIGNvLXByb2Nlc3NvciByZWdpc3RlcnMKLQotCW1yYwlwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgUElECi0JbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAotCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCB0cmFuc2xhdGlvbiB0YWJsZSBiYXNlIGFkZHJlc3MKLQltcmMJcDE1LCAwLCByNywgYzEsIGMwLCAwCUAgY29udHJvbCByZWdpc3RlcgotCi0Jc3RtaWEJcjAsIHsgcjQgLSByMTMgfQotCi0JQEAgd3JpdGUgb3VyIHN0YXRlIGJhY2sgdG8gUkFNCi0JYmwJczNjX3BtX2NiX2ZsdXNoY2FjaGUKKwlsZHIJcjMsID1yZXN1bWVfd2l0aF9tbXUKKwlibAljcHVfc3VzcGVuZAogCiAJQEAganVtcCB0byBmaW5hbCBjb2RlIHRvIHNlbmQgc3lzdGVtIHRvIHNsZWVwCiAJbGRyCXIwLCA9cG1fY3B1X3NsZWVwCkBAIC03NiwyMCArNjYsNiBAQAogCiAJLmx0b3JnCiAKLQlAQCB0aGUgbmV4dCBiaXRzIHNpdCBpbiB0aGUgLmRhdGEgc2VnbWVudCwgZXZlbiB0aG91Z2ggdGhleQotCUBAIGhhcHBlbiB0byBiZSBjb2RlLi4uIHRoZSBzM2Nfc2xlZXBfc2F2ZV9waHlzIG5lZWRzIHRvIGJlCi0JQEAgYWNjZXNzZWQgYnkgdGhlIHJlc3VtZSBjb2RlIGJlZm9yZSBpdCBjYW4gcmVzdG9yZSB0aGUgTU1VLgotCUBAIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFyaWFibGUgaGFzIHRvIGJlIGNsb3NlIGVub3VnaCBmb3IgdGhlCi0JQEAgY29kZSB0byByZWFkIGl0Li4uIHNpbmNlIHRoZSAudGV4dCBzZWdtZW50IG5lZWRzIHRvIGJlIFJPLAotCUBAIHRoZSBkYXRhIHNlZ21lbnQgY2FuIGJlIHRoZSBvbmx5IHBsYWNlIHRvIHB1dCB0aGlzIGNvZGUuCi0KLQkuZGF0YQotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQotCiAJLyogc2xlZXAgbWFnaWMsIHRvIGFsbG93IHRoZSBib290bG9hZGVyIHRvIGNoZWNrIGZvciBhbiB2YWxpZAogCSAqIGltYWdlIHRvIHJlc3VtZSB0by4gTXVzdCBiZSB0aGUgZmlyc3Qgd29yZCBiZWZvcmUgdGhlCiAJICogczNjX2NwdV9yZXN1bWUgZW50cnkuCkBAIC0xMDAsMTAgKzc2LDYgQEAKIAkvKiBzM2NfY3B1X3Jlc3VtZQogCSAqCiAJICogcmVzdW1lIGNvZGUgZW50cnkgZm9yIGJvb3Rsb2FkZXIgdG8gY2FsbAotCSAqCi0JICogd2UgbXVzdCBwdXQgdGhpcyBjb2RlIGhlcmUgaW4gdGhlIGRhdGEgc2VnbWVudCBhcyB3ZSBoYXZlIG5vCi0JICogb3RoZXIgd2F5IG9mIHJlc3RvcmluZyB0aGUgc3RhY2sgcG9pbnRlciBhZnRlciBzbGVlcCwgYW5kIHdlCi0JICogbXVzdCBub3Qgd3JpdGUgdG8gdGhlIGNvZGUgc2VnbWVudCAoY29kZSBpcyByZWFkLW9ubHkpCiAJKi8KIAogRU5UUlkoczNjX2NwdV9yZXN1bWUpCkBAIC0xMzQsMjUgKzEwNiw0IEBACiAJYmVxCTEwMDFiCiAjZW5kaWYgLyogQ09ORklHX0RFQlVHX1JFU1VNRSAqLwogCi0JbW92CXIxLCAjMAotCW1jcglwMTUsIDAsIHIxLCBjOCwgYzcsIDAJCUBAIGludmFsaWRhdGUgSSAmIEQgVExCcwotCW1jcglwMTUsIDAsIHIxLCBjNywgYzcsIDAJCUBAIGludmFsaWRhdGUgSSAmIEQgY2FjaGVzCi0KLQlsZHIJcjAsIHMzY19zbGVlcF9zYXZlX3BoeXMJCUAgYWRkcmVzcyBvZiByZXN0b3JlIGJsb2NrCi0JbGRtaWEJcjAsIHsgcjQgLSByMTMgfQotCi0JbWNyCXAxNSwgMCwgcjQsIGMxMywgYzAsIDAJCUAgUElECi0JbWNyCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAkJQCBEb21haW4gSUQKLQltY3IJcDE1LCAwLCByNiwgYzIsIGMwLCAwCQlAIHRyYW5zbGF0aW9uIHRhYmxlIGJhc2UKLQotI2lmZGVmIENPTkZJR19ERUJVR19SRVNVTUUKLQltb3YJcjMsICMnUicKLQlzdHJiCXIzLCBbIHIyLCAjUzNDMjQxMF9VVFhIIF0KLSNlbmRpZgotCi0JbGRyCXIyLCA9cmVzdW1lX3dpdGhfbW11Ci0JbWNyCXAxNSwgMCwgcjcsIGMxLCBjMCwgMAkJQCB0dXJuIG9uIE1NVSwgZXRjCi0Jbm9wCQkJCQlAIHNlY29uZC10by1sYXN0IGJlZm9yZSBtbXUKLQltb3YJcGMsIHIyCQkJCUAgZ28gYmFjayB0byB2aXJ0dWFsIGFkZHJlc3MKLQotCS5sdG9yZworCWIJY3B1X3Jlc3VtZQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcKaW5kZXggZGViMzk5NS4uNTU3ZjhjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCkBAIC0zNyw2ICszNywxNCBAQAogCWhlbHAKIAkgIENvbW1vbiBjb2RlIGZvciB0aGUgR1BJTyBpbnRlcnJ1cHRzIChvdGhlciB0aGFuIGV4dGVybmFsIGludGVycnVwdHMuKQogCitjb21tZW50ICJTeXN0ZW0gTU1VIgorCitjb25maWcgUzVQX1NZU1RFTV9NTVUKKwlib29sICJTNVAgU1lTVEVNIE1NVSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzVQVjMxMAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIFN5c3RlbSBNTVUKKwogY29uZmlnIFM1UF9ERVZfRklNQzAKIAlib29sCiAJaGVscApAQCAtNjYsMTkgKzc0LDMgQEAKIAlib29sCiAJaGVscAogCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIE1JUEktQ1NJUyBjaGFubmVsIDEKLQotbWVudWNvbmZpZyBTNVBfU1lTTU1VCi0JYm9vbCAiU1lTTU1VIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX1M1UFYzMTAKLQloZWxwCi0JICBUaGlzIGlzIGEgU3lzdGVtIE1NVSBkcml2ZXIgZm9yIFNhbXN1bmcgQVJNIGJhc2VkIFNvYy4KLQotaWYgUzVQX1NZU01NVQotCi1jb25maWcgUzVQX1NZU01NVV9ERUJVRwotCWJvb2wgIkVuYWJsZXMgZGVidWcgbWVzc2FnZXMiCi0JZGVwZW5kcyBvbiBTNVBfU1lTTU1VCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIFNZU01NVSBkcml2ZXIgZGVidWcgbWFzc2FnZXMuCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCmluZGV4IDkyZWZlMWEuLjRiZDVjZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBACiBvYmoteQkJCQkrPSBpcnEubwogb2JqLSQoQ09ORklHX1M1UF9FWFRfSU5UKQkrPSBpcnEtZWludC5vCiBvYmotJChDT05GSUdfUzVQX0dQSU9fSU5UKQkrPSBpcnEtZ3Bpb2ludC5vCitvYmotJChDT05GSUdfUzVQX1NZU1RFTV9NTVUpCSs9IHN5c21tdS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwogCkBAIC0zMCw0ICszMSwzIEBACiBvYmotJChDT05GSUdfUzVQX0RFVl9PTkVOQU5EKQkrPSBkZXYtb25lbmFuZC5vCiBvYmotJChDT05GSUdfUzVQX0RFVl9DU0lTMCkJKz0gZGV2LWNzaXMwLm8KIG9iai0kKENPTkZJR19TNVBfREVWX0NTSVMxKQkrPSBkZXYtY3NpczEubwotb2JqLSQoQ09ORklHX1M1UF9TWVNNTVUpCSs9IHN5c21tdS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYwppbmRleCA2YTczNDI4Li5hZmFmODdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2Rldi11YXJ0LmMKQEAgLTI4LDcgKzI4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX3VhcnQwX3Jlc291cmNlW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDAsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDAgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMCArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC01MSw3ICs1MSw3IEBACiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF91YXJ0MV9yZXNvdXJjZVtdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQxLAotCQkuZW5kCT0gUzVQX1BBX1VBUlQxICsgUzVQX1NaX1VBUlQsCisJCS5lbmQJPSBTNVBfUEFfVUFSVDEgKyBTNVBfU1pfVUFSVCAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewpAQCAtNzQsNyArNzQsNyBAQAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfdWFydDJfcmVzb3VyY2VbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAk9IFM1UF9QQV9VQVJUMiwKLQkJLmVuZAk9IFM1UF9QQV9VQVJUMiArIFM1UF9TWl9VQVJULAorCQkuZW5kCT0gUzVQX1BBX1VBUlQyICsgUzVQX1NaX1VBUlQgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTk4LDcgKzk4LDcgQEAKICNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiAzCiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDMsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDMgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMyArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0xMjMsNyArMTIzLDcgQEAKICNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiA0CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDQsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDQgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUNCArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0xNDgsNyArMTQ4LDcgQEAKICNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiA1CiAJWzBdID0gewogCQkuc3RhcnQJPSBTNVBfUEFfVUFSVDUsCi0JCS5lbmQJPSBTNVBfUEFfVUFSVDUgKyBTNVBfU1pfVUFSVCwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUNSArIFM1UF9TWl9VQVJUIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvc3lzbW11LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiMjk4ZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3N5c21tdS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCi0gKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KLSAqCi0gKiBTYW1zdW5nIHN5c21tdSBkcml2ZXIKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSAotI2RlZmluZSBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSCBfX0ZJTEVfXwotCi0vKiBkZWJ1ZyBtYWNybyAqLwotI2lmZGVmIENPTkZJR19TNVBfU1lTTU1VX0RFQlVHCi0jZGVmaW5lIHN5c21tdV9kZWJ1ZyhmbXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fSU5GTyAiWyVzXSAiIGZtdCwgX19mdW5jX18sICMjIGFyZykKLSNlbHNlCi0jZGVmaW5lIHN5c21tdV9kZWJ1ZyhmbXQsIGFyZy4uLikJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1M1UF9TWVNNTVVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvc3lzbW11LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwppbmRleCBkODA0OTE0Li5mZmU4YTQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9zeXNtbXUuYwpAQCAtMTYsOCArMTYsNiBAQAogI2luY2x1ZGUgPG1hY2gvcmVncy1zeXNtbXUuaD4KICNpbmNsdWRlIDxtYWNoL3N5c21tdS5oPgogCi0jaW5jbHVkZSA8cGxhdC9zeXNtbXUuaD4KLQogc3RydWN0IHN5c21tdV9jb250cm9sbGVyIHM1cF9zeXNtbXVfY250bHJzW1M1UF9TWVNNTVVfVE9UQUxfSVBOVU1dOwogCiB2b2lkIHM1cF9zeXNtbXVfcmVnaXN0ZXIoc3RydWN0IHN5c21tdV9jb250cm9sbGVyICpzeXNtbXVjb25wKQpAQCAtMTIzLDcgKzEyMSw3IEBACiAJCTogIj1yIiAocGcpIDogOiAiY2MiKTsJCVwKIAkJcGcgJj0gfjB4M2ZmZjsKIAotCXN5c21tdV9kZWJ1ZygiQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIHBnKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogQ1AxNSBUVEJSMCA6IDB4JXhcbiIsIF9fZnVuY19fLCBwZyk7CiAKIAkvKiBTZXQgc3lzbW11IHBhZ2UgdGFibGUgYmFzZSBhZGRyZXNzICovCiAJX19yYXdfd3JpdGVsKHBnLCBzeXNtbXVjb25wLT5yZWdzICsgUzVQX1BUX0JBU0VfQUREUik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXRzLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXRzLmMKaW5kZXggMjM2ZWY4NC4uM2U0YmQ4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi10cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdHMuYwpAQCAtNTgsNCArNTgsMyBAQAogCiAJczNjX2RldmljZV90cy5kZXYucGxhdGZvcm1fZGF0YSA9IG5wZDsKIH0KLUVYUE9SVF9TWU1CT0woczNjMjR4eF90c19zZXRfcGxhdGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi11YXJ0LmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVhcnQuYwppbmRleCAzNzc2Y2Q5Li41OTI4MTA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVhcnQuYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVhcnQuYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKIC8qIHVhcnQgZGV2aWNlcyAqLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMCA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaAppbmRleCBkOTAyNWUzLi45MzdjYzJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCkBAIC0xNyw2ICsxNyw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAorc3RydWN0IHN5c19kZXZpY2U7CisKICNpZmRlZiBDT05GSUdfUE0KIAogZXh0ZXJuIF9faW5pdCBpbnQgczNjX3BtX2luaXQodm9pZCk7CkBAIC01MCwxMyArNTIsMTEgQEAKIAogLyogZnJvbSBzbGVlcC5TICovCiAKLWV4dGVybiBpbnQgIHMzY19jcHVfc2F2ZSh1bnNpZ25lZCBsb25nICpzYXZlYmxrKTsKK2V4dGVybiBpbnQgIHMzY19jcHVfc2F2ZSh1bnNpZ25lZCBsb25nICpzYXZlYmxrLCBsb25nKTsKIGV4dGVybiB2b2lkIHMzY19jcHVfcmVzdW1lKHZvaWQpOwogCiBleHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9zdXNwZW5kKHZvaWQpOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2Nfc2xlZXBfc2F2ZV9waHlzOwotCiAvKiBzbGVlcCBzYXZlIGluZm8gKi8KIAogLyoqCkBAIC0xNzksMTMgKzE3OSw1IEBACiAgKi8KIGV4dGVybiB2b2lkIHMzY19wbV9zYXZlX2dwaW9zKHZvaWQpOwogCi0vKioKLSAqIHMzY19wbV9jYl9mbHVzaGNhY2hlIC0gY2FsbGJhY2sgZm9yIGFzc2VtYmx5IGNvZGUKLSAqCi0gKiBDYWxsYmFjayB0byBpc3N1ZSBmbHVzaF9jYWNoZV9hbGwoKSBhcyB0aGlzIGNhbGwgaXMKLSAqIG5vdCBhIGRpcmVjdGx5IGNhbGxhYmxlIG9iamVjdC4KLSAqLwotZXh0ZXJuIHZvaWQgczNjX3BtX2NiX2ZsdXNoY2FjaGUodm9pZCk7Ci0KIGV4dGVybiB2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCk7CiBleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9jb3JlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3BtLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYwppbmRleCAwMmQ1MzFmLi5kNWI1OGQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYwpAQCAtMjQxLDggKzI0MSw2IEBACiAKIHN0YXRpYyBpbnQgczNjX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyByZWdzX3NhdmVbMTZdOwotCiAJLyogZW5zdXJlIHRoZSBkZWJ1ZyBpcyBpbml0aWFsaXNlZCAoaWYgZW5hYmxlZCkgKi8KIAogCXMzY19wbV9kZWJ1Z19pbml0KCk7CkBAIC0yNjYsMTIgKzI2NCw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHN0b3JlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciByZWNvdmVyeSBibG9jayAqLwotCi0JczNjX3NsZWVwX3NhdmVfcGh5cyA9IHZpcnRfdG9fcGh5cyhyZWdzX3NhdmUpOwotCi0JUzNDX1BNREJHKCJzM2Nfc2xlZXBfc2F2ZV9waHlzPTB4JTA4bHhcbiIsIHMzY19zbGVlcF9zYXZlX3BoeXMpOwotCiAJLyogc2F2ZSBhbGwgbmVjZXNzYXJ5IGNvcmUgcmVnaXN0ZXJzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBkcml2ZXJzICovCiAKIAlzM2NfcG1fc2F2ZV9ncGlvcygpOwpAQCAtMzA1LDcgKzI5Nyw3IEBACiAJICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUgYW5kIHJlc3RvcmVzIGl0CiAJICogZHVyaW5nIHRoZSByZXN1bWUuICAqLwogCi0JczNjX2NwdV9zYXZlKHJlZ3Nfc2F2ZSk7CisJczNjX2NwdV9zYXZlKDAsIFBMQVRfUEhZU19PRkZTRVQgLSBQQUdFX09GRlNFVCk7CiAKIAkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgdXNpbmcgdGhlIGtlcm5lbCdzIGNwdSBpbml0IGNvZGUuICovCiAKQEAgLTMzNiwxMiArMzI4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogY2FsbGJhY2sgZnJvbSBhc3NlbWJseSBjb2RlICovCi12b2lkIHMzY19wbV9jYl9mbHVzaGNhY2hlKHZvaWQpCi17Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci19Ci0KIHN0YXRpYyBpbnQgczNjX3BtX3ByZXBhcmUodm9pZCkKIHsKIAkvKiBwcmVwYXJlIGNoZWNrIGFyZWEgaWYgY29uZmlndXJlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvTWFrZWZpbGUKaW5kZXggZWI4OTU0MC4uYjRmMzQwYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL01ha2VmaWxlCkBAIC0zLDYgKzMsNiBAQAogIwogCiAjIENvbW1vbiBzdXBwb3J0Ci1vYmoteQk6PSBjbG9jay5vIHBhZG11eC5vIHRpbWUubworb2JqLXkJOj0gY2xvY2subyB0aW1lLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfU1BFQVIzWFgpCSs9IHNoaXJxLm8KK29iai0kKENPTkZJR19BUkNIX1NQRUFSM1hYKQkrPSBzaGlycS5vIHBhZG11eC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2Nsb2NrLmMKaW5kZXggZWU0ZjkwZS4uYmRiZDdlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvY2xvY2suYwpAQCAtMTIsMTggKzEyLDI1IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPG1hY2gvbWlzY19yZWdzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQocm9vdF9jbGtzKTsKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKKyNlbmRpZgogCi1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgbGlzdF9oZWFkICopOworc3RhdGljIHZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqLCBpbnQgb25faW5pdCk7CisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlcGFyZW50KHN0cnVjdCBjbGsgKik7CisjZW5kaWYKIAogc3RhdGljIGludCBnZW5lcmljX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtNjUsNiArNzIsMTA0IEBACiAJLmRpc2FibGUgPSBnZW5lcmljX2Nsa19kaXNhYmxlLAogfTsKIAorLyogcmV0dXJucyBjdXJyZW50IHByb2dyYW1tZWQgY2xvY2tzIGNsb2NrIGluZm8gc3RydWN0dXJlICovCitzdGF0aWMgc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvX2dldChzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgaW50IHZhbCwgaTsKKwlzdHJ1Y3QgcGNsa19pbmZvICppbmZvID0gTlVMTDsKKworCXZhbCA9IChyZWFkbChjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9yZWcpID4+IGNsay0+cGNsa19zZWxfc2hpZnQpCisJCSYgY2xrLT5wY2xrX3NlbC0+cGNsa19zZWxfbWFzazsKKworCWZvciAoaSA9IDA7IGkgPCBjbGstPnBjbGtfc2VsLT5wY2xrX2NvdW50OyBpKyspIHsKKwkJaWYgKGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrX3ZhbCA9PSB2YWwpCisJCQlpbmZvID0gJmNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXTsKKwl9CisKKwlyZXR1cm4gaW5mbzsKK30KKworLyoKKyAqIFNldCBVcGRhdGUgcGNsaywgYW5kIHBjbGtfaW5mbyBvZiBjbGsgYW5kIGFkZCBjbG9jayBzaWJsaW5nIG5vZGUgdG8gY3VycmVudAorICogcGFyZW50cyBjaGlsZHJlbiBsaXN0CisgKi8KK3N0YXRpYyB2b2lkIGNsa19yZXBhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJbGlzdF9kZWwoJmNsay0+c2libGluZyk7CisJbGlzdF9hZGQoJmNsay0+c2libGluZywgJnBjbGtfaW5mby0+cGNsay0+Y2hpbGRyZW4pOworCisJY2xrLT5wY2xrID0gcGNsa19pbmZvLT5wY2xrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKKwljbGtfZGVidWdmc19yZXBhcmVudChjbGspOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIGRvX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoIWNsaykKKwkJcmV0dXJuOworCisJaWYgKCFjbGstPnVzYWdlX2NvdW50KSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwljbGstPnVzYWdlX2NvdW50LS07CisKKwlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7CisJCS8qCisJCSAqIFN1cmVseSwgdGhlcmUgYXJlIG5vIGFjdGl2ZSBjaGlsZHJlbnMgb3IgZGlyZWN0IHVzZXJzCisJCSAqIG9mIHRoaXMgY2xvY2sKKwkJICovCisJCWlmIChjbGstPnBjbGspCisJCQlkb19jbGtfZGlzYWJsZShjbGstPnBjbGspOworCisJCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZGlzYWJsZSkKKwkJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CisJfQorfQorCitzdGF0aWMgaW50IGRvX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJaWYgKCFjbGspCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGNsay0+dXNhZ2VfY291bnQgPT0gMCkgeworCQlpZiAoY2xrLT5wY2xrKSB7CisJCQlyZXQgPSBkb19jbGtfZW5hYmxlKGNsay0+cGNsayk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQl9CisJCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZW5hYmxlKSB7CisJCQlyZXQgPSBjbGstPm9wcy0+ZW5hYmxlKGNsayk7CisJCQlpZiAocmV0KSB7CisJCQkJaWYgKGNsay0+cGNsaykKKwkJCQkJZG9fY2xrX2Rpc2FibGUoY2xrLT5wY2xrKTsKKwkJCQlnb3RvIGVycjsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBTaW5jZSB0aGUgY2xvY2sgaXMgZ29pbmcgdG8gYmUgdXNlZCBmb3IgdGhlIGZpcnN0CisJCSAqIHRpbWUgcGxlYXNlIHJlY2xhYworCQkgKi8KKwkJaWYgKGNsay0+cmVjYWxjKSB7CisJCQlyZXQgPSBjbGstPnJlY2FsYyhjbGspOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKwkJfQorCX0KKwljbGstPnVzYWdlX2NvdW50Kys7CitlcnI6CisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIGNsa19lbmFibGUgLSBpbmZvcm0gdGhlIHN5c3RlbSB3aGVuIHRoZSBjbG9jayBzb3VyY2Ugc2hvdWxkIGJlIHJ1bm5pbmcuCiAgKiBAY2xrOiBjbG9jayBzb3VyY2UKQEAgLTc4LDE3ICsxODMsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7Ci0JCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZW5hYmxlKQotCQkJcmV0ID0gY2xrLT5vcHMtPmVuYWJsZShjbGspOwotCX0KLQljbGstPnVzYWdlX2NvdW50Kys7CisJcmV0ID0gZG9fY2xrX2VuYWJsZShjbGspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKQEAgLTEwOSwxNyArMjA2LDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFjbGsgfHwgSVNfRVJSKGNsaykpCi0JCXJldHVybjsKLQotCVdBUk5fT04oY2xrLT51c2FnZV9jb3VudCA9PSAwKTsKLQogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWNsay0+dXNhZ2VfY291bnQtLTsKLQlpZiAoY2xrLT51c2FnZV9jb3VudCA9PSAwKSB7Ci0JCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+ZGlzYWJsZSkKLQkJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7Ci0JfQorCWRvX2Nsa19kaXNhYmxlKGNsayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOwpAQCAtMTUzLDE1ICsyNDEsMTQgQEAKIAlpbnQgaSwgZm91bmQgPSAwLCB2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSB8fCAhcGFyZW50IHx8IElTX0VSUihwYXJlbnQpKQorCWlmICghY2xrIHx8ICFwYXJlbnQpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmIChjbGstPnVzYWdlX2NvdW50KQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICghY2xrLT5wY2xrX3NlbCkKLQkJcmV0dXJuIC1FUEVSTTsKIAlpZiAoY2xrLT5wY2xrID09IHBhcmVudCkKIAkJcmV0dXJuIDA7CisJaWYgKCFjbGstPnBjbGtfc2VsKQorCQlyZXR1cm4gLUVQRVJNOwogCisJLyogY2hlY2sgaWYgcmVxdWVzdGVkIHBhcmVudCBpcyBpbiBjbGsgcGFyZW50IGxpc3QgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY2xrLT5wY2xrX3NlbC0+cGNsa19jb3VudDsgaSsrKSB7CiAJCWlmIChjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0ucGNsayA9PSBwYXJlbnQpIHsKIAkJCWZvdW5kID0gMTsKQEAgLTE3NiwyNSArMjYzLDU4IEBACiAJLyogcmVmbGVjdCBwYXJlbnQgY2hhbmdlIGluIGhhcmR3YXJlICovCiAJdmFsID0gcmVhZGwoY2xrLT5wY2xrX3NlbC0+cGNsa19zZWxfcmVnKTsKIAl2YWwgJj0gfihjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9tYXNrIDw8IGNsay0+cGNsa19zZWxfc2hpZnQpOwotCXZhbCB8PSBjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0ucGNsa19tYXNrIDw8IGNsay0+cGNsa19zZWxfc2hpZnQ7CisJdmFsIHw9IGNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXS5wY2xrX3ZhbCA8PCBjbGstPnBjbGtfc2VsX3NoaWZ0OwogCXdyaXRlbCh2YWwsIGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX3JlZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKIAogCS8qIHJlZmxlY3QgcGFyZW50IGNoYW5nZSBpbiBzb2Z0d2FyZSAqLwotCWNsay0+cmVjYWxjKGNsayk7Ci0JcHJvcGFnYXRlX3JhdGUoJmNsay0+Y2hpbGRyZW4pOworCWNsa19yZXBhcmVudChjbGssICZjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0pOworCisJcHJvcGFnYXRlX3JhdGUoY2xrLCAwKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOwogCisvKioKKyAqIGNsa19zZXRfcmF0ZSAtIHNldCB0aGUgY2xvY2sgcmF0ZSBmb3IgYSBjbG9jayBzb3VyY2UKKyAqIEBjbGs6IGNsb2NrIHNvdXJjZQorICogQHJhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZSBpbiBIegorICoKKyAqIFJldHVybnMgc3VjY2VzcyAoMCkgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChjbGstPnNldF9yYXRlKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbGstPnNldF9yYXRlKGNsaywgcmF0ZSk7CisJCWlmICghcmV0KQorCQkJLyogaWYgc3VjY2Vzc2Z1bCAtPiBwcm9wYWdhdGUgKi8KKwkJCXByb3BhZ2F0ZV9yYXRlKGNsaywgMCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJfSBlbHNlIGlmIChjbGstPnBjbGspIHsKKwkJdTMyIG11bHQgPSBjbGstPmRpdl9mYWN0b3IgPyBjbGstPmRpdl9mYWN0b3IgOiAxOworCQlyZXQgPSBjbGtfc2V0X3JhdGUoY2xrLT5wY2xrLCBtdWx0ICogcmF0ZSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKKwogLyogcmVnaXN0ZXJzIGNsb2NrIGluIHBsYXRmb3JtIGNsb2NrIGZyYW1ld29yayAqLwogdm9pZCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsa19sb29rdXAgKmNsKQogewotCXN0cnVjdCBjbGsgKmNsayA9IGNsLT5jbGs7CisJc3RydWN0IGNsayAqY2xrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNsayB8fCBJU19FUlIoY2xrKSkKKwlpZiAoIWNsIHx8ICFjbC0+Y2xrKQogCQlyZXR1cm47CisJY2xrID0gY2wtPmNsazsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogCkBAIC0yMDcsNzEgKzMyNywxNzMgQEAKIAkvKiByb290IGNsb2NrIGRvbid0IGhhdmUgYW55IHBhcmVudHMgKi8KIAlpZiAoIWNsay0+cGNsayAmJiAhY2xrLT5wY2xrX3NlbCkgewogCQlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLCAmcm9vdF9jbGtzKTsKLQkJLyogYWRkIGNsb2NrcyB3aXRoIG9ubHkgb25lIHBhcmVudCB0byBwYXJlbnQncyBjaGlsZHJlbiBsaXN0ICovCiAJfSBlbHNlIGlmIChjbGstPnBjbGsgJiYgIWNsay0+cGNsa19zZWwpIHsKKwkJLyogYWRkIGNsb2NrcyB3aXRoIG9ubHkgb25lIHBhcmVudCB0byBwYXJlbnQncyBjaGlsZHJlbiBsaXN0ICovCiAJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZjbGstPnBjbGstPmNoaWxkcmVuKTsKIAl9IGVsc2UgewotCQkvKiBhZGQgY2xvY2tzIHdpdGggPiAxIHBhcmVudCB0byAxc3QgcGFyZW50J3MgY2hpbGRyZW4gbGlzdCAqLwotCQlsaXN0X2FkZCgmY2xrLT5zaWJsaW5nLAotCQkJICZjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9bMF0ucGNsay0+Y2hpbGRyZW4pOworCQkvKiBjbG9ja3Mgd2l0aCBtb3JlIHRoYW4gb25lIHBhcmVudCAqLworCQlzdHJ1Y3QgcGNsa19pbmZvICpwY2xrX2luZm87CisKKwkJcGNsa19pbmZvID0gcGNsa19pbmZvX2dldChjbGspOworCQlpZiAoIXBjbGtfaW5mbykgeworCQkJcHJfZXJyKCJDTEtERVY6IGludmFsaWQgcGNsayBpbmZvIG9mIGNsayB3aXRoIgorCQkJCQkiICVzIGRldl9pZCBhbmQgJXMgY29uX2lkXG4iLAorCQkJCQljbC0+ZGV2X2lkLCBjbC0+Y29uX2lkKTsKKwkJfSBlbHNlIHsKKwkJCWNsay0+cGNsayA9IHBjbGtfaW5mby0+cGNsazsKKwkJCWxpc3RfYWRkKCZjbGstPnNpYmxpbmcsICZwY2xrX2luZm8tPnBjbGstPmNoaWxkcmVuKTsKKwkJfQogCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CiAKKwkvKiBkZWJ1Z2ZzIHNwZWNpZmljICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisJbGlzdF9hZGQoJmNsay0+bm9kZSwgJmNsb2Nrcyk7CisJY2xrLT5jbCA9IGNsOworI2VuZGlmCisKIAkvKiBhZGQgY2xvY2sgdG8gYXJtIGNsb2NrZGV2IGZyYW1ld29yayAqLwogCWNsa2Rldl9hZGQoY2wpOwogfQogCiAvKioKLSAqIHByb3BhZ2F0ZV9yYXRlIC0gcmVjYWxjdWxhdGUgYW5kIHByb3BhZ2F0ZSBhbGwgY2xvY2tzIGluIGxpc3QgaGVhZAorICogcHJvcGFnYXRlX3JhdGUgLSByZWNhbGN1bGF0ZSBhbmQgcHJvcGFnYXRlIGFsbCBjbG9ja3MgdG8gY2hpbGRyZW4KKyAqIEBwY2xrOiBwYXJlbnQgY2xvY2sgcmVxdWlyZWQgdG8gYmUgcHJvcG9nYXRlZAorICogQG9uX2luaXQ6IGZsYWcgZm9yIGVuYWJsaW5nIGNsb2NrcyB3aGljaCBhcmUgRU5BQkxFRF9PTl9JTklULgogICoKLSAqIFJlY2FsY3VsYXRlcyBhbGwgcm9vdCBjbG9ja3MgaW4gbGlzdCBoZWFkLCB3aGljaCBpZiB0aGUgY2xvY2sncyAucmVjYWxjIGlzCi0gKiBzZXQgY29ycmVjdGx5LCBzaG91bGQgYWxzbyBwcm9wYWdhdGUgdGhlaXIgcmF0ZXMuCisgKiBSZWNhbGN1bGF0ZXMgYWxsIGNoaWxkcmVuIGNsb2NrcwogICovCi1zdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaGVhZCkKK3ZvaWQgcHJvcGFnYXRlX3JhdGUoc3RydWN0IGNsayAqcGNsaywgaW50IG9uX2luaXQpCiB7Ci0Jc3RydWN0IGNsayAqY2xrcCwgKl90ZW1wOworCXN0cnVjdCBjbGsgKmNsaywgKl90ZW1wOworCWludCByZXQgPSAwOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNsa3AsIF90ZW1wLCBsaGVhZCwgc2libGluZykgewotCQlpZiAoY2xrcC0+cmVjYWxjKQotCQkJY2xrcC0+cmVjYWxjKGNsa3ApOwotCQlwcm9wYWdhdGVfcmF0ZSgmY2xrcC0+Y2hpbGRyZW4pOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjbGssIF90ZW1wLCAmcGNsay0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJaWYgKGNsay0+cmVjYWxjKSB7CisJCQlyZXQgPSBjbGstPnJlY2FsYyhjbGspOworCQkJLyoKKwkJCSAqIHJlY2FsYyB3aWxsIHJldHVybiBlcnJvciBpZiBjbGsgb3V0IGlzIG5vdCBwcm9ncmFtbWVkCisJCQkgKiBJbiB0aGlzIGNhc2UgY29uZmlndXJlIGRlZmF1bHQgcmF0ZS4KKwkJCSAqLworCQkJaWYgKHJldCAmJiBjbGstPnNldF9yYXRlKQorCQkJCWNsay0+c2V0X3JhdGUoY2xrLCAwKTsKKwkJfQorCQlwcm9wYWdhdGVfcmF0ZShjbGssIG9uX2luaXQpOworCisJCWlmICghb25faW5pdCkKKwkJCWNvbnRpbnVlOworCisJCS8qIEVuYWJsZSBjbGtzIGVuYWJsZWQgb24gaW5pdCwgaW4gc29mdHdhcmUgdmlldyAqLworCQlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRURfT05fSU5JVCkKKwkJCWRvX2Nsa19lbmFibGUoY2xrKTsKIAl9CiB9CiAKLS8qIHJldHVybnMgY3VycmVudCBwcm9ncmFtbWVkIGNsb2NrcyBjbG9jayBpbmZvIHN0cnVjdHVyZSAqLwotc3RhdGljIHN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mb19nZXQoc3RydWN0IGNsayAqY2xrKQorLyoqCisgKiByb3VuZF9yYXRlX2luZGV4IC0gcmV0dXJuIGNsb3Nlc3QgcHJvZ3JhbW1hYmxlIHJhdGUgaW5kZXggaW4gcmF0ZV9jb25maWcgdGJsCisgKiBAY2xrOiBwdHIgdG8gY2xvY2sgc3RydWN0dXJlCisgKiBAZHJhdGU6IGRlc2lyZWQgcmF0ZQorICogQHJhdGU6IGZpbmFsIHJhdGUgd2lsbCBiZSByZXR1cm5lZCBpbiB0aGlzIHZhcmlhYmxlIG9ubHkuCisgKgorICogRmluZHMgaW5kZXggaW4gcmF0ZV9jb25maWcgZm9yIGhpZ2hlc3QgY2xrIHJhdGUgd2hpY2ggaXMgbGVzcyB0aGFuCisgKiByZXF1ZXN0ZWQgcmF0ZS4gSWYgdGhlcmUgaXMgbm8gY2xrIHJhdGUgbGVzc2VyIHRoYW4gcmVxdWVzdGVkIHJhdGUgdGhlbgorICogLUVJTlZBTCBpcyByZXR1cm5lZC4gVGhpcyByb3V0aW5lIGFzc3VtZXMgdGhhdCByYXRlX2NvbmZpZyBpcyB3cml0dGVuCisgKiBpbiBpbmNyZW1lbnRpbmcgb3JkZXIgb2YgY2xrIHJhdGVzLgorICogSWYgZHJhdGUgcGFzc2VkIGlzIHplcm8gdGhlbiBkZWZhdWx0IHJhdGUgaXMgcHJvZ3JhbW1lZC4KKyAqLworc3RhdGljIGludAorcm91bmRfcmF0ZV9pbmRleChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZHJhdGUsIHVuc2lnbmVkIGxvbmcgKnJhdGUpCiB7Ci0JdW5zaWduZWQgaW50IG1hc2ssIGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgcGNsa19pbmZvICppbmZvID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIHRtcCA9IDAsIHByZXZfcmF0ZSA9IDA7CisJaW50IGluZGV4OwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JbWFzayA9IChyZWFkbChjbGstPnBjbGtfc2VsLT5wY2xrX3NlbF9yZWcpID4+IGNsay0+cGNsa19zZWxfc2hpZnQpCi0JCQkmIGNsay0+cGNsa19zZWwtPnBjbGtfc2VsX21hc2s7CisJaWYgKCFjbGstPmNhbGNfcmF0ZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgY2xrLT5wY2xrX3NlbC0+cGNsa19jb3VudDsgaSsrKSB7Ci0JCWlmIChjbGstPnBjbGtfc2VsLT5wY2xrX2luZm9baV0ucGNsa19tYXNrID09IG1hc2spCi0JCQlpbmZvID0gJmNsay0+cGNsa19zZWwtPnBjbGtfaW5mb1tpXTsKKwlpZiAoIWRyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogVGhpcyBsb29wcyBlbmRzIG9uIHR3byBjb25kaXRpb25zOgorCSAqIC0gYXMgc29vbiBhcyBjbGsgaXMgZm91bmQgd2l0aCByYXRlIGdyZWF0ZXIgdGhhbiByZXF1ZXN0ZWQgcmF0ZS4KKwkgKiAtIGlmIGFsbCBjbGtzIGluIHJhdGVfY29uZmlnIGFyZSBzbWFsbGVyIHRoYW4gcmVxdWVzdGVkIHJhdGUuCisJICovCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY2xrLT5yYXRlX2NvbmZpZy5jb3VudDsgaW5kZXgrKykgeworCQlwcmV2X3JhdGUgPSB0bXA7CisJCXRtcCA9IGNsay0+Y2FsY19yYXRlKGNsaywgaW5kZXgpOworCQlpZiAoZHJhdGUgPCB0bXApIHsKKwkJCWluZGV4LS07CisJCQlicmVhazsKKwkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCS8qIHJldHVybiBpZiBjYW4ndCBmaW5kIHN1aXRhYmxlIGNsb2NrICovCisJaWYgKGluZGV4IDwgMCkgeworCQlpbmRleCA9IC1FSU5WQUw7CisJCSpyYXRlID0gMDsKKwl9IGVsc2UgaWYgKGluZGV4ID09IGNsay0+cmF0ZV9jb25maWcuY291bnQpIHsKKwkJLyogcHJvZ3JhbSB3aXRoIGhpZ2hlc3QgY2xrIHJhdGUgcG9zc2libGUgKi8KKwkJaW5kZXggPSBjbGstPnJhdGVfY29uZmlnLmNvdW50IC0gMTsKKwkJKnJhdGUgPSB0bXA7CisJfSBlbHNlCisJCSpyYXRlID0gcHJldl9yYXRlOwogCi0JcmV0dXJuIGluZm87CisJcmV0dXJuIGluZGV4OwogfQogCisvKioKKyAqIGNsa19yb3VuZF9yYXRlIC0gYWRqdXN0IGEgcmF0ZSB0byB0aGUgZXhhY3QgcmF0ZSBhIGNsb2NrIGNhbiBwcm92aWRlCisgKiBAY2xrOiBjbG9jayBzb3VyY2UKKyAqIEByYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUgaW4gSHoKKyAqCisgKiBSZXR1cm5zIHJvdW5kZWQgY2xvY2sgcmF0ZSBpbiBIeiwgb3IgbmVnYXRpdmUgZXJybm8uCisgKi8KK2xvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRyYXRlKQoreworCWxvbmcgcmF0ZSA9IDA7CisJaW50IGluZGV4OworCisJLyoKKwkgKiBwcm9wYWdhdGUgY2FsbCB0byBwYXJlbnQgd2hvIHN1cHBvcnRzIGNhbGNfcmF0ZS4gU2ltaWxhciBhcHByb2FjaCBpcworCSAqIHVzZWQgaW4gY2xrX3NldF9yYXRlLgorCSAqLworCWlmICghY2xrLT5jYWxjX3JhdGUpIHsKKwkJdTMyIG11bHQ7CisJCWlmICghY2xrLT5wY2xrKQorCQkJcmV0dXJuIGNsay0+cmF0ZTsKKworCQltdWx0ID0gY2xrLT5kaXZfZmFjdG9yID8gY2xrLT5kaXZfZmFjdG9yIDogMTsKKwkJcmV0dXJuIGNsa19yb3VuZF9yYXRlKGNsay0+cGNsaywgbXVsdCAqIGRyYXRlKSAvIG11bHQ7CisJfQorCisJaW5kZXggPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZHJhdGUsICZyYXRlKTsKKwlpZiAoaW5kZXggPj0gMCkKKwkJcmV0dXJuIHJhdGU7CisJZWxzZQorCQlyZXR1cm4gaW5kZXg7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworLypBbGwgYmVsb3cgZnVuY3Rpb25zIGFyZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQgKi8KKwogLyoKLSAqIFNldCBwY2xrIGFzIGNjbGsncyBwYXJlbnQgYW5kIGFkZCBjbG9jayBzaWJsaW5nIG5vZGUgdG8gY3VycmVudCBwYXJlbnRzCi0gKiBjaGlsZHJlbiBsaXN0CisgKiBDYWxjdWxhdGVzIHBsbCBjbGsgcmF0ZSBmb3Igc3BlY2lmaWMgdmFsdWUgb2YgbW9kZSwgbSwgbiBhbmQgcAorICoKKyAqIEluIG5vcm1hbCBtb2RlCisgKiByYXRlID0gKDIgKiBNWzE1OjhdICogRmluKS8oTiAqIDJeUCkKKyAqCisgKiBJbiBEaXRoZXJlZCBtb2RlCisgKiByYXRlID0gKDIgKiBNWzE1OjBdICogRmluKS8oMjU2ICogTiAqIDJeUCkKICAqLwotc3RhdGljIHZvaWQgY2hhbmdlX3BhcmVudChzdHJ1Y3QgY2xrICpjY2xrLCBzdHJ1Y3QgY2xrICpwY2xrKQordW5zaWduZWQgbG9uZyBwbGxfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBwbGxfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJdW5zaWduZWQgaW50IG1vZGU7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmY2Nsay0+c2libGluZyk7Ci0JbGlzdF9hZGQoJmNjbGstPnNpYmxpbmcsICZwY2xrLT5jaGlsZHJlbik7Ci0KLQljY2xrLT5wY2xrID0gcGNsazsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCW1vZGUgPSB0YmxzW2luZGV4XS5tb2RlID8gMjU2IDogMTsKKwlyZXR1cm4gKCgoMiAqIHJhdGUgLyAxMDAwMCkgKiB0YmxzW2luZGV4XS5tKSAvCisJCQkobW9kZSAqIHRibHNbaW5kZXhdLm4gKiAoMSA8PCB0YmxzW2luZGV4XS5wKSkpICogMTAwMDA7CiB9CiAKIC8qCkBAIC0yODMsNDcgKzUwNSwxNDYgQEAKICAqIEluIERpdGhlcmVkIG1vZGUKICAqIHJhdGUgPSAoMiAqIE1bMTU6MF0gKiBGaW4pLygyNTYgKiBOICogMl5QKQogICovCi12b2lkIHBsbDFfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitpbnQgcGxsX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewogCXN0cnVjdCBwbGxfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IG51bSA9IDIsIGRlbiA9IDAsIHZhbCwgbW9kZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCW1vZGUgPSAocmVhZGwoY29uZmlnLT5tb2RlX3JlZykgPj4gUExMX01PREVfU0hJRlQpICYKLQkJUExMX01PREVfTUFTSzsKKwltb2RlID0gKHJlYWRsKGNvbmZpZy0+bW9kZV9yZWcpID4+IGNvbmZpZy0+bWFza3MtPm1vZGVfc2hpZnQpICYKKwkJY29uZmlnLT5tYXNrcy0+bW9kZV9tYXNrOwogCiAJdmFsID0gcmVhZGwoY29uZmlnLT5jZmdfcmVnKTsKIAkvKiBjYWxjdWxhdGUgZGVub21pbmF0b3IgKi8KLQlkZW4gPSAodmFsID4+IFBMTF9ESVZfUF9TSElGVCkgJiBQTExfRElWX1BfTUFTSzsKKwlkZW4gPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPmRpdl9wX3NoaWZ0KSAmIGNvbmZpZy0+bWFza3MtPmRpdl9wX21hc2s7CiAJZGVuID0gMSA8PCBkZW47Ci0JZGVuICo9ICh2YWwgPj4gUExMX0RJVl9OX1NISUZUKSAmIFBMTF9ESVZfTl9NQVNLOworCWRlbiAqPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPmRpdl9uX3NoaWZ0KSAmIGNvbmZpZy0+bWFza3MtPmRpdl9uX21hc2s7CiAKIAkvKiBjYWxjdWxhdGUgbnVtZXJhdG9yICYgZGVub21pbmF0b3IgKi8KIAlpZiAoIW1vZGUpIHsKIAkJLyogTm9ybWFsIG1vZGUgKi8KLQkJbnVtICo9ICh2YWwgPj4gUExMX05PUk1fRkRCS19NX1NISUZUKSAmIFBMTF9OT1JNX0ZEQktfTV9NQVNLOworCQludW0gKj0gKHZhbCA+PiBjb25maWctPm1hc2tzLT5ub3JtX2ZkYmtfbV9zaGlmdCkgJgorCQkJY29uZmlnLT5tYXNrcy0+bm9ybV9mZGJrX21fbWFzazsKIAl9IGVsc2UgewogCQkvKiBEaXRoZXJlZCBtb2RlICovCi0JCW51bSAqPSAodmFsID4+IFBMTF9ESVRIX0ZEQktfTV9TSElGVCkgJiBQTExfRElUSF9GREJLX01fTUFTSzsKKwkJbnVtICo9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZGl0aF9mZGJrX21fc2hpZnQpICYKKwkJCWNvbmZpZy0+bWFza3MtPmRpdGhfZmRia19tX21hc2s7CiAJCWRlbiAqPSAyNTY7CiAJfQogCisJaWYgKCFkZW4pCisJCXJldHVybiAtRUlOVkFMOworCiAJY2xrLT5yYXRlID0gKCgoY2xrLT5wY2xrLT5yYXRlLzEwMDAwKSAqIG51bSkgLyBkZW4pICogMTAwMDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgcGxsCisgKi8KK2ludCBwbGxfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IHBsbF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKwlzdHJ1Y3QgcGxsX2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgdmFsLCByYXRlOworCWludCBpOworCisJaSA9IHJvdW5kX3JhdGVfaW5kZXgoY2xrLCBkZXNpcmVkX3JhdGUsICZyYXRlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5tb2RlX3JlZykgJgorCQl+KGNvbmZpZy0+bWFza3MtPm1vZGVfbWFzayA8PCBjb25maWctPm1hc2tzLT5tb2RlX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ubW9kZSAmIGNvbmZpZy0+bWFza3MtPm1vZGVfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+bW9kZV9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPm1vZGVfcmVnKTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+Y2ZnX3JlZykgJgorCQl+KGNvbmZpZy0+bWFza3MtPmRpdl9wX21hc2sgPDwgY29uZmlnLT5tYXNrcy0+ZGl2X3Bfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS5wICYgY29uZmlnLT5tYXNrcy0+ZGl2X3BfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+ZGl2X3Bfc2hpZnQ7CisJdmFsICY9IH4oY29uZmlnLT5tYXNrcy0+ZGl2X25fbWFzayA8PCBjb25maWctPm1hc2tzLT5kaXZfbl9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLm4gJiBjb25maWctPm1hc2tzLT5kaXZfbl9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5kaXZfbl9zaGlmdDsKKwl2YWwgJj0gfihjb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9zaGlmdCk7CisJaWYgKHRibHNbaV0ubW9kZSkKKwkJdmFsIHw9ICh0YmxzW2ldLm0gJiBjb25maWctPm1hc2tzLT5kaXRoX2ZkYmtfbV9tYXNrKSA8PAorCQkJY29uZmlnLT5tYXNrcy0+ZGl0aF9mZGJrX21fc2hpZnQ7CisJZWxzZQorCQl2YWwgfD0gKHRibHNbaV0ubSAmIGNvbmZpZy0+bWFza3MtPm5vcm1fZmRia19tX21hc2spIDw8CisJCQljb25maWctPm1hc2tzLT5ub3JtX2ZkYmtfbV9zaGlmdDsKKworCXdyaXRlbCh2YWwsIGNvbmZpZy0+Y2ZnX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxjdWxhdGVzIGFoYiwgYXBiIGNsayByYXRlIGZvciBzcGVjaWZpYyB2YWx1ZSBvZiBkaXYKKyAqLwordW5zaWduZWQgbG9uZyBidXNfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KQoreworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsay0+cGNsay0+cmF0ZTsKKwlzdHJ1Y3QgYnVzX3JhdGVfdGJsICp0YmxzID0gY2xrLT5yYXRlX2NvbmZpZy50YmxzOworCisJcmV0dXJuIHJhdGUgLyAodGJsc1tpbmRleF0uZGl2ICsgMSk7CiB9CiAKIC8qIGNhbGN1bGF0ZXMgY3VycmVudCBwcm9ncmFtbWVkIHJhdGUgb2YgYWhiIG9yIGFwYiBidXMgKi8KLXZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoraW50IGJ1c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgYnVzX2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBkaXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWRpdiA9ICgocmVhZGwoY29uZmlnLT5yZWcpID4+IGNvbmZpZy0+c2hpZnQpICYgY29uZmlnLT5tYXNrKSArIDE7CisJZGl2ID0gKChyZWFkbChjb25maWctPnJlZykgPj4gY29uZmlnLT5tYXNrcy0+c2hpZnQpICYKKwkJCWNvbmZpZy0+bWFza3MtPm1hc2spICsgMTsKKworCWlmICghZGl2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWNsay0+cmF0ZSA9ICh1bnNpZ25lZCBsb25nKWNsay0+cGNsay0+cmF0ZSAvIGRpdjsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCisvKiBDb25maWd1cmVzIG5ldyBjbG9jayByYXRlIG9mIEFIQiBPUiBBUEIgYnVzICovCitpbnQgYnVzX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKQoreworCXN0cnVjdCBidXNfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGJ1c19jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+cmVnKSAmCisJCX4oY29uZmlnLT5tYXNrcy0+bWFzayA8PCBjb25maWctPm1hc2tzLT5zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLmRpdiAmIGNvbmZpZy0+bWFza3MtPm1hc2spIDw8IGNvbmZpZy0+bWFza3MtPnNoaWZ0OworCXdyaXRlbCh2YWwsIGNvbmZpZy0+cmVnKTsKKworCWNsay0+cmF0ZSA9IHJhdGU7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGdpdmVzIHJhdGUgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgZXEsIHggYW5kIHkKKyAqCisgKiBGb3V0IGZyb20gc3ludGhlc2l6ZXIgY2FuIGJlIGdpdmVuIGZyb20gdHdvIGVxdWF0aW9uczoKKyAqIEZvdXQxID0gKEZpbiAqIFgvWSkvMgkJRVExCisgKiBGb3V0MiA9IEZpbiAqIFgvWQkJCUVRMgorICovCit1bnNpZ25lZCBsb25nIGF1eF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBhdXhfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJdTggZXEgPSB0YmxzW2luZGV4XS5lcSA/IDEgOiAyOworCisJcmV0dXJuICgoKHJhdGUvMTAwMDApICogdGJsc1tpbmRleF0ueHNjYWxlKSAvCisJCQkodGJsc1tpbmRleF0ueXNjYWxlICogZXEpKSAqIDEwMDAwOwogfQogCiAvKgpAQCAtMzM2LDQ0ICs2NTcsNzYgQEAKICAqCiAgKiBTZWxlY3Rpb24gb2YgZXFuIDEgb3IgMiBpcyBwcm9ncmFtbWVkIGluIHJlZ2lzdGVyCiAgKi8KLXZvaWQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoraW50IGF1eF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKIHsKIAlzdHJ1Y3QgYXV4X2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBwY2xrX2luZm8gKnBjbGtfaW5mbyA9IE5VTEw7CiAJdW5zaWduZWQgaW50IG51bSA9IDEsIGRlbiA9IDEsIHZhbCwgZXFuOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBnZXQgY3VycmVudCBwcm9ncmFtbWVkIHBhcmVudCAqLwotCXBjbGtfaW5mbyA9IHBjbGtfaW5mb19nZXQoY2xrKTsKLQlpZiAoIXBjbGtfaW5mbykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJY2xrLT5wY2xrID0gTlVMTDsKLQkJY2xrLT5yYXRlID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZyk7CiAKLQljaGFuZ2VfcGFyZW50KGNsaywgcGNsa19pbmZvLT5wY2xrKTsKKwllcW4gPSAodmFsID4+IGNvbmZpZy0+bWFza3MtPmVxX3NlbF9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5lcV9zZWxfbWFzazsKKwlpZiAoZXFuID09IGNvbmZpZy0+bWFza3MtPmVxMV9tYXNrKQorCQlkZW4gKj0gMjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWlmIChwY2xrX2luZm8tPnNjYWxhYmxlKSB7Ci0JCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKTsKKwkvKiBjYWxjdWxhdGUgbnVtZXJhdG9yICovCisJbnVtID0gKHZhbCA+PiBjb25maWctPm1hc2tzLT54c2NhbGVfc2VsX3NoaWZ0KSAmCisJCWNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfbWFzazsKIAotCQllcW4gPSAodmFsID4+IEFVWF9FUV9TRUxfU0hJRlQpICYgQVVYX0VRX1NFTF9NQVNLOwotCQlpZiAoZXFuID09IEFVWF9FUTFfU0VMKQotCQkJZGVuICo9IDI7CisJLyogY2FsY3VsYXRlIGRlbm9taW5hdG9yICovCisJZGVuICo9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+eXNjYWxlX3NlbF9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT55c2NhbGVfc2VsX21hc2s7CiAKLQkJLyogY2FsY3VsYXRlIG51bWVyYXRvciAqLwotCQludW0gPSAodmFsID4+IEFVWF9YU0NBTEVfU0hJRlQpICYgQVVYX1hTQ0FMRV9NQVNLOworCWlmICghZGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkvKiBjYWxjdWxhdGUgZGVub21pbmF0b3IgKi8KLQkJZGVuICo9ICh2YWwgPj4gQVVYX1lTQ0FMRV9TSElGVCkgJiBBVVhfWVNDQUxFX01BU0s7Ci0JCXZhbCA9ICgoKGNsay0+cGNsay0+cmF0ZS8xMDAwMCkgKiBudW0pIC8gZGVuKSAqIDEwMDAwOwotCX0gZWxzZQotCQl2YWwgPSBjbGstPnBjbGstPnJhdGU7CisJY2xrLT5yYXRlID0gKCgoY2xrLT5wY2xrLT5yYXRlLzEwMDAwKSAqIG51bSkgLyBkZW4pICogMTAwMDA7CisJcmV0dXJuIDA7Cit9CiAKLQljbGstPnJhdGUgPSB2YWw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKy8qIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgYXV4aWxpYXJ5IHN5bnRoZXNpemVycyB1c2VkIGJ5OiBVQVJULCBGSVJEQSovCitpbnQgYXV4X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKQoreworCXN0cnVjdCBhdXhfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGF1eF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKSAmCisJCX4oY29uZmlnLT5tYXNrcy0+ZXFfc2VsX21hc2sgPDwgY29uZmlnLT5tYXNrcy0+ZXFfc2VsX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0uZXEgJiBjb25maWctPm1hc2tzLT5lcV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+ZXFfc2VsX3NoaWZ0OworCXZhbCAmPSB+KGNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLnhzY2FsZSAmIGNvbmZpZy0+bWFza3MtPnhzY2FsZV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+eHNjYWxlX3NlbF9zaGlmdDsKKwl2YWwgJj0gfihjb25maWctPm1hc2tzLT55c2NhbGVfc2VsX21hc2sgPDwKKwkJCWNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfc2hpZnQpOworCXZhbCB8PSAodGJsc1tpXS55c2NhbGUgJiBjb25maWctPm1hc2tzLT55c2NhbGVfc2VsX21hc2spIDw8CisJCWNvbmZpZy0+bWFza3MtPnlzY2FsZV9zZWxfc2hpZnQ7CisJd3JpdGVsKHZhbCwgY29uZmlnLT5zeW50aF9yZWcpOworCisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2FsY3VsYXRlcyBncHQgY2xrIHJhdGUgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgbXNjYWxlIGFuZCBuc2NhbGUKKyAqCisgKiBGb3V0PSBGaW4vKCgyIF4gKE4rMSkpICogKE0rMSkpCisgKi8KK3Vuc2lnbmVkIGxvbmcgZ3B0X2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCkKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGstPnBjbGstPnJhdGU7CisJc3RydWN0IGdwdF9yYXRlX3RibCAqdGJscyA9IGNsay0+cmF0ZV9jb25maWcudGJsczsKKworCXJldHVybiByYXRlIC8gKCgxIDw8ICh0YmxzW2luZGV4XS5uc2NhbGUgKyAxKSkgKgorCQkJKHRibHNbaW5kZXhdLm1zY2FsZSArIDEpKTsKIH0KIAogLyoKQEAgLTM4MSw0NiArNzM0LDE0MiBAQAogICogRm91dCBmcm9tIHN5bnRoZXNpemVyIGNhbiBiZSBnaXZlbiBmcm9tIGJlbG93IGVxdWF0aW9uczoKICAqIEZvdXQ9IEZpbi8oKDIgXiAoTisxKSkgKiAoTSsxKSkKICAqLwotdm9pZCBncHRfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCitpbnQgZ3B0X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQogewotCXN0cnVjdCBhdXhfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvID0gTlVMTDsKKwlzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgKmNvbmZpZyA9IGNsay0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBkaXYgPSAxLCB2YWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXBjbGtfaW5mbyA9IHBjbGtfaW5mb19nZXQoY2xrKTsKLQlpZiAoIXBjbGtfaW5mbykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJY2xrLT5wY2xrID0gTlVMTDsKLQkJY2xrLT5yYXRlID0gMDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOwotCX0KKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZyk7CisJZGl2ICs9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+bXNjYWxlX3NlbF9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX21hc2s7CisJZGl2ICo9IDEgPDwgKCgodmFsID4+IGNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfc2hpZnQpICYKKwkJCQljb25maWctPm1hc2tzLT5uc2NhbGVfc2VsX21hc2spICsgMSk7CiAKLQljaGFuZ2VfcGFyZW50KGNsaywgcGNsa19pbmZvLT5wY2xrKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwotCWlmIChwY2xrX2luZm8tPnNjYWxhYmxlKSB7Ci0JCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKTsKLQkJZGl2ICs9ICh2YWwgPj4gR1BUX01TQ0FMRV9TSElGVCkgJiBHUFRfTVNDQUxFX01BU0s7Ci0JCWRpdiAqPSAxIDw8ICgoKHZhbCA+PiBHUFRfTlNDQUxFX1NISUZUKSAmIEdQVF9OU0NBTEVfTUFTSykgKyAxKTsKLQl9CisJaWYgKCFkaXYpCisJCXJldHVybiAtRUlOVkFMOwogCiAJY2xrLT5yYXRlID0gKHVuc2lnbmVkIGxvbmcpY2xrLT5wY2xrLT5yYXRlIC8gZGl2OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENvbmZpZ3VyZXMgbmV3IGNsb2NrIHJhdGUgb2YgZ3B0aWxpYXJ5IHN5bnRoZXNpemVycyB1c2VkIGJ5OiBVQVJULCBGSVJEQSovCitpbnQgZ3B0X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKQoreworCXN0cnVjdCBncHRfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGdwdF9jbGtfY29uZmlnICpjb25maWcgPSBjbGstPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbCwgcmF0ZTsKKwlpbnQgaTsKKworCWkgPSByb3VuZF9yYXRlX2luZGV4KGNsaywgZGVzaXJlZF9yYXRlLCAmcmF0ZSk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gaTsKKworCXZhbCA9IHJlYWRsKGNvbmZpZy0+c3ludGhfcmVnKSAmIH4oY29uZmlnLT5tYXNrcy0+bXNjYWxlX3NlbF9tYXNrIDw8CisJCQljb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX3NoaWZ0KTsKKwl2YWwgfD0gKHRibHNbaV0ubXNjYWxlICYgY29uZmlnLT5tYXNrcy0+bXNjYWxlX3NlbF9tYXNrKSA8PAorCQljb25maWctPm1hc2tzLT5tc2NhbGVfc2VsX3NoaWZ0OworCXZhbCAmPSB+KGNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLm5zY2FsZSAmIGNvbmZpZy0+bWFza3MtPm5zY2FsZV9zZWxfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+bnNjYWxlX3NlbF9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPnN5bnRoX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7CiB9CiAKIC8qCi0gKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSBzYW1lIHZhbHVlIGFzIHRoZSBwYXJlbnQgY2xvY2sgZGl2aWRlZCBieSBhCisgKiBDYWxjdWxhdGVzIGNsY2QgY2xrIHJhdGUgZm9yIGRpZmZlcmVudCB2YWx1ZXMgb2YgZGl2CisgKgorICogRm91dCBmcm9tIHN5bnRoZXNpemVyIGNhbiBiZSBnaXZlbiBmcm9tIGJlbG93IGVxdWF0aW9uOgorICogRm91dD0gRmluLzIqZGl2IChkaXZpc2lvbiBmYWN0b3IpCisgKiBkaXYgaXMgMTcgYml0czotCisgKgkwLTEzIChmcmFjdGlvbmFsIHBhcnQpCisgKgkxNC0xNiAoaW50ZWdlciBwYXJ0KQorICogVG8gY2FsY3VsYXRlIEZvdXQgd2UgbGVmdCBzaGlmdCB2YWwgYnkgMTQgYml0cyBhbmQgZGl2aWRlIEZpbiBieQorICogY29tcGxldGUgZGl2IChpbmNsdWRpbmcgZnJhY3Rpb25hbCBwYXJ0KSBhbmQgdGhlbiByaWdodCBzaGlmdCB0aGUKKyAqIHJlc3VsdCBieSAxNCBwbGFjZXMuCisgKi8KK3Vuc2lnbmVkIGxvbmcgY2xjZF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrLT5wY2xrLT5yYXRlOworCXN0cnVjdCBjbGNkX3JhdGVfdGJsICp0YmxzID0gY2xrLT5yYXRlX2NvbmZpZy50YmxzOworCisJcmF0ZSAvPSAxMDAwOworCXJhdGUgPDw9IDEyOworCXJhdGUgLz0gKDIgKiB0YmxzW2luZGV4XS5kaXYpOworCXJhdGUgPj49IDEyOworCXJhdGUgKj0gMTAwMDsKKworCXJldHVybiByYXRlOworfQorCisvKgorICogY2FsY3VsYXRlcyBjdXJyZW50IHByb2dyYW1tZWQgcmF0ZSBvZiBjbGNkIHN5bnRoZXNpemVyCisgKiBGb3V0IGZyb20gc3ludGhlc2l6ZXIgY2FuIGJlIGdpdmVuIGZyb20gYmVsb3cgZXF1YXRpb246CisgKiBGb3V0PSBGaW4vMipkaXYgKGRpdmlzaW9uIGZhY3RvcikKKyAqIGRpdiBpcyAxNyBiaXRzOi0KKyAqCTAtMTMgKGZyYWN0aW9uYWwgcGFydCkKKyAqCTE0LTE2IChpbnRlZ2VyIHBhcnQpCisgKiBUbyBjYWxjdWxhdGUgRm91dCB3ZSBsZWZ0IHNoaWZ0IHZhbCBieSAxNCBiaXRzIGFuZCBkaXZpZGUgRmluIGJ5CisgKiBjb21wbGV0ZSBkaXYgKGluY2x1ZGluZyBmcmFjdGlvbmFsIHBhcnQpIGFuZCB0aGVuIHJpZ2h0IHNoaWZ0IHRoZQorICogcmVzdWx0IGJ5IDE0IHBsYWNlcy4KKyAqLworaW50IGNsY2RfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGNsY2RfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IGRpdiA9IDE7CisJdW5zaWduZWQgbG9uZyBwcmF0ZTsKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJdmFsID0gcmVhZGwoY29uZmlnLT5zeW50aF9yZWcpOworCWRpdiA9ICh2YWwgPj4gY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9zaGlmdCkgJgorCQljb25maWctPm1hc2tzLT5kaXZfZmFjdG9yX21hc2s7CisKKwlpZiAoIWRpdikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcmF0ZSA9IGNsay0+cGNsay0+cmF0ZSAvIDEwMDA7IC8qIGZpcnN0IGxldmVsIGRpdmlzaW9uLCBtYWtlIGl0IEtIeiAqLworCisJY2xrLT5yYXRlID0gKCgodW5zaWduZWQgbG9uZylwcmF0ZSA8PCAxMikgLyAoMiAqIGRpdikpID4+IDEyOworCWNsay0+cmF0ZSAqPSAxMDAwOworCXJldHVybiAwOworfQorCisvKiBDb25maWd1cmVzIG5ldyBjbG9jayByYXRlIG9mIGF1eGlsaWFyeSBzeW50aGVzaXplcnMgdXNlZCBieTogVUFSVCwgRklSREEqLworaW50IGNsY2RfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpCit7CisJc3RydWN0IGNsY2RfcmF0ZV90YmwgKnRibHMgPSBjbGstPnJhdGVfY29uZmlnLnRibHM7CisJc3RydWN0IGNsY2RfY2xrX2NvbmZpZyAqY29uZmlnID0gY2xrLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWwsIHJhdGU7CisJaW50IGk7CisKKwlpID0gcm91bmRfcmF0ZV9pbmRleChjbGssIGRlc2lyZWRfcmF0ZSwgJnJhdGUpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGk7CisKKwl2YWwgPSByZWFkbChjb25maWctPnN5bnRoX3JlZykgJiB+KGNvbmZpZy0+bWFza3MtPmRpdl9mYWN0b3JfbWFzayA8PAorCQkJY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9zaGlmdCk7CisJdmFsIHw9ICh0YmxzW2ldLmRpdiAmIGNvbmZpZy0+bWFza3MtPmRpdl9mYWN0b3JfbWFzaykgPDwKKwkJY29uZmlnLT5tYXNrcy0+ZGl2X2ZhY3Rvcl9zaGlmdDsKKwl3cml0ZWwodmFsLCBjb25maWctPnN5bnRoX3JlZyk7CisKKwljbGstPnJhdGUgPSByYXRlOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVc2VkIGZvciBjbG9ja3MgdGhhdCBhbHdheXMgaGF2ZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrIGRpdmlkZWQgYnkgYQogICogZml4ZWQgZGl2aXNvcgogICovCi12b2lkIGZvbGxvd19wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoraW50IGZvbGxvd19wYXJlbnQoc3RydWN0IGNsayAqY2xrKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGRpdl9mYWN0b3IgPSAoY2xrLT5kaXZfZmFjdG9yIDwgMSkgPyAxIDogY2xrLT5kaXZfZmFjdG9yOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7Ci0JY2xrLT5yYXRlID0gY2xrLT5wY2xrLT5yYXRlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2Nrc19sb2NrLCBmbGFncyk7CisJY2xrLT5yYXRlID0gY2xrLT5wY2xrLT5yYXRlL2Rpdl9mYWN0b3I7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNDMxLDUgKzg4MCwxMjQgQEAKICAqLwogdm9pZCByZWNhbGNfcm9vdF9jbG9ja3Modm9pZCkKIHsKLQlwcm9wYWdhdGVfcmF0ZSgmcm9vdF9jbGtzKTsKKwlzdHJ1Y3QgY2xrICpwY2xrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBjbGssICZyb290X2Nsa3MsIHNpYmxpbmcpIHsKKwkJaWYgKHBjbGstPnJlY2FsYykgeworCQkJcmV0ID0gcGNsay0+cmVjYWxjKHBjbGspOworCQkJLyoKKwkJCSAqIHJlY2FsYyB3aWxsIHJldHVybiBlcnJvciBpZiBjbGsgb3V0IGlzIG5vdCBwcm9ncmFtbWVkCisJCQkgKiBJbiB0aGlzIGNhc2UgY29uZmlndXJlIGRlZmF1bHQgY2xvY2suCisJCQkgKi8KKwkJCWlmIChyZXQgJiYgcGNsay0+c2V0X3JhdGUpCisJCQkJcGNsay0+c2V0X3JhdGUocGNsaywgMCk7CisJCX0KKwkJcHJvcGFnYXRlX3JhdGUocGNsaywgMSk7CisJCS8qIEVuYWJsZSBjbGtzIGVuYWJsZWQgb24gaW5pdCwgaW4gc29mdHdhcmUgdmlldyAqLworCQlpZiAocGNsay0+ZmxhZ3MgJiBFTkFCTEVEX09OX0lOSVQpCisJCQlkb19jbGtfZW5hYmxlKHBjbGspOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja3NfbG9jaywgZmxhZ3MpOwogfQorCisjaWZkZWYgQ09ORklHX0RFQlVHX0ZTCisvKgorICoJZGVidWdmcyBzdXBwb3J0IHRvIHRyYWNlIGNsb2NrIHRyZWUgaGllcmFyY2h5IGFuZCBhdHRyaWJ1dGVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjbGtfZGVidWdmc19yb290Oworc3RhdGljIGludCBjbGtfZGVidWdmc19yZWdpc3Rlcl9vbmUoc3RydWN0IGNsayAqYykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBkZW50cnkgKmQsICpjaGlsZDsKKwlzdHJ1Y3QgY2xrICpwYSA9IGMtPnBjbGs7CisJY2hhciBzWzI1NV07CisJY2hhciAqcCA9IHM7CisKKwlpZiAoYykgeworCQlpZiAoYy0+Y2wtPmNvbl9pZCkKKwkJCXAgKz0gc3ByaW50ZihwLCAiJXMiLCBjLT5jbC0+Y29uX2lkKTsKKwkJaWYgKGMtPmNsLT5kZXZfaWQpCisJCQlwICs9IHNwcmludGYocCwgIiVzIiwgYy0+Y2wtPmRldl9pZCk7CisJfQorCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocywgcGEgPyBwYS0+ZGVudCA6IGNsa19kZWJ1Z2ZzX3Jvb3QpOworCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJYy0+ZGVudCA9IGQ7CisKKwlkID0gZGVidWdmc19jcmVhdGVfdTMyKCJ1c2FnZV9jb3VudCIsIFNfSVJVR08sIGMtPmRlbnQsCisJCQkodTMyICopJmMtPnVzYWdlX2NvdW50KTsKKwlpZiAoIWQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlkID0gZGVidWdmc19jcmVhdGVfdTMyKCJyYXRlIiwgU19JUlVHTywgYy0+ZGVudCwgKHUzMiAqKSZjLT5yYXRlKTsKKwlpZiAoIWQpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwlkID0gZGVidWdmc19jcmVhdGVfeDMyKCJmbGFncyIsIFNfSVJVR08sIGMtPmRlbnQsICh1MzIgKikmYy0+ZmxhZ3MpOworCWlmICghZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldHVybiAwOworCitlcnJfb3V0OgorCWQgPSBjLT5kZW50OworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZkLT5kX3N1YmRpcnMsIGRfdS5kX2NoaWxkKQorCQlkZWJ1Z2ZzX3JlbW92ZShjaGlsZCk7CisJZGVidWdmc19yZW1vdmUoYy0+ZGVudCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjbGtfZGVidWdmc19yZWdpc3RlcihzdHJ1Y3QgY2xrICpjKQoreworCWludCBlcnI7CisJc3RydWN0IGNsayAqcGEgPSBjLT5wY2xrOworCisJaWYgKHBhICYmICFwYS0+ZGVudCkgeworCQllcnIgPSBjbGtfZGVidWdmc19yZWdpc3RlcihwYSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghYy0+ZGVudCkgeworCQllcnIgPSBjbGtfZGVidWdmc19yZWdpc3Rlcl9vbmUoYyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgY2xrX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmM7CisJc3RydWN0IGRlbnRyeSAqZDsKKwlpbnQgZXJyOworCisJZCA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY2xvY2siLCBOVUxMKTsKKwlpZiAoIWQpCisJCXJldHVybiAtRU5PTUVNOworCWNsa19kZWJ1Z2ZzX3Jvb3QgPSBkOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmY2xvY2tzLCBub2RlKSB7CisJCWVyciA9IGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyKGMpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCX0KKwlyZXR1cm4gMDsKK2Vycl9vdXQ6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGNsa19kZWJ1Z2ZzX3Jvb3QpOworCXJldHVybiBlcnI7Cit9CitsYXRlX2luaXRjYWxsKGNsa19kZWJ1Z2ZzX2luaXQpOworCitzdGF0aWMgaW50IGNsa19kZWJ1Z2ZzX3JlcGFyZW50KHN0cnVjdCBjbGsgKmMpCit7CisJZGVidWdmc19yZW1vdmUoYy0+ZGVudCk7CisJcmV0dXJuIGNsa19kZWJ1Z2ZzX3JlZ2lzdGVyX29uZShjKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IDI1NzIyNjAuLjJhZTY2MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMjEsNiArMjEsNyBAQAogLyogY2xrIHN0cnVjdHVyZSBmbGFncyAqLwogI2RlZmluZQlBTFdBWVNfRU5BQkxFRAkJKDEgPDwgMCkgLyogY2xvY2sgYWx3YXlzIGVuYWJsZWQgKi8KICNkZWZpbmUJUkVTRVRfVE9fRU5BQkxFCQkoMSA8PCAxKSAvKiByZXNldCByZWdpc3RlciBiaXQgdG8gZW5hYmxlIGNsayAqLworI2RlZmluZQlFTkFCTEVEX09OX0lOSVQJCSgxIDw8IDIpIC8qIGNsb2NrcyBlbmFibGVkIGF0IGluaXQgKi8KIAogLyoqCiAgKiBzdHJ1Y3QgY2xrb3BzIC0gY2xvY2sgb3BlcmF0aW9ucwpAQCAtMzUsMTMgKzM2LDExIEBACiAvKioKICAqIHN0cnVjdCBwY2xrX2luZm8gLSBwYXJlbnRzIGluZm8KICAqIEBwY2xrOiBwb2ludGVyIHRvIHBhcmVudCBjbGsKLSAqIEBwY2xrX21hc2s6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gZm9yIHNlbGVjdGluZyB0aGlzIHBhcmVudAotICogQHNjYWxhYmxlOiBJcyBwYXJlbnQgc2NhbGFibGUgKDEgLSBZRVMsIDAgLSBOTykKKyAqIEBwY2xrX3ZhbDogdmFsdWUgdG8gYmUgd3JpdHRlbiBmb3Igc2VsZWN0aW5nIHRoaXMgcGFyZW50CiAgKi8KIHN0cnVjdCBwY2xrX2luZm8gewogCXN0cnVjdCBjbGsgKnBjbGs7Ci0JdTggcGNsa19tYXNrOwotCXU4IHNjYWxhYmxlOworCXU4IHBjbGtfdmFsOwogfTsKIAogLyoqCkBAIC01NCwxMSArNTMsMjMgQEAKIHN0cnVjdCBwY2xrX3NlbCB7CiAJc3RydWN0IHBjbGtfaW5mbyAqcGNsa19pbmZvOwogCXU4IHBjbGtfY291bnQ7Ci0JdW5zaWduZWQgaW50ICpwY2xrX3NlbF9yZWc7CisJdm9pZCBfX2lvbWVtICpwY2xrX3NlbF9yZWc7CiAJdW5zaWduZWQgaW50IHBjbGtfc2VsX21hc2s7CiB9OwogCiAvKioKKyAqIHN0cnVjdCByYXRlX2NvbmZpZyAtIGNsayByYXRlIGNvbmZpZ3VyYXRpb25zCisgKiBAdGJsczogYXJyYXkgb2YgZGV2aWNlIHNwZWNpZmljIGNsayByYXRlIHRhYmxlcywgaW4gYXNjZW5kaW5nIG9yZGVyIG9mIHJhdGVzCisgKiBAY291bnQ6IHNpemUgb2YgdGJscyBhcnJheQorICogQGRlZmF1bHRfaW5kZXg6IGRlZmF1bHQgc2V0dGluZyB3aGVuIG9yaWdpbmFsbHkgZGlzYWJsZWQKKyAqLworc3RydWN0IHJhdGVfY29uZmlnIHsKKwl2b2lkICp0YmxzOworCXU4IGNvdW50OworCXU4IGRlZmF1bHRfaW5kZXg7Cit9OworCisvKioKICAqIHN0cnVjdCBjbGsgLSBjbG9jayBzdHJ1Y3R1cmUKICAqIEB1c2FnZV9jb3VudDogbnVtIG9mIHVzZXJzIHdobyBlbmFibGVkIHRoaXMgY2xvY2sKICAqIEBmbGFnczogZmxhZ3MgZm9yIGNsb2NrIHByb3BlcnRpZXMKQEAgLTY3LDIxICs3OCwzMiBAQAogICogQGVuX3JlZ19iaXQ6IGNsayBlbmFibGUvZGlzYWJsZSBiaXQKICAqIEBvcHM6IGNsayBlbmFibGUvZGlzYWJsZSBvcHMgLSBnZW5lcmljX2Nsa29wcyBzZWxlY3RlZCBpZiBOVUxMCiAgKiBAcmVjYWxjOiBwb2ludGVyIHRvIGNsb2NrIHJhdGUgcmVjYWxjdWxhdGUgZnVuY3Rpb24KKyAqIEBzZXRfcmF0ZTogcG9pbnRlciB0byBjbG9jayBzZXQgcmF0ZSBmdW5jdGlvbgorICogQGNhbGNfcmF0ZTogcG9pbnRlciB0byBjbG9jayBnZXQgcmF0ZSBmdW5jdGlvbiBmb3IgaW5kZXgKKyAqIEByYXRlX2NvbmZpZzogcmF0ZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLCB1c2VkIGJ5IHNldF9yYXRlCisgKiBAZGl2X2ZhY3RvcjogZGl2aXNpb24gZmFjdG9yIHRvIHBhcmVudCBjbG9jay4KICAqIEBwY2xrOiBjdXJyZW50IHBhcmVudCBjbGsKICAqIEBwY2xrX3NlbDogcG9pbnRlciB0byBwYXJlbnQgc2VsZWN0aW9uIHN0cnVjdHVyZQogICogQHBjbGtfc2VsX3NoaWZ0OiByZWdpc3RlciBzaGlmdCBmb3Igc2VsZWN0aW5nIHBhcmVudCBvZiB0aGlzIGNsb2NrCiAgKiBAY2hpbGRyZW46IGxpc3QgZm9yIGNoaWxkcmVucyBvciB0aGlzIGNsb2NrCiAgKiBAc2libGluZzogbm9kZSBmb3IgbGlzdCBvZiBjbG9ja3MgaGF2aW5nIHNhbWUgcGFyZW50cwogICogQHByaXZhdGVfZGF0YTogY2xvY2sgc3BlY2lmaWMgcHJpdmF0ZSBkYXRhCisgKiBAbm9kZTogbGlzdCB0byBtYWludGFpbiBjbG9ja3MgbGluZWFybHkKKyAqIEBjbDogY2xvY2tsb29rIHVwIGFzc29pY2F0ZWQgd2l0aCB0aGlzIGNsb2NrCisgKiBAZGVudDogb2JqZWN0IGZvciBkZWJ1Z2ZzCiAgKi8KIHN0cnVjdCBjbGsgewogCXVuc2lnbmVkIGludCB1c2FnZV9jb3VudDsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyByYXRlOwotCXVuc2lnbmVkIGludCAqZW5fcmVnOworCXZvaWQgX19pb21lbSAqZW5fcmVnOwogCXU4IGVuX3JlZ19iaXQ7CiAJY29uc3Qgc3RydWN0IGNsa29wcyAqb3BzOwotCXZvaWQgKCpyZWNhbGMpIChzdHJ1Y3QgY2xrICopOworCWludCAoKnJlY2FsYykgKHN0cnVjdCBjbGsgKik7CisJaW50ICgqc2V0X3JhdGUpIChzdHJ1Y3QgY2xrICosIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJdW5zaWduZWQgbG9uZyAoKmNhbGNfcmF0ZSkoc3RydWN0IGNsayAqLCBpbnQgaW5kZXgpOworCXN0cnVjdCByYXRlX2NvbmZpZyByYXRlX2NvbmZpZzsKKwl1bnNpZ25lZCBpbnQgZGl2X2ZhY3RvcjsKIAogCXN0cnVjdCBjbGsgKnBjbGs7CiAJc3RydWN0IHBjbGtfc2VsICpwY2xrX3NlbDsKQEAgLTkwLDM3ICsxMTIsMTM3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOworI2lmZGVmIENPTkZJR19ERUJVR19GUworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqY2w7CisJc3RydWN0IGRlbnRyeSAqZGVudDsKKyNlbmRpZgogfTsKIAogLyogcGxsIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCitzdHJ1Y3QgcGxsX2Nsa19tYXNrcyB7CisJdTMyIG1vZGVfbWFzazsKKwl1MzIgbW9kZV9zaGlmdDsKKworCXUzMiBub3JtX2ZkYmtfbV9tYXNrOworCXUzMiBub3JtX2ZkYmtfbV9zaGlmdDsKKwl1MzIgZGl0aF9mZGJrX21fbWFzazsKKwl1MzIgZGl0aF9mZGJrX21fc2hpZnQ7CisJdTMyIGRpdl9wX21hc2s7CisJdTMyIGRpdl9wX3NoaWZ0OworCXUzMiBkaXZfbl9tYXNrOworCXUzMiBkaXZfbl9zaGlmdDsKK307CisKIHN0cnVjdCBwbGxfY2xrX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50ICptb2RlX3JlZzsKLQl1bnNpZ25lZCBpbnQgKmNmZ19yZWc7CisJdm9pZCBfX2lvbWVtICptb2RlX3JlZzsKKwl2b2lkIF9faW9tZW0gKmNmZ19yZWc7CisJc3RydWN0IHBsbF9jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogcGxsIGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBwbGxfcmF0ZV90YmwgeworCXU4IG1vZGU7CisJdTE2IG07CisJdTggbjsKKwl1OCBwOwogfTsKIAogLyogYWhiIGFuZCBhcGIgYnVzIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCi1zdHJ1Y3QgYnVzX2Nsa19jb25maWcgewotCXVuc2lnbmVkIGludCAqcmVnOwotCXVuc2lnbmVkIGludCBtYXNrOwotCXVuc2lnbmVkIGludCBzaGlmdDsKK3N0cnVjdCBidXNfY2xrX21hc2tzIHsKKwl1MzIgbWFzazsKKwl1MzIgc2hpZnQ7CiB9OwogCi0vKgotICogQXV4IGNsayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZTogYXBwbGljYWJsZSB0byBHUFQsIFVBUlQgYW5kIEZJUkRBCi0gKi8KK3N0cnVjdCBidXNfY2xrX2NvbmZpZyB7CisJdm9pZCBfX2lvbWVtICpyZWc7CisJc3RydWN0IGJ1c19jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogYWhiIGFuZCBhcGIgY2xrIGJ1cyByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBidXNfcmF0ZV90YmwgeworCXU4IGRpdjsKK307CisKKy8qIEF1eCBjbGsgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmU6IGFwcGxpY2FibGUgdG8gVUFSVCBhbmQgRklSREEgKi8KK3N0cnVjdCBhdXhfY2xrX21hc2tzIHsKKwl1MzIgZXFfc2VsX21hc2s7CisJdTMyIGVxX3NlbF9zaGlmdDsKKwl1MzIgZXExX21hc2s7CisJdTMyIGVxMl9tYXNrOworCXUzMiB4c2NhbGVfc2VsX21hc2s7CisJdTMyIHhzY2FsZV9zZWxfc2hpZnQ7CisJdTMyIHlzY2FsZV9zZWxfbWFzazsKKwl1MzIgeXNjYWxlX3NlbF9zaGlmdDsKK307CisKIHN0cnVjdCBhdXhfY2xrX2NvbmZpZyB7Ci0JdW5zaWduZWQgaW50ICpzeW50aF9yZWc7CisJdm9pZCBfX2lvbWVtICpzeW50aF9yZWc7CisJc3RydWN0IGF1eF9jbGtfbWFza3MgKm1hc2tzOworfTsKKworLyogYXV4IGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBhdXhfcmF0ZV90YmwgeworCXUxNiB4c2NhbGU7CisJdTE2IHlzY2FsZTsKKwl1OCBlcTsKK307CisKKy8qIEdQVCBjbGsgY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBncHRfY2xrX21hc2tzIHsKKwl1MzIgbXNjYWxlX3NlbF9tYXNrOworCXUzMiBtc2NhbGVfc2VsX3NoaWZ0OworCXUzMiBuc2NhbGVfc2VsX21hc2s7CisJdTMyIG5zY2FsZV9zZWxfc2hpZnQ7Cit9OworCitzdHJ1Y3QgZ3B0X2Nsa19jb25maWcgeworCXZvaWQgX19pb21lbSAqc3ludGhfcmVnOworCXN0cnVjdCBncHRfY2xrX21hc2tzICptYXNrczsKK307CisKKy8qIGdwdCBjbGsgcmF0ZSBjb25maWcgc3RydWN0dXJlICovCitzdHJ1Y3QgZ3B0X3JhdGVfdGJsIHsKKwl1MTYgbXNjYWxlOworCXUxNiBuc2NhbGU7Cit9OworCisvKiBjbGNkIGNsayBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSAqLworc3RydWN0IGNsY2Rfc3ludGhfbWFza3MgeworCXUzMiBkaXZfZmFjdG9yX21hc2s7CisJdTMyIGRpdl9mYWN0b3Jfc2hpZnQ7Cit9OworCitzdHJ1Y3QgY2xjZF9jbGtfY29uZmlnIHsKKwl2b2lkIF9faW9tZW0gKnN5bnRoX3JlZzsKKwlzdHJ1Y3QgY2xjZF9zeW50aF9tYXNrcyAqbWFza3M7Cit9OworCisvKiBjbGNkIGNsayByYXRlIGNvbmZpZyBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBjbGNkX3JhdGVfdGJsIHsKKwl1MTYgZGl2OwogfTsKIAogLyogcGxhdGZvcm0gc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zICovCiB2b2lkIGNsa19yZWdpc3RlcihzdHJ1Y3QgY2xrX2xvb2t1cCAqY2wpOwogdm9pZCByZWNhbGNfcm9vdF9jbG9ja3Modm9pZCk7CiAKLS8qIGNsb2NrIHJlY2FsYyBmdW5jdGlvbnMgKi8KLXZvaWQgZm9sbG93X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwotdm9pZCBwbGwxX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgZ3B0X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKLXZvaWQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKKy8qIGNsb2NrIHJlY2FsYyAmIHNldCByYXRlIGZ1bmN0aW9ucyAqLworaW50IGZvbGxvd19wYXJlbnQoc3RydWN0IGNsayAqY2xrKTsKK3Vuc2lnbmVkIGxvbmcgcGxsX2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgcGxsX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2ludCBwbGxfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpOwordW5zaWduZWQgbG9uZyBidXNfY2FsY19yYXRlKHN0cnVjdCBjbGsgKmNsaywgaW50IGluZGV4KTsKK2ludCBidXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOworaW50IGJ1c19jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSk7Cit1bnNpZ25lZCBsb25nIGdwdF9jYWxjX3JhdGUoc3RydWN0IGNsayAqY2xrLCBpbnQgaW5kZXgpOworaW50IGdwdF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgZ3B0X2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgZGVzaXJlZF9yYXRlKTsKK3Vuc2lnbmVkIGxvbmcgYXV4X2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgYXV4X2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKTsKK2ludCBhdXhfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyBkZXNpcmVkX3JhdGUpOwordW5zaWduZWQgbG9uZyBjbGNkX2NhbGNfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIGludCBpbmRleCk7CitpbnQgY2xjZF9jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CitpbnQgY2xjZF9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIGRlc2lyZWRfcmF0ZSk7CiAKICNlbmRpZiAvKiBfX1BMQVRfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKaW5kZXggZTkxMjcwZS4uODUwMWJiZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TCkBAIC0xMiw3ICsxMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogCQkubWFjcm8JYWRkcnVhcnQsIHJwLCBydgogCQltb3YJXHJwLCAjU1BFQVJfREJHX1VBUlRfQkFTRQkJQCBQaHlzaWNhbCBiYXNlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmQ2NzcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvaGFyZHdhcmUuaAorICoKKyAqIEhhcmR3YXJlIGRlZmluaXRpb25zIGZvciBTUEVBcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBTVCBNaWNyb2VsZWN0cm9uaWNzCisgKiBWaXJlc2ggS3VtYXI8dmlyZXNoLmt1bWFyQHN0LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19QTEFUX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19QTEFUX0hBUkRXQVJFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgSU9NRU0oeCkJKCh2b2lkIF9faW9tZW0gX19mb3JjZSAqKSh4KSkKKyNlbHNlCisjZGVmaW5lIElPTUVNKHgpCSh4KQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1BMQVRfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvc3lzdGVtLmggYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaAppbmRleCA1NWE0ZTQwLi5hMjM1ZmEwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaAorKysgYi9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC9zeXN0ZW0uaApAQCAtMTQsOSArMTQsOSBAQAogI2lmbmRlZiBfX1BMQVRfU1lTVEVNX0gKICNkZWZpbmUgX19QTEFUX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3A4MTAuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvc3A4MTAuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAppbmRleCA5OWJhNjc4Li4xYmY4NDUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCkBAIC0xMyw3ICsxMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvc2VyaWFsLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGVhci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAogI2lmbmRlZiBfX1BMQVRfVU5DT01QUkVTU19ICiAjZGVmaW5lIF9fUExBVF9VTkNPTVBSRVNTX0gKQEAgLTI0LDEwICsyNCwxMCBAQAogewogCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilTUEVBUl9EQkdfVUFSVF9CQVNFOwogCi0Jd2hpbGUgKHJlYWRsKGJhc2UgKyBVQVJUMDF4X0ZSKSAmIFVBUlQwMXhfRlJfVFhGRikKKwl3aGlsZSAocmVhZGxfcmVsYXhlZChiYXNlICsgVUFSVDAxeF9GUikgJiBVQVJUMDF4X0ZSX1RYRkYpCiAJCWJhcnJpZXIoKTsKIAotCXdyaXRlbChjLCBiYXNlICsgVUFSVDAxeF9EUik7CisJd3JpdGVsX3JlbGF4ZWQoYywgYmFzZSArIFVBUlQwMXhfRFIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtc3BlYXIvaW5jbHVkZS9wbGF0L3ZtYWxsb2MuaAppbmRleCAwOWU5MzcyLi44YzhiMjRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNwZWFyL2luY2x1ZGUvcGxhdC92bWFsbG9jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci9pbmNsdWRlL3BsYXQvdm1hbGxvYy5oCkBAIC0xNCw2ICsxNCw2IEBACiAjaWZuZGVmIF9fUExBVF9WTUFMTE9DX0gKICNkZWZpbmUgX19QTEFUX1ZNQUxMT0NfSAogCi0jZGVmaW5lIFZNQUxMT0NfRU5ECQkweEYwMDAwMDAwCisjZGVmaW5lIFZNQUxMT0NfRU5ECQkweEYwMDAwMDAwVUwKIAogI2VuZGlmIC8qIF9fUExBVF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc3BlYXIvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKaW5kZXggODM5Yzg4ZC4uZGJiNmU0ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogYXJjaC9hcm0vcGxhdC1zcGVhci90aW1lLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QgTWljcm9lbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEwIFNUIE1pY3JvZWxlY3Ryb25pY3MKICAqIFNoaXJheiBIYXNoaW08c2hpcmF6Lmhhc2hpbUBzdC5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCkBAIC0yMCwxMCArMjAsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvc3BlYXIuaD4KICNpbmNsdWRlIDxtYWNoL2dlbmVyaWMuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAKIC8qCiAgKiBXZSB3b3VsZCB1c2UgVElNRVIwIGFuZCBUSU1FUjEgYXMgY2xvY2tldmVudCBhbmQgY2xvY2tzb3VyY2UuCkBAIC0yMTEsNyArMjEwLDcgQEAKIAogdm9pZCBfX2luaXQgc3BlYXJfc2V0dXBfdGltZXIodm9pZCkKIHsKLQlzdHJ1Y3QgY2xrICpwbGwzX2NsazsKKwlpbnQgcmV0OwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oU1BFQVJfR1BUMF9CQVNFLCBTWl8xSywgImdwdDAiKSkgewogCQlwcl9lcnIoIiVzOmNhbm5vdCBnZXQgSU8gYWRkclxuIiwgX19mdW5jX18pOwpAQCAtMjMwLDI2ICsyMjksMjEgQEAKIAkJZ290byBlcnJfaW9tYXA7CiAJfQogCi0JcGxsM19jbGsgPSBjbGtfZ2V0KE5VTEwsICJwbGwzXzQ4bV9jbGsiKTsKLQlpZiAoIXBsbDNfY2xrKSB7Ci0JCXByX2VycigiJXM6Y291bGRuJ3QgZ2V0IFBMTDMgYXMgcGFyZW50IGZvciBncHRcbiIsIF9fZnVuY19fKTsKLQkJZ290byBlcnJfaW9tYXA7CisJcmV0ID0gY2xrX2VuYWJsZShncHRfY2xrKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoIiVzOmNvdWxkbid0IGVuYWJsZSBncHQgY2xvY2tcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJfY2xrOwogCX0KIAotCWNsa19zZXRfcGFyZW50KGdwdF9jbGssIHBsbDNfY2xrKTsKLQogCXNwZWFyX2Nsb2NrZXZlbnRfaW5pdCgpOwogCXNwZWFyX2Nsb2Nrc291cmNlX2luaXQoKTsKIAogCXJldHVybjsKIAorZXJyX2NsazoKKwljbGtfcHV0KGdwdF9jbGspOwogZXJyX2lvbWFwOgogCWlvdW5tYXAoZ3B0X2Jhc2UpOwotCiBlcnJfbWVtOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihTUEVBUl9HUFQwX0JBU0UsIFNaXzFLKTsKIH0KLQotc3RydWN0IHN5c190aW1lciBzcGVhcl9zeXNfdGltZXIgPSB7Ci0JLmluaXQgPSBzcGVhcl9zZXR1cF90aW1lciwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCAyZmVhODk3Li45ZDZmZWFhIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBTdW4gRGVjIDEyIDIzOjI0OjI3IDIwMTAKKyMgTGFzdCB1cGRhdGU6IE1vbiBGZWIgNyAwODo1OToyNyAyMDExCiAjCiAjIG1hY2hpbmVfaXNfeHh4CUNPTkZJR194eHh4CQlNQUNIX1RZUEVfeHh4CQludW1iZXIKICMKQEAgLTIyNDAsNyArMjI0MCw3IEBACiB2c192MjEwCQkJTUFDSF9WU19WMjEwCQlWU19WMjEwCQkJMjI1MgogdnNfdjIxMgkJCU1BQ0hfVlNfVjIxMgkJVlNfVjIxMgkJCTIyNTMKIGhtdAkJCU1BQ0hfSE1UCQlITVQJCQkyMjU0Ci1zdWVuMwkJCU1BQ0hfU1VFTjMJCVNVRU4zCQkJMjI1NQora21fa2lya3dvb2QJCU1BQ0hfS01fS0lSS1dPT0QJS01fS0lSS1dPT0QJCTIyNTUKIHZlc3BlcgkJCU1BQ0hfVkVTUEVSCQlWRVNQRVIJCQkyMjU2CiBzdHI5CQkJTUFDSF9TVFI5CQlTVFI5CQkJMjI1Nwogb21hcDNfd2xfZmYJCU1BQ0hfT01BUDNfV0xfRkYJT01BUDNfV0xfRkYJCTIyNTgKQEAgLTI5ODcsNyArMjk4Nyw3IEBACiBlYTIwCQkJTUFDSF9FQTIwCQlFQTIwCQkJMzAwMgogYXdtMgkJCU1BQ0hfQVdNMgkJQVdNMgkJCTMwMDMKIHRpODE0OGV2bQkJTUFDSF9USTgxNDhFVk0JCVRJODE0OEVWTQkJMzAwNAotdGVncmFfc2VhYm9hcmQJCU1BQ0hfVEVHUkFfU0VBQk9BUkQJVEVHUkFfU0VBQk9BUkQJCTMwMDUKK3NlYWJvYXJkCQlNQUNIX1NFQUJPQVJECQlTRUFCT0FSRAkJMzAwNQogbGlua3N0YXRpb25fY2hsdjIJTUFDSF9MSU5LU1RBVElPTl9DSExWMglMSU5LU1RBVElPTl9DSExWMgkzMDA2CiB0ZXJhX3BybzJfcmFjawkJTUFDSF9URVJBX1BSTzJfUkFDSwlURVJBX1BSTzJfUkFDSwkJMzAwNwogcnVieXMJCQlNQUNIX1JVQllTCQlSVUJZUwkJCTMwMDgKQEAgLTMxOTAsNyArMzE5MCw3IEBACiBpY3NfaWZfdm9pcAkJTUFDSF9JQ1NfSUZfVk9JUAlJQ1NfSUZfVk9JUAkJMzIwNgogd2xmX2NyYWdnXzY0MTAJCU1BQ0hfV0xGX0NSQUdHXzY0MTAJV0xGX0NSQUdHXzY0MTAJCTMyMDcKIHB1bmljYQkJCU1BQ0hfUFVOSUNBCQlQVU5JQ0EJCQkzMjA4Ci1zYmNfbnQyNTAJCU1BQ0hfU0JDX05UMjUwCQlTQkNfTlQyNTAJCTMyMDkKK3RyaW1zbGljZQkJTUFDSF9UUklNU0xJQ0UJCVRSSU1TTElDRQkJMzIwOQogbXgyN193bXVsdHJhCQlNQUNIX01YMjdfV01VTFRSQQlNWDI3X1dNVUxUUkEJCTMyMTAKIG1hY2tlcmVsCQlNQUNIX01BQ0tFUkVMCQlNQUNLRVJFTAkJMzIxMQogZmE5eDI3CQkJTUFDSF9GQTlYMjcJCUZBOVgyNwkJCTMyMTMKQEAgLTMyMTksMyArMzIxOSwxMDAgQEAKIHBjbTA0OAkJCU1BQ0hfUENNMDQ4CQlQQ00wNDgJCQkzMjM2CiBkZHMJCQlNQUNIX0REUwkJRERTCQkJMzIzNwogY2hhbHRlbl94YTEJCU1BQ0hfQ0hBTFRFTl9YQTEJQ0hBTFRFTl9YQTEJCTMyMzgKK3RzNDh4eAkJCU1BQ0hfVFM0OFhYCQlUUzQ4WFgJCQkzMjM5Cit0b25nYTJfdGZ0dGltZXIJCU1BQ0hfVE9OR0EyX1RGVFRJTUVSCVRPTkdBMl9URlRUSU1FUgkJMzI0MAord2hpc3RsZXIJCU1BQ0hfV0hJU1RMRVIJCVdISVNUTEVSCQkzMjQxCithc2xfcGhvZW5peAkJTUFDSF9BU0xfUEhPRU5JWAlBU0xfUEhPRU5JWAkJMzI0MgorYXQ5MXNhbTkyNjNvdGxpdGUJTUFDSF9BVDkxU0FNOTI2M09UTElURQlBVDkxU0FNOTI2M09UTElURQkzMjQzCitkZHBsdWcJCQlNQUNIX0REUExVRwkJRERQTFVHCQkJMzI0NAorZDJwbHVnCQkJTUFDSF9EMlBMVUcJCUQyUExVRwkJCTMyNDUKK2t6bTlkCQkJTUFDSF9LWk05RAkJS1pNOUQJCQkzMjQ2Cit2ZXJkaV9sdGUJCU1BQ0hfVkVSRElfTFRFCQlWRVJESV9MVEUJCTMyNDcKK25hbm96b29tCQlNQUNIX05BTk9aT09NCQlOQU5PWk9PTQkJMzI0OAorZG0zNzMwX3NvbV9sdgkJTUFDSF9ETTM3MzBfU09NX0xWCURNMzczMF9TT01fTFYJCTMyNDkKK2RtMzczMF90b3JwZWRvCQlNQUNIX0RNMzczMF9UT1JQRURPCURNMzczMF9UT1JQRURPCQkzMjUwCithbmNob3Z5CQkJTUFDSF9BTkNIT1ZZCQlBTkNIT1ZZCQkJMzI1MQorcmUycmV2MjAJCU1BQ0hfUkUyUkVWMjAJCVJFMlJFVjIwCQkzMjUzCityZTJyZXYyMQkJTUFDSF9SRTJSRVYyMQkJUkUyUkVWMjEJCTMyNTQKK2NuczIxeHgJCQlNQUNIX0NOUzIxWFgJCUNOUzIxWFgJCQkzMjU1CityaWRlcgkJCU1BQ0hfUklERVIJCVJJREVSCQkJMzI1NworbnNrMzMwCQkJTUFDSF9OU0szMzAJCU5TSzMzMAkJCTMyNTgKK2NuczIxMzNldmIJCU1BQ0hfQ05TMjEzM0VWQgkJQ05TMjEzM0VWQgkJMzI1OQorejNfODE2eF9tb2QJCU1BQ0hfWjNfODE2WF9NT0QJWjNfODE2WF9NT0QJCTMyNjAKK3ozXzgxNHhfbW9kCQlNQUNIX1ozXzgxNFhfTU9ECVozXzgxNFhfTU9ECQkzMjYxCitiZWVjdAkJCU1BQ0hfQkVFQ1QJCUJFRUNUCQkJMzI2MgorZG1hX3RodW5kZXJidWcJCU1BQ0hfRE1BX1RIVU5ERVJCVUcJRE1BX1RIVU5ERVJCVUcJCTMyNjMKK29tbl9hdDkxc2FtOWcyMAkJTUFDSF9PTU5fQVQ5MVNBTTlHMjAJT01OX0FUOTFTQU05RzIwCQkzMjY0CitteDI1X2Uyc191YwkJTUFDSF9NWDI1X0UyU19VQwlNWDI1X0UyU19VQwkJMzI2NQorbWlvbmUJCQlNQUNIX01JT05FCQlNSU9ORQkJCTMyNjYKK3RvcDkwMDBfdGN1CQlNQUNIX1RPUDkwMDBfVENVCVRPUDkwMDBfVENVCQkzMjY3Cit0b3A5MDAwX2JzbAkJTUFDSF9UT1A5MDAwX0JTTAlUT1A5MDAwX0JTTAkJMzI2OAora2luZ2RvbQkJCU1BQ0hfS0lOR0RPTQkJS0lOR0RPTQkJCTMyNjkKK2FybWFkaWxsbzQ2MAkJTUFDSF9BUk1BRElMTE80NjAJQVJNQURJTExPNDYwCQkzMjcwCitscTIJCQlNQUNIX0xRMgkJTFEyCQkJMzI3MQorc3dlZGFfdG1zMgkJTUFDSF9TV0VEQV9UTVMyCQlTV0VEQV9UTVMyCQkzMjcyCitteDUzX2xvY28JCU1BQ0hfTVg1M19MT0NPCQlNWDUzX0xPQ08JCTMyNzMKK2FjZXJfYTgJCQlNQUNIX0FDRVJfQTgJCUFDRVJfQTgJCQkzMjc1CithY2VyX2dhdWd1aW4JCU1BQ0hfQUNFUl9HQVVHVUlOCUFDRVJfR0FVR1VJTgkJMzI3NgorZ3VwcHkJCQlNQUNIX0dVUFBZCQlHVVBQWQkJCTMyNzcKK214NjFfYXJkCQlNQUNIX01YNjFfQVJECQlNWDYxX0FSRAkJMzI3OAordHg1MwkJCU1BQ0hfVFg1MwkJVFg1MwkJCTMyNzkKK29tYXBsMTM4X2Nhc2VfYTMJTUFDSF9PTUFQTDEzOF9DQVNFX0EzCU9NQVBMMTM4X0NBU0VfQTMJMzI4MAordWVtZAkJCU1BQ0hfVUVNRAkJVUVNRAkJCTMyODEKK2Njd214NTFtdXQJCU1BQ0hfQ0NXTVg1MU1VVAkJQ0NXTVg1MU1VVAkJMzI4Mgorcm9ja2hvcHBlcgkJTUFDSF9ST0NLSE9QUEVSCQlST0NLSE9QUEVSCQkzMjgzCitub29rY29sb3IJCU1BQ0hfTk9PS0NPTE9SCQlOT09LQ09MT1IJCTMyODQKK2hrZGtjMTAwCQlNQUNIX0hLREtDMTAwCQlIS0RLQzEwMAkJMzI4NQordHM0Mnh4CQkJTUFDSF9UUzQyWFgJCVRTNDJYWAkJCTMyODYKK2FlYmwJCQlNQUNIX0FFQkwJCUFFQkwJCQkzMjg3Cit3YXJpbwkJCU1BQ0hfV0FSSU8JCVdBUklPCQkJMzI4OAorZ2ZzX3NwbQkJCU1BQ0hfR0ZTX1NQTQkJR0ZTX1NQTQkJCTMyODkKK2NtX3QzNzMwCQlNQUNIX0NNX1QzNzMwCQlDTV9UMzczMAkJMzI5MAoraXNjMwkJCU1BQ0hfSVNDMwkJSVNDMwkJCTMyOTEKK3Jhc2NhbAkJCU1BQ0hfUkFTQ0FMCQlSQVNDQUwJCQkzMjkyCitocmVmdjYwCQkJTUFDSF9IUkVGVjYwCQlIUkVGVjYwCQkJMzI5MwordHB0XzJfMAkJCU1BQ0hfVFBUXzJfMAkJVFBUXzJfMAkJCTMyOTQKK3B5cmFtaWRfdGQJCU1BQ0hfUFlSQU1JRF9URAkJUFlSQU1JRF9URAkJMzI5NQorc3BsZW5kb3IJCU1BQ0hfU1BMRU5ET1IJCVNQTEVORE9SCQkzMjk2CitndWZfcGxhbmV0CQlNQUNIX0dVRl9QTEFORVQJCUdVRl9QTEFORVQJCTMyOTcKK21zbTh4NjBfcXQJCU1BQ0hfTVNNOFg2MF9RVAkJTVNNOFg2MF9RVAkJMzI5OAoraHRjX2hkX21pbmkJCU1BQ0hfSFRDX0hEX01JTkkJSFRDX0hEX01JTkkJCTMyOTkKK2F0aGVuZQkJCU1BQ0hfQVRIRU5FCQlBVEhFTkUJCQkzMzAwCitkZWVwX3JfZWtfMQkJTUFDSF9ERUVQX1JfRUtfMQlERUVQX1JfRUtfMQkJMzMwMQordml2b3dfY3QJCU1BQ0hfVklWT1dfQ1QJCVZJVk9XX0NUCQkzMzAyCituZXJ5XzEwMDAJCU1BQ0hfTkVSWV8xMDAwCQlORVJZXzEwMDAJCTMzMDMKK3JmbDEwOTE0NV9zc3J2CQlNQUNIX1JGTDEwOTE0NV9TU1JWCVJGTDEwOTE0NV9TU1JWCQkzMzA0CitubWgJCQlNQUNIX05NSAkJTk1ICQkJMzMwNQord244MDJ0CQkJTUFDSF9XTjgwMlQJCVdOODAyVAkJCTMzMDYKK2RyYWdvbmV0CQlNQUNIX0RSQUdPTkVUCQlEUkFHT05FVAkJMzMwNworZ2VuZXZhX2IJCU1BQ0hfR0VORVZBX0IJCUdFTkVWQV9CCQkzMzA4CithdDkxc2FtOTI2M2Rlc2sxNmwJTUFDSF9BVDkxU0FNOTI2M0RFU0sxNkwJQVQ5MVNBTTkyNjNERVNLMTZMCTMzMDkKK2JjbWhhbmFfc3YJCU1BQ0hfQkNNSEFOQV9TVgkJQkNNSEFOQV9TVgkJMzMxMAorYmNtaGFuYV90YWJsZXQJCU1BQ0hfQkNNSEFOQV9UQUJMRVQJQkNNSEFOQV9UQUJMRVQJCTMzMTEKK2tvaQkJCU1BQ0hfS09JCQlLT0kJCQkzMzEyCit0czQ4MDAJCQlNQUNIX1RTNDgwMAkJVFM0ODAwCQkJMzMxMwordHFtYTkyNjMJCU1BQ0hfVFFNQTkyNjMJCVRRTUE5MjYzCQkzMzE0Citob2xpZGF5CQkJTUFDSF9IT0xJREFZCQlIT0xJREFZCQkJMzMxNQorZG1hXzY0MTAJCU1BQ0hfRE1BNjQxMAkJRE1BNjQxMAkJCTMzMTYKK3BjYXRzX292ZXJsYXkJCU1BQ0hfUENBVFNfT1ZFUkxBWQlQQ0FUU19PVkVSTEFZCQkzMzE3Citod2d3NjQxMAkJTUFDSF9IV0dXNjQxMAkJSFdHVzY0MTAJCTMzMTgKK3NoZW56aG91CQlNQUNIX1NIRU5aSE9VCQlTSEVOWkhPVQkJMzMxOQorY3dtZTkyMTAJCU1BQ0hfQ1dNRTkyMTAJCUNXTUU5MjEwCQkzMzIwCitjd21lOTIxMGpzCQlNQUNIX0NXTUU5MjEwSlMJCUNXTUU5MjEwSlMJCTMzMjEKK3Bnc192MQkJCU1BQ0hfUEdTX1NJVEFSQQkJUEdTX1NJVEFSQQkJMzMyMgorY29saWJyaV90ZWdyYTIJCU1BQ0hfQ09MSUJSSV9URUdSQTIJQ09MSUJSSV9URUdSQTIJCTMzMjMKK3cyMQkJCU1BQ0hfVzIxCQlXMjEJCQkzMzI0Citwb2x5c2F0MQkJTUFDSF9QT0xZU0FUMQkJUE9MWVNBVDEJCTMzMjUKK2RhdGF3YXkJCQlNQUNIX0RBVEFXQVkJCURBVEFXQVkJCQkzMzI2Citjb2JyYWwxMzgJCU1BQ0hfQ09CUkFMMTM4CQlDT0JSQUwxMzgJCTMzMjcKK3JvdmVycGNzOAkJTUFDSF9ST1ZFUlBDUzgJCVJPVkVSUENTOAkJMzMyOAorbWFydmVsYwkJCU1BQ0hfTUFSVkVMQwkJTUFSVkVMQwkJCTMzMjkKK25hdmVmaWhpZAkJTUFDSF9OQVZFRklISUQJCU5BVkVGSUhJRAkJMzMzMAorZG0zNjVfY3YxMDAJCU1BQ0hfRE0zNjVfQ1YxMDAJRE0zNjVfQ1YxMDAJCTMzMzEKK2FibGUJCQlNQUNIX0FCTEUJCUFCTEUJCQkzMzMyCitsZWdhY3kJCQlNQUNIX0xFR0FDWQkJTEVHQUNZCQkJMzMzMworaWNvbmcJCQlNQUNIX0lDT05HCQlJQ09ORwkJCTMzMzQKK3JvdmVyX2c4CQlNQUNIX1JPVkVSX0c4CQlST1ZFUl9HOAkJMzMzNQordDUzODhwCQkJTUFDSF9UNTM4OFAJCVQ1Mzg4UAkJCTMzMzYKK2RpbmdvCQkJTUFDSF9ESU5HTwkJRElOR08JCQkzMzM3Citnb2ZsZXhob21lCQlNQUNIX0dPRkxFWEhPTUUJCUdPRkxFWEhPTUUJCTMzMzgKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcGdhbGxvYy5oIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKaW5kZXggOTJlY2Q4NC4uYmM3ZThhZSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgKQEAgLTgsNiArOCw3IEBACiAjaWZuZGVmIF9fQVNNX0FWUjMyX1BHQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9QR0FMTE9DX0gKIAorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcXVpY2tsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9iZmluX3NlcmlhbC5oCmluZGV4IDFmZjlmMTQuLjdkYmM2NjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vYmZpbl9zZXJpYWwuaAorKysgYi9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2JmaW5fc2VyaWFsLmgKQEAgLTEwLDYgKzEwLDcgQEAKICNkZWZpbmUgX19CRklOX0FTTV9TRVJJQUxfSF9fCiAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bWFjaC9hbm9tYWx5Lmg+CiAjaW5jbHVkZSA8bWFjaC9iZmluX3NlcmlhbC5oPgogCkBAIC00MSw2ICs0Miw3IEBACiAJc3RydWN0IGNpcmNfYnVmIHJ4X2RtYV9idWY7CiAJc3RydWN0IHRpbWVyX2xpc3QgcnhfZG1hX3RpbWVyOwogCWludCByeF9kbWFfbnJvd3M7CisJc3BpbmxvY2tfdCByeF9sb2NrOwogCXVuc2lnbmVkIGludCB0eF9kbWFfY2hhbm5lbDsKIAl1bnNpZ25lZCBpbnQgcnhfZG1hX2NoYW5uZWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X2RtYV93b3JrcXVldWU7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMgYi9hcmNoL2JsYWNrZmluL2xpYi9vdXRzLlMKaW5kZXggMjUwZjRkNC4uMDZhNWU2NyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9saWIvb3V0cy5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbGliL291dHMuUwpAQCAtMTMsNiArMTMsOCBAQAogLmFsaWduIDIKIAogRU5UUlkoX291dHNsKQorCUNDID0gUjIgPT0gMDsKKwlJRiBDQyBKVU1QIDFmOwogCVAwID0gUjA7CS8qIFAwID0gcG9ydCAqLwogCVAxID0gUjE7CS8qIFAxID0gYWRkcmVzcyAqLwogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KQEAgLTIwLDEwICsyMiwxMiBAQAogCUxTRVRVUCggLkxsb25nX2xvb3BfcywgLkxsb25nX2xvb3BfZSkgTEMwID0gUDI7CiAuTGxvbmdfbG9vcF9zOiBSMCA9IFtQMSsrXTsKIC5MbG9uZ19sb29wX2U6IFtQMF0gPSBSMDsKLQlSVFM7CisxOglSVFM7CiBFTkRQUk9DKF9vdXRzbCkKIAogRU5UUlkoX291dHN3KQorCUNDID0gUjIgPT0gMDsKKwlJRiBDQyBKVU1QIDFmOwogCVAwID0gUjA7CS8qIFAwID0gcG9ydCAqLwogCVAxID0gUjE7CS8qIFAxID0gYWRkcmVzcyAqLwogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KQEAgLTMxLDEwICszNSwxMiBAQAogCUxTRVRVUCggLkx3b3JkX2xvb3BfcywgLkx3b3JkX2xvb3BfZSkgTEMwID0gUDI7CiAuTHdvcmRfbG9vcF9zOiBSMCA9IFdbUDErK107CiAuTHdvcmRfbG9vcF9lOiBXW1AwXSA9IFIwOwotCVJUUzsKKzE6CVJUUzsKIEVORFBST0MoX291dHN3KQogCiBFTlRSWShfb3V0c2IpCisJQ0MgPSBSMiA9PSAwOworCUlGIENDIEpVTVAgMWY7CiAJUDAgPSBSMDsJLyogUDAgPSBwb3J0ICovCiAJUDEgPSBSMTsJLyogUDEgPSBhZGRyZXNzICovCiAJUDIgPSBSMjsJLyogUDIgPSBjb3VudCAqLwpAQCAtNDIsMTAgKzQ4LDEyIEBACiAJTFNFVFVQKCAuTGJ5dGVfbG9vcF9zLCAuTGJ5dGVfbG9vcF9lKSBMQzAgPSBQMjsKIC5MYnl0ZV9sb29wX3M6IFIwID0gQltQMSsrXTsKIC5MYnl0ZV9sb29wX2U6IEJbUDBdID0gUjA7Ci0JUlRTOworMToJUlRTOwogRU5EUFJPQyhfb3V0c2IpCiAKIEVOVFJZKF9vdXRzd184KQorCUNDID0gUjIgPT0gMDsKKwlJRiBDQyBKVU1QIDFmOwogCVAwID0gUjA7CS8qIFAwID0gcG9ydCAqLwogCVAxID0gUjE7CS8qIFAxID0gYWRkcmVzcyAqLwogCVAyID0gUjI7CS8qIFAyID0gY291bnQgKi8KQEAgLTU2LDUgKzY0LDUgQEAKIAkJUjAgPSBSMCA8PCA4OwogCQlSMCA9IFIwICsgUjE7CiAuTHdvcmQ4X2xvb3BfZTogV1tQMF0gPSBSMDsKLQlSVFM7CisxOglSVFM7CiBFTkRQUk9DKF9vdXRzd184KQpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9jYWNoZS5TCmluZGV4IDc5MGM3NjcuLmFiNGE5MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vY2FjaGUuUworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2NhY2hlLlMKQEAgLTU4LDYgKzU4LDggQEAKIDE6CiAuaWZlcXMgIlxmbHVzaGlucyIsIEJST0tfRkxVU0hfSU5TVAogCVxmbHVzaGlucyBbUDArK107CisJbm9wOworCW5vcDsKIDI6CW5vcDsKIC5lbHNlCiAyOglcZmx1c2hpbnMgW1AwKytdOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9jcmlzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDQ0MjIxODkuLmM0OWJlODQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2NyaXMva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTcyLDExICs3Miw2IEBACiAJSU5JVF9URVhUX1NFQ1RJT04oUEFHRV9TSVpFKQogCS5pbml0LmRhdGEgOiB7IElOSVRfREFUQSB9CiAJLmluaXQuc2V0dXAgOiB7IElOSVRfU0VUVVAoMTYpIH0KLSNpZmRlZiBDT05GSUdfRVRSQVhfQVJDSF9WMzIKLQlfX3N0YXJ0X19fcGFyYW0gPSAuOwotCV9fcGFyYW0gOiB7ICooX19wYXJhbSkgfQotCV9fc3RvcF9fX3BhcmFtID0gLjsKLSNlbmRpZgogCS5pbml0Y2FsbC5pbml0IDogewogCQlJTklUX0NBTExTCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggZjc0NWMxMi4uNzZlYWYzOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC04MCw3ICs4MCw3IEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cKIAkvKiBGSVhNRSBNMzJSICovCiAjZW5kaWYKLQlfX2RvX0lSUShpcnEpOworCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwogCWlycV9leGl0KCk7CiAJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jIGIvYXJjaC9tNjhrL2FtaWdhL2NvbmZpZy5jCmluZGV4IGIxNTc3ZjcuLjgyYTRiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9jb25maWcuYworKysgYi9hcmNoL202OGsvYW1pZ2EvY29uZmlnLmMKQEAgLTYxMCwxNyArNjEwLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGFtaWdhX3NhdmVrbXNnX3NldHVwKGNoYXIgKmFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGRlYnVnX3JlcyA9IHsgLm5hbWUgPSAiRGVidWciIH07Ci0KIAlpZiAoIU1BQ0hfSVNfQU1JR0EgfHwgc3RyY21wKGFyZywgIm1lbSIpKQotCQlnb3RvIGRvbmU7CisJCXJldHVybiAwOwogCi0JaWYgKCFBTUlHQUhXX1BSRVNFTlQoQ0hJUF9SQU0pKSB7Ci0JCXByaW50aygiV2FybmluZzogbm8gY2hpcHJhbSBwcmVzZW50IGZvciBkZWJ1Z2dpbmdcbiIpOwotCQlnb3RvIGRvbmU7CisJaWYgKGFtaWdhX2NoaXBfc2l6ZSA8IFNBVkVLTVNHX01BWE1FTSkgeworCQlwcl9lcnIoIk5vdCBlbm91Z2ggY2hpcHJhbSBmb3IgZGVidWdnaW5nXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2F2ZWttc2cgPSBhbWlnYV9jaGlwX2FsbG9jX3JlcyhTQVZFS01TR19NQVhNRU0sICZkZWJ1Z19yZXMpOworCS8qIEp1c3Qgc3RlYWwgdGhlIGJsb2NrLCB0aGUgY2hpcHJhbSBhbGxvY2F0b3IgaXNuJ3QgZnVuY3Rpb25hbCB5ZXQgKi8KKwlhbWlnYV9jaGlwX3NpemUgLT0gU0FWRUtNU0dfTUFYTUVNOworCXNhdmVrbXNnID0gKHZvaWQgKilaVFdPX1ZBRERSKENISVBfUEhZU0FERFIgKyBhbWlnYV9jaGlwX3NpemUpOwogCXNhdmVrbXNnLT5tYWdpYzEgPSBTQVZFS01TR19NQUdJQzE7CiAJc2F2ZWttc2ctPm1hZ2ljMiA9IFNBVkVLTVNHX01BR0lDMjsKIAlzYXZla21zZy0+bWFnaWNwdHIgPSBaVFdPX1BBRERSKHNhdmVrbXNnKTsKQEAgLTYyOCw4ICs2MjgsNiBAQAogCiAJYW1pZ2FfY29uc29sZV9kcml2ZXIud3JpdGUgPSBhbWlnYV9tZW1fY29uc29sZV93cml0ZTsKIAlyZWdpc3Rlcl9jb25zb2xlKCZhbWlnYV9jb25zb2xlX2RyaXZlcik7Ci0KLWRvbmU6CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMgYi9hcmNoL202OGsvYXRhcmkvYXRhaW50cy5jCmluZGV4IDM5NDc4ZGQuLjI2YTgwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9hdGFpbnRzLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWludHMuYwpAQCAtMzg4LDkgKzM4OCw5IEBACiAJfQogCiAJaWYgKEFUQVJJSFdfUFJFU0VOVChTQ0MpICYmICFhdGFyaV9TQ0NfcmVzZXRfZG9uZSkgewotCQlzY2MuY2hhX2FfY3RybCA9IDk7CisJCWF0YXJpX3NjYy5jaGFfYV9jdHJsID0gOTsKIAkJTUZQREVMQVkoKTsKLQkJc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KKwkJYXRhcmlfc2NjLmNoYV9hX2N0cmwgPSAoY2hhcikgMHhjMDsgLyogaGFyZHdhcmUgcmVzZXQgKi8KIAl9CiAKIAlpZiAoQVRBUklIV19QUkVTRU5UKFNDVSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9jb25maWcuYwppbmRleCBhZTJkOTZlLi40MjAzZDEwIDEwMDY0NAotLS0gYS9hcmNoL202OGsvYXRhcmkvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2NvbmZpZy5jCkBAIC0zMTUsNyArMzE1LDcgQEAKIAkJQVRBUklIV19TRVQoU0NDX0RNQSk7CiAJCXByaW50aygiU0NDX0RNQSAiKTsKIAl9Ci0JaWYgKHNjY190ZXN0KCZzY2MuY2hhX2FfY3RybCkpIHsKKwlpZiAoc2NjX3Rlc3QoJmF0YXJpX3NjYy5jaGFfYV9jdHJsKSkgewogCQlBVEFSSUhXX1NFVChTQ0MpOwogCQlwcmludGsoIlNDQyAiKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvZGVidWcuYyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCmluZGV4IDI4ZWZkYzMuLjVhNDg0MjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9kZWJ1Zy5jCkBAIC01Myw5ICs1Myw5IEBACiB7CiAJZG8gewogCQlNRlBERUxBWSgpOwotCX0gd2hpbGUgKCEoc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDA0KSk7IC8qIHdhaXQgZm9yIHR4IGJ1ZiBlbXB0eSAqLwogCU1GUERFTEFZKCk7Ci0Jc2NjLmNoYV9iX2RhdGEgPSBjOworCWF0YXJpX3NjYy5jaGFfYl9kYXRhID0gYzsKIH0KIAogc3RhdGljIHZvaWQgYXRhcmlfc2NjX2NvbnNvbGVfd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvLCBjb25zdCBjaGFyICpzdHIsCkBAIC0xNDAsOSArMTQwLDkgQEAKIHsKIAlkbyB7CiAJCU1GUERFTEFZKCk7Ci0JfSB3aGlsZSAoIShzY2MuY2hhX2JfY3RybCAmIDB4MDEpKTsgLyogd2FpdCBmb3IgcnggYnVmIGZpbGxlZCAqLworCX0gd2hpbGUgKCEoYXRhcmlfc2NjLmNoYV9iX2N0cmwgJiAweDAxKSk7IC8qIHdhaXQgZm9yIHJ4IGJ1ZiBmaWxsZWQgKi8KIAlNRlBERUxBWSgpOwotCXJldHVybiBzY2MuY2hhX2JfZGF0YTsKKwlyZXR1cm4gYXRhcmlfc2NjLmNoYV9iX2RhdGE7CiB9CiAKIGludCBhdGFyaV9taWRpX2NvbnNvbGVfd2FpdF9rZXkoc3RydWN0IGNvbnNvbGUgKmNvKQpAQCAtMTg1LDkgKzE4NSw5IEBACiAKICNkZWZpbmUgU0NDX1dSSVRFKHJlZywgdmFsKQkJCQlcCiAJZG8gewkJCQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAocmVnKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHJlZyk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKLQkJc2NjLmNoYV9iX2N0cmwgPSAodmFsKTsJCQlcCisJCWF0YXJpX3NjYy5jaGFfYl9jdHJsID0gKHZhbCk7CQlcCiAJCU1GUERFTEFZKCk7CQkJCVwKIAl9IHdoaWxlICgwKQogCkBAIC0yNDAsNyArMjQwLDcgQEAKIAlyZWczID0gKGNmbGFnICYgQ1NJWkUpID09IENTOCA/IDB4YzAgOiAweDQwOwogCXJlZzUgPSAoY2ZsYWcgJiBDU0laRSkgPT0gQ1M4ID8gMHg2MCA6IDB4MjAgfCAweDgyIC8qIGFzc2VydCBEVFIvUlRTICovOwogCi0JKHZvaWQpc2NjLmNoYV9iX2N0cmw7CQkvKiByZXNldCByZWcgcG9pbnRlciAqLworCSh2b2lkKWF0YXJpX3NjYy5jaGFfYl9jdHJsOwkvKiByZXNldCByZWcgcG9pbnRlciAqLwogCVNDQ19XUklURSg5LCAweGMwKTsJCS8qIHJlc2V0ICovCiAJTE9OR19ERUxBWSgpOwkJCS8qIGV4dHJhIGRlbGF5IGFmdGVyIFdSOSBhY2Nlc3MgKi8KIAlTQ0NfV1JJVEUoNCwgKGNmbGFnICYgUEFSRU5CKSA/ICgoY2ZsYWcgJiBQQVJPREQpID8gMHgwMSA6IDB4MDMpCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpaHcuaAppbmRleCBhNzE0ZTFhLi5mNTFmNzA5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlody5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWh3LmgKQEAgLTQ0OSw3ICs0NDksNyBAQAogICB1X2NoYXIgY2hhcl9kdW1teTM7CiAgIHVfY2hhciBjaGFfYl9kYXRhOwogIH07Ci0jIGRlZmluZSBzY2MgKCgqKHZvbGF0aWxlIHN0cnVjdCBTQ0MqKVNDQ19CQVMpKQorIyBkZWZpbmUgYXRhcmlfc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKilTQ0NfQkFTKSkKIAogLyogVGhlIEVTQ0MgKFo4NTIzMCkgaW4gYW4gQXRhcmkgU1QuIFRoZSBjaGFubmVscyBhcmUgcmV2ZXJzZWQhICovCiAjIGRlZmluZSBzdF9lc2NjICgoKih2b2xhdGlsZSBzdHJ1Y3QgU0NDKikweGZmZmZmYTMxKSkKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9zdHJpbmcuaAppbmRleCAyOTM2ZGRhLi4zMjE5ODQ1IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vc3RyaW5nLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3N0cmluZy5oCkBAIC04MSwxOCArODEsNiBAQAogCXN0cmNweShfX2QgKyBzdHJsZW4oX19kKSwgKHMpKTsJCVwKIH0pCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfU1RSQ0hSCi1zdGF0aWMgaW5saW5lIGNoYXIgKnN0cmNocihjb25zdCBjaGFyICpzLCBpbnQgYykKLXsKLQljaGFyIHNjLCBjaCA9IGM7Ci0KLQlmb3IgKDsgKHNjID0gKnMrKykgIT0gY2g7ICkgewotCQlpZiAoIXNjKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCXJldHVybiAoY2hhciAqKXMgLSAxOwotfQotCiAjaWZuZGVmIENPTkZJR19DT0xERklSRQogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJDTVAKIHN0YXRpYyBpbmxpbmUgaW50IHN0cmNtcChjb25zdCBjaGFyICpjcywgY29uc3QgY2hhciAqY3QpCkBAIC0xMTEsMTQgKzk5LDEyIEBACiAJCTogIithIiAoY3MpLCAiK2EiIChjdCksICI9ZCIgKHJlcykpOwogCXJldHVybiByZXM7CiB9CisjZW5kaWYgLyogQ09ORklHX0NPTERGSVJFICovCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNTU9WRQogZXh0ZXJuIHZvaWQgKm1lbW1vdmUodm9pZCAqLCBjb25zdCB2b2lkICosIF9fa2VybmVsX3NpemVfdCk7CiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfTUVNQ01QCi1leHRlcm4gaW50IG1lbWNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgX19rZXJuZWxfc2l6ZV90KTsKICNkZWZpbmUgbWVtY21wKGQsIHMsIG4pIF9fYnVpbHRpbl9tZW1jbXAoZCwgcywgbikKLSNlbmRpZiAvKiBDT05GSUdfQ09MREZJUkUgKi8KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQKIGV4dGVybiB2b2lkICptZW1zZXQodm9pZCAqLCBpbnQsIF9fa2VybmVsX3NpemVfdCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvbGliL3N0cmluZy5jIGIvYXJjaC9tNjhrL2xpYi9zdHJpbmcuYwppbmRleCA0MjUzZjg3Li5kMzk5YzVmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbGliL3N0cmluZy5jCisrKyBiL2FyY2gvbTY4ay9saWIvc3RyaW5nLmMKQEAgLTI0MywxNCArMjQzLDMgQEAKIAlyZXR1cm4geGRlc3Q7CiB9CiBFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwotCi1pbnQgbWVtY21wKGNvbnN0IHZvaWQgKmNzLCBjb25zdCB2b2lkICpjdCwgc2l6ZV90IGNvdW50KQotewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN1MSwgKnN1MjsKLQotCWZvciAoc3UxID0gY3MsIHN1MiA9IGN0OyBjb3VudCA+IDA7ICsrc3UxLCArK3N1MiwgY291bnQtLSkKLQkJaWYgKCpzdTEgIT0gKnN1MikKLQkJCXJldHVybiAqc3UxIDwgKnN1MiA/IC0xIDogKzE7Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGVmMzMyMTMuLjQ3ZTE1ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0xNDEsNiArMTQxLDEyIEBACiAJCSooX19wYXJhbSkKIAkJX19zdG9wX19fcGFyYW0gPSAuOwogCisJCS8qIEJ1aWx0LWluIG1vZHVsZSB2ZXJzaW9ucyAqLworCQkuID0gQUxJR04oNCkgOworCQlfX3N0YXJ0X19fbW9kdmVyID0gLjsKKwkJKihfX21vZHZlcikKKwkJX19zdG9wX19fbW9kdmVyID0gLjsKKwogCQkuID0gQUxJR04oNCkgOwogCQlfZXRleHQgPSAuIDsKIAl9ID4gVEVYVApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlIGIvYXJjaC9tNjhrbm9tbXUvbGliL01ha2VmaWxlCmluZGV4IGQ5NGQ3MDkuLjMyZDg1MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL202OGtub21tdS9saWIvTWFrZWZpbGUKQEAgLTQsNCArNCw0IEBACiAKIGxpYi15CTo9IGFzaGxkaTMubyBhc2hyZGkzLm8gbHNocmRpMy5vIFwKIAkgICBtdWxkaTMubyBtdWxzaTMubyBkaXZzaTMubyB1ZGl2c2kzLm8gbW9kc2kzLm8gdW1vZHNpMy5vIFwKLQkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbXNldC5vIGRlbGF5Lm8KKwkgICBjaGVja3N1bS5vIG1lbWNweS5vIG1lbW1vdmUubyBtZW1zZXQubyBkZWxheS5vCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9saWIvbWVtbW92ZS5jIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2RjZmU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9tNjhrbm9tbXUvbGliL21lbW1vdmUuYwpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIF9fSU5fU1RSSU5HX0MKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCit2b2lkICptZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisJdm9pZCAqeGRlc3QgPSBkZXN0OworCXNpemVfdCB0ZW1wOworCisJaWYgKCFuKQorCQlyZXR1cm4geGRlc3Q7CisKKwlpZiAoZGVzdCA8IHNyYykgeworCQlpZiAoKGxvbmcpZGVzdCAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QrKyA9ICpjc3JjKys7CisJCQlkZXN0ID0gY2Rlc3Q7CisJCQlzcmMgPSBjc3JjOworCQkJbi0tOworCQl9CisJCWlmIChuID4gMiAmJiAobG9uZylkZXN0ICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJCW4gLT0gMjsKKwkJfQorCQl0ZW1wID0gbiA+PiAyOworCQlpZiAodGVtcCkgeworCQkJbG9uZyAqbGRlc3QgPSBkZXN0OworCQkJY29uc3QgbG9uZyAqbHNyYyA9IHNyYzsKKwkJCXRlbXAtLTsKKwkJCWRvCisJCQkJKmxkZXN0KysgPSAqbHNyYysrOworCQkJd2hpbGUgKHRlbXAtLSk7CisJCQlkZXN0ID0gbGRlc3Q7CisJCQlzcmMgPSBsc3JjOworCQl9CisJCWlmIChuICYgMikgeworCQkJc2hvcnQgKnNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IHNob3J0ICpzc3JjID0gc3JjOworCQkJKnNkZXN0KysgPSAqc3NyYysrOworCQkJZGVzdCA9IHNkZXN0OworCQkJc3JjID0gc3NyYzsKKwkJfQorCQlpZiAobiAmIDEpIHsKKwkJCWNoYXIgKmNkZXN0ID0gZGVzdDsKKwkJCWNvbnN0IGNoYXIgKmNzcmMgPSBzcmM7CisJCQkqY2Rlc3QgPSAqY3NyYzsKKwkJfQorCX0gZWxzZSB7CisJCWRlc3QgPSAoY2hhciAqKWRlc3QgKyBuOworCQlzcmMgPSAoY29uc3QgY2hhciAqKXNyYyArIG47CisJCWlmICgobG9uZylkZXN0ICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJCWRlc3QgPSBjZGVzdDsKKwkJCXNyYyA9IGNzcmM7CisJCQluLS07CisJCX0KKwkJaWYgKG4gPiAyICYmIChsb25nKWRlc3QgJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQkJbiAtPSAyOworCQl9CisJCXRlbXAgPSBuID4+IDI7CisJCWlmICh0ZW1wKSB7CisJCQlsb25nICpsZGVzdCA9IGRlc3Q7CisJCQljb25zdCBsb25nICpsc3JjID0gc3JjOworCQkJdGVtcC0tOworCQkJZG8KKwkJCQkqLS1sZGVzdCA9ICotLWxzcmM7CisJCQl3aGlsZSAodGVtcC0tKTsKKwkJCWRlc3QgPSBsZGVzdDsKKwkJCXNyYyA9IGxzcmM7CisJCX0KKwkJaWYgKG4gJiAyKSB7CisJCQlzaG9ydCAqc2Rlc3QgPSBkZXN0OworCQkJY29uc3Qgc2hvcnQgKnNzcmMgPSBzcmM7CisJCQkqLS1zZGVzdCA9ICotLXNzcmM7CisJCQlkZXN0ID0gc2Rlc3Q7CisJCQlzcmMgPSBzc3JjOworCQl9CisJCWlmIChuICYgMSkgeworCQkJY2hhciAqY2Rlc3QgPSBkZXN0OworCQkJY29uc3QgY2hhciAqY3NyYyA9IHNyYzsKKwkJCSotLWNkZXN0ID0gKi0tY3NyYzsKKwkJfQorCX0KKwlyZXR1cm4geGRlc3Q7Cit9CitFWFBPUlRfU1lNQk9MKG1lbW1vdmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTI0OS9pbnRjMi5jCmluZGV4IGQwOWQ5ZGEuLmM1MTUxZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUyNDkvaW50YzIuYworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MjQ5L2ludGMyLmMKQEAgLTUwLDggKzUwLDEwIEBACiAJaW50IGlycTsKIAogCS8qIEdQSU8gaW50ZXJydXB0IHNvdXJjZXMgKi8KLQlmb3IgKGlycSA9IE1DRklOVEMyX0dQSU9JUlEwOyAoaXJxIDw9IE1DRklOVEMyX0dQSU9JUlE3KTsgaXJxKyspCisJZm9yIChpcnEgPSBNQ0ZJTlRDMl9HUElPSVJRMDsgKGlycSA8PSBNQ0ZJTlRDMl9HUElPSVJRNyk7IGlycSsrKSB7CiAJCWlycV9kZXNjW2lycV0uY2hpcCA9ICZpbnRjMl9pcnFfZ3Bpb19jaGlwOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzI4L2VudHJ5LlMKaW5kZXggMjQwYTdhNi4uNjc2OTYwYyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzMjgvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODMyOC9lbnRyeS5TCkBAIC0xMDgsNyArMTA4LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb21tcHJvYy5jCmluZGV4IGYyN2U2ODguLjhlNGUxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2NvbW1wcm9jLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29tbXByb2MuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiBjcG1faW5zdGFsbF9oYW5kbGVyKGludCB2ZWMsIHZvaWQgKCpoYW5kbGVyKSgpLCB2b2lkICpkZXZfaWQpCiB7CiAKLQlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIElSUV9GTEdfTE9DSywgInRpbWVyIiwgZGV2X2lkKTsKKwlyZXF1ZXN0X2lycSh2ZWMsIGhhbmRsZXIsIDAsICJ0aW1lciIsIGRldl9pZCk7CiAKIC8qIAlpZiAoY3BtX3ZlY3NbdmVjXS5oYW5kbGVyICE9IDApICovCiAvKiAJCXByaW50ayhLRVJOX0lORk8gIkNQTSBpbnRlcnJ1cHQgJXggcmVwbGFjaW5nICV4XG4iLCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9jb25maWcuYwppbmRleCBhYzYyOWZhMy4uOWRkNWJjYSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvY29uZmlnLmMKQEAgLTc1LDcgKzc1LDcgQEAKICAgLyogU2V0IGNvbXBhcmUgcmVnaXN0ZXIgIDMyS2h6IC8gMzIgLyAxMCA9IDEwMCAqLwogICBUQ01QID0gMTA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAotICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCBJUlFfRkxHX0xPQ0ssICJ0aW1lciIsIE5VTEwpOworICByZXF1ZXN0X2lycShJUlFfTUFDSFNQRUMgfCAxLCB0aW1lcl9yb3V0aW5lLCAwLCAidGltZXIiLCBOVUxMKTsKICNlbmRpZgogCiAgIC8qIEdlbmVyYWwgcHVycG9zZSBxdWljYyB0aW1lcnM6IE1DNjgzNjBVTSBwNy0yMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2VudHJ5LlMKaW5kZXggOGEyODc4OC4uNDZjMWIxOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvZW50cnkuUworKysgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9lbnRyeS5TCkBAIC0xMDQsNyArMTA0LDYgQEAKIAltb3ZlbAklZDEsJWEyCiAxOgogCW1vdmUJJWEyQChUSV9GTEFHUyksJWQxCS8qIHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJI19USUZfV09SS19NQVNLLCVkMQogCWpuZQlMd29ya190b19kbwogCVJFU1RPUkVfQUxMCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzY4MzYwL2ludHMuYwppbmRleCBhZDk2YWIxLi5hMjkwNDFjIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9wbGF0Zm9ybS82ODM2MC9pbnRzLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNjgzNjAvaW50cy5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAlwcXVpY2MtPmludHJfY2ltciA9IDB4MDAwMDAwMDA7CiAKIAlmb3IgKGkgPSAwOyAoaSA8IE5SX0lSUVMpOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycSwgJmludGNfaXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9jaGlwKGksICZpbnRjX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUyBiL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKaW5kZXggNGRkZmMzZGEuLjU4MzdjZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtL2NvbGRmaXJlL2VudHJ5LlMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vY29sZGZpcmUvZW50cnkuUwpAQCAtMTM4LDcgKzEzOCw2IEBACiAJYW5kbAkjLVRIUkVBRF9TSVpFLCVkMQkvKiBhdCBiYXNlIG9mIGtlcm5lbCBzdGFjayAqLwogCW1vdmVsCSVkMSwlYTAKIAltb3ZlbAklYTBAKFRJX0ZMQUdTKSwlZDEJLyogZ2V0IHRocmVhZF9pbmZvLT5mbGFncyAqLwotCWFuZGwJIzB4ZWZmZiwlZDEKIAlqbmUJTHdvcmtfdG9fZG8JCS8qIHN0aWxsIHdvcmsgdG8gZG8gKi8KIAogTHJldHVybjoKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9pcnFmbGFncy5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKaW5kZXggNWZkMzE5MC4uYzQ1MzJmMCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lycWZsYWdzLmgKQEAgLTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9yZWdpc3RlcnMuaD4KIAotI2lmZGVmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgorI2lmIENPTkZJR19YSUxJTlhfTUlDUk9CTEFaRTBfVVNFX01TUl9JTlNUUgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXJjaF9sb2NhbF9pcnFfc2F2ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggYjIzZjY4MC4uODg1NTc0YSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC00MTEsMjAgKzQxMSwxOSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUocHRlX3QgKnAsIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCXVuc2lnbmVkIGxvbmcgc2V0KQogewotCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXAsIG1zcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBvbGQsIHRtcDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCi0JbXNyY2xyCSUyLCAweDJcblwKLQlub3BcblwKLQlsdwklMCwgJTQsIHIwXG5cCi0JYW5kbgklMSwgJTAsICU1XG5cCi0Jb3IJJTEsICUxLCAlNlxuXAotCXN3CSUxLCAlNCwgcjBcblwKLQltdHMgICAgIHJtc3IsICUyXG5cCi0Jbm9wIgotCTogIj0mciIgKG9sZCksICI9JnIiICh0bXApLCAiPSZyIiAobXNyKSwgIj1tIiAoKnApCi0JOiAiciIgKCh1bnNpZ25lZCBsb25nKShwICsgMSkgLSA0KSwgInIiIChjbHIpLCAiciIgKHNldCksICJtIiAoKnApCi0JOiAiY2MiKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCSJsdwklMCwgJTIsIHIwCVxuIgorCQkJCSJhbmRuCSUxLCAlMCwgJTMJXG4iCisJCQkJIm9yCSUxLCAlMSwgJTQJXG4iCisJCQkJInN3CSUxLCAlMiwgcjAJXG4iCisJCQk6ICI9JnIiIChvbGQpLCAiPSZyIiAodG1wKQorCQkJOiAiciIgKCh1bnNpZ25lZCBsb25nKShwICsgMSkgLSA0KSwgInIiIChjbHIpLCAiciIgKHNldCkKKwkJCTogImNjIik7CisKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIG9sZDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvY3B1L3B2ci5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKaW5kZXggZTAxYWZhNi4uNDg4YzFlZCAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKKysrIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9jcHUvcHZyLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAlyZWdpc3RlciB1bnNpZ25lZCB0bXAgX19hc21fXygicjMiKTsJCQlcCiAJdG1wID0gMHgwOwkvKiBQcmV2ZW50IHdhcm5pbmcgYWJvdXQgdW51c2VkICovCVwKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCQlcCi0JCQkibWZzCSUwLCBycHZyIiAjcHZyaWQgIjsiCVwKKwkJCSJtZnMJJTAsIHJwdnIiICNwdnJpZCAiOyIJCVwKIAkJCTogIj1yIiAodG1wKSA6IDogIm1lbW9yeSIpOyAJCVwKIAl2YWwgPSB0bXA7CQkJCQkJXAogfQpAQCAtNTQsNyArNTQsNyBAQAogCWlmICghKGZsYWdzICYgUFZSX01TUl9CSVQpKQogCQlyZXR1cm4gMDsKIAotCWdldF9zaW5nbGVfcHZyKDB4MDAsIHB2cjApOworCWdldF9zaW5nbGVfcHZyKDAsIHB2cjApOwogCXByX2RlYnVnKCIlczogcHZyMCBpcyAweCUwOHhcbiIsIF9fZnVuY19fLCBwdnIwKTsKIAogCWlmIChwdnIwICYgUFZSMF9QVlJfRlVMTF9NQVNLKQpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9oZWFkLlMgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwppbmRleCA0MjQzNDAwLi43NzhhNWNlIDEwMDY0NAotLS0gYS9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2hlYWQuUwpAQCAtNjIsMjMgKzYyLDMyIEBACiAJYW5kaQlyMSwgcjEsIH4yCiAJbXRzCXJtc3IsIHIxCiAvKgotICogSGVyZSBpcyBjaGVja2luZyBtZWNoYW5pc20gd2hpY2ggY2hlY2sgaWYgTWljcm9ibGF6ZSBoYXMgbXNyIGluc3RydWN0aW9ucwotICogV2UgbG9hZCBtc3IgYW5kIGNvbXBhcmUgaXQgd2l0aCBwcmV2aW91cyByMSB2YWx1ZSAtIGlmIGlzIHRoZSBzYW1lLAotICogbXNyIGluc3RydWN0aW9ucyB3b3JrcyBpZiBub3QgLSBjcHUgZG9uJ3QgaGF2ZSB0aGVtLgorICogQWNjb3JkaW5nIHRvIFhpbGlueCwgbXNyY2xyIGluc3RydWN0aW9uIGJlaGF2ZXMgbGlrZSAnbWZzIHJYLHJwYycKKyAqIGlmIHRoZSBtc3JjbHIgaW5zdHJ1Y3Rpb24gaXMgbm90IGVuYWJsZWQuIFdlIHVzZSB0aGlzIHRvIGRldGVjdAorICogaWYgdGhlIG9wY29kZSBpcyBhdmFpbGFibGUsIGJ5IGlzc3VpbmcgbXNyY2xyIGFuZCB0aGVuIHRlc3RpbmcgdGhlIHJlc3VsdC4KKyAqIHI4ID09IDAgLSBtc3IgaW5zdHJ1Y3Rpb25zIGFyZSBpbXBsZW1lbnRlZAorICogcjggIT0gMCAtIG1zciBpbnN0cnVjdGlvbnMgYXJlIG5vdCBpbXBsZW1lbnRlZAogICovCi0JLyogcjg9MCAtIEkgaGF2ZSBtc3IgaW5zdHIsIDEgLSBJIGRvbid0IGhhdmUgdGhlbSAqLwotCXJzdWJpCXIwLCByMCwgMQkvKiBzZXQgdGhlIGNhcnJ5IGJpdCAqLwotCW1zcmNscglyMCwgMHg0CQkvKiB0cnkgdG8gY2xlYXIgaXQgKi8KLQkvKiByZWFkIHRoZSBjYXJyeSBiaXQsIHI4IHdpbGwgYmUgJzAnIGlmIG1zcmNsciBleGlzdHMgKi8KLQlhZGRpawlyOCwgcjAsIDAKKwltc3JjbHIJcjgsIDAgLyogY2xlYXIgbm90aGluZyAtIGp1c3QgcmVhZCBtc3IgZm9yIHRlc3QgKi8KKwljbXB1CXI4LCByOCwgcjEgLyogcjEgbXVzdCBjb250YWluIG1zciByZWcgY29udGVudCAqLwogCiAvKiByNyBtYXkgcG9pbnQgdG8gYW4gRkRULCBvciB0aGVyZSBtYXkgYmUgb25lIGxpbmtlZCBpbi4KICAgIGlmIGl0J3MgaW4gcjcsIHdlJ3ZlIGdvdCB0byBzYXZlIGl0IGF3YXkgQVNBUC4KICAgIFdlIGVuc3VyZSByNyBwb2ludHMgdG8gYSB2YWxpZCBGRFQsIGp1c3QgaW4gY2FzZSB0aGUgYm9vdGxvYWRlcgogICAgaXMgYnJva2VuIG9yIG5vbi1leGlzdGVudCAqLwogCWJlcWkJcjcsIG5vX2ZkdF9hcmcJCQkvKiBOVUxMIHBvaW50ZXI/ICBkb24ndCBjb3B5ICovCi0JbHcJcjExLCByMCwgcjcJCQkvKiBEb2VzIHI3IHBvaW50IHRvIGEgKi8KLQlyc3ViaQlyMTEsIHIxMSwgT0ZfRFRfSEVBREVSCQkvKiB2YWxpZCBGRFQ/ICovCisvKiBEb2VzIHI3IHBvaW50IHRvIGEgdmFsaWQgRkRUPyBMb2FkIEhFQURFUiBtYWdpYyBudW1iZXIgKi8KKwkvKiBSdW4gdGltZSBCaWcvTGl0dGxlIGVuZGlhbiBwbGF0Zm9ybSAqLworCS8qIFNhdmUgMSBhcyB3b3JkIGFuZCBsb2FkIGJ5dGUgLSAwIC0gQklHLCAxIC0gTElUVExFICovCisJYWRkaWsJcjExLCByMCwgMHgxIC8qIEJJRy9MSVRUTEUgY2hlY2tpbmcgdmFsdWUgKi8KKwkvKiBfX2Jzc19zdGFydCB3aWxsIGJlIHplcm9lZCBsYXRlciAtIGl0IGlzIGp1c3QgdGVtcCBsb2NhdGlvbiAqLworCXN3aQlyMTEsIHIwLCBUT1BIWVMoX19ic3Nfc3RhcnQpCisJbGJ1aQlyMTEsIHIwLCBUT1BIWVMoX19ic3Nfc3RhcnQpCisJYmVxaWQJcjExLCBiaWdfZW5kaWFuIC8qIERPIE5PVCBicmVhayBkZWxheSBzdG9wIGRlcGVuZGVuY3kgKi8KKwlsdwlyMTEsIHIwLCByNyAvKiBCaWcgZW5kaWFuIGxvYWQgaW4gZGVsYXkgc2xvdCAqLworCWx3cglyMTEsIHIwLCByNyAvKiBMaXR0bGUgZW5kaWFuIGxvYWQgKi8KK2JpZ19lbmRpYW46CisJcnN1YmkJcjExLCByMTEsIE9GX0RUX0hFQURFUgkvKiBDaGVjayBGRFQgaGVhZGVyICovCiAJYmVxaQlyMTEsIF9wcmVwYXJlX2NvcHlfZmR0CiAJb3IJcjcsIHIwLCByMAkJLyogY2xlYXIgUjcgd2hlbiBub3QgdmFsaWQgRFRCICovCiAJYm5laQlyMTEsIG5vX2ZkdF9hcmcJCQkvKiBObyAtIGdldCBvdXQgb2YgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9od19leGNlcHRpb25faGFuZGxlci5TCmluZGV4IDI1ZjZlMDcuLjc4MjY4MGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvaHdfZXhjZXB0aW9uX2hhbmRsZXIuUworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL2h3X2V4Y2VwdGlvbl9oYW5kbGVyLlMKQEAgLTE0NywxMCArMTQ3LDYgQEAKIAkjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfQkFSUkVMID4gMAogCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pCVwKIAkJYnNybGkgckQsIHJBLCBpbW0KLQkjZWxpZiBDT05GSUdfWElMSU5YX01JQ1JPQkxBWkUwX1VTRV9ESVYgPiAwCi0JI2RlZmluZSBCU1JMSShyRCwgckEsIGltbSkJXAotCQlvcmkgckQsIHIwLCAoMSA8PCBpbW0pOwlcCi0JCWlkaXZ1IHJELCByRCwgckEKIAkjZWxzZQogCSNkZWZpbmUgQlNSTEkockQsIHJBLCBpbW0pIEJTUkxJICMjIGltbSAockQsIHJBKQogCS8qIE9ubHkgdGhlIHVzZWQgc2hpZnQgY29uc3RhbnRzIGRlZmluZWQgaGVyZSAtIGFkZCBtb3JlIGlmIG5lZWRlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9zZXR1cC5jCmluZGV4IGJiMTU1OGUuLjkzMTJmYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3NldHVwLmMKQEAgLTE2MSwxMSArMTYxLDExIEBACiAjaWYgQ09ORklHX1hJTElOWF9NSUNST0JMQVpFMF9VU0VfTVNSX0lOU1RSCiAJaWYgKG1zcikKIAkJZXByaW50aygiISEhWW91ciBrZXJuZWwgaGFzIHNldHVwIE1TUiBpbnN0cnVjdGlvbiBidXQgIgotCQkJCSJDUFUgZG9uJ3QgaGF2ZSBpdCAlZFxuIiwgbXNyKTsKKwkJCQkiQ1BVIGRvbid0IGhhdmUgaXQgJXhcbiIsIG1zcik7CiAjZWxzZQogCWlmICghbXNyKQogCQllcHJpbnRrKCIhISFZb3VyIGtlcm5lbCBub3Qgc2V0dXAgTVNSIGluc3RydWN0aW9uIGJ1dCAiCi0JCQkJIkNQVSBoYXZlIGl0ICVkXG4iLCBtc3IpOworCQkJCSJDUFUgaGF2ZSBpdCAleFxuIiwgbXNyKTsKICNlbmRpZgogCiAJZm9yIChzcmMgPSBfX2l2dF9zdGFydDsgc3JjIDwgX19pdnRfZW5kOyBzcmMrKywgZHN0KyspCmRpZmYgLS1naXQgYS9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMgYi9hcmNoL21pY3JvYmxhemUvbGliL2Zhc3Rjb3B5LlMKaW5kZXggZmRjNDhiYi4uNjIwMjFkNyAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2xpYi9mYXN0Y29weS5TCisrKyBiL2FyY2gvbWljcm9ibGF6ZS9saWIvZmFzdGNvcHkuUwpAQCAtMjksNiArMjksMTAgQEAKICAqCWJldHdlZW4gbWVtIGxvY2F0aW9ucyB3aXRoIHNpemUgb2YgeGZlciBzcGVjJ2QgaW4gYnl0ZXMKICAqLwogCisjaWZkZWYgX19NSUNST0JMQVpFRUxfXworI2Vycm9yIE1pY3JvYmxhemUgTEUgbm90IHN1cHBvcnQgQVNNIG9wdGltaXplZCBsaWIgZnVuYy4gRGlzYWJsZSBPUFRfTElCX0FTTS4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCS50ZXh0CiAJLmdsb2JsCW1lbWNweQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3BkY19jb25zLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwppbmRleCAxMWJkZDY4Li5mYzc3MGJlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvcGRjX2NvbnMuYwpAQCAtMTY5LDExICsxNjksMTEgQEAKIAogCXN0cnVjdCBjb25zb2xlICp0bXA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZm9yX2VhY2hfY29uc29sZSh0bXApCiAJCWlmICh0bXAgPT0gJnBkY19jb25zKQogCQkJYnJlYWs7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAoIXRtcCkgewogCQlwcmludGsoS0VSTl9JTkZPICJQREMgY29uc29sZSBkcml2ZXIgbm90IHJlZ2lzdGVyZWQgYW55bW9yZSwgbm90IGNyZWF0aW5nICVzXG4iLCBwZGNfY29ucy5uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDk5MWQ1OTkuLmZlNTZhMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtMjQwLDYgKzI0MCwxMiBAQAogCSAqIGNsYWltcyB0byBzdXBwb3J0IGtleGVjLgogCSAqLwogCWludCAoKm1hY2hpbmVfa2V4ZWNfcHJlcGFyZSkoc3RydWN0IGtpbWFnZSAqaW1hZ2UpOworCisJLyogQ2FsbGVkIHRvIHBlcmZvcm0gdGhlIF9yZWFsXyBrZXhlYy4KKwkgKiBEbyBOT1QgYWxsb2NhdGUgbWVtb3J5IG9yIGZhaWwgaGVyZS4gV2UgYXJlIHBhc3QgdGhlIHBvaW50IG9mCisJICogbm8gcmV0dXJuLgorCSAqLworCXZvaWQgKCptYWNoaW5lX2tleGVjKShzdHJ1Y3Qga2ltYWdlICppbWFnZSk7CiAjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCiAKICNpZmRlZiBDT05GSUdfU1VTUEVORApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKaW5kZXggOGVhZWQ4MS4uMTcxOTRmYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWJvb2szZS5oCkBAIC00MCw4ICs0MCw4IEBACiAKIC8qIE1BUyByZWdpc3RlcnMgYml0IGRlZmluaXRpb25zICovCiAKLSNkZWZpbmUgTUFTMF9UTEJTRUwoeCkJCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQotI2RlZmluZSBNQVMwX0VTRUwoeCkJCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQorI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkJKCgoeCkgPDwgMjgpICYgMHgzMDAwMDAwMCkKKyNkZWZpbmUgTUFTMF9FU0VMKHgpCQkoKCh4KSA8PCAxNikgJiAweDBGRkYwMDAwKQogI2RlZmluZSBNQVMwX05WKHgpCQkoKHgpICYgMHgwMDAwMEZGRikKICNkZWZpbmUgTUFTMF9IRVMJCTB4MDAwMDQwMDAKICNkZWZpbmUgTUFTMF9XUV9BTExXQVlTCQkweDAwMDAwMDAwCkBAIC01MCwxMiArNTAsMTIgQEAKIAogI2RlZmluZSBNQVMxX1ZBTElECQkweDgwMDAwMDAwCiAjZGVmaW5lIE1BUzFfSVBST1QJCTB4NDAwMDAwMDAKLSNkZWZpbmUgTUFTMV9USUQoeCkJCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQorI2RlZmluZSBNQVMxX1RJRCh4KQkJKCgoeCkgPDwgMTYpICYgMHgzRkZGMDAwMCkKICNkZWZpbmUgTUFTMV9JTkQJCTB4MDAwMDIwMDAKICNkZWZpbmUgTUFTMV9UUwkJCTB4MDAwMDEwMDAKICNkZWZpbmUgTUFTMV9UU0laRV9NQVNLCQkweDAwMDAwZjgwCiAjZGVmaW5lIE1BUzFfVFNJWkVfU0hJRlQJNwotI2RlZmluZSBNQVMxX1RTSVpFKHgpCQkoKHggPDwgTUFTMV9UU0laRV9TSElGVCkgJiBNQVMxX1RTSVpFX01BU0spCisjZGVmaW5lIE1BUzFfVFNJWkUoeCkJCSgoKHgpIDw8IE1BUzFfVFNJWkVfU0hJRlQpICYgTUFTMV9UU0laRV9NQVNLKQogCiAjZGVmaW5lIE1BUzJfRVBOCQkweEZGRkZGMDAwCiAjZGVmaW5lIE1BUzJfWDAJCQkweDAwMDAwMDQwCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCA1M2I2NGJlLi5kYTRiMjAwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTEwMSw3ICsxMDEsNyBAQAogCiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KICNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkoTUVNT1JZX1NUQVJUID4+IFBBR0VfU0hJRlQpCi0jZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmIChwZm4pIDwgKEFSQ0hfUEZOX09GRlNFVCArIG1heF9tYXBucikpCisjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPj0gQVJDSF9QRk5fT0ZGU0VUICYmIChwZm4pIDwgbWF4X21hcG5yKQogI2VuZGlmCiAKICNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKQlwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwppbmRleCA1NWNiYTRhLi5mOGNkOWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS9tbXUuaD4KIAogX0dMT0JBTChfX3NldHVwX2NwdV82MDMpCi0JbWZscglyNAorCW1mbHIJcjUKIEJFR0lOX01NVV9GVFJfU0VDVElPTgogCWxpCXIxMCwwCiAJbXRzcHIJU1BSTl9TUFJHXzYwM19MUlUscjEwCQkvKiBpbml0IFNXIExSVSB0cmFja2luZyAqLwpAQCAtMjcsNjAgKzI3LDYwIEBACiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjA0KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzYwNF9oaWQwCi0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc1MGN4KQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzUwXzc0MDBfaGlkMAogCWJsCXNldHVwXzc1MGN4Ci0JbXRscglyNAorCW10bHIJcjUKIAlibHIKIF9HTE9CQUwoX19zZXR1cF9jcHVfNzUwZngpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlfX2luaXRfZnB1X3JlZ2lzdGVycwogCWJsCXNldHVwX2NvbW1vbl9jYWNoZXMKIAlibAlzZXR1cF83NTBfNzQwMF9oaWQwCiAJYmwJc2V0dXBfNzUwZngKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDAwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDAwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV83NDEwKQotCW1mbHIJcjQKKwltZmxyCXI1CiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIAlibAlzZXR1cF83NDEwX3dvcmthcm91bmRzCiAJYmwJc2V0dXBfY29tbW9uX2NhY2hlcwogCWJsCXNldHVwXzc1MF83NDAwX2hpZDAKIAlsaQlyMywwCiAJbXRzcHIJU1BSTl9MMkNSMixyMwotCW10bHIJcjQKKwltdGxyCXI1CiAJYmxyCiBfR0xPQkFMKF9fc2V0dXBfY3B1Xzc0NXgpCi0JbWZscglyNAorCW1mbHIJcjUKIAlibAlzZXR1cF9jb21tb25fY2FjaGVzCiAJYmwJc2V0dXBfNzQ1eF9zcGVjaWZpY3MKLQltdGxyCXI0CisJbXRscglyNQogCWJscgogCiAvKiBFbmFibGUgY2FjaGVzIGZvciA2MDMncywgNjA0LCA3NTAgJiA3NDAwICovCkBAIC0xOTQsMTAgKzE5NCwxMCBAQAogCWNyb3IJNCpjcjArZXEsNCpjcjArZXEsNCpjcjErZXEKIAljcm9yCTQqY3IwK2VxLDQqY3IwK2VxLDQqY3IyK2VxCiAJYm5lbHIKLQlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJbHd6CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWxpCXI3LENQVV9GVFJfQ0FOX05BUAogCWFuZGMJcjYscjYscjcKLQlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogCWJscgogCiAvKiA3NTBmeCBzcGVjaWZpYwpAQCAtMjI1LDEyICsyMjUsMTIgQEAKIAlhbmRpcy4JcjExLHIxMSxMM0NSX0wzRUBoCiAJYmVxCTFmCiBFTkRfRlRSX1NFQ1RJT05fSUZTRVQoQ1BVX0ZUUl9MM0NSKQotCWx3eglyNixDUFVfU1BFQ19GRUFUVVJFUyhyNSkKKwlsd3oJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjQpCiAJYW5kaS4JcjAscjYsQ1BVX0ZUUl9MM19ESVNBQkxFX05BUAogCWJlcQkxZgogCWxpCXI3LENQVV9GVFJfQ0FOX05BUAogCWFuZGMJcjYscjYscjcKLQlzdHcJcjYsQ1BVX1NQRUNfRkVBVFVSRVMocjUpCisJc3R3CXI2LENQVV9TUEVDX0ZFQVRVUkVTKHI0KQogMToKIAltZnNwcglyMTEsU1BSTl9ISUQwCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA4ZDc0YTI0Li5lOGU5MTVjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0yMDc2LDggKzIwNzYsOCBAQAogCSAqIHBvaW50ZXIgb24gcHBjNjQgYW5kIGJvb2tlIGFzIHdlIGFyZSBydW5uaW5nIGF0IDAgaW4gcmVhbCBtb2RlCiAJICogb24gcHBjNjQgYW5kIHJlbG9jX29mZnNldCBpcyBhbHdheXMgMCBvbiBib29rZS4KIAkgKi8KLQlpZiAocy0+Y3B1X3NldHVwKSB7Ci0JCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOworCWlmICh0LT5jcHVfc2V0dXApIHsKKwkJdC0+Y3B1X3NldHVwKG9mZnNldCwgdCk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNDlhMTcwYS4uYTVmODY3MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTg3LDcgKzg3LDEwIEBACiAKIAlzYXZlX2Z0cmFjZV9lbmFibGVkID0gX19mdHJhY2VfZW5hYmxlZF9zYXZlKCk7CiAKLQlkZWZhdWx0X21hY2hpbmVfa2V4ZWMoaW1hZ2UpOworCWlmIChwcGNfbWQubWFjaGluZV9rZXhlYykKKwkJcHBjX21kLm1hY2hpbmVfa2V4ZWMoaW1hZ2UpOworCWVsc2UKKwkJZGVmYXVsdF9tYWNoaW5lX2tleGVjKGltYWdlKTsKIAogCV9fZnRyYWNlX2VuYWJsZWRfcmVzdG9yZShzYXZlX2Z0cmFjZV9lbmFibGVkKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMKaW5kZXggNGRjZjVmOC4uYjBkYzhmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50X2ZzbF9lbWIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCkBAIC01OTYsNiArNTk2LDcgQEAKIAkJCWlmIChsZWZ0IDw9IDApCiAJCQkJbGVmdCA9IHBlcmlvZDsKIAkJCXJlY29yZCA9IDE7CisJCQlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKIAkJfQogCQlpZiAobGVmdCA8IDB4ODAwMDAwMDBMTCkKIAkJCXZhbCA9IDB4ODAwMDAwMDBMTCAtIGxlZnQ7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDdhMWQ1Y2IuLjgzMDNhNmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zNTMsNiArMzUzLDcgQEAKIAkJCXByaW1lX2RlYnVnX3JlZ3MobmV3X3RocmVhZCk7CiB9CiAjZWxzZQkvKiAhQ09ORklHX1BQQ19BRFZfREVCVUdfUkVHUyAqLworI2lmbmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiBzdGF0aWMgdm9pZCBzZXRfZGVidWdfcmVnX2RlZmF1bHRzKHN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQpCiB7CiAJaWYgKHRocmVhZC0+ZGFicikgewpAQCAtMzYwLDYgKzM2MSw3IEBACiAJCXNldF9kYWJyKDApOwogCX0KIH0KKyNlbmRpZiAvKiAhQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogI2VuZGlmCS8qIENPTkZJR19QUENfQURWX0RFQlVHX1JFR1MgKi8KIAogaW50IHNldF9kYWJyKHVuc2lnbmVkIGxvbmcgZGFicikKQEAgLTY3MCwxMSArNjcyLDExIEBACiB7CiAJZGlzY2FyZF9sYXp5X2NwdV9zdGF0ZSgpOwogCi0jaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCiAJZmx1c2hfcHRyYWNlX2h3X2JyZWFrcG9pbnQoY3VycmVudCk7Ci0jZWxzZSAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UUyAqLworI2Vsc2UgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwogCXNldF9kZWJ1Z19yZWdfZGVmYXVsdHMoJmN1cnJlbnQtPnRocmVhZCk7Ci0jZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVFMgKi8KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCmluZGV4IGJmNWNiOTEuLmZkNDgxMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJZGJnKCJyZW1vdmluZyBjcHUgJWx1IGZyb20gbm9kZSAlZFxuIiwgY3B1LCBub2RlKTsKIAogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSkpIHsKLQkJY3B1bWFza19zZXRfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgbm9kZV90b19jcHVtYXNrX21hcFtub2RlXSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBjcHUgJWx1IG5vdCBmb3VuZCBpbiBub2RlICVkXG4iLAogCQkgICAgICAgY3B1LCBub2RlKTsKQEAgLTEyODksMTAgKzEyODksOSBAQAogfQogI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLwogCi0vKiBWcnR1YWwgUHJvY2Vzc29yIEhvbWUgTm9kZSAoVlBITikgc3VwcG9ydCAqLworLyogVmlydHVhbCBQcm9jZXNzb3IgSG9tZSBOb2RlIChWUEhOKSBzdXBwb3J0ICovCiAjaWZkZWYgQ09ORklHX1BQQ19TUExQQVIKLSNkZWZpbmUgVlBITl9OUl9DSEFOR0VfQ1RSUyAoOCkKLXN0YXRpYyB1OCB2cGhuX2NwdV9jaGFuZ2VfY291bnRzW05SX0NQVVNdW1ZQSE5fTlJfQ0hBTkdFX0NUUlNdOworc3RhdGljIHU4IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbTlJfQ1BVU11bTUFYX0RJU1RBTkNFX1JFRl9QT0lOVFNdOwogc3RhdGljIGNwdW1hc2tfdCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiBzdGF0aWMgaW50IHZwaG5fZW5hYmxlZDsKIHN0YXRpYyB2b2lkIHNldF90b3BvbG9neV90aW1lcih2b2lkKTsKQEAgLTEzMDMsMTYgKzEzMDIsMTggQEAKICAqLwogc3RhdGljIHZvaWQgc2V0dXBfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlX2NvdW50ZXJzKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDA7CisJaW50IGNwdTsKKworCS8qIFRoZSBWUEhOIGZlYXR1cmUgc3VwcG9ydHMgYSBtYXhpbXVtIG9mIDggcmVmZXJlbmNlIHBvaW50cyAqLworCUJVSUxEX0JVR19PTihNQVhfRElTVEFOQ0VfUkVGX1BPSU5UUyA+IDgpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlpbnQgaSA9IDA7CisJCWludCBpOwogCQl1OCAqY291bnRzID0gdnBobl9jcHVfY2hhbmdlX2NvdW50c1tjcHVdOwogCQl2b2xhdGlsZSB1OCAqaHlwZXJ2aXNvcl9jb3VudHMgPSBscHBhY2FbY3B1XS52cGhuX2Fzc29jX2NvdW50czsKIAotCQlmb3IgKGkgPSAwOyBpIDwgVlBITl9OUl9DSEFOR0VfQ1RSUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspCiAJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKLQkJfQogCX0KIH0KIApAQCAtMTMyOSw3ICsxMzMwLDcgQEAKICAqLwogc3RhdGljIGludCB1cGRhdGVfY3B1X2Fzc29jaWF0aXZpdHlfY2hhbmdlc19tYXNrKHZvaWQpCiB7Ci0JaW50IGNwdSA9IDAsIG5yX2NwdXMgPSAwOworCWludCBjcHUsIG5yX2NwdXMgPSAwOwogCWNwdW1hc2tfdCAqY2hhbmdlcyA9ICZjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2s7CiAKIAljcHVtYXNrX2NsZWFyKGNoYW5nZXMpOwpAQCAtMTMzOSw4ICsxMzQwLDggQEAKIAkJdTggKmNvdW50cyA9IHZwaG5fY3B1X2NoYW5nZV9jb3VudHNbY3B1XTsKIAkJdm9sYXRpbGUgdTggKmh5cGVydmlzb3JfY291bnRzID0gbHBwYWNhW2NwdV0udnBobl9hc3NvY19jb3VudHM7CiAKLQkJZm9yIChpID0gMDsgaSA8IFZQSE5fTlJfQ0hBTkdFX0NUUlM7IGkrKykgewotCQkJaWYgKGh5cGVydmlzb3JfY291bnRzW2ldID4gY291bnRzW2ldKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkaXN0YW5jZV9yZWZfcG9pbnRzX2RlcHRoOyBpKyspIHsKKwkJCWlmIChoeXBlcnZpc29yX2NvdW50c1tpXSAhPSBjb3VudHNbaV0pIHsKIAkJCQljb3VudHNbaV0gPSBoeXBlcnZpc29yX2NvdW50c1tpXTsKIAkJCQljaGFuZ2VkID0gMTsKIAkJCX0KQEAgLTEzNTQsOCArMTM1NSwxMSBAQAogCXJldHVybiBucl9jcHVzOwogfQogCi0vKiA2IDY0LWJpdCByZWdpc3RlcnMgdW5wYWNrZWQgaW50byAxMiAzMi1iaXQgYXNzb2NpYXRpdml0eSB2YWx1ZXMgKi8KLSNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpKQorLyoKKyAqIDYgNjQtYml0IHJlZ2lzdGVycyB1bnBhY2tlZCBpbnRvIDEyIDMyLWJpdCBhc3NvY2lhdGl2aXR5IHZhbHVlcy4gVG8gZm9ybQorICogdGhlIGNvbXBsZXRlIHByb3BlcnR5IHdlIGhhdmUgdG8gYWRkIHRoZSBsZW5ndGggaW4gdGhlIGZpcnN0IGNlbGwuCisgKi8KKyNkZWZpbmUgVlBITl9BU1NPQ19CVUZTSVpFICg2KnNpemVvZih1NjQpL3NpemVvZih1MzIpICsgMSkKIAogLyoKICAqIENvbnZlcnQgdGhlIGFzc29jaWF0aXZpdHkgZG9tYWluIG51bWJlcnMgcmV0dXJuZWQgZnJvbSB0aGUgaHlwZXJ2aXNvcgpAQCAtMTM2MywxNSArMTM2NywxNCBAQAogICovCiBzdGF0aWMgaW50IHZwaG5fdW5wYWNrX2Fzc29jaWF0aXZpdHkoY29uc3QgbG9uZyAqcGFja2VkLCB1bnNpZ25lZCBpbnQgKnVucGFja2VkKQogewotCWludCBpID0gMDsKLQlpbnQgbnJfYXNzb2NfZG9tcyA9IDA7CisJaW50IGksIG5yX2Fzc29jX2RvbXMgPSAwOwogCWNvbnN0IHUxNiAqZmllbGQgPSAoY29uc3QgdTE2KikgcGFja2VkOwogCiAjZGVmaW5lIFZQSE5fRklFTERfVU5VU0VECSgweGZmZmYpCiAjZGVmaW5lIFZQSE5fRklFTERfTVNCCQkoMHg4MDAwKQogI2RlZmluZSBWUEhOX0ZJRUxEX01BU0sJCSh+VlBITl9GSUVMRF9NU0IpCiAKLQlmb3IgKGkgPSAwOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKKwlmb3IgKGkgPSAxOyBpIDwgVlBITl9BU1NPQ19CVUZTSVpFOyBpKyspIHsKIAkJaWYgKCpmaWVsZCA9PSBWUEhOX0ZJRUxEX1VOVVNFRCkgewogCQkJLyogQWxsIHNpZ25pZmljYW50IGZpZWxkcyBwcm9jZXNzZWQsIGFuZCByZW1haW5pbmcKIAkJCSAqIGZpZWxkcyBjb250YWluIHRoZSByZXNlcnZlZCB2YWx1ZSBvZiBhbGwgMSdzLgpAQCAtMTM3OSwxNCArMTM4MiwxMiBAQAogCQkJICovCiAJCQl1bnBhY2tlZFtpXSA9ICooKHUzMiopZmllbGQpOwogCQkJZmllbGQgKz0gMjsKLQkJfQotCQllbHNlIGlmICgqZmllbGQgJiBWUEhOX0ZJRUxEX01TQikgeworCQl9IGVsc2UgaWYgKCpmaWVsZCAmIFZQSE5fRklFTERfTVNCKSB7CiAJCQkvKiBEYXRhIGlzIGluIHRoZSBsb3dlciAxNSBiaXRzIG9mIHRoaXMgZmllbGQgKi8KIAkJCXVucGFja2VkW2ldID0gKmZpZWxkICYgVlBITl9GSUVMRF9NQVNLOwogCQkJZmllbGQrKzsKIAkJCW5yX2Fzc29jX2RvbXMrKzsKLQkJfQotCQllbHNlIHsKKwkJfSBlbHNlIHsKIAkJCS8qIERhdGEgaXMgaW4gdGhlIGxvd2VyIDE1IGJpdHMgb2YgdGhpcyBmaWVsZAogCQkJICogY29uY2F0ZW5hdGVkIHdpdGggdGhlIG5leHQgMTYgYml0IGZpZWxkCiAJCQkgKi8KQEAgLTEzOTYsNiArMTM5Nyw5IEBACiAJCX0KIAl9CiAKKwkvKiBUaGUgZmlyc3QgY2VsbCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBwcm9wZXJ0eSAqLworCXVucGFja2VkWzBdID0gbnJfYXNzb2NfZG9tczsKKwogCXJldHVybiBucl9hc3NvY19kb21zOwogfQogCkBAIC0xNDA1LDcgKzE0MDksNyBAQAogICovCiBzdGF0aWMgbG9uZyBoY2FsbF92cGhuKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBpbnQgKmFzc29jaWF0aXZpdHkpCiB7Ci0JbG9uZyByYyA9IDA7CisJbG9uZyByYzsKIAlsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTDlfQlVGU0laRV0gPSB7MH07CiAJdTY0IGZsYWdzID0gMTsKIAlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGNwdSk7CkBAIC0xNDE5LDcgKzE0MjMsNyBAQAogc3RhdGljIGxvbmcgdnBobl9nZXRfYXNzb2NpYXRpdml0eSh1bnNpZ25lZCBsb25nIGNwdSwKIAkJCQkJdW5zaWduZWQgaW50ICphc3NvY2lhdGl2aXR5KQogewotCWxvbmcgcmMgPSAwOworCWxvbmcgcmM7CiAKIAlyYyA9IGhjYWxsX3ZwaG4oY3B1LCBhc3NvY2lhdGl2aXR5KTsKIApAQCAtMTQ0NSw5ICsxNDQ5LDkgQEAKICAqLwogaW50IGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKQogewotCWludCBjcHUgPSAwLCBuaWQgPSAwLCBvbGRfbmlkID0gMDsKKwlpbnQgY3B1LCBuaWQsIG9sZF9uaWQ7CiAJdW5zaWduZWQgaW50IGFzc29jaWF0aXZpdHlbVlBITl9BU1NPQ19CVUZTSVpFXSA9IHswfTsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2OwogCiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfYXNzb2NpYXRpdml0eV9jaGFuZ2VzX21hc2spIHsKIAkJdnBobl9nZXRfYXNzb2NpYXRpdml0eShjcHUsIGFzc29jaWF0aXZpdHkpOwpAQCAtMTUxMiw3ICsxNTE2LDggQEAKIHsKIAlpbnQgcmMgPSAwOwogCi0JaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfVlBITikpIHsKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9WUEhOKSAmJgorCSAgICBnZXRfbHBwYWNhKCktPnNoYXJlZF9wcm9jKSB7CiAJCXZwaG5fZW5hYmxlZCA9IDE7CiAJCXNldHVwX2NwdV9hc3NvY2lhdGl2aXR5X2NoYW5nZV9jb3VudGVycygpOwogCQlpbml0X3RpbWVyX2RlZmVycmFibGUoJnRvcG9sb2d5X3RpbWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IDFlYzA2NTcuLmMxNGQwOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtMzgsMTMgKzM4LDExIEBACiAgKiBuZWVzZCB0byBiZSBmbHVzaGVkLiBUaGlzIGZ1bmN0aW9uIHdpbGwgZWl0aGVyIHBlcmZvcm0gdGhlIGZsdXNoCiAgKiBpbW1lZGlhdGVseSBvciB3aWxsIGJhdGNoIGl0IHVwIGlmIHRoZSBjdXJyZW50IENQVSBoYXMgYW4gYWN0aXZlCiAgKiBiYXRjaCBvbiBpdC4KLSAqCi0gKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBzb21lIGtpbmQgb2Ygc3BpbmxvY2svbm9uLXByZWVtcHQgcmVnaW9uLi4uCiAgKi8KIHZvaWQgaHB0ZV9uZWVkX2ZsdXNoKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgcHRlLCBpbnQgaHVnZSkKIHsKLQlzdHJ1Y3QgcHBjNjRfdGxiX2JhdGNoICpiYXRjaCA9ICZfX2dldF9jcHVfdmFyKHBwYzY0X3RsYl9iYXRjaCk7CisJc3RydWN0IHBwYzY0X3RsYl9iYXRjaCAqYmF0Y2ggPSAmZ2V0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIAl1bnNpZ25lZCBsb25nIHZzaWQsIHZhZGRyOwogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAlpbnQgc3NpemU7CkBAIC05OSw2ICs5Nyw3IEBACiAJICovCiAJaWYgKCFiYXRjaC0+YWN0aXZlKSB7CiAJCWZsdXNoX2hhc2hfcGFnZSh2YWRkciwgcnB0ZSwgcHNpemUsIHNzaXplLCAwKTsKKwkJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI3LDYgKzEyNiw3IEBACiAJYmF0Y2gtPmluZGV4ID0gKytpOwogCWlmIChpID49IFBQQzY0X1RMQl9CQVRDSF9OUikKIAkJX19mbHVzaF90bGJfcGVuZGluZyhiYXRjaCk7CisJcHV0X2NwdV92YXIocHBjNjRfdGxiX2JhdGNoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDVkM2VhOWYuLmNhNWQ1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNzEzLDYgKzcxMywxMyBAQAogLyogTkI6IHJlZy91bnJlZyBhcmUgY2FsbGVkIHdoaWxlIGd1YXJkZWQgd2l0aCB0aGUgdHJhY2Vwb2ludHNfbXV0ZXggKi8KIGV4dGVybiBsb25nIGhjYWxsX3RyYWNlcG9pbnRfcmVmY291bnQ7CiAKKy8qIAorICogU2luY2UgdGhlIHRyYWNpbmcgY29kZSBtaWdodCBleGVjdXRlIGhjYWxscyB3ZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QKKyAqIHJlY3Vyc2lvbi4gT25lIGV4YW1wbGUgb2YgdGhpcyBhcmUgc3BpbmxvY2tzIGNhbGxpbmcgSF9ZSUVMRCBvbgorICogc2hhcmVkIHByb2Nlc3NvciBwYXJ0aXRpb25zLgorICovCitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBoY2FsbF90cmFjZV9kZXB0aCk7CisKIHZvaWQgaGNhbGxfdHJhY2Vwb2ludF9yZWdmdW5jKHZvaWQpCiB7CiAJaGNhbGxfdHJhY2Vwb2ludF9yZWZjb3VudCsrOwpAQCAtNzI1LDEyICs3MzIsNDIgQEAKIAogdm9pZCBfX3RyYWNlX2hjYWxsX2VudHJ5KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICphcmdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2VudHJ5KG9wY29kZSwgYXJncyk7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogdm9pZCBfX3RyYWNlX2hjYWxsX2V4aXQobG9uZyBvcGNvZGUsIHVuc2lnbmVkIGxvbmcgcmV0dmFsLAogCQkJdW5zaWduZWQgbG9uZyAqcmV0YnVmKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50ICpkZXB0aDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRlcHRoID0gJl9fZ2V0X2NwdV92YXIoaGNhbGxfdHJhY2VfZGVwdGgpOworCisJaWYgKCpkZXB0aCkKKwkJZ290byBvdXQ7CisKKwkoKmRlcHRoKSsrOwogCXRyYWNlX2hjYWxsX2V4aXQob3Bjb2RlLCByZXR2YWwsIHJldGJ1Zik7CisJKCpkZXB0aCktLTsKKworb3V0OgorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBmZjE5ZWZkLi42MzZiY2I4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNDA2LDcgKzQwNiw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgQ0hTQ19TQ0gKLQlkZWZfdHJpc3RhdGUgeQorCWRlZl90cmlzdGF0ZSBtCiAJcHJvbXB0ICJTdXBwb3J0IGZvciBDSFNDIHN1YmNoYW5uZWxzIgogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFsbG93cyB1c2FnZSBvZiBDSFNDIHN1YmNoYW5uZWxzLiBBIENIU0Mgc3ViY2hhbm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAwODUxZWIxLi4yNzUxYjNhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL3MzOTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMTMzLDExICsxMzMsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG91dHB1dF9hZGRyOwogCXVuc2lnbmVkIGNoYXIgKm91dHB1dDsKIAotCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgKHVuc2lnbmVkIGxvbmcpIG91dHB1dCArIFNaX19ic3Nfc3RhcnQpOworCW91dHB1dF9hZGRyID0gKCh1bnNpZ25lZCBsb25nKSAmX2VuZCArIEhFQVBfU0laRSArIDQwOTVVTCkgJiAtNDA5NlVMOworCWNoZWNrX2lwbF9wYXJtYmxvY2soKHZvaWQgKikgMCwgb3V0cHV0X2FkZHIgKyBTWl9fYnNzX3N0YXJ0KTsKIAltZW1zZXQoJl9ic3MsIDAsICZfZWJzcyAtICZfYnNzKTsKIAlmcmVlX21lbV9wdHIgPSAodW5zaWduZWQgbG9uZykmX2VuZDsKIAlmcmVlX21lbV9lbmRfcHRyID0gZnJlZV9tZW1fcHRyICsgSEVBUF9TSVpFOwotCW91dHB1dCA9ICh1bnNpZ25lZCBjaGFyICopICgoZnJlZV9tZW1fZW5kX3B0ciArIDQwOTVVTCkgJiAtNDA5NlVMKTsKKwlvdXRwdXQgPSAodW5zaWduZWQgY2hhciAqKSBvdXRwdXRfYWRkcjsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCmluZGV4IGY0MmRiYWIuLjQ4ODg0ZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vc2hhX2NvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAJCUJVR19PTihyZXQgIT0gYnNpemUpOwogCQlkYXRhICs9IGJzaXplIC0gaW5kZXg7CiAJCWxlbiAtPSBic2l6ZSAtIGluZGV4OworCQlpbmRleCA9IDA7CiAJfQogCiAJLyogcHJvY2VzcyBhcyBtYW55IGJsb2NrcyBhcyBwb3NzaWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2F0b21pYy5oCmluZGV4IDc2ZGFlYTEuLjVjNWJhMTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9hdG9taWMuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vYXRvbWljLmgKQEAgLTM2LDE0ICszNiwxOSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdG9taWNfcmVhZChjb25zdCBhdG9taWNfdCAqdikKIHsKLQliYXJyaWVyKCk7Ci0JcmV0dXJuIHYtPmNvdW50ZXI7CisJaW50IGM7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJbAklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfc2V0KGF0b21pY190ICp2LCBpbnQgaSkKIHsKLQl2LT5jb3VudGVyID0gaTsKLQliYXJyaWVyKCk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXN0CSUxLCUwXG4iCisJCTogIj1RIiAodi0+Y291bnRlcikgOiAiZCIgKGkpKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYXRvbWljX2FkZF9yZXR1cm4oaW50IGksIGF0b21pY190ICp2KQpAQCAtMTI4LDE0ICsxMzMsMTkgQEAKIAogc3RhdGljIGlubGluZSBsb25nIGxvbmcgYXRvbWljNjRfcmVhZChjb25zdCBhdG9taWM2NF90ICp2KQogewotCWJhcnJpZXIoKTsKLQlyZXR1cm4gdi0+Y291bnRlcjsKKwlsb25nIGxvbmcgYzsKKworCWFzbSB2b2xhdGlsZSgKKwkJIglsZwklMCwlMVxuIgorCQk6ICI9ZCIgKGMpIDogIlEiICh2LT5jb3VudGVyKSk7CisJcmV0dXJuIGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWM2NF9zZXQoYXRvbWljNjRfdCAqdiwgbG9uZyBsb25nIGkpCiB7Ci0Jdi0+Y291bnRlciA9IGk7Ci0JYmFycmllcigpOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdGcJJTEsJTBcbiIKKwkJOiAiPVEiICh2LT5jb3VudGVyKSA6ICJkIiAoaSkpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgbG9uZyBhdG9taWM2NF9hZGRfcmV0dXJuKGxvbmcgbG9uZyBpLCBhdG9taWM2NF90ICp2KQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAppbmRleCAyNGFhZmE2Li4yYTMwZDVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGUuaApAQCAtMTMsNiArMTMsNyBAQAogCiAjZGVmaW5lIEwxX0NBQ0hFX0JZVEVTICAgICAyNTYKICNkZWZpbmUgTDFfQ0FDSEVfU0hJRlQgICAgIDgKKyNkZWZpbmUgTkVUX1NLQl9QQUQJICAgMzIKIAogI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCmluZGV4IDQwNWNjOTcuLjdlMWY3NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaApAQCAtMSwyOSArMSw4IEBACiAjaWZuZGVmIF9TMzkwX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfUzM5MF9DQUNIRUZMVVNIX0gKIAotLyogS2VlcCBpbmNsdWRlcyB0aGUgc2FtZSBhY3Jvc3MgYXJjaGVzLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIHMzOTAuICovCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX2R1cF9tbShtbSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdm1hZGRyLCBwZm4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgQVJDSF9JTVBMRU1FTlRTX0ZMVVNIX0RDQUNIRV9QQUdFIDAKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSkJCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBlbmQpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uodm1hLHBnLGFkcixsZW4pCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV92dW5tYXAoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBjb3B5X3RvX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIHZhZGRyLCBkc3QsIHNyYywgbGVuKSBcCi0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pCi0jZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAotCW1lbWNweShkc3QsIHNyYywgbGVuKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2NhY2hlZmx1c2guaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKIHZvaWQga2VybmVsX21hcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG51bXBhZ2VzLCBpbnQgZW5hYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBiZjNkZTA0Li4yYzc5YjY0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0xNDgsMTEgKzE0OCw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIHRocmVhZF9zYXZlZF9wYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogCi0vKgotICogUHJpbnQgcmVnaXN0ZXIgb2YgdGFzayBpbnRvIGJ1ZmZlci4gVXNlZCBpbiBmcy9wcm9jL2FycmF5LmMuCi0gKi8KLWV4dGVybiB2b2lkIHRhc2tfc2hvd19yZWdzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKLQogZXh0ZXJuIHZvaWQgc2hvd19jb2RlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogdW5zaWduZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS90bGIuaAppbmRleCBmMWY2NDRmLi45MDc0YTU0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdGxiLmgKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3RsYi5oCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCA1ZWI3OGRkLi5iNWE0YTczIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC0yMzcsNDMgKzIzNyw2IEBACiAJc2hvd19sYXN0X2JyZWFraW5nX2V2ZW50KHJlZ3MpOwogfQogCi0vKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGZzL3Byb2MvYXJyYXkuYyAqLwotdm9pZCB0YXNrX3Nob3dfcmVncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKLQotCXJlZ3MgPSB0YXNrX3B0X3JlZ3ModGFzayk7Ci0Jc2VxX3ByaW50ZihtLCAidGFzazogJXAsIGtzcDogJXBcbiIsCi0JCSAgICAgICB0YXNrLCAodm9pZCAqKXRhc2stPnRocmVhZC5rc3ApOwotCXNlcV9wcmludGYobSwgIlVzZXIgUFNXIDogJXAgJXBcbiIsCi0JCSAgICAgICAodm9pZCAqKSByZWdzLT5wc3cubWFzaywgKHZvaWQgKilyZWdzLT5wc3cuYWRkcik7Ci0KLQlzZXFfcHJpbnRmKG0sICJVc2VyIEdQUlM6ICIgRk9VUkxPTkcsCi0JCQkgIHJlZ3MtPmdwcnNbMF0sIHJlZ3MtPmdwcnNbMV0sCi0JCQkgIHJlZ3MtPmdwcnNbMl0sIHJlZ3MtPmdwcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1s0XSwgcmVncy0+Z3Byc1s1XSwKLQkJCSAgcmVncy0+Z3Byc1s2XSwgcmVncy0+Z3Byc1s3XSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAiIEZPVVJMT05HLAotCQkJICByZWdzLT5ncHJzWzhdLCByZWdzLT5ncHJzWzldLAotCQkJICByZWdzLT5ncHJzWzEwXSwgcmVncy0+Z3Byc1sxMV0pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgIiBGT1VSTE9ORywKLQkJCSAgcmVncy0+Z3Byc1sxMl0sIHJlZ3MtPmdwcnNbMTNdLAotCQkJICByZWdzLT5ncHJzWzE0XSwgcmVncy0+Z3Byc1sxNV0pOwotCXNlcV9wcmludGYobSwgIlVzZXIgQUNSUzogJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMF0sIHRhc2stPnRocmVhZC5hY3JzWzFdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1syXSwgdGFzay0+dGhyZWFkLmFjcnNbM10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbNF0sIHRhc2stPnRocmVhZC5hY3JzWzVdLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1s2XSwgdGFzay0+dGhyZWFkLmFjcnNbN10pOwotCXNlcV9wcmludGYobSwgIiAgICAgICAgICAgJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbOF0sIHRhc2stPnRocmVhZC5hY3JzWzldLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMF0sIHRhc2stPnRocmVhZC5hY3JzWzExXSk7Ci0Jc2VxX3ByaW50ZihtLCAiICAgICAgICAgICAlMDh4ICUwOHggJTA4eCAlMDh4XG4iLAotCQkJICB0YXNrLT50aHJlYWQuYWNyc1sxMl0sIHRhc2stPnRocmVhZC5hY3JzWzEzXSwKLQkJCSAgdGFzay0+dGhyZWFkLmFjcnNbMTRdLCB0YXNrLT50aHJlYWQuYWNyc1sxNV0pOwotfQotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIAogdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwppbmRleCAwN2RlYWVlLi5hNmM0ZjdlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCkBAIC0xMjUsOSArMTI1LDkgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDE7CiAKIAlhc20gdm9sYXRpbGUoCisJCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIkFISSIgICUwLC0xXG4iCiAJCSIgICBqbyAgICA1ZlxuIgotCQkiICAgc2FjZiAgMjU2XG4iCiAJCSIgICBicmFzICAlMywzZlxuIgogCQkiMDoiQUhJIiAgJTAsMjU3XG4iCiAJCSIxOiBtdmMgICAwKDEsJTEpLDAoJTIpXG4iCkBAIC0xNDIsOSArMTQyLDggQEAKIAkJIjM6IkFISSIgICUwLC0yNTZcbiIKIAkJIiAgIGpubSAgIDJiXG4iCiAJCSI0OiBleCAgICAlMCwxYi0wYiglMylcbiIKLQkJIiAgIHNhY2YgIDBcbiIKIAkJIjU6ICJTTFIiICAlMCwlMFxuIgotCQkiNjpcbiIKKwkJIjY6IHNhY2YgIDBcbiIKIAkJRVhfVEFCTEUoMWIsNmIpIEVYX1RBQkxFKDJiLDBiKSBFWF9UQUJMRSg0YiwwYikKIAkJOiAiK2EiIChzaXplKSwgIithIiAodG8pLCAiK2EiIChmcm9tKSwgIj1hIiAodG1wMSkKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKQEAgLTE1Niw5ICsxNTUsOSBAQAogCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKIAogCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHNhY2YgIDI1NlxuIgogCQkiICAiQUhJIiAgJTAsLTFcbiIKIAkJIiAgIGpvICAgIDVmXG4iCi0JCSIgICBzYWNmICAyNTZcbiIKIAkJIiAgIGJyYXMgICUzLDNmXG4iCiAJCSIgICB4YyAgICAwKDEsJTEpLDAoJTEpXG4iCiAJCSIwOiJBSEkiICAlMCwyNTdcbiIKQEAgLTE3OCw5ICsxNzcsOCBAQAogCQkiMzoiQUhJIiAgJTAsLTI1NlxuIgogCQkiICAgam5tICAgMmJcbiIKIAkJIjQ6IGV4ICAgICUwLDAoJTMpXG4iCi0JCSIgICBzYWNmICAwXG4iCiAJCSI1OiAiU0xSIiAgJTAsJTBcbiIKLQkJIjY6XG4iCisJCSI2OiBzYWNmICAwXG4iCiAJCUVYX1RBQkxFKDFiLDZiKSBFWF9UQUJMRSgyYiwwYikgRVhfVEFCTEUoNGIsMGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHRvKSwgIj1hIiAodG1wMSksICI9YSIgKHRtcDIpCiAJCTogOiAiY2MiLCAibWVtb3J5Iik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jIGIvYXJjaC9zMzkwL21tL3BndGFibGUuYwppbmRleCAwYzcxOWM2Li5lMTg1MGMyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gvczM5MC9tbS9wZ3RhYmxlLmMKQEAgLTMzNiw3ICszMzYsOCBAQAogCXBhZ2UtPmZsYWdzIF49IGJpdHM7CiAJaWYgKHBhZ2UtPmZsYWdzICYgRlJBR19NQVNLKSB7CiAJCS8qIFBhZ2Ugbm93IGhhcyBzb21lIGZyZWUgcGd0YWJsZSBmcmFnbWVudHMuICovCi0JCWxpc3RfbW92ZSgmcGFnZS0+bHJ1LCAmbW0tPmNvbnRleHQucGd0YWJsZV9saXN0KTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlLT5scnUpKQorCQkJbGlzdF9tb3ZlKCZwYWdlLT5scnUsICZtbS0+Y29udGV4dC5wZ3RhYmxlX2xpc3QpOwogCQlwYWdlID0gTlVMTDsKIAl9IGVsc2UKIAkJLyogQWxsIGZyYWdtZW50cyBvZiB0aGUgNEsgcGFnZSBoYXZlIGJlZW4gZnJlZWQuICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL0tjb25maWcgYi9hcmNoL3NoL0tjb25maWcKaW5kZXggYWU1NTU1Ni4uOGE5MDExZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9LY29uZmlnCisrKyBiL2FyY2gvc2gvS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKKwlzZWxlY3QgSEFWRV9LRVJORUxfWFoKIAlzZWxlY3QgSEFWRV9LRVJORUxfTFpPCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9UUkFDRVBPSU5UUwogCXNlbGVjdCBIQVZFX1JFR1NfQU5EX1NUQUNLX0FDQ0VTU19BUEkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IDljOGM2ZTEuLmUzZDgxNzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMjAwLDcgKzIwMCw3IEBACiBsaWJzLSQoQ09ORklHX1NVUEVSSDMyKQkJOj0gYXJjaC9zaC9saWIvCSQobGlicy15KQogbGlicy0kKENPTkZJR19TVVBFUkg2NCkJCTo9IGFyY2gvc2gvbGliNjQvICQobGlicy15KQogCi1CT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLmx6byBcCitCT09UX1RBUkdFVFMgPSB1SW1hZ2UgdUltYWdlLmJ6MiB1SW1hZ2UuZ3ogdUltYWdlLmx6bWEgdUltYWdlLnh6IHVJbWFnZS5sem8gXAogCSAgICAgICB1SW1hZ2Uuc3JlYyB1SW1hZ2UuYmluIHpJbWFnZSB2bWxpbnV4LmJpbiB2bWxpbnV4LnNyZWMgXAogCSAgICAgICByb21JbWFnZQogUEhPTlkgKz0gJChCT09UX1RBUkdFVFMpCkBAIC0yMzAsNSArMjMwLDYgQEAKIAlAZWNobyAnKiB1SW1hZ2UuZ3oJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGd6aXApJwogCUBlY2hvICcgIHVJbWFnZS5iejIJICAgICAgICAgICAtIEtlcm5lbC1vbmx5IGltYWdlIGZvciBVLUJvb3QgKGJ6aXAyKScKIAlAZWNobyAnICB1SW1hZ2UubHptYQkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHptYSknCisJQGVjaG8gJyAgdUltYWdlLnh6CSAgICAgICAgICAgLSBLZXJuZWwtb25seSBpbWFnZSBmb3IgVS1Cb290ICh4eiknCiAJQGVjaG8gJyAgdUltYWdlLmx6bwkgICAgICAgICAgIC0gS2VybmVsLW9ubHkgaW1hZ2UgZm9yIFUtQm9vdCAobHpvKScKIGVuZGVmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLWVjb3ZlYzI0L3NldHVwLmMKaW5kZXggMzNiNjYyOS4uNzAxNjY3YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1lY292ZWMyNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtZWNvdmVjMjQvc2V0dXAuYwpAQCAtMTI5NCw2ICsxMjk0LDcgQEAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBpMmMxX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShpMmMxX2RldmljZXMpKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1NIX1ZPVSkgfHwgZGVmaW5lZChDT05GSUdfVklERU9fU0hfVk9VX01PRFVMRSkKIAkvKiBWT1UgKi8KIAlncGlvX3JlcXVlc3QoR1BJT19GTl9EVl9EMTUsIE5VTEwpOwogCWdwaW9fcmVxdWVzdChHUElPX0ZOX0RWX0QxNCwgTlVMTCk7CkBAIC0xMzI1LDYgKzEzMjYsNyBAQAogCiAJLyogUmVtb3ZlIHJlc2V0ICovCiAJZ3Bpb19zZXRfdmFsdWUoR1BJT19QVEc0LCAxKTsKKyNlbmRpZgogCiAJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKGVjb3ZlY19kZXZpY2VzLAogCQkJCSAgICBBUlJBWV9TSVpFKGVjb3ZlY19kZXZpY2VzKSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvTWFrZWZpbGUKaW5kZXggMWNlNjM2Mi4uYmE1MTVkOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9vdC9NYWtlZmlsZQpAQCAtMjQsMTIgKzI0LDEzIEBACiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0daSVApCTo9IGd6CiBzdWZmaXgtJChDT05GSUdfS0VSTkVMX0JaSVAyKQk6PSBiejIKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpNQSkJOj0gbHptYQorc3VmZml4LSQoQ09ORklHX0tFUk5FTF9YWikJOj0geHoKIHN1ZmZpeC0kKENPTkZJR19LRVJORUxfTFpPKQk6PSBsem8KIAogdGFyZ2V0cyA6PSB6SW1hZ2Ugdm1saW51eC5zcmVjIHJvbUltYWdlIHVJbWFnZSB1SW1hZ2Uuc3JlYyB1SW1hZ2UuZ3ogXAotCSAgIHVJbWFnZS5iejIgdUltYWdlLmx6bWEgdUltYWdlLmx6byB1SW1hZ2UuYmluCisJICAgdUltYWdlLmJ6MiB1SW1hZ2UubHptYSB1SW1hZ2UueHogdUltYWdlLmx6byB1SW1hZ2UuYmluCiBleHRyYS15ICs9IHZtbGludXguYmluIHZtbGludXguYmluLmd6IHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKLQkgICB2bWxpbnV4LmJpbi5sem8KKwkgICB2bWxpbnV4LmJpbi54eiB2bWxpbnV4LmJpbi5sem8KIHN1YmRpci0gOj0gY29tcHJlc3NlZCByb21pbWFnZQogCiAkKG9iaikvekltYWdlOiAkKG9iaikvY29tcHJlc3NlZC92bWxpbnV4IEZPUkNFCkBAIC03Niw2ICs3Nyw5IEBACiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJChvYmopL3ZtbGludXguYmluIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHptYSkKIAorJChvYmopL3ZtbGludXguYmluLnh6OiAkKG9iaikvdm1saW51eC5iaW4gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCx4emtlcm4pCisKICQob2JqKS92bWxpbnV4LmJpbi5sem86ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGx6bykKIApAQCAtODgsNiArOTIsOSBAQAogJChvYmopL3VJbWFnZS5sem1hOiAkKG9iaikvdm1saW51eC5iaW4ubHptYQogCSQoY2FsbCBpZl9jaGFuZ2VkLHVpbWFnZSxsem1hKQogCiskKG9iaikvdUltYWdlLnh6OiAkKG9iaikvdm1saW51eC5iaW4ueHoKKwkkKGNhbGwgaWZfY2hhbmdlZCx1aW1hZ2UseHopCisKICQob2JqKS91SW1hZ2UubHpvOiAkKG9iaikvdm1saW51eC5iaW4ubHpvCiAJJChjYWxsIGlmX2NoYW5nZWQsdWltYWdlLGx6bykKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCBjZmE1YTA4Li5lMGIwMjkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIAogdGFyZ2V0cwkJOj0gdm1saW51eCB2bWxpbnV4LmJpbiB2bWxpbnV4LmJpbi5neiBcCiAJCSAgIHZtbGludXguYmluLmJ6MiB2bWxpbnV4LmJpbi5sem1hIFwKLQkJICAgdm1saW51eC5iaW4ubHpvIFwKKwkJICAgdm1saW51eC5iaW4ueHogdm1saW51eC5iaW4ubHpvIFwKIAkJICAgaGVhZF8kKEJJVFMpLm8gbWlzYy5vIHBpZ2d5Lm8KIAogT0JKRUNUUyA9ICQob2JqKS9oZWFkXyQoQklUUykubyAkKG9iaikvbWlzYy5vICQob2JqKS9jYWNoZS5vCkBAIC01MCw2ICs1MCw4IEBACiAJJChjYWxsIGlmX2NoYW5nZWQsYnppcDIpCiAkKG9iaikvdm1saW51eC5iaW4ubHptYTogJCh2bWxpbnV4LmJpbi5hbGwteSkgRk9SQ0UKIAkkKGNhbGwgaWZfY2hhbmdlZCxsem1hKQorJChvYmopL3ZtbGludXguYmluLnh6OiAkKHZtbGludXguYmluLmFsbC15KSBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLHh6a2VybikKICQob2JqKS92bWxpbnV4LmJpbi5sem86ICQodm1saW51eC5iaW4uYWxsLXkpIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsbHpvKQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggMjcxNDBhNi4uOTU0NzBhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvbWlzYy5jCisrKyBiL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtNjEsNiArNjEsMTAgQEAKICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6bWEuYyIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0tFUk5FTF9YWgorI2luY2x1ZGUgIi4uLy4uLy4uLy4uL2xpYi9kZWNvbXByZXNzX3VueHouYyIKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0tFUk5FTF9MWk8KICNpbmNsdWRlICIuLi8uLi8uLi8uLi9saWIvZGVjb21wcmVzc191bmx6by5jIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDA4M2VhMDYuLmRiODU5MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xMzQsNiArMTM0LDcgQEAKIGV4dGVybiB2b2lkIHBndGFibGVfY2FjaGVfaW5pdCh2b2lkKTsKIAogc3RydWN0IHZtX2FyZWFfc3RydWN0Oworc3RydWN0IG1tX3N0cnVjdDsKIAogZXh0ZXJuIHZvaWQgX191cGRhdGVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggYTc4NzAxZC4uNGE1MzUwMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2VjdGlvbnMuaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NlY3Rpb25zLmg+CiAKLWV4dGVybiB2b2lkIF9fbm9zYXZlX2JlZ2luLCBfX25vc2F2ZV9lbmQ7CitleHRlcm4gbG9uZyBfX25vc2F2ZV9iZWdpbiwgX19ub3NhdmVfZW5kOwogZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogZXh0ZXJuIGNoYXIgX191bmNhY2hlZF9zdGFydCwgX191bmNhY2hlZF9lbmQ7CiBleHRlcm4gY2hhciBfZWJzc1tdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKaW5kZXggYzJiMGFhYS4uZTUzYjRiMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc1MC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHR5cGVzLmg+CisjaW5jbHVkZSA8Z2VuZXJhdGVkL21hY2h0eXBlcy5oPgogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0yMzAsMTAgKzIzMCwxMCBAQAogc3RhdGljIGludCBfX2luaXQgc2g3NzUwX2RldmljZXNfc2V0dXAodm9pZCkKIHsKIAlpZiAobWFjaF9pc19ydHM3NzUxcjJkKCkpIHsKLQkJcGxhdGZvcm1fcmVnaXN0ZXJfZGV2aWNlKCZzY2lmX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2NpZl9kZXZpY2UpOwogCX0gZWxzZSB7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpX2RldmljZSk7Ci0JCXBsYXRmb3JtX3JlZ2lzdGVyX2RldmljZSgmc2NpZl9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaV9kZXZpY2UpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNjaWZfZGV2aWNlKTsKIAl9CiAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3NzUwX2RldmljZXMsCkBAIC0yNTUsMTIgKzI1NSwxNyBAQAogCiB2b2lkIF9faW5pdCBwbGF0X2Vhcmx5X2RldmljZV9zZXR1cCh2b2lkKQogeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldlsxXTsKKwogCWlmIChtYWNoX2lzX3J0czc3NTFyMmQoKSkgewogCQlzY2lmX3BsYXRmb3JtX2RhdGEuc2NzY3IgfD0gU0NTQ1JfQ0tFMTsKLQkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoJnNjaWZfZGV2aWNlLCAxKTsKKwkJZGV2WzBdID0gJnNjaWZfZGV2aWNlOworCQllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXYsIDEpOwogCX0gZWxzZSB7Ci0JCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKCZzY2lfZGV2aWNlLCAxKTsKLQkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoJnNjaWZfZGV2aWNlLCAxKTsKKwkJZGV2WzBdID0gJnNjaV9kZXZpY2U7CisJCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKGRldiwgMSk7CisJCWRldlswXSA9ICZzY2lmX2RldmljZTsKKwkJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2LCAxKTsKIAl9CiAKIAllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3NTBfZWFybHlfZGV2aWNlcywKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL3NoL2tlcm5lbC90b3BvbG9neS5jCmluZGV4IDk0OGZkYjYuLjM4ZTg2MjggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RvcG9sb2d5LmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMTcsNiArMTcsNyBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjcHUsIGNwdV9kZXZpY2VzKTsKIAogY3B1bWFza190IGNwdV9jb3JlX21hcFtOUl9DUFVTXTsKK0VYUE9SVF9TWU1CT0woY3B1X2NvcmVfbWFwKTsKIAogc3RhdGljIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcCh1bnNpZ25lZCBpbnQgY3B1KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvZGVsYXkuYyBiL2FyY2gvc2gvbGliL2RlbGF5LmMKaW5kZXggZmFhOGY4Ni4uMDkwMWIyZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWIvZGVsYXkuYworKysgYi9hcmNoL3NoL2xpYi9kZWxheS5jCkBAIC0xMCw2ICsxMCwxNiBAQAogdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpCiB7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCS8qCisJCSAqIFNUNDAtMzAwIGFwcGVhcnMgdG8gaGF2ZSBhbiBpc3N1ZSB3aXRoIHRoaXMgY29kZSwKKwkJICogbm9ybWFsbHkgdGFraW5nIHR3byBjeWNsZXMgZWFjaCBsb29wLCBhcyB3aXRoIGFsbAorCQkgKiBvdGhlciBTSCB2YXJpYW50cy4gSWYgaG93ZXZlciB0aGUgYnJhbmNoIGFuZCB0aGUKKwkJICogZGVsYXkgc2xvdCBzdHJhZGRsZSBhbiA4IGJ5dGUgYm91bmRhcnksIHRoaXMgaW5jcmVhc2VzCisJCSAqIHRvIDMgY3ljbGVzLgorCQkgKiBUaGlzIGFsaWduIGRpcmVjdGl2ZSBlbnN1cmVzIHRoaXMgZG9lc24ndCBvY2N1ci4KKwkJICovCisJCSIuYmFsaWduIDhcblx0IgorCiAJCSJ0c3QJJTAsICUwXG5cdCIKIAkJIjE6XHQiCiAJCSJiZi9zCTFiXG5cdCIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUuYyBiL2FyY2gvc2gvbW0vY2FjaGUuYwppbmRleCA4OGQzZGMzLi41YTU4MGVhIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS5jCkBAIC0xMDgsNyArMTA4LDggQEAKIAkJa3VubWFwX2F0b21pYyh2ZnJvbSwgS01fVVNFUjApOwogCX0KIAotCWlmIChwYWdlc19kb19hbGlhcygodW5zaWduZWQgbG9uZyl2dG8sIHZhZGRyICYgUEFHRV9NQVNLKSkKKwlpZiAocGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpdnRvLCB2YWRkciAmIFBBR0VfTUFTSykgfHwKKwkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSkKIAkJX19mbHVzaF9wdXJnZV9yZWdpb24odnRvLCBQQUdFX1NJWkUpOwogCiAJa3VubWFwX2F0b21pYyh2dG8sIEtNX1VTRVIxKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3Bjci5oCmluZGV4IGEyZjVjNjEuLjg0M2U0ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY3IuaApAQCAtNDMsNCArNDMsNiBAQAogCiBleHRlcm4gdTY0IHBjcl9lbmFibGU7CiAKK2V4dGVybiBpbnQgcGNyX2FyY2hfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9fUENSX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCmluZGV4IDQ3OTc3YTcuLjcyNTA5ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwpAQCAtMjU1LDEwICsyNTUsOSBAQAogc3RhdGljIGludCBpb21tdV9hbGxvY19jdHgoc3RydWN0IGlvbW11ICppb21tdSkKIHsKIAlpbnQgbG93ZXN0ID0gaW9tbXUtPmN0eF9sb3dlc3RfZnJlZTsKLQlpbnQgc3ogPSBJT01NVV9OVU1fQ1RYUyAtIGxvd2VzdDsKLQlpbnQgbiA9IGZpbmRfbmV4dF96ZXJvX2JpdChpb21tdS0+Y3R4X2JpdG1hcCwgc3osIGxvd2VzdCk7CisJaW50IG4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIElPTU1VX05VTV9DVFhTLCBsb3dlc3QpOwogCi0JaWYgKHVubGlrZWx5KG4gPT0gc3opKSB7CisJaWYgKHVubGlrZWx5KG4gPT0gSU9NTVVfTlVNX0NUWFMpKSB7CiAJCW4gPSBmaW5kX25leHRfemVyb19iaXQoaW9tbXUtPmN0eF9iaXRtYXAsIGxvd2VzdCwgMSk7CiAJCWlmICh1bmxpa2VseShuID09IGxvd2VzdCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklPTU1VOiBSYW4gb3V0IG9mIGNvbnRleHRzLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY3IuYyBiL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCmluZGV4IGFlOTZjZjUuLjdjMmNlZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3Bjci5jCkBAIC0xNjcsNSArMTY3LDMgQEAKIAl1bnJlZ2lzdGVyX3BlcmZfaHN2YygpOwogCXJldHVybiBlcnI7CiB9Ci0KLWVhcmx5X2luaXRjYWxsKHBjcl9hcmNoX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwppbmRleCBiNmEyYjhmLi41NTVhNzZkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfNjQuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9tZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9sZGMuaD4KICNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9wY3IuaD4KIAogI2luY2x1ZGUgImNwdW1hcC5oIgogCkBAIC0xMzU4LDYgKzEzNTksNyBAQAogCiB2b2lkIF9faW5pdCBzbXBfY3B1c19kb25lKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKKwlwY3JfYXJjaF9pbml0KCk7CiB9CiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TIGIvYXJjaC9zcGFyYy9rZXJuZWwvdW5hX2FzbV8zMi5TCmluZGV4IDhjYzAzNDUuLjhmMDk2ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VuYV9hc21fMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC91bmFfYXNtXzMyLlMKQEAgLTI0LDkgKzI0LDkgQEAKIAkuZ2xvYmwJX19kb19pbnRfc3RvcmUKIF9fZG9faW50X3N0b3JlOgogCWxkCVslbzJdLCAlZzEKLQljbXAJJTEsIDIKKwljbXAJJW8xLCAyCiAJYmUJMmYKLQkgY21wCSUxLCA0CisJIGNtcAklbzEsIDQKIAliZQkxZgogCSBzcmwJJWcxLCAyNCwgJWcyCiAJc3JsCSVnMSwgMTYsICVnNwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvYml0ZXh0LmMgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYwppbmRleCA3NjRiM2ViLi40OGQwMGU3IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYworKysgYi9hcmNoL3NwYXJjL2xpYi9iaXRleHQuYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9iaXRleHQuaD4KIApAQCAtODAsOCArODAsNyBAQAogCQl3aGlsZSAodGVzdF9iaXQob2Zmc2V0ICsgaSwgdC0+bWFwKSA9PSAwKSB7CiAJCQlpKys7CiAJCQlpZiAoaSA9PSBsZW4pIHsKLQkJCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJCV9fc2V0X2JpdChvZmZzZXQgKyBpLCB0LT5tYXApOworCQkJCWJpdG1hcF9zZXQodC0+bWFwLCBvZmZzZXQsIGxlbik7CiAJCQkJaWYgKG9mZnNldCA9PSB0LT5maXJzdF9mcmVlKQogCQkJCQl0LT5maXJzdF9mcmVlID0gZmluZF9uZXh0X3plcm9fYml0CiAJCQkJCQkJKHQtPm1hcCwgdC0+c2l6ZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FjcGkuaAppbmRleCAyMTFjYTNmLi40ZWExNWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hY3BpLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWNwaS5oCkBAIC04OCw2ICs4OCw3IEBACiBleHRlcm4gaW50IGFjcGlfcGNpX2Rpc2FibGVkOwogZXh0ZXJuIGludCBhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGU7CiBleHRlcm4gaW50IGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlOworZXh0ZXJuIGludCBhY3BpX2ZpeF9waW4yX3BvbGFyaXR5OwogCiBleHRlcm4gdTggYWNwaV9zY2lfZmxhZ3M7CiBleHRlcm4gaW50IGFjcGlfc2NpX292ZXJyaWRlX2dzaTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAppbmRleCA1ZTM5NjljLi4zYzg5Njk0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC0yMzMsNiArMjMzLDcgQEAKIGV4dGVybiB2b2lkIGluaXRfYnNwX0FQSUModm9pZCk7CiBleHRlcm4gdm9pZCBzZXR1cF9sb2NhbF9BUElDKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7CitleHRlcm4gdm9pZCBic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCk7CiBleHRlcm4gdm9pZCBpbml0X2FwaWNfbWFwcGluZ3Modm9pZCk7CiB2b2lkIHJlZ2lzdGVyX2xhcGljX2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIGV4dGVybiB2b2lkIHNldHVwX2Jvb3RfQVBJQ19jbG9jayh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA2M2UzNWVjLi42MmYwODQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC0xLDQ4ICsxLDggQEAKICNpZm5kZWYgX0FTTV9YODZfQ0FDSEVGTFVTSF9ICiAjZGVmaW5lIF9BU01fWDg2X0NBQ0hFRkxVU0hfSAogCi0vKiBLZWVwIGluY2x1ZGVzIHRoZSBzYW1lIGFjcm9zcyBhcmNoZXMuICAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0KIC8qIENhY2hlcyBhcmVuJ3QgYnJhaW4tZGVhZCBvbiB0aGUgaW50ZWwuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV9kdXBfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdm1hZGRyLCB1bnNpZ25lZCBsb25nIHBmbikgeyB9Ci0jZGVmaW5lIEFSQ0hfSU1QTEVNRU5UU19GTFVTSF9EQ0FDSEVfUEFHRSAwCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2soc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICAgc3RydWN0IHBhZ2UgKnBhZ2UpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCQkgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgICB1bnNpZ25lZCBsb25nIGxlbikgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdm1hcCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfY2FjaGVfdnVubWFwKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBlbmQpIHsgfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV90b191c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwKLQkJCQkgICAgIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBsZW4pCi17Ci0JbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9mcm9tX3VzZXJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkgICAgICAgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgdmFkZHIsCi0JCQkJICAgICAgIHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjLAotCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxlbikKLXsKLQltZW1jcHkoZHN0LCBzcmMsIGxlbik7Ci19CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvY2FjaGVmbHVzaC5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQVQKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDRmYWIyNGQuLjQ1NjRjOGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NwdS5oCkBAIC0zMiw1ICszMiw2IEBACiAKIERFQ0xBUkVfUEVSX0NQVShpbnQsIGNwdV9zdGF0ZSk7CiAKK2ludCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICopOwogCiAjZW5kaWYgLyogX0FTTV9YODZfQ1BVX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAppbmRleCBmNTJkNDJlLi41NzRkYmMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCkBAIC0xNCw3ICsxNCw3IEBACiAJZG8gewkJCQkJCQlcCiAJCWFzbSBnb3RvKCIxOiIJCQkJCVwKIAkJCUpVTVBfTEFCRUxfSU5JVElBTF9OT1AJCQlcCi0JCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYVwiIFxuXHQiXAorCQkJIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsICBcImF3XCIgXG5cdCJcCiAJCQlfQVNNX1BUUiAiMWIsICVsWyIgI2xhYmVsICJdLCAlYzAgXG5cdCIgXAogCQkJIi5wb3BzZWN0aW9uIFxuXHQiCQkJXAogCQkJOiA6ICAiaSIgKGtleSkgOiAgOiBsYWJlbCk7CQlcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCA0YTJkNGUwLi44YjUzOTNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTM2LDggKzM2LDYgQEAKIAl1bnNpZ25lZCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlpZiAobGlrZWx5KHByZXYgIT0gbmV4dCkpIHsKLQkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KLQkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHByZXYpKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCXBlcmNwdV93cml0ZShjcHVfdGxic3RhdGUuc3RhdGUsIFRMQlNUQVRFX09LKTsKIAkJcGVyY3B1X3dyaXRlKGNwdV90bGJzdGF0ZS5hY3RpdmVfbW0sIG5leHQpOwpAQCAtNDcsNiArNDUsOSBAQAogCQkvKiBSZS1sb2FkIHBhZ2UgdGFibGVzICovCiAJCWxvYWRfY3IzKG5leHQtPnBnZCk7CiAKKwkJLyogc3RvcCBmbHVzaCBpcGlzIGZvciB0aGUgcHJldmlvdXMgbW0gKi8KKwkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtbV9jcHVtYXNrKHByZXYpKTsKKwogCQkvKgogCQkgKiBsb2FkIHRoZSBMRFQsIGlmIHRoZSBMRFQgaXMgZGlmZmVyZW50OgogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21zci1pbmRleC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKaW5kZXggNGQwZGZhMC4uNDNhMThjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmgKQEAgLTM2LDYgKzM2LDExIEBACiAjZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxCQkweDAwMDAwMGMyCiAjZGVmaW5lIE1TUl9GU0JfRlJFUQkJCTB4MDAwMDAwY2QKIAorI2RlZmluZSBNU1JfTkhNX1NOQl9QS0dfQ1NUX0NGR19DVEwJMHgwMDAwMDBlMgorI2RlZmluZSBOSE1fQzNfQVVUT19ERU1PVEUJCSgxVUwgPDwgMjUpCisjZGVmaW5lIE5ITV9DMV9BVVRPX0RFTU9URQkJKDFVTCA8PCAyNikKKyNkZWZpbmUgQVRNX0xOQ19DNl9BVVRPX0RFTU9URQkJKDFVTCA8PCAyNSkKKwogI2RlZmluZSBNU1JfTVRSUmNhcAkJCTB4MDAwMDAwZmUKICNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NUTAkJMHgwMDAwMDExOQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAppbmRleCAyMDcxYThiLi5lYmJjNGQ4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKQEAgLTU1OCwxMyArNTU4LDEyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3BtZF9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcG1kX3QgKnBtZHAsIHBtZF90IHBtZCkKIHsKLSNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKIAlpZiAoc2l6ZW9mKHBtZHZhbF90KSA+IHNpemVvZihsb25nKSkKIAkJLyogNSBhcmcgd29yZHMgKi8KIAkJcHZfbW11X29wcy5zZXRfcG1kX2F0KG1tLCBhZGRyLCBwbWRwLCBwbWQpOwogCWVsc2UKLQkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwgcG1kLnBtZCk7Ci0jZW5kaWYKKwkJUFZPUF9WQ0FMTDQocHZfbW11X29wcy5zZXRfcG1kX2F0LCBtbSwgYWRkciwgcG1kcCwKKwkJCSAgICBuYXRpdmVfcG1kX3ZhbChwbWQpKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJjcHUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCmluZGV4IDM3ODhmNDYuLjdlMTcyOTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oCkBAIC0yNzMsMzQgKzI3MywzNCBAQAogCXR5cGVvZih2YXIpIHB4b19uZXdfXyA9IChudmFsKTsJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZih2YXIpKSB7CQkJCQkJXAogCWNhc2UgMToJCQkJCQkJCVwKLQkJYXNtKCJcbjE6bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hnYiAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlYWwiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdiICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAicSIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSAyOgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGd3ICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVheCIJCQlcCisJCSAgICAiXG4xOlx0Y21weGNoZ3cgJTIsICJfX3BlcmNwdV9hcmcoMSkJCVwKIAkJICAgICJcblx0am56IDFiIgkJCQkJXAotCQkJICAgIDogIj1hIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAorCQkJICAgIDogIj0mYSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKIAkJCSAgICA6ICJyIiAocHhvX25ld19fKQkJCQlcCiAJCQkgICAgOiAibWVtb3J5Iik7CQkJCVwKIAkJYnJlYWs7CQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCQlcCi0JCWFzbSgiXG4xOm1vdiAiX19wZXJjcHVfYXJnKDEpIiwlJWVheCIJCQlcCi0JCSAgICAiXG5cdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQkJXAorCQlhc20oIlxuXHRtb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVlYXgiCQkJXAorCQkgICAgIlxuMTpcdGNtcHhjaGdsICUyLCAiX19wZXJjcHVfYXJnKDEpCQlcCiAJCSAgICAiXG5cdGpueiAxYiIJCQkJCVwKLQkJCSAgICA6ICI9YSIgKHB4b19yZXRfXyksICIrbSIgKHZhcikJCVwKKwkJCSAgICA6ICI9JmEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCiAJCQkgICAgOiAiciIgKHB4b19uZXdfXykJCQkJXAogCQkJICAgIDogIm1lbW9yeSIpOwkJCQlcCiAJCWJyZWFrOwkJCQkJCQlcCiAJY2FzZSA4OgkJCQkJCQkJXAotCQlhc20oIlxuMTptb3YgIl9fcGVyY3B1X2FyZygxKSIsJSVyYXgiCQkJXAotCQkgICAgIlxuXHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJCVwKKwkJYXNtKCJcblx0bW92ICJfX3BlcmNwdV9hcmcoMSkiLCUlcmF4IgkJCVwKKwkJICAgICJcbjE6XHRjbXB4Y2hncSAlMiwgIl9fcGVyY3B1X2FyZygxKQkJXAogCQkgICAgIlxuXHRqbnogMWIiCQkJCQlcCi0JCQkgICAgOiAiPWEiIChweG9fcmV0X18pLCAiK20iICh2YXIpCQlcCisJCQkgICAgOiAiPSZhIiAocHhvX3JldF9fKSwgIittIiAodmFyKQkJXAogCQkJICAgIDogInIiIChweG9fbmV3X18pCQkJCVwKIAkJCSAgICA6ICJtZW1vcnkiKTsJCQkJXAogCQlicmVhazsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9wNC5oCmluZGV4IGUyZjZhOTkuLmNjMjkwODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmZfZXZlbnRfcDQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3A0LmgKQEAgLTIyLDYgKzIyLDcgQEAKIAogI2RlZmluZSBBUkNIX1A0X0NOVFJWQUxfQklUUwkoNDApCiAjZGVmaW5lIEFSQ0hfUDRfQ05UUlZBTF9NQVNLCSgoMVVMTCA8PCBBUkNIX1A0X0NOVFJWQUxfQklUUykgLSAxKQorI2RlZmluZSBBUkNIX1A0X1VORkxBR0dFRF9CSVQJKCgxVUxMKSA8PCAoQVJDSF9QNF9DTlRSVkFMX0JJVFMgLSAxKSkKIAogI2RlZmluZSBQNF9FU0NSX0VWRU5UX01BU0sJMHg3ZTAwMDAwMFUKICNkZWZpbmUgUDRfRVNDUl9FVkVOVF9TSElGVAkyNQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAppbmRleCA0YzJmNjNjLi4xZjQ2OTUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXAuaApAQCAtNDAsMTAgKzQwLDcgQEAKIERFQ0xBUkVfRUFSTFlfUEVSX0NQVSh1MTYsIHg4Nl9iaW9zX2NwdV9hcGljaWQpOwogCiAvKiBTdGF0aWMgc3RhdGUgaW4gaGVhZC5TIHVzZWQgdG8gc2V0IHVwIGEgQ1BVICovCi1leHRlcm4gc3RydWN0IHsKLQl2b2lkICpzcDsKLQl1bnNpZ25lZCBzaG9ydCBzczsKLX0gc3RhY2tfc3RhcnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdGFja19zdGFydDsgLyogSW5pdGlhbCBzdGFjayBwb2ludGVyIGFkZHJlc3MgKi8KIAogc3RydWN0IHNtcF9vcHMgewogCXZvaWQgKCpzbXBfcHJlcGFyZV9ib290X2NwdSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zbXBib290X2hvb2tzLmgKaW5kZXggNmMyMmJmMy4uNzI1Yjc3OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc21wYm9vdF9ob29rcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NtcGJvb3RfaG9va3MuaApAQCAtMzQsNyArMzQsNyBAQAogCSAqLwogCUNNT1NfV1JJVEUoMCwgMHhmKTsKIAotCSooKHZvbGF0aWxlIGxvbmcgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0gMDsKKwkqKCh2b2xhdGlsZSB1MzIgKilwaHlzX3RvX3ZpcnQoYXBpYy0+dHJhbXBvbGluZV9waHlzX2xvdykpID0gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBzbXBib290X3NldHVwX2lvX2FwaWModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExNTllMDkuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi0jaWZuZGVmIF9BU01fWDg2X1NZU1RFTV82NF9ICi0jZGVmaW5lIF9BU01fWDg2X1NZU1RFTV82NF9ICi0KLSNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgotI2luY2x1ZGUgPGFzbS9jbXB4Y2hnLmg+Ci0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I4KHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyBjcjg7Ci0JYXNtIHZvbGF0aWxlKCJtb3ZxICUlY3I4LCUwIiA6ICI9ciIgKGNyOCkpOwotCXJldHVybiBjcjg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjgodW5zaWduZWQgbG9uZyB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtb3ZxICUwLCUlY3I4IiA6OiAiciIgKHZhbCkgOiAibWVtb3J5Iik7Ci19Ci0KLSNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgotCi0jZW5kaWYgLyogX0FTTV9YODZfU1lTVEVNXzY0X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBiM2E3MTEzLi4zZTZlMmQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC03Miw2ICs3Miw3IEBACiBpbnQgYWNwaV9zY2lfb3ZlcnJpZGVfZ3NpIF9faW5pdGRhdGE7CiBpbnQgYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlIF9faW5pdGRhdGE7CiBpbnQgYWNwaV91c2VfdGltZXJfb3ZlcnJpZGUgX19pbml0ZGF0YTsKK2ludCBhY3BpX2ZpeF9waW4yX3BvbGFyaXR5IF9faW5pdGRhdGE7CiAKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIHN0YXRpYyB1NjQgYWNwaV9sYXBpY19hZGRyIF9faW5pdGRhdGEgPSBBUElDX0RFRkFVTFRfUEhZU19CQVNFOwpAQCAtNDE1LDEwICs0MTYsMTUgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGFjcGlfc2tpcF90aW1lcl9vdmVycmlkZSAmJgotCSAgICBpbnRzcmMtPnNvdXJjZV9pcnEgPT0gMCAmJiBpbnRzcmMtPmdsb2JhbF9pcnEgPT0gMikgewotCQlwcmludGsoUFJFRklYICJCSU9TIElSUTAgcGluMiBvdmVycmlkZSBpZ25vcmVkLlxuIik7Ci0JCXJldHVybiAwOworCWlmIChpbnRzcmMtPnNvdXJjZV9pcnEgPT0gMCAmJiBpbnRzcmMtPmdsb2JhbF9pcnEgPT0gMikgeworCQlpZiAoYWNwaV9za2lwX3RpbWVyX292ZXJyaWRlKSB7CisJCQlwcmludGsoUFJFRklYICJCSU9TIElSUTAgcGluMiBvdmVycmlkZSBpZ25vcmVkLlxuIik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoYWNwaV9maXhfcGluMl9wb2xhcml0eSAmJiAoaW50c3JjLT5pbnRpX2ZsYWdzICYgQUNQSV9NQURUX1BPTEFSSVRZX01BU0spKSB7CisJCQlpbnRzcmMtPmludGlfZmxhZ3MgJj0gfkFDUElfTUFEVF9QT0xBUklUWV9NQVNLOworCQkJcHJpbnRrKFBSRUZJWCAiQklPUyBJUlEwIHBpbjIgb3ZlcnJpZGU6IGZvcmNpbmcgcG9sYXJpdHkgdG8gaGlnaCBhY3RpdmUuXG4iKTsKKwkJfQogCX0KIAogCW1wX292ZXJyaWRlX2xlZ2FjeV9pcnEoaW50c3JjLT5zb3VyY2VfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKaW5kZXggNjlmZDcyYS4uNjhkMTUzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCkBAIC0xMiwxMCArMTIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+Ci0KLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNlbmRpZgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpbmNsdWRlICJyZWFsbW9kZS93YWtldXAuaCIKICNpbmNsdWRlICJzbGVlcC5oIgpAQCAtMTAwLDcgKzk4LDcgQEAKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLwogCWhlYWRlci0+dHJhbXBvbGluZV9zZWdtZW50ID0gc2V0dXBfdHJhbXBvbGluZSgpID4+IDQ7CiAjaWZkZWYgQ09ORklHX1NNUAotCXN0YWNrX3N0YXJ0LnNwID0gdGVtcF9zdGFjayArIHNpemVvZih0ZW1wX3N0YWNrKTsKKwlzdGFja19zdGFydCA9ICh1bnNpZ25lZCBsb25nKXRlbXBfc3RhY2sgKyBzaXplb2YodGVtcF9zdGFjayk7CiAJZWFybHlfZ2R0X2Rlc2NyLmFkZHJlc3MgPQogCQkJKHVuc2lnbmVkIGxvbmcpZ2V0X2NwdV9nZHRfdGFibGUoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlpbml0aWFsX2dzID0gcGVyX2NwdV9vZmZzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKQEAgLTE0OSw2ICsxNDcsMTUgQEAKIAltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShtZW0sIG1lbSArIFdBS0VVUF9TSVpFLCAiQUNQSSBXQUtFVVAiKTsKIH0KIAoraW50IF9faW5pdCBhY3BpX2NvbmZpZ3VyZV93YWtldXBfbWVtb3J5KHZvaWQpCit7CisJaWYgKGFjcGlfcmVhbG1vZGUpCisJCXNldF9tZW1vcnlfeChhY3BpX3JlYWxtb2RlLCBXQUtFVVBfU0laRSA+PiBQQUdFX1NISUZUKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChhY3BpX2NvbmZpZ3VyZV93YWtldXBfbWVtb3J5KTsKKwogCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3NsZWVwX3NldHVwKGNoYXIgKnN0cikKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggMTIzNjA4NS4uNzAzOGI5NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTY3MSw3ICs2NzEsNyBAQAogCiAJYXRvbWljX3NldCgmc3RvcF9tYWNoaW5lX2ZpcnN0LCAxKTsKIAl3cm90ZV90ZXh0ID0gMDsKLQlzdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKKwlfX3N0b3BfbWFjaGluZShzdG9wX21hY2hpbmVfdGV4dF9wb2tlLCAodm9pZCAqKSZ0cHAsIE5VTEwpOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpIHx8IGRlZmluZWQoSEFWRV9KVU1QX0xBQkVMKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jIGIvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCmluZGV4IDUxZWYzMWEuLjUxZDRlMTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCW1lbWNweSgmYWRldi0+ZXZ0LCAmYXBidF9jbG9ja2V2ZW50LCBzaXplb2Yoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSkpOwogCiAJaWYgKG1yc3RfdGltZXJfb3B0aW9ucyA9PSBNUlNUX1RJTUVSX0xBUElDX0FQQlQpIHsKLQkJYXBidF9jbG9ja2V2ZW50LnJhdGluZyA9IEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcgLSAxMDA7CisJCWFkZXYtPmV2dC5yYXRpbmcgPSBBUEJUX0NMT0NLRVZFTlRfUkFUSU5HIC0gMTAwOwogCQlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmYWRldi0+ZXZ0OwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXMgY2xvY2tldmVudCByZWdpc3RlcmVkIGFzIGdsb2JhbFxuIiwKIAkJICAgICAgIGdsb2JhbF9jbG9ja19ldmVudC0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggMDZjMTk2ZC4uNzZiOTZkNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtMTM4MSwxMiArMTM4MSwxNyBAQAogI2VuZGlmCiAKIAlhcGljX3BtX2FjdGl2YXRlKCk7Cit9CisKK3ZvaWQgX19pbml0IGJzcF9lbmRfbG9jYWxfQVBJQ19zZXR1cCh2b2lkKQoreworCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAKIAkvKgogCSAqIE5vdyB0aGF0IGxvY2FsIEFQSUMgc2V0dXAgaXMgY29tcGxldGVkIGZvciBCUCwgY29uZmlndXJlIHRoZSBmYXVsdAogCSAqIGhhbmRsaW5nIGZvciBpbnRlcnJ1cHQgcmVtYXBwaW5nLgogCSAqLwotCWlmICghc21wX3Byb2Nlc3Nvcl9pZCgpICYmIGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCisJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCWVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKCk7CiAKIH0KQEAgLTE3NTYsNyArMTc2MSw3IEBACiAJCWVuYWJsZV9JT19BUElDKCk7CiAjZW5kaWYKIAotCWVuZF9sb2NhbF9BUElDX3NldHVwKCk7CisJYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAoc21wX2ZvdW5kX2NvbmZpZyAmJiAhc2tpcF9pb2FwaWNfc2V0dXAgJiYgbnJfaW9hcGljcykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCA2OTdkYzM0Li5jYTllMmEzNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtNDAwMiw2ICs0MDAyLDkgQEAKIHsKIAlpbnQgaSA9IDA7CiAKKwlpZiAobnJfaW9hcGljcyA9PSAwKQorCQlyZXR1cm4gLTE7CisKIAkvKiBGaW5kIHRoZSBJT0FQSUMgdGhhdCBtYW5hZ2VzIHRoaXMgR1NJLiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKIAkJaWYgKChnc2kgPj0gbXBfZ3NpX3JvdXRpbmdbaV0uZ3NpX2Jhc2UpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IGJkMWNhYzcuLjUyYzkzNjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0xNTgsOSArMTU4LDkgQEAKIHsKIAlpZiAoYy0+eDg2ID09IDB4MDYpIHsKIAkJaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfRVNUKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBFU1QtY2FwYWJsZSBDUFUgIgotCQkJICAgICAgICJkZXRlY3RlZC4gVGhlIGFjcGktY3B1ZnJlcSBtb2R1bGUgb2ZmZXJzICIKLQkJCSAgICAgICAidm9sdGFnZSBzY2FsaW5nIGluIGFkZGl0aW9uIG9mIGZyZXF1ZW5jeSAiCisJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcgUEZYICJXYXJuaW5nOiBFU1QtY2FwYWJsZSAiCisJCQkgICAgICAgIkNQVSBkZXRlY3RlZC4gVGhlIGFjcGktY3B1ZnJlcSBtb2R1bGUgb2ZmZXJzICIKKwkJCSAgICAgICAidm9sdGFnZSBzY2FsaW5nIGluIGFkZGl0aW9uIHRvIGZyZXF1ZW5jeSAiCiAJCQkgICAgICAgInNjYWxpbmcuIFlvdSBzaG91bGQgdXNlIHRoYXQgaW5zdGVhZCBvZiAiCiAJCQkgICAgICAgInA0LWNsb2NrbW9kLCBpZiBwb3NzaWJsZS5cbiIpOwogCQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwppbmRleCAzNWM3ZTY1Li5jNTY3ZGVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpAQCAtMTUzNyw2ICsxNTM3LDcgQEAKIHN0YXRpYyBpbnQgX19jcHVpbml0IHBvd2Vybm93azhfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBpLCBzdXBwb3J0ZWRfY3B1cyA9IDAsIGNwdTsKKwlpbnQgcnY7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJaW50IHJjOwpAQCAtMTU1NSwxNCArMTU1NiwxNCBAQAogCiAJCWNwYl9jYXBhYmxlID0gdHJ1ZTsKIAotCQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNwYl9uYik7Ci0KIAkJbXNycyA9IG1zcnNfYWxsb2MoKTsKIAkJaWYgKCFtc3JzKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBFcnJvciBhbGxvY2F0aW5nIG1zcnMhXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCisJCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3BiX25iKTsKKwogCQlyZG1zcl9vbl9jcHVzKGNwdV9vbmxpbmVfbWFzaywgTVNSX0s3X0hXQ1IsIG1zcnMpOwogCiAJCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9vbmxpbmVfbWFzaykgewpAQCAtMTU3NCw3ICsxNTc1LDEzIEBACiAJCQkoY3BiX2VuYWJsZWQgPyAib24iIDogIm9mZiIpKTsKIAl9CiAKLQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmNwdWZyZXFfYW1kNjRfZHJpdmVyKTsKKwlydiA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZjcHVmcmVxX2FtZDY0X2RyaXZlcik7CisJaWYgKHJ2IDwgMCAmJiBib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQ1BCKSkgeworCQl1bnJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY3BiX25iKTsKKwkJbXNyc19mcmVlKG1zcnMpOworCQltc3JzID0gTlVMTDsKKwl9CisJcmV0dXJuIHJ2OwogfQogCiAvKiBkcml2ZXIgZW50cnkgcG9pbnQgZm9yIHRlcm0gKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDcyODNlOTguLmVjMmMxOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtNDUsNiArNDUsNyBAQAogCXsgMHgwYSwgTFZMXzFfREFUQSwgOCB9LAkvKiAyIHdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDBjLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDBkLCBMVkxfMV9EQVRBLCAxNiB9LAkvKiA0LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCisJeyAweDBlLCBMVkxfMV9EQVRBLCAyNCB9LAkvKiA2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIxLCBMVkxfMiwgICAgICAyNTYgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHgyMiwgTFZMXzMsICAgICAgNTEyIH0sCS8qIDQtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDIzLCBMVkxfMywgICAgICBNQigxKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIHNlY3RvcmVkIGNhY2hlLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwpAQCAtNjYsNiArNjcsNyBAQAogCXsgMHg0NSwgTFZMXzIsICAgICAgTUIoMikgfSwJLyogNC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0NiwgTFZMXzMsICAgICAgTUIoNCkgfSwJLyogNC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0NywgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogOC13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg0OCwgTFZMXzIsICAgICAgTUIoMykgfSwJLyogMTItd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4NDksIExWTF8zLCAgICAgIE1CKDQpIH0sCS8qIDE2LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDRhLCBMVkxfMywgICAgICBNQig2KSB9LAkvKiAxMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg0YiwgTFZMXzMsICAgICAgTUIoOCkgfSwJLyogMTYtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTg3LDYgKzg5LDcgQEAKIAl7IDB4N2MsIExWTF8yLCAgICAgIE1CKDEpIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgc2VjdG9yZWQgY2FjaGUsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDdkLCBMVkxfMiwgICAgICBNQigyKSB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDY0IGJ5dGUgbGluZSBzaXplICovCiAJeyAweDdmLCBMVkxfMiwgICAgICA1MTIgfSwJLyogMi13YXkgc2V0IGFzc29jLCA2NCBieXRlIGxpbmUgc2l6ZSAqLworCXsgMHg4MCwgTFZMXzIsICAgICAgNTEyIH0sCS8qIDgtd2F5IHNldCBhc3NvYywgNjQgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4ODIsIExWTF8yLCAgICAgIDI1NiB9LAkvKiA4LXdheSBzZXQgYXNzb2MsIDMyIGJ5dGUgbGluZSBzaXplICovCiAJeyAweDgzLCBMVkxfMiwgICAgICA1MTIgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwogCXsgMHg4NCwgTFZMXzIsICAgICAgTUIoMSkgfSwJLyogOC13YXkgc2V0IGFzc29jLCAzMiBieXRlIGxpbmUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKaW5kZXggZTEyMjQ2Zi4uNmY4YzVlOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCkBAIC01OSw2ICs1OSw3IEBACiAKIC8qIENhbGxiYWNrIHRvIGhhbmRsZSBjb3JlIHRocmVzaG9sZCBpbnRlcnJ1cHRzICovCiBpbnQgKCpwbGF0Zm9ybV90aGVybWFsX25vdGlmeSkoX191NjQgbXNyX3ZhbCk7CitFWFBPUlRfU1lNQk9MKHBsYXRmb3JtX3RoZXJtYWxfbm90aWZ5KTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0aGVybWFsX3N0YXRlLCB0aGVybWFsX3N0YXRlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggMDFjMGYzZS4uYmViYWJlYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC03OTMsMTMgKzc5MywyMSBAQAogfQogCiAvKgotICogTVRSUiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIEFQJ3MKKyAqIERlbGF5ZWQgTVRSUiBpbml0aWFsaXphdGlvbiBmb3IgYWxsIEFQJ3MKICAqLwogdm9pZCBtdHJyX2Fwc19pbml0KHZvaWQpCiB7CiAJaWYgKCF1c2VfaW50ZWwoKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBDaGVjayBpZiBzb21lb25lIGhhcyByZXF1ZXN0ZWQgdGhlIGRlbGF5IG9mIEFQIE1UUlIgaW5pdGlhbGl6YXRpb24sCisJICogYnkgZG9pbmcgc2V0X210cnJfYXBzX2RlbGF5ZWRfaW5pdCgpLCBwcmlvciB0byB0aGlzIHBvaW50LiBJZiBub3QsCisJICogdGhlbiB3ZSBhcmUgZG9uZS4KKwkgKi8KKwlpZiAoIW10cnJfYXBzX2RlbGF5ZWRfaW5pdCkKKwkJcmV0dXJuOworCiAJc2V0X210cnIofjBVLCAwLCAwLCAwKTsKIAltdHJyX2Fwc19kZWxheWVkX2luaXQgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKaW5kZXggZTU2YjliZi4uZmY3NTFhOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X3A0LmMKQEAgLTY4Miw3ICs2ODIsNyBAQAogCSAqIGlmIGFuIGV2ZW50IGlzIHNoYXJlZCBhY2Nyb3NzIHRoZSBsb2dpY2FsIHRocmVhZHMKIAkgKiB0aGUgdXNlciBuZWVkcyBzcGVjaWFsIHBlcm1pc3Npb25zIHRvIGJlIGFibGUgdG8gdXNlIGl0CiAJICovCi0JaWYgKHA0X2V2ZW50X2JpbmRfbWFwW3ZdLnNoYXJlZCkgeworCWlmIChwNF9odF9hY3RpdmUoKSAmJiBwNF9ldmVudF9iaW5kX21hcFt2XS5zaGFyZWQpIHsKIAkJaWYgKHBlcmZfcGFyYW5vaWRfY3B1KCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CkBAIC03MjcsNyArNzI3LDggQEAKIAkJZXZlbnQtPmh3LmNvbmZpZyA9IHA0X3NldF9odF9iaXQoZXZlbnQtPmh3LmNvbmZpZyk7CiAKIAlpZiAoZXZlbnQtPmF0dHIudHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7Ci0KKwkJc3RydWN0IHA0X2V2ZW50X2JpbmQgKmJpbmQ7CisJCXVuc2lnbmVkIGludCBlc2VsOwogCQkvKgogCQkgKiBDbGVhciBiaXRzIHdlIHJlc2VydmUgdG8gYmUgbWFuYWdlZCBieSBrZXJuZWwgaXRzZWxmCiAJCSAqIGFuZCBuZXZlciBhbGxvd2VkIGZyb20gYSB1c2VyIHNwYWNlCkBAIC03NDMsNiArNzQ0LDEzIEBACiAJCSAqIGJpdHMgc2luY2Ugd2Uga2VlcCBhZGRpdGlvbmFsIGluZm8gaGVyZSAoZm9yIGNhY2hlIGV2ZW50cyBhbmQgZXRjKQogCQkgKi8KIAkJZXZlbnQtPmh3LmNvbmZpZyB8PSBldmVudC0+YXR0ci5jb25maWc7CisJCWJpbmQgPSBwNF9jb25maWdfZ2V0X2JpbmQoZXZlbnQtPmF0dHIuY29uZmlnKTsKKwkJaWYgKCFiaW5kKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQllc2VsID0gUDRfT1BDT0RFX0VTRUwoYmluZC0+b3Bjb2RlKTsKKwkJZXZlbnQtPmh3LmNvbmZpZyB8PSBwNF9jb25maWdfcGFja19jY2NyKFA0X0NDQ1JfRVNFTChlc2VsKSk7CiAJfQogCiAJcmMgPSB4ODZfc2V0dXBfcGVyZmN0cihldmVudCk7CkBAIC03NjIsOSArNzcwLDE0IEBACiAJCXJldHVybiAxOwogCX0KIAotCS8qIGl0IG1pZ2h0IGJlIHVuZmxhZ2dlZCBvdmVyZmxvdyAqLwotCXJkbXNybChod2MtPmV2ZW50X2Jhc2UgKyBod2MtPmlkeCwgdik7Ci0JaWYgKCEodiAmIEFSQ0hfUDRfQ05UUlZBTF9NQVNLKSkKKwkvKgorCSAqIEluIHNvbWUgY2lyY3Vtc3RhbmNlcyB0aGUgb3ZlcmZsb3cgbWlnaHQgaXNzdWUgYW4gTk1JIGJ1dCBkaWQKKwkgKiBub3Qgc2V0IFA0X0NDQ1JfT1ZGIGJpdC4gQmVjYXVzZSBhIGNvdW50ZXIgaG9sZHMgYSBuZWdhdGl2ZSB2YWx1ZQorCSAqIHdlIHNpbXBseSBjaGVjayBmb3IgaGlnaCBiaXQgYmVpbmcgc2V0LCBpZiBpdCdzIGNsZWFyZWQgaXQgbWVhbnMKKwkgKiB0aGUgY291bnRlciBoYXMgcmVhY2hlZCB6ZXJvIHZhbHVlIGFuZCBjb250aW51ZWQgY291bnRpbmcgYmVmb3JlCisJICogcmVhbCBOTUkgc2lnbmFsIHdhcyByZWNlaXZlZDoKKwkgKi8KKwlpZiAoISh2ICYgQVJDSF9QNF9VTkZMQUdHRURfQklUKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2tfNjQuYwppbmRleCA2NDEwMTMzLi5hNmI2ZmNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFja182NC5jCkBAIC0xNDksMTMgKzE0OSwxMyBAQAogCXVuc2lnbmVkIHVzZWQgPSAwOwogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGluZm87CiAJaW50IGdyYXBoID0gMDsKKwl1bnNpZ25lZCBsb25nIGR1bW15OwogCXVuc2lnbmVkIGxvbmcgYnA7CiAKIAlpZiAoIXRhc2spCiAJCXRhc2sgPSBjdXJyZW50OwogCiAJaWYgKCFzdGFjaykgewotCQl1bnNpZ25lZCBsb25nIGR1bW15OwogCQlzdGFjayA9ICZkdW1teTsKIAkJaWYgKHRhc2sgJiYgdGFzayAhPSBjdXJyZW50KQogCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKXRhc2stPnRocmVhZC5zcDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYwppbmRleCA3NmI4Y2Q5Li45ZWZiZGNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrcy5jCkBAIC0xNDMsMTUgKzE0MywxMCBAQAogCiBzdGF0aWMgdTMyIF9faW5pdCBhdGlfc2J4MDBfcmV2KGludCBudW0sIGludCBzbG90LCBpbnQgZnVuYykKIHsKLQl1MzIgb2xkLCBkOworCXUzMiBkOwogCi0JZCA9IHJlYWRfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzApOwotCW9sZCA9IGQ7Ci0JZCAmPSB+KDE8PDgpOwotCXdyaXRlX3BjaV9jb25maWcobnVtLCBzbG90LCBmdW5jLCAweDcwLCBkKTsKIAlkID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywgMHg4KTsKIAlkICY9IDB4ZmY7Ci0Jd3JpdGVfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsIDB4NzAsIG9sZCk7CiAKIAlyZXR1cm4gZDsKIH0KQEAgLTE2MCwxMSArMTU1LDE0IEBACiB7CiAJdTMyIGQsIHJldjsKIAotCWlmIChhY3BpX3VzZV90aW1lcl9vdmVycmlkZSkKKwlyZXYgPSBhdGlfc2J4MDBfcmV2KG51bSwgc2xvdCwgZnVuYyk7CisJaWYgKHJldiA+PSAweDQwKQorCQlhY3BpX2ZpeF9waW4yX3BvbGFyaXR5ID0gMTsKKworCWlmIChyZXYgPiAweDEzKQogCQlyZXR1cm47CiAKLQlyZXYgPSBhdGlfc2J4MDBfcmV2KG51bSwgc2xvdCwgZnVuYyk7Ci0JaWYgKHJldiA+IDB4MTMpCisJaWYgKGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlKQogCQlyZXR1cm47CiAKIAkvKiBjaGVjayBmb3IgSVJRMCBpbnRlcnJ1cHQgc3dhcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggZmMyOTNkYy4uNzY3ZDZjNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC04NSw2ICs4NSw4IEBACiAgKi8KIF9fSEVBRAogRU5UUlkoc3RhcnR1cF8zMikKKwltb3ZsIHBhKHN0YWNrX3N0YXJ0KSwlZWN4CisJCiAJLyogdGVzdCBLRUVQX1NFR01FTlRTIGZsYWcgdG8gc2VlIGlmIHRoZSBib290bG9hZGVyIGlzIGFza2luZwogCQl1cyB0byBub3QgcmVsb2FkIHNlZ21lbnRzICovCiAJdGVzdGIgJCgxPDw2KSwgQlBfbG9hZGZsYWdzKCVlc2kpCkBAIC05OSw3ICsxMDEsOSBAQAogCW1vdmwgJWVheCwlZXMKIAltb3ZsICVlYXgsJWZzCiAJbW92bCAlZWF4LCVncworCW1vdmwgJWVheCwlc3MKIDI6CisJbGVhbCAtX19QQUdFX09GRlNFVCglZWN4KSwlZXNwCiAKIC8qCiAgKiBDbGVhciBCU1MgZmlyc3Qgc28gdGhhdCB0aGVyZSBhcmUgbm8gc3VycHJpc2VzLi4uCkBAIC0xNDUsOCArMTQ5LDYgQEAKICAqIF9icmtfZW5kIGlzIHNldCB1cCB0byBwb2ludCB0byB0aGUgZmlyc3QgInNhZmUiIGxvY2F0aW9uLgogICogTWFwcGluZ3MgYXJlIGNyZWF0ZWQgYm90aCBhdCB2aXJ0dWFsIGFkZHJlc3MgMCAoaWRlbnRpdHkgbWFwcGluZykKICAqIGFuZCBQQUdFX09GRlNFVCBmb3IgdXAgdG8gX2VuZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGhlIHN0YWNrIGlzIG5vdCB5ZXQgc2V0IHVwIQogICovCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIApAQCAtMjgyLDYgKzI4NCw5IEBACiAJbW92bCAlZWF4LCVlcwogCW1vdmwgJWVheCwlZnMKIAltb3ZsICVlYXgsJWdzCisJbW92bCBwYShzdGFja19zdGFydCksJWVjeAorCW1vdmwgJWVheCwlc3MKKwlsZWFsIC1fX1BBR0VfT0ZGU0VUKCVlY3gpLCVlc3AKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiBkZWZhdWx0X2VudHJ5OgogCkBAIC0zNDcsOCArMzUyLDggQEAKIAltb3ZsICVlYXgsJWNyMAkJLyogLi5hbmQgc2V0IHBhZ2luZyAoUEcpIGJpdCAqLwogCWxqbXAgJF9fQk9PVF9DUywkMWYJLyogQ2xlYXIgcHJlZmV0Y2ggYW5kIG5vcm1hbGl6ZSAlZWlwICovCiAxOgotCS8qIFNldCB1cCB0aGUgc3RhY2sgcG9pbnRlciAqLwotCWxzcyBzdGFja19zdGFydCwlZXNwCisJLyogU2hpZnQgdGhlIHN0YWNrIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlhZGRsICRfX1BBR0VfT0ZGU0VULCAlZXNwCiAKIC8qCiAgKiBJbml0aWFsaXplIGVmbGFncy4gIFNvbWUgQklPUydzIGxlYXZlIGJpdHMgbGlrZSBOVCBzZXQuICBUaGlzIHdvdWxkCkBAIC0zNjAsOSArMzY1LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAljbXBiICQwLCByZWFkeQotCWp6ICAxZgkJCQkvKiBJbml0aWFsIENQVSBjbGVhbnMgQlNTICovCi0Jam1wIGNoZWNrQ1BVdHlwZQotMToKKwlqbnogY2hlY2tDUFV0eXBlCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKgpAQCAtNDcwLDE0ICs0NzMsNyBAQAogCiAJY2xkCQkJIyBnY2MyIHdhbnRzIHRoZSBkaXJlY3Rpb24gZmxhZyBjbGVhcmVkIGF0IGFsbCB0aW1lcwogCXB1c2hsICQwCQkjIGZha2UgcmV0dXJuIGFkZHJlc3MgZm9yIHVud2luZGVyCi0jaWZkZWYgQ09ORklHX1NNUAotCW1vdmIgcmVhZHksICVjbAogCW1vdmIgJDEsIHJlYWR5Ci0JY21wYiAkMCwlY2wJCSMgdGhlIGZpcnN0IENQVSBjYWxscyBzdGFydF9rZXJuZWwKLQlqZSAgIDFmCi0JbW92bCAoc3RhY2tfc3RhcnQpLCAlZXNwCi0xOgotI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAlqbXAgKihpbml0aWFsX2NvZGUpCiAKIC8qCkBAIC02NzAsMTUgKzY2NiwxNSBAQAogI2VuZGlmCiAKIC5kYXRhCisuYmFsaWduIDQKIEVOVFJZKHN0YWNrX3N0YXJ0KQogCS5sb25nIGluaXRfdGhyZWFkX3VuaW9uK1RIUkVBRF9TSVpFCi0JLmxvbmcgX19CT09UX0RTCi0KLXJlYWR5OgkuYnl0ZSAwCiAKIGVhcmx5X3JlY3Vyc2lvbl9mbGFnOgogCS5sb25nIDAKIAorcmVhZHk6CS5ieXRlIDAKKwogaW50X21zZzoKIAkuYXNjaXogIlVua25vd24gaW50ZXJydXB0IG9yIGZhdWx0IGF0OiAlcCAlcCAlcFxuIgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggNTI5NDVkYS4uMzg3YjZhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMzY3LDcgKzM2Nyw4IEBACiAJCWlmIChpcnIgICYgKDEgPDwgKHZlY3RvciAlIDMyKSkpIHsKIAkJCWlycSA9IF9fdGhpc19jcHVfcmVhZCh2ZWN0b3JfaXJxW3ZlY3Rvcl0pOwogCi0JCQlkYXRhID0gaXJxX2dldF9pcnFfZGF0YShpcnEpOworCQkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJCQlkYXRhID0gJmRlc2MtPmlycV9kYXRhOwogCQkJcmF3X3NwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJCQlpZiAoZGF0YS0+Y2hpcC0+aXJxX3JldHJpZ2dlcikKIAkJCQlkYXRhLT5jaGlwLT5pcnFfcmV0cmlnZ2VyKGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZDgyODZlZC4uZmY0NTU0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xNCw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CkBAIC05MSwyMSArOTIsMzEgQEAKIAogdm9pZCBzaG93X3JlZ3NfY29tbW9uKHZvaWQpCiB7Ci0JY29uc3QgY2hhciAqYm9hcmQsICpwcm9kdWN0OworCWNvbnN0IGNoYXIgKnZlbmRvciwgKnByb2R1Y3QsICpib2FyZDsKIAotCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7Ci0JaWYgKCFib2FyZCkKLQkJYm9hcmQgPSAiIjsKKwl2ZW5kb3IgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKTsKKwlpZiAoIXZlbmRvcikKKwkJdmVuZG9yID0gIiI7CiAJcHJvZHVjdCA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfTkFNRSk7CiAJaWYgKCFwcm9kdWN0KQogCQlwcm9kdWN0ID0gIiI7CiAKKwkvKiBCb2FyZCBOYW1lIGlzIG9wdGlvbmFsICovCisJYm9hcmQgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9OQU1FKTsKKwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JcHJpbnRrKEtFUk5fREVGQVVMVCAiUGlkOiAlZCwgY29tbTogJS4yMHMgJXMgJXMgJS4qcyAlcy8lc1xuIiwKKwlwcmludGsoS0VSTl9ERUZBVUxUICJQaWQ6ICVkLCBjb21tOiAlLjIwcyAlcyAlcyAlLipzIiwKIAkJY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBwcmludF90YWludGVkKCksCiAJCWluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAogCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCi0JCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uLCBib2FyZCwgcHJvZHVjdCk7CisJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKKwlwcmludGsoS0VSTl9DT05UICIgIik7CisJcHJpbnRrKEtFUk5fQ09OVCAiJXMgJXMiLCB2ZW5kb3IsIHByb2R1Y3QpOworCWlmIChib2FyZCkgeworCQlwcmludGsoS0VSTl9DT05UICIvIik7CisJCXByaW50ayhLRVJOX0NPTlQgIiVzIiwgYm9hcmQpOworCX0KKwlwcmludGsoS0VSTl9DT05UICJcbiIpOwogfQogCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQpAQCAtNTA1LDcgKzUxNiw3IEBACiAjZGVmaW5lIE1XQUlUX0VDWF9FWFRFTkRFRF9JTkZPCQkweDAxCiAjZGVmaW5lIE1XQUlUX0VEWF9DMQkJCTB4ZjAKIAotc3RhdGljIGludCBfX2NwdWluaXQgbXdhaXRfdXNhYmxlKGNvbnN0IHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK2ludCBtd2FpdF91c2FibGUoY29uc3Qgc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXUzMiBlYXgsIGVieCwgZWN4LCBlZHg7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCBmYzdhYWUxLi43MTUwMzdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC0yODUsNiArMjg1LDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJQNFM4MDAiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIFZlcnNhTG9naWMgTWVubG93IGJvYXJkcyAqLworCQkuY2FsbGJhY2sgPSBzZXRfYmlvc19yZWJvb3QsCisJCS5pZGVudCA9ICJWZXJzYUxvZ2ljIE1lbmxvdyBiYXNlZCBib2FyZCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJWZXJzYUxvZ2ljIENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICJWZXJzYUxvZ2ljIE1lbmxvdyBib2FyZCIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwppbmRleCA3NjNkZjc3Li4wODc3NmE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKQEAgLTYzOCw3ICs2MzgsNyBAQAogCSAqIHRhcmdldCBwcm9jZXNzb3Igc3RhdGUuCiAJICovCiAJc3RhcnR1cF9pcGlfaG9vayhwaHlzX2FwaWNpZCwgKHVuc2lnbmVkIGxvbmcpIHN0YXJ0X3NlY29uZGFyeSwKLQkJCSAodW5zaWduZWQgbG9uZylzdGFja19zdGFydC5zcCk7CisJCQkgc3RhY2tfc3RhcnQpOwogCiAJLyoKIAkgKiBSdW4gU1RBUlRVUCBJUEkgbG9vcC4KQEAgLTc4NSw3ICs3ODUsNyBAQAogI2VuZGlmCiAJZWFybHlfZ2R0X2Rlc2NyLmFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylnZXRfY3B1X2dkdF90YWJsZShjcHUpOwogCWluaXRpYWxfY29kZSA9ICh1bnNpZ25lZCBsb25nKXN0YXJ0X3NlY29uZGFyeTsKLQlzdGFja19zdGFydC5zcCA9ICh2b2lkICopIGNfaWRsZS5pZGxlLT50aHJlYWQuc3A7CisJc3RhY2tfc3RhcnQgID0gY19pZGxlLmlkbGUtPnRocmVhZC5zcDsKIAogCS8qIHN0YXJ0X2lwIGhhZCBiZXR0ZXIgYmUgcGFnZS1hbGlnbmVkISAqLwogCXN0YXJ0X2lwID0gc2V0dXBfdHJhbXBvbGluZSgpOwpAQCAtMTA2MCw3ICsxMDYwLDcgQEAKIAogCQljb25uZWN0X2JzcF9BUElDKCk7CiAJCXNldHVwX2xvY2FsX0FQSUMoKTsKLQkJZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwkJYnNwX2VuZF9sb2NhbF9BUElDX3NldHVwKCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTExMzcsNyArMTEzNyw3IEBACiAJaWYgKCFza2lwX2lvYXBpY19zZXR1cCAmJiBucl9pb2FwaWNzKQogCQllbmFibGVfSU9fQVBJQygpOwogCi0JZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKKwlic3BfZW5kX2xvY2FsX0FQSUNfc2V0dXAoKTsKIAogCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKIApAQCAtMTQwMiw4ICsxNDAyLDkgQEAKIAl1bnNpZ25lZCBpbnQgaGlnaGVzdF9zdWJjc3RhdGUgPSAwOwogCWludCBpOwogCXZvaWQgKm13YWl0X3B0cjsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBfX3RoaXNfY3B1X3B0cigmY3B1X2luZm8pOwogCi0JaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX01XQUlUKSkKKwlpZiAoIShjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01XQUlUKSAmJiBtd2FpdF91c2FibGUoYykpKQogCQlyZXR1cm47CiAJaWYgKCFjcHVfaGFzKF9fdGhpc19jcHVfcHRyKCZjcHVfaW5mbyksIFg4Nl9GRUFUVVJFX0NMRkxTSCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9zdm0uYyBiL2FyY2gveDg2L2t2bS9zdm0uYwppbmRleCAyNWJkMWJjLi42M2ZlYzE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vc3ZtLmMKKysrIGIvYXJjaC94ODYva3ZtL3N2bS5jCkBAIC0xMTUwLDggKzExNTAsOCBAQAogCWt2bV9sb2FkX2xkdChzdm0tPmhvc3QubGR0KTsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJbG9hZHNlZ21lbnQoZnMsIHN2bS0+aG9zdC5mcyk7Ci0JbG9hZF9nc19pbmRleChzdm0tPmhvc3QuZ3MpOwogCXdybXNybChNU1JfS0VSTkVMX0dTX0JBU0UsIGN1cnJlbnQtPnRocmVhZC5ncyk7CisJbG9hZF9nc19pbmRleChzdm0tPmhvc3QuZ3MpOwogI2Vsc2UKIAlsb2Fkc2VnbWVudChncywgc3ZtLT5ob3N0LmdzKTsKICNlbmRpZgpAQCAtMjc3Nyw2ICsyNzc3LDggQEAKIAkJCWt2bV9yZWdpc3Rlcl93cml0ZSgmc3ZtLT52Y3B1LCByZWcsIHZhbCk7CiAJfQogCisJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKwogCXJldHVybiAxOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwppbmRleCA4YjgzMGNhLi5kMzQzYjNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKQEAgLTI1Niw3ICsyNTYsNiBAQAogCQkJCSAgIHVuc2lnbmVkIGxvbmcgcGZuKQogewogCXBncHJvdF90IGZvcmJpZGRlbiA9IF9fcGdwcm90KDApOwotCXBncHJvdF90IHJlcXVpcmVkID0gX19wZ3Byb3QoMCk7CiAKIAkvKgogCSAqIFRoZSBCSU9TIGFyZWEgYmV0d2VlbiA2NDBrIGFuZCAxTWIgbmVlZHMgdG8gYmUgZXhlY3V0YWJsZSBmb3IKQEAgLTI4MiwxMiArMjgxLDYgQEAKIAlpZiAod2l0aGluKHBmbiwgX19wYSgodW5zaWduZWQgbG9uZylfX3N0YXJ0X3JvZGF0YSkgPj4gUEFHRV9TSElGVCwKIAkJICAgX19wYSgodW5zaWduZWQgbG9uZylfX2VuZF9yb2RhdGEpID4+IFBBR0VfU0hJRlQpKQogCQlwZ3Byb3RfdmFsKGZvcmJpZGRlbikgfD0gX1BBR0VfUlc7Ci0JLyoKLQkgKiAuZGF0YSBhbmQgLmJzcyBzaG91bGQgYWx3YXlzIGJlIHdyaXRhYmxlLgotCSAqLwotCWlmICh3aXRoaW4oYWRkcmVzcywgKHVuc2lnbmVkIGxvbmcpX3NkYXRhLCAodW5zaWduZWQgbG9uZylfZWRhdGEpIHx8Ci0JICAgIHdpdGhpbihhZGRyZXNzLCAodW5zaWduZWQgbG9uZylfX2Jzc19zdGFydCwgKHVuc2lnbmVkIGxvbmcpX19ic3Nfc3RvcCkpCi0JCXBncHJvdF92YWwocmVxdWlyZWQpIHw9IF9QQUdFX1JXOwogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19ST0RBVEEpCiAJLyoKQEAgLTMyNyw3ICszMjAsNiBAQAogI2VuZGlmCiAKIAlwcm90ID0gX19wZ3Byb3QocGdwcm90X3ZhbChwcm90KSAmIH5wZ3Byb3RfdmFsKGZvcmJpZGRlbikpOwotCXByb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKHByb3QpIHwgcGdwcm90X3ZhbChyZXF1aXJlZCkpOwogCiAJcmV0dXJuIHByb3Q7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9vbHBjL29scGNfZHQuYyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCmluZGV4IGRhYjg3NDYuLjA0NGJkYTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL29scGMvb2xwY19kdC5jCkBAIC0xNDAsOCArMTQwLDcgQEAKIAkJICogd2FzdGVkIGJvb3RtZW0pIGFuZCBoYW5kIG9mZiBjaHVua3Mgb2YgaXQgdG8gY2FsbGVycy4KIAkJICovCiAJCXJlcyA9IGFsbG9jX2Jvb3RtZW0oY2h1bmtfc2l6ZSk7Ci0JCWlmICghcmVzKQotCQkJcmV0dXJuIE5VTEw7CisJCUJVR19PTighcmVzKTsKIAkJcHJvbV9lYXJseV9hbGxvY2F0ZWQgKz0gY2h1bmtfc2l6ZTsKIAkJbWVtc2V0KHJlcywgMCwgY2h1bmtfc2l6ZSk7CiAJCWZyZWVfbWVtID0gY2h1bmtfc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wMm0uYyBiL2FyY2gveDg2L3hlbi9wMm0uYwppbmRleCBkZGM4MWEwLi5mZDEyZDdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vcDJtLmMKKysrIGIvYXJjaC94ODYveGVuL3AybS5jCkBAIC0yNDEsMjEgKzI0MSwxNSBAQAogCQkgKiBBcyBsb25nIGFzIHRoZSBtZm5fbGlzdCBoYXMgZW5vdWdoIGVudHJpZXMgdG8gY29tcGxldGVseQogCQkgKiBmaWxsIGEgcDJtIHBhZ2UsIHBvaW50aW5nIGludG8gdGhlIGFycmF5IGlzIG9rLiBCdXQgaWYKIAkJICogbm90IHRoZSBlbnRyaWVzIGJleW9uZCB0aGUgbGFzdCBwZm4gd2lsbCBiZSB1bmRlZmluZWQuCi0JCSAqIEFuZCBndWVzc2luZyB0aGF0IHRoZSAnd2hhdC1ldmVyLXRoZXJlLWlzJyBkb2VzIG5vdCB0YWtlIGl0Ci0JCSAqIHRvbyBraW5kbHkgd2hlbiBjaGFuZ2luZyBpdCB0byBpbnZhbGlkIG1hcmtlcnMsIGEgbmV3IHBhZ2UKLQkJICogaXMgYWxsb2NhdGVkLCBpbml0aWFsaXplZCBhbmQgZmlsbGVkIHdpdGggdGhlIHZhbGlkIHBhcnQuCiAJCSAqLwogCQlpZiAodW5saWtlbHkocGZuICsgUDJNX1BFUl9QQUdFID4gbWF4X3BmbikpIHsKIAkJCXVuc2lnbmVkIGxvbmcgcDJtaWR4OwotCQkJdW5zaWduZWQgbG9uZyAqcDJtID0gZXh0ZW5kX2JyayhQQUdFX1NJWkUsIFBBR0VfU0laRSk7Ci0JCQlwMm1faW5pdChwMm0pOwogCi0JCQlmb3IgKHAybWlkeCA9IDA7IHBmbiArIHAybWlkeCA8IG1heF9wZm47IHAybWlkeCsrKSB7Ci0JCQkJcDJtW3AybWlkeF0gPSBtZm5fbGlzdFtwZm4gKyBwMm1pZHhdOwotCQkJfQotCQkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSBwMm07Ci0JCX0gZWxzZQotCQkJcDJtX3RvcFt0b3BpZHhdW21pZGlkeF0gPSAmbWZuX2xpc3RbcGZuXTsKKwkJCXAybWlkeCA9IG1heF9wZm4gJSBQMk1fUEVSX1BBR0U7CisJCQlmb3IgKCA7IHAybWlkeCA8IFAyTV9QRVJfUEFHRTsgcDJtaWR4KyspCisJCQkJbWZuX2xpc3RbcGZuICsgcDJtaWR4XSA9IElOVkFMSURfUDJNX0VOVFJZOworCQl9CisJCXAybV90b3BbdG9waWR4XVttaWRpZHhdID0gJm1mbl9saXN0W3Bmbl07CiAJfQogCiAJbTJwX292ZXJyaWRlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zZXR1cC5jIGIvYXJjaC94ODYveGVuL3NldHVwLmMKaW5kZXggYjVhN2Y5Mi4uYThhNjZhNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL3NldHVwLmMKKysrIGIvYXJjaC94ODYveGVuL3NldHVwLmMKQEAgLTE3OSw4ICsxNzksMTMgQEAKIAllODIwLm5yX21hcCA9IDA7CiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CiAJZm9yIChpID0gMDsgaSA8IG1lbW1hcC5ucl9lbnRyaWVzOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBsb25nIGVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKKwkJLyogR3VhcmQgYWdhaW5zdCBub24tcGFnZSBhbGlnbmVkIEU4MjAgZW50cmllcy4gKi8KKwkJaWYgKG1hcFtpXS50eXBlID09IEU4MjBfUkFNKQorCQkJbWFwW2ldLnNpemUgLT0gKG1hcFtpXS5zaXplICsgbWFwW2ldLmFkZHIpICUgUEFHRV9TSVpFOworCisJCWVuZCA9IG1hcFtpXS5hZGRyICsgbWFwW2ldLnNpemU7CiAJCWlmIChtYXBbaV0udHlwZSA9PSBFODIwX1JBTSAmJiBlbmQgPiBtZW1fZW5kKSB7CiAJCQkvKiBSQU0gb2ZmIHRoZSBlbmQgLSBtYXkgYmUgcGFydGlhbGx5IGluY2x1ZGVkICovCiAJCQl1NjQgZGVsdGEgPSBtaW4obWFwW2ldLnNpemUsIGVuZCAtIG1lbV9lbmQpOwpAQCAtMzUwLDYgKzM1NSw3IEBACiAJYm9vdF9jcHVfZGF0YS5obHRfd29ya3Nfb2sgPSAxOwogI2VuZGlmCiAJcG1faWRsZSA9IGRlZmF1bHRfaWRsZTsKKwlib290X29wdGlvbl9pZGxlX292ZXJyaWRlID0gSURMRV9IQUxUOwogCiAJZmlkZGxlX3Zkc28oKTsKIH0KZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jb3JlLmMgYi9ibG9jay9ibGstY29yZS5jCmluZGV4IDJmNDAwMmYuLjUxOGRkNDIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jb3JlLmMKKysrIGIvYmxvY2svYmxrLWNvcmUuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKIAogCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19TVE9QUEVELCBxKTsKLQlfX2Jsa19ydW5fcXVldWUocSk7CisJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3N0YXJ0X3F1ZXVlKTsKIApAQCAtNDAzLDEzICs0MDMsMTQgQEAKIC8qKgogICogX19ibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6CVRoZSBxdWV1ZSB0byBydW4KKyAqIEBmb3JjZV9rYmxvY2tkOiBEb24ndCBydW4gQHEtPnJlcXVlc3RfZm4gZGlyZWN0bHkuICBVc2Uga2Jsb2NrZC4KICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIFNlZSBAYmxrX3J1bl9xdWV1ZS4gVGhpcyB2YXJpYW50IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIGxvY2sKICAqICAgIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKgogICovCi12b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3ZvaWQgX19ibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBib29sIGZvcmNlX2tibG9ja2QpCiB7CiAJYmxrX3JlbW92ZV9wbHVnKHEpOwogCkBAIC00MjMsNyArNDI0LDcgQEAKIAkgKiBPbmx5IHJlY3Vyc2Ugb25jZSB0byBhdm9pZCBvdmVycnVubmluZyB0aGUgc3RhY2ssIGxldCB0aGUgdW5wbHVnCiAJICogaGFuZGxpbmcgcmVpbnZva2UgdGhlIGhhbmRsZXIgc2hvcnRseSBpZiB3ZSBhbHJlYWR5IGdvdCB0aGVyZS4KIAkgKi8KLQlpZiAoIXF1ZXVlX2ZsYWdfdGVzdF9hbmRfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcSkpIHsKKwlpZiAoIWZvcmNlX2tibG9ja2QgJiYgIXF1ZXVlX2ZsYWdfdGVzdF9hbmRfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcSkpIHsKIAkJcS0+cmVxdWVzdF9mbihxKTsKIAkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHEpOwogCX0gZWxzZSB7CkBAIC00NDYsNyArNDQ3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnVuX3F1ZXVlKTsKQEAgLTEwNTMsNyArMTA1NCw3IEBACiAKIAlkcml2ZV9zdGF0X2FjY3QocnEsIDEpOwogCV9fZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCB3aGVyZSwgMCk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEpOworCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19pbnNlcnRfcmVxdWVzdCk7CkBAIC0yNjEwLDEzICsyNjExLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woa2Jsb2NrZF9zY2hlZHVsZV93b3JrKTsKIAotaW50IGtibG9ja2Rfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCi17Ci0JcmV0dXJuIHF1ZXVlX2RlbGF5ZWRfd29yayhrYmxvY2tkX3dvcmtxdWV1ZSwgZHdvcmssIGRlbGF5KTsKLX0KLUVYUE9SVF9TWU1CT0woa2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmspOwotCiBpbnQgX19pbml0IGJsa19kZXZfaW5pdCh2b2lkKQogewogCUJVSUxEX0JVR19PTihfX1JFUV9OUl9CSVRTID4gOCAqCmRpZmYgLS1naXQgYS9ibG9jay9ibGstZmx1c2guYyBiL2Jsb2NrL2Jsay1mbHVzaC5jCmluZGV4IDU0YjEyM2QuLmIyN2QwMjAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1mbHVzaC5jCisrKyBiL2Jsb2NrL2Jsay1mbHVzaC5jCkBAIC02NiwxMCArNjYsMTIgQEAKIAogCS8qCiAJICogTW92aW5nIGEgcmVxdWVzdCBzaWxlbnRseSB0byBlbXB0eSBxdWV1ZV9oZWFkIG1heSBzdGFsbCB0aGUKLQkgKiBxdWV1ZS4gIEtpY2sgdGhlIHF1ZXVlIGluIHRob3NlIGNhc2VzLgorCSAqIHF1ZXVlLiAgS2ljayB0aGUgcXVldWUgaW4gdGhvc2UgY2FzZXMuICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorCSAqIGZyb20gcmVxdWVzdCBjb21wbGV0aW9uIHBhdGggYW5kIGNhbGxpbmcgZGlyZWN0bHkgaW50bworCSAqIHJlcXVlc3RfZm4gbWF5IGNvbmZ1c2UgdGhlIGRyaXZlci4gIEFsd2F5cyB1c2Uga2Jsb2NrZC4KIAkgKi8KIAlpZiAod2FzX2VtcHR5ICYmIG5leHRfcnEpCi0JCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBwcmVfZmx1c2hfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGVycm9yKQpAQCAtMTMwLDcgKzEzMiw3IEBACiAJCUJVRygpOwogCX0KIAotCWVsdl9pbnNlcnQocSwgcnEsIEVMRVZBVE9SX0lOU0VSVF9GUk9OVCk7CisJZWx2X2luc2VydChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX1JFUVVFVUUpOwogCXJldHVybiBycTsKIH0KIApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWxpYi5jIGIvYmxvY2svYmxrLWxpYi5jCmluZGV4IDFhMzIwZDIuLmVlYzc4YmUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1saWIuYworKysgYi9ibG9jay9ibGstbGliLmMKQEAgLTEzMiw3ICsxMzIsNyBAQAogfQogCiAvKioKLSAqIGJsa2Rldl9pc3N1ZV96ZXJvb3V0IGdlbmVyYXRlIG51bWJlciBvZiB6ZXJvIGZpbGVkIHdyaXRlIGJpb3MKKyAqIGJsa2Rldl9pc3N1ZV96ZXJvb3V0IC0gZ2VuZXJhdGUgbnVtYmVyIG9mIHplcm8gZmlsZWQgd3JpdGUgYmlvcwogICogQGJkZXY6CWJsb2NrZGV2IHRvIGlzc3VlCiAgKiBAc2VjdG9yOglzdGFydCBzZWN0b3IKICAqIEBucl9zZWN0czoJbnVtYmVyIG9mIHNlY3RvcnMgdG8gd3JpdGUKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jIGIvYmxvY2svYmxrLXRocm90dGxlLmMKaW5kZXggMzgxYjA5Yi4uZTM2Y2MxMCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXRocm90dGxlLmMKKysrIGIvYmxvY2svYmxrLXRocm90dGxlLmMKQEAgLTIwLDYgKzIwLDExIEBACiAvKiBUaHJvdHRsaW5nIGlzIHBlcmZvcm1lZCBvdmVyIDEwMG1zIHNsaWNlIGFuZCBhZnRlciB0aGF0IHNsaWNlIGlzIHJlbmV3ZWQgKi8KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRocm90bF9zbGljZSA9IEhaLzEwOwkvKiAxMDAgbXMgKi8KIAorLyogQSB3b3JrcXVldWUgdG8gcXVldWUgdGhyb3R0bGUgcmVsYXRlZCB3b3JrICovCitzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmt0aHJvdGxkX3dvcmtxdWV1ZTsKK3N0YXRpYyB2b2lkIHRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHRocm90bF9kYXRhICp0ZCwKKwkJCQl1bnNpZ25lZCBsb25nIGRlbGF5KTsKKwogc3RydWN0IHRocm90bF9yYl9yb290IHsKIAlzdHJ1Y3QgcmJfcm9vdCByYjsKIAlzdHJ1Y3QgcmJfbm9kZSAqbGVmdDsKQEAgLTE2OCw3ICsxNzMsMTUgQEAKIAkgKiB0cmVlIG9mIGJsa2cgKGluc3RlYWQgb2YgdHJhdmVyc2luZyB0aHJvdWdoIGhhc2ggbGlzdCBhbGwKIAkgKiB0aGUgdGltZS4KIAkgKi8KLQl0ZyA9IHRnX29mX2Jsa2coYmxraW9jZ19sb29rdXBfZ3JvdXAoYmxrY2csIGtleSkpOworCisJLyoKKwkgKiBUaGlzIGlzIHRoZSBjb21tb24gY2FzZSB3aGVuIHRoZXJlIGFyZSBubyBibGtpbyBjZ3JvdXBzLgorIAkgKiBBdm9pZCBsb29rdXAgaW4gdGhpcyBjYXNlCisgCSAqLworCWlmIChibGtjZyA9PSAmYmxraW9fcm9vdF9jZ3JvdXApCisJCXRnID0gJnRkLT5yb290X3RnOworCWVsc2UKKwkJdGcgPSB0Z19vZl9ibGtnKGJsa2lvY2dfbG9va3VwX2dyb3VwKGJsa2NnLCBrZXkpKTsKIAogCS8qIEZpbGwgaW4gZGV2aWNlIGRldGFpbHMgZm9yIHJvb3QgZ3JvdXAgKi8KIAlpZiAodGcgJiYgIXRnLT5ibGtnLmRldiAmJiBiZGktPmRldiAmJiBkZXZfbmFtZShiZGktPmRldikpIHsKQEAgLTMzNywxMCArMzUwLDkgQEAKIAl1cGRhdGVfbWluX2Rpc3BhdGNoX3RpbWUoc3QpOwogCiAJaWYgKHRpbWVfYmVmb3JlX2VxKHN0LT5taW5fZGlzcHRpbWUsIGppZmZpZXMpKQotCQl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLT5xdWV1ZSwgMCk7CisJCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIDApOwogCWVsc2UKLQkJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZC0+cXVldWUsCi0JCQkJKHN0LT5taW5fZGlzcHRpbWUgLSBqaWZmaWVzKSk7CisJCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIChzdC0+bWluX2Rpc3B0aW1lIC0gamlmZmllcykpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTgwNywxMCArODE5LDEwIEBACiB9CiAKIC8qIENhbGwgd2l0aCBxdWV1ZSBsb2NrIGhlbGQgKi8KLXZvaWQgdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBkZWxheSkKK3N0YXRpYyB2b2lkCit0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHN0cnVjdCB0aHJvdGxfZGF0YSAqdGQsIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7CiAKLQlzdHJ1Y3QgdGhyb3RsX2RhdGEgKnRkID0gcS0+dGQ7CiAJc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSAmdGQtPnRocm90bF93b3JrOwogCiAJaWYgKHRvdGFsX25yX3F1ZXVlZCh0ZCkgPiAwKSB7CkBAIC04MTksMTIgKzgzMSwxMSBAQAogCQkgKiBDYW5jZWwgdGhhdCBhbmQgc2NoZWR1bGUgYSBuZXcgb25lLgogCQkgKi8KIAkJX19jYW5jZWxfZGVsYXllZF93b3JrKGR3b3JrKTsKLQkJa2Jsb2NrZF9zY2hlZHVsZV9kZWxheWVkX3dvcmsocSwgZHdvcmssIGRlbGF5KTsKKwkJcXVldWVfZGVsYXllZF93b3JrKGt0aHJvdGxkX3dvcmtxdWV1ZSwgZHdvcmssIGRlbGF5KTsKIAkJdGhyb3RsX2xvZyh0ZCwgInNjaGVkdWxlIHdvcmsuIGRlbGF5PSVsdSBqaWZmaWVzPSVsdSIsCiAJCQkJZGVsYXksIGppZmZpZXMpOwogCX0KIH0KLUVYUE9SVF9TWU1CT0wodGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayk7CiAKIHN0YXRpYyB2b2lkCiB0aHJvdGxfZGVzdHJveV90ZyhzdHJ1Y3QgdGhyb3RsX2RhdGEgKnRkLCBzdHJ1Y3QgdGhyb3RsX2dycCAqdGcpCkBAIC05MTIsNyArOTIzLDcgQEAKIAlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKIAogCS8qIFNjaGVkdWxlIGEgd29yayBub3cgdG8gcHJvY2VzcyB0aGUgbGltaXQgY2hhbmdlICovCi0JdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZC0+cXVldWUsIDApOworCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQsIDApOwogfQogCiBzdGF0aWMgdm9pZCB0aHJvdGxfdXBkYXRlX2Jsa2lvX2dyb3VwX3dyaXRlX2Jwcyh2b2lkICprZXksCkBAIC05MjYsNyArOTM3LDcgQEAKIAlzbXBfbWJfX2JlZm9yZV9hdG9taWNfaW5jKCk7CiAJYXRvbWljX2luYygmdGQtPmxpbWl0c19jaGFuZ2VkKTsKIAlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKLQl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLT5xdWV1ZSwgMCk7CisJdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayh0ZCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHRocm90bF91cGRhdGVfYmxraW9fZ3JvdXBfcmVhZF9pb3BzKHZvaWQgKmtleSwKQEAgLTk0MCw3ICs5NTEsNyBAQAogCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfaW5jKCZ0ZC0+bGltaXRzX2NoYW5nZWQpOwogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQtPnF1ZXVlLCAwKTsKKwl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgdGhyb3RsX3VwZGF0ZV9ibGtpb19ncm91cF93cml0ZV9pb3BzKHZvaWQgKmtleSwKQEAgLTk1NCw3ICs5NjUsNyBAQAogCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAlhdG9taWNfaW5jKCZ0ZC0+bGltaXRzX2NoYW5nZWQpOwogCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2luYygpOwotCXRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsodGQtPnF1ZXVlLCAwKTsKKwl0aHJvdGxfc2NoZWR1bGVfZGVsYXllZF93b3JrKHRkLCAwKTsKIH0KIAogdm9pZCB0aHJvdGxfc2h1dGRvd25fdGltZXJfd3Eoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCkBAIC0xMTI3LDYgKzExMzgsMTAgQEAKIAogc3RhdGljIGludCBfX2luaXQgdGhyb3RsX2luaXQodm9pZCkKIHsKKwlrdGhyb3RsZF93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImt0aHJvdGxkIiwgV1FfTUVNX1JFQ0xBSU0sIDApOworCWlmICgha3Rocm90bGRfd29ya3F1ZXVlKQorCQlwYW5pYygiRmFpbGVkIHRvIGNyZWF0ZSBrdGhyb3RsZFxuIik7CisKIAlibGtpb19wb2xpY3lfcmVnaXN0ZXIoJmJsa2lvX3BvbGljeV90aHJvdGwpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggNTAxZmZkZi4uZWE4M2E0ZiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC01OTksNyArNTk5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZAotY2ZxX3NjYWxlZF9ncm91cF9zbGljZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCitjZnFfc2NhbGVkX2NmcXFfc2xpY2Uoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCXVuc2lnbmVkIHNsaWNlID0gY2ZxX3ByaW9fdG9fc2xpY2UoY2ZxZCwgY2ZxcSk7CiAJaWYgKGNmcWQtPmNmcV9sYXRlbmN5KSB7CkBAIC02MzEsNyArNjMxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogY2ZxX3NldF9wcmlvX3NsaWNlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQl1bnNpZ25lZCBzbGljZSA9IGNmcV9zY2FsZWRfZ3JvdXBfc2xpY2UoY2ZxZCwgY2ZxcSk7CisJdW5zaWduZWQgc2xpY2UgPSBjZnFfc2NhbGVkX2NmcXFfc2xpY2UoY2ZxZCwgY2ZxcSk7CiAKIAljZnFxLT5zbGljZV9zdGFydCA9IGppZmZpZXM7CiAJY2ZxcS0+c2xpY2VfZW5kID0gamlmZmllcyArIHNsaWNlOwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIAkgKi8KIAlpZiAodGltZWRfb3V0KSB7CiAJCWlmIChjZnFfY2ZxcV9zbGljZV9uZXcoY2ZxcSkpCi0JCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcV9zY2FsZWRfZ3JvdXBfc2xpY2UoY2ZxZCwgY2ZxcSk7CisJCQljZnFxLT5zbGljZV9yZXNpZCA9IGNmcV9zY2FsZWRfY2ZxcV9zbGljZShjZnFkLCBjZnFxKTsKIAkJZWxzZQogCQkJY2ZxcS0+c2xpY2VfcmVzaWQgPSBjZnFxLT5zbGljZV9lbmQgLSBqaWZmaWVzOwogCQljZnFfbG9nX2NmcXEoY2ZxZCwgY2ZxcSwgInJlc2lkPSVsZCIsIGNmcXEtPnNsaWNlX3Jlc2lkKTsKQEAgLTMzNTUsNyArMzM1NSw3IEBACiAJCQkgICAgY2ZxZC0+YnVzeV9xdWV1ZXMgPiAxKSB7CiAJCQkJY2ZxX2RlbF90aW1lcihjZnFkLCBjZnFxKTsKIAkJCQljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7Ci0JCQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKKwkJCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2ZxX2Jsa2lvY2dfdXBkYXRlX2lkbGVfdGltZV9zdGF0cygKIAkJCQkJCSZjZnFxLT5jZnFnLT5ibGtnKTsKQEAgLTMzNzAsNyArMzM3MCw3IEBACiAJCSAqIHRoaXMgbmV3IHF1ZXVlIGlzIFJUIGFuZCB0aGUgY3VycmVudCBvbmUgaXMgQkUKIAkJICovCiAJCWNmcV9wcmVlbXB0X3F1ZXVlKGNmcWQsIGNmcXEpOwotCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUpOworCQlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKIAl9CiB9CiAKQEAgLTM0MzIsNiArMzQzMiwxMCBAQAogewogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljID0gY2ZxZC0+YWN0aXZlX2NpYzsKIAorCS8qIElmIHRoZSBxdWV1ZSBhbHJlYWR5IGhhcyByZXF1ZXN0cywgZG9uJ3Qgd2FpdCAqLworCWlmICghUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSkKKwkJcmV0dXJuIGZhbHNlOworCiAJLyogSWYgdGhlcmUgYXJlIG90aGVyIHF1ZXVlcyBpbiB0aGUgZ3JvdXAsIGRvbid0IHdhaXQgKi8KIAlpZiAoY2ZxcS0+Y2ZxZy0+bnJfY2ZxcSA+IDEpCiAJCXJldHVybiBmYWxzZTsKQEAgLTM3MjcsNyArMzczMSw3IEBACiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBjZnFkLT5xdWV1ZTsKIAogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlKTsKKwlfX2Jsa19ydW5fcXVldWUoY2ZxZC0+cXVldWUsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDI1Njk1MTIuLjIzNmU5M2MgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNjAyLDcgKzYwMiw3IEBACiAJICovCiAJZWx2X2RyYWluX2VsZXZhdG9yKHEpOwogCXdoaWxlIChxLT5ycS5lbHZwcml2KSB7Ci0JCV9fYmxrX3J1bl9xdWV1ZShxKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCQltc2xlZXAoMTApOwogCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwpAQCAtNjUxLDcgKzY1MSw3IEBACiAJCSAqICAgd2l0aCBhbnl0aGluZy4gIFRoZXJlJ3Mgbm8gcG9pbnQgaW4gZGVsYXlpbmcgcXVldWUKIAkJICogICBwcm9jZXNzaW5nLgogCQkgKi8KLQkJX19ibGtfcnVuX3F1ZXVlKHEpOworCQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOwogCQlicmVhazsKIAogCWNhc2UgRUxFVkFUT1JfSU5TRVJUX1NPUlQ6CmRpZmYgLS1naXQgYS9ibG9jay9nZW5oZC5jIGIvYmxvY2svZ2VuaGQuYwppbmRleCA2YTViNzcyLi5jYmYxMTEyIDEwMDY0NAotLS0gYS9ibG9jay9nZW5oZC5jCisrKyBiL2Jsb2NrL2dlbmhkLmMKQEAgLTEzNTUsNyArMTM1NSw3IEBACiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IGJkZ2V0X2Rpc2soZGlzaywgcGFydG5vKTsKIAlpZiAoYmRldikgewogCQlmc3luY19iZGV2KGJkZXYpOwotCQlyZXMgPSBfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYpOworCQlyZXMgPSBfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYsIHRydWUpOwogCQliZHB1dChiZGV2KTsKIAl9CiAJcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2Jsb2NrL2lvY3RsLmMgYi9ibG9jay9pb2N0bC5jCmluZGV4IDkwNDlkNDYuLjExMjRjZDIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2lvY3RsLmMKKysrIGIvYmxvY2svaW9jdGwuYwpAQCAtMjk0LDkgKzI5NCwxMSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChnZXRfdXNlcihuLCAoaW50IF9fdXNlciAqKSBhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSAmJgotCQkgICAgYmxrZGV2X2dldChiZGV2LCBtb2RlIHwgRk1PREVfRVhDTCwgJmJkZXYpIDwgMCkKLQkJCXJldHVybiAtRUJVU1k7CisJCWlmICghKG1vZGUgJiBGTU9ERV9FWENMKSkgeworCQkJYmRncmFiKGJkZXYpOworCQkJaWYgKGJsa2Rldl9nZXQoYmRldiwgbW9kZSB8IEZNT0RFX0VYQ0wsICZiZGV2KSA8IDApCisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQogCQlyZXQgPSBzZXRfYmxvY2tzaXplKGJkZXYsIG4pOwogCQlpZiAoIShtb2RlICYgRk1PREVfRVhDTCkpCiAJCQlibGtkZXZfcHV0KGJkZXYsIG1vZGUgfCBGTU9ERV9FWENMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvYWNsb2NhbC5oIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKaW5kZXggNTQ3ODRiYi4uZWRjMjU4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9hY2xvY2FsLmgKQEAgLTQxNiwxMCArNDE2LDE1IEBACiAJdTggb3JpZ2luYWxseV9lbmFibGVkOyAgLyogVHJ1ZSBpZiBHUEUgd2FzIG9yaWdpbmFsbHkgZW5hYmxlZCAqLwogfTsKIAorc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9vYmplY3QgeworCXN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlICpub2RlOworCXN0cnVjdCBhY3BpX2dwZV9ub3RpZnlfb2JqZWN0ICpuZXh0OworfTsKKwogdW5pb24gYWNwaV9ncGVfZGlzcGF0Y2hfaW5mbyB7CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKm1ldGhvZF9ub2RlOwkvKiBNZXRob2Qgbm9kZSBmb3IgdGhpcyBHUEUgbGV2ZWwgKi8KIAlzdHJ1Y3QgYWNwaV9ncGVfaGFuZGxlcl9pbmZvICpoYW5kbGVyOyAgLyogSW5zdGFsbGVkIEdQRSBoYW5kbGVyICovCi0Jc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlOyAgICAgICAgLyogUGFyZW50IF9QUlcgZGV2aWNlIGZvciBpbXBsaWNpdCBub3RpZnkgKi8KKwlzdHJ1Y3QgYWNwaV9ncGVfbm90aWZ5X29iamVjdCBkZXZpY2U7ICAgLyogTGlzdCBvZiBfUFJXIGRldmljZXMgZm9yIGltcGxpY2l0IG5vdGlmeSAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYyBiL2RyaXZlcnMvYWNwaS9hY3BpY2EvZXZncGUuYwppbmRleCAxNDk4OGE4Li5mNDcyNTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2Z3BlLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjcGljYS9ldmdwZS5jCkBAIC00NTcsNiArNDU3LDcgQEAKIAlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZ3BlX2V2ZW50X2luZm8gKmxvY2FsX2dwZV9ldmVudF9pbmZvOwogCXN0cnVjdCBhY3BpX2V2YWx1YXRlX2luZm8gKmluZm87CisJc3RydWN0IGFjcGlfZ3BlX25vdGlmeV9vYmplY3QgKm5vdGlmeV9vYmplY3Q7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGV2X2FzeW5jaF9leGVjdXRlX2dwZV9tZXRob2QpOwogCkBAIC01MDgsMTAgKzUwOSwxOCBAQAogCQkgKiBmcm9tIHRoaXMgdGhyZWFkIC0tIGJlY2F1c2UgaGFuZGxlcnMgbWF5IGluIHR1cm4gcnVuIG90aGVyCiAJCSAqIGNvbnRyb2wgbWV0aG9kcy4KIAkJICovCi0JCXN0YXR1cyA9Ci0JCSAgICBhY3BpX2V2X3F1ZXVlX25vdGlmeV9yZXF1ZXN0KGxvY2FsX2dwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC4KLQkJCQkJCSBkZXZpY2Vfbm9kZSwKLQkJCQkJCSBBQ1BJX05PVElGWV9ERVZJQ0VfV0FLRSk7CisJCXN0YXR1cyA9IGFjcGlfZXZfcXVldWVfbm90aWZ5X3JlcXVlc3QoCisJCQkJbG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5ub2RlLAorCQkJCUFDUElfTk9USUZZX0RFVklDRV9XQUtFKTsKKworCQlub3RpZnlfb2JqZWN0ID0gbG9jYWxfZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5uZXh0OworCQl3aGlsZSAoQUNQSV9TVUNDRVNTKHN0YXR1cykgJiYgbm90aWZ5X29iamVjdCkgeworCQkJc3RhdHVzID0gYWNwaV9ldl9xdWV1ZV9ub3RpZnlfcmVxdWVzdCgKKwkJCQkJbm90aWZ5X29iamVjdC0+bm9kZSwKKwkJCQkJQUNQSV9OT1RJRllfREVWSUNFX1dBS0UpOworCQkJbm90aWZ5X29iamVjdCA9IG5vdGlmeV9vYmplY3QtPm5leHQ7CisJCX0KKwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9HUEVfRElTUEFUQ0hfTUVUSE9EOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGljYS9ldnhmZ3BlLmMgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYwppbmRleCBlOTU2MmE3Li41MmFhZmYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaWNhL2V2eGZncGUuYwpAQCAtMTk4LDcgKzE5OCw5IEBACiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfQkFEX1BBUkFNRVRFUjsKIAlzdHJ1Y3QgYWNwaV9ncGVfZXZlbnRfaW5mbyAqZ3BlX2V2ZW50X2luZm87CiAJc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUgKmRldmljZV9ub2RlOworCXN0cnVjdCBhY3BpX2dwZV9ub3RpZnlfb2JqZWN0ICpub3RpZnlfb2JqZWN0OwogCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOworCXU4IGdwZV9kaXNwYXRjaF9tYXNrOwogCiAJQUNQSV9GVU5DVElPTl9UUkFDRShhY3BpX3NldHVwX2dwZV9mb3Jfd2FrZSk7CiAKQEAgLTIxMiwzNyArMjE0LDYyIEBACiAJCXJldHVybl9BQ1BJX1NUQVRVUyhBRV9CQURfUEFSQU1FVEVSKTsKIAl9CiAKLQkvKiBWYWxpZGF0ZSB3YWtlX2RldmljZSBpcyBvZiB0eXBlIERldmljZSAqLwotCi0JZGV2aWNlX25vZGUgPSBBQ1BJX0NBU1RfUFRSKHN0cnVjdCBhY3BpX25hbWVzcGFjZV9ub2RlLCB3YWtlX2RldmljZSk7Ci0JaWYgKGRldmljZV9ub2RlLT50eXBlICE9IEFDUElfVFlQRV9ERVZJQ0UpIHsKLQkJcmV0dXJuX0FDUElfU1RBVFVTKEFFX0JBRF9QQVJBTUVURVIpOwotCX0KLQogCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfZ3BlX2xvY2spOwogCiAJLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIEdQRSBudW1iZXIgKi8KIAogCWdwZV9ldmVudF9pbmZvID0gYWNwaV9ldl9nZXRfZ3BlX2V2ZW50X2luZm8oZ3BlX2RldmljZSwgZ3BlX251bWJlcik7Ci0JaWYgKGdwZV9ldmVudF9pbmZvKSB7Ci0JCS8qCi0JCSAqIElmIHRoZXJlIGlzIG5vIG1ldGhvZCBvciBoYW5kbGVyIGZvciB0aGlzIEdQRSwgdGhlbiB0aGUKLQkJICogd2FrZV9kZXZpY2Ugd2lsbCBiZSBub3RpZmllZCB3aGVuZXZlciB0aGlzIEdQRSBmaXJlcyAoYWthCi0JCSAqICJpbXBsaWNpdCBub3RpZnkiKSBOb3RlOiBUaGUgR1BFIGlzIGFzc3VtZWQgdG8gYmUKLQkJICogbGV2ZWwtdHJpZ2dlcmVkIChmb3Igd2luZG93cyBjb21wYXRpYmlsaXR5KS4KLQkJICovCi0JCWlmICgoZ3BlX2V2ZW50X2luZm8tPmZsYWdzICYgQUNQSV9HUEVfRElTUEFUQ0hfTUFTSykgPT0KLQkJICAgIEFDUElfR1BFX0RJU1BBVENIX05PTkUpIHsKLQkJCWdwZV9ldmVudF9pbmZvLT5mbGFncyA9Ci0JCQkgICAgKEFDUElfR1BFX0RJU1BBVENIX05PVElGWSB8Ci0JCQkgICAgIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCk7Ci0JCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlX25vZGUgPSBkZXZpY2Vfbm9kZTsKLQkJfQotCi0JCWdwZV9ldmVudF9pbmZvLT5mbGFncyB8PSBBQ1BJX0dQRV9DQU5fV0FLRTsKLQkJc3RhdHVzID0gQUVfT0s7CisJaWYgKCFncGVfZXZlbnRfaW5mbykgeworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKIAl9CiAKKwlpZiAod2FrZV9kZXZpY2UgPT0gQUNQSV9ST09UX09CSkVDVCkgeworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGlzIG5vIG1ldGhvZCBvciBoYW5kbGVyIGZvciB0aGlzIEdQRSwgdGhlbiB0aGUKKwkgKiB3YWtlX2RldmljZSB3aWxsIGJlIG5vdGlmaWVkIHdoZW5ldmVyIHRoaXMgR1BFIGZpcmVzIChha2EKKwkgKiAiaW1wbGljaXQgbm90aWZ5IikgTm90ZTogVGhlIEdQRSBpcyBhc3N1bWVkIHRvIGJlCisJICogbGV2ZWwtdHJpZ2dlcmVkIChmb3Igd2luZG93cyBjb21wYXRpYmlsaXR5KS4KKwkgKi8KKwlncGVfZGlzcGF0Y2hfbWFzayA9IGdwZV9ldmVudF9pbmZvLT5mbGFncyAmIEFDUElfR1BFX0RJU1BBVENIX01BU0s7CisJaWYgKGdwZV9kaXNwYXRjaF9tYXNrICE9IEFDUElfR1BFX0RJU1BBVENIX05PTkUKKwkgICAgJiYgZ3BlX2Rpc3BhdGNoX21hc2sgIT0gQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFZhbGlkYXRlIHdha2VfZGV2aWNlIGlzIG9mIHR5cGUgRGV2aWNlICovCisKKwlkZXZpY2Vfbm9kZSA9IEFDUElfQ0FTVF9QVFIoc3RydWN0IGFjcGlfbmFtZXNwYWNlX25vZGUsIHdha2VfZGV2aWNlKTsKKwlpZiAoZGV2aWNlX25vZGUtPnR5cGUgIT0gQUNQSV9UWVBFX0RFVklDRSkgeworCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwl9CisKKwlpZiAoZ3BlX2Rpc3BhdGNoX21hc2sgPT0gQUNQSV9HUEVfRElTUEFUQ0hfTk9ORSkgeworCQlncGVfZXZlbnRfaW5mby0+ZmxhZ3MgPSAoQUNQSV9HUEVfRElTUEFUQ0hfTk9USUZZIHwKKwkJCQkJIEFDUElfR1BFX0xFVkVMX1RSSUdHRVJFRCk7CisJCWdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2Uubm9kZSA9IGRldmljZV9ub2RlOworCQlncGVfZXZlbnRfaW5mby0+ZGlzcGF0Y2guZGV2aWNlLm5leHQgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIFRoZXJlIGFyZSBtdWx0aXBsZSBkZXZpY2VzIHRvIG5vdGlmeSBpbXBsaWNpdGx5LiAqLworCisJCW5vdGlmeV9vYmplY3QgPSBBQ1BJX0FMTE9DQVRFX1pFUk9FRChzaXplb2YoKm5vdGlmeV9vYmplY3QpKTsKKwkJaWYgKCFub3RpZnlfb2JqZWN0KSB7CisJCQlzdGF0dXMgPSBBRV9OT19NRU1PUlk7CisJCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJfQorCisJCW5vdGlmeV9vYmplY3QtPm5vZGUgPSBkZXZpY2Vfbm9kZTsKKwkJbm90aWZ5X29iamVjdC0+bmV4dCA9IGdwZV9ldmVudF9pbmZvLT5kaXNwYXRjaC5kZXZpY2UubmV4dDsKKwkJZ3BlX2V2ZW50X2luZm8tPmRpc3BhdGNoLmRldmljZS5uZXh0ID0gbm90aWZ5X29iamVjdDsKKwl9CisKKyBvdXQ6CisJZ3BlX2V2ZW50X2luZm8tPmZsYWdzIHw9IEFDUElfR1BFX0NBTl9XQUtFOworCXN0YXR1cyA9IEFFX09LOworCisgdW5sb2NrX2FuZF9leGl0OgogCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2dwZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZGVidWdmcy5jIGIvZHJpdmVycy9hY3BpL2RlYnVnZnMuYwppbmRleCA1ZGY2N2YxLi4zODRmN2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvYWNwaS9kZWJ1Z2ZzLmMKQEAgLTI2LDcgKzI2LDkgQEAKIAkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0YXRpYyBjaGFyICpidWY7Ci0Jc3RhdGljIGludCB1bmNvcGllZF9ieXRlczsKKwlzdGF0aWMgdTMyIG1heF9zaXplOworCXN0YXRpYyB1MzIgdW5jb3BpZWRfYnl0ZXM7CisKIAlzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgdGFibGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCkBAIC0zNywxOSArMzksMjQgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0YWJsZSwgdXNlcl9idWYsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXVuY29waWVkX2J5dGVzID0gdGFibGUubGVuZ3RoOwotCQlidWYgPSBremFsbG9jKHVuY29waWVkX2J5dGVzLCBHRlBfS0VSTkVMKTsKKwkJdW5jb3BpZWRfYnl0ZXMgPSBtYXhfc2l6ZSA9IHRhYmxlLmxlbmd0aDsKKwkJYnVmID0ga3phbGxvYyhtYXhfc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnVmKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKHVuY29waWVkX2J5dGVzIDwgY291bnQpIHsKLQkJa2ZyZWUoYnVmKTsKKwlpZiAoYnVmID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKworCWlmICgoKnBwb3MgPiBtYXhfc2l6ZSkgfHwKKwkgICAgKCpwcG9zICsgY291bnQgPiBtYXhfc2l6ZSkgfHwKKwkgICAgKCpwcG9zICsgY291bnQgPCBjb3VudCkgfHwKKwkgICAgKGNvdW50ID4gdW5jb3BpZWRfYnl0ZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChjb3B5X2Zyb21fdXNlcihidWYgKyAoKnBwb3MpLCB1c2VyX2J1ZiwgY291bnQpKSB7CiAJCWtmcmVlKGJ1Zik7CisJCWJ1ZiA9IE5VTEw7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIApAQCAtNTksNiArNjYsNyBAQAogCWlmICghdW5jb3BpZWRfYnl0ZXMpIHsKIAkJc3RhdHVzID0gYWNwaV9pbnN0YWxsX21ldGhvZChidWYpOwogCQlrZnJlZShidWYpOworCQlidWYgPSBOVUxMOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYWRkX3RhaW50KFRBSU5UX09WRVJSSURERU5fQUNQSV9UQUJMRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggYjA5MzE4MS4uYzkwYzc2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtNjM2LDE3ICs2MzYsMjEgQEAKIGFjcGlfc3RhdHVzCiBhY3BpX29zX3JlYWRfbWVtb3J5KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzX2FkZHIsIHUzMiAqIHZhbHVlLCB1MzIgd2lkdGgpCiB7Ci0JdTMyIGR1bW15OwogCXZvaWQgX19pb21lbSAqdmlydF9hZGRyOwotCWludCBzaXplID0gd2lkdGggLyA4LCB1bm1hcCA9IDA7CisJdW5zaWduZWQgaW50IHNpemUgPSB3aWR0aCAvIDg7CisJYm9vbCB1bm1hcCA9IGZhbHNlOworCXUzMiBkdW1teTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAl2aXJ0X2FkZHIgPSBhY3BpX21hcF92YWRkcl9sb29rdXAocGh5c19hZGRyLCBzaXplKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKIAlpZiAoIXZpcnRfYWRkcikgeworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJdmlydF9hZGRyID0gYWNwaV9vc19pb3JlbWFwKHBoeXNfYWRkciwgc2l6ZSk7Ci0JCXVubWFwID0gMTsKKwkJaWYgKCF2aXJ0X2FkZHIpCisJCQlyZXR1cm4gQUVfQkFEX0FERFJFU1M7CisJCXVubWFwID0gdHJ1ZTsKIAl9CisKIAlpZiAoIXZhbHVlKQogCQl2YWx1ZSA9ICZkdW1teTsKIApAQCAtNjY2LDYgKzY3MCw4IEBACiAKIAlpZiAodW5tYXApCiAJCWlvdW5tYXAodmlydF9hZGRyKTsKKwllbHNlCisJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIEFFX09LOwogfQpAQCAtNjc0LDE0ICs2ODAsMTcgQEAKIGFjcGlfb3Nfd3JpdGVfbWVtb3J5KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzX2FkZHIsIHUzMiB2YWx1ZSwgdTMyIHdpZHRoKQogewogCXZvaWQgX19pb21lbSAqdmlydF9hZGRyOwotCWludCBzaXplID0gd2lkdGggLyA4LCB1bm1hcCA9IDA7CisJdW5zaWduZWQgaW50IHNpemUgPSB3aWR0aCAvIDg7CisJYm9vbCB1bm1hcCA9IGZhbHNlOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCXZpcnRfYWRkciA9IGFjcGlfbWFwX3ZhZGRyX2xvb2t1cChwaHlzX2FkZHIsIHNpemUpOwotCXJjdV9yZWFkX3VubG9jaygpOwogCWlmICghdmlydF9hZGRyKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQl2aXJ0X2FkZHIgPSBhY3BpX29zX2lvcmVtYXAocGh5c19hZGRyLCBzaXplKTsKLQkJdW5tYXAgPSAxOworCQlpZiAoIXZpcnRfYWRkcikKKwkJCXJldHVybiBBRV9CQURfQUREUkVTUzsKKwkJdW5tYXAgPSB0cnVlOwogCX0KIAogCXN3aXRjaCAod2lkdGgpIHsKQEAgLTcwMCw2ICs3MDksOCBAQAogCiAJaWYgKHVubWFwKQogCQlpb3VubWFwKHZpcnRfYWRkcik7CisJZWxzZQorCQlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBBRV9PSzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYyBiL2RyaXZlcnMvYWNwaS92aWRlb19kZXRlY3QuYwppbmRleCA0MmQzZDcyLi41YWYzNDc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW9fZGV0ZWN0LmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvX2RldGVjdC5jCkBAIC04Miw2ICs4MiwxMSBAQAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gMDsKIAorCS8qIElzIHRoaXMgZGV2aWNlIGFibGUgdG8gc3VwcG9ydCB2aWRlbyBzd2l0Y2hpbmcgPyAqLworCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX0RPRCIsICZoX2R1bW15KSkgfHwKKwkgICAgQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9ET1MiLCAmaF9kdW1teSkpKQorCQl2aWRlb19jYXBzIHw9IEFDUElfVklERU9fT1VUUFVUX1NXSVRDSElORzsKKwogCS8qIElzIHRoaXMgZGV2aWNlIGFibGUgdG8gcmV0cmlldmUgYSB2aWRlbyBST00gPyAqLwogCWlmIChBQ1BJX1NVQ0NFU1MoYWNwaV9nZXRfaGFuZGxlKGRldmljZS0+aGFuZGxlLCAiX1JPTSIsICZoX2R1bW15KSkpCiAJCXZpZGVvX2NhcHMgfD0gQUNQSV9WSURFT19ST01fQVZBSUxBQkxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3dha2V1cC5jCmluZGV4IGVkNjUwMTQuLjdiZmJlNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvd2FrZXVwLmMKQEAgLTg2LDggKzg2LDEyIEBACiAJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG5vZGUsCiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKLQkJaWYgKGRldmljZV9jYW5fd2FrZXVwKCZkZXYtPmRldikpCisJCWlmIChkZXZpY2VfY2FuX3dha2V1cCgmZGV2LT5kZXYpKSB7CisJCQkvKiBCdXR0b24gR1BFcyBhcmUgc3VwcG9zZWQgdG8gYmUgYWx3YXlzIGVuYWJsZWQuICovCisJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlcik7CiAJCQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IDMyODgyNjMuLmI4ZDk2Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTI2MCw2ICsyNjAsNyBAQAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWQwMiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIEFIQ0kgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFkMDQpLCBib2FyZF9haGNpIH0sIC8qIFBCRyBSQUlEICovCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDA2KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjMyMyksIGJvYXJkX2FoY2kgfSwgLyogREg4OXh4Q0MgQUhDSSAqLwogCiAJLyogSk1pY3JvbiAzNjAvMS8zLzUvNiwgbWF0Y2ggY2xhc3MgdG8gYXZvaWQgSURFIGZ1bmN0aW9uICovCiAJeyBQQ0lfVkVORE9SX0lEX0pNSUNST04sIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCkBAIC0zNzksNiArMzgwLDggQEAKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4NjE0NSksIGJvYXJkX2FoY2lfbXYgfSwJLyogNjE0NSAqLwogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHg2MTIxKSwgYm9hcmRfYWhjaV9tdiB9LAkvKiA2MTIxICovCiAJeyBQQ0lfREVWSUNFKDB4MWI0YiwgMHg5MTIzKSwKKwkgIC5jbGFzcyA9IFBDSV9DTEFTU19TVE9SQUdFX1NBVEFfQUhDSSwKKwkgIC5jbGFzc19tYXNrID0gMHhmZmZmZmYsCiAJICAuZHJpdmVyX2RhdGEgPSBib2FyZF9haGNpX3llc19mYnMgfSwJCQkvKiA4OHNlOTEyOCAqLwogCiAJLyogUHJvbWlzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggYTMxZmU5Ni4uZDRlNTJlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC00MTM4LDYgKzQxMzgsNyBAQAogCSAqIGRldmljZSBhbmQgY29udHJvbGxlciBhcmUgU0FUQS4KIAkgKi8KIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSVEQwOCIsCSIxLjAwIiwJQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCisJeyAiUElPTkVFUiBEVkQtUlcgIERWUi0yMTJEIiwJIjEuMjgiLCBBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAogCS8qIEVuZCBNYXJrZXIgKi8KIAl7IH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2NzaS5jCmluZGV4IDVkZWZjNzQuLjYwMGY2MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zY3NpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNjc2kuYwpAQCAtMTA5OSw5ICsxMDk5LDkgQEAKIAkJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBzZGV2LT5yZXF1ZXN0X3F1ZXVlOwogCQl2b2lkICpidWY7CiAKLQkJLyogc2V0IHRoZSBtaW4gYWxpZ25tZW50IGFuZCBwYWRkaW5nICovCi0JCWJsa19xdWV1ZV91cGRhdGVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLAotCQkJCQkgICAgICAgQVRBX0RNQV9QQURfU1ogLSAxKTsKKwkJc2Rldi0+c2VjdG9yX3NpemUgPSBBVEFfU0VDVF9TSVpFOworCisJCS8qIHNldCBETUEgcGFkZGluZyAqLwogCQlibGtfcXVldWVfdXBkYXRlX2RtYV9wYWQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJIEFUQV9ETUFfUEFEX1NaIC0gMSk7CiAKQEAgLTExMTUsMTMgKzExMTUsMjUgQEAKIAogCQlibGtfcXVldWVfZG1hX2RyYWluKHEsIGF0YXBpX2RyYWluX25lZWRlZCwgYnVmLCBBVEFQSV9NQVhfRFJBSU4pOwogCX0gZWxzZSB7Ci0JCS8qIEFUQSBkZXZpY2VzIG11c3QgYmUgc2VjdG9yIGFsaWduZWQgKi8KIAkJc2Rldi0+c2VjdG9yX3NpemUgPSBhdGFfaWRfbG9naWNhbF9zZWN0b3Jfc2l6ZShkZXYtPmlkKTsKLQkJYmxrX3F1ZXVlX3VwZGF0ZV9kbWFfYWxpZ25tZW50KHNkZXYtPnJlcXVlc3RfcXVldWUsCi0JCQkJCSAgICAgICBzZGV2LT5zZWN0b3Jfc2l6ZSAtIDEpOwogCQlzZGV2LT5tYW5hZ2Vfc3RhcnRfc3RvcCA9IDE7CiAJfQogCisJLyoKKwkgKiBhdGFfcGlvX3NlY3RvcnMoKSBleHBlY3RzIGJ1ZmZlciBmb3IgZWFjaCBzZWN0b3IgdG8gbm90IGNyb3NzCisJICogcGFnZSBib3VuZGFyeS4gIEVuZm9yY2UgaXQgYnkgcmVxdWlyaW5nIGJ1ZmZlcnMgdG8gYmUgc2VjdG9yCisJICogYWxpZ25lZCwgd2hpY2ggd29ya3MgaWZmIHNlY3Rvcl9zaXplIGlzIG5vdCBsYXJnZXIgdGhhbgorCSAqIFBBR0VfU0laRS4gIEFUQVBJIGRldmljZXMgYWxzbyBuZWVkIHRoZSBhbGlnbm1lbnQgYXMKKwkgKiBJREVOVElGWV9QQUNLRVQgaXMgZXhlY3V0ZWQgYXMgQVRBX1BST1RfUElPLgorCSAqLworCWlmIChzZGV2LT5zZWN0b3Jfc2l6ZSA+IFBBR0VfU0laRSkKKwkJYXRhX2Rldl9wcmludGsoZGV2LCBLRVJOX1dBUk5JTkcsCisJCQkic2VjdG9yX3NpemU9JXUgPiBQQUdFX1NJWkUsIFBJTyBtYXkgbWFsZnVuY3Rpb25cbiIsCisJCQlzZGV2LT5zZWN0b3Jfc2l6ZSk7CisKKwlibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKKwkJCQkgICAgICAgc2Rldi0+c2VjdG9yX3NpemUgLSAxKTsKKwogCWlmIChkZXYtPmZsYWdzICYgQVRBX0RGTEFHX0FOKQogCQlzZXRfYml0KFNERVZfRVZUX01FRElBX0NIQU5HRSwgc2Rldi0+c3VwcG9ydGVkX2V2ZW50cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCmluZGV4IGQ3ZTU3ZGIuLjUzOGVjMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM2NiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi45IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC42LjEwIgogCiBzdHJ1Y3QgaHB0X2Nsb2NrIHsKIAl1OAl4ZmVyX21vZGU7CkBAIC0xNjAsOCArMTYwLDggQEAKIAogCXdoaWxlIChsaXN0W2ldICE9IE5VTEwpIHsKIAkJaWYgKCFzdHJjbXAobGlzdFtpXSwgbW9kZWxfbnVtKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAlcyBpcyBub3Qgc3VwcG9ydGVkIGZvciAlcy5cbiIsCi0JCQkJbW9kZXN0ciwgbGlzdFtpXSk7CisJCQlwcl93YXJuaW5nKERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKKwkJCQkgICBtb2Rlc3RyLCBsaXN0W2ldKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCWkrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCmluZGV4IGVmZGQxOGIuLjRjNWI1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwpAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2hwdDM3eCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4xOCIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNi4yMiIKIAogc3RydWN0IGhwdF9jbG9jayB7CiAJdTgJeGZlcl9zcGVlZDsKQEAgLTIyOSw4ICsyMjksOCBAQAogCiAJd2hpbGUgKGxpc3RbaV0gIT0gTlVMTCkgewogCQlpZiAoIXN0cmNtcChsaXN0W2ldLCBtb2RlbF9udW0pKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FICI6ICVzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yICVzLlxuIiwKLQkJCQltb2Rlc3RyLCBsaXN0W2ldKTsKKwkJCXByX3dhcm5pbmcoRFJWX05BTUUgIjogJXMgaXMgbm90IHN1cHBvcnRlZCBmb3IgJXMuXG4iLAorCQkJCSAgIG1vZGVzdHIsIGxpc3RbaV0pOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaSsrOwpAQCAtNjQyLDcgKzY0Miw2IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgaHB0Mzc0X2ZuMV9wb3J0X29wcyA9IHsKIAkuaW5oZXJpdHMJPSAmaHB0MzcyX3BvcnRfb3BzLAogCS5jYWJsZV9kZXRlY3QJPSBocHQzNzRfZm4xX2NhYmxlX2RldGVjdCwKLQkucHJlcmVzZXQJPSBocHQzN3hfcHJlX3Jlc2V0LAogfTsKIAogLyoqCkBAIC04MDMsNyArODAyLDcgQEAKIAkJLnVkbWFfbWFzayA9IEFUQV9VRE1BNiwKIAkJLnBvcnRfb3BzID0gJmhwdDMwMl9wb3J0X29wcwogCX07Ci0JLyogSFBUMzc0IC0gVURNQTEwMCwgZnVuY3Rpb24gMSB1c2VzIGRpZmZlcmVudCBwcmVyZXNldCBtZXRob2QgKi8KKwkvKiBIUFQzNzQgLSBVRE1BMTAwLCBmdW5jdGlvbiAxIHVzZXMgZGlmZmVyZW50IGNhYmxlX2RldGVjdCBtZXRob2QgKi8KIAlzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X2luZm8gaW5mb19ocHQzNzRfZm4wID0gewogCQkuZmxhZ3MgPSBBVEFfRkxBR19TTEFWRV9QT1NTLAogCQkucGlvX21hc2sgPSBBVEFfUElPNCwKQEAgLTgzOCw3ICs4MzcsOCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NikgeworCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM2NjoKIAkJLyogTWF5IGJlIGEgbGF0ZXIgY2hpcCBpbiBkaXNndWlzZS4gQ2hlY2sgKi8KIAkJLyogT2xkZXIgY2hpcHMgYXJlIGluIHRoZSBIUFQzNjYgZHJpdmVyLiBJZ25vcmUgdGhlbSAqLwogCQlpZiAocmV2IDwgMykKQEAgLTg2Myw1NCArODYzLDUwIEBACiAJCQljaGlwX3RhYmxlID0gJmhwdDM3MjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSICJwYXRhX2hwdDM3eDogVW5rbm93biBIUFQzNjYgc3VidHlwZSwgIgorCQkJcHJfZXJyKERSVl9OQU1FICI6IFVua25vd24gSFBUMzY2IHN1YnR5cGUsICIKIAkJCSAgICAgICAicGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwgcmV2KTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChkZXYtPmRldmljZSkgewotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MjoKLQkJCS8qIDM3Mk4gaWYgcmV2ID49IDIgKi8KLQkJCWlmIChyZXYgPj0gMikKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKLQkJCWNoaXBfdGFibGUgPSAmaHB0MzcyYTsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKLQkJCS8qIDMwMk4gaWYgcmV2ID4gMSAqLwotCQkJaWYgKHJldiA+IDEpCi0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlwcGlbMF0gPSAmaW5mb19ocHQzMDI7Ci0JCQkvKiBDaGVjayB0aGlzICovCi0JCQljaGlwX3RhYmxlID0gJmhwdDMwMjsKLQkJCWJyZWFrOwotCQljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3MToKLQkJCWlmIChyZXYgPiAxKQotCQkJCXJldHVybiAtRU5PREVWOwotCQkJcHBpWzBdID0gJmluZm9faHB0MzAyOwotCQkJY2hpcF90YWJsZSA9ICZocHQzNzE7Ci0JCQkvKgotCQkJICogU2luZ2xlIGNoYW5uZWwgZGV2aWNlLCBtYXN0ZXIgaXMgbm90IHByZXNlbnQKLQkJCSAqIGJ1dCB0aGUgQklPUyAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdAotCQkJICogYWJzZW50Ci0JCQkgKi8KLQkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOwotCQkJbWNyMSAmPSB+MHgwNDsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9UVElfSFBUMzc0OgotCQkJY2hpcF90YWJsZSA9ICZocHQzNzQ7Ci0JCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQotCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4wOwotCQkJZWxzZQotCQkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAicGF0YV9ocHQzN3g6IFBDSSB0YWJsZSBpcyBib2d1cywgcGxlYXNlIHJlcG9ydCAoJWQpLlxuIiwKLQkJCSAgICAgICBkZXYtPmRldmljZSk7Ci0JCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzI6CisJCS8qIDM3Mk4gaWYgcmV2ID49IDIgKi8KKwkJaWYgKHJldiA+PSAyKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDM3MjsKKwkJY2hpcF90YWJsZSA9ICZocHQzNzJhOworCQlicmVhazsKKwljYXNlIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMjoKKwkJLyogMzAyTiBpZiByZXYgPiAxICovCisJCWlmIChyZXYgPiAxKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJLyogQ2hlY2sgdGhpcyAqLworCQljaGlwX3RhYmxlID0gJmhwdDMwMjsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzE6CisJCWlmIChyZXYgPiAxKQorCQkJcmV0dXJuIC1FTk9ERVY7CisJCXBwaVswXSA9ICZpbmZvX2hwdDMwMjsKKwkJY2hpcF90YWJsZSA9ICZocHQzNzE7CisJCS8qCisJCSAqIFNpbmdsZSBjaGFubmVsIGRldmljZSwgbWFzdGVyIGlzIG5vdCBwcmVzZW50IGJ1dCB0aGUgQklPUworCQkgKiAob3IgdXMgZm9yIG5vbiB4ODYpIG11c3QgbWFyayBpdCBhYnNlbnQKKwkJICovCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOworCQltY3IxICY9IH4weDA0OworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUwLCBtY3IxKTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQ6CisJCWNoaXBfdGFibGUgPSAmaHB0Mzc0OworCQlpZiAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKQorCQkJKnBwaSA9ICZpbmZvX2hwdDM3NF9mbjA7CisJCWVsc2UKKwkJCSpwcGkgPSAmaW5mb19ocHQzNzRfZm4xOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9lcnIoRFJWX05BTUUgIjogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQkgICAgICAgZGV2LT5kZXZpY2UpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJLyogT2sgc28gdGhpcyBpcyBhIGNoaXAgd2Ugc3VwcG9ydCAqLwogCkBAIC05NTcsOCArOTUzLDcgQEAKIAkJdTggc3I7CiAJCXUzMiB0b3RhbCA9IDA7CiAKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAgInBhdGFfaHB0Mzd4OiBCSU9TIGhhcyBub3Qgc2V0IHRpbWluZyBjbG9ja3MuXG4iKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBCSU9TIGhhcyBub3Qgc2V0IHRpbWluZyBjbG9ja3MuXG4iKTsKIAogCQkvKiBUaGlzIGlzIHRoZSBwcm9jZXNzIHRoZSBIUFQzNzEgQklPUyBpcyByZXBvcnRlZCB0byB1c2UgKi8KIAkJZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7CkBAIC0xMDE0LDcgKzEwMDksNyBAQAogCQkJCQkgICAgICAgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyB8IDB4MTAwKTsKIAkJfQogCQlpZiAoYWRqdXN0ID09IDgpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAicGF0YV9ocHQzN3g6IERQTEwgZGlkIG5vdCBzdGFiaWxpemUhXG4iKTsKKwkJCXByX2VycihEUlZfTkFNRSAiOiBEUExMIGRpZCBub3Qgc3RhYmlsaXplIVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlpZiAoZHBsbCA9PSAzKQpAQCAtMTAyMiw4ICsxMDE3LDggQEAKIAkJZWxzZQogCQkJcHJpdmF0ZV9kYXRhID0gKHZvaWQgKilocHQzN3hfdGltaW5nc181MDsKIAotCQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogYnVzIGNsb2NrICVkTUh6LCB1c2luZyAlZE1IeiBEUExMLlxuIiwKLQkJICAgICAgIE1IeltjbG9ja19zbG90XSwgTUh6W2RwbGxdKTsKKwkJcHJfaW5mbyhEUlZfTkFNRSAiOiBidXMgY2xvY2sgJWRNSHosIHVzaW5nICVkTUh6IERQTEwuXG4iLAorCQkJTUh6W2Nsb2NrX3Nsb3RdLCBNSHpbZHBsbF0pOwogCX0gZWxzZSB7CiAJCXByaXZhdGVfZGF0YSA9ICh2b2lkICopY2hpcF90YWJsZS0+Y2xvY2tzW2Nsb2NrX3Nsb3RdOwogCQkvKgpAQCAtMTAzNiw4ICsxMDMxLDkgQEAKIAkJCXBwaVswXSA9ICZpbmZvX2hwdDM3MF8zMzsKIAkJaWYgKGNsb2NrX3Nsb3QgPCAyICYmIHBwaVswXSA9PSAmaW5mb19ocHQzNzBhKQogCQkJcHBpWzBdID0gJmluZm9faHB0MzcwYV8zMzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAicGF0YV9ocHQzN3g6ICVzIHVzaW5nICVkTUh6IGJ1cyBjbG9jay5cbiIsCi0JCSAgICAgICBjaGlwX3RhYmxlLT5uYW1lLCBNSHpbY2xvY2tfc2xvdF0pOworCisJCXByX2luZm8oRFJWX05BTUUgIjogJXMgdXNpbmcgJWRNSHogYnVzIGNsb2NrLlxuIiwKKwkJCWNoaXBfdGFibGUtPm5hbWUsIE1IeltjbG9ja19zbG90XSk7CiAJfQogCiAJLyogTm93IGtpY2sgb2ZmIEFUQSBzZXQgdXAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggZDIyMzliYi4uZWNhNjhjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9ocHQzeDJuIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjEzIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4zLjE0IgogCiBlbnVtIHsKIAlIUFRfUENJX0ZBU1QJPQkoMSA8PCAzMSksCkBAIC00MTgsNyArNDE4LDcgQEAKIAkJdTE2IHNyOwogCQl1MzIgdG90YWwgPSAwOwogCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgInBhdGFfaHB0M3gybjogQklPUyBjbG9jayBkYXRhIG5vdCBzZXQuXG4iKTsKKwkJcHJfd2FybmluZyhEUlZfTkFNRSAiOiBCSU9TIGNsb2NrIGRhdGEgbm90IHNldC5cbiIpOwogCiAJCS8qIFRoaXMgaXMgdGhlIHByb2Nlc3MgdGhlIEhQVDM3MSBCSU9TIGlzIHJlcG9ydGVkIHRvIHVzZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKQEAgLTUyOCw4ICs1MjgsNyBAQAogCQlwcGlbMF0gPSAmaW5mb19ocHQzNzJuOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJwYXRhX2hwdDN4Mm46IFBDSSB0YWJsZSBpcyBib2d1cyBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAorCQlwcl9lcnIoRFJWX05BTUUgIjogUENJIHRhYmxlIGlzIGJvZ3VzLCBwbGVhc2UgcmVwb3J0ICglZCkuXG4iLAogCQkgICAgICAgZGV2LT5kZXZpY2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC01NzksMTIgKzU3OCwxMSBAQAogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg1QywgKGZfaGlnaCA8PCAxNikgfCBmX2xvdyk7CiAJfQogCWlmIChhZGp1c3QgPT0gOCkgewotCQlwcmludGsoS0VSTl9FUlIgInBhdGFfaHB0M3gybjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOworCQlwcl9lcnIoRFJWX05BTUUgIjogRFBMTCBkaWQgbm90IHN0YWJpbGl6ZSFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJwYXRhX2hwdDM3eDogYnVzIGNsb2NrICVkTUh6LCB1c2luZyA2Nk1IeiBEUExMLlxuIiwKLQkgICAgICAgcGNpX21oeik7CisJcHJfaW5mbyhEUlZfTkFNRSAiOiBidXMgY2xvY2sgJWRNSHosIHVzaW5nIDY2TUh6IERQTEwuXG4iLCBwY2lfbWh6KTsKIAogCS8qCiAJICogU2V0IG91ciBwcml2YXRlIGRhdGEgdXAuIFdlIG9ubHkgbmVlZCBhIGZldyBmbGFncwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGM1Mnh4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwppbmRleCA4Y2M1MzZlLi5kN2Q4MDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21wYzUyeHguYwpAQCAtNjEwLDcgKzYxMCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgbXBjNTJ4eF9hdGFfcG9ydF9vcHMgPSB7Ci0JLmluaGVyaXRzCQk9ICZhdGFfc2ZmX3BvcnRfb3BzLAorCS5pbmhlcml0cwkJPSAmYXRhX2JtZG1hX3BvcnRfb3BzLAogCS5zZmZfZGV2X3NlbGVjdAkJPSBtcGM1Mnh4X2F0YV9kZXZfc2VsZWN0LAogCS5zZXRfcGlvbW9kZQkJPSBtcGM1Mnh4X2F0YV9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gbXBjNTJ4eF9hdGFfc2V0X2RtYW1vZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jIGIvZHJpdmVycy9hdG0vaWR0NzcxMDUuYwppbmRleCBiY2E5Y2I4Li40ODdhNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9pZHQ3NzEwNS5jCisrKyBiL2RyaXZlcnMvYXRtL2lkdDc3MTA1LmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkdDc3MTA1X3ByaXZfbG9jaywgZmxhZ3MpOwogCWlmIChhcmcgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZQUklWKGRldiktPnN0YXRzLAorCXJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCAmc3RhdHMsCiAJCSAgICBzaXplb2Yoc3RydWN0IGlkdDc3MTA1X3N0YXRzKSkgPyAtRUZBVUxUIDogMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vc29sb3MtcGNpLmMgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwppbmRleCA3M2ZiMWM0Li4yNWVmMWE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYworKysgYi9kcml2ZXJzL2F0bS9zb2xvcy1wY2kuYwpAQCAtODY2LDggKzg2Niw5IEBACiAJfQogCiAJc2tiID0gYWxsb2Nfc2tiKHNpemVvZigqaGVhZGVyKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFza2IgJiYgbmV0X3JhdGVsaW1pdCgpKSB7Ci0JCWRldl93YXJuKCZjYXJkLT5kZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza19idWZmIGluIHBvcGVuKClcbiIpOworCWlmICghc2tiKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlkZXZfd2FybigmY2FyZC0+ZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgc2tfYnVmZiBpbiBwb3BlbigpXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWhlYWRlciA9ICh2b2lkICopc2tiX3B1dChza2IsIHNpemVvZigqaGVhZGVyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwppbmRleCA2NTY0OTNhLi40MjYxNWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKQEAgLTQwNywxMiArNDA3LDE1IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIE1heWJlIHRoZSBwYXJlbnQgaXMgbm93IGFibGUgdG8gc3VzcGVuZC4gKi8KIAlpZiAocGFyZW50ICYmICFwYXJlbnQtPnBvd2VyLmlnbm9yZV9jaGlsZHJlbiAmJiAhZGV2LT5wb3dlci5pcnFfc2FmZSkgewotCQlzcGluX3VubG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCi0JCXBtX3JlcXVlc3RfaWRsZShwYXJlbnQpOworCQlzcGluX2xvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CisJCXJwbV9pZGxlKHBhcmVudCwgUlBNX0FTWU5DKTsKKwkJc3Bpbl91bmxvY2soJnBhcmVudC0+cG93ZXIubG9jayk7CiAKLQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKKwkJc3Bpbl9sb2NrKCZkZXYtPnBvd2VyLmxvY2spOwogCX0KIAogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUgYi9kcml2ZXJzL2Jsb2NrL01ha2VmaWxlCmluZGV4IGQ3ZjQ2M2QuLjQwNTI4YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ibG9jay9NYWtlZmlsZQpAQCAtMzksNCArMzksNCBAQAogb2JqLSQoQ09ORklHX0JMS19ERVZfRFJCRCkgICAgICs9IGRyYmQvCiBvYmotJChDT05GSUdfQkxLX0RFVl9SQkQpICAgICArPSByYmQubwogCi1zd2ltX21vZC1vYmpzCTo9IHN3aW0ubyBzd2ltX2FzbS5vCitzd2ltX21vZC15CTo9IHN3aW0ubyBzd2ltX2FzbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2FvZS9NYWtlZmlsZSBiL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCmluZGV4IGU3NmQ5OTcuLjA2ZWE4MmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmxvY2svYW9lL01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogIwogCiBvYmotJChDT05GSUdfQVRBX09WRVJfRVRIKQkrPSBhb2UubwotYW9lLW9ianMgOj0gYW9lYmxrLm8gYW9lY2hyLm8gYW9lY21kLm8gYW9lZGV2Lm8gYW9lbWFpbi5vIGFvZW5ldC5vCithb2UteSA6PSBhb2VibGsubyBhb2VjaHIubyBhb2VjbWQubyBhb2VkZXYubyBhb2VtYWluLm8gYW9lbmV0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwppbmRleCA1MTZkNWJiLi45Mjc5MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCkBAIC0yODMzLDcgKzI4MzMsNyBAQAogCXNlY3Rvcl90IHRvdGFsX3NpemU7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKLQlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8IENJU1NfTUFYX0xVTjsgbG9ndm9sKyspIHsKKwlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8PSBoLT5oaWdoZXN0X2x1bjsgbG9ndm9sKyspIHsKIAkJaWYgKCFoLT5kcnZbbG9ndm9sXSkKIAkJCWNvbnRpbnVlOwogCQlpZiAobWVtY21wKGgtPmRydltsb2d2b2xdLT5MdW5JRCwgZHJ2LT5MdW5JRCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IGI5YmEwNGYuLjc3ZmM3NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtMzI4MSw3ICszMjgxLDcgQEAKIAkJCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBvcGVuZWRfYmRldltjbnRdOwogCQkJaWYgKCFiZGV2IHx8IElUWVBFKGRyaXZlX3N0YXRlW2NudF0uZmRfZGV2aWNlKSAhPSB0eXBlKQogCQkJCWNvbnRpbnVlOwotCQkJX19pbnZhbGlkYXRlX2RldmljZShiZGV2KTsKKwkJCV9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwgdHJ1ZSk7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDQ0ZTE4YzAuLmRiZjMxZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC03OCw3ICs3OCw2IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi1zdGF0aWMgREVGSU5FX01VVEVYKGxvb3BfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRChsb29wX2RldmljZXMpOwogc3RhdGljIERFRklORV9NVVRFWChsb29wX2RldmljZXNfbXV0ZXgpOwogCkBAIC0xNTAxLDExICsxNTAwLDkgQEAKIHsKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwogCi0JbXV0ZXhfbG9jaygmbG9vcF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiAJbG8tPmxvX3JlZmNudCsrOwogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb29wX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTUxNSw3ICsxNTEyLDYgQEAKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGlzay0+cHJpdmF0ZV9kYXRhOwogCWludCBlcnI7CiAKLQltdXRleF9sb2NrKCZsb29wX211dGV4KTsKIAltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKIAogCWlmICgtLWxvLT5sb19yZWZjbnQpCkBAIC0xNTQwLDcgKzE1MzYsNiBAQAogb3V0OgogCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CiBvdXRfdW5sb2NrZWQ6Ci0JbXV0ZXhfdW5sb2NrKCZsb29wX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY0MSw2ICsxNjM2LDkgQEAKIAogc3RhdGljIHZvaWQgbG9vcF9mcmVlKHN0cnVjdCBsb29wX2RldmljZSAqbG8pCiB7CisJaWYgKCFsby0+bG9fcXVldWUtPnF1ZXVlX2xvY2spCisJCWxvLT5sb19xdWV1ZS0+cXVldWVfbG9jayA9ICZsby0+bG9fcXVldWUtPl9fcXVldWVfbG9jazsKKwogCWJsa19jbGVhbnVwX3F1ZXVlKGxvLT5sb19xdWV1ZSk7CiAJcHV0X2Rpc2sobG8tPmxvX2Rpc2spOwogCWxpc3RfZGVsKCZsby0+bG9fbGlzdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCBhMzJmYjQxLi5lNmZjNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTUzLDcgKzUzLDYgQEAKICNkZWZpbmUgREJHX0JMS0RFViAgICAgIDB4MDEwMAogI2RlZmluZSBEQkdfUlggICAgICAgICAgMHgwMjAwCiAjZGVmaW5lIERCR19UWCAgICAgICAgICAweDA0MDAKLXN0YXRpYyBERUZJTkVfTVVURVgobmJkX211dGV4KTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdmbGFnczsKICNlbmRpZiAvKiBOREVCVUcgKi8KIApAQCAtNzE4LDExICs3MTcsOSBAQAogCWRwcmludGsoREJHX0lPQ1RMLCAiJXM6IG5iZF9pb2N0bCBjbWQ9JXMoMHgleCkgYXJnPSVsdVxuIiwKIAkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIGlvY3RsX2NtZF90b19hc2NpaShjbWQpLCBjbWQsIGFyZyk7CiAKLQltdXRleF9sb2NrKCZuYmRfbXV0ZXgpOwogCW11dGV4X2xvY2soJmxvLT50eF9sb2NrKTsKIAllcnJvciA9IF9fbmJkX2lvY3RsKGJkZXYsIGxvLCBjbWQsIGFyZyk7CiAJbXV0ZXhfdW5sb2NrKCZsby0+dHhfbG9jayk7Ci0JbXV0ZXhfdW5sb2NrKCZuYmRfbXV0ZXgpOwogCiAJcmV0dXJuIGVycm9yOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKaW5kZXggOTQ5ZWQwOS4uNmRjZDU1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCkBAIC0zOSw2ICszOSwxMSBAQAogCS8qIEF0aGVyb3MgQVIzMDExIHdpdGggc2ZsYXNoIGZpcm13YXJlKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQ0YzLCAweDMwMDIpIH0sCiAKKwkvKiBBdGhlcm9zIEFSOTI4NSBNYWxiZWMgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwM0YwLCAweDMxMUQpIH0sCisKKwkvKiBBdGhlcm9zIEFSNUJCVTEyIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhFMDJDKSB9LAogCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtNDcsMzMgKzUyLDE2IEBACiAjZGVmaW5lIFVTQl9SRVFfREZVX0ROTE9BRAkxCiAjZGVmaW5lIEJVTEtfU0laRQkJNDA5NgogCi1zdHJ1Y3QgYXRoM2tfZGF0YSB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0JdTggKmZ3X2RhdGE7Ci0JdTMyIGZ3X3NpemU7Ci0JdTMyIGZ3X3NlbnQ7Ci19OwotCi1zdGF0aWMgaW50IGF0aDNrX2xvYWRfZmlybXdhcmUoc3RydWN0IGF0aDNrX2RhdGEgKmRhdGEsCi0JCQkJdW5zaWduZWQgY2hhciAqZmlybXdhcmUsCi0JCQkJaW50IGNvdW50KQorc3RhdGljIGludCBhdGgza19sb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmUpCiB7CiAJdTggKnNlbmRfYnVmOwogCWludCBlcnIsIHBpcGUsIGxlbiwgc2l6ZSwgc2VudCA9IDA7CisJaW50IGNvdW50ID0gZmlybXdhcmUtPnNpemU7CiAKLQlCVF9EQkcoImF0aDNrICVwIHVkZXYgJXAiLCBkYXRhLCBkYXRhLT51ZGV2KTsKKwlCVF9EQkcoInVkZXYgJXAiLCB1ZGV2KTsKIAotCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dWRldiwgMCk7Ci0KLQlpZiAoKHVzYl9jb250cm9sX21zZyhkYXRhLT51ZGV2LCBwaXBlLAotCQkJCVVTQl9SRVFfREZVX0ROTE9BRCwKLQkJCQlVU0JfVFlQRV9WRU5ET1IsIDAsIDAsCi0JCQkJZmlybXdhcmUsIDIwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCkpIDwgMCkgewotCQlCVF9FUlIoIkNhbid0IGNoYW5nZSB0byBsb2FkaW5nIGNvbmZpZ3VyYXRpb24gZXJyIik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCXNlbnQgKz0gMjA7Ci0JY291bnQgLT0gMjA7CisJcGlwZSA9IHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKTsKIAogCXNlbmRfYnVmID0ga21hbGxvYyhCVUxLX1NJWkUsIEdGUF9BVE9NSUMpOwogCWlmICghc2VuZF9idWYpIHsKQEAgLTgxLDEyICs2OSwyMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlLT5kYXRhLCAyMCk7CisJaWYgKChlcnIgPSB1c2JfY29udHJvbF9tc2codWRldiwgcGlwZSwKKwkJCQlVU0JfUkVRX0RGVV9ETkxPQUQsCisJCQkJVVNCX1RZUEVfVkVORE9SLCAwLCAwLAorCQkJCXNlbmRfYnVmLCAyMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpKSA8IDApIHsKKwkJQlRfRVJSKCJDYW4ndCBjaGFuZ2UgdG8gbG9hZGluZyBjb25maWd1cmF0aW9uIGVyciIpOworCQlnb3RvIGVycm9yOworCX0KKwlzZW50ICs9IDIwOworCWNvdW50IC09IDIwOworCiAJd2hpbGUgKGNvdW50KSB7CiAJCXNpemUgPSBtaW5fdCh1aW50LCBjb3VudCwgQlVMS19TSVpFKTsKLQkJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkYXRhLT51ZGV2LCAweDAyKTsKLQkJbWVtY3B5KHNlbmRfYnVmLCBmaXJtd2FyZSArIHNlbnQsIHNpemUpOworCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKHVkZXYsIDB4MDIpOworCQltZW1jcHkoc2VuZF9idWYsIGZpcm13YXJlLT5kYXRhICsgc2VudCwgc2l6ZSk7CiAKLQkJZXJyID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVkZXYsIHBpcGUsIHNlbmRfYnVmLCBzaXplLAorCQllcnIgPSB1c2JfYnVsa19tc2codWRldiwgcGlwZSwgc2VuZF9idWYsIHNpemUsCiAJCQkJCSZsZW4sIDMwMDApOwogCiAJCWlmIChlcnIgfHwgKGxlbiAhPSBzaXplKSkgewpAQCAtMTEyLDU3ICsxMTEsMjggQEAKIHsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgYXRoM2tfZGF0YSAqZGF0YTsKLQlpbnQgc2l6ZTsKIAogCUJUX0RCRygiaW50ZiAlcCBpZCAlcCIsIGludGYsIGlkKTsKIAogCWlmIChpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyICE9IDApCiAJCXJldHVybiAtRU5PREVWOwogCi0JZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKCpkYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRhdGEtPnVkZXYgPSB1ZGV2OwotCiAJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZpcm13YXJlLCAiYXRoM2stMS5mdyIsICZ1ZGV2LT5kZXYpIDwgMCkgewotCQlrZnJlZShkYXRhKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0Jc2l6ZSA9IG1heF90KHVpbnQsIGZpcm13YXJlLT5zaXplLCA0MDk2KTsKLQlkYXRhLT5md19kYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRhdGEtPmZ3X2RhdGEpIHsKKwlpZiAoYXRoM2tfbG9hZF9maXJtd2FyZSh1ZGV2LCBmaXJtd2FyZSkpIHsKIAkJcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7Ci0JCWtmcmVlKGRhdGEpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1jcHkoZGF0YS0+ZndfZGF0YSwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKLQlkYXRhLT5md19zaXplID0gZmlybXdhcmUtPnNpemU7Ci0JZGF0YS0+Zndfc2VudCA9IDA7Ci0JcmVsZWFzZV9maXJtd2FyZShmaXJtd2FyZSk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOwotCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKGRhdGEsIGRhdGEtPmZ3X2RhdGEsIGRhdGEtPmZ3X3NpemUpKSB7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JCWtmcmVlKGRhdGEtPmZ3X2RhdGEpOwotCQlrZnJlZShkYXRhKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGF0aDNrX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0Jc3RydWN0IGF0aDNrX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCiAJQlRfREJHKCJhdGgza19kaXNjb25uZWN0IGludGYgJXAiLCBpbnRmKTsKLQotCWtmcmVlKGRhdGEtPmZ3X2RhdGEpOwotCWtmcmVlKGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRoM2tfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggMWRhNzczZjguLjcwMGEzODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYwpAQCAtMTAyLDYgKzEwMiwxMiBAQAogCS8qIEF0aGVyb3MgMzAxMSB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLwogCXsgVVNCX0RFVklDRSgweDBjZjMsIDB4MzAwMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LAogCisJLyogQXRoZXJvcyBBUjkyODUgTWFsYmVjIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgzMTFkKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCisKKwkvKiBBdGhlcm9zIEFSNUJCVTEyIHdpdGggc2ZsYXNoIGZpcm13YXJlICovCisJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDJjKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfSUdOT1JFIH0sCisKIAkvKiBCcm9hZGNvbSBCQ00yMDM1ICovCiAJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDM1KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LAogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAwYSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUgfSwKQEAgLTgyNiw3ICs4MzIsNyBAQAogCiAJaWYgKGhkZXYtPmNvbm5faGFzaC5zY29fbnVtID4gMCkgewogCQlpZiAoIXRlc3RfYml0KEJUVVNCX0RJRF9JU09fUkVTVU1FLCAmZGF0YS0+ZmxhZ3MpKSB7Ci0JCQllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aXNvYyk7CisJCQllcnIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoZGF0YS0+aXNvYyA/IGRhdGEtPmlzb2MgOiBkYXRhLT5pbnRmKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJY2xlYXJfYml0KEJUVVNCX0lTT0NfUlVOTklORywgJmRhdGEtPmZsYWdzKTsKIAkJCQl1c2Jfa2lsbF9hbmNob3JlZF91cmJzKCZkYXRhLT5pc29jX2FuY2hvcik7CkBAIC04NTUsNyArODYxLDcgQEAKIAogCQlfX3NldF9pc29jX2ludGVyZmFjZShoZGV2LCAwKTsKIAkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChCVFVTQl9ESURfSVNPX1JFU1VNRSwgJmRhdGEtPmZsYWdzKSkKLQkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pc29jKTsKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkYXRhLT5pc29jID8gZGF0YS0+aXNvYyA6IGRhdGEtPmludGYpOwogCX0KIH0KIApAQCAtMTAzOCw4ICsxMDQ0LDYgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgZGF0YSk7CiAKLQl1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKGludGVyZmFjZV90b191c2JkZXYoaW50ZikpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwppbmRleCAxNDAzM2EzLi5lMmM0OGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCkBAIC00MDksNyArNDA5LDggQEAKIAl9CiAKIAlFTlNVUkUoZHJpdmVfc3RhdHVzLCBDRENfRFJJVkVfU1RBVFVTICk7Ci0JRU5TVVJFKG1lZGlhX2NoYW5nZWQsIENEQ19NRURJQV9DSEFOR0VEKTsKKwlpZiAoY2RvLT5jaGVja19ldmVudHMgPT0gTlVMTCAmJiBjZG8tPm1lZGlhX2NoYW5nZWQgPT0gTlVMTCkKKwkJKmNoYW5nZV9jYXBhYmlsaXR5ID0gfihDRENfTUVESUFfQ0hBTkdFRCB8IENEQ19TRUxFQ1RfRElTQyk7CiAJRU5TVVJFKHRyYXlfbW92ZSwgQ0RDX0NMT1NFX1RSQVkgfCBDRENfT1BFTl9UUkFZKTsKIAlFTlNVUkUobG9ja19kb29yLCBDRENfTE9DSyk7CiAJRU5TVVJFKHNlbGVjdF9zcGVlZCwgQ0RDX1NFTEVDVF9TUEVFRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUgYi9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKaW5kZXggNWJjNzY1ZC4uODIzOGY4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY2hhci9NYWtlZmlsZQpAQCAtMzAsNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX0FNSUdBX0JVSUxUSU5fU0VSSUFMKSArPSBhbWlzZXJpYWwubwogb2JqLSQoQ09ORklHX1NYKQkJKz0gc3gubyBnZW5lcmljX3NlcmlhbC5vCiBvYmotJChDT05GSUdfUklPKQkJKz0gcmlvLyBnZW5lcmljX3NlcmlhbC5vCitvYmotJChDT05GSUdfVklSVElPX0NPTlNPTEUpCSs9IHZpcnRpb19jb25zb2xlLm8KIG9iai0kKENPTkZJR19SQVdfRFJJVkVSKQkrPSByYXcubwogb2JqLSQoQ09ORklHX1NHSV9TTlNDKQkJKz0gc25zYy5vIHNuc2NfZXZlbnQubwogb2JqLSQoQ09ORklHX01TUEVDKQkJKz0gbXNwZWMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2FncC9LY29uZmlnCmluZGV4IGZjZDg2N2QuLmQ4YjFiNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvYWdwL0tjb25maWcKQEAgLTUwLDcgKzUwLDcgQEAKIAogY29uZmlnIEFHUF9BTUQKIAl0cmlzdGF0ZSAiQU1EIElyb25nYXRlLCA3NjEsIGFuZCA3NjIgY2hpcHNldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQUdQICYmIChYODZfMzIgfHwgQUxQSEEpCisJZGVwZW5kcyBvbiBBR1AgJiYgWDg2XzMyCiAJaGVscAogCSAgVGhpcyBvcHRpb24gZ2l2ZXMgeW91IEFHUCBzdXBwb3J0IGZvciB0aGUgR0xYIGNvbXBvbmVudCBvZgogCSAgWCBvbiBBTUQgSXJvbmdhdGUsIDc2MSwgYW5kIDc2MiBjaGlwc2V0cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvYW1kLWs3LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKaW5kZXggYjFiNDM2Mi4uNDU2ODFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9hbWQtazctYWdwLmMKQEAgLTQxLDIyICs0MSw4IEBACiAJaWYgKHBhZ2VfbWFwLT5yZWFsID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0jaWZuZGVmIENPTkZJR19YODYKLQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKHBhZ2VfbWFwLT5yZWFsKSk7Ci0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0JcGFnZV9tYXAtPnJlbWFwcGVkID0gaW9yZW1hcF9ub2NhY2hlKHZpcnRfdG9fcGh5cyhwYWdlX21hcC0+cmVhbCksCi0JCQkJCSAgICBQQUdFX1NJWkUpOwotCWlmIChwYWdlX21hcC0+cmVtYXBwZWQgPT0gTlVMTCkgewotCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UocGFnZV9tYXAtPnJlYWwpKTsKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBwYWdlX21hcC0+cmVhbCk7Ci0JCXBhZ2VfbWFwLT5yZWFsID0gTlVMTDsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWdsb2JhbF9jYWNoZV9mbHVzaCgpOwotI2Vsc2UKIAlzZXRfbWVtb3J5X3VjKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKIAlwYWdlX21hcC0+cmVtYXBwZWQgPSBwYWdlX21hcC0+cmVhbDsKLSNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IFBBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKTsgaSsrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5zY3JhdGNoX3BhZ2UsIHBhZ2VfbWFwLT5yZW1hcHBlZCtpKTsKQEAgLTY4LDEyICs1NCw3IEBACiAKIHN0YXRpYyB2b2lkIGFtZF9mcmVlX3BhZ2VfbWFwKHN0cnVjdCBhbWRfcGFnZV9tYXAgKnBhZ2VfbWFwKQogewotI2lmbmRlZiBDT05GSUdfWDg2Ci0JaW91bm1hcChwYWdlX21hcC0+cmVtYXBwZWQpOwotCUNsZWFyUGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShwYWdlX21hcC0+cmVhbCkpOwotI2Vsc2UKIAlzZXRfbWVtb3J5X3diKCh1bnNpZ25lZCBsb25nKXBhZ2VfbWFwLT5yZWFsLCAxKTsKLSNlbmRpZgogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcGFnZV9tYXAtPnJlYWwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9hbWQ2NC1hZ3AuYwppbmRleCA5MjUyZTg1Li43ODA0OThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2FtZDY0LWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvYW1kNjQtYWdwLmMKQEAgLTc3MywxOCArNzczLDIzIEBACiAjZWxzZQogCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIllvdSBjYW4gYm9vdCB3aXRoIGFncD10cnlfdW5zdXBwb3J0ZWRcbiIpOwogI2VuZGlmCisJCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKIAkJLyogRmlyc3QgY2hlY2sgdGhhdCB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBBTUQ2NCBOQiAqLwotCQlpZiAoIXBjaV9kZXZfcHJlc2VudChhbWRfbmJfbWlzY19pZHMpKQorCQlpZiAoIXBjaV9kZXZfcHJlc2VudChhbWRfbmJfbWlzY19pZHMpKSB7CisJCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmFncF9hbWQ2NF9wY2lfZHJpdmVyKTsKIAkJCXJldHVybiAtRU5PREVWOworCQl9CiAKIAkJLyogTG9vayBmb3IgYW55IEFHUCBicmlkZ2UgKi8KIAkJYWdwX2FtZDY0X3BjaV9kcml2ZXIuaWRfdGFibGUgPSBhZ3BfYW1kNjRfcGNpX3Byb21pc2NfdGFibGU7CiAJCWVyciA9IGRyaXZlcl9hdHRhY2goJmFncF9hbWQ2NF9wY2lfZHJpdmVyLmRyaXZlcik7Ci0JCWlmIChlcnIgPT0gMCAmJiBhZ3BfYnJpZGdlc19mb3VuZCA9PSAwKQorCQlpZiAoZXJyID09IDAgJiYgYWdwX2JyaWRnZXNfZm91bmQgPT0gMCkgeworCQkJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZhZ3BfYW1kNjRfcGNpX2RyaXZlcik7CiAJCQllcnIgPSAtRU5PREVWOworCQl9CiAJfQogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwppbmRleCA4NTdkZjEwLi5iMGEwZGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKQEAgLTc3NCwyMCArNzc0LDE0IEBACiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkludGVsICVzIENoaXBzZXRcbiIsIGludGVsX2FncF9jaGlwc2V0c1tpXS5uYW1lKTsKIAogCS8qCi0JKiBJZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBwcm9wZXJseSBzZXR1cCwgdGhlIGZvbGxvd2luZyB3aWxsIGNhdGNoCi0JKiB0aGUgcHJvYmxlbSBhbmQgc2hvdWxkIHN0b3AgdGhlIHN5c3RlbSBmcm9tIGNyYXNoaW5nLgotCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZwotCSovCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKLQkJYWdwX3B1dF9icmlkZ2UoYnJpZGdlKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JLyoKIAkqIFRoZSBmb2xsb3dpbmcgZml4ZXMgdGhlIGNhc2Ugd2hlcmUgdGhlIEJJT1MgaGFzICJmb3Jnb3R0ZW4iIHRvCiAJKiBwcm92aWRlIGFuIGFkZHJlc3MgcmFuZ2UgZm9yIHRoZSBHQVJULgogCSogMjAwMzA2MTAgLSBoYW1pc2hAem90Lm9yZworCSogVGhpcyBoYXBwZW5zIGJlZm9yZSBwY2lfZW5hYmxlX2RldmljZSgpIGludGVudGlvbmFsbHk7CisJKiBjYWxsaW5nIHBjaV9lbmFibGVfZGV2aWNlKCkgYmVmb3JlIGFzc2lnbmluZyB0aGUgcmVzb3VyY2UKKwkqIHdpbGwgcmVzdWx0IGluIHRoZSBHQVJUIGJlaW5nIGRpc2FibGVkIG9uIG1hY2hpbmVzIHdpdGggc3VjaAorCSogQklPU3MgKHRoZSBHQVJUIGVuZHMgdXAgd2l0aCBhIEJBUiBzdGFydGluZyBhdCAwLCB3aGljaAorCSogY29uZmxpY3RzIGEgbG90IG9mIG90aGVyIGRldmljZXMpLgogCSovCiAJciA9ICZwZGV2LT5yZXNvdXJjZVswXTsKIAlpZiAoIXItPnN0YXJ0ICYmIHItPmVuZCkgewpAQCAtNzk4LDYgKzc5MiwxNyBAQAogCQl9CiAJfQogCisJLyoKKwkqIElmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHByb3Blcmx5IHNldHVwLCB0aGUgZm9sbG93aW5nIHdpbGwgY2F0Y2gKKwkqIHRoZSBwcm9ibGVtIGFuZCBzaG91bGQgc3RvcCB0aGUgc3lzdGVtIGZyb20gY3Jhc2hpbmcuCisJKiAyMDAzMDYxMCAtIGhhbWlzaEB6b3Qub3JnCisJKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOworCQlhZ3BfcHV0X2JyaWRnZShicmlkZ2UpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAkvKiBGaWxsIGluIHRoZSBtb2RlIHJlZ2lzdGVyICovCiAJaWYgKGNhcF9wdHIpIHsKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuaAppbmRleCBjMTk1YmZlLi41ZmVlYmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5oCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmgKQEAgLTEzMCw2ICsxMzAsNyBAQAogI2RlZmluZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMzUyTQkoMHhkIDw8IDQpCiAKICNkZWZpbmUgSTkxNV9JRlBBRERSICAgIDB4NjAKKyNkZWZpbmUgSTgzMF9ISUMgICAgICAgIDB4NzAKIAogLyogSW50ZWwgOTY1RyByZWdpc3RlcnMgKi8KICNkZWZpbmUgSTk2NV9NU0FDIDB4NjIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWd0dC5jCmluZGV4IDgyNmFiMDkuLjBkMDliNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtZ3R0LmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1ndHQuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hZ3BfYmFja2VuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogI2luY2x1ZGUgImFncC5oIgogI2luY2x1ZGUgImludGVsLWFncC5oIgpAQCAtNjgsMTMgKzY5LDEwIEBACiAJcGh5c19hZGRyX3QgZ21hX2J1c19hZGRyOwogCXUzMiBQR0VUQkxfc2F2ZTsKIAl1MzIgX19pb21lbSAqZ3R0OwkJLyogSTkxNUcgKi8KKwlib29sIGNsZWFyX2Zha2VfYWdwOyAvKiBvbiBmaXJzdCBhY2Nlc3MgdmlhIGFncCwgZmlsbCB3aXRoIHNjcmF0Y2ggKi8KIAlpbnQgbnVtX2RjYWNoZV9lbnRyaWVzOwotCXVuaW9uIHsKLQkJdm9pZCBfX2lvbWVtICppOXh4X2ZsdXNoX3BhZ2U7Ci0JCXZvaWQgKmk4eHhfZmx1c2hfcGFnZTsKLQl9OworCXZvaWQgX19pb21lbSAqaTl4eF9mbHVzaF9wYWdlOwogCWNoYXIgKmk4MXhfZ3R0X3RhYmxlOwotCXN0cnVjdCBwYWdlICppOHh4X3BhZ2U7CiAJc3RydWN0IHJlc291cmNlIGlmcF9yZXNvdXJjZTsKIAlpbnQgcmVzb3VyY2VfdmFsaWQ7CiAJc3RydWN0IHBhZ2UgKnNjcmF0Y2hfcGFnZTsKQEAgLTcyMSwyOCArNzE5LDYgQEAKIAogc3RhdGljIHZvaWQgaTgzMF9jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKGludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlKSB7Ci0JCWt1bm1hcChpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSk7Ci0JCWludGVsX3ByaXZhdGUuaTh4eF9mbHVzaF9wYWdlID0gTlVMTDsKLQl9Ci0KLQlfX2ZyZWVfcGFnZShpbnRlbF9wcml2YXRlLmk4eHhfcGFnZSk7Ci0JaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UgPSBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBpbnRlbF9pODMwX3NldHVwX2ZsdXNoKHZvaWQpCi17Ci0JLyogcmV0dXJuIGlmIHdlJ3ZlIGFscmVhZHkgc2V0IHRoZSBmbHVzaCBtZWNoYW5pc20gdXAgKi8KLQlpZiAoaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UpCi0JCXJldHVybjsKLQotCWludGVsX3ByaXZhdGUuaTh4eF9wYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIWludGVsX3ByaXZhdGUuaTh4eF9wYWdlKQotCQlyZXR1cm47Ci0KLQlpbnRlbF9wcml2YXRlLmk4eHhfZmx1c2hfcGFnZSA9IGttYXAoaW50ZWxfcHJpdmF0ZS5pOHh4X3BhZ2UpOwotCWlmICghaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2UpCi0JCWk4MzBfY2xlYW51cCgpOwogfQogCiAvKiBUaGUgY2hpcHNldF9mbHVzaCBpbnRlcmZhY2UgbmVlZHMgdG8gZ2V0IGRhdGEgdGhhdCBoYXMgYWxyZWFkeSBiZWVuCkBAIC03NTcsMTQgKzczMywyNyBAQAogICovCiBzdGF0aWMgdm9pZCBpODMwX2NoaXBzZXRfZmx1c2godm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgKnBnID0gaW50ZWxfcHJpdmF0ZS5pOHh4X2ZsdXNoX3BhZ2U7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7CiAKLQltZW1zZXQocGcsIDAsIDEwMjQpOworCS8qIEZvcmNpYmx5IGV2aWN0IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgQ1BVIHdyaXRlIGJ1ZmZlcnMuCisJICogY2xmbHVzaCBhcHBlYXJzIHRvIGJlIGluc3VmZmljaWVudC4KKwkgKi8KKwl3YmludmRfb25fYWxsX2NwdXMoKTsKIAotCWlmIChjcHVfaGFzX2NsZmx1c2gpCi0JCWNsZmx1c2hfY2FjaGVfcmFuZ2UocGcsIDEwMjQpOwotCWVsc2UgaWYgKHdiaW52ZF9vbl9hbGxfY3B1cygpICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAiVGltZWQgb3V0IHdhaXRpbmcgZm9yIGNhY2hlIGZsdXNoLlxuIik7CisJLyogTm93IHdlJ3ZlIG9ubHkgc2VlbiBkb2N1bWVudHMgZm9yIHRoaXMgbWFnaWMgYml0IG9uIDg1NUdNLAorCSAqIHdlIGhvcGUgaXQgZXhpc3RzIGZvciB0aGUgb3RoZXIgZ2VuMiBjaGlwc2V0cy4uLgorCSAqCisJICogQWxzbyB3b3JrcyBhcyBhZHZlcnRpc2VkIG9uIG15IDg0NUcuCisJICovCisJd3JpdGVsKHJlYWRsKGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MzBfSElDKSB8ICgxPDwzMSksCisJICAgICAgIGludGVsX3ByaXZhdGUucmVnaXN0ZXJzK0k4MzBfSElDKTsKKworCXdoaWxlIChyZWFkbChpbnRlbF9wcml2YXRlLnJlZ2lzdGVycytJODMwX0hJQykgJiAoMTw8MzEpKSB7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDUwKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGk4MzBfd3JpdGVfZW50cnkoZG1hX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBpbnQgZW50cnksCkBAIC04NDgsOCArODM3LDYgQEAKIAogCWludGVsX3ByaXZhdGUuZ3R0X2J1c19hZGRyID0gcmVnX2FkZHIgKyBJODEwX1BURV9CQVNFOwogCi0JaW50ZWxfaTgzMF9zZXR1cF9mbHVzaCgpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg2OSwyMSArODU2LDEyIEBACiAKIHN0YXRpYyBpbnQgaW50ZWxfZmFrZV9hZ3BfY29uZmlndXJlKHZvaWQpCiB7Ci0JaW50IGk7Ci0KIAlpZiAoIWludGVsX2VuYWJsZV9ndHQoKSkKIAkgICAgcmV0dXJuIC1FSU87CiAKKwlpbnRlbF9wcml2YXRlLmNsZWFyX2Zha2VfYWdwID0gdHJ1ZTsKIAlhZ3BfYnJpZGdlLT5nYXJ0X2J1c19hZGRyID0gaW50ZWxfcHJpdmF0ZS5nbWFfYnVzX2FkZHI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF90b3RhbF9lbnRyaWVzOyBpKyspIHsKLQkJaW50ZWxfcHJpdmF0ZS5kcml2ZXItPndyaXRlX2VudHJ5KGludGVsX3ByaXZhdGUuc2NyYXRjaF9wYWdlX2RtYSwKLQkJCQkJCSAgaSwgMCk7Ci0JfQotCXJlYWRsKGludGVsX3ByaXZhdGUuZ3R0K2ktMSk7CS8qIFBDSSBQb3N0aW5nLiAqLwotCi0JZ2xvYmFsX2NhY2hlX2ZsdXNoKCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQ1LDYgKzkyMywxMyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCisJaWYgKGludGVsX3ByaXZhdGUuY2xlYXJfZmFrZV9hZ3ApIHsKKwkJaW50IHN0YXJ0ID0gaW50ZWxfcHJpdmF0ZS5iYXNlLnN0b2xlbl9zaXplIC8gUEFHRV9TSVpFOworCQlpbnQgZW5kID0gaW50ZWxfcHJpdmF0ZS5iYXNlLmd0dF9tYXBwYWJsZV9lbnRyaWVzOworCQlpbnRlbF9ndHRfY2xlYXJfcmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKKwkJaW50ZWxfcHJpdmF0ZS5jbGVhcl9mYWtlX2FncCA9IGZhbHNlOworCX0KKwogCWlmIChJTlRFTF9HVFRfR0VOID09IDEgJiYgdHlwZSA9PSBBR1BfRENBQ0hFX01FTU9SWSkKIAkJcmV0dXJuIGk4MTBfaW5zZXJ0X2RjYWNoZV9lbnRyaWVzKG1lbSwgcGdfc3RhcnQsIHR5cGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYyBiL2RyaXZlcnMvY2hhci9iZmluX2p0YWdfY29tbS5jCmluZGV4IGUzOTdkZjMuLjE2NDAyNDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYworKysgYi9kcml2ZXJzL2NoYXIvYmZpbl9qdGFnX2NvbW0uYwpAQCAtMTgzLDE2ICsxODMsMTYgQEAKIH0KIAogI2lmbmRlZiBDT05GSUdfQkZJTl9KVEFHX0NPTU1fQ09OU09MRQotIyBkZWZpbmUgYWNxdWlyZV9jb25zb2xlX3NlbSgpCi0jIGRlZmluZSByZWxlYXNlX2NvbnNvbGVfc2VtKCkKKyMgZGVmaW5lIGNvbnNvbGVfbG9jaygpCisjIGRlZmluZSBjb25zb2xlX3VubG9jaygpCiAjZW5kaWYKIHN0YXRpYyBpbnQKIGJmaW5famNfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7CiAJaW50IGk7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWkgPSBiZmluX2pjX2NpcmNfd3JpdGUoYnVmLCBjb3VudCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJd2FrZV91cF9wcm9jZXNzKGJmaW5famNfa3RocmVhZCk7CiAJcmV0dXJuIGk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGI2YWU2ZTkuLjc4NTVmOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0zMjAsNiArMzIwLDcgQEAKIHN0YXRpYyBpbnQgYWRkX3NtaShzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgaW50IHRyeV9zbWlfaW5pdChzdHJ1Y3Qgc21pX2luZm8gKnNtaSk7CiBzdGF0aWMgdm9pZCBjbGVhbnVwX29uZV9zaShzdHJ1Y3Qgc21pX2luZm8gKnRvX2NsZWFuKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBfaXBtaV9zaSh2b2lkKTsKIAogc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKHhhY3Rpb25fbm90aWZpZXJfbGlzdCk7CiBzdGF0aWMgaW50IHJlZ2lzdGVyX3hhY3Rpb25fbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKQEAgLTM0NTAsMTYgKzM0NTEsNyBAQAogCW11dGV4X2xvY2soJnNtaV9pbmZvc19sb2NrKTsKIAlpZiAodW5sb2FkX3doZW5fZW1wdHkgJiYgbGlzdF9lbXB0eSgmc21pX2luZm9zKSkgewogCQltdXRleF91bmxvY2soJnNtaV9pbmZvc19sb2NrKTsKLSNpZmRlZiBDT05GSUdfUENJCi0JCWlmIChwY2lfcmVnaXN0ZXJlZCkKLQkJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBtaV9wY2lfZHJpdmVyKTsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BQQ19PRgotCQlpZiAob2ZfcmVnaXN0ZXJlZCkKLQkJCW9mX3VucmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZpcG1pX29mX3BsYXRmb3JtX2RyaXZlcik7Ci0jZW5kaWYKLQkJZHJpdmVyX3VucmVnaXN0ZXIoJmlwbWlfZHJpdmVyLmRyaXZlcik7CisJCWNsZWFudXBfaXBtaV9zaSgpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkgICAgICAgIlVuYWJsZSB0byBmaW5kIGFueSBTeXN0ZW0gSW50ZXJmYWNlKHMpXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9jbTQwMDBfY3MuYwppbmRleCA3NzcxODFhLi5iY2JiYzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2NtNDAwMF9jcy5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvY200MDAwX2NzLmMKQEAgLTgzMCw4ICs4MzAsNyBAQAogCQkJICAgIHRlc3RfYml0KElTX0FOWV9UMSwgJmRldi0+ZmxhZ3MpKSkgewogCQkJCURFQlVHUCg0LCBkZXYsICJQZXJmb3JtIEFVVE9QUFNcbiIpOwogCQkJCXNldF9iaXQoSVNfQVVUT1BQU19BQ1QsICZkZXYtPmZsYWdzKTsKLQkJCQlwdHNyZXEucHJvdG9jb2wgPSBwdHNyZXEucHJvdG9jb2wgPQotCQkJCSAgICAoMHgwMSA8PCBkZXYtPnByb3RvKTsKKwkJCQlwdHNyZXEucHJvdG9jb2wgPSAoMHgwMSA8PCBkZXYtPnByb3RvKTsKIAkJCQlwdHNyZXEuZmxhZ3MgPSAweDAxOwogCQkJCXB0c3JlcS5wdHMxID0gMHgwMDsKIAkJCQlwdHNyZXEucHRzMiA9IDB4MDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jIGIvZHJpdmVycy9jaGFyL3BjbWNpYS9pcHdpcmVsZXNzL21haW4uYwppbmRleCA5NGI4ZWI0Li40NDQxNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGNtY2lhL2lwd2lyZWxlc3MvbWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9wY21jaWEvaXB3aXJlbGVzcy9tYWluLmMKQEAgLTc4LDcgKzc4LDYgQEAKIHN0YXRpYyBpbnQgaXB3aXJlbGVzc19wcm9iZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYsIHZvaWQgKnByaXZfZGF0YSkKIHsKIAlzdHJ1Y3QgaXB3X2RldiAqaXB3ID0gcHJpdl9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqaW9fcmVzb3VyY2U7CiAJaW50IHJldDsKIAogCXBfZGV2LT5yZXNvdXJjZVswXS0+ZmxhZ3MgJj0gfklPX0RBVEFfUEFUSF9XSURUSDsKQEAgLTkyLDkgKzkxLDEyIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWlvX3Jlc291cmNlID0gcmVxdWVzdF9yZWdpb24ocF9kZXYtPnJlc291cmNlWzBdLT5zdGFydCwKLQkJCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVswXSksCi0JCQkJSVBXSVJFTEVTU19QQ0NBUkRfTkFNRSk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkJICAgIHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzBdKSwKKwkJCSAgICBJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDsKKwl9CiAKIAlwX2Rldi0+cmVzb3VyY2VbMl0tPmZsYWdzIHw9CiAJCVdJTl9EQVRBX1dJRFRIXzE2IHwgV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKQEAgLTEwNSwyMiArMTA3LDI1IEBACiAKIAlyZXQgPSBwY21jaWFfbWFwX21lbV9wYWdlKHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbMl0sIHBfZGV2LT5jYXJkX2FkZHIpOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MTsKIAogCWlwdy0+aXNfdjJfY2FyZCA9IHJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSA9PSAweDEwMDsKIAotCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCisJaXB3LT5jb21tb25fbWVtb3J5ID0gaW9yZW1hcChwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAogCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSk7Ci0JcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQlyZXNvdXJjZV9zaXplKHBfZGV2LT5yZXNvdXJjZVsyXSksCi0JCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKTsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzJdKSwKKwkJCQlJUFdJUkVMRVNTX1BDQ0FSRF9OQU1FKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXhpdDI7CisJfQogCiAJcF9kZXYtPnJlc291cmNlWzNdLT5mbGFncyB8PSBXSU5fREFUQV9XSURUSF8xNiB8IFdJTl9NRU1PUllfVFlQRV9BTSB8CiAJCQkJCVdJTl9FTkFCTEU7CiAJcF9kZXYtPnJlc291cmNlWzNdLT5lbmQgPSAwOyAvKiB0aGlzIHVzZWQgdG8gYmUgMHgxMDAwICovCiAJcmV0ID0gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBfZGV2LCBwX2Rldi0+cmVzb3VyY2VbM10sIDApOwogCWlmIChyZXQgIT0gMCkKLQkJZ290byBleGl0MjsKKwkJZ290byBleGl0MzsKIAogCXJldCA9IHBjbWNpYV9tYXBfbWVtX3BhZ2UocF9kZXYsIHBfZGV2LT5yZXNvdXJjZVszXSwgMCk7CiAJaWYgKHJldCAhPSAwKQpAQCAtMTI4LDIzICsxMzMsMjggQEAKIAogCWlwdy0+YXR0cl9tZW1vcnkgPSBpb3JlbWFwKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pKTsKLQlyZXF1ZXN0X21lbV9yZWdpb24ocF9kZXYtPnJlc291cmNlWzNdLT5zdGFydCwKLQkJCXJlc291cmNlX3NpemUocF9kZXYtPnJlc291cmNlWzNdKSwKLQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVszXS0+c3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbM10pLAorCQkJCUlQV0lSRUxFU1NfUENDQVJEX05BTUUpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBleGl0NDsKKwl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdDQ6CisJaW91bm1hcChpcHctPmF0dHJfbWVtb3J5KTsKIGV4aXQzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMl0tPnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKIGV4aXQyOgotCWlmIChpcHctPmNvbW1vbl9tZW1vcnkpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKHBfZGV2LT5yZXNvdXJjZVsyXS0+c3RhcnQsCi0JCQkJcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMl0pKTsKLQkJaW91bm1hcChpcHctPmNvbW1vbl9tZW1vcnkpOwotCX0KKwlpb3VubWFwKGlwdy0+Y29tbW9uX21lbW9yeSk7CiBleGl0MToKLQlyZWxlYXNlX3Jlc291cmNlKGlvX3Jlc291cmNlKTsKKwlyZWxlYXNlX3JlZ2lvbihwX2Rldi0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShwX2Rldi0+cmVzb3VyY2VbMF0pKTsKK2V4aXQ6CiAJcGNtY2lhX2Rpc2FibGVfZGV2aWNlKHBfZGV2KTsKLQlyZXR1cm4gLTE7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjb25maWdfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQpAQCAtMjE5LDYgKzIyOSw4IEBACiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfaXB3aXJlbGVzcyhzdHJ1Y3QgaXB3X2RldiAqaXB3KQogeworCXJlbGVhc2VfcmVnaW9uKGlwdy0+bGluay0+cmVzb3VyY2VbMF0tPnN0YXJ0LAorCQkgICAgICAgcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzBdKSk7CiAJaWYgKGlwdy0+Y29tbW9uX21lbW9yeSkgewogCQlyZWxlYXNlX21lbV9yZWdpb24oaXB3LT5saW5rLT5yZXNvdXJjZVsyXS0+c3RhcnQsCiAJCQkJcmVzb3VyY2Vfc2l6ZShpcHctPmxpbmstPnJlc291cmNlWzJdKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHBtL3RwbV90aXMuYyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCmluZGV4IGMxN2EzMDUuLmRkMjFkZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCisrKyBiL2RyaXZlcnMvY2hhci90cG0vdHBtX3Rpcy5jCkBAIC00OTMsOSArNDkzLDYgQEAKIAkJICIxLjIgVFBNIChkZXZpY2UtaWQgMHglWCwgcmV2LWlkICVkKVxuIiwKIAkJIHZlbmRvciA+PiAxNiwgaW9yZWFkOChjaGlwLT52ZW5kb3IuaW9iYXNlICsgVFBNX1JJRCgwKSkpOwogCi0JaWYgKGlzX2l0cG0odG9fcG5wX2RldihkZXYpKSkKLQkJaXRwbSA9IDE7Ci0KIAlpZiAoaXRwbSkKIAkJZGV2X2luZm8oZGV2LCAiSW50ZWwgaVRQTSB3b3JrYXJvdW5kIGVuYWJsZWRcbiIpOwogCkBAIC02MzcsNiArNjM0LDkgQEAKIAllbHNlCiAJCWludGVycnVwdHMgPSAwOwogCisJaWYgKGlzX2l0cG0ocG5wX2RldikpCisJCWl0cG0gPSAxOworCiAJcmV0dXJuIHRwbV90aXNfaW5pdCgmcG5wX2Rldi0+ZGV2LCBzdGFydCwgbGVuLCBpcnEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvdmlydGlvX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGRyaXZlcnMvdHR5L2h2Yy92aXJ0aW9fY29uc29sZS5jCnJlbmFtZSB0byBkcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCA4OTZhMmNlLi44NGIxNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9odmMvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDkgUnVzdHkgUnVzc2VsbCwgSUJNIENvcnBvcmF0aW9uCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSBBbWl0IFNoYWggPGFtaXQuc2hhaEByZWRoYXQuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzEsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotI2luY2x1ZGUgImh2Y19jb25zb2xlLmgiCisjaW5jbHVkZSAiLi4vdHR5L2h2Yy9odmNfY29uc29sZS5oIgogCiAvKgogICogVGhpcyBpcyBhIGdsb2JhbCBzdHJ1Y3QgZm9yIHN0b3JpbmcgY29tbW9uIGRhdGEgZm9yIGFsbCB0aGUgZGV2aWNlcwpAQCAtMzg3LDYgKzM4OCwxMCBAQAogCXVuc2lnbmVkIGludCBsZW47CiAJaW50IHJldDsKIAorCWlmICghcG9ydC0+cG9ydGRldikgeworCQkvKiBEZXZpY2UgaGFzIGJlZW4gdW5wbHVnZ2VkLiAgdnFzIGFyZSBhbHJlYWR5IGdvbmUuICovCisJCXJldHVybjsKKwl9CiAJdnEgPSBwb3J0LT5pbl92cTsKIAlpZiAocG9ydC0+aW5idWYpCiAJCWJ1ZiA9IHBvcnQtPmluYnVmOwpAQCAtNDY5LDYgKzQ3NCwxMCBAQAogCXZvaWQgKmJ1ZjsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCisJaWYgKCFwb3J0LT5wb3J0ZGV2KSB7CisJCS8qIERldmljZSBoYXMgYmVlbiB1bnBsdWdnZWQuICB2cXMgYXJlIGFscmVhZHkgZ29uZS4gKi8KKwkJcmV0dXJuOworCX0KIAl3aGlsZSAoKGJ1ZiA9IHZpcnRxdWV1ZV9nZXRfYnVmKHBvcnQtPm91dF92cSwgJmxlbikpKSB7CiAJCWtmcmVlKGJ1Zik7CiAJCXBvcnQtPm91dHZxX2Z1bGwgPSBmYWxzZTsKQEAgLTE0NjIsNiArMTQ3MSwxNyBAQAogCXNwaW5fdW5sb2NrKCZwb3J0ZGV2LT5jdnFfbG9jayk7CiB9CiAKK3N0YXRpYyB2b2lkIG91dF9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBwb3J0ICpwb3J0OworCisJcG9ydCA9IGZpbmRfcG9ydF9ieV92cSh2cS0+dmRldi0+cHJpdiwgdnEpOworCWlmICghcG9ydCkKKwkJcmV0dXJuOworCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT53YWl0cXVldWUpOworfQorCiBzdGF0aWMgdm9pZCBpbl9pbnRyKHN0cnVjdCB2aXJ0cXVldWUgKnZxKQogewogCXN0cnVjdCBwb3J0ICpwb3J0OwpAQCAtMTU2Niw3ICsxNTg2LDcgQEAKIAkgKi8KIAlqID0gMDsKIAlpb19jYWxsYmFja3Nbal0gPSBpbl9pbnRyOwotCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBOVUxMOworCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAlpb19uYW1lc1tqXSA9ICJpbnB1dCI7CiAJaW9fbmFtZXNbaiArIDFdID0gIm91dHB1dCI7CiAJaiArPSAyOwpAQCAtMTU4MCw3ICsxNjAwLDcgQEAKIAkJZm9yIChpID0gMTsgaSA8IG5yX3BvcnRzOyBpKyspIHsKIAkJCWogKz0gMjsKIAkJCWlvX2NhbGxiYWNrc1tqXSA9IGluX2ludHI7Ci0JCQlpb19jYWxsYmFja3NbaiArIDFdID0gTlVMTDsKKwkJCWlvX2NhbGxiYWNrc1tqICsgMV0gPSBvdXRfaW50cjsKIAkJCWlvX25hbWVzW2pdID0gImlucHV0IjsKIAkJCWlvX25hbWVzW2ogKyAxXSA9ICJvdXRwdXQiOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2FjcGlfcG0uYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCmluZGV4IGNmYjBmNTIuLmVmZmU3OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvYWNwaV9wbS5jCkBAIC0yMDIsMTcgKzIwMiwyMSBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiUE0tVGltZXIgaGFkIGluY29uc2lzdGVudCByZXN1bHRzOiIKIAkJCSAgICAgICAiIDB4JSNsbHgsIDB4JSNsbHggLSBhYm9ydGluZy5cbiIsCiAJCQkgICAgICAgdmFsdWUxLCB2YWx1ZTIpOworCQkJcG10bXJfaW9wb3J0ID0gMDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChpID09IEFDUElfUE1fUkVBRF9DSEVDS1MpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlBNLVRpbWVyIGZhaWxlZCBjb25zaXN0ZW5jeSBjaGVjayAiCiAJCQkgICAgICAgIiAoMHglI2xseCkgLSBhYm9ydGluZy5cbiIsIHZhbHVlMSk7CisJCQlwbXRtcl9pb3BvcnQgPSAwOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlpZiAodmVyaWZ5X3BtdG1yX3JhdGUoKSAhPSAwKQorCWlmICh2ZXJpZnlfcG10bXJfcmF0ZSgpICE9IDApeworCQlwbXRtcl9pb3BvcnQgPSAwOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2FjcGlfcG0sCiAJCQkJCQlQTVRNUl9USUNLU19QRVJfU0VDKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvdGNiX2Nsa3NyYy5jIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKaW5kZXggMDFiODg2ZS4uNzljNDdlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS90Y2JfY2xrc3JjLmMKQEAgLTE5Niw5ICsxOTYsOSBAQAogCWNsa2V2dC5jbGtldnQubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygxLCAmY2xrZXZ0LmNsa2V2dCkgKyAxOwogCWNsa2V2dC5jbGtldnQuY3B1bWFzayA9IGNwdW1hc2tfb2YoMCk7CiAKLQlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKLQogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmY2xrZXZ0LmNsa2V2dCk7CisKKwlzZXR1cF9pcnEoaXJxLCAmdGNfaXJxYWN0aW9uKTsKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCAxMTA5ZjY4Li41Y2I0ZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTE5MTksOCArMTkxOSwxMCBAQAogCiAJcmV0ID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywKIAkJCQkJJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBlcnJfbnVsbF9kcml2ZXI7CiAKLQlpZiAoKCFyZXQpICYmICEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9TVElDS1kpKSB7CisJaWYgKCEoY3B1ZnJlcV9kcml2ZXItPmZsYWdzICYgQ1BVRlJFUV9TVElDS1kpKSB7CiAJCWludCBpOwogCQlyZXQgPSAtRU5PREVWOwogCkBAIC0xOTM1LDIxICsxOTM3LDIyIEBACiAJCWlmIChyZXQpIHsKIAkJCWRwcmludGsoIm5vIENQVSBpbml0aWFsaXplZCBmb3IgZHJpdmVyICVzXG4iLAogCQkJCQkJCWRyaXZlcl9kYXRhLT5uYW1lKTsKLQkJCXN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywKLQkJCQkJCSZjcHVmcmVxX3N5c2Rldl9kcml2ZXIpOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwotCQkJY3B1ZnJlcV9kcml2ZXIgPSBOVUxMOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJZ290byBlcnJfc3lzZGV2X3VucmVnOwogCQl9CiAJfQogCi0JaWYgKCFyZXQpIHsKLQkJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX2NwdV9ub3RpZmllcik7Ci0JCWRwcmludGsoImRyaXZlciAlcyB1cCBhbmQgcnVubmluZ1xuIiwgZHJpdmVyX2RhdGEtPm5hbWUpOwotCQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKLQl9CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX2NwdV9ub3RpZmllcik7CisJZHByaW50aygiZHJpdmVyICVzIHVwIGFuZCBydW5uaW5nXG4iLCBkcml2ZXJfZGF0YS0+bmFtZSk7CisJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CiAKKwlyZXR1cm4gMDsKK2Vycl9zeXNkZXZfdW5yZWc6CisJc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLAorCQkJJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CitlcnJfbnVsbF9kcml2ZXI6CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKKwljcHVmcmVxX2RyaXZlciA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMgYi9kcml2ZXJzL2RtYS9hbWJhLXBsMDh4LmMKaW5kZXggMjk3ZjQ4Yi4uMDdiY2E0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvYW1iYS1wbDA4eC5jCisrKyBiL2RyaXZlcnMvZG1hL2FtYmEtcGwwOHguYwpAQCAtNzksNiArNzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYXBvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgpAQCAtMjM1LDE2ICsyMzYsMTkgQEAKIH0KIAogLyoKLSAqIE92ZXJhbGwgRE1BQyByZW1haW5zIGVuYWJsZWQgYWx3YXlzLgorICogUGF1c2UgdGhlIGNoYW5uZWwgYnkgc2V0dGluZyB0aGUgSEFMVCBiaXQuCiAgKgotICogRGlzYWJsaW5nIGluZGl2aWR1YWwgY2hhbm5lbHMgY291bGQgbG9zZSBkYXRhLgorICogRm9yIE0tPlAgdHJhbnNmZXJzLCBwYXVzZSB0aGUgRE1BQyBmaXJzdCBhbmQgdGhlbiBzdG9wIHRoZSBwZXJpcGhlcmFsIC0KKyAqIHRoZSBGSUZPIGNhbiBvbmx5IGRyYWluIGlmIHRoZSBwZXJpcGhlcmFsIGlzIHN0aWxsIHJlcXVlc3RpbmcgZGF0YS4KKyAqIChub3RlOiB0aGlzIGNhbiBzdGlsbCB0aW1lb3V0IGlmIHRoZSBETUFDIEZJRk8gbmV2ZXIgZHJhaW5zIG9mIGRhdGEuKQogICoKLSAqIERpc2FibGUgdGhlIHBlcmlwaGVyYWwgRE1BIGFmdGVyIGRpc2FibGluZyB0aGUgRE1BQyBpbiBvcmRlciB0byBhbGxvdwotICogdGhlIERNQUMgRklGTyB0byBkcmFpbiwgYW5kIGhlbmNlIGFsbG93IHRoZSBjaGFubmVsIHRvIHNob3cgaW5hY3RpdmUKKyAqIEZvciBQLT5NIHRyYW5zZmVycywgZGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBmaXJzdCB0byBzdG9wIGl0IGZpbGxpbmcKKyAqIHRoZSBETUFDIEZJRk8sIGFuZCB0aGVuIHBhdXNlIHRoZSBETUFDLgogICovCiBzdGF0aWMgdm9pZCBwbDA4eF9wYXVzZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQogewogCXUzMiB2YWw7CisJaW50IHRpbWVvdXQ7CiAKIAkvKiBTZXQgdGhlIEhBTFQgYml0IGFuZCB3YWl0IGZvciB0aGUgRklGTyB0byBkcmFpbiAqLwogCXZhbCA9IHJlYWRsKGNoLT5iYXNlICsgUEwwODBfQ0hfQ09ORklHKTsKQEAgLTI1Miw4ICsyNTYsMTMgQEAKIAl3cml0ZWwodmFsLCBjaC0+YmFzZSArIFBMMDgwX0NIX0NPTkZJRyk7CiAKIAkvKiBXYWl0IGZvciBjaGFubmVsIGluYWN0aXZlICovCi0Jd2hpbGUgKHBsMDh4X3BoeV9jaGFubmVsX2J1c3koY2gpKQotCQljcHVfcmVsYXgoKTsKKwlmb3IgKHRpbWVvdXQgPSAxMDAwOyB0aW1lb3V0OyB0aW1lb3V0LS0pIHsKKwkJaWYgKCFwbDA4eF9waHlfY2hhbm5lbF9idXN5KGNoKSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMSk7CisJfQorCWlmIChwbDA4eF9waHlfY2hhbm5lbF9idXN5KGNoKSkKKwkJcHJfZXJyKCJwbDA4eDogY2hhbm5lbCV1IHRpbWVvdXQgd2FpdGluZyBmb3IgcGF1c2VcbiIsIGNoLT5pZCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBsMDh4X3Jlc3VtZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQpAQCAtMjY3LDE5ICsyNzYsMjQgQEAKIH0KIAogCi0vKiBTdG9wcyB0aGUgY2hhbm5lbCAqLwotc3RhdGljIHZvaWQgcGwwOHhfc3RvcF9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfcGh5X2NoYW4gKmNoKQorLyoKKyAqIHBsMDh4X3Rlcm1pbmF0ZV9waHlfY2hhbigpIHN0b3BzIHRoZSBjaGFubmVsLCBjbGVhcnMgdGhlIEZJRk8gYW5kCisgKiBjbGVhcnMgYW55IHBlbmRpbmcgaW50ZXJydXB0IHN0YXR1cy4gIFRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIGZvcgorICogYW4gb24tZ29pbmcgdHJhbnNmZXIsIGJ1dCBhcyBhIG1ldGhvZCBvZiBzaHV0dGluZyBkb3duIGEgY2hhbm5lbAorICogKGVnLCB3aGVuIGl0J3Mgbm8gbG9uZ2VyIHVzZWQpIG9yIHRlcm1pbmF0aW5nIGEgdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBsMDh4X3Rlcm1pbmF0ZV9waHlfY2hhbihzdHJ1Y3QgcGwwOHhfZHJpdmVyX2RhdGEgKnBsMDh4LAorCXN0cnVjdCBwbDA4eF9waHlfY2hhbiAqY2gpCiB7Ci0JdTMyIHZhbDsKKwl1MzIgdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwogCi0JcGwwOHhfcGF1c2VfcGh5X2NoYW4oY2gpOworCXZhbCAmPSB+KFBMMDgwX0NPTkZJR19FTkFCTEUgfCBQTDA4MF9DT05GSUdfRVJSX0lSUV9NQVNLIHwKKwkgICAgICAgICBQTDA4MF9DT05GSUdfVENfSVJRX01BU0spOwogCi0JLyogRGlzYWJsZSBjaGFubmVsICovCi0JdmFsID0gcmVhZGwoY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOwotCXZhbCAmPSB+UEwwODBfQ09ORklHX0VOQUJMRTsKLQl2YWwgJj0gflBMMDgwX0NPTkZJR19FUlJfSVJRX01BU0s7Ci0JdmFsICY9IH5QTDA4MF9DT05GSUdfVENfSVJRX01BU0s7CiAJd3JpdGVsKHZhbCwgY2gtPmJhc2UgKyBQTDA4MF9DSF9DT05GSUcpOworCisJd3JpdGVsKDEgPDwgY2gtPmlkLCBwbDA4eC0+YmFzZSArIFBMMDgwX0VSUl9DTEVBUik7CisJd3JpdGVsKDEgPDwgY2gtPmlkLCBwbDA4eC0+YmFzZSArIFBMMDgwX1RDX0NMRUFSKTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgZ2V0X2J5dGVzX2luX2NjdGwodTMyIGNjdGwpCkBAIC00MDQsMTMgKzQxOCwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKKwogCS8qIFN0b3AgdGhlIGNoYW5uZWwgYW5kIGNsZWFyIGl0cyBpbnRlcnJ1cHRzICovCi0JcGwwOHhfc3RvcF9waHlfY2hhbihjaCk7Ci0Jd3JpdGVsKCgxIDw8IGNoLT5pZCksIHBsMDh4LT5iYXNlICsgUEwwODBfRVJSX0NMRUFSKTsKLQl3cml0ZWwoKDEgPDwgY2gtPmlkKSwgcGwwOHgtPmJhc2UgKyBQTDA4MF9UQ19DTEVBUik7CisJcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHBsMDh4LCBjaCk7CiAKIAkvKiBNYXJrIGl0IGFzIGZyZWUgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmY2gtPmxvY2ssIGZsYWdzKTsKIAljaC0+c2VydmluZyA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2gtPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTE0NDksNyArMTQ2Miw3IEBACiAJCXBsY2hhbi0+c3RhdGUgPSBQTDA4WF9DSEFOX0lETEU7CiAKIAkJaWYgKHBsY2hhbi0+cGh5Y2hhbikgewotCQkJcGwwOHhfc3RvcF9waHlfY2hhbihwbGNoYW4tPnBoeWNoYW4pOworCQkJcGwwOHhfdGVybWluYXRlX3BoeV9jaGFuKHBsMDh4LCBwbGNoYW4tPnBoeWNoYW4pOwogCiAJCQkvKgogCQkJICogTWFyayBwaHlzaWNhbCBjaGFubmVsIGFzIGZyZWUgYW5kIGZyZWUgYW55IHNsYXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pbXgtZG1hLmMgYi9kcml2ZXJzL2RtYS9pbXgtZG1hLmMKaW5kZXggZTUzZDQzOC4uZTE4ZWFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LWRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lteC1kbWEuYwpAQCAtNDksNiArNDksNyBAQAogCiBzdHJ1Y3QgaW14ZG1hX2VuZ2luZSB7CiAJc3RydWN0IGRldmljZQkJCSpkZXY7CisJc3RydWN0IGRldmljZV9kbWFfcGFyYW1ldGVycwlkbWFfcGFybXM7CiAJc3RydWN0IGRtYV9kZXZpY2UJCWRtYV9kZXZpY2U7CiAJc3RydWN0IGlteGRtYV9jaGFubmVsCQljaGFubmVsW01BWF9ETUFfQ0hBTk5FTFNdOwogfTsKQEAgLTI0Miw2ICsyNDMsMjEgQEAKIAllbHNlCiAJCWRtYW1vZGUgPSBETUFfTU9ERV9XUklURTsKIAorCXN3aXRjaCAoaW14ZG1hYy0+d29yZF9zaXplKSB7CisJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfNF9CWVRFUzoKKwkJaWYgKHNnbC0+bGVuZ3RoICYgMyB8fCBzZ2wtPmRtYV9hZGRyZXNzICYgMykKKwkJCXJldHVybiBOVUxMOworCQlicmVhazsKKwljYXNlIERNQV9TTEFWRV9CVVNXSURUSF8yX0JZVEVTOgorCQlpZiAoc2dsLT5sZW5ndGggJiAxIHx8IHNnbC0+ZG1hX2FkZHJlc3MgJiAxKQorCQkJcmV0dXJuIE5VTEw7CisJCWJyZWFrOworCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CisJfQorCiAJcmV0ID0gaW14X2RtYV9zZXR1cF9zZyhpbXhkbWFjLT5pbXhkbWFfY2hhbm5lbCwgc2dsLCBzZ19sZW4sCiAJCSBkbWFfbGVuZ3RoLCBpbXhkbWFjLT5wZXJfYWRkcmVzcywgZG1hbW9kZSk7CiAJaWYgKHJldCkKQEAgLTMyOSw2ICszNDUsOSBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJmlteGRtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgaW14ZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKKwogCS8qIEluaXRpYWxpemUgY2hhbm5lbCBwYXJhbWV0ZXJzICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlzdHJ1Y3QgaW14ZG1hX2NoYW5uZWwgKmlteGRtYWMgPSAmaW14ZG1hLT5jaGFubmVsW2ldOwpAQCAtMzQ2LDExICszNjUsNyBAQAogCQlpbXhkbWFjLT5pbXhkbWEgPSBpbXhkbWE7CiAJCXNwaW5fbG9ja19pbml0KCZpbXhkbWFjLT5sb2NrKTsKIAotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0JCWRtYV9jYXBfc2V0KERNQV9DWUNMSUMsIGlteGRtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7Ci0KIAkJaW14ZG1hYy0+Y2hhbi5kZXZpY2UgPSAmaW14ZG1hLT5kbWFfZGV2aWNlOwotCQlpbXhkbWFjLT5jaGFuLmNoYW5faWQgPSBpOwogCQlpbXhkbWFjLT5jaGFubmVsID0gaTsKIAogCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdCAqLwpAQCAtMzcwLDYgKzM4NSw5IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbXhkbWEpOwogCisJaW14ZG1hLT5kbWFfZGV2aWNlLmRldi0+ZG1hX3Bhcm1zID0gJmlteGRtYS0+ZG1hX3Bhcm1zOworCWRtYV9zZXRfbWF4X3NlZ19zaXplKGlteGRtYS0+ZG1hX2RldmljZS5kZXYsIDB4ZmZmZmZmKTsKKwogCXJldCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJmlteGRtYS0+ZG1hX2RldmljZSk7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gcmVnaXN0ZXJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYyBiL2RyaXZlcnMvZG1hL2lteC1zZG1hLmMKaW5kZXggZDVhNWQ0ZC4uYjZkMTQ1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW14LXNkbWEuYworKysgYi9kcml2ZXJzL2RtYS9pbXgtc2RtYS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKICAqIHN0cnVjdCBzZG1hX2NoYW5uZWwgLSBob3VzZWtlZXBpbmcgZm9yIGEgU0RNQSBjaGFubmVsCiAgKgogICogQHNkbWEJCXBvaW50ZXIgdG8gdGhlIFNETUEgZW5naW5lIGZvciB0aGlzIGNoYW5uZWwKLSAqIEBjaGFubmVsCQl0aGUgY2hhbm5lbCBudW1iZXIsIG1hdGNoZXMgZG1hZW5naW5lIGNoYW5faWQKKyAqIEBjaGFubmVsCQl0aGUgY2hhbm5lbCBudW1iZXIsIG1hdGNoZXMgZG1hZW5naW5lIGNoYW5faWQgKyAxCiAgKiBAZGlyZWN0aW9uCQl0cmFuc2ZlciB0eXBlLiBOZWVkZWQgZm9yIHNldHRpbmcgU0RNQSBzY3JpcHQKICAqIEBwZXJpcGhlcmFsX3R5cGUJUGVyaXBoZXJhbCB0eXBlLiBOZWVkZWQgZm9yIHNldHRpbmcgU0RNQSBzY3JpcHQKICAqIEBldmVudF9pZDAJCWFrYSBkbWEgcmVxdWVzdCBsaW5lCkBAIC0zMDEsNiArMzAxLDcgQEAKIAogc3RydWN0IHNkbWFfZW5naW5lIHsKIAlzdHJ1Y3QgZGV2aWNlCQkJKmRldjsKKwlzdHJ1Y3QgZGV2aWNlX2RtYV9wYXJhbWV0ZXJzCWRtYV9wYXJtczsKIAlzdHJ1Y3Qgc2RtYV9jaGFubmVsCQljaGFubmVsW01BWF9ETUFfQ0hBTk5FTFNdOwogCXN0cnVjdCBzZG1hX2NoYW5uZWxfY29udHJvbAkqY2hhbm5lbF9jb250cm9sOwogCXZvaWQgX19pb21lbQkJCSpyZWdzOwpAQCAtNDQ5LDcgKzQ1MCw3IEBACiAJCWlmIChiZC0+bW9kZS5zdGF0dXMgJiBCRF9SUk9SKQogCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9FUlJPUjsKIAkJZWxzZQotCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9TVUNDRVNTOworCQkJc2RtYWMtPnN0YXR1cyA9IERNQV9JTl9QUk9HUkVTUzsKIAogCQliZC0+bW9kZS5zdGF0dXMgfD0gQkRfRE9ORTsKIAkJc2RtYWMtPmJ1Zl90YWlsKys7CkBAIC03NzAsMTUgKzc3MSwxNSBAQAogCV9fcmF3X3dyaXRlbCgxIDw8IGNoYW5uZWwsIHNkbWEtPnJlZ3MgKyBTRE1BX0hfU1RBUlQpOwogfQogCi1zdGF0aWMgZG1hX2Nvb2tpZV90IHNkbWFfYXNzaWduX2Nvb2tpZShzdHJ1Y3Qgc2RtYV9jaGFubmVsICpzZG1hKQorc3RhdGljIGRtYV9jb29raWVfdCBzZG1hX2Fzc2lnbl9jb29raWUoc3RydWN0IHNkbWFfY2hhbm5lbCAqc2RtYWMpCiB7Ci0JZG1hX2Nvb2tpZV90IGNvb2tpZSA9IHNkbWEtPmNoYW4uY29va2llOworCWRtYV9jb29raWVfdCBjb29raWUgPSBzZG1hYy0+Y2hhbi5jb29raWU7CiAKIAlpZiAoKytjb29raWUgPCAwKQogCQljb29raWUgPSAxOwogCi0Jc2RtYS0+Y2hhbi5jb29raWUgPSBjb29raWU7Ci0Jc2RtYS0+ZGVzYy5jb29raWUgPSBjb29raWU7CisJc2RtYWMtPmNoYW4uY29va2llID0gY29va2llOworCXNkbWFjLT5kZXNjLmNvb2tpZSA9IGNvb2tpZTsKIAogCXJldHVybiBjb29raWU7CiB9CkBAIC03OTgsNyArNzk5LDcgQEAKIAogCWNvb2tpZSA9IHNkbWFfYXNzaWduX2Nvb2tpZShzZG1hYyk7CiAKLQlzZG1hX2VuYWJsZV9jaGFubmVsKHNkbWEsIHR4LT5jaGFuLT5jaGFuX2lkKTsKKwlzZG1hX2VuYWJsZV9jaGFubmVsKHNkbWEsIHNkbWFjLT5jaGFubmVsKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmc2RtYWMtPmxvY2spOwogCkBAIC04MTEsMTAgKzgxMiw2IEBACiAJc3RydWN0IGlteF9kbWFfZGF0YSAqZGF0YSA9IGNoYW4tPnByaXZhdGU7CiAJaW50IHByaW8sIHJldDsKIAotCS8qIE5vIG5lZWQgdG8gZXhlY3V0ZSB0aGlzIGZvciBpbnRlcm5hbCBjaGFubmVsIDAgKi8KLQlpZiAoY2hhbi0+Y2hhbl9pZCA9PSAwKQotCQlyZXR1cm4gMDsKLQogCWlmICghZGF0YSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg3OSw3ICs4NzYsNyBAQAogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOwogCWludCByZXQsIGksIGNvdW50OwotCWludCBjaGFubmVsID0gY2hhbi0+Y2hhbl9pZDsKKwlpbnQgY2hhbm5lbCA9IHNkbWFjLT5jaGFubmVsOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAKIAlpZiAoc2RtYWMtPnN0YXR1cyA9PSBETUFfSU5fUFJPR1JFU1MpCkBAIC05MjQsMjIgKzkyMSwzMyBAQAogCQkJcmV0ID0gIC1FSU5WQUw7CiAJCQlnb3RvIGVycl9vdXQ7CiAJCX0KLQkJaWYgKHNkbWFjLT53b3JkX3NpemUgPT0gRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVMpCisKKwkJc3dpdGNoIChzZG1hYy0+d29yZF9zaXplKSB7CisJCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzRfQllURVM6CiAJCQliZC0+bW9kZS5jb21tYW5kID0gMDsKLQkJZWxzZQotCQkJYmQtPm1vZGUuY29tbWFuZCA9IHNkbWFjLT53b3JkX3NpemU7CisJCQlpZiAoY291bnQgJiAzIHx8IHNnLT5kbWFfYWRkcmVzcyAmIDMpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlicmVhazsKKwkJY2FzZSBETUFfU0xBVkVfQlVTV0lEVEhfMl9CWVRFUzoKKwkJCWJkLT5tb2RlLmNvbW1hbmQgPSAyOworCQkJaWYgKGNvdW50ICYgMSB8fCBzZy0+ZG1hX2FkZHJlc3MgJiAxKQorCQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWNhc2UgRE1BX1NMQVZFX0JVU1dJRFRIXzFfQllURToKKwkJCWJkLT5tb2RlLmNvbW1hbmQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlVMTDsKKwkJfQogCiAJCXBhcmFtID0gQkRfRE9ORSB8IEJEX0VYVEQgfCBCRF9DT05UOwogCi0JCWlmIChzZG1hYy0+ZmxhZ3MgJiBJTVhfRE1BX1NHX0xPT1ApIHsKKwkJaWYgKGkgKyAxID09IHNnX2xlbikgewogCQkJcGFyYW0gfD0gQkRfSU5UUjsKLQkJCWlmIChpICsgMSA9PSBzZ19sZW4pCi0JCQkJcGFyYW0gfD0gQkRfV1JBUDsKKwkJCXBhcmFtIHw9IEJEX0xBU1Q7CisJCQlwYXJhbSAmPSB+QkRfQ09OVDsKIAkJfQogCi0JCWlmIChpICsgMSA9PSBzZ19sZW4pCi0JCQlwYXJhbSB8PSBCRF9JTlRSOwotCiAJCWRldl9kYmcoc2RtYS0+ZGV2LCAiZW50cnkgJWQ6IGNvdW50OiAlZCBkbWE6IDB4JTA4eCAlcyVzXG4iLAogCQkJCWksIGNvdW50LCBzZy0+ZG1hX2FkZHJlc3MsCiAJCQkJcGFyYW0gJiBCRF9XUkFQID8gIndyYXAiIDogIiIsCkBAIC05NTMsNiArOTYxLDcgQEAKIAogCXJldHVybiAmc2RtYWMtPmRlc2M7CiBlcnJfb3V0OgorCXNkbWFjLT5zdGF0dXMgPSBETUFfRVJST1I7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTk2Myw3ICs5NzIsNyBAQAogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCXN0cnVjdCBzZG1hX2VuZ2luZSAqc2RtYSA9IHNkbWFjLT5zZG1hOwogCWludCBudW1fcGVyaW9kcyA9IGJ1Zl9sZW4gLyBwZXJpb2RfbGVuOwotCWludCBjaGFubmVsID0gY2hhbi0+Y2hhbl9pZDsKKwlpbnQgY2hhbm5lbCA9IHNkbWFjLT5jaGFubmVsOwogCWludCByZXQsIGkgPSAwLCBidWYgPSAwOwogCiAJZGV2X2RiZyhzZG1hLT5kZXYsICIlcyBjaGFubmVsOiAlZFxuIiwgX19mdW5jX18sIGNoYW5uZWwpOwpAQCAtMTA2NiwxNCArMTA3NSwxMiBAQAogewogCXN0cnVjdCBzZG1hX2NoYW5uZWwgKnNkbWFjID0gdG9fc2RtYV9jaGFuKGNoYW4pOwogCWRtYV9jb29raWVfdCBsYXN0X3VzZWQ7Ci0JZW51bSBkbWFfc3RhdHVzIHJldDsKIAogCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKIAotCXJldCA9IGRtYV9hc3luY19pc19jb21wbGV0ZShjb29raWUsIHNkbWFjLT5sYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkKTsKIAlkbWFfc2V0X3R4X3N0YXRlKHR4c3RhdGUsIHNkbWFjLT5sYXN0X2NvbXBsZXRlZCwgbGFzdF91c2VkLCAwKTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHNkbWFjLT5zdGF0dXM7CiB9CiAKIHN0YXRpYyB2b2lkIHNkbWFfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCkBAIC0xMTM1LDcgKzExNDIsNyBAQAogCS8qIGRvd25sb2FkIHRoZSBSQU0gaW1hZ2UgZm9yIFNETUEgKi8KIAlzZG1hX2xvYWRfc2NyaXB0KHNkbWEsIHJhbV9jb2RlLAogCQkJaGVhZGVyLT5yYW1fY29kZV9zaXplLAotCQkJc2RtYS0+c2NyaXB0X2FkZHJzLT5yYW1fY29kZV9zdGFydF9hZGRyKTsKKwkJCWFkZHItPnJhbV9jb2RlX3N0YXJ0X2FkZHIpOwogCWNsa19kaXNhYmxlKHNkbWEtPmNsayk7CiAKIAlzZG1hX2FkZF9zY3JpcHRzKHNkbWEsIGFkZHIpOwpAQCAtMTIzNyw3ICsxMjQ0LDYgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKmlvcmVzOwogCXN0cnVjdCBzZG1hX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGk7Ci0JZG1hX2NhcF9tYXNrX3QgbWFzazsKIAlzdHJ1Y3Qgc2RtYV9lbmdpbmUgKnNkbWE7CiAKIAlzZG1hID0ga3phbGxvYyhzaXplb2YoKnNkbWEpLCBHRlBfS0VSTkVMKTsKQEAgLTEyODAsNiArMTI4Niw5IEBACiAKIAlzZG1hLT52ZXJzaW9uID0gcGRhdGEtPnNkbWFfdmVyc2lvbjsKIAorCWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisJZG1hX2NhcF9zZXQoRE1BX0NZQ0xJQywgc2RtYS0+ZG1hX2RldmljZS5jYXBfbWFzayk7CisKIAlJTklUX0xJU1RfSEVBRCgmc2RtYS0+ZG1hX2RldmljZS5jaGFubmVscyk7CiAJLyogSW5pdGlhbGl6ZSBjaGFubmVsIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOTkVMUzsgaSsrKSB7CkBAIC0xMjg4LDE1ICsxMjk3LDE3IEBACiAJCXNkbWFjLT5zZG1hID0gc2RtYTsKIAkJc3Bpbl9sb2NrX2luaXQoJnNkbWFjLT5sb2NrKTsKIAotCQlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNkbWEtPmRtYV9kZXZpY2UuY2FwX21hc2spOwotCQlkbWFfY2FwX3NldChETUFfQ1lDTElDLCBzZG1hLT5kbWFfZGV2aWNlLmNhcF9tYXNrKTsKLQogCQlzZG1hYy0+Y2hhbi5kZXZpY2UgPSAmc2RtYS0+ZG1hX2RldmljZTsKLQkJc2RtYWMtPmNoYW4uY2hhbl9pZCA9IGk7CiAJCXNkbWFjLT5jaGFubmVsID0gaTsKIAotCQkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdCAqLwotCQlsaXN0X2FkZF90YWlsKCZzZG1hYy0+Y2hhbi5kZXZpY2Vfbm9kZSwgJnNkbWEtPmRtYV9kZXZpY2UuY2hhbm5lbHMpOworCQkvKgorCQkgKiBBZGQgdGhlIGNoYW5uZWwgdG8gdGhlIERNQUMgbGlzdC4gRG8gbm90IGFkZCBjaGFubmVsIDAgdGhvdWdoCisJCSAqIGJlY2F1c2Ugd2UgbmVlZCBpdCBpbnRlcm5hbGx5IGluIHRoZSBTRE1BIGRyaXZlci4gVGhpcyBhbHNvIG1lYW5zCisJCSAqIHRoYXQgY2hhbm5lbCAwIGluIGRtYWVuZ2luZSBjb3VudGluZyBtYXRjaGVzIHNkbWEgY2hhbm5lbCAxLgorCQkgKi8KKwkJaWYgKGkpCisJCQlsaXN0X2FkZF90YWlsKCZzZG1hYy0+Y2hhbi5kZXZpY2Vfbm9kZSwKKwkJCQkJJnNkbWEtPmRtYV9kZXZpY2UuY2hhbm5lbHMpOwogCX0KIAogCXJldCA9IHNkbWFfaW5pdChzZG1hKTsKQEAgLTEzMTcsNiArMTMyOCw4IEBACiAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfcHJlcF9kbWFfY3ljbGljID0gc2RtYV9wcmVwX2RtYV9jeWNsaWM7CiAJc2RtYS0+ZG1hX2RldmljZS5kZXZpY2VfY29udHJvbCA9IHNkbWFfY29udHJvbDsKIAlzZG1hLT5kbWFfZGV2aWNlLmRldmljZV9pc3N1ZV9wZW5kaW5nID0gc2RtYV9pc3N1ZV9wZW5kaW5nOworCXNkbWEtPmRtYV9kZXZpY2UuZGV2LT5kbWFfcGFybXMgPSAmc2RtYS0+ZG1hX3Bhcm1zOworCWRtYV9zZXRfbWF4X3NlZ19zaXplKHNkbWEtPmRtYV9kZXZpY2UuZGV2LCA2NTUzNSk7CiAKIAlyZXQgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZzZG1hLT5kbWFfZGV2aWNlKTsKIAlpZiAocmV0KSB7CkBAIC0xMzI0LDEzICsxMzM3LDYgQEAKIAkJZ290byBlcnJfaW5pdDsKIAl9CiAKLQkvKiByZXF1ZXN0IGNoYW5uZWwgMC4gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb250cm9sIGNoYW5uZWwKLQkgKiB0byB0aGUgU0RNQSBlbmdpbmUgYW5kIG5vdCBhdmFpbGFibGUgdG8gY2xpZW50cy4KLQkgKi8KLQlkbWFfY2FwX3plcm8obWFzayk7Ci0JZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBtYXNrKTsKLQlkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIE5VTEwsIE5VTEwpOwotCiAJZGV2X2luZm8oc2RtYS0+ZGV2LCAiaW5pdGlhbGl6ZWRcbiIpOwogCiAJcmV0dXJuIDA7CkBAIC0xMzQ4LDcgKzEzNTQsNyBAQAogZXJyX3JlcXVlc3RfcmVnaW9uOgogZXJyX2lycToKIAlrZnJlZShzZG1hKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBzZG1hX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCmluZGV4IGNiMjZlZTkuLmMxYTEyNWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCkBAIC0xMTQ1LDI5ICsxMTQ1LDYgQEAKIAlyZWcgPSBpZG1hY19yZWFkX2ljcmVnKGlwdSwgSURNQUNfQ0hBX0VOKTsKIAlpZG1hY193cml0ZV9pY3JlZyhpcHUsIHJlZyAmIH5jaGFuX21hc2ssIElETUFDX0NIQV9FTik7CiAKLQkvKgotCSAqIFByb2JsZW0gKG9ic2VydmVkIHdpdGggY2hhbm5lbCBETUFJQ183KTogYWZ0ZXIgZW5hYmxpbmcgdGhlIGNoYW5uZWwKLQkgKiBhbmQgaW5pdGlhbGlzaW5nIGJ1ZmZlcnMsIHRoZXJlIGNvbWVzIGFuIGludGVycnVwdCB3aXRoIGN1cnJlbnQgc3RpbGwKLQkgKiBwb2ludGluZyBhdCBidWZmZXIgMCwgd2hlcmVhcyBpdCBzaG91bGQgdXNlIGJ1ZmZlciAwIGZpcnN0IGFuZCBvbmx5Ci0JICogZ2VuZXJhdGUgYW4gaW50ZXJydXB0IHdoZW4gaXQgaXMgZG9uZSwgdGhlbiBjdXJyZW50IHNob3VsZCBhbHJlYWR5Ci0JICogcG9pbnQgdG8gYnVmZmVyIDEuIFRoaXMgc3B1cmlvdXMgaW50ZXJydXB0IGFsc28gY29tZXMgb24gY2hhbm5lbAotCSAqIERNQVNEQ18wLiBXaXRoIERNQUlDXzcgbm9ybWFsbHksIGlzIHdlIGp1c3QgbGVhdmUgdGhlIElTUiBhZnRlciB0aGUKLQkgKiBmaXJzdCBpbnRlcnJ1cHQsIHRoZXJlIGNvbWVzIHRoZSBzZWNvbmQgd2l0aCBjdXJyZW50IGNvcnJlY3RseQotCSAqIHBvaW50aW5nIHRvIGJ1ZmZlciAxIHRoaXMgdGltZS4gQnV0IHNvbWV0aW1lcyB0aGlzIHNlY29uZCBpbnRlcnJ1cHQKLQkgKiBkb2Vzbid0IGNvbWUgYW5kIHRoZSBjaGFubmVsIGhhbmdzLiBDbGVhcmluZyBCVUZ4X1JEWSB3aGVuIGRpc2FibGluZwotCSAqIHRoZSBjaGFubmVsIHNlZW1zIHRvIHByZXZlbnQgdGhlIGNoYW5uZWwgZnJvbSBoYW5naW5nLCBidXQgaXQgZG9lc24ndAotCSAqIHByZXZlbnQgdGhlIHNwdXJpb3VzIGludGVycnVwdC4gVGhpcyBtaWdodCBhbHNvIGJlIHVuc2FmZS4gVGhpbmsKLQkgKiBhYm91dCB0aGUgSURNQUMgY29udHJvbGxlciB0cnlpbmcgdG8gc3dpdGNoIHRvIGEgYnVmZmVyLCB3aGVuIHdlCi0JICogY2xlYXIgdGhlIHJlYWR5IGJpdCwgYW5kIHJlLWVuYWJsZSBpdCBhIG1vbWVudCBsYXRlci4KLQkgKi8KLQlyZWcgPSBpZG1hY19yZWFkX2lwdXJlZyhpcHUsIElQVV9DSEFfQlVGMF9SRFkpOwotCWlkbWFjX3dyaXRlX2lwdXJlZyhpcHUsIDAsIElQVV9DSEFfQlVGMF9SRFkpOwotCWlkbWFjX3dyaXRlX2lwdXJlZyhpcHUsIHJlZyAmIH4oMVVMIDw8IGNoYW5uZWwpLCBJUFVfQ0hBX0JVRjBfUkRZKTsKLQotCXJlZyA9IGlkbWFjX3JlYWRfaXB1cmVnKGlwdSwgSVBVX0NIQV9CVUYxX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgMCwgSVBVX0NIQV9CVUYxX1JEWSk7Ci0JaWRtYWNfd3JpdGVfaXB1cmVnKGlwdSwgcmVnICYgfigxVUwgPDwgY2hhbm5lbCksIElQVV9DSEFfQlVGMV9SRFkpOwotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXB1LT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKQEAgLTEyNDYsMzMgKzEyMjMsNiBAQAogCiAJLyogT3RoZXIgaW50ZXJydXB0cyBkbyBub3QgaW50ZXJmZXJlIHdpdGggdGhpcyBjaGFubmVsICovCiAJc3Bpbl9sb2NrKCZpY2hhbi0+bG9jayk7Ci0JaWYgKHVubGlrZWx5KGNoYW5faWQgIT0gSURNQUNfU0RDXzAgJiYgY2hhbl9pZCAhPSBJRE1BQ19TRENfMSAmJgotCQkgICAgICgoY3VyYnVmID4+IGNoYW5faWQpICYgMSkgPT0gaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYKLQkJICAgICAhbGlzdF9pc19sYXN0KGljaGFuLT5xdWV1ZS5uZXh0LCAmaWNoYW4tPnF1ZXVlKSkpIHsKLQkJaW50IGkgPSAxMDA7Ci0KLQkJLyogVGhpcyBkb2Vzbid0IGhlbHAuIFNlZSBjb21tZW50IGluIGlwdV9kaXNhYmxlX2NoYW5uZWwoKSAqLwotCQl3aGlsZSAoLS1pKSB7Ci0JCQljdXJidWYgPSBpZG1hY19yZWFkX2lwdXJlZygmaXB1X2RhdGEsIElQVV9DSEFfQ1VSX0JVRik7Ci0JCQlpZiAoKChjdXJidWYgPj4gY2hhbl9pZCkgJiAxKSAhPSBpY2hhbi0+YWN0aXZlX2J1ZmZlcikKLQkJCQlicmVhazsKLQkJCWNwdV9yZWxheCgpOwotCQl9Ci0KLQkJaWYgKCFpKSB7Ci0JCQlzcGluX3VubG9jaygmaWNoYW4tPmxvY2spOwotCQkJZGV2X2RiZyhkZXYsCi0JCQkJIklSUSBvbiBhY3RpdmUgYnVmZmVyIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCi0JCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXghXG4iLCBjaGFuX2lkLAotCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmKTsKLQkJCXJldHVybiBJUlFfTk9ORTsKLQkJfSBlbHNlCi0JCQlkZXZfZGJnKGRldiwKLQkJCQkiQnVmZmVyIGRlYWN0aXZhdGVkIG9uIGNoYW5uZWwgJXgsIGFjdGl2ZSAiCi0JCQkJIiVkLCByZWFkeSAleCwgJXgsIGN1cnJlbnQgJXgsIHJlc3QgJWQhXG4iLCBjaGFuX2lkLAotCQkJCWljaGFuLT5hY3RpdmVfYnVmZmVyLCByZWFkeTAsIHJlYWR5MSwgY3VyYnVmLCBpKTsKLQl9Ci0KIAlpZiAodW5saWtlbHkoKGljaGFuLT5hY3RpdmVfYnVmZmVyICYmIChyZWFkeTEgPj4gY2hhbl9pZCkgJiAxKSB8fAogCQkgICAgICghaWNoYW4tPmFjdGl2ZV9idWZmZXIgJiYgKHJlYWR5MCA+PiBjaGFuX2lkKSAmIDEpCiAJCSAgICAgKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggNGE1ZWNjNS4uMjNlMDM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC04MjYsOCArODI2LDYgQEAKIC8qIERpc3BsYXkgYW5kIGRlY29kZSB2YXJpb3VzIE5CIHJlZ2lzdGVycyBmb3IgZGVidWcgcHVycG9zZXMuICovCiBzdGF0aWMgdm9pZCBhbWQ2NF9kdW1wX21pc2NfcmVncyhzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQpCiB7Ci0JaW50IGdhbmdlZDsKLQogCWRlYnVnZjEoIkYzeEU4IChOQiBDYXApOiAweCUwOHhcbiIsIHB2dC0+bmJjYXApOwogCiAJZGVidWdmMSgiICBOQiB0d28gY2hhbm5lbCBEUkFNIGNhcGFibGU6ICVzXG4iLApAQCAtODUxLDI4ICs4NDksMTkgQEAKIAlkZWJ1Z2YxKCIgIERyYW1Ib2xlVmFsaWQ6ICVzXG4iLAogCQkocHZ0LT5kaGFyICYgREhBUl9WQUxJRCkgPyAieWVzIiA6ICJubyIpOwogCisJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDAsIHB2dCk7CisKIAkvKiBldmVyeXRoaW5nIGJlbG93IHRoaXMgcG9pbnQgaXMgRmFtMTBoIGFuZCBhYm92ZSAqLwotCWlmIChib290X2NwdV9kYXRhLng4NiA9PSAweGYpIHsKLQkJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDAsIHB2dCk7CisJaWYgKGJvb3RfY3B1X2RhdGEueDg2ID09IDB4ZikKIAkJcmV0dXJuOwotCX0KKworCWFtZDY0X2RlYnVnX2Rpc3BsYXlfZGltbV9zaXplcygxLCBwdnQpOwogCiAJYW1kNjRfaW5mbygidXNpbmcgJXMgc3luZHJvbWVzLlxuIiwgKChwdnQtPnN5bl90eXBlID09IDgpID8gIng4IiA6ICJ4NCIpKTsKIAogCS8qIE9ubHkgaWYgTk9UIGdhbmdlZCBkb2VzIGRjbHIxIGhhdmUgdmFsaWQgaW5mbyAqLwogCWlmICghZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpKQogCQlhbWQ2NF9kdW1wX2RyYW1jZmdfbG93KHB2dC0+ZGNscjEsIDEpOwotCi0JLyoKLQkgKiBEZXRlcm1pbmUgaWYgZ2FuZ2VkIGFuZCB0aGVuIGR1bXAgbWVtb3J5IHNpemVzIGZvciBmaXJzdCBjb250cm9sbGVyLAotCSAqIGFuZCBpZiBOT1QgZ2FuZ2VkIGR1bXAgaW5mbyBmb3IgMm5kIGNvbnRyb2xsZXIuCi0JICovCi0JZ2FuZ2VkID0gZGN0X2dhbmdpbmdfZW5hYmxlZChwdnQpOwotCi0JYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDAsIHB2dCk7Ci0KLQlpZiAoIWdhbmdlZCkKLQkJYW1kNjRfZGVidWdfZGlzcGxheV9kaW1tX3NpemVzKDEsIHB2dCk7CiB9CiAKIC8qIFJlYWQgaW4gYm90aCBvZiBEQkFNIHJlZ2lzdGVycyAqLwpAQCAtMTY0NCwxMSArMTYzMywxMCBAQAogCQkgICAgICAgV0FSTl9PTihjdHJsICE9IDApOwogCX0KIAotCWRlYnVnZjEoIkYyeCVkODAgKERSQU0gQmFuayBBZGRyZXNzIE1hcHBpbmcpOiAweCUwOHhcbiIsCi0JCWN0cmwsIGN0cmwgPyBwdnQtPmRiYW0xIDogcHZ0LT5kYmFtMCk7CisJZGJhbSA9IChjdHJsICYmICFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpID8gcHZ0LT5kYmFtMSA6IHB2dC0+ZGJhbTA7CisJZGNzYiA9IChjdHJsICYmICFkY3RfZ2FuZ2luZ19lbmFibGVkKHB2dCkpID8gcHZ0LT5kY3NiMSA6IHB2dC0+ZGNzYjA7CiAKLQlkYmFtID0gY3RybCA/IHB2dC0+ZGJhbTEgOiBwdnQtPmRiYW0wOwotCWRjc2IgPSBjdHJsID8gcHZ0LT5kY3NiMSA6IHB2dC0+ZGNzYjA7CisJZGVidWdmMSgiRjJ4JWQ4MCAoRFJBTSBCYW5rIEFkZHJlc3MgTWFwcGluZyk6IDB4JTA4eFxuIiwgY3RybCwgZGJhbSk7CiAKIAllZGFjX3ByaW50ayhLRVJOX0RFQlVHLCBFREFDX01DLCAiRENUJWQgY2hpcCBzZWxlY3RzOlxuIiwgY3RybCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwppbmRleCBlMjhlNDE2NjguLmJjYjExMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYworKysgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKQEAgLTM3OCwxMCArMzc4LDE3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkbWlfZHVtcF9pZHModm9pZCkKIHsKKwljb25zdCBjaGFyICpib2FyZDsJLyogQm9hcmQgTmFtZSBpcyBvcHRpb25hbCAqLworCiAJcHJpbnRrKEtFUk5fREVCVUcgIkRNSTogIik7Ci0JcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSkpOwotCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwlwcmludF9maWx0ZXJlZChkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9TWVNfVkVORE9SKSk7CisJcHJpbnRrKEtFUk5fQ09OVCAiICIpOwogCXByaW50X2ZpbHRlcmVkKGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX1BST0RVQ1RfTkFNRSkpOworCWJvYXJkID0gZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQk9BUkRfTkFNRSk7CisJaWYgKGJvYXJkKSB7CisJCXByaW50ayhLRVJOX0NPTlQgIi8iKTsKKwkJcHJpbnRfZmlsdGVyZWQoYm9hcmQpOworCX0KIAlwcmludGsoS0VSTl9DT05UICIsIEJJT1MgIik7CiAJcHJpbnRfZmlsdGVyZWQoZG1pX2dldF9zeXN0ZW1faW5mbyhETUlfQklPU19WRVJTSU9OKSk7CiAJcHJpbnRrKEtFUk5fQ09OVCAiICIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9sYW5nd2VsbF9ncGlvLmMKaW5kZXggZDgxY2M3NC4uNTRkNzBhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2xhbmd3ZWxsX2dwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vbGFuZ3dlbGxfZ3Bpby5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAogc3RhdGljIHZvaWQgbG53X2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewotCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gKHN0cnVjdCBsbndfZ3BpbyAqKWdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBsbndfZ3BpbyAqbG53ID0gZ2V0X2lycV9kYXRhKGlycSk7CiAJdTMyIGJhc2UsIGdwaW87CiAJdm9pZCBfX2lvbWVtICpnZWRyOwogCXUzMiBnZWRyX3Y7CkBAIC0yMDYsNyArMjA2LDEyIEBACiAJCS8qIGNsZWFyIHRoZSBlZGdlIGRldGVjdCBzdGF0dXMgYml0ICovCiAJCXdyaXRlbChnZWRyX3YsIGdlZHIpOwogCX0KLQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKKworCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQorCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7CisJZWxzZQorCQlkZXZfd2FybihsbnctPmNoaXAuZGV2LCAibWlzc2luZyBFT0kgaGFuZGxlciBmb3IgaXJxICVkXG4iLCBpcnEpOworCiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGxud19ncGlvX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3BjYTk1M3guYyBiL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKaW5kZXggYTI2MTk3Mi4uYjQ3MzQyOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtNjAsNiArNjAsNyBAQAogCXVuc2lnbmVkIGdwaW9fc3RhcnQ7CiAJdWludDE2X3QgcmVnX291dHB1dDsKIAl1aW50MTZfdCByZWdfZGlyZWN0aW9uOworCXN0cnVjdCBtdXRleCBpMmNfbG9jazsKIAogI2lmZGVmIENPTkZJR19HUElPX1BDQTk1M1hfSVJRCiAJc3RydWN0IG11dGV4IGlycV9sb2NrOwpAQCAtMTE5LDEzICsxMjAsMTcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJcmVnX3ZhbCA9IGNoaXAtPnJlZ19kaXJlY3Rpb24gfCAoMXUgPDwgb2ZmKTsKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX0RJUkVDVElPTiwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwkJZ290byBleGl0OwogCiAJY2hpcC0+cmVnX2RpcmVjdGlvbiA9IHJlZ192YWw7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBwY2E5NTN4X2dwaW9fZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKQEAgLTEzNyw2ICsxNDIsNyBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAkvKiBzZXQgb3V0cHV0IGxldmVsICovCiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKQEAgLTE0NSw3ICsxNTEsNyBAQAogCiAJcmV0ID0gcGNhOTUzeF93cml0ZV9yZWcoY2hpcCwgUENBOTUzWF9PVVRQVVQsIHJlZ192YWwpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXhpdDsKIAogCWNoaXAtPnJlZ19vdXRwdXQgPSByZWdfdmFsOwogCkBAIC0xNTMsMTAgKzE1OSwxMyBAQAogCXJlZ192YWwgPSBjaGlwLT5yZWdfZGlyZWN0aW9uICYgfigxdSA8PCBvZmYpOwogCXJldCA9IHBjYTk1M3hfd3JpdGVfcmVnKGNoaXAsIFBDQTk1M1hfRElSRUNUSU9OLCByZWdfdmFsKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfZGlyZWN0aW9uID0gcmVnX3ZhbDsKLQlyZXR1cm4gMDsKKwlyZXQgPSAwOworZXhpdDoKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb19nZXRfdmFsdWUoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKQEAgLTE2Nyw3ICsxNzYsOSBAQAogCiAJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKIAorCW11dGV4X2xvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlyZXQgPSBwY2E5NTN4X3JlYWRfcmVnKGNoaXAsIFBDQTk1M1hfSU5QVVQsICZyZWdfdmFsKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmkyY19sb2NrKTsKIAlpZiAocmV0IDwgMCkgewogCQkvKiBOT1RFOiAgZGlhZ25vc3RpYyBhbHJlYWR5IGVtaXR0ZWQ7IHRoYXQncyBhbGwgd2Ugc2hvdWxkCiAJCSAqIGRvIHVubGVzcyBncGlvXypfdmFsdWVfY2Fuc2xlZXAoKSBjYWxscyBiZWNvbWUgZGlmZmVyZW50CkBAIC0xODcsNiArMTk4LDcgQEAKIAogCWNoaXAgPSBjb250YWluZXJfb2YoZ2MsIHN0cnVjdCBwY2E5NTN4X2NoaXAsIGdwaW9fY2hpcCk7CiAKKwltdXRleF9sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiAJaWYgKHZhbCkKIAkJcmVnX3ZhbCA9IGNoaXAtPnJlZ19vdXRwdXQgfCAoMXUgPDwgb2ZmKTsKIAllbHNlCkBAIC0xOTQsOSArMjA2LDExIEBACiAKIAlyZXQgPSBwY2E5NTN4X3dyaXRlX3JlZyhjaGlwLCBQQ0E5NTNYX09VVFBVVCwgcmVnX3ZhbCk7CiAJaWYgKHJldCkKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAKIAljaGlwLT5yZWdfb3V0cHV0ID0gcmVnX3ZhbDsKK2V4aXQ6CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pMmNfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIHBjYTk1M3hfc2V0dXBfZ3BpbyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLCBpbnQgZ3Bpb3MpCkBAIC01MTcsNiArNTMxLDggQEAKIAogCWNoaXAtPm5hbWVzID0gcGRhdGEtPm5hbWVzOwogCisJbXV0ZXhfaW5pdCgmY2hpcC0+aTJjX2xvY2spOworCiAJLyogaW5pdGlhbGl6ZSBjYWNoZWQgcmVnaXN0ZXJzIGZyb20gdGhlaXIgb3JpZ2luYWwgdmFsdWVzLgogCSAqIHdlIGNhbid0IHNoYXJlIHRoaXMgY2hpcCB3aXRoIGFub3RoZXIgaTJjIG1hc3Rlci4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKaW5kZXggYmVhOTY2Zi4uMDkwMmQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKKysrIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKQEAgLTEwMCw3ICsxMDAsMTAgQEAKIGNvbmZpZyBEUk1fSTkxNQogCXRyaXN0YXRlICJpOTE1IGRyaXZlciIKIAlkZXBlbmRzIG9uIEFHUF9JTlRFTAorCSMgd2UgbmVlZCBzaG1mcyBmb3IgdGhlIHN3YXBwYWJsZSBiYWNraW5nIHN0b3JlLCBhbmQgaW4gcGFydGljdWxhcgorCSMgdGhlIHNobWVtX3JlYWRwYWdlKCkgd2hpY2ggZGVwZW5kcyB1cG9uIHRtcGZzCiAJc2VsZWN0IFNITUVNCisJc2VsZWN0IFRNUEZTCiAJc2VsZWN0IERSTV9LTVNfSEVMUEVSCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKaW5kZXggMmJhYTY3MC4uNjU0ZmFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKQEAgLTI2NzQsMyArMjY3NCwyMyBAQAogCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KKwordm9pZCBkcm1fbW9kZV9jb25maWdfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkKKwkJaWYgKGNydGMtPmZ1bmNzLT5yZXNldCkKKwkJCWNydGMtPmZ1bmNzLT5yZXNldChjcnRjKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJmRldi0+bW9kZV9jb25maWcuZW5jb2Rlcl9saXN0LCBoZWFkKQorCQlpZiAoZW5jb2Rlci0+ZnVuY3MtPnJlc2V0KQorCQkJZW5jb2Rlci0+ZnVuY3MtPnJlc2V0KGVuY29kZXIpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb25uZWN0b3IsICZkZXYtPm1vZGVfY29uZmlnLmNvbm5lY3Rvcl9saXN0LCBoZWFkKQorCQlpZiAoY29ubmVjdG9yLT5mdW5jcy0+cmVzZXQpCisJCQljb25uZWN0b3ItPmZ1bmNzLT5yZXNldChjb25uZWN0b3IpOworfQorRVhQT1JUX1NZTUJPTChkcm1fbW9kZV9jb25maWdfcmVzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDk1MmIzZDQuLjkyMzY5NjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCkBAIC0zNDMsMTMgKzM0MywxMiBAQAogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKIAlib29sIHJldCA9IHRydWU7CiAKLQlhZGp1c3RlZF9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbW9kZSk7Ci0KIAljcnRjLT5lbmFibGVkID0gZHJtX2hlbHBlcl9jcnRjX2luX3VzZShjcnRjKTsKLQogCWlmICghY3J0Yy0+ZW5hYmxlZCkKIAkJcmV0dXJuIHRydWU7CiAKKwlhZGp1c3RlZF9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgbW9kZSk7CisKIAlzYXZlZF9od21vZGUgPSBjcnRjLT5od21vZGU7CiAJc2F2ZWRfbW9kZSA9IGNydGMtPm1vZGU7CiAJc2F2ZWRfeCA9IGNydGMtPng7CkBAIC00MzcsMTAgKzQzNiw5IEBACiAJICovCiAJZHJtX2NhbGNfdGltZXN0YW1waW5nX2NvbnN0YW50cyhjcnRjKTsKIAotCS8qIFhYWCBmcmVlIGFkanVzdGVkbW9kZSAqLwotCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBhZGp1c3RlZF9tb2RlKTsKIAkvKiBGSVhNRTogYWRkIHN1YnBpeGVsIG9yZGVyICovCiBkb25lOgorCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBhZGp1c3RlZF9tb2RlKTsKIAlpZiAoIXJldCkgewogCQljcnRjLT5od21vZGUgPSBzYXZlZF9od21vZGU7CiAJCWNydGMtPm1vZGUgPSBzYXZlZF9tb2RlOwpAQCAtNDk3LDE0ICs0OTUsMTcgQEAKIAogCWNydGNfZnVuY3MgPSBzZXQtPmNydGMtPmhlbHBlcl9wcml2YXRlOwogCisJaWYgKCFzZXQtPm1vZGUpCisJCXNldC0+ZmIgPSBOVUxMOworCiAJaWYgKHNldC0+ZmIpIHsKIAkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtGQjolZF0gI2Nvbm5lY3RvcnM9JWQgKHggeSkgKCVpICVpKVxuIiwKIAkJCQlzZXQtPmNydGMtPmJhc2UuaWQsIHNldC0+ZmItPmJhc2UuaWQsCiAJCQkJKGludClzZXQtPm51bV9jb25uZWN0b3JzLCBzZXQtPngsIHNldC0+eSk7CiAJfSBlbHNlIHsKLQkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtOT0ZCXSAjY29ubmVjdG9ycz0lZCAoeCB5KSAoJWkgJWkpXG4iLAotCQkJCXNldC0+Y3J0Yy0+YmFzZS5pZCwgKGludClzZXQtPm51bV9jb25uZWN0b3JzLAotCQkJCXNldC0+eCwgc2V0LT55KTsKKwkJRFJNX0RFQlVHX0tNUygiW0NSVEM6JWRdIFtOT0ZCXVxuIiwgc2V0LT5jcnRjLT5iYXNlLmlkKTsKKwkJc2V0LT5tb2RlID0gTlVMTDsKKwkJc2V0LT5udW1fY29ubmVjdG9ycyA9IDA7CiAJfQogCiAJZGV2ID0gc2V0LT5jcnRjLT5kZXY7CkBAIC02NDksOCArNjUwLDggQEAKIAkJbW9kZV9jaGFuZ2VkID0gdHJ1ZTsKIAogCWlmIChtb2RlX2NoYW5nZWQpIHsKLQkJc2V0LT5jcnRjLT5lbmFibGVkID0gKHNldC0+bW9kZSAhPSBOVUxMKTsKLQkJaWYgKHNldC0+bW9kZSAhPSBOVUxMKSB7CisJCXNldC0+Y3J0Yy0+ZW5hYmxlZCA9IGRybV9oZWxwZXJfY3J0Y19pbl91c2Uoc2V0LT5jcnRjKTsKKwkJaWYgKHNldC0+Y3J0Yy0+ZW5hYmxlZCkgewogCQkJRFJNX0RFQlVHX0tNUygiYXR0ZW1wdGluZyB0byBzZXQgbW9kZSBmcm9tIgogCQkJCQkiIHVzZXJzcGFjZVxuIik7CiAJCQlkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHNldC0+bW9kZSk7CkBAIC02NjUsNiArNjY2LDEyIEBACiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIGZhaWw7CiAJCQl9CisJCQlEUk1fREVCVUdfS01TKCJTZXR0aW5nIGNvbm5lY3RvciBEUE1TIHN0YXRlIHRvIG9uXG4iKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBzZXQtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKKwkJCQlEUk1fREVCVUdfS01TKCJcdFtDT05ORUNUT1I6JWQ6JXNdIHNldCBEUE1TIG9uXG4iLCBzZXQtPmNvbm5lY3RvcnNbaV0tPmJhc2UuaWQsCisJCQkJCSAgICAgIGRybV9nZXRfY29ubmVjdG9yX25hbWUoc2V0LT5jb25uZWN0b3JzW2ldKSk7CisJCQkJc2V0LT5jb25uZWN0b3JzW2ldLT5kcG1zID0gRFJNX01PREVfRFBNU19PTjsKKwkJCX0KIAkJfQogCQlkcm1faGVscGVyX2Rpc2FibGVfdW51c2VkX2Z1bmN0aW9ucyhkZXYpOwogCX0gZWxzZSBpZiAoZmJfY2hhbmdlZCkgewpAQCAtNjgxLDEyICs2ODgsNiBAQAogCQkJZ290byBmYWlsOwogCQl9CiAJfQotCURSTV9ERUJVR19LTVMoIlNldHRpbmcgY29ubmVjdG9yIERQTVMgc3RhdGUgdG8gb25cbiIpOwotCWZvciAoaSA9IDA7IGkgPCBzZXQtPm51bV9jb25uZWN0b3JzOyBpKyspIHsKLQkJRFJNX0RFQlVHX0tNUygiXHRbQ09OTkVDVE9SOiVkOiVzXSBzZXQgRFBNUyBvblxuIiwgc2V0LT5jb25uZWN0b3JzW2ldLT5iYXNlLmlkLAotCQkJICAgICAgZHJtX2dldF9jb25uZWN0b3JfbmFtZShzZXQtPmNvbm5lY3RvcnNbaV0pKTsKLQkJc2V0LT5jb25uZWN0b3JzW2ldLT5kcG1zID0gRFJNX01PREVfRFBNU19PTjsKLQl9CiAKIAlrZnJlZShzYXZlX2Nvbm5lY3RvcnMpOwogCWtmcmVlKHNhdmVfZW5jb2RlcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggNjk3N2ExYy4uZjczZWY0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCkBAIC02NzIsNyArNjcyLDcgQEAKIAlzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzICpjcnRjX2Z1bmNzOwogCXUxNiAqcmVkLCAqZ3JlZW4sICpibHVlLCAqdHJhbnNwOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKLQlpbnQgaSwgcmMgPSAwOworCWludCBpLCBqLCByYyA9IDA7CiAJaW50IHN0YXJ0OwogCiAJZm9yIChpID0gMDsgaSA8IGZiX2hlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7CkBAIC02ODUsNyArNjg1LDcgQEAKIAkJdHJhbnNwID0gY21hcC0+dHJhbnNwOwogCQlzdGFydCA9IGNtYXAtPnN0YXJ0OwogCi0JCWZvciAoaSA9IDA7IGkgPCBjbWFwLT5sZW47IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgY21hcC0+bGVuOyBqKyspIHsKIAkJCXUxNiBocmVkLCBoZ3JlZW4sIGhibHVlLCBodHJhbnNwID0gMHhmZmZmOwogCiAJCQlocmVkID0gKnJlZCsrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pbmZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYwppbmRleCAzY2RiYWYzLi5iZTlhOWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYwpAQCAtMjgzLDE3ICsyODMsMTggQEAKICNlbmRpZgogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCXNlcV9wcmludGYobSwgInZtYSB1c2UgY291bnQ6ICVkLCBoaWdoX21lbW9yeSA9ICVwLCAweCUwOGxseFxuIiwKKwlzZXFfcHJpbnRmKG0sICJ2bWEgdXNlIGNvdW50OiAlZCwgaGlnaF9tZW1vcnkgPSAlcEssIDB4JXBLXG4iLAogCQkgICBhdG9taWNfcmVhZCgmZGV2LT52bWFfY291bnQpLAotCQkgICBoaWdoX21lbW9yeSwgKHU2NCl2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpKTsKKwkJICAgaGlnaF9tZW1vcnksICh2b2lkICopdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0LCAmZGV2LT52bWFsaXN0LCBoZWFkKSB7CiAJCXZtYSA9IHB0LT52bWE7CiAJCWlmICghdm1hKQogCQkJY29udGludWU7CiAJCXNlcV9wcmludGYobSwKLQkJCSAgICJcbiU1ZCAweCUwOGx4LTB4JTA4bHggJWMlYyVjJWMlYyVjIDB4JTA4bHgwMDAiLAotCQkJICAgcHQtPnBpZCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsCisJCQkgICAiXG4lNWQgMHglcEstMHglcEsgJWMlYyVjJWMlYyVjIDB4JTA4bHgwMDAiLAorCQkJICAgcHQtPnBpZCwKKwkJCSAgICh2b2lkICopdm1hLT52bV9zdGFydCwgKHZvaWQgKil2bWEtPnZtX2VuZCwKIAkJCSAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEID8gJ3InIDogJy0nLAogCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAogCQkJICAgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMgPyAneCcgOiAnLScsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYwppbmRleCAwMDU0ZTk1Li4yOGQxZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKQEAgLTE2NCw4ICsxNjQsMTAgQEAKIAkgKiBhdmFpbGFibGUuIEluIHRoYXQgY2FzZSB3ZSBjYW4ndCBhY2NvdW50IGZvciB0aGlzIGFuZCBqdXN0CiAJICogaG9wZSBmb3IgdGhlIGJlc3QuCiAJICovCi0JaWYgKCh2YmxyYyA+IDApICYmIChhYnMoZGlmZl9ucykgPiAxMDAwMDAwKSkKKwlpZiAoKHZibHJjID4gMCkgJiYgKGFiczY0KGRpZmZfbnMpID4gMTAwMDAwMCkpIHsKIAkJYXRvbWljX2luYygmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CisJfQogCiAJLyogSW52YWxpZGF0ZSBhbGwgdGltZXN0YW1wcyB3aGlsZSB2YmxhbmsgaXJxJ3MgYXJlIG9mZi4gKi8KIAljbGVhcl92YmxhbmtfdGltZXN0YW1wcyhkZXYsIGNydGMpOwpAQCAtNDkxLDYgKzQ5MywxMiBAQAogCS8qIERvdCBjbG9jayBpbiBIejogKi8KIAlkb3RjbG9jayA9ICh1NjQpIGNydGMtPmh3bW9kZS5jbG9jayAqIDEwMDA7CiAKKwkvKiBGaWVsZHMgb2YgaW50ZXJsYWNlZCBzY2Fub3V0IG1vZGVzIGFyZSBvbmx5IGhhbHZlIGEgZnJhbWUgZHVyYXRpb24uCisJICogRG91YmxlIHRoZSBkb3RjbG9jayB0byBnZXQgaGFsdmUgdGhlIGZyYW1lLS9saW5lLS9waXhlbGR1cmF0aW9uLgorCSAqLworCWlmIChjcnRjLT5od21vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJZG90Y2xvY2sgKj0gMjsKKwogCS8qIFZhbGlkIGRvdGNsb2NrPyAqLwogCWlmIChkb3RjbG9jayA+IDApIHsKIAkJLyogQ29udmVydCBzY2FubGluZSBsZW5ndGggaW4gcGl4ZWxzIGFuZCB2aWRlbyBkb3QgY2xvY2sgdG8KQEAgLTYwMywxNCArNjExLDYgQEAKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQogCi0JLyogRG9uJ3Qga25vdyB5ZXQgaG93IHRvIGhhbmRsZSBpbnRlcmxhY2VkIG9yCi0JICogZG91YmxlIHNjYW4gbW9kZXMuIEp1c3Qgbm8tb3AgZm9yIG5vdy4KLQkgKi8KLQlpZiAobW9kZS0+ZmxhZ3MgJiAoRFJNX01PREVfRkxBR19JTlRFUkxBQ0UgfCBEUk1fTU9ERV9GTEFHX0RCTFNDQU4pKSB7Ci0JCURSTV9ERUJVRygiY3J0YyAlZDogTm9vcCBkdWUgdG8gdW5zdXBwb3J0ZWQgbW9kZS5cbiIsIGNydGMpOwotCQlyZXR1cm4gLUVOT1RTVVBQOwotCX0KLQogCS8qIEdldCBjdXJyZW50IHNjYW5vdXQgcG9zaXRpb24gd2l0aCBzeXN0ZW0gdGltZXN0YW1wLgogCSAqIFJlcGVhdCBxdWVyeSB1cCB0byBEUk1fVElNRVNUQU1QX01BWFJFVFJJRVMgdGltZXMKIAkgKiBpZiBzaW5nbGUgcXVlcnkgdGFrZXMgbG9uZ2VyIHRoYW4gbWF4X2Vycm9yIG5hbm9zZWNvbmRzLgpAQCAtODU4LDEwICs4NTgsMTEgQEAKIAlpZiAocmMpIHsKIAkJdHNsb3QgPSBhdG9taWNfcmVhZCgmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKSArIGRpZmY7CiAJCXZibGFua3RpbWVzdGFtcChkZXYsIGNydGMsIHRzbG90KSA9IHRfdmJsYW5rOwotCQlzbXBfd21iKCk7CiAJfQogCisJc21wX21iX19iZWZvcmVfYXRvbWljX2luYygpOwogCWF0b21pY19hZGQoZGlmZiwgJmRldi0+X3ZibGFua19jb3VudFtjcnRjXSk7CisJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CiB9CiAKIC8qKgpAQCAtMTAxMSw3ICsxMDEyLDggQEAKIAkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fbW9kZXNldF9jdGwgKm1vZGVzZXQgPSBkYXRhOwotCWludCBjcnRjLCByZXQgPSAwOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGludCBjcnRjOwogCiAJLyogSWYgZHJtX3ZibGFua19pbml0KCkgaGFzbid0IGJlZW4gY2FsbGVkIHlldCwganVzdCBuby1vcCAqLwogCWlmICghZGV2LT5udW1fY3J0Y3MpCkBAIC0xMjUwLDcgKzEyNTIsNyBAQAogICogRHJpdmVycyBzaG91bGQgY2FsbCB0aGlzIHJvdXRpbmUgaW4gdGhlaXIgdmJsYW5rIGludGVycnVwdCBoYW5kbGVycyB0bwogICogdXBkYXRlIHRoZSB2YmxhbmsgY291bnRlciBhbmQgc2VuZCBhbnkgc2lnbmFscyB0aGF0IG1heSBiZSBwZW5kaW5nLgogICovCi12b2lkIGRybV9oYW5kbGVfdmJsYW5rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQorYm9vbCBkcm1faGFuZGxlX3ZibGFuayhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0YykKIHsKIAl1MzIgdmJsY291bnQ7CiAJczY0IGRpZmZfbnM7CkBAIC0xMjU4LDcgKzEyNjAsNyBAQAogCXVuc2lnbmVkIGxvbmcgaXJxZmxhZ3M7CiAKIAlpZiAoIWRldi0+bnVtX2NydGNzKQotCQlyZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAogCS8qIE5lZWQgdGltZXN0YW1wIGxvY2sgdG8gcHJldmVudCBjb25jdXJyZW50IGV4ZWN1dGlvbiB3aXRoCiAJICogdmJsYW5rIGVuYWJsZS9kaXNhYmxlLCBhcyB0aGlzIHdvdWxkIGNhdXNlIGluY29uc2lzdGVudApAQCAtMTI2OSw3ICsxMjcxLDcgQEAKIAkvKiBWYmxhbmsgaXJxIGhhbmRsaW5nIGRpc2FibGVkLiBOb3RoaW5nIHRvIGRvLiAqLwogCWlmICghZGV2LT52YmxhbmtfZW5hYmxlZFtjcnRjXSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnZibGFua190aW1lX2xvY2ssIGlycWZsYWdzKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJLyogRmV0Y2ggY29ycmVzcG9uZGluZyB0aW1lc3RhbXAgZm9yIHRoaXMgdmJsYW5rIGludGVydmFsIGZyb20KQEAgLTEyOTMsMTUgKzEyOTUsMTYgQEAKIAkgKiBlLmcuLCBkdWUgdG8gc3B1cmlvdXMgdmJsYW5rIGludGVycnVwdHMuIFdlIG5lZWQgdG8KIAkgKiBpZ25vcmUgdGhvc2UgZm9yIGFjY291bnRpbmcuCiAJICovCi0JaWYgKGFicyhkaWZmX25zKSA+IERSTV9SRURVTkRBTlRfVkJMSVJRX1RIUkVTSF9OUykgeworCWlmIChhYnM2NChkaWZmX25zKSA+IERSTV9SRURVTkRBTlRfVkJMSVJRX1RIUkVTSF9OUykgewogCQkvKiBTdG9yZSBuZXcgdGltZXN0YW1wIGluIHJpbmdidWZmZXIuICovCiAJCXZibGFua3RpbWVzdGFtcChkZXYsIGNydGMsIHZibGNvdW50ICsgMSkgPSB0dmJsYW5rOwotCQlzbXBfd21iKCk7CiAKIAkJLyogSW5jcmVtZW50IGNvb2tlZCB2YmxhbmsgY291bnQuIFRoaXMgYWxzbyBhdG9taWNhbGx5IGNvbW1pdHMKIAkJICogdGhlIHRpbWVzdGFtcCBjb21wdXRlZCBhYm92ZS4KIAkJICovCisJCXNtcF9tYl9fYmVmb3JlX2F0b21pY19pbmMoKTsKIAkJYXRvbWljX2luYygmZGV2LT5fdmJsYW5rX2NvdW50W2NydGNdKTsKKwkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7CiAJfSBlbHNlIHsKIAkJRFJNX0RFQlVHKCJjcnRjICVkOiBSZWR1bmRhbnQgdmJsaXJxIGlnbm9yZWQuIGRpZmZfbnMgPSAlZFxuIiwKIAkJCSAgY3J0YywgKGludCkgZGlmZl9ucyk7CkBAIC0xMzExLDUgKzEzMTQsNiBAQAogCWRybV9oYW5kbGVfdmJsYW5rX2V2ZW50cyhkZXYsIGNydGMpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT52YmxhbmtfdGltZV9sb2NrLCBpcnFmbGFncyk7CisJcmV0dXJuIHRydWU7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9oYW5kbGVfdmJsYW5rKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKaW5kZXggMzYwMTQ2Ni4uNGZmOWI2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMKQEAgLTg2NSw3ICs4NjUsNyBAQAogCQlpbnQgbWF4X2ZyZXE7CiAKIAkJLyogUlBTVEFUMSBpcyBpbiB0aGUgR1QgcG93ZXIgd2VsbCAqLwotCQlfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOworCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOwogCiAJCXNlcV9wcmludGYobSwgIkdUX1BFUkZfU1RBVFVTOiAweCUwOHhcbiIsIGd0X3BlcmZfc3RhdHVzKTsKIAkJc2VxX3ByaW50ZihtLCAiUlBTVEFUMTogMHglMDh4XG4iLCBJOTE1X1JFQUQoR0VONl9SUFNUQVQxKSk7CkBAIC04ODgsNyArODg4LDcgQEAKIAkJc2VxX3ByaW50ZihtLCAiTWF4IG5vbi1vdmVyY2xvY2tlZCAoUlAwKSBmcmVxdWVuY3k6ICVkTUh6XG4iLAogCQkJICAgbWF4X2ZyZXEgKiAxMDApOwogCi0JCV9fZ2VuNl9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CisJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CiAJfSBlbHNlIHsKIAkJc2VxX3ByaW50ZihtLCAibm8gUC1zdGF0ZSBpbmZvIGF2YWlsYWJsZVxuIik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggODQ0ZjNjOS4uZTMzZDliZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZGV2LT5wcmltYXJ5LT5tYXN0ZXItPmRyaXZlcl9wcml2OwotCXN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZyA9IExQX1JJTkcoZGV2X3ByaXYpOworCWludCByZXQ7CiAKIAltYXN0ZXJfcHJpdi0+c2FyZWEgPSBkcm1fZ2V0c2FyZWEoZGV2KTsKIAlpZiAobWFzdGVyX3ByaXYtPnNhcmVhKSB7CkBAIC0xNjMsMzMgKzE2MywyMiBAQAogCX0KIAogCWlmIChpbml0LT5yaW5nX3NpemUgIT0gMCkgewotCQlpZiAocmluZy0+b2JqICE9IE5VTEwpIHsKKwkJaWYgKExQX1JJTkcoZGV2X3ByaXYpLT5vYmogIT0gTlVMTCkgewogCQkJaTkxNV9kbWFfY2xlYW51cChkZXYpOwogCQkJRFJNX0VSUk9SKCJDbGllbnQgdHJpZWQgdG8gaW5pdGlhbGl6ZSByaW5nYnVmZmVyIGluICIKIAkJCQkgICJHRU0gbW9kZVxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCi0JCXJpbmctPnNpemUgPSBpbml0LT5yaW5nX3NpemU7Ci0KLQkJcmluZy0+bWFwLm9mZnNldCA9IGluaXQtPnJpbmdfc3RhcnQ7Ci0JCXJpbmctPm1hcC5zaXplID0gaW5pdC0+cmluZ19zaXplOwotCQlyaW5nLT5tYXAudHlwZSA9IDA7Ci0JCXJpbmctPm1hcC5mbGFncyA9IDA7Ci0JCXJpbmctPm1hcC5tdHJyID0gMDsKLQotCQlkcm1fY29yZV9pb3JlbWFwX3djKCZyaW5nLT5tYXAsIGRldik7Ci0KLQkJaWYgKHJpbmctPm1hcC5oYW5kbGUgPT0gTlVMTCkgeworCQlyZXQgPSBpbnRlbF9yZW5kZXJfcmluZ19pbml0X2RyaShkZXYsCisJCQkJCQkgaW5pdC0+cmluZ19zdGFydCwKKwkJCQkJCSBpbml0LT5yaW5nX3NpemUpOworCQlpZiAocmV0KSB7CiAJCQlpOTE1X2RtYV9jbGVhbnVwKGRldik7Ci0JCQlEUk1fRVJST1IoImNhbiBub3QgaW9yZW1hcCB2aXJ0dWFsIGFkZHJlc3MgZm9yIgotCQkJCSAgIiByaW5nIGJ1ZmZlclxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwkJCXJldHVybiByZXQ7CiAJCX0KIAl9CiAKLQlyaW5nLT52aXJ0dWFsX3N0YXJ0ID0gcmluZy0+bWFwLmhhbmRsZTsKLQogCWRldl9wcml2LT5jcHAgPSBpbml0LT5jcHA7CiAJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CiAJZGV2X3ByaXYtPmZyb250X29mZnNldCA9IGluaXQtPmZyb250X29mZnNldDsKQEAgLTEyMjYsOSArMTIxNSwxNSBAQAogCWlmIChyZXQpCiAJCURSTV9JTkZPKCJmYWlsZWQgdG8gZmluZCBWQklPUyB0YWJsZXNcbiIpOwogCi0JLyogaWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIGRpc2FibGUgdGhlIHJhZGVvbiBWR0EgcmVzb3VyY2VzICovCisJLyogSWYgd2UgaGF2ZSA+IDEgVkdBIGNhcmRzLCB0aGVuIHdlIG5lZWQgdG8gYXJiaXRyYXRlIGFjY2VzcworCSAqIHRvIHRoZSBjb21tb24gVkdBIHJlc291cmNlcy4KKwkgKgorCSAqIElmIHdlIGFyZSBhIHNlY29uZGFyeSBkaXNwbGF5IGNvbnRyb2xsZXIgKCFQQ0lfRElTUExBWV9DTEFTU19WR0EpLAorCSAqIHRoZW4gd2UgZG8gbm90IHRha2UgcGFydCBpbiBWR0EgYXJiaXRyYXRpb24gYW5kIHRoZQorCSAqIHZnYV9jbGllbnRfcmVnaXN0ZXIoKSBmYWlscyB3aXRoIC1FTk9ERVYuCisJICovCiAJcmV0ID0gdmdhX2NsaWVudF9yZWdpc3RlcihkZXYtPnBkZXYsIGRldiwgTlVMTCwgaTkxNV92Z2Ffc2V0X2RlY29kZSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ICYmIHJldCAhPSAtRU5PREVWKQogCQlnb3RvIGNsZWFudXBfcmluZ2J1ZmZlcjsKIAogCWludGVsX3JlZ2lzdGVyX2RzbV9oYW5kbGVyKCk7CkBAIC0xOTAwLDYgKzE4OTUsMTcgQEAKIAlpZiAoSVNfR0VOMihkZXYpKQogCQlkbWFfc2V0X2NvaGVyZW50X21hc2soJmRldi0+cGRldi0+ZGV2LCBETUFfQklUX01BU0soMzApKTsKIAorCS8qIDk2NUdNIHNvbWV0aW1lcyBpbmNvcnJlY3RseSB3cml0ZXMgdG8gaGFyZHdhcmUgc3RhdHVzIHBhZ2UgKEhXUykKKwkgKiB1c2luZyAzMmJpdCBhZGRyZXNzaW5nLCBvdmVyd3JpdGluZyBtZW1vcnkgaWYgSFdTIGlzIGxvY2F0ZWQKKwkgKiBhYm92ZSA0R0IuCisJICoKKwkgKiBUaGUgZG9jdW1lbnRhdGlvbiBhbHNvIG1lbnRpb25zIGFuIGlzc3VlIHdpdGggdW5kZWZpbmVkCisJICogYmVoYXZpb3VyIGlmIGFueSBnZW5lcmFsIHN0YXRlIGlzIGFjY2Vzc2VkIHdpdGhpbiBhIHBhZ2UgYWJvdmUgNEdCLAorCSAqIHdoaWNoIGFsc28gbmVlZHMgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkuCisJICovCisJaWYgKElTX0JST0FEV0FURVIoZGV2KSB8fCBJU19DUkVTVExJTkUoZGV2KSkKKwkJZG1hX3NldF9jb2hlcmVudF9tYXNrKCZkZXYtPnBkZXYtPmRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisKIAltbWlvX2JhciA9IElTX0dFTjIoZGV2KSA/IDEgOiAwOwogCWRldl9wcml2LT5yZWdzID0gcGNpX2lvbWFwKGRldi0+cGRldiwgbW1pb19iYXIsIDApOwogCWlmICghZGV2X3ByaXYtPnJlZ3MpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IDcyZmVhMmIuLjIyZWMwNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNDYsNiArNDYsMTIgQEAKIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZSA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQocG93ZXJzYXZlLCBpOTE1X3Bvd2Vyc2F2ZSwgaW50LCAwNjAwKTsKIAordW5zaWduZWQgaW50IGk5MTVfc2VtYXBob3JlcyA9IDA7Cittb2R1bGVfcGFyYW1fbmFtZWQoc2VtYXBob3JlcywgaTkxNV9zZW1hcGhvcmVzLCBpbnQsIDA2MDApOworCit1bnNpZ25lZCBpbnQgaTkxNV9lbmFibGVfcmM2ID0gMDsKK21vZHVsZV9wYXJhbV9uYW1lZChpOTE1X2VuYWJsZV9yYzYsIGk5MTVfZW5hYmxlX3JjNiwgaW50LCAwNjAwKTsKKwogdW5zaWduZWQgaW50IGk5MTVfbHZkc19kb3duY2xvY2sgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGx2ZHNfZG93bmNsb2NrLCBpOTE1X2x2ZHNfZG93bmNsb2NrLCBpbnQsIDA0MDApOwogCkBAIC02MCw3ICs2Niw3IEBACiAKICNkZWZpbmUgSU5URUxfVkdBX0RFVklDRShpZCwgaW5mbykgewkJXAogCS5jbGFzcyA9IFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LAlcCi0JLmNsYXNzX21hc2sgPSAweGZmZmYwMCwJCQlcCisJLmNsYXNzX21hc2sgPSAweGZmMDAwMCwJCQlcCiAJLnZlbmRvciA9IDB4ODA4NiwJCQlcCiAJLmRldmljZSA9IGlkLAkJCQlcCiAJLnN1YnZlbmRvciA9IFBDSV9BTllfSUQsCQlcCkBAIC0yNTEsNyArMjU3LDcgQEAKIAl9CiB9CiAKLXZvaWQgX19nZW42X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3ZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlpbnQgY291bnQ7CiAKQEAgLTI2NywxMiArMjczLDIyIEBACiAJCXVkZWxheSgxMCk7CiB9CiAKLXZvaWQgX19nZW42X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKK3ZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfcHV0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKIHsKIAlJOTE1X1dSSVRFX05PVFJBQ0UoRk9SQ0VXQUtFLCAwKTsKIAlQT1NUSU5HX1JFQUQoRk9SQ0VXQUtFKTsKIH0KIAordm9pZCBfX2dlbjZfZ3Rfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJaW50IGxvb3AgPSA1MDA7CisJdTMyIGZpZm8gPSBJOTE1X1JFQURfTk9UUkFDRShHVF9GSUZPX0ZSRUVfRU5UUklFUyk7CisJd2hpbGUgKGZpZm8gPCAyMCAmJiBsb29wLS0pIHsKKwkJdWRlbGF5KDEwKTsKKwkJZmlmbyA9IEk5MTVfUkVBRF9OT1RSQUNFKEdUX0ZJRk9fRlJFRV9FTlRSSUVTKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgaTkxNV9kcm1fZnJlZXplKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTM1NCwxMiArMzcwLDEzIEBACiAJCWVycm9yID0gaTkxNV9nZW1faW5pdF9yaW5nYnVmZmVyKGRldik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZXYpOwogCQlkcm1faXJxX2luc3RhbGwoZGV2KTsKIAogCQkvKiBSZXN1bWUgdGhlIG1vZGVzZXQgZm9yIGV2ZXJ5IGFjdGl2YXRlZCBDUlRDICovCiAJCWRybV9oZWxwZXJfcmVzdW1lX2ZvcmNlX21vZGUoZGV2KTsKIAotCQlpZiAoZGV2X3ByaXYtPnJlbmRlcmN0eCAmJiBkZXZfcHJpdi0+cHdyY3R4KQorCQlpZiAoSVNfSVJPTkxBS0VfTShkZXYpKQogCQkJaXJvbmxha2VfZW5hYmxlX3JjNihkZXYpOwogCX0KIApAQCAtNTQyLDYgKzU1OSw3IEBACiAKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJCWRybV9tb2RlX2NvbmZpZ19yZXNldChkZXYpOwogCQlkcm1faXJxX2luc3RhbGwoZGV2KTsKIAkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCX0KQEAgLTU2Niw2ICs1ODQsMTQgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBpOTE1X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKKwkvKiBPbmx5IGJpbmQgdG8gZnVuY3Rpb24gMCBvZiB0aGUgZGV2aWNlLiBFYXJseSBnZW5lcmF0aW9ucworCSAqIHVzZWQgZnVuY3Rpb24gMSBhcyBhIHBsYWNlaG9sZGVyIGZvciBtdWx0aS1oZWFkLiBUaGlzIGNhdXNlcworCSAqIHVzIGNvbmZ1c2lvbiBpbnN0ZWFkLCBlc3BlY2lhbGx5IG9uIHRoZSBzeXN0ZW1zIHdoZXJlIGJvdGgKKwkgKiBmdW5jdGlvbnMgaGF2ZSB0aGUgc2FtZSBQQ0ktSUQhCisJICovCisJaWYgKFBDSV9GVU5DKHBkZXYtPmRldmZuKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXR1cm4gZHJtX2dldF9wY2lfZGV2KHBkZXYsIGVudCwgJmRyaXZlcik7CiB9CiAKQEAgLTc1Miw2ICs3NzgsOSBAQAogCQlkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICY9IH5EUklWRVJfTU9ERVNFVDsKICNlbmRpZgogCisJaWYgKCEoZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyAmIERSSVZFUl9NT0RFU0VUKSkKKwkJZHJpdmVyLmdldF92YmxhbmtfdGltZXN0YW1wID0gTlVMTDsKKwogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKaW5kZXggNTk2OWY0Ni4uNDU2ZjQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCkBAIC01NDMsOCArNTQzLDExIEBACiAJCS8qKiBMaXN0IG9mIGFsbCBvYmplY3RzIGluIGd0dF9zcGFjZS4gVXNlZCB0byByZXN0b3JlIGd0dAogCQkgKiBtYXBwaW5ncyBvbiByZXN1bWUgKi8KIAkJc3RydWN0IGxpc3RfaGVhZCBndHRfbGlzdDsKLQkJLyoqIEVuZCBvZiBtYXBwYWJsZSBwYXJ0IG9mIEdUVCAqLworCisJCS8qKiBVc2FibGUgcG9ydGlvbiBvZiB0aGUgR1RUIGZvciBHRU0gKi8KKwkJdW5zaWduZWQgbG9uZyBndHRfc3RhcnQ7CiAJCXVuc2lnbmVkIGxvbmcgZ3R0X21hcHBhYmxlX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBndHRfZW5kOwogCiAJCXN0cnVjdCBpb19tYXBwaW5nICpndHRfbWFwcGluZzsKIAkJaW50IGd0dF9tdHJyOwpAQCAtOTUzLDggKzk1NiwxMCBAQAogZXh0ZXJuIGludCBpOTE1X21heF9pb2N0bDsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9mYnBlcmNydGM7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfcG93ZXJzYXZlOworZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X3NlbWFwaG9yZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfbHZkc19kb3duY2xvY2s7CiBleHRlcm4gdW5zaWduZWQgaW50IGk5MTVfcGFuZWxfdXNlX3NzYzsKK2V4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9lbmFibGVfcmM2OwogCiBleHRlcm4gaW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogZXh0ZXJuIGludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTExNzMsNiArMTE3OCw5IEBACiB2b2lkIGk5MTVfZ2VtX2ZyZWVfYWxsX3BoeXNfb2JqZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBpOTE1X2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZSk7CiAKK3VpbnQzMl90CitpOTE1X2dlbV9nZXRfdW5mZW5jZWRfZ3R0X2FsaWdubWVudChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKKwogLyogaTkxNV9nZW1fZ3R0LmMgKi8KIHZvaWQgaTkxNV9nZW1fcmVzdG9yZV9ndHRfbWFwcGluZ3Moc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2d0dF9iaW5kX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKQEAgLTEzNDksMjIgKzEzNTcsMzIgQEAKICAqIG11c3QgYmUgc2V0IHRvIHByZXZlbnQgR1QgY29yZSBmcm9tIHBvd2VyIGRvd24gYW5kIHN0YWxlIHZhbHVlcyBiZWluZwogICogcmV0dXJuZWQuCiAgKi8KLXZvaWQgX19nZW42X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Ci12b2lkIF9fZ2VuNl9mb3JjZV93YWtlX3B1dCAoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KTsKLXN0YXRpYyBpbmxpbmUgdTMyIGk5MTVfc2FmZV9yZWFkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZykKK3ZvaWQgX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cit2b2lkIF9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwordm9pZCBfX2dlbjZfZ3Rfd2FpdF9mb3JfZmlmbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOworCitzdGF0aWMgaW5saW5lIHUzMiBpOTE1X2d0X3JlYWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgcmVnKQogewogCXUzMiB2YWw7CiAKIAlpZiAoZGV2X3ByaXYtPmluZm8tPmdlbiA+PSA2KSB7Ci0JCV9fZ2VuNl9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CisJCV9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CiAJCXZhbCA9IEk5MTVfUkVBRChyZWcpOwotCQlfX2dlbjZfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOworCQlfX2dlbjZfZ3RfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOwogCX0gZWxzZQogCQl2YWwgPSBJOTE1X1JFQUQocmVnKTsKIAogCXJldHVybiB2YWw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2d0X3dyaXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKKwkJCQl1MzIgcmVnLCB1MzIgdmFsKQoreworCWlmIChkZXZfcHJpdi0+aW5mby0+Z2VuID49IDYpCisJCV9fZ2VuNl9ndF93YWl0X2Zvcl9maWZvKGRldl9wcml2KTsKKwlJOTE1X1dSSVRFKHJlZywgdmFsKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkCiBpOTE1X3dyaXRlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIHJlZywgdTY0IHZhbCwgaW50IGxlbikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IDNkZmM4NDguLjM2ZTY2Y2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtMTQwLDEyICsxNDAsMTYgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWRybV9tbV9pbml0KCZkZXZfcHJpdi0+bW0uZ3R0X3NwYWNlLCBzdGFydCwKLQkJICAgIGVuZCAtIHN0YXJ0KTsKKwlkcm1fbW1faW5pdCgmZGV2X3ByaXYtPm1tLmd0dF9zcGFjZSwgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKIAorCWRldl9wcml2LT5tbS5ndHRfc3RhcnQgPSBzdGFydDsKKwlkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA9IG1hcHBhYmxlX2VuZDsKKwlkZXZfcHJpdi0+bW0uZ3R0X2VuZCA9IGVuZDsKIAlkZXZfcHJpdi0+bW0uZ3R0X3RvdGFsID0gZW5kIC0gc3RhcnQ7CiAJZGV2X3ByaXYtPm1tLm1hcHBhYmxlX2d0dF90b3RhbCA9IG1pbihlbmQsIG1hcHBhYmxlX2VuZCkgLSBzdGFydDsKLQlkZXZfcHJpdi0+bW0uZ3R0X21hcHBhYmxlX2VuZCA9IG1hcHBhYmxlX2VuZDsKKworCS8qIFRha2Ugb3ZlciB0aGlzIHBvcnRpb24gb2YgdGhlIEdUVCAqLworCWludGVsX2d0dF9jbGVhcl9yYW5nZShzdGFydCAvIFBBR0VfU0laRSwgKGVuZC1zdGFydCkgLyBQQUdFX1NJWkUpOwogfQogCiBpbnQKQEAgLTEzOTQsNyArMTM5OCw3IEBACiAgKiBSZXR1cm4gdGhlIHJlcXVpcmVkIEdUVCBhbGlnbm1lbnQgZm9yIGFuIG9iamVjdCwgb25seSB0YWtpbmcgaW50byBhY2NvdW50CiAgKiB1bmZlbmNlZCB0aWxlZCBzdXJmYWNlIHJlcXVpcmVtZW50cy4KICAqLwotc3RhdGljIHVpbnQzMl90Cit1aW50MzJfdAogaTkxNV9nZW1fZ2V0X3VuZmVuY2VkX2d0dF9hbGlnbm1lbnQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKQEAgLTE4NTcsNyArMTg2MSw3IEBACiAKIAlzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKIAotCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJpbmctPnN5bmNfc2Vxbm8pOyBpKyspCiAJCWlmIChzZXFubyA+PSByaW5nLT5zeW5jX3NlcW5vW2ldKQogCQkJcmluZy0+c3luY19zZXFub1tpXSA9IDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwppbmRleCBkY2ZkZjQxLi41MGFiMTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCkBAIC03NzIsOCArNzcyLDggQEAKIAlpZiAoZnJvbSA9PSBOVUxMIHx8IHRvID09IGZyb20pCiAJCXJldHVybiAwOwogCi0JLyogWFhYIGdwdSBzZW1hcGhvcmVzIGFyZSBjdXJyZW50bHkgY2F1c2luZyBoYXJkIGhhbmdzIG9uIFNOQiBtb2JpbGUgKi8KLQlpZiAoSU5URUxfSU5GTyhvYmotPmJhc2UuZGV2KS0+Z2VuIDwgNiB8fCBJU19NT0JJTEUob2JqLT5iYXNlLmRldikpCisJLyogWFhYIGdwdSBzZW1hcGhvcmVzIGFyZSBpbXBsaWNhdGVkIGluIHZhcmlvdXMgaGFyZCBoYW5ncyBvbiBTTkIgKi8KKwlpZiAoSU5URUxfSU5GTyhvYmotPmJhc2UuZGV2KS0+Z2VuIDwgNiB8fCAhaTkxNV9zZW1hcGhvcmVzKQogCQlyZXR1cm4gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgdHJ1ZSk7CiAKIAlpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8pOwpAQCAtMTE3NSw3ICsxMTc1LDcgQEAKIAkJZ290byBlcnI7CiAKIAlzZXFubyA9IGk5MTVfZ2VtX25leHRfcmVxdWVzdF9zZXFubyhkZXYsIHJpbmcpOwotCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUy0xOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyaW5nLT5zeW5jX3NlcW5vKTsgaSsrKSB7CiAJCWlmIChzZXFubyA8IHJpbmctPnN5bmNfc2Vxbm9baV0pIHsKIAkJCS8qIFRoZSBHUFUgY2FuIG5vdCBoYW5kbGUgaXRzIHNlbWFwaG9yZSB2YWx1ZSB3cmFwcGluZywKIAkJCSAqIHNvIGV2ZXJ5IGJpbGxpb24gb3Igc28gZXhlY2J1ZmZlcnMsIHdlIG5lZWQgdG8gc3RhbGwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKaW5kZXggNzA0MzNhZS4uYjBhYmRjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKQEAgLTM0LDYgKzM0LDEwIEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqOwogCisJLyogRmlyc3QgZmlsbCBvdXIgcG9ydGlvbiBvZiB0aGUgR1RUIHdpdGggc2NyYXRjaCBwYWdlcyAqLworCWludGVsX2d0dF9jbGVhcl9yYW5nZShkZXZfcHJpdi0+bW0uZ3R0X3N0YXJ0IC8gUEFHRV9TSVpFLAorCQkJICAgICAgKGRldl9wcml2LT5tbS5ndHRfZW5kIC0gZGV2X3ByaXYtPm1tLmd0dF9zdGFydCkgLyBQQUdFX1NJWkUpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0uZ3R0X2xpc3QsIGd0dF9saXN0KSB7CiAJCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKaW5kZXggMjJhMzJiOS4uZDY0ODQzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fdGlsaW5nLmMKQEAgLTM0OSwxNCArMzQ5LDI3IEBACiAJCQkob2JqLT5ndHRfb2Zmc2V0ICsgb2JqLT5iYXNlLnNpemUgPD0gZGV2X3ByaXYtPm1tLmd0dF9tYXBwYWJsZV9lbmQgJiYKIAkJCSBpOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2sob2JqLCBhcmdzLT50aWxpbmdfbW9kZSkpOwogCi0JCW9iai0+dGlsaW5nX2NoYW5nZWQgPSB0cnVlOwotCQlvYmotPnRpbGluZ19tb2RlID0gYXJncy0+dGlsaW5nX21vZGU7Ci0JCW9iai0+c3RyaWRlID0gYXJncy0+c3RyaWRlOworCQkvKiBSZWJpbmQgaWYgd2UgbmVlZCBhIGNoYW5nZSBvZiBhbGlnbm1lbnQgKi8KKwkJaWYgKCFvYmotPm1hcF9hbmRfZmVuY2VhYmxlKSB7CisJCQl1MzIgdW5mZW5jZWRfYWxpZ25tZW50ID0KKwkJCQlpOTE1X2dlbV9nZXRfdW5mZW5jZWRfZ3R0X2FsaWdubWVudChvYmopOworCQkJaWYgKG9iai0+Z3R0X29mZnNldCAmICh1bmZlbmNlZF9hbGlnbm1lbnQgLSAxKSkKKwkJCQlyZXQgPSBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CisJCX0KKworCQlpZiAocmV0ID09IDApIHsKKwkJCW9iai0+dGlsaW5nX2NoYW5nZWQgPSB0cnVlOworCQkJb2JqLT50aWxpbmdfbW9kZSA9IGFyZ3MtPnRpbGluZ19tb2RlOworCQkJb2JqLT5zdHJpZGUgPSBhcmdzLT5zdHJpZGU7CisJCX0KIAl9CisJLyogd2UgaGF2ZSB0byBtYWludGFpbiB0aGlzIGV4aXN0aW5nIEFCSS4uLiAqLworCWFyZ3MtPnN0cmlkZSA9IG9iai0+c3RyaWRlOworCWFyZ3MtPnRpbGluZ19tb2RlID0gb2JqLT50aWxpbmdfbW9kZTsKIAlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfaXJxLmMKaW5kZXggYjhlNTA5YS4uOGE5ZTA4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0yNzQsMjQgKzI3NCwzNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBpOTE1X2dldF92YmxhbmtfdGltZXN0YW1wKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAoraW50IGk5MTVfZ2V0X3ZibGFua190aW1lc3RhbXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHBpcGUsCiAJCQkgICAgICBpbnQgKm1heF9lcnJvciwKIAkJCSAgICAgIHN0cnVjdCB0aW1ldmFsICp2YmxhbmtfdGltZSwKIAkJCSAgICAgIHVuc2lnbmVkIGZsYWdzKQogewotCXN0cnVjdCBkcm1fY3J0YyAqZHJtY3J0YzsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAotCWlmIChjcnRjIDwgMCB8fCBjcnRjID49IGRldi0+bnVtX2NydGNzKSB7Ci0JCURSTV9FUlJPUigiSW52YWxpZCBjcnRjICVkXG4iLCBjcnRjKTsKKwlpZiAocGlwZSA8IDAgfHwgcGlwZSA+PSBkZXZfcHJpdi0+bnVtX3BpcGUpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNydGMgJWRcbiIsIHBpcGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBHZXQgZHJtX2NydGMgdG8gdGltZXN0YW1wOiAqLwotCWRybWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXYsIGNydGMpOworCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGlwZShkZXYsIHBpcGUpOworCWlmIChjcnRjID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJJbnZhbGlkIGNydGMgJWRcbiIsIHBpcGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoIWNydGMtPmVuYWJsZWQpIHsKKwkJRFJNX0RFQlVHX0tNUygiY3J0YyAlZCBpcyBkaXNhYmxlZFxuIiwgcGlwZSk7CisJCXJldHVybiAtRUJVU1k7CisJfQogCiAJLyogSGVscGVyIHJvdXRpbmUgaW4gRFJNIGNvcmUgZG9lcyBhbGwgdGhlIHdvcms6ICovCi0JcmV0dXJuIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoZGV2LCBjcnRjLCBtYXhfZXJyb3IsCi0JCQkJCQkgICAgIHZibGFua190aW1lLCBmbGFncywgZHJtY3J0Yyk7CisJcmV0dXJuIGRybV9jYWxjX3ZibHRpbWVzdGFtcF9mcm9tX3NjYW5vdXRwb3MoZGV2LCBwaXBlLCBtYXhfZXJyb3IsCisJCQkJCQkgICAgIHZibGFua190aW1lLCBmbGFncywKKwkJCQkJCSAgICAgY3J0Yyk7CiB9CiAKIC8qCkBAIC0zMDUsNiArMzE2LDggQEAKIAlzdHJ1Y3QgZHJtX21vZGVfY29uZmlnICptb2RlX2NvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmlnOwogCXN0cnVjdCBpbnRlbF9lbmNvZGVyICplbmNvZGVyOwogCisJRFJNX0RFQlVHX0tNUygicnVubmluZyBlbmNvZGVyIGhvdHBsdWcgZnVuY3Rpb25zXG4iKTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW5jb2RlciwgJm1vZGVfY29uZmlnLT5lbmNvZGVyX2xpc3QsIGJhc2UuaGVhZCkKIAkJaWYgKGVuY29kZXItPmhvdF9wbHVnKQogCQkJZW5jb2Rlci0+aG90X3BsdWcoZW5jb2Rlcik7CkBAIC0zNDgsOCArMzYxLDEyIEBACiAJCQlzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgc2Vxbm8gPSByaW5nLT5nZXRfc2Vxbm8ocmluZyk7CisJdTMyIHNlcW5vOwogCisJaWYgKHJpbmctPm9iaiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzZXFubyA9IHJpbmctPmdldF9zZXFubyhyaW5nKTsKIAl0cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X2NvbXBsZXRlKGRldiwgc2Vxbm8pOwogCiAJcmluZy0+aXJxX3NlcW5vID0gc2Vxbm87CkBAIC04MzEsNiArODQ4LDggQEAKIAkJaSsrOwogCWVycm9yLT5waW5uZWRfYm9fY291bnQgPSBpIC0gZXJyb3ItPmFjdGl2ZV9ib19jb3VudDsKIAorCWVycm9yLT5hY3RpdmVfYm8gPSBOVUxMOworCWVycm9yLT5waW5uZWRfYm8gPSBOVUxMOwogCWlmIChpKSB7CiAJCWVycm9yLT5hY3RpdmVfYm8gPSBrbWFsbG9jKHNpemVvZigqZXJyb3ItPmFjdGl2ZV9ibykqaSwKIAkJCQkJICAgR0ZQX0FUT01JQyk7CkBAIC0xMTc5LDE4ICsxMTk4LDE4IEBACiAJCQkJaW50ZWxfZmluaXNoX3BhZ2VfZmxpcF9wbGFuZShkZXYsIDEpOwogCQl9CiAKLQkJaWYgKHBpcGVhX3N0YXRzICYgdmJsYW5rX3N0YXR1cykgeworCQlpZiAocGlwZWFfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzICYmCisJCSAgICBkcm1faGFuZGxlX3ZibGFuayhkZXYsIDApKSB7CiAJCQl2YmxhbmsrKzsKLQkJCWRybV9oYW5kbGVfdmJsYW5rKGRldiwgMCk7CiAJCQlpZiAoIWRldl9wcml2LT5mbGlwX3BlbmRpbmdfaXNfZG9uZSkgewogCQkJCWk5MTVfcGFnZWZsaXBfc3RhbGxfY2hlY2soZGV2LCAwKTsKIAkJCQlpbnRlbF9maW5pc2hfcGFnZV9mbGlwKGRldiwgMCk7CiAJCQl9CiAJCX0KIAotCQlpZiAocGlwZWJfc3RhdHMgJiB2Ymxhbmtfc3RhdHVzKSB7CisJCWlmIChwaXBlYl9zdGF0cyAmIHZibGFua19zdGF0dXMgJiYKKwkJICAgIGRybV9oYW5kbGVfdmJsYW5rKGRldiwgMSkpIHsKIAkJCXZibGFuaysrOwotCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAxKTsKIAkJCWlmICghZGV2X3ByaXYtPmZsaXBfcGVuZGluZ19pc19kb25lKSB7CiAJCQkJaTkxNV9wYWdlZmxpcF9zdGFsbF9jaGVjayhkZXYsIDEpOwogCQkJCWludGVsX2ZpbmlzaF9wYWdlX2ZsaXAoZGV2LCAxKTsKQEAgLTEyNzgsMTIgKzEyOTcsMTIgQEAKIAlpZiAobWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYpCiAJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5wZXJmX2JveGVzIHw9IEk5MTVfQk9YX1dBSVQ7CiAKLQlyZXQgPSAtRU5PREVWOwogCWlmIChyaW5nLT5pcnFfZ2V0KHJpbmcpKSB7CiAJCURSTV9XQUlUX09OKHJldCwgcmluZy0+aXJxX3F1ZXVlLCAzICogRFJNX0haLAogCQkJICAgIFJFQURfQlJFQURDUlVNQihkZXZfcHJpdikgPj0gaXJxX25yKTsKIAkJcmluZy0+aXJxX3B1dChyaW5nKTsKLQl9CisJfSBlbHNlIGlmICh3YWl0X2ZvcihSRUFEX0JSRUFEQ1JVTUIoZGV2X3ByaXYpID49IGlycV9uciwgMzAwMCkpCisJCXJldCA9IC1FQlVTWTsKIAogCWlmIChyZXQgPT0gLUVCVVNZKSB7CiAJCURSTV9FUlJPUigiRUJVU1kgLS0gcmVjOiAlZCBlbWl0dGVkOiAlZFxuIiwKQEAgLTE2MzIsOSArMTY1MSw3IEBACiAJfSBlbHNlIHsKIAkJaG90cGx1Z19tYXNrID0gU0RFX0NSVF9IT1RQTFVHIHwgU0RFX1BPUlRCX0hPVFBMVUcgfAogCQkJICAgICAgIFNERV9QT1JUQ19IT1RQTFVHIHwgU0RFX1BPUlREX0hPVFBMVUc7Ci0JCWhvdHBsdWdfbWFzayB8PSBTREVfQVVYX01BU0sgfCBTREVfRkRJX01BU0sgfCBTREVfVFJBTlNfTUFTSzsKLQkJSTkxNV9XUklURShGRElfUlhBX0lNUiwgMCk7Ci0JCUk5MTVfV1JJVEUoRkRJX1JYQl9JTVIsIDApOworCQlob3RwbHVnX21hc2sgfD0gU0RFX0FVWF9NQVNLOwogCX0KIAogCWRldl9wcml2LT5wY2hfaXJxX21hc2sgPSB+aG90cGx1Z19tYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKaW5kZXggNDBhNDA3Zi4uM2U2ZjQ4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCkBAIC0xNzQsNyArMTc0LDkgQEAKICAqICAgYWRkcmVzcy92YWx1ZSBwYWlycy4gRG9uJ3Qgb3ZlcmR1ZSBpdCwgdGhvdWdoLCB4IDw9IDJeNCBtdXN0IGhvbGQhCiAgKi8KICNkZWZpbmUgTUlfTE9BRF9SRUdJU1RFUl9JTU0oeCkJTUlfSU5TVFIoMHgyMiwgMip4LTEpCi0jZGVmaW5lIE1JX0ZMVVNIX0RXCQlNSV9JTlNUUigweDI2LCAyKSAvKiBmb3IgR0VONiAqLworI2RlZmluZSBNSV9GTFVTSF9EVwkJTUlfSU5TVFIoMHgyNiwgMSkgLyogZm9yIEdFTjYgKi8KKyNkZWZpbmUgICBNSV9JTlZBTElEQVRFX1RMQgkoMTw8MTgpCisjZGVmaW5lICAgTUlfSU5WQUxJREFURV9CU0QJKDE8PDcpCiAjZGVmaW5lIE1JX0JBVENIX0JVRkZFUgkJTUlfSU5TVFIoMHgzMCwgMSkKICNkZWZpbmUgICBNSV9CQVRDSF9OT05fU0VDVVJFCSgxKQogI2RlZmluZSAgIE1JX0JBVENIX05PTl9TRUNVUkVfSTk2NSAoMTw8OCkKQEAgLTUxMyw2ICs1MTUsMTAgQEAKICNkZWZpbmUgICBHRU42X0JMSVRURVJfU1lOQ19TVEFUVVMJCQkoMSA8PCAyNCkKICNkZWZpbmUgICBHRU42X0JMSVRURVJfVVNFUl9JTlRFUlJVUFQJCQkoMSA8PCAyMikKIAorI2RlZmluZSBHRU42X0JMSVRURVJfRUNPU0tQRAkweDIyMWQwCisjZGVmaW5lICAgR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQJCQkxNgorI2RlZmluZSAgIEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZCQkJKDE8PDMpCisKICNkZWZpbmUgR0VONl9CU0RfU0xFRVBfUFNNSV9DT05UUk9MCTB4MTIwNTAKICNkZWZpbmUgICBHRU42X0JTRF9TTEVFUF9QU01JX0NPTlRST0xfUkNfSUxETF9NRVNTQUdFX01PRElGWV9NQVNLCSgxIDw8IDE2KQogI2RlZmluZSAgIEdFTjZfQlNEX1NMRUVQX1BTTUlfQ09OVFJPTF9SQ19JTERMX01FU1NBR0VfRElTQUJMRQkJKDEgPDwgMCkKQEAgLTE1NDcsMTcgKzE1NTMsNyBAQAogCiAvKiBCYWNrbGlnaHQgY29udHJvbCAqLwogI2RlZmluZSBCTENfUFdNX0NUTAkJMHg2MTI1NAotI2RlZmluZSAgIEJBQ0tMSUdIVF9NT0RVTEFUSU9OX0ZSRVFfU0hJRlQJCSgxNykKICNkZWZpbmUgQkxDX1BXTV9DVEwyCQkweDYxMjUwIC8qIDk2NSsgb25seSAqLwotI2RlZmluZSAgIEJMTV9DT01CSU5BVElPTl9NT0RFICgxIDw8IDMwKQotLyoKLSAqIFRoaXMgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMTUgYml0cyBvZiB0aGUgbnVtYmVyIG9mIGJhY2tsaWdodCBjeWNsZXMgaW4gYQotICogY29tcGxldGUgY3ljbGUgb2YgdGhlIG1vZHVsYXRlZCBiYWNrbGlnaHQgY29udHJvbC4KLSAqCi0gKiBUaGUgYWN0dWFsIHZhbHVlIGlzIHRoaXMgZmllbGQgbXVsdGlwbGllZCBieSB0d28uCi0gKi8KLSNkZWZpbmUgICBCQUNLTElHSFRfTU9EVUxBVElPTl9GUkVRX01BU0sJCSgweDdmZmYgPDwgMTcpCi0jZGVmaW5lICAgQkxNX0xFR0FDWV9NT0RFCQkJCSgxIDw8IDE2KQogLyoKICAqIFRoaXMgaXMgdGhlIG51bWJlciBvZiBjeWNsZXMgb3V0IG9mIHRoZSBiYWNrbGlnaHQgbW9kdWxhdGlvbiBjeWNsZSBmb3Igd2hpY2gKICAqIHRoZSBiYWNrbGlnaHQgaXMgb24uCkBAIC0yNjI2LDYgKzI2MjIsOCBAQAogI2RlZmluZSBESVNQTEFZX1BPUlRfUExMX0JJT1NfMiAgICAgICAgIDB4NDYwMTQKIAogI2RlZmluZSBQQ0hfRFNQQ0xLX0dBVEVfRAkweDQyMDIwCisjIGRlZmluZSBEUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUJCSgxIDw8IDkpCisjIGRlZmluZSBEUEZDUlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA4KQogIyBkZWZpbmUgRFBGRFVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFCQkoMSA8PCA3KQogIyBkZWZpbmUgRFBBUkJVTklUX0NMT0NLX0dBVEVfRElTQUJMRQkJKDEgPDwgNSkKIApAQCAtMzI2Myw2ICszMjYxLDggQEAKICNkZWZpbmUgIEZPUkNFV0FLRQkJCQkweEExOEMKICNkZWZpbmUgIEZPUkNFV0FLRV9BQ0sJCQkJMHgxMzAwOTAKIAorI2RlZmluZSAgR1RfRklGT19GUkVFX0VOVFJJRVMJCQkweDEyMDAwOAorCiAjZGVmaW5lIEdFTjZfUlBOU1dSRVEJCQkJMHhBMDA4CiAjZGVmaW5lICAgR0VONl9UVVJCT19ESVNBQkxFCQkJKDE8PDMxKQogI2RlZmluZSAgIEdFTjZfRlJFUVVFTkNZKHgpCQkJKCh4KTw8MjUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDE3MDM1YjguLjhhNzdmZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC01MzUsNiArNTM1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2NydF9yZXNldChzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjb25uZWN0b3ItPmRldjsKKwlzdHJ1Y3QgaW50ZWxfY3J0ICpjcnQgPSBpbnRlbF9hdHRhY2hlZF9jcnQoY29ubmVjdG9yKTsKKworCWlmIChIQVNfUENIX1NQTElUKGRldikpCisJCWNydC0+Zm9yY2VfaG90cGx1Z19yZXF1aXJlZCA9IDE7Cit9CisKIC8qCiAgKiBSb3V0aW5lcyBmb3IgY29udHJvbGxpbmcgc3R1ZmYgb24gdGhlIGFuYWxvZyBwb3J0CiAgKi8KQEAgLTU0OCw2ICs1NTcsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fY29ubmVjdG9yX2Z1bmNzIGludGVsX2NydF9jb25uZWN0b3JfZnVuY3MgPSB7CisJLnJlc2V0ID0gaW50ZWxfY3J0X3Jlc2V0LAogCS5kcG1zID0gZHJtX2hlbHBlcl9jb25uZWN0b3JfZHBtcywKIAkuZGV0ZWN0ID0gaW50ZWxfY3J0X2RldGVjdCwKIAkuZmlsbF9tb2RlcyA9IGRybV9oZWxwZXJfcHJvYmVfc2luZ2xlX2Nvbm5lY3Rvcl9tb2RlcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwppbmRleCA5ODk2N2YzLi40OWZiNTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCkBAIC0xMjEzLDYgKzEyMTMsMjYgQEAKIAlyZXR1cm4gSTkxNV9SRUFEKERQRkNfQ09OVFJPTCkgJiBEUEZDX0NUTF9FTjsKIH0KIAorc3RhdGljIHZvaWQgc2FuZHlicmlkZ2VfYmxpdF9mYmNfdXBkYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgYmx0X2Vjb3NrcGQ7CisKKwkvKiBNYWtlIHN1cmUgYmxpdHRlciBub3RpZmllcyBGQkMgb2Ygd3JpdGVzICovCisJX19nZW42X2d0X2ZvcmNlX3dha2VfZ2V0KGRldl9wcml2KTsKKwlibHRfZWNvc2twZCA9IEk5MTVfUkVBRChHRU42X0JMSVRURVJfRUNPU0tQRCk7CisJYmx0X2Vjb3NrcGQgfD0gR0VONl9CTElUVEVSX0ZCQ19OT1RJRlkgPDwKKwkJR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQ7CisJSTkxNV9XUklURShHRU42X0JMSVRURVJfRUNPU0tQRCwgYmx0X2Vjb3NrcGQpOworCWJsdF9lY29za3BkIHw9IEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZOworCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKKwlibHRfZWNvc2twZCAmPSB+KEdFTjZfQkxJVFRFUl9GQkNfTk9USUZZIDw8CisJCQkgR0VONl9CTElUVEVSX0xPQ0tfU0hJRlQpOworCUk5MTVfV1JJVEUoR0VONl9CTElUVEVSX0VDT1NLUEQsIGJsdF9lY29za3BkKTsKKwlQT1NUSU5HX1JFQUQoR0VONl9CTElUVEVSX0VDT1NLUEQpOworCV9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7Cit9CisKIHN0YXRpYyB2b2lkIGlyb25sYWtlX2VuYWJsZV9mYmMoc3RydWN0IGRybV9jcnRjICpjcnRjLCB1bnNpZ25lZCBsb25nIGludGVydmFsKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMjY2LDYgKzEyODYsNyBAQAogCQlJOTE1X1dSSVRFKFNOQl9EUEZDX0NUTF9TQSwKIAkJCSAgIFNOQl9DUFVfRkVOQ0VfRU5BQkxFIHwgZGV2X3ByaXYtPmNmYl9mZW5jZSk7CiAJCUk5MTVfV1JJVEUoRFBGQ19DUFVfRkVOQ0VfT0ZGU0VULCBjcnRjLT55KTsKKwkJc2FuZHlicmlkZ2VfYmxpdF9mYmNfdXBkYXRlKGRldik7CiAJfQogCiAJRFJNX0RFQlVHX0tNUygiZW5hYmxlZCBmYmMgb24gcGxhbmUgJWRcbiIsIGludGVsX2NydGMtPnBsYW5lKTsKQEAgLTE2MDksMTkgKzE2MzAsMTkgQEAKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHRvX2ludGVsX2ZyYW1lYnVmZmVyKG9sZF9mYiktPm9iajsKIAogCQl3YWl0X2V2ZW50KGRldl9wcml2LT5wZW5kaW5nX2ZsaXBfcXVldWUsCisJCQkgICBhdG9taWNfcmVhZCgmZGV2X3ByaXYtPm1tLndlZGdlZCkgfHwKIAkJCSAgIGF0b21pY19yZWFkKCZvYmotPnBlbmRpbmdfZmxpcCkgPT0gMCk7CiAKIAkJLyogQmlnIEhhbW1lciwgd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGFueSBwZW5kaW5nCiAJCSAqIE1JX1dBSVRfRk9SX0VWRU5UIGluc2lkZSBhIHVzZXIgYmF0Y2ggYnVmZmVyIG9uIHRoZQogCQkgKiBjdXJyZW50IHNjYW5vdXQgaXMgcmV0aXJlZCBiZWZvcmUgdW5waW5uaW5nIHRoZSBvbGQKIAkJICogZnJhbWVidWZmZXIuCisJCSAqCisJCSAqIFRoaXMgc2hvdWxkIG9ubHkgZmFpbCB1cG9uIGEgaHVuZyBHUFUsIGluIHdoaWNoIGNhc2Ugd2UKKwkJICogY2FuIHNhZmVseSBjb250aW51ZS4KIAkJICovCiAJCXJldCA9IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9ncHUob2JqLCBmYWxzZSk7Ci0JCWlmIChyZXQpIHsKLQkJCWk5MTVfZ2VtX29iamVjdF91bnBpbih0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYiktPm9iaik7Ci0JCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KKwkJKHZvaWQpIHJldDsKIAl9CiAKIAlyZXQgPSBpbnRlbF9waXBlX3NldF9iYXNlX2F0b21pYyhjcnRjLCBjcnRjLT5mYiwgeCwgeSwKQEAgLTIwMjQsNiArMjA0NSwzMSBAQAogCQkgICBhdG9taWNfcmVhZCgmb2JqLT5wZW5kaW5nX2ZsaXApID09IDApOwogfQogCitzdGF0aWMgYm9vbCBpbnRlbF9jcnRjX2RyaXZpbmdfcGNoKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKm1vZGVfY29uZmlnID0gJmRldi0+bW9kZV9jb25maWc7CisJc3RydWN0IGludGVsX2VuY29kZXIgKmVuY29kZXI7CisKKwkvKgorCSAqIElmIHRoZXJlJ3MgYSBub24tUENIIGVEUCBvbiB0aGlzIGNydGMsIGl0IG11c3QgYmUgRFBfQSwgYW5kIHRoYXQKKwkgKiBtdXN0IGJlIGRyaXZlbiBieSBpdHMgb3duIGNydGM7IG5vIHNoYXJpbmcgaXMgcG9zc2libGUuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmbW9kZV9jb25maWctPmVuY29kZXJfbGlzdCwgYmFzZS5oZWFkKSB7CisJCWlmIChlbmNvZGVyLT5iYXNlLmNydGMgIT0gY3J0YykKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoZW5jb2Rlci0+dHlwZSkgeworCQljYXNlIElOVEVMX09VVFBVVF9FRFA6CisJCQlpZiAoIWludGVsX2VuY29kZXJfaXNfcGNoX2VkcCgmZW5jb2Rlci0+YmFzZSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQkJY29udGludWU7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgaXJvbmxha2VfY3J0Y19lbmFibGUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0yMDMyLDYgKzIwNzgsNyBAQAogCWludCBwaXBlID0gaW50ZWxfY3J0Yy0+cGlwZTsKIAlpbnQgcGxhbmUgPSBpbnRlbF9jcnRjLT5wbGFuZTsKIAl1MzIgcmVnLCB0ZW1wOworCWJvb2wgaXNfcGNoX3BvcnQgPSBmYWxzZTsKIAogCWlmIChpbnRlbF9jcnRjLT5hY3RpdmUpCiAJCXJldHVybjsKQEAgLTIwNDUsNyArMjA5Miw1NiBAQAogCQkJSTkxNV9XUklURShQQ0hfTFZEUywgdGVtcCB8IExWRFNfUE9SVF9FTik7CiAJfQogCi0JaXJvbmxha2VfZmRpX2VuYWJsZShjcnRjKTsKKwlpc19wY2hfcG9ydCA9IGludGVsX2NydGNfZHJpdmluZ19wY2goY3J0Yyk7CisKKwlpZiAoaXNfcGNoX3BvcnQpCisJCWlyb25sYWtlX2ZkaV9lbmFibGUoY3J0Yyk7CisJZWxzZSB7CisJCS8qIGRpc2FibGUgQ1BVIEZESSB0eCBhbmQgUENIIEZESSByeCAqLworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gSTkxNV9SRUFEKHJlZyk7CisJCUk5MTVfV1JJVEUocmVnLCB0ZW1wICYgfkZESV9UWF9FTkFCTEUpOworCQlQT1NUSU5HX1JFQUQocmVnKTsKKworCQlyZWcgPSBGRElfUlhfQ1RMKHBpcGUpOworCQl0ZW1wID0gSTkxNV9SRUFEKHJlZyk7CisJCXRlbXAgJj0gfigweDcgPDwgMTYpOworCQl0ZW1wIHw9IChJOTE1X1JFQUQoUElQRUNPTkYocGlwZSkpICYgUElQRV9CUENfTUFTSykgPDwgMTE7CisJCUk5MTVfV1JJVEUocmVnLCB0ZW1wICYgfkZESV9SWF9FTkFCTEUpOworCisJCVBPU1RJTkdfUkVBRChyZWcpOworCQl1ZGVsYXkoMTAwKTsKKworCQkvKiBJcm9ubGFrZSB3b3JrYXJvdW5kLCBkaXNhYmxlIGNsb2NrIHBvaW50ZXIgYWZ0ZXIgZG93bmluZyBGREkgKi8KKwkJaWYgKEhBU19QQ0hfSUJYKGRldikpCisJCQlJOTE1X1dSSVRFKEZESV9SWF9DSElDS0VOKHBpcGUpLAorCQkJCSAgIEk5MTVfUkVBRChGRElfUlhfQ0hJQ0tFTihwaXBlKSAmCisJCQkJCSAgICAgfkZESV9SWF9QSEFTRV9TWU5DX1BPSU5URVJfRU5BQkxFKSk7CisKKwkJLyogc3RpbGwgc2V0IHRyYWluIHBhdHRlcm4gMSAqLworCQlyZWcgPSBGRElfVFhfQ1RMKHBpcGUpOworCQl0ZW1wID0gSTkxNV9SRUFEKHJlZyk7CisJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xOworCQlJOTE1X1dSSVRFKHJlZywgdGVtcCk7CisKKwkJcmVnID0gRkRJX1JYX0NUTChwaXBlKTsKKwkJdGVtcCA9IEk5MTVfUkVBRChyZWcpOworCQlpZiAoSEFTX1BDSF9DUFQoZGV2KSkgeworCQkJdGVtcCAmPSB+RkRJX0xJTktfVFJBSU5fUEFUVEVSTl9NQVNLX0NQVDsKKwkJCXRlbXAgfD0gRkRJX0xJTktfVFJBSU5fUEFUVEVSTl8xX0NQVDsKKwkJfSBlbHNlIHsKKwkJCXRlbXAgJj0gfkZESV9MSU5LX1RSQUlOX05PTkU7CisJCQl0ZW1wIHw9IEZESV9MSU5LX1RSQUlOX1BBVFRFUk5fMTsKKwkJfQorCQkvKiBCUEMgaW4gRkRJIHJ4IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0IGluIFBJUEVDT05GICovCisJCXRlbXAgJj0gfigweDA3IDw8IDE2KTsKKwkJdGVtcCB8PSAoSTkxNV9SRUFEKFBJUEVDT05GKHBpcGUpKSAmIFBJUEVfQlBDX01BU0spIDw8IDExOworCQlJOTE1X1dSSVRFKHJlZywgdGVtcCk7CisKKwkJUE9TVElOR19SRUFEKHJlZyk7CisJCXVkZWxheSgxMDApOworCX0KIAogCS8qIEVuYWJsZSBwYW5lbCBmaXR0aW5nIGZvciBMVkRTICovCiAJaWYgKGRldl9wcml2LT5wY2hfcGZfc2l6ZSAmJgpAQCAtMjA3OSw2ICsyMTc1LDEwIEBACiAJCWludGVsX2ZsdXNoX2Rpc3BsYXlfcGxhbmUoZGV2LCBwbGFuZSk7CiAJfQogCisJLyogU2tpcCB0aGUgUENIIHN0dWZmIGlmIHBvc3NpYmxlICovCisJaWYgKCFpc19wY2hfcG9ydCkKKwkJZ290byBkb25lOworCiAJLyogRm9yIFBDSCBvdXRwdXQsIHRyYWluaW5nIEZESSBsaW5rICovCiAJaWYgKElTX0dFTjYoZGV2KSkKIAkJZ2VuNl9mZGlfbGlua190cmFpbihjcnRjKTsKQEAgLTIxNjMsNyArMjI2Myw3IEBACiAJSTkxNV9XUklURShyZWcsIHRlbXAgfCBUUkFOU19FTkFCTEUpOwogCWlmICh3YWl0X2ZvcihJOTE1X1JFQUQocmVnKSAmIFRSQU5TX1NUQVRFX0VOQUJMRSwgMTAwKSkKIAkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gZW5hYmxlIHRyYW5zY29kZXIgJWRcbiIsIHBpcGUpOwotCitkb25lOgogCWludGVsX2NydGNfbG9hZF9sdXQoY3J0Yyk7CiAJaW50ZWxfdXBkYXRlX2ZiYyhkZXYpOwogCWludGVsX2NydGNfdXBkYXRlX2N1cnNvcihjcnRjLCB0cnVlKTsKQEAgLTU1MzAsNiArNTYzMCwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIGludGVsX2NydGNfcmVzZXQoc3RydWN0IGRybV9jcnRjICpjcnRjKQoreworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCS8qIFJlc2V0IGZsYWdzIGJhY2sgdG8gdGhlICd1bmtub3duJyBzdGF0dXMgc28gdGhhdCB0aGV5CisJICogd2lsbCBiZSBjb3JyZWN0bHkgc2V0IG9uIHRoZSBpbml0aWFsIG1vZGVzZXQuCisJICovCisJaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gLTE7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHJtX2NydGNfaGVscGVyX2Z1bmNzIGludGVsX2hlbHBlcl9mdW5jcyA9IHsKIAkuZHBtcyA9IGludGVsX2NydGNfZHBtcywKIAkubW9kZV9maXh1cCA9IGludGVsX2NydGNfbW9kZV9maXh1cCwKQEAgLTU1NDEsNiArNTY1MSw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVsX2NydGNfZnVuY3MgPSB7CisJLnJlc2V0ID0gaW50ZWxfY3J0Y19yZXNldCwKIAkuY3Vyc29yX3NldCA9IGludGVsX2NydGNfY3Vyc29yX3NldCwKIAkuY3Vyc29yX21vdmUgPSBpbnRlbF9jcnRjX2N1cnNvcl9tb3ZlLAogCS5nYW1tYV9zZXQgPSBpbnRlbF9jcnRjX2dhbW1hX3NldCwKQEAgLTU2MzEsOCArNTc0Miw3IEBACiAJZGV2X3ByaXYtPnBsYW5lX3RvX2NydGNfbWFwcGluZ1tpbnRlbF9jcnRjLT5wbGFuZV0gPSAmaW50ZWxfY3J0Yy0+YmFzZTsKIAlkZXZfcHJpdi0+cGlwZV90b19jcnRjX21hcHBpbmdbaW50ZWxfY3J0Yy0+cGlwZV0gPSAmaW50ZWxfY3J0Yy0+YmFzZTsKIAotCWludGVsX2NydGMtPmN1cnNvcl9hZGRyID0gMDsKLQlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKKwlpbnRlbF9jcnRjX3Jlc2V0KCZpbnRlbF9jcnRjLT5iYXNlKTsKIAlpbnRlbF9jcnRjLT5hY3RpdmUgPSB0cnVlOyAvKiBmb3JjZSB0aGUgcGlwZSBvZmYgb24gc2V0dXBfaW5pdF9jb25maWcgKi8KIAogCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKQEAgLTYxNzIsNyArNjI4Miw3IEBACiAJICogdXNlcnNwYWNlLi4uCiAJICovCiAJSTkxNV9XUklURShHRU42X1JDX1NUQVRFLCAwKTsKLQlfX2dlbjZfZm9yY2Vfd2FrZV9nZXQoZGV2X3ByaXYpOworCV9fZ2VuNl9ndF9mb3JjZV93YWtlX2dldChkZXZfcHJpdik7CiAKIAkvKiBkaXNhYmxlIHRoZSBjb3VudGVycyBhbmQgc2V0IGRldGVybWluaXN0aWMgdGhyZXNob2xkcyAqLwogCUk5MTVfV1JJVEUoR0VONl9SQ19DT05UUk9MLCAwKTsKQEAgLTYyNzAsNyArNjM4MCw3IEBACiAJLyogZW5hYmxlIGFsbCBQTSBpbnRlcnJ1cHRzICovCiAJSTkxNV9XUklURShHRU42X1BNSU5UUk1TSywgMCk7CiAKLQlfX2dlbjZfZm9yY2Vfd2FrZV9wdXQoZGV2X3ByaXYpOworCV9fZ2VuNl9ndF9mb3JjZV93YWtlX3B1dChkZXZfcHJpdik7CiB9CiAKIHZvaWQgaW50ZWxfZW5hYmxlX2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtNjI4Niw3ICs2Mzk2LDkgQEAKIAogCQlpZiAoSVNfR0VONShkZXYpKSB7CiAJCQkvKiBSZXF1aXJlZCBmb3IgRkJDICovCi0JCQlkc3BjbGtfZ2F0ZSB8PSBEUEZEVU5JVF9DTE9DS19HQVRFX0RJU0FCTEU7CisJCQlkc3BjbGtfZ2F0ZSB8PSBEUEZDVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJCURQRkNSVU5JVF9DTE9DS19HQVRFX0RJU0FCTEUgfAorCQkJCURQRkRVTklUX0NMT0NLX0dBVEVfRElTQUJMRTsKIAkJCS8qIFJlcXVpcmVkIGZvciBDeFNSICovCiAJCQlkc3BjbGtfZ2F0ZSB8PSBEUEFSQlVOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFOwogCkBAIC02NDI5LDI5ICs2NTQxLDE5IEBACiAJfQogfQogCi12b2lkIGludGVsX2Rpc2FibGVfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBpcm9ubGFrZV90ZWFyZG93bl9yYzYoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJaWYgKGRldl9wcml2LT5yZW5kZXJjdHgpIHsKLQkJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IGRldl9wcml2LT5yZW5kZXJjdHg7Ci0KLQkJSTkxNV9XUklURShDQ0lELCAwKTsKLQkJUE9TVElOR19SRUFEKENDSUQpOwotCi0JCWk5MTVfZ2VtX29iamVjdF91bnBpbihvYmopOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKKwkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZSgmZGV2X3ByaXYtPnJlbmRlcmN0eC0+YmFzZSk7CiAJCWRldl9wcml2LT5yZW5kZXJjdHggPSBOVUxMOwogCX0KIAogCWlmIChkZXZfcHJpdi0+cHdyY3R4KSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBkZXZfcHJpdi0+cHdyY3R4OwotCi0JCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7Ci0JCVBPU1RJTkdfUkVBRChQV1JDVFhBKTsKLQotCQlpOTE1X2dlbV9vYmplY3RfdW5waW4ob2JqKTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7CisJCWk5MTVfZ2VtX29iamVjdF91bnBpbihkZXZfcHJpdi0+cHdyY3R4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5wd3JjdHgtPmJhc2UpOwogCQlkZXZfcHJpdi0+cHdyY3R4ID0gTlVMTDsKIAl9CiB9CkBAIC02NDYwLDIxICs2NTYyLDM5IEBACiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCS8qIFdha2UgdGhlIEdQVSwgcHJldmVudCBSQzYsIHRoZW4gcmVzdG9yZSBSU1REQllDVEwgKi8KLQlJOTE1X1dSSVRFKFJTVERCWUNUTCwgSTkxNV9SRUFEKFJTVERCWUNUTCkgfCBSQ1hfU1dfRVhJVCk7Ci0Jd2FpdF9mb3IoKChJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIFJTWF9TVEFUVVNfTUFTSykgPT0gUlNYX1NUQVRVU19PTiksCi0JCSAxMCk7Ci0JUE9TVElOR19SRUFEKENDSUQpOwotCUk5MTVfV1JJVEUoUFdSQ1RYQSwgMCk7Ci0JUE9TVElOR19SRUFEKFBXUkNUWEEpOwotCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIH5SQ1hfU1dfRVhJVCk7Ci0JUE9TVElOR19SRUFEKFJTVERCWUNUTCk7Ci0JaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKCZkZXZfcHJpdi0+cmVuZGVyY3R4LT5iYXNlKTsKLQlkZXZfcHJpdi0+cmVuZGVyY3R4ID0gTlVMTDsKLQlpOTE1X2dlbV9vYmplY3RfdW5waW4oZGV2X3ByaXYtPnB3cmN0eCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5wd3JjdHgtPmJhc2UpOwotCWRldl9wcml2LT5wd3JjdHggPSBOVUxMOworCWlmIChJOTE1X1JFQUQoUFdSQ1RYQSkpIHsKKwkJLyogV2FrZSB0aGUgR1BVLCBwcmV2ZW50IFJDNiwgdGhlbiByZXN0b3JlIFJTVERCWUNUTCAqLworCQlJOTE1X1dSSVRFKFJTVERCWUNUTCwgSTkxNV9SRUFEKFJTVERCWUNUTCkgfCBSQ1hfU1dfRVhJVCk7CisJCXdhaXRfZm9yKCgoSTkxNV9SRUFEKFJTVERCWUNUTCkgJiBSU1hfU1RBVFVTX01BU0spID09IFJTWF9TVEFUVVNfT04pLAorCQkJIDUwKTsKKworCQlJOTE1X1dSSVRFKFBXUkNUWEEsIDApOworCQlQT1NUSU5HX1JFQUQoUFdSQ1RYQSk7CisKKwkJSTkxNV9XUklURShSU1REQllDVEwsIEk5MTVfUkVBRChSU1REQllDVEwpICYgflJDWF9TV19FWElUKTsKKwkJUE9TVElOR19SRUFEKFJTVERCWUNUTCk7CisJfQorCisJaXJvbmxha2VfdGVhcmRvd25fcmM2KGRldik7Cit9CisKK3N0YXRpYyBpbnQgaXJvbmxha2Vfc2V0dXBfcmM2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCWlmIChkZXZfcHJpdi0+cmVuZGVyY3R4ID09IE5VTEwpCisJCWRldl9wcml2LT5yZW5kZXJjdHggPSBpbnRlbF9hbGxvY19jb250ZXh0X3BhZ2UoZGV2KTsKKwlpZiAoIWRldl9wcml2LT5yZW5kZXJjdHgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGRldl9wcml2LT5wd3JjdHggPT0gTlVMTCkKKwkJZGV2X3ByaXYtPnB3cmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOworCWlmICghZGV2X3ByaXYtPnB3cmN0eCkgeworCQlpcm9ubGFrZV90ZWFyZG93bl9yYzYoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgaXJvbmxha2VfZW5hYmxlX3JjNihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtNjQ4MiwxNSArNjYwMiwyNiBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldDsKIAorCS8qIHJjNiBkaXNhYmxlZCBieSBkZWZhdWx0IGR1ZSB0byByZXBlYXRlZCByZXBvcnRzIG9mIGhhbmdpbmcgZHVyaW5nCisJICogYm9vdCBhbmQgcmVzdW1lLgorCSAqLworCWlmICghaTkxNV9lbmFibGVfcmM2KQorCQlyZXR1cm47CisKKwlyZXQgPSBpcm9ubGFrZV9zZXR1cF9yYzYoZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm47CisKIAkvKgogCSAqIEdQVSBjYW4gYXV0b21hdGljYWxseSBwb3dlciBkb3duIHRoZSByZW5kZXIgdW5pdCBpZiBnaXZlbiBhIHBhZ2UKIAkgKiB0byBzYXZlIHN0YXRlLgogCSAqLwogCXJldCA9IEJFR0lOX0xQX1JJTkcoNik7CiAJaWYgKHJldCkgewotCQlpcm9ubGFrZV9kaXNhYmxlX3JjNihkZXYpOworCQlpcm9ubGFrZV90ZWFyZG93bl9yYzYoZGV2KTsKIAkJcmV0dXJuOwogCX0KKwogCU9VVF9SSU5HKE1JX1NVU1BFTkRfRkxVU0ggfCBNSV9TVVNQRU5EX0ZMVVNIX0VOKTsKIAlPVVRfUklORyhNSV9TRVRfQ09OVEVYVCk7CiAJT1VUX1JJTkcoZGV2X3ByaXYtPnJlbmRlcmN0eC0+Z3R0X29mZnNldCB8CkBAIC02NTA3LDYgKzY2MzgsNyBAQAogCUk5MTVfV1JJVEUoUlNUREJZQ1RMLCBJOTE1X1JFQUQoUlNUREJZQ1RMKSAmIH5SQ1hfU1dfRVhJVCk7CiB9CiAKKwogLyogU2V0IHVwIGNoaXAgc3BlY2lmaWMgZGlzcGxheSBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGludGVsX2luaXRfZGlzcGxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtNjc0OSwyMSArNjg4MSw5IEBACiAJaWYgKElTX0dFTjYoZGV2KSkKIAkJZ2VuNl9lbmFibGVfcnBzKGRldl9wcml2KTsKIAotCWlmIChJU19JUk9OTEFLRV9NKGRldikpIHsKLQkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IGludGVsX2FsbG9jX2NvbnRleHRfcGFnZShkZXYpOwotCQlpZiAoIWRldl9wcml2LT5yZW5kZXJjdHgpCi0JCQlnb3RvIHNraXBfcmM2OwotCQlkZXZfcHJpdi0+cHdyY3R4ID0gaW50ZWxfYWxsb2NfY29udGV4dF9wYWdlKGRldik7Ci0JCWlmICghZGV2X3ByaXYtPnB3cmN0eCkgewotCQkJaTkxNV9nZW1fb2JqZWN0X3VucGluKGRldl9wcml2LT5yZW5kZXJjdHgpOwotCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJmRldl9wcml2LT5yZW5kZXJjdHgtPmJhc2UpOwotCQkJZGV2X3ByaXYtPnJlbmRlcmN0eCA9IE5VTEw7Ci0JCQlnb3RvIHNraXBfcmM2OwotCQl9CisJaWYgKElTX0lST05MQUtFX00oZGV2KSkKIAkJaXJvbmxha2VfZW5hYmxlX3JjNihkZXYpOwotCX0KIAotc2tpcF9yYzY6CiAJSU5JVF9XT1JLKCZkZXZfcHJpdi0+aWRsZV93b3JrLCBpbnRlbF9pZGxlX3VwZGF0ZSk7CiAJc2V0dXBfdGltZXIoJmRldl9wcml2LT5pZGxlX3RpbWVyLCBpbnRlbF9ncHVfaWRsZV90aW1lciwKIAkJICAgICh1bnNpZ25lZCBsb25nKWRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCAxZjQyNDJiLi41MWNiNGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTE2MzksNiArMTYzOSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgYm9vbAoraW50ZWxfZHBfZGV0ZWN0X2F1ZGlvKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCit7CisJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IGludGVsX2F0dGFjaGVkX2RwKGNvbm5lY3Rvcik7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJYm9vbCBoYXNfYXVkaW8gPSBmYWxzZTsKKworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLCAmaW50ZWxfZHAtPmFkYXB0ZXIpOworCWlmIChlZGlkKSB7CisJCWhhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiBoYXNfYXVkaW87Cit9CisKIHN0YXRpYyBpbnQKIGludGVsX2RwX3NldF9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAogCQkgICAgICBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKQEAgLTE2NTIsMTcgKzE2NzAsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJaWYgKHZhbCA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW8pCisJCWludCBpID0gdmFsOworCQlib29sIGhhc19hdWRpbzsKKworCQlpZiAoaSA9PSBpbnRlbF9kcC0+Zm9yY2VfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9kcC0+Zm9yY2VfYXVkaW8gPSB2YWw7CisJCWludGVsX2RwLT5mb3JjZV9hdWRpbyA9IGk7CiAKLQkJaWYgKHZhbCA+IDAgJiYgaW50ZWxfZHAtPmhhc19hdWRpbykKLQkJCXJldHVybiAwOwotCQlpZiAodmFsIDwgMCAmJiAhaW50ZWxfZHAtPmhhc19hdWRpbykKKwkJaWYgKGkgPT0gMCkKKwkJCWhhc19hdWRpbyA9IGludGVsX2RwX2RldGVjdF9hdWRpbyhjb25uZWN0b3IpOworCQllbHNlCisJCQloYXNfYXVkaW8gPSBpID4gMDsKKworCQlpZiAoaGFzX2F1ZGlvID09IGludGVsX2RwLT5oYXNfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9kcC0+aGFzX2F1ZGlvID0gdmFsID4gMDsKKwkJaW50ZWxfZHAtPmhhc19hdWRpbyA9IGhhc19hdWRpbzsKIAkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCA3NGRiMjU1Li4yYzQzMTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMjk4LDcgKzI5OCw2IEBACiBleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAogCQkJCSAgICB1MTYgKmJsdWUsIGludCByZWdubyk7CiBleHRlcm4gdm9pZCBpbnRlbF9lbmFibGVfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotZXh0ZXJuIHZvaWQgaW50ZWxfZGlzYWJsZV9jbG9ja19nYXRpbmcoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpcm9ubGFrZV9lbmFibGVfZHJwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGlyb25sYWtlX2Rpc2FibGVfZHJwcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGdlbjZfZW5hYmxlX3JwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCmluZGV4IDBkMDI3M2UuLmM2MzVjOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKQEAgLTI1MSw2ICsyNTEsMjcgQEAKIAkJCQkgICAmZGV2X3ByaXYtPmdtYnVzW2ludGVsX2hkbWktPmRkY19idXNdLmFkYXB0ZXIpOwogfQogCitzdGF0aWMgYm9vbAoraW50ZWxfaGRtaV9kZXRlY3RfYXVkaW8oc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKK3sKKwlzdHJ1Y3QgaW50ZWxfaGRtaSAqaW50ZWxfaGRtaSA9IGludGVsX2F0dGFjaGVkX2hkbWkoY29ubmVjdG9yKTsKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjb25uZWN0b3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJYm9vbCBoYXNfYXVkaW8gPSBmYWxzZTsKKworCWVkaWQgPSBkcm1fZ2V0X2VkaWQoY29ubmVjdG9yLAorCQkJICAgICZkZXZfcHJpdi0+Z21idXNbaW50ZWxfaGRtaS0+ZGRjX2J1c10uYWRhcHRlcik7CisJaWYgKGVkaWQpIHsKKwkJaWYgKGVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKKwkJCWhhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCQljb25uZWN0b3ItPmRpc3BsYXlfaW5mby5yYXdfZWRpZCA9IE5VTEw7CisJCWtmcmVlKGVkaWQpOworCX0KKworCXJldHVybiBoYXNfYXVkaW87Cit9CisKIHN0YXRpYyBpbnQKIGludGVsX2hkbWlfc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCSAgICAgIHN0cnVjdCBkcm1fcHJvcGVydHkgKnByb3BlcnR5LApAQCAtMjY0LDE3ICsyODUsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9oZG1pLT5mb3JjZV9hdWRpb19wcm9wZXJ0eSkgewotCQlpZiAodmFsID09IGludGVsX2hkbWktPmZvcmNlX2F1ZGlvKQorCQlpbnQgaSA9IHZhbDsKKwkJYm9vbCBoYXNfYXVkaW87CisKKwkJaWYgKGkgPT0gaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9oZG1pLT5mb3JjZV9hdWRpbyA9IHZhbDsKKwkJaW50ZWxfaGRtaS0+Zm9yY2VfYXVkaW8gPSBpOwogCi0JCWlmICh2YWwgPiAwICYmIGludGVsX2hkbWktPmhhc19hdWRpbykKLQkJCXJldHVybiAwOwotCQlpZiAodmFsIDwgMCAmJiAhaW50ZWxfaGRtaS0+aGFzX2F1ZGlvKQorCQlpZiAoaSA9PSAwKQorCQkJaGFzX2F1ZGlvID0gaW50ZWxfaGRtaV9kZXRlY3RfYXVkaW8oY29ubmVjdG9yKTsKKwkJZWxzZQorCQkJaGFzX2F1ZGlvID0gaSA+IDA7CisKKwkJaWYgKGhhc19hdWRpbyA9PSBpbnRlbF9oZG1pLT5oYXNfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9oZG1pLT5oYXNfYXVkaW8gPSB2YWwgPiAwOworCQlpbnRlbF9oZG1pLT5oYXNfYXVkaW8gPSBoYXNfYXVkaW87CiAJCWdvdG8gZG9uZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwppbmRleCBhY2U4ZDVkLi5iY2RiYTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCkBAIC0yNjEsMTIgKzI2MSw2IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotCS8qIE1ha2Ugc3VyZSBwcmUtOTY1cyBzZXQgZGl0aGVyIGNvcnJlY3RseSAqLwotCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA8IDQpIHsKLQkJaWYgKGRldl9wcml2LT5sdmRzX2RpdGhlcikKLQkJCXBmaXRfY29udHJvbCB8PSBQQU5FTF84VE82X0RJVEhFUl9FTkFCTEU7Ci0JfQotCiAJLyogTmF0aXZlIG1vZGVzIGRvbid0IG5lZWQgZml0dGluZyAqLwogCWlmIChhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSA9PSBtb2RlLT5oZGlzcGxheSAmJgogCSAgICBhZGp1c3RlZF9tb2RlLT52ZGlzcGxheSA9PSBtb2RlLT52ZGlzcGxheSkKQEAgLTM3NCwxMCArMzY4LDE2IEBACiAJfQogCiBvdXQ6CisJLyogSWYgbm90IGVuYWJsaW5nIHNjYWxpbmcsIGJlIGNvbnNpc3RlbnQgYW5kIGFsd2F5cyB1c2UgMC4gKi8KIAlpZiAoKHBmaXRfY29udHJvbCAmIFBGSVRfRU5BQkxFKSA9PSAwKSB7CiAJCXBmaXRfY29udHJvbCA9IDA7CiAJCXBmaXRfcGdtX3JhdGlvcyA9IDA7CiAJfQorCisJLyogTWFrZSBzdXJlIHByZS05NjUgc2V0IGRpdGhlciBjb3JyZWN0bHkgKi8KKwlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPCA0ICYmIGRldl9wcml2LT5sdmRzX2RpdGhlcikKKwkJcGZpdF9jb250cm9sIHw9IFBBTkVMXzhUTzZfRElUSEVSX0VOQUJMRTsKKwogCWlmIChwZml0X2NvbnRyb2wgIT0gaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sIHx8CiAJICAgIHBmaXRfcGdtX3JhdGlvcyAhPSBpbnRlbF9sdmRzLT5wZml0X3BnbV9yYXRpb3MpIHsKIAkJaW50ZWxfbHZkcy0+cGZpdF9jb250cm9sID0gcGZpdF9jb250cm9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX29wcmVnaW9uLmMKaW5kZXggZjI5NWE3YS4uNjRmZDY0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpX2lvLmg+CiAjaW5jbHVkZSA8YWNwaS92aWRlby5oPgogCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtNDc2LDcgKzQ3Nyw3IEBACiAJCXJldHVybiAtRU5PVFNVUFA7CiAJfQogCi0JYmFzZSA9IGlvcmVtYXAoYXNscywgT1BSRUdJT05fU0laRSk7CisJYmFzZSA9IGFjcGlfb3NfaW9yZW1hcChhc2xzLCBPUFJFR0lPTl9TSVpFKTsKIAlpZiAoIWJhc2UpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYwppbmRleCBjNjU5OTJkLi5kODYwYWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3BhbmVsLmMKQEAgLTMwLDggKzMwLDYgQEAKIAogI2luY2x1ZGUgImludGVsX2Rydi5oIgogCi0jZGVmaW5lIFBDSV9MQlBDIDB4ZjQgLyogbGVnYWN5L2NvbWJpbmF0aW9uIGJhY2tsaWdodCBtb2RlcyAqLwotCiB2b2lkCiBpbnRlbF9maXhlZF9wYW5lbF9tb2RlKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpmaXhlZF9tb2RlLAogCQkgICAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCkBAIC0xMTIsMTkgKzExMCw2IEBACiAJZGV2X3ByaXYtPnBjaF9wZl9zaXplID0gKHdpZHRoIDw8IDE2KSB8IGhlaWdodDsKIH0KIAotc3RhdGljIGludCBpc19iYWNrbGlnaHRfY29tYmluYXRpb25fbW9kZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0KLQlpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNCkKLQkJcmV0dXJuIEk5MTVfUkVBRChCTENfUFdNX0NUTDIpICYgQkxNX0NPTUJJTkFUSU9OX01PREU7Ci0KLQlpZiAoSVNfR0VOMihkZXYpKQotCQlyZXR1cm4gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKSAmIEJMTV9MRUdBQ1lfTU9ERTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdTMyIGk5MTVfcmVhZF9ibGNfcHdtX2N0bChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7CiAJdTMyIHZhbDsKQEAgLTE4MSw5ICsxNjYsNiBAQAogCQkJaWYgKElOVEVMX0lORk8oZGV2KS0+Z2VuIDwgNCkKIAkJCQltYXggJj0gfjE7CiAJCX0KLQotCQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSkKLQkJCW1heCAqPSAweGZmOwogCX0KIAogCURSTV9ERUJVR19EUklWRVIoIm1heCBiYWNrbGlnaHQgUFdNID0gJWRcbiIsIG1heCk7CkBAIC0yMDEsMTUgKzE4Myw2IEBACiAJCXZhbCA9IEk5MTVfUkVBRChCTENfUFdNX0NUTCkgJiBCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLOwogCQlpZiAoSVNfUElORVZJRVcoZGV2KSkKIAkJCXZhbCA+Pj0gMTsKLQotCQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSl7Ci0JCQl1OCBsYnBjOwotCi0JCQl2YWwgJj0gfjE7Ci0JCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYtPnBkZXYsIFBDSV9MQlBDLCAmbGJwYyk7Ci0JCQl2YWwgKj0gbGJwYzsKLQkJCXZhbCA+Pj0gMTsKLQkJfQogCX0KIAogCURSTV9ERUJVR19EUklWRVIoImdldCBiYWNrbGlnaHQgUFdNID0gJWRcbiIsIHZhbCk7CkBAIC0yMzIsMTYgKzIwNSw2IEBACiAKIAlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm4gaW50ZWxfcGNoX3BhbmVsX3NldF9iYWNrbGlnaHQoZGV2LCBsZXZlbCk7Ci0KLQlpZiAoaXNfYmFja2xpZ2h0X2NvbWJpbmF0aW9uX21vZGUoZGV2KSl7Ci0JCXUzMiBtYXggPSBpbnRlbF9wYW5lbF9nZXRfbWF4X2JhY2tsaWdodChkZXYpOwotCQl1OCBscGJjOwotCi0JCWxwYmMgPSBsZXZlbCAqIDB4ZmUgLyBtYXggKyAxOwotCQlsZXZlbCAvPSBscGJjOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LT5wZGV2LCBQQ0lfTEJQQywgbHBiYyk7Ci0JfQotCiAJdG1wID0gSTkxNV9SRUFEKEJMQ19QV01fQ1RMKTsKIAlpZiAoSVNfUElORVZJRVcoZGV2KSkgewogCQl0bXAgJj0gfihCQUNLTElHSFRfRFVUWV9DWUNMRV9NQVNLIC0gMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmMKaW5kZXggZjZiOWJhYS4uNDQ1ZjI3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuYwpAQCAtMzQsNiArMzQsMTQgQEAKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCiAKK3N0YXRpYyBpbmxpbmUgaW50IHJpbmdfc3BhY2Uoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKQoreworCWludCBzcGFjZSA9IChyaW5nLT5oZWFkICYgSEVBRF9BRERSKSAtIChyaW5nLT50YWlsICsgOCk7CisJaWYgKHNwYWNlIDwgMCkKKwkJc3BhY2UgKz0gcmluZy0+c2l6ZTsKKwlyZXR1cm4gc3BhY2U7Cit9CisKIHN0YXRpYyB1MzIgaTkxNV9nZW1fZ2V0X3NlcW5vKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0yMDQsMTEgKzIxMiw5IEBACiAJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKHJpbmctPmRldiwgRFJJVkVSX01PREVTRVQpKQogCQlpOTE1X2tlcm5lbF9sb3N0X2NvbnRleHQocmluZy0+ZGV2KTsKIAllbHNlIHsKLQkJcmluZy0+aGVhZCA9IEk5MTVfUkVBRF9IRUFEKHJpbmcpICYgSEVBRF9BRERSOworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7CiAJCXJpbmctPnRhaWwgPSBJOTE1X1JFQURfVEFJTChyaW5nKSAmIFRBSUxfQUREUjsKLQkJcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gKHJpbmctPnRhaWwgKyA4KTsKLQkJaWYgKHJpbmctPnNwYWNlIDwgMCkKLQkJCXJpbmctPnNwYWNlICs9IHJpbmctPnNpemU7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTkyMSwzMiArOTI3LDM0IEBACiAJfQogCiAJcmluZy0+dGFpbCA9IDA7Ci0JcmluZy0+c3BhY2UgPSByaW5nLT5oZWFkIC0gODsKKwlyaW5nLT5zcGFjZSA9IHJpbmdfc3BhY2UocmluZyk7CiAKIAlyZXR1cm4gMDsKIH0KIAogaW50IGludGVsX3dhaXRfcmluZ19idWZmZXIoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLCBpbnQgbikKIHsKLQlpbnQgcmVyZWFkID0gMDsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2OwogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdW5zaWduZWQgbG9uZyBlbmQ7CiAJdTMyIGhlYWQ7CiAKKwkvKiBJZiB0aGUgcmVwb3J0ZWQgaGVhZCBwb3NpdGlvbiBoYXMgd3JhcHBlZCBvciBoYXNuJ3QgYWR2YW5jZWQsCisJICogZmFsbGJhY2sgdG8gdGhlIHNsb3cgYW5kIGFjY3VyYXRlIHBhdGguCisJICovCisJaGVhZCA9IGludGVsX3JlYWRfc3RhdHVzX3BhZ2UocmluZywgNCk7CisJaWYgKGhlYWQgPiByaW5nLT5oZWFkKSB7CisJCXJpbmctPmhlYWQgPSBoZWFkOworCQlyaW5nLT5zcGFjZSA9IHJpbmdfc3BhY2UocmluZyk7CisJCWlmIChyaW5nLT5zcGFjZSA+PSBuKQorCQkJcmV0dXJuIDA7CisJfQorCiAJdHJhY2VfaTkxNV9yaW5nX3dhaXRfYmVnaW4gKGRldik7CiAJZW5kID0gamlmZmllcyArIDMgKiBIWjsKIAlkbyB7Ci0JCS8qIElmIHRoZSByZXBvcnRlZCBoZWFkIHBvc2l0aW9uIGhhcyB3cmFwcGVkIG9yIGhhc24ndCBhZHZhbmNlZCwKLQkJICogZmFsbGJhY2sgdG8gdGhlIHNsb3cgYW5kIGFjY3VyYXRlIHBhdGguCi0JCSAqLwotCQloZWFkID0gaW50ZWxfcmVhZF9zdGF0dXNfcGFnZShyaW5nLCA0KTsKLQkJaWYgKHJlcmVhZCkKLQkJCWhlYWQgPSBJOTE1X1JFQURfSEVBRChyaW5nKTsKLQkJcmluZy0+aGVhZCA9IGhlYWQgJiBIRUFEX0FERFI7Ci0JCXJpbmctPnNwYWNlID0gcmluZy0+aGVhZCAtIChyaW5nLT50YWlsICsgOCk7Ci0JCWlmIChyaW5nLT5zcGFjZSA8IDApCi0JCQlyaW5nLT5zcGFjZSArPSByaW5nLT5zaXplOworCQlyaW5nLT5oZWFkID0gSTkxNV9SRUFEX0hFQUQocmluZyk7CisJCXJpbmctPnNwYWNlID0gcmluZ19zcGFjZShyaW5nKTsKIAkJaWYgKHJpbmctPnNwYWNlID49IG4pIHsKIAkJCXRyYWNlX2k5MTVfcmluZ193YWl0X2VuZChkZXYpOwogCQkJcmV0dXJuIDA7CkBAIC05NjEsNyArOTY5LDYgQEAKIAkJbXNsZWVwKDEpOwogCQlpZiAoYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKQogCQkJcmV0dXJuIC1FQUdBSU47Ci0JCXJlcmVhZCA9IDE7CiAJfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kKSk7CiAJdHJhY2VfaTkxNV9yaW5nX3dhaXRfZW5kIChkZXYpOwogCXJldHVybiAtRUJVU1k7CkBAIC0xMDUyLDIyICsxMDU5LDI1IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2VuNl9yaW5nX2ZsdXNoKHN0cnVjdCBpbnRlbF9yaW5nX2J1ZmZlciAqcmluZywKLQkJCSAgIHUzMiBpbnZhbGlkYXRlX2RvbWFpbnMsCi0JCQkgICB1MzIgZmx1c2hfZG9tYWlucykKKwkJCSAgIHUzMiBpbnZhbGlkYXRlLCB1MzIgZmx1c2gpCiB7CisJdWludDMyX3QgY21kOwogCWludCByZXQ7CiAKLQlpZiAoKGZsdXNoX2RvbWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fUkVOREVSKSA9PSAwKQorCWlmICgoKGludmFsaWRhdGUgfCBmbHVzaCkgJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBpbnRlbF9yaW5nX2JlZ2luKHJpbmcsIDQpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfRkxVU0hfRFcpOworCWNtZCA9IE1JX0ZMVVNIX0RXOworCWlmIChpbnZhbGlkYXRlICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpCisJCWNtZCB8PSBNSV9JTlZBTElEQVRFX1RMQiB8IE1JX0lOVkFMSURBVEVfQlNEOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBjbWQpOwogCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7Ci0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOworCWludGVsX3JpbmdfZW1pdChyaW5nLCBNSV9OT09QKTsKIAlpbnRlbF9yaW5nX2FkdmFuY2UocmluZyk7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIzLDIyICsxMjMzLDI1IEBACiB9CiAKIHN0YXRpYyBpbnQgYmx0X3JpbmdfZmx1c2goc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nLAotCQkJICAgdTMyIGludmFsaWRhdGVfZG9tYWlucywKLQkJCSAgIHUzMiBmbHVzaF9kb21haW5zKQorCQkJICB1MzIgaW52YWxpZGF0ZSwgdTMyIGZsdXNoKQogeworCXVpbnQzMl90IGNtZDsKIAlpbnQgcmV0OwogCi0JaWYgKChmbHVzaF9kb21haW5zICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKKwlpZiAoKChpbnZhbGlkYXRlIHwgZmx1c2gpICYgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUikgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSBibHRfcmluZ19iZWdpbihyaW5nLCA0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaW50ZWxfcmluZ19lbWl0KHJpbmcsIE1JX0ZMVVNIX0RXKTsKKwljbWQgPSBNSV9GTFVTSF9EVzsKKwlpZiAoaW52YWxpZGF0ZSAmIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpCisJCWNtZCB8PSBNSV9JTlZBTElEQVRFX1RMQjsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgY21kKTsKIAlpbnRlbF9yaW5nX2VtaXQocmluZywgMCk7CiAJaW50ZWxfcmluZ19lbWl0KHJpbmcsIDApOwotCWludGVsX3JpbmdfZW1pdChyaW5nLCAwKTsKKwlpbnRlbF9yaW5nX2VtaXQocmluZywgTUlfTk9PUCk7CiAJaW50ZWxfcmluZ19hZHZhbmNlKHJpbmcpOwogCXJldHVybiAwOwogfQpAQCAtMTI5Miw2ICsxMzA1LDQ4IEBACiAJcmV0dXJuIGludGVsX2luaXRfcmluZ19idWZmZXIoZGV2LCByaW5nKTsKIH0KIAoraW50IGludGVsX3JlbmRlcl9yaW5nX2luaXRfZHJpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBzdGFydCwgdTMyIHNpemUpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nID0gJmRldl9wcml2LT5yaW5nW1JDU107CisKKwkqcmluZyA9IHJlbmRlcl9yaW5nOworCWlmIChJTlRFTF9JTkZPKGRldiktPmdlbiA+PSA2KSB7CisJCXJpbmctPmFkZF9yZXF1ZXN0ID0gZ2VuNl9hZGRfcmVxdWVzdDsKKwkJcmluZy0+aXJxX2dldCA9IGdlbjZfcmVuZGVyX3JpbmdfZ2V0X2lycTsKKwkJcmluZy0+aXJxX3B1dCA9IGdlbjZfcmVuZGVyX3JpbmdfcHV0X2lycTsKKwl9IGVsc2UgaWYgKElTX0dFTjUoZGV2KSkgeworCQlyaW5nLT5hZGRfcmVxdWVzdCA9IHBjX3JlbmRlcl9hZGRfcmVxdWVzdDsKKwkJcmluZy0+Z2V0X3NlcW5vID0gcGNfcmVuZGVyX2dldF9zZXFubzsKKwl9CisKKwlyaW5nLT5kZXYgPSBkZXY7CisJSU5JVF9MSVNUX0hFQUQoJnJpbmctPmFjdGl2ZV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+cmVxdWVzdF9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcmluZy0+Z3B1X3dyaXRlX2xpc3QpOworCisJcmluZy0+c2l6ZSA9IHNpemU7CisJcmluZy0+ZWZmZWN0aXZlX3NpemUgPSByaW5nLT5zaXplOworCWlmIChJU19JODMwKHJpbmctPmRldikpCisJCXJpbmctPmVmZmVjdGl2ZV9zaXplIC09IDEyODsKKworCXJpbmctPm1hcC5vZmZzZXQgPSBzdGFydDsKKwlyaW5nLT5tYXAuc2l6ZSA9IHNpemU7CisJcmluZy0+bWFwLnR5cGUgPSAwOworCXJpbmctPm1hcC5mbGFncyA9IDA7CisJcmluZy0+bWFwLm10cnIgPSAwOworCisJZHJtX2NvcmVfaW9yZW1hcF93YygmcmluZy0+bWFwLCBkZXYpOworCWlmIChyaW5nLT5tYXAuaGFuZGxlID09IE5VTEwpIHsKKwkJRFJNX0VSUk9SKCJjYW4gbm90IGlvcmVtYXAgdmlydHVhbCBhZGRyZXNzIGZvciIKKwkJCSAgIiByaW5nIGJ1ZmZlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJpbmctPnZpcnR1YWxfc3RhcnQgPSAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKilyaW5nLT5tYXAuaGFuZGxlOworCXJldHVybiAwOworfQorCiBpbnQgaW50ZWxfaW5pdF9ic2RfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3JpbmdidWZmZXIuaAppbmRleCA1YjBhYmZhLi4zNDMwNjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9yaW5nYnVmZmVyLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5oCkBAIC0xNCwyMiArMTQsMjMgQEAKIAlzdHJ1Y3QJCWRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKIH07CiAKLSNkZWZpbmUgSTkxNV9SSU5HX1JFQUQocmVnKSBpOTE1X3NhZmVfcmVhZChkZXZfcHJpdiwgcmVnKQorI2RlZmluZSBJOTE1X1JJTkdfUkVBRChyZWcpIGk5MTVfZ3RfcmVhZChkZXZfcHJpdiwgcmVnKQorI2RlZmluZSBJOTE1X1JJTkdfV1JJVEUocmVnLCB2YWwpIGk5MTVfZ3Rfd3JpdGUoZGV2X3ByaXYsIHJlZywgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9UQUlMKHJpbmcpIEk5MTVfUklOR19SRUFEKFJJTkdfVEFJTCgocmluZyktPm1taW9fYmFzZSkpCi0jZGVmaW5lIEk5MTVfV1JJVEVfVEFJTChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19UQUlMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorI2RlZmluZSBJOTE1X1dSSVRFX1RBSUwocmluZywgdmFsKSBJOTE1X1JJTkdfV1JJVEUoUklOR19UQUlMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9TVEFSVChyaW5nKSBJOTE1X1JJTkdfUkVBRChSSU5HX1NUQVJUKChyaW5nKS0+bW1pb19iYXNlKSkKLSNkZWZpbmUgSTkxNV9XUklURV9TVEFSVChyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19TVEFSVCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKKyNkZWZpbmUgSTkxNV9XUklURV9TVEFSVChyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX1NUQVJUKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQogCiAjZGVmaW5lIEk5MTVfUkVBRF9IRUFEKHJpbmcpICBJOTE1X1JJTkdfUkVBRChSSU5HX0hFQUQoKHJpbmcpLT5tbWlvX2Jhc2UpKQotI2RlZmluZSBJOTE1X1dSSVRFX0hFQUQocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfSEVBRCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKKyNkZWZpbmUgSTkxNV9XUklURV9IRUFEKHJpbmcsIHZhbCkgSTkxNV9SSU5HX1dSSVRFKFJJTkdfSEVBRCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKIAogI2RlZmluZSBJOTE1X1JFQURfQ1RMKHJpbmcpIEk5MTVfUklOR19SRUFEKFJJTkdfQ1RMKChyaW5nKS0+bW1pb19iYXNlKSkKLSNkZWZpbmUgSTkxNV9XUklURV9DVEwocmluZywgdmFsKSBJOTE1X1dSSVRFKFJJTkdfQ1RMKChyaW5nKS0+bW1pb19iYXNlKSwgdmFsKQorI2RlZmluZSBJOTE1X1dSSVRFX0NUTChyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX0NUTCgocmluZyktPm1taW9fYmFzZSksIHZhbCkKIAotI2RlZmluZSBJOTE1X1dSSVRFX0lNUihyaW5nLCB2YWwpIEk5MTVfV1JJVEUoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpLCB2YWwpCiAjZGVmaW5lIEk5MTVfUkVBRF9JTVIocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19JTVIoKHJpbmcpLT5tbWlvX2Jhc2UpKQorI2RlZmluZSBJOTE1X1dSSVRFX0lNUihyaW5nLCB2YWwpIEk5MTVfUklOR19XUklURShSSU5HX0lNUigocmluZyktPm1taW9fYmFzZSksIHZhbCkKIAogI2RlZmluZSBJOTE1X1JFQURfTk9QSUQocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19OT1BJRCgocmluZyktPm1taW9fYmFzZSkpCiAjZGVmaW5lIEk5MTVfUkVBRF9TWU5DXzAocmluZykgSTkxNV9SSU5HX1JFQUQoUklOR19TWU5DXzAoKHJpbmcpLT5tbWlvX2Jhc2UpKQpAQCAtMTY2LDQgKzE2Nyw3IEBACiB1MzIgaW50ZWxfcmluZ19nZXRfYWN0aXZlX2hlYWQoc3RydWN0IGludGVsX3JpbmdfYnVmZmVyICpyaW5nKTsKIHZvaWQgaW50ZWxfcmluZ19zZXR1cF9zdGF0dXNfcGFnZShzdHJ1Y3QgaW50ZWxfcmluZ19idWZmZXIgKnJpbmcpOwogCisvKiBEUkkgd2FydHMgKi8KK2ludCBpbnRlbF9yZW5kZXJfcmluZ19pbml0X2RyaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1NjQgc3RhcnQsIHUzMiBzaXplKTsKKwogI2VuZGlmIC8qIF9JTlRFTF9SSU5HQlVGRkVSX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKaW5kZXggNDVjZDM3Ni4uN2M1MGNkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwpAQCAtNDYsNiArNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFNEVk9fVFZfTUFTSykKIAogI2RlZmluZSBJU19UVihjKQkoYy0+b3V0cHV0X2ZsYWcgJiBTRFZPX1RWX01BU0spCisjZGVmaW5lIElTX1RNRFMoYykJKGMtPm91dHB1dF9mbGFnICYgU0RWT19UTURTX01BU0spCiAjZGVmaW5lIElTX0xWRFMoYykJKGMtPm91dHB1dF9mbGFnICYgU0RWT19MVkRTX01BU0spCiAjZGVmaW5lIElTX1RWX09SX0xWRFMoYykgKGMtPm91dHB1dF9mbGFnICYgKFNEVk9fVFZfTUFTSyB8IFNEVk9fTFZEU19NQVNLKSkKIApAQCAtNDczLDIwICs0NzQsNiBAQAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCi0JaSA9IDM7Ci0Jd2hpbGUgKHN0YXR1cyA9PSBTRFZPX0NNRF9TVEFUVVNfUEVORElORyAmJiBpLS0pIHsKLQkJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAotCQkJCQkgIFNEVk9fSTJDX0NNRF9TVEFUVVMsCi0JCQkJCSAgJnN0YXR1cykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfQotCWlmIChzdGF0dXMgIT0gU0RWT19DTURfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJRFJNX0RFQlVHX0tNUygiY29tbWFuZCByZXR1cm5zIHJlc3BvbnNlICVzIFslZF1cbiIsCi0JCQkgICAgICBzdGF0dXMgPD0gU0RWT19DTURfU1RBVFVTX1NDQUxJTkdfTk9UX1NVUFAgPyBjbWRfc3RhdHVzX25hbWVzW3N0YXR1c10gOiAiPz8/IiwKLQkJCSAgICAgIHN0YXR1cyk7Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDk3LDYgKzQ4NCw4IEBACiAJdTggc3RhdHVzOwogCWludCBpOwogCisJRFJNX0RFQlVHX0tNUygiJXM6IFI6ICIsIFNEVk9fTkFNRShpbnRlbF9zZHZvKSk7CisKIAkvKgogCSAqIFRoZSBkb2N1bWVudGF0aW9uIHN0YXRlcyB0aGF0IGFsbCBjb21tYW5kcyB3aWxsIGJlCiAJICogcHJvY2Vzc2VkIHdpdGhpbiAxNcK1cywgYW5kIHRoYXQgd2UgbmVlZCBvbmx5IHBvbGwKQEAgLTUwNSwxNCArNDk0LDE5IEBACiAJICoKIAkgKiBDaGVjayA1IHRpbWVzIGluIGNhc2UgdGhlIGhhcmR3YXJlIGZhaWxlZCB0byByZWFkIHRoZSBkb2NzLgogCSAqLwotCWRvIHsKKwlpZiAoIWludGVsX3Nkdm9fcmVhZF9ieXRlKGludGVsX3Nkdm8sCisJCQkJICBTRFZPX0kyQ19DTURfU1RBVFVTLAorCQkJCSAgJnN0YXR1cykpCisJCWdvdG8gbG9nX2ZhaWw7CisKKwl3aGlsZSAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HICYmIHJldHJ5LS0pIHsKKwkJdWRlbGF5KDE1KTsKIAkJaWYgKCFpbnRlbF9zZHZvX3JlYWRfYnl0ZShpbnRlbF9zZHZvLAogCQkJCQkgIFNEVk9fSTJDX0NNRF9TVEFUVVMsCiAJCQkJCSAgJnN0YXR1cykpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JfSB3aGlsZSAoc3RhdHVzID09IFNEVk9fQ01EX1NUQVRVU19QRU5ESU5HICYmIC0tcmV0cnkpOworCQkJZ290byBsb2dfZmFpbDsKKwl9CiAKLQlEUk1fREVCVUdfS01TKCIlczogUjogIiwgU0RWT19OQU1FKGludGVsX3Nkdm8pKTsKIAlpZiAoc3RhdHVzIDw9IFNEVk9fQ01EX1NUQVRVU19TQ0FMSU5HX05PVF9TVVBQKQogCQlEUk1fTE9HX0tNUygiKCVzKSIsIGNtZF9zdGF0dXNfbmFtZXNbc3RhdHVzXSk7CiAJZWxzZQpAQCAtNTMzLDcgKzUyNyw3IEBACiAJcmV0dXJuIHRydWU7CiAKIGxvZ19mYWlsOgotCURSTV9MT0dfS01TKCJcbiIpOworCURSTV9MT0dfS01TKCIuLi4gZmFpbGVkXG4iKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTU1MCw2ICs1NDQsNyBAQAogc3RhdGljIGJvb2wgaW50ZWxfc2R2b19zZXRfY29udHJvbF9idXNfc3dpdGNoKHN0cnVjdCBpbnRlbF9zZHZvICppbnRlbF9zZHZvLAogCQkJCQkgICAgICB1OCBkZGNfYnVzKQogeworCS8qIFRoaXMgbXVzdCBiZSB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHdyaXRlIGJlZm9yZSB0aGUgaTJjIHhmZXIgKi8KIAlyZXR1cm4gaW50ZWxfc2R2b193cml0ZV9jbWQoaW50ZWxfc2R2bywKIAkJCQkgICAgU0RWT19DTURfU0VUX0NPTlRST0xfQlVTX1NXSVRDSCwKIAkJCQkgICAgJmRkY19idXMsIDEpOwpAQCAtNTU3LDcgKzU1MiwxMCBAQAogCiBzdGF0aWMgYm9vbCBpbnRlbF9zZHZvX3NldF92YWx1ZShzdHJ1Y3QgaW50ZWxfc2R2byAqaW50ZWxfc2R2bywgdTggY21kLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewotCXJldHVybiBpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBjbWQsIGRhdGEsIGxlbik7CisJaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBjbWQsIGRhdGEsIGxlbikpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBpbnRlbF9zZHZvX3JlYWRfcmVzcG9uc2UoaW50ZWxfc2R2bywgTlVMTCwgMCk7CiB9CiAKIHN0YXRpYyBib29sCkBAIC04NTksMTggKzg1NywyMSBAQAogCiAJaW50ZWxfZGlwX2luZm9mcmFtZV9jc3VtKCZhdmlfaWYpOwogCi0JaWYgKCFpbnRlbF9zZHZvX3dyaXRlX2NtZChpbnRlbF9zZHZvLCBTRFZPX0NNRF9TRVRfSEJVRl9JTkRFWCwKKwlpZiAoIWludGVsX3Nkdm9fc2V0X3ZhbHVlKGludGVsX3Nkdm8sCisJCQkJICBTRFZPX0NNRF9TRVRfSEJVRl9JTkRFWCwKIAkJCQkgIHNldF9idWZfaW5kZXgsIDIpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGF2aV9pZik7IGkgKz0gOCkgewotCQlpZiAoIWludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIFNEVk9fQ01EX1NFVF9IQlVGX0RBVEEsCisJCWlmICghaW50ZWxfc2R2b19zZXRfdmFsdWUoaW50ZWxfc2R2bywKKwkJCQkJICBTRFZPX0NNRF9TRVRfSEJVRl9EQVRBLAogCQkJCQkgIGRhdGEsIDgpKQogCQkJcmV0dXJuIGZhbHNlOwogCQlkYXRhKys7CiAJfQogCi0JcmV0dXJuIGludGVsX3Nkdm9fd3JpdGVfY21kKGludGVsX3Nkdm8sIFNEVk9fQ01EX1NFVF9IQlVGX1RYUkFURSwKKwlyZXR1cm4gaW50ZWxfc2R2b19zZXRfdmFsdWUoaW50ZWxfc2R2bywKKwkJCQkgICAgU0RWT19DTURfU0VUX0hCVUZfVFhSQVRFLAogCQkJCSAgICAmdHhfcmF0ZSwgMSk7CiB9CiAKQEAgLTEzNTksNyArMTM2MCw4IEBACiAJCQkJaW50ZWxfc2R2by0+aGFzX2hkbWlfbW9uaXRvciA9IGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKGVkaWQpOwogCQkJCWludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvID0gZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKGVkaWQpOwogCQkJfQotCQl9CisJCX0gZWxzZQorCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKIAkJa2ZyZWUoZWRpZCk7CiAJfQpAQCAtMTQwNywxMCArMTQwOSwyNSBAQAogCiAJaWYgKChpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+b3V0cHV0X2ZsYWcgJiByZXNwb25zZSkgPT0gMCkKIAkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Ci0JZWxzZSBpZiAocmVzcG9uc2UgJiBTRFZPX1RNRFNfTUFTSykKKwllbHNlIGlmIChJU19UTURTKGludGVsX3Nkdm9fY29ubmVjdG9yKSkKIAkJcmV0ID0gaW50ZWxfc2R2b19oZG1pX3NpbmtfZGV0ZWN0KGNvbm5lY3Rvcik7Ci0JZWxzZQotCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwllbHNlIHsKKwkJc3RydWN0IGVkaWQgKmVkaWQ7CisKKwkJLyogaWYgd2UgaGF2ZSBhbiBlZGlkIGNoZWNrIGl0IG1hdGNoZXMgdGhlIGNvbm5lY3Rpb24gKi8KKwkJZWRpZCA9IGludGVsX3Nkdm9fZ2V0X2VkaWQoY29ubmVjdG9yKTsKKwkJaWYgKGVkaWQgPT0gTlVMTCkKKwkJCWVkaWQgPSBpbnRlbF9zZHZvX2dldF9hbmFsb2dfZWRpZChjb25uZWN0b3IpOworCQlpZiAoZWRpZCAhPSBOVUxMKSB7CisJCQlpZiAoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJZWxzZQorCQkJCXJldCA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCQkJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSBOVUxMOworCQkJa2ZyZWUoZWRpZCk7CisJCX0gZWxzZQorCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CisJfQogCiAJLyogTWF5IHVwZGF0ZSBlbmNvZGVyIGZsYWcgZm9yIGxpa2UgY2xvY2sgZm9yIFNEVk8gVFYsIGV0Yy4qLwogCWlmIChyZXQgPT0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQpIHsKQEAgLTE0NDYsMTAgKzE0NjMsMTUgQEAKIAkJZWRpZCA9IGludGVsX3Nkdm9fZ2V0X2FuYWxvZ19lZGlkKGNvbm5lY3Rvcik7CiAKIAlpZiAoZWRpZCAhPSBOVUxMKSB7Ci0JCWlmIChlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpIHsKKwkJc3RydWN0IGludGVsX3Nkdm9fY29ubmVjdG9yICppbnRlbF9zZHZvX2Nvbm5lY3RvciA9IHRvX2ludGVsX3Nkdm9fY29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCWJvb2wgbW9uaXRvcl9pc19kaWdpdGFsID0gISEoZWRpZC0+aW5wdXQgJiBEUk1fRURJRF9JTlBVVF9ESUdJVEFMKTsKKwkJYm9vbCBjb25uZWN0b3JfaXNfZGlnaXRhbCA9ICEhSVNfVE1EUyhpbnRlbF9zZHZvX2Nvbm5lY3Rvcik7CisKKwkJaWYgKGNvbm5lY3Rvcl9pc19kaWdpdGFsID09IG1vbml0b3JfaXNfZGlnaXRhbCkgewogCQkJZHJtX21vZGVfY29ubmVjdG9yX3VwZGF0ZV9lZGlkX3Byb3BlcnR5KGNvbm5lY3RvciwgZWRpZCk7CiAJCQlkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKIAkJfQorCiAJCWNvbm5lY3Rvci0+ZGlzcGxheV9pbmZvLnJhd19lZGlkID0gTlVMTDsKIAkJa2ZyZWUoZWRpZCk7CiAJfQpAQCAtMTY2OCw2ICsxNjkwLDIyIEBACiAJa2ZyZWUoY29ubmVjdG9yKTsKIH0KIAorc3RhdGljIGJvb2wgaW50ZWxfc2R2b19kZXRlY3RfaGRtaV9hdWRpbyhzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQoreworCXN0cnVjdCBpbnRlbF9zZHZvICppbnRlbF9zZHZvID0gaW50ZWxfYXR0YWNoZWRfc2R2byhjb25uZWN0b3IpOworCXN0cnVjdCBlZGlkICplZGlkOworCWJvb2wgaGFzX2F1ZGlvID0gZmFsc2U7CisKKwlpZiAoIWludGVsX3Nkdm8tPmlzX2hkbWkpCisJCXJldHVybiBmYWxzZTsKKworCWVkaWQgPSBpbnRlbF9zZHZvX2dldF9lZGlkKGNvbm5lY3Rvcik7CisJaWYgKGVkaWQgIT0gTlVMTCAmJiBlZGlkLT5pbnB1dCAmIERSTV9FRElEX0lOUFVUX0RJR0lUQUwpCisJCWhhc19hdWRpbyA9IGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhlZGlkKTsKKworCXJldHVybiBoYXNfYXVkaW87Cit9CisKIHN0YXRpYyBpbnQKIGludGVsX3Nkdm9fc2V0X3Byb3BlcnR5KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpwcm9wZXJ0eSwKQEAgLTE2ODQsMTcgKzE3MjIsMjMgQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmIChwcm9wZXJ0eSA9PSBpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW9fcHJvcGVydHkpIHsKLQkJaWYgKHZhbCA9PSBpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW8pCisJCWludCBpID0gdmFsOworCQlib29sIGhhc19hdWRpbzsKKworCQlpZiAoaSA9PSBpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW8pCiAJCQlyZXR1cm4gMDsKIAotCQlpbnRlbF9zZHZvX2Nvbm5lY3Rvci0+Zm9yY2VfYXVkaW8gPSB2YWw7CisJCWludGVsX3Nkdm9fY29ubmVjdG9yLT5mb3JjZV9hdWRpbyA9IGk7CiAKLQkJaWYgKHZhbCA+IDAgJiYgaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8pCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHZhbCA8IDAgJiYgIWludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvKQorCQlpZiAoaSA9PSAwKQorCQkJaGFzX2F1ZGlvID0gaW50ZWxfc2R2b19kZXRlY3RfaGRtaV9hdWRpbyhjb25uZWN0b3IpOworCQllbHNlCisJCQloYXNfYXVkaW8gPSBpID4gMDsKKworCQlpZiAoaGFzX2F1ZGlvID09IGludGVsX3Nkdm8tPmhhc19oZG1pX2F1ZGlvKQogCQkJcmV0dXJuIDA7CiAKLQkJaW50ZWxfc2R2by0+aGFzX2hkbWlfYXVkaW8gPSB2YWwgPiAwOworCQlpbnRlbF9zZHZvLT5oYXNfaGRtaV9hdWRpbyA9IGhhc19hdWRpbzsKIAkJZ290byBkb25lOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKaW5kZXggOTMyMDZlNC4uZmU0YTUzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCkBAIC0xMjM0LDcgKzEyMzQsOCBAQAogICogXHJldHVybiBmYWxzZSBpZiBUViBpcyBkaXNjb25uZWN0ZWQuCiAgKi8KIHN0YXRpYyBpbnQKLWludGVsX3R2X2RldGVjdF90eXBlIChzdHJ1Y3QgaW50ZWxfdHYgKmludGVsX3R2KQoraW50ZWxfdHZfZGV0ZWN0X3R5cGUgKHN0cnVjdCBpbnRlbF90diAqaW50ZWxfdHYsCisJCSAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CiAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyID0gJmludGVsX3R2LT5iYXNlLmJhc2U7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGVuY29kZXItPmRldjsKQEAgLTEyNDUsMTEgKzEyNDYsMTMgQEAKIAlpbnQgdHlwZTsKIAogCS8qIERpc2FibGUgVFYgaW50ZXJydXB0cyBhcm91bmQgbG9hZCBkZXRlY3Qgb3Igd2UnbGwgcmVjdXJzZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKLQlpOTE1X2Rpc2FibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDAsCi0JCQkgICAgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRSB8Ci0JCQkgICAgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJaWYgKGNvbm5lY3Rvci0+cG9sbGVkICYgRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJCWk5MTVfZGlzYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMCwKKwkJCQkgICAgICBQSVBFX0hPVFBMVUdfSU5URVJSVVBUX0VOQUJMRSB8CisJCQkJICAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwl9CiAKIAlzYXZlX3R2X2RhYyA9IHR2X2RhYyA9IEk5MTVfUkVBRChUVl9EQUMpOwogCXNhdmVfdHZfY3RsID0gdHZfY3RsID0gSTkxNV9SRUFEKFRWX0NUTCk7CkBAIC0xMzAyLDExICsxMzA1LDEzIEBACiAJSTkxNV9XUklURShUVl9DVEwsIHNhdmVfdHZfY3RsKTsKIAogCS8qIFJlc3RvcmUgaW50ZXJydXB0IGNvbmZpZyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKLQlpOTE1X2VuYWJsZV9waXBlc3RhdChkZXZfcHJpdiwgMCwKLQkJCSAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAotCQkJICAgICBQSVBFX0hPVFBMVUdfVFZfSU5URVJSVVBUX0VOQUJMRSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJaWYgKGNvbm5lY3Rvci0+cG9sbGVkICYgRFJNX0NPTk5FQ1RPUl9QT0xMX0hQRCkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmlycV9sb2NrLCBpcnFmbGFncyk7CisJCWk5MTVfZW5hYmxlX3BpcGVzdGF0KGRldl9wcml2LCAwLAorCQkJCSAgICAgUElQRV9IT1RQTFVHX0lOVEVSUlVQVF9FTkFCTEUgfAorCQkJCSAgICAgUElQRV9IT1RQTFVHX1RWX0lOVEVSUlVQVF9FTkFCTEUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+aXJxX2xvY2ssIGlycWZsYWdzKTsKKwl9CiAKIAlyZXR1cm4gdHlwZTsKIH0KQEAgLTEzNTYsNyArMTM2MSw3IEBACiAJZHJtX21vZGVfc2V0X2NydGNpbmZvKCZtb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKIAogCWlmIChpbnRlbF90di0+YmFzZS5iYXNlLmNydGMgJiYgaW50ZWxfdHYtPmJhc2UuYmFzZS5jcnRjLT5lbmFibGVkKSB7Ci0JCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShpbnRlbF90dik7CisJCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShpbnRlbF90diwgY29ubmVjdG9yKTsKIAl9IGVsc2UgaWYgKGZvcmNlKSB7CiAJCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAkJaW50IGRwbXNfbW9kZTsKQEAgLTEzNjQsNyArMTM2OSw3IEBACiAJCWNydGMgPSBpbnRlbF9nZXRfbG9hZF9kZXRlY3RfcGlwZSgmaW50ZWxfdHYtPmJhc2UsIGNvbm5lY3RvciwKIAkJCQkJCSAgJm1vZGUsICZkcG1zX21vZGUpOwogCQlpZiAoY3J0YykgewotCQkJdHlwZSA9IGludGVsX3R2X2RldGVjdF90eXBlKGludGVsX3R2KTsKKwkJCXR5cGUgPSBpbnRlbF90dl9kZXRlY3RfdHlwZShpbnRlbF90diwgY29ubmVjdG9yKTsKIAkJCWludGVsX3JlbGVhc2VfbG9hZF9kZXRlY3RfcGlwZSgmaW50ZWxfdHYtPmJhc2UsIGNvbm5lY3RvciwKIAkJCQkJCSAgICAgICBkcG1zX21vZGUpOwogCQl9IGVsc2UKQEAgLTE2NTgsNiArMTY2MywxOCBAQAogCWludGVsX2VuY29kZXIgPSAmaW50ZWxfdHYtPmJhc2U7CiAJY29ubmVjdG9yID0gJmludGVsX2Nvbm5lY3Rvci0+YmFzZTsKIAorCS8qIFRoZSBkb2N1bWVudGF0aW9uLCBmb3IgdGhlIG9sZGVyIGNoaXBzZXRzIGF0IGxlYXN0LCByZWNvbW1lbmQKKwkgKiB1c2luZyBhIHBvbGxpbmcgbWV0aG9kIHJhdGhlciB0aGFuIGhvdHBsdWcgZGV0ZWN0aW9uIGZvciBUVnMuCisJICogVGhpcyBpcyBiZWNhdXNlIGluIG9yZGVyIHRvIHBlcmZvcm0gdGhlIGhvdHBsdWcgZGV0ZWN0aW9uLCB0aGUgUExMcworCSAqIGZvciB0aGUgVFYgbXVzdCBiZSBrZXB0IGFsaXZlIGluY3JlYXNpbmcgcG93ZXIgZHJhaW4gYW5kIHN0YXJ2aW5nCisJICogYmFuZHdpZHRoIGZyb20gb3RoZXIgZW5jb2RlcnMuIE5vdGFibHkgZm9yIGluc3RhbmNlLCBpdCBjYXVzZXMKKwkgKiBwaXBlIHVuZGVycnVucyBvbiBDcmVzdGxpbmUgd2hlbiB0aGlzIGVuY29kZXIgaXMgc3VwcG9zZWRseSBpZGxlLgorCSAqCisJICogTW9yZSByZWNlbnQgY2hpcHNldHMgZmF2b3VyIEhETUkgcmF0aGVyIHRoYW4gaW50ZWdyYXRlZCBTLVZpZGVvLgorCSAqLworCWNvbm5lY3Rvci0+cG9sbGVkID0KKwkJRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1QgfCBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVDVDsKKwogCWRybV9jb25uZWN0b3JfaW5pdChkZXYsIGNvbm5lY3RvciwgJmludGVsX3R2X2Nvbm5lY3Rvcl9mdW5jcywKIAkJCSAgIERSTV9NT0RFX0NPTk5FQ1RPUl9TVklERU8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCmluZGV4IDJhZWY1Y2QuLjZiZGFiODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC02MjI4LDcgKzYyMjgsNyBAQAogCQllbnRyeS0+dHZjb25mLmhhc19jb21wb25lbnRfb3V0cHV0ID0gZmFsc2U7CiAJCWJyZWFrOwogCWNhc2UgT1VUUFVUX0xWRFM6Ci0JCWlmICgoY29ubiAmIDB4MDAwMDNmMDApICE9IDB4MTApCisJCWlmICgoY29ubiAmIDB4MDAwMDNmMDApID4+IDggIT0gMHgxMCkKIAkJCWVudHJ5LT5sdmRzY29uZi51c2Vfc3RyYXBzX2Zvcl9tb2RlID0gdHJ1ZTsKIAkJZW50cnktPmx2ZHNjb25mLnVzZV9wb3dlcl9zY3JpcHRzID0gdHJ1ZTsKIAkJYnJlYWs7CkBAIC02MzEwLDYgKzYzMTAsOSBAQAogc3RhdGljIGJvb2wKIGFwcGx5X2RjYl9lbmNvZGVyX3F1aXJrcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaWR4LCB1MzIgKmNvbm4sIHUzMiAqY29uZikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZkZXZfcHJpdi0+dmJpb3MuZGNiOworCiAJLyogRGVsbCBQcmVjaXNpb24gTTYzMDAKIAkgKiAgIERDQiBlbnRyeSAyOiAwMjAyNTMxMiAwMDAwMDAxMAogCSAqICAgRENCIGVudHJ5IDM6IDAyMDI2MzEyIDAwMDAwMDIwCkBAIC02MzI3LDYgKzYzMzAsMTggQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKKwkvKiBHZUZvcmNlMyBUaSAyMDAKKwkgKgorCSAqIERDQiByZXBvcnRzIGFuIExWRFMgb3V0cHV0IHRoYXQgc2hvdWxkIGJlIFRNRFM6CisJICogICBEQ0IgZW50cnkgMTogZjIwMDUwMTQgZmZmZmZmZmYKKwkgKi8KKwlpZiAobnZfbWF0Y2hfZGV2aWNlKGRldiwgMHgwMjAxLCAweDE0NjIsIDB4ODg1MSkpIHsKKwkJaWYgKCpjb25uID09IDB4ZjIwMDUwMTQgJiYgKmNvbmYgPT0gMHhmZmZmZmZmZikgeworCQkJZmFicmljYXRlX2RjYl9vdXRwdXQoZGNiLCBPVVRQVVRfVE1EUywgMSwgMSwgMSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKIAlyZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iby5jCmluZGV4IGE3ZmFlMjYuLmE1MjE4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2JvLmMKQEAgLTQ5LDcgKzQ5LDEwIEBACiAJCURSTV9FUlJPUigiYm8gJXAgc3RpbGwgYXR0YWNoZWQgdG8gR0VNIG9iamVjdFxuIiwgYm8pOwogCiAJbnYxMF9tZW1fcHV0X3RpbGVfcmVnaW9uKGRldiwgbnZiby0+dGlsZSwgTlVMTCk7Ci0Jbm91dmVhdV92bV9wdXQoJm52Ym8tPnZtYSk7CisJaWYgKG52Ym8tPnZtYS5ub2RlKSB7CisJCW5vdXZlYXVfdm1fdW5tYXAoJm52Ym8tPnZtYSk7CisJCW5vdXZlYXVfdm1fcHV0KCZudmJvLT52bWEpOworCX0KIAlrZnJlZShudmJvKTsKIH0KIApAQCAtMTI4LDYgKzEzMSw3IEBACiAJCX0KIAl9CiAKKwludmJvLT5iby5tZW0ubnVtX3BhZ2VzID0gc2l6ZSA+PiBQQUdFX1NISUZUOwogCW5vdXZlYXVfYm9fcGxhY2VtZW50X3NldChudmJvLCBmbGFncywgMCk7CiAKIAludmJvLT5jaGFubmVsID0gY2hhbjsKQEAgLTE2NiwxNyArMTcwLDE3IEBACiBzZXRfcGxhY2VtZW50X3JhbmdlKHN0cnVjdCBub3V2ZWF1X2JvICpudmJvLCB1aW50MzJfdCB0eXBlKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IG5vdXZlYXVfYmRldihudmJvLT5iby5iZGV2KTsKKwlpbnQgdnJhbV9wYWdlcyA9IGRldl9wcml2LT52cmFtX3NpemUgPj4gUEFHRV9TSElGVDsKIAogCWlmIChkZXZfcHJpdi0+Y2FyZF90eXBlID09IE5WXzEwICYmCi0JICAgIG52Ym8tPnRpbGVfbW9kZSAmJiAodHlwZSAmIFRUTV9QTF9GTEFHX1ZSQU0pKSB7CisJICAgIG52Ym8tPnRpbGVfbW9kZSAmJiAodHlwZSAmIFRUTV9QTF9GTEFHX1ZSQU0pICYmCisJICAgIG52Ym8tPmJvLm1lbS5udW1fcGFnZXMgPCB2cmFtX3BhZ2VzIC8gMikgewogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgY29sb3IgYW5kIGRlcHRoIGJ1ZmZlcnMgYXJlIGhhbmRsZWQKIAkJICogYnkgaW5kZXBlbmRlbnQgbWVtb3J5IGNvbnRyb2xsZXIgdW5pdHMuIFVwIHRvIGEgOXgKIAkJICogc3BlZWQgdXAgd2hlbiBhbHBoYS1ibGVuZGluZyBhbmQgZGVwdGgtdGVzdCBhcmUgZW5hYmxlZAogCQkgKiBhdCB0aGUgc2FtZSB0aW1lLgogCQkgKi8KLQkJaW50IHZyYW1fcGFnZXMgPSBkZXZfcHJpdi0+dnJhbV9zaXplID4+IFBBR0VfU0hJRlQ7Ci0KIAkJaWYgKG52Ym8tPnRpbGVfZmxhZ3MgJiBOT1VWRUFVX0dFTV9USUxFX1pFVEEpIHsKIAkJCW52Ym8tPnBsYWNlbWVudC5mcGZuID0gdnJhbV9wYWdlcyAvIDI7CiAJCQludmJvLT5wbGFjZW1lbnQubHBmbiA9IH4wOwpAQCAtNzg1LDcgKzc4OSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB0dG1fYm9fbW92ZV90dG0oYm8sIGV2aWN0LCBub193YWl0X3Jlc2VydmUsIG5vX3dhaXRfZ3B1LCBuZXdfbWVtKTsKKwlyZXQgPSB0dG1fYm9fbW92ZV90dG0oYm8sIHRydWUsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOwogb3V0OgogCXR0bV9ib19tZW1fcHV0KGJvLCAmdG1wX21lbSk7CiAJcmV0dXJuIHJldDsKQEAgLTgxMSwxMSArODE1LDExIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHR0bV9ib19tb3ZlX3R0bShibywgZXZpY3QsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsICZ0bXBfbWVtKTsKKwlyZXQgPSB0dG1fYm9fbW92ZV90dG0oYm8sIHRydWUsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsICZ0bXBfbWVtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCXJldCA9IG5vdXZlYXVfYm9fbW92ZV9tMm1mKGJvLCBldmljdCwgaW50ciwgbm9fd2FpdF9yZXNlcnZlLCBub193YWl0X2dwdSwgbmV3X21lbSk7CisJcmV0ID0gbm91dmVhdV9ib19tb3ZlX20ybWYoYm8sIHRydWUsIGludHIsIG5vX3dhaXRfcmVzZXJ2ZSwgbm9fd2FpdF9ncHUsIG5ld19tZW0pOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYwppbmRleCBhMjFlMDAwLi4zOTBkODJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKQEAgLTUwNyw2ICs1MDcsNyBAQAogCWludCBoaWdoX3cgPSAwLCBoaWdoX2ggPSAwLCBoaWdoX3YgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2RlLCAmbnZfY29ubmVjdG9yLT5iYXNlLnByb2JlZF9tb2RlcywgaGVhZCkgeworCQltb2RlLT52cmVmcmVzaCA9IGRybV9tb2RlX3ZyZWZyZXNoKG1vZGUpOwogCQlpZiAoaGVscGVyLT5tb2RlX3ZhbGlkKGNvbm5lY3RvciwgbW9kZSkgIT0gTU9ERV9PSyB8fAogCQkgICAgKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwppbmRleCA2NTY5OWJmLi5iMzY4ZWQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKQEAgLTgzLDcgKzgzLDggQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUIHJlcXVpcmVzIGEgbm90aWZpZXIgb2JqZWN0ICovCi0JcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBOdk5vdGlmeTAsIDMyLCAmY2hhbi0+bTJtZl9udGZ5KTsKKwlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIE52Tm90aWZ5MCwgMzIsIDB4ZmQwLCAweDEwMDAsCisJCQkJICAgICAmY2hhbi0+bTJtZl9udGZ5KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwppbmRleCAxM2JiNjcyLi5mNjU4YTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKQEAgLTIzNCw5ICsyMzQsOSBAQAogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW5vdXZlYXVfZmJjb25fc2V0X3N1c3BlbmQoZGV2LCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlub3V2ZWF1X2ZiY29uX3Jlc3RvcmVfYWNjZWwoZGV2KTsKIAlyZXR1cm4gMDsKIApAQCAtMzU5LDkgKzM1OSw5IEBACiAJCW52X2NydGMtPmx1dC5kZXB0aCA9IDA7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW5vdXZlYXVfZmJjb25fc2V0X3N1c3BlbmQoZGV2LCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCW5vdXZlYXVfZmJjb25femZpbGxfYWxsKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCmluZGV4IDAxYmZmYzQuLjk4MmQ3MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaApAQCAtODQ4LDE0ICs4NDgsMTIgQEAKIAkJCQkgICAgIHN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSk7CiBleHRlcm4gY29uc3Qgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyX2Z1bmMgbm91dmVhdV92cmFtX21hbmFnZXI7CiAKLS8qIG52YzBfdnJhbS5jICovCi1leHRlcm4gY29uc3Qgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyX2Z1bmMgbnZjMF92cmFtX21hbmFnZXI7Ci0KIC8qIG5vdXZlYXVfbm90aWZpZXIuYyAqLwogZXh0ZXJuIGludCAgbm91dmVhdV9ub3RpZmllcl9pbml0X2NoYW5uZWwoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiB2b2lkIG5vdXZlYXVfbm90aWZpZXJfdGFrZWRvd25fY2hhbm5lbChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9ub3RpZmllcl9hbGxvYyhzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIHVpbnQzMl90IGhhbmRsZSwKLQkJCQkgICBpbnQgY291dCwgdWludDMyX3QgKm9mZnNldCk7CisJCQkJICAgaW50IGNvdXQsIHVpbnQzMl90IHN0YXJ0LCB1aW50MzJfdCBlbmQsCisJCQkJICAgdWludDMyX3QgKm9mZnNldCk7CiBleHRlcm4gaW50ICBub3V2ZWF1X25vdGlmaWVyX29mZnNldChzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKiwgdWludDMyX3QgKik7CiBleHRlcm4gaW50ICBub3V2ZWF1X2lvY3RsX25vdGlmaWVyX2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKmRhdGEsCiAJCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwppbmRleCAyNjM0N2I3Li5iMGZiOWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKQEAgLTcyNSw4ICs3MjUsMTAgQEAKIAlyZXQgPSB2cmFtLT5nZXQoZGV2LCBtZW0tPm51bV9wYWdlcyA8PCBQQUdFX1NISUZULAogCQkJbWVtLT5wYWdlX2FsaWdubWVudCA8PCBQQUdFX1NISUZULCBzaXplX25jLAogCQkJKG52Ym8tPnRpbGVfZmxhZ3MgPj4gOCkgJiAweGZmLCAmbm9kZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlpZiAocmV0KSB7CisJCW1lbS0+bW1fbm9kZSA9IE5VTEw7CisJCXJldHVybiAocmV0ID09IC1FTk9TUEMpID8gMCA6IHJldDsKKwl9CiAKIAlub2RlLT5wYWdlX3NoaWZ0ID0gMTI7CiAJaWYgKG52Ym8tPnZtYS5ub2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tbS5jCmluZGV4IDg4NDRiNTAuLjc2MDk3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21tLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gLUVOT1NQQzsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggZmUyOWQ2MC4uNWVhMTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtOTYsNyArOTYsOCBAQAogCiBpbnQKIG5vdXZlYXVfbm90aWZpZXJfYWxsb2Moc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbiwgdWludDMyX3QgaGFuZGxlLAotCQkgICAgICAgaW50IHNpemUsIHVpbnQzMl90ICpiX29mZnNldCkKKwkJICAgICAgIGludCBzaXplLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kLAorCQkgICAgICAgdWludDMyX3QgKmJfb2Zmc2V0KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpub2JqID0gTlVMTDsKQEAgLTEwNCw5ICsxMDUsMTAgQEAKIAl1aW50MzJfdCBvZmZzZXQ7CiAJaW50IHRhcmdldCwgcmV0OwogCi0JbWVtID0gZHJtX21tX3NlYXJjaF9mcmVlKCZjaGFuLT5ub3RpZmllcl9oZWFwLCBzaXplLCAwLCAwKTsKKwltZW0gPSBkcm1fbW1fc2VhcmNoX2ZyZWVfaW5fcmFuZ2UoJmNoYW4tPm5vdGlmaWVyX2hlYXAsIHNpemUsIDAsCisJCQkJCSAgc3RhcnQsIGVuZCwgMCk7CiAJaWYgKG1lbSkKLQkJbWVtID0gZHJtX21tX2dldF9ibG9jayhtZW0sIHNpemUsIDApOworCQltZW0gPSBkcm1fbW1fZ2V0X2Jsb2NrX3JhbmdlKG1lbSwgc2l6ZSwgMCwgc3RhcnQsIGVuZCk7CiAJaWYgKCFtZW0pIHsKIAkJTlZfRVJST1IoZGV2LCAiQ2hhbm5lbCAlZCBub3RpZmllciBibG9jayBmdWxsXG4iLCBjaGFuLT5pZCk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTc3LDcgKzE3OSw4IEBACiAJaWYgKElTX0VSUihjaGFuKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2hhbik7CiAKLQlyZXQgPSBub3V2ZWF1X25vdGlmaWVyX2FsbG9jKGNoYW4sIG5hLT5oYW5kbGUsIG5hLT5zaXplLCAmbmEtPm9mZnNldCk7CisJcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBuYS0+aGFuZGxlLCBuYS0+c2l6ZSwgMCwgMHgxMDAwLAorCQkJCSAgICAgJm5hLT5vZmZzZXQpOwogCW5vdXZlYXVfY2hhbm5lbF9wdXQoJmNoYW4pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3BtLmMKaW5kZXggZmI4NDZhMy4uNDM5OWUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfcG0uYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJc3RydWN0IG5vdXZlYXVfcG1fZW5naW5lICpwbSA9ICZkZXZfcHJpdi0+ZW5naW5lLnBtOwogCiAJaWYgKHBtLT5od21vbikgewotCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBtLT5od21vbi0+a29iaiwgJmh3bW9uX2F0dHJncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5wZGV2LT5kZXYua29iaiwgJmh3bW9uX2F0dHJncm91cCk7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKHBtLT5od21vbik7CiAJfQogI2VuZGlmCkBAIC01NDMsNyArNTQzLDcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9wbV9lbmdpbmUgKnBtID0gJmRldl9wcml2LT5lbmdpbmUucG07CiAJc3RydWN0IG5vdXZlYXVfcG1fbGV2ZWwgKnBlcmZsdmw7CiAKLQlpZiAocG0tPmN1ciA9PSAmcG0tPmJvb3QpCisJaWYgKCFwbS0+Y3VyIHx8IHBtLT5jdXIgPT0gJnBtLT5ib290KQogCQlyZXR1cm47CiAKIAlwZXJmbHZsID0gcG0tPmN1cjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfdGVtcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKaW5kZXggN2VjYzRhZC4uOGQ5OTY4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV90ZW1wLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvW10gPSB7CiAJCXsgSTJDX0JPQVJEX0lORk8oInc4M2w3ODV0cyIsIDB4MmQpIH0sCiAJCXsgSTJDX0JPQVJEX0lORk8oInc4Mzc4MWQiLCAweDJkKSB9LAotCQl7IEkyQ19CT0FSRF9JTkZPKCJmNzUzNzUiLCAweDJlKSB9LAogCQl7IEkyQ19CT0FSRF9JTkZPKCJhZHQ3NDczIiwgMHgyZSkgfSwKKwkJeyBJMkNfQk9BUkRfSU5GTygiZjc1Mzc1IiwgMHgyZSkgfSwKIAkJeyBJMkNfQk9BUkRfSU5GTygibG05OSIsIDB4NGMpIH0sCiAJCXsgfQogCX07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYwppbmRleCBlZjIzNTUwLi5jODJkYjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKQEAgLTM0Miw4ICszNDIsOCBAQAogCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpIHsKIAkJYm9vbCBkdWFsbGluaywgZHVtbXk7CiAKLQkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT4KLQkJCQkJICAgICAgY2xvY2ssICZkdWFsbGluaywgJmR1bW15KTsKKwkJbm91dmVhdV9iaW9zX3BhcnNlX2x2ZHNfdGFibGUoZGV2LCBvdXRwdXRfbW9kZS0+Y2xvY2ssCisJCQkJCSAgICAgICZkdWFsbGluaywgJmR1bW15KTsKIAkJaWYgKGR1YWxsaW5rKQogCQkJcmVncC0+ZnBfY29udHJvbCB8PSAoOCA8PCAyOCk7CiAJfSBlbHNlCkBAIC01MTgsOCArNTE4LDYgQEAKIAkJcmV0dXJuOwogCiAJaWYgKG52X2VuY29kZXItPmRjYi0+bHZkc2NvbmYudXNlX3Bvd2VyX3NjcmlwdHMpIHsKLQkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBub3V2ZWF1X2VuY29kZXJfY29ubmVjdG9yX2dldChudl9lbmNvZGVyKTsKLQogCQkvKiB3aGVuIHJlbW92aW5nIGFuIG91dHB1dCwgY3J0YyBtYXkgbm90IGJlIHNldCwgYnV0IFBBTkVMX09GRgogCQkgKiBtdXN0IHN0aWxsIGJlIHJ1bgogCQkgKi8KQEAgLTUyNywxMiArNTI1LDggQEAKIAkJCSAgIG52MDRfZGZwX2dldF9ib3VuZF9oZWFkKGRldiwgbnZfZW5jb2Rlci0+ZGNiKTsKIAogCQlpZiAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSB7Ci0JCQlpZiAoIW52X2Nvbm5lY3Rvci0+bmF0aXZlX21vZGUpIHsKLQkJCQlOVl9FUlJPUihkZXYsICJOb3QgdHVybmluZyBvbiBMVkRTIHdpdGhvdXQgbmF0aXZlIG1vZGVcbiIpOwotCQkJCXJldHVybjsKLQkJCX0KIAkJCWNhbGxfbHZkc19zY3JpcHQoZGV2LCBudl9lbmNvZGVyLT5kY2IsIGhlYWQsCi0JCQkJCSBMVkRTX1BBTkVMX09OLCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlLT5jbG9jayk7CisJCQkJCSBMVkRTX1BBTkVMX09OLCBudl9lbmNvZGVyLT5tb2RlLmNsb2NrKTsKIAkJfSBlbHNlCiAJCQkvKiBweGNsayBvZiAwIGlzIGZpbmUgZm9yIFBBTkVMX09GRiwgYW5kIGZvciBhCiAJCQkgKiBkaXNjb25uZWN0ZWQgTFZEUyBlbmNvZGVyIHRoZXJlIGlzIG5vIG5hdGl2ZV9tb2RlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2dyYXBoLmMKaW5kZXggODg3MGQ3Mi4uMThkMzBjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NDBfZ3JhcGguYwpAQCAtMjExLDMwICsyMTEsMzUgQEAKIAlzdHJ1Y3Qgbm91dmVhdV90aWxlX3JlZyAqdGlsZSA9ICZkZXZfcHJpdi0+dGlsZS5yZWdbaV07CiAKIAlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7Ci0JY2FzZSAweDQ0OgotCWNhc2UgMHg0YToKKwljYXNlIDB4NDA6CisJY2FzZSAweDQxOiAvKiBndWVzcyAqLworCWNhc2UgMHg0MjoKKwljYXNlIDB4NDM6CisJY2FzZSAweDQ1OiAvKiBndWVzcyAqLwogCWNhc2UgMHg0ZToKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjIwX1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwotCQlicmVhazsKLQotCWNhc2UgMHg0NjoKLQljYXNlIDB4NDc6Ci0JY2FzZSAweDQ5OgotCWNhc2UgMHg0YjoKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RTSVpFKGkpLCB0aWxlLT5waXRjaCk7Ci0JCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UTElNSVQoaSksIHRpbGUtPmxpbWl0KTsKLQkJbnZfd3IzMihkZXYsIE5WNDdfUEdSQVBIX1RJTEUoaSksIHRpbGUtPmFkZHIpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVFNJWkUxKGkpLCB0aWxlLT5waXRjaCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9UTElNSVQxKGkpLCB0aWxlLT5saW1pdCk7CiAJCW52X3dyMzIoZGV2LCBOVjQwX1BHUkFQSF9USUxFMShpKSwgdGlsZS0+YWRkcik7CiAJCWJyZWFrOwotCi0JZGVmYXVsdDoKKwljYXNlIDB4NDQ6CisJY2FzZSAweDRhOgogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVFNJWkUoaSksIHRpbGUtPnBpdGNoKTsKIAkJbnZfd3IzMihkZXYsIE5WMjBfUEdSQVBIX1RMSU1JVChpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlYyMF9QR1JBUEhfVElMRShpKSwgdGlsZS0+YWRkcik7CisJCWJyZWFrOworCWNhc2UgMHg0NjoKKwljYXNlIDB4NDc6CisJY2FzZSAweDQ5OgorCWNhc2UgMHg0YjoKKwljYXNlIDB4NGM6CisJY2FzZSAweDY3OgorCWRlZmF1bHQ6CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9UU0laRShpKSwgdGlsZS0+cGl0Y2gpOworCQludl93cjMyKGRldiwgTlY0N19QR1JBUEhfVExJTUlUKGkpLCB0aWxlLT5saW1pdCk7CisJCW52X3dyMzIoZGV2LCBOVjQ3X1BHUkFQSF9USUxFKGkpLCB0aWxlLT5hZGRyKTsKIAkJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX1RTSVpFMShpKSwgdGlsZS0+cGl0Y2gpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVExJTUlUMShpKSwgdGlsZS0+bGltaXQpOwogCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfVElMRTEoaSksIHRpbGUtPmFkZHIpOwpAQCAtMzk2LDE3ICs0MDEsMjAgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgewotCQljYXNlIDB4NDY6Ci0JCWNhc2UgMHg0NzoKLQkJY2FzZSAweDQ5OgotCQljYXNlIDB4NGI6Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7Ci0JCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJY2FzZSAweDQxOgorCQljYXNlIDB4NDI6CisJCWNhc2UgMHg0MzoKKwkJY2FzZSAweDQ1OgorCQljYXNlIDB4NGU6CisJCWNhc2UgMHg0NDoKKwkJY2FzZSAweDRhOgogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUYwLCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMCkpOwogCQkJbnZfd3IzMihkZXYsIDB4NDAwOUY0LCBudl9yZDMyKGRldiwgTlYwNF9QRkJfQ0ZHMSkpOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQludl93cjMyKGRldiwgMHg0MDBERjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CisJCQludl93cjMyKGRldiwgMHg0MDBERjQsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcxKSk7CisJCQlicmVhazsKIAkJfQogCQludl93cjMyKGRldiwgMHg0MDY5RjAsIG52X3JkMzIoZGV2LCBOVjA0X1BGQl9DRkcwKSk7CiAJCW52X3dyMzIoZGV2LCAweDQwNjlGNCwgbnZfcmQzMihkZXYsIE5WMDRfUEZCX0NGRzEpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2V2by5jCmluZGV4IDE0ZTI0ZTkuLjBlYTA5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZXZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ldm8uYwpAQCAtMjgzLDggKzI4Myw3IEBACiAJCQludjUwX2V2b19jaGFubmVsX2RlbCgmZGV2X3ByaXYtPmV2byk7CiAJCQlyZXR1cm4gcmV0OwogCQl9Ci0JfSBlbHNlCi0JaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApIHsKKwl9IGVsc2UgewogCQlyZXQgPSBudjUwX2V2b19kbWFvYmpfbmV3KGV2bywgMHgzZCwgTnZFdm9GQjE2LCAweDcwLCAweDE5LAogCQkJCQkgIDAsIDB4ZmZmZmZmZmYsIDB4MDAwMTAwMDApOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKaW5kZXggMmQ3ZWE3NS4uMzdlMjFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwpAQCAtMjU2LDYgKzI1Niw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOworCXN0cnVjdCBub3V2ZWF1X2ZpZm9fZW5naW5lICpwZmlmbyA9ICZkZXZfcHJpdi0+ZW5naW5lLmZpZm87CiAJaW50IGksIGhkciA9IChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSA/IDB4MjAwIDogMHgyMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisJcGZpZm8tPnJlYXNzaWduKGRldiwgZmFsc2UpOwogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CiAKIAlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKQEAgLTI3NSw2ICsyNzcsNyBAQAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5mbHVzaChkZXYpOwogCiAJcGdyYXBoLT5maWZvX2FjY2VzcyhkZXYsIHRydWUpOworCXBmaWZvLT5yZWFzc2lnbihkZXYsIHRydWUpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJmNoYW4tPnJhbWluX2dyY3R4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKaW5kZXggZWEwMDQxOC4uZTU3Y2FhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKQEAgLTQwMywxNiArNDAzLDI0IEBACiB2b2lkCiBudjUwX2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAJbnZfd3IzMihkZXYsIDB4MDAzMzBjLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDAwMzMwYywgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwogfQogCiB2b2lkCiBudjg0X2luc3RtZW1fZmx1c2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CiAJbnZfd3IzMihkZXYsIDB4MDcwMDAwLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKaW5kZXggMzhlNTIzZS4uNjE0NDE1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYwpAQCAtNDUsMTEgKzQ1LDYgQEAKIAl9CiAKIAlpZiAocGh5cyAmIDEpIHsKLQkJaWYgKGRldl9wcml2LT52cmFtX3N5c19iYXNlKSB7Ci0JCQlwaHlzICs9IGRldl9wcml2LT52cmFtX3N5c19iYXNlOwotCQkJcGh5cyB8PSAweDMwOwotCQl9Ci0KIAkJaWYgKGNvdmVyYWdlIDw9IDMyICogMTAyNCAqIDEwMjQpCiAJCQlwaHlzIHw9IDB4NjA7CiAJCWVsc2UgaWYgKGNvdmVyYWdlIDw9IDY0ICogMTAyNCAqIDEwMjQpCkBAIC0xNzQsNyArMTY5LDExIEBACiB2b2lkCiBudjUwX3ZtX2ZsdXNoX2VuZ2luZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZW5naW5lKQogeworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIAludl93cjMyKGRldiwgMHgxMDBjODAsIChlbmdpbmUgPDwgMTYpIHwgMSk7CiAJaWYgKCFudl93YWl0KGRldiwgMHgxMDBjODAsIDB4MDAwMDAwMDEsIDB4MDAwMDAwMDApKQogCQlOVl9FUlJPUihkZXYsICJ2bSBmbHVzaCB0aW1lb3V0OiBlbmdpbmUgJWRcbiIsIGVuZ2luZSk7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JhcGguYwppbmRleCBlNmVhN2Q4Li5lYjE4YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmFwaC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAibnZjMF9ncmFwaC5oIgogCiBzdGF0aWMgdm9pZCBudmMwX2dyYXBoX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIG52YzBfcnVuazE0MF9pc3Ioc3RydWN0IGRybV9kZXZpY2UgKik7CiBzdGF0aWMgaW50ICBudmMwX2dyYXBoX3VubG9hZF9jb250ZXh0X3RvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHU2NCBjaGFuKTsKIAogdm9pZApAQCAtMjgxLDYgKzI4Miw3IEBACiAJCXJldHVybjsKIAogCW5vdXZlYXVfaXJxX3VucmVnaXN0ZXIoZGV2LCAxMik7CisJbm91dmVhdV9pcnFfdW5yZWdpc3RlcihkZXYsIDI1KTsKIAogCW5vdXZlYXVfZ3B1b2JqX3JlZihOVUxMLCAmcHJpdi0+dW5rNDE4OGI4KTsKIAlub3V2ZWF1X2dwdW9ial9yZWYoTlVMTCwgJnByaXYtPnVuazQxODhiNCk7CkBAIC0zOTAsNiArMzkyLDcgQEAKIAl9CiAKIAlub3V2ZWF1X2lycV9yZWdpc3RlcihkZXYsIDEyLCBudmMwX2dyYXBoX2lzcik7CisJbm91dmVhdV9pcnFfcmVnaXN0ZXIoZGV2LCAyNSwgbnZjMF9ydW5rMTQwX2lzcik7CiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwMmQsIEdSKTsgLyogMkQgKi8KIAlOVk9CSl9DTEFTUyhkZXYsIDB4OTAzOSwgR1IpOyAvKiBNMk1GICovCiAJTlZPQkpfQ0xBU1MoZGV2LCAweDkwOTcsIEdSKTsgLyogM0QgKi8KQEAgLTUxMiw4ICs1MTUsOCBAQAogCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHgyMjQpLCAweGMwMDAwMDAwKTsKIAkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4NDhjKSwgMHhjMDAwMDAwMCk7CiAJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDA4NCksIDB4YzAwMDAwMDApOwotCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHhlNDQpLCAweDAwMWZmZmZlKTsKLQkJCW52X3dyMzIoZGV2LCBUUF9VTklUKGdwYywgdHAsIDB4ZTRjKSwgMHgwMDAwMDAwZik7CisJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY0NCksIDB4MDAxZmZmZmUpOworCQkJbnZfd3IzMihkZXYsIFRQX1VOSVQoZ3BjLCB0cCwgMHg2NGMpLCAweDAwMDAwMDBmKTsKIAkJfQogCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDJjOTApLCAweGZmZmZmZmZmKTsKIAkJbnZfd3IzMihkZXYsIEdQQ19VTklUKGdwYywgMHgyYzk0KSwgMHhmZmZmZmZmZik7CkBAIC03NzcsMyArNzgwLDE5IEBACiAKIAludl93cjMyKGRldiwgMHg0MDA1MDAsIDB4MDAwMTAwMDEpOwogfQorCitzdGF0aWMgdm9pZAorbnZjMF9ydW5rMTQwX2lzcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXUzMiB1bml0cyA9IG52X3JkMzIoZGV2LCAweDAwMDE3YykgJiAweDFmOworCisJd2hpbGUgKHVuaXRzKSB7CisJCXUzMiB1bml0ID0gZmZzKHVuaXRzKSAtIDE7CisJCXUzMiByZWcgPSAweDE0MDAwMCArIHVuaXQgKiAweDIwMDA7CisJCXUzMiBzdDAgPSBudl9tYXNrKGRldiwgcmVnICsgMHgxMDIwLCAwLCAwKTsKKwkJdTMyIHN0MSA9IG52X21hc2soZGV2LCByZWcgKyAweDE0MjAsIDAsIDApOworCisJCU5WX0lORk8oZGV2LCAiUFJVTksxNDA6ICVkIDB4JTA4eCAweCUwOHhcbiIsIHVuaXQsIHN0MCwgc3QxKTsKKwkJdW5pdHMgJj0gfigxIDw8IHVuaXQpOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfZ3JjdHguYwppbmRleCBiOWU2OGIyLi5mODgwZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX2dyY3R4LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF9ncmN0eC5jCkBAIC0xODMwLDcgKzE4MzAsNyBAQAogCiAJZm9yICh0cCA9IDAsIGlkID0gMDsgdHAgPCA0OyB0cCsrKSB7CiAJCWZvciAoZ3BjID0gMDsgZ3BjIDwgcHJpdi0+Z3BjX25yOyBncGMrKykgewotCQkJaWYgKHRwIDw9IHByaXYtPnRwX25yW2dwY10pIHsKKwkJCWlmICh0cCA8IHByaXYtPnRwX25yW2dwY10pIHsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDY5OCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgVFBfVU5JVChncGMsIHRwLCAweDRlOCksIGlkKTsKIAkJCQludl93cjMyKGRldiwgR1BDX1VOSVQoZ3BjLCAweDBjMTAgKyB0cCAqIDQpLCBpZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGIwYWIxODUuLmE0ZTVlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCkBAIC00OCwyOSArNDgsMjkgQEAKIAogCXN3aXRjaCAocmFkZW9uX2NydGMtPnJteF90eXBlKSB7CiAJY2FzZSBSTVhfQ0VOVEVSOgotCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuQm90dG9tID0gKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMjsKKwkJYXJncy51c092ZXJzY2FuVG9wID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfdmRpc3BsYXkgLSBtb2RlLT5jcnRjX3ZkaXNwbGF5KSAvIDIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIG1vZGUtPmNydGNfdmRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIG1vZGUtPmNydGNfaGRpc3BsYXkpIC8gMik7CisJCWFyZ3MudXNPdmVyc2NhblJpZ2h0ID0gY3B1X3RvX2xlMTYoKGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXkgLSBtb2RlLT5jcnRjX2hkaXNwbGF5KSAvIDIpOwogCQlicmVhazsKIAljYXNlIFJNWF9BU1BFQ1Q6CiAJCWExID0gbW9kZS0+Y3J0Y192ZGlzcGxheSAqIGFkanVzdGVkX21vZGUtPmNydGNfaGRpc3BsYXk7CiAJCWEyID0gYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAqIG1vZGUtPmNydGNfaGRpc3BsYXk7CiAKIAkJaWYgKGExID4gYTIpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX2hkaXNwbGF5IC0gKGEyIC8gbW9kZS0+Y3J0Y192ZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSAtIChhMiAvIG1vZGUtPmNydGNfdmRpc3BsYXkpKSAvIDIpOwogCQl9IGVsc2UgaWYgKGEyID4gYTEpIHsKLQkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSAoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDI7Ci0JCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IChhZGp1c3RlZF9tb2RlLT5jcnRjX3ZkaXNwbGF5IC0gKGExIC8gbW9kZS0+Y3J0Y19oZGlzcGxheSkpIC8gMjsKKwkJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOworCQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSBjcHVfdG9fbGUxNigoYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSAtIChhMSAvIG1vZGUtPmNydGNfaGRpc3BsYXkpKSAvIDIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUk1YX0ZVTEw6CiAJZGVmYXVsdDoKLQkJYXJncy51c092ZXJzY2FuUmlnaHQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSByYWRlb25fY3J0Yy0+aF9ib3JkZXI7Ci0JCWFyZ3MudXNPdmVyc2NhbkJvdHRvbSA9IHJhZGVvbl9jcnRjLT52X2JvcmRlcjsKLQkJYXJncy51c092ZXJzY2FuVG9wID0gcmFkZW9uX2NydGMtPnZfYm9yZGVyOworCQlhcmdzLnVzT3ZlcnNjYW5SaWdodCA9IGNwdV90b19sZTE2KHJhZGVvbl9jcnRjLT5oX2JvcmRlcik7CisJCWFyZ3MudXNPdmVyc2NhbkxlZnQgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+aF9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Cb3R0b20gPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOworCQlhcmdzLnVzT3ZlcnNjYW5Ub3AgPSBjcHVfdG9fbGUxNihyYWRlb25fY3J0Yy0+dl9ib3JkZXIpOwogCQlicmVhazsKIAl9CiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC00MTksMjMgKzQxOSwyMyBAQAogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCWlmIChBU0lDX0lTX0RDRTUocmRldikpIHsKLQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50RnJhYyA9IDA7CisJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudEZyYWMgPSBjcHVfdG9fbGUxNigwKTsKIAkJYXJncy52My51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHNzLT50eXBlOwogCQlzd2l0Y2ggKHBsbF9pZCkgewogCQljYXNlIEFUT01fUFBMTDE6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AxUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTDI6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX1AyUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gc3MtPmFtb3VudDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzcy0+c3RlcDsKKwkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bUFtb3VudCA9IGNwdV90b19sZTE2KHNzLT5hbW91bnQpOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IGNwdV90b19sZTE2KHNzLT5zdGVwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fRENQTEw6CiAJCQlhcmdzLnYzLnVjU3ByZWFkU3BlY3RydW1UeXBlIHw9IEFUT01fUFBMTF9TU19UWVBFX1YzX0RDUExMOwotCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gMDsKLQkJCWFyZ3MudjMudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSAwOworCQkJYXJncy52My51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoMCk7CisJCQlhcmdzLnYzLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoMCk7CiAJCQlicmVhazsKIAkJY2FzZSBBVE9NX1BQTExfSU5WQUxJRDoKIAkJCXJldHVybjsKQEAgLTQ0NywxOCArNDQ3LDE4IEBACiAJCXN3aXRjaCAocGxsX2lkKSB7CiAJCWNhc2UgQVRPTV9QUExMMToKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDFQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9QUExMMjoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfUDJQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBzcy0+YW1vdW50OwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IHNzLT5zdGVwOworCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtQW1vdW50ID0gY3B1X3RvX2xlMTYoc3MtPmFtb3VudCk7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1TdGVwID0gY3B1X3RvX2xlMTYoc3MtPnN0ZXApOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRPTV9EQ1BMTDoKIAkJCWFyZ3MudjIudWNTcHJlYWRTcGVjdHJ1bVR5cGUgfD0gQVRPTV9QUExMX1NTX1RZUEVfVjJfRENQTEw7Ci0JCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSAwOwotCQkJYXJncy52Mi51c1NwcmVhZFNwZWN0cnVtU3RlcCA9IDA7CisJCQlhcmdzLnYyLnVzU3ByZWFkU3BlY3RydW1BbW91bnQgPSBjcHVfdG9fbGUxNigwKTsKKwkJCWFyZ3MudjIudXNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBjcHVfdG9fbGUxNigwKTsKIAkJCWJyZWFrOwogCQljYXNlIEFUT01fUFBMTF9JTlZBTElEOgogCQkJcmV0dXJuOwpAQCAtNTM4LDcgKzUzOCw2IEBACiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0hJR0hfRkJfRElWOwogCQllbHNlCiAJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0xPV19SRUZfRElWOwotCiAJfQogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKQEAgLTU1NSwyMyArNTU0LDI4IEBACiAJCQkJCWRwX2Nsb2NrID0gZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2s7CiAJCQkJfQogCQkJfQotI2lmIDAgLyogZG9lc24ndCB3b3JrIHByb3Blcmx5IG9uIHNvbWUgbGFwdG9wcyAqLworCiAJCQkvKiB1c2UgcmVjb21tZW5kZWQgcmVmX2RpdiBmb3Igc3MgKi8KIAkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQlpZiAoc3NfZW5hYmxlZCkgewogCQkJCQlpZiAoc3MtPnJlZmRpdikgeworCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUDsKIAkJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJCXBsbC0+cmVmZXJlbmNlX2RpdiA9IHNzLT5yZWZkaXY7CisJCQkJCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKKwkJCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQl9CiAJCQkJfQogCQkJfQotI2VuZGlmCisKIAkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLwogCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSkKIAkJCQkJYWRqdXN0ZWRfY2xvY2sgPSBtb2RlLT5jbG9jayAqIDI7CiAJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKQogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX0NMT1NFU1RfTE9XRVI7CisJCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkKKwkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX0lTX0xDRDsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSAhPSBEUk1fTU9ERV9FTkNPREVSX0RBQykKIAkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX05PX09ERF9QT1NUX0RJVjsKQEAgLTYwNiwxNCArNjEwLDkgQEAKIAkJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KG1vZGUtPmNsb2NrIC8gMTApOwogCQkJCWFyZ3MudjEudWNUcmFuc21pdHRlcklEID0gcmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQ7CiAJCQkJYXJncy52MS51Y0VuY29kZU1vZGUgPSBlbmNvZGVyX21vZGU7Ci0JCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCWFyZ3MudjEudWNDb25maWcgfD0KLQkJCQkJCQlBREpVU1RfRElTUExBWV9DT05GSUdfU1NfRU5BQkxFOwotCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKKwkJCQlpZiAoc3NfZW5hYmxlZCkKIAkJCQkJYXJncy52MS51Y0NvbmZpZyB8PQogCQkJCQkJQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRTsKLQkJCQl9CiAKIAkJCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CkBAIC02MjQsMTIgKzYyMywxMiBAQAogCQkJCWFyZ3MudjMuc0lucHV0LnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOwogCQkJCWFyZ3MudjMuc0lucHV0LnVjRW5jb2RlTW9kZSA9IGVuY29kZXJfbW9kZTsKIAkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgPSAwOworCQkJCWlmIChzc19lbmFibGVkKQorCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQlpZiAocmFkZW9uX2VuY29kZXItPmRldmljZXMgJiAoQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQpKSB7CiAJCQkJCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gcmFkZW9uX2VuY29kZXItPmVuY19wcml2OwogCQkJCQlpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKSB7Ci0JCQkJCQlpZiAoc3NfZW5hYmxlZCkKLQkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KLQkJCQkJCQkJRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFOwogCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9CiAJCQkJCQkJRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERTsKIAkJCQkJCS8qIDE2MjAwIG9yIDI3MDAwICovCkBAIC02NDksMTggKzY0OCwxMSBAQAogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKIAkJCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgewotCQkJCQkJaWYgKHNzX2VuYWJsZWQpCi0JCQkJCQkJYXJncy52My5zSW5wdXQudWNEaXNwUGxsQ29uZmlnIHw9Ci0JCQkJCQkJCURJU1BQTExfQ09ORklHX1NTX0VOQUJMRTsKIAkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQogCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CiAJCQkJCQkvKiAxNjIwMCBvciAyNzAwMCAqLwogCQkJCQkJYXJncy52My5zSW5wdXQudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZHBfY2xvY2sgLyAxMCk7Ci0JCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlID09IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKLQkJCQkJCWlmIChzc19lbmFibGVkKQotCQkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQotCQkJCQkJCQlESVNQUExMX0NPTkZJR19TU19FTkFCTEU7Ci0JCQkJCX0gZWxzZSB7CisJCQkJCX0gZWxzZSBpZiAoZW5jb2Rlcl9tb2RlICE9IEFUT01fRU5DT0RFUl9NT0RFX0xWRFMpIHsKIAkJCQkJCWlmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkKIAkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KIAkJCQkJCQkJRElTUFBMTF9DT05GSUdfRFVBTF9MSU5LOwpAQCAtNjcwLDEwICs2NjIsMTIgQEAKIAkJCQkJCSAgIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiAJCQkJYWRqdXN0ZWRfY2xvY2sgPSBsZTMyX3RvX2NwdShhcmdzLnYzLnNPdXRwdXQudWxEaXNwUGxsRnJlcSkgKiAxMDsKIAkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUmVmRGl2KSB7CisJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfRlJBQ19GQl9ESVY7CiAJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUkVGX0RJVjsKIAkJCQkJcGxsLT5yZWZlcmVuY2VfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUmVmRGl2OwogCQkJCX0KIAkJCQlpZiAoYXJncy52My5zT3V0cHV0LnVjUG9zdERpdikgeworCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWOwogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfVVNFX1BPU1RfRElWOwogCQkJCQlwbGwtPnBvc3RfZGl2ID0gYXJncy52My5zT3V0cHV0LnVjUG9zdERpdjsKIAkJCQl9CkBAIC03MjcsMTQgKzcyMSwxNCBAQAogCQkJICogU2V0UGl4ZWxDbG9jayBwcm92aWRlcyB0aGUgZGl2aWRlcnMKIAkJCSAqLwogCQkJYXJncy52NS51Y0NSVEMgPSBBVE9NX0NSVENfSU5WQUxJRDsKLQkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gZGlzcGNsazsKKwkJCWFyZ3MudjUudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYoZGlzcGNsayk7CiAJCQlhcmdzLnY1LnVjUHBsbCA9IEFUT01fRENQTEw7CiAJCQlicmVhazsKIAkJY2FzZSA2OgogCQkJLyogaWYgdGhlIGRlZmF1bHQgZGNwbGwgY2xvY2sgaXMgc3BlY2lmaWVkLAogCQkJICogU2V0UGl4ZWxDbG9jayBwcm92aWRlcyB0aGUgZGl2aWRlcnMKIAkJCSAqLwotCQkJYXJncy52Ni51bERpc3BFbmdDbGtGcmVxID0gZGlzcGNsazsKKwkJCWFyZ3MudjYudWxEaXNwRW5nQ2xrRnJlcSA9IGNwdV90b19sZTMyKGRpc3BjbGspOwogCQkJYXJncy52Ni51Y1BwbGwgPSBBVE9NX0RDUExMOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC05NjMsOCArOTU3LDEyIEBACiAJLyogYWRqdXN0IHBpeGVsIGNsb2NrIGFzIG5lZWRlZCAqLwogCWFkanVzdGVkX2Nsb2NrID0gYXRvbWJpb3NfYWRqdXN0X3BsbChjcnRjLCBtb2RlLCBwbGwsIHNzX2VuYWJsZWQsICZzcyk7CiAKLQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJICAgJnJlZl9kaXYsICZwb3N0X2Rpdik7CisJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCXJhZGVvbl9jb21wdXRlX3BsbF9hdml2byhwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkJCSAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKKwllbHNlCisJCXJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3kocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAorCQkJCQkgICZyZWZfZGl2LCAmcG9zdF9kaXYpOwogCiAJYXRvbWJpb3NfY3J0Y19wcm9ncmFtX3NzKGNydGMsIEFUT01fRElTQUJMRSwgcmFkZW9uX2NydGMtPnBsbF9pZCwgJnNzKTsKIApAQCAtOTkzLDkgKzk5MSw5IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGV2ZXJncmVlbl9jcnRjX2RvX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywKLQkJCQkgICAgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYiwKLQkJCQkgICAgICBpbnQgeCwgaW50IHksIGludCBhdG9taWMpCitzdGF0aWMgaW50IGRjZTRfY3J0Y19kb19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCisJCQkJIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAorCQkJCSBpbnQgeCwgaW50IHksIGludCBhdG9taWMpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC0xMDA2LDYgKzEwMDQsNyBAQAogCXN0cnVjdCByYWRlb25fYm8gKnJibzsKIAl1aW50NjRfdCBmYl9sb2NhdGlvbjsKIAl1aW50MzJfdCBmYl9mb3JtYXQsIGZiX3BpdGNoX3BpeGVscywgdGlsaW5nX2ZsYWdzOworCXUzMiBmYl9zd2FwID0gRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoRVZFUkdSRUVOX0dSUEhfRU5ESUFOX05PTkUpOwogCWludCByOwogCiAJLyogbm8gZmIgYm91bmQgKi8KQEAgLTEwNTcsMTEgKzEwNTYsMTcgQEAKIAljYXNlIDE2OgogCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMTZCUFApIHwKIAkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fU1dBUChFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMTYpOworI2VuZGlmCiAJCWJyZWFrOwogCWNhc2UgMjQ6CiAJY2FzZSAzMjoKIAkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzMyQlBQKSB8CiAJCQkgICAgIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVChFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjg4ODgpKTsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJZmJfc3dhcCA9IEVWRVJHUkVFTl9HUlBIX0VORElBTl9TV0FQKEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU4zMik7CisjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJRFJNX0VSUk9SKCJVbnN1cHBvcnRlZCBzY3JlZW4gZGVwdGggJWRcbiIsCkBAIC0xMTA2LDYgKzExMTEsNyBAQAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAogCSAgICAgICAodTMyKSBmYl9sb2NhdGlvbiAmIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfQUREUkVTU19NQVNLKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfZm9ybWF0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9YICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKIAlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9PRkZTRVRfWSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CkBAIC0xMTI3LDEyICsxMTMzLDYgQEAKIAlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCiAJICAgICAgIChjcnRjLT5tb2RlLmhkaXNwbGF5IDw8IDE2KSB8IGNydGMtPm1vZGUudmRpc3BsYXkpOwogCi0JaWYgKGNydGMtPm1vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKLQkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKLQkJICAgICAgIEVWRVJHUkVFTl9JTlRFUkxFQVZFX0VOKTsKLQllbHNlCi0JCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOwotCiAJaWYgKCFhdG9taWMgJiYgZmIgJiYgZmIgIT0gY3J0Yy0+ZmIpIHsKIAkJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGZiKTsKIAkJcmJvID0gcmFkZW9uX2ZiLT5vYmotPmRyaXZlcl9wcml2YXRlOwpAQCAtMTE2Miw2ICsxMTYyLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICp0YXJnZXRfZmI7CiAJdWludDY0X3QgZmJfbG9jYXRpb247CiAJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwl1MzIgZmJfc3dhcCA9IFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkU7CiAJaW50IHI7CiAKIAkvKiBubyBmYiBib3VuZCAqLwpAQCAtMTIxNSwxMiArMTIxNiwxOCBAQAogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMTZCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMTZCUFBfUkdCNTY1OworI2lmZGVmIF9fQklHX0VORElBTgorCQlmYl9zd2FwID0gUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMTZCSVQ7CisjZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAyNDoKIAljYXNlIDMyOgogCQlmYl9mb3JtYXQgPQogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfREVQVEhfMzJCUFAgfAogCQkgICAgQVZJVk9fRDFHUlBIX0NPTlRST0xfMzJCUFBfQVJHQjg4ODg7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJCWZiX3N3YXAgPSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8zMkJJVDsKKyNlbmRpZgogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKQEAgLTEyNjAsNiArMTI2Nyw4IEBACiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsKIAkgICAgICAgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAodTMyKSBmYl9sb2NhdGlvbik7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQorCQlXUkVHMzIoUjYwMF9EMUdSUEhfU1dBUF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9zd2FwKTsKIAogCVdSRUczMihBVklWT19EMUdSUEhfU1VSRkFDRV9PRkZTRVRfWCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CiAJV1JFRzMyKEFWSVZPX0QxR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKQEAgLTEyODEsMTIgKzEyOTAsNiBAQAogCVdSRUczMihBVklWT19EMU1PREVfVklFV1BPUlRfU0laRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKIAkgICAgICAgKGNydGMtPm1vZGUuaGRpc3BsYXkgPDwgMTYpIHwgY3J0Yy0+bW9kZS52ZGlzcGxheSk7CiAKLQlpZiAoY3J0Yy0+bW9kZS5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQotCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCQkgICAgICAgQVZJVk9fRDFNT0RFX0lOVEVSTEVBVkVfRU4pOwotCWVsc2UKLQkJV1JFRzMyKEFWSVZPX0QxTU9ERV9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7Ci0KIAlpZiAoIWF0b21pYyAmJiBmYiAmJiBmYiAhPSBjcnRjLT5mYikgewogCQlyYWRlb25fZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoZmIpOwogCQlyYm8gPSByYWRlb25fZmItPm9iai0+ZHJpdmVyX3ByaXZhdGU7CkBAIC0xMzEwLDcgKzEzMTMsNyBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBvbGRfZmIsIHgsIHksIDApOworCQlyZXR1cm4gZGNlNF9jcnRjX2RvX3NldF9iYXNlKGNydGMsIG9sZF9mYiwgeCwgeSwgMCk7CiAJZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkKIAkJcmV0dXJuIGF2aXZvX2NydGNfZG9fc2V0X2Jhc2UoY3J0Yywgb2xkX2ZiLCB4LCB5LCAwKTsKIAllbHNlCkBAIC0xMzI1LDcgKzEzMjgsNyBAQAogICAgICAgIHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAogCWlmIChBU0lDX0lTX0RDRTQocmRldikpCi0JCXJldHVybiBldmVyZ3JlZW5fY3J0Y19kb19zZXRfYmFzZShjcnRjLCBmYiwgeCwgeSwgMSk7CisJCXJldHVybiBkY2U0X2NydGNfZG9fc2V0X2Jhc2UoY3J0YywgZmIsIHgsIHksIDEpOwogCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCXJldHVybiBhdml2b19jcnRjX2RvX3NldF9iYXNlKGNydGMsIGZiLCB4LCB5LCAxKTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKaW5kZXggNGU3Nzc4ZC4uNjk1ZGU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwpAQCAtMTg3LDkgKzE4Nyw5IEBACiBpbnQgZHBfbW9kZV92YWxpZCh1OCBkcGNkW0RQX0RQQ0RfU0laRV0sIGludCBtb2RlX2Nsb2NrKQogewogCWludCBsYW5lcyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOwotCWludCBidyA9IGRwX2xhbmVzX2Zvcl9tb2RlX2Nsb2NrKGRwY2QsIG1vZGVfY2xvY2spOworCWludCBkcF9jbG9jayA9IGRwX2xpbmtfY2xvY2tfZm9yX21vZGVfY2xvY2soZHBjZCwgbW9kZV9jbG9jayk7CiAKLQlpZiAoKGxhbmVzID09IDApIHx8IChidyA9PSAwKSkKKwlpZiAoKGxhbmVzID09IDApIHx8IChkcF9jbG9jayA9PSAwKSkKIAkJcmV0dXJuIE1PREVfQ0xPQ0tfSElHSDsKIAogCXJldHVybiBNT0RFX09LOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggYTg5NzNhYy4uZDI3MGIzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC05NywyNiArOTcsMjkgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIHRlbXAgPSAoUlJFRzMyKENHX01VTFRfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKIAl1MzIgYWN0dWFsX3RlbXAgPSAwOwogCi0JaWYgKCh0ZW1wID4+IDEwKSAmIDEpCi0JCWFjdHVhbF90ZW1wID0gMDsKLQllbHNlIGlmICgodGVtcCA+PiA5KSAmIDEpCisJaWYgKHRlbXAgJiAweDQwMCkKKwkJYWN0dWFsX3RlbXAgPSAtMjU2OworCWVsc2UgaWYgKHRlbXAgJiAweDIwMCkKIAkJYWN0dWFsX3RlbXAgPSAyNTU7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAotdTMyIHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCitpbnQgc3Vtb19nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IFJSRUczMihDR19USEVSTUFMX1NUQVRVUykgJiAweGZmOwotCXUzMiBhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wIC0gNDk7CiAKIAlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQpAQCAtMTE4Miw2ICsxMTg1LDIyIEBACiAvKgogICogQ1AuCiAgKi8KK3ZvaWQgZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJLyogc2V0IHRvIERYMTAvMTEgbW9kZSAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19NT0RFX0NPTlRST0wsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKKwkvKiBGSVhNRTogaW1wbGVtZW50ICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lORElSRUNUX0JVRkZFUiwgMikpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCQkgICgyIDw8IDApIHwKKyNlbmRpZgorCQkJICAoaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoaWItPmdwdV9hZGRyKSAmIDB4RkYpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGliLT5sZW5ndGhfZHcpOworfQorCiAKIHN0YXRpYyBpbnQgZXZlcmdyZWVuX2NwX2xvYWRfbWljcm9jb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewpAQCAtMTE5Miw3ICsxMjExLDExIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcjcwMF9jcF9zdG9wKHJkZXYpOwotCVdSRUczMihDUF9SQl9DTlRMLCBSQl9OT19VUERBVEUgfCAoMTUgPDwgOCkgfCAoMyA8PCAwKSk7CisJV1JFRzMyKENQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIEJVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCSAgICAgICBSQl9OT19VUERBVEUgfCBSQl9CTEtTWigxNSkgfCBSQl9CVUZTWigzKSk7CiAKIAlmd19kYXRhID0gKGNvbnN0IF9fYmUzMiAqKXJkZXYtPnBmcF9mdy0+ZGF0YTsKIAlXUkVHMzIoQ1BfUEZQX1VDT0RFX0FERFIsIDApOwpAQCAtMTIzMyw3ICsxMjU2LDcgQEAKIAljcF9tZSA9IDB4ZmY7CiAJV1JFRzMyKENQX01FX0NOVEwsIGNwX21lKTsKIAotCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIGV2ZXJncmVlbl9kZWZhdWx0X3NpemUgKyAxNSk7CisJciA9IHJhZGVvbl9yaW5nX2xvY2socmRldiwgZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZSArIDE5KTsKIAlpZiAocikgewogCQlEUk1fRVJST1IoInJhZGVvbjogY3AgZmFpbGVkIHRvIGxvY2sgcmluZyAoJWQpLlxuIiwgcik7CiAJCXJldHVybiByOwpAQCAtMTI2Niw2ICsxMjg5LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHhmZmZmZmZmZik7CiAKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweGMwMDI2OTAwKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMzE2KTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDBlKTsgLyogVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMICovCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMHgwMDAwMDAxMCk7IC8qICAqLworCiAJcmFkZW9uX3JpbmdfdW5sb2NrX2NvbW1pdChyZGV2KTsKIAogCXJldHVybiAwOwpAQCAtMTMwNiw3ICsxMzM0LDExIEBACiAJV1JFRzMyKENQX1JCX1dQVFIsIDApOwogCiAJLyogc2V0IHRoZSB3YiBhZGRyZXNzIHdldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90ICovCi0JV1JFRzMyKENQX1JCX1JQVFJfQUREUiwgKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpOworCVdSRUczMihDUF9SQl9SUFRSX0FERFIsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJICAgICAgIFJCX1JQVFJfU1dBUCgyKSB8CisjZW5kaWYKKwkgICAgICAgKChyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGRkZGRkZDKSk7CiAJV1JFRzMyKENQX1JCX1JQVFJfQUREUl9ISSwgdXBwZXJfMzJfYml0cyhyZGV2LT53Yi5ncHVfYWRkciArIFJBREVPTl9XQl9DUF9SUFRSX09GRlNFVCkgJiAweEZGKTsKIAlXUkVHMzIoU0NSQVRDSF9BRERSLCAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX1NDUkFUQ0hfT0ZGU0VUKSA+PiA4KSAmIDB4RkZGRkZGRkYpOwogCkBAIC0yMDcyLDYgKzIxMDQsNyBAQAogCVdSRUczMihWR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCB2Z3RfY2FjaGVfaW52YWxpZGF0aW9uKTsKIAogCVdSRUczMihWR1RfR1NfVkVSVEVYX1JFVVNFLCAxNik7CisJV1JFRzMyKFBBX1NVX0xJTkVfU1RJUFBMRV9WQUxVRSwgMCk7CiAJV1JFRzMyKFBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CiAKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAxNCk7CkBAIC0yMjAxLDYgKzIyMzQsOSBAQAogCXN0cnVjdCBldmVyZ3JlZW5fbWNfc2F2ZSBzYXZlOwogCXUzMiBncmJtX3Jlc2V0ID0gMDsKIAorCWlmICghKFJSRUczMihHUkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkKKwkJcmV0dXJuIDA7CisKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBHUkJNX1NUQVRVUz0weCUwOFhcbiIsCiAJCVJSRUczMihHUkJNX1NUQVRVUykpOwpAQCAtMjYwMyw4ICsyNjM5LDggQEAKIAl3aGlsZSAocnB0ciAhPSB3cHRyKSB7CiAJCS8qIHdwdHIvcnB0ciBhcmUgaW4gYnl0ZXMhICovCiAJCXJpbmdfaW5kZXggPSBycHRyIC8gNDsKLQkJc3JjX2lkID0gIHJkZXYtPmloLnJpbmdbcmluZ19pbmRleF0gJiAweGZmOwotCQlzcmNfZGF0YSA9IHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdICYgMHhmZmZmZmZmOworCQlzcmNfaWQgPSAgbGUzMl90b19jcHUocmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSkgJiAweGZmOworCQlzcmNfZGF0YSA9IGxlMzJfdG9fY3B1KHJkZXYtPmloLnJpbmdbcmluZ19pbmRleCArIDFdKSAmIDB4ZmZmZmZmZjsKIAogCQlzd2l0Y2ggKHNyY19pZCkgewogCQljYXNlIDE6IC8qIEQxIHZibGFuay92bGluZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX2JsaXRfa21zLmMKaW5kZXggYjc1OGRjNy4uMmFkZmIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X2ttcy5jCkBAIC01NSw3ICs1NSw3IEBACiAJaWYgKGggPCA4KQogCQloID0gODsKIAotCWNiX2NvbG9yX2luZm8gPSAoKGZvcm1hdCA8PCAyKSB8ICgxIDw8IDI0KSk7CisJY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjQpIHwgKDEgPDwgOCkpOwogCXBpdGNoID0gKHcgLyA4KSAtIDE7CiAJc2xpY2UgPSAoKHcgKiBoKSAvIDY0KSAtIDE7CiAKQEAgLTEzMyw2ICsxMzMsOSBAQAogCiAJLyogaGlnaCBhZGRyLCBzdHJpZGUgKi8KIAlzcV92dHhfY29uc3RhbnRfd29yZDIgPSAoKHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhmZikgfCAoMTYgPDwgOCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCXNxX3Z0eF9jb25zdGFudF93b3JkMiB8PSAoMiA8PCAzMCk7CisjZW5kaWYKIAkvKiB4eXp3IHN3aXp6bGVzICovCiAJc3FfdnR4X2NvbnN0YW50X3dvcmQzID0gKDAgPDwgMykgfCAoMSA8PCA2KSB8ICgyIDw8IDkpIHwgKDMgPDwgMTIpOwogCkBAIC0xNzMsNyArMTc2LDcgQEAKIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKTsgLyogMkQgKi8KIAlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgfD0gKCgoKHBpdGNoID4+IDMpIC0gMSkgPDwgNikgfAogCQkJCSAgKCh3IC0gMSkgPDwgMTgpKTsKLQlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoKGggLSAxKSA8PCAwKTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDEgPSAoKGggLSAxKSA8PCAwKSB8ICgxIDw8IDI4KTsKIAkvKiB4eXp3IHN3aXp6bGVzICovCiAJc3FfdGV4X3Jlc291cmNlX3dvcmQ0ID0gKDAgPDwgMTYpIHwgKDEgPDwgMTkpIHwgKDIgPDwgMjIpIHwgKDMgPDwgMjUpOwogCkBAIC0yMjEsNyArMjI0LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfUFRfUkVDVExJU1QpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lOREVYX1RZUEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMikgfAorI2VuZGlmCisJCQkgIERJX0lOREVYX1NJWkVfMTZfQklUKTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19OVU1fSU5TVEFOQ0VTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CkBAIC0yMzIsNyArMjM5LDcgQEAKIAogfQogCi0vKiBlbWl0cyAzMCAqLworLyogZW1pdHMgMzYgKi8KIHN0YXRpYyB2b2lkCiBzZXRfZGVmYXVsdF9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKQEAgLTI0NSw2ICsyNTIsOCBAQAogCWludCBudW1faHNfdGhyZWFkcywgbnVtX2xzX3RocmVhZHM7CiAJaW50IG51bV9wc19zdGFja19lbnRyaWVzLCBudW1fdnNfc3RhY2tfZW50cmllcywgbnVtX2dzX3N0YWNrX2VudHJpZXMsIG51bV9lc19zdGFja19lbnRyaWVzOwogCWludCBudW1faHNfc3RhY2tfZW50cmllcywgbnVtX2xzX3N0YWNrX2VudHJpZXM7CisJdTY0IGdwdV9hZGRyOworCWludCBkd29yZHM7CiAKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9DRURBUjoKQEAgLTQ5Nyw2ICs1MDYsMTggQEAKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAweDAwMDAwMDAwKTsKIAorCS8qIHNldCB0byBEWDEwLzExIG1vZGUgKi8KKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfTU9ERV9DT05UUk9MLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CisKKwkvKiBlbWl0IGFuIElCIHBvaW50aW5nIGF0IGRlZmF1bHQgc3RhdGUgKi8KKwlkd29yZHMgPSBBTElHTihyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuLCAweDEwKTsKKwlncHVfYWRkciA9IHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfZ3B1X2FkZHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0OworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19JTkRJUkVDVF9CVUZGRVIsIDIpKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBncHVfYWRkciAmIDB4RkZGRkZGRkMpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKKwogfQogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IGkyZih1aW50MzJfdCBpbnB1dCkKQEAgLTUyNyw4ICs1NDgsMTAgQEAKIGludCBldmVyZ3JlZW5fYmxpdF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiBvYmpfc2l6ZTsKLQlpbnQgcjsKKwlpbnQgaSwgciwgZHdvcmRzOwogCXZvaWQgKnB0cjsKKwl1MzIgcGFja2V0MnNbMTZdOworCWludCBudW1fcGFja2V0MnMgPSAwOwogCiAJLyogcGluIGNvcHkgc2hhZGVyIGludG8gdnJhbSBpZiBhbHJlYWR5IGluaXRpYWxpemVkICovCiAJaWYgKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKQpAQCAtNTM2LDggKzU1OSwxNyBAQAogCiAJbXV0ZXhfaW5pdCgmcmRldi0+cjYwMF9ibGl0Lm11dGV4KTsKIAlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ID0gMDsKLQlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gMDsKLQlvYmpfc2l6ZSA9IDA7CisKKwlyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuID0gZXZlcmdyZWVuX2RlZmF1bHRfc2l6ZTsKKworCWR3b3JkcyA9IHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW47CisJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQlwYWNrZXQyc1tudW1fcGFja2V0MnMrK10gPSBjcHVfdG9fbGUzMihQQUNLRVQyKDApKTsKKwkJZHdvcmRzKys7CisJfQorCisJb2JqX3NpemUgPSBkd29yZHMgKiA0OworCW9ial9zaXplID0gQUxJR04ob2JqX3NpemUsIDI1Nik7CiAKIAlyZGV2LT5yNjAwX2JsaXQudnNfb2Zmc2V0ID0gb2JqX3NpemU7CiAJb2JqX3NpemUgKz0gZXZlcmdyZWVuX3ZzX3NpemUgKiA0OwpAQCAtNTY3LDggKzU5OSwxNiBAQAogCQlyZXR1cm4gcjsKIAl9CiAKLQltZW1jcHkocHRyICsgcmRldi0+cjYwMF9ibGl0LnZzX29mZnNldCwgZXZlcmdyZWVuX3ZzLCBldmVyZ3JlZW5fdnNfc2l6ZSAqIDQpOwotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0LCBldmVyZ3JlZW5fcHMsIGV2ZXJncmVlbl9wc19zaXplICogNCk7CisJbWVtY3B5X3RvaW8ocHRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldCwKKwkJICAgIGV2ZXJncmVlbl9kZWZhdWx0X3N0YXRlLCByZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICogNCk7CisKKwlpZiAobnVtX3BhY2tldDJzKQorCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKKwkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7CisJZm9yIChpID0gMDsgaSA8IGV2ZXJncmVlbl92c19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihldmVyZ3JlZW5fdnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBldmVyZ3JlZW5fcHNfc2l6ZTsgaSsrKQorCQkqKHUzMiAqKSgodW5zaWduZWQgbG9uZylwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0ICsgaSAqIDQpID0gY3B1X3RvX2xlMzIoZXZlcmdyZWVuX3BzW2ldKTsKIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApAQCAtNjUyLDcgKzY5Miw3IEBACiAJLyogY2FsY3VsYXRlIG51bWJlciBvZiBsb29wcyBjb3JyZWN0bHkgKi8KIAlyaW5nX3NpemUgPSBudW1fbG9vcHMgKiBkd29yZHNfcGVyX2xvb3A7CiAJLyogc2V0IGRlZmF1bHQgICsgc2hhZGVycyAqLwotCXJpbmdfc2l6ZSArPSA0NjsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLworCXJpbmdfc2l6ZSArPSA1MjsgLyogc2hhZGVycyArIGRlZiBzdGF0ZSAqLwogCXJpbmdfc2l6ZSArPSAxMDsgLyogZmVuY2UgZW1pdCBmb3IgVkIgSUIgKi8KIAlyaW5nX3NpemUgKz0gNTsgLyogZG9uZSBjb3B5ICovCiAJcmluZ19zaXplICs9IDEwOyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KQEAgLTY2MCw3ICs3MDAsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCXNldF9kZWZhdWx0X3N0YXRlKHJkZXYpOyAvKiAzMCAqLworCXNldF9kZWZhdWx0X3N0YXRlKHJkZXYpOyAvKiAzNiAqLwogCXNldF9zaGFkZXJzKHJkZXYpOyAvKiAxNiAqLwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fYmxpdF9zaGFkZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYwppbmRleCBlZjFkMjhjLi4zYTEwMzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbl9ibGl0X3NoYWRlcnMuYwpAQCAtMzExLDExICszMTEsMTkgQEAKIAkweDAwMDAwMDAwLAogCTB4M2MwMDAwMDAsCiAJMHg2Nzk2MTAwMSwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMGEwMDAwLAorI2Vsc2UKIAkweDAwMDgwMDAwLAorI2VuZGlmCiAJMHgwMDAwMDAwMCwKIAkweDFjMDAwMDAwLAogCTB4Njc5NjEwMDAsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJMHgwMDAyMDAwOCwKKyNlbHNlCiAJMHgwMDAwMDAwOCwKKyNlbmRpZgogCTB4MDAwMDAwMDAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbmQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCmluZGV4IDM2ZDMyZDguLmViNGFjZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oCkBAIC05OCw2ICs5OCw3IEBACiAjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCiAjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAogI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQworI2RlZmluZQkJUkJfUlBUUl9TV0FQKHgpCQkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUl9ISQkJCQkweEMxMTAKICNkZWZpbmUJQ1BfUkJfUlBUUl9XUgkJCQkJMHhDMTA4CiAjZGVmaW5lCUNQX1JCX1dQVFIJCQkJCTB4QzExNApAQCAtMjQwLDYgKzI0MSw3IEBACiAjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkJCQkoKHgpIDw8IDApCiAjZGVmaW5lCQlGT1JDRV9FT1ZfTUFYX1JFWl9DTlQoeCkJCQkoKHgpIDw8IDE2KQogI2RlZmluZSBQQV9TQ19MSU5FX1NUSVBQTEUJCQkJMHgyOEEwQworI2RlZmluZQlQQV9TVV9MSU5FX1NUSVBQTEVfVkFMVUUJCQkweDhBNjAKICNkZWZpbmUJUEFfU0NfTElORV9TVElQUExFX1NUQVRFCQkJMHg4QjEwCiAKICNkZWZpbmUJU0NSQVRDSF9SRUcwCQkJCQkweDg1MDAKQEAgLTY1Miw2ICs2NTQsNyBAQAogI2RlZmluZQlQQUNLRVQzX0RJU1BBVENIX0RJUkVDVAkJCQkweDE1CiAjZGVmaW5lCVBBQ0tFVDNfRElTUEFUQ0hfSU5ESVJFQ1QJCQkweDE2CiAjZGVmaW5lCVBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSX0VORAkJCTB4MTcKKyNkZWZpbmUJUEFDS0VUM19NT0RFX0NPTlRST0wJCQkJMHgxOAogI2RlZmluZQlQQUNLRVQzX1NFVF9QUkVESUNBVElPTgkJCQkweDIwCiAjZGVmaW5lCVBBQ0tFVDNfUkVHX1JNVwkJCQkJMHgyMQogI2RlZmluZQlQQUNLRVQzX0NPTkRfRVhFQwkJCQkweDIyCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL21rcmVndGFibGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCmluZGV4IDYwNzI0MWMuLjVhODJiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbWtyZWd0YWJsZS5jCkBAIC02NzMsOCArNjczLDEwIEBACiAJbGFzdF9yZWcgPSBzdHJ0b2wobGFzdF9yZWdfcywgTlVMTCwgMTYpOwogCiAJZG8gewotCQlpZiAoZmdldHMoYnVmLCAxMDI0LCBmaWxlKSA9PSBOVUxMKQorCQlpZiAoZmdldHMoYnVmLCAxMDI0LCBmaWxlKSA9PSBOVUxMKSB7CisJCQlmY2xvc2UoZmlsZSk7CiAJCQlyZXR1cm4gLTE7CisJCX0KIAkJbGVuID0gc3RybGVuKGJ1Zik7CiAJCWlmIChmdGVsbChmaWxlKSA9PSBlbmQpCiAJCQlkb25lID0gMTsKQEAgLTY4NSw2ICs2ODcsNyBAQAogCQkJCWZwcmludGYoc3RkZXJyLAogCQkJCQkiRXJyb3IgbWF0Y2hpbmcgcmVndWxhciBleHByZXNzaW9uICVkIGluICVzXG4iLAogCQkJCQlyLCBmaWxlbmFtZSk7CisJCQkJZmNsb3NlKGZpbGUpOwogCQkJCXJldHVybiAtMTsKIAkJCX0gZWxzZSB7CiAJCQkJYnVmW21hdGNoWzBdLnJtX2VvXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IDQ2ZGE1MTQuLjkzZmE3MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0xMDMxLDggKzEwMzEsOCBAQAogCVdSRUczMihSQURFT05fQ1BfQ1NRX01PREUsCiAJICAgICAgIFJFR19TRVQoUkFERU9OX0lORElSRUNUMl9TVEFSVCwgaW5kaXJlY3QyX3N0YXJ0KSB8CiAJICAgICAgIFJFR19TRVQoUkFERU9OX0lORElSRUNUMV9TVEFSVCwgaW5kaXJlY3QxX3N0YXJ0KSk7Ci0JV1JFRzMyKDB4NzE4LCAwKTsKLQlXUkVHMzIoMHg3NDQsIDB4MDAwMDRENEQpOworCVdSRUczMihSQURFT05fQ1BfUkJfV1BUUl9ERUxBWSwgMCk7CisJV1JFRzMyKFJBREVPTl9DUF9DU1FfTU9ERSwgMHgwMDAwNEQ0RCk7CiAJV1JFRzMyKFJBREVPTl9DUF9DU1FfQ05UTCwgUkFERU9OX0NTUV9QUklCTV9JTkRCTSk7CiAJcmFkZW9uX3Jpbmdfc3RhcnQocmRldik7CiAJciA9IHJhZGVvbl9yaW5nX3Rlc3QocmRldik7CkBAIC0xNDI3LDYgKzE0MjcsNyBAQAogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUk9GRlNFVDoKQEAgLTE0MzksNiArMTQ0MCw3IEBACiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9UWE9GRlNFVF8wOgpAQCAtMTQ1NCw2ICsxNDU2LDcgQEAKIAkJfQogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19PRkZTRVRfVDBfMToKQEAgLTE0NzEsNiArMTQ3NCw3IEBACiAJCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1swXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzA6CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfT0ZGU0VUX1QxXzE6CkBAIC0xNDg4LDYgKzE0OTIsNyBAQAogCQl0cmFjay0+dGV4dHVyZXNbMV0uY3ViZV9pbmZvW2ldLm9mZnNldCA9IGlkeF92YWx1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbMV0uY3ViZV9pbmZvW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8wOgogCWNhc2UgUkFERU9OX1BQX0NVQklDX09GRlNFVF9UMl8xOgpAQCAtMTUwNSw5ICsxNTEwLDEyIEBACiAJCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCXRyYWNrLT50ZXh0dXJlc1syXS5jdWJlX2luZm9baV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkVfV0lEVEhfSEVJR0hUOgogCQl0cmFjay0+bWF4eSA9ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4N0ZGKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9DT0xPUlBJVENIOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTUyOCw5ICsxNTM2LDExIEBACiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgogCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NOVEw6CiAJCXN3aXRjaCAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgewpAQCAtMTU1NSw2ICsxNTY1LDggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXRyYWNrLT56X2VuYWJsZWQgPSAhIShpZHhfdmFsdWUgJiBSQURFT05fWl9FTkFCTEUpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTDoKIAkJc3dpdGNoIChpZHhfdmFsdWUgJiAweGYpIHsKQEAgLTE1NzIsNiArMTU4NCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAkJfQorCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX1pQQVNTX0FERFI6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0xNTg4LDYgKzE2MDEsNyBAQAogCQkJdWludDMyX3QgdGVtcCA9IGlkeF92YWx1ZSA+PiA0OwogCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQogCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKKwkJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6CkBAIC0xNjAyLDEyICsxNjE2LDE0IEBACiAJCWkgPSAocmVnIC0gUkFERU9OX1BQX1RFWF9TSVpFXzApIC8gODsKIAkJdHJhY2stPnRleHR1cmVzW2ldLndpZHRoID0gKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVVNJWkVfTUFTSykgKyAxOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uaGVpZ2h0ID0gKChpZHhfdmFsdWUgJiBSQURFT05fVEVYX1ZTSVpFX01BU0spID4+IFJBREVPTl9URVhfVlNJWkVfU0hJRlQpICsgMTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8wOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8xOgogCWNhc2UgUkFERU9OX1BQX1RFWF9QSVRDSF8yOgogCQlpID0gKHJlZyAtIFJBREVPTl9QUF9URVhfUElUQ0hfMCkgLyA4OwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucGl0Y2ggPSBpZHhfdmFsdWUgKyAzMjsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BQX1RYRklMVEVSXzA6CiAJY2FzZSBSQURFT05fUFBfVFhGSUxURVJfMToKQEAgLTE2MjEsNiArMTYzNyw3IEBACiAJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjcpICYgMHg3OwogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDYpCiAJCQl0cmFjay0+dGV4dHVyZXNbaV0ucm91bmR1cF9oID0gZmFsc2U7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QUF9UWEZPUk1BVF8wOgogCWNhc2UgUkFERU9OX1BQX1RYRk9STUFUXzE6CkBAIC0xNjczLDYgKzE2OTAsNyBAQAogCQl9CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0ud2lkdGggPSAxIDw8ICgoaWR4X3ZhbHVlID4+IDE2KSAmIDB4Zik7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bNF0uaGVpZ2h0ID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAyMCkgJiAweGYpOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUFBfQ1VCSUNfRkFDRVNfMDoKIAljYXNlIFJBREVPTl9QUF9DVUJJQ19GQUNFU18xOgpAQCAtMTY4Myw2ICsxNzAxLDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0ud2lkdGggPSAxIDw8ICgodG1wID4+IChmYWNlICogOCkpICYgMHhmKTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZV0uaGVpZ2h0ID0gMSA8PCAoKHRtcCA+PiAoKGZhY2UgKiA4KSArIDQpKSAmIDB4Zik7CiAJCX0KKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiRm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA0WCBpbiBjcyBhdCAlZFxuIiwKQEAgLTIzNDcsMTAgKzIzNjYsMTAgQEAKIAogCXRlbXAgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19DTlRMKTsKIAlpZiAoc3RhdGUgPT0gZmFsc2UpIHsKLQkJdGVtcCAmPSB+KDE8PDgpOwotCQl0ZW1wIHw9ICgxPDw5KTsKKwkJdGVtcCAmPSB+UkFERU9OX0NGR19WR0FfUkFNX0VOOworCQl0ZW1wIHw9IFJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9IGVsc2UgewotCQl0ZW1wICY9IH4oMTw8OSk7CisJCXRlbXAgJj0gflJBREVPTl9DRkdfVkdBX0lPX0RJUzsKIAl9CiAJV1JFRzMyKFJBREVPTl9DT05GSUdfQ05UTCwgdGVtcCk7CiB9CkBAIC0zMzE4LDkgKzMzMzcsOSBAQAogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1bnNpZ25lZCBwcmltX3dhbGs7CiAJdW5zaWduZWQgbnZlcnRzOwotCXVuc2lnbmVkIG51bV9jYiA9IHRyYWNrLT5udW1fY2I7CisJdW5zaWduZWQgbnVtX2NiID0gdHJhY2stPmNiX2RpcnR5ID8gdHJhY2stPm51bV9jYiA6IDA7CiAKLQlpZiAoIXRyYWNrLT56Yl9jYl9jbGVhciAmJiAhdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayAmJgorCWlmIChudW1fY2IgJiYgIXRyYWNrLT56Yl9jYl9jbGVhciAmJiAhdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayAmJgogCSAgICAhdHJhY2stPmJsZW5kX3JlYWRfZW5hYmxlKQogCQludW1fY2IgPSAwOwogCkBAIC0zMzQxLDcgKzMzNjAsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9Ci0JaWYgKHRyYWNrLT56X2VuYWJsZWQpIHsKKwl0cmFjay0+Y2JfZGlydHkgPSBmYWxzZTsKKworCWlmICh0cmFjay0+emJfZGlydHkgJiYgdHJhY2stPnpfZW5hYmxlZCkgewogCQlpZiAodHJhY2stPnpiLnJvYmogPT0gTlVMTCkgewogCQkJRFJNX0VSUk9SKCJbZHJtXSBObyBidWZmZXIgZm9yIHogYnVmZmVyICFcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMzU4LDYgKzMzNzksMjggQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQorCXRyYWNrLT56Yl9kaXJ0eSA9IGZhbHNlOworCisJaWYgKHRyYWNrLT5hYV9kaXJ0eSAmJiB0cmFjay0+YWFyZXNvbHZlKSB7CisJCWlmICh0cmFjay0+YWEucm9iaiA9PSBOVUxMKSB7CisJCQlEUk1fRVJST1IoIltkcm1dIE5vIGJ1ZmZlciBmb3IgQUEgcmVzb2x2ZSBidWZmZXIgJWQgIVxuIiwgaSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQkvKiBJIGJlbGlldmUgdGhlIGZvcm1hdCBjb21lcyBmcm9tIGNvbG9yYnVmZmVyMC4gKi8KKwkJc2l6ZSA9IHRyYWNrLT5hYS5waXRjaCAqIHRyYWNrLT5jYlswXS5jcHAgKiB0cmFjay0+bWF4eTsKKwkJc2l6ZSArPSB0cmFjay0+YWEub2Zmc2V0OworCQlpZiAoc2l6ZSA+IHJhZGVvbl9ib19zaXplKHRyYWNrLT5hYS5yb2JqKSkgeworCQkJRFJNX0VSUk9SKCJbZHJtXSBCdWZmZXIgdG9vIHNtYWxsIGZvciBBQSByZXNvbHZlIGJ1ZmZlciAlZCAiCisJCQkJICAiKG5lZWQgJWx1IGhhdmUgJWx1KSAhXG4iLCBpLCBzaXplLAorCQkJCSAgcmFkZW9uX2JvX3NpemUodHJhY2stPmFhLnJvYmopKTsKKwkJCURSTV9FUlJPUigiW2RybV0gQUEgcmVzb2x2ZSBidWZmZXIgJWQgKCV1ICV1ICV1ICV1KVxuIiwKKwkJCQkgIGksIHRyYWNrLT5hYS5waXRjaCwgdHJhY2stPmNiWzBdLmNwcCwKKwkJCQkgIHRyYWNrLT5hYS5vZmZzZXQsIHRyYWNrLT5tYXh5KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCXRyYWNrLT5hYV9kaXJ0eSA9IGZhbHNlOworCiAJcHJpbV93YWxrID0gKHRyYWNrLT52YXBfdmZfY250bCA+PiA0KSAmIDB4MzsKIAlpZiAodHJhY2stPnZhcF92Zl9jbnRsICYgKDEgPDwgMTQpKSB7CiAJCW52ZXJ0cyA9IHRyYWNrLT52YXBfYWx0X252ZXJ0czsKQEAgLTM0MTcsMTMgKzM0NjAsMjMgQEAKIAkJCSAgcHJpbV93YWxrKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXJldHVybiByMTAwX2NzX3RyYWNrX3RleHR1cmVfY2hlY2socmRldiwgdHJhY2spOworCisJaWYgKHRyYWNrLT50ZXhfZGlydHkpIHsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IGZhbHNlOworCQlyZXR1cm4gcjEwMF9jc190cmFja190ZXh0dXJlX2NoZWNrKHJkZXYsIHRyYWNrKTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKIHZvaWQgcjEwMF9jc190cmFja19jbGVhcihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfY3NfdHJhY2sgKnRyYWNrKQogewogCXVuc2lnbmVkIGksIGZhY2U7CiAKKwl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CisJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CisJdHJhY2stPmFhX2RpcnR5ID0gdHJ1ZTsKKwogCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1IzMDApIHsKIAkJdHJhY2stPm51bV9jYiA9IDE7CiAJCWlmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SUzIwMCkKQEAgLTM0MzcsNiArMzQ5MCw4IEBACiAJCXRyYWNrLT5udW1fdGV4dHVyZSA9IDE2OwogCQl0cmFjay0+bWF4eSA9IDQwOTY7CiAJCXRyYWNrLT5zZXBhcmF0ZV9jdWJlID0gMDsKKwkJdHJhY2stPmFhcmVzb2x2ZSA9IGZhbHNlOworCQl0cmFjay0+YWEucm9iaiA9IE5VTEw7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fY2I7IGkrKykgewpAQCAtMzUyMiw3ICszNTc3LDcgQEAKIAlpZiAoaSA8IHJkZXYtPnVzZWNfdGltZW91dCkgewogCQlEUk1fSU5GTygicmluZyB0ZXN0IHN1Y2NlZWRlZCBpbiAlZCB1c2Vjc1xuIiwgaSk7CiAJfSBlbHNlIHsKLQkJRFJNX0VSUk9SKCJyYWRlb246IHJpbmcgdGVzdCBmYWlsZWQgKHNyYWN0aCgweCUwNFgpPTB4JTA4WClcbiIsCisJCURSTV9FUlJPUigicmFkZW9uOiByaW5nIHRlc3QgZmFpbGVkIChzY3JhdGNoKDB4JTA0WCk9MHglMDhYKVxuIiwKIAkJCSAgc2NyYXRjaCwgdG1wKTsKIAkJciA9IC1FSU5WQUw7CiAJfQpAQCAtMzc0Niw4ICszODAxLDYgQEAKIAlyMTAwX21jX3Byb2dyYW0ocmRldik7CiAJLyogUmVzdW1lIGNsb2NrICovCiAJcjEwMF9jbG9ja19zdGFydHVwKHJkZXYpOwotCS8qIEluaXRpYWxpemUgR1BVIGNvbmZpZ3VyYXRpb24gKCMgcGlwZXMsIC4uLikgKi8KLS8vCXIxMDBfZ3B1X2luaXQocmRldik7CiAJLyogSW5pdGlhbGl6ZSBHQVJUIChpbml0aWFsaXplIGFmdGVyIFRUTSBzbyB3ZSBjYW4gYWxsb2NhdGUKIAkgKiBtZW1vcnkgdGhyb3VnaCBUVE0gYnV0IGZpbmFsaXplIGFmdGVyIFRUTSkgKi8KIAlyMTAwX2VuYWJsZV9ibShyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMF90cmFjay5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKaW5kZXggYWY2NTYwMC4uMmZlZjlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMTAwX3RyYWNrLmgKQEAgLTUyLDE0ICs1Miw3IEBACiAJdW5zaWduZWQgICAgICAgICAgICAgICAgY29tcHJlc3NfZm9ybWF0OwogfTsKIAotc3RydWN0IHIxMDBfY3NfdHJhY2tfbGltaXRzIHsKLQl1bnNpZ25lZCBudW1fY2I7Ci0JdW5zaWduZWQgbnVtX3RleHR1cmU7Ci0JdW5zaWduZWQgbWF4X2xldmVsczsKLX07Ci0KIHN0cnVjdCByMTAwX2NzX3RyYWNrIHsKLQlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKIAl1bnNpZ25lZAkJCW51bV9jYjsKIAl1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgIG51bV90ZXh0dXJlOwogCXVuc2lnbmVkCQkJbWF4eTsKQEAgLTczLDExICs2NiwxNyBAQAogCXN0cnVjdCByMTAwX2NzX3RyYWNrX2FycmF5CWFycmF5c1sxMV07CiAJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWNiW1IzMDBfTUFYX0NCXTsKIAlzdHJ1Y3QgcjEwMF9jc190cmFja19jYiAJemI7CisJc3RydWN0IHIxMDBfY3NfdHJhY2tfY2IgCWFhOwogCXN0cnVjdCByMTAwX2NzX3RyYWNrX3RleHR1cmUJdGV4dHVyZXNbUjMwMF9UUkFDS19NQVhfVEVYVFVSRV07CiAJYm9vbAkJCQl6X2VuYWJsZWQ7CiAJYm9vbCAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZV9jdWJlOwogCWJvb2wJCQkJemJfY2JfY2xlYXI7CiAJYm9vbAkJCQlibGVuZF9yZWFkX2VuYWJsZTsKKwlib29sCQkJCWNiX2RpcnR5OworCWJvb2wJCQkJemJfZGlydHk7CisJYm9vbAkJCQl0ZXhfZGlydHk7CisJYm9vbAkJCQlhYV9kaXJ0eTsKKwlib29sCQkJCWFhcmVzb2x2ZTsKIH07CiAKIGludCByMTAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcjEwMF9jc190cmFjayAqdHJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwppbmRleCBkMjQwOGMzLi5mMjQwNTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYwpAQCAtMTg0LDYgKzE4NCw3IEBACiAJCX0KIAkJdHJhY2stPnpiLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPnpiLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUOgpAQCAtMTk2LDYgKzE5Nyw3IEBACiAJCX0KIAkJdHJhY2stPmNiWzBdLnJvYmogPSByZWxvYy0+cm9iajsKIAkJdHJhY2stPmNiWzBdLm9mZnNldCA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhPRkZTRVRfMDoKQEAgLTIxNCw2ICsyMTYsNyBAQAogCQl9CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnJvYmogPSByZWxvYy0+cm9iajsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9DVUJJQ19PRkZTRVRfRjFfMDoKIAljYXNlIFIyMDBfUFBfQ1VCSUNfT0ZGU0VUX0YyXzA6CkBAIC0yNTcsOSArMjYwLDEyIEBACiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5jdWJlX2luZm9bZmFjZSAtIDFdLm9mZnNldCA9IGlkeF92YWx1ZTsKIAkJaWJbaWR4XSA9IGlkeF92YWx1ZSArICgodTMyKXJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2UgLSAxXS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SRV9XSURUSF9IRUlHSFQ6CiAJCXRyYWNrLT5tYXh5ID0gKChpZHhfdmFsdWUgPj4gMTYpICYgMHg3RkYpOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NPTE9SUElUQ0g6CiAJCXIgPSByMTAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CkBAIC0yODAsOSArMjg2LDExIEBACiAJCWliW2lkeF0gPSB0bXA7CiAKIAkJdHJhY2stPmNiWzBdLnBpdGNoID0gaWR4X3ZhbHVlICYgUkFERU9OX0NPTE9SUElUQ0hfTUFTSzsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9ERVBUSFBJVENIOgogCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiBSQURFT05fREVQVEhQSVRDSF9NQVNLOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9SQjNEX0NOVEw6CiAJCXN3aXRjaCAoKGlkeF92YWx1ZSA+PiBSQURFT05fUkIzRF9DT0xPUl9GT1JNQVRfU0hJRlQpICYgMHgxZikgewpAQCAtMzEyLDYgKzMyMCw4IEBACiAJCX0KIAogCQl0cmFjay0+el9lbmFibGVkID0gISEoaWR4X3ZhbHVlICYgUkFERU9OX1pfRU5BQkxFKTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUkIzRF9aU1RFTkNJTENOVEw6CiAJCXN3aXRjaCAoaWR4X3ZhbHVlICYgMHhmKSB7CkBAIC0zMjksNiArMzM5LDcgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1JCM0RfWlBBU1NfQUREUjoKIAkJciA9IHIxMDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKQEAgLTM0NSw2ICszNTYsNyBAQAogCQkJdWludDMyX3QgdGVtcCA9IGlkeF92YWx1ZSA+PiA0OwogCQkJZm9yIChpID0gMDsgaSA8IHRyYWNrLT5udW1fdGV4dHVyZTsgaSsrKQogCQkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gISEodGVtcCAmICgxIDw8IGkpKTsKKwkJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1NFX1ZGX0NOVEw6CkBAIC0zNjksNiArMzgxLDcgQEAKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYU0laRV8wKSAvIDMyOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ud2lkdGggPSAoaWR4X3ZhbHVlICYgUkFERU9OX1RFWF9VU0laRV9NQVNLKSArIDE7CiAJCXRyYWNrLT50ZXh0dXJlc1tpXS5oZWlnaHQgPSAoKGlkeF92YWx1ZSAmIFJBREVPTl9URVhfVlNJWkVfTUFTSykgPj4gUkFERU9OX1RFWF9WU0laRV9TSElGVCkgKyAxOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfMDoKIAljYXNlIFIyMDBfUFBfVFhQSVRDSF8xOgpAQCAtMzc4LDYgKzM5MSw3IEBACiAJY2FzZSBSMjAwX1BQX1RYUElUQ0hfNToKIAkJaSA9IChyZWcgLSBSMjAwX1BQX1RYUElUQ0hfMCkgLyAzMjsKIAkJdHJhY2stPnRleHR1cmVzW2ldLnBpdGNoID0gaWR4X3ZhbHVlICsgMzI7CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfMDoKIAljYXNlIFIyMDBfUFBfVFhGSUxURVJfMToKQEAgLTM5NCw2ICs0MDgsNyBAQAogCQl0bXAgPSAoaWR4X3ZhbHVlID4+IDI3KSAmIDB4NzsKIAkJaWYgKHRtcCA9PSAyIHx8IHRtcCA9PSA2KQogCQkJdHJhY2stPnRleHR1cmVzW2ldLnJvdW5kdXBfaCA9IGZhbHNlOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzA6CiAJY2FzZSBSMjAwX1BQX1RYTVVMVElfQ1RMXzE6CkBAIC00MzIsNiArNDQ3LDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS50ZXhfY29vcmRfdHlwZSA9IDE7CiAJCQlicmVhazsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzA6CiAJY2FzZSBSMjAwX1BQX1RYRk9STUFUXzE6CkBAIC00ODgsNiArNTA0LDcgQEAKIAkJfQogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLndpZHRoID0gMSA8PCAoKGlkeF92YWx1ZSA+PiAxNikgJiAweGYpOwogCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvWzRdLmhlaWdodCA9IDEgPDwgKChpZHhfdmFsdWUgPj4gMjApICYgMHhmKTsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18wOgogCWNhc2UgUjIwMF9QUF9DVUJJQ19GQUNFU18xOgpAQCAtNTAxLDYgKzUxOCw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLndpZHRoID0gMSA8PCAoKHRtcCA+PiAoZmFjZSAqIDgpKSAmIDB4Zik7CiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY3ViZV9pbmZvW2ZhY2VdLmhlaWdodCA9IDEgPDwgKCh0bXAgPj4gKChmYWNlICogOCkgKyA0KSkgJiAweGYpOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9FUlIgIkZvcmJpZGRlbiByZWdpc3RlciAweCUwNFggaW4gY3MgYXQgJWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCmluZGV4IGNmODYyY2EuLjA2OWVmYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jCkBAIC02OSw2ICs2OSw5IEBACiAJbWIoKTsKIH0KIAorI2RlZmluZSBSMzAwX1BURV9XUklURUFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUjMwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCisKIGludCBydjM3MF9wY2llX2dhcnRfc2V0X3BhZ2Uoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBpLCB1aW50NjRfdCBhZGRyKQogewogCXZvaWQgX19pb21lbSAqcHRyID0gKHZvaWQgKilyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucHRyOwpAQCAtNzgsNyArODEsNyBAQAogCX0KIAlhZGRyID0gKGxvd2VyXzMyX2JpdHMoYWRkcikgPj4gOCkgfAogCSAgICAgICAoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCAyNCkgfAotCSAgICAgICAweGM7CisJICAgICAgIFIzMDBfUFRFX1dSSVRFQUJMRSB8IFIzMDBfUFRFX1JFQURBQkxFOwogCS8qIG9uIHg4NiB3ZSB3YW50IHRoaXMgdG8gYmUgQ1BVIGVuZGlhbiwgb24gcG93ZXJwYwogCSAqIG9uIHBvd2VycGMgd2l0aG91dCBIVyBzd2FwcGVycywgaXQnbGwgZ2V0IHN3YXBwZWQgb24gd2F5CiAJICogaW50byBWUkFNIC0gc28gbm8gbmVlZCBmb3IgY3B1X3RvX2xlMzIgb24gVlJBTSB0YWJsZXMgKi8KQEAgLTEzNSw3ICsxMzgsNyBAQAogCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9MTywgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0hJLCAwKTsKIAkvKiBDbGVhciBlcnJvciAqLwotCVdSRUczMl9QQ0lFKDB4MTgsIDApOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfRVJST1IsIDApOwogCXRtcCA9IFJSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfRU47CiAJdG1wIHw9IFJBREVPTl9QQ0lFX1RYX0dBUlRfVU5NQVBQRURfQUNDRVNTX0RJU0NBUkQ7CkBAIC02NjQsNiArNjY3LDcgQEAKIAkJfQogCQl0cmFjay0+Y2JbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOwogCQl0cmFjay0+Y2JbaV0ub2Zmc2V0ID0gaWR4X3ZhbHVlOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlpYltpZHhdID0gaWR4X3ZhbHVlICsgKCh1MzIpcmVsb2MtPmxvYmouZ3B1X29mZnNldCk7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9ERVBUSE9GRlNFVDoKQEAgLTY3Niw2ICs2ODAsNyBAQAogCQl9CiAJCXRyYWNrLT56Yi5yb2JqID0gcmVsb2MtPnJvYmo7CiAJCXRyYWNrLT56Yi5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJYnJlYWs7CiAJY2FzZSBSMzAwX1RYX09GRlNFVF8wOgpAQCAtNzE0LDYgKzcxOSw3IEBACiAJCXRtcCB8PSB0aWxlX2ZsYWdzOwogCQlpYltpZHhdID0gdG1wOwogCQl0cmFjay0+dGV4dHVyZXNbaV0ucm9iaiA9IHJlbG9jLT5yb2JqOworCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJLyogVHJhY2tlZCByZWdpc3RlcnMgKi8KIAljYXNlIDB4MjA4NDoKQEAgLTc0MCw2ICs3NDYsOCBAQAogCQlpZiAocC0+cmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjUxNSkgewogCQkJdHJhY2stPm1heHkgLT0gMTQ0MDsKIAkJfQorCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOworCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEUwMDoKIAkJLyogUkIzRF9DQ1RMICovCkBAIC03NDksNiArNzU3LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXRyYWNrLT5udW1fY2IgPSAoKGlkeF92YWx1ZSA+PiA1KSAmIDB4MykgKyAxOworCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEUzODoKIAljYXNlIDB4NEUzQzoKQEAgLTgxMSw2ICs4MjAsNyBAQAogCQkJCSAgKChpZHhfdmFsdWUgPj4gMjEpICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQl0cmFjay0+Y2JfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEYwMDoKIAkJLyogWkJfQ05UTCAqLwpAQCAtODE5LDYgKzgyOSw3IEBACiAJCX0gZWxzZSB7CiAJCQl0cmFjay0+el9lbmFibGVkID0gZmFsc2U7CiAJCX0KKwkJdHJhY2stPnpiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDRGMTA6CiAJCS8qIFpCX0ZPUk1BVCAqLwpAQCAtODM1LDYgKzg0Niw3IEBACiAJCQkJICAoaWR4X3ZhbHVlICYgMHhGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQl0cmFjay0+emJfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NEYyNDoKIAkJLyogWkJfREVQVEhQSVRDSCAqLwpAQCAtODU4LDE0ICs4NzAsMTcgQEAKIAkJaWJbaWR4XSA9IHRtcDsKIAogCQl0cmFjay0+emIucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkM7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0MTA0OgorCQkvKiBUWF9FTkFCTEUgKi8KIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJCWJvb2wgZW5hYmxlZDsKIAogCQkJZW5hYmxlZCA9ICEhKGlkeF92YWx1ZSAmICgxIDw8IGkpKTsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5lbmFibGVkID0gZW5hYmxlZDsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ0QzA6CiAJY2FzZSAweDQ0QzQ6CkBAIC04OTUsNiArOTEwLDcgQEAKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5jb21wcmVzc19mb3JtYXQgPSBSMTAwX1RSQUNLX0NPTVBfTk9ORTsKIAkJCWJyZWFrOwogCQljYXNlIFIzMDBfVFhfRk9STUFUX1gxNjoKKwkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9GTF9JMTY6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWThYODoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aNVk2WDU6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfWjZZNVg1OgpAQCAtOTA3LDYgKzkyMyw3IEBACiAJCQl0cmFjay0+dGV4dHVyZXNbaV0uY29tcHJlc3NfZm9ybWF0ID0gUjEwMF9UUkFDS19DT01QX05PTkU7CiAJCQlicmVhazsKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9ZMTZYMTY6CisJCWNhc2UgUjMwMF9UWF9GT1JNQVRfRkxfSTE2QTE2OgogCQljYXNlIFIzMDBfVFhfRk9STUFUX1oxMVkxMVgxMDoKIAkJY2FzZSBSMzAwX1RYX0ZPUk1BVF9aMTBZMTFYMTE6CiAJCWNhc2UgUjMwMF9UWF9GT1JNQVRfVzhaOFk4WDg6CkBAIC05NDgsOCArOTY1LDggQEAKIAkJCURSTV9FUlJPUigiSW52YWxpZCB0ZXh0dXJlIGZvcm1hdCAldVxuIiwKIAkJCQkgIChpZHhfdmFsdWUgJiAweDFGKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwogCQl9CisJCXRyYWNrLT50ZXhfZGlydHkgPSB0cnVlOwogCQlicmVhazsKIAljYXNlIDB4NDQwMDoKIAljYXNlIDB4NDQwNDoKQEAgLTk3Nyw2ICs5OTQsNyBAQAogCQlpZiAodG1wID09IDIgfHwgdG1wID09IDQgfHwgdG1wID09IDYpIHsKIAkJCXRyYWNrLT50ZXh0dXJlc1tpXS5yb3VuZHVwX2ggPSBmYWxzZTsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ1MDA6CiAJY2FzZSAweDQ1MDQ6CkBAIC0xMDE0LDYgKzEwMzIsNyBAQAogCQkJRFJNX0VSUk9SKCJGb3JiaWRkZW4gYml0IFRYRk9STUFUX01TQlxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQorCQl0cmFjay0+dGV4X2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQ0ODA6CiAJY2FzZSAweDQ0ODQ6CkBAIC0xMDQzLDYgKzEwNjIsNyBAQAogCQl0cmFjay0+dGV4dHVyZXNbaV0udXNlX3BpdGNoID0gISF0bXA7CiAJCXRtcCA9IChpZHhfdmFsdWUgPj4gMjIpICYgMHhGOwogCQl0cmFjay0+dGV4dHVyZXNbaV0udHhkZXB0aCA9IHRtcDsKKwkJdHJhY2stPnRleF9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgUjMwMF9aQl9aUEFTU19BRERSOgogCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwpAQCAtMTA1Nyw2ICsxMDc3LDcgQEAKIAljYXNlIDB4NGUwYzoKIAkJLyogUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sgKi8KIAkJdHJhY2stPmNvbG9yX2NoYW5uZWxfbWFzayA9IGlkeF92YWx1ZTsKKwkJdHJhY2stPmNiX2RpcnR5ID0gdHJ1ZTsKIAkJYnJlYWs7CiAJY2FzZSAweDQzYTQ6CiAJCS8qIFNDX0hZUEVSWl9FTiAqLwpAQCAtMTA3MCw2ICsxMDkxLDggQEAKIAljYXNlIDB4NGYxYzoKIAkJLyogWkJfQldfQ05UTCAqLwogCQl0cmFjay0+emJfY2JfY2xlYXIgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCA1KSk7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CisJCXRyYWNrLT56Yl9kaXJ0eSA9IHRydWU7CiAJCWlmIChwLT5yZGV2LT5oeXBlcnpfZmlscCAhPSBwLT5maWxwKSB7CiAJCQlpZiAoaWR4X3ZhbHVlICYgKFIzMDBfSElaX0VOQUJMRSB8CiAJCQkJCSBSMzAwX1JEX0NPTVBfRU5BQkxFIHwKQEAgLTEwODEsOCArMTEwNCwyOCBAQAogCWNhc2UgMHg0ZTA0OgogCQkvKiBSQjNEX0JMRU5EQ05UTCAqLwogCQl0cmFjay0+YmxlbmRfcmVhZF9lbmFibGUgPSAhIShpZHhfdmFsdWUgJiAoMSA8PCAyKSk7CisJCXRyYWNrLT5jYl9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwotCWNhc2UgMHg0ZjI4OiAvKiBaQl9ERVBUSENMRUFSVkFMVUUgKi8KKwljYXNlIFIzMDBfUkIzRF9BQVJFU09MVkVfT0ZGU0VUOgorCQlyID0gcjEwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJObyByZWxvYyBmb3IgaWJbJWRdPTB4JTA0WFxuIiwKKwkJCQkgIGlkeCwgcmVnKTsKKwkJCXIxMDBfY3NfZHVtcF9wYWNrZXQocCwgcGt0KTsKKwkJCXJldHVybiByOworCQl9CisJCXRyYWNrLT5hYS5yb2JqID0gcmVsb2MtPnJvYmo7CisJCXRyYWNrLT5hYS5vZmZzZXQgPSBpZHhfdmFsdWU7CisJCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CisJCWliW2lkeF0gPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKKwkJYnJlYWs7CisJY2FzZSBSMzAwX1JCM0RfQUFSRVNPTFZFX1BJVENIOgorCQl0cmFjay0+YWEucGl0Y2ggPSBpZHhfdmFsdWUgJiAweDNGRkU7CisJCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CisJCWJyZWFrOworCWNhc2UgUjMwMF9SQjNEX0FBUkVTT0xWRV9DVEw6CisJCXRyYWNrLT5hYXJlc29sdmUgPSBpZHhfdmFsdWUgJiAweDE7CisJCXRyYWNrLT5hYV9kaXJ0eSA9IHRydWU7CiAJCWJyZWFrOwogCWNhc2UgMHg0ZjMwOiAvKiBaQl9NQVNLX09GRlNFVCAqLwogCWNhc2UgMHg0ZjM0OiAvKiBaQl9aTUFTS19QSVRDSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IDFhMGQ1MzYuLmYwYmNlMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTEzNzEsNiArMTM3MSw4IEBACiAjZGVmaW5lIFIzMDBfUkIzRF9DT0xPUlBJVENIMiAgICAgICAgICAgICAgIDB4NEU0MCAvKiBHVUVTUyAqLwogI2RlZmluZSBSMzAwX1JCM0RfQ09MT1JQSVRDSDMgICAgICAgICAgICAgICAweDRFNDQgLyogR1VFU1MgKi8KIAorI2RlZmluZSBSMzAwX1JCM0RfQUFSRVNPTFZFX09GRlNFVCAgICAgICAgICAweDRFODAKKyNkZWZpbmUgUjMwMF9SQjNEX0FBUkVTT0xWRV9QSVRDSCAgICAgICAgICAgMHg0RTg0CiAjZGVmaW5lIFIzMDBfUkIzRF9BQVJFU09MVkVfQ1RMICAgICAgICAgICAgIDB4NEU4OAogLyogZ2FwICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjQyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKaW5kZXggYzM4NzM0Ni4uMGI1OWVkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJICAgICAgICJwcm9ncmFtbWluZyBwaXBlcy4gQmFkIHRoaW5ncyBtaWdodCBoYXBwZW4uXG4iKTsKIAl9CiAJLyogZ2V0IG1heCBudW1iZXIgb2YgcGlwZXMgKi8KLQlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOworCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKFI0MDBfR0JfUElQRV9TRUxFQ1QpOwogCW51bV9waXBlcyA9ICgoZ2JfcGlwZV9zZWxlY3QgPj4gMTIpICYgMykgKyAxOwogCiAJLyogU0UgY2hpcHMgaGF2ZSAxIHBpcGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggM2M4Njc3Zi4uMmNlODBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTc5LDggKzc5LDggQEAKIAkJV1JFRzMyKDB4NDEyOCwgMHhGRik7CiAJfQogCXI0MjBfcGlwZXNfaW5pdChyZGV2KTsKLQlnYl9waXBlX3NlbGVjdCA9IFJSRUczMigweDQwMkMpOwotCXRtcCA9IFJSRUczMigweDE3MEMpOworCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKFI0MDBfR0JfUElQRV9TRUxFQ1QpOworCXRtcCA9IFJSRUczMihSMzAwX0RTVF9QSVBFX0NPTkZJRyk7CiAJcGlwZV9zZWxlY3RfY3VycmVudCA9ICh0bXAgPj4gMikgJiAzOwogCXRtcCA9ICgxIDw8IHBpcGVfc2VsZWN0X2N1cnJlbnQpIHwKIAkgICAgICAoKChnYl9waXBlX3NlbGVjdCA+PiA4KSAmIDB4RikgPDwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IGFjYTIyMzYuLmRlODg2MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC05NywxMiArOTcsMTYgQEAKIHN0YXRpYyB2b2lkIHI2MDBfcGNpZV9nZW4yX2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIGdldCB0ZW1wZXJhdHVyZSBpbiBtaWxsaWRlZ3JlZXMgKi8KLXUzMiBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK2ludCBydjZ4eF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1MzIgdGVtcCA9IChSUkVHMzIoQ0dfVEhFUk1BTF9TVEFUVVMpICYgQVNJQ19UX01BU0spID4+CiAJCUFTSUNfVF9TSElGVDsKKwlpbnQgYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiB0ZW1wICogMTAwMDsKKwlpZiAodGVtcCAmIDB4MTAwKQorCQlhY3R1YWxfdGVtcCAtPSAyNTY7CisKKwlyZXR1cm4gYWN0dWFsX3RlbXAgKiAxMDAwOwogfQogCiB2b2lkIHI2MDBfcG1fZ2V0X2R5bnBtX3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMTI4Nyw2ICsxMjkxLDkgQEAKIAkJCVNfMDA4MDE0X0NCMl9CVVNZKDEpIHwgU18wMDgwMTRfQ0IzX0JVU1koMSk7CiAJdTMyIHRtcDsKIAorCWlmICghKFJSRUczMihHUkJNX1NUQVRVUykgJiBHVUlfQUNUSVZFKSkKKwkJcmV0dXJuIDA7CisKIAlkZXZfaW5mbyhyZGV2LT5kZXYsICJHUFUgc29mdHJlc2V0IFxuIik7CiAJZGV2X2luZm8ocmRldi0+ZGV2LCAiICBSXzAwODAxMF9HUkJNX1NUQVRVUz0weCUwOFhcbiIsCiAJCVJSRUczMihSXzAwODAxMF9HUkJNX1NUQVRVUykpOwpAQCAtMjA5OCw3ICsyMTA1LDExIEBACiAKIAlyNjAwX2NwX3N0b3AocmRldik7CiAKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOworCVdSRUczMihDUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCSAgICAgICBCVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkgICAgICAgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOwogCiAJLyogUmVzZXQgY3AgKi8KIAlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX0NQKTsKQEAgLTIxODUsNyArMjE5NiwxMSBAQAogCVdSRUczMihDUF9SQl9XUFRSLCAwKTsKIAogCS8qIHNldCB0aGUgd2IgYWRkcmVzcyB3aGV0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgKi8KLQlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSLCAocmRldi0+d2IuZ3B1X2FkZHIgKyBSQURFT05fV0JfQ1BfUlBUUl9PRkZTRVQpICYgMHhGRkZGRkZGQyk7CisJV1JFRzMyKENQX1JCX1JQVFJfQUREUiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkgICAgICAgUkJfUlBUUl9TV0FQKDIpIHwKKyNlbmRpZgorCSAgICAgICAoKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkZGRkZGRkMpKTsKIAlXUkVHMzIoQ1BfUkJfUlBUUl9BRERSX0hJLCB1cHBlcl8zMl9iaXRzKHJkZXYtPndiLmdwdV9hZGRyICsgUkFERU9OX1dCX0NQX1JQVFJfT0ZGU0VUKSAmIDB4RkYpOwogCVdSRUczMihTQ1JBVENIX0FERFIsICgocmRldi0+d2IuZ3B1X2FkZHIgKyBSQURFT05fV0JfU0NSQVRDSF9PRkZTRVQpID4+IDgpICYgMHhGRkZGRkZGRik7CiAKQEAgLTI2MjEsNyArMjYzNiwxMSBAQAogewogCS8qIEZJWE1FOiBpbXBsZW1lbnQgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmdwdV9hZGRyICYgMHhGRkZGRkZGQyk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMCkgfAorI2VuZGlmCisJCQkgIChpYi0+Z3B1X2FkZHIgJiAweEZGRkZGRkZDKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgdXBwZXJfMzJfYml0cyhpYi0+Z3B1X2FkZHIpICYgMHhGRik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgaWItPmxlbmd0aF9kdyk7CiB9CkBAIC0zMjkwLDggKzMzMDksOCBAQAogCXdoaWxlIChycHRyICE9IHdwdHIpIHsKIAkJLyogd3B0ci9ycHRyIGFyZSBpbiBieXRlcyEgKi8KIAkJcmluZ19pbmRleCA9IHJwdHIgLyA0OwotCQlzcmNfaWQgPSAgcmRldi0+aWgucmluZ1tyaW5nX2luZGV4XSAmIDB4ZmY7Ci0JCXNyY19kYXRhID0gcmRldi0+aWgucmluZ1tyaW5nX2luZGV4ICsgMV0gJiAweGZmZmZmZmY7CisJCXNyY19pZCA9IGxlMzJfdG9fY3B1KHJkZXYtPmloLnJpbmdbcmluZ19pbmRleF0pICYgMHhmZjsKKwkJc3JjX2RhdGEgPSBsZTMyX3RvX2NwdShyZGV2LT5paC5yaW5nW3JpbmdfaW5kZXggKyAxXSkgJiAweGZmZmZmZmY7CiAKIAkJc3dpdGNoIChzcmNfaWQpIHsKIAkJY2FzZSAxOiAvKiBEMSB2YmxhbmsvdmxpbmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCmluZGV4IGNhNWMyOWYuLjdmMTA0MzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwpAQCAtMTM3LDkgKzEzNyw5IEBACiAJcHMgPSAodTMyICopICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSArIGRldl9wcml2LT5ibGl0X3ZiLT5vZmZzZXQgKyAyNTYpOwogCiAJZm9yIChpID0gMDsgaSA8IHI2eHhfdnNfc2l6ZTsgaSsrKQotCQl2c1tpXSA9IHI2eHhfdnNbaV07CisJCXZzW2ldID0gY3B1X3RvX2xlMzIocjZ4eF92c1tpXSk7CiAJZm9yIChpID0gMDsgaSA8IHI2eHhfcHNfc2l6ZTsgaSsrKQotCQlwc1tpXSA9IHI2eHhfcHNbaV07CisJCXBzW2ldID0gY3B1X3RvX2xlMzIocjZ4eF9wc1tpXSk7CiAKIAlkZXZfcHJpdi0+YmxpdF92Yi0+dXNlZCA9IDUxMjsKIApAQCAtMTkyLDYgKzE5Miw5IEBACiAJRFJNX0RFQlVHKCJcbiIpOwogCiAJc3FfdnR4X2NvbnN0YW50X3dvcmQyID0gKCgoZ3B1X2FkZHIgPj4gMzIpICYgMHhmZikgfCAoMTYgPDwgOCkpOworI2lmZGVmIF9fQklHX0VORElBTgorCXNxX3Z0eF9jb25zdGFudF93b3JkMiB8PSAoMiA8PCAzMCk7CisjZW5kaWYKIAogCUJFR0lOX1JJTkcoOSk7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9SRVNPVVJDRSwgNykpOwpAQCAtMjkxLDcgKzI5NCwxMSBAQAogCU9VVF9SSU5HKERJX1BUX1JFQ1RMSVNUKTsKIAogCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9JTkRFWF9UWVBFLCAwKSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJT1VUX1JJTkcoKDIgPDwgMikgfCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisjZWxzZQogCU9VVF9SSU5HKERJX0lOREVYX1NJWkVfMTZfQklUKTsKKyNlbmRpZgogCiAJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX05VTV9JTlNUQU5DRVMsIDApKTsKIAlPVVRfUklORygxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggODZlNWFhMC4uNDFmN2FhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAlpZiAoaCA8IDgpCiAJCWggPSA4OwogCi0JY2JfY29sb3JfaW5mbyA9ICgoZm9ybWF0IDw8IDIpIHwgKDEgPDwgMjcpKTsKKwljYl9jb2xvcl9pbmZvID0gKChmb3JtYXQgPDwgMikgfCAoMSA8PCAyNykgfCAoMSA8PCA4KSk7CiAJcGl0Y2ggPSAodyAvIDgpIC0gMTsKIAlzbGljZSA9ICgodyAqIGgpIC8gNjQpIC0gMTsKIApAQCAtMTY1LDYgKzE2NSw5IEBACiAJdTMyIHNxX3Z0eF9jb25zdGFudF93b3JkMjsKIAogCXNxX3Z0eF9jb25zdGFudF93b3JkMiA9ICgodXBwZXJfMzJfYml0cyhncHVfYWRkcikgJiAweGZmKSB8ICgxNiA8PCA4KSk7CisjaWZkZWYgX19CSUdfRU5ESUFOCisJc3FfdnR4X2NvbnN0YW50X3dvcmQyIHw9ICgyIDw8IDMwKTsKKyNlbmRpZgogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX1NFVF9SRVNPVVJDRSwgNykpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDB4NDYwKTsKQEAgLTE5OSw3ICsyMDIsNyBAQAogCWlmIChoIDwgMSkKIAkJaCA9IDE7CiAKLQlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKTsKKwlzcV90ZXhfcmVzb3VyY2Vfd29yZDAgPSAoMSA8PCAwKSB8ICgxIDw8IDMpOwogCXNxX3RleF9yZXNvdXJjZV93b3JkMCB8PSAoKCgocGl0Y2ggPj4gMykgLSAxKSA8PCA4KSB8CiAJCQkJICAoKHcgLSAxKSA8PCAxOSkpOwogCkBAIC0yNTMsNyArMjU2LDExIEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgRElfUFRfUkVDVExJU1QpOwogCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0lOREVYX1RZUEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBESV9JTkRFWF9TSVpFXzE2X0JJVCk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJCSAgKDIgPDwgMikgfAorI2VuZGlmCisJCQkgIERJX0lOREVYX1NJWkVfMTZfQklUKTsKIAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19OVU1fSU5TVEFOQ0VTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMSk7CkBAIC00MjQsNyArNDMxLDExIEBACiAJZHdvcmRzID0gQUxJR04ocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiwgMHgxMCk7CiAJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldDsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAoMiA8PCAwKSB8CisjZW5kaWYKKwkJCSAgKGdwdV9hZGRyICYgMHhGRkZGRkZGQykpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHVwcGVyXzMyX2JpdHMoZ3B1X2FkZHIpICYgMHhGRik7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHdvcmRzKTsKIApAQCAtNDY3LDcgKzQ3OCw3IEBACiBpbnQgcjYwMF9ibGl0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdTMyIG9ial9zaXplOwotCWludCByLCBkd29yZHM7CisJaW50IGksIHIsIGR3b3JkczsKIAl2b2lkICpwdHI7CiAJdTMyIHBhY2tldDJzWzE2XTsKIAlpbnQgbnVtX3BhY2tldDJzID0gMDsKQEAgLTQ4Niw3ICs0OTcsNyBAQAogCiAJZHdvcmRzID0gcmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbjsKIAl3aGlsZSAoZHdvcmRzICYgMHhmKSB7Ci0JCXBhY2tldDJzW251bV9wYWNrZXQycysrXSA9IFBBQ0tFVDIoMCk7CisJCXBhY2tldDJzW251bV9wYWNrZXQycysrXSA9IGNwdV90b19sZTMyKFBBQ0tFVDIoMCkpOwogCQlkd29yZHMrKzsKIAl9CiAKQEAgLTUyOSw4ICs1NDAsMTAgQEAKIAlpZiAobnVtX3BhY2tldDJzKQogCQltZW1jcHlfdG9pbyhwdHIgKyByZGV2LT5yNjAwX2JsaXQuc3RhdGVfb2Zmc2V0ICsgKHJkZXYtPnI2MDBfYmxpdC5zdGF0ZV9sZW4gKiA0KSwKIAkJCSAgICBwYWNrZXQycywgbnVtX3BhY2tldDJzICogNCk7Ci0JbWVtY3B5KHB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQsIHI2eHhfdnMsIHI2eHhfdnNfc2l6ZSAqIDQpOwotCW1lbWNweShwdHIgKyByZGV2LT5yNjAwX2JsaXQucHNfb2Zmc2V0LCByNnh4X3BzLCByNnh4X3BzX3NpemUgKiA0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcjZ4eF92c19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC52c19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihyNnh4X3ZzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgcjZ4eF9wc19zaXplOyBpKyspCisJCSoodTMyICopKCh1bnNpZ25lZCBsb25nKXB0ciArIHJkZXYtPnI2MDBfYmxpdC5wc19vZmZzZXQgKyBpICogNCkgPSBjcHVfdG9fbGUzMihyNnh4X3BzW2ldKTsKIAlyYWRlb25fYm9fa3VubWFwKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIAlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCmluZGV4IGU4MTUxYzEuLjJkMWY2YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKQEAgLTY4NCw3ICs2ODQsMTEgQEAKIAkweDAwMDAwMDAwLAogCTB4M2MwMDAwMDAsCiAJMHg2OGNkMTAwMCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkweDAwMGEwMDAwLAorI2Vsc2UKIAkweDAwMDgwMDAwLAorI2VuZGlmCiAJMHgwMDAwMDAwMCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKaW5kZXggNGY0Y2Q4Yi4uYzNhYjk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTM5Niw2ICszOTYsOSBAQAogCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgIFI2MDBfQlVGX1NXQVBfMzJCSVQgfAorI2VuZGlmCiAJCSAgICAgUjYwMF9SQl9OT19VUERBVEUgfAogCQkgICAgIFI2MDBfUkJfQkxLU1ooMTUpIHwKIAkJICAgICBSNjAwX1JCX0JVRlNaKDMpKTsKQEAgLTQ4Niw5ICs0ODksMTIgQEAKIAlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJICAgICBSNjAwX0JVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgogCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFIHwKLQkJICAgICAoMTUgPDwgOCkgfAotCQkgICAgICgzIDw8IDApKTsKKwkJICAgICBSNjAwX1JCX0JMS1NaKDE1KSB8CisJCSAgICAgUjYwMF9SQl9CVUZTWigzKSk7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIFI2MDBfU09GVF9SRVNFVF9DUCk7CiAJUkFERU9OX1JFQUQoUjYwMF9HUkJNX1NPRlRfUkVTRVQpOwpAQCAtNTUwLDggKzU1NiwxMiBAQAogCiAJaWYgKCFkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzKSB7CiAJCS8qIERpc2FibGUgd3JpdGViYWNrIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGJ1cyBtYXN0ZXIgdHJhbnNmZXIgKi8KLQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwgUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKSB8Ci0JCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCQkJICAgICBSNjAwX0JVRl9TV0FQXzMyQklUIHwKKyNlbmRpZgorCQkJICAgICBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpIHwKKwkJCSAgICAgUjYwMF9SQl9OT19VUERBVEUpOwogCQlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDApOwogCX0KIH0KQEAgLTU3NSw3ICs1ODUsMTEgQEAKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFJfREVMQVksIDApOwogCWNwX3JiX2NudGwgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpOwotCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIFI2MDBfUkJfUlBUUl9XUl9FTkEpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisjaWZkZWYgX19CSUdfRU5ESUFOCisJCSAgICAgUjYwMF9CVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkJICAgICBSNjAwX1JCX1JQVFJfV1JfRU5BKTsKIAogCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfV1IsIGNwX3B0cik7CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfV1BUUiwgY3BfcHRyKTsKQEAgLTE4MzgsNyArMTg1MiwxMCBAQAogCQkJKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKIAl9CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9BRERSLAotCQkgICAgIHJwdHJfYWRkciAmIDB4ZmZmZmZmZmYpOworI2lmZGVmIF9fQklHX0VORElBTgorCQkgICAgICgyIDw8IDApIHwKKyNlbmRpZgorCQkgICAgIChycHRyX2FkZHIgJiAweGZmZmZmZmZjKSk7CiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9BRERSX0hJLAogCQkgICAgIHVwcGVyXzMyX2JpdHMocnB0cl9hZGRyKSk7CiAKQEAgLTE4ODksNyArMTkwNiw3IEBACiAJewogCQl1NjQgc2NyYXRjaF9hZGRyOwogCi0JCXNjcmF0Y2hfYWRkciA9IFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUl9BRERSKTsKKwkJc2NyYXRjaF9hZGRyID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9SUFRSX0FERFIpICYgMHhGRkZGRkZGQzsKIAkJc2NyYXRjaF9hZGRyIHw9ICgodTY0KVJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUl9BRERSX0hJKSkgPDwgMzI7CiAJCXNjcmF0Y2hfYWRkciArPSBSNjAwX1NDUkFUQ0hfUkVHX09GRlNFVDsKIAkJc2NyYXRjaF9hZGRyID4+PSA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCA3ODMxZTA4Li4xNTMwOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMjk1LDE3ICsyOTUsMTggQEAKIAl9CiAKIAlpZiAoIUlTX0FMSUdORUQocGl0Y2gsIHBpdGNoX2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgcGl0Y2hfYWxpZ24sIGFycmF5X21vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgaGVpZ2h0X2FsaWduKSkgewotCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBoZWlnaHQgKCVkKSBpbnZhbGlkXG4iLAotCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgaGVpZ2h0KTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgaGVpZ2h0ICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkgX19mdW5jX18sIF9fTElORV9fLCBoZWlnaHQsIGhlaWdodF9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIUlTX0FMSUdORUQoYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzIG9mZnNldFslZF0gMHglbGx4IG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXywgaSwgYmFzZV9vZmZzZXQpOworCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCAweCVsbHgsICVkIG5vdCBhbGlnbmVkXG4iLCBfX2Z1bmNfXywgaSwKKwkJCSBiYXNlX29mZnNldCwgYmFzZV9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzIwLDcgKzMyMSwxMCBAQAogCQkJICogYnJva2VuIHVzZXJzcGFjZS4KIAkJCSAqLwogCQl9IGVsc2UgewotCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXMgb2Zmc2V0WyVkXSAlZCAlZCAlbHUgdG9vIGJpZ1xuIiwgX19mdW5jX18sIGksIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0sIHRtcCwgcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKSk7CisJCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkICVkICVkICVsdSB0b28gYmlnXG4iLCBfX2Z1bmNfXywgaSwKKwkJCQkgYXJyYXlfbW9kZSwKKwkJCQkgdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFtpXSwgdG1wLAorCQkJCSByYWRlb25fYm9fc2l6ZSh0cmFjay0+Y2JfY29sb3JfYm9baV0pKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQpAQCAtNDU1LDE3ICs0NTksMTggQEAKIAkJCX0KIAogCQkJaWYgKCFJU19BTElHTkVEKHBpdGNoLCBwaXRjaF9hbGlnbikpIHsKLQkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBkYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBkYiBwaXRjaCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgcGl0Y2hfYWxpZ24sIGFycmF5X21vZGUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQogCQkJaWYgKCFJU19BTElHTkVEKGhlaWdodCwgaGVpZ2h0X2FsaWduKSkgewotCQkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGRiIGhlaWdodCAoJWQpIGludmFsaWRcbiIsCi0JCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCk7CisJCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgZGIgaGVpZ2h0ICglZCwgMHgleCwgJWQpIGludmFsaWRcbiIsCisJCQkJCSBfX2Z1bmNfXywgX19MSU5FX18sIGhlaWdodCwgaGVpZ2h0X2FsaWduLCBhcnJheV9tb2RlKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAkJCWlmICghSVNfQUxJR05FRChiYXNlX29mZnNldCwgYmFzZV9hbGlnbikpIHsKLQkJCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksIGJhc2Vfb2Zmc2V0KTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdIDB4JWxseCwgMHglbGx4LCAlZCBub3QgYWxpZ25lZFxuIiwgX19mdW5jX18sIGksCisJCQkJCSBiYXNlX29mZnNldCwgYmFzZV9hbGlnbiwgYXJyYXlfbW9kZSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAKQEAgLTQ3Myw5ICs0NzgsMTAgQEAKIAkJCW52aWV3cyA9IEdfMDI4MDA0X1NMSUNFX01BWCh0cmFjay0+ZGJfZGVwdGhfdmlldykgKyAxOwogCQkJdG1wID0gbnRpbGVzICogYnBlICogNjQgKiBudmlld3M7CiAJCQlpZiAoKHRtcCArIHRyYWNrLT5kYl9vZmZzZXQpID4gcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSkgewotCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgdG9vIHNtYWxsICgweCUwOFggJWQgJWQgJWQgLT4gJXUgaGF2ZSAlbHUpXG4iLAotCQkJCQkJdHJhY2stPmRiX2RlcHRoX3NpemUsIG50aWxlcywgbnZpZXdzLCBicGUsIHRtcCArIHRyYWNrLT5kYl9vZmZzZXQsCi0JCQkJCQlyYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pKTsKKwkJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgYnVmZmVyICglZCkgdG9vIHNtYWxsICgweCUwOFggJWQgJWQgJWQgLT4gJXUgaGF2ZSAlbHUpXG4iLAorCQkJCQkgYXJyYXlfbW9kZSwKKwkJCQkJIHRyYWNrLT5kYl9kZXB0aF9zaXplLCBudGlsZXMsIG52aWV3cywgYnBlLCB0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0LAorCQkJCQkgcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCX0KQEAgLTEyMjcsMTggKzEyMzMsMTggQEAKIAkvKiBYWFggY2hlY2sgaGVpZ2h0IGFzIHdlbGwuLi4gKi8KIAogCWlmICghSVNfQUxJR05FRChwaXRjaCwgcGl0Y2hfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBwaXRjaCAoJWQpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBwaXRjaCAoJWQsIDB4JXgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gsIHBpdGNoX2FsaWduLCBHXzAzODAwMF9USUxFX01PREUod29yZDApKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmICghSVNfQUxJR05FRChiYXNlX29mZnNldCwgYmFzZV9hbGlnbikpIHsKLQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IGJhc2Ugb2Zmc2V0ICgweCVsbHgpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBiYXNlX29mZnNldCk7CisJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBiYXNlIG9mZnNldCAoMHglbGx4LCAweCVsbHgsICVkKSBpbnZhbGlkXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgYmFzZV9vZmZzZXQsIGJhc2VfYWxpZ24sIEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKCFJU19BTElHTkVEKG1pcF9vZmZzZXQsIGJhc2VfYWxpZ24pKSB7Ci0JCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIHRleCBtaXAgb2Zmc2V0ICgweCVsbHgpIGludmFsaWRcbiIsCi0JCQkgX19mdW5jX18sIF9fTElORV9fLCBtaXBfb2Zmc2V0KTsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4IG1pcCBvZmZzZXQgKDB4JWxseCwgMHglbGx4LCAlZCkgaW52YWxpZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIG1pcF9vZmZzZXQsIGJhc2VfYWxpZ24sIEdfMDM4MDAwX1RJTEVfTU9ERSh3b3JkMCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9yZWcuaAppbmRleCAzM2NkYTAxLi5mODY5ODk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX3JlZy5oCkBAIC04MSw3ICs4MSwxMSBAQAogI2RlZmluZSBSNjAwX01FRElVTV9WSURfTE9XRVJfR1BJT19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIwCiAjZGVmaW5lIFI2MDBfTE9XX1ZJRF9MT1dFUl9HUElPX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MjQKIAotCisjZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDYxMEMKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOX05PTkUgICAgICAgICAgICAgICAgICAgICgwIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0QxR1JQSF9TV0FQX0VORElBTl8xNkJJVCAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9EMUdSUEhfU1dBUF9FTkRJQU5fMzJCSVQgICAgICAgICAgICAgICAgICAgKDIgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRDFHUlBIX1NXQVBfRU5ESUFOXzY0QklUICAgICAgICAgICAgICAgICAgICgzIDw8IDApCiAKICNkZWZpbmUgUjYwMF9IRFBfTk9OU1VSRkFDRV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjMDQKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCmluZGV4IGE1ZDg5OGIuLjA0YmFjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKQEAgLTE1NCwxMyArMTU0LDE0IEBACiAjZGVmaW5lCQlST1FfSUIyX1NUQVJUKHgpCQkJCSgoeCkgPDwgOCkKICNkZWZpbmUJQ1BfUkJfQkFTRQkJCQkJMHhDMTAwCiAjZGVmaW5lCUNQX1JCX0NOVEwJCQkJCTB4QzEwNAotI2RlZmluZQkJUkJfQlVGU1ooeCkJCQkJCSgoeCk8PDApCi0jZGVmaW5lCQlSQl9CTEtTWih4KQkJCQkJKCh4KTw8OCkKLSNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDE8PDI3KQotI2RlZmluZQkJUkJfUlBUUl9XUl9FTkEJCQkJCSgxPDwzMSkKKyNkZWZpbmUJCVJCX0JVRlNaKHgpCQkJCQkoKHgpIDw8IDApCisjZGVmaW5lCQlSQl9CTEtTWih4KQkJCQkJKCh4KSA8PCA4KQorI2RlZmluZQkJUkJfTk9fVVBEQVRFCQkJCQkoMSA8PCAyNykKKyNkZWZpbmUJCVJCX1JQVFJfV1JfRU5BCQkJCQkoMSA8PCAzMSkKICNkZWZpbmUJCUJVRl9TV0FQXzMyQklUCQkJCQkoMiA8PCAxNikKICNkZWZpbmUJQ1BfUkJfUlBUUgkJCQkJMHg4NzAwCiAjZGVmaW5lCUNQX1JCX1JQVFJfQUREUgkJCQkJMHhDMTBDCisjZGVmaW5lCQlSQl9SUFRSX1NXQVAoeCkJCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJQ1BfUkJfUlBUUl9BRERSX0hJCQkJCTB4QzExMAogI2RlZmluZQlDUF9SQl9SUFRSX1dSCQkJCQkweEMxMDgKICNkZWZpbmUJQ1BfUkJfV1BUUgkJCQkJMHhDMTE0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCA3MWQyYTU1Li41NmM0OGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uLmgKQEAgLTE3OSwxMCArMTc5LDEwIEBACiB2b2lkIHJhZGVvbl9hdG9tYmlvc19nZXRfcG93ZXJfbW9kZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCByYWRlb25fYXRvbV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdTE2IGxldmVsKTsKIHZvaWQgcnM2OTBfcG1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Ci1leHRlcm4gdTMyIHJ2Nnh4X2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKLWV4dGVybiB1MzIgcnY3NzBfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBldmVyZ3JlZW5fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHUzMiBzdW1vX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiBpbnQgcnY2eHhfZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIGludCBydjc3MF9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IGV2ZXJncmVlbl9nZXRfdGVtcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitleHRlcm4gaW50IHN1bW9fZ2V0X3RlbXAoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCiAvKgogICogRmVuY2VzLgpAQCAtODEyLDggKzgxMiw3IEBACiAJZml4ZWQyMF8xMgkJc2NsazsKIAlmaXhlZDIwXzEyCQltY2xrOwogCWZpeGVkMjBfMTIJCW5lZWRlZF9iYW5kd2lkdGg7Ci0JLyogWFhYOiB1c2UgYSBkZWZpbmUgZm9yIG51bSBwb3dlciBtb2RlcyAqLwotCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgcG93ZXJfc3RhdGVbOF07CisJc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSAqcG93ZXJfc3RhdGU7CiAJLyogbnVtYmVyIG9mIHZhbGlkIHBvd2VyIHN0YXRlcyAqLwogCWludCAgICAgICAgICAgICAgICAgICAgIG51bV9wb3dlcl9zdGF0ZXM7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9wb3dlcl9zdGF0ZV9pbmRleDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuYwppbmRleCAzYTFiMTYxLi5lNzVkNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5jCkBAIC03NTksNyArNzU5LDcgQEAKIAkuZ2FydF90bGJfZmx1c2ggPSAmZXZlcmdyZWVuX3BjaWVfZ2FydF90bGJfZmx1c2gsCiAJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKIAkucmluZ190ZXN0ID0gJnI2MDBfcmluZ190ZXN0LAotCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjYwMF9yaW5nX2liX2V4ZWN1dGUsCisJLnJpbmdfaWJfZXhlY3V0ZSA9ICZldmVyZ3JlZW5fcmluZ19pYl9leGVjdXRlLAogCS5pcnFfc2V0ID0gJmV2ZXJncmVlbl9pcnFfc2V0LAogCS5pcnFfcHJvY2VzcyA9ICZldmVyZ3JlZW5faXJxX3Byb2Nlc3MsCiAJLmdldF92YmxhbmtfY291bnRlciA9ICZldmVyZ3JlZW5fZ2V0X3ZibGFua19jb3VudGVyLApAQCAtODA1LDcgKzgwNSw3IEBACiAJLmdhcnRfdGxiX2ZsdXNoID0gJmV2ZXJncmVlbl9wY2llX2dhcnRfdGxiX2ZsdXNoLAogCS5nYXJ0X3NldF9wYWdlID0gJnJzNjAwX2dhcnRfc2V0X3BhZ2UsCiAJLnJpbmdfdGVzdCA9ICZyNjAwX3JpbmdfdGVzdCwKLQkucmluZ19pYl9leGVjdXRlID0gJnI2MDBfcmluZ19pYl9leGVjdXRlLAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmZXZlcmdyZWVuX3JpbmdfaWJfZXhlY3V0ZSwKIAkuaXJxX3NldCA9ICZldmVyZ3JlZW5faXJxX3NldCwKIAkuaXJxX3Byb2Nlc3MgPSAmZXZlcmdyZWVuX2lycV9wcm9jZXNzLAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmZXZlcmdyZWVuX2dldF92YmxhbmtfY291bnRlciwKQEAgLTg0OCw3ICs4NDgsNyBAQAogCS5nYXJ0X3RsYl9mbHVzaCA9ICZldmVyZ3JlZW5fcGNpZV9nYXJ0X3RsYl9mbHVzaCwKIAkuZ2FydF9zZXRfcGFnZSA9ICZyczYwMF9nYXJ0X3NldF9wYWdlLAogCS5yaW5nX3Rlc3QgPSAmcjYwMF9yaW5nX3Rlc3QsCi0JLnJpbmdfaWJfZXhlY3V0ZSA9ICZyNjAwX3JpbmdfaWJfZXhlY3V0ZSwKKwkucmluZ19pYl9leGVjdXRlID0gJmV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUsCiAJLmlycV9zZXQgPSAmZXZlcmdyZWVuX2lycV9zZXQsCiAJLmlycV9wcm9jZXNzID0gJmV2ZXJncmVlbl9pcnFfcHJvY2VzcywKIAkuZ2V0X3ZibGFua19jb3VudGVyID0gJmV2ZXJncmVlbl9nZXRfdmJsYW5rX2NvdW50ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKaW5kZXggZTAxZjA3NzEuLmM1OWJkOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKQEAgLTM1NSw2ICszNTUsNyBAQAogYm9vbCBldmVyZ3JlZW5fZ3B1X2lzX2xvY2t1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgZXZlcmdyZWVuX2FzaWNfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogdm9pZCBldmVyZ3JlZW5fYmFuZHdpZHRoX3VwZGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIGV2ZXJncmVlbl9yaW5nX2liX2V4ZWN1dGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKIGludCBldmVyZ3JlZW5fY29weV9ibGl0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJdWludDY0X3Qgc3JjX29mZnNldCwgdWludDY0X3QgZHN0X29mZnNldCwKIAkJCXVuc2lnbmVkIG51bV9wYWdlcywgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggMTU3MzIwMi4uMDJkNWM0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC04OCw3ICs4OCw3IEBACiAJCQkvKiBzb21lIGV2ZXJncmVlbiBib2FyZHMgaGF2ZSBiYWQgZGF0YSBmb3IgdGhpcyBlbnRyeSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgewogCQkJCWlmICgoaSA9PSA3KSAmJgotCQkJCSAgICAoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCA9PSAweDE5MzYpICYmCisJCQkJICAgIChsZTE2X3RvX2NwdShncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4KSA9PSAweDE5MzYpICYmCiAJCQkJICAgIChncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9PSAwKSkgewogCQkJCQlncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9IDB4OTc7CiAJCQkJCWdwaW8tPnVjRGF0YU1hc2tTaGlmdCA9IDg7CkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCS8qIHNvbWUgRENFMyBib2FyZHMgaGF2ZSBiYWQgZGF0YSBmb3IgdGhpcyBlbnRyeSAqLwogCQkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkgewogCQkJCWlmICgoaSA9PSA0KSAmJgotCQkJCSAgICAoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCA9PSAweDFmZGEpICYmCisJCQkJICAgIChsZTE2X3RvX2NwdShncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4KSA9PSAweDFmZGEpICYmCiAJCQkJICAgIChncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9PSAweDk0KSkKIAkJCQkJZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPSAweDE0OwogCQkJfQpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCQkvKiBzb21lIGV2ZXJncmVlbiBib2FyZHMgaGF2ZSBiYWQgZGF0YSBmb3IgdGhpcyBlbnRyeSAqLwogCQkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgewogCQkJCWlmICgoaSA9PSA3KSAmJgotCQkJCSAgICAoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCA9PSAweDE5MzYpICYmCisJCQkJICAgIChsZTE2X3RvX2NwdShncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4KSA9PSAweDE5MzYpICYmCiAJCQkJICAgIChncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9PSAwKSkgewogCQkJCQlncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9IDB4OTc7CiAJCQkJCWdwaW8tPnVjRGF0YU1hc2tTaGlmdCA9IDg7CkBAIC0xODUsNyArMTg1LDcgQEAKIAkJCS8qIHNvbWUgRENFMyBib2FyZHMgaGF2ZSBiYWQgZGF0YSBmb3IgdGhpcyBlbnRyeSAqLwogCQkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkgewogCQkJCWlmICgoaSA9PSA0KSAmJgotCQkJCSAgICAoZ3Bpby0+dXNDbGtNYXNrUmVnaXN0ZXJJbmRleCA9PSAweDFmZGEpICYmCisJCQkJICAgIChsZTE2X3RvX2NwdShncGlvLT51c0Nsa01hc2tSZWdpc3RlckluZGV4KSA9PSAweDFmZGEpICYmCiAJCQkJICAgIChncGlvLT5zdWNJMmNJZC51Y0FjY2VzcyA9PSAweDk0KSkKIAkJCQkJZ3Bpby0+c3VjSTJjSWQudWNBY2Nlc3MgPSAweDE0OwogCQkJfQpAQCAtMjUyLDcgKzI1Miw3IEBACiAJCQlwaW4gPSAmZ3Bpb19pbmZvLT5hc0dQSU9fUGluW2ldOwogCQkJaWYgKGlkID09IHBpbi0+dWNHUElPX0lEKSB7CiAJCQkJZ3Bpby5pZCA9IHBpbi0+dWNHUElPX0lEOwotCQkJCWdwaW8ucmVnID0gcGluLT51c0dwaW9QaW5fQUluZGV4ICogNDsKKwkJCQlncGlvLnJlZyA9IGxlMTZfdG9fY3B1KHBpbi0+dXNHcGlvUGluX0FJbmRleCkgKiA0OwogCQkJCWdwaW8ubWFzayA9ICgxIDw8IHBpbi0+dWNHcGlvUGluQml0U2hpZnQpOwogCQkJCWdwaW8udmFsaWQgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzg3LDE1ICszODcsMTEgQEAKIAkJCSpsaW5lX211eCA9IDB4OTA7CiAJfQogCi0JLyogbWFjIHJ2NjMwICovCi0JaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1ODgpICYmCi0JICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gMHgxMDZiKSAmJgotCSAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDBhNikpIHsKLQkJaWYgKChzdXBwb3J0ZWRfZGV2aWNlID09IEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSAmJgotCQkgICAgKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkpIHsKLQkJCSpjb25uZWN0b3JfdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl85UGluRElOOwotCQkJKmxpbmVfbXV4ID0gQ09OTkVDVE9SXzdQSU5fRElOX0VOVU1fSUQxOwotCQl9CisJLyogbWFjIHJ2NjMwLCBydjczMCwgb3RoZXJzICovCisJaWYgKChzdXBwb3J0ZWRfZGV2aWNlID09IEFUT01fREVWSUNFX1RWMV9TVVBQT1JUKSAmJgorCSAgICAoKmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSkgeworCQkqY29ubmVjdG9yX3R5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfOVBpbkRJTjsKKwkJKmxpbmVfbXV4ID0gQ09OTkVDVE9SXzdQSU5fRElOX0VOVU1fSUQxOwogCX0KIAogCS8qIEFTVVMgSEQgMzYwMCBYVCBib2FyZCBsaXN0cyB0aGUgRFZJIHBvcnQgYXMgSERNSSAqLwpAQCAtMTE2NywxNiArMTE2Myw2IEBACiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCQllbHNlCiAJCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gMjAwMDA7Ci0JCX0gZWxzZSBpZiAocDFwbGwtPnBsbF9vdXRfbWluID4gNjQ4MDApIHsKLQkJCS8qIExpbWl0aW5nIHRoZSBwbGwgb3V0cHV0IHJhbmdlIGlzIGEgZ29vZCB0aGluZyBnZW5lcmFsbHkgYXMKLQkJCSAqIGl0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIHBsbCBjb21iaW5hdGlvbnMgZm9yIGEgZ2l2ZW4KLQkJCSAqIGZyZXF1ZW5jeSBwcmVzdW1hYmx5IHRvIHRoZSBvbmVzIHRoYXQgd29yayBiZXN0IG9uIGVhY2ggY2FyZC4KLQkJCSAqIEhvd2V2ZXIsIGNlcnRhaW4gZHVhbGxpbmsgRFZJIG1vbml0b3JzIHNlZW0gdG8gbGlrZQotCQkJICogcGxsIGNvbWJpbmF0aW9ucyB0aGF0IHdvdWxkIGJlIGxpbWl0ZWQgYnkgdGhpcyBhdCBsZWFzdCBvbgotCQkJICogcHJlLURDRSAzLjAgcjZ4eCBoYXJkd2FyZS4gIFRoaXMgbWlnaHQgbmVlZCB0byBiZSBhZGp1c3RlZCBwZXIKLQkJCSAqIGZhbWlseS4KLQkJCSAqLwotCQkJcDFwbGwtPnBsbF9vdXRfbWluID0gNjQ4MDA7CiAJCX0KIAogCQlwMXBsbC0+cGxsX2luX21pbiA9CkBAIC0xMjg4LDExICsxMjc0LDExIEBACiAJCQkJICAgICAgZGF0YV9vZmZzZXQpOwogCQlzd2l0Y2ggKGNyZXYpIHsKIAkJY2FzZSAxOgotCQkJaWYgKGlncF9pbmZvLT5pbmZvLnVsQm9vdFVwTWVtb3J5Q2xvY2spCisJCQlpZiAobGUzMl90b19jcHUoaWdwX2luZm8tPmluZm8udWxCb290VXBNZW1vcnlDbG9jaykpCiAJCQkJcmV0dXJuIHRydWU7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJaWYgKGlncF9pbmZvLT5pbmZvXzIudWxCb290VXBTaWRlUG9ydENsb2NrKQorCQkJaWYgKGxlMzJfdG9fY3B1KGlncF9pbmZvLT5pbmZvXzIudWxCb290VXBTaWRlUG9ydENsb2NrKSkKIAkJCQlyZXR1cm4gdHJ1ZTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTQ1Niw3ICsxNDQyLDcgQEAKIAogCQkJZm9yIChpID0gMDsgaSA8IG51bV9pbmRpY2VzOyBpKyspIHsKIAkJCQlpZiAoKHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51Y0Nsb2NrSW5kaWNhdGlvbiA9PSBpZCkgJiYKLQkJCQkgICAgKGNsb2NrIDw9IHNzX2luZm8tPmluZm8uYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSB7CisJCQkJICAgIChjbG9jayA8PSBsZTMyX3RvX2NwdShzc19pbmZvLT5pbmZvLmFzU3ByZWFkU3BlY3RydW1baV0udWxUYXJnZXRDbG9ja1JhbmdlKSkpIHsKIAkJCQkJc3MtPnBlcmNlbnRhZ2UgPQogCQkJCQkJbGUxNl90b19jcHUoc3NfaW5mby0+aW5mby5hc1NwcmVhZFNwZWN0cnVtW2ldLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlKTsKIAkJCQkJc3MtPnR5cGUgPSBzc19pbmZvLT5pbmZvLmFzU3ByZWFkU3BlY3RydW1baV0udWNTcHJlYWRTcGVjdHJ1bU1vZGU7CkBAIC0xNDcwLDcgKzE0NTYsNyBAQAogCQkJCXNpemVvZihBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVF9WMik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2luZGljZXM7IGkrKykgewogCQkJCWlmICgoc3NfaW5mby0+aW5mb18yLmFzU3ByZWFkU3BlY3RydW1baV0udWNDbG9ja0luZGljYXRpb24gPT0gaWQpICYmCi0JCQkJICAgIChjbG9jayA8PSBzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSB7CisJCQkJICAgIChjbG9jayA8PSBsZTMyX3RvX2NwdShzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSkgewogCQkJCQlzcy0+cGVyY2VudGFnZSA9CiAJCQkJCQlsZTE2X3RvX2NwdShzc19pbmZvLT5pbmZvXzIuYXNTcHJlYWRTcGVjdHJ1bVtpXS51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSk7CiAJCQkJCXNzLT50eXBlID0gc3NfaW5mby0+aW5mb18yLmFzU3ByZWFkU3BlY3RydW1baV0udWNTcHJlYWRTcGVjdHJ1bU1vZGU7CkBAIC0xNDg0LDcgKzE0NzAsNyBAQAogCQkJCXNpemVvZihBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVF9WMyk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2luZGljZXM7IGkrKykgewogCQkJCWlmICgoc3NfaW5mby0+aW5mb18zLmFzU3ByZWFkU3BlY3RydW1baV0udWNDbG9ja0luZGljYXRpb24gPT0gaWQpICYmCi0JCQkJICAgIChjbG9jayA8PSBzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSB7CisJCQkJICAgIChjbG9jayA8PSBsZTMyX3RvX2NwdShzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51bFRhcmdldENsb2NrUmFuZ2UpKSkgewogCQkJCQlzcy0+cGVyY2VudGFnZSA9CiAJCQkJCQlsZTE2X3RvX2NwdShzc19pbmZvLT5pbmZvXzMuYXNTcHJlYWRTcGVjdHJ1bVtpXS51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSk7CiAJCQkJCXNzLT50eXBlID0gc3NfaW5mby0+aW5mb18zLmFzU3ByZWFkU3BlY3RydW1baV0udWNTcHJlYWRTcGVjdHJ1bU1vZGU7CkBAIC0xNTY3LDggKzE1NTMsOCBAQAogCQlpZiAobWlzYyAmIEFUT01fRE9VQkxFX0NMT0NLX01PREUpCiAJCQlsdmRzLT5uYXRpdmVfbW9kZS5mbGFncyB8PSBEUk1fTU9ERV9GTEFHX0RCTFNDQU47CiAKLQkJbHZkcy0+bmF0aXZlX21vZGUud2lkdGhfbW0gPSBsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0ltYWdlSFNpemU7Ci0JCWx2ZHMtPm5hdGl2ZV9tb2RlLmhlaWdodF9tbSA9IGx2ZHNfaW5mby0+aW5mby5zTENEVGltaW5nLnVzSW1hZ2VWU2l6ZTsKKwkJbHZkcy0+bmF0aXZlX21vZGUud2lkdGhfbW0gPSBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0ltYWdlSFNpemUpOworCQlsdmRzLT5uYXRpdmVfbW9kZS5oZWlnaHRfbW0gPSBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8uc0xDRFRpbWluZy51c0ltYWdlVlNpemUpOwogCiAJCS8qIHNldCBjcnRjIHZhbHVlcyAqLwogCQlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oJmx2ZHMtPm5hdGl2ZV9tb2RlLCBDUlRDX0lOVEVSTEFDRV9IQUxWRV9WKTsKQEAgLTE1ODMsMTMgKzE1NjksMTMgQEAKIAkJCWx2ZHMtPmxpbmtiID0gZmFsc2U7CiAKIAkJLyogcGFyc2UgdGhlIGxjZCByZWNvcmQgdGFibGUgKi8KLQkJaWYgKGx2ZHNfaW5mby0+aW5mby51c01vZGVQYXRjaFRhYmxlT2Zmc2V0KSB7CisJCWlmIChsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpIHsKIAkJCUFUT01fRkFLRV9FRElEX1BBVENIX1JFQ09SRCAqZmFrZV9lZGlkX3JlY29yZDsKIAkJCUFUT01fUEFORUxfUkVTT0xVVElPTl9QQVRDSF9SRUNPUkQgKnBhbmVsX3Jlc19yZWNvcmQ7CiAJCQlib29sIGJhZF9yZWNvcmQgPSBmYWxzZTsKIAkJCXU4ICpyZWNvcmQgPSAodTggKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwogCQkJCQkgICAgZGF0YV9vZmZzZXQgKwotCQkJCQkgICAgbHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpOworCQkJCQkgICAgbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpKTsKIAkJCXdoaWxlICgqcmVjb3JkICE9IEFUT01fUkVDT1JEX0VORF9UWVBFKSB7CiAJCQkJc3dpdGNoICgqcmVjb3JkKSB7CiAJCQkJY2FzZSBMQ0RfTU9ERV9QQVRDSF9SRUNPUkRfTU9ERV9UWVBFOgpAQCAtMTk5MSw2ICsxOTc3LDkgQEAKIAludW1fbW9kZXMgPSBwb3dlcl9pbmZvLT5pbmZvLnVjTnVtT2ZQb3dlck1vZGVFbnRyaWVzOwogCWlmIChudW1fbW9kZXMgPiBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSykKIAkJbnVtX21vZGVzID0gQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0s7CisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqIG51bV9tb2RlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIHN0YXRlX2luZGV4OwogCS8qIGxhc3QgbW9kZSBpcyB1c3VhbGx5IGRlZmF1bHQsIGFycmF5IGlzIGxvdyB0byBoaWdoICovCiAJZm9yIChpID0gMDsgaSA8IG51bV9tb2RlczsgaSsrKSB7CiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKQEAgLTIyMDAsNyArMjE4OSw3IEBACiAJCWZpcm13YXJlX2luZm8gPQogCQkJKHVuaW9uIGZpcm13YXJlX2luZm8gKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKwogCQkJCQkJZGF0YV9vZmZzZXQpOwotCQl2ZGRjID0gZmlybXdhcmVfaW5mby0+aW5mb18xNC51c0Jvb3RVcFZERENWb2x0YWdlOworCQl2ZGRjID0gbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18xNC51c0Jvb3RVcFZERENWb2x0YWdlKTsKIAl9CiAKIAlyZXR1cm4gdmRkYzsKQEAgLTIyOTUsNyArMjI4NCw3IEBACiAJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2UudHlwZSA9CiAJCQlWT0xUQUdFX1NXOwogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQotCQkJY2xvY2tfaW5mby0+ZXZlcmdyZWVuLnVzVkREQzsKKwkJCWxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPmV2ZXJncmVlbi51c1ZEREMpOwogCX0gZWxzZSB7CiAJCXNjbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT5yNjAwLnVzRW5naW5lQ2xvY2tMb3cpOwogCQlzY2xrIHw9IGNsb2NrX2luZm8tPnI2MDAudWNFbmdpbmVDbG9ja0hpZ2ggPDwgMTY7CkBAIC0yMzA2LDcgKzIyOTUsNyBAQAogCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnR5cGUgPQogCQkJVk9MVEFHRV9TVzsKIAkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0udm9sdGFnZS52b2x0YWdlID0KLQkJCWNsb2NrX2luZm8tPnI2MDAudXNWRERDOworCQkJbGUxNl90b19jcHUoY2xvY2tfaW5mby0+cjYwMC51c1ZEREMpOwogCX0KIAogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKQEAgLTIzNDIsNiArMjMzMSwxMCBAQAogCXBvd2VyX2luZm8gPSAodW5pb24gcG93ZXJfaW5mbyAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0KTsKIAogCXJhZGVvbl9hdG9tYmlvc19hZGRfcHBsaWJfdGhlcm1hbF9jb250cm9sbGVyKHJkZXYsICZwb3dlcl9pbmZvLT5wcGxpYi5zVGhlcm1hbENvbnRyb2xsZXIpOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSkgKgorCQkJCSAgICAgICBwb3dlcl9pbmZvLT5wcGxpYi51Y051bVN0YXRlcywgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5wbS5wb3dlcl9zdGF0ZSkKKwkJcmV0dXJuIHN0YXRlX2luZGV4OwogCS8qIGZpcnN0IG1vZGUgaXMgdXN1YWxseSBkZWZhdWx0LCBmb2xsb3dlZCBieSBsb3cgdG8gaGlnaCAqLwogCWZvciAoaSA9IDA7IGkgPCBwb3dlcl9pbmZvLT5wcGxpYi51Y051bVN0YXRlczsgaSsrKSB7CiAJCW1vZGVfaW5kZXggPSAwOwpAQCAtMjQxNSwxMyArMjQwOCwxNyBAQAogCXJhZGVvbl9hdG9tYmlvc19hZGRfcHBsaWJfdGhlcm1hbF9jb250cm9sbGVyKHJkZXYsICZwb3dlcl9pbmZvLT5wcGxpYi5zVGhlcm1hbENvbnRyb2xsZXIpOwogCXN0YXRlX2FycmF5ID0gKHN0cnVjdCBTdGF0ZUFycmF5ICopCiAJCShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArIGRhdGFfb2Zmc2V0ICsKLQkJIHBvd2VyX2luZm8tPnBwbGliLnVzU3RhdGVBcnJheU9mZnNldCk7CisJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51c1N0YXRlQXJyYXlPZmZzZXQpKTsKIAljbG9ja19pbmZvX2FycmF5ID0gKHN0cnVjdCBDbG9ja0luZm9BcnJheSAqKQogCQkobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKyBkYXRhX29mZnNldCArCi0JCSBwb3dlcl9pbmZvLT5wcGxpYi51c0Nsb2NrSW5mb0FycmF5T2Zmc2V0KTsKKwkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPnBwbGliLnVzQ2xvY2tJbmZvQXJyYXlPZmZzZXQpKTsKIAlub25fY2xvY2tfaW5mb19hcnJheSA9IChzdHJ1Y3QgTm9uQ2xvY2tJbmZvQXJyYXkgKikKIAkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQgKwotCQkgcG93ZXJfaW5mby0+cHBsaWIudXNOb25DbG9ja0luZm9BcnJheU9mZnNldCk7CisJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5wcGxpYi51c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0KSk7CisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqCisJCQkJICAgICAgIHN0YXRlX2FycmF5LT51Y051bUVudHJpZXMsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpCisJCXJldHVybiBzdGF0ZV9pbmRleDsKIAlmb3IgKGkgPSAwOyBpIDwgc3RhdGVfYXJyYXktPnVjTnVtRW50cmllczsgaSsrKSB7CiAJCW1vZGVfaW5kZXggPSAwOwogCQlwb3dlcl9zdGF0ZSA9ICh1bmlvbiBwcGxpYl9wb3dlcl9zdGF0ZSAqKSZzdGF0ZV9hcnJheS0+c3RhdGVzW2ldOwpAQCAtMjQ5NSwxOSArMjQ5MiwyMiBAQAogCQkJYnJlYWs7CiAJCX0KIAl9IGVsc2UgewotCQkvKiBhZGQgdGhlIGRlZmF1bHQgbW9kZSAqLwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9Ci0JCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KLQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKLQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOwotCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ucGNpZV9sYW5lcyA9IDE2OwotCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7Ci0JCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5mbGFncyA9IDA7Ci0JCXN0YXRlX2luZGV4Kys7CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAocmRldi0+cG0ucG93ZXJfc3RhdGUpIHsKKwkJCS8qIGFkZCB0aGUgZGVmYXVsdCBtb2RlICovCisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID0gcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQorCQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5wY2llX2xhbmVzID0gMTY7CisJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlX2luZGV4ID0gc3RhdGVfaW5kZXg7CisJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZmxhZ3MgPSAwOworCQkJc3RhdGVfaW5kZXgrKzsKKwkJfQogCX0KIAogCXJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMgPSBzdGF0ZV9pbmRleDsKQEAgLTI1MzMsNyArMjUzMyw3IEBACiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0RW5naW5lQ2xvY2spOwogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Ci0JcmV0dXJuIGFyZ3MudWxSZXR1cm5FbmdpbmVDbG9jazsKKwlyZXR1cm4gbGUzMl90b19jcHUoYXJncy51bFJldHVybkVuZ2luZUNsb2NrKTsKIH0KIAogdWludDMyX3QgcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKQEAgLTI1NDIsNyArMjU0Miw3IEBACiAJaW50IGluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgR2V0TWVtb3J5Q2xvY2spOwogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Ci0JcmV0dXJuIGFyZ3MudWxSZXR1cm5NZW1vcnlDbG9jazsKKwlyZXR1cm4gbGUzMl90b19jcHUoYXJncy51bFJldHVybk1lbW9yeUNsb2NrKTsKIH0KIAogdm9pZCByYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtMjU1MSw3ICsyNTUxLDcgQEAKIAlTRVRfRU5HSU5FX0NMT0NLX1BTX0FMTE9DQVRJT04gYXJnczsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBTZXRFbmdpbmVDbG9jayk7CiAKLQlhcmdzLnVsVGFyZ2V0RW5naW5lQ2xvY2sgPSBlbmdfY2xvY2s7CS8qIDEwIGtoeiAqLworCWFyZ3MudWxUYXJnZXRFbmdpbmVDbG9jayA9IGNwdV90b19sZTMyKGVuZ19jbG9jayk7CS8qIDEwIGtoeiAqLwogCiAJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CkBAIC0yNTY1LDcgKzI1NjUsNyBAQAogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCiAJCXJldHVybjsKIAotCWFyZ3MudWxUYXJnZXRNZW1vcnlDbG9jayA9IG1lbV9jbG9jazsJLyogMTAga2h6ICovCisJYXJncy51bFRhcmdldE1lbW9yeUNsb2NrID0gY3B1X3RvX2xlMzIobWVtX2Nsb2NrKTsJLyogMTAga2h6ICovCiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KQEAgLTI2MjMsNyArMjYyMyw3IEBACiAJYmlvc18yX3NjcmF0Y2ggJj0gfkFUT01fUzJfVlJJX0JSSUdIVF9FTkFCTEU7CiAKIAkvKiB0ZWxsIHRoZSBiaW9zIG5vdCB0byBoYW5kbGUgbW9kZSBzd2l0Y2hpbmcgKi8KLQliaW9zXzZfc2NyYXRjaCB8PSAoQVRPTV9TNl9BQ0NfQkxPQ0tfRElTUExBWV9TV0lUQ0ggfCBBVE9NX1M2X0FDQ19NT0RFKTsKKwliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19CTE9DS19ESVNQTEFZX1NXSVRDSDsKIAogCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKSB7CiAJCVdSRUczMihSNjAwX0JJT1NfMl9TQ1JBVENILCBiaW9zXzJfc2NyYXRjaCk7CkBAIC0yNjc0LDEwICsyNjc0LDEzIEBACiAJZWxzZQogCQliaW9zXzZfc2NyYXRjaCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOwogCi0JaWYgKGxvY2spCisJaWYgKGxvY2spIHsKIAkJYmlvc182X3NjcmF0Y2ggfD0gQVRPTV9TNl9DUklUSUNBTF9TVEFURTsKLQllbHNlCisJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0FDQ19NT0RFOworCX0gZWxzZSB7CiAJCWJpb3NfNl9zY3JhdGNoICY9IH5BVE9NX1M2X0NSSVRJQ0FMX1NUQVRFOworCQliaW9zXzZfc2NyYXRjaCB8PSBBVE9NX1M2X0FDQ19NT0RFOworCX0KIAogCWlmIChyZGV2LT5mYW1pbHkgPj0gQ0hJUF9SNjAwKQogCQlXUkVHMzIoUjYwMF9CSU9TXzZfU0NSQVRDSCwgYmlvc182X3NjcmF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDU5MWZjYWUuLmNmN2M4ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTE1MDQsNiArMTUwNCwxMSBAQAogCQkJICAgKHJkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHg0YTQ4KSkgewogCQkJLyogTWFjIFg4MDAgKi8KIAkJCXJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUgPSBDVF9NQUNfWDgwMDsKKwkJfSBlbHNlIGlmICgocmRldi0+cGRldi0+ZGV2aWNlID09IDB4NDE1MCkgJiYKKwkJCSAgIChyZGV2LT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTAwMikgJiYKKwkJCSAgIChyZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4NDE1MCkpIHsKKwkJCS8qIE1hYyBHNSA5NjAwICovCisJCQlyZGV2LT5tb2RlX2luZm8uY29ubmVjdG9yX3RhYmxlID0gQ1RfTUFDX0c1Xzk2MDA7CiAJCX0gZWxzZQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogI2lmZGVmIENPTkZJR19QUEM2NApAQCAtMjAyMiw2ICsyMDI3LDQ4IEBACiAJCQkJCSAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RVQUxfTElOS19EVklfSSwKIAkJCQkJICAgICZocGQpOwogCQlicmVhazsKKwljYXNlIENUX01BQ19HNV85NjAwOgorCQlEUk1fSU5GTygiQ29ubmVjdG9yIFRhYmxlOiAlZCAobWFjIGc1IDk2MDApXG4iLAorCQkJIHJkZXYtPm1vZGVfaW5mby5jb25uZWN0b3JfdGFibGUpOworCQkvKiBEVkkgLSB0diBkYWMsIGR2byAqLworCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKHJkZXYsIEREQ19EVkksIDAsIDApOworCQlocGQuaHBkID0gUkFERU9OX0hQRF8xOyAvKiA/Pz8gKi8KKwkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCisJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2VudW0oZGV2LAorCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCwKKwkJCQkJCQkJICAwKSwKKwkJCQkJICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQpOworCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfZW51bShkZXYsCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAorCQkJCQkJCQkgIDIpLAorCQkJCQkgIEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCk7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDAsCisJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgfAorCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JULAorCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSwKKwkJCQkJICAgICZocGQpOworCQkvKiBBREMgLSBwcmltYXJ5IGRhYywgaW50ZXJuYWwgdG1kcyAqLworCQlkZGNfaTJjID0gY29tYmlvc19zZXR1cF9pMmNfYnVzKHJkZXYsIEREQ19WR0EsIDAsIDApOworCQlocGQuaHBkID0gUkFERU9OX0hQRF8yOyAvKiA/Pz8gKi8KKwkJcmFkZW9uX2FkZF9sZWdhY3lfZW5jb2RlcihkZXYsCisJCQkJCSAgcmFkZW9uX2dldF9lbmNvZGVyX2VudW0oZGV2LAorCQkJCQkJCQkgIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCwKKwkJCQkJCQkJICAwKSwKKwkJCQkJICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQpOworCQlyYWRlb25fYWRkX2xlZ2FjeV9lbmNvZGVyKGRldiwKKwkJCQkJICByYWRlb25fZ2V0X2VuY29kZXJfZW51bShkZXYsCisJCQkJCQkJCSAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkJCQkgIDEpLAorCQkJCQkgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCk7CisJCXJhZGVvbl9hZGRfbGVnYWN5X2Nvbm5lY3RvcihkZXYsIDEsCisJCQkJCSAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgfAorCQkJCQkgICAgQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JULAorCQkJCQkgICAgRFJNX01PREVfQ09OTkVDVE9SX0RWSUksICZkZGNfaTJjLAorCQkJCQkgICAgQ09OTkVDVE9SX09CSkVDVF9JRF9TSU5HTEVfTElOS19EVklfSSwKKwkJCQkJICAgICZocGQpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fSU5GTygiQ29ubmVjdG9yIHRhYmxlOiAlZCAoaW52YWxpZClcbiIsCiAJCQkgcmRldi0+bW9kZV9pbmZvLmNvbm5lY3Rvcl90YWJsZSk7CkBAIC0yNDQyLDYgKzI0ODksMTcgQEAKIAogCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGVfaW5kZXggPSAtMTsKIAorCS8qIGFsbG9jYXRlIDIgcG93ZXIgc3RhdGVzICovCisJcmRldi0+cG0ucG93ZXJfc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlKSAqIDIsIEdGUF9LRVJORUwpOworCWlmICghcmRldi0+cG0ucG93ZXJfc3RhdGUpIHsKKwkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleCA9IHN0YXRlX2luZGV4OworCQlyZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzID0gMDsKKworCQlyZGV2LT5wbS5jdXJyZW50X3Bvd2VyX3N0YXRlX2luZGV4ID0gcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZV9pbmRleDsKKwkJcmRldi0+cG0uY3VycmVudF9jbG9ja19tb2RlX2luZGV4ID0gMDsKKwkJcmV0dXJuOworCX0KKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19NT0JJTElUWSkgewogCQlvZmZzZXQgPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1BPV0VSUExBWV9JTkZPX1RBQkxFKTsKIAkJaWYgKG9mZnNldCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwppbmRleCAyNjA5MWQ2Li40OTU0ZTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kZXZpY2UuYwpAQCAtODkxLDkgKzg5MSw5IEBACiAJCXBjaV9kaXNhYmxlX2RldmljZShkZXYtPnBkZXYpOwogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldi0+cGRldiwgUENJX0QzaG90KTsKIAl9Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJhZGVvbl9mYmRldl9zZXRfc3VzcGVuZChyZGV2LCAxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTA1LDExICs5MDUsMTEgQEAKIAlpZiAoZGV2LT5zd2l0Y2hfcG93ZXJfc3RhdGUgPT0gRFJNX1NXSVRDSF9QT1dFUl9PRkYpCiAJCXJldHVybiAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldi0+cGRldik7CiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldi0+cGRldikpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gLTE7CiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldi0+cGRldik7CkBAIC05MjAsNyArOTIwLDcgQEAKIAlyYWRlb25fcmVzdG9yZV9iaW9zX3NjcmF0Y2hfcmVncyhyZGV2KTsKIAogCXJhZGVvbl9mYmRldl9zZXRfc3VzcGVuZChyZGV2LCAwKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCS8qIHJlc2V0IGhwZCBzdGF0ZSAqLwogCXJhZGVvbl9ocGRfaW5pdChyZGV2KTsKQEAgLTkzNiw4ICs5MzYsMTEgQEAKIGludCByYWRlb25fZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWludCByOworCWludCByZXNjaGVkOwogCiAJcmFkZW9uX3NhdmVfYmlvc19zY3JhdGNoX3JlZ3MocmRldik7CisJLyogYmxvY2sgVFRNICovCisJcmVzY2hlZCA9IHR0bV9ib19sb2NrX2RlbGF5ZWRfd29ya3F1ZXVlKCZyZGV2LT5tbWFuLmJkZXYpOwogCXJhZGVvbl9zdXNwZW5kKHJkZXYpOwogCiAJciA9IHJhZGVvbl9hc2ljX3Jlc2V0KHJkZXYpOwpAQCAtOTQ2LDYgKzk0OSw3IEBACiAJCXJhZGVvbl9yZXN1bWUocmRldik7CiAJCXJhZGVvbl9yZXN0b3JlX2Jpb3Nfc2NyYXRjaF9yZWdzKHJkZXYpOwogCQlkcm1faGVscGVyX3Jlc3VtZV9mb3JjZV9tb2RlKHJkZXYtPmRkZXYpOworCQl0dG1fYm9fdW5sb2NrX2RlbGF5ZWRfd29ya3F1ZXVlKCZyZGV2LT5tbWFuLmJkZXYsIHJlc2NoZWQpOwogCQlyZXR1cm4gMDsKIAl9CiAJLyogYmFkIG5ld3MsIGhvdyB0byB0ZWxsIGl0IHRvIHVzZXJzcGFjZSA/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKaW5kZXggZDI2ZGFiZi4uM2U3ZTdmOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKQEAgLTc4MCw2ICs3ODAsMTI1IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyogYXZpdm8gKi8KK3N0YXRpYyB2b2lkIGF2aXZvX2dldF9mYl9kaXYoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCSAgICAgdTMyIHRhcmdldF9jbG9jaywKKwkJCSAgICAgdTMyIHBvc3RfZGl2LAorCQkJICAgICB1MzIgcmVmX2RpdiwKKwkJCSAgICAgdTMyICpmYl9kaXYsCisJCQkgICAgIHUzMiAqZnJhY19mYl9kaXYpCit7CisJdTMyIHRtcCA9IHBvc3RfZGl2ICogcmVmX2RpdjsKKworCXRtcCAqPSB0YXJnZXRfY2xvY2s7CisJKmZiX2RpdiA9IHRtcCAvIHBsbC0+cmVmZXJlbmNlX2ZyZXE7CisJKmZyYWNfZmJfZGl2ID0gdG1wICUgcGxsLT5yZWZlcmVuY2VfZnJlcTsKKworICAgICAgICBpZiAoKmZiX2RpdiA+IHBsbC0+bWF4X2ZlZWRiYWNrX2RpdikKKwkJKmZiX2RpdiA9IHBsbC0+bWF4X2ZlZWRiYWNrX2RpdjsKKyAgICAgICAgZWxzZSBpZiAoKmZiX2RpdiA8IHBsbC0+bWluX2ZlZWRiYWNrX2RpdikKKyAgICAgICAgICAgICAgICAqZmJfZGl2ID0gcGxsLT5taW5fZmVlZGJhY2tfZGl2OworfQorCitzdGF0aWMgdTMyIGF2aXZvX2dldF9wb3N0X2RpdihzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJICAgICAgdTMyIHRhcmdldF9jbG9jaykKK3sKKwl1MzIgdmNvLCBwb3N0X2RpdiwgdG1wOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9QT1NUX0RJVikKKwkJcmV0dXJuIHBsbC0+cG9zdF9kaXY7CisKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQKSB7CisJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9JU19MQ0QpCisJCQl2Y28gPSBwbGwtPmxjZF9wbGxfb3V0X21pbjsKKwkJZWxzZQorCQkJdmNvID0gcGxsLT5wbGxfb3V0X21pbjsKKwl9IGVsc2UgeworCQlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfSVNfTENEKQorCQkJdmNvID0gcGxsLT5sY2RfcGxsX291dF9tYXg7CisJCWVsc2UKKwkJCXZjbyA9IHBsbC0+cGxsX291dF9tYXg7CisJfQorCisJcG9zdF9kaXYgPSB2Y28gLyB0YXJnZXRfY2xvY2s7CisJdG1wID0gdmNvICUgdGFyZ2V0X2Nsb2NrOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1BSRUZFUl9NSU5NX09WRVJfTUFYUCkgeworCQlpZiAodG1wKQorCQkJcG9zdF9kaXYrKzsKKwl9IGVsc2UgeworCQlpZiAoIXRtcCkKKwkJCXBvc3RfZGl2LS07CisJfQorCisJaWYgKHBvc3RfZGl2ID4gcGxsLT5tYXhfcG9zdF9kaXYpCisJCXBvc3RfZGl2ID0gcGxsLT5tYXhfcG9zdF9kaXY7CisJZWxzZSBpZiAocG9zdF9kaXYgPCBwbGwtPm1pbl9wb3N0X2RpdikKKwkJcG9zdF9kaXYgPSBwbGwtPm1pbl9wb3N0X2RpdjsKKworCXJldHVybiBwb3N0X2RpdjsKK30KKworI2RlZmluZSBNQVhfVE9MRVJBTkNFIDEwCisKK3ZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkgICAgICB1MzIgZnJlcSwKKwkJCSAgICAgIHUzMiAqZG90X2Nsb2NrX3AsCisJCQkgICAgICB1MzIgKmZiX2Rpdl9wLAorCQkJICAgICAgdTMyICpmcmFjX2ZiX2Rpdl9wLAorCQkJICAgICAgdTMyICpyZWZfZGl2X3AsCisJCQkgICAgICB1MzIgKnBvc3RfZGl2X3ApCit7CisJdTMyIHRhcmdldF9jbG9jayA9IGZyZXEgLyAxMDsKKwl1MzIgcG9zdF9kaXYgPSBhdml2b19nZXRfcG9zdF9kaXYocGxsLCB0YXJnZXRfY2xvY2spOworCXUzMiByZWZfZGl2ID0gcGxsLT5taW5fcmVmX2RpdjsKKwl1MzIgZmJfZGl2ID0gMCwgZnJhY19mYl9kaXYgPSAwLCB0bXA7CisKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1JFRl9ESVYpCisJCXJlZl9kaXYgPSBwbGwtPnJlZmVyZW5jZV9kaXY7CisKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX0ZSQUNfRkJfRElWKSB7CisJCWF2aXZvX2dldF9mYl9kaXYocGxsLCB0YXJnZXRfY2xvY2ssIHBvc3RfZGl2LCByZWZfZGl2LCAmZmJfZGl2LCAmZnJhY19mYl9kaXYpOworCQlmcmFjX2ZiX2RpdiA9ICgxMDAgKiBmcmFjX2ZiX2RpdikgLyBwbGwtPnJlZmVyZW5jZV9mcmVxOworCQlpZiAoZnJhY19mYl9kaXYgPj0gNSkgeworCQkJZnJhY19mYl9kaXYgLT0gNTsKKwkJCWZyYWNfZmJfZGl2ID0gZnJhY19mYl9kaXYgLyAxMDsKKwkJCWZyYWNfZmJfZGl2Kys7CisJCX0KKwkJaWYgKGZyYWNfZmJfZGl2ID49IDEwKSB7CisJCQlmYl9kaXYrKzsKKwkJCWZyYWNfZmJfZGl2ID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCXdoaWxlIChyZWZfZGl2IDw9IHBsbC0+bWF4X3JlZl9kaXYpIHsKKwkJCWF2aXZvX2dldF9mYl9kaXYocGxsLCB0YXJnZXRfY2xvY2ssIHBvc3RfZGl2LCByZWZfZGl2LAorCQkJCQkgJmZiX2RpdiwgJmZyYWNfZmJfZGl2KTsKKwkJCWlmIChmcmFjX2ZiX2RpdiA+PSAocGxsLT5yZWZlcmVuY2VfZnJlcSAvIDIpKQorCQkJCWZiX2RpdisrOworCQkJZnJhY19mYl9kaXYgPSAwOworCQkJdG1wID0gKHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiBmYl9kaXYpIC8gKHBvc3RfZGl2ICogcmVmX2Rpdik7CisJCQl0bXAgPSAodG1wICogMTAwMDApIC8gdGFyZ2V0X2Nsb2NrOworCisJCQlpZiAodG1wID4gKDEwMDAwICsgTUFYX1RPTEVSQU5DRSkpCisJCQkJcmVmX2RpdisrOworCQkJZWxzZSBpZiAodG1wID49ICgxMDAwMCAtIE1BWF9UT0xFUkFOQ0UpKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCXJlZl9kaXYrKzsKKwkJfQorCX0KKworCSpkb3RfY2xvY2tfcCA9ICgocGxsLT5yZWZlcmVuY2VfZnJlcSAqIGZiX2RpdiAqIDEwKSArIChwbGwtPnJlZmVyZW5jZV9mcmVxICogZnJhY19mYl9kaXYpKSAvCisJCShyZWZfZGl2ICogcG9zdF9kaXYgKiAxMCk7CisJKmZiX2Rpdl9wID0gZmJfZGl2OworCSpmcmFjX2ZiX2Rpdl9wID0gZnJhY19mYl9kaXY7CisJKnJlZl9kaXZfcCA9IHJlZl9kaXY7CisJKnBvc3RfZGl2X3AgPSBwb3N0X2RpdjsKKwlEUk1fREVCVUdfS01TKCIlZCwgcGxsIGRpdmlkZXJzIC0gZmI6ICVkLiVkIHJlZjogJWQsIHBvc3QgJWRcbiIsCisJCSAgICAgICpkb3RfY2xvY2tfcCwgZmJfZGl2LCBmcmFjX2ZiX2RpdiwgcmVmX2RpdiwgcG9zdF9kaXYpOworfQorCisvKiBwcmUtYXZpdm8gKi8KIHN0YXRpYyBpbmxpbmUgdWludDMyX3QgcmFkZW9uX2Rpdih1aW50NjRfdCBuLCB1aW50MzJfdCBkKQogewogCXVpbnQ2NF90IG1vZDsKQEAgLTc5MCwxMyArOTA5LDEzIEBACiAJcmV0dXJuIG47CiB9CiAKLXZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQl1aW50NjRfdCBmcmVxLAotCQkJdWludDMyX3QgKmRvdF9jbG9ja19wLAotCQkJdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCi0JCQl1aW50MzJfdCAqcmVmX2Rpdl9wLAotCQkJdWludDMyX3QgKnBvc3RfZGl2X3ApCit2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9sZWdhY3koc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCSAgICAgICB1aW50NjRfdCBmcmVxLAorCQkJICAgICAgIHVpbnQzMl90ICpkb3RfY2xvY2tfcCwKKwkJCSAgICAgICB1aW50MzJfdCAqZmJfZGl2X3AsCisJCQkgICAgICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCisJCQkgICAgICAgdWludDMyX3QgKnJlZl9kaXZfcCwKKwkJCSAgICAgICB1aW50MzJfdCAqcG9zdF9kaXZfcCkKIHsKIAl1aW50MzJfdCBtaW5fcmVmX2RpdiA9IHBsbC0+bWluX3JlZl9kaXY7CiAJdWludDMyX3QgbWF4X3JlZl9kaXYgPSBwbGwtPm1heF9yZWZfZGl2OwpAQCAtODI2LDYgKzk0NSw5IEBACiAJCXBsbF9vdXRfbWF4ID0gcGxsLT5wbGxfb3V0X21heDsKIAl9CiAKKwlpZiAocGxsX291dF9taW4gPiA2NDgwMCkKKwkJcGxsX291dF9taW4gPSA2NDgwMDsKKwogCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUkVGX0RJVikKIAkJbWluX3JlZl9kaXYgPSBtYXhfcmVmX2RpdiA9IHBsbC0+cmVmZXJlbmNlX2RpdjsKIAllbHNlIHsKQEAgLTk2NSw2ICsxMDg3LDEwIEBACiAJKmZyYWNfZmJfZGl2X3AgPSBiZXN0X2ZyYWNfZmVlZGJhY2tfZGl2OwogCSpyZWZfZGl2X3AgPSBiZXN0X3JlZl9kaXY7CiAJKnBvc3RfZGl2X3AgPSBiZXN0X3Bvc3RfZGl2OworCURSTV9ERUJVR19LTVMoIiVkICVkLCBwbGwgZGl2aWRlcnMgLSBmYjogJWQuJWQgcmVmOiAlZCwgcG9zdCAlZFxuIiwKKwkJICAgICAgZnJlcSwgYmVzdF9mcmVxIC8gMTAwMCwgYmVzdF9mZWVkYmFja19kaXYsIGJlc3RfZnJhY19mZWVkYmFja19kaXYsCisJCSAgICAgIGJlc3RfcmVmX2RpdiwgYmVzdF9wb3N0X2Rpdik7CisKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX3VzZXJfZnJhbWVidWZmZXJfZGVzdHJveShzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpmYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggZDU2ODBhMC4uMjc1YjI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqIC0gMi41LjAgLSBhZGQgZ2V0IGFjY2VsIDIgdG8gd29yayBhcm91bmQgZGR4IGJyZWFrYWdlIGZvciBldmVyZ3JlZW4KICAqIC0gMi42LjAgLSBhZGQgdGlsaW5nIGNvbmZpZyBxdWVyeSAocjZ4eCspLCBhZGQgaW5pdGlhbCBIaVogc3VwcG9ydCAocjMwMC0+cjUwMCkKICAqICAgMi43LjAgLSBmaXh1cHMgZm9yIHI2MDAgMkQgdGlsaW5nIHN1cHBvcnQuIChubyBleHRlcm5hbCBBQkkgY2hhbmdlKSwgYWRkIGVnIGR5biBncHIgcmVncwotICogICAyLjguMCAtIHBhZ2VmbGlwIHN1cHBvcnQsIHI1MDAgVVNfRk9STUFUIHJlZ3MuIHI1MDAgQVJHQjIxMDEwMTAgY29sb3JidWYsIHIzMDAtPnI1MDAgQ01BU0sKKyAqICAgMi44LjAgLSBwYWdlZmxpcCBzdXBwb3J0LCByNTAwIFVTX0ZPUk1BVCByZWdzLiByNTAwIEFSR0IyMTAxMDEwIGNvbG9yYnVmLCByMzAwLT5yNTAwIENNQVNLLCBjbG9jayBjcnlzdGFsIHF1ZXJ5CiAgKi8KICNkZWZpbmUgS01TX0RSSVZFUl9NQUpPUgkyCiAjZGVmaW5lIEtNU19EUklWRVJfTUlOT1IJOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCA0NDhlYmE4Li41Y2JhNDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMTUyNCw2ICsxNTI0LDcgQEAKICNkZWZpbmUgUjYwMF9DUF9SQl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwNAogIyAgICAgICBkZWZpbmUgUjYwMF9SQl9CVUZTWih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQogIyAgICAgICBkZWZpbmUgUjYwMF9SQl9CTEtTWih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIwlkZWZpbmUgUjYwMF9CVUZfU1dBUF8zMkJJVAkJICAgICAgICAgICAgICAgKDIgPDwgMTYpCiAjICAgICAgIGRlZmluZSBSNjAwX1JCX05PX1VQREFURSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNykKICMgICAgICAgZGVmaW5lIFI2MDBfUkJfUlBUUl9XUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMxKQogI2RlZmluZSBSNjAwX0NQX1JCX1JQVFJfV1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwppbmRleCA4ZmQxODQyLi5iNDI3NDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKQEAgLTY0MSw3ICs2NDEsNyBAQAogCXN3aXRjaCAoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUk6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUI6IC8qIEhETUktQiBpcyBiYXNpY2FsbHkgREwtRFZJOyBhbmFsb2cgd29ya3MgZmluZSAqLwotCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKSB7CisJCWlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgJiYgcmFkZW9uX2F1ZGlvKSB7CiAJCQkvKiBmaXggbWUgKi8KIAkJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCiAJCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RWSTsKQEAgLTY1NSw3ICs2NTUsNyBAQAogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0RWSUQ6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE6CiAJZGVmYXVsdDoKLQkJaWYgKGRybV9kZXRlY3RfbW9uaXRvcl9hdWRpbyhyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkgeworCQlpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpICYmIHJhZGVvbl9hdWRpbykgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC02NzMsNyArNjczLDcgQEAKIAkJaWYgKChkaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCkgfHwKIAkJICAgIChkaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9lRFApKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0RQOwotCQllbHNlIGlmIChkcm1fZGV0ZWN0X21vbml0b3JfYXVkaW8ocmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkpIHsKKwkJZWxzZSBpZiAoZHJtX2RldGVjdF9tb25pdG9yX2F1ZGlvKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpICYmIHJhZGVvbl9hdWRpbykgewogCQkJLyogZml4IG1lICovCiAJCQlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQogCQkJCXJldHVybiBBVE9NX0VOQ09ERVJfTU9ERV9EVkk7CkBAIC05MTAsNyArOTEwLDcgQEAKIAogCWFyZ3MudjEudWNBY3Rpb24gPSBhY3Rpb247CiAJaWYgKGFjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklUKSB7Ci0JCWFyZ3MudjEudXNJbml0SW5mbyA9IGNvbm5lY3Rvcl9vYmplY3RfaWQ7CisJCWFyZ3MudjEudXNJbml0SW5mbyA9IGNwdV90b19sZTE2KGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCX0gZWxzZSBpZiAoYWN0aW9uID09IEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQX1ZTRU1QSCkgewogCQlhcmdzLnYxLmFzTW9kZS51Y0xhbmVTZWwgPSBsYW5lX251bTsKIAkJYXJncy52MS5hc01vZGUudWNMYW5lU2V0ID0gbGFuZV9zZXQ7CkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCWlmICghQVNJQ19JU19EQ0U0KHJkZXYpKQogCQlyZXR1cm47CiAKLQlpZiAoKGFjdGlvbiAhPSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PTikgfHwKKwlpZiAoKGFjdGlvbiAhPSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PTikgJiYKIAkgICAgKGFjdGlvbiAhPSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PRkYpKQogCQlyZXR1cm47CiAKQEAgLTExNDAsNyArMTE0MCw3IEBACiAJCWNhc2UgMzoKIAkJCWFyZ3MudjMuc0V4dEVuY29kZXIudWNBY3Rpb24gPSBhY3Rpb247CiAJCQlpZiAoYWN0aW9uID09IEVYVEVSTkFMX0VOQ09ERVJfQUNUSU9OX1YzX0VOQ09ERVJfSU5JVCkKLQkJCQlhcmdzLnYzLnNFeHRFbmNvZGVyLnVzQ29ubmVjdG9ySWQgPSBjb25uZWN0b3Jfb2JqZWN0X2lkOworCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudXNDb25uZWN0b3JJZCA9IGNwdV90b19sZTE2KGNvbm5lY3Rvcl9vYmplY3RfaWQpOwogCQkJZWxzZQogCQkJCWFyZ3MudjMuc0V4dEVuY29kZXIudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOwogCQkJYXJncy52My5zRXh0RW5jb2Rlci51Y0VuY29kZXJNb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKQEAgLTE1NzAsMTEgKzE1NzAsMjEgQEAKIAl9CiAKIAkvKiBzZXQgc2NhbGVyIGNsZWFycyB0aGlzIG9uIHNvbWUgY2hpcHMgKi8KLQkvKiBYWFggY2hlY2sgRENFNCAqLwotCWlmICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkgewotCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCi0JCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAotCQkJICAgICAgIEFWSVZPX0QxTU9ERV9JTlRFUkxFQVZFX0VOKTsKKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJgorCSAgICAoIShyYWRlb25fZW5jb2Rlci0+YWN0aXZlX2RldmljZSAmIChBVE9NX0RFVklDRV9UVl9TVVBQT1JUKSkpKSB7CisJCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQorCQkJCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCQkJICAgICAgIEVWRVJHUkVFTl9JTlRFUkxFQVZFX0VOKTsKKwkJCWVsc2UKKwkJCQlXUkVHMzIoRVZFUkdSRUVOX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQorCQkJCVdSRUczMihBVklWT19EMU1PREVfREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCQkJICAgICAgIEFWSVZPX0QxTU9ERV9JTlRFUkxFQVZFX0VOKTsKKwkJCWVsc2UKKwkJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKwkJfQogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKaW5kZXggNjYzMjRiNS4uY2M0NGJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCkBAIC0xMTMsMTEgKzExMywxNCBAQAogCXUzMiB0aWxpbmdfZmxhZ3MgPSAwOwogCWludCByZXQ7CiAJaW50IGFsaWduZWRfc2l6ZSwgc2l6ZTsKKwlpbnQgaGVpZ2h0ID0gbW9kZV9jbWQtPmhlaWdodDsKIAogCS8qIG5lZWQgdG8gYWxpZ24gcGl0Y2ggd2l0aCBjcnRjIGxpbWl0cyAqLwogCW1vZGVfY21kLT5waXRjaCA9IHJhZGVvbl9hbGlnbl9waXRjaChyZGV2LCBtb2RlX2NtZC0+d2lkdGgsIG1vZGVfY21kLT5icHAsIGZiX3RpbGVkKSAqICgobW9kZV9jbWQtPmJwcCArIDEpIC8gOCk7CiAKLQlzaXplID0gbW9kZV9jbWQtPnBpdGNoICogbW9kZV9jbWQtPmhlaWdodDsKKwlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKKwkJaGVpZ2h0ID0gQUxJR04obW9kZV9jbWQtPmhlaWdodCwgOCk7CisJc2l6ZSA9IG1vZGVfY21kLT5waXRjaCAqIGhlaWdodDsKIAlhbGlnbmVkX3NpemUgPSBBTElHTihzaXplLCBQQUdFX1NJWkUpOwogCXJldCA9IHJhZGVvbl9nZW1fb2JqZWN0X2NyZWF0ZShyZGV2LCBhbGlnbmVkX3NpemUsIDAsCiAJCQkJICAgICAgIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnFfa21zLmMKaW5kZXggYTI4OTY0Ni4uOWVjODMwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxX2ttcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2lycV9rbXMuYwpAQCAtMTEwLDExICsxMTAsMTQgQEAKIAogaW50IHJhZGVvbl9pcnFfa21zX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJaW50IGk7CiAJaW50IHIgPSAwOwogCiAJSU5JVF9XT1JLKCZyZGV2LT5ob3RwbHVnX3dvcmssIHJhZGVvbl9ob3RwbHVnX3dvcmtfZnVuYyk7CiAKIAlzcGluX2xvY2tfaW5pdCgmcmRldi0+aXJxLnN3X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCByZGV2LT5udW1fY3J0YzsgaSsrKQorCQlzcGluX2xvY2tfaW5pdCgmcmRldi0+aXJxLnBmbGlwX2xvY2tbaV0pOwogCXIgPSBkcm1fdmJsYW5rX2luaXQocmRldi0+ZGRldiwgcmRldi0+bnVtX2NydGMpOwogCWlmIChyKSB7CiAJCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCAyOGE1M2U0YS4uODM4N2QzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMKQEAgLTIwMSw2ICsyMDEsMTAgQEAKIAkJfQogCQlyYWRlb25fc2V0X2ZpbHBfcmlnaHRzKGRldiwgJnJkZXYtPmNtYXNrX2ZpbHAsIGZpbHAsICZ2YWx1ZSk7CiAJCWJyZWFrOworCWNhc2UgUkFERU9OX0lORk9fQ0xPQ0tfQ1JZU1RBTF9GUkVROgorCQkvKiByZXR1cm4gY2xvY2sgdmFsdWUgaW4gS0h6ICovCisJCXZhbHVlID0gcmRldi0+Y2xvY2suc3BsbC5yZWZlcmVuY2VfZnJlcSAqIDEwOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fREVCVUdfS01TKCJJbnZhbGlkIHJlcXVlc3QgJWRcbiIsIGluZm8tPnJlcXVlc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTI0Myw2ICsyNDcsOCBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpZiAocmRldi0+aHlwZXJ6X2ZpbHAgPT0gZmlsZV9wcml2KQogCQlyZGV2LT5oeXBlcnpfZmlscCA9IE5VTEw7CisJaWYgKHJkZXYtPmNtYXNrX2ZpbHAgPT0gZmlsZV9wcml2KQorCQlyZGV2LT5jbWFza19maWxwID0gTlVMTDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCmluZGV4IGFjZTJlNjMuLmNmMDYzOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwpAQCAtNzc4LDkgKzc3OCw5IEBACiAJRFJNX0RFQlVHX0tNUygiXG4iKTsKIAogCWlmICghdXNlX2Jpb3NfZGl2cykgewotCQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBtb2RlLT5jbG9jaywKLQkJCQkgICAmZnJlcSwgJmZlZWRiYWNrX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJCSAgICZyZWZlcmVuY2VfZGl2LCAmcG9zdF9kaXZpZGVyKTsKKwkJcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShwbGwsIG1vZGUtPmNsb2NrLAorCQkJCQkgICZmcmVxLCAmZmVlZGJhY2tfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkJCSAgJnJlZmVyZW5jZV9kaXYsICZwb3N0X2RpdmlkZXIpOwogCiAJCWZvciAocG9zdF9kaXYgPSAmcG9zdF9kaXZzWzBdOyBwb3N0X2Rpdi0+ZGl2aWRlcjsgKytwb3N0X2RpdikgewogCQkJaWYgKHBvc3RfZGl2LT5kaXZpZGVyID09IHBvc3RfZGl2aWRlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCAxMmJkZWFiLi5hNjcwY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC0xNDksNiArMTQ5LDcgQEAKICNkZWZpbmUgUkFERU9OX1BMTF9QUkVGRVJfQ0xPU0VTVF9MT1dFUiAoMSA8PCAxMSkKICNkZWZpbmUgUkFERU9OX1BMTF9VU0VfUE9TVF9ESVYgICAgICAgICAoMSA8PCAxMikKICNkZWZpbmUgUkFERU9OX1BMTF9JU19MQ0QgICAgICAgICAgICAgICAoMSA8PCAxMykKKyNkZWZpbmUgUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFAgKDEgPDwgMTQpCiAKIHN0cnVjdCByYWRlb25fcGxsIHsKIAkvKiByZWZlcmVuY2UgZnJlcXVlbmN5ICovCkBAIC0yMDgsNiArMjA5LDcgQEAKIAlDVF9FTUFDLAogCUNUX1JONTBfUE9XRVIsCiAJQ1RfTUFDX1g4MDAsCisJQ1RfTUFDX0c1Xzk2MDAsCiB9OwogCiBlbnVtIHJhZGVvbl9kdm9fY2hpcCB7CkBAIC01MTAsMTMgKzUxMiwyMSBAQAogCQkJCQkgICAgIHN0cnVjdCByYWRlb25fYXRvbV9zcyAqc3MsCiAJCQkJCSAgICAgaW50IGlkLCB1MzIgY2xvY2spOwogCi1leHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGwoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKLQkJCSAgICAgICB1aW50NjRfdCBmcmVxLAotCQkJICAgICAgIHVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCSAgICAgICB1aW50MzJfdCAqZmJfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCi0JCQkgICAgICAgdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCSAgICAgICB1aW50MzJfdCAqcG9zdF9kaXZfcCk7CitleHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGxfbGVnYWN5KHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQkJICAgICAgdWludDY0X3QgZnJlcSwKKwkJCQkgICAgICB1aW50MzJfdCAqZG90X2Nsb2NrX3AsCisJCQkJICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpyZWZfZGl2X3AsCisJCQkJICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOworCitleHRlcm4gdm9pZCByYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8oc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCQkgICAgIHUzMiBmcmVxLAorCQkJCSAgICAgdTMyICpkb3RfY2xvY2tfcCwKKwkJCQkgICAgIHUzMiAqZmJfZGl2X3AsCisJCQkJICAgICB1MzIgKmZyYWNfZmJfZGl2X3AsCisJCQkJICAgICB1MzIgKnJlZl9kaXZfcCwKKwkJCQkgICAgIHUzMiAqcG9zdF9kaXZfcCk7CiAKIGV4dGVybiB2b2lkIHJhZGVvbl9zZXR1cF9lbmNvZGVyX2Nsb25lcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKaW5kZXggM2IxYjJiZi4uMmFlZDAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCkBAIC00MzAsNyArNDMwLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGRldiA9IHBjaV9nZXRfZHJ2ZGF0YSh0b19wY2lfZGV2KGRldikpOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGRldi0+ZGV2X3ByaXZhdGU7Ci0JdTMyIHRlbXA7CisJaW50IHRlbXA7CiAKIAlzd2l0Y2ggKHJkZXYtPnBtLmludF90aGVybWFsX3R5cGUpIHsKIAljYXNlIFRIRVJNQUxfVFlQRV9SVjZYWDoKQEAgLTY0Niw2ICs2NDYsOSBAQAogI2VuZGlmCiAJfQogCisJaWYgKHJkZXYtPnBtLnBvd2VyX3N0YXRlKQorCQlrZnJlZShyZGV2LT5wbS5wb3dlcl9zdGF0ZSk7CisKIAlyYWRlb25faHdtb25fZmluaShyZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAppbmRleCAzY2Q0ZGFjLi5lYzkzYTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaApAQCAtMzc1LDYgKzM3NSw4IEBACiAjZGVmaW5lIFJBREVPTl9DT05GSUdfQVBFUl9TSVpFICAgICAgICAgICAgIDB4MDEwOAogI2RlZmluZSBSQURFT05fQ09ORklHX0JPTkRTICAgICAgICAgICAgICAgICAweDAwZTgKICNkZWZpbmUgUkFERU9OX0NPTkZJR19DTlRMICAgICAgICAgICAgICAgICAgMHgwMGUwCisjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX1ZHQV9SQU1fRU4gICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX1ZHQV9JT19ESVMgICAgICAgICgxIDw8IDkpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX0FUSV9SRVZfQTExICAgICAgICgwICAgPDwgMTYpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX0FUSV9SRVZfQTEyICAgICAgICgxICAgPDwgMTYpCiAjICAgICAgIGRlZmluZSBSQURFT05fQ0ZHX0FUSV9SRVZfQTEzICAgICAgICgyICAgPDwgMTYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90dG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCmluZGV4IDEyNzJlNGIuLmU1YjJjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jCkBAIC03ODcsOSArNzg3LDkgQEAKIAkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLnNob3cgPSAmcmFkZW9uX21tX2R1bXBfdGFibGU7CiAJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kcml2ZXJfZmVhdHVyZXMgPSAwOwogCQlpZiAoaSA9PSAwKQotCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSAmcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVlJBTV0ucHJpdjsKKwkJCXJhZGVvbl9tZW1fdHlwZXNfbGlzdFtpXS5kYXRhID0gcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVlJBTV0ucHJpdjsKIAkJZWxzZQotCQkJcmFkZW9uX21lbV90eXBlc19saXN0W2ldLmRhdGEgPSAmcmRldi0+bW1hbi5iZGV2Lm1hbltUVE1fUExfVFRdLnByaXY7CisJCQlyYWRlb25fbWVtX3R5cGVzX2xpc3RbaV0uZGF0YSA9IHJkZXYtPm1tYW4uYmRldi5tYW5bVFRNX1BMX1RUXS5wcml2OwogCiAJfQogCS8qIEFkZCB0dG0gcGFnZSBwb29sIHRvIGRlYnVnZnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjMwMAppbmRleCBiNTA2ZWMxLi5lOGExNzg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3IzMDAKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yMzAwCkBAIC02ODMsOSArNjgzLDcgQEAKIDB4NERGNCBVU19BTFVfQ09OU1RfR18zMQogMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCiAweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKLTB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMwogMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMwotMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCiAweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgogMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKIDB4NEUxOCBSQjNEX1JPUENOVExfUjMKQEAgLTcwNiwxMyArNzA0LDExIEBACiAweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCiAweDRFNzggUkIzRF9DTUFTS19EV09SRAogMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAotMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAotMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICi0weDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCiAweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECiAweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECiAweDRGMDQgWkJfWlNURU5DSUxDTlRMCiAweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKIDB4NEYxNCBaQl9aVE9QCiAweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKIDB4NEY1OCBaQl9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I0MjAKaW5kZXggOGMxMjE0Yy4uNzIyMDc0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNDIwCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjQyMApAQCAtMTMwLDcgKzEzMCw2IEBACiAweDQwMUMgR0JfU0VMRUNUCiAweDQwMjAgR0JfQUFfQ09ORklHCiAweDQwMjQgR0JfRklGT19TSVpFCi0weDQwMjggR0JfWl9QRVFfQ09ORklHCiAweDQxMDAgVFhfSU5WQUxUQUdTCiAweDQyMDAgR0FfUE9JTlRfUzAKIDB4NDIwNCBHQV9QT0lOVF9UMApAQCAtNzUwLDkgKzc0OSw3IEBACiAweDRERjQgVVNfQUxVX0NPTlNUX0dfMzEKIDB4NERGOCBVU19BTFVfQ09OU1RfQl8zMQogMHg0REZDIFVTX0FMVV9DT05TVF9BXzMxCi0weDRFMDQgUkIzRF9CTEVORENOVExfUjMKIDB4NEUwOCBSQjNEX0FCTEVORENOVExfUjMKLTB4NEUwQyBSQjNEX0NPTE9SX0NIQU5ORUxfTUFTSwogMHg0RTEwIFJCM0RfQ09OU1RBTlRfQ09MT1IKIDB4NEUxNCBSQjNEX0NPTE9SX0NMRUFSX1ZBTFVFCiAweDRFMTggUkIzRF9ST1BDTlRMX1IzCkBAIC03NzMsMTMgKzc3MCwxMSBAQAogMHg0RTc0IFJCM0RfQ01BU0tfV1JJTkRFWAogMHg0RTc4IFJCM0RfQ01BU0tfRFdPUkQKIDB4NEU3QyBSQjNEX0NNQVNLX1JESU5ERVgKLTB4NEU4MCBSQjNEX0FBUkVTT0xWRV9PRkZTRVQKLTB4NEU4NCBSQjNEX0FBUkVTT0xWRV9QSVRDSAotMHg0RTg4IFJCM0RfQUFSRVNPTFZFX0NUTAogMHg0RUEwIFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfTFRFX1RIUkVTSE9MRAogMHg0RUE0IFJCM0RfRElTQ0FSRF9TUkNfUElYRUxfR1RFX1RIUkVTSE9MRAogMHg0RjA0IFpCX1pTVEVOQ0lMQ05UTAogMHg0RjA4IFpCX1NURU5DSUxSRUZNQVNLCiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCisweDRGMjggWkJfREVQVEhDTEVBUlZBTFVFCiAweDRGNTggWkJfWlBBU1NfREFUQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnM2MDAKaW5kZXggMDgyOGQ4MC4uZDlmNjI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yczYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3JzNjAwCkBAIC03NDksOSArNzQ5LDcgQEAKIDB4NERGNCBVU19BTFVfQ09OU1RfR18zMQogMHg0REY4IFVTX0FMVV9DT05TVF9CXzMxCiAweDRERkMgVVNfQUxVX0NPTlNUX0FfMzEKLTB4NEUwNCBSQjNEX0JMRU5EQ05UTF9SMwogMHg0RTA4IFJCM0RfQUJMRU5EQ05UTF9SMwotMHg0RTBDIFJCM0RfQ09MT1JfQ0hBTk5FTF9NQVNLCiAweDRFMTAgUkIzRF9DT05TVEFOVF9DT0xPUgogMHg0RTE0IFJCM0RfQ09MT1JfQ0xFQVJfVkFMVUUKIDB4NEUxOCBSQjNEX1JPUENOVExfUjMKQEAgLTc3MiwxMyArNzcwLDExIEBACiAweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCiAweDRFNzggUkIzRF9DTUFTS19EV09SRAogMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAotMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAotMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICi0weDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCiAweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECiAweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECiAweDRGMDQgWkJfWlNURU5DSUxDTlRMCiAweDRGMDggWkJfU1RFTkNJTFJFRk1BU0sKIDB4NEYxNCBaQl9aVE9QCiAweDRGMTggWkJfWkNBQ0hFX0NUTFNUQVQKKzB4NEYyOCBaQl9ERVBUSENMRUFSVkFMVUUKIDB4NEY1OCBaQl9aUEFTU19EQVRBCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1IGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ydjUxNQppbmRleCBlZjQyMmJiLi45MTFhOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3J2NTE1CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcnY1MTUKQEAgLTE2NCw3ICsxNjQsNiBAQAogMHg0MDFDIEdCX1NFTEVDVAogMHg0MDIwIEdCX0FBX0NPTkZJRwogMHg0MDI0IEdCX0ZJRk9fU0laRQotMHg0MDI4IEdCX1pfUEVRX0NPTkZJRwogMHg0MTAwIFRYX0lOVkFMVEFHUwogMHg0MTE0IFNVX1RFWF9XUkFQX1BTMwogMHg0MTE4IFBTM19FTkFCTEUKQEAgLTQ2MSw5ICs0NjAsNyBAQAogMHg0REY0IFVTX0FMVV9DT05TVF9HXzMxCiAweDRERjggVVNfQUxVX0NPTlNUX0JfMzEKIDB4NERGQyBVU19BTFVfQ09OU1RfQV8zMQotMHg0RTA0IFJCM0RfQkxFTkRDTlRMX1IzCiAweDRFMDggUkIzRF9BQkxFTkRDTlRMX1IzCi0weDRFMEMgUkIzRF9DT0xPUl9DSEFOTkVMX01BU0sKIDB4NEUxMCBSQjNEX0NPTlNUQU5UX0NPTE9SCiAweDRFMTQgUkIzRF9DT0xPUl9DTEVBUl9WQUxVRQogMHg0RTE4IFJCM0RfUk9QQ05UTF9SMwpAQCAtNDg0LDkgKzQ4MSw2IEBACiAweDRFNzQgUkIzRF9DTUFTS19XUklOREVYCiAweDRFNzggUkIzRF9DTUFTS19EV09SRAogMHg0RTdDIFJCM0RfQ01BU0tfUkRJTkRFWAotMHg0RTgwIFJCM0RfQUFSRVNPTFZFX09GRlNFVAotMHg0RTg0IFJCM0RfQUFSRVNPTFZFX1BJVENICi0weDRFODggUkIzRF9BQVJFU09MVkVfQ1RMCiAweDRFQTAgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9MVEVfVEhSRVNIT0xECiAweDRFQTQgUkIzRF9ESVNDQVJEX1NSQ19QSVhFTF9HVEVfVEhSRVNIT0xECiAweDRFRjggUkIzRF9DT05TVEFOVF9DT0xPUl9BUgpAQCAtNDk2LDQgKzQ5MCw1IEBACiAweDRGMTQgWkJfWlRPUAogMHg0RjE4IFpCX1pDQUNIRV9DVExTVEFUCiAweDRGNTggWkJfWlBBU1NfREFUQQorMHg0RjI4IFpCX0RFUFRIQ0xFQVJWQUxVRQogMHg0RkQ0IFpCX1NURU5DSUxSRUZNQVNLX0JGCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKaW5kZXggNTUxMmU0ZS4uYzc2MjgzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwpAQCAtMjAzLDYgKzIwMyw5IEBACiAJcmFkZW9uX2dhcnRfdGFibGVfcmFtX2ZyZWUocmRldik7CiB9CiAKKyNkZWZpbmUgUlM0MDBfUFRFX1dSSVRFQUJMRSAoMSA8PCAyKQorI2RlZmluZSBSUzQwMF9QVEVfUkVBREFCTEUgICgxIDw8IDMpCisKIGludCByczQwMF9nYXJ0X3NldF9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSwgdWludDY0X3QgYWRkcikKIHsKIAl1aW50MzJfdCBlbnRyeTsKQEAgLTIxMyw3ICsyMTYsNyBAQAogCiAJZW50cnkgPSAobG93ZXJfMzJfYml0cyhhZGRyKSAmIFBBR0VfTUFTSykgfAogCQkoKHVwcGVyXzMyX2JpdHMoYWRkcikgJiAweGZmKSA8PCA0KSB8Ci0JCTB4YzsKKwkJUlM0MDBfUFRFX1dSSVRFQUJMRSB8IFJTNDAwX1BURV9SRUFEQUJMRTsKIAllbnRyeSA9IGNwdV90b19sZTMyKGVudHJ5KTsKIAlyZGV2LT5nYXJ0LnRhYmxlLnJhbS5wdHJbaV0gPSBlbnRyeTsKIAlyZXR1cm4gMDsKQEAgLTIyNiw4ICsyMjksOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IHJkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CiAJCS8qIHJlYWQgTUNfU1RBVFVTICovCi0JCXRtcCA9IFJSRUczMigweDAxNTApOwotCQlpZiAodG1wICYgKDEgPDwgMikpIHsKKwkJdG1wID0gUlJFRzMyKFJBREVPTl9NQ19TVEFUVVMpOworCQlpZiAodG1wICYgUkFERU9OX01DX0lETEUpIHsKIAkJCXJldHVybiAwOwogCQl9CiAJCURSTV9VREVMQVkoMSk7CkBAIC0yNDEsNyArMjQ0LDcgQEAKIAlyNDIwX3BpcGVzX2luaXQocmRldik7CiAJaWYgKHJzNDAwX21jX3dhaXRfZm9yX2lkbGUocmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicnM0MDA6IEZhaWxlZCB0byB3YWl0IE1DIGlkbGUgd2hpbGUgIgotCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi4gJTA4eFxuIiwgUlJFRzMyKDB4MTUwKSk7CisJCSAgICAgICAicHJvZ3JhbW1pbmcgcGlwZXMuIEJhZCB0aGluZ3MgbWlnaHQgaGFwcGVuLiAlMDh4XG4iLCBSUkVHMzIoUkFERU9OX01DX1NUQVRVUykpOwogCX0KIH0KIApAQCAtMzAwLDkgKzMwMyw5IEBACiAJCXNlcV9wcmludGYobSwgIk1DQ0ZHX0FHUF9CQVNFXzIgMHglMDh4XG4iLCB0bXApOwogCQl0bXAgPSBSUkVHMzJfTUMoUlM2OTBfTUNDRkdfQUdQX0xPQ0FUSU9OKTsKIAkJc2VxX3ByaW50ZihtLCAiTUNDRkdfQUdQX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKLQkJdG1wID0gUlJFRzMyX01DKDB4MTAwKTsKKwkJdG1wID0gUlJFRzMyX01DKFJTNjkwX01DQ0ZHX0ZCX0xPQ0FUSU9OKTsKIAkJc2VxX3ByaW50ZihtLCAiTUNDRkdfRkJfTE9DQVRJT04gMHglMDh4XG4iLCB0bXApOwotCQl0bXAgPSBSUkVHMzIoMHgxMzQpOworCQl0bXAgPSBSUkVHMzIoUlM2OTBfSERQX0ZCX0xPQ0FUSU9OKTsKIAkJc2VxX3ByaW50ZihtLCAiSERQX0ZCX0xPQ0FUSU9OIDB4JTA4eFxuIiwgdG1wKTsKIAl9IGVsc2UgewogCQl0bXAgPSBSUkVHMzIoUkFERU9OX0FHUF9CQVNFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYwppbmRleCAwMTM3ZDNlLi42NjM4YzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCkBAIC03Nyw5ICs3Nyw5IEBACiAJCXN3aXRjaCAoY3JldikgewogCQljYXNlIDE6CiAJCQl0bXAuZnVsbCA9IGRmaXhlZF9jb25zdCgxMDApOwotCQkJcmRldi0+cG0uaWdwX3NpZGVwb3J0X21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChpbmZvLT5pbmZvLnVsQm9vdFVwTWVtb3J5Q2xvY2spOworCQkJcmRldi0+cG0uaWdwX3NpZGVwb3J0X21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChsZTMyX3RvX2NwdShpbmZvLT5pbmZvLnVsQm9vdFVwTWVtb3J5Q2xvY2spKTsKIAkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfZGl2KHJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLCB0bXApOwotCQkJaWYgKGluZm8tPmluZm8udXNLOE1lbW9yeUNsb2NrKQorCQkJaWYgKGxlMTZfdG9fY3B1KGluZm8tPmluZm8udXNLOE1lbW9yeUNsb2NrKSkKIAkJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChsZTE2X3RvX2NwdShpbmZvLT5pbmZvLnVzSzhNZW1vcnlDbG9jaykpOwogCQkJZWxzZSBpZiAocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKSB7CiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKTsKQEAgLTkxLDE2ICs5MSwxNiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMjoKIAkJCXRtcC5mdWxsID0gZGZpeGVkX2NvbnN0KDEwMCk7Ci0JCQlyZGV2LT5wbS5pZ3Bfc2lkZXBvcnRfbWNsay5mdWxsID0gZGZpeGVkX2NvbnN0KGluZm8tPmluZm9fdjIudWxCb290VXBTaWRlUG9ydENsb2NrKTsKKwkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mb192Mi51bEJvb3RVcFNpZGVQb3J0Q2xvY2spKTsKIAkJCXJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLmZ1bGwgPSBkZml4ZWRfZGl2KHJkZXYtPnBtLmlncF9zaWRlcG9ydF9tY2xrLCB0bXApOwotCQkJaWYgKGluZm8tPmluZm9fdjIudWxCb290VXBVTUFDbG9jaykKLQkJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdChpbmZvLT5pbmZvX3YyLnVsQm9vdFVwVU1BQ2xvY2spOworCQkJaWYgKGxlMzJfdG9fY3B1KGluZm8tPmluZm9fdjIudWxCb290VXBVTUFDbG9jaykpCisJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mb192Mi51bEJvb3RVcFVNQUNsb2NrKSk7CiAJCQllbHNlIGlmIChyZGV2LT5jbG9jay5kZWZhdWx0X21jbGspCiAJCQkJcmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKTsKIAkJCWVsc2UKIAkJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9jb25zdCg2NjcwMCk7CiAJCQlyZGV2LT5wbS5pZ3Bfc3lzdGVtX21jbGsuZnVsbCA9IGRmaXhlZF9kaXYocmRldi0+cG0uaWdwX3N5c3RlbV9tY2xrLCB0bXApOwotCQkJcmRldi0+cG0uaWdwX2h0X2xpbmtfY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QoaW5mby0+aW5mb192Mi51bEhUTGlua0ZyZXEpOworCQkJcmRldi0+cG0uaWdwX2h0X2xpbmtfY2xrLmZ1bGwgPSBkZml4ZWRfY29uc3QobGUzMl90b19jcHUoaW5mby0+aW5mb192Mi51bEhUTGlua0ZyZXEpKTsKIAkJCXJkZXYtPnBtLmlncF9odF9saW5rX2Nsay5mdWxsID0gZGZpeGVkX2RpdihyZGV2LT5wbS5pZ3BfaHRfbGlua19jbGssIHRtcCk7CiAJCQlyZGV2LT5wbS5pZ3BfaHRfbGlua193aWR0aC5mdWxsID0gZGZpeGVkX2NvbnN0KGxlMTZfdG9fY3B1KGluZm8tPmluZm9fdjIudXNNaW5IVExpbmtXaWR0aCkpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKaW5kZXggNWQ1NjlmNC4uNjRiNTdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwpAQCAtNjksMTMgKzY5LDEzIEBACiAJCQkgIElTWU5DX0NQU0NSQVRDSF9JRExFR1VJKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFdBSVRfVU5USUwsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBXQUlUXzJEX0lETEVDTEVBTiB8IFdBSVRfM0RfSURMRUNMRUFOKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcwQywgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMzEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9EU1RfUElQRV9DT05GSUcsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1BJUEVfQVVUT19DT05GSUcpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoR0JfU0VMRUNULCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChHQl9FTkFCTEUsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4NDJDOCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjUwMF9TVV9SRUdfREVTVCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IHJkZXYtPm51bV9nYl9waXBlcykgLSAxKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFZBUF9JTkRFWF9PRkZTRVQsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogCX0KIAlydjUxNV92Z2FfcmVuZGVyX2Rpc2FibGUocmRldik7CiAJcjQyMF9waXBlc19pbml0KHJkZXYpOwotCWdiX3BpcGVfc2VsZWN0ID0gUlJFRzMyKDB4NDAyQyk7Ci0JdG1wID0gUlJFRzMyKDB4MTcwQyk7CisJZ2JfcGlwZV9zZWxlY3QgPSBSUkVHMzIoUjQwMF9HQl9QSVBFX1NFTEVDVCk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKIAlwaXBlX3NlbGVjdF9jdXJyZW50ID0gKHRtcCA+PiAyKSAmIDM7CiAJdG1wID0gKDEgPDwgcGlwZV9zZWxlY3RfY3VycmVudCkgfAogCSAgICAgICgoKGdiX3BpcGVfc2VsZWN0ID4+IDgpICYgMHhGKSA8PCA0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCA0OTFkYzkwLi5kOGJhNjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC03OCwxOCArNzgsMjMgQEAKIH0KIAogLyogZ2V0IHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlcyAqLwotdTMyIHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoraW50IHJ2NzcwX2dldF90ZW1wKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXUzMiB0ZW1wID0gKFJSRUczMihDR19NVUxUX1RIRVJNQUxfU1RBVFVTKSAmIEFTSUNfVF9NQVNLKSA+PgogCQlBU0lDX1RfU0hJRlQ7Ci0JdTMyIGFjdHVhbF90ZW1wID0gMDsKKwlpbnQgYWN0dWFsX3RlbXA7CiAKLQlpZiAoKHRlbXAgPj4gOSkgJiAxKQotCQlhY3R1YWxfdGVtcCA9IDA7Ci0JZWxzZQotCQlhY3R1YWxfdGVtcCA9ICh0ZW1wID4+IDEpICYgMHhmZjsKKwlpZiAodGVtcCAmIDB4NDAwKQorCQlhY3R1YWxfdGVtcCA9IC0yNTY7CisJZWxzZSBpZiAodGVtcCAmIDB4MjAwKQorCQlhY3R1YWxfdGVtcCA9IDI1NTsKKwllbHNlIGlmICh0ZW1wICYgMHgxMDApIHsKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHgxZmY7CisJCWFjdHVhbF90ZW1wIHw9IH4weDFmZjsKKwl9IGVsc2UKKwkJYWN0dWFsX3RlbXAgPSB0ZW1wICYgMHhmZjsKIAotCXJldHVybiBhY3R1YWxfdGVtcCAqIDEwMDA7CisJcmV0dXJuIChhY3R1YWxfdGVtcCAqIDEwMDApIC8gMjsKIH0KIAogdm9pZCBydjc3MF9wbV9taXNjKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtMzE2LDcgKzMyMSwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXI3MDBfY3Bfc3RvcChyZGV2KTsKLQlXUkVHMzIoQ1BfUkJfQ05UTCwgUkJfTk9fVVBEQVRFIHwgKDE1IDw8IDgpIHwgKDMgPDwgMCkpOworCVdSRUczMihDUF9SQl9DTlRMLAorI2lmZGVmIF9fQklHX0VORElBTgorCSAgICAgICBCVUZfU1dBUF8zMkJJVCB8CisjZW5kaWYKKwkgICAgICAgUkJfTk9fVVBEQVRFIHwgUkJfQkxLU1ooMTUpIHwgUkJfQlVGU1ooMykpOwogCiAJLyogUmVzZXQgY3AgKi8KIAlXUkVHMzIoR1JCTV9TT0ZUX1JFU0VULCBTT0ZUX1JFU0VUX0NQKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCmluZGV4IGFiYzhjZjUuLjc5ZmE1ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaApAQCAtNzYsMTAgKzc2LDEwIEBACiAjZGVmaW5lCQlST1FfSUIxX1NUQVJUKHgpCQkJCSgoeCkgPDwgMCkKICNkZWZpbmUJCVJPUV9JQjJfU1RBUlQoeCkJCQkJKCh4KSA8PCA4KQogI2RlZmluZQlDUF9SQl9DTlRMCQkJCQkweEMxMDQKLSNkZWZpbmUJCVJCX0JVRlNaKHgpCQkJCQkoKHgpPDwwKQotI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCk8PDgpCi0jZGVmaW5lCQlSQl9OT19VUERBVEUJCQkJCSgxPDwyNykKLSNkZWZpbmUJCVJCX1JQVFJfV1JfRU5BCQkJCQkoMTw8MzEpCisjZGVmaW5lCQlSQl9CVUZTWih4KQkJCQkJKCh4KSA8PCAwKQorI2RlZmluZQkJUkJfQkxLU1ooeCkJCQkJCSgoeCkgPDwgOCkKKyNkZWZpbmUJCVJCX05PX1VQREFURQkJCQkJKDEgPDwgMjcpCisjZGVmaW5lCQlSQl9SUFRSX1dSX0VOQQkJCQkJKDEgPDwgMzEpCiAjZGVmaW5lCQlCVUZfU1dBUF8zMkJJVAkJCQkJKDIgPDwgMTYpCiAjZGVmaW5lCUNQX1JCX1JQVFIJCQkJCTB4ODcwMAogI2RlZmluZQlDUF9SQl9SUFRSX0FERFIJCQkJCTB4QzEwQwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnIGIvZHJpdmVycy9ncHUvc3R1Yi9LY29uZmlnCmluZGV4IDA5YWVhNWYuLjcwZTYwYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3N0dWIvS2NvbmZpZworKysgYi9kcml2ZXJzL2dwdS9zdHViL0tjb25maWcKQEAgLTEsMTEgKzEsMTMgQEAKIGNvbmZpZyBTVFVCX1BPVUxTQk8KIAl0cmlzdGF0ZSAiSW50ZWwgR01BNTAwIFN0dWIgRHJpdmVyIgogCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBORVQgIyBmb3IgVEhFUk1BTAogCSMgUG91bHNibyBzdHViIGRlcGVuZHMgb24gQUNQSV9WSURFTyB3aGVuIEFDUEkgaXMgZW5hYmxlZAogCSMgYnV0IGZvciBzZWxlY3QgdG8gd29yaywgbmVlZCB0byBzZWxlY3QgQUNQSV9WSURFTydzIGRlcGVuZGVuY2llcywgaWNrCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgaWYgQUNQSQogCXNlbGVjdCBJTlBVVCBpZiBBQ1BJCiAJc2VsZWN0IEFDUElfVklERU8gaWYgQUNQSQorCXNlbGVjdCBUSEVSTUFMIGlmIEFDUEkKIAloZWxwCiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgSW50ZWwgR01BNTAwCiAJICAoUG91bHNibykgaW50ZWdyYXRlZCBncmFwaGljcy4gSWYgTSBpcyBzZWxlY3RlZCwgdGhlIG1vZHVsZSB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhYXJiLmMKaW5kZXggYzM4MGM2NS4uYWNlMmIxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYWFyYi5jCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS92Z2FhcmIuYwpAQCAtNjM2LDcgKzYzNiw3IEBACiAJCQl2b2lkICgqaXJxX3NldF9zdGF0ZSkodm9pZCAqY29va2llLCBib29sIHN0YXRlKSwKIAkJCXVuc2lnbmVkIGludCAoKnNldF92Z2FfZGVjb2RlKSh2b2lkICpjb29raWUsIGJvb2wgZGVjb2RlKSkKIHsKLQlpbnQgcmV0ID0gLTE7CisJaW50IHJldCA9IC1FTk9ERVY7CiAJc3RydWN0IHZnYV9kZXZpY2UgKnZnYWRldjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggNzczZTQ4NC4uMjk3YmM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtMjM4LDEzICsyMzgsMTMgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGs4dGVtcC4KIAogY29uZmlnIFNFTlNPUlNfSzEwVEVNUAotCXRyaXN0YXRlICJBTUQgUGhlbm9tL1NlbXByb24vVHVyaW9uL09wdGVyb24gdGVtcGVyYXR1cmUgc2Vuc29yIgorCXRyaXN0YXRlICJBTUQgRmFtaWx5IDEwaC8xMWgvMTJoLzE0aCB0ZW1wZXJhdHVyZSBzZW5zb3IiCiAJZGVwZW5kcyBvbiBYODYgJiYgUENJCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSB0ZW1wZXJhdHVyZQogCSAgc2Vuc29yKHMpIGluc2lkZSB5b3VyIENQVS4gU3VwcG9ydGVkIGFyZSBsYXRlciByZXZpc2lvbnMgb2YKLQkgIHRoZSBBTUQgRmFtaWx5IDEwaCBhbmQgYWxsIHJldmlzaW9ucyBvZiB0aGUgQU1EIEZhbWlseSAxMWgKLQkgIG1pY3JvYXJjaGl0ZWN0dXJlcy4KKwkgIHRoZSBBTUQgRmFtaWx5IDEwaCBhbmQgYWxsIHJldmlzaW9ucyBvZiB0aGUgQU1EIEZhbWlseSAxMWgsCisJICAxMmggKExsYW5vKSwgYW5kIDE0aCAoQnJhem9zKSBtaWNyb2FyY2hpdGVjdHVyZXMuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGsxMHRlbXAuCkBAIC00NTUsMTMgKzQ1NSwxNCBAQAogCSAgY2FsbGVkIGp6NDc0MC1od21vbi4KIAogY29uZmlnIFNFTlNPUlNfSkM0MgotCXRyaXN0YXRlICJKRURFQyBKQzQyLjQgY29tcGxpYW50IHRlbXBlcmF0dXJlIHNlbnNvcnMiCisJdHJpc3RhdGUgIkpFREVDIEpDNDIuNCBjb21wbGlhbnQgbWVtb3J5IG1vZHVsZSB0ZW1wZXJhdHVyZSBzZW5zb3JzIgogCWRlcGVuZHMgb24gSTJDCiAJaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIEplZGVjIEpDNDIuNCBjb21wbGlhbnQKLQkgIHRlbXBlcmF0dXJlIHNlbnNvcnMuIFN1cHBvcnQgd2lsbCBpbmNsdWRlLCBidXQgbm90IGJlIGxpbWl0ZWQgdG8sCi0JICBBRFQ3NDA4LCBDQVQzNFRTMDIsLCBDQVQ2MDk1LCBNQVg2NjA0LCBNQ1A5ODA1LCBNQ1A5ODI0MiwgTUNQOTgyNDMsCi0JICBNQ1A5ODQzLCBTRTk3LCBTRTk4LCBTVFRTNDI0LCBUU0UyMDAyQjMsIGFuZCBUUzMwMDBCMy4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUsIHlvdSBnZXQgc3VwcG9ydCBmb3IgSkVERUMgSkM0Mi40IGNvbXBsaWFudAorCSAgdGVtcGVyYXR1cmUgc2Vuc29ycywgd2hpY2ggYXJlIHVzZWQgb24gbWFueSBERFIzIG1lbW9yeSBtb2R1bGVzIGZvcgorCSAgbW9iaWxlIGRldmljZXMgYW5kIHNlcnZlcnMuICBTdXBwb3J0IHdpbGwgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkCisJICB0bywgQURUNzQwOCwgQ0FUMzRUUzAyLCBDQVQ2MDk1LCBNQVg2NjA0LCBNQ1A5ODA1LCBNQ1A5ODI0MiwgTUNQOTgyNDMsCisJICBNQ1A5ODQzLCBTRTk3LCBTRTk4LCBTVFRTNDI0KEUpLCBUU0UyMDAyQjMsIGFuZCBUUzMwMDBCMy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgamM0Mi4KQEAgLTU3NCw3ICs1NzUsNyBAQAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODUKIAkgIHNlbnNvciBjaGlwcyBhbmQgY2xvbmVzOiBBRE0xMDI3LCBBRFQ3NDYzLCBBRFQ3NDY4LCBFTUM2RDEwMCwKLQkgIEVNQzZEMTAxIGFuZCBFTUM2RDEwMi4KKwkgIEVNQzZEMTAxLCBFTUM2RDEwMiwgYW5kIEVNQzZEMTAzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTg1LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZDc0MTQuYyBiL2RyaXZlcnMvaHdtb24vYWQ3NDE0LmMKaW5kZXggODZkODIyYS4uZDQ2YzBjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZDc0MTQuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkNzQxNC5jCkBAIC0yNDIsNiArMjQyLDcgQEAKIAl7ICJhZDc0MTQiLCAwIH0sCiAJe30KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgYWQ3NDE0X2lkKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkNzQxNF9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQxMS5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKaW5kZXggZjEzYzg0My4uNWNjM2UzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKQEAgLTMzNCw2ICszMzQsNyBAQAogCXsgImFkdDc0MTEiLCAwIH0sCiAJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGFkdDc0MTFfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYWR0NzQxMV9kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKaW5kZXggY2UwMzcyZjAuLjRjMDc0MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYworKysgYi9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKQEAgLTEwNzIsNiArMTA3Miw3IEBACiAJCQlub2RlLT5zZGEuZGV2X2F0dHIuc2hvdyA9IGdycC0+c2hvdzsKIAkJCW5vZGUtPnNkYS5kZXZfYXR0ci5zdG9yZSA9IGdycC0+c3RvcmU7CiAJCQlhdHRyID0gJm5vZGUtPnNkYS5kZXZfYXR0ci5hdHRyOworCQkJc3lzZnNfYXR0cl9pbml0KGF0dHIpOwogCQkJYXR0ci0+bmFtZSA9IG5vZGUtPm5hbWU7CiAJCQlhdHRyLT5tb2RlID0gU19JUlVHTyB8IChncnAtPnN0b3JlID8gU19JV1VTUiA6IDApOwogCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCBhdHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMgYi9kcml2ZXJzL2h3bW9uL2FzdXNfYXRrMDExMC5jCmluZGV4IDJkNjhjZjMuLmI1ZTg5MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXN1c19hdGswMTEwLmMKKysrIGIvZHJpdmVycy9od21vbi9hc3VzX2F0azAxMTAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKICNpbmNsdWRlIDxhY3BpL2FjcGkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGl4Zi5oPgpAQCAtMjIsNiArMjMsMjEgQEAKIAogI2RlZmluZSBBVEtfSElEICJBVEswMTEwIgogCitzdGF0aWMgYm9vbCBuZXdfaWY7Cittb2R1bGVfcGFyYW0obmV3X2lmLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobmV3X2lmLCAiT3ZlcnJpZGUgZGV0ZWN0aW9uIGhldXJpc3RpYyBhbmQgZm9yY2UgdGhlIHVzZSBvZiB0aGUgbmV3IEFUSzAxMTAgaW50ZXJmYWNlIik7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRjb25zdCBhdGtfZm9yY2VfbmV3X2lmW10gPSB7CisJeworCQkvKiBPbGQgaW50ZXJmYWNlIGhhcyBicm9rZW4gTUNIIHRlbXAgbW9uaXRvcmluZyAqLworCQkuaWRlbnQgPSAiQXN1cyBTYWJlcnRvb3RoIFg1OCIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiU0FCRVJUT09USCBYNTgiKQorCQl9CisJfSwKKwl7IH0KK307CisKIC8qIE1pbmltdW0gdGltZSBiZXR3ZWVuIHJlYWRpbmdzLCBlbmZvcmNlZCBpbiBvcmRlciB0byBhdm9pZAogICogaG9nZ2luZyB0aGUgQ1BVLgogICovCkBAIC0xMzAyLDcgKzEzMTgsOSBAQAogCSAqIGFuYWx5c2lzIG9mIG11bHRpcGxlIERTRFRzIGluZGljYXRlcyB0aGF0IHdoZW4gYm90aCBpbnRlcmZhY2VzCiAJICogYXJlIHByZXNlbnQgdGhlIG5ldyBvbmUgKEdHUlAvR0lUTSkgaXMgbm90IGZ1bmN0aW9uYWwuCiAJICovCi0JaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlKQorCWlmIChuZXdfaWYpCisJCWRldl9pbmZvKGRldiwgIk92ZXJyaWRpbmcgaW50ZXJmYWNlIGRldGVjdGlvblxuIik7CisJaWYgKGRhdGEtPnJ0bXBfaGFuZGxlICYmIGRhdGEtPnJ2bHRfaGFuZGxlICYmIGRhdGEtPnJmYW5faGFuZGxlICYmICFuZXdfaWYpCiAJCWRhdGEtPm9sZF9pbnRlcmZhY2UgPSB0cnVlOwogCWVsc2UgaWYgKGRhdGEtPmVudW1lcmF0ZV9oYW5kbGUgJiYgZGF0YS0+cmVhZF9oYW5kbGUgJiYKIAkJCWRhdGEtPndyaXRlX2hhbmRsZSkKQEAgLTE0MjAsNiArMTQzOCw5IEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCisJaWYgKGRtaV9jaGVja19zeXN0ZW0oYXRrX2ZvcmNlX25ld19pZikpCisJCW5ld19pZiA9IHRydWU7CisKIAlyZXQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmF0a19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXByX2luZm8oImFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlciBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9lbWMxNDAzLmMgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwppbmRleCA1ZGVhOWZhLi5jZDJhNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYworKysgYi9kcml2ZXJzL2h3bW9uL2VtYzE0MDMuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBlbWMxNDAzX2FkZHJlc3NfbGlzdFtdID0gewotCTB4MTgsIDB4MmEsIDB4NGMsIDB4NGQsIEkyQ19DTElFTlRfRU5ECisJMHgxOCwgMHgyOSwgMHg0YywgMHg0ZCwgSTJDX0NMSUVOVF9FTkQKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBlbWMxNDAzX2lkdGFibGVbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vamM0Mi5jIGIvZHJpdmVycy9od21vbi9qYzQyLmMKaW5kZXggMzQwZmM3OC4uOTM0OTkxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9qYzQyLmMKKysrIGIvZHJpdmVycy9od21vbi9qYzQyLmMKQEAgLTUzLDYgKzUzLDggQEAKIAogLyogQ29uZmlndXJhdGlvbiByZWdpc3RlciBkZWZpbmVzICovCiAjZGVmaW5lIEpDNDJfQ0ZHX0NSSVRfT05MWQkoMSA8PCAyKQorI2RlZmluZSBKQzQyX0NGR19UQ1JJVF9MT0NLCSgxIDw8IDYpCisjZGVmaW5lIEpDNDJfQ0ZHX0VWRU5UX0xPQ0sJKDEgPDwgNykKICNkZWZpbmUgSkM0Ml9DRkdfU0hVVERPV04JKDEgPDwgOCkKICNkZWZpbmUgSkM0Ml9DRkdfSFlTVF9TSElGVAk5CiAjZGVmaW5lIEpDNDJfQ0ZHX0hZU1RfTUFTSwkweDAzCkBAIC0zMzIsNyArMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBqYzQyX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHZhbDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgZGlmZiwgaHlzdDsKIAlpbnQgZXJyOwogCWludCByZXQgPSBjb3VudDsKQEAgLTM4MCwxNCArMzgyLDE0IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX2lucHV0LCBOVUxMKTsKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0LCBTX0lSVUdPLAogCQkgICBzaG93X3RlbXBfY3JpdCwgc2V0X3RlbXBfY3JpdCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWluLCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9taW4sIHNldF90ZW1wX21pbik7Ci1zdGF0aWMgREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywKK3N0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVJVR08sCiAJCSAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCk7CiAKLXN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLAorc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2NyaXRfaHlzdCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX2NyaXRfaHlzdCwgc2V0X3RlbXBfY3JpdF9oeXN0KTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTywKIAkJICAgc2hvd190ZW1wX21heF9oeXN0LCBOVUxMKTsKQEAgLTQxMiw4ICs0MTQsMzEgQEAKIAlOVUxMCiB9OwogCitzdGF0aWMgbW9kZV90IGpjNDJfYXR0cmlidXRlX21vZGUoc3RydWN0IGtvYmplY3QgKmtvYmosCisJCQkJICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGpjNDJfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXVuc2lnbmVkIGludCBjb25maWcgPSBkYXRhLT5jb25maWc7CisJYm9vbCByZWFkb25seTsKKworCWlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIpCisJCXJlYWRvbmx5ID0gY29uZmlnICYgSkM0Ml9DRkdfVENSSVRfTE9DSzsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9taW4uYXR0ciB8fAorCQkgYXR0ciA9PSAmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIpCisJCXJlYWRvbmx5ID0gY29uZmlnICYgSkM0Ml9DRkdfRVZFTlRfTE9DSzsKKwllbHNlIGlmIChhdHRyID09ICZkZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuYXR0cikKKwkJcmVhZG9ubHkgPSBjb25maWcgJiAoSkM0Ml9DRkdfRVZFTlRfTE9DSyB8IEpDNDJfQ0ZHX1RDUklUX0xPQ0spOworCWVsc2UKKwkJcmVhZG9ubHkgPSB0cnVlOworCisJcmV0dXJuIFNfSVJVR08gfCAocmVhZG9ubHkgPyAwIDogU19JV1VTUik7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGpjNDJfZ3JvdXAgPSB7CiAJLmF0dHJzID0gamM0Ml9hdHRyaWJ1dGVzLAorCS5pc192aXNpYmxlID0gamM0Ml9hdHRyaWJ1dGVfbW9kZSwKIH07CiAKIC8qIFJldHVybiAwIGlmIGRldGVjdGlvbiBpcyBzdWNjZXNzZnVsLCAtRU5PREVWIG90aGVyd2lzZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9rMTB0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYwppbmRleCBkYTVhMjQwLi44MmJmNjVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYworKysgYi9kcml2ZXJzL2h3bW9uL2sxMHRlbXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBrMTB0ZW1wLmMgLSBBTUQgRmFtaWx5IDEwaC8xMWggcHJvY2Vzc29yIGhhcmR3YXJlIG1vbml0b3JpbmcKKyAqIGsxMHRlbXAuYyAtIEFNRCBGYW1pbHkgMTBoLzExaC8xMmgvMTRoIHByb2Nlc3NvciBoYXJkd2FyZSBtb25pdG9yaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDA5IENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgogICoKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKLU1PRFVMRV9ERVNDUklQVElPTigiQU1EIEZhbWlseSAxMGgvMTFoIENQVSBjb3JlIHRlbXBlcmF0dXJlIG1vbml0b3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQU1EIEZhbWlseSAxMGgvMTFoLzEyaC8xNGggQ1BVIGNvcmUgdGVtcGVyYXR1cmUgbW9uaXRvciIpOwogTU9EVUxFX0FVVEhPUigiQ2xlbWVucyBMYWRpc2NoIDxjbGVtZW5zQGxhZGlzY2guZGU+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKQEAgLTIwOCw2ICsyMDgsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGsxMHRlbXBfaWRfdGFibGVbXSA9IHsKIAl7IFBDSV9WREVWSUNFKEFNRCwgUENJX0RFVklDRV9JRF9BTURfMTBIX05CX01JU0MpIH0sCiAJeyBQQ0lfVkRFVklDRShBTUQsIFBDSV9ERVZJQ0VfSURfQU1EXzExSF9OQl9NSVNDKSB9LAorCXsgUENJX1ZERVZJQ0UoQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF9DTkIxN0hfRjMpIH0sCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgazEwdGVtcF9pZF90YWJsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jIGIvZHJpdmVycy9od21vbi9saXMzbHYwMmQuYwppbmRleCAxYjY3NGI3Li5kODA1ZThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xpczNsdjAyZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbGlzM2x2MDJkLmMKQEAgLTk1Nyw3ICs5NTcsNyBAQAogCiAJLyogYmFpbCBpZiB3ZSBkaWQgbm90IGdldCBhbiBJUlEgZnJvbSB0aGUgYnVzIGxheWVyICovCiAJaWYgKCFkZXYtPmlycSkgewotCQlwcl9lcnIoIk5vIElSUS4gRGlzYWJsaW5nIC9kZXYvZnJlZWZhbGxcbiIpOworCQlwcl9kZWJ1ZygiTm8gSVJRLiBEaXNhYmxpbmcgL2Rldi9mcmVlZmFsbFxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTYzLmMgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwppbmRleCA3NzZhZWIzLi41MDhjYjI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNjMuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNjMuYwpAQCAtOTgsNiArOTgsOSBAQAogICogdmFsdWUsIGl0IHVzZXMgc2lnbmVkIDgtYml0IHZhbHVlcyB3aXRoIExTQiA9IDEgZGVncmVlIENlbHNpdXMuCiAgKiBGb3IgcmVtb3RlIHRlbXBlcmF0dXJlLCBsb3cgYW5kIGhpZ2ggbGltaXRzLCBpdCB1c2VzIHNpZ25lZCAxMS1iaXQgdmFsdWVzCiAgKiB3aXRoIExTQiA9IDAuMTI1IGRlZ3JlZSBDZWxzaXVzLCBsZWZ0LWp1c3RpZmllZCBpbiAxNi1iaXQgcmVnaXN0ZXJzLgorICogRm9yIExNNjQgdGhlIGFjdHVhbCByZW1vdGUgZGlvZGUgdGVtcGVyYXR1cmUgaXMgMTYgZGVncmVlIENlbHNpdXMgaGlnaGVyCisgKiB0aGFuIHRoZSByZWdpc3RlciByZWFkaW5nLiBSZW1vdGUgdGVtcGVyYXR1cmUgc2V0cG9pbnRzIGhhdmUgdG8gYmUKKyAqIGFkYXB0ZWQgYWNjb3JkaW5nbHkuCiAgKi8KIAogI2RlZmluZSBGQU5fRlJPTV9SRUcocmVnKQkoKHJlZykgPT0gMHhGRkZDIHx8IChyZWcpID09IDAgPyAwIDogXApAQCAtMTY1LDYgKzE2OCw4IEBACiAJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOwogCWNoYXIgdmFsaWQ7IC8qIHplcm8gdW50aWwgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KIAl1bnNpZ25lZCBsb25nIGxhc3RfdXBkYXRlZDsgLyogaW4gamlmZmllcyAqLworCWludCBraW5kOworCWludCB0ZW1wMl9vZmZzZXQ7CiAKIAkvKiByZWdpc3RlcnMgdmFsdWVzICovCiAJdTggY29uZmlnLCBjb25maWdfZmFuOwpAQCAtMjQ3LDE2ICsyNTIsMzQgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+Y29uZmlnX2ZhbiAmIDB4MjAgPyAxIDogMik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgY2hhciAqYnVmKQorLyoKKyAqIFRoZXJlIGFyZSA4Yml0IHJlZ2lzdGVycyBmb3IgYm90aCBsb2NhbCh0ZW1wMSkgYW5kIHJlbW90ZSh0ZW1wMikgc2Vuc29yLgorICogRm9yIHJlbW90ZSBzZW5zb3IgcmVnaXN0ZXJzIHRlbXAyX29mZnNldCBoYXMgdG8gYmUgY29uc2lkZXJlZCwKKyAqIGZvciBsb2NhbCBzZW5zb3IgaXQgbXVzdCBub3QuCisgKiBTbyB3ZSBuZWVkIHNlcGFyYXRlIDhiaXQgYWNjZXNzb3JzIGZvciBsb2NhbCBhbmQgcmVtb3RlIHNlbnNvci4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19sb2NhbF90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4W2F0dHItPmluZGV4XSkpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZHVtbXksCi0JCQkgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3NpemVfdCBzaG93X3JlbW90ZV90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbYXR0ci0+aW5kZXhdKQorCQkgICAgICAgKyBkYXRhLT50ZW1wMl9vZmZzZXQpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfbG9jYWxfdGVtcDgoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkdW1teSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwogCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKQEAgLTI3NCw3ICsyOTcsOCBAQAogewogCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKIAlzdHJ1Y3QgbG02M19kYXRhICpkYXRhID0gbG02M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxMV9GUk9NX1JFRyhkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFRFTVAxMV9GUk9NX1JFRyhkYXRhLT50ZW1wMTFbYXR0ci0+aW5kZXhdKQorCQkgICAgICAgKyBkYXRhLT50ZW1wMl9vZmZzZXQpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzZXRfdGVtcDExKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCkBAIC0yOTQsNyArMzE4LDcgQEAKIAlpbnQgbnIgPSBhdHRyLT5pbmRleDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT50ZW1wMTFbbnJdID0gVEVNUDExX1RPX1JFRyh2YWwpOworCWRhdGEtPnRlbXAxMVtucl0gPSBURU1QMTFfVE9fUkVHKHZhbCAtIGRhdGEtPnRlbXAyX29mZnNldCk7CiAJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZ1sobnIgLSAxKSAqIDJdLAogCQkJCSAgZGF0YS0+dGVtcDExW25yXSA+PiA4KTsKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnWyhuciAtIDEpICogMiArIDFdLApAQCAtMzEwLDYgKzMzNCw3IEBACiB7CiAJc3RydWN0IGxtNjNfZGF0YSAqZGF0YSA9IGxtNjNfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QOF9GUk9NX1JFRyhkYXRhLT50ZW1wOFsyXSkKKwkJICAgICAgICsgZGF0YS0+dGVtcDJfb2Zmc2V0CiAJCSAgICAgICAtIFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXAyX2NyaXRfaHlzdCkpOwogfQogCkBAIC0zMjQsNyArMzQ5LDcgQEAKIAlsb25nIGh5c3Q7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JaHlzdCA9IFRFTVA4X0ZST01fUkVHKGRhdGEtPnRlbXA4WzJdKSAtIHZhbDsKKwloeXN0ID0gVEVNUDhfRlJPTV9SRUcoZGF0YS0+dGVtcDhbMl0pICsgZGF0YS0+dGVtcDJfb2Zmc2V0IC0gdmFsOwogCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTYzX1JFR19SRU1PVEVfVENSSVRfSFlTVCwKIAkJCQkgIEhZU1RfVE9fUkVHKGh5c3QpKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKQEAgLTM1NSwxNiArMzgwLDIxIEBACiBzdGF0aWMgREVWSUNFX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtMSwgc2V0X3B3bTEpOwogc3RhdGljIERFVklDRV9BVFRSKHB3bTFfZW5hYmxlLCBTX0lSVUdPLCBzaG93X3B3bTFfZW5hYmxlLCBOVUxMKTsKIAotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wOCwgTlVMTCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDgsCi0Jc2V0X3RlbXA4LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfbG9jYWxfdGVtcDgsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2xvY2FsX3RlbXA4LAorCXNldF9sb2NhbF90ZW1wOCwgMSk7CiAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDExLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wMTEsCiAJc2V0X3RlbXAxMSwgMSk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcDExLAogCXNldF90ZW1wMTEsIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPLCBzaG93X3RlbXA4LCBOVUxMLCAyKTsKKy8qCisgKiBPbiBMTTYzLCB0ZW1wMl9jcml0IGNhbiBiZSBzZXQgb25seSBvbmNlLCB3aGljaCBzaG91bGQgYmUgam9iCisgKiBvZiB0aGUgYm9vdGxvYWRlci4KKyAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9jcml0LCBTX0lSVUdPLCBzaG93X3JlbW90ZV90ZW1wOCwKKwlOVUxMLCAyKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAyX2NyaXRfaHlzdCwKIAlzZXRfdGVtcDJfY3JpdF9oeXN0KTsKIApAQCAtNDc5LDcgKzUwOSwxMiBAQAogCWRhdGEtPnZhbGlkID0gMDsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBMTTYzIGNoaXAgKi8KKwkvKiBTZXQgdGhlIGRldmljZSB0eXBlICovCisJZGF0YS0+a2luZCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlpZiAoZGF0YS0+a2luZCA9PSBsbTY0KQorCQlkYXRhLT50ZW1wMl9vZmZzZXQgPSAxNjAwMDsKKworCS8qIEluaXRpYWxpemUgY2hpcCAqLwogCWxtNjNfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTg1LmMgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwppbmRleCAxZTIyOTg0Li5kMmNjMjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODUuYwpAQCAtNDEsNyArNDEsNyBAQAogZW51bSBjaGlwcyB7CiAJYW55X2NoaXAsIGxtODViLCBsbTg1YywKIAlhZG0xMDI3LCBhZHQ3NDYzLCBhZHQ3NDY4LAotCWVtYzZkMTAwLCBlbWM2ZDEwMgorCWVtYzZkMTAwLCBlbWM2ZDEwMiwgZW1jNmQxMDMKIH07CiAKIC8qIFRoZSBMTTg1IHJlZ2lzdGVycyAqLwpAQCAtOTAsNiArOTAsOSBAQAogI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDBfQTAgICAgICAgIDB4NjAKICNkZWZpbmUJTE04NV9WRVJTVEVQX0VNQzZEMTAwX0ExICAgICAgICAweDYxCiAjZGVmaW5lCUxNODVfVkVSU1RFUF9FTUM2RDEwMgkJMHg2NQorI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDNfQTAJMHg2OAorI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDNfQTEJMHg2OQorI2RlZmluZQlMTTg1X1ZFUlNURVBfRU1DNkQxMDNTCQkweDZBCS8qIEFsc28ga25vd24gYXMgRU1DNkQxMDM6QTIgKi8KIAogI2RlZmluZQlMTTg1X1JFR19DT05GSUcJCQkweDQwCiAKQEAgLTM0OCw2ICszNTEsNyBAQAogCXsgImVtYzZkMTAwIiwgZW1jNmQxMDAgfSwKIAl7ICJlbWM2ZDEwMSIsIGVtYzZkMTAwIH0sCiAJeyAiZW1jNmQxMDIiLCBlbWM2ZDEwMiB9LAorCXsgImVtYzZkMTAzIiwgZW1jNmQxMDMgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG04NV9pZCk7CkBAIC0xMjUwLDYgKzEyNTQsMjAgQEAKIAkJY2FzZSBMTTg1X1ZFUlNURVBfRU1DNkQxMDI6CiAJCQl0eXBlX25hbWUgPSAiZW1jNmQxMDIiOwogCQkJYnJlYWs7CisJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAzX0EwOgorCQljYXNlIExNODVfVkVSU1RFUF9FTUM2RDEwM19BMToKKwkJCXR5cGVfbmFtZSA9ICJlbWM2ZDEwMyI7CisJCQlicmVhazsKKwkJLyoKKwkJICogUmVnaXN0ZXJzIGFwcGFyZW50bHkgbWlzc2luZyBpbiBFTUM2RDEwM1MvRU1DNkQxMDM6QTIKKwkJICogY29tcGFyZWQgdG8gRU1DNkQxMDM6QTAsIEVNQzZEMTAzOkExLCBhbmQgRU1DNkQxMDIKKwkJICogKGFjY29yZGluZyB0byB0aGUgZGF0YSBzaGVldHMpLCBidXQgdXNlZCB1bmNvbmRpdGlvbmFsbHkKKwkJICogaW4gdGhlIGRyaXZlcjogNjJbNTo3XSwgNkRbMDo3XSwgYW5kIDZFWzA6N10uCisJCSAqIFNvIHNraXAgRU1DNkQxMDNTIGZvciBub3cuCisJCWNhc2UgTE04NV9WRVJTVEVQX0VNQzZEMTAzUzoKKwkJCXR5cGVfbmFtZSA9ICJlbWM2ZDEwM3MiOworCQkJYnJlYWs7CisJCSAqLwogCQl9CiAJfSBlbHNlIHsKIAkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LApAQCAtMTI4Myw2ICsxMzAxLDcgQEAKIAljYXNlIGFkdDc0Njg6CiAJY2FzZSBlbWM2ZDEwMDoKIAljYXNlIGVtYzZkMTAyOgorCWNhc2UgZW1jNmQxMDM6CiAJCWRhdGEtPmZyZXFfbWFwID0gYWRtMTAyN19mcmVxX21hcDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE0NjgsNyArMTQ4Nyw3IEBACiAJCQkvKiBNb3JlIGFsYXJtIGJpdHMgKi8KIAkJCWRhdGEtPmFsYXJtcyB8PSBsbTg1X3JlYWRfdmFsdWUoY2xpZW50LAogCQkJCQkJRU1DNkQxMDBfUkVHX0FMQVJNMykgPDwgMTY7Ci0JCX0gZWxzZSBpZiAoZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMikgeworCQl9IGVsc2UgaWYgKGRhdGEtPnR5cGUgPT0gZW1jNmQxMDIgfHwgZGF0YS0+dHlwZSA9PSBlbWM2ZDEwMykgewogCQkJLyogSGF2ZSB0byByZWFkIExTQiBiaXRzIGFmdGVyIHRoZSBNU0Igb25lcyBiZWNhdXNlCiAJCQkgICB0aGUgcmVhZGluZyBvZiB0aGUgTVNCIGJpdHMgaGFzIGZyb3plbiB0aGUKIAkJCSAgIExTQnMgKGJhY2t3YXJkIGZyb20gdGhlIEFETTEwMjcpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwppbmRleCBiNjA1ZmYzLi44MjlhMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpAQCAtODQ3LDExICs4NDcsMTUgQEAKIAkJCWRldl9lcnIoZGV2LT5kZXYsICJBcmJpdHJhdGlvbiBsb3N0XG4iKTsKIAkJCWVyciB8PSBPTUFQX0kyQ19TVEFUX0FMOwogCQl9CisJCS8qCisJCSAqIFByb0RCMDAxNzA1MjogQ2xlYXIgQVJEWSBiaXQgdHdpY2UKKwkJICovCiAJCWlmIChzdGF0ICYgKE9NQVBfSTJDX1NUQVRfQVJEWSB8IE9NQVBfSTJDX1NUQVRfTkFDSyB8CiAJCQkJCU9NQVBfSTJDX1NUQVRfQUwpKSB7CiAJCQlvbWFwX2kyY19hY2tfc3RhdChkZXYsIHN0YXQgJgogCQkJCShPTUFQX0kyQ19TVEFUX1JSRFkgfCBPTUFQX0kyQ19TVEFUX1JEUiB8Ci0JCQkJT01BUF9JMkNfU1RBVF9YUkRZIHwgT01BUF9JMkNfU1RBVF9YRFIpKTsKKwkJCQlPTUFQX0kyQ19TVEFUX1hSRFkgfCBPTUFQX0kyQ19TVEFUX1hEUiB8CisJCQkJT01BUF9JMkNfU1RBVF9BUkRZKSk7CiAJCQlvbWFwX2kyY19jb21wbGV0ZV9jbWQoZGV2LCBlcnIpOwogCQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCQl9CkBAIC0xMTM3LDEyICsxMTQxLDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfU1VTUEVORAorc3RhdGljIGludCBvbWFwX2kyY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCisJCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3N1c3BlbmQpCisJCQlkZXYtPmJ1cy0+cG0tPnJ1bnRpbWVfc3VzcGVuZChkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9pMmNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAoIXBtX3J1bnRpbWVfc3VzcGVuZGVkKGRldikpCisJCWlmIChkZXYtPmJ1cyAmJiBkZXYtPmJ1cy0+cG0gJiYgZGV2LT5idXMtPnBtLT5ydW50aW1lX3Jlc3VtZSkKKwkJCWRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgb21hcF9pMmNfcG1fb3BzID0geworCS5zdXNwZW5kID0gb21hcF9pMmNfc3VzcGVuZCwKKwkucmVzdW1lID0gb21hcF9pMmNfcmVzdW1lLAorfTsKKyNkZWZpbmUgT01BUF9JMkNfUE1fT1BTICgmb21hcF9pMmNfcG1fb3BzKQorI2Vsc2UKKyNkZWZpbmUgT01BUF9JMkNfUE1fT1BTIE5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9tYXBfaTJjX3Byb2JlLAogCS5yZW1vdmUJCT0gb21hcF9pMmNfcmVtb3ZlLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJvbWFwX2kyYyIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCQkucG0JPSBPTUFQX0kyQ19QTV9PUFMsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXN0dTMwMC5jCmluZGV4IDQ5NWJlNDUuLjI2NjEzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1MzAwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHUzMDAuYwpAQCAtOTQyLDcgKzk0Miw3IEBACiAJYWRhcC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkvKiBEREMgY2xhc3MgYnV0IGFjdHVhbGx5IG9mdGVuIHVzZWQgZm9yIG1vcmUgZ2VuZXJpYyBJMkMgKi8KIAlhZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19EREM7Ci0Jc3RybmNweShhZGFwLT5uYW1lLCAiU1QgTWljcm9lbGVjdHJvbmljcyBEREMgSTJDIGFkYXB0ZXIiLAorCXN0cmxjcHkoYWRhcC0+bmFtZSwgIlNUIE1pY3JvZWxlY3Ryb25pY3MgRERDIEkyQyBhZGFwdGVyIiwKIAkJc2l6ZW9mKGFkYXAtPm5hbWUpKTsKIAlhZGFwLT5uciA9IGJ1c19ucjsKIAlhZGFwLT5hbGdvID0gJnN0dTMwMF9hbGdvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYyBiL2RyaXZlcnMvaWRsZS9pbnRlbF9pZGxlLmMKaW5kZXggN2FjYjMyZS4uNGE1YzRhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGxlL2ludGVsX2lkbGUuYworKysgYi9kcml2ZXJzL2lkbGUvaW50ZWxfaWRsZS5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxhc20vbXdhaXQuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CiAKICNkZWZpbmUgSU5URUxfSURMRV9WRVJTSU9OICIwLjQiCiAjZGVmaW5lIFBSRUZJWCAiaW50ZWxfaWRsZTogIgpAQCAtODUsNiArODYsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqY3B1aWRsZV9zdGF0ZV90YWJsZTsKIAogLyoKKyAqIEhhcmR3YXJlIEMtc3RhdGUgYXV0by1kZW1vdGlvbiBtYXkgbm90IGFsd2F5cyBiZSBvcHRpbWFsLgorICogSW5kaWNhdGUgd2hpY2ggZW5hYmxlIGJpdHMgdG8gY2xlYXIgaGVyZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBhdXRvX2RlbW90aW9uX2Rpc2FibGVfZmxhZ3M7CisKKy8qCiAgKiBTZXQgdGhpcyBmbGFnIGZvciBzdGF0ZXMgd2hlcmUgdGhlIEhXIGZsdXNoZXMgdGhlIFRMQiBmb3IgdXMKICAqIGFuZCBzbyB3ZSBkb24ndCBuZWVkIGNyb3NzLWNhbGxzIHRvIGtlZXAgaXQgY29uc2lzdGVudC4KICAqIElmIHRoaXMgZmxhZyBpcyBzZXQsIFNXIGZsdXNoZXMgdGhlIFRMQiwgc28gZXZlbiBpZiB0aGUKQEAgLTI2Myw3ICsyNzAsNyBAQAogCWNsb2NrZXZlbnRzX25vdGlmeShyZWFzb24sICZjcHUpOwogfQogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBzZXR1cF9icm9hZGNhc3RfY3B1aHBfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbiwKK3N0YXRpYyBpbnQgc2V0dXBfYnJvYWRjYXN0X2NwdWhwX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4sCiAJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCWludCBob3RjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OwpAQCAtMjczLDE4ICsyODAsMjMgQEAKIAkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGhvdGNwdSwgX19zZXR1cF9icm9hZGNhc3RfdGltZXIsCiAJCQkodm9pZCAqKXRydWUsIDEpOwogCQlicmVhazsKLQljYXNlIENQVV9ET1dOX1BSRVBBUkU6Ci0JCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShob3RjcHUsIF9fc2V0dXBfYnJvYWRjYXN0X3RpbWVyLAotCQkJKHZvaWQgKilmYWxzZSwgMSk7Ci0JCWJyZWFrOwogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgc2V0dXBfYnJvYWRjYXN0X25vdGlmaWVyID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzZXR1cF9icm9hZGNhc3Rfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBzZXR1cF9icm9hZGNhc3RfY3B1aHBfbm90aWZ5LAogfTsKIAorc3RhdGljIHZvaWQgYXV0b19kZW1vdGlvbl9kaXNhYmxlKHZvaWQgKmR1bW15KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBtc3JfYml0czsKKworCXJkbXNybChNU1JfTkhNX1NOQl9QS0dfQ1NUX0NGR19DVEwsIG1zcl9iaXRzKTsKKwltc3JfYml0cyAmPSB+YXV0b19kZW1vdGlvbl9kaXNhYmxlX2ZsYWdzOworCXdybXNybChNU1JfTkhNX1NOQl9QS0dfQ1NUX0NGR19DVEwsIG1zcl9iaXRzKTsKK30KKwogLyoKICAqIGludGVsX2lkbGVfcHJvYmUoKQogICovCkBAIC0zMjgsMTEgKzM0MCwxNyBAQAogCWNhc2UgMHgyNToJLyogV2VzdG1lcmUgKi8KIAljYXNlIDB4MkM6CS8qIFdlc3RtZXJlICovCiAJCWNwdWlkbGVfc3RhdGVfdGFibGUgPSBuZWhhbGVtX2NzdGF0ZXM7CisJCWF1dG9fZGVtb3Rpb25fZGlzYWJsZV9mbGFncyA9CisJCQkoTkhNX0MxX0FVVE9fREVNT1RFIHwgTkhNX0MzX0FVVE9fREVNT1RFKTsKIAkJYnJlYWs7CiAKIAljYXNlIDB4MUM6CS8qIDI4IC0gQXRvbSBQcm9jZXNzb3IgKi8KKwkJY3B1aWRsZV9zdGF0ZV90YWJsZSA9IGF0b21fY3N0YXRlczsKKwkJYnJlYWs7CisKIAljYXNlIDB4MjY6CS8qIDM4IC0gTGluY3JvZnQgQXRvbSBQcm9jZXNzb3IgKi8KIAkJY3B1aWRsZV9zdGF0ZV90YWJsZSA9IGF0b21fY3N0YXRlczsKKwkJYXV0b19kZW1vdGlvbl9kaXNhYmxlX2ZsYWdzID0gQVRNX0xOQ19DNl9BVVRPX0RFTU9URTsKIAkJYnJlYWs7CiAKIAljYXNlIDB4MkE6CS8qIFNOQiAqLwpAQCAtNDQwLDYgKzQ1OCw4IEBACiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCX0KKwlpZiAoYXV0b19kZW1vdGlvbl9kaXNhYmxlX2ZsYWdzKQorCQlzbXBfY2FsbF9mdW5jdGlvbihhdXRvX2RlbW90aW9uX2Rpc2FibGUsIE5VTEwsIDEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwppbmRleCBlMzhiZTFiYy4uZmJiZmEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCiAJaWJfdW5yZWdpc3Rlcl9ldmVudF9oYW5kbGVyKCZzYV9kZXYtPmV2ZW50X2hhbmRsZXIpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwlmbHVzaF93b3JrcXVldWUoaWJfd3EpOwogCiAJZm9yIChpID0gMDsgaSA8PSBzYV9kZXYtPmVuZF9wb3J0IC0gc2FfZGV2LT5zdGFydF9wb3J0OyArK2kpIHsKIAkJaWYgKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihkZXZpY2UsIGkgKyAxKSA9PSBJQl9MSU5LX0xBWUVSX0lORklOSUJBTkQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwppbmRleCBjYTEyYWNmLi5lYzFlOWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCkBAIC02MzYsNiArNjM2LDE2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB1Y21hX2NvcHlfaXdfcm91dGUoc3RydWN0IHJkbWFfdWNtX3F1ZXJ5X3JvdXRlX3Jlc3AgKnJlc3AsCisJCQkgICAgICAgc3RydWN0IHJkbWFfcm91dGUgKnJvdXRlKQoreworCXN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcjsKKworCWRldl9hZGRyID0gJnJvdXRlLT5hZGRyLmRldl9hZGRyOworCXJkbWFfYWRkcl9nZXRfZGdpZChkZXZfYWRkciwgKHVuaW9uIGliX2dpZCAqKSAmcmVzcC0+aWJfcm91dGVbMF0uZGdpZCk7CisJcmRtYV9hZGRyX2dldF9zZ2lkKGRldl9hZGRyLCAodW5pb24gaWJfZ2lkICopICZyZXNwLT5pYl9yb3V0ZVswXS5zZ2lkKTsKK30KKwogc3RhdGljIHNzaXplX3QgdWNtYV9xdWVyeV9yb3V0ZShzdHJ1Y3QgdWNtYV9maWxlICpmaWxlLAogCQkJCWNvbnN0IGNoYXIgX191c2VyICppbmJ1ZiwKIAkJCQlpbnQgaW5fbGVuLCBpbnQgb3V0X2xlbikKQEAgLTY3MCw4ICs2ODAsMTAgQEAKIAogCXJlc3Aubm9kZV9ndWlkID0gKF9fZm9yY2UgX191NjQpIGN0eC0+Y21faWQtPmRldmljZS0+bm9kZV9ndWlkOwogCXJlc3AucG9ydF9udW0gPSBjdHgtPmNtX2lkLT5wb3J0X251bTsKLQlpZiAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoY3R4LT5jbV9pZC0+ZGV2aWNlLT5ub2RlX3R5cGUpID09IFJETUFfVFJBTlNQT1JUX0lCKSB7Ci0JCXN3aXRjaCAocmRtYV9wb3J0X2dldF9saW5rX2xheWVyKGN0eC0+Y21faWQtPmRldmljZSwgY3R4LT5jbV9pZC0+cG9ydF9udW0pKSB7CisJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChjdHgtPmNtX2lkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgorCQlzd2l0Y2ggKHJkbWFfcG9ydF9nZXRfbGlua19sYXllcihjdHgtPmNtX2lkLT5kZXZpY2UsCisJCQljdHgtPmNtX2lkLT5wb3J0X251bSkpIHsKIAkJY2FzZSBJQl9MSU5LX0xBWUVSX0lORklOSUJBTkQ6CiAJCQl1Y21hX2NvcHlfaWJfcm91dGUoJnJlc3AsICZjdHgtPmNtX2lkLT5yb3V0ZSk7CiAJCQlicmVhazsKQEAgLTY4MSw2ICs2OTMsMTIgQEAKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CisJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCXVjbWFfY29weV9pd19yb3V0ZSgmcmVzcCwgJmN0eC0+Y21faWQtPnJvdXRlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl92cS5jCmluZGV4IDljZTc4MTliLi4yZWM3MTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjMl92cV9yZXEpLCBHRlBfS0VSTkVMKTsKIAlpZiAocikgewogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyLT53YWl0X29iamVjdCk7Ci0JCXItPnJlcGx5X21zZyA9ICh1NjQpIE5VTEw7CisJCXItPnJlcGx5X21zZyA9IDA7CiAJCXItPmV2ZW50ID0gMDsKIAkJci0+Y21faWQgPSBOVUxMOwogCQlyLT5xcCA9IE5VTEw7CkBAIC0xMjMsNyArMTIzLDcgQEAKICAqLwogdm9pZCB2cV9yZXFfZnJlZShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcikKIHsKLQlyLT5yZXBseV9tc2cgPSAodTY0KSBOVUxMOworCXItPnJlcGx5X21zZyA9IDA7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJlZmNudCkpIHsKIAkJa2ZyZWUocik7CiAJfQpAQCAtMTUxLDcgKzE1MSw3IEBACiB2b2lkIHZxX3JlcV9wdXQoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl92cV9yZXEgKnIpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJlZmNudCkpIHsKLQkJaWYgKHItPnJlcGx5X21zZyAhPSAodTY0KSBOVUxMKQorCQlpZiAoci0+cmVwbHlfbXNnICE9IDApCiAJCQl2cV9yZXBidWZfZnJlZShjMmRldiwKIAkJCQkgICAgICAgKHZvaWQgKikgKHVuc2lnbmVkIGxvbmcpIHItPnJlcGx5X21zZyk7CiAJCWtmcmVlKHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwppbmRleCAwZGM2MmIxLi44YjAwZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwpAQCAtMzgwLDcgKzM4MCw3IEBACiAJCQkJCSAgMTYpKSB8IEZXX1dSX0ZMT1dJRChlcC0+aHd0aWQpKTsKIAogCWZsb3djLT5tbmVtdmFsWzBdLm1uZW1vbmljID0gRldfRkxPV0NfTU5FTV9QRk5WRk47Ci0JZmxvd2MtPm1uZW12YWxbMF0udmFsID0gY3B1X3RvX2JlMzIoMCk7CisJZmxvd2MtPm1uZW12YWxbMF0udmFsID0gY3B1X3RvX2JlMzIoUENJX0ZVTkMoZXAtPmNvbS5kZXYtPnJkZXYubGxkaS5wZGV2LT5kZXZmbikgPDwgOCk7CiAJZmxvd2MtPm1uZW12YWxbMV0ubW5lbW9uaWMgPSBGV19GTE9XQ19NTkVNX0NIOwogCWZsb3djLT5tbmVtdmFsWzFdLnZhbCA9IGNwdV90b19iZTMyKGVwLT50eF9jaGFuKTsKIAlmbG93Yy0+bW5lbXZhbFsyXS5tbmVtb25pYyA9IEZXX0ZMT1dDX01ORU1fUE9SVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKaW5kZXggMjA4MDA5MC4uNGYwYmUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3FwLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CiAJCVZfRldfUklfUkVTX1dSX0RDQUNQVSgwKSB8CiAJCVZfRldfUklfUkVTX1dSX0ZCTUlOKDIpIHwKLQkJVl9GV19SSV9SRVNfV1JfRkJNQVgoMykgfAorCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgyKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNITygwKSB8CiAJCVZfRldfUklfUkVTX1dSX0NJRFhGVEhSRVNIKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRVFTSVpFKGVxc2l6ZSkpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJCVZfRldfUklfUkVTX1dSX0RDQUVOKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRENBQ1BVKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfRkJNSU4oMikgfAotCQlWX0ZXX1JJX1JFU19XUl9GQk1BWCgzKSB8CisJCVZfRldfUklfUkVTX1dSX0ZCTUFYKDIpIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0hPKDApIHwKIAkJVl9GV19SSV9SRVNfV1JfQ0lEWEZUSFJFU0goMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9FUVNJWkUoZXFzaXplKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYwppbmRleCA4YjYwNmZkLi4wOGMxOTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKQEAgLTI2MTAsOSArMjYxMCwxMSBAQAogCQkJCQluZXRpZl9jYXJyaWVyX29uKG5lc3ZuaWMtPm5ldGRldik7CiAKIAkJCQkJc3Bpbl9sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7Ci0JCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7Ci0JCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDE7Ci0JCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7CisJCQkJCQkJbmVzZGV2LT5pd19zdGF0dXMgPSAxOworCQkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCQl9CiAJCQkJCX0KIAkJCQkJc3Bpbl91bmxvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKIAkJCQl9CkBAIC0yNjQyLDkgKzI2NDQsMTEgQEAKIAkJCQkJbmV0aWZfY2Fycmllcl9vZmYobmVzdm5pYy0+bmV0ZGV2KTsKIAogCQkJCQlzcGluX2xvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKLQkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDEpIHsKLQkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMDsKLQkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCWlmIChuZXN2bmljLT5vZl9kZXZpY2VfcmVnaXN0ZXJlZCkgeworCQkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDEpIHsKKwkJCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7CisJCQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQkJCX0KIAkJCQkJfQogCQkJCQlzcGluX3VubG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwogCQkJCX0KQEAgLTI3MDMsOSArMjcwNywxMSBAQAogCQkJCW5ldGlmX2NhcnJpZXJfb24obmVzdm5pYy0+bmV0ZGV2KTsKIAogCQkJCXNwaW5fbG9jaygmbmVzdm5pYy0+cG9ydF9pYmV2ZW50X2xvY2spOwotCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAwKSB7Ci0JCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMTsKLQkJCQkJbmVzX3BvcnRfaWJldmVudChuZXN2bmljKTsKKwkJCQlpZiAobmVzdm5pYy0+b2ZfZGV2aWNlX3JlZ2lzdGVyZWQpIHsKKwkJCQkJaWYgKG5lc2Rldi0+aXdfc3RhdHVzID09IDApIHsKKwkJCQkJCW5lc2Rldi0+aXdfc3RhdHVzID0gMTsKKwkJCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJCX0KIAkJCQl9CiAJCQkJc3Bpbl91bmxvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKIAkJCX0KQEAgLTI3MjMsOSArMjcyOSwxMSBAQAogCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKG5lc3ZuaWMtPm5ldGRldik7CiAKIAkJCQlzcGluX2xvY2soJm5lc3ZuaWMtPnBvcnRfaWJldmVudF9sb2NrKTsKLQkJCQlpZiAobmVzZGV2LT5pd19zdGF0dXMgPT0gMSkgewotCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7Ci0JCQkJCW5lc19wb3J0X2liZXZlbnQobmVzdm5pYyk7CisJCQkJaWYgKG5lc3ZuaWMtPm9mX2RldmljZV9yZWdpc3RlcmVkKSB7CisJCQkJCWlmIChuZXNkZXYtPml3X3N0YXR1cyA9PSAxKSB7CisJCQkJCQluZXNkZXYtPml3X3N0YXR1cyA9IDA7CisJCQkJCQluZXNfcG9ydF9pYmV2ZW50KG5lc3ZuaWMpOworCQkJCQl9CiAJCQkJfQogCQkJCXNwaW5fdW5sb2NrKCZuZXN2bmljLT5wb3J0X2liZXZlbnRfbG9jayk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNTBjY2ViMy4uYjAxODA5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtNjIzLDcgKzYyMyw2IEBACiAJdTggaWJtYWxmdXNlc25hcDsKIAlzdHJ1Y3QgcWliX3FzZnBfZGF0YSBxc2ZwX2RhdGE7CiAJY2hhciBlcG1zZ2J1ZlsxOTJdOyAvKiBmb3IgcG9ydCBlcnJvciBpbnRlcnJ1cHQgbXNnIGJ1ZmZlciAqLwotCXU4IGJvdW5jZWQ7CiB9OwogCiBzdGF0aWMgc3RydWN0IHsKQEAgLTE4ODEsMjMgKzE4ODAsNyBAQAogCQkgICAgSUJfUEhZU1BPUlRTVEFURV9ESVNBQkxFRCkKIAkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAogCQkJICAgICAgIFFMT0dJQ19JQl9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUpOwotCQllbHNlIHsKLQkJCXUzMiBsc3RhdGU7Ci0JCQkvKgotCQkJICogV2UgbmVlZCB0aGUgY3VycmVudCBsb2dpY2FsIGxpbmsgc3RhdGUgYmVmb3JlCi0JCQkgKiBsZmxhZ3MgYXJlIHNldCBpbiBoYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQuCi0JCQkgKi8KLQkJCWxzdGF0ZSA9IHFpYl83MzIyX2libGlua19zdGF0ZShpYmNzKTsKLQotCQkJaWYgKElTX1FNSChkZCkgJiYgIXBwZC0+Y3BzcGVjLT5ib3VuY2VkICYmCi0JCQkgICAgbHRzdGF0ZSA9PSBJQl9QSFlTUE9SVFNUQVRFX0xJTktVUCAmJgotCQkJICAgIChsc3RhdGUgPj0gSUJfUE9SVF9JTklUICYmCi0JCQkJbHN0YXRlIDw9IElCX1BPUlRfQUNUSVZFKSkgewotCQkJCXBwZC0+Y3BzcGVjLT5ib3VuY2VkID0gMTsKLQkJCQlxaWJfNzMyMl9zZXRfaWJfY2ZnKHBwZCwgUUlCX0lCX0NGR19MU1RBVEUsCi0JCQkJCUlCX0xJTktDTURfRE9XTiB8IElCX0xJTktJTklUQ01EX1BPTEwpOwotCQkJfQotCisJCWVsc2UKIAkJCS8qCiAJCQkgKiBTaW5jZSBnb2luZyBpbnRvIGEgcmVjb3Zlcnkgc3RhdGUgY2F1c2VzIHRoZSBsaW5rCiAJCQkgKiBzdGF0ZSB0byBnbyBkb3duIGFuZCBzaW5jZSByZWNvdmVyeSBpcyB0cmFuc2l0b3J5LApAQCAtMTkxMSw3ICsxODk0LDYgQEAKIAkJCSAgICBsdHN0YXRlICE9IElCX1BIWVNQT1JUU1RBVEVfUkVDT1ZFUllfV0FJVFJNVCAmJgogCQkJICAgIGx0c3RhdGUgIT0gSUJfUEhZU1BPUlRTVEFURV9SRUNPVkVSWV9JRExFKQogCQkJCXFpYl9oYW5kbGVfZV9pYnN0YXR1c2NoYW5nZWQocHBkLCBpYmNzKTsKLQkJfQogCX0KIAlpZiAoKm1zZyAmJiBpc2VycikKIAkJcWliX2Rldl9wb3J0ZXJyKGRkLCBwcGQtPnBvcnQsICIlcyBlcnJvclxuIiwgbXNnKTsKQEAgLTIzODEsNiArMjM2MywxMSBAQAogCXFpYl93cml0ZV9rcmVnX3BvcnQocHBkLCBrcnBfcmN2Y3RybCwgcHBkLT5wX3JjdmN0cmwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRkLT5jc3BlYy0+cmN2bW9kX2xvY2ssIGZsYWdzKTsKIAorCS8qIEhvbGQgdGhlIGxpbmsgc3RhdGUgbWFjaGluZSBmb3IgbWV6eiBib2FyZHMgKi8KKwlpZiAoSVNfUU1IKGRkKSB8fCBJU19RTUUoZGQpKQorCQlxaWJfc2V0X2liXzczMjJfbHN0YXRlKHBwZCwgMCwKKwkJCQkgICAgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSk7CisKIAkvKiBBbHNvIGVuYWJsZSBJQlNUQVRVU0NIRyBpbnRlcnJ1cHQuICAqLwogCXZhbCA9IHFpYl9yZWFkX2tyZWdfcG9ydChwcGQsIGtycF9lcnJtYXNrKTsKIAlxaWJfd3JpdGVfa3JlZ19wb3J0KHBwZCwga3JwX2Vycm1hc2ssCkBAIC01NzAyLDYgKzU2ODksMTEgQEAKIAkJCQlwcGQtPmNwc3BlYy0+aDFfdmFsID0gaDE7CiAJCQkvKiBub3cgY2hhbmdlIHRoZSBJQkMgYW5kIHNlcmRlcywgb3ZlcnJpZGluZyBnZW5lcmljICovCiAJCQlpbml0X3R4ZGRzX3RhYmxlKHBwZCwgMSk7CisJCQkvKiBSZS1lbmFibGUgdGhlIHBoeXNpY2FsIHN0YXRlIG1hY2hpbmUgb24gbWV6eiBib2FyZHMKKwkJCSAqIG5vdyB0aGF0IHRoZSBjb3JyZWN0IHNldHRpbmdzIGhhdmUgYmVlbiBzZXQuICovCisJCQlpZiAoSVNfUU1IKGRkKSB8fCBJU19RTUUoZGQpKQorCQkJCXFpYl9zZXRfaWJfNzMyMl9sc3RhdGUocHBkLCAwLAorCQkJCQkgICAgUUxPR0lDX0lCX0lCQ0NfTElOS0lOSVRDTURfU0xFRVApOwogCQkJYW55Kys7CiAJCX0KIAkJaWYgKCpueHQgPT0gJ1xuJykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9yYy5jCmluZGV4IDgyNDUyMzcuLmVjYTBjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcmMuYwpAQCAtMTAwNSw3ICsxMDA1LDggQEAKIAkgKiB0aGVyZSBhcmUgc3RpbGwgcmVxdWVzdHMgdGhhdCBoYXZlbid0IGJlZW4gYWNrZWQuCiAJICovCiAJaWYgKChwc24gJiBJQl9CVEhfUkVRX0FDSykgJiYgcXAtPnNfYWNrZWQgIT0gcXAtPnNfdGFpbCAmJgotCSAgICAhKHFwLT5zX2ZsYWdzICYgKFFJQl9TX1RJTUVSIHwgUUlCX1NfV0FJVF9STlIgfCBRSUJfU19XQUlUX1BTTikpKQorCSAgICAhKHFwLT5zX2ZsYWdzICYgKFFJQl9TX1RJTUVSIHwgUUlCX1NfV0FJVF9STlIgfCBRSUJfU19XQUlUX1BTTikpICYmCisJICAgIChpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBRSUJfUFJPQ0VTU19SRUNWX09LKSkKIAkJc3RhcnRfdGltZXIocXApOwogCiAJd2hpbGUgKHFwLT5zX2xhc3QgIT0gcXAtPnNfYWNrZWQpIHsKQEAgLTE0MzksNiArMTQ0MCw4IEBACiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwlpZiAoIShpYl9xaWJfc3RhdGVfb3BzW3FwLT5zdGF0ZV0gJiBRSUJfUFJPQ0VTU19SRUNWX09LKSkKKwkJZ290byBhY2tfZG9uZTsKIAogCS8qIElnbm9yZSBpbnZhbGlkIHJlc3BvbnNlcy4gKi8KIAlpZiAocWliX2NtcDI0KHBzbiwgcXAtPnNfbmV4dF9wc24pID49IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKaW5kZXggMjNjZjhmYy4uNWI4ZjU5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJZXZlbnQtPm93bmVyID0gb3duZXI7CiAKIAlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJmdhbWVwb3J0X2V2ZW50X2xpc3QpOwotCXNjaGVkdWxlX3dvcmsoJmdhbWVwb3J0X2V2ZW50X3dvcmspOworCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZnYW1lcG9ydF9ldmVudF93b3JrKTsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCA3OTg1MTE0Li4xMTkwNWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC03NSw3ICs3NSw2IEBACiAgKiBkZXYtPmV2ZW50X2xvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KICAqLwogc3RhdGljIHZvaWQgaW5wdXRfcGFzc19ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkgICAgIHN0cnVjdCBpbnB1dF9oYW5kbGVyICpzcmNfaGFuZGxlciwKIAkJCSAgICAgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXI7CkBAIC05NCwxNSArOTMsNiBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQloYW5kbGVyID0gaGFuZGxlLT5oYW5kbGVyOwotCi0JCQkvKgotCQkJICogSWYgdGhpcyBpcyB0aGUgaGFuZGxlciB0aGF0IGluamVjdGVkIHRoaXMKLQkJCSAqIHBhcnRpY3VsYXIgZXZlbnQgd2Ugd2FudCB0byBza2lwIGl0IHRvIGF2b2lkCi0JCQkgKiBmaWx0ZXJzIGZpcmluZyBhZ2FpbiBhbmQgYWdhaW4uCi0JCQkgKi8KLQkJCWlmIChoYW5kbGVyID09IHNyY19oYW5kbGVyKQotCQkJCWNvbnRpbnVlOwotCiAJCQlpZiAoIWhhbmRsZXItPmZpbHRlcikgewogCQkJCWlmIChmaWx0ZXJlZCkKIAkJCQkJYnJlYWs7CkBAIC0xMzIsNyArMTIyLDcgQEAKIAlpZiAodGVzdF9iaXQoZGV2LT5yZXBlYXRfa2V5LCBkZXYtPmtleSkgJiYKIAkgICAgaXNfZXZlbnRfc3VwcG9ydGVkKGRldi0+cmVwZWF0X2tleSwgZGV2LT5rZXliaXQsIEtFWV9NQVgpKSB7CiAKLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX0tFWSwgZGV2LT5yZXBlYXRfa2V5LCAyKTsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0tFWSwgZGV2LT5yZXBlYXRfa2V5LCAyKTsKIAogCQlpZiAoZGV2LT5zeW5jKSB7CiAJCQkvKgpAQCAtMTQxLDcgKzEzMSw3IEBACiAJCQkgKiBPdGhlcndpc2UgYXNzdW1lIHRoYXQgdGhlIGRyaXZlciB3aWxsIHNlbmQKIAkJCSAqIFNZTl9SRVBPUlQgb25jZSBpdCdzIGRvbmUuCiAJCQkgKi8KLQkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBOVUxMLCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOworCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CiAJCX0KIAogCQlpZiAoZGV2LT5yZXBbUkVQX1BFUklPRF0pCkBAIC0xNzQsNyArMTY0LDYgQEAKICNkZWZpbmUgSU5QVVRfUEFTU19UT19BTEwJKElOUFVUX1BBU1NfVE9fSEFORExFUlMgfCBJTlBVVF9QQVNTX1RPX0RFVklDRSkKIAogc3RhdGljIGludCBpbnB1dF9oYW5kbGVfYWJzX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwKLQkJCQkgIHN0cnVjdCBpbnB1dF9oYW5kbGVyICpzcmNfaGFuZGxlciwKIAkJCQkgIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKnB2YWwpCiB7CiAJYm9vbCBpc19tdF9ldmVudDsKQEAgLTIxOCwxNSArMjA3LDEzIEBACiAJLyogRmx1c2ggcGVuZGluZyAic2xvdCIgZXZlbnQgKi8KIAlpZiAoaXNfbXRfZXZlbnQgJiYgZGV2LT5zbG90ICE9IGlucHV0X2Fic19nZXRfdmFsKGRldiwgQUJTX01UX1NMT1QpKSB7CiAJCWlucHV0X2Fic19zZXRfdmFsKGRldiwgQUJTX01UX1NMT1QsIGRldi0+c2xvdCk7Ci0JCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBzcmNfaGFuZGxlciwKLQkJCQkgRVZfQUJTLCBBQlNfTVRfU0xPVCwgZGV2LT5zbG90KTsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0FCUywgQUJTX01UX1NMT1QsIGRldi0+c2xvdCk7CiAJfQogCiAJcmV0dXJuIElOUFVUX1BBU1NfVE9fSEFORExFUlM7CiB9CiAKIHN0YXRpYyB2b2lkIGlucHV0X2hhbmRsZV9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGlucHV0X2hhbmRsZXIgKnNyY19oYW5kbGVyLAogCQkJICAgICAgIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQogewogCWludCBkaXNwb3NpdGlvbiA9IElOUFVUX0lHTk9SRV9FVkVOVDsKQEAgLTI3OSw4ICsyNjYsNyBAQAogCiAJY2FzZSBFVl9BQlM6CiAJCWlmIChpc19ldmVudF9zdXBwb3J0ZWQoY29kZSwgZGV2LT5hYnNiaXQsIEFCU19NQVgpKQotCQkJZGlzcG9zaXRpb24gPSBpbnB1dF9oYW5kbGVfYWJzX2V2ZW50KGRldiwgc3JjX2hhbmRsZXIsCi0JCQkJCQkJICAgICBjb2RlLCAmdmFsdWUpOworCQkJZGlzcG9zaXRpb24gPSBpbnB1dF9oYW5kbGVfYWJzX2V2ZW50KGRldiwgY29kZSwgJnZhbHVlKTsKIAogCQlicmVhazsKIApAQCAtMzM4LDcgKzMyNCw3IEBACiAJCWRldi0+ZXZlbnQoZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiAKIAlpZiAoZGlzcG9zaXRpb24gJiBJTlBVVF9QQVNTX1RPX0hBTkRMRVJTKQotCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgc3JjX2hhbmRsZXIsIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwkJaW5wdXRfcGFzc19ldmVudChkZXYsIHR5cGUsIGNvZGUsIHZhbHVlKTsKIH0KIAogLyoqCkBAIC0zNjcsNyArMzUzLDcgQEAKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ldmVudF9sb2NrLCBmbGFncyk7CiAJCWFkZF9pbnB1dF9yYW5kb21uZXNzKHR5cGUsIGNvZGUsIHZhbHVlKTsKLQkJaW5wdXRfaGFuZGxlX2V2ZW50KGRldiwgTlVMTCwgdHlwZSwgY29kZSwgdmFsdWUpOworCQlpbnB1dF9oYW5kbGVfZXZlbnQoZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwogCX0KIH0KQEAgLTM5Nyw4ICszODMsNyBAQAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWdyYWIgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5ncmFiKTsKIAkJaWYgKCFncmFiIHx8IGdyYWIgPT0gaGFuZGxlKQotCQkJaW5wdXRfaGFuZGxlX2V2ZW50KGRldiwgaGFuZGxlLT5oYW5kbGVyLAotCQkJCQkgICB0eXBlLCBjb2RlLCB2YWx1ZSk7CisJCQlpbnB1dF9oYW5kbGVfZXZlbnQoZGV2LCB0eXBlLCBjb2RlLCB2YWx1ZSk7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZXZlbnRfbG9jaywgZmxhZ3MpOwpAQCAtNjExLDEwICs1OTYsMTAgQEAKIAkJZm9yIChjb2RlID0gMDsgY29kZSA8PSBLRVlfTUFYOyBjb2RlKyspIHsKIAkJCWlmIChpc19ldmVudF9zdXBwb3J0ZWQoY29kZSwgZGV2LT5rZXliaXQsIEtFWV9NQVgpICYmCiAJCQkgICAgX190ZXN0X2FuZF9jbGVhcl9iaXQoY29kZSwgZGV2LT5rZXkpKSB7Ci0JCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX0tFWSwgY29kZSwgMCk7CisJCQkJaW5wdXRfcGFzc19ldmVudChkZXYsIEVWX0tFWSwgY29kZSwgMCk7CiAJCQl9CiAJCX0KLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMSk7CisJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOwogCX0KIH0KIApAQCAtODg5LDkgKzg3NCw5IEBACiAJICAgICFpc19ldmVudF9zdXBwb3J0ZWQob2xkX2tleWNvZGUsIGRldi0+a2V5Yml0LCBLRVlfTUFYKSAmJgogCSAgICBfX3Rlc3RfYW5kX2NsZWFyX2JpdChvbGRfa2V5Y29kZSwgZGV2LT5rZXkpKSB7CiAKLQkJaW5wdXRfcGFzc19ldmVudChkZXYsIE5VTEwsIEVWX0tFWSwgb2xkX2tleWNvZGUsIDApOworCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgRVZfS0VZLCBvbGRfa2V5Y29kZSwgMCk7CiAJCWlmIChkZXYtPnN5bmMpCi0JCQlpbnB1dF9wYXNzX2V2ZW50KGRldiwgTlVMTCwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKwkJCWlucHV0X3Bhc3NfZXZlbnQoZGV2LCBFVl9TWU4sIFNZTl9SRVBPUlQsIDEpOwogCX0KIAogIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCA0MTc1MDczLi5jN2E5MjAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0zNDMsNiArMzQzLDE2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBubWstc2tlLWtleXBhZC4KIAorY29uZmlnIEtFWUJPQVJEX1RFR1JBCisJdHJpc3RhdGUgIk5WSURJQSBUZWdyYSBpbnRlcm5hbCBtYXRyaXgga2V5Ym9hcmQgY29udHJvbGxlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gQVJDSF9URUdSQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgbWF0cml4IGtleWJvYXJkIGNvbm5lY3RlZCBkaXJlY3RseQorCSAgdG8gdGhlIGludGVybmFsIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gVGVncmEgU29Dcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGVncmEta2JjLgorCiBjb25maWcgS0VZQk9BUkRfT1BFTkNPUkVTCiAJdHJpc3RhdGUgIk9wZW5Db3JlcyBLZXlib2FyZCBDb250cm9sbGVyIgogCWhlbHAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCmluZGV4IDRlNTU3MWIuLjQ2OGM2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQpAQCAtNDIsNiArNDIsNyBAQAogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZKQkJKz0gc3Rvd2F3YXkubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1NVTktCRCkJCSs9IHN1bmtiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVEMzNTg5WCkJCSs9IHRjMzU4OXgta2V5cGFkLm8KK29iai0kKENPTkZJR19LRVlCT0FSRF9URUdSQSkJCSs9IHRlZ3JhLWtiYy5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfVE5FVFYxMDdYKQkrPSB0bmV0djEwN3gta2V5cGFkLm8KIG9iai0kKENPTkZJR19LRVlCT0FSRF9UV0w0MDMwKQkJKz0gdHdsNDAzMF9rZXlwYWQubwogb2JqLSQoQ09ORklHX0tFWUJPQVJEX1hUS0JEKQkJKz0geHRrYmQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKaW5kZXggNjA2OWFiZS4uZWIzMDA2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAlzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiAqYnV0dG9uID0gYmRhdGEtPmJ1dHRvbjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IGJkYXRhLT5pbnB1dDsKIAl1bnNpZ25lZCBpbnQgdHlwZSA9IGJ1dHRvbi0+dHlwZSA/OiBFVl9LRVk7Ci0JaW50IHN0YXRlID0gKGdwaW9fZ2V0X3ZhbHVlKGJ1dHRvbi0+Z3BpbykgPyAxIDogMCkgXiBidXR0b24tPmFjdGl2ZV9sb3c7CisJaW50IHN0YXRlID0gKGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKGJ1dHRvbi0+Z3BpbykgPyAxIDogMCkgXiBidXR0b24tPmFjdGl2ZV9sb3c7CiAKIAlpbnB1dF9ldmVudChpbnB1dCwgdHlwZSwgYnV0dG9uLT5jb2RlLCAhIXN0YXRlKTsKIAlpbnB1dF9zeW5jKGlucHV0KTsKQEAgLTQxMCw4ICs0MTAsOCBAQAogCWlmICghYnV0dG9uLT5jYW5fZGlzYWJsZSkKIAkJaXJxZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CiAKLQllcnJvciA9IHJlcXVlc3RfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgaXJxZmxhZ3MsIGRlc2MsIGJkYXRhKTsKLQlpZiAoZXJyb3IpIHsKKwllcnJvciA9IHJlcXVlc3RfYW55X2NvbnRleHRfaXJxKGlycSwgZ3Bpb19rZXlzX2lzciwgaXJxZmxhZ3MsIGRlc2MsIGJkYXRhKTsKKwlpZiAoZXJyb3IgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGNsYWltIGlycSAlZDsgZXJyb3IgJWRcbiIsCiAJCQlpcnEsIGVycm9yKTsKIAkJZ290byBmYWlsMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdGVncmEta2JjLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5Y2U5MDMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RlZ3JhLWtiYy5jCkBAIC0wLDAgKzEsNzgzIEBACisvKgorICogS2V5Ym9hcmQgY2xhc3MgaW5wdXQgZHJpdmVyIGZvciB0aGUgTlZJRElBIFRlZ3JhIFNvQyBpbnRlcm5hbCBtYXRyaXgKKyAqIGtleWJvYXJkIGNvbnRyb2xsZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMSwgTlZJRElBIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPG1hY2gvY2xrLmg+CisjaW5jbHVkZSA8bWFjaC9rYmMuaD4KKworI2RlZmluZSBLQkNfTUFYX0RFQk9VTkNFX0NOVAkweDNmZnUKKworLyogS0JDIHJvdyBzY2FuIHRpbWUgYW5kIGRlbGF5IGZvciBiZWdpbm5pbmcgdGhlIHJvdyBzY2FuLiAqLworI2RlZmluZSBLQkNfUk9XX1NDQU5fVElNRQkxNgorI2RlZmluZSBLQkNfUk9XX1NDQU5fRExZCTUKKworLyogS0JDIHVzZXMgYSAzMktIeiBjbG9jayBzbyBhIGN5Y2xlID0gMS8zMktoeiAqLworI2RlZmluZSBLQkNfQ1lDTEVfVVNFQwkzMgorCisvKiBLQkMgUmVnaXN0ZXJzICovCisKKy8qIEtCQyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIEtCQ19DT05UUk9MXzAJMHgwCisjZGVmaW5lIEtCQ19GSUZPX1RIX0NOVF9TSElGVChjbnQpCShjbnQgPDwgMTQpCisjZGVmaW5lIEtCQ19ERUJPVU5DRV9DTlRfU0hJRlQoY250KQkoY250IDw8IDQpCisjZGVmaW5lIEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTgkoMSA8PCAzKQorI2RlZmluZSBLQkNfQ09OVFJPTF9LQkNfRU4JCSgxIDw8IDApCisKKy8qIEtCQyBJbnRlcnJ1cHQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgS0JDX0lOVF8wCTB4NAorI2RlZmluZSBLQkNfSU5UX0ZJRk9fQ05UX0lOVF9TVEFUVVMJKDEgPDwgMikKKworI2RlZmluZSBLQkNfUk9XX0NGRzBfMAkweDgKKyNkZWZpbmUgS0JDX0NPTF9DRkcwXzAJMHgxOAorI2RlZmluZSBLQkNfSU5JVF9ETFlfMAkweDI4CisjZGVmaW5lIEtCQ19SUFRfRExZXzAJMHgyYworI2RlZmluZSBLQkNfS1BfRU5UMF8wCTB4MzAKKyNkZWZpbmUgS0JDX0tQX0VOVDFfMAkweDM0CisjZGVmaW5lIEtCQ19ST1cwX01BU0tfMAkweDM4CisKKyNkZWZpbmUgS0JDX1JPV19TSElGVAkzCisKK3N0cnVjdCB0ZWdyYV9rYmMgeworCXZvaWQgX19pb21lbSAqbW1pbzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IHdha2VfZW5hYmxlX3Jvd3M7CisJdW5zaWduZWQgaW50IHdha2VfZW5hYmxlX2NvbHM7CisJc3BpbmxvY2tfdCBsb2NrOworCXVuc2lnbmVkIGludCByZXBvbGxfZGx5OworCXVuc2lnbmVkIGxvbmcgY3BfZGx5X2ppZmZpZXM7CisJYm9vbCB1c2VfZm5fbWFwOworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJdW5zaWduZWQgc2hvcnQga2V5Y29kZVtLQkNfTUFYX0tFWSAqIDJdOworCXVuc2lnbmVkIHNob3J0IGN1cnJlbnRfa2V5c1tLQkNfTUFYX0tQRU5UXTsKKwl1bnNpZ25lZCBpbnQgbnVtX3ByZXNzZWRfa2V5czsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlzdHJ1Y3QgY2xrICpjbGs7Cit9OworCitzdGF0aWMgY29uc3QgdTMyIHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcFtdID0geworCUtFWSgwLCAyLCBLRVlfVyksCisJS0VZKDAsIDMsIEtFWV9TKSwKKwlLRVkoMCwgNCwgS0VZX0EpLAorCUtFWSgwLCA1LCBLRVlfWiksCisJS0VZKDAsIDcsIEtFWV9GTiksCisKKwlLRVkoMSwgNywgS0VZX0xFRlRNRVRBKSwKKworCUtFWSgyLCA2LCBLRVlfUklHSFRBTFQpLAorCUtFWSgyLCA3LCBLRVlfTEVGVEFMVCksCisKKwlLRVkoMywgMCwgS0VZXzUpLAorCUtFWSgzLCAxLCBLRVlfNCksCisJS0VZKDMsIDIsIEtFWV9SKSwKKwlLRVkoMywgMywgS0VZX0UpLAorCUtFWSgzLCA0LCBLRVlfRiksCisJS0VZKDMsIDUsIEtFWV9EKSwKKwlLRVkoMywgNiwgS0VZX1gpLAorCisJS0VZKDQsIDAsIEtFWV83KSwKKwlLRVkoNCwgMSwgS0VZXzYpLAorCUtFWSg0LCAyLCBLRVlfVCksCisJS0VZKDQsIDMsIEtFWV9IKSwKKwlLRVkoNCwgNCwgS0VZX0cpLAorCUtFWSg0LCA1LCBLRVlfViksCisJS0VZKDQsIDYsIEtFWV9DKSwKKwlLRVkoNCwgNywgS0VZX1NQQUNFKSwKKworCUtFWSg1LCAwLCBLRVlfOSksCisJS0VZKDUsIDEsIEtFWV84KSwKKwlLRVkoNSwgMiwgS0VZX1UpLAorCUtFWSg1LCAzLCBLRVlfWSksCisJS0VZKDUsIDQsIEtFWV9KKSwKKwlLRVkoNSwgNSwgS0VZX04pLAorCUtFWSg1LCA2LCBLRVlfQiksCisJS0VZKDUsIDcsIEtFWV9CQUNLU0xBU0gpLAorCisJS0VZKDYsIDAsIEtFWV9NSU5VUyksCisJS0VZKDYsIDEsIEtFWV8wKSwKKwlLRVkoNiwgMiwgS0VZX08pLAorCUtFWSg2LCAzLCBLRVlfSSksCisJS0VZKDYsIDQsIEtFWV9MKSwKKwlLRVkoNiwgNSwgS0VZX0spLAorCUtFWSg2LCA2LCBLRVlfQ09NTUEpLAorCUtFWSg2LCA3LCBLRVlfTSksCisKKwlLRVkoNywgMSwgS0VZX0VRVUFMKSwKKwlLRVkoNywgMiwgS0VZX1JJR0hUQlJBQ0UpLAorCUtFWSg3LCAzLCBLRVlfRU5URVIpLAorCUtFWSg3LCA3LCBLRVlfTUVOVSksCisKKwlLRVkoOCwgNCwgS0VZX1JJR0hUU0hJRlQpLAorCUtFWSg4LCA1LCBLRVlfTEVGVFNISUZUKSwKKworCUtFWSg5LCA1LCBLRVlfUklHSFRDVFJMKSwKKwlLRVkoOSwgNywgS0VZX0xFRlRDVFJMKSwKKworCUtFWSgxMSwgMCwgS0VZX0xFRlRCUkFDRSksCisJS0VZKDExLCAxLCBLRVlfUCksCisJS0VZKDExLCAyLCBLRVlfQVBPU1RST1BIRSksCisJS0VZKDExLCAzLCBLRVlfU0VNSUNPTE9OKSwKKwlLRVkoMTEsIDQsIEtFWV9TTEFTSCksCisJS0VZKDExLCA1LCBLRVlfRE9UKSwKKworCUtFWSgxMiwgMCwgS0VZX0YxMCksCisJS0VZKDEyLCAxLCBLRVlfRjkpLAorCUtFWSgxMiwgMiwgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDEyLCAzLCBLRVlfMyksCisJS0VZKDEyLCA0LCBLRVlfMiksCisJS0VZKDEyLCA1LCBLRVlfVVApLAorCUtFWSgxMiwgNiwgS0VZX1BSSU5UKSwKKwlLRVkoMTIsIDcsIEtFWV9QQVVTRSksCisKKwlLRVkoMTMsIDAsIEtFWV9JTlNFUlQpLAorCUtFWSgxMywgMSwgS0VZX0RFTEVURSksCisJS0VZKDEzLCAzLCBLRVlfUEFHRVVQKSwKKwlLRVkoMTMsIDQsIEtFWV9QQUdFRE9XTiksCisJS0VZKDEzLCA1LCBLRVlfUklHSFQpLAorCUtFWSgxMywgNiwgS0VZX0RPV04pLAorCUtFWSgxMywgNywgS0VZX0xFRlQpLAorCisJS0VZKDE0LCAwLCBLRVlfRjExKSwKKwlLRVkoMTQsIDEsIEtFWV9GMTIpLAorCUtFWSgxNCwgMiwgS0VZX0Y4KSwKKwlLRVkoMTQsIDMsIEtFWV9RKSwKKwlLRVkoMTQsIDQsIEtFWV9GNCksCisJS0VZKDE0LCA1LCBLRVlfRjMpLAorCUtFWSgxNCwgNiwgS0VZXzEpLAorCUtFWSgxNCwgNywgS0VZX0Y3KSwKKworCUtFWSgxNSwgMCwgS0VZX0VTQyksCisJS0VZKDE1LCAxLCBLRVlfR1JBVkUpLAorCUtFWSgxNSwgMiwgS0VZX0Y1KSwKKwlLRVkoMTUsIDMsIEtFWV9UQUIpLAorCUtFWSgxNSwgNCwgS0VZX0YxKSwKKwlLRVkoMTUsIDUsIEtFWV9GMiksCisJS0VZKDE1LCA2LCBLRVlfQ0FQU0xPQ0spLAorCUtFWSgxNSwgNywgS0VZX0Y2KSwKKworCS8qIFNvZnR3YXJlIEhhbmRsZWQgRnVuY3Rpb24gS2V5cyAqLworCUtFWSgyMCwgMCwgS0VZX0tQNyksCisKKwlLRVkoMjEsIDAsIEtFWV9LUDkpLAorCUtFWSgyMSwgMSwgS0VZX0tQOCksCisJS0VZKDIxLCAyLCBLRVlfS1A0KSwKKwlLRVkoMjEsIDQsIEtFWV9LUDEpLAorCisJS0VZKDIyLCAxLCBLRVlfS1BTTEFTSCksCisJS0VZKDIyLCAyLCBLRVlfS1A2KSwKKwlLRVkoMjIsIDMsIEtFWV9LUDUpLAorCUtFWSgyMiwgNCwgS0VZX0tQMyksCisJS0VZKDIyLCA1LCBLRVlfS1AyKSwKKwlLRVkoMjIsIDcsIEtFWV9LUDApLAorCisJS0VZKDI3LCAxLCBLRVlfS1BBU1RFUklTSyksCisJS0VZKDI3LCAzLCBLRVlfS1BNSU5VUyksCisJS0VZKDI3LCA0LCBLRVlfS1BQTFVTKSwKKwlLRVkoMjcsIDUsIEtFWV9LUERPVCksCisKKwlLRVkoMjgsIDUsIEtFWV9WT0xVTUVVUCksCisKKwlLRVkoMjksIDMsIEtFWV9IT01FKSwKKwlLRVkoMjksIDQsIEtFWV9FTkQpLAorCUtFWSgyOSwgNSwgS0VZX0JSSUdIVE5FU1NET1dOKSwKKwlLRVkoMjksIDYsIEtFWV9WT0xVTUVET1dOKSwKKwlLRVkoMjksIDcsIEtFWV9CUklHSFRORVNTVVApLAorCisJS0VZKDMwLCAwLCBLRVlfTlVNTE9DSyksCisJS0VZKDMwLCAxLCBLRVlfU0NST0xMTE9DSyksCisJS0VZKDMwLCAyLCBLRVlfTVVURSksCisKKwlLRVkoMzEsIDQsIEtFWV9IRUxQKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIHRlZ3JhX2tiY19kZWZhdWx0X2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gdGVncmFfa2JjX2RlZmF1bHRfa2V5bWFwLAorCS5rZXltYXBfc2l6ZQk9IEFSUkFZX1NJWkUodGVncmFfa2JjX2RlZmF1bHRfa2V5bWFwKSwKK307CisKK3N0YXRpYyB2b2lkIHRlZ3JhX2tiY19yZXBvcnRfcmVsZWFzZWRfa2V5cyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkJICAgdW5zaWduZWQgc2hvcnQgb2xkX2tleWNvZGVzW10sCisJCQkJCSAgIHVuc2lnbmVkIGludCBvbGRfbnVtX2tleXMsCisJCQkJCSAgIHVuc2lnbmVkIHNob3J0IG5ld19rZXljb2Rlc1tdLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbmV3X251bV9rZXlzKQoreworCXVuc2lnbmVkIGludCBpLCBqOworCisJZm9yIChpID0gMDsgaSA8IG9sZF9udW1fa2V5czsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBuZXdfbnVtX2tleXM7IGorKykKKwkJCWlmIChvbGRfa2V5Y29kZXNbaV0gPT0gbmV3X2tleWNvZGVzW2pdKQorCQkJCWJyZWFrOworCisJCWlmIChqID09IG5ld19udW1fa2V5cykKKwkJCWlucHV0X3JlcG9ydF9rZXkoaW5wdXQsIG9sZF9rZXljb2Rlc1tpXSwgMCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X3ByZXNzZWRfa2V5cyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCwKKwkJCQkJICB1bnNpZ25lZCBjaGFyIHNjYW5jb2Rlc1tdLAorCQkJCQkgIHVuc2lnbmVkIHNob3J0IGtleWNvZGVzW10sCisJCQkJCSAgdW5zaWduZWQgaW50IG51bV9wcmVzc2VkX2tleXMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3ByZXNzZWRfa2V5czsgaSsrKSB7CisJCWlucHV0X2V2ZW50KGlucHV0LCBFVl9NU0MsIE1TQ19TQ0FOLCBzY2FuY29kZXNbaV0pOworCQlpbnB1dF9yZXBvcnRfa2V5KGlucHV0LCBrZXljb2Rlc1tpXSwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfcmVwb3J0X2tleXMoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCXVuc2lnbmVkIGNoYXIgc2NhbmNvZGVzW0tCQ19NQVhfS1BFTlRdOworCXVuc2lnbmVkIHNob3J0IGtleWNvZGVzW0tCQ19NQVhfS1BFTlRdOworCXUzMiB2YWwgPSAwOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBudW1fZG93biA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIGZuX2tleXByZXNzID0gZmFsc2U7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IEtCQ19NQVhfS1BFTlQ7IGkrKykgeworCQlpZiAoKGkgJSA0KSA9PSAwKQorCQkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0tQX0VOVDBfMCArIGkpOworCisJCWlmICh2YWwgJiAweDgwKSB7CisJCQl1bnNpZ25lZCBpbnQgY29sID0gdmFsICYgMHgwNzsKKwkJCXVuc2lnbmVkIGludCByb3cgPSAodmFsID4+IDMpICYgMHgwZjsKKwkJCXVuc2lnbmVkIGNoYXIgc2NhbmNvZGUgPQorCQkJCU1BVFJJWF9TQ0FOX0NPREUocm93LCBjb2wsIEtCQ19ST1dfU0hJRlQpOworCisJCQlzY2FuY29kZXNbbnVtX2Rvd25dID0gc2NhbmNvZGU7CisJCQlrZXljb2Rlc1tudW1fZG93bl0gPSBrYmMtPmtleWNvZGVbc2NhbmNvZGVdOworCQkJLyogSWYgZHJpdmVyIHVzZXMgRm4gbWFwLCBkbyBub3QgcmVwb3J0IHRoZSBGbiBrZXkuICovCisJCQlpZiAoKGtleWNvZGVzW251bV9kb3duXSA9PSBLRVlfRk4pICYmIGtiYy0+dXNlX2ZuX21hcCkKKwkJCQlmbl9rZXlwcmVzcyA9IHRydWU7CisJCQllbHNlCisJCQkJbnVtX2Rvd24rKzsKKwkJfQorCisJCXZhbCA+Pj0gODsKKwl9CisKKwkvKgorCSAqIElmIHRoZSBwbGF0Zm9ybSB1c2VzIEZuIGtleW1hcHMsIHRyYW5zbGF0ZSBrZXlzIG9uIGEgRm4ga2V5cHJlc3MuCisJICogRnVuY3Rpb24ga2V5Y29kZXMgYXJlIEtCQ19NQVhfS0VZIGFwYXJ0IGZyb20gdGhlIHBsYWluIGtleWNvZGVzLgorCSAqLworCWlmIChmbl9rZXlwcmVzcykgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Rvd247IGkrKykgeworCQkJc2NhbmNvZGVzW2ldICs9IEtCQ19NQVhfS0VZOworCQkJa2V5Y29kZXNbaV0gPSBrYmMtPmtleWNvZGVbc2NhbmNvZGVzW2ldXTsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCisJdGVncmFfa2JjX3JlcG9ydF9yZWxlYXNlZF9rZXlzKGtiYy0+aWRldiwKKwkJCQkgICAgICAga2JjLT5jdXJyZW50X2tleXMsIGtiYy0+bnVtX3ByZXNzZWRfa2V5cywKKwkJCQkgICAgICAga2V5Y29kZXMsIG51bV9kb3duKTsKKwl0ZWdyYV9rYmNfcmVwb3J0X3ByZXNzZWRfa2V5cyhrYmMtPmlkZXYsIHNjYW5jb2Rlcywga2V5Y29kZXMsIG51bV9kb3duKTsKKwlpbnB1dF9zeW5jKGtiYy0+aWRldik7CisKKwltZW1jcHkoa2JjLT5jdXJyZW50X2tleXMsIGtleWNvZGVzLCBzaXplb2Yoa2JjLT5jdXJyZW50X2tleXMpKTsKKwlrYmMtPm51bV9wcmVzc2VkX2tleXMgPSBudW1fZG93bjsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX2tleXByZXNzX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSAoc3RydWN0IHRlZ3JhX2tiYyAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCXVuc2lnbmVkIGludCBpOworCisJdmFsID0gKHJlYWRsKGtiYy0+bW1pbyArIEtCQ19JTlRfMCkgPj4gNCkgJiAweGY7CisJaWYgKHZhbCkgeworCQl1bnNpZ25lZCBsb25nIGRseTsKKworCQl0ZWdyYV9rYmNfcmVwb3J0X2tleXMoa2JjKTsKKworCQkvKgorCQkgKiBJZiBtb3JlIHRoYW4gb25lIGtleXMgYXJlIHByZXNzZWQgd2UgbmVlZCBub3Qgd2FpdAorCQkgKiBmb3IgdGhlIHJlcG9sbCBkZWxheS4KKwkJICovCisJCWRseSA9ICh2YWwgPT0gMSkgPyBrYmMtPnJlcG9sbF9kbHkgOiAxOworCQltb2RfdGltZXIoJmtiYy0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRseSkpOworCX0gZWxzZSB7CisJCS8qIFJlbGVhc2UgYW55IHByZXNzZWQga2V5cyBhbmQgZXhpdCB0aGUgcG9sbGluZyBsb29wICovCisJCWZvciAoaSA9IDA7IGkgPCBrYmMtPm51bV9wcmVzc2VkX2tleXM7IGkrKykKKwkJCWlucHV0X3JlcG9ydF9rZXkoa2JjLT5pZGV2LCBrYmMtPmN1cnJlbnRfa2V5c1tpXSwgMCk7CisJCWlucHV0X3N5bmMoa2JjLT5pZGV2KTsKKworCQlrYmMtPm51bV9wcmVzc2VkX2tleXMgPSAwOworCisJCS8qIEFsbCBrZXlzIGFyZSByZWxlYXNlZCBzbyBlbmFibGUgdGhlIGtleXByZXNzIGludGVycnVwdCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgma2JjLT5sb2NrLCBmbGFncyk7CisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCQl2YWwgfD0gS0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOworCQl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2JjLT5sb2NrLCBmbGFncyk7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgdGVncmFfa2JjX2lzcihpbnQgaXJxLCB2b2lkICphcmdzKQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IGFyZ3M7CisJdTMyIHZhbCwgY3RsOworCisJLyoKKwkgKiBVbnRpbCBhbGwga2V5cyBhcmUgcmVsZWFzZWQsIGRlZmVyIGZ1cnRoZXIgcHJvY2Vzc2luZyB0bworCSAqIHRoZSBwb2xsaW5nIGxvb3AgaW4gdGVncmFfa2JjX2tleXByZXNzX3RpbWVyCisJICovCisJY3RsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJY3RsICY9IH5LQkNfQ09OVFJPTF9GSUZPX0NOVF9JTlRfRU47CisJd3JpdGVsKGN0bCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisKKwkvKgorCSAqIFF1aWNrbHkgYmFpbCBvdXQgJiByZWVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZSBmaWZvIHRocmVzaG9sZAorCSAqIGNvdW50IGludGVycnVwdCB3YXNuJ3QgdGhlIGludGVycnVwdCBzb3VyY2UKKwkgKi8KKwl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19JTlRfMCk7CisKKwlpZiAodmFsICYgS0JDX0lOVF9GSUZPX0NOVF9JTlRfU1RBVFVTKSB7CisJCS8qCisJCSAqIFNjaGVkdWxlIHRpbWVyIHRvIHJ1biB3aGVuIGhhcmR3YXJlIGlzIGluIGNvbnRpbnVvdXMKKwkJICogcG9sbGluZyBtb2RlLgorCQkgKi8KKwkJbW9kX3RpbWVyKCZrYmMtPnRpbWVyLCBqaWZmaWVzICsga2JjLT5jcF9kbHlfamlmZmllcyk7CisJfSBlbHNlIHsKKwkJY3RsIHw9IEtCQ19DT05UUk9MX0ZJRk9fQ05UX0lOVF9FTjsKKwkJd3JpdGVsKGN0bCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfc2V0dXBfd2FrZWtleXMoc3RydWN0IHRlZ3JhX2tiYyAqa2JjLCBib29sIGZpbHRlcikKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2JjLT5wZGF0YTsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgcnN0X3ZhbDsKKworCUJVR19PTihwZGF0YS0+d2FrZV9jbnQgPiBLQkNfTUFYX0tFWSk7CisJcnN0X3ZhbCA9IChmaWx0ZXIgJiYgcGRhdGEtPndha2VfY250KSA/IH4wIDogMDsKKworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX1JPVzsgaSsrKQorCQl3cml0ZWwocnN0X3ZhbCwga2JjLT5tbWlvICsgS0JDX1JPVzBfTUFTS18wICsgaSAqIDQpOworCisJaWYgKGZpbHRlcikgeworCQlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPndha2VfY250OyBpKyspIHsKKwkJCXUzMiB2YWwsIGFkZHI7CisJCQlhZGRyID0gcGRhdGEtPndha2VfY2ZnW2ldLnJvdyAqIDQgKyBLQkNfUk9XMF9NQVNLXzA7CisJCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBhZGRyKTsKKwkJCXZhbCAmPSB+KDEgPDwgcGRhdGEtPndha2VfY2ZnW2ldLmNvbCk7CisJCQl3cml0ZWwodmFsLCBrYmMtPm1taW8gKyBhZGRyKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX2NvbmZpZ19waW5zKHN0cnVjdCB0ZWdyYV9rYmMgKmtiYykKK3sKKwljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0ga2JjLT5wZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX0dQSU87IGkrKykgeworCQl1MzIgcl9zaGZ0ID0gNSAqIChpICUgNik7CisJCXUzMiBjX3NoZnQgPSA0ICogKGkgJSA4KTsKKwkJdTMyIHJfbWFzayA9IDB4MWYgPDwgcl9zaGZ0OworCQl1MzIgY19tYXNrID0gMHgwZiA8PCBjX3NoZnQ7CisJCXUzMiByX29mZnMgPSAoaSAvIDYpICogNCArIEtCQ19ST1dfQ0ZHMF8wOworCQl1MzIgY19vZmZzID0gKGkgLyA4KSAqIDQgKyBLQkNfQ09MX0NGRzBfMDsKKwkJdTMyIHJvd19jZmcgPSByZWFkbChrYmMtPm1taW8gKyByX29mZnMpOworCQl1MzIgY29sX2NmZyA9IHJlYWRsKGtiYy0+bW1pbyArIGNfb2Zmcyk7CisKKwkJcm93X2NmZyAmPSB+cl9tYXNrOworCQljb2xfY2ZnICY9IH5jX21hc2s7CisKKwkJaWYgKHBkYXRhLT5waW5fY2ZnW2ldLmlzX3JvdykKKwkJCXJvd19jZmcgfD0gKChwZGF0YS0+cGluX2NmZ1tpXS5udW0gPDwgMSkgfCAxKSA8PCByX3NoZnQ7CisJCWVsc2UKKwkJCWNvbF9jZmcgfD0gKChwZGF0YS0+cGluX2NmZ1tpXS5udW0gPDwgMSkgfCAxKSA8PCBjX3NoZnQ7CisKKwkJd3JpdGVsKHJvd19jZmcsIGtiYy0+bW1pbyArIHJfb2Zmcyk7CisJCXdyaXRlbChjb2xfY2ZnLCBrYmMtPm1taW8gKyBjX29mZnMpOworCX0KK30KKworc3RhdGljIGludCB0ZWdyYV9rYmNfc3RhcnQoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCWNvbnN0IHN0cnVjdCB0ZWdyYV9rYmNfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBrYmMtPnBkYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGRlYm91bmNlX2NudDsKKwl1MzIgdmFsID0gMDsKKworCWNsa19lbmFibGUoa2JjLT5jbGspOworCisJLyogUmVzZXQgdGhlIEtCQyBjb250cm9sbGVyIHRvIGNsZWFyIGFsbCBwcmV2aW91cyBzdGF0dXMuKi8KKwl0ZWdyYV9wZXJpcGhfcmVzZXRfYXNzZXJ0KGtiYy0+Y2xrKTsKKwl1ZGVsYXkoMTAwKTsKKwl0ZWdyYV9wZXJpcGhfcmVzZXRfZGVhc3NlcnQoa2JjLT5jbGspOworCXVkZWxheSgxMDApOworCisJdGVncmFfa2JjX2NvbmZpZ19waW5zKGtiYyk7CisJdGVncmFfa2JjX3NldHVwX3dha2VrZXlzKGtiYywgZmFsc2UpOworCisJd3JpdGVsKHBkYXRhLT5yZXBlYXRfY250LCBrYmMtPm1taW8gKyBLQkNfUlBUX0RMWV8wKTsKKworCS8qIEtleWJvYXJkIGRlYm91bmNlIGNvdW50IGlzIG1heGltdW0gb2YgMTIgYml0cy4gKi8KKwlkZWJvdW5jZV9jbnQgPSBtaW4ocGRhdGEtPmRlYm91bmNlX2NudCwgS0JDX01BWF9ERUJPVU5DRV9DTlQpOworCXZhbCA9IEtCQ19ERUJPVU5DRV9DTlRfU0hJRlQoZGVib3VuY2VfY250KTsKKwl2YWwgfD0gS0JDX0ZJRk9fVEhfQ05UX1NISUZUKDEpOyAvKiBzZXQgZmlmbyBpbnRlcnJ1cHQgdGhyZXNob2xkIHRvIDEgKi8KKwl2YWwgfD0gS0JDX0NPTlRST0xfRklGT19DTlRfSU5UX0VOOyAgLyogaW50ZXJydXB0IG9uIEZJRk8gdGhyZXNob2xkICovCisJdmFsIHw9IEtCQ19DT05UUk9MX0tCQ19FTjsgICAgIC8qIGVuYWJsZSAqLworCXdyaXRlbCh2YWwsIGtiYy0+bW1pbyArIEtCQ19DT05UUk9MXzApOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBkZWxheShucykgZnJvbSBpbnRlcnJ1cHQgbW9kZSB0byBjb250aW51b3VzIHBvbGxpbmcKKwkgKiBtb2RlIHNvIHRoZSB0aW1lciByb3V0aW5lIGlzIHNjaGVkdWxlZCBhcHByb3ByaWF0ZWx5LgorCSAqLworCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19JTklUX0RMWV8wKTsKKwlrYmMtPmNwX2RseV9qaWZmaWVzID0gdXNlY3NfdG9famlmZmllcygodmFsICYgMHhmZmZmZikgKiAzMik7CisKKwlrYmMtPm51bV9wcmVzc2VkX2tleXMgPSAwOworCisJLyoKKwkgKiBBdG9taWNhbGx5IGNsZWFyIG91dCBhbnkgcmVtYWluaW5nIGVudHJpZXMgaW4gdGhlIGtleSBGSUZPCisJICogYW5kIGVuYWJsZSBrZXlib2FyZCBpbnRlcnJ1cHRzLgorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoMSkgeworCQl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCQl2YWwgPj49IDQ7CisJCWlmICghdmFsKQorCQkJYnJlYWs7CisKKwkJdmFsID0gcmVhZGwoa2JjLT5tbWlvICsgS0JDX0tQX0VOVDBfMCk7CisJCXZhbCA9IHJlYWRsKGtiYy0+bW1pbyArIEtCQ19LUF9FTlQxXzApOworCX0KKwl3cml0ZWwoMHg3LCBrYmMtPm1taW8gKyBLQkNfSU5UXzApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmtiYy0+bG9jaywgZmxhZ3MpOworCisJZW5hYmxlX2lycShrYmMtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGVncmFfa2JjX3N0b3Aoc3RydWN0IHRlZ3JhX2tiYyAqa2JjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZrYmMtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSByZWFkbChrYmMtPm1taW8gKyBLQkNfQ09OVFJPTF8wKTsKKwl2YWwgJj0gfjE7CisJd3JpdGVsKHZhbCwga2JjLT5tbWlvICsgS0JDX0NPTlRST0xfMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma2JjLT5sb2NrLCBmbGFncyk7CisKKwlkaXNhYmxlX2lycShrYmMtPmlycSk7CisJZGVsX3RpbWVyX3N5bmMoJmtiYy0+dGltZXIpOworCisJY2xrX2Rpc2FibGUoa2JjLT5jbGspOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2tiY19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBpbnB1dF9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHRlZ3JhX2tiY19zdGFydChrYmMpOworfQorCitzdGF0aWMgdm9pZCB0ZWdyYV9rYmNfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gdGVncmFfa2JjX3N0b3Aoa2JjKTsKK30KKworc3RhdGljIGJvb2wgX19kZXZpbml0Cit0ZWdyYV9rYmNfY2hlY2tfcGluX2NmZyhjb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQkJc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgKm51bV9yb3dzKQoreworCWludCBpOworCisJKm51bV9yb3dzID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBLQkNfTUFYX0dQSU87IGkrKykgeworCQljb25zdCBzdHJ1Y3QgdGVncmFfa2JjX3Bpbl9jZmcgKnBpbl9jZmcgPSAmcGRhdGEtPnBpbl9jZmdbaV07CisKKwkJaWYgKHBpbl9jZmctPmlzX3JvdykgeworCQkJaWYgKHBpbl9jZmctPm51bSA+PSBLQkNfTUFYX1JPVykgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkicGluX2NmZ1slZF06IGludmFsaWQgcm93IG51bWJlciAlZFxuIiwKKwkJCQkJaSwgcGluX2NmZy0+bnVtKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQkoKm51bV9yb3dzKSsrOworCQl9IGVsc2UgeworCQkJaWYgKHBpbl9jZmctPm51bSA+PSBLQkNfTUFYX0NPTCkgeworCQkJCWRldl9lcnIoZGV2LAorCQkJCQkicGluX2NmZ1slZF06IGludmFsaWQgY29sdW1uIG51bWJlciAlZFxuIiwKKwkJCQkJaSwgcGluX2NmZy0+bnVtKTsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdGVncmFfa2JjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJY29uc3Qgc3RydWN0IHRlZ3JhX2tiY19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWNvbnN0IHN0cnVjdCBtYXRyaXhfa2V5bWFwX2RhdGEgKmtleW1hcF9kYXRhOworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IGlycTsKKwlpbnQgZXJyOworCWludCBpOworCWludCBudW1fcm93cyA9IDA7CisJdW5zaWduZWQgaW50IGRlYm91bmNlX2NudDsKKwl1bnNpZ25lZCBpbnQgc2Nhbl90aW1lX3Jvd3M7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghdGVncmFfa2JjX2NoZWNrX3Bpbl9jZmcocGRhdGEsICZwZGV2LT5kZXYsICZudW1fcm93cykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IEkvTyBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBrZXlib2FyZCBJUlFcbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWtiYyA9IGt6YWxsb2Moc2l6ZW9mKCprYmMpLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIWtiYyB8fCAhaW5wdXRfZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWtiYy0+cGRhdGEgPSBwZGF0YTsKKwlrYmMtPmlkZXYgPSBpbnB1dF9kZXY7CisJa2JjLT5pcnEgPSBpcnE7CisJc3Bpbl9sb2NrX2luaXQoJmtiYy0+bG9jayk7CisJc2V0dXBfdGltZXIoJmtiYy0+dGltZXIsIHRlZ3JhX2tiY19rZXlwcmVzc190aW1lciwgKHVuc2lnbmVkIGxvbmcpa2JjKTsKKworCXJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIHBkZXYtPm5hbWUpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IEkvTyBtZW1vcnlcbiIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWtiYy0+bW1pbyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWtiYy0+bW1pbykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgSS9PIG1lbW9yeVxuIik7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfZnJlZV9tZW1fcmVnaW9uOworCX0KKworCWtiYy0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGtiYy0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGtleWJvYXJkIGNsb2NrXG4iKTsKKwkJZXJyID0gUFRSX0VSUihrYmMtPmNsayk7CisJCWdvdG8gZXJyX2lvdW5tYXA7CisJfQorCisJa2JjLT53YWtlX2VuYWJsZV9yb3dzID0gMDsKKwlrYmMtPndha2VfZW5hYmxlX2NvbHMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+d2FrZV9jbnQ7IGkrKykgeworCQlrYmMtPndha2VfZW5hYmxlX3Jvd3MgfD0gKDEgPDwgcGRhdGEtPndha2VfY2ZnW2ldLnJvdyk7CisJCWtiYy0+d2FrZV9lbmFibGVfY29scyB8PSAoMSA8PCBwZGF0YS0+d2FrZV9jZmdbaV0uY29sKTsKKwl9CisKKwkvKgorCSAqIFRoZSB0aW1lIGRlbGF5IGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIHJlYWRzIG9mIHRoZSBGSUZPIGlzCisJICogdGhlIHN1bSBvZiB0aGUgcmVwZWF0IHRpbWUgYW5kIHRoZSB0aW1lIHRha2VuIGZvciBzY2FubmluZworCSAqIHRoZSByb3dzLiBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIGRlbGF5IGJlZm9yZSB0aGUgcm93IHNjYW5uaW5nCisJICogc3RhcnRzLiBUaGUgcmVwb2xsIGRlbGF5IGlzIGNvbXB1dGVkIGluIG1pbGxpc2Vjb25kcy4KKwkgKi8KKwlkZWJvdW5jZV9jbnQgPSBtaW4ocGRhdGEtPmRlYm91bmNlX2NudCwgS0JDX01BWF9ERUJPVU5DRV9DTlQpOworCXNjYW5fdGltZV9yb3dzID0gKEtCQ19ST1dfU0NBTl9USU1FICsgZGVib3VuY2VfY250KSAqIG51bV9yb3dzOworCWtiYy0+cmVwb2xsX2RseSA9IEtCQ19ST1dfU0NBTl9ETFkgKyBzY2FuX3RpbWVfcm93cyArIHBkYXRhLT5yZXBlYXRfY250OworCWtiYy0+cmVwb2xsX2RseSA9ICgoa2JjLT5yZXBvbGxfZGx5ICogS0JDX0NZQ0xFX1VTRUMpICsgOTk5KSAvIDEwMDA7CisKKwlpbnB1dF9kZXYtPm5hbWUgPSBwZGV2LT5uYW1lOworCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOworCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisJaW5wdXRfZGV2LT5vcGVuID0gdGVncmFfa2JjX29wZW47CisJaW5wdXRfZGV2LT5jbG9zZSA9IHRlZ3JhX2tiY19jbG9zZTsKKworCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2Rldiwga2JjKTsKKworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCWlucHV0X3NldF9jYXBhYmlsaXR5KGlucHV0X2RldiwgRVZfTVNDLCBNU0NfU0NBTik7CisKKwlpbnB1dF9kZXYtPmtleWNvZGUgPSBrYmMtPmtleWNvZGU7CisJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZihrYmMtPmtleWNvZGVbMF0pOworCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEtCQ19NQVhfS0VZOworCWlmIChwZGF0YS0+dXNlX2ZuX21hcCkKKwkJaW5wdXRfZGV2LT5rZXljb2RlbWF4ICo9IDI7CisKKwlrYmMtPnVzZV9mbl9tYXAgPSBwZGF0YS0+dXNlX2ZuX21hcDsKKwlrZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YSA/OiAmdGVncmFfa2JjX2RlZmF1bHRfa2V5bWFwX2RhdGE7CisJbWF0cml4X2tleXBhZF9idWlsZF9rZXltYXAoa2V5bWFwX2RhdGEsIEtCQ19ST1dfU0hJRlQsCisJCQkJICAgaW5wdXRfZGV2LT5rZXljb2RlLCBpbnB1dF9kZXYtPmtleWJpdCk7CisKKwllcnIgPSByZXF1ZXN0X2lycShrYmMtPmlycSwgdGVncmFfa2JjX2lzciwgSVJRRl9UUklHR0VSX0hJR0gsCisJCQkgIHBkZXYtPm5hbWUsIGtiYyk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBrZXlib2FyZCBJUlFcbiIpOworCQlnb3RvIGVycl9wdXRfY2xrOworCX0KKworCWRpc2FibGVfaXJxKGtiYy0+aXJxKTsKKworCWVyciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShrYmMtPmlkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGtiYyk7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIHBkYXRhLT53YWtldXApOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShrYmMtPmlycSwgcGRldik7CitlcnJfcHV0X2NsazoKKwljbGtfcHV0KGtiYy0+Y2xrKTsKK2Vycl9pb3VubWFwOgorCWlvdW5tYXAoa2JjLT5tbWlvKTsKK2Vycl9mcmVlX21lbV9yZWdpb246CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CitlcnJfZnJlZV9tZW06CisJaW5wdXRfZnJlZV9kZXZpY2Uoa2JjLT5pZGV2KTsKKwlrZnJlZShrYmMpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdGVncmFfa2JjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0ZWdyYV9rYmMgKmtiYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJZnJlZV9pcnEoa2JjLT5pcnEsIHBkZXYpOworCWNsa19wdXQoa2JjLT5jbGspOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uoa2JjLT5pZGV2KTsKKwlpb3VubWFwKGtiYy0+bW1pbyk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWtmcmVlKGtiYyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCitzdGF0aWMgaW50IHRlZ3JhX2tiY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IHRlZ3JhX2tiYyAqa2JjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpIHsKKwkJdGVncmFfa2JjX3NldHVwX3dha2VrZXlzKGtiYywgdHJ1ZSk7CisJCWVuYWJsZV9pcnFfd2FrZShrYmMtPmlycSk7CisJCS8qIEZvcmNlZnVsbHkgY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwkJd3JpdGVsKDB4Nywga2JjLT5tbWlvICsgS0JDX0lOVF8wKTsKKwkJbXNsZWVwKDMwKTsKKwl9IGVsc2UgeworCQltdXRleF9sb2NrKCZrYmMtPmlkZXYtPm11dGV4KTsKKwkJaWYgKGtiYy0+aWRldi0+dXNlcnMpCisJCQl0ZWdyYV9rYmNfc3RvcChrYmMpOworCQltdXRleF91bmxvY2soJmtiYy0+aWRldi0+bXV0ZXgpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRlZ3JhX2tiY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgdGVncmFfa2JjICprYmMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgeworCQlkaXNhYmxlX2lycV93YWtlKGtiYy0+aXJxKTsKKwkJdGVncmFfa2JjX3NldHVwX3dha2VrZXlzKGtiYywgZmFsc2UpOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2soJmtiYy0+aWRldi0+bXV0ZXgpOworCQlpZiAoa2JjLT5pZGV2LT51c2VycykKKwkJCWVyciA9IHRlZ3JhX2tiY19zdGFydChrYmMpOworCQltdXRleF91bmxvY2soJmtiYy0+aWRldi0+bXV0ZXgpOworCX0KKworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKworc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKHRlZ3JhX2tiY19wbV9vcHMsIHRlZ3JhX2tiY19zdXNwZW5kLCB0ZWdyYV9rYmNfcmVzdW1lKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdGVncmFfa2JjX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdGVncmFfa2JjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGVncmFfa2JjX3JlbW92ZSksCisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAidGVncmEta2JjIiwKKwkJLm93bmVyICA9IFRISVNfTU9EVUxFLAorCQkucG0JPSAmdGVncmFfa2JjX3BtX29wcywKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19leGl0IHRlZ3JhX2tiY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRlZ3JhX2tiY19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQodGVncmFfa2JjX2V4aXQpOworCitzdGF0aWMgaW50IF9faW5pdCB0ZWdyYV9rYmNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRlZ3JhX2tiY19kcml2ZXIpOworfQorbW9kdWxlX2luaXQodGVncmFfa2JjX2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJSYWtlc2ggSXllciA8cml5ZXJAbnZpZGlhLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVGVncmEgbWF0cml4IGtleWJvYXJkIGNvbnRyb2xsZXIgZHJpdmVyIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOnRlZ3JhLWtiYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90bmV0djEwN3gta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RuZXR2MTA3eC1rZXlwYWQuYwppbmRleCBiNGE4MWViLi5jOGYwOTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RuZXR2MTA3eC1rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3RuZXR2MTA3eC1rZXlwYWQuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0yMTksOSArMjIwLDkgQEAKIAl9CiAKIAlrcC0+Y2xrID0gY2xrX2dldChkZXYsIE5VTEwpOwotCWlmICgha3AtPmNsaykgeworCWlmIChJU19FUlIoa3AtPmNsaykpIHsKIAkJZGV2X2VycihkZXYsICJjYW5ub3QgY2xhaW0gZGV2aWNlIGNsb2NrXG4iKTsKLQkJZXJyb3IgPSAtRUlOVkFMOworCQllcnJvciA9IFBUUl9FUlIoa3AtPmNsayk7CiAJCWdvdG8gZXJyb3JfY2xrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKaW5kZXggOWRmZDZlNS4uMWYzODMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCkBAIC02OSwxMSArNjksNyBAQAogCX0KIAogCWlmICh2YWx1ZSA+IDIwICYmIHZhbHVlIDwgMzI3NjcpCi0jaWZuZGVmIEZSRVEKLQkJY291bnQgPSAoaXhwNHh4X2dldF9ib2FyZF90aWNrX3JhdGUoKSAvICh2YWx1ZSAqIDQpKSAtIDE7Ci0jZWxzZQotCQljb3VudCA9IChGUkVRIC8gKHZhbHVlICogNCkpIC0gMTsKLSNlbmRpZgorCQljb3VudCA9IChJWFA0WFhfVElNRVJfRlJFUSAvICh2YWx1ZSAqIDQpKSAtIDE7CiAKIAlpeHA0eHhfc3Brcl9jb250cm9sKHBpbiwgY291bnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvcm90YXJ5X2VuY29kZXIuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCmluZGV4IDFmOGUwMTAuLjdlNjRkMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9yb3RhcnlfZW5jb2Rlci5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAogCS8qIHJlcXVlc3QgdGhlIElSUXMgKi8KIAllcnIgPSByZXF1ZXN0X2lycShlbmNvZGVyLT5pcnFfYSwgJnJvdGFyeV9lbmNvZGVyX2lycSwKLQkJCSAgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgIERSVl9OQU1FLCBlbmNvZGVyKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IElSUSAlZFxuIiwKQEAgLTE4NSw3ICsxODUsNyBAQAogCX0KIAogCWVyciA9IHJlcXVlc3RfaXJxKGVuY29kZXItPmlycV9iLCAmcm90YXJ5X2VuY29kZXJfaXJxLAotCQkJICBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSB8IElPUkVTT1VSQ0VfSVJRX0xPV0VER0UsCisJCQkgIElSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKIAkJCSAgRFJWX05BTUUsIGVuY29kZXIpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmMKaW5kZXggZGEzOTJjMi4uYWExODZjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5jCkBAIC03NTUsMjMgKzc1NSwyNiBAQAogewogCXN0cnVjdCBzeW5hcHRpY3NfZGF0YSAqcHJpdiA9IHBzbW91c2UtPnByaXZhdGU7CiAJc3RydWN0IHN5bmFwdGljc19kYXRhIG9sZF9wcml2ID0gKnByaXY7CisJaW50IHJldHJ5ID0gMDsKKwlpbnQgZXJyb3I7CiAKLQlwc21vdXNlX3Jlc2V0KHBzbW91c2UpOworCWRvIHsKKwkJcHNtb3VzZV9yZXNldChwc21vdXNlKTsKKwkJZXJyb3IgPSBzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIDApOworCX0gd2hpbGUgKGVycm9yICYmICsrcmV0cnkgPCAzKTsKIAotCWlmIChzeW5hcHRpY3NfZGV0ZWN0KHBzbW91c2UsIDApKQorCWlmIChlcnJvcikKIAkJcmV0dXJuIC0xOwogCisJaWYgKHJldHJ5ID4gMSkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlN5bmFwdGljcyByZWNvbm5lY3RlZCBhZnRlciAlZCB0cmllc1xuIiwKKwkJCXJldHJ5KTsKKwogCWlmIChzeW5hcHRpY3NfcXVlcnlfaGFyZHdhcmUocHNtb3VzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcXVlcnkgU3luYXB0aWNzIGhhcmR3YXJlLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAob2xkX3ByaXYuaWRlbnRpdHkgIT0gcHJpdi0+aWRlbnRpdHkgfHwKLQkgICAgb2xkX3ByaXYubW9kZWxfaWQgIT0gcHJpdi0+bW9kZWxfaWQgfHwKLQkgICAgb2xkX3ByaXYuY2FwYWJpbGl0aWVzICE9IHByaXYtPmNhcGFiaWxpdGllcyB8fAotCSAgICBvbGRfcHJpdi5leHRfY2FwICE9IHByaXYtPmV4dF9jYXApCi0JCXJldHVybiAtMTsKLQogCWlmIChzeW5hcHRpY3Nfc2V0X2Fic29sdXRlX21vZGUocHNtb3VzZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBTeW5hcHRpY3MgaGFyZHdhcmUuXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtNzgyLDYgKzc4NSwxOSBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJaWYgKG9sZF9wcml2LmlkZW50aXR5ICE9IHByaXYtPmlkZW50aXR5IHx8CisJICAgIG9sZF9wcml2Lm1vZGVsX2lkICE9IHByaXYtPm1vZGVsX2lkIHx8CisJICAgIG9sZF9wcml2LmNhcGFiaWxpdGllcyAhPSBwcml2LT5jYXBhYmlsaXRpZXMgfHwKKwkgICAgb2xkX3ByaXYuZXh0X2NhcCAhPSBwcml2LT5leHRfY2FwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU3luYXB0aWNzIGhhcmR3YXJlIGFwcGVhcnMgdG8gYmUgZGlmZmVyZW50OiAiCisJCQkiaWQoJWxkLSVsZCksIG1vZGVsKCVsZC0lbGQpLCBjYXBzKCVseC0lbHgpLCBleHQoJWx4LSVseCkuXG4iLAorCQkJb2xkX3ByaXYuaWRlbnRpdHksIHByaXYtPmlkZW50aXR5LAorCQkJb2xkX3ByaXYubW9kZWxfaWQsIHByaXYtPm1vZGVsX2lkLAorCQkJb2xkX3ByaXYuY2FwYWJpbGl0aWVzLCBwcml2LT5jYXBhYmlsaXRpZXMsCisJCQlvbGRfcHJpdi5leHRfY2FwLCBwcml2LT5leHRfY2FwKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zeW5hcHRpY3MuaAppbmRleCAyNWU1ZDA0Li43NDUzOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3N5bmFwdGljcy5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc3luYXB0aWNzLmgKQEAgLTUxLDYgKzUxLDI5IEBACiAjZGVmaW5lIFNZTl9FWFRfQ0FQX1JFUVVFU1RTKGMpCQkoKChjKSAmIDB4NzAwMDAwKSA+PiAyMCkKICNkZWZpbmUgU1lOX0NBUF9NVUxUSV9CVVRUT05fTk8oZWMpCSgoKGVjKSAmIDB4MDBmMDAwKSA+PiAxMikKICNkZWZpbmUgU1lOX0NBUF9QUk9EVUNUX0lEKGVjKQkJKCgoZWMpICYgMHhmZjAwMDApID4+IDE2KQorCisvKgorICogVGhlIGZvbGxvd2luZyBkZXNjcmliZXMgcmVzcG9uc2UgZm9yIHRoZSAweDBjIHF1ZXJ5LgorICoKKyAqIGJ5dGUJbWFzawluYW1lCQkJbWVhbmluZworICogLS0tLQktLS0tCS0tLS0tLS0JCQktLS0tLS0tLS0tLS0KKyAqIDEJMHgwMQlhZGp1c3RhYmxlIHRocmVzaG9sZAljYXBhY2l0aXZlIGJ1dHRvbiBzZW5zaXRpdml0eQorICoJCQkJCWNhbiBiZSBhZGp1c3RlZAorICogMQkweDAyCXJlcG9ydCBtYXgJCXF1ZXJ5IDB4MGQgZ2l2ZXMgbWF4IGNvb3JkIHJlcG9ydGVkCisgKiAxCTB4MDQJY2xlYXJwYWQJCXNlbnNvciBpcyBDbGVhclBhZCBwcm9kdWN0CisgKiAxCTB4MDgJYWR2YW5jZWQgZ2VzdHVyZQlub3QgcGFydGljdWxhcmx5IG1lYW5pbmdmdWwKKyAqIDEJMHgxMAljbGlja3BhZCBiaXQgMAkJMS1idXR0b24gQ2xpY2tQYWQKKyAqIDEJMHg2MAltdWx0aWZpbmdlciBtb2RlCWlkZW50aWZpZXMgZmlybXdhcmUgZmluZ2VyIGNvdW50aW5nCisgKgkJCQkJKG5vdCByZXBvcnRpbmchKSBhbGdvcml0aG0uCisgKgkJCQkJTm90IHBhcnRpY3VsYXJseSBtZWFuaW5nZnVsCisgKiAxCTB4ODAgICAgY292ZXJlZCBwYWQJCVcgY2xpcHBlZCB0byAxNCwgMTUgPT0gcGFkIG1vc3RseSBjb3ZlcmVkCisgKiAyCTB4MDEgICAgY2xpY2twYWQgYml0IDEJCTItYnV0dG9uIENsaWNrUGFkCisgKiAyCTB4MDIgICAgZGVsdXhlIExFRCBjb250cm9scwl0b3VjaHBhZCBzdXBwb3J0IExFRCBjb21tYW5kcworICoJCQkJCWFsYSBtdWx0aW1lZGlhIGNvbnRyb2wgYmFyCisgKiAyCTB4MDQJcmVkdWNlZCBmaWx0ZXJpbmcJZmlybXdhcmUgZG9lcyBsZXNzIGZpbHRlcmluZyBvbgorICoJCQkJCXBvc2l0aW9uIGRhdGEsIGRyaXZlciBzaG91bGQgd2F0Y2gKKyAqCQkJCQlmb3Igbm9pc2UuCisgKi8KICNkZWZpbmUgU1lOX0NBUF9DTElDS1BBRChleDBjKQkJKChleDBjKSAmIDB4MTAwMDAwKSAvKiAxLWJ1dHRvbiBDbGlja1BhZCAqLwogI2RlZmluZSBTWU5fQ0FQX0NMSUNLUEFEMkJUTihleDBjKQkoKGV4MGMpICYgMHgwMDAxMDApIC8qIDItYnV0dG9uIENsaWNrUGFkICovCiAjZGVmaW5lIFNZTl9DQVBfTUFYX0RJTUVOU0lPTlMoZXgwYykJKChleDBjKSAmIDB4MDIwMDAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9jdDgyYzcxMC5jCmluZGV4IDQ0OGM3NzIuLjg1MjgxNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vY3Q4MmM3MTAuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2N0ODJjNzEwLmMKQEAgLTExMSw5ICsxMTEsMTEgQEAKIHN0YXRpYyBpbnQgY3Q4MmM3MTBfb3BlbihzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogewogCXVuc2lnbmVkIGNoYXIgc3RhdHVzOworCWludCBlcnI7CiAKLQlpZiAocmVxdWVzdF9pcnEoQ1Q4MkM3MTBfSVJRLCBjdDgyYzcxMF9pbnRlcnJ1cHQsIDAsICJjdDgyYzcxMCIsIE5VTEwpKQotCQlyZXR1cm4gLTE7CisJZXJyID0gcmVxdWVzdF9pcnEoQ1Q4MkM3MTBfSVJRLCBjdDgyYzcxMF9pbnRlcnJ1cHQsIDAsICJjdDgyYzcxMCIsIE5VTEwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAlzdGF0dXMgPSBpbmJfcChDVDgyQzcxMF9TVEFUVVMpOwogCkBAIC0xMzEsNyArMTMzLDcgQEAKIAkJc3RhdHVzICY9IH4oQ1Q4MkM3MTBfRU5BQkxFIHwgQ1Q4MkM3MTBfSU5UU19PTik7CiAJCW91dGJfcChzdGF0dXMsIENUODJDNzEwX1NUQVRVUyk7CiAJCWZyZWVfaXJxKENUODJDNzEwX0lSUSwgTlVMTCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCBkYjViMGJjLi5iYTcwMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC0xODgsNyArMTg4LDggQEAKIAlrZnJlZShldmVudCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQpCitzdGF0aWMgdm9pZCBzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyh2b2lkICpvYmplY3QsCisJCQkJCSAgZW51bSBzZXJpb19ldmVudF90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHNlcmlvX2V2ZW50ICplLCAqbmV4dDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMTk2LDEzICsxOTcsMTMgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VyaW9fZXZlbnRfbG9jaywgZmxhZ3MpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5leHQsICZzZXJpb19ldmVudF9saXN0LCBub2RlKSB7Ci0JCWlmIChldmVudC0+b2JqZWN0ID09IGUtPm9iamVjdCkgeworCQlpZiAob2JqZWN0ID09IGUtPm9iamVjdCkgewogCQkJLyoKIAkJCSAqIElmIHRoaXMgZXZlbnQgaXMgb2YgZGlmZmVyZW50IHR5cGUgd2Ugc2hvdWxkIG5vdAogCQkJICogbG9vayBmdXJ0aGVyIC0gd2Ugb25seSBzdXBwcmVzcyBkdXBsaWNhdGUgZXZlbnRzCiAJCQkgKiB0aGF0IHdlcmUgc2VudCBiYWNrLXRvLWJhY2suCiAJCQkgKi8KLQkJCWlmIChldmVudC0+dHlwZSAhPSBlLT50eXBlKQorCQkJaWYgKHR5cGUgIT0gZS0+dHlwZSkKIAkJCQlicmVhazsKIAogCQkJbGlzdF9kZWxfaW5pdCgmZS0+bm9kZSk7CkBAIC0yNDUsNyArMjQ2LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJc2VyaW9fcmVtb3ZlX2R1cGxpY2F0ZV9ldmVudHMoZXZlbnQpOworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhldmVudC0+b2JqZWN0LCBldmVudC0+dHlwZSk7CiAJCXNlcmlvX2ZyZWVfZXZlbnQoZXZlbnQpOwogCX0KIApAQCAtMjk4LDcgKzI5OSw3IEBACiAJZXZlbnQtPm93bmVyID0gb3duZXI7CiAKIAlsaXN0X2FkZF90YWlsKCZldmVudC0+bm9kZSwgJnNlcmlvX2V2ZW50X2xpc3QpOwotCXNjaGVkdWxlX3dvcmsoJnNlcmlvX2V2ZW50X3dvcmspOworCXF1ZXVlX3dvcmsoc3lzdGVtX2xvbmdfd3EsICZzZXJpb19ldmVudF93b3JrKTsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNlcmlvX2V2ZW50X2xvY2ssIGZsYWdzKTsKQEAgLTQzNiwxMCArNDM3LDEyIEBACiAJfSBlbHNlIGlmICghc3RybmNtcChidWYsICJyZXNjYW4iLCBjb3VudCkpIHsKIAkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTsKIAkJc2VyaW9fZmluZF9kcml2ZXIoc2VyaW8pOworCQlzZXJpb19yZW1vdmVfZHVwbGljYXRlX2V2ZW50cyhzZXJpbywgU0VSSU9fUkVTQ0FOX1BPUlQpOwogCX0gZWxzZSBpZiAoKGRydiA9IGRyaXZlcl9maW5kKGJ1ZiwgJnNlcmlvX2J1cykpICE9IE5VTEwpIHsKIAkJc2VyaW9fZGlzY29ubmVjdF9wb3J0KHNlcmlvKTsKIAkJZXJyb3IgPSBzZXJpb19iaW5kX2RyaXZlcihzZXJpbywgdG9fc2VyaW9fZHJpdmVyKGRydikpOwogCQlwdXRfZHJpdmVyKGRydik7CisJCXNlcmlvX3JlbW92ZV9kdXBsaWNhdGVfZXZlbnRzKHNlcmlvLCBTRVJJT19SRVNDQU5fUE9SVCk7CiAJfSBlbHNlIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VycG9ydC5jIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKaW5kZXggNmUzNjJkZS4uODc1NWY1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJwb3J0LmMKQEAgLTExNiwxNCArMTE2LDE1IEBACiAKIC8qCiAgKiBzZXJwb3J0X2xkaXNjX3JlY2VpdmUoKSBpcyBjYWxsZWQgYnkgdGhlIGxvdyBsZXZlbCB0dHkgZHJpdmVyIHdoZW4gY2hhcmFjdGVycwotICogYXJlIHJlYWR5IGZvciB1cy4gV2UgZm9yd2FyZCB0aGUgY2hhcmFjdGVycywgb25lIGJ5IG9uZSB0byB0aGUgJ2ludGVycnVwdCcKLSAqIHJvdXRpbmUuCisgKiBhcmUgcmVhZHkgZm9yIHVzLiBXZSBmb3J3YXJkIHRoZSBjaGFyYWN0ZXJzIGFuZCBmbGFncywgb25lIGJ5IG9uZSB0byB0aGUKKyAqICdpbnRlcnJ1cHQnIHJvdXRpbmUuCiAgKi8KIAogc3RhdGljIHZvaWQgc2VycG9ydF9sZGlzY19yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwLCBjaGFyICpmcCwgaW50IGNvdW50KQogewogCXN0cnVjdCBzZXJwb3J0ICpzZXJwb3J0ID0gKHN0cnVjdCBzZXJwb3J0KikgdHR5LT5kaXNjX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY2hfZmxhZ3M7CiAJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwpAQCAtMTMxLDggKzEzMiwyMyBAQAogCWlmICghdGVzdF9iaXQoU0VSUE9SVF9BQ1RJVkUsICZzZXJwb3J0LT5mbGFncykpCiAJCWdvdG8gb3V0OwogCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXNlcmlvX2ludGVycnVwdChzZXJwb3J0LT5zZXJpbywgY3BbaV0sIDApOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN3aXRjaCAoZnBbaV0pIHsKKwkJY2FzZSBUVFlfRlJBTUU6CisJCQljaF9mbGFncyA9IFNFUklPX0ZSQU1FOworCQkJYnJlYWs7CisKKwkJY2FzZSBUVFlfUEFSSVRZOgorCQkJY2hfZmxhZ3MgPSBTRVJJT19QQVJJVFk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJY2hfZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlzZXJpb19pbnRlcnJ1cHQoc2VycG9ydC0+c2VyaW8sIGNwW2ldLCBjaF9mbGFncyk7CisJfQogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2VycG9ydC0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMgYi9kcml2ZXJzL2lucHV0L3NwYXJzZS1rZXltYXAuYwppbmRleCBhMjlhNzgxMi4uNzcyOWU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zcGFyc2Uta2V5bWFwLmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBLRV9TVzoKKwkJY2FzZSBLRV9WU1c6CiAJCQlfX3NldF9iaXQoRVZfU1csIGRldi0+ZXZiaXQpOwogCQkJX19zZXRfYml0KGVudHJ5LT5zdy5jb2RlLCBkZXYtPnN3Yml0KTsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwppbmRleCBmYzM4MTQ5Li5jZjhmYjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC93YWNvbV9zeXMuYwpAQCAtNTE5LDcgKzUxOSw3IEBACiAJLyogUmV0cmlldmUgdGhlIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHNpemUgZm9yIE9FTSBkZXZpY2VzICovCiAJZXJyb3IgPSB3YWNvbV9yZXRyaWV2ZV9oaWRfZGVzY3JpcHRvcihpbnRmLCBmZWF0dXJlcyk7CiAJaWYgKGVycm9yKQotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWwzOwogCiAJd2Fjb21fc2V0dXBfZGV2aWNlX3F1aXJrcyhmZWF0dXJlcyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3dhYy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKaW5kZXggNTE4NzgyOS4uMzY3ZmE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fd2FjLmMKQEAgLTExMDEsNiArMTEwMSwxMyBAQAogCX0KIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCB3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKHVuc2lnbmVkIGludCBsb2dpY2FsX21heCwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHBoeXNpY2FsX21heCkKK3sKKyAgICAgICAvKiBUb3VjaCBwaHlzaWNhbCBkaW1lbnNpb25zIGFyZSBpbiAxMDB0aCBvZiBtbSAqLworICAgICAgIHJldHVybiAobG9naWNhbF9tYXggKiAxMDApIC8gcGh5c2ljYWxfbWF4OworfQorCiB2b2lkIHdhY29tX3NldHVwX2lucHV0X2NhcGFiaWxpdGllcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCiAJCQkJICAgIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKQEAgLTEyMjgsOCArMTIzNSwxMiBAQAogCWNhc2UgVEFCTEVUUEM6CiAJCWlmIChmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfRE9VQkxFVEFQIHx8CiAJCSAgICBmZWF0dXJlcy0+ZGV2aWNlX3R5cGUgPT0gQlROX1RPT0xfVFJJUExFVEFQKSB7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWCwgMCwgZmVhdHVyZXMtPnhfcGh5LCAwLCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JZLCAwLCBmZWF0dXJlcy0+eV9waHksIDAsIDApOworCQkJaW5wdXRfYWJzX3NldF9yZXMoaW5wdXRfZGV2LCBBQlNfWCwKKwkJCQl3YWNvbV9jYWxjdWxhdGVfdG91Y2hfcmVzKGZlYXR1cmVzLT54X21heCwKKwkJCQkJCQlmZWF0dXJlcy0+eF9waHkpKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1ksCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eV9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnlfcGh5KSk7CiAJCQlfX3NldF9iaXQoQlROX1RPT0xfRE9VQkxFVEFQLCBpbnB1dF9kZXYtPmtleWJpdCk7CiAJCX0KIApAQCAtMTI3Miw2ICsxMjgzLDEyIEBACiAJCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19NVF9QUkVTU1VSRSwKIAkJCQkJICAgICAwLCBmZWF0dXJlcy0+cHJlc3N1cmVfbWF4LAogCQkJCQkgICAgIGZlYXR1cmVzLT5wcmVzc3VyZV9mdXp6LCAwKTsKKwkJCWlucHV0X2Fic19zZXRfcmVzKGlucHV0X2RldiwgQUJTX1gsCisJCQkJd2Fjb21fY2FsY3VsYXRlX3RvdWNoX3JlcyhmZWF0dXJlcy0+eF9tYXgsCisJCQkJCQkJZmVhdHVyZXMtPnhfcGh5KSk7CisJCQlpbnB1dF9hYnNfc2V0X3JlcyhpbnB1dF9kZXYsIEFCU19ZLAorCQkJCXdhY29tX2NhbGN1bGF0ZV90b3VjaF9yZXMoZmVhdHVyZXMtPnlfbWF4LAorCQkJCQkJCWZlYXR1cmVzLT55X3BoeSkpOwogCQl9IGVsc2UgaWYgKGZlYXR1cmVzLT5kZXZpY2VfdHlwZSA9PSBCVE5fVE9PTF9QRU4pIHsKIAkJCV9fc2V0X2JpdChCVE5fVE9PTF9SVUJCRVIsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAkJCV9fc2V0X2JpdChCVE5fVE9PTF9QRU4sIGlucHV0X2Rldi0+a2V5Yml0KTsKQEAgLTE0MjYsNiArMTQ0MywxMCBAQAogCXsgIldhY29tIEJhbWJvbyAyRkcgNng4IiwgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMjE2NDgsIDEzNTMwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CiBzdGF0aWMgY29uc3Qgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDQgPQogCXsgIldhY29tIEJhbWJvbyBQZW4iLCAgICAgV0FDT01fUEtHTEVOX0JCRlVOLCAgICAgMTQ3MjAsICA5MjAwLCAgMjU1LCA2MywgQkFNQk9PX1BUIH07CitzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDYgPQorCXsgIldhY29tIEJhbWJvb1BUIDJGRyA0eDUiLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CitzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDcgPQorCXsgIldhY29tIEJhbWJvb1BUIDJGRyBTbWFsbCIsIFdBQ09NX1BLR0xFTl9CQkZVTiwgMTQ3MjAsICA5MjAwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CiBzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4RDggPQogCXsgIldhY29tIEJhbWJvbyBDb21pYyAyRkciLCBXQUNPTV9QS0dMRU5fQkJGVU4sICAgMjE2NDgsIDEzNTMwLCAxMDIzLCA2MywgQkFNQk9PX1BUIH07CiBzdGF0aWMgc3RydWN0IHdhY29tX2ZlYXR1cmVzIHdhY29tX2ZlYXR1cmVzXzB4REEgPQpAQCAtMTUwNyw2ICsxNTI4LDggQEAKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEMikgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEMykgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENCkgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENikgfSwKKwl7IFVTQl9ERVZJQ0VfV0FDT00oMHhENykgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEOCkgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEQSkgfSwKIAl7IFVTQl9ERVZJQ0VfV0FDT00oMHhEQikgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggMTRlYTU0Yi4uNGJmMjMxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTk0MSwyOCArOTQxLDI5IEBACiAJc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCBlcnI7CiAKLQkvKiBSRVZJU0lUIHdoZW4gdGhlIGlycSBjYW4gYmUgdHJpZ2dlcmVkIGFjdGl2ZS1sb3csIG9yIGlmIGZvciBzb21lCisJLyoKKwkgKiBSRVZJU0lUIHdoZW4gdGhlIGlycSBjYW4gYmUgdHJpZ2dlcmVkIGFjdGl2ZS1sb3csIG9yIGlmIGZvciBzb21lCiAJICogcmVhc29uIHRoZSB0b3VjaHNjcmVlbiBpc24ndCBob29rZWQgdXAsIHdlIGRvbid0IG5lZWQgdG8gYWNjZXNzCiAJICogdGhlIHBlbmRvd24gc3RhdGUuCiAJICovCi0JaWYgKCFwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUgJiYgIWdwaW9faXNfdmFsaWQocGRhdGEtPmdwaW9fcGVuZG93bikpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJubyBnZXRfcGVuZG93bl9zdGF0ZSBub3IgZ3Bpb19wZW5kb3duP1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWlmIChwZGF0YS0+Z2V0X3BlbmRvd25fc3RhdGUpIHsKIAkJdHMtPmdldF9wZW5kb3duX3N0YXRlID0gcGRhdGEtPmdldF9wZW5kb3duX3N0YXRlOwotCQlyZXR1cm4gMDsKLQl9CisJfSBlbHNlIGlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5ncGlvX3BlbmRvd24pKSB7CiAKLQllcnIgPSBncGlvX3JlcXVlc3QocGRhdGEtPmdwaW9fcGVuZG93biwgImFkczc4NDZfcGVuZG93biIpOwotCWlmIChlcnIpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBwZW5kb3duIEdQSU8lZFxuIiwKLQkJCXBkYXRhLT5ncGlvX3BlbmRvd24pOwotCQlyZXR1cm4gZXJyOwotCX0KKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5ncGlvX3BlbmRvd24sICJhZHM3ODQ2X3BlbmRvd24iKTsKKwkJaWYgKGVycikgeworCQkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBwZW5kb3duIEdQSU8lZFxuIiwKKwkJCQlwZGF0YS0+Z3Bpb19wZW5kb3duKTsKKwkJCXJldHVybiBlcnI7CisJCX0KIAotCXRzLT5ncGlvX3BlbmRvd24gPSBwZGF0YS0+Z3Bpb19wZW5kb3duOworCQl0cy0+Z3Bpb19wZW5kb3duID0gcGRhdGEtPmdwaW9fcGVuZG93bjsKKworCX0gZWxzZSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAibm8gZ2V0X3BlbmRvd25fc3RhdGUgbm9yIGdwaW9fcGVuZG93bj9cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTMsNyArMTM1NCw3IEBACiAgZXJyX3B1dF9yZWd1bGF0b3I6CiAJcmVndWxhdG9yX3B1dCh0cy0+cmVnKTsKICBlcnJfZnJlZV9ncGlvOgotCWlmICh0cy0+Z3Bpb19wZW5kb3duICE9IC0xKQorCWlmICghdHMtPmdldF9wZW5kb3duX3N0YXRlKQogCQlncGlvX2ZyZWUodHMtPmdwaW9fcGVuZG93bik7CiAgZXJyX2NsZWFudXBfZmlsdGVyOgogCWlmICh0cy0+ZmlsdGVyX2NsZWFudXApCkBAIC0xMzgzLDggKzEzODQsMTMgQEAKIAlyZWd1bGF0b3JfZGlzYWJsZSh0cy0+cmVnKTsKIAlyZWd1bGF0b3JfcHV0KHRzLT5yZWcpOwogCi0JaWYgKHRzLT5ncGlvX3BlbmRvd24gIT0gLTEpCisJaWYgKCF0cy0+Z2V0X3BlbmRvd25fc3RhdGUpIHsKKwkJLyoKKwkJICogSWYgd2UgYXJlIG5vdCB1c2luZyBzcGVjaWFsaXplZCBwZW5kb3duIG1ldGhvZCB3ZSBtdXN0CisJCSAqIGhhdmUgYmVlbiByZWx5aW5nIG9uIGdwaW8gd2Ugc2V0IHVwIG91cnNlbHZlcy4KKwkJICovCiAJCWdwaW9fZnJlZSh0cy0+Z3Bpb19wZW5kb3duKTsKKwl9CiAKIAlpZiAodHMtPmZpbHRlcl9jbGVhbnVwKQogCQl0cy0+ZmlsdGVyX2NsZWFudXAodHMtPmZpbHRlcl9kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYnUyMTAxM190cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMKaW5kZXggZjdmYTllZi4uMTUwN2NlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9idTIxMDEzX3RzLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0L2J1MjEwMTMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAKICNkZWZpbmUgUEVOX0RPV05fSU5UUgkwCiAjZGVmaW5lIE1BWF9GSU5HRVJTCTIKQEAgLTEzOSw2ICsxNDAsNyBAQAogICogQGNoaXA6IHBvaW50ZXIgdG8gdGhlIHRvdWNoIHBhbmVsIGNvbnRyb2xsZXIKICAqIEBpbl9kZXY6IHBvaW50ZXIgdG8gdGhlIGlucHV0IGRldmljZSBzdHJ1Y3R1cmUKICAqIEBpbnRyX3BpbjogaW50ZXJydXB0IHBpbiB2YWx1ZQorICogQHJlZ3VsYXRvcjogcG9pbnRlciB0byB0aGUgUmVndWxhdG9yIHVzZWQgZm9yIHRvdWNoIHNjcmVlbgogICoKICAqIFRvdWNoIHBhbmVsIGRldmljZSBkYXRhIHN0cnVjdHVyZQogICovCkBAIC0xNDksNiArMTUxLDcgQEAKIAljb25zdCBzdHJ1Y3QgYnUyMTAxM19wbGF0Zm9ybV9kZXZpY2UgKmNoaXA7CiAJc3RydWN0IGlucHV0X2RldiAqaW5fZGV2OwogCXVuc2lnbmVkIGludCBpbnRyX3BpbjsKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWd1bGF0b3I7CiB9OwogCiAvKioKQEAgLTQ1Niw2ICs0NTksMjAgQEAKIAlidTIxMDEzX2RhdGEtPmluX2RldiA9IGluX2RldjsKIAlidTIxMDEzX2RhdGEtPmNoaXAgPSBwZGF0YTsKIAlidTIxMDEzX2RhdGEtPmNsaWVudCA9IGNsaWVudDsKKworCWJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yID0gcmVndWxhdG9yX2dldCgmY2xpZW50LT5kZXYsICJWLVRPVUNIIik7CisJaWYgKElTX0VSUihidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcikpIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJyZWd1bGF0b3JfZ2V0IGZhaWxlZFxuIik7CisJCWVycm9yID0gUFRSX0VSUihidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisJCWdvdG8gZXJyX2ZyZWVfbWVtOworCX0KKworCWVycm9yID0gcmVndWxhdG9yX2VuYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CisJaWYgKGVycm9yIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgInJlZ3VsYXRvciBlbmFibGUgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJfcHV0X3JlZ3VsYXRvcjsKKwl9CisKIAlidTIxMDEzX2RhdGEtPnRvdWNoX3N0b3BwZWQgPSBmYWxzZTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZidTIxMDEzX2RhdGEtPndhaXQpOwogCkBAIC00NjQsNyArNDgxLDcgQEAKIAkJZXJyb3IgPSBwZGF0YS0+Y3NfZW4ocGRhdGEtPmNzX3Bpbik7CiAJCWlmIChlcnJvciA8IDApIHsKIAkJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiY2hpcCBpbml0IGZhaWxlZFxuIik7Ci0JCQlnb3RvIGVycl9mcmVlX21lbTsKKwkJCWdvdG8gZXJyX2Rpc2FibGVfcmVndWxhdG9yOwogCQl9CiAJfQogCkBAIC00ODUsOSArNTAyLDkgQEAKIAlfX3NldF9iaXQoRVZfQUJTLCBpbl9kZXYtPmV2Yml0KTsKIAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGluX2RldiwgQUJTX01UX1BPU0lUSU9OX1gsIDAsCi0JCQkJCQlwZGF0YS0+eF9tYXhfcmVzLCAwLCAwKTsKKwkJCQkJCXBkYXRhLT50b3VjaF94X21heCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5fZGV2LCBBQlNfTVRfUE9TSVRJT05fWSwgMCwKLQkJCQkJCXBkYXRhLT55X21heF9yZXMsIDAsIDApOworCQkJCQkJcGRhdGEtPnRvdWNoX3lfbWF4LCAwLCAwKTsKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbl9kZXYsIGJ1MjEwMTNfZGF0YSk7CiAKIAllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHBkYXRhLT5pcnEsIE5VTEwsIGJ1MjEwMTNfZ3Bpb19pcnEsCkBAIC01MTMsNiArNTMwLDEwIEBACiAJYnUyMTAxM19mcmVlX2lycShidTIxMDEzX2RhdGEpOwogZXJyX2NzX2Rpc2FibGU6CiAJcGRhdGEtPmNzX2RpcyhwZGF0YS0+Y3NfcGluKTsKK2Vycl9kaXNhYmxlX3JlZ3VsYXRvcjoKKwlyZWd1bGF0b3JfZGlzYWJsZShidTIxMDEzX2RhdGEtPnJlZ3VsYXRvcik7CitlcnJfcHV0X3JlZ3VsYXRvcjoKKwlyZWd1bGF0b3JfcHV0KGJ1MjEwMTNfZGF0YS0+cmVndWxhdG9yKTsKIGVycl9mcmVlX21lbToKIAlpbnB1dF9mcmVlX2RldmljZShpbl9kZXYpOwogCWtmcmVlKGJ1MjEwMTNfZGF0YSk7CkBAIC01MzUsNiArNTU2LDEwIEBACiAJYnUyMTAxM19kYXRhLT5jaGlwLT5jc19kaXMoYnUyMTAxM19kYXRhLT5jaGlwLT5jc19waW4pOwogCiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoYnUyMTAxM19kYXRhLT5pbl9kZXYpOworCisJcmVndWxhdG9yX2Rpc2FibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCXJlZ3VsYXRvcl9wdXQoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCiAJa2ZyZWUoYnUyMTAxM19kYXRhKTsKIAogCWRldmljZV9pbml0X3dha2V1cCgmY2xpZW50LT5kZXYsIGZhbHNlKTsKQEAgLTU2MSw2ICs1ODYsOCBAQAogCWVsc2UKIAkJZGlzYWJsZV9pcnEoYnUyMTAxM19kYXRhLT5jaGlwLT5pcnEpOwogCisJcmVndWxhdG9yX2Rpc2FibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTU3Nyw2ICs2MDQsMTIgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gYnUyMTAxM19kYXRhLT5jbGllbnQ7CiAJaW50IHJldHZhbDsKIAorCXJldHZhbCA9IHJlZ3VsYXRvcl9lbmFibGUoYnUyMTAxM19kYXRhLT5yZWd1bGF0b3IpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiYnUyMTAxMyByZWd1bGF0b3IgZW5hYmxlIGZhaWxlZFxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCiAJcmV0dmFsID0gYnUyMTAxM19pbml0X2NoaXAoYnUyMTAxM19kYXRhKTsKIAlpZiAocmV0dmFsIDwgMCkgewogCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImJ1MjEwMTMgY29udHJvbGxlciBjb25maWcgZmFpbGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RuZXR2MTA3eC10cy5jCmluZGV4IGNmMWRiYTIuLjIyYTM0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG5ldHYxMDd4LXRzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90bmV0djEwN3gtdHMuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CkBAIC0yODksOSArMjkwLDkgQEAKIAl9CiAKIAl0cy0+Y2xrID0gY2xrX2dldChkZXYsIE5VTEwpOwotCWlmICghdHMtPmNsaykgeworCWlmIChJU19FUlIodHMtPmNsaykpIHsKIAkJZGV2X2VycihkZXYsICJjYW5ub3QgY2xhaW0gZGV2aWNlIGNsb2NrXG4iKTsKLQkJZXJyb3IgPSAtRUlOVkFMOworCQllcnJvciA9IFBUUl9FUlIodHMtPmNsayk7CiAJCWdvdG8gZXJyb3JfY2xrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93YWNvbV93ODAwMS5jCmluZGV4IDVjYjg0NDkuLmMxNDQxMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd2Fjb21fdzgwMDEuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dhY29tX3c4MDAxLmMKQEAgLTUxLDYgKzUxLDEwIEBACiAjZGVmaW5lIFc4MDAxX1BLVExFTl9UUENDVEwJMTEJLyogY29udHJvbCBwYWNrZXQgKi8KICNkZWZpbmUgVzgwMDFfUEtUTEVOX1RPVUNIMkZHCTEzCiAKKy8qIHJlc29sdXRpb24gaW4gcG9pbnRzL21tICovCisjZGVmaW5lIFc4MDAxX1BFTl9SRVNPTFVUSU9OICAgIDEwMAorI2RlZmluZSBXODAwMV9UT1VDSF9SRVNPTFVUSU9OICAxMAorCiBzdHJ1Y3QgdzgwMDFfY29vcmQgewogCXU4IHJkeTsKIAl1OCB0c3c7CkBAIC0xOTgsNyArMjAyLDcgQEAKIAkJcXVlcnktPnkgPSAxMDI0OwogCQlpZiAocXVlcnktPnBhbmVsX3JlcykKIAkJCXF1ZXJ5LT54ID0gcXVlcnktPnkgPSAoMSA8PCBxdWVyeS0+cGFuZWxfcmVzKTsKLQkJcXVlcnktPnBhbmVsX3JlcyA9IDEwOworCQlxdWVyeS0+cGFuZWxfcmVzID0gVzgwMDFfVE9VQ0hfUkVTT0xVVElPTjsKIAl9CiB9CiAKQEAgLTM5NCw2ICszOTgsOCBAQAogCiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIGNvb3JkLngsIDAsIDApOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19ZLCAwLCBjb29yZC55LCAwLCAwKTsKKwkJaW5wdXRfYWJzX3NldF9yZXMoZGV2LCBBQlNfWCwgVzgwMDFfUEVOX1JFU09MVVRJT04pOworCQlpbnB1dF9hYnNfc2V0X3JlcyhkZXYsIEFCU19ZLCBXODAwMV9QRU5fUkVTT0xVVElPTik7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1BSRVNTVVJFLCAwLCBjb29yZC5wZW5fcHJlc3N1cmUsIDAsIDApOwogCQlpZiAoY29vcmQudGlsdF94ICYmIGNvb3JkLnRpbHRfeSkgewogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfVElMVF9YLCAwLCBjb29yZC50aWx0X3gsIDAsIDApOwpAQCAtNDE4LDE0ICs0MjQsMTcgQEAKIAkJdzgwMDEtPm1heF90b3VjaF94ID0gdG91Y2gueDsKIAkJdzgwMDEtPm1heF90b3VjaF95ID0gdG91Y2gueTsKIAotCQkvKiBzY2FsZSB0byBwZW4gbWF4aW11bSAqLwogCQlpZiAodzgwMDEtPm1heF9wZW5feCAmJiB3ODAwMS0+bWF4X3Blbl95KSB7CisJCQkvKiBpZiBwZW4gaXMgc3VwcG9ydGVkIHNjYWxlIHRvIHBlbiBtYXhpbXVtICovCiAJCQl0b3VjaC54ID0gdzgwMDEtPm1heF9wZW5feDsKIAkJCXRvdWNoLnkgPSB3ODAwMS0+bWF4X3Blbl95OworCQkJdG91Y2gucGFuZWxfcmVzID0gVzgwMDFfUEVOX1JFU09MVVRJT047CiAJCX0KIAogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYsIEFCU19YLCAwLCB0b3VjaC54LCAwLCAwKTsKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2LCBBQlNfWSwgMCwgdG91Y2gueSwgMCwgMCk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1gsIHRvdWNoLnBhbmVsX3Jlcyk7CisJCWlucHV0X2Fic19zZXRfcmVzKGRldiwgQUJTX1ksIHRvdWNoLnBhbmVsX3Jlcyk7CiAKIAkJc3dpdGNoICh0b3VjaC5zZW5zb3JfaWQpIHsKIAkJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9pc3RyZWFtLmMKaW5kZXggMThmODc5OC4uN2JkNWJhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2lzdHJlYW0uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vaXN0cmVhbS5jCkBAIC02Miw3ICs2Miw3IEBACiAgIHN0cmVhbSBpbnRlcmZhY2UuCiAgIElmIHN5bmNocm9ub3VzIHNlcnZpY2Ugd2FzIHJlcXVlc3RlZCwgdGhlbiBmdW5jdGlvbgogICBkb2VzIHJldHVybiBhbW91bnQgb2YgZGF0YSB3cml0dGVuIHRvIHN0cmVhbS4KLSAgJ2ZpbmFsJyBkb2VzIGluZGljYXRlIHRoYXQgcGljZSBvZiBkYXRhIHRvIGJlIHdyaXR0ZW4gaXMKKyAgJ2ZpbmFsJyBkb2VzIGluZGljYXRlIHRoYXQgcGllY2Ugb2YgZGF0YSB0byBiZSB3cml0dGVuIGlzCiAgIGZpbmFsIHBhcnQgb2YgZnJhbWUgKG5lY2Vzc2FyeSBvbmx5IGJ5IHN0cnVjdHVyZWQgZGF0YXRyYW5zZmVyKQogICByZXR1cm4gIDAgaWYgemVybyBsZW5naCBwYWNrZXQgd2FzIHdyaXR0ZW4KICAgcmV0dXJuIC0xIGlmIHN0cmVhbSBpcyBmdWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmwyLmMKaW5kZXggMDg1ODc5MS4uY2ZmZjBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5sMi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RubDIuYwpAQCAtMTI0NywxMCArMTI0NywxMCBAQAogbDJfcHVsbF9pcXVldWUoc3RydWN0IEZzbUluc3QgKmZpLCBpbnQgZXZlbnQsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgUFN0YWNrICpzdCA9IGZpLT51c2VyZGF0YTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqb3NrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBMYXllcjIgKmwyID0gJnN0LT5sMjsKIAl1X2NoYXIgaGVhZGVyW01BWF9IRUFERVJfTEVOXTsKLQlpbnQgaTsKKwlpbnQgaSwgaGRyX3NwYWNlX25lZWRlZDsKIAlpbnQgdW5zaWduZWQgcDE7CiAJdV9sb25nIGZsYWdzOwogCkBAIC0xMjYxLDYgKzEyNjEsMTYgQEAKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCisJaGRyX3NwYWNlX25lZWRlZCA9IGwyaGVhZGVyc2l6ZShsMiwgMCk7CisJaWYgKGhkcl9zcGFjZV9uZWVkZWQgPiBza2JfaGVhZHJvb20oc2tiKSkgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IgPSBza2I7CisKKwkJc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBoZHJfc3BhY2VfbmVlZGVkKTsKKwkJaWYgKCFza2IpIHsKKwkJCWRldl9rZnJlZV9za2Iob3JpZ19za2IpOworCQkJcmV0dXJuOworCQl9CisJfQogCXNwaW5fbG9ja19pcnFzYXZlKCZsMi0+bG9jaywgZmxhZ3MpOwogCWlmKHRlc3RfYml0KEZMR19NT0QxMjgsICZsMi0+ZmxhZykpCiAJCXAxID0gKGwyLT52cyAtIGwyLT52YSkgJSAxMjg7CkBAIC0xMjg1LDE5ICsxMjk1LDcgQEAKIAkJbDItPnZzID0gKGwyLT52cyArIDEpICUgODsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbDItPmxvY2ssIGZsYWdzKTsKLQlwMSA9IHNrYi0+ZGF0YSAtIHNrYi0+aGVhZDsKLQlpZiAocDEgPj0gaSkKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgaSksIGhlYWRlciwgaSk7Ci0JZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJImlzZGwyIHB1bGxfaXF1ZXVlIHNrYiBoZWFkZXIoJWQvJWQpIHRvbyBzaG9ydFxuIiwgaSwgcDEpOwotCQlvc2tiID0gc2tiOwotCQlza2IgPSBhbGxvY19za2Iob3NrYi0+bGVuICsgaSwgR0ZQX0FUT01JQyk7Ci0JCW1lbWNweShza2JfcHV0KHNrYiwgaSksIGhlYWRlciwgaSk7Ci0JCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEob3NrYiwKLQkJCQkJICBza2JfcHV0KHNrYiwgb3NrYi0+bGVuKSwgb3NrYi0+bGVuKTsKLQkJZGV2X2tmcmVlX3NrYihvc2tiKTsKLQl9CisJbWVtY3B5KHNrYl9wdXNoKHNrYiwgaSksIGhlYWRlciwgaSk7CiAJc3QtPmwyLmwybDEoc3QsIFBIX1BVTEwgfCBJTkRJQ0FUSU9OLCBza2IpOwogCXRlc3RfYW5kX2NsZWFyX2JpdChGTEdfQUNLX1BFTkQsICZzdC0+bDIuZmxhZyk7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KEZMR19UMjAwX1JVTiwgJnN0LT5sMi5mbGFnKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaCBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9kZWZzLmgKaW5kZXggNzI5ZGY0MC4uMThiODAxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2RlZnMuaAorKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fZGVmcy5oCkBAIC0yMjcsNyArMjI3LDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogaW0vZXhwb3J0ZWQgZnVuY3Rpb25zICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWV4dGVybiBjaGFyICpoeXNkbl9nZXRyZXYoY29uc3QgY2hhciAqKTsKIAogLyogaHlzZG5fcHJvY2NvbmYuYyAqLwogZXh0ZXJuIGludCBoeXNkbl9wcm9jY29uZl9pbml0KHZvaWQpOwkvKiBpbml0IHByb2MgY29uZmlnIGZpbGVzeXMgKi8KQEAgLTI1OSw3ICsyNTgsNiBAQAogCiAvKiBoeXNkbl9uZXQuYyAqLwogZXh0ZXJuIHVuc2lnbmVkIGludCBoeW5ldF9lbmFibGU7IAotZXh0ZXJuIGNoYXIgKmh5c2RuX25ldF9yZXZpc2lvbjsKIGV4dGVybiBpbnQgaHlzZG5fbmV0X2NyZWF0ZShoeXNkbl9jYXJkICopOwkvKiBjcmVhdGUgYSBuZXcgbmV0IGRldmljZSAqLwogZXh0ZXJuIGludCBoeXNkbl9uZXRfcmVsZWFzZShoeXNkbl9jYXJkICopOwkvKiBkZWxldGUgdGhlIGRldmljZSAqLwogZXh0ZXJuIGNoYXIgKmh5c2RuX25ldF9nZXRuYW1lKGh5c2RuX2NhcmQgKik7CS8qIGdldCBuYW1lIG9mIG5ldCBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5faW5pdC5jCmluZGV4IGI3Y2M1YzIuLjBhYjQyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9pbml0LmMKKysrIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX2luaXQuYwpAQCAtMzYsNyArMzYsNiBAQAogTU9EVUxFX0FVVEhPUigiV2VybmVyIENvcm5lbGl1cyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgY2hhciAqaHlzZG5faW5pdF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuNi42LjYgJCI7CiBzdGF0aWMgaW50IGNhcmRtYXg7CQkvKiBudW1iZXIgb2YgZm91bmQgY2FyZHMgKi8KIGh5c2RuX2NhcmQgKmNhcmRfcm9vdCA9IE5VTEw7CS8qIHBvaW50ZXIgdG8gZmlyc3QgY2FyZCAqLwogc3RhdGljIGh5c2RuX2NhcmQgKmNhcmRfbGFzdCA9IE5VTEw7CS8qIHBvaW50ZXIgdG8gZmlyc3QgY2FyZCAqLwpAQCAtNDksMjUgKzQ4LDYgQEAKIC8qIEFkZGl0aW9uYWxseSBuZXdlciB2ZXJzaW9ucyBtYXkgYmUgYWN0aXZhdGVkIHdpdGhvdXQgcmVib290aW5nLiAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBleHRyYWN0IHJldmlzaW9uIG51bWJlciBmcm9tIHN0cmluZyBmb3IgbG9nIG91dHB1dCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWNoYXIgKgotaHlzZG5fZ2V0cmV2KGNvbnN0IGNoYXIgKnJldmlzaW9uKQotewotCWNoYXIgKnJldjsKLQljaGFyICpwOwotCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSkgewotCQlyZXYgPSBwICsgMjsKLQkJcCA9IHN0cmNocihyZXYsICckJyk7Ci0JCSotLXAgPSAwOwotCX0gZWxzZQotCQlyZXYgPSAiPz8/IjsKLQlyZXR1cm4gcmV2OwotfQotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogaW5pdF9tb2R1bGUgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgbW9kdWxlIGlzIGxvYWRlZCB0byBkbyBhbGwgbmVjZXNzYXJ5ICovCiAvKiB0aGluZ3MgbGlrZSBhdXRvZGV0ZWN0Li4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTE3NSwxMyArMTU1LDkgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBoeXNkbl9pbml0KHZvaWQpCiB7Ci0JY2hhciB0bXBbNTBdOwogCWludCByYzsKIAotCXN0cmNweSh0bXAsIGh5c2RuX2luaXRfcmV2aXNpb24pOwotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IG1vZHVsZSBSZXY6ICVzIGxvYWRlZFxuIiwgaHlzZG5fZ2V0cmV2KHRtcCkpOwotCXN0cmNweSh0bXAsIGh5c2RuX25ldF9yZXZpc2lvbik7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJIWVNETjogbmV0d29yayBpbnRlcmZhY2UgUmV2OiAlcyBcbiIsIGh5c2RuX2dldHJldih0bXApKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBtb2R1bGUgbG9hZGVkXG4iKTsKIAogCXJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHlzZG5fcGNpX2RyaXZlcik7CiAJaWYgKHJjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5c2RuX25ldC5jCmluZGV4IGZlZWM4ZDguLjExZjJjY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9uZXQuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fbmV0LmMKQEAgLTI2LDkgKzI2LDYgQEAKIHVuc2lnbmVkIGludCBoeW5ldF9lbmFibGUgPSAweGZmZmZmZmZmOyAKIG1vZHVsZV9wYXJhbShoeW5ldF9lbmFibGUsIHVpbnQsIDApOwogCi0vKiBzdG9yZSB0aGUgYWN0dWFsIHZlcnNpb24gZm9yIGxvZyByZXBvcnRpbmcgKi8KLWNoYXIgKmh5c2RuX25ldF9yZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuOC42LjQgJCI7Ci0KICNkZWZpbmUgTUFYX1NLQl9CVUZGRVJTIDIwCS8qIG51bWJlciBvZiBidWZmZXJzIGZvciBrZWVwaW5nIFRYLWRhdGEgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaHlzZG4vaHlzZG5fcHJvY2NvbmYuYyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCmluZGV4IDk2YjNlMzkuLjVmZTgzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCisrKyBiL2RyaXZlcnMvaXNkbi9oeXNkbi9oeXNkbl9wcm9jY29uZi5jCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiaHlzZG5fZGVmcy5oIgogCiBzdGF0aWMgREVGSU5FX01VVEVYKGh5c2RuX2NvbmZfbXV0ZXgpOwotc3RhdGljIGNoYXIgKmh5c2RuX3Byb2Njb25mX3JldmlzaW9uID0gIiRSZXZpc2lvbjogMS44LjYuNCAkIjsKIAogI2RlZmluZSBJTkZPX09VVF9MRU4gODAJCS8qIGxlbmd0aCBvZiBpbmZvIGxpbmUgaW5jbHVkaW5nIGxmICovCiAKQEAgLTQwNCw3ICs0MDMsNyBAQAogCQljYXJkID0gY2FyZC0+bmV4dDsJLyogbmV4dCBlbnRyeSAqLwogCX0KIAotCXByaW50ayhLRVJOX05PVElDRSAiSFlTRE46IHByb2NmcyBSZXYuICVzIGluaXRpYWxpc2VkXG4iLCBoeXNkbl9nZXRyZXYoaHlzZG5fcHJvY2NvbmZfcmV2aXNpb24pKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkhZU0ROOiBwcm9jZnMgaW5pdGlhbGlzZWRcbiIpOwogCXJldHVybiAoMCk7CiB9CQkJCS8qIGh5c2RuX3Byb2Njb25mX2luaXQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2ljbi9pY24uYyBiL2RyaXZlcnMvaXNkbi9pY24vaWNuLmMKaW5kZXggZjJiNWJhYi4uMWYzNTViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2ljbi9pY24uYworKysgYi9kcml2ZXJzL2lzZG4vaWNuL2ljbi5jCkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogc3RhdGljIGludCBfX2luaXQgaWNuX2luaXQodm9pZCkKIHsKIAljaGFyICpwOwotCWNoYXIgcmV2WzIwXTsKKwljaGFyIHJldlsyMV07CiAKIAltZW1zZXQoJmRldiwgMCwgc2l6ZW9mKGljbl9kZXYpKTsKIAlkZXYubWVtYWRkciA9IChtZW1iYXNlICYgMHgwZmZjMDAwKTsKQEAgLTE2MzgsNiArMTYzOCw3IEBACiAKIAlpZiAoKHAgPSBzdHJjaHIocmV2aXNpb24sICc6JykpKSB7CiAJCXN0cm5jcHkocmV2LCBwICsgMSwgMjApOworCQlyZXZbMjBdID0gJ1wwJzsKIAkJcCA9IHN0cmNocihyZXYsICckJyk7CiAJCWlmIChwKQogCQkJKnAgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtcHdtLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1wd20uYwppbmRleCBkYTNmYThkLi42NjZkYWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1wd20uYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1wd20uYwpAQCAtNjksNiArNjksNyBAQAogCQlsZWRfZGF0LT5wd20gPSBwd21fcmVxdWVzdChjdXJfbGVkLT5wd21faWQsCiAJCQkJY3VyX2xlZC0+bmFtZSk7CiAJCWlmIChJU19FUlIobGVkX2RhdC0+cHdtKSkgeworCQkJcmV0ID0gUFRSX0VSUihsZWRfZGF0LT5wd20pOwogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgUFdNICVkXG4iLAogCQkJCQljdXJfbGVkLT5wd21faWQpOwogCQkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2xpbmVhci5jIGIvZHJpdmVycy9tZC9saW5lYXIuYwppbmRleCA4YTJmNzY3Li4wZWQ3ZjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2xpbmVhci5jCisrKyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKQEAgLTIxNiw3ICsyMTYsNiBAQAogCiAJaWYgKG1kX2NoZWNrX25vX2JpdG1hcChtZGRldikpCiAJCXJldHVybiAtRUlOVkFMOwotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZtZGRldi0+cXVldWUtPl9fcXVldWVfbG9jazsKIAljb25mID0gbGluZWFyX2NvbmYobWRkZXYsIG1kZGV2LT5yYWlkX2Rpc2tzKTsKIAogCWlmICghY29uZikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuYyBiL2RyaXZlcnMvbWQvbWQuYwppbmRleCBiNzZjZmM4Li44MTgzMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmMKKysrIGIvZHJpdmVycy9tZC9tZC5jCkBAIC0yODcsNiArMjg3LDcgQEAKIAltZGRldl90ICptZGRldiA9IHEtPnF1ZXVlZGF0YTsKIAlpbnQgcnY7CiAJaW50IGNwdTsKKwl1bnNpZ25lZCBpbnQgc2VjdG9yczsKIAogCWlmIChtZGRldiA9PSBOVUxMIHx8IG1kZGV2LT5wZXJzID09IE5VTEwKIAkgICAgfHwgIW1kZGV2LT5yZWFkeSkgewpAQCAtMzExLDEyICszMTIsMTYgQEAKIAlhdG9taWNfaW5jKCZtZGRldi0+YWN0aXZlX2lvKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAorCS8qCisJICogc2F2ZSB0aGUgc2VjdG9ycyBub3cgc2luY2Ugb3VyIGJpbyBjYW4KKwkgKiBnbyBhd2F5IGluc2lkZSBtYWtlX3JlcXVlc3QKKwkgKi8KKwlzZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKIAlydiA9IG1kZGV2LT5wZXJzLT5tYWtlX3JlcXVlc3QobWRkZXYsIGJpbyk7CiAKIAljcHUgPSBwYXJ0X3N0YXRfbG9jaygpOwogCXBhcnRfc3RhdF9pbmMoY3B1LCAmbWRkZXYtPmdlbmRpc2stPnBhcnQwLCBpb3NbcnddKTsKLQlwYXJ0X3N0YXRfYWRkKGNwdSwgJm1kZGV2LT5nZW5kaXNrLT5wYXJ0MCwgc2VjdG9yc1tyd10sCi0JCSAgICAgIGJpb19zZWN0b3JzKGJpbykpOworCXBhcnRfc3RhdF9hZGQoY3B1LCAmbWRkZXYtPmdlbmRpc2stPnBhcnQwLCBzZWN0b3JzW3J3XSwgc2VjdG9ycyk7CiAJcGFydF9zdGF0X3VubG9jaygpOwogCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1kZGV2LT5hY3RpdmVfaW8pICYmIG1kZGV2LT5zdXNwZW5kZWQpCkBAIC01NDgsNiArNTUzLDkgQEAKIHsKIAltZGRldl90ICptZGRldiwgKm5ldyA9IE5VTEw7CiAKKwlpZiAodW5pdCAmJiBNQUpPUih1bml0KSAhPSBNRF9NQUpPUikKKwkJdW5pdCAmPSB+KCgxPDxNZHBNaW5vclNoaWZ0KS0xKTsKKwogIHJldHJ5OgogCXNwaW5fbG9jaygmYWxsX21kZGV2c19sb2NrKTsKIApAQCAtMTk0Nyw4ICsxOTU1LDYgQEAKIAkJCV9fYmRldm5hbWUoZGV2LCBiKSk7CiAJCXJldHVybiBQVFJfRVJSKGJkZXYpOwogCX0KLQlpZiAoIXNoYXJlZCkKLQkJc2V0X2JpdChBbGxSZXNlcnZlZCwgJnJkZXYtPmZsYWdzKTsKIAlyZGV2LT5iZGV2ID0gYmRldjsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMjQ2NSw2ICsyNDcxLDkgQEAKIAkJaWYgKHJkZXYtPnJhaWRfZGlzayAhPSAtMSkKIAkJCXJldHVybiAtRUJVU1k7CiAKKwkJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZyZGV2LT5tZGRldi0+cmVjb3ZlcnkpKQorCQkJcmV0dXJuIC1FQlVTWTsKKwogCQlpZiAocmRldi0+bWRkZXYtPnBlcnMtPmhvdF9hZGRfZGlzayA9PSBOVUxMKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTI2MTAsMTIgKzI2MTksMTEgQEAKIAogCQkJbWRkZXZfbG9jayhtZGRldik7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYyLCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJCQlpZiAodGVzdF9iaXQoQWxsUmVzZXJ2ZWQsICZyZGV2Mi0+ZmxhZ3MpIHx8Ci0JCQkJICAgIChyZGV2LT5iZGV2ID09IHJkZXYyLT5iZGV2ICYmCi0JCQkJICAgICByZGV2ICE9IHJkZXYyICYmCi0JCQkJICAgICBvdmVybGFwcyhyZGV2LT5kYXRhX29mZnNldCwgcmRldi0+c2VjdG9ycywKLQkJCQkJICAgICAgcmRldjItPmRhdGFfb2Zmc2V0LAotCQkJCQkgICAgICByZGV2Mi0+c2VjdG9ycykpKSB7CisJCQkJaWYgKHJkZXYtPmJkZXYgPT0gcmRldjItPmJkZXYgJiYKKwkJCQkgICAgcmRldiAhPSByZGV2MiAmJgorCQkJCSAgICBvdmVybGFwcyhyZGV2LT5kYXRhX29mZnNldCwgcmRldi0+c2VjdG9ycywKKwkJCQkJICAgICByZGV2Mi0+ZGF0YV9vZmZzZXQsCisJCQkJCSAgICAgcmRldjItPnNlY3RvcnMpKSB7CiAJCQkJCW92ZXJsYXAgPSAxOwogCQkJCQlicmVhazsKIAkJCQl9CkBAIC00MTMzLDEwICs0MTQxLDEwIEBACiAJfQogCiAJbWRkZXYtPmFycmF5X3NlY3RvcnMgPSBzZWN0b3JzOwotCXNldF9jYXBhY2l0eShtZGRldi0+Z2VuZGlzaywgbWRkZXYtPmFycmF5X3NlY3RvcnMpOwotCWlmIChtZGRldi0+cGVycykKKwlpZiAobWRkZXYtPnBlcnMpIHsKKwkJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJCXJldmFsaWRhdGVfZGlzayhtZGRldi0+Z2VuZGlzayk7Ci0KKwl9CiAJcmV0dXJuIGxlbjsKIH0KIApAQCAtNDYxOSw2ICs0NjI3LDcgQEAKIAl9CiAJc2V0X2NhcGFjaXR5KG1kZGV2LT5nZW5kaXNrLCBtZGRldi0+YXJyYXlfc2VjdG9ycyk7CiAJcmV2YWxpZGF0ZV9kaXNrKG1kZGV2LT5nZW5kaXNrKTsKKwltZGRldi0+Y2hhbmdlZCA9IDE7CiAJa29iamVjdF91ZXZlbnQoJmRpc2tfdG9fZGV2KG1kZGV2LT5nZW5kaXNrKS0+a29iaiwgS09CSl9DSEFOR0UpOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC00NzA3LDYgKzQ3MTYsNyBAQAogCW1kZGV2LT5zeW5jX3NwZWVkX21pbiA9IG1kZGV2LT5zeW5jX3NwZWVkX21heCA9IDA7CiAJbWRkZXYtPnJlY292ZXJ5ID0gMDsKIAltZGRldi0+aW5fc3luYyA9IDA7CisJbWRkZXYtPmNoYW5nZWQgPSAwOwogCW1kZGV2LT5kZWdyYWRlZCA9IDA7CiAJbWRkZXYtPnNhZmVtb2RlID0gMDsKIAltZGRldi0+Yml0bWFwX2luZm8ub2Zmc2V0ID0gMDsKQEAgLTQ4MjIsNiArNDgzMiw3IEBACiAKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDApOwogCQltdXRleF91bmxvY2soJm1kZGV2LT5vcGVuX211dGV4KTsKKwkJbWRkZXYtPmNoYW5nZWQgPSAxOwogCQlyZXZhbGlkYXRlX2Rpc2soZGlzayk7CiAKIAkJaWYgKG1kZGV2LT5ybykKQEAgLTU1NzgsNiArNTU4OSw4IEBACiAJbWRkZXYtPmRlbHRhX2Rpc2tzID0gcmFpZF9kaXNrcyAtIG1kZGV2LT5yYWlkX2Rpc2tzOwogCiAJcnYgPSBtZGRldi0+cGVycy0+Y2hlY2tfcmVzaGFwZShtZGRldik7CisJaWYgKHJ2IDwgMCkKKwkJbWRkZXYtPmRlbHRhX2Rpc2tzID0gMDsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTYwMDQsNyArNjAxNyw3IEBACiAJYXRvbWljX2luYygmbWRkZXYtPm9wZW5lcnMpOwogCW11dGV4X3VubG9jaygmbWRkZXYtPm9wZW5fbXV0ZXgpOwogCi0JY2hlY2tfZGlza19zaXplX2NoYW5nZShtZGRldi0+Z2VuZGlzaywgYmRldik7CisJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CiAgb3V0OgogCXJldHVybiBlcnI7CiB9CkBAIC02MDE5LDYgKzYwMzIsMjEgQEAKIAogCXJldHVybiAwOwogfQorCitzdGF0aWMgaW50IG1kX21lZGlhX2NoYW5nZWQoc3RydWN0IGdlbmRpc2sgKmRpc2spCit7CisJbWRkZXZfdCAqbWRkZXYgPSBkaXNrLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gbWRkZXYtPmNoYW5nZWQ7Cit9CisKK3N0YXRpYyBpbnQgbWRfcmV2YWxpZGF0ZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKK3sKKwltZGRldl90ICptZGRldiA9IGRpc2stPnByaXZhdGVfZGF0YTsKKworCW1kZGV2LT5jaGFuZ2VkID0gMDsKKwlyZXR1cm4gMDsKK30KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYmxvY2tfZGV2aWNlX29wZXJhdGlvbnMgbWRfZm9wcyA9CiB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtNjAyOSw2ICs2MDU3LDggQEAKIAkuY29tcGF0X2lvY3RsCT0gbWRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJLmdldGdlbwkJPSBtZF9nZXRnZW8sCisJLm1lZGlhX2NoYW5nZWQgID0gbWRfbWVkaWFfY2hhbmdlZCwKKwkucmV2YWxpZGF0ZV9kaXNrPSBtZF9yZXZhbGlkYXRlLAogfTsKIAogc3RhdGljIGludCBtZF90aHJlYWQodm9pZCAqIGFyZykKQEAgLTY5ODUsOSArNzAxNSw2IEBACiAJfSBlbHNlIGlmICh0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKQogCQltZGRldi0+cmVzeW5jX21pbiA9IG1kZGV2LT5jdXJyX3Jlc3luY19jb21wbGV0ZWQ7CiAJbWRkZXYtPmN1cnJfcmVzeW5jID0gMDsKLQlpZiAoIXRlc3RfYml0KE1EX1JFQ09WRVJZX0lOVFIsICZtZGRldi0+cmVjb3ZlcnkpKQotCQltZGRldi0+Y3Vycl9yZXN5bmNfY29tcGxldGVkID0gMDsKLQlzeXNmc19ub3RpZnkoJm1kZGV2LT5rb2JqLCBOVUxMLCAic3luY19jb21wbGV0ZWQiKTsKIAl3YWtlX3VwKCZyZXN5bmNfd2FpdCk7CiAJc2V0X2JpdChNRF9SRUNPVkVSWV9ET05FLCAmbWRkZXYtPnJlY292ZXJ5KTsKIAltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwpAQCAtNzAyOCw3ICs3MDU1LDcgQEAKIAkJCX0KIAkJfQogCi0JaWYgKG1kZGV2LT5kZWdyYWRlZCAmJiAhIG1kZGV2LT5ybyAmJiAhbWRkZXYtPnJlY292ZXJ5X2Rpc2FibGVkKSB7CisJaWYgKG1kZGV2LT5kZWdyYWRlZCAmJiAhbWRkZXYtPnJlY292ZXJ5X2Rpc2FibGVkKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gMCAmJgogCQkJICAgICF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpICYmCkBAIC03MTUxLDcgKzcxNzgsMjAgQEAKIAkJCS8qIE9ubHkgdGhpbmcgd2UgZG8gb24gYSBybyBhcnJheSBpcyByZW1vdmUKIAkJCSAqIGZhaWxlZCBkZXZpY2VzLgogCQkJICovCi0JCQlyZW1vdmVfYW5kX2FkZF9zcGFyZXMobWRkZXYpOworCQkJbWRrX3JkZXZfdCAqcmRldjsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCisJCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwICYmCisJCQkJICAgICF0ZXN0X2JpdChCbG9ja2VkLCAmcmRldi0+ZmxhZ3MpICYmCisJCQkJICAgIHRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSAmJgorCQkJCSAgICBhdG9taWNfcmVhZCgmcmRldi0+bnJfcGVuZGluZyk9PTApIHsKKwkJCQkJaWYgKG1kZGV2LT5wZXJzLT5ob3RfcmVtb3ZlX2Rpc2soCisJCQkJCQkgICAgbWRkZXYsIHJkZXYtPnJhaWRfZGlzayk9PTApIHsKKwkJCQkJCWNoYXIgbm1bMjBdOworCQkJCQkJc3ByaW50ZihubSwicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CisJCQkJCQlzeXNmc19yZW1vdmVfbGluaygmbWRkZXYtPmtvYmosIG5tKTsKKwkJCQkJCXJkZXYtPnJhaWRfZGlzayA9IC0xOworCQkJCQl9CisJCQkJfQogCQkJY2xlYXJfYml0KE1EX1JFQ09WRVJZX05FRURFRCwgJm1kZGV2LT5yZWNvdmVyeSk7CiAJCQlnb3RvIHVubG9jazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5oIGIvZHJpdmVycy9tZC9tZC5oCmluZGV4IGVlYzUxN2MuLjEyMjE1ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuaAorKysgYi9kcml2ZXJzL21kL21kLmgKQEAgLTkzLDggKzkzLDYgQEAKICNkZWZpbmUJRmF1bHR5CQkxCQkvKiBkZXZpY2UgaXMga25vd24gdG8gaGF2ZSBhIGZhdWx0ICovCiAjZGVmaW5lCUluX3N5bmMJCTIJCS8qIGRldmljZSBpcyBpbl9zeW5jIHdpdGggcmVzdCBvZiBhcnJheSAqLwogI2RlZmluZQlXcml0ZU1vc3RseQk0CQkvKiBBdm9pZCByZWFkaW5nIGlmIGF0IGFsbCBwb3NzaWJsZSAqLwotI2RlZmluZQlBbGxSZXNlcnZlZAk2CQkvKiBJZiB3aG9sZSBkZXZpY2UgaXMgcmVzZXJ2ZWQgZm9yCi0JCQkJCSAqIG9uZSBhcnJheSAqLwogI2RlZmluZQlBdXRvRGV0ZWN0ZWQJNwkJLyogYWRkZWQgYnkgYXV0by1kZXRlY3QgKi8KICNkZWZpbmUgQmxvY2tlZAkJOAkJLyogQW4gZXJyb3Igb2NjdXJlZCBvbiBhbiBleHRlcm5hbGx5CiAJCQkJCSAqIG1hbmFnZWQgYXJyYXksIGRvbid0IGFsbG93IHdyaXRlcwpAQCAtMjc2LDYgKzI3NCw4IEBACiAJYXRvbWljX3QJCQlhY3RpdmU7CQkvKiBnZW5lcmFsIHJlZmNvdW50ICovCiAJYXRvbWljX3QJCQlvcGVuZXJzOwkvKiBudW1iZXIgb2YgYWN0aXZlIG9wZW5zICovCiAKKwlpbnQJCQkJY2hhbmdlZDsJLyogVHJ1ZSBpZiB3ZSBtaWdodCBuZWVkIHRvCisJCQkJCQkJICogcmVyZWFkIHBhcnRpdGlvbiBpbmZvICovCiAJaW50CQkJCWRlZ3JhZGVkOwkvKiB3aGV0aGVyIG1kIHNob3VsZCBjb25zaWRlcgogCQkJCQkJCSAqIGFkZGluZyBhIHNwYXJlCiAJCQkJCQkJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL211bHRpcGF0aC5jIGIvZHJpdmVycy9tZC9tdWx0aXBhdGguYwppbmRleCA2ZDdkZGYzLi4zYTYyZDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL211bHRpcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvbXVsdGlwYXRoLmMKQEAgLTQzNSw3ICs0MzUsNiBAQAogCSAqIGJvb2trZWVwaW5nIGFyZWEuIFt3aGF0ZXZlciB3ZSBhbGxvY2F0ZSBpbiBtdWx0aXBhdGhfcnVuKCksCiAJICogc2hvdWxkIGJlIGZyZWVkIGluIG11bHRpcGF0aF9zdG9wKCldCiAJICovCi0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJm1kZGV2LT5xdWV1ZS0+X19xdWV1ZV9sb2NrOwogCiAJY29uZiA9IGt6YWxsb2Moc2l6ZW9mKG11bHRpcGF0aF9jb25mX3QpLCBHRlBfS0VSTkVMKTsKIAltZGRldi0+cHJpdmF0ZSA9IGNvbmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQwLmMgYi9kcml2ZXJzL21kL3JhaWQwLmMKaW5kZXggYTM5ZjRjMy4uYzBhYzQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDAuYwpAQCAtMTc5LDYgKzE3OSwxNCBAQAogCQkJcmRldjEtPm5ld19yYWlkX2Rpc2sgPSBqOwogCQl9CiAKKwkJaWYgKG1kZGV2LT5sZXZlbCA9PSAxKSB7CisJCQkvKiB0YWlraW5nIG92ZXIgYSByYWlkMSBhcnJheS0KKwkJCSAqIHdlIGhhdmUgb25seSBvbmUgYWN0aXZlIGRpc2sKKwkJCSAqLworCQkJaiA9IDA7CisJCQlyZGV2MS0+bmV3X3JhaWRfZGlzayA9IGo7CisJCX0KKwogCQlpZiAoaiA8IDAgfHwgaiA+PSBtZGRldi0+cmFpZF9kaXNrcykgewogCQkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMDolczogYmFkIGRpc2sgbnVtYmVyICVkIC0gIgogCQkJICAgICAgICJhYm9ydGluZyFcbiIsIG1kbmFtZShtZGRldiksIGopOwpAQCAtMzUzLDcgKzM2MSw2IEBACiAJaWYgKG1kX2NoZWNrX25vX2JpdG1hcChtZGRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhtZGRldi0+cXVldWUsIG1kZGV2LT5jaHVua19zZWN0b3JzKTsKLQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmbWRkZXYtPnF1ZXVlLT5fX3F1ZXVlX2xvY2s7CiAKIAkvKiBpZiBwcml2YXRlIGlzIG5vdCBudWxsLCB3ZSBhcmUgaGVyZSBhZnRlciB0YWtlb3ZlciAqLwogCWlmIChtZGRldi0+cHJpdmF0ZSA9PSBOVUxMKSB7CkBAIC02NDQsMTIgKzY1MSwzOSBAQAogCXJldHVybiBwcml2X2NvbmY7CiB9CiAKK3N0YXRpYyB2b2lkICpyYWlkMF90YWtlb3Zlcl9yYWlkMShtZGRldl90ICptZGRldikKK3sKKwlyYWlkMF9jb25mX3QgKnByaXZfY29uZjsKKworCS8qIENoZWNrIGxheW91dDoKKwkgKiAgLSAoTiAtIDEpIG1pcnJvciBkcml2ZXMgbXVzdCBiZSBhbHJlYWR5IGZhdWx0eQorCSAqLworCWlmICgobWRkZXYtPnJhaWRfZGlza3MgLSAxKSAhPSBtZGRldi0+ZGVncmFkZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJtZC9yYWlkMDolczogKE4gLSAxKSBtaXJyb3JzIGRyaXZlcyBtdXN0IGJlIGFscmVhZHkgZmF1bHR5IVxuIiwKKwkJICAgICAgIG1kbmFtZShtZGRldikpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBTZXQgbmV3IHBhcmFtZXRlcnMgKi8KKwltZGRldi0+bmV3X2xldmVsID0gMDsKKwltZGRldi0+bmV3X2xheW91dCA9IDA7CisJbWRkZXYtPm5ld19jaHVua19zZWN0b3JzID0gMTI4OyAvKiBieSBkZWZhdWx0IHNldCBjaHVuayBzaXplIHRvIDY0ayAqLworCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDEgLSBtZGRldi0+cmFpZF9kaXNrczsKKwltZGRldi0+cmFpZF9kaXNrcyA9IDE7CisJLyogbWFrZSBzdXJlIGl0IHdpbGwgYmUgbm90IG1hcmtlZCBhcyBkaXJ0eSAqLworCW1kZGV2LT5yZWNvdmVyeV9jcCA9IE1heFNlY3RvcjsKKworCWNyZWF0ZV9zdHJpcF96b25lcyhtZGRldiwgJnByaXZfY29uZik7CisJcmV0dXJuIHByaXZfY29uZjsKK30KKwogc3RhdGljIHZvaWQgKnJhaWQwX3Rha2VvdmVyKG1kZGV2X3QgKm1kZGV2KQogewogCS8qIHJhaWQwIGNhbiB0YWtlIG92ZXI6CiAJICogIHJhaWQ0IC0gaWYgYWxsIGRhdGEgZGlza3MgYXJlIGFjdGl2ZS4KIAkgKiAgcmFpZDUgLSBwcm92aWRpbmcgaXQgaXMgUmFpZDQgbGF5b3V0IGFuZCBvbmUgZGlzayBpcyBmYXVsdHkKIAkgKiAgcmFpZDEwIC0gYXNzdW1pbmcgd2UgaGF2ZSBhbGwgbmVjZXNzYXJ5IGFjdGl2ZSBkaXNrcworCSAqICByYWlkMSAtIHdpdGggKE4gLTEpIG1pcnJvciBkcml2ZXMgZmF1bHR5CiAJICovCiAJaWYgKG1kZGV2LT5sZXZlbCA9PSA0KQogCQlyZXR1cm4gcmFpZDBfdGFrZW92ZXJfcmFpZDQ1KG1kZGV2KTsKQEAgLTY2NSw2ICs2OTksMTIgQEAKIAlpZiAobWRkZXYtPmxldmVsID09IDEwKQogCQlyZXR1cm4gcmFpZDBfdGFrZW92ZXJfcmFpZDEwKG1kZGV2KTsKIAorCWlmIChtZGRldi0+bGV2ZWwgPT0gMSkKKwkJcmV0dXJuIHJhaWQwX3Rha2VvdmVyX3JhaWQxKG1kZGV2KTsKKworCXByaW50ayhLRVJOX0VSUiAiVGFrZW92ZXIgZnJvbSByYWlkJWkgdG8gcmFpZDAgbm90IHN1cHBvcnRlZFxuIiwKKwkJbWRkZXYtPmxldmVsKTsKKwogCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggYTIzZmZhMy4uMDZjZDcxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtNTkzLDcgKzU5MywxMCBAQAogCWlmIChjb25mLT5wZW5kaW5nX2Jpb19saXN0LmhlYWQpIHsKIAkJc3RydWN0IGJpbyAqYmlvOwogCQliaW8gPSBiaW9fbGlzdF9nZXQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QpOworCQkvKiBPbmx5IHRha2UgdGhlIHNwaW5sb2NrIHRvIHF1aWV0IGEgd2FybmluZyAqLworCQlzcGluX2xvY2soY29uZi0+bWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKIAkJYmxrX3JlbW92ZV9wbHVnKGNvbmYtPm1kZGV2LT5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrKGNvbmYtPm1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkvKiBmbHVzaCBhbnkgcGVuZGluZyBiaXRtYXAgd3JpdGVzIHRvCiAJCSAqIGRpc2sgYmVmb3JlIHByb2NlZWRpbmcgdy8gSS9PICovCkBAIC05NTksNyArOTYyLDcgQEAKIAkJYXRvbWljX2luYygmcjFfYmlvLT5yZW1haW5pbmcpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJYmlvX2xpc3RfYWRkKCZjb25mLT5wZW5kaW5nX2Jpb19saXN0LCBtYmlvKTsKLQkJYmxrX3BsdWdfZGV2aWNlKG1kZGV2LT5xdWV1ZSk7CisJCWJsa19wbHVnX2RldmljZV91bmxvY2tlZChtZGRldi0+cXVldWUpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCX0KIAlyMV9iaW9fd3JpdGVfZG9uZShyMV9iaW8sIGJpby0+YmlfdmNudCwgYmVoaW5kX3BhZ2VzLCBiZWhpbmRfcGFnZXMgIT0gTlVMTCk7CkBAIC0yMDIxLDcgKzIwMjQsNiBAQAogCWlmIChJU19FUlIoY29uZikpCiAJCXJldHVybiBQVFJfRVJSKGNvbmYpOwogCi0JbWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrID0gJmNvbmYtPmRldmljZV9sb2NrOwogCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpIHsKIAkJZGlza19zdGFja19saW1pdHMobWRkZXYtPmdlbmRpc2ssIHJkZXYtPmJkZXYsCiAJCQkJICByZGV2LT5kYXRhX29mZnNldCA8PCA5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEwLmMgYi9kcml2ZXJzL21kL3JhaWQxMC5jCmluZGV4IDY5YjY1OTUuLjc0N2QwNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvcmFpZDEwLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMTAuYwpAQCAtNjYyLDcgKzY2MiwxMCBAQAogCWlmIChjb25mLT5wZW5kaW5nX2Jpb19saXN0LmhlYWQpIHsKIAkJc3RydWN0IGJpbyAqYmlvOwogCQliaW8gPSBiaW9fbGlzdF9nZXQoJmNvbmYtPnBlbmRpbmdfYmlvX2xpc3QpOworCQkvKiBTcGlubG9jayBvbmx5IHRha2VuIHRvIHF1aWV0IGEgd2FybmluZyAqLworCQlzcGluX2xvY2soY29uZi0+bWRkZXYtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKIAkJYmxrX3JlbW92ZV9wbHVnKGNvbmYtPm1kZGV2LT5xdWV1ZSk7CisJCXNwaW5fdW5sb2NrKGNvbmYtPm1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogCQkvKiBmbHVzaCBhbnkgcGVuZGluZyBiaXRtYXAgd3JpdGVzIHRvIGRpc2sKIAkJICogYmVmb3JlIHByb2NlZWRpbmcgdy8gSS9PICovCkBAIC05NzEsNyArOTc0LDcgQEAKIAkJYXRvbWljX2luYygmcjEwX2Jpby0+cmVtYWluaW5nKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbmYtPmRldmljZV9sb2NrLCBmbGFncyk7CiAJCWJpb19saXN0X2FkZCgmY29uZi0+cGVuZGluZ19iaW9fbGlzdCwgbWJpbyk7Ci0JCWJsa19wbHVnX2RldmljZShtZGRldi0+cXVldWUpOworCQlibGtfcGx1Z19kZXZpY2VfdW5sb2NrZWQobWRkZXYtPnF1ZXVlKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTIzMDQsOCArMjMwNyw2IEBACiAJaWYgKCFjb25mKQogCQlnb3RvIG91dDsKIAotCW1kZGV2LT5xdWV1ZS0+cXVldWVfbG9jayA9ICZjb25mLT5kZXZpY2VfbG9jazsKLQogCW1kZGV2LT50aHJlYWQgPSBjb25mLT50aHJlYWQ7CiAJY29uZi0+dGhyZWFkID0gTlVMTDsKIApAQCAtMjQ2MywxMSArMjQ2NCwxMyBAQAogCW1kZGV2LT5yZWNvdmVyeV9jcCA9IE1heFNlY3RvcjsKIAogCWNvbmYgPSBzZXR1cF9jb25mKG1kZGV2KTsKLQlpZiAoIUlTX0VSUihjb25mKSkKKwlpZiAoIUlTX0VSUihjb25mKSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQogCQkJaWYgKHJkZXYtPnJhaWRfZGlzayA+PSAwKQogCQkJCXJkZXYtPm5ld19yYWlkX2Rpc2sgPSByZGV2LT5yYWlkX2Rpc2sgKiAyOwotCQkKKwkJY29uZi0+YmFycmllciA9IDE7CisJfQorCiAJcmV0dXJuIGNvbmY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA1MDQ0YmFiLi43ODUzNmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC01MjA0LDcgKzUyMDQsNiBAQAogCiAJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kZGV2OwogCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gcmFpZDVfY29uZ2VzdGVkOwotCQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAJCW1kZGV2LT5xdWV1ZS0+dW5wbHVnX2ZuID0gcmFpZDVfdW5wbHVnX3F1ZXVlOwogCiAJCWNodW5rX3NpemUgPSBtZGRldi0+Y2h1bmtfc2VjdG9ycyA8PCA5OwpAQCAtNTUxNyw3ICs1NTE2LDYgQEAKIAlyYWlkNV9jb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAltZGtfcmRldl90ICpyZGV2OwogCWludCBzcGFyZXMgPSAwOwotCWludCBhZGRlZF9kZXZpY2VzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHRlc3RfYml0KE1EX1JFQ09WRVJZX1JVTk5JTkcsICZtZGRldi0+cmVjb3ZlcnkpKQpAQCAtNTUyNyw4ICs1NTI1LDggQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJkZXYsICZtZGRldi0+ZGlza3MsIHNhbWVfc2V0KQotCQlpZiAoKHJkZXYtPnJhaWRfZGlzayA8IDAgfHwgcmRldi0+cmFpZF9kaXNrID49IGNvbmYtPnJhaWRfZGlza3MpCi0JCSAgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkKKwkJaWYgKCF0ZXN0X2JpdChJbl9zeW5jLCAmcmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKQogCQkJc3BhcmVzKys7CiAKIAlpZiAoc3BhcmVzIC0gbWRkZXYtPmRlZ3JhZGVkIDwgbWRkZXYtPmRlbHRhX2Rpc2tzIC0gY29uZi0+bWF4X2RlZ3JhZGVkKQpAQCAtNTU3MSwzNCArNTU2OSwzNSBAQAogCSAqIHRvIGNvcnJlY3RseSByZWNvcmQgdGhlICJwYXJ0aWFsbHkgcmVjb25zdHJ1Y3RlZCIgc3RhdGUgb2YKIAkgKiBzdWNoIGRldmljZXMgZHVyaW5nIHRoZSByZXNoYXBlIGFuZCBjb25mdXNpb24gY291bGQgcmVzdWx0LgogCSAqLwotCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPj0gMCkKLQkgICAgbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmbWRkZXYtPmRpc2tzLCBzYW1lX3NldCkKLQkJaWYgKHJkZXYtPnJhaWRfZGlzayA8IDAgJiYKLQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKLQkJCWlmIChyYWlkNV9hZGRfZGlzayhtZGRldiwgcmRldikgPT0gMCkgewotCQkJCWNoYXIgbm1bMjBdOwotCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sgPj0gY29uZi0+cHJldmlvdXNfcmFpZF9kaXNrcykgewotCQkJCQlzZXRfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyk7Ci0JCQkJCWFkZGVkX2RldmljZXMrKzsKLQkJCQl9IGVsc2UKLQkJCQkJcmRldi0+cmVjb3Zlcnlfb2Zmc2V0ID0gMDsKLQkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7Ci0JCQkJaWYgKHN5c2ZzX2NyZWF0ZV9saW5rKCZtZGRldi0+a29iaiwKLQkJCQkJCSAgICAgICZyZGV2LT5rb2JqLCBubSkpCi0JCQkJCS8qIEZhaWx1cmUgaGVyZSBpcyBPSyAqLzsKLQkJCX0gZWxzZQotCQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzCi0JCQkgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpKSB7Ci0JCQkvKiBUaGlzIGlzIGEgc3BhcmUgdGhhdCB3YXMgbWFudWFsbHkgYWRkZWQgKi8KLQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKLQkJCWFkZGVkX2RldmljZXMrKzsKLQkJfQorCWlmIChtZGRldi0+ZGVsdGFfZGlza3MgPj0gMCkgeworCQlpbnQgYWRkZWRfZGV2aWNlcyA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkocmRldiwgJm1kZGV2LT5kaXNrcywgc2FtZV9zZXQpCisJCQlpZiAocmRldi0+cmFpZF9kaXNrIDwgMCAmJgorCQkJICAgICF0ZXN0X2JpdChGYXVsdHksICZyZGV2LT5mbGFncykpIHsKKwkJCQlpZiAocmFpZDVfYWRkX2Rpc2sobWRkZXYsIHJkZXYpID09IDApIHsKKwkJCQkJY2hhciBubVsyMF07CisJCQkJCWlmIChyZGV2LT5yYWlkX2Rpc2sKKwkJCQkJICAgID49IGNvbmYtPnByZXZpb3VzX3JhaWRfZGlza3MpIHsKKwkJCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQkJCWFkZGVkX2RldmljZXMrKzsKKwkJCQkJfSBlbHNlCisJCQkJCQlyZGV2LT5yZWNvdmVyeV9vZmZzZXQgPSAwOworCQkJCQlzcHJpbnRmKG5tLCAicmQlZCIsIHJkZXYtPnJhaWRfZGlzayk7CisJCQkJCWlmIChzeXNmc19jcmVhdGVfbGluaygmbWRkZXYtPmtvYmosCisJCQkJCQkJICAgICAgJnJkZXYtPmtvYmosIG5tKSkKKwkJCQkJCS8qIEZhaWx1cmUgaGVyZSBpcyBPSyAqLzsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHJkZXYtPnJhaWRfZGlzayA+PSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzCisJCQkJICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSkgeworCQkJCS8qIFRoaXMgaXMgYSBzcGFyZSB0aGF0IHdhcyBtYW51YWxseSBhZGRlZCAqLworCQkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKKwkJCQlhZGRlZF9kZXZpY2VzKys7CisJCQl9CiAKLQkvKiBXaGVuIGEgcmVzaGFwZSBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgZGV2aWNlcywgLT5kZWdyYWRlZAotCSAqIGlzIG1lYXN1cmVkIGFnYWluc3QgdGhlIGxhcmdlciBvZiB0aGUgcHJlIGFuZCBwb3N0IG51bWJlciBvZgotCSAqIGRldmljZXMuKi8KLQlpZiAobWRkZXYtPmRlbHRhX2Rpc2tzID4gMCkgeworCQkvKiBXaGVuIGEgcmVzaGFwZSBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgZGV2aWNlcywKKwkJICogLT5kZWdyYWRlZCBpcyBtZWFzdXJlZCBhZ2FpbnN0IHRoZSBsYXJnZXIgb2YgdGhlCisJCSAqIHByZSBhbmQgcG9zdCBudW1iZXIgb2YgZGV2aWNlcy4KKwkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjb25mLT5kZXZpY2VfbG9jaywgZmxhZ3MpOwogCQltZGRldi0+ZGVncmFkZWQgKz0gKGNvbmYtPnJhaWRfZGlza3MgLSBjb25mLT5wcmV2aW91c19yYWlkX2Rpc2tzKQogCQkJLSBhZGRlZF9kZXZpY2VzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pci1saXJjLWNvZGVjLmMgYi9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYwppbmRleCBmMDExYzVkLi4xYzVjYzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2lyLWxpcmMtY29kZWMuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIGlyLWxpcmMtY29kZWMuYyAtIGlyLWNvcmUgdG8gY2xhc3NpYyBsaXJjIGludGVyZmFjZSBicmlkZ2UKKy8qIGlyLWxpcmMtY29kZWMuYyAtIHJjLWNvcmUgdG8gY2xhc3NpYyBsaXJjIGludGVyZmFjZSBicmlkZ2UKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgYnkgSmFyb2QgV2lsc29uIDxqYXJvZEByZWRoYXQuY29tPgogICoKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkvKiBDYXJyaWVyIHJlcG9ydHMgKi8KIAlpZiAoZXYuY2Fycmllcl9yZXBvcnQpIHsKIAkJc2FtcGxlID0gTElSQ19GUkVRVUVOQ1koZXYuY2Fycmllcik7CisJCUlSX2RwcmludGsoMiwgImNhcnJpZXIgcmVwb3J0IChmcmVxOiAlZClcbiIsIHNhbXBsZSk7CiAKIAkvKiBQYWNrZXQgZW5kICovCiAJfSBlbHNlIGlmIChldi50aW1lb3V0KSB7CkBAIC02Miw2ICs2Myw3IEBACiAJCQlyZXR1cm4gMDsKIAogCQlzYW1wbGUgPSBMSVJDX1RJTUVPVVQoZXYuZHVyYXRpb24gLyAxMDAwKTsKKwkJSVJfZHByaW50aygyLCAidGltZW91dCByZXBvcnQgKGR1cmF0aW9uOiAlZClcbiIsIHNhbXBsZSk7CiAKIAkvKiBOb3JtYWwgc2FtcGxlICovCiAJfSBlbHNlIHsKQEAgLTg1LDYgKzg3LDggQEAKIAogCQlzYW1wbGUgPSBldi5wdWxzZSA/IExJUkNfUFVMU0UoZXYuZHVyYXRpb24gLyAxMDAwKSA6CiAJCQkJCUxJUkNfU1BBQ0UoZXYuZHVyYXRpb24gLyAxMDAwKTsKKwkJSVJfZHByaW50aygyLCAiZGVsaXZlcmluZyAldXVzICVzIHRvIGxpcmNfZGV2XG4iLAorCQkJICAgVE9fVVMoZXYuZHVyYXRpb24pLCBUT19TVFIoZXYucHVsc2UpKTsKIAl9CiAKIAlsaXJjX2J1ZmZlcl93cml0ZShkZXYtPnJhdy0+bGlyYy5kcnYtPnJidWYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jIGIvZHJpdmVycy9tZWRpYS9yYy9rZXltYXBzL3JjLXJjNi1tY2UuYwppbmRleCAzYmYzMzM3Li4yZjVkYzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2tleW1hcHMvcmMtcmM2LW1jZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMva2V5bWFwcy9yYy1yYzYtbWNlLmMKQEAgLTMsNiArMyw5IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAyMDEwIGJ5IEphcm9kIFdpbHNvbiA8amFyb2RAcmVkaGF0LmNvbT4KICAqCisgKiBTZWUgaHR0cDovL21lZGlhY2VudGVyZ3VpZGVzLmNvbS9ib29rL2V4cG9ydC9odG1sLzMxIGZvciBkZXRhaWxzIG9uCisgKiBrZXkgbWFwcGluZ3MuCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNjAsNiArNjMsOSBAQAogCXsgMHg4MDBmMDQyNiwgS0VZX0VQRyB9LAkJLyogR3VpZGUgKi8KIAl7IDB4ODAwZjA0MjcsIEtFWV9aT09NIH0sCQkvKiBBc3BlY3QgKi8KIAorCXsgMHg4MDBmMDQzMiwgS0VZX01PREUgfSwJCS8qIFZpc3VhbGl6YXRpb24gKi8KKwl7IDB4ODAwZjA0MzMsIEtFWV9QUkVTRU5UQVRJT04gfSwJLyogU2xpZGUgU2hvdyAqLworCXsgMHg4MDBmMDQzNCwgS0VZX0VKRUNUQ0QgfSwKIAl7IDB4ODAwZjA0M2EsIEtFWV9CUklHSFRORVNTVVAgfSwKIAogCXsgMHg4MDBmMDQ0NiwgS0VZX1RWIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwppbmRleCAwNzkzNTNlLi42ZGYwYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKQEAgLTgxNiw3ICs4MTYsNyBAQAogCXN3aXRjaCAoaXItPmJ1Zl9pbltpbmRleF0pIHsKIAkvKiAyLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCiAJY2FzZSBNQ0VfQ01EX1NfVElNRU9VVDoKLQkJaXItPnJjLT50aW1lb3V0ID0gTVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKKwkJaXItPnJjLT50aW1lb3V0ID0gVVNfVE9fTlMoKGhpIDw8IDggfCBsbykgLyAyKTsKIAkJYnJlYWs7CiAKIAkvKiAxLWJ5dGUgcmV0dXJuIHZhbHVlIGNvbW1hbmRzICovCkBAIC04NTUsOSArODU1LDEwIEBACiAJCQlicmVhazsKIAkJY2FzZSBQQVJTRV9JUkRBVEE6CiAJCQlpci0+cmVtLS07CisJCQlpbml0X2lyX3Jhd19ldmVudCgmcmF3aXIpOwogCQkJcmF3aXIucHVsc2UgPSAoKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfQklUKSAhPSAwKTsKIAkJCXJhd2lyLmR1cmF0aW9uID0gKGlyLT5idWZfaW5baV0gJiBNQ0VfUFVMU0VfTUFTSykKLQkJCQkJICogTVNfVE9fVVMoTUNFX1RJTUVfVU5JVCk7CisJCQkJCSAqIFVTX1RPX05TKE1DRV9USU1FX1VOSVQpOwogCiAJCQlkZXZfZGJnKGlyLT5kZXYsICJTdG9yaW5nICVzIHdpdGggZHVyYXRpb24gJWRcbiIsCiAJCQkJcmF3aXIucHVsc2UgPyAicHVsc2UiIDogInNwYWNlIiwKQEAgLTg4Myw2ICs4ODQsOCBAQAogCQkJCQkgICAgIGksIGlyLT5yZW0gKyAxLCBmYWxzZSk7CiAJCQlpZiAoaXItPnJlbSkKIAkJCQlpci0+cGFyc2VyX3N0YXRlID0gUEFSU0VfSVJEQVRBOworCQkJZWxzZQorCQkJCWlyX3Jhd19ldmVudF9yZXNldChpci0+cmMpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTA2MCw3ICsxMDYzLDcgQEAKIAlyYy0+cHJpdiA9IGlyOwogCXJjLT5kcml2ZXJfdHlwZSA9IFJDX0RSSVZFUl9JUl9SQVc7CiAJcmMtPmFsbG93ZWRfcHJvdG9zID0gUkNfVFlQRV9BTEw7Ci0JcmMtPnRpbWVvdXQgPSBNU19UT19OUygxMDAwKTsKKwlyYy0+dGltZW91dCA9IFVTX1RPX05TKDEwMDApOwogCWlmICghaXItPmZsYWdzLm5vX3R4KSB7CiAJCXJjLT5zX3R4X21hc2sgPSBtY2V1c2Jfc2V0X3R4X21hc2s7CiAJCXJjLT5zX3R4X2NhcnJpZXIgPSBtY2V1c2Jfc2V0X3R4X2NhcnJpZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMgYi9kcml2ZXJzL21lZGlhL3JjL251dm90b24tY2lyLmMKaW5kZXggZGQ0Y2FmOC4uMjczZDlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9udXZvdG9uLWNpci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvbnV2b3Rvbi1jaXIuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWNhcnJpZXIgPSAoY291bnQgKiAxMDAwMDAwKSAvIGR1cmF0aW9uOworCWNhcnJpZXIgPSBNU19UT19OUyhjb3VudCkgLyBkdXJhdGlvbjsKIAogCWlmICgoY2FycmllciA+IE1BWF9DQVJSSUVSKSB8fCAoY2FycmllciA8IE1JTl9DQVJSSUVSKSkKIAkJbnZ0X2RiZygiV1RGPyBDYXJyaWVyIGZyZXF1ZW5jeSBvdXQgb2YgcmFuZ2UhIik7CkBAIC02MTIsOCArNjEyLDggQEAKIAkJc2FtcGxlID0gbnZ0LT5idWZbaV07CiAKIAkJcmF3aXIucHVsc2UgPSAoKHNhbXBsZSAmIEJVRl9QVUxTRV9CSVQpICE9IDApOwotCQlyYXdpci5kdXJhdGlvbiA9IChzYW1wbGUgJiBCVUZfTEVOX01BU0spCi0JCQkJCSogU0FNUExFX1BFUklPRCAqIDEwMDA7CisJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMoKHNhbXBsZSAmIEJVRl9MRU5fTUFTSykKKwkJCQkJICAqIFNBTVBMRV9QRVJJT0QpOwogCiAJCWlmICgoc2FtcGxlICYgQlVGX0xFTl9NQVNLKSA9PSBCVUZfTEVOX01BU0spIHsKIAkJCWlmIChudnQtPnJhd2lyLnB1bHNlID09IHJhd2lyLnB1bHNlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9yYy1tYWluLmMgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwppbmRleCA3MmJlOGEwLi41MTJhMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYwpAQCAtNDU4LDIxICs0NTgsMjcgQEAKIAkJaW5kZXggPSBpcl9sb29rdXBfYnlfc2NhbmNvZGUocmNfbWFwLCBzY2FuY29kZSk7CiAJfQogCi0JaWYgKGluZGV4ID49IHJjX21hcC0+bGVuKSB7Ci0JCWlmICghKGtlLT5mbGFncyAmIElOUFVUX0tFWU1BUF9CWV9JTkRFWCkpCi0JCQlJUl9kcHJpbnRrKDEsICJ1bmtub3duIGtleSBmb3Igc2NhbmNvZGUgMHglMDR4XG4iLAotCQkJCSAgIHNjYW5jb2RlKTsKKwlpZiAoaW5kZXggPCByY19tYXAtPmxlbikgeworCQllbnRyeSA9ICZyY19tYXAtPnNjYW5baW5kZXhdOworCisJCWtlLT5pbmRleCA9IGluZGV4OworCQlrZS0+a2V5Y29kZSA9IGVudHJ5LT5rZXljb2RlOworCQlrZS0+bGVuID0gc2l6ZW9mKGVudHJ5LT5zY2FuY29kZSk7CisJCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKKworCX0gZWxzZSBpZiAoIShrZS0+ZmxhZ3MgJiBJTlBVVF9LRVlNQVBfQllfSU5ERVgpKSB7CisJCS8qCisJCSAqIFdlIGRvIG5vdCByZWFsbHkga25vdyB0aGUgdmFsaWQgcmFuZ2Ugb2Ygc2NhbmNvZGVzCisJCSAqIHNvIGxldCdzIHJlc3BvbmQgd2l0aCBLRVlfUkVTRVJWRUQgdG8gYW55dGhpbmcgd2UKKwkJICogZG8gbm90IGhhdmUgbWFwcGluZyBmb3IgW3lldF0uCisJCSAqLworCQlrZS0+aW5kZXggPSBpbmRleDsKKwkJa2UtPmtleWNvZGUgPSBLRVlfUkVTRVJWRUQ7CisJfSBlbHNlIHsKIAkJcmV0dmFsID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCi0JZW50cnkgPSAmcmNfbWFwLT5zY2FuW2luZGV4XTsKLQotCWtlLT5pbmRleCA9IGluZGV4OwotCWtlLT5rZXljb2RlID0gZW50cnktPmtleWNvZGU7Ci0Ja2UtPmxlbiA9IHNpemVvZihlbnRyeS0+c2NhbmNvZGUpOwotCW1lbWNweShrZS0+c2NhbmNvZGUsICZlbnRyeS0+c2NhbmNvZGUsIHNpemVvZihlbnRyeS0+c2NhbmNvZGUpKTsKLQogCXJldHZhbCA9IDA7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMgYi9kcml2ZXJzL21lZGlhL3JjL3N0cmVhbXphcC5jCmluZGV4IDZlMjkxMWMuLmU0MzVkOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvc3RyZWFtemFwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9zdHJlYW16YXAuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAJCQkJc3otPnNpZ25hbF9zdGFydC50dl91c2VjIC0KIAkJCQlzei0+c2lnbmFsX2xhc3QudHZfdXNlYyk7CiAJCQlyYXdpci5kdXJhdGlvbiAtPSBzei0+c3VtOwotCQkJcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwkJCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMocmF3aXIuZHVyYXRpb24pOwogCQkJcmF3aXIuZHVyYXRpb24gJj0gSVJfTUFYX0RVUkFUSU9OOwogCQl9CiAJCXN6X3B1c2goc3osIHJhd2lyKTsKQEAgLTE3Nyw3ICsxNzcsNyBAQAogCXJhd2lyLmR1cmF0aW9uID0gKChpbnQpIHZhbHVlKSAqIFNaX1JFU09MVVRJT047CiAJcmF3aXIuZHVyYXRpb24gKz0gU1pfUkVTT0xVVElPTiAvIDI7CiAJc3otPnN1bSArPSByYXdpci5kdXJhdGlvbjsKLQlyYXdpci5kdXJhdGlvbiAqPSAxMDAwOworCXJhd2lyLmR1cmF0aW9uID0gVVNfVE9fTlMocmF3aXIuZHVyYXRpb24pOwogCXJhd2lyLmR1cmF0aW9uICY9IElSX01BWF9EVVJBVElPTjsKIAlzel9wdXNoKHN6LCByYXdpcik7CiB9CkBAIC0xOTcsNyArMTk3LDcgQEAKIAlyYXdpci5kdXJhdGlvbiA9ICgoaW50KSB2YWx1ZSkgKiBTWl9SRVNPTFVUSU9OOwogCXJhd2lyLmR1cmF0aW9uICs9IFNaX1JFU09MVVRJT04gLyAyOwogCXN6LT5zdW0gKz0gcmF3aXIuZHVyYXRpb247Ci0JcmF3aXIuZHVyYXRpb24gKj0gMTAwMDsKKwlyYXdpci5kdXJhdGlvbiA9IFVTX1RPX05TKHJhd2lyLmR1cmF0aW9uKTsKIAlzel9wdXNoKHN6LCByYXdpcik7CiB9CiAKQEAgLTI3Myw2ICsyNzMsNyBAQAogCQkJCWlmIChzei0+dGltZW91dF9lbmFibGVkKQogCQkJCQlzel9wdXNoKHN6LCByYXdpcik7CiAJCQkJaXJfcmF3X2V2ZW50X2hhbmRsZShzei0+cmRldik7CisJCQkJaXJfcmF3X2V2ZW50X3Jlc2V0KHN6LT5yZGV2KTsKIAkJCX0gZWxzZSB7CiAJCQkJc3pfcHVzaF9mdWxsX3NwYWNlKHN6LCBzei0+YnVmX2luW2ldKTsKIAkJCX0KQEAgLTI5MCw2ICsyOTEsNyBAQAogCQl9CiAJfQogCisJaXJfcmF3X2V2ZW50X2hhbmRsZShzei0+cmRldik7CiAJdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAogCXJldHVybjsKQEAgLTQzMCwxMyArNDMyLDEzIEBACiAJc3otPmRlY29kZXJfc3RhdGUgPSBQdWxzZVNwYWNlOwogCS8qIEZJWE1FOiBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byBzZXQgdGhpcyAqLwogCXN6LT50aW1lb3V0X2VuYWJsZWQgPSB0cnVlOwotCXN6LT5yZGV2LT50aW1lb3V0ID0gKCgoU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04gKiAxMDAwKSAmCisJc3otPnJkZXYtPnRpbWVvdXQgPSAoKFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKSAmCiAJCQkJSVJfTUFYX0RVUkFUSU9OKSB8IDB4MDMwMDAwMDApOwogCSNpZiAwCiAJLyogbm90IHlldCBzdXBwb3J0ZWQsIGRlcGVuZHMgb24gcGF0Y2hlcyBmcm9tIG1heGltICovCiAJLyogc2VlIGFsc286IExJUkNfR0VUX1JFQ19SRVNPTFVUSU9OIGFuZCBMSVJDX1NFVF9SRUNfVElNRU9VVCAqLwotCXN6LT5taW5fdGltZW91dCA9IFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OICogMTAwMDsKLQlzei0+bWF4X3RpbWVvdXQgPSBTWl9USU1FT1VUICogU1pfUkVTT0xVVElPTiAqIDEwMDA7CisJc3otPm1pbl90aW1lb3V0ID0gVVNfVE9fTlMoU1pfVElNRU9VVCAqIFNaX1JFU09MVVRJT04pOworCXN6LT5tYXhfdGltZW91dCA9IFVTX1RPX05TKFNaX1RJTUVPVVQgKiBTWl9SRVNPTFVUSU9OKTsKIAkjZW5kaWYKIAogCWRvX2dldHRpbWVvZmRheSgmc3otPnNpZ25hbF9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKaW5kZXggODY1MjE2ZS4uNDcyMzZhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwpAQCAtNTc5Myw3ICs1NzkzLDcgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogLyoJCWNhc2UgMHhkZDoJICogZGVsYXkgKi8KLQkJCW1zbGVlcChhY3Rpb24tPnZhbCAvIDY0ICsgMTApOworCQkJbXNsZWVwKGFjdGlvbi0+aWR4KTsKIAkJCWJyZWFrOwogCQl9CiAJCWFjdGlvbisrOwpAQCAtNTgzMCw3ICs1ODMwLDcgQEAKIAkJW1NFTlNPUl9HQzAzMDVdID0JZ2MwMzA1X21hdHJpeCwKIAkJW1NFTlNPUl9IRENTMjAyMGJdID0JTlVMTCwKIAkJW1NFTlNPUl9IVjcxMzFCXSA9CU5VTEwsCi0JCVtTRU5TT1JfSFY3MTMxUl0gPQlOVUxMLAorCQlbU0VOU09SX0hWNzEzMVJdID0JcG8yMDMwX21hdHJpeCwKIAkJW1NFTlNPUl9JQ00xMDVBXSA9CXBvMjAzMF9tYXRyaXgsCiAJCVtTRU5TT1JfTUM1MDFDQl0gPQlOVUxMLAogCQlbU0VOU09SX01UOVYxMTFfMV0gPQlnYzAzMDVfbWF0cml4LApAQCAtNTkzNiw2ICs1OTM2LDcgQEAKIAljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfSFY3MTMxQjoKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX09WNzYyMDoKIAljYXNlIFNFTlNPUl9QQVMyMDJCOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKQEAgLTYxMDgsMTEgKzYxMDksMTMgQEAKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAyLCAweDAwM2IpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4MDAzOCk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAweDAwM2IpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGMsIDB4MDAzYSk7CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwYiwgMHgwMDM5KTsKLQkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzgpOworCQlpZiAoc2Vuc29yID09IFNFTlNPUl9QQVMyMDJCKQorCQkJcmVnX3coZ3NwY2FfZGV2LCAweDBiLCAweDAwMzgpOwogCQlicmVhazsKIAl9CiB9CkBAIC02NzA0LDEwICs2NzA3LDEzIEBACiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMiwgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDAwMzgpOwogCQlicmVhazsKKwljYXNlIFNFTlNPUl9IVjcxMzFSOgogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJCXJlZ193KGdzcGNhX2RldiwgMHgwMywgMHgwMDNiKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDBjLCAweDAwM2EpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MGIsIDB4MDAzOSk7CisJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9IVjcxMzFSKQorCQkJcmVnX3coZ3NwY2FfZGV2LCAweDUwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU4pOwogCQlicmVhazsKIAl9CiAKQEAgLTY3MjAsNiArNjcyNiw3IEBACiAJCWJyZWFrOwogCWNhc2UgU0VOU09SX1BBUzIwMkI6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgorCWNhc2UgU0VOU09SX0hWNzEzMVI6CiAJY2FzZSBTRU5TT1JfVEFTNTEzMEM6CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKIAkJLyogZmFsbCB0aHJ1ICovCkBAIC02NzYwLDYgKzY3NjcsMTIgQEAKIAkJCQkJCS8qIG1zLXdpbiArICovCiAJCXJlZ193KGdzcGNhX2RldiwgMHg0MCwgMHgwMTE3KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfSFY3MTMxUjoKKwkJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgyNSwgMHgwNCwgMHgwMCk7CS8qIGV4cG9zdXJlICovCisJCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MjYsIDB4OTMsIDB4MDApOworCQlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDI3LCAweGUwLCAweDAwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOKTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX1RBUzUxMzBDOgogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCkBAIC02ODA4LDkgKzY4MjEsMTcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlpZiAoZGF0YVswXSA9PSAweGZmICYmIGRhdGFbMV0gPT0gMHhkOCkgewkvKiBzdGFydCBvZiBmcmFtZSAqLworCS8qIGNoZWNrIHRoZSBKUEVHIGVuZCBvZiBmcmFtZSAqLworCWlmIChsZW4gPj0gMworCSAmJiBkYXRhW2xlbiAtIDNdID09IDB4ZmYgJiYgZGF0YVtsZW4gLSAyXSA9PSAweGQ5KSB7CisvKmZpeG1lOiB3aGF0IGRvZXMgdGhlIGxhc3QgYnl0ZSBtZWFuPyovCiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAotCQkJCQlOVUxMLCAwKTsKKwkJCQkJZGF0YSwgbGVuIC0gMSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayB0aGUgSlBFRyBzdGFydCBvZiBhIGZyYW1lICovCisJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsKIAkJLyogcHV0IHRoZSBKUEVHIGhlYWRlciBpbiB0aGUgbmV3IGZyYW1lICovCiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwKIAkJCXNkLT5qcGVnX2hkciwgSlBFR19IRFJfU1opOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwppbmRleCBhNjU3MmU1Li5hMjdkOTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvcmUuYwpAQCAtMjgzLDYgKzI4Myw3IEBACiAJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXNpemVfdCBidWZmZXJfc2l6ZTsKIAlpbnQgaTsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKQEAgLTM4MSwxMyArMzgyLDIxIEBACiAjaWYgZGVmaW5lZChDT05GSUdfSTJDKSB8fCBkZWZpbmVkKENPTkZJR19JMkNfTU9EVUxFKQogCXJldHZhbCA9IGhkcHZyX3JlZ2lzdGVyX2kyY19hZGFwdGVyKGRldik7CiAJaWYgKHJldHZhbCA8IDApIHsKLQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJyZWdpc3RlcmluZyBpMmMgYWRhcHRlciBmYWlsZWRcbiIpOworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBhZGFwdGVyIHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcmV0dmFsID0gaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKGRldik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAicmVnaXN0ZXJpbmcgaTJjIElSIGRldmljZXMgZmFpbGVkXG4iKTsKKwljbGllbnQgPSBoZHB2cl9yZWdpc3Rlcl9pcl9yeF9pMmMoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBJUiBSWCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byByZWdfZmFpbDsKKwl9CisKKwljbGllbnQgPSBoZHB2cl9yZWdpc3Rlcl9pcl90eF9pMmMoZGV2KTsKKwlpZiAoIWNsaWVudCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImkyYyBJUiBUWCBkZXZpY2UgcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byByZWdfZmFpbDsKKwl9CiAjZW5kaWYKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KQEAgLTM5NSw2ICs0MDQsMTAgQEAKIAkJICB2aWRlb19kZXZpY2Vfbm9kZV9uYW1lKGRldi0+dmlkZW9fZGV2KSk7CiAJcmV0dXJuIDA7CiAKK3JlZ19mYWlsOgorI2lmIGRlZmluZWQoQ09ORklHX0kyQykgfHwgZGVmaW5lZChDT05GSUdfSTJDX01PRFVMRSkKKwlpMmNfZGVsX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXB0ZXIpOworI2VuZGlmCiBlcnJvcjoKIAlpZiAoZGV2KSB7CiAJCS8qIERlc3Ryb3kgc2luZ2xlIHRocmVhZCAqLwpAQCAtNDI0LDYgKzQzNyw5IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CiAJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKyNpZiBkZWZpbmVkKENPTkZJR19JMkMpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19NT0RVTEUpCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmkyY19hZGFwdGVyKTsKKyNlbmRpZgogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmlkZW9fZGV2KTsKIAlhdG9taWNfZGVjKCZkZXZfbnIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMKaW5kZXggODliNzFmYS4uZTUzZmE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCkBAIC0zMSwyNiArMzEsMzQgQEAKICNkZWZpbmUgWjhGMDgxMV9JUl9SWF9JMkNfQUREUgkweDcxCiAKIAotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pMmNfYm9hcmRfaW5mbyA9IHsKLQlJMkNfQk9BUkRfSU5GTygiaXJfdHhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfVFhfSTJDX0FERFIpLAotCUkyQ19CT0FSRF9JTkZPKCJpcl9yeF96OGYwODExX2hkcHZyIiwgWjhGMDgxMV9JUl9SWF9JMkNfQUREUiksCi19OwotCi1pbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3N0cnVjdCBpMmNfY2xpZW50ICpoZHB2cl9yZWdpc3Rlcl9pcl90eF9pMmMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpMmNfY2xpZW50ICpjOwogCXN0cnVjdCBJUl9pMmNfaW5pdF9kYXRhICppbml0X2RhdGEgPSAmZGV2LT5pcl9pMmNfaW5pdF9kYXRhOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBoZHB2cl9pcl90eF9pMmNfYm9hcmRfaW5mbyA9IHsKKwkJSTJDX0JPQVJEX0lORk8oImlyX3R4X3o4ZjA4MTFfaGRwdnIiLCBaOEYwODExX0lSX1RYX0kyQ19BRERSKSwKKwl9OworCisJaW5pdF9kYXRhLT5uYW1lID0gIkhELVBWUiI7CisJaGRwdnJfaXJfdHhfaTJjX2JvYXJkX2luZm8ucGxhdGZvcm1fZGF0YSA9IGluaXRfZGF0YTsKKworCXJldHVybiBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2lyX3R4X2kyY19ib2FyZF9pbmZvKTsKK30KKworc3RydWN0IGkyY19jbGllbnQgKmhkcHZyX3JlZ2lzdGVyX2lyX3J4X2kyYyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IElSX2kyY19pbml0X2RhdGEgKmluaXRfZGF0YSA9ICZkZXYtPmlyX2kyY19pbml0X2RhdGE7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvID0geworCQlJMkNfQk9BUkRfSU5GTygiaXJfcnhfejhmMDgxMV9oZHB2ciIsIFo4RjA4MTFfSVJfUlhfSTJDX0FERFIpLAorCX07CiAKIAkvKiBPdXIgZGVmYXVsdCBpbmZvcm1hdGlvbiBmb3IgaXIta2JkLWkyYy5jIHRvIHVzZSAqLwogCWluaXRfZGF0YS0+aXJfY29kZXMgPSBSQ19NQVBfSEFVUFBBVUdFX05FVzsKIAlpbml0X2RhdGEtPmludGVybmFsX2dldF9rZXlfZnVuYyA9IElSX0tCRF9HRVRfS0VZX0hBVVBfWFZSOwogCWluaXRfZGF0YS0+dHlwZSA9IFJDX1RZUEVfUkM1OwotCWluaXRfZGF0YS0+bmFtZSA9ICJIRCBQVlIiOwotCWhkcHZyX2kyY19ib2FyZF9pbmZvLnBsYXRmb3JtX2RhdGEgPSBpbml0X2RhdGE7CisJaW5pdF9kYXRhLT5uYW1lID0gIkhELVBWUiI7CisJaGRwdnJfaXJfcnhfaTJjX2JvYXJkX2luZm8ucGxhdGZvcm1fZGF0YSA9IGluaXRfZGF0YTsKIAotCWMgPSBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2kyY19ib2FyZF9pbmZvKTsKLQotCXJldHVybiAoYyA9PSBOVUxMKSA/IC1FTk9ERVYgOiAwOworCXJldHVybiBpMmNfbmV3X2RldmljZSgmZGV2LT5pMmNfYWRhcHRlciwgJmhkcHZyX2lyX3J4X2kyY19ib2FyZF9pbmZvKTsKIH0KIAogc3RhdGljIGludCBoZHB2cl9pMmNfcmVhZChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIGludCBidXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKaW5kZXggZWU3NGUzYi4uMDcyZjIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnIuaApAQCAtMzEzLDcgKzMxMyw4IEBACiAvKiBpMmMgYWRhcHRlciByZWdpc3RyYXRpb24gKi8KIGludCBoZHB2cl9yZWdpc3Rlcl9pMmNfYWRhcHRlcihzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOwogCi1pbnQgaGRwdnJfcmVnaXN0ZXJfaTJjX2lyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfcnhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitzdHJ1Y3QgaTJjX2NsaWVudCAqaGRwdnJfcmVnaXN0ZXJfaXJfdHhfaTJjKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIC8qIGJ1ZmZlciBtYW5hZ2VtZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGQyYjIwYWQuLmEyMjFhZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0xMjgsNiArMTI4LDE5IEBACiAKIHN0YXRpYyBpbnQgZ2V0X2tleV9oYXVwX3h2cihzdHJ1Y3QgSVJfaTJjICppciwgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQogeworCWludCByZXQ7CisJdW5zaWduZWQgY2hhciBidWZbMV0gPSB7IDAgfTsKKworCS8qCisJICogVGhpcyBpcyB0aGUgc2FtZSBhcHBhcmVudCAiYXJlIHlvdSByZWFkeT8iIHBvbGwgY29tbWFuZCBvYnNlcnZlZAorCSAqIHdhdGNoaW5nIFdpbmRvd3MgZHJpdmVyIHRyYWZmaWMgYW5kIGltcGxlbWVudGVkIGluIGxpcmNfemlsb2cuIFdpdGgKKwkgKiB0aGlzIGFkZGVkLCB3ZSBnZXQgZmFyIHNhbmVyIHJlbW90ZSBiZWhhdmlvciB3aXRoIHo4IGNoaXBzIG9uIHVzYgorCSAqIGNvbm5lY3RlZCBkZXZpY2VzLCBldmVuIHdpdGggdGhlIGRlZmF1bHQgcG9sbGluZyBpbnRlcnZhbCBvZiAxMDBtcy4KKwkgKi8KKwlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoaXItPmMsIGJ1ZiwgMSk7CisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gKHJldCA8IDApID8gcmV0IDogLUVJTlZBTDsKKwogCXJldHVybiBnZXRfa2V5X2hhdXBfY29tbW9uIChpciwgaXJfa2V5LCBpcl9yYXcsIDYsIDMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwppbmRleCBjY2M4ODQ5Li40NTFlY2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKQEAgLTU5Nyw3ICs1OTcsNiBAQAogCQlpbml0X2RhdGEtPmludGVybmFsX2dldF9rZXlfZnVuYyA9IElSX0tCRF9HRVRfS0VZX0hBVVBfWFZSOwogCQlpbml0X2RhdGEtPnR5cGUgICAgICAgICAgICAgICAgICA9IFJDX1RZUEVfUkM1OwogCQlpbml0X2RhdGEtPm5hbWUgICAgICAgICAgICAgICAgICA9IGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uOwotCQlpbml0X2RhdGEtPnBvbGxpbmdfaW50ZXJ2YWwgICAgICA9IDI2MDsgLyogbXMgRnJvbSBsaXJjX3ppbG9nICovCiAJCS8qIElSIFJlY2VpdmVyICovCiAJCWluZm8uYWRkciAgICAgICAgICA9IDB4NzE7CiAJCWluZm8ucGxhdGZvcm1fZGF0YSA9IGluaXRfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKaW5kZXggZjM1NDU5ZC4uMGRiOTA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMKQEAgLTE1NjUsNyArMTU2NSw3IEBACiAJY2hpcF9pZCA9IG5hbWVbNV07CiAKIAkvKiBDaGVjayB3aGV0aGVyIHRoaXMgY2hpcCBpcyBwYXJ0IG9mIHRoZSBzYWE3MTF4IHNlcmllcyAqLwotCWlmIChtZW1jbXAobmFtZSwgIjFmNzExIiwgNSkpIHsKKwlpZiAobWVtY21wKG5hbWUgKyAxLCAiZjcxMSIsIDQpKSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4IChJRCAlcykgZG9lcyBub3QgbWF0Y2ggYSBrbm93biBzYWE3MTF4IGNoaXAuXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIG5hbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVtc3RpY2svY29yZS9tZW1zdGljay5jIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMKaW5kZXggZTlhM2VhYi4uOGMxZDg1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMKKysrIGIvZHJpdmVycy9tZW1zdGljay9jb3JlL21lbXN0aWNrLmMKQEAgLTYyMSw3ICs2MjEsNyBAQAogewogCWludCByYzsKIAotCXdvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgia21lbXN0aWNrIik7CisJd29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoImttZW1zdGljayIpOwogCWlmICghd29ya3F1ZXVlKQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmggYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAppbmRleCBmNzFmMjI5Li4xNzM1Yzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaAorKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGJhc2UuaApAQCAtNzYsOCArNzYsOCBAQAogI2RlZmluZSBDT1BZUklHSFQJIkNvcHlyaWdodCAoYykgMTk5OS0yMDA4ICIgTU9EVUxFQVVUSE9SCiAjZW5kaWYKIAotI2RlZmluZSBNUFRfTElOVVhfVkVSU0lPTl9DT01NT04JIjMuMDQuMTciCi0jZGVmaW5lIE1QVF9MSU5VWF9QQUNLQUdFX05BTUUJCSJAKCMpbXB0bGludXgtMy4wNC4xNyIKKyNkZWZpbmUgTVBUX0xJTlVYX1ZFUlNJT05fQ09NTU9OCSIzLjA0LjE4IgorI2RlZmluZSBNUFRfTElOVVhfUEFDS0FHRV9OQU1FCQkiQCgjKW1wdGxpbnV4LTMuMDQuMTgiCiAjZGVmaW5lIFdIQVRfTUFHSUNfU1RSSU5HCQkiQCIgIigiICIjIiAiKSIKIAogI2RlZmluZSBzaG93X21wdG1vZF92ZXIocyx2ZXIpICBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRjdGwuYwppbmRleCBhMzg1NmVkLi5lOGRlYjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGN0bC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0Y3RsLmMKQEAgLTU5Nyw2ICs1OTcsMTMgQEAKIH0KIAogc3RhdGljIGludAorbXB0Y3RsX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQoreworCWZhc3luY19oZWxwZXIoLTEsIGZpbGVwLCAwLCAmYXN5bmNfcXVldWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBtcHRjdGxfZmFzeW5jKGludCBmZCwgc3RydWN0IGZpbGUgKmZpbGVwLCBpbnQgbW9kZSkKIHsKIAlNUFRfQURBUFRFUgkqaW9jOwpAQCAtMjgxNSw2ICsyODIyLDcgQEAKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCS5mYXN5bmMgPSAJbXB0Y3RsX2Zhc3luYywKIAkudW5sb2NrZWRfaW9jdGwgPSBtcHRjdGxfaW9jdGwsCisJLnJlbGVhc2UgPQltcHRjdGxfcmVsZWFzZSwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bCA9IGNvbXBhdF9tcGN0bF9pb2N0bCwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRzY3NpaC5jCmluZGV4IDU5YjhmNTMuLjBkOWI4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0c2NzaWguYworKysgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdHNjc2loLmMKQEAgLTE4NzMsOCArMTg3Myw5IEBACiAJfQogCiAgb3V0OgotCXByaW50ayhNWUlPQ19zX0lORk9fRk1UICJ0YXNrIGFib3J0OiAlcyAoc2M9JXApXG4iLAotCSAgICBpb2MtPm5hbWUsICgocmV0dmFsID09IFNVQ0NFU1MpID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpLCBTQ3BudCk7CisJcHJpbnRrKE1ZSU9DX3NfSU5GT19GTVQgInRhc2sgYWJvcnQ6ICVzIChydj0lMDR4KSAoc2M9JXApIChzbj0lbGQpXG4iLAorCSAgICBpb2MtPm5hbWUsICgocmV0dmFsID09IFNVQ0NFU1MpID8gIlNVQ0NFU1MiIDogIkZBSUxFRCIpLCByZXR2YWwsCisJICAgIFNDcG50LCBTQ3BudC0+c2VyaWFsX251bWJlcik7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTkxMSw3ICsxOTEyLDcgQEAKIAogCXZkZXZpY2UgPSBTQ3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKIAlpZiAoIXZkZXZpY2UgfHwgIXZkZXZpY2UtPnZ0YXJnZXQpIHsKLQkJcmV0dmFsID0gU1VDQ0VTUzsKKwkJcmV0dmFsID0gMDsKIAkJZ290byBvdXQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hc2ljMy5jIGIvZHJpdmVycy9tZmQvYXNpYzMuYwppbmRleCA2YTFmOTQwLi5jNDVlNjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hc2ljMy5jCisrKyBiL2RyaXZlcnMvbWZkL2FzaWMzLmMKQEAgLTE0Myw5ICsxNDMsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFzaWMzICphc2ljOwogCi0JZGVzYy0+Y2hpcC0+YWNrKGlycSk7CisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2RhdGEpOwogCi0JYXNpYyA9IGRlc2MtPmhhbmRsZXJfZGF0YTsKKwlhc2ljID0gZ2V0X2lycV9kYXRhKGlycSk7CiAKIAlmb3IgKGl0ZXIgPSAwIDsgaXRlciA8IE1BWF9BU0lDX0lTUl9MT09QUzsgaXRlcisrKSB7CiAJCXUzMiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9kYXZpbmNpX3ZvaWNlY29kZWMuYyBiL2RyaXZlcnMvbWZkL2RhdmluY2lfdm9pY2Vjb2RlYy5jCmluZGV4IDMzYzkyM2QuLmZkZDhhMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2RhdmluY2lfdm9pY2Vjb2RlYy5jCisrKyBiL2RyaXZlcnMvbWZkL2RhdmluY2lfdm9pY2Vjb2RlYy5jCkBAIC0xMTgsMTIgKzExOCwxMiBAQAogCiAJLyogVm9pY2UgY29kZWMgaW50ZXJmYWNlIGNsaWVudCAqLwogCWNlbGwgPSAmZGF2aW5jaV92Yy0+Y2VsbHNbREFWSU5DSV9WQ19WQ0lGX0NFTExdOwotCWNlbGwtPm5hbWUgPSAiZGF2aW5jaV92Y2lmIjsKKwljZWxsLT5uYW1lID0gImRhdmluY2ktdmNpZiI7CiAJY2VsbC0+ZHJpdmVyX2RhdGEgPSBkYXZpbmNpX3ZjOwogCiAJLyogVm9pY2UgY29kZWMgQ1E5M1ZDIGNsaWVudCAqLwogCWNlbGwgPSAmZGF2aW5jaV92Yy0+Y2VsbHNbREFWSU5DSV9WQ19DUTkzVkNfQ0VMTF07Ci0JY2VsbC0+bmFtZSA9ICJjcTkzdmMiOworCWNlbGwtPm5hbWUgPSAiY3E5M3ZjLWNvZGVjIjsKIAljZWxsLT5kcml2ZXJfZGF0YSA9IGRhdmluY2lfdmM7CiAKIAlyZXQgPSBtZmRfYWRkX2RldmljZXMoJnBkZXYtPmRldiwgcGRldi0+aWQsIGRhdmluY2lfdmMtPmNlbGxzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHBzNjU4NnguYyBiL2RyaXZlcnMvbWZkL3RwczY1ODZ4LmMKaW5kZXggNjI3Y2Y1Ny4uZTkwMThkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdHBzNjU4NnguYworKysgYi9kcml2ZXJzL21mZC90cHM2NTg2eC5jCkBAIC0xNTAsMTIgKzE1MCwxMiBAQAogc3RhdGljIGlubGluZSBpbnQgX190cHM2NTg2eF93cml0ZXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHJlZywKIAkJCQkgIGludCBsZW4sIHVpbnQ4X3QgKnZhbCkKIHsKLQlpbnQgcmV0OworCWludCByZXQsIGk7CiAKLQlyZXQgPSBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoY2xpZW50LCByZWcsIGxlbiwgdmFsKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB3cml0aW5ncyB0byAweCUwMnhcbiIsIHJlZyk7Ci0JCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXJldCA9IF9fdHBzNjU4Nnhfd3JpdGUoY2xpZW50LCByZWcgKyBpLCAqKHZhbCArIGkpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCmluZGV4IDAwMGNiNDEuLjkyYjg1ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKQEAgLTM4NSwxMiArMzg1LDE4IEBACiAJaWRldi0+Y2xvc2UgICAgICA9IHVjYjF4MDBfdHNfY2xvc2U7CiAKIAlfX3NldF9iaXQoRVZfQUJTLCBpZGV2LT5ldmJpdCk7Ci0JX19zZXRfYml0KEFCU19YLCBpZGV2LT5hYnNiaXQpOwotCV9fc2V0X2JpdChBQlNfWSwgaWRldi0+YWJzYml0KTsKLQlfX3NldF9iaXQoQUJTX1BSRVNTVVJFLCBpZGV2LT5hYnNiaXQpOwogCiAJaW5wdXRfc2V0X2RydmRhdGEoaWRldiwgdHMpOwogCisJdWNiMXgwMF9hZGNfZW5hYmxlKHRzLT51Y2IpOworCXRzLT54X3JlcyA9IHVjYjF4MDBfdHNfcmVhZF94cmVzKHRzKTsKKwl0cy0+eV9yZXMgPSB1Y2IxeDAwX3RzX3JlYWRfeXJlcyh0cyk7CisJdWNiMXgwMF9hZGNfZGlzYWJsZSh0cy0+dWNiKTsKKworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlkZXYsIEFCU19YLCAwLCB0cy0+eF9yZXMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlkZXYsIEFCU19ZLCAwLCB0cy0+eV9yZXMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlkZXYsIEFCU19QUkVTU1VSRSwgMCwgMCwgMCwgMCk7CisKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWRldik7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKaW5kZXggNDEyMzNjNy4uZjQwMTZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTg5OTQtY29yZS5jCkBAIC0yNDYsNiArMjQ2LDE2IEBACiAJc3RydWN0IHdtODk5NCAqd204OTk0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldDsKIAorCS8qIERvbid0IGFjdHVhbGx5IGdvIHRocm91Z2ggd2l0aCB0aGUgc3VzcGVuZCBpZiB0aGUgQ09ERUMgaXMKKwkgKiBzdGlsbCBhY3RpdmUgKGVnLCBmb3IgYXVkaW8gcGFzc3Rocm91Z2ggZnJvbSBDUC4gKi8KKwlyZXQgPSB3bTg5OTRfcmVnX3JlYWQod204OTk0LCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZWFkIHBvd2VyIHN0YXR1czogJWRcbiIsIHJldCk7CisJfSBlbHNlIGlmIChyZXQgJiBXTTg5OTRfVk1JRF9TRUxfTUFTSykgeworCQlkZXZfZGJnKGRldiwgIkNPREVDIHN0aWxsIGFjdGl2ZSwgaWdub3Jpbmcgc3VzcGVuZFxuIik7CisJCXJldHVybiAwOworCX0KKwogCS8qIEdQSU8gY29uZmlndXJhdGlvbiBzdGF0ZSBpcyBzYXZlZCBoZXJlIHNpbmNlIHdlIG1heSBiZSBjb25maWd1cmluZwogCSAqIHRoZSBHUElPIGFsdGVybmF0ZSBmdW5jdGlvbnMgZXZlbiBpZiB3ZSdyZSBub3QgdXNpbmcgdGhlIGdwaW9saWIKIAkgKiBkcml2ZXIgZm9yIHRoZW0uCkBAIC0yNjEsNiArMjcxLDggQEAKIAlpZiAocmV0IDwgMCkKIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc2F2ZSBMRE8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKIAorCXdtODk5NC0+c3VzcGVuZGVkID0gdHJ1ZTsKKwogCXJldCA9IHJlZ3VsYXRvcl9idWxrX2Rpc2FibGUod204OTk0LT5udW1fc3VwcGxpZXMsCiAJCQkJICAgICB3bTg5OTQtPnN1cHBsaWVzKTsKIAlpZiAocmV0ICE9IDApIHsKQEAgLTI3Niw2ICsyODgsMTAgQEAKIAlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgcmV0OwogCisJLyogV2UgbWF5IGhhdmUgbGllZCB0byB0aGUgUE0gY29yZSBhYm91dCBzdXNwZW5kaW5nICovCisJaWYgKCF3bTg5OTQtPnN1c3BlbmRlZCkKKwkJcmV0dXJuIDA7CisKIAlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUod204OTk0LT5udW1fc3VwcGxpZXMsCiAJCQkJICAgIHdtODk5NC0+c3VwcGxpZXMpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtMjk4LDYgKzMxNCw4IEBACiAJaWYgKHJldCA8IDApCiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc3RvcmUgR1BJTyByZWdpc3RlcnM6ICVkXG4iLCByZXQpOwogCisJd204OTk0LT5zdXNwZW5kZWQgPSBmYWxzZTsKKwogCXJldHVybiAwOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvYm1wMDg1LmMgYi9kcml2ZXJzL21pc2MvYm1wMDg1LmMKaW5kZXggNjNlZTRjMS4uYjZlMWM5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2JtcDA4NS5jCisrKyBiL2RyaXZlcnMvbWlzYy9ibXAwODUuYwpAQCAtNDQ5LDYgKzQ0OSw3IEBACiAJeyAiYm1wMDg1IiwgMCB9LAogCXsgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBibXAwODVfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgYm1wMDg1X2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RpZm1fY29yZS5jIGIvZHJpdmVycy9taXNjL3RpZm1fY29yZS5jCmluZGV4IDVmNjg1MmQuLjQ0ZDQ0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy90aWZtX2NvcmUuYworKysgYi9kcml2ZXJzL21pc2MvdGlmbV9jb3JlLmMKQEAgLTMyOSw3ICszMjksNyBAQAogewogCWludCByYzsKIAotCXdvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgidGlmbSIpOworCXdvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJ0aWZtIik7CiAJaWYgKCF3b3JrcXVldWUpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvdm13X2JhbGxvb24uYyBiL2RyaXZlcnMvbWlzYy92bXdfYmFsbG9vbi5jCmluZGV4IDRkMmVhOGUuLjZkZjVhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy92bXdfYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMvbWlzYy92bXdfYmFsbG9vbi5jCkBAIC03ODUsNyArNzg1LDcgQEAKIAlpZiAoeDg2X2h5cGVyICE9ICZ4ODZfaHlwZXJfdm13YXJlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXZtYmFsbG9vbl93cSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgidm1tZW1jdGwiKTsKKwl2bWJhbGxvb25fd3EgPSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZSgidm1tZW1jdGwiKTsKIAlpZiAoIXZtYmFsbG9vbl93cSkgewogCQlwcl9lcnIoImZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW8uYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCmluZGV4IDVjNGE1NGQuLmViYzYyYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jCkBAIC03OTIsNyArNzkyLDYgQEAKIAkgKi8KIAltbWNfcmVsZWFzZV9ob3N0KGhvc3QpOwogCWVyciA9IG1tY19hZGRfY2FyZChob3N0LT5jYXJkKTsKLQltbWNfY2xhaW1faG9zdChob3N0KTsKIAlpZiAoZXJyKQogCQlnb3RvIHJlbW92ZV9hZGRlZDsKIApAQCAtODA1LDEyICs4MDQsMTIgQEAKIAkJCWdvdG8gcmVtb3ZlX2FkZGVkOwogCX0KIAorCW1tY19jbGFpbV9ob3N0KGhvc3QpOwogCXJldHVybiAwOwogCiAKIHJlbW92ZV9hZGRlZDoKIAkvKiBSZW1vdmUgd2l0aG91dCBsb2NrIGlmIHRoZSBkZXZpY2UgaGFzIGJlZW4gYWRkZWQuICovCi0JbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAltbWNfc2Rpb19yZW1vdmUoaG9zdCk7CiAJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiByZW1vdmU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKaW5kZXggYmFjN2Q2Mi4uMDM3MWJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYwpAQCAtNDYyLDcgKzQ2Miw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1tYyA9IG1tY19hbGxvY19ob3N0KHNpemVvZigqbW1jKSwgJnBkZXYtPmRldik7CisJbW1jID0gbW1jX2FsbG9jX2hvc3Qoc2l6ZW9mKHN0cnVjdCBzZGhfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYwppbmRleCBiM2EwYWIwLi43NDIxOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYwpAQCAtMTQsNiArMTQsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC04MjcsOCArODI4LDggQEAKIAl9CiAKIAlob3N0LT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJtbWMiKTsKLQlpZiAoIWhvc3QtPmNsaykgewotCQlyZXQgPSAtRU5PRU5UOworCWlmIChJU19FUlIoaG9zdC0+Y2xrKSkgeworCQlyZXQgPSBQVFJfRVJSKGhvc3QtPmNsayk7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBnZXQgbW1jIGNsb2NrXG4iKTsKIAkJZ290byBlcnJfZnJlZV9ob3N0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKaW5kZXggNTYzMDIyOC4uMmQ2ZGUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KQEAgLTQ2LDEwICs0Nyw2IEBACiAgKgkgICAgICBpcyBhc3NlcnRlZCAobGlrZXdpc2UgZm9yIFJYKQogICogQGZpZm9oYWxmc2l6ZTogbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gd2hlbiBNQ0lfVFhGSUZPSEFMRkVNUFRZCiAgKgkJICBpcyBhc3NlcnRlZCAobGlrZXdpc2UgZm9yIFJYKQotICogQGJyb2tlbl9ibG9ja2VuZDogdGhlIE1DSV9EQVRBQkxPQ0tFTkQgaXMgYnJva2VuIG9uIHRoZSBoYXJkd2FyZQotICoJCWFuZCB3aWxsIG5vdCB3b3JrIGF0IGFsbC4KLSAqIEBicm9rZW5fYmxvY2tlbmRfZG1hOiB0aGUgTUNJX0RBVEFCTE9DS0VORCBpcyBicm9rZW4gb24gdGhlIGhhcmR3YXJlIHdoZW4KLSAqCQl1c2luZyBETUEuCiAgKiBAc2RpbzogdmFyaWFudCBzdXBwb3J0cyBTRElPCiAgKiBAc3RfY2xrZGl2OiB0cnVlIGlmIHVzaW5nIGEgU1Qtc3BlY2lmaWMgY2xvY2sgZGl2aWRlciBhbGdvcml0aG0KICAqLwpAQCAtNTksOCArNTYsNiBAQAogCXVuc2lnbmVkIGludAkJZGF0YWxlbmd0aF9iaXRzOwogCXVuc2lnbmVkIGludAkJZmlmb3NpemU7CiAJdW5zaWduZWQgaW50CQlmaWZvaGFsZnNpemU7Ci0JYm9vbAkJCWJyb2tlbl9ibG9ja2VuZDsKLQlib29sCQkJYnJva2VuX2Jsb2NrZW5kX2RtYTsKIAlib29sCQkJc2RpbzsKIAlib29sCQkJc3RfY2xrZGl2OwogfTsKQEAgLTc2LDcgKzcxLDYgQEAKIAkuZmlmb2hhbGZzaXplCQk9IDggKiA0LAogCS5jbGtyZWdfZW5hYmxlCQk9IDEgPDwgMTMsIC8qIEhXRkNFTiAqLwogCS5kYXRhbGVuZ3RoX2JpdHMJPSAxNiwKLQkuYnJva2VuX2Jsb2NrZW5kX2RtYQk9IHRydWUsCiAJLnNkaW8JCQk9IHRydWUsCiB9OwogCkBAIC04Niw3ICs4MCw2IEBACiAJLmNsa3JlZwkJCT0gTUNJX0NMS19FTkFCTEUsCiAJLmNsa3JlZ19lbmFibGUJCT0gMSA8PCAxNCwgLyogSFdGQ0VOICovCiAJLmRhdGFsZW5ndGhfYml0cwk9IDI0LAotCS5icm9rZW5fYmxvY2tlbmQJPSB0cnVlLAogCS5zZGlvCQkJPSB0cnVlLAogCS5zdF9jbGtkaXYJCT0gdHJ1ZSwKIH07CkBAIC0yMTAsOCArMjAzLDYgQEAKIAlob3N0LT5kYXRhID0gZGF0YTsKIAlob3N0LT5zaXplID0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CiAJaG9zdC0+ZGF0YV94ZmVyZWQgPSAwOwotCWhvc3QtPmJsb2NrZW5kID0gZmFsc2U7Ci0JaG9zdC0+ZGF0YWVuZCA9IGZhbHNlOwogCiAJbW1jaV9pbml0X3NnKGhvc3QsIGRhdGEpOwogCkBAIC0yODgsMjEgKzI3OSwyNiBAQAogbW1jaV9kYXRhX2lycShzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEsCiAJICAgICAgdW5zaWduZWQgaW50IHN0YXR1cykKIHsKLQlzdHJ1Y3QgdmFyaWFudF9kYXRhICp2YXJpYW50ID0gaG9zdC0+dmFyaWFudDsKLQogCS8qIEZpcnN0IGNoZWNrIGZvciBlcnJvcnMgKi8KIAlpZiAoc3RhdHVzICYgKE1DSV9EQVRBQ1JDRkFJTHxNQ0lfREFUQVRJTUVPVVR8TUNJX1RYVU5ERVJSVU58TUNJX1JYT1ZFUlJVTikpIHsKLQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJNQ0kgRVJST1IgSVJRIChzdGF0dXMgJTA4eClcbiIsIHN0YXR1cyk7Ci0JCWlmIChzdGF0dXMgJiBNQ0lfREFUQUNSQ0ZBSUwpCi0JCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7Ci0JCWVsc2UgaWYgKHN0YXR1cyAmIE1DSV9EQVRBVElNRU9VVCkKLQkJCWRhdGEtPmVycm9yID0gLUVUSU1FRE9VVDsKLQkJZWxzZSBpZiAoc3RhdHVzICYgKE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKQotCQkJZGF0YS0+ZXJyb3IgPSAtRUlPOworCQl1MzIgcmVtYWluLCBzdWNjZXNzOwogCi0JCS8qIEZvcmNlLWNvbXBsZXRlIHRoZSB0cmFuc2FjdGlvbiAqLwotCQlob3N0LT5ibG9ja2VuZCA9IHRydWU7Ci0JCWhvc3QtPmRhdGFlbmQgPSB0cnVlOworCQkvKiBDYWxjdWxhdGUgaG93IGZhciB3ZSBhcmUgaW50byB0aGUgdHJhbnNmZXIgKi8KKwkJcmVtYWluID0gcmVhZGwoaG9zdC0+YmFzZSArIE1NQ0lEQVRBQ05UKTsKKwkJc3VjY2VzcyA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzIC0gcmVtYWluOworCisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiTUNJIEVSUk9SIElSUSAoc3RhdHVzICUwOHgpXG4iLCBzdGF0dXMpOworCQlpZiAoc3RhdHVzICYgTUNJX0RBVEFDUkNGQUlMKSB7CisJCQkvKiBMYXN0IGJsb2NrIHdhcyBub3Qgc3VjY2Vzc2Z1bCAqLworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MgLSAxLCBkYXRhLT5ibGtzeik7CisJCQlkYXRhLT5lcnJvciA9IC1FSUxTRVE7CisJCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX0RBVEFUSU1FT1VUKSB7CisJCQlob3N0LT5kYXRhX3hmZXJlZCA9IHJvdW5kX2Rvd24oc3VjY2VzcywgZGF0YS0+Ymxrc3opOworCQkJZGF0YS0+ZXJyb3IgPSAtRVRJTUVET1VUOworCQl9IGVsc2UgaWYgKHN0YXR1cyAmIChNQ0lfVFhVTkRFUlJVTnxNQ0lfUlhPVkVSUlVOKSkgeworCQkJaG9zdC0+ZGF0YV94ZmVyZWQgPSByb3VuZF9kb3duKHN1Y2Nlc3MsIGRhdGEtPmJsa3N6KTsKKwkJCWRhdGEtPmVycm9yID0gLUVJTzsKKwkJfQogCiAJCS8qCiAJCSAqIFdlIGhpdCBhbiBlcnJvciBjb25kaXRpb24uICBFbnN1cmUgdGhhdCBhbnkgZGF0YQpAQCAtMzIxLDYxICszMTcsMTQgQEAKIAkJfQogCX0KIAotCS8qCi0JICogT24gQVJNIHZhcmlhbnRzIGluIFBJTyBtb2RlLCBNQ0lfREFUQUJMT0NLRU5ECi0JICogaXMgYWx3YXlzIHNlbnQgZmlyc3QsIGFuZCB3ZSBpbmNyZWFzZSB0aGUKLQkgKiB0cmFuc2ZlcmVkIG51bWJlciBvZiBieXRlcyBmb3IgdGhhdCBJUlEuIFRoZW4KLQkgKiBNQ0lfREFUQUVORCBmb2xsb3dzIGFuZCB3ZSBjb25jbHVkZSB0aGUgdHJhbnNhY3Rpb24uCi0JICoKLQkgKiBPbiB0aGUgVXg1MDAgc2luZ2xlLUlSUSB2YXJpYW50IE1DSV9EQVRBQkxPQ0tFTkQKLQkgKiBkb2Vzbid0IHNlZW0gdG8gaW1tZWRpYXRlbHkgY2xlYXIgZnJvbSB0aGUgc3RhdHVzLAotCSAqIHNvIHdlIGNhbid0IHVzZSBpdCBrZWVwIGNvdW50IHdoZW4gb25seSBvbmUgaXJxIGlzCi0JICogdXNlZCBiZWNhdXNlIHRoZSBpcnEgd2lsbCBoaXQgZm9yIG90aGVyIHJlYXNvbnMsIGFuZAotCSAqIHRoZW4gdGhlIGZsYWcgaXMgc3RpbGwgdXAuIFNvIHdlIHVzZSB0aGUgTUNJX0RBVEFFTkQKLQkgKiBJUlEgYXQgdGhlIGVuZCBvZiB0aGUgZW50aXJlIHRyYW5zZmVyIGJlY2F1c2UKLQkgKiBNQ0lfREFUQUJMT0NLRU5EIGlzIGJyb2tlbi4KLQkgKgotCSAqIEluIHRoZSBVMzAwLCB0aGUgSVJRcyBjYW4gYXJyaXZlIG91dC1vZi1vcmRlciwKLQkgKiBlLmcuIE1DSV9EQVRBQkxPQ0tFTkQgc29tZXRpbWVzIGFycml2ZXMgYWZ0ZXIgTUNJX0RBVEFFTkQsCi0JICogc28gZm9yIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIGZsYWdzICJibG9ja2VuZCIgYW5kCi0JICogImRhdGFlbmQiIHRvIG1ha2Ugc3VyZSBib3RoIElSUXMgaGF2ZSBhcnJpdmVkIGJlZm9yZQotCSAqIGNvbmNsdWRpbmcgdGhlIHRyYW5zYWN0aW9uLiAoVGhpcyBkb2VzIG5vdCBhcHBseQotCSAqIHRvIHRoZSBVeDUwMCB3aGljaCBkb2Vzbid0IGZpcmUgTUNJX0RBVEFCTE9DS0VORAotCSAqIGF0IGFsbC4pIEluIERNQSBtb2RlIGl0IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBwcm9ibGVtCi0JICogYXMgdGhlIFV4NTAwLgotCSAqLwotCWlmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKSB7Ci0JCS8qCi0JCSAqIEp1c3QgYmVpbmcgYSBsaXR0bGUgb3Zlci1jYXV0aW91cywgd2UgZG8gbm90Ci0JCSAqIHVzZSB0aGlzIHByb2dyZXNzaXZlIHVwZGF0ZSBpZiB0aGUgaGFyZHdhcmUgYmxvY2tlbmQKLQkJICogZmxhZyBpcyB1bnJlbGlhYmxlOiBzaW5jZSBpdCBjYW4gc3RheSBoaWdoIGJldHdlZW4KLQkJICogSVJRcyBpdCB3aWxsIGNvcnJ1cHQgdGhlIHRyYW5zZmVyIGNvdW50ZXIuCi0JCSAqLwotCQlpZiAoIXZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkKLQkJCWhvc3QtPmRhdGFfeGZlcmVkICs9IGRhdGEtPmJsa3N6OwotCQlob3N0LT5ibG9ja2VuZCA9IHRydWU7Ci0JfQorCWlmIChzdGF0dXMgJiBNQ0lfREFUQUJMT0NLRU5EKQorCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgInN0cmF5IE1DSV9EQVRBQkxPQ0tFTkQgaW50ZXJydXB0XG4iKTsKIAotCWlmIChzdGF0dXMgJiBNQ0lfREFUQUVORCkKLQkJaG9zdC0+ZGF0YWVuZCA9IHRydWU7Ci0KLQkvKgotCSAqIE9uIHZhcmlhbnRzIHdpdGggYnJva2VuIGJsb2NrZW5kIHdlIHNoYWxsIG9ubHkgd2FpdCBmb3IgZGF0YWVuZCwKLQkgKiBvbiBvdGhlcnMgd2UgbXVzdCBzeW5jIHdpdGggdGhlIGJsb2NrZW5kIHNpZ25hbCBzaW5jZSB0aGV5IGNhbgotCSAqIGFwcGVhciBvdXQtb2Ytb3JkZXIuCi0JICovCi0JaWYgKGhvc3QtPmRhdGFlbmQgJiYgKGhvc3QtPmJsb2NrZW5kIHx8IHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCkpIHsKKwlpZiAoc3RhdHVzICYgTUNJX0RBVEFFTkQgfHwgZGF0YS0+ZXJyb3IpIHsKIAkJbW1jaV9zdG9wX2RhdGEoaG9zdCk7CiAKLQkJLyogUmVzZXQgdGhlc2UgZmxhZ3MgKi8KLQkJaG9zdC0+YmxvY2tlbmQgPSBmYWxzZTsKLQkJaG9zdC0+ZGF0YWVuZCA9IGZhbHNlOwotCi0JCS8qCi0JCSAqIFZhcmlhbnRzIHdpdGggYnJva2VuIGJsb2NrZW5kIGZsYWdzIG5lZWQgdG8gaGFuZGxlIHRoZQotCQkgKiBlbmQgb2YgdGhlIGVudGlyZSB0cmFuc2ZlciBoZXJlLgotCQkgKi8KLQkJaWYgKHZhcmlhbnQtPmJyb2tlbl9ibG9ja2VuZCAmJiAhZGF0YS0+ZXJyb3IpCisJCWlmICghZGF0YS0+ZXJyb3IpCisJCQkvKiBUaGUgZXJyb3IgY2xhdXNlIGlzIGhhbmRsZWQgYWJvdmUsIHN1Y2Nlc3MhICovCiAJCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzeiAqIGRhdGEtPmJsb2NrczsKIAogCQlpZiAoIWRhdGEtPnN0b3ApIHsKQEAgLTM5NCwxNSArMzQzLDE1IEBACiAKIAlob3N0LT5jbWQgPSBOVUxMOwogCi0JY21kLT5yZXNwWzBdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTApOwotCWNtZC0+cmVzcFsxXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UxKTsKLQljbWQtPnJlc3BbMl0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMik7Ci0JY21kLT5yZXNwWzNdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTMpOwotCiAJaWYgKHN0YXR1cyAmIE1DSV9DTURUSU1FT1VUKSB7CiAJCWNtZC0+ZXJyb3IgPSAtRVRJTUVET1VUOwogCX0gZWxzZSBpZiAoc3RhdHVzICYgTUNJX0NNRENSQ0ZBSUwgJiYgY21kLT5mbGFncyAmIE1NQ19SU1BfQ1JDKSB7CiAJCWNtZC0+ZXJyb3IgPSAtRUlMU0VROworCX0gZWxzZSB7CisJCWNtZC0+cmVzcFswXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UwKTsKKwkJY21kLT5yZXNwWzFdID0gcmVhZGwoYmFzZSArIE1NQ0lSRVNQT05TRTEpOworCQljbWQtPnJlc3BbMl0gPSByZWFkbChiYXNlICsgTU1DSVJFU1BPTlNFMik7CisJCWNtZC0+cmVzcFszXSA9IHJlYWRsKGJhc2UgKyBNTUNJUkVTUE9OU0UzKTsKIAl9CiAKIAlpZiAoIWNtZC0+ZGF0YSB8fCBjbWQtPmVycm9yKSB7CkBAIC03NzAsNyArNzE5LDYgQEAKIAlzdHJ1Y3QgdmFyaWFudF9kYXRhICp2YXJpYW50ID0gaWQtPmRhdGE7CiAJc3RydWN0IG1tY2lfaG9zdCAqaG9zdDsKIAlzdHJ1Y3QgbW1jX2hvc3QgKm1tYzsKLQl1bnNpZ25lZCBpbnQgbWFzazsKIAlpbnQgcmV0OwogCiAJLyogbXVzdCBoYXZlIHBsYXRmb3JtIGRhdGEgKi8KQEAgLTk1MSwxMiArODk5LDcgQEAKIAkJCWdvdG8gaXJxMF9mcmVlOwogCX0KIAotCW1hc2sgPSBNQ0lfSVJRRU5BQkxFOwotCS8qIERvbid0IHVzZSB0aGUgZGF0YWJsb2NrZW5kIGZsYWcgaWYgaXQncyBicm9rZW4gKi8KLQlpZiAodmFyaWFudC0+YnJva2VuX2Jsb2NrZW5kKQotCQltYXNrICY9IH5NQ0lfREFUQUJMT0NLRU5EOwotCi0Jd3JpdGVsKG1hc2ssIGhvc3QtPmJhc2UgKyBNTUNJTUFTSzApOworCXdyaXRlbChNQ0lfSVJRRU5BQkxFLCBob3N0LT5iYXNlICsgTU1DSU1BU0swKTsKIAogCWFtYmFfc2V0X2RydmRhdGEoZGV2LCBtbWMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21tY2kuaCBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCmluZGV4IGRmMDZmMDEuLmMxZGY3YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbW1jaS5oCkBAIC0xMzcsNyArMTM3LDcgQEAKICNkZWZpbmUgTUNJX0lSUUVOQUJMRQlcCiAJKE1DSV9DTURDUkNGQUlMTUFTS3xNQ0lfREFUQUNSQ0ZBSUxNQVNLfE1DSV9DTURUSU1FT1VUTUFTS3wJXAogCU1DSV9EQVRBVElNRU9VVE1BU0t8TUNJX1RYVU5ERVJSVU5NQVNLfE1DSV9SWE9WRVJSVU5NQVNLfAlcCi0JTUNJX0NNRFJFU1BFTkRNQVNLfE1DSV9DTURTRU5UTUFTS3xNQ0lfREFUQUJMT0NLRU5ETUFTSykKKwlNQ0lfQ01EUkVTUEVORE1BU0t8TUNJX0NNRFNFTlRNQVNLKQogCiAvKiBUaGVzZSBpbnRlcnJ1cHRzIGFyZSBkaXJlY3RlZCB0byBJUlExIHdoZW4gdHdvIElSUSBsaW5lcyBhcmUgYXZhaWxhYmxlICovCiAjZGVmaW5lIE1DSV9JUlExTUFTSyBcCkBAIC0xNzcsOSArMTc3LDYgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKIAl1bnNpZ25lZCBpbnQJCW9sZHN0YXQ7CiAKLQlib29sCQkJYmxvY2tlbmQ7Ci0JYm9vbAkJCWRhdGFlbmQ7Ci0KIAkvKiBwaW8gc3R1ZmYgKi8KIAlzdHJ1Y3Qgc2dfbWFwcGluZ19pdGVyCXNnX21pdGVyOwogCXVuc2lnbmVkIGludAkJc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwppbmRleCA1ZGVjZmQwLi4xNTNhYjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCkBAIC0zODMsMTQgKzM4MywzMCBAQAogCWhvc3QtPmN1cnIudXNlcl9wYWdlcyA9IDA7CiAKIAlib3ggPSAmbmMtPmNtZFswXTsKLQlmb3IgKGkgPSAwOyBpIDwgaG9zdC0+ZG1hLm51bV9lbnRzOyBpKyspIHsKKworCS8qIGxvY2F0aW9uIG9mIGNvbW1hbmQgYmxvY2sgbXVzdCBiZSA2NCBiaXQgYWxpZ25lZCAqLworCUJVR19PTihob3N0LT5kbWEuY21kX2J1c2FkZHIgJiAweDA3KTsKKworCW5jLT5jbWRwdHIgPSAoaG9zdC0+ZG1hLmNtZF9idXNhZGRyID4+IDMpIHwgQ01EX1BUUl9MUDsKKwlob3N0LT5kbWEuaGRyLmNtZHB0ciA9IERNT1ZfQ01EX1BUUl9MSVNUIHwKKwkJCSAgICAgICBETU9WX0NNRF9BRERSKGhvc3QtPmRtYS5jbWRwdHJfYnVzYWRkcik7CisJaG9zdC0+ZG1hLmhkci5jb21wbGV0ZV9mdW5jID0gbXNtc2RjY19kbWFfY29tcGxldGVfZnVuYzsKKworCW4gPSBkbWFfbWFwX3NnKG1tY19kZXYoaG9zdC0+bW1jKSwgaG9zdC0+ZG1hLnNnLAorCQkJaG9zdC0+ZG1hLm51bV9lbnRzLCBob3N0LT5kbWEuZGlyKTsKKwlpZiAobiA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBtYXAgaW4gYWxsIHNnIGVsZW1lbnRzXG4iLAorCQkJbW1jX2hvc3RuYW1lKGhvc3QtPm1tYykpOworCQlob3N0LT5kbWEuc2cgPSBOVUxMOworCQlob3N0LT5kbWEubnVtX2VudHMgPSAwOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlmb3JfZWFjaF9zZyhob3N0LT5kbWEuc2csIHNnLCBuLCBpKSB7CisKIAkJYm94LT5jbWQgPSBDTURfTU9ERV9CT1g7CiAKLQkvKiBJbml0aWFsaXplIHNnIGRtYSBhZGRyZXNzICovCi0Jc2ctPmRtYV9hZGRyZXNzID0gcGFnZV90b19kbWEobW1jX2Rldihob3N0LT5tbWMpLCBzZ19wYWdlKHNnKSkKLQkJCQkrIHNnLT5vZmZzZXQ7Ci0KLQlpZiAoaSA9PSAoaG9zdC0+ZG1hLm51bV9lbnRzIC0gMSkpCisJCWlmIChpID09IG4gLSAxKQogCQkJYm94LT5jbWQgfD0gQ01EX0xDOwogCQlyb3dzID0gKHNnX2RtYV9sZW4oc2cpICUgTUNJX0ZJRk9TSVpFKSA/CiAJCQkoc2dfZG1hX2xlbihzZykgLyBNQ0lfRklGT1NJWkUpICsgMSA6CkBAIC00MTgsMjcgKzQzNCw2IEBACiAJCQlib3gtPmNtZCB8PSBDTURfRFNUX0NSQ0koY3JjaSk7CiAJCX0KIAkJYm94Kys7Ci0JCXNnKys7Ci0JfQotCi0JLyogbG9jYXRpb24gb2YgY29tbWFuZCBibG9jayBtdXN0IGJlIDY0IGJpdCBhbGlnbmVkICovCi0JQlVHX09OKGhvc3QtPmRtYS5jbWRfYnVzYWRkciAmIDB4MDcpOwotCi0JbmMtPmNtZHB0ciA9IChob3N0LT5kbWEuY21kX2J1c2FkZHIgPj4gMykgfCBDTURfUFRSX0xQOwotCWhvc3QtPmRtYS5oZHIuY21kcHRyID0gRE1PVl9DTURfUFRSX0xJU1QgfAotCQkJICAgICAgIERNT1ZfQ01EX0FERFIoaG9zdC0+ZG1hLmNtZHB0cl9idXNhZGRyKTsKLQlob3N0LT5kbWEuaGRyLmNvbXBsZXRlX2Z1bmMgPSBtc21zZGNjX2RtYV9jb21wbGV0ZV9mdW5jOwotCi0JbiA9IGRtYV9tYXBfc2cobW1jX2Rldihob3N0LT5tbWMpLCBob3N0LT5kbWEuc2csCi0JCQlob3N0LT5kbWEubnVtX2VudHMsIGhvc3QtPmRtYS5kaXIpOwotLyogZHNiIGluc2lkZSBkbWFfbWFwX3NnIHdpbGwgd3JpdGUgbmMgb3V0IHRvIG1lbSBhcyB3ZWxsICovCi0KLQlpZiAobiAhPSBob3N0LT5kbWEubnVtX2VudHMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVW5hYmxlIHRvIG1hcCBpbiBhbGwgc2cgZWxlbWVudHNcbiIsCi0JCQltbWNfaG9zdG5hbWUoaG9zdC0+bW1jKSk7Ci0JCWhvc3QtPmRtYS5zZyA9IE5VTEw7Ci0JCWhvc3QtPmRtYS5udW1fZW50cyA9IDA7Ci0JCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTMzMSw5ICsxMzI2LDYgQEAKIAlpZiAoaG9zdC0+dGltZXIuZnVuY3Rpb24pCiAJCXByX2luZm8oIiVzOiBQb2xsaW5nIHN0YXR1cyBtb2RlIGVuYWJsZWRcbiIsIG1tY19ob3N0bmFtZShtbWMpKTsKIAotI2lmIEJVU0NMS19QV1JTQVZFCi0JbXNtc2RjY19kaXNhYmxlX2Nsb2Nrcyhob3N0LCAxKTsKLSNlbmRpZgogCXJldHVybiAwOwogIGNtZF9pcnFfZnJlZToKIAlmcmVlX2lycShjbWRfaXJxcmVzLT5zdGFydCwgaG9zdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1zM2MuYwppbmRleCAxNzIwMzU4Li41MzA5YWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXMzYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktczNjLmMKQEAgLTI3NywxMCArMjc3LDQzIEBACiAJaG9zdC0+Y2xvY2sgPSBjbG9jazsKIH0KIAorLyoqCisgKiBzZGhjaV9zM2NfcGxhdGZvcm1fOGJpdF93aWR0aCAtIHN1cHBvcnQgOGJpdCBidXN3aWR0aAorICogQGhvc3Q6IFRoZSBTREhDSSBob3N0IGJlaW5nIHF1ZXJpZWQKKyAqIEB3aWR0aDogTU1DX0JVU19XSURUSF8gbWFjcm8gZm9yIHRoZSBidXMgd2lkdGggYmVpbmcgcmVxdWVzdGVkCisgKgorICogV2UgaGF2ZSA4LWJpdCB3aWR0aCBzdXBwb3J0IGJ1dCBpcyBub3QgYSB2MyBjb250cm9sbGVyLgorICogU28gd2UgYWRkIHBsYXRmb3JtXzhiaXRfd2lkdGgoKSBhbmQgc3VwcG9ydCA4Yml0IHdpZHRoLgorICovCitzdGF0aWMgaW50IHNkaGNpX3MzY19wbGF0Zm9ybV84Yml0X3dpZHRoKHN0cnVjdCBzZGhjaV9ob3N0ICpob3N0LCBpbnQgd2lkdGgpCit7CisJdTggY3RybDsKKworCWN0cmwgPSBzZGhjaV9yZWFkYihob3N0LCBTREhDSV9IT1NUX0NPTlRST0wpOworCisJc3dpdGNoICh3aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF84OgorCQljdHJsIHw9IFNESENJX0NUUkxfOEJJVEJVUzsKKwkJY3RybCAmPSB+U0RIQ0lfQ1RSTF80QklUQlVTOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfNDoKKwkJY3RybCB8PSBTREhDSV9DVFJMXzRCSVRCVVM7CisJCWN0cmwgJj0gflNESENJX0NUUkxfOEJJVEJVUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc2RoY2lfd3JpdGViKGhvc3QsIGN0cmwsIFNESENJX0hPU1RfQ09OVFJPTCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzZGhjaV9vcHMgc2RoY2lfczNjX29wcyA9IHsKIAkuZ2V0X21heF9jbG9jawkJPSBzZGhjaV9zM2NfZ2V0X21heF9jbGssCiAJLnNldF9jbG9jawkJPSBzZGhjaV9zM2Nfc2V0X2Nsb2NrLAogCS5nZXRfbWluX2Nsb2NrCQk9IHNkaGNpX3MzY19nZXRfbWluX2Nsb2NrLAorCS5wbGF0Zm9ybV84Yml0X3dpZHRoCT0gc2RoY2lfczNjX3BsYXRmb3JtXzhiaXRfd2lkdGgsCiB9OwogCiBzdGF0aWMgdm9pZCBzZGhjaV9zM2Nfbm90aWZ5X2NoYW5nZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIGludCBzdGF0ZSkKQEAgLTQ3Myw2ICs1MDYsOSBAQAogCWlmIChwZGF0YS0+Y2RfdHlwZSA9PSBTM0NfU0RIQ0lfQ0RfUEVSTUFORU5UKQogCQlob3N0LT5tbWMtPmNhcHMgPSBNTUNfQ0FQX05PTlJFTU9WQUJMRTsKIAorCWlmIChwZGF0YS0+aG9zdF9jYXBzKQorCQlob3N0LT5tbWMtPmNhcHMgfD0gcGRhdGEtPmhvc3RfY2FwczsKKwogCWhvc3QtPnF1aXJrcyB8PSAoU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfAogCQkJIFNESENJX1FVSVJLXzMyQklUX0RNQV9TSVpFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC91c2hjLmMgYi9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYwppbmRleCBmOGY2NWRmLi5mMDhmOTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3VzaGMuYwpAQCAtMTksNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3I4NTIuYyBiL2RyaXZlcnMvbXRkL25hbmQvcjg1Mi5jCmluZGV4IGQ5ZDdlZmIuLjYzMjJkMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvcjg1Mi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvcjg1Mi5jCkBAIC05MzAsNyArOTMwLDcgQEAKIAogCWluaXRfY29tcGxldGlvbigmZGV2LT5kbWFfZG9uZSk7CiAKLQlkZXYtPmNhcmRfd29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKERSVl9OQU1FKTsKKwlkZXYtPmNhcmRfd29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoRFJWX05BTUUpOwogCiAJaWYgKCFkZXYtPmNhcmRfd29ya3F1ZXVlKQogCQlnb3RvIGVycm9yOTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3NtX2Z0bC5jIGIvZHJpdmVycy9tdGQvc21fZnRsLmMKaW5kZXggNjc4MjJjZi4uYWMwZDZhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvc21fZnRsLmMKKysrIGIvZHJpdmVycy9tdGQvc21fZnRsLmMKQEAgLTEyNTgsNyArMTI1OCw3IEBACiBzdGF0aWMgX19pbml0IGludCBzbV9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCBlcnJvciA9IDA7Ci0JY2FjaGVfZmx1c2hfd29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJzbWZsdXNoIik7CisJY2FjaGVfZmx1c2hfd29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoInNtZmx1c2giKTsKIAogCWlmIChJU19FUlIoY2FjaGVfZmx1c2hfd29ya3F1ZXVlKSkKIAkJcmV0dXJuIFBUUl9FUlIoY2FjaGVfZmx1c2hfd29ya3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKaW5kZXggZjQ5ZTQ5ZC4uNWViZTI4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL2J1aWxkLmMKQEAgLTY3MiwzMyArNjcyLDcgQEAKIAkJdWJpLT5ub3JfZmxhc2ggPSAxOwogCX0KIAotCS8qCi0JICogU2V0IFVCSSBtaW4uIEkvTyBzaXplIChAdWJpLT5taW5faW9fc2l6ZSkuIFdlIHVzZSBAbXRkLT53cml0ZWJ1ZnNpemUKLQkgKiBmb3IgdGhlc2UgcHVycG9zZXMsIG5vdCBAbXRkLT53cml0ZXNpemUuIEF0IHRoZSBtb21lbnQgdGhpcyBkb2VzIG5vdAotCSAqIG1hdHRlciBmb3IgTkFORCwgYmVjYXVzZSBjdXJyZW50bHkgQG10ZC0+d3JpdGVidWZzaXplIGlzIGVxdWl2YWxlbnQgdG8KLQkgKiBAbXRkLT53cml0ZXNpemUgZm9yIGFsbCBOQU5Ecy4gSG93ZXZlciwgc29tZSBDRkkgTk9SIGZsYXNoZXMgbWF5Ci0JICogaGF2ZSBAbXRkLT53cml0ZWJ1ZnNpemUgd2hpY2ggaXMgbXVsdGlwbGUgb2YgQG10ZC0+d3JpdGVzaXplLgotCSAqCi0JICogVGhlIHJlYXNvbiB3ZSB1c2UgQG10ZC0+d3JpdGVidWZzaXplIGZvciBAdWJpLT5taW5faW9fc2l6ZSBpcyB0aGF0Ci0JICogVUJJIGFuZCBVQklGUyByZWNvdmVyeSBhbGdvcml0aG1zIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBpZiB0aGVyZSB3YXMKLQkgKiBhbiB1bmNsZWFuIHBvd2VyIGN1dCwgdGhlbiB3ZSBjYW4gZmluZCBvZmZzZXQgb2YgdGhlIGxhc3QgY29ycnVwdGVkCi0JICogbm9kZSwgYWxpZ24gdGhlIG9mZnNldCB0byBAdWJpLT5taW5faW9fc2l6ZSwgcmVhZCB0aGUgcmVzdCBvZiB0aGUKLQkgKiBlcmFzZWJsb2NrIHN0YXJ0aW5nIGZyb20gdGhpcyBvZmZzZXQsIGFuZCBjaGVjayB3aGV0aGVyIHRoZXJlIGFyZQotCSAqIG9ubHkgMHhGRiBieXRlcy4gSWYgeWVzLCB0aGVuIHdlIGFyZSBwcm9iYWJseSBkZWFsaW5nIHdpdGggYQotCSAqIGNvcnJ1cHRpb24gY2F1c2VkIGJ5IGEgcG93ZXIgY3V0LCBpZiBub3QsIHRoZW4gdGhpcyBpcyBwcm9iYWJseSBzb21lCi0JICogc2V2ZXJlIGNvcnJ1cHRpb24uCi0JICoKLQkgKiBUaHVzLCB3ZSBoYXZlIHRvIHVzZSB0aGUgbWF4aW11bSB3cml0ZSB1bml0IHNpemUgb2YgdGhlIGZsYXNoLCB3aGljaAotCSAqIGlzIEBtdGQtPndyaXRlYnVmc2l6ZSwgYmVjYXVzZSBAbXRkLT53cml0ZXNpemUgaXMgdGhlIG1pbmltdW0gd3JpdGUKLQkgKiBzaXplLCBub3QgdGhlIG1heGltdW0uCi0JICovCi0JaWYgKHViaS0+bXRkLT50eXBlID09IE1URF9OQU5ERkxBU0gpCi0JCXViaV9hc3NlcnQodWJpLT5tdGQtPndyaXRlYnVmc2l6ZSA9PSB1YmktPm10ZC0+d3JpdGVzaXplKTsKLQllbHNlIGlmICh1YmktPm10ZC0+dHlwZSA9PSBNVERfTk9SRkxBU0gpCi0JCXViaV9hc3NlcnQodWJpLT5tdGQtPndyaXRlYnVmc2l6ZSAlIHViaS0+bXRkLT53cml0ZXNpemUgPT0gMCk7Ci0KLQl1YmktPm1pbl9pb19zaXplID0gdWJpLT5tdGQtPndyaXRlYnVmc2l6ZTsKLQorCXViaS0+bWluX2lvX3NpemUgPSB1YmktPm10ZC0+d3JpdGVzaXplOwogCXViaS0+aGRyc19taW5faW9fc2l6ZSA9IHViaS0+bXRkLT53cml0ZXNpemUgPj4gdWJpLT5tdGQtPnN1YnBhZ2Vfc2Z0OwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYyBiL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYwppbmRleCA2MmQ2Zjg4Li5hYTA3NjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCkBAIC0xNjQ0LDcgKzE2NDQsNyBAQAogbW9kdWxlX2luaXQoa3M4Njk1X2luaXQpOwogbW9kdWxlX2V4aXQoa3M4Njk1X2NsZWFudXApOwogCi1NT0RVTEVfQVVUSE9SKCJTaW10ZWMgRWxlY3Ryb25pY3MiKQorTU9EVUxFX0FVVEhPUigiU2ltdGVjIEVsZWN0cm9uaWNzIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1pY3JlbCBLUzg2OTUgKENlbnRhdXIpIEV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIE1PRFVMRU5BTUUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCmluZGV4IGE2OTliYmYuLjM4MjQzODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKQEAgLTQ4LDYgKzQ4LDcgQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0IyKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wxRCl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMURfMl8wKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDBjNzgxMWYuLmExNzljYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKQEAgLTE3ODYsNiArMTc4NiwxMCBAQAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCiAJd3JiID0gd3JiX2Zyb21fbWNjcShhZGFwdGVyKTsKKwlpZiAoIXdyYikgeworCQlzdGF0dXMgPSAtRUJVU1k7CisJCWdvdG8gZXJyOworCX0KIAlyZXEgPSBub25lbWJfY21kLT52YTsKIAlzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKIApAQCAtMTgwMSw2ICsxODA1LDcgQEAKIAogCXN0YXR1cyA9IGJlX21jY19ub3RpZnlfd2FpdChhZGFwdGVyKTsKIAorZXJyOgogCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCBkZTQwZDNiLi4yOGEzMmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0zMTIsMTEgKzMxMiw5IEBACiAJaWYgKGFkYXB0ZXItPmxpbmtfdXAgIT0gbGlua191cCkgewogCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gLTE7CiAJCWlmIChsaW5rX3VwKSB7Ci0JCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOwogCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgdXBcbiIsIG5ldGRldi0+bmFtZSk7CiAJCX0gZWxzZSB7Ci0JCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgZG93blxuIiwgbmV0ZGV2LT5uYW1lKTsKIAkJfQpAQCAtMjYyOCw4ICsyNjI2LDYgQEAKIAogCW5ldGlmX25hcGlfYWRkKG5ldGRldiwgJmFkYXB0ZXItPnR4X2VxLm5hcGksIGJlX3BvbGxfdHhfbWNjLAogCQlCRV9OQVBJX1dFSUdIVCk7Ci0KLQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3VubWFwX3BjaV9iYXJzKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IGRmOTllZGYuLjBiYTU5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTc1NTMsNiArNzU1MywxMCBAQAogCSAgICAhKGRhdGEgJiBFVEhfRkxBR19SWFZMQU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qIFRTTyB3aXRoIFZMQU4gdGFnIHdvbid0IHdvcmsgd2l0aCBjdXJyZW50IGZpcm13YXJlICovCisJaWYgKCEoZGF0YSAmIEVUSF9GTEFHX1RYVkxBTikpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmMgPSBldGh0b29sX29wX3NldF9mbGFncyhkZXYsIGRhdGEsIEVUSF9GTEFHX1JYSEFTSCB8IEVUSF9GTEFHX1JYVkxBTiB8CiAJCQkJICBFVEhfRkxBR19UWFZMQU4pOwogCWlmIChyYykKQEAgLTc5NjIsMTEgKzc5NjYsOCBAQAogCiAJCS8qIEFFUiAoQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nKSBob29rcyAqLwogCQllcnIgPSBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHBkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nICIKLQkJCQkJICAgICJmYWlsZWQgMHgleFxuIiwgZXJyKTsKLQkJCS8qIG5vbi1mYXRhbCwgY29udGludWUgKi8KLQkJfQorCQlpZiAoIWVycikKKwkJCWJwLT5mbGFncyB8PSBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CiAKIAl9IGVsc2UgewogCQlicC0+cGNpeF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUENJWCk7CkBAIC04MjI5LDggKzgyMzAsMTAgQEAKIAlyZXR1cm4gMDsKIAogZXJyX291dF91bm1hcDoKLQlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1BDSUUpCisJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19BRVJfRU5BQkxFRCkgewogCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwkJYnAtPmZsYWdzICY9IH5CTlgyX0ZMQUdfQUVSX0VOQUJMRUQ7CisJfQogCiAJaWYgKGJwLT5yZWd2aWV3KSB7CiAJCWlvdW5tYXAoYnAtPnJlZ3ZpZXcpOwpAQCAtODQxOCw4ICs4NDIxLDEwIEBACiAKIAlrZnJlZShicC0+dGVtcF9zdGF0c19ibGspOwogCi0JaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19QQ0lFKQorCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfQUVSX0VOQUJMRUQpIHsKIAkJcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcocGRldik7CisJCWJwLT5mbGFncyAmPSB+Qk5YMl9GTEFHX0FFUl9FTkFCTEVEOworCX0KIAogCWZyZWVfbmV0ZGV2KGRldik7CiAKQEAgLTg1MzUsNyArODU0MCw3IEBACiAJfQogCXJ0bmxfdW5sb2NrKCk7CiAKLQlpZiAoIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJRSkpCisJaWYgKCEoYnAtPmZsYWdzICYgQk5YMl9GTEFHX0FFUl9FTkFCTEVEKSkKIAkJcmV0dXJuIHJlc3VsdDsKIAogCWVyciA9IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5oIGIvZHJpdmVycy9uZXQvYm54Mi5oCmluZGV4IDU0ODhhMmU4Li5mNDU5ZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC02NzQxLDYgKzY3NDEsNyBAQAogI2RlZmluZSBCTlgyX0ZMQUdfSlVNQk9fQlJPS0VOCQkweDAwMDAwODAwCiAjZGVmaW5lIEJOWDJfRkxBR19DQU5fS0VFUF9WTEFOCQkweDAwMDAxMDAwCiAjZGVmaW5lIEJOWDJfRkxBR19CUk9LRU5fU1RBVFMJCTB4MDAwMDIwMDAKKyNkZWZpbmUgQk5YMl9GTEFHX0FFUl9FTkFCTEVECQkweDAwMDA0MDAwCiAKIAlzdHJ1Y3QgYm54Ml9uYXBpCWJueDJfbmFwaVtCTlgyX01BWF9NU0lYX1ZFQ107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeC5oCmluZGV4IDhlNDE4MzcuLjc4OTdkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4LmgKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnguaApAQCAtMjIsOCArMjIsOCBAQAogICogKHlvdSB3aWxsIG5lZWQgdG8gcmVib290IGFmdGVyd2FyZHMpICovCiAvKiAjZGVmaW5lIEJOWDJYX1NUT1BfT05fRVJST1IgKi8KIAotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gICAgICAiMS42Mi4wMC00IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUgICAgICAiMjAxMS8wMS8xOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OICAgICAgIjEuNjIuMDAtNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFICAgICAgIjIwMTEvMDEvMzAiCiAjZGVmaW5lIEJOWDJYX0JDX1ZFUiAgICAgICAgICAgIDB4MDQwMjAwCiAKICNkZWZpbmUgQk5YMlhfTVVMVElfUVVFVUUKQEAgLTE2MTMsMTkgKzE2MTMsMjMgQEAKICNkZWZpbmUgQk5YMlhfQlRSCQkJNAogI2RlZmluZSBNQVhfU1BRX1BFTkRJTkcJCQk4CiAKLQotLyogQ01ORyBjb25zdGFudHMKLSAgIGRlcml2ZWQgZnJvbSBsYWIgZXhwZXJpbWVudHMsIGFuZCBub3QgZnJvbSBzeXN0ZW0gc3BlYyBjYWxjdWxhdGlvbnMgISEhICovCi0jZGVmaW5lIERFRl9NSU5fUkFURQkJCTEwMAorLyogQ01ORyBjb25zdGFudHMsIGFzIGRlcml2ZWQgZnJvbSBzeXN0ZW0gc3BlYyBjYWxjdWxhdGlvbnMgKi8KKy8qIGRlZmF1bHQgTUlOIHJhdGUgaW4gY2FzZSBWTklDIG1pbiByYXRlIGlzIGNvbmZpZ3VyZWQgdG8gemVybyAtIDEwME1icHMgKi8KKyNkZWZpbmUgREVGX01JTl9SQVRFCQkJCQkxMDAKIC8qIHJlc29sdXRpb24gb2YgdGhlIHJhdGUgc2hhcGluZyB0aW1lciAtIDEwMCB1c2VjICovCi0jZGVmaW5lIFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQwkxMDAKLS8qIHJlc29sdXRpb24gb2YgZmFpcm5lc3MgYWxnb3JpdGhtIGluIHVzZWNzIC0KLSAgIGNvZWZmaWNpZW50IGZvciBjYWxjdWxhdGluZyB0aGUgYWN0dWFsIHQgZmFpciAqLwotI2RlZmluZSBUX0ZBSVJfQ09FRgkJCTEwMDAwMDAwCisjZGVmaW5lIFJTX1BFUklPRElDX1RJTUVPVVRfVVNFQwkJCTEwMAogLyogbnVtYmVyIG9mIGJ5dGVzIGluIHNpbmdsZSBRTSBhcmJpdHJhdGlvbiBjeWNsZSAtCi0gICBjb2VmZmljaWVudCBmb3IgY2FsY3VsYXRpbmcgdGhlIGZhaXJuZXNzIHRpbWVyICovCi0jZGVmaW5lIFFNX0FSQl9CWVRFUwkJCTQwMDAwCi0jZGVmaW5lIEZBSVJfTUVNCQkJMgorICogY29lZmZpY2llbnQgZm9yIGNhbGN1bGF0aW5nIHRoZSBmYWlybmVzcyB0aW1lciAqLworI2RlZmluZSBRTV9BUkJfQllURVMJCQkJCTE2MDAwMAorLyogcmVzb2x1dGlvbiBvZiBNaW4gYWxnb3JpdGhtIDE6MTAwICovCisjZGVmaW5lIE1JTl9SRVMJCQkJCQkxMDAKKy8qIGhvdyBtYW55IGJ5dGVzIGFib3ZlIHRocmVzaG9sZCBmb3IgdGhlIG1pbmltYWwgY3JlZGl0IG9mIE1pbiBhbGdvcml0aG0qLworI2RlZmluZSBNSU5fQUJPVkVfVEhSRVNICQkJCTMyNzY4CisvKiBGYWlybmVzcyBhbGdvcml0aG0gaW50ZWdyYXRpb24gdGltZSBjb2VmZmljaWVudCAtCisgKiBmb3IgY2FsY3VsYXRpbmcgdGhlIGFjdHVhbCBUZmFpciAqLworI2RlZmluZSBUX0ZBSVJfQ09FRgkoKE1JTl9BQk9WRV9USFJFU0ggKyAgUU1fQVJCX0JZVEVTKSAqIDggKiBNSU5fUkVTKQorLyogTWVtb3J5IG9mIGZhaXJuZXNzIGFsZ29yaXRobSAuIDIgY3ljbGVzICovCisjZGVmaW5lIEZBSVJfTUVNCQkJCQkyCiAKIAogI2RlZmluZSBBVFROX05JR19GT1JfRlVOQwkJKDFMIDw8IDgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jCmluZGV4IDcxMGNlNWQuLjkzNzk4MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jCkBAIC0yNTksMTAgKzI1OSw0NCBAQAogI2VuZGlmCiB9CiAKKy8qIFRpbWVzdGFtcCBvcHRpb24gbGVuZ3RoIGFsbG93ZWQgZm9yIFRQQSBhZ2dyZWdhdGlvbjoKKyAqCisgKgkJbm9wIG5vcCBraW5kIGxlbmd0aCBlY2hvIHZhbAorICovCisjZGVmaW5lIFRQQV9UU1RBTVBfT1BUX0xFTgkxMgorLyoqCisgKiBDYWxjdWxhdGUgdGhlIGFwcHJveGltYXRlIHZhbHVlIG9mIHRoZSBNU1MgZm9yIHRoaXMKKyAqIGFnZ3JlZ2F0aW9uIHVzaW5nIHRoZSBmaXJzdCBwYWNrZXQgb2YgaXQuCisgKgorICogQHBhcmFtIGJwCisgKiBAcGFyYW0gcGFyc2luZ19mbGFncyBQYXJzaW5nIGZsYWdzIGZyb20gdGhlIFNUQVJUIENRRQorICogQHBhcmFtIGxlbl9vbl9iZCBUb3RhbCBsZW5ndGggb2YgdGhlIGZpcnN0IHBhY2tldCBmb3IgdGhlCisgKgkJICAgICBhZ2dyZWdhdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB1MTYgYm54Mnhfc2V0X2xyb19tc3Moc3RydWN0IGJueDJ4ICpicCwgdTE2IHBhcnNpbmdfZmxhZ3MsCisJCQkJICAgIHUxNiBsZW5fb25fYmQpCit7CisJLyogVFBBIGFycmdyZWdhdGlvbiB3b24ndCBoYXZlIGFuIElQIG9wdGlvbnMgYW5kIFRDUCBvcHRpb25zCisJICogb3RoZXIgdGhhbiB0aW1lc3RhbXAuCisJICovCisJdTE2IGhkcnNfbGVuID0gRVRIX0hMRU4gKyBzaXplb2Yoc3RydWN0IGlwaGRyKSArIHNpemVvZihzdHJ1Y3QgdGNwaGRyKTsKKworCisJLyogQ2hlY2sgaWYgdGhlcmUgd2FzIGEgVENQIHRpbWVzdGFtcCwgaWYgdGhlcmUgaXMgaXQncyB3aWxsCisJICogYWx3YXlzIGJlIDEyIGJ5dGVzIGxlbmd0aDogbm9wIG5vcCBraW5kIGxlbmd0aCBlY2hvIHZhbC4KKwkgKgorCSAqIE90aGVyd2lzZSBGVyB3b3VsZCBjbG9zZSB0aGUgYWdncmVnYXRpb24uCisJICovCisJaWYgKHBhcnNpbmdfZmxhZ3MgJiBQQVJTSU5HX0ZMQUdTX1RJTUVfU1RBTVBfRVhJU1RfRkxBRykKKwkJaGRyc19sZW4gKz0gVFBBX1RTVEFNUF9PUFRfTEVOOworCisJcmV0dXJuIGxlbl9vbl9iZCAtIGhkcnNfbGVuOworfQorCiBzdGF0aWMgaW50IGJueDJ4X2ZpbGxfZnJhZ19za2Ioc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcCwKIAkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIHN0cnVjdCBldGhfZmFzdF9wYXRoX3J4X2NxZSAqZnBfY3FlLAotCQkJICAgICAgIHUxNiBjcWVfaWR4KQorCQkJICAgICAgIHUxNiBjcWVfaWR4LCB1MTYgcGFyc2luZ19mbGFncykKIHsKIAlzdHJ1Y3Qgc3dfcnhfcGFnZSAqcnhfcGcsIG9sZF9yeF9wZzsKIAl1MTYgbGVuX29uX2JkID0gbGUxNl90b19jcHUoZnBfY3FlLT5sZW5fb25fYmQpOwpAQCAtMjc1LDggKzMwOSw4IEBACiAKIAkvKiBUaGlzIGlzIG5lZWRlZCBpbiBvcmRlciB0byBlbmFibGUgZm9yd2FyZGluZyBzdXBwb3J0ICovCiAJaWYgKGZyYWdfc2l6ZSkKLQkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IG1pbigodTMyKVNHRV9QQUdFX1NJWkUsCi0JCQkJCSAgICAgICBtYXgoZnJhZ19zaXplLCAodTMyKWxlbl9vbl9iZCkpOworCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplID0gYm54Mnhfc2V0X2xyb19tc3MoYnAsIHBhcnNpbmdfZmxhZ3MsCisJCQkJCQkJICAgICAgbGVuX29uX2JkKTsKIAogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKIAlpZiAocGFnZXMgPiBtaW5fdCh1MzIsIDgsIE1BWF9TS0JfRlJBR1MpKlNHRV9QQUdFX1NJWkUqUEFHRVNfUEVSX1NHRSkgewpAQCAtMzQ0LDYgKzM3OCw4IEBACiAJaWYgKGxpa2VseShuZXdfc2tiKSkgewogCQkvKiBmaXggaXAgeHN1bSBhbmQgZ2l2ZSBpdCB0byB0aGUgc3RhY2sgKi8KIAkJLyogKG5vIG5lZWQgdG8gbWFwIHRoZSBuZXcgc2tiKSAqLworCQl1MTYgcGFyc2luZ19mbGFncyA9CisJCQlsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUucGFyc19mbGFncy5mbGFncyk7CiAKIAkJcHJlZmV0Y2goc2tiKTsKIAkJcHJlZmV0Y2goKChjaGFyICopKHNrYikpICsgTDFfQ0FDSEVfQllURVMpOwpAQCAtMzczLDkgKzQwOSw5IEBACiAJCX0KIAogCQlpZiAoIWJueDJ4X2ZpbGxfZnJhZ19za2IoYnAsIGZwLCBza2IsCi0JCQkJCSAmY3FlLT5mYXN0X3BhdGhfY3FlLCBjcWVfaWR4KSkgewotCQkJaWYgKChsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUuCi0JCQkgICAgcGFyc19mbGFncy5mbGFncykgJiBQQVJTSU5HX0ZMQUdTX1ZMQU4pKQorCQkJCQkgJmNxZS0+ZmFzdF9wYXRoX2NxZSwgY3FlX2lkeCwKKwkJCQkJIHBhcnNpbmdfZmxhZ3MpKSB7CisJCQlpZiAocGFyc2luZ19mbGFncyAmIFBBUlNJTkdfRkxBR1NfVkxBTikKIAkJCQlfX3ZsYW5faHdhY2NlbF9wdXRfdGFnKHNrYiwKIAkJCQkJCSBsZTE2X3RvX2NwdShjcWUtPmZhc3RfcGF0aF9jcWUuCiAJCQkJCQkJICAgICB2bGFuX3RhZykpOwpAQCAtNzAzLDE5ICs3MzksMjAgQEAKIHsKIAl1MTYgbGluZV9zcGVlZCA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKIAlpZiAoSVNfTUYoYnApKSB7Ci0JCXUxNiBtYXhDZmcgPSAoYnAtPm1mX2NvbmZpZ1tCUF9WTihicCldICYKLQkJCQkJCUZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgotCQkJCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUOwotCQkvKiBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgTUFYIGxpbmUgc3BlZWQgbGltaXQgZm9yIHRoZSBEQ0MKLQkJICogY2FwYWJsZSBkZXZpY2VzCisJCXUxNiBtYXhDZmcgPSBibngyeF9leHRyYWN0X21heF9jZmcoYnAsCisJCQkJCQkgICBicC0+bWZfY29uZmlnW0JQX1ZOKGJwKV0pOworCisJCS8qIENhbGN1bGF0ZSB0aGUgY3VycmVudCBNQVggbGluZSBzcGVlZCBsaW1pdCBmb3IgdGhlIE1GCisJCSAqIGRldmljZXMKIAkJICovCi0JCWlmIChJU19NRl9TRChicCkpIHsKKwkJaWYgKElTX01GX1NJKGJwKSkKKwkJCWxpbmVfc3BlZWQgPSAobGluZV9zcGVlZCAqIG1heENmZykgLyAxMDA7CisJCWVsc2UgeyAvKiBTRCBtb2RlICovCiAJCQl1MTYgdm5fbWF4X3JhdGUgPSBtYXhDZmcgKiAxMDA7CiAKIAkJCWlmICh2bl9tYXhfcmF0ZSA8IGxpbmVfc3BlZWQpCiAJCQkJbGluZV9zcGVlZCA9IHZuX21heF9yYXRlOwotCQl9IGVsc2UgLyogSVNfTUZfU0koYnApKSAqLwotCQkJbGluZV9zcGVlZCA9IChsaW5lX3NwZWVkICogbWF4Q2ZnKSAvIDEwMDsKKwkJfQogCX0KIAogCXJldHVybiBsaW5lX3NwZWVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uaAppbmRleCAwM2ViNGQ2Li4zMjZiYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9jbW4uaApAQCAtMTA0NCw0ICsxMDQ0LDI0IEBACiB2b2lkIGJueDJ4X2FjcXVpcmVfcGh5X2xvY2soc3RydWN0IGJueDJ4ICpicCk7CiB2b2lkIGJueDJ4X3JlbGVhc2VfcGh5X2xvY2soc3RydWN0IGJueDJ4ICpicCk7CiAKKy8qKgorICogRXh0cmFjdHMgTUFYIEJXIHBhcnQgZnJvbSBNRiBjb25maWd1cmF0aW9uLgorICoKKyAqIEBwYXJhbSBicAorICogQHBhcmFtIG1mX2NmZworICoKKyAqIEByZXR1cm4gdTE2CisgKi8KK3N0YXRpYyBpbmxpbmUgdTE2IGJueDJ4X2V4dHJhY3RfbWF4X2NmZyhzdHJ1Y3QgYm54MnggKmJwLCB1MzIgbWZfY2ZnKQoreworCXUxNiBtYXhfY2ZnID0gKG1mX2NmZyAmIEZVTkNfTUZfQ0ZHX01BWF9CV19NQVNLKSA+PgorCQkJICAgICAgRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUOworCWlmICghbWF4X2NmZykgeworCQlCTlgyWF9FUlIoIklsbGVnYWwgY29uZmlndXJhdGlvbiBkZXRlY3RlZCBmb3IgTWF4IEJXIC0gIgorCQkJICAidXNpbmcgMTAwIGluc3RlYWRcbiIpOworCQltYXhfY2ZnID0gMTAwOworCX0KKwlyZXR1cm4gbWF4X2NmZzsKK30KKwogI2VuZGlmIC8qIEJOWDJYX0NNTl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKaW5kZXggNWI0NGE4Yi4uZWYyOTE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJc3BlZWQgfD0gKGNtZC0+c3BlZWRfaGkgPDwgMTYpOwogCiAJaWYgKElTX01GX1NJKGJwKSkgewotCQl1MzIgcGFyYW0gPSAwOworCQl1MzIgcGFyYW0gPSAwLCBwYXJ0OwogCQl1MzIgbGluZV9zcGVlZCA9IGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZDsKIAogCQkvKiB1c2UgMTBHIGlmIG5vIGxpbmsgZGV0ZWN0ZWQgKi8KQEAgLTI1MSw5ICsyNTEsMTEgQEAKIAkJCQkgICAgICAgUkVRX0JDX1ZFUl80X1NFVF9NRl9CVyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAobGluZV9zcGVlZCA8IHNwZWVkKSB7Ci0JCQlCTlgyWF9ERVZfSU5GTygiTmV3IHNwZWVkIHNob3VsZCBiZSBsZXNzIG9yIGVxdWFsICIKLQkJCQkgICAgICAgInRvIGFjdHVhbCBsaW5lIHNwZWVkXG4iKTsKKwkJcGFydCA9IChzcGVlZCAqIDEwMCkgLyBsaW5lX3NwZWVkOworCQlpZiAobGluZV9zcGVlZCA8IHNwZWVkIHx8ICFwYXJ0KSB7CisJCQlCTlgyWF9ERVZfSU5GTygiU3BlZWQgc2V0dGluZyBzaG91bGQgYmUgaW4gYSByYW5nZSAiCisJCQkJICAgICAgICJmcm9tIDElJSB0byAxMDAlJSAiCisJCQkJICAgICAgICJvZiBhY3R1YWwgbGluZSBzcGVlZFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQkvKiBsb2FkIG9sZCB2YWx1ZXMgKi8KQEAgLTI2Myw4ICsyNjUsNyBAQAogCQlwYXJhbSAmPSBGVU5DX01GX0NGR19NSU5fQldfTUFTSzsKIAogCQkvKiBzZXQgbmV3IE1BWCB2YWx1ZSAqLwotCQlwYXJhbSB8PSAoKChzcGVlZCAqIDEwMCkgLyBsaW5lX3NwZWVkKQotCQkJCSA8PCBGVU5DX01GX0NGR19NQVhfQldfU0hJRlQpCisJCXBhcmFtIHw9IChwYXJ0IDw8IEZVTkNfTUZfQ0ZHX01BWF9CV19TSElGVCkKIAkJCQkgICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0s7CiAKIAkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1NFVF9NRl9CVywgcGFyYW0pOwpAQCAtMTc4MSw5ICsxNzgyLDcgQEAKIAkJeyAweDEwMCwgMHgzNTAgfSwgLyogbWFudWZfaW5mbyAqLwogCQl7IDB4NDUwLCAgMHhmMCB9LCAvKiBmZWF0dXJlX2luZm8gKi8KIAkJeyAweDY0MCwgIDB4NjQgfSwgLyogdXBncmFkZV9rZXlfaW5mbyAqLwotCQl7IDB4NmE0LCAgMHg2NCB9LAogCQl7IDB4NzA4LCAgMHg3MCB9LCAvKiBtYW51Zl9rZXlfaW5mbyAqLwotCQl7IDB4Nzc4LCAgMHg3MCB9LAogCQl7ICAgICAwLCAgICAgMCB9CiAJfTsKIAlfX2JlMzIgYnVmWzB4MzUwIC8gNF07CkBAIC0xOTMzLDExICsxOTMyLDExIEBACiAJCWJ1Zls0XSA9IDE7CiAJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAJfQotCWlmIChicC0+cG9ydC5wbWYpCi0JCWlmIChibngyeF9saW5rX3Rlc3QoYnAsIGlzX3NlcmRlcykgIT0gMCkgewotCQkJYnVmWzVdID0gMTsKLQkJCWV0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7Ci0JCX0KKworCWlmIChibngyeF9saW5rX3Rlc3QoYnAsIGlzX3NlcmRlcykgIT0gMCkgeworCQlidWZbNV0gPSAxOworCQlldGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCX0KIAogI2lmZGVmIEJOWDJYX0VYVFJBX0RFQlVHCiAJYm54MnhfcGFuaWNfZHVtcChicCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmggYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9pbml0LmgKaW5kZXggNWEyNjhlOS4uZmE2ZGJlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2luaXQuaApAQCAtMjQxLDcgKzI0MSw3IEBACiAJLyogQmxvY2sgSUdVLCBNSVNDLCBQWFAgYW5kIFBYUDIgcGFyaXR5IGVycm9ycyBhcyBsb25nIGFzIHdlIGRvbid0CiAJICogd2FudCB0byBoYW5kbGUgInN5c3RlbSBraWxsIiBmbG93IGF0IHRoZSBtb21lbnQuCiAJICovCi0JQkxPQ0tfUFJUWV9JTkZPKFBYUCwgMHgzZmZmZmZmLCAweDNmZmZmZmYsIDB4M2ZmZmZmZiwgMHgzZmZmZmZmKSwKKwlCTE9DS19QUlRZX0lORk8oUFhQLCAweDdmZmZmZmYsIDB4M2ZmZmZmZiwgMHgzZmZmZmZmLCAweDdmZmZmZmYpLAogCUJMT0NLX1BSVFlfSU5GT18wKFBYUDIsCTB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYpLAogCUJMT0NLX1BSVFlfSU5GT18xKFBYUDIsCTB4N2ZmLCAweDdmLCAweDdmLCAweDdmZiksCiAJQkxPQ0tfUFJUWV9JTkZPKEhDLCAweDcsIDB4NywgMHg3LCAwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2xpbmsuYwppbmRleCA3MTYwZWM1Li5kZDEyMTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbGluay5jCkBAIC0zOTQ4LDQ4ICszOTQ4LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyB2b2lkIGJueDJ4XzgwNzNfc2V0X3hhdWlfbG93X3Bvd2VyX21vZGUoc3RydWN0IGJueDJ4ICpicCwKLQkJCQkJICAgICAgIHN0cnVjdCBibngyeF9waHkgKnBoeSkKLXsKLQl1MTYgdmFsOwotCWJueDJ4X2NsNDVfcmVhZChicCwgcGh5LAotCQkJTURJT19QTUFfREVWQUQsIE1ESU9fUE1BX1JFR184MDczX0NISVBfUkVWLCAmdmFsKTsKLQotCWlmICh2YWwgPT0gMCkgewotCQkvKiBNdXN0bid0IHNldCBsb3cgcG93ZXIgbW9kZSBpbiA4MDczIEEwICovCi0JCXJldHVybjsKLQl9Ci0KLQkvKiBEaXNhYmxlIFBMTCBzZXF1ZW5jZXIgKHVzZSByZWFkLW1vZGlmeS13cml0ZSB0byBjbGVhciBiaXQgMTMpICovCi0JYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCi0JCQlNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsICZ2YWwpOwotCXZhbCAmPSB+KDE8PDEzKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCi0JCSAgICAgICBNRElPX1hTX0RFVkFELCBNRElPX1hTX1BMTF9TRVFVRU5DRVIsIHZhbCk7Ci0KLQkvKiBQTEwgY29udHJvbHMgKi8KLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1RSwgMHgxMDc3KTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1RCwgMHgwMDAwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1QywgMHgwMzBCKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1QiwgMHgxMjQwKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIDB4ODA1QSwgMHgyNDkwKTsKLQotCS8qIFR4IENvbnRyb2xzICovCi0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwQTcsIDB4MEM3NCk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwQTYsIDB4OTA0MSk7Ci0JYm54MnhfY2w0NV93cml0ZShicCwgcGh5LCBNRElPX1hTX0RFVkFELCAweDgwQTUsIDB4NDY0MCk7Ci0KLQkvKiBSeCBDb250cm9scyAqLwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEZFLCAweDAxQzQpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEZELCAweDkyNDkpOwotCWJueDJ4X2NsNDVfd3JpdGUoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgMHg4MEZDLCAweDIwMTUpOwotCi0JLyogRW5hYmxlIFBMTCBzZXF1ZW5jZXIgICh1c2UgcmVhZC1tb2RpZnktd3JpdGUgdG8gc2V0IGJpdCAxMykgKi8KLQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwgTURJT19YU19ERVZBRCwgTURJT19YU19QTExfU0VRVUVOQ0VSLCAmdmFsKTsKLQl2YWwgfD0gKDE8PDEzKTsKLQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksIE1ESU9fWFNfREVWQUQsIE1ESU9fWFNfUExMX1NFUVVFTkNFUiwgdmFsKTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qCQkJQkNNODA3MyBQSFkgU0VDVElPTgkJCSAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC00MTQ4LDggKzQxMDYsNiBAQAogCiAJYm54MnhfODA3M19zZXRfcGF1c2VfY2wzNyhwYXJhbXMsIHBoeSwgdmFycyk7CiAKLQlibngyeF84MDczX3NldF94YXVpX2xvd19wb3dlcl9tb2RlKGJwLCBwaHkpOwotCiAJYm54MnhfY2w0NV9yZWFkKGJwLCBwaHksCiAJCQlNRElPX1BNQV9ERVZBRCwgTURJT19QTUFfUkVHX004MDUxX01TR09VVF9SRUcsICZ0bXAxKTsKIApAQCAtNjUxOSw2ICs2NDc1LDE4IEBACiAJCQkJCSBNRElPX1BNQV9ERVZBRCwKIAkJCQkJIE1ESU9fUE1BX1JFR184NDgxX0xFRDFfTUFTSywKIAkJCQkJIDB4ODApOworCisJCQkvKiBUZWxsIExFRDMgdG8gYmxpbmsgb24gc291cmNlICovCisJCQlibngyeF9jbDQ1X3JlYWQoYnAsIHBoeSwKKwkJCQkJTURJT19QTUFfREVWQUQsCisJCQkJCU1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkJCQkmdmFsKTsKKwkJCXZhbCAmPSB+KDc8PDYpOworCQkJdmFsIHw9ICgxPDw2KTsgLyogQTgzQls4OjZdPSAxICovCisJCQlibngyeF9jbDQ1X3dyaXRlKGJwLCBwaHksCisJCQkJCSBNRElPX1BNQV9ERVZBRCwKKwkJCQkJIE1ESU9fUE1BX1JFR184NDgxX0xJTktfU0lHTkFMLAorCQkJCQkgdmFsKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC03NzIwLDEwICs3Njg4LDEzIEBACiAJc3RydWN0IGJueDJ4X3BoeSBwaHlbUE9SVF9NQVhdOwogCXN0cnVjdCBibngyeF9waHkgKnBoeV9ibGtbUE9SVF9NQVhdOwogCXUxNiB2YWw7Ci0JczggcG9ydDsKKwlzOCBwb3J0ID0gMDsKIAlzOCBwb3J0X29mX3BhdGggPSAwOwotCi0JYm54MnhfZXh0X3BoeV9od19yZXNldChicCwgMCk7CisJdTMyIHN3YXBfdmFsLCBzd2FwX292ZXJyaWRlOworCXN3YXBfdmFsID0gUkVHX1JEKGJwLCAgTklHX1JFR19QT1JUX1NXQVApOworCXN3YXBfb3ZlcnJpZGUgPSBSRUdfUkQoYnAsICBOSUdfUkVHX1NUUkFQX09WRVJSSURFKTsKKwlwb3J0IF49IChzd2FwX3ZhbCAmJiBzd2FwX292ZXJyaWRlKTsKKwlibngyeF9leHRfcGh5X2h3X3Jlc2V0KGJwLCBwb3J0KTsKIAkvKiBQQVJUMSAtIFJlc2V0IGJvdGggcGh5cyAqLwogCWZvciAocG9ydCA9IFBPUlRfTUFYIC0gMTsgcG9ydCA+PSBQT1JUXzA7IHBvcnQtLSkgewogCQl1MzIgc2htZW1fYmFzZSwgc2htZW0yX2Jhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9tYWluLmMKaW5kZXggOGNkY2Y1Yi4uMDMyYWUxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X21haW4uYwpAQCAtMTk3NCwxMyArMTk3NCwyMiBAQAogCQl2bl9tYXhfcmF0ZSA9IDA7CiAKIAl9IGVsc2UgeworCQl1MzIgbWF4Q2ZnID0gYm54MnhfZXh0cmFjdF9tYXhfY2ZnKGJwLCB2bl9jZmcpOworCiAJCXZuX21pbl9yYXRlID0gKCh2bl9jZmcgJiBGVU5DX01GX0NGR19NSU5fQldfTUFTSykgPj4KIAkJCQlGVU5DX01GX0NGR19NSU5fQldfU0hJRlQpICogMTAwOwotCQkvKiBJZiBtaW4gcmF0ZSBpcyB6ZXJvIC0gc2V0IGl0IHRvIDEgKi8KKwkJLyogSWYgZmFpcm5lc3MgaXMgZW5hYmxlZCAobm90IGFsbCBtaW4gcmF0ZXMgYXJlIHplcm9lcykgYW5kCisJCSAgIGlmIGN1cnJlbnQgbWluIHJhdGUgaXMgemVybyAtIHNldCBpdCB0byAxLgorCQkgICBUaGlzIGlzIGEgcmVxdWlyZW1lbnQgb2YgdGhlIGFsZ29yaXRobS4gKi8KIAkJaWYgKGJwLT52bl93ZWlnaHRfc3VtICYmICh2bl9taW5fcmF0ZSA9PSAwKSkKIAkJCXZuX21pbl9yYXRlID0gREVGX01JTl9SQVRFOwotCQl2bl9tYXhfcmF0ZSA9ICgodm5fY2ZnICYgRlVOQ19NRl9DRkdfTUFYX0JXX01BU0spID4+Ci0JCQkJRlVOQ19NRl9DRkdfTUFYX0JXX1NISUZUKSAqIDEwMDsKKworCQlpZiAoSVNfTUZfU0koYnApKQorCQkJLyogbWF4Q2ZnIGluIHBlcmNlbnRzIG9mIGxpbmtzcGVlZCAqLworCQkJdm5fbWF4X3JhdGUgPSAoYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkICogbWF4Q2ZnKSAvIDEwMDsKKwkJZWxzZQorCQkJLyogbWF4Q2ZnIGlzIGFic29sdXRlIGluIDEwME1iIHVuaXRzICovCisJCQl2bl9tYXhfcmF0ZSA9IG1heENmZyAqIDEwMDsKIAl9CiAKIAlEUChORVRJRl9NU0dfSUZVUCwKQEAgLTIwMDYsNyArMjAxNSw4IEBACiAJCW1fZmFpcl92bi52bl9jcmVkaXRfZGVsdGEgPQogCQkJbWF4X3QodTMyLCAodm5fbWluX3JhdGUgKiAoVF9GQUlSX0NPRUYgLwogCQkJCQkJICAgKDggKiBicC0+dm5fd2VpZ2h0X3N1bSkpKSwKLQkJCSAgICAgIChicC0+Y21uZy5mYWlyX3ZhcnMuZmFpcl90aHJlc2hvbGQgKiAyKSk7CisJCQkgICAgICAoYnAtPmNtbmcuZmFpcl92YXJzLmZhaXJfdGhyZXNob2xkICsKKwkJCQkJCQlNSU5fQUJPVkVfVEhSRVNIKSk7CiAJCURQKE5FVElGX01TR19JRlVQLCAibV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSAlZFxuIiwKIAkJICAgbV9mYWlyX3ZuLnZuX2NyZWRpdF9kZWx0YSk7CiAJfQpAQCAtMjMwMSwxNSArMjMxMSwxMCBAQAogCQkvKiBhY2NlcHQgbWF0Y2hlZCB1Y2FzdCAqLwogCQlkcm9wX2FsbF91Y2FzdCA9IDA7CiAJfQotCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCkgeworCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCkKIAkJLyogYWNjZXB0IG1hdGNoZWQgbWNhc3QgKi8KIAkJZHJvcF9hbGxfbWNhc3QgPSAwOwotCQlpZiAoSVNfTUZfU0koYnApKQotCQkJLyogc2luY2UgbWNhc3QgYWRkcmVzc2VzIHdvbid0IGFycml2ZSB3aXRoIG92bGFuLAotCQkJICogZncgbmVlZHMgdG8gYWNjZXB0IGFsbCBvZiB0aGVtIGluCi0JCQkgKiBzd2l0Y2gtaW5kZXBlbmRlbnQgbW9kZSAqLwotCQkJYWNjcF9hbGxfbWNhc3QgPSAxOwotCX0KKwogCWlmIChmaWx0ZXJzICYgQk5YMlhfQUNDRVBUX0FMTF9VTklDQVNUKSB7CiAJCS8qIGFjY2VwdCBhbGwgbWNhc3QgKi8KIAkJZHJvcF9hbGxfdWNhc3QgPSAwOwpAQCAtNDI4MSw5ICs0Mjg2LDEyIEBACiAJCWRlZl9xX2ZpbHRlcnMgfD0gQk5YMlhfQUNDRVBUX1VOSUNBU1QgfCBCTlgyWF9BQ0NFUFRfQlJPQURDQVNUIHwKIAkJCQlCTlgyWF9BQ0NFUFRfTVVMVElDQVNUOwogI2lmZGVmIEJDTV9DTklDCi0JCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAotCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQlpZiAoIU5PX0ZDT0UoYnApKSB7CisJCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKKwkJCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLAorCQkJCQkJICBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8CisJCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQl9CiAjZW5kaWYKIAkJYnJlYWs7CiAKQEAgLTQyOTEsMTggKzQyOTksMjkgQEAKIAkJZGVmX3FfZmlsdGVycyB8PSBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8IEJOWDJYX0FDQ0VQVF9CUk9BRENBU1QgfAogCQkJCUJOWDJYX0FDQ0VQVF9BTExfTVVMVElDQVNUOwogI2lmZGVmIEJDTV9DTklDCi0JCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOwotCQlibngyeF9yeHFfc2V0X21hY19maWx0ZXJzKGJwLCBjbF9pZCwgQk5YMlhfQUNDRVBUX1VOSUNBU1QgfAotCQkJCQkgIEJOWDJYX0FDQ0VQVF9NVUxUSUNBU1QpOworCQkvKgorCQkgKiAgUHJldmVudCBkdXBsaWNhdGlvbiBvZiBtdWx0aWNhc3QgcGFja2V0cyBieSBjb25maWd1cmluZyBGQ29FCisJCSAqICBMMiBDbGllbnQgdG8gcmVjZWl2ZSBvbmx5IG1hdGNoZWQgdW5pY2FzdCBmcmFtZXMuCisJCSAqLworCQlpZiAoIU5PX0ZDT0UoYnApKSB7CisJCQljbF9pZCA9IGJueDJ4X2Zjb2UoYnAsIGNsX2lkKTsKKwkJCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLAorCQkJCQkJICBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCk7CisJCX0KICNlbmRpZgogCQlicmVhazsKIAogCWNhc2UgQk5YMlhfUlhfTU9ERV9QUk9NSVNDOgogCQlkZWZfcV9maWx0ZXJzIHw9IEJOWDJYX1BST01JU0NVT1VTX01PREU7CiAjaWZkZWYgQkNNX0NOSUMKLQkJY2xfaWQgPSBibngyeF9mY29lKGJwLCBjbF9pZCk7Ci0JCWJueDJ4X3J4cV9zZXRfbWFjX2ZpbHRlcnMoYnAsIGNsX2lkLCBCTlgyWF9BQ0NFUFRfVU5JQ0FTVCB8Ci0JCQkJCSAgQk5YMlhfQUNDRVBUX01VTFRJQ0FTVCk7CisJCS8qCisJCSAqICBQcmV2ZW50IHBhY2tldHMgZHVwbGljYXRpb24gYnkgY29uZmlndXJpbmcgRFJPUF9BTEwgZm9yIEZDb0UKKwkJICogIEwyIENsaWVudC4KKwkJICovCisJCWlmICghTk9fRkNPRShicCkpIHsKKwkJCWNsX2lkID0gYm54MnhfZmNvZShicCwgY2xfaWQpOworCQkJYm54MnhfcnhxX3NldF9tYWNfZmlsdGVycyhicCwgY2xfaWQsIEJOWDJYX0FDQ0VQVF9OT05FKTsKKwkJfQogI2VuZGlmCiAJCS8qIHBhc3MgbWFuYWdlbWVudCB1bmljYXN0IHBhY2tldHMgYXMgd2VsbCAqLwogCQlsbGhfbWFzayB8PSBOSUdfTExIMF9CUkIxX0RSVl9NQVNLX1JFR19MTEgwX0JSQjFfRFJWX01BU0tfVU5DU1Q7CkBAIC01Mjk2LDEwICs1MzE1LDYgQEAKIAkJfQogCX0KIAotCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IGJueDJ4X2h3X2xvY2tfcmVxdWlyZWQoYnAsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbV9iYXNlLAotCQkJCQkJICAgICAgIGJwLT5jb21tb24uc2htZW0yX2Jhc2UpOwotCiAJYm54Mnhfc2V0dXBfZmFuX2ZhaWx1cmVfZGV0ZWN0aW9uKGJwKTsKIAogCS8qIGNsZWFyIFBYUDIgYXR0ZW50aW9ucyAqLwpAQCAtNTUwMyw5ICs1NTE4LDYgQEAKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIE1DUF9CTE9DSywgaW5pdF9zdGFnZSk7CiAJYm54MnhfaW5pdF9ibG9jayhicCwgRE1BRV9CTE9DSywgaW5pdF9zdGFnZSk7Ci0JYnAtPnBvcnQubmVlZF9od19sb2NrID0gYm54MnhfaHdfbG9ja19yZXF1aXJlZChicCwKLQkJCQkJCSAgICAgICBicC0+Y29tbW9uLnNobWVtX2Jhc2UsCi0JCQkJCQkgICAgICAgYnAtPmNvbW1vbi5zaG1lbTJfYmFzZSk7CiAJaWYgKGJueDJ4X2Zhbl9mYWlsdXJlX2RldF9yZXEoYnAsIGJwLT5jb21tb24uc2htZW1fYmFzZSwKIAkJCQkgICAgICBicC0+Y29tbW9uLnNobWVtMl9iYXNlLCBwb3J0KSkgewogCQl1MzIgcmVnX2FkZHIgPSAocG9ydCA/IE1JU0NfUkVHX0FFVV9FTkFCTEUxX0ZVTkNfMV9PVVRfMCA6CkBAIC04Mzc5LDYgKzgzOTEsMTcgQEAKIAkJIChleHRfcGh5X3R5cGUgIT0gUE9SVF9IV19DRkdfWEdYU19FWFRfUEhZX1RZUEVfTk9UX0NPTk4pKQogCQlicC0+bWRpby5wcnRhZCA9CiAJCQlYR1hTX0VYVF9QSFlfQUREUihleHRfcGh5X2NvbmZpZyk7CisKKwkvKgorCSAqIENoZWNrIGlmIGh3IGxvY2sgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIE1EQy9NRElPIGJ1cyB0byB0aGUgUEhZKHMpCisJICogSW4gTUYgbW9kZSwgaXQgaXMgc2V0IHRvIGNvdmVyIHNlbGYgdGVzdCBjYXNlcworCSAqLworCWlmIChJU19NRihicCkpCisJCWJwLT5wb3J0Lm5lZWRfaHdfbG9jayA9IDE7CisJZWxzZQorCQlicC0+cG9ydC5uZWVkX2h3X2xvY2sgPSBibngyeF9od19sb2NrX3JlcXVpcmVkKGJwLAorCQkJCQkJCWJwLT5jb21tb24uc2htZW1fYmFzZSwKKwkJCQkJCQlicC0+Y29tbW9uLnNobWVtMl9iYXNlKTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGJueDJ4X2dldF9tYWNfaHdpbmZvKHN0cnVjdCBibngyeCAqYnApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54Mnhfc3RhdHMuYwppbmRleCBiZGE2MGQ1Li4zNDQ1ZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3N0YXRzLmMKQEAgLTEyMzksMTQgKzEyMzksMTQgQEAKIAlpZiAodW5saWtlbHkoYnAtPnBhbmljKSkKIAkJcmV0dXJuOwogCisJYm54Mnhfc3RhdHNfc3RtW2JwLT5zdGF0c19zdGF0ZV1bZXZlbnRdLmFjdGlvbihicCk7CisKIAkvKiBQcm90ZWN0IGEgc3RhdGUgY2hhbmdlIGZsb3cgKi8KIAlzcGluX2xvY2tfYmgoJmJwLT5zdGF0c19sb2NrKTsKIAlzdGF0ZSA9IGJwLT5zdGF0c19zdGF0ZTsKIAlicC0+c3RhdHNfc3RhdGUgPSBibngyeF9zdGF0c19zdG1bc3RhdGVdW2V2ZW50XS5uZXh0X3N0YXRlOwogCXNwaW5fdW5sb2NrX2JoKCZicC0+c3RhdHNfbG9jayk7CiAKLQlibngyeF9zdGF0c19zdG1bc3RhdGVdW2V2ZW50XS5hY3Rpb24oYnApOwotCiAJaWYgKChldmVudCAhPSBTVEFUU19FVkVOVF9VUERBVEUpIHx8IG5ldGlmX21zZ190aW1lcihicCkpCiAJCURQKEJOWDJYX01TR19TVEFUUywgInN0YXRlICVkIC0+IGV2ZW50ICVkIC0+IHN0YXRlICVkXG4iLAogCQkgICBzdGF0ZSwgZXZlbnQsIGJwLT5zdGF0c19zdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggMTcxNzgyZS4uMTAyNGFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMjQ3MCw2ICsyNDcwLDEwIEBACiAJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQogCQlnb3RvIG91dDsKIAorCXNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlnb3RvIG91dDsKKwogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbGFjcGR1KSkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggZjRlNjM4Yy4uNWM2ZmJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMzI2LDYgKzMyNiwxMCBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXQ7CisKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBhcnBfaGRyX2xlbihib25kX2RldikpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggYjEwMjViOC4uMTYzZTBiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0yNzMzLDYgKzI3MzMsMTAgQEAKIAlpZiAoIXNsYXZlIHx8ICFzbGF2ZV9kb19hcnBfdmFsaWRhdGUoYm9uZCwgc2xhdmUpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKKwlza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikKKwkJZ290byBvdXRfdW5sb2NrOworCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgYXJwX2hkcl9sZW4oZGV2KSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZwppbmRleCBkNWE5ZGI2Li41ZGVjNDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vS2NvbmZpZwpAQCAtMjMsNyArMjMsNyBAQAogCiAJICBBcyBvbmx5IHRoZSBzZW5kaW5nIGFuZCByZWNlaXZpbmcgb2YgQ0FOIGZyYW1lcyBpcyBpbXBsZW1lbnRlZCwgdGhpcwogCSAgZHJpdmVyIHNob3VsZCB3b3JrIHdpdGggdGhlIChzZXJpYWwvVVNCKSBDQU4gaGFyZHdhcmUgZnJvbToKLQkgIHd3dy5jYW51c2IuY29tIC8gd3d3LmNhbjIzMi5jb20gLyB3d3cubWljdHJvbmljLmNvbSAvIHd3dy5jYW5oYWNrLmRlCisJICB3d3cuY2FudXNiLmNvbSAvIHd3dy5jYW4yMzIuY29tIC8gd3d3Lm1pY3Ryb25pY3MuZGUgLyB3d3cuY2FuaGFjay5kZQogCiAJICBVc2Vyc3BhY2UgdG9vbHMgdG8gYXR0YWNoIHRoZSBTTENBTiBsaW5lIGRpc2NpcGxpbmUgKHNsY2FuX2F0dGFjaCwKIAkgIHNsY2FuZCkgY2FuIGJlIGZvdW5kIGluIHRoZSBjYW4tdXRpbHMgYXQgdGhlIFNvY2tldENBTiBTVk4sIHNlZQpAQCAtMTE3LDYgKzExNyw4IEBACiAKIHNvdXJjZSAiZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnIgogCitzb3VyY2UgImRyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL0tjb25maWciCisKIGNvbmZpZyBDQU5fREVCVUdfREVWSUNFUwogCWJvb2wgIkNBTiBkZXZpY2VzIGRlYnVnZ2luZyBtZXNzYWdlcyIKIAlkZXBlbmRzIG9uIENBTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL01ha2VmaWxlCmluZGV4IDA3Y2ExNTkuLjUzYzgyYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vTWFrZWZpbGUKQEAgLTksNiArOSw3IEBACiBjYW4tZGV2LXkJCQk6PSBkZXYubwogCiBvYmoteQkJCQkrPSB1c2IvCitvYmoteQkJCQkrPSBzb2Z0aW5nLwogCiBvYmotJChDT05GSUdfQ0FOX1NKQTEwMDApCSs9IHNqYTEwMDAvCiBvYmotJChDT05GSUdfQ0FOX01TQ0FOKQkJKz0gbXNjYW4vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCmluZGV4IDdlZjgzZDAuLjU3ZDJmZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9hdDkxX2Nhbi5jCkBAIC0yLDcgKzIsNyBAQAogICogYXQ5MV9jYW4uYyAtIENBTiBuZXR3b3JrIGRyaXZlciBmb3IgQVQ5MSBTb0MgQ0FOIGNvbnRyb2xsZXIKICAqCiAgKiAoQykgMjAwNyBieSBIYW5zIEouIEtvY2ggPGhqa0BoYW5zamtvY2guZGU+Ci0gKiAoQykgMjAwOCwgMjAwOSwgMjAxMCBieSBNYXJjIEtsZWluZS1CdWRkZSA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogKEMpIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEgYnkgTWFyYyBLbGVpbmUtQnVkZGUgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIHZlcnNpb24gMiBhcyBkaXN0cmlidXRlZCBpbiB0aGUgJ0NPUFlJTkcnCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KQEAgLTQwLDIyICs0MSwyMyBAQAogCiAjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgogCi0jZGVmaW5lIEFUOTFfTkFQSV9XRUlHSFQJMTIKKyNkZWZpbmUgQVQ5MV9OQVBJX1dFSUdIVAkxMQogCiAvKgogICogUlgvVFggTWFpbGJveCBzcGxpdAogICogZG9uJ3QgZGFyZSB0byB0b3VjaAogICovCi0jZGVmaW5lIEFUOTFfTUJfUlhfTlVNCQkxMgorI2RlZmluZSBBVDkxX01CX1JYX05VTQkJMTEKICNkZWZpbmUgQVQ5MV9NQl9UWF9TSElGVAkyCiAKLSNkZWZpbmUgQVQ5MV9NQl9SWF9GSVJTVAkwCisjZGVmaW5lIEFUOTFfTUJfUlhfRklSU1QJMQogI2RlZmluZSBBVDkxX01CX1JYX0xBU1QJCShBVDkxX01CX1JYX0ZJUlNUICsgQVQ5MV9NQl9SWF9OVU0gLSAxKQogCiAjZGVmaW5lIEFUOTFfTUJfUlhfTUFTSyhpKQkoKDEgPDwgKGkpKSAtIDEpCiAjZGVmaW5lIEFUOTFfTUJfUlhfU1BMSVQJOAogI2RlZmluZSBBVDkxX01CX1JYX0xPV19MQVNUCShBVDkxX01CX1JYX1NQTElUIC0gMSkKLSNkZWZpbmUgQVQ5MV9NQl9SWF9MT1dfTUFTSwkoQVQ5MV9NQl9SWF9NQVNLKEFUOTFfTUJfUlhfU1BMSVQpKQorI2RlZmluZSBBVDkxX01CX1JYX0xPV19NQVNLCShBVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9TUExJVCkgJiBcCisJCQkJIH5BVDkxX01CX1JYX01BU0soQVQ5MV9NQl9SWF9GSVJTVCkpCiAKICNkZWZpbmUgQVQ5MV9NQl9UWF9OVU0JCSgxIDw8IEFUOTFfTUJfVFhfU0hJRlQpCiAjZGVmaW5lIEFUOTFfTUJfVFhfRklSU1QJKEFUOTFfTUJfUlhfTEFTVCArIDEpCkBAIC0xNjgsNiArMTcwLDggQEAKIAogCXN0cnVjdCBjbGsJCSpjbGs7CiAJc3RydWN0IGF0OTFfY2FuX2RhdGEJKnBkYXRhOworCisJY2FuaWRfdAkJCW1iMF9pZDsKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBhdDkxX2JpdHRpbWluZ19jb25zdCA9IHsKQEAgLTIyMCw2ICsyMjQsMTggQEAKIAlzZXRfbWJfbW9kZV9wcmlvKHByaXYsIG1iLCBtb2RlLCAwKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgYXQ5MV9jYW5faWRfdG9fcmVnX21pZChjYW5pZF90IGNhbl9pZCkKK3sKKwl1MzIgcmVnX21pZDsKKworCWlmIChjYW5faWQgJiBDQU5fRUZGX0ZMQUcpCisJCXJlZ19taWQgPSAoY2FuX2lkICYgQ0FOX0VGRl9NQVNLKSB8IEFUOTFfTUlEX01JREU7CisJZWxzZQorCQlyZWdfbWlkID0gKGNhbl9pZCAmIENBTl9TRkZfTUFTSykgPDwgMTg7CisKKwlyZXR1cm4gcmVnX21pZDsKK30KKwogLyoKICAqIFN3dGljaCB0cmFuc2NlaXZlciBvbiBvciBvZmYKICAqLwpAQCAtMjMzLDEyICsyNDksMjIgQEAKIHsKIAlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgaTsKKwl1MzIgcmVnX21pZDsKIAogCS8qCi0JICogVGhlIGZpcnN0IDEyIG1haWxib3hlcyBhcmUgdXNlZCBhcyBhIHJlY2VwdGlvbiBGSUZPLiBUaGUKLQkgKiBsYXN0IG1haWxib3ggaXMgY29uZmlndXJlZCB3aXRoIG92ZXJ3cml0ZSBvcHRpb24uIFRoZQotCSAqIG92ZXJ3cml0ZSBmbGFnIGluZGljYXRlcyBhIEZJRk8gb3ZlcmZsb3cuCisJICogRHVlIHRvIGEgY2hpcCBidWcgKGVycmF0YSA1MC4yLjYuMyAmIDUwLjMuNS4zKSB0aGUgZmlyc3QKKwkgKiBtYWlsYm94IGlzIGRpc2FibGVkLiBUaGUgbmV4dCAxMSBtYWlsYm94ZXMgYXJlIHVzZWQgYXMgYQorCSAqIHJlY2VwdGlvbiBGSUZPLiBUaGUgbGFzdCBtYWlsYm94IGlzIGNvbmZpZ3VyZWQgd2l0aAorCSAqIG92ZXJ3cml0ZSBvcHRpb24uIFRoZSBvdmVyd3JpdGUgZmxhZyBpbmRpY2F0ZXMgYSBGSUZPCisJICogb3ZlcmZsb3cuCiAJICovCisJcmVnX21pZCA9IGF0OTFfY2FuX2lkX3RvX3JlZ19taWQocHJpdi0+bWIwX2lkKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVQ5MV9NQl9SWF9GSVJTVDsgaSsrKSB7CisJCXNldF9tYl9tb2RlKHByaXYsIGksIEFUOTFfTUJfTU9ERV9ESVNBQkxFRCk7CisJCWF0OTFfd3JpdGUocHJpdiwgQVQ5MV9NSUQoaSksIHJlZ19taWQpOworCQlhdDkxX3dyaXRlKHByaXYsIEFUOTFfTUNSKGkpLCAweDApOwkvKiBjbGVhciBkbGMgKi8KKwl9CisKIAlmb3IgKGkgPSBBVDkxX01CX1JYX0ZJUlNUOyBpIDwgQVQ5MV9NQl9SWF9MQVNUOyBpKyspCiAJCXNldF9tYl9tb2RlKHByaXYsIGksIEFUOTFfTUJfTU9ERV9SWCk7CiAJc2V0X21iX21vZGUocHJpdiwgQVQ5MV9NQl9SWF9MQVNULCBBVDkxX01CX01PREVfUlhfT1ZSV1IpOwpAQCAtMjU0LDcgKzI4MCw4IEBACiAJCXNldF9tYl9tb2RlX3ByaW8ocHJpdiwgaSwgQVQ5MV9NQl9NT0RFX1RYLCAwKTsKIAogCS8qIFJlc2V0IHR4IGFuZCByeCBoZWxwZXIgcG9pbnRlcnMgKi8KLQlwcml2LT50eF9uZXh0ID0gcHJpdi0+dHhfZWNobyA9IHByaXYtPnJ4X25leHQgPSAwOworCXByaXYtPnR4X25leHQgPSBwcml2LT50eF9lY2hvID0gMDsKKwlwcml2LT5yeF9uZXh0ID0gQVQ5MV9NQl9SWF9GSVJTVDsKIH0KIAogc3RhdGljIGludCBhdDkxX3NldF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTM3MiwxMiArMzk5LDcgQEAKIAkJbmV0ZGV2X2VycihkZXYsICJCVUchIFRYIGJ1ZmZlciBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KLQotCWlmIChjZi0+Y2FuX2lkICYgQ0FOX0VGRl9GTEFHKQotCQlyZWdfbWlkID0gKGNmLT5jYW5faWQgJiBDQU5fRUZGX01BU0spIHwgQVQ5MV9NSURfTUlERTsKLQllbHNlCi0JCXJlZ19taWQgPSAoY2YtPmNhbl9pZCAmIENBTl9TRkZfTUFTSykgPDwgMTg7Ci0KKwlyZWdfbWlkID0gYXQ5MV9jYW5faWRfdG9fcmVnX21pZChjZi0+Y2FuX2lkKTsKIAlyZWdfbWNyID0gKChjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSA/IEFUOTFfTUNSX01SVFIgOiAwKSB8CiAJCShjZi0+Y2FuX2RsYyA8PCAxNikgfCBBVDkxX01DUl9NVENSOwogCkBAIC01MzksMjcgKzU2MSwzMSBAQAogICoKICAqIFRoZW9yeSBvZiBPcGVyYXRpb246CiAgKgotICogMTIgb2YgdGhlIDE2IG1haWxib3hlcyBvbiB0aGUgY2hpcCBhcmUgcmVzZXJ2ZWQgZm9yIFJYLiB3ZSBzcGxpdAotICogdGhlbSBpbnRvIDIgZ3JvdXBzLiBUaGUgbG93ZXIgZ3JvdXAgaG9sZHMgOCBhbmQgdXBwZXIgNCBtYWlsYm94ZXMuCisgKiAxMSBvZiB0aGUgMTYgbWFpbGJveGVzIG9uIHRoZSBjaGlwIGFyZSByZXNlcnZlZCBmb3IgUlguIHdlIHNwbGl0CisgKiB0aGVtIGludG8gMiBncm91cHMuIFRoZSBsb3dlciBncm91cCBob2xkcyA3IGFuZCB1cHBlciA0IG1haWxib3hlcy4KICAqCiAgKiBMaWtlIGl0IG9yIG5vdCwgYnV0IHRoZSBjaGlwIGFsd2F5cyBzYXZlcyBhIHJlY2VpdmVkIENBTiBtZXNzYWdlCiAgKiBpbnRvIHRoZSBmaXJzdCBmcmVlIG1haWxib3ggaXQgZmluZHMgKHN0YXJ0aW5nIHdpdGggdGhlCiAgKiBsb3dlc3QpLiBUaGlzIG1ha2VzIGl0IHZlcnkgZGlmZmljdWx0IHRvIHJlYWQgdGhlIG1lc3NhZ2VzIGluIHRoZQogICogcmlnaHQgb3JkZXIgZnJvbSB0aGUgY2hpcC4gVGhpcyBpcyBob3cgd2Ugd29yayBhcm91bmQgdGhhdCBwcm9ibGVtOgogICoKLSAqIFRoZSBmaXJzdCBtZXNzYWdlIGdvZXMgaW50byBtYiBuci4gMCBhbmQgaXNzdWVzIGFuIGludGVycnVwdC4gQWxsCisgKiBUaGUgZmlyc3QgbWVzc2FnZSBnb2VzIGludG8gbWIgbnIuIDEgYW5kIGlzc3VlcyBhbiBpbnRlcnJ1cHQuIEFsbAogICogcnggaW50cyBhcmUgZGlzYWJsZWQgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyIGFuZCBhIG5hcGkgcG9sbCBpcwogICogc2NoZWR1bGVkLiBXZSByZWFkIHRoZSBtYWlsYm94LCBidXQgZG8gX25vdF8gcmVlbmFibGUgdGhlIG1iICh0bwogICogcmVjZWl2ZSBhbm90aGVyIG1lc3NhZ2UpLgogICoKICAqICAgIGxvd2VyIG1ieHMgICAgICB1cHBlcgotICogICBfX19fX19eX19fX19fICAgIF9fXl9fCi0gKiAgLyAgICAgICAgICAgICBcICAvICAgICBcCisgKiAgICAgX19fX15fX19fX18gICAgX19eX18KKyAqICAgIC8gICAgICAgICAgIFwgIC8gICAgIFwKICAqICstKy0rLSstKy0rLSstKy0rKy0rLSstKy0rCi0gKiB8eHx4fHh8eHx4fHh8eHx4fHwgfCB8IHwgfAorICogfCB8eHx4fHh8eHx4fHh8eHx8IHwgfCB8IHwKICAqICstKy0rLSstKy0rLSstKy0rKy0rLSstKy0rCiAgKiAgMCAwIDAgMCAwIDAgIDAgMCAwIDAgMSAxICBcIG1haWwKICAqICAwIDEgMiAzIDQgNSAgNiA3IDggOSAwIDEgIC8gYm94CisgKiAgXgorICogIHwKKyAqICAgXAorICogICAgIHVudXNlZCwgZHVlIHRvIGNoaXAgYnVnCiAgKgogICogVGhlIHZhcmlhYmxlIHByaXYtPnJ4X25leHQgcG9pbnRzIHRvIHRoZSBuZXh0IG1haWxib3ggdG8gcmVhZCBhCiAgKiBtZXNzYWdlIGZyb20uIEFzIGxvbmcgd2UncmUgaW4gdGhlIGxvd2VyIG1haWxib3hlcyB3ZSBqdXN0IHJlYWQgdGhlCkBAIC01OTAsMTAgKzYxNiwxMCBAQAogCQkJIm9yZGVyIG9mIGluY29taW5nIGZyYW1lcyBjYW5ub3QgYmUgZ3VhcmFudGVlZFxuIik7CiAKICBhZ2FpbjoKLQlmb3IgKG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX05VTSwgcHJpdi0+cnhfbmV4dCk7Ci0JICAgICBtYiA8IEFUOTFfTUJfUlhfTlVNICYmIHF1b3RhID4gMDsKKwlmb3IgKG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX0xBU1QgKyAxLCBwcml2LT5yeF9uZXh0KTsKKwkgICAgIG1iIDwgQVQ5MV9NQl9SWF9MQVNUICsgMSAmJiBxdW90YSA+IDA7CiAJICAgICByZWdfc3IgPSBhdDkxX3JlYWQocHJpdiwgQVQ5MV9TUiksCi0JICAgICBtYiA9IGZpbmRfbmV4dF9iaXQoYWRkciwgQVQ5MV9NQl9SWF9OVU0sICsrcHJpdi0+cnhfbmV4dCkpIHsKKwkgICAgIG1iID0gZmluZF9uZXh0X2JpdChhZGRyLCBBVDkxX01CX1JYX0xBU1QgKyAxLCArK3ByaXYtPnJ4X25leHQpKSB7CiAJCWF0OTFfcmVhZF9tc2coZGV2LCBtYik7CiAKIAkJLyogcmVhY3RpdmF0ZSBtYWlsYm94ZXMgKi8KQEAgLTYxMCw4ICs2MzYsOCBAQAogCiAJLyogdXBwZXIgZ3JvdXAgY29tcGxldGVkLCBsb29rIGFnYWluIGluIGxvd2VyICovCiAJaWYgKHByaXYtPnJ4X25leHQgPiBBVDkxX01CX1JYX0xPV19MQVNUICYmCi0JICAgIHF1b3RhID4gMCAmJiBtYiA+PSBBVDkxX01CX1JYX05VTSkgewotCQlwcml2LT5yeF9uZXh0ID0gMDsKKwkgICAgcXVvdGEgPiAwICYmIG1iID4gQVQ5MV9NQl9SWF9MQVNUKSB7CisJCXByaXYtPnJ4X25leHQgPSBBVDkxX01CX1JYX0ZJUlNUOwogCQlnb3RvIGFnYWluOwogCX0KIApAQCAtMTAzNyw2ICsxMDYzLDY0IEBACiAJLm5kb19zdGFydF94bWl0CT0gYXQ5MV9zdGFydF94bWl0LAogfTsKIAorc3RhdGljIHNzaXplX3QgYXQ5MV9zeXNmc19zaG93X21iMF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGF0OTFfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KHRvX25ldF9kZXYoZGV2KSk7CisKKwlpZiAocHJpdi0+bWIwX2lkICYgQ0FOX0VGRl9GTEFHKQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwOHhcbiIsIHByaXYtPm1iMF9pZCk7CisJZWxzZQorCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUwM3hcbiIsIHByaXYtPm1iMF9pZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF0OTFfc3lzZnNfc2V0X21iMF9pZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3QgYXQ5MV9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdW5zaWduZWQgbG9uZyBjYW5faWQ7CisJc3NpemVfdCByZXQ7CisJaW50IGVycjsKKworCXJ0bmxfbG9jaygpOworCisJaWYgKG5kZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmY2FuX2lkKTsKKwlpZiAoZXJyKSB7CisJCXJldCA9IGVycjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJY2FuX2lkICY9IENBTl9FRkZfTUFTSyB8IENBTl9FRkZfRkxBRzsKKwllbHNlCisJCWNhbl9pZCAmPSBDQU5fU0ZGX01BU0s7CisKKwlwcml2LT5tYjBfaWQgPSBjYW5faWQ7CisJcmV0ID0gY291bnQ7CisKKyBvdXQ6CisJcnRubF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIobWIwX2lkLCBTX0lXVVNSIHwgU19JUlVHTywKKwlhdDkxX3N5c2ZzX3Nob3dfbWIwX2lkLCBhdDkxX3N5c2ZzX3NldF9tYjBfaWQpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXQ5MV9zeXNmc19hdHRyc1tdID0geworCSZkZXZfYXR0cl9tYjBfaWQuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYXQ5MV9zeXNmc19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGF0OTFfc3lzZnNfYXR0cnMsCit9OworCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBhdDkxX2Nhbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0xMDgyLDYgKzExNjYsNyBAQAogCWRldi0+bmV0ZGV2X29wcwk9ICZhdDkxX25ldGRldl9vcHM7CiAJZGV2LT5pcnEgPSBpcnE7CiAJZGV2LT5mbGFncyB8PSBJRkZfRUNITzsKKwlkZXYtPnN5c2ZzX2dyb3Vwc1swXSA9ICZhdDkxX3N5c2ZzX2F0dHJfZ3JvdXA7CiAKIAlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcml2LT5jYW4uY2xvY2suZnJlcSA9IGNsa19nZXRfcmF0ZShjbGspOwpAQCAtMTA5Myw2ICsxMTc4LDcgQEAKIAlwcml2LT5kZXYgPSBkZXY7CiAJcHJpdi0+Y2xrID0gY2xrOwogCXByaXYtPnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcHJpdi0+bWIwX2lkID0gMHg3ZmY7CiAKIAluZXRpZl9uYXBpX2FkZChkZXYsICZwcml2LT5uYXBpLCBhdDkxX3BvbGwsIEFUOTFfTkFQSV9XRUlHSFQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jIGIvZHJpdmVycy9uZXQvY2FuL2phbnotaWNhbjMuYwppbmRleCBiOWE2ZDdhLi4zNjZmNWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vamFuei1pY2FuMy5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9qYW56LWljYW4zLmMKQEAgLTE2MTgsNyArMTYxOCw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIodGVybWluYXRpb24sIFNfSVdVR08gfCBTX0lSVUdPLCBpY2FuM19zeXNmc19zaG93X3Rlcm0sCitzdGF0aWMgREVWSUNFX0FUVFIodGVybWluYXRpb24sIFNfSVdVU1IgfCBTX0lSVUdPLCBpY2FuM19zeXNmc19zaG93X3Rlcm0sCiAJCQkJCQkgICBpY2FuM19zeXNmc19zZXRfdGVybSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppY2FuM19zeXNmc19hdHRyc1tdID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKaW5kZXggN2FiNTM0YS4uNzUxM2M0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYworKysgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCkBAIC05NDAsNyArOTQwLDcgQEAKIAkJZ290byBvcGVuX3VubG9jazsKIAl9CiAKLQlwcml2LT53cSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWNwMjUxeF93cSIpOworCXByaXYtPndxID0gY3JlYXRlX2ZyZWV6YWJsZV93b3JrcXVldWUoIm1jcDI1MXhfd3EiKTsKIAlJTklUX1dPUksoJnByaXYtPnR4X3dvcmssIG1jcDI1MXhfdHhfd29ya19oYW5kbGVyKTsKIAlJTklUX1dPUksoJnByaXYtPnJlc3RhcnRfd29yaywgbWNwMjUxeF9yZXN0YXJ0X3dvcmtfaGFuZGxlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKaW5kZXggMjdkMWQzOS4uZDM4NzA2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgQ0FOX01TQ0FOCi0JZGVwZW5kcyBvbiBDQU5fREVWICYmIChQUEMgfHwgTTY4SyB8fCBNNjhLTk9NTVUpCisJZGVwZW5kcyBvbiBDQU5fREVWICYmIChQUEMgfHwgTTY4SykKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgRnJlZXNjYWxlIE1TQ0FOIGJhc2VkIGNoaXBzIgogCS0tLWhlbHAtLS0KIAkgIFRoZSBNb3Rvcm9sYSBTY2FsYWJsZSBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoTVNDQU4pIGRlZmluaXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vcGNoX2Nhbi5jCmluZGV4IGM0MmU5NzIuLmU1NDcxMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9wY2hfY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3BjaF9jYW4uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY2FuX2JpdHRpbWluZ19jb25zdCBwY2hfY2FuX2JpdHRpbWluZ19jb25zdCA9IHsKIAkubmFtZSA9IEtCVUlMRF9NT0ROQU1FLAotCS50c2VnMV9taW4gPSAxLAorCS50c2VnMV9taW4gPSAyLAogCS50c2VnMV9tYXggPSAxNiwKIAkudHNlZzJfbWluID0gMSwKIAkudHNlZzJfbWF4ID0gOCwKQEAgLTk1OSwxMyArOTU5LDEzIEBACiAJc3RydWN0IHBjaF9jYW5fcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJdW5yZWdpc3Rlcl9jYW5kZXYocHJpdi0+bmRldik7Ci0JcGNpX2lvdW5tYXAocGRldiwgcHJpdi0+cmVncyk7CiAJaWYgKHByaXYtPnVzZV9tc2kpCiAJCXBjaV9kaXNhYmxlX21zaShwcml2LT5kZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwY2hfY2FuX3Jlc2V0KHByaXYpOworCXBjaV9pb3VubWFwKHBkZXYsIHByaXYtPnJlZ3MpOwogCWZyZWVfY2FuZGV2KHByaXYtPm5kZXYpOwogfQogCkBAIC0xMjM4LDYgKzEyMzgsNyBAQAogCQlwcml2LT51c2VfbXNpID0gMDsKIAl9IGVsc2UgewogCQluZXRkZXZfZXJyKG5kZXYsICJQQ0ggQ0FOIG9wZW5lZCB3aXRoIE1TSVxuIik7CisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCQlwcml2LT51c2VfbXNpID0gMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkZTQ2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9LY29uZmlnCkBAIC0wLDAgKzEsMzAgQEAKK2NvbmZpZyBDQU5fU09GVElORworCXRyaXN0YXRlICJTb2Z0aW5nIEdtYmggQ0FOIGdlbmVyaWMgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIENBTl9ERVYgJiYgSEFTX0lPTUVNCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgQ0FOIGNhcmRzIGZyb20gU29mdGluZyBHbWJoICYgc29tZSBjYXJkcworCSAgZnJvbSBWZWN0b3IgR21iaC4KKwkgIFNvZnRpbmcgR21iaCBDQU4gY2FyZHMgY29tZSB3aXRoIDEgb3IgMiBwaHlzaWNhbCBidXNzZXMuCisJICBUaG9zZSBjYXJkcyB0eXBpY2FsbHkgdXNlIER1YWwgUG9ydCBSQU0gdG8gY29tbXVuaWNhdGUKKwkgIHdpdGggdGhlIGhvc3QgQ1BVLiBUaGUgaW50ZXJmYWNlIGlzIHRoZW4gaWRlbnRpY2FsIGZvciBQQ0kKKwkgIGFuZCBQQ01DSUEgY2FyZHMuIFRoaXMgZHJpdmVyIG9wZXJhdGVzIG9uIGEgcGxhdGZvcm0gZGV2aWNlLAorCSAgd2hpY2ggaGFzIGJlZW4gY3JlYXRlZCBieSBzb2Z0aW5nX2NzIG9yIHNvZnRpbmdfcGNpIGRyaXZlci4KKwkgIFdhcm5pbmc6CisJICBUaGUgQVBJIG9mIHRoZSBjYXJkIGRvZXMgbm90IGFsbG93IGZpbmUgY29udHJvbCBwZXIgYnVzLCBidXQKKwkgIGNvbnRyb2xzIHRoZSAyIGJ1c3NlcyBvbiB0aGUgY2FyZCB0b2dldGhlci4KKwkgIEFzIHN1Y2gsIHNvbWUgYWN0aW9ucyAoc3RhcnQvc3RvcC9idXNvZmYgcmVjb3ZlcnkpIG9uIDEgYnVzCisJICBtdXN0IGJyaW5nIGRvd24gdGhlIG90aGVyIGJ1cyB0b28gdGVtcG9yYXJpbHkuCisKK2NvbmZpZyBDQU5fU09GVElOR19DUworCXRyaXN0YXRlICJTb2Z0aW5nIEdtYmggQ0FOIHBjbWNpYSBjYXJkcyIKKwlkZXBlbmRzIG9uIFBDTUNJQQorCWRlcGVuZHMgb24gQ0FOX1NPRlRJTkcKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBQQ01DSUEgY2FyZHMgZnJvbSBTb2Z0aW5nIEdtYmggJiBzb21lIGNhcmRzCisJICBmcm9tIFZlY3RvciBHbWJoLgorCSAgWW91IG5lZWQgZmlybXdhcmUgZm9yIHRoZXNlLCB3aGljaCB5b3UgY2FuIGdldCBhdAorCSAgaHR0cDovL2RldmVsb3Blci5iZXJsaW9zLmRlL3Byb2plY3RzL3NvY2tldGNhbi8KKwkgIFRoaXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGlzIHdyaXR0ZW4gYWdhaW5zdAorCSAgZmlybXdhcmUgdmVyc2lvbiA0LjYgKHNvZnRpbmctZnctNC42LWJpbmFyaWVzLnRhci5neikKKwkgIEluIG9yZGVyIHRvIHVzZSB0aGUgY2FyZCBhcyBDQU4gZGV2aWNlLCB5b3UgbmVlZCB0aGUgU29mdGluZyBnZW5lcmljCisJICBzdXBwb3J0IHRvby4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlNTAxNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorCitzb2Z0aW5nLXkgOj0gc29mdGluZ19tYWluLm8gc29mdGluZ19mdy5vCitvYmotJChDT05GSUdfQ0FOX1NPRlRJTkcpICs9IHNvZnRpbmcubworb2JqLSQoQ09ORklHX0NBTl9TT0ZUSU5HX0NTKSArPSBzb2Z0aW5nX2NzLm8KKworY2NmbGFncy0kKENPTkZJR19DQU5fREVCVUdfREVWSUNFUykgOj0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzlmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nLmgKQEAgLTAsMCArMSwxNjcgQEAKKy8qCisgKiBzb2Z0aW5nIGNvbW1vbiBpbnRlcmZhY2VzCisgKgorICogYnkgS3VydCBWYW4gRGlqY2ssIDIwMDgtMjAxMAorICovCisKKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9jYW4vZGV2Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nX3BsYXRmb3JtLmgiCisKK3N0cnVjdCBzb2Z0aW5nOworCitzdHJ1Y3Qgc29mdGluZ19wcml2IHsKKwlzdHJ1Y3QgY2FuX3ByaXYgY2FuOyAvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIhICovCisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgeworCQlpbnQgcGVuZGluZzsKKwkJLyogdmFyaWFibGVzIHdpY2ggaG9sZCB0aGUgY2lyY3VsYXIgYnVmZmVyICovCisJCWludCBlY2hvX3B1dDsKKwkJaW50IGVjaG9fZ2V0OworCX0gdHg7CisJc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QgYnRyX2NvbnN0OworCWludCBpbmRleDsKKwl1aW50OF90IG91dHB1dDsKKwl1aW50MTZfdCBjaGlwOworfTsKKyNkZWZpbmUgbmV0ZGV2MnNvZnRpbmcobmV0ZGV2KQkoKHN0cnVjdCBzb2Z0aW5nX3ByaXYgKiluZXRkZXZfcHJpdihuZXRkZXYpKQorCitzdHJ1Y3Qgc29mdGluZyB7CisJY29uc3Qgc3RydWN0IHNvZnRpbmdfcGxhdGZvcm1fZGF0YSAqcGRhdDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRbMl07CisJc3BpbmxvY2tfdCBzcGluOyAvKiBwcm90ZWN0IHRoaXMgc3RydWN0dXJlICYgRFBSQU0gYWNjZXNzICovCisJa3RpbWVfdCB0c19yZWY7CisJa3RpbWVfdCB0c19vdmVyZmxvdzsgLyogdGltZXN0YW1wIG92ZXJmbG93IHZhbHVlLCBpbiBrdGltZSAqLworCisJc3RydWN0IHsKKwkJLyogaW5kaWNhdGlvbiBvZiBmaXJtd2FyZSBzdGF0dXMgKi8KKwkJaW50IHVwOworCQkvKiBwcm90ZWN0aW9uIG9mIHRoZSAndXAnIHZhcmlhYmxlICovCisJCXN0cnVjdCBtdXRleCBsb2NrOworCX0gZnc7CisJc3RydWN0IHsKKwkJaW50IG5yOworCQlpbnQgcmVxdWVzdGVkOworCQlpbnQgc3ZjX2NvdW50OworCQl1bnNpZ25lZCBpbnQgZHByYW1fcG9zaXRpb247CisJfSBpcnE7CisJc3RydWN0IHsKKwkJaW50IHBlbmRpbmc7CisJCWludCBsYXN0X2J1czsKKwkJLyoKKwkJICoga2VlcCB0aGUgYnVzIHRoYXQgbGFzdCB0eCdkIGEgbWVzc2FnZSwKKwkJICogaW4gb3JkZXIgdG8gbGV0IGV2ZXJ5IG5ldGRldiBxdWV1ZSByZXN1bWUKKwkJICovCisJfSB0eDsKKwlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtOworCXVuc2lnbmVkIGxvbmcgZHByYW1fcGh5czsKKwl1bnNpZ25lZCBsb25nIGRwcmFtX3NpemU7CisJc3RydWN0IHsKKwkJdWludDE2X3QgZndfdmVyc2lvbiwgaHdfdmVyc2lvbiwgbGljZW5zZSwgc2VyaWFsOworCQl1aW50MTZfdCBjaGlwWzJdOworCQl1bnNpZ25lZCBpbnQgZnJlcTsgLyogcmVtb3RlIGNwdSdzIG9wZXJhdGluZyBmcmVxdWVuY3kgKi8KKwl9IGlkOworfTsKKworZXh0ZXJuIGludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCitleHRlcm4ga3RpbWVfdCBzb2Z0aW5nX3JhdzJrdGltZShzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgdTMyIHJhdyk7CisKK2V4dGVybiBpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCitleHRlcm4gaW50IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwKKwkJY29uc3QgY2hhciAqbXNnKTsKKworLyogTG9hZCBmaXJtd2FyZSBhZnRlciByZXNldCAqLworZXh0ZXJuIGludCBzb2Z0aW5nX2xvYWRfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQsCisJCQlfX2lvbWVtIHVpbnQ4X3QgKnZpcnQsIHVuc2lnbmVkIGludCBzaXplLCBpbnQgb2Zmc2V0KTsKKworLyogTG9hZCBmaW5hbCBhcHBsaWNhdGlvbiBmaXJtd2FyZSBhZnRlciBib290bG9hZGVyICovCitleHRlcm4gaW50IHNvZnRpbmdfbG9hZF9hcHBfZncoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IHNvZnRpbmcgKmNhcmQpOworCisvKgorICogZW5hYmxlIG9yIGRpc2FibGUgaXJxCisgKiBvbmx5IGNhbGxlZCB3aXRoIGZ3LmxvY2sgbG9ja2VkCisgKi8KK2V4dGVybiBpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKTsKKworLyogc3RhcnQvc3RvcCAxIGJ1cyBvbiBjYXJkICovCitleHRlcm4gaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB1cCk7CisKKy8qIG5ldGlmX3J4KCkgKi8KK2V4dGVybiBpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLCBrdGltZV90IGt0aW1lKTsKKworLyogU09GVElORyBEUFJBTSBtYXBwaW5ncyAqLworI2RlZmluZSBEUFJBTV9SWAkJMHgwMDAwCisJI2RlZmluZSBEUFJBTV9SWF9TSVpFCTMyCisJI2RlZmluZSBEUFJBTV9SWF9DTlQJMTYKKyNkZWZpbmUgRFBSQU1fUlhfUkQJCTB4MDIwMQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX1dSCQkweDAyMDUJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9SWF9MT1NUCQkweDAyMDcJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX0ZDVF9QQVJBTQkJMHgwMzAwCS8qIGludDE2X3QgWzIwXSAqLworI2RlZmluZSBEUFJBTV9GQ1RfUkVTVUxUCTB4MDMyOAkvKiBpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0ZDVF9IT1NUCQkweDAzMmIJLyogdWludDE2X3QgKi8KKworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFCTB4MDMzMQkvKiB1aW50MTZfdCAqLworI2RlZmluZSBEUFJBTV9JTkZPX0JVU1NUQVRFMgkweDAzMzUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURQkweDAzMzkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fSU5GT19FUlJTVEFURTIJMHgwMzNkCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUCQkweDAzNDEJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fQ0xSX1JFQ1ZfRklGTwkweDAzNDUJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVTRVRfVElNRQkweDAzNGQJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fVElNRQkJMHgwMzUwCS8qIHVpbnQ2NF90ICovCisjZGVmaW5lIERQUkFNX1dSX1NUQVJUCQkweDAzNTgJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9XUl9FTkQJCTB4MDM1OQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1JYX0ZJRk8JMHgwMzYxCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1JFU0VUX1RYX0ZJRk8JMHgwMzY0CS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVBRF9GSUZPX0xFVkVMCTB4MDM2NQkvKiB1aW50OF90ICovCisjZGVmaW5lIERQUkFNX1JYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX1RYX0ZJRk9fTEVWRUwJMHgwMzY2CS8qIHVpbnQxNl90ICovCisKKyNkZWZpbmUgRFBSQU1fVFgJCTB4MDQwMAkvKiB1aW50MTZfdCAqLworCSNkZWZpbmUgRFBSQU1fVFhfU0laRQkxNgorCSNkZWZpbmUgRFBSQU1fVFhfQ05UCTMyCisjZGVmaW5lIERQUkFNX1RYX1JECQkweDA2MDEJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9UWF9XUgkJMHgwNjA1CS8qIHVpbnQ4X3QgKi8KKworI2RlZmluZSBEUFJBTV9DT01NQU5ECQkweDA3ZTAJLyogdWludDE2X3QgKi8KKyNkZWZpbmUgRFBSQU1fUkVDRUlQVAkJMHgwN2YwCS8qIHVpbnQxNl90ICovCisjZGVmaW5lIERQUkFNX0lSUV9UT0hPU1QJMHgwN2ZlCS8qIHVpbnQ4X3QgKi8KKyNkZWZpbmUgRFBSQU1fSVJRX1RPQ0FSRAkweDA3ZmYJLyogdWludDhfdCAqLworCisjZGVmaW5lIERQUkFNX1YyX1JFU0VUCQkweDBlMDAJLyogdWludDhfdCAqLworI2RlZmluZSBEUFJBTV9WMl9JUlFfVE9IT1NUCTB4MGUwMgkvKiB1aW50OF90ICovCisKKyNkZWZpbmUgVFhNQVgJKERQUkFNX1RYX0NOVCAtIDEpCisKKy8qIERQUkFNIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBSRVNfTk9ORQkwCisjZGVmaW5lIFJFU19PSwkJMQorI2RlZmluZSBSRVNfTk9LCQkyCisjZGVmaW5lIFJFU19VTktOT1dOCTMKKy8qIERQUkFNIGZsYWdzICovCisjZGVmaW5lIENNRF9UWAkJMHgwMQorI2RlZmluZSBDTURfQUNLCQkweDAyCisjZGVmaW5lIENNRF9YVEQJCTB4MDQKKyNkZWZpbmUgQ01EX1JUUgkJMHgwOAorI2RlZmluZSBDTURfRVJSCQkweDEwCisjZGVmaW5lIENNRF9CVVMyCTB4ODAKKworLyogcmV0dXJuZWQgZmlmbyBlbnRyeSBidXMgc3RhdGUgbWFza3MgKi8KKyNkZWZpbmUgU0ZfTUFTS19CVVNPRkYJCTB4ODAKKyNkZWZpbmUgU0ZfTUFTS19FUEFTU0lWRQkweDYwCisKKy8qIGJ1cyBzdGF0ZXMgKi8KKyNkZWZpbmUgU1RBVEVfQlVTT0ZGCTIKKyNkZWZpbmUgU1RBVEVfRVBBU1NJVkUJMQorI2RlZmluZSBTVEFURV9FQUNUSVZFCTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTFiYjRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19jcy5jCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAKKyAqCisgKiAtIEt1cnQgVmFuIERpamNrLCBFSUEgRWxlY3Ryb25pY3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KKyNpbmNsdWRlIDxwY21jaWEvZHMuaD4KKworI2luY2x1ZGUgInNvZnRpbmdfcGxhdGZvcm0uaCIKKworc3RhdGljIGludCBzb2Z0aW5nY3NfaW5kZXg7CitzdGF0aWMgc3BpbmxvY2tfdCBzb2Z0aW5nY3NfaW5kZXhfbG9jazsKKworc3RhdGljIGludCBzb2Z0aW5nY3NfcmVzZXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpOworc3RhdGljIGludCBzb2Z0aW5nY3NfZW5hYmxlX2lycShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdik7CisKKy8qCisgKiBwbGF0Zm9ybV9kYXRhIGRlc2NyaXB0aW9ucworICovCisjZGVmaW5lIE1IWiAoMTAwMCoxMDAwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgc29mdGluZ2NzX3BsYXRmb3JtX2RhdGFbXSA9IHsKK3sKKwkubmFtZSA9ICJDQU5jYXJkIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwMSwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtTkVDIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwMiwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMTYgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNhcmQuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IHNvZnRpbmdjc19lbmFibGVfaXJxLAorfSwgeworCS5uYW1lID0gIkNBTmNhcmQtU0pBIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwNCwKKwkuZ2VuZXJhdGlvbiA9IDEsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjAgKiBNSFosIC5tYXhfYnJwID0gMzIsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MDgwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkLmJpbiIsfSwKKwkubG9hZCA9IHsweDAxMjAsIDB4MDBmNjAwLCBmd19kaXIgImxkY2FyZC5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbnNqYS5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiQ0FOY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDAwNSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZCIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgwODEsCisJLmdlbmVyYXRpb24gPSAxLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDE2ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDA4MDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZC5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQuYmluIix9LAorCS5hcHAgPSB7MHgwMDEwLCAweDBkMDAwMCwgZndfZGlyICJjYW5jYXJkLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZC1TSkEiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MDg0LAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAyMCAqIE1IWiwgLm1heF9icnAgPSAzMiwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2Fuc2phLmJpbiIsfSwKKwkucmVzZXQgPSBzb2Z0aW5nY3NfcmVzZXQsCisJLmVuYWJsZV9pcnEgPSBzb2Z0aW5nY3NfZW5hYmxlX2lycSwKK30sIHsKKwkubmFtZSA9ICJWZWN0b3ItQ0FOY2FyZC0yIiwKKwkubWFuZiA9IDB4MDE2OCwgLnByb2QgPSAweDA4NSwKKwkuZ2VuZXJhdGlvbiA9IDIsCisJLm5idXMgPSAyLAorCS5mcmVxID0gMjQgKiBNSFosIC5tYXhfYnJwID0gNjQsIC5tYXhfc2p3ID0gNCwKKwkuZHByYW1fc2l6ZSA9IDB4MTAwMCwKKwkuYm9vdCA9IHsweDAwMDAsIDB4MDAwMDAwLCBmd19kaXIgImJjYXJkMi5iaW4iLH0sCisJLmxvYWQgPSB7MHgwMTIwLCAweDAwZjYwMCwgZndfZGlyICJsZGNhcmQyLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY3JkMi5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gTlVMTCwKK30sIHsKKwkubmFtZSA9ICJFRElDY2FyZC1ORUMiLAorCS5tYW5mID0gMHgwMTY4LCAucHJvZCA9IDB4MTAyLAorCS5nZW5lcmF0aW9uID0gMSwKKwkubmJ1cyA9IDIsCisJLmZyZXEgPSAxNiAqIE1IWiwgLm1heF9icnAgPSA2NCwgLm1heF9zancgPSA0LAorCS5kcHJhbV9zaXplID0gMHgwODAwLAorCS5ib290ID0gezB4MDAwMCwgMHgwMDAwMDAsIGZ3X2RpciAiYmNhcmQuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkLmJpbiIsfSwKKwkuYXBwID0gezB4MDAxMCwgMHgwZDAwMDAsIGZ3X2RpciAiY2FuY2FyZC5iaW4iLH0sCisJLnJlc2V0ID0gc29mdGluZ2NzX3Jlc2V0LAorCS5lbmFibGVfaXJxID0gc29mdGluZ2NzX2VuYWJsZV9pcnEsCit9LCB7CisJLm5hbWUgPSAiRURJQ2NhcmQtMiIsCisJLm1hbmYgPSAweDAxNjgsIC5wcm9kID0gMHgxMDUsCisJLmdlbmVyYXRpb24gPSAyLAorCS5uYnVzID0gMiwKKwkuZnJlcSA9IDI0ICogTUhaLCAubWF4X2JycCA9IDY0LCAubWF4X3NqdyA9IDQsCisJLmRwcmFtX3NpemUgPSAweDEwMDAsCisJLmJvb3QgPSB7MHgwMDAwLCAweDAwMDAwMCwgZndfZGlyICJiY2FyZDIuYmluIix9LAorCS5sb2FkID0gezB4MDEyMCwgMHgwMGY2MDAsIGZ3X2RpciAibGRjYXJkMi5iaW4iLH0sCisJLmFwcCA9IHsweDAwMTAsIDB4MGQwMDAwLCBmd19kaXIgImNhbmNyZDIuYmluIix9LAorCS5yZXNldCA9IHNvZnRpbmdjc19yZXNldCwKKwkuZW5hYmxlX2lycSA9IE5VTEwsCit9LCB7CisJMCwgMCwKK30sCit9OworCitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJiY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImxkY2FyZC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImNhbmNhcmQuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5zamEuYmluIik7CisKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImJjYXJkMi5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRShmd19kaXIgImxkY2FyZDIuYmluIik7CitNT0RVTEVfRklSTVdBUkUoZndfZGlyICJjYW5jcmQyLmJpbiIpOworCitzdGF0aWMgX19kZXZpbml0IGNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEKKypzb2Z0aW5nY3NfZmluZF9wbGF0Zm9ybV9kYXRhKHVuc2lnbmVkIGludCBtYW5mLCB1bnNpZ25lZCBpbnQgcHJvZCkKK3sKKwljb25zdCBzdHJ1Y3Qgc29mdGluZ19wbGF0Zm9ybV9kYXRhICpscDsKKworCWZvciAobHAgPSBzb2Z0aW5nY3NfcGxhdGZvcm1fZGF0YTsgbHAtPm1hbmY7ICsrbHApIHsKKwkJaWYgKChscC0+bWFuZiA9PSBtYW5mKSAmJiAobHAtPnByb2QgPT0gcHJvZCkpCisJCQlyZXR1cm4gbHA7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogcGxhdGZvcm1kYXRhIGNhbGxiYWNrcworICovCitzdGF0aWMgaW50IHNvZnRpbmdjc19yZXNldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdikKK3sKKwlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhID0gdG9fcGNtY2lhX2RldihwZGV2LT5kZXYucGFyZW50KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgInBjbWNpYSBjb25maWcgWzJdICUwMnhcbiIsIHYgPyAwIDogMHgyMCk7CisJcmV0dXJuIHBjbWNpYV93cml0ZV9jb25maWdfYnl0ZShwY21jaWEsIDIsIHYgPyAwIDogMHgyMCk7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ2NzX2VuYWJsZV9pcnEoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHYpCit7CisJc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSA9IHRvX3BjbWNpYV9kZXYocGRldi0+ZGV2LnBhcmVudCk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJwY21jaWEgY29uZmlnIFswXSAlMDJ4XG4iLCB2ID8gMHg2MCA6IDApOworCXJldHVybiBwY21jaWFfd3JpdGVfY29uZmlnX2J5dGUocGNtY2lhLCAwLCB2ID8gMHg2MCA6IDApOworfQorCisvKgorICogcGNtY2lhIGNoZWNrCisgKi8KK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdjc19wcm9iZV9jb25maWcoc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBjbWNpYSwKKwkJdm9pZCAqcHJpdl9kYXRhKQoreworCXN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQgPSBwcml2X2RhdGE7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCWludCBtZW1zcGVlZCA9IDA7CisKKwlXQVJOX09OKCFwZGF0KTsKKwlwcmVzID0gcGNtY2lhLT5yZXNvdXJjZVtQQ01DSUFfSU9NRU1fMF07CisJaWYgKHJlc291cmNlX3NpemUocHJlcykgPCAweDEwMDApCisJCXJldHVybiAtRVJBTkdFOworCisJcHJlcy0+ZmxhZ3MgfD0gV0lOX01FTU9SWV9UWVBFX0NNIHwgV0lOX0VOQUJMRTsKKwlpZiAocGRhdC0+Z2VuZXJhdGlvbiA8IDIpIHsKKwkJcHJlcy0+ZmxhZ3MgfD0gV0lOX1VTRV9XQUlUIHwgV0lOX0RBVEFfV0lEVEhfODsKKwkJbWVtc3BlZWQgPSAzOworCX0gZWxzZSB7CisJCXByZXMtPmZsYWdzIHw9IFdJTl9EQVRBX1dJRFRIXzE2OworCX0KKwlyZXR1cm4gcGNtY2lhX3JlcXVlc3Rfd2luZG93KHBjbWNpYSwgcHJlcywgbWVtc3BlZWQpOworfQorCitzdGF0aWMgX19kZXZleGl0IHZvaWQgc29mdGluZ2NzX3JlbW92ZShzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcGNtY2lhKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSBwY21jaWEtPnByaXY7CisKKwkvKiBmcmVlIGJpdHMgKi8KKwlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihwZGV2KTsKKwkvKiByZWxlYXNlIHBjbWNpYSBzdHVmZiAqLworCXBjbWNpYV9kaXNhYmxlX2RldmljZShwY21jaWEpOworfQorCisvKgorICogcGxhdGZvcm1fZGV2aWNlIHdyYXBwZXIKKyAqIHBkZXYtPnJlc291cmNlIGhhcyAyIGVudHJpZXM6IGlvICYgaXJxCisgKi8KK3N0YXRpYyB2b2lkIHNvZnRpbmdjc19wZGV2X3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlrZnJlZShwZGV2KTsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ2NzX3Byb2JlKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwY21jaWEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQ7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCXN0cnVjdCBkZXYgeworCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBkZXY7CisJCXN0cnVjdCByZXNvdXJjZSByZXNbMl07CisJfSAqZGV2OworCisJLyogZmluZCBtYXRjaGluZyBwbGF0Zm9ybV9kYXRhICovCisJcGRhdCA9IHNvZnRpbmdjc19maW5kX3BsYXRmb3JtX2RhdGEocGNtY2lhLT5tYW5mX2lkLCBwY21jaWEtPmNhcmRfaWQpOworCWlmICghcGRhdCkKKwkJcmV0dXJuIC1FTk9UVFk7CisKKwkvKiBzZXR1cCBwY21jaWEgZGV2aWNlICovCisJcGNtY2lhLT5jb25maWdfZmxhZ3MgfD0gQ09ORl9FTkFCTEVfSVJRIHwgQ09ORl9BVVRPX1NFVF9JT01FTSB8CisJCUNPTkZfQVVUT19TRVRfVlBQIHwgQ09ORl9BVVRPX0NIRUNLX1ZDQzsKKwlyZXQgPSBwY21jaWFfbG9vcF9jb25maWcocGNtY2lhLCBzb2Z0aW5nY3NfcHJvYmVfY29uZmlnLCAodm9pZCAqKXBkYXQpOworCWlmIChyZXQpCisJCWdvdG8gcGNtY2lhX2ZhaWxlZDsKKworCXJldCA9IHBjbWNpYV9lbmFibGVfZGV2aWNlKHBjbWNpYSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGNtY2lhX2ZhaWxlZDsKKworCXByZXMgPSBwY21jaWEtPnJlc291cmNlW1BDTUNJQV9JT01FTV8wXTsKKwlpZiAoIXByZXMpIHsKKwkJcmV0ID0gLUVCQURGOworCQlnb3RvIHBjbWNpYV9iYWQ7CisJfQorCisJLyogY3JlYXRlIHNvZnRpbmcgcGxhdGZvcm0gZGV2aWNlICovCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gbWVtX2ZhaWxlZDsKKwl9CisJZGV2LT5wZGV2LnJlc291cmNlID0gZGV2LT5yZXM7CisJZGV2LT5wZGV2Lm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGRldi0+cmVzKTsKKwlkZXYtPnBkZXYuZGV2LnJlbGVhc2UgPSBzb2Z0aW5nY3NfcGRldl9yZWxlYXNlOworCisJcGRldiA9ICZkZXYtPnBkZXY7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAodm9pZCAqKXBkYXQ7CisJcGRldi0+ZGV2LnBhcmVudCA9ICZwY21jaWEtPmRldjsKKwlwY21jaWEtPnByaXYgPSBwZGV2OworCisJLyogcGxhdGZvcm0gZGV2aWNlIHJlc291cmNlcyAqLworCXBkZXYtPnJlc291cmNlWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPSBwcmVzLT5zdGFydDsKKwlwZGV2LT5yZXNvdXJjZVswXS5lbmQgPSBwcmVzLT5lbmQ7CisKKwlwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROworCXBkZXYtPnJlc291cmNlWzFdLnN0YXJ0ID0gcGNtY2lhLT5pcnE7CisJcGRldi0+cmVzb3VyY2VbMV0uZW5kID0gcGRldi0+cmVzb3VyY2VbMV0uc3RhcnQ7CisKKwkvKiBwbGF0Zm9ybSBkZXZpY2Ugc2V0dXAgKi8KKwlzcGluX2xvY2soJnNvZnRpbmdjc19pbmRleF9sb2NrKTsKKwlwZGV2LT5pZCA9IHNvZnRpbmdjc19pbmRleCsrOworCXNwaW5fdW5sb2NrKCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcGRldi0+bmFtZSA9ICJzb2Z0aW5nIjsKKwlkZXZfc2V0X25hbWUoJnBkZXYtPmRldiwgInNvZnRpbmdjcy4laSIsIHBkZXYtPmlkKTsKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcGxhdGZvcm1fZmFpbGVkOworCisJZGV2X2luZm8oJnBjbWNpYS0+ZGV2LCAiY3JlYXRlZCAlc1xuIiwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCXJldHVybiAwOworCitwbGF0Zm9ybV9mYWlsZWQ6CisJa2ZyZWUoZGV2KTsKK21lbV9mYWlsZWQ6CitwY21jaWFfYmFkOgorcGNtY2lhX2ZhaWxlZDoKKwlwY21jaWFfZGlzYWJsZV9kZXZpY2UocGNtY2lhKTsKKwlwY21jaWEtPnByaXYgPSBOVUxMOworCXJldHVybiByZXQgPzogLUVOT0RFVjsKK30KKworc3RhdGljIC8qY29uc3QqLyBzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCBzb2Z0aW5nY3NfaWRzW10gPSB7CisJLyogc29mdGluZyAqLworCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDAxKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDAwMiksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwMDQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDA1KSwKKwkvKiB2ZWN0b3IsIG1hbnVmYWN0dXJlcj8gKi8KKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxNjgsIDB4MDA4MSksCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAwODQpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMDg1KSwKKwkvKiBFRElDICovCisJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMTY4LCAweDAxMDIpLAorCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4MDE2OCwgMHgwMTA1KSwKKwlQQ01DSUFfREVWSUNFX05VTEwsCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgc29mdGluZ2NzX2lkcyk7CisKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RyaXZlciBzb2Z0aW5nY3NfZHJpdmVyID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubmFtZQkJPSAic29mdGluZ2NzIiwKKwkuaWRfdGFibGUJPSBzb2Z0aW5nY3NfaWRzLAorCS5wcm9iZQkJPSBzb2Z0aW5nY3NfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzb2Z0aW5nY3NfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRpbmdjc19zdGFydCh2b2lkKQoreworCXNwaW5fbG9ja19pbml0KCZzb2Z0aW5nY3NfaW5kZXhfbG9jayk7CisJcmV0dXJuIHBjbWNpYV9yZWdpc3Rlcl9kcml2ZXIoJnNvZnRpbmdjc19kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc29mdGluZ2NzX3N0b3Aodm9pZCkKK3sKKwlwY21jaWFfdW5yZWdpc3Rlcl9kcml2ZXIoJnNvZnRpbmdjc19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb2Z0aW5nY3Nfc3RhcnQpOworbW9kdWxlX2V4aXQoc29mdGluZ2NzX3N0b3ApOworCitNT0RVTEVfREVTQ1JJUFRJT04oInNvZnRpbmcgQ0FOY2FyZCBkcml2ZXIiCisJCSIsIGxpbmtzIFBDTUNJQSBjYXJkIHRvIHNvZnRpbmcgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX2Z3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUyMDc4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zb2Z0aW5nL3NvZnRpbmdfZncuYwpAQCAtMCwwICsxLDY5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwCisgKgorICogLSBLdXJ0IFZhbiBEaWpjaywgRUlBIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlICJzb2Z0aW5nLmgiCisKKy8qCisgKiBsb3cgbGV2ZWwgRFBSQU0gY29tbWFuZC4KKyAqIE1ha2Ugc3VyZSB0aGF0IGNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9IT1NUXSBpcyBwcmVzZXQKKyAqLworc3RhdGljIGludCBfc29mdGluZ19mY3RfY21kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwgdWludDE2X3QgdmVjdG9yLAorCQljb25zdCBjaGFyICptc2cpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIHN0YW1wOworCisJaW93cml0ZTE2KGNtZCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTV0pOworCWlvd3JpdGU4KHZlY3RvciA+PiA4LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1QgKyAxXSk7CisJaW93cml0ZTgodmVjdG9yLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX0hPU1RdKTsKKwkvKiBiZSBzdXJlIHRvIGZsdXNoIHRoaXMgdG8gdGhlIGNhcmQgKi8KKwl3bWIoKTsKKwlzdGFtcCA9IGppZmZpZXMgKyAxICogSFo7CisJLyogd2FpdCBmb3IgY2FyZCAqLworCWRvIHsKKwkJLyogRFBSQU1fRkNUX0hPU1QgaXMgX25vdF8gYWxpZ25lZCAqLworCQlyZXQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVF0pICsKKwkJCShpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfSE9TVCArIDFdKSA8PCA4KTsKKwkJLyogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIHZhcmlhYmxlcyAqLworCQlybWIoKTsKKwkJaWYgKHJldCA9PSBSRVNfT0spCisJCQkvKiByZWFkIHJldHVybi12YWx1ZSBub3cgKi8KKwkJCXJldHVybiBpb3JlYWQxNigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1JFU1VMVF0pOworCisJCWlmICgocmV0ICE9IHZlY3RvcikgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBzdGFtcCkpCisJCQlicmVhazsKKwkJLyogcHJvY2VzcyBjb250ZXh0ID0+IHJlbGF4ICovCisJCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDAwKTsKKwl9IHdoaWxlICgxKTsKKworCXJldCA9IChyZXQgPT0gUkVTX05PTkUpID8gLUVUSU1FRE9VVCA6IC1FQ0FOQ0VMRUQ7CisJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWQgKCVpKVxuIiwgbXNnLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19mY3RfY21kKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQxNl90IGNtZCwgY29uc3QgY2hhciAqbXNnKQoreworCWludCByZXQ7CisKKwlyZXQgPSBfc29mdGluZ19mY3RfY21kKGNhcmQsIGNtZCwgMCwgbXNnKTsKKwlpZiAocmV0ID4gMCkgeworCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwgIiVzIHJldHVybmVkICV1XG4iLCBtc2csIHJldCk7CisJCXJldCA9IC1FSU87CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChzdHJ1Y3Qgc29mdGluZyAqY2FyZCwgaW50MTZfdCBjbWQsCisJCWNvbnN0IGNoYXIgKm1zZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgc3RhbXA7CisKKwlpb3dyaXRlMTYoUkVTX05PTkUsICZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUXSk7CisJaW93cml0ZTE2KGNtZCwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkRdKTsKKwkvKiBiZSBzdXJlIHRvIGZsdXNoIHRoaXMgdG8gdGhlIGNhcmQgKi8KKwl3bWIoKTsKKwlzdGFtcCA9IGppZmZpZXMgKyAzICogSFo7CisJLyogd2FpdCBmb3IgY2FyZCAqLworCWRvIHsKKwkJcmV0ID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX1JFQ0VJUFRdKTsKKwkJLyogZG9uJ3QgaGF2ZSBhbnkgY2FjaGVkIHZhcmlhYmxlcyAqLworCQlybWIoKTsKKwkJaWYgKHJldCA9PSBSRVNfT0spCisJCQlyZXR1cm4gMDsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhbXApKQorCQkJYnJlYWs7CisJCS8qIHByb2Nlc3MgY29udGV4dCA9PiByZWxheCAqLworCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwMCk7CisJfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKworCXJldCA9IChyZXQgPT0gUkVTX05PTkUpID8gLUVUSU1FRE9VVCA6IC1FQ0FOQ0VMRUQ7CisJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJib290bG9hZGVyICVzIGZhaWxlZCAoJWkpXG4iLCBtc2csIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBmd19wYXJzZShjb25zdCB1aW50OF90ICoqcG1lbSwgdWludDE2X3QgKnB0eXBlLCB1aW50MzJfdCAqcGFkZHIsCisJCXVpbnQxNl90ICpwbGVuLCBjb25zdCB1aW50OF90ICoqcGRhdCkKK3sKKwl1aW50MTZfdCBjaGVja3N1bVsyXTsKKwljb25zdCB1aW50OF90ICptZW07CisJY29uc3QgdWludDhfdCAqZW5kOworCisJLyoKKwkgKiBmaXJtd2FyZSByZWNvcmRzIGFyZSBhIGJpbmFyeSwgdW5hbGlnbmVkIHN0cmVhbSBjb21wb3NlZCBvZjoKKwkgKiB1aW50MTZfdCB0eXBlOworCSAqIHVpbnQzMl90IGFkZHI7CisJICogdWludDE2X3QgbGVuOworCSAqIHVpbnQ4X3QgZGF0W2xlbl07CisJICogdWludDE2X3QgY2hlY2tzdW07CisJICogYWxsIHZhbHVlcyBpbiBsaXR0bGUgZW5kaWFuLgorCSAqIFdlIGNvdWxkIGRlZmluZSBhIHN0cnVjdCBmb3IgdGhpcywgd2l0aCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSwKKwkgKiBidXQgd291bGQgdGhhdCBzb2x2ZSB0aGUgYWxpZ25tZW50IGluIF9hbGxfIGNhc2VzIChjZnIuIHRoZQorCSAqIHN0cnVjdCBpdHNlbGYgbWF5IGJlIGFuIG9kZCBhZGRyZXNzKT8KKwkgKgorCSAqIEkgY2hvc2UgdG8gdXNlIGxlWFhfdG9fY3B1cCgpIHNpbmNlIHRoaXMgc29sdmVzIGJvdGgKKwkgKiBlbmRpYW5uZXNzICYgYWxpZ25tZW50LgorCSAqLworCW1lbSA9ICpwbWVtOworCSpwdHlwZSA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKSZtZW1bMF0pOworCSpwYWRkciA9IGxlMzJfdG9fY3B1cCgodm9pZCAqKSZtZW1bMl0pOworCSpwbGVuID0gbGUxNl90b19jcHVwKCh2b2lkICopJm1lbVs2XSk7CisJKnBkYXQgPSAmbWVtWzhdOworCS8qIHZlcmlmeSBjaGVja3N1bSAqLworCWVuZCA9ICZtZW1bOCArICpwbGVuXTsKKwljaGVja3N1bVswXSA9IGxlMTZfdG9fY3B1cCgodm9pZCAqKWVuZCk7CisJZm9yIChjaGVja3N1bVsxXSA9IDA7IG1lbSA8IGVuZDsgKyttZW0pCisJCWNoZWNrc3VtWzFdICs9ICptZW07CisJaWYgKGNoZWNrc3VtWzBdICE9IGNoZWNrc3VtWzFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBpbmNyZW1lbnQgKi8KKwkqcG1lbSArPSAxMCArICpwbGVuOworCXJldHVybiAwOworfQorCitpbnQgc29mdGluZ19sb2FkX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQlfX2lvbWVtIHVpbnQ4X3QgKmRwcmFtLCB1bnNpZ25lZCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKK3sKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWludCByZXQ7CisJY29uc3QgdWludDhfdCAqbWVtLCAqZW5kLCAqZGF0OworCXVpbnQxNl90IHR5cGUsIGxlbjsKKwl1aW50MzJfdCBhZGRyOworCXVpbnQ4X3QgKmJ1ZiA9IE5VTEw7CisJaW50IGJ1ZmxlbiA9IDA7CisJaW50OF90IHR5cGVfZW5kID0gMDsKKworCXJldCA9IHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmaWxlLCAmY2FyZC0+cGRldi0+ZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlkZXZfZGJnKCZjYXJkLT5wZGV2LT5kZXYsICIlcywgZmlybXdhcmUoJXMpIGdvdCAldSBieXRlcyIKKwkJIiwgb2Zmc2V0ICVjMHglMDR4XG4iLAorCQljYXJkLT5wZGF0LT5uYW1lLCBmaWxlLCAodW5zaWduZWQgaW50KWZ3LT5zaXplLAorCQkob2Zmc2V0ID49IDApID8gJysnIDogJy0nLCAodW5zaWduZWQgaW50KWFicyhvZmZzZXQpKTsKKwkvKiBwYXJzZSB0aGUgZmlybXdhcmUgKi8KKwltZW0gPSBmdy0+ZGF0YTsKKwllbmQgPSAmbWVtW2Z3LT5zaXplXTsKKwkvKiBsb29rIGZvciBoZWFkZXIgcmVjb3JkICovCisJcmV0ID0gZndfcGFyc2UoJm1lbSwgJnR5cGUsICZhZGRyLCAmbGVuLCAmZGF0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaWYgKHR5cGUgIT0gMHhmZmZmKQorCQlnb3RvIGZhaWxlZDsKKwlpZiAoc3RybmNtcCgiU3RydWN0dXJlZCBCaW5hcnkgRm9ybWF0LCBTb2Z0aW5nIEdtYkgiICwgZGF0LCBsZW4pKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbGVkOworCX0KKwkvKiBvaywgd2UgaGFkIGEgaGVhZGVyICovCisJd2hpbGUgKG1lbSA8IGVuZCkgeworCQlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQlpZiAodHlwZSA9PSAzKSB7CisJCQkvKiBzdGFydCBhZGRyZXNzLCBub3QgdXNlZCBoZXJlICovCisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eXBlID09IDEpIHsKKwkJCS8qIGVvZiAqLworCQkJdHlwZV9lbmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodHlwZSAhPSAwKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBmYWlsZWQ7CisJCX0KKworCQlpZiAoKGFkZHIgKyBsZW4gKyBvZmZzZXQpID4gc2l6ZSkKKwkJCWdvdG8gZmFpbGVkOworCQltZW1jcHlfdG9pbygmZHByYW1bYWRkciArIG9mZnNldF0sIGRhdCwgbGVuKTsKKwkJLyogYmUgc3VyZSB0byBmbHVzaCBjYWNoZXMgZnJvbSBJTyBzcGFjZSAqLworCQltYigpOworCQlpZiAobGVuID4gYnVmbGVuKSB7CisJCQkvKiBhbGlnbiBidWZsZW4gKi8KKwkJCWJ1ZmxlbiA9IChsZW4gKyAoMTAyNC0xKSkgJiB+KDEwMjQtMSk7CisJCQlidWYgPSBrcmVhbGxvYyhidWYsIGJ1ZmxlbiwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWJ1ZikgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBmYWlsZWQ7CisJCQl9CisJCX0KKwkJLyogdmVyaWZ5IHJlY29yZCBkYXRhICovCisJCW1lbWNweV9mcm9taW8oYnVmLCAmZHByYW1bYWRkciArIG9mZnNldF0sIGxlbik7CisJCWlmIChtZW1jbXAoYnVmLCBkYXQsIGxlbikpIHsKKwkJCS8qIGlzIG5vdCBvayAqLworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJEUFJBTSByZWFkYmFjayBmYWlsZWRcbiIpOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICghdHlwZV9lbmQpCisJCS8qIG5vIGVuZCByZWNvcmQgc2VlbiAqLworCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAwOworZmFpbGVkOgorCWtmcmVlKGJ1Zik7CisJcmVsZWFzZV9maXJtd2FyZShmdyk7CisJaWYgKHJldCA8IDApCisJCWRldl9pbmZvKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSAlcyBmYWlsZWRcbiIsIGZpbGUpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2xvYWRfYXBwX2Z3KGNvbnN0IGNoYXIgKmZpbGUsIHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CisJY29uc3QgdWludDhfdCAqbWVtLCAqZW5kLCAqZGF0OworCWludCByZXQsIGo7CisJdWludDE2X3QgdHlwZSwgbGVuOworCXVpbnQzMl90IGFkZHIsIHN0YXJ0X2FkZHIgPSAwOworCXVuc2lnbmVkIGludCBzdW0sIHJ4X3N1bTsKKwlpbnQ4X3QgdHlwZV9lbmQgPSAwLCB0eXBlX2VudHJ5cG9pbnQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZpbGUsICZjYXJkLT5wZGV2LT5kZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJyZXF1ZXN0X2Zpcm13YXJlKCVzKSBnb3QgJWlcbiIsCisJCQlmaWxlLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlkZXZfZGJnKCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSglcykgZ290ICVsdSBieXRlc1xuIiwKKwkJZmlsZSwgKHVuc2lnbmVkIGxvbmcpZnctPnNpemUpOworCS8qIHBhcnNlIHRoZSBmaXJtd2FyZSAqLworCW1lbSA9IGZ3LT5kYXRhOworCWVuZCA9ICZtZW1bZnctPnNpemVdOworCS8qIGxvb2sgZm9yIGhlYWRlciByZWNvcmQgKi8KKwlyZXQgPSBmd19wYXJzZSgmbWVtLCAmdHlwZSwgJmFkZHIsICZsZW4sICZkYXQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCXJldCA9IC1FSU5WQUw7CisJaWYgKHR5cGUgIT0gMHhmZmZmKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgc3RhcnRzIHdpdGggdHlwZSAweCV4XG4iLAorCQkJdHlwZSk7CisJCWdvdG8gZmFpbGVkOworCX0KKwlpZiAoc3RybmNtcCgiU3RydWN0dXJlZCBCaW5hcnkgRm9ybWF0LCBTb2Z0aW5nIEdtYkgiLCBkYXQsIGxlbikpIHsKKwkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBzdHJpbmcgJyUuKnMnIGZhdWx0XG4iLAorCQkJCWxlbiwgZGF0KTsKKwkJZ290byBmYWlsZWQ7CisJfQorCS8qIG9rLCB3ZSBoYWQgYSBoZWFkZXIgKi8KKwl3aGlsZSAobWVtIDwgZW5kKSB7CisJCXJldCA9IGZ3X3BhcnNlKCZtZW0sICZ0eXBlLCAmYWRkciwgJmxlbiwgJmRhdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxlZDsKKworCQlpZiAodHlwZSA9PSAzKSB7CisJCQkvKiBzdGFydCBhZGRyZXNzICovCisJCQlzdGFydF9hZGRyID0gYWRkcjsKKwkJCXR5cGVfZW50cnlwb2ludCA9IDE7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICh0eXBlID09IDEpIHsKKwkJCS8qIGVvZiAqLworCQkJdHlwZV9lbmQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAodHlwZSAhPSAwKSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJInVua25vd24gcmVjb3JkIHR5cGUgMHglMDR4XG4iLCB0eXBlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGZhaWxlZDsKKwkJfQorCisJCS8qIHJlZ3VhbGFyIGRhdGEgKi8KKwkJZm9yIChzdW0gPSAwLCBqID0gMDsgaiA8IGxlbjsgKytqKQorCQkJc3VtICs9IGRhdFtqXTsKKwkJLyogd29yayBpbiAxNmJpdCAodGFyZ2V0KSAqLworCQlzdW0gJj0gMHhmZmZmOworCisJCW1lbWNweV90b2lvKCZjYXJkLT5kcHJhbVtjYXJkLT5wZGF0LT5hcHAub2Zmc10sIGRhdCwgbGVuKTsKKwkJaW93cml0ZTMyKGNhcmQtPnBkYXQtPmFwcC5vZmZzICsgY2FyZC0+cGRhdC0+YXBwLmFkZHIsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAyXSk7CisJCWlvd3JpdGUzMihhZGRyLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDZdKTsKKwkJaW93cml0ZTE2KGxlbiwgJmNhcmQtPmRwcmFtW0RQUkFNX0NPTU1BTkQgKyAxMF0pOworCQlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDEyXSk7CisJCXJldCA9IHNvZnRpbmdfYm9vdGxvYWRlcl9jb21tYW5kKGNhcmQsIDEsICJsb2FkaW5nIGFwcC4iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogdmVyaWZ5IGNoZWNrc3VtICovCisJCXJ4X3N1bSA9IGlvcmVhZDE2KCZjYXJkLT5kcHJhbVtEUFJBTV9SRUNFSVBUICsgMl0pOworCQlpZiAocnhfc3VtICE9IHN1bSkgeworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsICJTUkFNIHNlZW1zIHRvIGJlIGRhbWFnZWQiCisJCQkJIiwgd2FudGVkIDB4JTA0eCwgZ290IDB4JTA0eFxuIiwgc3VtLCByeF9zdW0pOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbGVkOworCQl9CisJfQorCWlmICghdHlwZV9lbmQgfHwgIXR5cGVfZW50cnlwb2ludCkKKwkJZ290byBmYWlsZWQ7CisJLyogc3RhcnQgYXBwbGljYXRpb24gaW4gY2FyZCAqLworCWlvd3JpdGUzMihzdGFydF9hZGRyLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDJdKTsKKwlpb3dyaXRlOCgxLCAmY2FyZC0+ZHByYW1bRFBSQU1fQ09NTUFORCArIDZdKTsKKwlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAzLCAic3RhcnQgYXBwLiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwlyZXQgPSAwOworZmFpbGVkOgorCXJlbGVhc2VfZmlybXdhcmUoZncpOworCWlmIChyZXQgPCAwKQorCQlkZXZfaW5mbygmY2FyZC0+cGRldi0+ZGV2LCAiZmlybXdhcmUgJXMgZmFpbGVkXG4iLCBmaWxlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNvZnRpbmdfcmVzZXRfY2hpcChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0OworCisJZG8geworCQkvKiByZXNldCBjaGlwICovCisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF9SWF9GSUZPXSk7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVF9SWF9GSUZPKzFdKTsKKwkJaW93cml0ZTgoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX1JFU0VUXSk7CisJCWlvd3JpdGU4KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9SRVNFVCsxXSk7CisKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDAsICJyZXNldF9jYW4iKTsKKwkJaWYgKCFyZXQpCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJLyogZG9uJ3Qgd2FpdCBhbnkgbG9uZ2VyICovCisJCQlicmVhazsKKwl9IHdoaWxlICgxKTsKKwljYXJkLT50eC5wZW5kaW5nID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgc29mdGluZ19jaGlwX3Bvd2Vyb24oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaW50IHJldDsKKwkvKiBzeW5jICovCisJcmV0ID0gX3NvZnRpbmdfZmN0X2NtZChjYXJkLCA5OSwgMHg1NSwgInN5bmMtYSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKworCXJldCA9IF9zb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgOTksIDB4YWEsICJzeW5jLWIiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCS8qIGdldF9zZXJpYWwgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNDMsICJnZXRfc2VyaWFsX251bWJlciIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwljYXJkLT5pZC5zZXJpYWwgPSBpb3JlYWQzMigmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNXSk7CisJLyogZ2V0X3ZlcnNpb24gKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTIsICJnZXRfdmVyc2lvbiIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwljYXJkLT5pZC5md192ZXJzaW9uID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwljYXJkLT5pZC5od192ZXJzaW9uID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwljYXJkLT5pZC5saWNlbnNlID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDZdKTsKKwljYXJkLT5pZC5jaGlwWzBdID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwljYXJkLT5pZC5jaGlwWzFdID0gaW9yZWFkMTYoJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDEwXSk7CisJcmV0dXJuIDA7CitmYWlsZWQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19pbml0aWFsaXplX3RpbWVzdGFtcChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwl1aW50NjRfdCBvdmY7CisKKwljYXJkLT50c19yZWYgPSBrdGltZV9nZXQoKTsKKworCS8qIDE2TUh6IGlzIHRoZSByZWZlcmVuY2UgKi8KKwlvdmYgPSAweDEwMDAwMDAwMFVMTCAqIDE2OworCWRvX2RpdihvdmYsIGNhcmQtPnBkYXQtPmZyZXEgPzogMTYpOworCisJY2FyZC0+dHNfb3ZlcmZsb3cgPSBrdGltZV9hZGRfdXMoa3RpbWVfc2V0KDAsIDApLCBvdmYpOworfQorCitrdGltZV90IHNvZnRpbmdfcmF3Mmt0aW1lKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCB1MzIgcmF3KQoreworCXVpbnQ2NF90IHJhd2w7CisJa3RpbWVfdCBub3csIHJlYWxfb2Zmc2V0OworCWt0aW1lX3QgdGFyZ2V0OworCWt0aW1lX3QgdG1wOworCisJbm93ID0ga3RpbWVfZ2V0KCk7CisJcmVhbF9vZmZzZXQgPSBrdGltZV9zdWIoa3RpbWVfZ2V0X3JlYWwoKSwgbm93KTsKKworCS8qIGZpbmQgbnNlYyBmcm9tIGNhcmQgKi8KKwlyYXdsID0gcmF3ICogMTY7CisJZG9fZGl2KHJhd2wsIGNhcmQtPnBkYXQtPmZyZXEgPzogMTYpOworCXRhcmdldCA9IGt0aW1lX2FkZF91cyhjYXJkLT50c19yZWYsIHJhd2wpOworCS8qIHRlc3QgZm9yIG92ZXJmbG93cyAqLworCXRtcCA9IGt0aW1lX2FkZCh0YXJnZXQsIGNhcmQtPnRzX292ZXJmbG93KTsKKwl3aGlsZSAodW5saWtlbHkoa3RpbWVfdG9fbnModG1wKSA+IGt0aW1lX3RvX25zKG5vdykpKSB7CisJCWNhcmQtPnRzX3JlZiA9IGt0aW1lX2FkZChjYXJkLT50c19yZWYsIGNhcmQtPnRzX292ZXJmbG93KTsKKwkJdGFyZ2V0ID0gdG1wOworCQl0bXAgPSBrdGltZV9hZGQodGFyZ2V0LCBjYXJkLT50c19vdmVyZmxvdyk7CisJfQorCXJldHVybiBrdGltZV9hZGQodGFyZ2V0LCByZWFsX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlyZXR1cm4gKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORykKKwkJPyAxIDogMDsKK30KKworaW50IHNvZnRpbmdfc3RhcnRzdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB1cCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzb2Z0aW5nICpjYXJkOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlpbnQgYnVzX2JpdG1hc2tfc3RhcnQ7CisJaW50IGosIGVycm9yX3JlcG9ydGluZzsKKwlzdHJ1Y3QgY2FuX2ZyYW1lIG1zZzsKKwljb25zdCBzdHJ1Y3QgY2FuX2JpdHRpbWluZyAqYnQ7CisKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwljYXJkID0gcHJpdi0+Y2FyZDsKKworCWlmICghY2FyZC0+ZncudXApCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJYnVzX2JpdG1hc2tfc3RhcnQgPSAwOworCWlmIChkZXYgJiYgdXApCisJCS8qIHByZXBhcmUgdG8gc3RhcnQgdGhpcyBidXMgYXMgd2VsbCAqLworCQlidXNfYml0bWFza19zdGFydCB8PSAoMSA8PCBwcml2LT5pbmRleCk7CisJLyogYnJpbmcgbmV0ZGV2cyBkb3duICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkJaWYgKGRldiAhPSBuZXRkZXYpCisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJaWYgKGRldiAhPSBuZXRkZXYpCisJCQkJYnVzX2JpdG1hc2tfc3RhcnQgfD0gKDEgPDwgaik7CisJCQlwcml2LT50eC5wZW5kaW5nID0gMDsKKwkJCXByaXYtPnR4LmVjaG9fcHV0ID0gMDsKKwkJCXByaXYtPnR4LmVjaG9fZ2V0ID0gMDsKKwkJCS8qCisJCQkgKiB0aGlzIGJ1cycgbWF5IGp1c3QgaGF2ZSBjYWxsZWQgb3Blbl9jYW5kZXYoKQorCQkJICogd2hpY2ggaXMgcmF0aGVyIHN0dXBpZCB0byBjYWxsIGNsb3NlX2NhbmRldigpCisJCQkgKiBhbHJlYWR5CisJCQkgKiBidXQgd2UgbWF5IGNvbWUgaGVyZSBmcm9tIGJ1c29mZiByZWNvdmVyeSB0b28KKwkJCSAqIGluIHdoaWNoIGNhc2UgdGhlIGVjaG9fc2tiIF9uZWVkc18gZmx1c2hpbmcgdG9vLgorCQkJICoganVzdCBiZSBzdXJlIHRvIGNhbGwgb3Blbl9jYW5kZXYoKSBhZ2FpbgorCQkJICovCisJCQljbG9zZV9jYW5kZXYobmV0ZGV2KTsKKwkJfQorCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfU1RPUFBFRDsKKwl9CisJY2FyZC0+dHgucGVuZGluZyA9IDA7CisKKwlzb2Z0aW5nX2VuYWJsZV9pcnEoY2FyZCwgMCk7CisJcmV0ID0gc29mdGluZ19yZXNldF9jaGlwKGNhcmQpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkOworCWlmICghYnVzX2JpdG1hc2tfc3RhcnQpCisJCS8qIG5vIGJ1c3NlcyB0byBiZSBicm91Z2h0IHVwICovCisJCWdvdG8gY2FyZF9kb25lOworCisJaWYgKChidXNfYml0bWFza19zdGFydCAmIDEpICYmIChidXNfYml0bWFza19zdGFydCAmIDIpCisJCQkmJiAoc29mdGluZ19lcnJvcl9yZXBvcnRpbmcoY2FyZC0+bmV0WzBdKQorCQkJCSE9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKGNhcmQtPm5ldFsxXSkpKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LAorCQkJCSJlcnJfcmVwb3J0aW5nIGZsYWcgZGlmZmVycyBmb3IgYnVzc2VzXG4iKTsKKwkJZ290byBpbnZhbGlkOworCX0KKwllcnJvcl9yZXBvcnRpbmcgPSAwOworCWlmIChidXNfYml0bWFza19zdGFydCAmIDEpIHsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WzBdOworCQlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwkJZXJyb3JfcmVwb3J0aW5nICs9IHNvZnRpbmdfZXJyb3JfcmVwb3J0aW5nKG5ldGRldik7CisJCS8qIGluaXQgY2hpcCAxICovCisJCWJ0ID0gJnByaXYtPmNhbi5iaXR0aW1pbmc7CisJCWlvd3JpdGUxNihidC0+YnJwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoYnQtPnNqdywgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJaW93cml0ZTE2KGJ0LT5waGFzZV9zZWcxICsgYnQtPnByb3Bfc2VnLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDhdKTsKKwkJaW93cml0ZTE2KChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfM19TQU1QTEVTKSA/IDEgOiAwLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMSwgImluaXRpYWxpemVfY2hpcFswXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgbW9kZSAqLworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAzLCAic2V0X21vZGVbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IGZpbHRlciAqLworCQkvKiAxMWJpdCBpZCAmIG1hc2sgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDB4MDdmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJLyogMjliaXQgaWQubG8gJiBtYXNrLmxvICYgaWQuaGkgJiBtYXNrLmhpICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNigweGZmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlpb3dyaXRlMTYoMHgxZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDcsICJzZXRfZmlsdGVyWzBdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBvdXRwdXQgY29udHJvbCAqLworCQlpb3dyaXRlMTYocHJpdi0+b3V0cHV0LCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgNSwgInNldF9vdXRwdXRbMF0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwl9CisJaWYgKGJ1c19iaXRtYXNrX3N0YXJ0ICYgMikgeworCQluZXRkZXYgPSBjYXJkLT5uZXRbMV07CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQllcnJvcl9yZXBvcnRpbmcgKz0gc29mdGluZ19lcnJvcl9yZXBvcnRpbmcobmV0ZGV2KTsKKwkJLyogaW5pdCBjaGlwMiAqLworCQlidCA9ICZwcml2LT5jYW4uYml0dGltaW5nOworCQlpb3dyaXRlMTYoYnQtPmJycCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KGJ0LT5zancsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJCWlvd3JpdGUxNihidC0+cGhhc2Vfc2VnMSArIGJ0LT5wcm9wX3NlZywKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgNl0pOworCQlpb3dyaXRlMTYoYnQtPnBoYXNlX3NlZzIsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigocHJpdi0+Y2FuLmN0cmxtb2RlICYgQ0FOX0NUUkxNT0RFXzNfU0FNUExFUykgPyAxIDogMCwKKwkJCQkmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTBdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDIsICJpbml0aWFsaXplX2NoaXBbMV0iKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGZhaWxlZDsKKwkJLyogc2V0IG1vZGUyICovCisJCWlvd3JpdGUxNigwLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMl0pOworCQlpb3dyaXRlMTYoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDQsICJzZXRfbW9kZVsxXSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCQkvKiBzZXQgZmlsdGVyMiAqLworCQkvKiAxMWJpdCBpZCAmIG1hc2sgKi8KKwkJaW93cml0ZTE2KDB4MDAwMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJaW93cml0ZTE2KDB4MDdmZiwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDRdKTsKKwkJLyogMjliaXQgaWQubG8gJiBtYXNrLmxvICYgaWQuaGkgJiBtYXNrLmhpICovCisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJCWlvd3JpdGUxNigweGZmZmYsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJCWlvd3JpdGUxNigweDAwMDAsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCQlpb3dyaXRlMTYoMHgxZmZmLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDgsICJzZXRfZmlsdGVyWzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJCS8qIHNldCBvdXRwdXQgY29udHJvbDIgKi8KKwkJaW93cml0ZTE2KHByaXYtPm91dHB1dCwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDJdKTsKKwkJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDYsICJzZXRfb3V0cHV0WzFdIik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBmYWlsZWQ7CisJfQorCS8qIGVuYWJsZV9lcnJvcl9mcmFtZSAqLworCS8qCisJICogRXJyb3IgcmVwb3J0aW5nIGlzIHN3aXRjaGVkIG9mZiBhdCB0aGUgbW9tZW50IHNpbmNlCisJICogdGhlIHJlY2VpdmluZyBvZiB0aGVtIGlzIG5vdCB5ZXQgMTAwJSB2ZXJpZmllZAorCSAqIFRoaXMgc2hvdWxkIGJlIGVuYWJsZWQgc29vbmVyIG9yIGxhdGVyCisJICoKKwlpZiAoZXJyb3JfcmVwb3J0aW5nKSB7CisJCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCA1MSwgImVuYWJsZV9lcnJvcl9mcmFtZSIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZmFpbGVkOworCX0KKwkqLworCS8qIGluaXRpYWxpemUgaW50ZXJmYWNlICovCisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAyXSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA0XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA2XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyA4XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxMF0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMTJdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDE0XSk7CisJaW93cml0ZTE2KDEsICZjYXJkLT5kcHJhbVtEUFJBTV9GQ1RfUEFSQU0gKyAxNl0pOworCWlvd3JpdGUxNigxLCAmY2FyZC0+ZHByYW1bRFBSQU1fRkNUX1BBUkFNICsgMThdKTsKKwlpb3dyaXRlMTYoMSwgJmNhcmQtPmRwcmFtW0RQUkFNX0ZDVF9QQVJBTSArIDIwXSk7CisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDE3LCAiaW5pdGlhbGl6ZV9pbnRlcmZhY2UiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogZW5hYmxlX2ZpZm8gKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMzYsICJlbmFibGVfZmlmbyIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGUgZmlmbyB0eCBhY2sgKi8KKwlyZXQgPSBzb2Z0aW5nX2ZjdF9jbWQoY2FyZCwgMTMsICJmaWZvX3R4X2Fja1swXSIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBlbmFibGUgZmlmbyB0eCBhY2syICovCisJcmV0ID0gc29mdGluZ19mY3RfY21kKGNhcmQsIDE0LCAiZmlmb190eF9hY2tbMV0iKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJLyogc3RhcnRfY2hpcCAqLworCXJldCA9IHNvZnRpbmdfZmN0X2NtZChjYXJkLCAxMSwgInN0YXJ0X2NoaXAiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lORk9fQlVTU1RBVEVdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fSU5GT19CVVNTVEFURTJdKTsKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA8IDIpIHsKKwkJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwkJLyogZmx1c2ggdGhlIERQUkFNIGNhY2hlcyAqLworCQl3bWIoKTsKKwl9CisKKwlzb2Z0aW5nX2luaXRpYWxpemVfdGltZXN0YW1wKGNhcmQpOworCisJLyoKKwkgKiBkbyBzb2NrZXRjYW4gbm90aWZpY2F0aW9ucy9zdGF0dXMgY2hhbmdlcworCSAqIGZyb20gaGVyZSwgbm8gZXJyb3JzIHNob3VsZCBvY2N1ciwgb3IgdGhlIGZhaWxlZDogcGFydAorCSAqIG11c3QgYmUgcmV2aWV3ZWQKKwkgKi8KKwltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKG1zZykpOworCW1zZy5jYW5faWQgPSBDQU5fRVJSX0ZMQUcgfCBDQU5fRVJSX1JFU1RBUlRFRDsKKwltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIShidXNfYml0bWFza19zdGFydCAmICgxIDw8IGopKSkKKwkJCWNvbnRpbnVlOworCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCWlmICghbmV0ZGV2KQorCQkJY29udGludWU7CisJCXByaXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCQlvcGVuX2NhbmRldihuZXRkZXYpOworCQlpZiAoZGV2ICE9IG5ldGRldikgeworCQkJLyogbm90aWZ5IG90aGVyIGJ1c3NlcyBvbiB0aGUgcmVzdGFydCAqLworCQkJc29mdGluZ19uZXRkZXZfcngobmV0ZGV2LCAmbXNnLCBrdGltZV9zZXQoMCwgMCkpOworCQkJKytwcml2LT5jYW4uY2FuX3N0YXRzLnJlc3RhcnRzOworCQl9CisJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKwl9CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCXJldCA9IHNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxlZDsKK2NhcmRfZG9uZToKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiAwOworaW52YWxpZDoKKwlyZXQgPSAtRUlOVkFMOworZmFpbGVkOgorCXNvZnRpbmdfZW5hYmxlX2lycShjYXJkLCAwKTsKKwlzb2Z0aW5nX3Jlc2V0X2NoaXAoY2FyZCk7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkvKiBicmluZyBhbGwgb3RoZXIgaW50ZXJmYWNlcyBkb3duICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCW5ldGRldiA9IGNhcmQtPm5ldFtqXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJZGV2X2Nsb3NlKG5ldGRldik7CisJfQorCXJldHVybiByZXQ7Cit9CisKK2ludCBzb2Z0aW5nX2RlZmF1bHRfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCisJc3dpdGNoIChwcml2LT5jaGlwKSB7CisJY2FzZSAxMDAwOgorCQlyZXR1cm4gKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPCAyKSA/IDB4ZmIgOiAweGZhOworCWNhc2UgNToKKwkJcmV0dXJuIDB4NjA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDB4NDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVhOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19tYWluLmMKQEAgLTAsMCArMSw4OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMAorICoKKyAqIC0gS3VydCBWYW4gRGlqY2ssIEVJQSBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgInNvZnRpbmcuaCIKKworI2RlZmluZSBUWF9FQ0hPX1NLQl9NQVggKCgoVFhNQVgrMSkvMiktMSkKKworLyoKKyAqIHRlc3QgaXMgYSBzcGVjaWZpYyBDQU4gbmV0ZGV2CisgKiBpcyBvbmxpbmUgKGllLiB1cCAnbiBydW5uaW5nLCBub3Qgc2xlZXBpbmcsIG5vdCBidXNvZmYKKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FuaWZfaXNfYWN0aXZlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGNhbl9wcml2ICpjYW4gPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCXJldHVybiAwOworCXJldHVybiAoY2FuLT5zdGF0ZSA8PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSk7Cit9CisKKy8qIHJlc2V0IERQUkFNICovCitzdGF0aWMgaW5saW5lIHZvaWQgc29mdGluZ19zZXRfcmVzZXRfZHByYW0oc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJaWYgKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgeworCQlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCQlpb3dyaXRlOChpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pICYgfjEsCisJCQkJJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSk7CisJCXNwaW5fdW5sb2NrX2JoKCZjYXJkLT5zcGluKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzb2Z0aW5nX2Nscl9yZXNldF9kcHJhbShzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpZiAoY2FyZC0+cGRhdC0+Z2VuZXJhdGlvbiA+PSAyKSB7CisJCXNwaW5fbG9ja19iaCgmY2FyZC0+c3Bpbik7CisJCWlvd3JpdGU4KGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX1JFU0VUXSkgfCAxLAorCQkJCSZjYXJkLT5kcHJhbVtEUFJBTV9WMl9SRVNFVF0pOworCQlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJfQorfQorCisvKiB0cmlnZ2VyIHRoZSB0eCBxdWV1ZS1pbmcgKi8KK3N0YXRpYyBuZXRkZXZfdHhfdCBzb2Z0aW5nX25ldGRldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwcml2LT5jYXJkOworCWludCByZXQ7CisJdWludDhfdCAqcHRyOworCXVpbnQ4X3QgZmlmb193ciwgZmlmb19yZDsKKwlzdHJ1Y3QgY2FuX2ZyYW1lICpjZiA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopc2tiLT5kYXRhOworCXVpbnQ4X3QgYnVmW0RQUkFNX1RYX1NJWkVdOworCisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKGRldiwgc2tiKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworCXNwaW5fbG9jaygmY2FyZC0+c3Bpbik7CisKKwlyZXQgPSBORVRERVZfVFhfQlVTWTsKKwlpZiAoIWNhcmQtPmZ3LnVwIHx8CisJCQkoY2FyZC0+dHgucGVuZGluZyA+PSBUWE1BWCkgfHwKKwkJCShwcml2LT50eC5wZW5kaW5nID49IFRYX0VDSE9fU0tCX01BWCkpCisJCWdvdG8geG1pdF9kb25lOworCWZpZm9fd3IgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9UWF9XUl0pOworCWZpZm9fcmQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9UWF9SRF0pOworCWlmIChmaWZvX3dyID09IGZpZm9fcmQpCisJCS8qIGZpZm8gZnVsbCAqLworCQlnb3RvIHhtaXRfZG9uZTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJcHRyID0gYnVmOworCSpwdHIgPSBDTURfVFg7CisJaWYgKGNmLT5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpCisJCSpwdHIgfD0gQ01EX1JUUjsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykKKwkJKnB0ciB8PSBDTURfWFREOworCWlmIChwcml2LT5pbmRleCkKKwkJKnB0ciB8PSBDTURfQlVTMjsKKwkrK3B0cjsKKwkqcHRyKysgPSBjZi0+Y2FuX2RsYzsKKwkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAwKTsKKwkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiA4KTsKKwlpZiAoY2YtPmNhbl9pZCAmIENBTl9FRkZfRkxBRykgeworCQkqcHRyKysgPSAoY2YtPmNhbl9pZCA+PiAxNik7CisJCSpwdHIrKyA9IChjZi0+Y2FuX2lkID4+IDI0KTsKKwl9IGVsc2UgeworCQkvKiBpbmNyZW1lbnQgMSwgbm90IDIgYXMgeW91IG1pZ2h0IHRoaW5rICovCisJCXB0ciArPSAxOworCX0KKwlpZiAoIShjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSkKKwkJbWVtY3B5KHB0ciwgJmNmLT5kYXRhWzBdLCBjZi0+Y2FuX2RsYyk7CisJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW0RQUkFNX1RYICsgRFBSQU1fVFhfU0laRSAqIGZpZm9fd3JdLAorCQkJYnVmLCBEUFJBTV9UWF9TSVpFKTsKKwlpZiAoKytmaWZvX3dyID49IERQUkFNX1RYX0NOVCkKKwkJZmlmb193ciA9IDA7CisJaW93cml0ZTgoZmlmb193ciwgJmNhcmQtPmRwcmFtW0RQUkFNX1RYX1dSXSk7CisJY2FyZC0+dHgubGFzdF9idXMgPSBwcml2LT5pbmRleDsKKwkrK2NhcmQtPnR4LnBlbmRpbmc7CisJKytwcml2LT50eC5wZW5kaW5nOworCWNhbl9wdXRfZWNob19za2Ioc2tiLCBkZXYsIHByaXYtPnR4LmVjaG9fcHV0KTsKKwkrK3ByaXYtPnR4LmVjaG9fcHV0OworCWlmIChwcml2LT50eC5lY2hvX3B1dCA+PSBUWF9FQ0hPX1NLQl9NQVgpCisJCXByaXYtPnR4LmVjaG9fcHV0ID0gMDsKKwkvKiBjYW5fcHV0X2VjaG9fc2tiKCkgc2F2ZXMgdGhlIHNrYiwgc2FmZSB0byByZXR1cm4gVFhfT0sgKi8KKwlyZXQgPSBORVRERVZfVFhfT0s7Cit4bWl0X2RvbmU6CisJc3Bpbl91bmxvY2soJmNhcmQtPnNwaW4pOworCWlmIChjYXJkLT50eC5wZW5kaW5nID49IFRYTUFYKSB7CisJCWludCBqOworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJCWlmIChjYXJkLT5uZXRbal0pCisJCQkJbmV0aWZfc3RvcF9xdWV1ZShjYXJkLT5uZXRbal0pOworCQl9CisJfQorCWlmIChyZXQgIT0gTkVUREVWX1RYX09LKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2hvcnRjdXQgZm9yIHNrYiBkZWxpdmVyeQorICovCitpbnQgc29mdGluZ19uZXRkZXZfcngoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqbXNnLAorCQlrdGltZV90IGt0aW1lKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGNhbl9mcmFtZSAqY2Y7CisKKwlza2IgPSBhbGxvY19jYW5fc2tiKG5ldGRldiwgJmNmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KGNmLCBtc2csIHNpemVvZigqbXNnKSk7CisJc2tiLT50c3RhbXAgPSBrdGltZTsKKwlyZXR1cm4gbmV0aWZfcngoc2tiKTsKK30KKworLyoKKyAqIHNvZnRpbmdfaGFuZGxlXzEKKyAqIHBvcCAxIGVudHJ5IGZyb20gdGhlIERQUkFNIHF1ZXVlLCBhbmQgcHJvY2VzcworICovCitzdGF0aWMgaW50IHNvZnRpbmdfaGFuZGxlXzEoc3RydWN0IHNvZnRpbmcgKmNhcmQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2OworCWt0aW1lX3Qga3RpbWU7CisJc3RydWN0IGNhbl9mcmFtZSBtc2c7CisJaW50IGNudCA9IDAsIGxvc3RfbXNnOworCXVpbnQ4X3QgZmlmb19yZCwgZmlmb193ciwgY21kOworCXVpbnQ4X3QgKnB0cjsKKwl1aW50MzJfdCB0bXBfdTMyOworCXVpbnQ4X3QgYnVmW0RQUkFNX1JYX1NJWkVdOworCisJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKKwkvKiB0ZXN0IGZvciBsb3N0IG1zZ3MgKi8KKwlsb3N0X21zZyA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1JYX0xPU1RdKTsKKwlpZiAobG9zdF9tc2cpIHsKKwkJaW50IGo7CisJCS8qIHJlc2V0IGNvbmRpdGlvbiAqLworCQlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fUlhfTE9TVF0pOworCQkvKiBwcmVwYXJlIG1zZyAqLworCQltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHIHwgQ0FOX0VSUl9DUlRMOworCQltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCQltc2cuZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKKwkJLyoKKwkJICogc2VydmljZSB0byBhbGwgYnVzc2VzLCB3ZSBkb24ndCBrbm93IHdoaWNoIGl0IHdhcyBhcHBsaWNhYmxlCisJCSAqIGJ1dCBvbmx5IHNlcnZpY2UgYnVzc2VzIHRoYXQgYXJlIG9ubGluZQorCQkgKi8KKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCQluZXRkZXYgPSBjYXJkLT5uZXRbal07CisJCQlpZiAoIW5ldGRldikKKwkJCQljb250aW51ZTsKKwkJCWlmICghY2FuaWZfaXNfYWN0aXZlKG5ldGRldikpCisJCQkJLyogYSBkZWFkIGJ1cyBoYXMgbm8gb3ZlcmZsb3dzICovCisJCQkJY29udGludWU7CisJCQkrK25ldGRldi0+c3RhdHMucnhfb3Zlcl9lcnJvcnM7CisJCQlzb2Z0aW5nX25ldGRldl9yeChuZXRkZXYsICZtc2csIGt0aW1lX3NldCgwLCAwKSk7CisJCX0KKwkJLyogcHJlcGFyZSBmb3Igb3RoZXIgdXNlICovCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YobXNnKSk7CisJCSsrY250OworCX0KKworCWZpZm9fcmQgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9SRF0pOworCWZpZm9fd3IgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9SWF9XUl0pOworCisJaWYgKCsrZmlmb19yZCA+PSBEUFJBTV9SWF9DTlQpCisJCWZpZm9fcmQgPSAwOworCWlmIChmaWZvX3dyID09IGZpZm9fcmQpCisJCXJldHVybiBjbnQ7CisKKwltZW1jcHlfZnJvbWlvKGJ1ZiwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYICsgRFBSQU1fUlhfU0laRSpmaWZvX3JkXSwKKwkJCURQUkFNX1JYX1NJWkUpOworCW1iKCk7CisJLyogdHJpZ2dlciBkdWFsIHBvcnQgUkFNICovCisJaW93cml0ZTgoZmlmb19yZCwgJmNhcmQtPmRwcmFtW0RQUkFNX1JYX1JEXSk7CisKKwlwdHIgPSBidWY7CisJY21kID0gKnB0cisrOworCWlmIChjbWQgPT0gMHhmZikKKwkJLyogbm90IHF1aXRlIHVzZWZ1bGwsIHByb2JhYmx5IHRoZSBjYXJkIGhhcyBnb3Qgb3V0ICovCisJCXJldHVybiAwOworCW5ldGRldiA9IGNhcmQtPm5ldFswXTsKKwlpZiAoY21kICYgQ01EX0JVUzIpCisJCW5ldGRldiA9IGNhcmQtPm5ldFsxXTsKKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChjbWQgJiBDTURfRVJSKSB7CisJCXVpbnQ4X3QgY2FuX3N0YXRlLCBzdGF0ZTsKKworCQlzdGF0ZSA9ICpwdHIrKzsKKworCQltc2cuY2FuX2lkID0gQ0FOX0VSUl9GTEFHOworCQltc2cuY2FuX2RsYyA9IENBTl9FUlJfRExDOworCisJCWlmIChzdGF0ZSAmIFNGX01BU0tfQlVTT0ZGKSB7CisJCQljYW5fc3RhdGUgPSBDQU5fU1RBVEVfQlVTX09GRjsKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX0VSUl9CVVNPRkY7CisJCQlzdGF0ZSA9IFNUQVRFX0JVU09GRjsKKwkJfSBlbHNlIGlmIChzdGF0ZSAmIFNGX01BU0tfRVBBU1NJVkUpIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9QQVNTSVZFOworCQkJbXNnLmNhbl9pZCB8PSBDQU5fRVJSX0NSVEw7CisJCQltc2cuZGF0YVsxXSA9IENBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFOworCQkJc3RhdGUgPSBTVEFURV9FUEFTU0lWRTsKKwkJfSBlbHNlIHsKKwkJCWNhbl9zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCXN0YXRlID0gU1RBVEVfRUFDVElWRTsKKwkJfQorCQkvKiB1cGRhdGUgRFBSQU0gKi8KKwkJaW93cml0ZTgoc3RhdGUsICZjYXJkLT5kcHJhbVtwcml2LT5pbmRleCA/CisJCQkJRFBSQU1fSU5GT19CVVNTVEFURTIgOiBEUFJBTV9JTkZPX0JVU1NUQVRFXSk7CisJCS8qIHRpbWVzdGFtcCAqLworCQl0bXBfdTMyID0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJcHRyICs9IDQ7CisJCWt0aW1lID0gc29mdGluZ19yYXcya3RpbWUoY2FyZCwgdG1wX3UzMik7CisKKwkJKytuZXRkZXYtPnN0YXRzLnJ4X2Vycm9yczsKKwkJLyogdXBkYXRlIGludGVybmFsIHN0YXR1cyAqLworCQlpZiAoY2FuX3N0YXRlICE9IHByaXYtPmNhbi5zdGF0ZSkgeworCQkJcHJpdi0+Y2FuLnN0YXRlID0gY2FuX3N0YXRlOworCQkJaWYgKGNhbl9zdGF0ZSA9PSBDQU5fU1RBVEVfRVJST1JfUEFTU0lWRSkKKwkJCQkrK3ByaXYtPmNhbi5jYW5fc3RhdHMuZXJyb3JfcGFzc2l2ZTsKKwkJCWVsc2UgaWYgKGNhbl9zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikgeworCQkJCS8qIHRoaXMgY2FsbHMgY2FuX2Nsb3NlX2NsZWFudXAoKSAqLworCQkJCWNhbl9idXNfb2ZmKG5ldGRldik7CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQkJfQorCQkJLyogdHJpZ2dlciBzb2NrZXRjYW4gKi8KKwkJCXNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWUpOworCQl9CisKKwl9IGVsc2UgeworCQlpZiAoY21kICYgQ01EX1JUUikKKwkJCW1zZy5jYW5faWQgfD0gQ0FOX1JUUl9GTEFHOworCQltc2cuY2FuX2RsYyA9IGdldF9jYW5fZGxjKCpwdHIrKyk7CisJCWlmIChjbWQgJiBDTURfWFREKSB7CisJCQltc2cuY2FuX2lkIHw9IENBTl9FRkZfRkxBRzsKKwkJCW1zZy5jYW5faWQgfD0gbGUzMl90b19jcHVwKCh2b2lkICopcHRyKTsKKwkJCXB0ciArPSA0OworCQl9IGVsc2UgeworCQkJbXNnLmNhbl9pZCB8PSBsZTE2X3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQkJcHRyICs9IDI7CisJCX0KKwkJLyogdGltZXN0YW1wICovCisJCXRtcF91MzIgPSBsZTMyX3RvX2NwdXAoKHZvaWQgKilwdHIpOworCQlwdHIgKz0gNDsKKwkJa3RpbWUgPSBzb2Z0aW5nX3JhdzJrdGltZShjYXJkLCB0bXBfdTMyKTsKKwkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQltZW1jcHkoJm1zZy5kYXRhWzBdLCBwdHIsIDgpOworCQlwdHIgKz0gODsKKwkJLyogdXBkYXRlIHNvY2tldCAqLworCQlpZiAoY21kICYgQ01EX0FDSykgeworCQkJLyogYWNrbm93bGVkZ2UsIHdhcyB0eCBtc2cgKi8KKwkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQlza2IgPSBwcml2LT5jYW4uZWNob19za2JbcHJpdi0+dHguZWNob19nZXRdOworCQkJaWYgKHNrYikKKwkJCQlza2ItPnRzdGFtcCA9IGt0aW1lOworCQkJY2FuX2dldF9lY2hvX3NrYihuZXRkZXYsIHByaXYtPnR4LmVjaG9fZ2V0KTsKKwkJCSsrcHJpdi0+dHguZWNob19nZXQ7CisJCQlpZiAocHJpdi0+dHguZWNob19nZXQgPj0gVFhfRUNIT19TS0JfTUFYKQorCQkJCXByaXYtPnR4LmVjaG9fZ2V0ID0gMDsKKwkJCWlmIChwcml2LT50eC5wZW5kaW5nKQorCQkJCS0tcHJpdi0+dHgucGVuZGluZzsKKwkJCWlmIChjYXJkLT50eC5wZW5kaW5nKQorCQkJCS0tY2FyZC0+dHgucGVuZGluZzsKKwkJCSsrbmV0ZGV2LT5zdGF0cy50eF9wYWNrZXRzOworCQkJaWYgKCEobXNnLmNhbl9pZCAmIENBTl9SVFJfRkxBRykpCisJCQkJbmV0ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBtc2cuY2FuX2RsYzsKKwkJfSBlbHNlIHsKKwkJCWludCByZXQ7CisKKwkJCXJldCA9IHNvZnRpbmdfbmV0ZGV2X3J4KG5ldGRldiwgJm1zZywga3RpbWUpOworCQkJaWYgKHJldCA9PSBORVRfUlhfU1VDQ0VTUykgeworCQkJCSsrbmV0ZGV2LT5zdGF0cy5yeF9wYWNrZXRzOworCQkJCWlmICghKG1zZy5jYW5faWQgJiBDQU5fUlRSX0ZMQUcpKQorCQkJCQluZXRkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IG1zZy5jYW5fZGxjOworCQkJfSBlbHNlIHsKKwkJCQkrK25ldGRldi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJCX0KKwkJfQorCX0KKwkrK2NudDsKKwlyZXR1cm4gY250OworfQorCisvKgorICogcmVhbCBpbnRlcnJ1cHQgaGFuZGxlcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdGhyZWFkKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJaW50IGosIG9mZnNldCwgd29ya19kb25lOworCisJd29ya19kb25lID0gMDsKKwlzcGluX2xvY2tfYmgoJmNhcmQtPnNwaW4pOworCXdoaWxlIChzb2Z0aW5nX2hhbmRsZV8xKGNhcmQpID4gMCkgeworCQkrK2NhcmQtPmlycS5zdmNfY291bnQ7CisJCSsrd29ya19kb25lOworCX0KKwlzcGluX3VubG9ja19iaCgmY2FyZC0+c3Bpbik7CisJLyogcmVzdW1lIHR4IHF1ZXVlJ3MgKi8KKwlvZmZzZXQgPSBjYXJkLT50eC5sYXN0X2J1czsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJaWYgKGNhcmQtPnR4LnBlbmRpbmcgPj0gVFhNQVgpCisJCQlicmVhazsKKwkJbmV0ZGV2ID0gY2FyZC0+bmV0WyhqICsgb2Zmc2V0ICsgMSkgJSBjYXJkLT5wZGF0LT5uYnVzXTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKwkJcHJpdiA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCWlmICghY2FuaWZfaXNfYWN0aXZlKG5ldGRldikpCisJCQkvKiBpdCBtYWtlcyBubyBzZW5zZSB0byB3YWtlIGRlYWQgYnVzc2VzICovCisJCQljb250aW51ZTsKKwkJaWYgKHByaXYtPnR4LnBlbmRpbmcgPj0gVFhfRUNIT19TS0JfTUFYKQorCQkJY29udGludWU7CisJCSsrd29ya19kb25lOworCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJfQorCXJldHVybiB3b3JrX2RvbmUgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOworfQorCisvKgorICogaW50ZXJydXB0IHJvdXRpbmVzOgorICogc2NoZWR1bGUgdGhlICdyZWFsIGludGVycnVwdCBoYW5kbGVyJworICovCitzdGF0aWMgaXJxcmV0dXJuX3Qgc29mdGluZ19pcnFfdjIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gKHN0cnVjdCBzb2Z0aW5nICopZGV2X2lkOworCXVpbnQ4X3QgaXI7CisKKwlpciA9IGlvcmVhZDgoJmNhcmQtPmRwcmFtW0RQUkFNX1YyX0lSUV9UT0hPU1RdKTsKKwlpb3dyaXRlOCgwLCAmY2FyZC0+ZHByYW1bRFBSQU1fVjJfSVJRX1RPSE9TVF0pOworCXJldHVybiAoMSA9PSBpcikgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKK30KKworc3RhdGljIGlycXJldHVybl90IHNvZnRpbmdfaXJxX3YxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IChzdHJ1Y3Qgc29mdGluZyAqKWRldl9pZDsKKwl1aW50OF90IGlyOworCisJaXIgPSBpb3JlYWQ4KCZjYXJkLT5kcHJhbVtEUFJBTV9JUlFfVE9IT1NUXSk7CisJaW93cml0ZTgoMCwgJmNhcmQtPmRwcmFtW0RQUkFNX0lSUV9UT0hPU1RdKTsKKwlyZXR1cm4gaXIgPyBJUlFfV0FLRV9USFJFQUQgOiBJUlFfTk9ORTsKK30KKworLyoKKyAqIG5ldGRldi9jYW5kZXYgaW50ZXItb3BlcmFiaWxpdHkKKyAqLworc3RhdGljIGludCBzb2Z0aW5nX25ldGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCWludCByZXQ7CisKKwkvKiBjaGVjayBvciBkZXRlcm1pbmUgYW5kIHNldCBiaXR0aW1lICovCisJcmV0ID0gb3Blbl9jYW5kZXYobmRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19uZXRkZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlpbnQgcmV0OworCisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKworCS8qIHNvZnRpbmcgY3ljbGUgZG9lcyBjbG9zZV9jYW5kZXYoKSAqLworCXJldCA9IHNvZnRpbmdfc3RhcnRzdG9wKG5kZXYsIDApOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc29mdGluZ19jYW5kZXZfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGVudW0gY2FuX21vZGUgbW9kZSkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDQU5fTU9ERV9TVEFSVDoKKwkJLyogc29mdGluZ19zdGFydHN0b3AgZG9lcyBjbG9zZV9jYW5kZXYoKSAqLworCQlyZXQgPSBzb2Z0aW5nX3N0YXJ0c3RvcChuZGV2LCAxKTsKKwkJcmV0dXJuIHJldDsKKwljYXNlIENBTl9NT0RFX1NUT1A6CisJY2FzZSBDQU5fTU9ERV9TTEVFUDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNvZnRpbmcgZGV2aWNlIG1hbmFnZW1lbnQgaGVscGVycworICovCitpbnQgc29mdGluZ19lbmFibGVfaXJxKHN0cnVjdCBzb2Z0aW5nICpjYXJkLCBpbnQgZW5hYmxlKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcmQtPmlycS5ucikgeworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGNhcmQtPmlycS5yZXF1ZXN0ZWQgJiYgIWVuYWJsZSkgeworCQlmcmVlX2lycShjYXJkLT5pcnEubnIsIGNhcmQpOworCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMDsKKwl9IGVsc2UgaWYgKCFjYXJkLT5pcnEucmVxdWVzdGVkICYmIGVuYWJsZSkgeworCQlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjYXJkLT5pcnEubnIsCisJCQkJKGNhcmQtPnBkYXQtPmdlbmVyYXRpb24gPj0gMikgPworCQkJCQlzb2Z0aW5nX2lycV92MiA6IHNvZnRpbmdfaXJxX3YxLAorCQkJCXNvZnRpbmdfaXJxX3RocmVhZCwgSVJRRl9TSEFSRUQsCisJCQkJZGV2X25hbWUoJmNhcmQtPnBkZXYtPmRldiksIGNhcmQpOworCQlpZiAocmV0KSB7CisJCQlkZXZfYWxlcnQoJmNhcmQtPnBkZXYtPmRldiwKKwkJCQkJInJlcXVlc3RfdGhyZWFkZWRfaXJxKCV1KSBmYWlsZWRcbiIsCisJCQkJCWNhcmQtPmlycS5ucik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWNhcmQtPmlycS5yZXF1ZXN0ZWQgPSAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc29mdGluZ19jYXJkX3NodXRkb3duKHN0cnVjdCBzb2Z0aW5nICpjYXJkKQoreworCWludCBmd191cCA9IDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKSkKKwkJLyogcmV0dXJuIC1FUkVTVEFSVFNZUyAqLzsKKwlmd191cCA9IGNhcmQtPmZ3LnVwOworCWNhcmQtPmZ3LnVwID0gMDsKKworCWlmIChjYXJkLT5pcnEucmVxdWVzdGVkICYmIGNhcmQtPmlycS5ucikgeworCQlmcmVlX2lycShjYXJkLT5pcnEubnIsIGNhcmQpOworCQljYXJkLT5pcnEucmVxdWVzdGVkID0gMDsKKwl9CisJaWYgKGZ3X3VwKSB7CisJCWlmIChjYXJkLT5wZGF0LT5lbmFibGVfaXJxKQorCQkJY2FyZC0+cGRhdC0+ZW5hYmxlX2lycShjYXJkLT5wZGV2LCAwKTsKKwkJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJCWlmIChjYXJkLT5wZGF0LT5yZXNldCkKKwkJCWNhcmQtPnBkYXQtPnJlc2V0KGNhcmQtPnBkZXYsIDEpOworCX0KKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworfQorCitzdGF0aWMgX19kZXZpbml0IGludCBzb2Z0aW5nX2NhcmRfYm9vdChzdHJ1Y3Qgc29mdGluZyAqY2FyZCkKK3sKKwlpbnQgcmV0LCBqOworCXN0YXRpYyBjb25zdCB1aW50OF90IHN0cmVhbVtdID0geworCQkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCB9OworCXVuc2lnbmVkIGNoYXIgYmFja1tzaXplb2Yoc3RyZWFtKV07CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjYXJkLT5mdy5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwlpZiAoY2FyZC0+ZncudXApIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQorCS8qIHJlc2V0IGJvYXJkICovCisJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMSk7CisJLyogYm9vdCBjYXJkICovCisJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwlmb3IgKGogPSAwOyAoaiArIHNpemVvZihzdHJlYW0pKSA8IGNhcmQtPmRwcmFtX3NpemU7CisJCQlqICs9IHNpemVvZihzdHJlYW0pKSB7CisKKwkJbWVtY3B5X3RvaW8oJmNhcmQtPmRwcmFtW2pdLCBzdHJlYW0sIHNpemVvZihzdHJlYW0pKTsKKwkJLyogZmx1c2ggSU8gY2FjaGUgKi8KKwkJbWIoKTsKKwkJbWVtY3B5X2Zyb21pbyhiYWNrLCAmY2FyZC0+ZHByYW1bal0sIHNpemVvZihzdHJlYW0pKTsKKworCQlpZiAoIW1lbWNtcChiYWNrLCBzdHJlYW0sIHNpemVvZihzdHJlYW0pKSkKKwkJCWNvbnRpbnVlOworCQkvKiBtZW1vcnkgaXMgbm90IGVxdWFsICovCisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZHByYW0gZmFpbGVkIGF0IDB4JTA0eFxuIiwgaik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gZmFpbGVkOworCX0KKwl3bWIoKTsKKwkvKiBsb2FkIGJvb3QgZmlybXdhcmUgKi8KKwlyZXQgPSBzb2Z0aW5nX2xvYWRfZncoY2FyZC0+cGRhdC0+Ym9vdC5mdywgY2FyZCwgY2FyZC0+ZHByYW0sCisJCQkJY2FyZC0+ZHByYW1fc2l6ZSwKKwkJCQljYXJkLT5wZGF0LT5ib290Lm9mZnMgLSBjYXJkLT5wZGF0LT5ib290LmFkZHIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZhaWxlZDsKKwkvKiBsb2FkIGxvYWRlciBmaXJtd2FyZSAqLworCXJldCA9IHNvZnRpbmdfbG9hZF9mdyhjYXJkLT5wZGF0LT5sb2FkLmZ3LCBjYXJkLCBjYXJkLT5kcHJhbSwKKwkJCQljYXJkLT5kcHJhbV9zaXplLAorCQkJCWNhcmQtPnBkYXQtPmxvYWQub2ZmcyAtIGNhcmQtPnBkYXQtPmxvYWQuYWRkcik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAwKTsKKwlzb2Z0aW5nX2Nscl9yZXNldF9kcHJhbShjYXJkKTsKKwlyZXQgPSBzb2Z0aW5nX2Jvb3Rsb2FkZXJfY29tbWFuZChjYXJkLCAwLCAiY2FyZCBib290Iik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbGVkOworCXJldCA9IHNvZnRpbmdfbG9hZF9hcHBfZncoY2FyZC0+cGRhdC0+YXBwLmZ3LCBjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwlyZXQgPSBzb2Z0aW5nX2NoaXBfcG93ZXJvbihjYXJkKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBmYWlsZWQ7CisKKwljYXJkLT5mdy51cCA9IDE7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwlyZXR1cm4gMDsKK2ZhaWxlZDoKKwljYXJkLT5mdy51cCA9IDA7CisJaWYgKGNhcmQtPnBkYXQtPmVuYWJsZV9pcnEpCisJCWNhcmQtPnBkYXQtPmVuYWJsZV9pcnEoY2FyZC0+cGRldiwgMCk7CisJc29mdGluZ19zZXRfcmVzZXRfZHByYW0oY2FyZCk7CisJaWYgKGNhcmQtPnBkYXQtPnJlc2V0KQorCQljYXJkLT5wZGF0LT5yZXNldChjYXJkLT5wZGV2LCAxKTsKKwltdXRleF91bmxvY2soJmNhcmQtPmZ3LmxvY2spOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBuZXRkZXYgc3lzZnMKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19jaGFubmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHRvX25ldF9kZXYoZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZ19wcml2ICpwcml2ID0gbmV0ZGV2MnNvZnRpbmcobmRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgcHJpdi0+aW5kZXgpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2NoaXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBwcml2LT5jaGlwKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTAyeFxuIiwgcHJpdi0+b3V0cHV0KTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gdG9fbmV0X2RldihkZXYpOworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXYgPSBuZXRkZXYyc29mdGluZyhuZGV2KTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHByaXYtPmNhcmQ7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJdmFsICY9IDB4RkY7CisKKwlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmNhcmQtPmZ3LmxvY2spOworCWlmIChyZXQpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjYXJkLT5mdy5sb2NrKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJcHJpdi0+b3V0cHV0ID0gdmFsOworCW11dGV4X3VubG9jaygmY2FyZC0+ZncubG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3QgREVWSUNFX0FUVFIoY2hhbm5lbCwgU19JUlVHTywgc2hvd19jaGFubmVsLCBOVUxMKTsKK3N0YXRpYyBjb25zdCBERVZJQ0VfQVRUUihjaGlwLCBTX0lSVUdPLCBzaG93X2NoaXAsIE5VTEwpOworc3RhdGljIGNvbnN0IERFVklDRV9BVFRSKG91dHB1dCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfb3V0cHV0LCBzdG9yZV9vdXRwdXQpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3QgbmV0ZGV2X3N5c2ZzX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX2NoYW5uZWwuYXR0ciwKKwkmZGV2X2F0dHJfY2hpcC5hdHRyLAorCSZkZXZfYXR0cl9vdXRwdXQuYXR0ciwKKwlOVUxMLAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG5ldGRldl9zeXNmc19ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopbmV0ZGV2X3N5c2ZzX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzb2Z0aW5nX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuID0gc29mdGluZ19uZXRkZXZfb3BlbiwKKwkubmRvX3N0b3AgPSBzb2Z0aW5nX25ldGRldl9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAk9IHNvZnRpbmdfbmV0ZGV2X3N0YXJ0X3htaXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3Qgc29mdGluZ19idHJfY29uc3QgPSB7CisJLm5hbWUgPSAic29mdGluZyIsCisJLnRzZWcxX21pbiA9IDEsCisJLnRzZWcxX21heCA9IDE2LAorCS50c2VnMl9taW4gPSAxLAorCS50c2VnMl9tYXggPSA4LAorCS5zandfbWF4ID0gNCwgLyogb3ZlcnJ1bGVkICovCisJLmJycF9taW4gPSAxLAorCS5icnBfbWF4ID0gMzIsIC8qIG92ZXJydWxlZCAqLworCS5icnBfaW5jID0gMSwKK307CisKKworc3RhdGljIF9fZGV2aW5pdCBzdHJ1Y3QgbmV0X2RldmljZSAqc29mdGluZ19uZXRkZXZfY3JlYXRlKHN0cnVjdCBzb2Z0aW5nICpjYXJkLAorCQl1aW50MTZfdCBjaGlwX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IHNvZnRpbmdfcHJpdiAqcHJpdjsKKworCW5ldGRldiA9IGFsbG9jX2NhbmRldihzaXplb2YoKnByaXYpLCBUWF9FQ0hPX1NLQl9NQVgpOworCWlmICghbmV0ZGV2KSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiYWxsb2NfY2FuZGV2IGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwlwcml2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlwcml2LT5uZXRkZXYgPSBuZXRkZXY7CisJcHJpdi0+Y2FyZCA9IGNhcmQ7CisJbWVtY3B5KCZwcml2LT5idHJfY29uc3QsICZzb2Z0aW5nX2J0cl9jb25zdCwgc2l6ZW9mKHByaXYtPmJ0cl9jb25zdCkpOworCXByaXYtPmJ0cl9jb25zdC5icnBfbWF4ID0gY2FyZC0+cGRhdC0+bWF4X2JycDsKKwlwcml2LT5idHJfY29uc3Quc2p3X21heCA9IGNhcmQtPnBkYXQtPm1heF9zanc7CisJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZwcml2LT5idHJfY29uc3Q7CisJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSA4MDAwMDAwOworCXByaXYtPmNoaXAgPSBjaGlwX2lkOworCXByaXYtPm91dHB1dCA9IHNvZnRpbmdfZGVmYXVsdF9vdXRwdXQobmV0ZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZjYXJkLT5wZGV2LT5kZXYpOworCisJbmV0ZGV2LT5mbGFncyB8PSBJRkZfRUNITzsKKwluZXRkZXYtPm5ldGRldl9vcHMgPSAmc29mdGluZ19uZXRkZXZfb3BzOworCXByaXYtPmNhbi5kb19zZXRfbW9kZSA9IHNvZnRpbmdfY2FuZGV2X3NldF9tb2RlOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTOworCisJcmV0dXJuIG5ldGRldjsKK30KKworc3RhdGljIF9fZGV2aW5pdCBpbnQgc29mdGluZ19uZXRkZXZfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlpbnQgcmV0OworCisJbmV0ZGV2LT5zeXNmc19ncm91cHNbMF0gPSAmbmV0ZGV2X3N5c2ZzX2dyb3VwOworCXJldCA9IHJlZ2lzdGVyX2NhbmRldihuZXRkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2FsZXJ0KCZuZXRkZXYtPmRldiwgInJlZ2lzdGVyIGZhaWxlZFxuIik7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzb2Z0aW5nX25ldGRldl9jbGVhbnVwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJdW5yZWdpc3Rlcl9jYW5kZXYobmV0ZGV2KTsKKwlmcmVlX2NhbmRldihuZXRkZXYpOworfQorCisvKgorICogc3lzZnMgZm9yIFBsYXRmb3JtIGRldmljZQorICovCisjZGVmaW5lIERFVl9BVFRSX1JPKG5hbWUsIG1lbWJlcikgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCBzb2Z0aW5nICpjYXJkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGNhcmQtPm1lbWJlcik7IFwKK30gXAorc3RhdGljIERFVklDRV9BVFRSKG5hbWUsIDA0NDQsIHNob3dfIyNuYW1lLCBOVUxMKQorCisjZGVmaW5lIERFVl9BVFRSX1JPX1NUUihuYW1lLCBtZW1iZXIpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNuYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgXAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjYXJkLT5tZW1iZXIpOyBcCit9IFwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCAwNDQ0LCBzaG93XyMjbmFtZSwgTlVMTCkKKworREVWX0FUVFJfUk8oc2VyaWFsLCBpZC5zZXJpYWwpOworREVWX0FUVFJfUk9fU1RSKGZpcm13YXJlLCBwZGF0LT5hcHAuZncpOworREVWX0FUVFJfUk8oZmlybXdhcmVfdmVyc2lvbiwgaWQuZndfdmVyc2lvbik7CitERVZfQVRUUl9ST19TVFIoaGFyZHdhcmUsIHBkYXQtPm5hbWUpOworREVWX0FUVFJfUk8oaGFyZHdhcmVfdmVyc2lvbiwgaWQuaHdfdmVyc2lvbik7CitERVZfQVRUUl9STyhsaWNlbnNlLCBpZC5saWNlbnNlKTsKK0RFVl9BVFRSX1JPKGZyZXF1ZW5jeSwgaWQuZnJlcSk7CitERVZfQVRUUl9STyh0eHBlbmRpbmcsIHR4LnBlbmRpbmcpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc29mdGluZ19wZGV2X2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3NlcmlhbC5hdHRyLAorCSZkZXZfYXR0cl9maXJtd2FyZS5hdHRyLAorCSZkZXZfYXR0cl9maXJtd2FyZV92ZXJzaW9uLmF0dHIsCisJJmRldl9hdHRyX2hhcmR3YXJlLmF0dHIsCisJJmRldl9hdHRyX2hhcmR3YXJlX3ZlcnNpb24uYXR0ciwKKwkmZGV2X2F0dHJfbGljZW5zZS5hdHRyLAorCSZkZXZfYXR0cl9mcmVxdWVuY3kuYXR0ciwKKwkmZGV2X2F0dHJfdHhwZW5kaW5nLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNvZnRpbmdfcGRldl9ncm91cCA9IHsKKwkubmFtZSA9IE5VTEwsCisJLmF0dHJzID0gc29mdGluZ19wZGV2X2F0dHJzLAorfTsKKworLyoKKyAqIHBsYXRmb3JtIGRyaXZlcgorICovCitzdGF0aWMgX19kZXZleGl0IGludCBzb2Z0aW5nX3BkZXZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNvZnRpbmcgKmNhcmQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQgajsKKworCS8qIGZpcnN0LCBkaXNhYmxlIGNhcmQqLworCXNvZnRpbmdfY2FyZF9zaHV0ZG93bihjYXJkKTsKKworCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGNhcmQtPm5ldCk7ICsraikgeworCQlpZiAoIWNhcmQtPm5ldFtqXSkKKwkJCWNvbnRpbnVlOworCQlzb2Z0aW5nX25ldGRldl9jbGVhbnVwKGNhcmQtPm5ldFtqXSk7CisJCWNhcmQtPm5ldFtqXSA9IE5VTEw7CisJfQorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworCisJaW91bm1hcChjYXJkLT5kcHJhbSk7CisJa2ZyZWUoY2FyZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IHNvZnRpbmdfcGRldl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWNvbnN0IHN0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgKnBkYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgc29mdGluZyAqY2FyZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBzb2Z0aW5nX3ByaXYgKnByaXY7CisJc3RydWN0IHJlc291cmNlICpwcmVzOworCWludCByZXQ7CisJaW50IGo7CisKKwlpZiAoIXBkYXQpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIm5vIHBsYXRmb3JtIGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKHBkYXQtPm5idXMgPiBBUlJBWV9TSVpFKGNhcmQtPm5ldCkpIHsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIiV1IG5ldHM/P1xuIiwgcGRhdC0+bmJ1cyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2FyZC0+cGRhdCA9IHBkYXQ7CisJY2FyZC0+cGRldiA9IHBkZXY7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisJbXV0ZXhfaW5pdCgmY2FyZC0+ZncubG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmNhcmQtPnNwaW4pOworCisJcmV0ID0gLUVJTlZBTDsKKwlwcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXByZXMpCisJCWdvdG8gcGxhdGZvcm1fcmVzb3VyY2VfZmFpbGVkOzsKKwljYXJkLT5kcHJhbV9waHlzID0gcHJlcy0+c3RhcnQ7CisJY2FyZC0+ZHByYW1fc2l6ZSA9IHByZXMtPmVuZCAtIHByZXMtPnN0YXJ0ICsgMTsKKwljYXJkLT5kcHJhbSA9IGlvcmVtYXBfbm9jYWNoZShjYXJkLT5kcHJhbV9waHlzLCBjYXJkLT5kcHJhbV9zaXplKTsKKwlpZiAoIWNhcmQtPmRwcmFtKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAiZHByYW0gaW9yZW1hcCBmYWlsZWRcbiIpOworCQlnb3RvIGlvcmVtYXBfZmFpbGVkOworCX0KKworCXByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOworCWlmIChwcmVzKQorCQljYXJkLT5pcnEubnIgPSBwcmVzLT5zdGFydDsKKworCS8qIHJlc2V0IGNhcmQgKi8KKwlyZXQgPSBzb2Z0aW5nX2NhcmRfYm9vdChjYXJkKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfYWxlcnQoJnBkZXYtPmRldiwgImZhaWxlZCB0byBib290XG4iKTsKKwkJZ290byBib290X2ZhaWxlZDsKKwl9CisKKwkvKiBvbmx5IG5vdywgdGhlIGNoaXAncyBhcmUga25vd24gKi8KKwljYXJkLT5pZC5mcmVxID0gY2FyZC0+cGRhdC0+ZnJlcTsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZzb2Z0aW5nX3BkZXZfZ3JvdXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9hbGVydCgmY2FyZC0+cGRldi0+ZGV2LCAic3lzZnMgZmFpbGVkXG4iKTsKKwkJZ290byBzeXNmc19mYWlsZWQ7CisJfQorCisJcmV0ID0gLUVOT01FTTsKKwlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShjYXJkLT5uZXQpOyArK2opIHsKKwkJY2FyZC0+bmV0W2pdID0gbmV0ZGV2ID0KKwkJCXNvZnRpbmdfbmV0ZGV2X2NyZWF0ZShjYXJkLCBjYXJkLT5pZC5jaGlwW2pdKTsKKwkJaWYgKCFuZXRkZXYpIHsKKwkJCWRldl9hbGVydCgmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1ha2UgY2FuWyVpXSIsIGopOworCQkJZ290byBuZXRkZXZfZmFpbGVkOworCQl9CisJCXByaXYgPSBuZXRkZXZfcHJpdihjYXJkLT5uZXRbal0pOworCQlwcml2LT5pbmRleCA9IGo7CisJCXJldCA9IHNvZnRpbmdfbmV0ZGV2X3JlZ2lzdGVyKG5ldGRldik7CisJCWlmIChyZXQpIHsKKwkJCWZyZWVfY2FuZGV2KG5ldGRldik7CisJCQljYXJkLT5uZXRbal0gPSBOVUxMOworCQkJZGV2X2FsZXJ0KCZjYXJkLT5wZGV2LT5kZXYsCisJCQkJCSJmYWlsZWQgdG8gcmVnaXN0ZXIgY2FuWyVpXVxuIiwgaik7CisJCQlnb3RvIG5ldGRldl9mYWlsZWQ7CisJCX0KKwl9CisJZGV2X2luZm8oJmNhcmQtPnBkZXYtPmRldiwgIiVzIHJlYWR5LlxuIiwgY2FyZC0+cGRhdC0+bmFtZSk7CisJcmV0dXJuIDA7CisKK25ldGRldl9mYWlsZWQ6CisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoY2FyZC0+bmV0KTsgKytqKSB7CisJCWlmICghY2FyZC0+bmV0W2pdKQorCQkJY29udGludWU7CisJCXNvZnRpbmdfbmV0ZGV2X2NsZWFudXAoY2FyZC0+bmV0W2pdKTsKKwl9CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJnNvZnRpbmdfcGRldl9ncm91cCk7CitzeXNmc19mYWlsZWQ6CisJc29mdGluZ19jYXJkX3NodXRkb3duKGNhcmQpOworYm9vdF9mYWlsZWQ6CisJaW91bm1hcChjYXJkLT5kcHJhbSk7Citpb3JlbWFwX2ZhaWxlZDoKK3BsYXRmb3JtX3Jlc291cmNlX2ZhaWxlZDoKKwlrZnJlZShjYXJkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzb2Z0aW5nX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJzb2Z0aW5nIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUgPSBzb2Z0aW5nX3BkZXZfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNvZnRpbmdfcGRldl9yZW1vdmUpLAorfTsKKworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzb2Z0aW5nIik7CisKK3N0YXRpYyBpbnQgX19pbml0IHNvZnRpbmdfc3RhcnQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzb2Z0aW5nX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzb2Z0aW5nX3N0b3Aodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc29mdGluZ19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzb2Z0aW5nX3N0YXJ0KTsKK21vZHVsZV9leGl0KHNvZnRpbmdfc3RvcCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU29mdGluZyBEUFJBTSBDQU4gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJLdXJ0IFZhbiBEaWpjayA8a3VydC52YW4uZGlqY2tAZWlhLmJlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oIGIvZHJpdmVycy9uZXQvY2FuL3NvZnRpbmcvc29mdGluZ19wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYmY2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9jYW4vc29mdGluZy9zb2Z0aW5nX3BsYXRmb3JtLmgKQEAgLTAsMCArMSw0MCBAQAorCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpZm5kZWYgX1NPRlRJTkdfREVWSUNFX0hfCisjZGVmaW5lIF9TT0ZUSU5HX0RFVklDRV9IXworCisvKiBzb2Z0aW5nIGZpcm13YXJlIGRpcmVjdG9yeSBwcmVmaXggKi8KKyNkZWZpbmUgZndfZGlyICJzb2Z0aW5nLTQuNi8iCisKK3N0cnVjdCBzb2Z0aW5nX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBtYW5mOworCXVuc2lnbmVkIGludCBwcm9kOworCS8qCisJICogZ2VuZXJhdGlvbgorCSAqIDFzdCB3aXRoIE5FQyBvciBTSkExMDAwCisJICogOGJpdCwgZXhjbHVzaXZlIGludGVycnVwdCwgLi4uCisJICogMm5kIG9ubHkgU0pBMTAwMAorCSAqIDE2Yml0LCBzaGFyZWQgaW50ZXJydXB0CisJICovCisJaW50IGdlbmVyYXRpb247CisJaW50IG5idXM7IC8qICMgYnVzc2VzIG9uIGRldmljZSAqLworCXVuc2lnbmVkIGludCBmcmVxOyAvKiBvcGVyYXRpbmcgZnJlcXVlbmN5IGluIEh6ICovCisJdW5zaWduZWQgaW50IG1heF9icnA7CisJdW5zaWduZWQgaW50IG1heF9zanc7CisJdW5zaWduZWQgbG9uZyBkcHJhbV9zaXplOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzOworCQl1bnNpZ25lZCBsb25nIGFkZHI7CisJCWNvbnN0IGNoYXIgKmZ3OworCX0gYm9vdCwgbG9hZCwgYXBwOworCS8qCisJICogcmVzZXQoKSBmdW5jdGlvbgorCSAqIGJyaW5nIHBkZXYgaW4gb3Igb3V0IG9mIHJlc2V0LCBkZXBlbmRpbmcgb24gdmFsdWUKKwkgKi8KKwlpbnQgKCpyZXNldCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IHZhbHVlKTsKKwlpbnQgKCplbmFibGVfaXJxKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgdmFsdWUpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jbmljLmMgYi9kcml2ZXJzL25ldC9jbmljLmMKaW5kZXggMjYzYTI5NC4uMzAyYmU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2NuaWMuYwpAQCAtNjk5LDEzICs2OTksMTMgQEAKIHN0YXRpYyB2b2lkIGNuaWNfc2V0dXBfcGFnZV90Ymwoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBjbmljX2RtYSAqZG1hKQogewogCWludCBpOwotCXUzMiAqcGFnZV90YWJsZSA9IGRtYS0+cGd0Ymw7CisJX19sZTMyICpwYWdlX3RhYmxlID0gKF9fbGUzMiAqKSBkbWEtPnBndGJsOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJLyogRWFjaCBlbnRyeSBuZWVkcyB0byBiZSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gKi8KLQkJKnBhZ2VfdGFibGUgPSAodTMyKSAoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKKwkJKnBhZ2VfdGFibGUgPSBjcHVfdG9fbGUzMigodTY0KSBkbWEtPnBnX21hcF9hcnJbaV0gPj4gMzIpOwogCQlwYWdlX3RhYmxlKys7Ci0JCSpwYWdlX3RhYmxlID0gKHUzMikgZG1hLT5wZ19tYXBfYXJyW2ldOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmYpOwogCQlwYWdlX3RhYmxlKys7CiAJfQogfQpAQCAtNzEzLDEzICs3MTMsMTMgQEAKIHN0YXRpYyB2b2lkIGNuaWNfc2V0dXBfcGFnZV90YmxfbGUoc3RydWN0IGNuaWNfZGV2ICpkZXYsIHN0cnVjdCBjbmljX2RtYSAqZG1hKQogewogCWludCBpOwotCXUzMiAqcGFnZV90YWJsZSA9IGRtYS0+cGd0Ymw7CisJX19sZTMyICpwYWdlX3RhYmxlID0gKF9fbGUzMiAqKSBkbWEtPnBndGJsOwogCiAJZm9yIChpID0gMDsgaSA8IGRtYS0+bnVtX3BhZ2VzOyBpKyspIHsKIAkJLyogRWFjaCBlbnRyeSBuZWVkcyB0byBiZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdC4gKi8KLQkJKnBhZ2VfdGFibGUgPSBkbWEtPnBnX21hcF9hcnJbaV0gJiAweGZmZmZmZmZmOworCQkqcGFnZV90YWJsZSA9IGNwdV90b19sZTMyKGRtYS0+cGdfbWFwX2FycltpXSAmIDB4ZmZmZmZmZmYpOwogCQlwYWdlX3RhYmxlKys7Ci0JCSpwYWdlX3RhYmxlID0gKHUzMikgKCh1NjQpIGRtYS0+cGdfbWFwX2FycltpXSA+PiAzMik7CisJCSpwYWdlX3RhYmxlID0gY3B1X3RvX2xlMzIoKHU2NCkgZG1hLT5wZ19tYXBfYXJyW2ldID4+IDMyKTsKIAkJcGFnZV90YWJsZSsrOwogCX0KIH0KQEAgLTI3NjAsNiArMjc2MCw4IEBACiAJdTMyIHN0YXR1c19pZHggPSAodTE2KSAqY3AtPmtjcTEuc3RhdHVzX2lkeF9wdHI7CiAJaW50IGtjcWVfY250OwogCisJLyogc3RhdHVzIGJsb2NrIGluZGV4IG11c3QgYmUgcmVhZCBiZWZvcmUgcmVhZGluZyBvdGhlciBmaWVsZHMgKi8KKwlybWIoKTsKIAljcC0+a3dxX2Nvbl9pZHggPSAqY3AtPmt3cV9jb25faWR4X3B0cjsKIAogCXdoaWxlICgoa2NxZV9jbnQgPSBjbmljX2dldF9rY3FlcyhkZXYsICZjcC0+a2NxMSkpKSB7CkBAIC0yNzcwLDYgKzI3NzIsOCBAQAogCQliYXJyaWVyKCk7CiAJCWlmIChzdGF0dXNfaWR4ICE9ICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cikgewogCQkJc3RhdHVzX2lkeCA9ICh1MTYpICpjcC0+a2NxMS5zdGF0dXNfaWR4X3B0cjsKKwkJCS8qIHN0YXR1cyBibG9jayBpbmRleCBtdXN0IGJlIHJlYWQgZmlyc3QgKi8KKwkJCXJtYigpOwogCQkJY3AtPmt3cV9jb25faWR4ID0gKmNwLT5rd3FfY29uX2lkeF9wdHI7CiAJCX0gZWxzZQogCQkJYnJlYWs7CkBAIC0yODg4LDYgKzI4OTIsOCBAQAogCXUzMiBsYXN0X3N0YXR1cyA9ICppbmZvLT5zdGF0dXNfaWR4X3B0cjsKIAlpbnQga2NxZV9jbnQ7CiAKKwkvKiBzdGF0dXMgYmxvY2sgaW5kZXggbXVzdCBiZSByZWFkIGJlZm9yZSByZWFkaW5nIHRoZSBLQ1EgKi8KKwlybWIoKTsKIAl3aGlsZSAoKGtjcWVfY250ID0gY25pY19nZXRfa2NxZXMoZGV2LCBpbmZvKSkpIHsKIAogCQlzZXJ2aWNlX2tjcWVzKGRldiwga2NxZV9jbnQpOwpAQCAtMjg5OCw2ICsyOTA0LDggQEAKIAkJCWJyZWFrOwogCiAJCWxhc3Rfc3RhdHVzID0gKmluZm8tPnN0YXR1c19pZHhfcHRyOworCQkvKiBzdGF0dXMgYmxvY2sgaW5kZXggbXVzdCBiZSByZWFkIGJlZm9yZSByZWFkaW5nIHRoZSBLQ1EgKi8KKwkJcm1iKCk7CiAJfQogCXJldHVybiBsYXN0X3N0YXR1czsKIH0KQEAgLTI5MDYsMjYgKzI5MTQsMzUgQEAKIHsKIAlzdHJ1Y3QgY25pY19kZXYgKmRldiA9IChzdHJ1Y3QgY25pY19kZXYgKikgZGF0YTsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQl1MzIgc3RhdHVzX2lkeDsKKwl1MzIgc3RhdHVzX2lkeCwgbmV3X3N0YXR1c19pZHg7CiAKIAlpZiAodW5saWtlbHkoIXRlc3RfYml0KENOSUNfRl9DTklDX1VQLCAmZGV2LT5mbGFncykpKQogCQlyZXR1cm47CiAKLQlzdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMSk7CisJd2hpbGUgKDEpIHsKKwkJc3RhdHVzX2lkeCA9IGNuaWNfc2VydmljZV9ibngyeF9rY3EoZGV2LCAmY3AtPmtjcTEpOwogCi0JQ05JQ19XUjE2KGRldiwgY3AtPmtjcTEuaW9fYWRkciwgY3AtPmtjcTEuc3dfcHJvZF9pZHggKyBNQVhfS0NRX0lEWCk7CisJCUNOSUNfV1IxNihkZXYsIGNwLT5rY3ExLmlvX2FkZHIsCisJCQkgIGNwLT5rY3ExLnN3X3Byb2RfaWR4ICsgTUFYX0tDUV9JRFgpOwogCi0JaWYgKEJOWDJYX0NISVBfSVNfRTIoY3AtPmNoaXBfaWQpKSB7Ci0JCXN0YXR1c19pZHggPSBjbmljX3NlcnZpY2VfYm54Mnhfa2NxKGRldiwgJmNwLT5rY3EyKTsKKwkJaWYgKCFCTlgyWF9DSElQX0lTX0UyKGNwLT5jaGlwX2lkKSkgeworCQkJY25pY19hY2tfYm54MnhfaW50KGRldiwgY3AtPmJueDJ4X2lndV9zYl9pZCwgVVNUT1JNX0lELAorCQkJCQkgICBzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7CisJCQlicmVhazsKKwkJfQorCisJCW5ld19zdGF0dXNfaWR4ID0gY25pY19zZXJ2aWNlX2JueDJ4X2tjcShkZXYsICZjcC0+a2NxMik7CisKKwkJaWYgKG5ld19zdGF0dXNfaWR4ICE9IHN0YXR1c19pZHgpCisJCQljb250aW51ZTsKIAogCQlDTklDX1dSMTYoZGV2LCBjcC0+a2NxMi5pb19hZGRyLCBjcC0+a2NxMi5zd19wcm9kX2lkeCArCiAJCQkgIE1BWF9LQ1FfSURYKTsKIAogCQljbmljX2Fja19pZ3Vfc2IoZGV2LCBjcC0+Ym54MnhfaWd1X3NiX2lkLCBJR1VfU0VHX0FDQ0VTU19ERUYsCiAJCQkJc3RhdHVzX2lkeCwgSUdVX0lOVF9FTkFCTEUsIDEpOwotCX0gZWxzZSB7Ci0JCWNuaWNfYWNrX2JueDJ4X2ludChkZXYsIGNwLT5ibngyeF9pZ3Vfc2JfaWQsIFVTVE9STV9JRCwKLQkJCQkgICBzdGF0dXNfaWR4LCBJR1VfSU5UX0VOQUJMRSwgMSk7CisKKwkJYnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMgYi9kcml2ZXJzL25ldC9jeGdiNC9jeGdiNF9tYWluLmMKaW5kZXggMDU5YzFlZS4uZWMzNWQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjQvY3hnYjRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0L2N4Z2I0X21haW4uYwpAQCAtMjcxMCw2ICsyNzEwLDggQEAKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBwaS0+YWRhcHRlcjsKIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKIAlpZiAoIShhZGFwdGVyLT5mbGFncyAmIEZVTExfSU5JVF9ET05FKSkgewogCQllcnIgPSBjeGdiX3VwKGFkYXB0ZXIpOwogCQlpZiAoZXJyIDwgMCkKQEAgLTM2NjEsNyArMzY2Myw2IEBACiAJCXBpLT54YWN0X2FkZHJfZmlsdCA9IC0xOwogCQlwaS0+cnhfb2ZmbG9hZCA9IFJYX0NTTzsKIAkJcGktPnBvcnRfaWQgPSBpOwotCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCQluZXRkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBUU09fRkxBR1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi9jeGdiNHZmX21haW4uYwppbmRleCA1NjE2NmFlLi42YWFkNjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiNHZmL2N4Z2I0dmZfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2I0dmYvY3hnYjR2Zl9tYWluLmMKQEAgLTIwNDAsNyArMjA0MCw3IEBACiB7CiAJaW50IGk7CiAKLQlCVUdfT04oYWRhcHRlci0+ZGVidWdmc19yb290ID09IE5VTEwpOworCUJVR19PTihJU19FUlJfT1JfTlVMTChhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpKTsKIAogCS8qCiAJICogRGVidWdmcyBzdXBwb3J0IGlzIGJlc3QgZWZmb3J0LgpAQCAtMjA2MSw3ICsyMDYxLDcgQEAKICAqLwogc3RhdGljIHZvaWQgY2xlYW51cF9kZWJ1Z2ZzKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewotCUJVR19PTihhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QgPT0gTlVMTCk7CisJQlVHX09OKElTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpOwogCiAJLyoKIAkgKiBVbmxpa2Ugb3VyIHNpc3RlciByb3V0aW5lIGNsZWFudXBfcHJvYygpLCB3ZSBkb24ndCBuZWVkIHRvIHJlbW92ZQpAQCAtMjQ4OSwxNyArMjQ4OSw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAogCS8qCi0JICogVmV0IG91ciBtb2R1bGUgcGFyYW1ldGVycy4KLQkgKi8KLQlpZiAobXNpICE9IE1TSV9NU0lYICYmIG1zaSAhPSBNU0lfTVNJKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImJhZCBtb2R1bGUgcGFyYW1ldGVyIG1zaT0lZDsgbXVzdCBiZSAlZCIKLQkJCSIgKE1TSS1YIG9yIE1TSSkgb3IgJWQgKE1TSSlcbiIsIG1zaSwgTVNJX01TSVgsCi0JCQlNU0lfTVNJKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBlcnJfb3V0OwotCX0KLQotCS8qCiAJICogUHJpbnQgb3VyIGRyaXZlciBiYW5uZXIgdGhlIGZpcnN0IHRpbWUgd2UncmUgY2FsbGVkIHRvIGluaXRpYWxpemUgYQogCSAqIGRldmljZS4KIAkgKi8KQEAgLTI3MTEsMTEgKzI3MDAsMTEgQEAKIAkvKgogCSAqIFNldCB1cCBvdXIgZGVidWdmcyBlbnRyaWVzLgogCSAqLwotCWlmIChjeGdiNHZmX2RlYnVnZnNfcm9vdCkgeworCWlmICghSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKSB7CiAJCWFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9CiAJCQlkZWJ1Z2ZzX2NyZWF0ZV9kaXIocGNpX25hbWUocGRldiksCiAJCQkJCSAgIGN4Z2I0dmZfZGVidWdmc19yb290KTsKLQkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCA9PSBOVUxMKQorCQlpZiAoSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIGRlYnVnZnMiCiAJCQkJICIgZGlyZWN0b3J5Iik7CiAJCWVsc2UKQEAgLTI3NzAsNyArMjc1OSw3IEBACiAJICovCiAKIGVycl9mcmVlX2RlYnVnZnM6Ci0JaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkgeworCWlmICghSVNfRVJSX09SX05VTEwoYWRhcHRlci0+ZGVidWdmc19yb290KSkgewogCQljbGVhbnVwX2RlYnVnZnMoYWRhcHRlcik7CiAJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpOwogCX0KQEAgLTI4MDIsNyArMjc5MSw2IEBACiBlcnJfZGlzYWJsZV9kZXZpY2U6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCi1lcnJfb3V0OgogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI4NDAsNyArMjgyOCw3IEBACiAJCS8qCiAJCSAqIFRlYXIgZG93biBvdXIgZGVidWdmcyBlbnRyaWVzLgogCQkgKi8KLQkJaWYgKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkgeworCQlpZiAoIUlTX0VSUl9PUl9OVUxMKGFkYXB0ZXItPmRlYnVnZnNfcm9vdCkpIHsKIAkJCWNsZWFudXBfZGVidWdmcyhhZGFwdGVyKTsKIAkJCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShhZGFwdGVyLT5kZWJ1Z2ZzX3Jvb3QpOwogCQl9CkBAIC0yODc0LDYgKzI4NjIsNDYgQEAKIH0KIAogLyoKKyAqICJTaHV0ZG93biIgcXVpZXNjZSB0aGUgZGV2aWNlLCBzdG9wcGluZyBJbmdyZXNzIFBhY2tldCBhbmQgSW50ZXJydXB0CisgKiBkZWxpdmVyeS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZleGl0IGN4Z2I0dmZfcGNpX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyOworCWludCBwaWR4OworCisJYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIWFkYXB0ZXIpCisJCXJldHVybjsKKworCS8qCisJICogRGlzYWJsZSBhbGwgVmlydHVhbCBJbnRlcmZhY2VzLiAgVGhpcyB3aWxsIHNodXQgZG93biB0aGUKKwkgKiBkZWxpdmVyeSBvZiBhbGwgaW5ncmVzcyBwYWNrZXRzIGludG8gdGhlIGNoaXAgZm9yIHRoZXNlCisJICogVmlydHVhbCBJbnRlcmZhY2VzLgorCSAqLworCWZvcl9lYWNoX3BvcnQoYWRhcHRlciwgcGlkeCkgeworCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCQlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKworCQlpZiAoIXRlc3RfYml0KHBpZHgsICZhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApKQorCQkJY29udGludWU7CisKKwkJbmV0ZGV2ID0gYWRhcHRlci0+cG9ydFtwaWR4XTsKKwkJaWYgKCFuZXRkZXYpCisJCQljb250aW51ZTsKKworCQlwaSA9IG5ldGRldl9wcml2KG5ldGRldik7CisJCXQ0dmZfZW5hYmxlX3ZpKGFkYXB0ZXIsIHBpLT52aWlkLCBmYWxzZSwgZmFsc2UpOworCX0KKworCS8qCisJICogRnJlZSB1cCBhbGwgUXVldWVzIHdoaWNoIHdpbGwgcHJldmVudCBmdXJ0aGVyIERNQSBhbmQKKwkgKiBJbnRlcnJ1cHRzIGFsbG93aW5nIHZhcmlvdXMgaW50ZXJuYWwgcGF0aHdheXMgdG8gZHJhaW4uCisJICovCisJdDR2Zl9mcmVlX3NnZV9yZXNvdXJjZXMoYWRhcHRlcik7Cit9CisKKy8qCiAgKiBQQ0kgRGV2aWNlIHJlZ2lzdHJhdGlvbiBkYXRhIHN0cnVjdHVyZXMuCiAgKi8KICNkZWZpbmUgQ0hfREVWSUNFKGRldmlkLCBpZHgpIFwKQEAgLTI5MDYsNiArMjkzNCw3IEBACiAJLmlkX3RhYmxlCT0gY3hnYjR2Zl9wY2lfdGJsLAogCS5wcm9iZQkJPSBjeGdiNHZmX3BjaV9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGN4Z2I0dmZfcGNpX3JlbW92ZSksCisJLnNodXRkb3duCT0gX19kZXZleGl0X3AoY3hnYjR2Zl9wY2lfc2h1dGRvd24pLAogfTsKIAogLyoKQEAgLTI5MTUsMTQgKzI5NDQsMjUgQEAKIHsKIAlpbnQgcmV0OwogCisJLyoKKwkgKiBWZXQgb3VyIG1vZHVsZSBwYXJhbWV0ZXJzLgorCSAqLworCWlmIChtc2kgIT0gTVNJX01TSVggJiYgbXNpICE9IE1TSV9NU0kpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRQorCQkgICAgICAgIjogYmFkIG1vZHVsZSBwYXJhbWV0ZXIgbXNpPSVkOyBtdXN0IGJlICVkIgorCQkgICAgICAgIiAoTVNJLVggb3IgTVNJKSBvciAlZCAoTVNJKVxuIiwKKwkJICAgICAgIG1zaSwgTVNJX01TSVgsIE1TSV9NU0kpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAkvKiBEZWJ1Z2ZzIHN1cHBvcnQgaXMgb3B0aW9uYWwsIGp1c3Qgd2FybiBpZiB0aGlzIGZhaWxzICovCiAJY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoS0JVSUxEX01PRE5BTUUsIE5VTEwpOwotCWlmICghY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpCisJaWYgKElTX0VSUl9PUl9OVUxMKGN4Z2I0dmZfZGVidWdmc19yb290KSkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBLQlVJTERfTU9ETkFNRSAiOiBjb3VsZCBub3QgY3JlYXRlIgogCQkgICAgICAgIiBkZWJ1Z2ZzIGVudHJ5LCBjb250aW51aW5nXG4iKTsKIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmN4Z2I0dmZfZHJpdmVyKTsKLQlpZiAocmV0IDwgMCkKKwlpZiAocmV0IDwgMCAmJiAhSVNfRVJSX09SX05VTEwoY3hnYjR2Zl9kZWJ1Z2ZzX3Jvb3QpKQogCQlkZWJ1Z2ZzX3JlbW92ZShjeGdiNHZmX2RlYnVnZnNfcm9vdCk7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2I0dmYvdDR2Zl9ody5jIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKaW5kZXggMGY1MWM4MC4uMTkyZGIyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjR2Zi90NHZmX2h3LmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCWRlbGF5X2lkeCA9IDA7CiAJbXMgPSBkZWxheVswXTsKIAotCWZvciAoaSA9IDA7IGkgPCA1MDA7IGkgKz0gbXMpIHsKKwlmb3IgKGkgPSAwOyBpIDwgRldfQ01EX01BWF9USU1FT1VUOyBpICs9IG1zKSB7CiAJCWlmIChzbGVlcF9vaykgewogCQkJbXMgPSBkZWxheVtkZWxheV9pZHhdOwogCQkJaWYgKGRlbGF5X2lkeCA8IEFSUkFZX1NJWkUoZGVsYXkpIC0gMSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKaW5kZXggMmE2MjhkMS4uNzAxOGJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvZGF2aW5jaV9lbWFjLmMKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAJaW50CQkJcmV0OwogCiAJLyogZnJlZSBhbmQgYmFpbCBpZiB3ZSBhcmUgc2h1dHRpbmcgZG93biAqLwotCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhuZGV2KSkpIHsKKwlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcobmRldikgfHwgIW5ldGlmX2NhcnJpZXJfb2sobmRldikpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAxYjQ4YjY4Li44YjAwODRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTEwOTQsNyArMTA5NCw3IEBACiAJCQkJfQogCQkJfQogCQkJLyogQ2hhbmdlIGJ1ZmZlciBvd25lcnNoaXAgZm9yIHRoaXMgbGFzdCBmcmFtZSwgYmFjayB0byB0aGUgYWRhcHRlciAqLwotCQkJZm9yICg7IGxwLT5yeF9vbGQgIT0gZW50cnk7IGxwLT5yeF9vbGQgPSAoKytscC0+cnhfb2xkKSAmIGxwLT5yeFJpbmdNYXNrKSB7CisJCQlmb3IgKDsgbHAtPnJ4X29sZCAhPSBlbnRyeTsgbHAtPnJ4X29sZCA9IChscC0+cnhfb2xkICsgMSkgJiBscC0+cnhSaW5nTWFzaykgewogCQkJCXdyaXRlbChyZWFkbCgmbHAtPnJ4X3JpbmdbbHAtPnJ4X29sZF0uYmFzZSkgfCBSX09XTiwgJmxwLT5yeF9yaW5nW2xwLT5yeF9vbGRdLmJhc2UpOwogCQkJfQogCQkJd3JpdGVsKHJlYWRsKCZscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSkgfCBSX09XTiwgJmxwLT5yeF9yaW5nW2VudHJ5XS5iYXNlKTsKQEAgLTExMDMsNyArMTEwMyw3IEBACiAJCS8qCiAJCSAgICoqIFVwZGF0ZSBlbnRyeSBpbmZvcm1hdGlvbgogCQkgKi8KLQkJbHAtPnJ4X25ldyA9ICgrK2xwLT5yeF9uZXcpICYgbHAtPnJ4UmluZ01hc2s7CisJCWxwLT5yeF9uZXcgPSAobHAtPnJ4X25ldyArIDEpICYgbHAtPnJ4UmluZ01hc2s7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogCQl9CiAKIAkJLyogVXBkYXRlIGFsbCB0aGUgcG9pbnRlcnMgKi8KLQkJbHAtPnR4X29sZCA9ICgrK2xwLT50eF9vbGQpICYgbHAtPnR4UmluZ01hc2s7CisJCWxwLT50eF9vbGQgPSAobHAtPnR4X29sZCArIDEpICYgbHAtPnR4UmluZ01hc2s7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbDJrLmMgYi9kcml2ZXJzL25ldC9kbDJrLmMKaW5kZXggZTFhODIxNi4uYzA1ZGI2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGwyay5jCisrKyBiL2RyaXZlcnMvbmV0L2RsMmsuYwpAQCAtMTc1Myw4ICsxNzUzLDYgQEAKIAogCS8qIEZyZWUgYWxsIHRoZSBza2J1ZmZzIGluIHRoZSBxdWV1ZS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKLQkJbnAtPnJ4X3JpbmdbaV0uc3RhdHVzID0gMDsKLQkJbnAtPnJ4X3JpbmdbaV0uZnJhZ2luZm8gPSAwOwogCQlza2IgPSBucC0+cnhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LApAQCAtMTc2Myw2ICsxNzYxLDggQEAKIAkJCWRldl9rZnJlZV9za2IgKHNrYik7CiAJCQlucC0+cnhfc2tidWZmW2ldID0gTlVMTDsKIAkJfQorCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOworCQlucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyA9IDA7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlza2IgPSBucC0+dHhfc2tidWZmW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCAyZDRjNGZjLi40NjFkZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtODAyLDEwICs4MDIsNyBAQAogCS8qIENoZWNrc3VtIG1vZGUgKi8KIAlkbTkwMDBfc2V0X3J4X2NzdW1fdW5sb2NrZWQoZGV2LCBkYi0+cnhfY3N1bSk7CiAKLQkvKiBHUElPMCBvbiBwcmUtYWN0aXZhdGUgUEhZICovCi0JaW93KGRiLCBETTkwMDBfR1BSLCAwKTsJLyogUkVHXzFGIGJpdDAgYWN0aXZhdGUgcGh5eGNlciAqLwogCWlvdyhkYiwgRE05MDAwX0dQQ1IsIEdQQ1JfR0VQX0NOVEwpOwkvKiBMZXQgR1BJTzAgb3V0cHV0ICovCi0JaW93KGRiLCBETTkwMDBfR1BSLCAwKTsJLyogRW5hYmxlIFBIWSAqLwogCiAJbmNyID0gKGRiLT5mbGFncyAmIERNOTAwMF9QTEFURl9FWFRfUEhZKSA/IE5DUl9FWFRfUEhZIDogMDsKIApAQCAtODUyLDggKzg0OSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFNhdmUgcHJldmlvdXMgcmVnaXN0ZXIgYWRkcmVzcyAqLwotCXJlZ19zYXZlID0gcmVhZGIoZGItPmlvX2FkZHIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOworCXJlZ19zYXZlID0gcmVhZGIoZGItPmlvX2FkZHIpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCWRtOTAwMF9yZXNldChkYik7CkBAIC0xMTk0LDYgKzExOTEsMTAgQEAKIAlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRtOTAwMF9pbnRlcnJ1cHQsIGlycWZsYWdzLCBkZXYtPm5hbWUsIGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCisJLyogR1BJTzAgb24gcHJlLWFjdGl2YXRlIFBIWSwgUmVnIDFGIGlzIG5vdCBzZXQgYnkgcmVzZXQgKi8KKwlpb3coZGIsIERNOTAwMF9HUFIsIDApOwkvKiBSRUdfMUYgYml0MCBhY3RpdmF0ZSBwaHl4Y2VyICovCisJbWRlbGF5KDEpOyAvKiBkZWxheSBuZWVkcyBieSBETTkwMDBCICovCisKIAkvKiBJbml0aWFsaXplIERNOTAwMCBib2FyZCAqLwogCWRtOTAwMF9yZXNldChkYik7CiAJZG05MDAwX2luaXRfZG05MDAwKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kbmV0LmMgYi9kcml2ZXJzL25ldC9kbmV0LmMKaW5kZXggOWQ4YTIwYi4uODMxOGVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L2RuZXQuYwpAQCAtMzM3LDggKzMzNyw2IEBACiAJZm9yIChpID0gMDsgaSA8IFBIWV9NQVhfQUREUjsgaSsrKQogCQlicC0+bWlpX2J1cy0+aXJxW2ldID0gUEhZX1BPTEw7CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShicC0+ZGV2LCBicC0+bWlpX2J1cyk7Ci0KIAlpZiAobWRpb2J1c19yZWdpc3RlcihicC0+bWlpX2J1cykpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvX2lycTsKQEAgLTg2Myw2ICs4NjEsNyBAQAogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlicC0+ZGV2ID0gZGV2OwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJc3Bpbl9sb2NrX2luaXQoJmJwLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCmluZGV4IGFlZDIyM2IuLjc1MDFkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJY2FzZSBNODhFMTAwMF9JX1BIWV9JRDoKIAljYXNlIE04OEUxMDExX0lfUEhZX0lEOgogCWNhc2UgTTg4RTExMTFfSV9QSFlfSUQ6CisJY2FzZSBNODhFMTExOF9FX1BIWV9JRDoKIAkJaHctPnBoeV90eXBlID0gZTEwMDBfcGh5X204ODsKIAkJYnJlYWs7CiAJY2FzZSBJR1AwMUUxMDAwX0lfUEhZX0lEOgpAQCAtMzIyMiw3ICszMjIzLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBlMTAwMF9jZTQxMDA6CiAJCWlmICgoaHctPnBoeV9pZCA9PSBSVEw4MjExQl9QSFlfSUQpIHx8Ci0JCSAgICAoaHctPnBoeV9pZCA9PSBSVEw4MjAxTl9QSFlfSUQpKQorCQkgICAgKGh3LT5waHlfaWQgPT0gUlRMODIwMU5fUEhZX0lEKSB8fAorCQkgICAgKGh3LT5waHlfaWQgPT0gTTg4RTExMThfRV9QSFlfSUQpKQogCQkJbWF0Y2ggPSB0cnVlOwogCQlicmVhazsKIAljYXNlIGUxMDAwXzgyNTQxOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKaW5kZXggMTk2ZWVkYS4uYzcwYjIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAorKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCkBAIC0yOTE3LDYgKzI5MTcsNyBAQAogI2RlZmluZSBNODhFMTAwMF8xNF9QSFlfSUQgTTg4RTEwMDBfRV9QSFlfSUQKICNkZWZpbmUgTTg4RTEwMTFfSV9SRVZfNCAgIDB4MDQKICNkZWZpbmUgTTg4RTExMTFfSV9QSFlfSUQgIDB4MDE0MTBDQzAKKyNkZWZpbmUgTTg4RTExMThfRV9QSFlfSUQgIDB4MDE0MTBFNDAKICNkZWZpbmUgTDFMWFQ5NzFBX1BIWV9JRCAgIDB4MDAxMzc4RTAKIAogI2RlZmluZSBSVEw4MjExQl9QSFlfSUQgICAgMHgwMDFDQzkxMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKaW5kZXggNTVjMTcxMS4uMzNlN2M0NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaApAQCAtNDIsNyArNDIsOCBAQAogI2RlZmluZSBHQkVfQ09ORklHX1JBTV9CQVNFIFwKIAkoKHVuc2lnbmVkIGludCkoQ09ORklHX1JBTV9CQVNFICsgR0JFX0NPTkZJR19PRkZTRVQpKQogCi0jZGVmaW5lIEdCRV9DT05GSUdfQkFTRV9WSVJUICAgIHBoeXNfdG9fdmlydChHQkVfQ09ORklHX1JBTV9CQVNFKQorI2RlZmluZSBHQkVfQ09ORklHX0JBU0VfVklSVCBcCisJKCh2b2lkIF9faW9tZW0gKilwaHlzX3RvX3ZpcnQoR0JFX0NPTkZJR19SQU1fQkFTRSkpCiAKICNkZWZpbmUgR0JFX0NPTkZJR19GTEFTSF9XUklURShiYXNlLCBvZmZzZXQsIGNvdW50LCBkYXRhKSBcCiAJKGlvd3JpdGUxNl9yZXAoYmFzZSArIG9mZnNldCwgZGF0YSwgY291bnQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDFjMThmMjYuLjJlNTAyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTkzNyw2ICs5MzcsOSBAQAogCXUxNiBwaHlfc3RhdHVzLCBwaHlfMTAwMHRfc3RhdHVzLCBwaHlfZXh0X3N0YXR1czsKIAl1MTYgcGNpX3N0YXR1czsKIAorCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxZV9ycGh5KGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CiAJZTFlX3JwaHkoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZwaHlfMTAwMHRfc3RhdHVzKTsKIAllMWVfcnBoeShodywgUEhZX0VYVF9TVEFUVVMsICZwaHlfZXh0X3N0YXR1cyk7CkBAIC0xNTA2LDYgKzE1MDksOSBAQAogCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCiAJCQkJCXN0cnVjdCBlMTAwMF9hZGFwdGVyLCBkb3duc2hpZnRfdGFzayk7CiAKKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAllMTAwMGVfZ2lnX2Rvd25zaGlmdF93b3JrYXJvdW5kX2ljaDhsYW4oJmFkYXB0ZXItPmh3KTsKIH0KIApAQCAtMzMzOCw2ICszMzQ0LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGUxMDAwZV9mbHVzaF9kZXNjcmlwdG9ycyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRE1BX0JVUlNUKSkKKwkJcmV0dXJuOworCisJLyogZmx1c2ggcGVuZGluZyBkZXNjcmlwdG9yIHdyaXRlYmFja3MgdG8gbWVtb3J5ICovCisJZXczMihUSURWLCBhZGFwdGVyLT50eF9pbnRfZGVsYXkgfCBFMTAwMF9USURWX0ZQRCk7CisJZXczMihSRFRSLCBhZGFwdGVyLT5yeF9pbnRfZGVsYXkgfCBFMTAwMF9SRFRSX0ZQRCk7CisKKwkvKiBleGVjdXRlIHRoZSB3cml0ZXMgaW1tZWRpYXRlbHkgKi8KKwllMWVfZmx1c2goKTsKK30KKwogdm9pZCBlMTAwMGVfZG93bihzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwpAQCAtMzM3Nyw2ICszMzk4LDkgQEAKIAogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJZTEwMDBlX3Jlc2V0KGFkYXB0ZXIpOworCisJZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKGFkYXB0ZXIpOworCiAJZTEwMDBfY2xlYW5fdHhfcmluZyhhZGFwdGVyKTsKIAllMTAwMF9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIpOwogCkBAIC0zNzY1LDYgKzM3ODksMTAgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAogCQkJCQlzdHJ1Y3QgZTEwMDBfYWRhcHRlciwgdXBkYXRlX3BoeV90YXNrKTsKKworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCWUxMDAwX2dldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOwogfQogCkBAIC0zNzc1LDYgKzM4MDMsMTAgQEAKIHN0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKikgZGF0YTsKKworCWlmICh0ZXN0X2JpdChfX0UxMDAwX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybjsKKwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnVwZGF0ZV9waHlfdGFzayk7CiB9CiAKQEAgLTQxNDksNiArNDE4MSw5IEBACiAJdTMyIGxpbmssIHRjdGw7CiAJaW50IHR4X3BlbmRpbmcgPSAwOwogCisJaWYgKHRlc3RfYml0KF9fRTEwMDBfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCiAJbGluayA9IGUxMDAwZV9oYXNfbGluayhhZGFwdGVyKTsKIAlpZiAoKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgJiYgbGluaykgewogCQkvKiBDYW5jZWwgc2NoZWR1bGVkIHN1c3BlbmQgcmVxdWVzdHMuICovCkBAIC00MzA5LDcgKzQzNDQsNiBAQAogCQkJICogdG8gZ2V0IGRvbmUsIHNvIHJlc2V0IGNvbnRyb2xsZXIgdG8gZmx1c2ggVHguCiAJCQkgKiAoRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQpLgogCQkJICovCi0JCQlhZGFwdGVyLT50eF90aW1lb3V0X2NvdW50Kys7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAkJCS8qIHJldHVybiBpbW1lZGlhdGVseSBzaW5jZSByZXNldCBpcyBpbW1pbmVudCAqLwogCQkJcmV0dXJuOwpAQCAtNDMzOCwxOSArNDM3MiwxMiBAQAogCWVsc2UKIAkJZXczMihJQ1MsIEUxMDAwX0lDU19SWERNVDApOwogCisJLyogZmx1c2ggcGVuZGluZyBkZXNjcmlwdG9ycyB0byBtZW1vcnkgYmVmb3JlIGRldGVjdGluZyBUeCBoYW5nICovCisJZTEwMDBlX2ZsdXNoX2Rlc2NyaXB0b3JzKGFkYXB0ZXIpOworCiAJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciBldmVyeSB3YXRjaGRvZyBwZXJpb2QgKi8KIAlhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZyA9IDE7CiAKLQkvKiBmbHVzaCBwYXJ0aWFsIGRlc2NyaXB0b3JzIHRvIG1lbW9yeSBiZWZvcmUgZGV0ZWN0aW5nIFR4IGhhbmcgKi8KLQlpZiAoYWRhcHRlci0+ZmxhZ3MyICYgRkxBRzJfRE1BX0JVUlNUKSB7Ci0JCWV3MzIoVElEViwgYWRhcHRlci0+dHhfaW50X2RlbGF5IHwgRTEwMDBfVElEVl9GUEQpOwotCQlldzMyKFJEVFIsIGFkYXB0ZXItPnJ4X2ludF9kZWxheSB8IEUxMDAwX1JEVFJfRlBEKTsKLQkJLyoKLQkJICogbm8gbmVlZCB0byBmbHVzaCB0aGUgd3JpdGVzIGJlY2F1c2UgdGhlIHRpbWVvdXQgY29kZSBkb2VzCi0JCSAqIGFuIGVyMzIgZmlyc3QgdGhpbmcKLQkJICovCi0JfQotCiAJLyoKIAkgKiBXaXRoIDgyNTcxIGNvbnRyb2xsZXJzLCBMQUEgbWF5IGJlIG92ZXJ3cml0dGVuIGR1ZSB0byBjb250cm9sbGVyCiAJICogcmVzZXQgZnJvbSB0aGUgb3RoZXIgcG9ydC4gU2V0IHRoZSBhcHByb3ByaWF0ZSBMQUEgaW4gUkFSWzBdCkBAIC00ODg4LDYgKzQ5MTUsMTAgQEAKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcjsKIAlhZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBlMTAwMF9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCS8qIGRvbid0IHJ1biB0aGUgdGFzayBpZiBhbHJlYWR5IGRvd24gKi8KKwlpZiAodGVzdF9iaXQoX19FMTAwMF9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKIAlpZiAoISgoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX1JYX05FRURTX1JFU1RBUlQpICYmCiAJICAgICAgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19SWF9SRVNUQVJUX05PVykpKSB7CiAJCWUxMDAwZV9kdW1wKGFkYXB0ZXIpOwpAQCAtNTkzNiw3ICs1OTY3LDggQEAKIAkJLyogQVBNRSBiaXQgaW4gRUVQUk9NIGlzIG1hcHBlZCB0byBXVUMuQVBNRSAqLwogCQllZXByb21fZGF0YSA9IGVyMzIoV1VDKTsKIAkJZWVwcm9tX2FwbWVfbWFzayA9IEUxMDAwX1dVQ19BUE1FOwotCQlpZiAoZWVwcm9tX2RhdGEgJiBFMTAwMF9XVUNfUEhZX1dBS0UpCisJCWlmICgoaHctPm1hYy50eXBlID4gZTEwMDBfaWNoMTBsYW4pICYmCisJCSAgICAoZWVwcm9tX2RhdGEgJiBFMTAwMF9XVUNfUEhZX1dBS0UpKQogCQkJYWRhcHRlci0+ZmxhZ3MyIHw9IEZMQUcyX0hBU19QSFlfV0FLRVVQOwogCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBGTEFHX0FQTUVfSU5fQ1RSTDMpIHsKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgRkxBR19BUE1FX0NIRUNLX1BPUlRfQiAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKaW5kZXggMTEyYzVhYS4uOTA3YjA1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5jMjhqNjAuYworKysgYi9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCkBAIC04MTIsNyArODEyLDcgQEAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKQogCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiByZWFkaW5nIFRTViBhdCBhZGRyOjB4JTA0eFxuIiwKIAkJCSBlbmRwdHIgKyAxKTsKLQllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBzaXplb2YodHN2KSwgdHN2KTsKKwllbmMyOGo2MF9tZW1fcmVhZChwcml2LCBlbmRwdHIgKyAxLCBUU1ZfU0laRSwgdHN2KTsKIH0KIAogc3RhdGljIHZvaWQgZW5jMjhqNjBfZHVtcF90c3Yoc3RydWN0IGVuYzI4ajYwX25ldCAqcHJpdiwgY29uc3QgY2hhciAqbXNnLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVjLmMgYi9kcml2ZXJzL25ldC9mZWMuYwppbmRleCAyYTcxMzczLi5jZDAyODJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWMuYworKysgYi9kcml2ZXJzL25ldC9mZWMuYwpAQCAtNzQsNyArNzQsOCBAQAogCX0sIHsKIAkJLm5hbWUgPSAiaW14MjgtZmVjIiwKIAkJLmRyaXZlcl9kYXRhID0gRkVDX1FVSVJLX0VORVRfTUFDIHwgRkVDX1FVSVJLX1NXQVBfRlJBTUUsCi0JfQorCX0sCisJeyB9CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBtYWNhZGRyW0VUSF9BTEVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggYWYwOTI5Ni4uOWMwYjFiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTU2NDUsNiArNTY0NSw4IEBACiAJCWdvdG8gb3V0X2Vycm9yOwogCX0KIAorCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisKIAlkZXZfaW5mbygmcGNpX2Rldi0+ZGV2LCAiaWZuYW1lICVzLCBQSFkgT1VJIDB4JXggQCAlZCwgYWRkciAlcE1cbiIsCiAJCSBkZXYtPm5hbWUsIG5wLT5waHlfb3VpLCBucC0+cGh5YWRkciwgZGV2LT5kZXZfYWRkcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYnZmL3ZmLmMgYi9kcml2ZXJzL25ldC9pZ2J2Zi92Zi5jCmluZGV4IDc0NDg2YTguLmFmMzgyMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL3ZmLmMKKysrIGIvZHJpdmVycy9uZXQvaWdidmYvdmYuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgKiAgVGhlIHBhcmFtZXRlciByYXJfY291bnQgd2lsbCB1c3VhbGx5IGJlIGh3LT5tYWMucmFyX2VudHJ5X2NvdW50CiAgKiAgdW5sZXNzIHRoZXJlIGFyZSB3b3JrYXJvdW5kcyB0aGF0IGNoYW5nZSB0aGlzLgogICoqLwotdm9pZCBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCBlMTAwMF9odyAqaHcsCitzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHJhcl91c2VkX2NvdW50LCB1MzIgcmFyX2NvdW50KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwppbmRleCBkNWVkZTJkLi5lYmJkYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYwpAQCAtMTM3MCw2ICsxMzcwLDkgQEAKIAkJaHdfZGJnKGh3LCAiIE5ldyBNQUMgQWRkciA9JXBNXG4iLCBody0+bWFjLmFkZHIpOwogCiAJCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKworCQkvKiAgY2xlYXIgVk1EcSBwb29sL3F1ZXVlIHNlbGVjdGlvbiBmb3IgUkFSIDAgKi8KKwkJaHctPm1hYy5vcHMuY2xlYXJfdm1kcShodywgMCwgSVhHQkVfQ0xFQVJfVk1EUV9BTEwpOwogCX0KIAlody0+YWRkcl9jdHJsLm92ZXJmbG93X3Byb21pc2MgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggNjM0MmQ0OC4uYzU0YTg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtMTU5LDEzICsxNTksMTMgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXVuc2lnbmVkIGludCBpLCBqLCBkbWFjb3VudDsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnVmZmxlbiA9IDQwOTY7CisJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBidWZmbGVuID0gSVhHQkVfRkNCVUZGX01JTjsKIAl1bnNpZ25lZCBpbnQgZmlyc3RvZmYgPSAwOwogCXVuc2lnbmVkIGludCBsYXN0c2l6ZTsKIAl1bnNpZ25lZCBpbnQgdGhpc29mZiA9IDA7CiAJdW5zaWduZWQgaW50IHRoaXNsZW4gPSAwOwogCXUzMiBmY2J1ZmYsIGZjZG1hcncsIGZjZmx0cnc7Ci0JZG1hX2FkZHJfdCBhZGRyOworCWRtYV9hZGRyX3QgYWRkciA9IDA7CiAKIAlpZiAoIW5ldGRldiB8fCAhc2dsKQogCQlyZXR1cm4gMDsKQEAgLTI1NCw2ICsyNTQsMjQgQEAKIAkvKiBvbmx5IHRoZSBsYXN0IGJ1ZmZlciBtYXkgaGF2ZSBub24tZnVsbCBidWZmbGVuICovCiAJbGFzdHNpemUgPSB0aGlzb2ZmICsgdGhpc2xlbjsKIAorCS8qCisJICogbGFzdHNpemUgY2FuIG5vdCBiZSBidWZmZXIgbGVuLgorCSAqIElmIGl0IGlzIHRoZW4gYWRkaW5nIGFub3RoZXIgYnVmZmVyIHdpdGggbGFzdHNpemUgPSAxLgorCSAqLworCWlmIChsYXN0c2l6ZSA9PSBidWZmbGVuKSB7CisJCWlmIChqID49IElYR0JFX0JVRkZDTlRfTUFYKSB7CisJCQllX2VycihkcnYsICJ4aWQ9JXg6JWQsJWQsJWQ6YWRkcj0lbGx4ICIKKwkJCQkibm90IGVub3VnaCB1c2VyIGJ1ZmZlcnMuIFdlIG5lZWQgYW4gZXh0cmEgIgorCQkJCSJidWZmZXIgYmVjYXVzZSBsYXN0c2l6ZSBpcyBidWZmbGVuLlxuIiwKKwkJCQl4aWQsIGksIGosIGRtYWNvdW50LCAodTY0KWFkZHIpOworCQkJZ290byBvdXRfbm9kZHBfZnJlZTsKKwkJfQorCisJCWRkcC0+dWRsW2pdID0gKHU2NCkoZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlcl9kbWEpOworCQlqKys7CisJCWxhc3RzaXplID0gMTsKKwl9CisKIAlmY2J1ZmYgPSAoSVhHQkVfRkNCVUZGXzRLQiA8PCBJWEdCRV9GQ0JVRkZfQlVGRlNJWkVfU0hJRlQpOwogCWZjYnVmZiB8PSAoKGogJiAweGZmKSA8PCBJWEdCRV9GQ0JVRkZfQlVGRkNOVF9TSElGVCk7CiAJZmNidWZmIHw9IChmaXJzdG9mZiA8PCBJWEdCRV9GQ0JVRkZfT0ZGU0VUX1NISUZUKTsKQEAgLTUzMiw2ICs1NTAsMjQgQEAKIAkJCWVfZXJyKGRydiwgImZhaWxlZCB0byBhbGxvY2F0ZWQgRkNvRSBERFAgcG9vbFxuIik7CiAKIAkJc3Bpbl9sb2NrX2luaXQoJmZjb2UtPmxvY2spOworCisJCS8qIEV4dHJhIGJ1ZmZlciB0byBiZSBzaGFyZWQgYnkgYWxsIEREUHMgZm9yIEhXIHdvcmsgYXJvdW5kICovCisJCWZjb2UtPmV4dHJhX2RkcF9idWZmZXIgPSBrbWFsbG9jKElYR0JFX0ZDQlVGRl9NSU4sIEdGUF9BVE9NSUMpOworCQlpZiAoZmNvZS0+ZXh0cmFfZGRwX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllX2VycihkcnYsICJmYWlsZWQgdG8gYWxsb2NhdGVkIGV4dHJhIEREUCBidWZmZXJcbiIpOworCQkJZ290byBvdXRfZXh0cmFfZGRwX2J1ZmZlcl9hbGxvYzsKKwkJfQorCisJCWZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hID0KKwkJCWRtYV9tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJICAgICAgIGZjb2UtPmV4dHJhX2RkcF9idWZmZXIsCisJCQkJICAgICAgIElYR0JFX0ZDQlVGRl9NSU4sCisJCQkJICAgICAgIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSAgICAgIGZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hKSkgeworCQkJZV9lcnIoZHJ2LCAiZmFpbGVkIHRvIG1hcCBleHRyYSBERFAgYnVmZmVyXG4iKTsKKwkJCWdvdG8gb3V0X2V4dHJhX2RkcF9idWZmZXJfZG1hOworCQl9CiAJfQogCiAJLyogRW5hYmxlIEwyIGV0aCB0eXBlIGZpbHRlciBmb3IgRkNvRSAqLwpAQCAtNTgxLDYgKzYxNywxNCBAQAogCQl9CiAJfQogI2VuZGlmCisKKwlyZXR1cm47CisKK291dF9leHRyYV9kZHBfYnVmZmVyX2RtYToKKwlrZnJlZShmY29lLT5leHRyYV9kZHBfYnVmZmVyKTsKK291dF9leHRyYV9kZHBfYnVmZmVyX2FsbG9jOgorCXBjaV9wb29sX2Rlc3Ryb3koZmNvZS0+cG9vbCk7CisJZmNvZS0+cG9vbCA9IE5VTEw7CiB9CiAKIC8qKgpAQCAtNjAwLDYgKzY0NCwxMSBAQAogCWlmIChmY29lLT5wb29sKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9GQ09FX0REUF9NQVg7IGkrKykKIAkJCWl4Z2JlX2Zjb2VfZGRwX3B1dChhZGFwdGVyLT5uZXRkZXYsIGkpOworCQlkbWFfdW5tYXBfc2luZ2xlKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJIGZjb2UtPmV4dHJhX2RkcF9idWZmZXJfZG1hLAorCQkJCSBJWEdCRV9GQ0JVRkZfTUlOLAorCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCQlrZnJlZShmY29lLT5leHRyYV9kZHBfYnVmZmVyKTsKIAkJcGNpX3Bvb2xfZGVzdHJveShmY29lLT5wb29sKTsKIAkJZmNvZS0+cG9vbCA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5oCmluZGV4IDRiYzJjNTUuLjY1Y2M4ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuaAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmgKQEAgLTcwLDYgKzcwLDggQEAKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHBjaV9wb29sICpwb29sOwogCXN0cnVjdCBpeGdiZV9mY29lX2RkcCBkZHBbSVhHQkVfRkNPRV9ERFBfTUFYXTsKKwl1bnNpZ25lZCBjaGFyICpleHRyYV9kZHBfYnVmZmVyOworCWRtYV9hZGRyX3QgZXh0cmFfZGRwX2J1ZmZlcl9kbWE7CiB9OwogCiAjZW5kaWYgLyogX0lYR0JFX0ZDT0VfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDYwMjA3OGIuLjMwZjljY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTUyLDcgKzUyLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAJCQkgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjMuMC4xMi1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjMuMi45LWsyIgogY29uc3QgY2hhciBpeGdiZV9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY2hhciBpeGdiZV9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCkBAIC0zMTc2LDkgKzMxNzYsMTYgQEAKIAl1MzIgbWhhZGQsIGhscmVnMDsKIAogCS8qIERlY2lkZSB3aGV0aGVyIHRvIHVzZSBwYWNrZXQgc3BsaXQgbW9kZSBvciBub3QgKi8KKwkvKiBPbiBieSBkZWZhdWx0ICovCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCiAJLyogRG8gbm90IHVzZSBwYWNrZXQgc3BsaXQgaWYgd2UncmUgaW4gU1ItSU9WIE1vZGUgKi8KLQlpZiAoIWFkYXB0ZXItPm51bV92ZnMpCi0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRDsKKworCS8qIERpc2FibGUgcGFja2V0IHNwbGl0IGR1ZSB0byA4MjU5OSBlcnJhdHVtICM0NSAqLworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CiAKIAkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CkBAIC0zNzIxLDcgKzM3MjgsOCBAQAogCQkJICogV2UgbmVlZCB0byB0cnkgYW5kIGZvcmNlIGFuIGF1dG9uZWdvdGlhdGlvbgogCQkJICogc2Vzc2lvbiwgdGhlbiBicmluZyB1cCBsaW5rLgogCQkJICovCi0JCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOworCQkJaWYgKGh3LT5tYWMub3BzLnNldHVwX3NmcCkKKwkJCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOwogCQkJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQogCQkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPm11bHRpc3BlZWRfZmliZXJfdGFzayk7CiAJCX0gZWxzZSB7CkBAIC00ODYzLDE2ICs0ODcxLDEzIEBACiB7CiAJaW50IHFfaWR4LCBudW1fcV92ZWN0b3JzOwogCXN0cnVjdCBpeGdiZV9xX3ZlY3RvciAqcV92ZWN0b3I7Ci0JaW50IG5hcGlfdmVjdG9yczsKIAlpbnQgKCpwb2xsKShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKiwgaW50KTsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CiAJCW51bV9xX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKLQkJbmFwaV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKIAkJcG9sbCA9ICZpeGdiZV9jbGVhbl9yeHR4X21hbnk7CiAJfSBlbHNlIHsKIAkJbnVtX3FfdmVjdG9ycyA9IDE7Ci0JCW5hcGlfdmVjdG9ycyA9IDE7CiAJCXBvbGwgPSAmaXhnYmVfcG9sbDsKIAl9CiAKQEAgLTU5NjQsNyArNTk2OSw4IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPm5ldGRldik7CiAJCXJldHVybjsKIAl9Ci0JaHctPm1hYy5vcHMuc2V0dXBfc2ZwKGh3KTsKKwlpZiAoaHctPm1hYy5vcHMuc2V0dXBfc2ZwKQorCQlody0+bWFjLm9wcy5zZXR1cF9zZnAoaHcpOwogCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1NGUF9MSU5LX1RBU0spKQogCQkvKiBUaGlzIHdpbGwgYWxzbyB3b3JrIGZvciBEQSBUd2luYXggY29ubmVjdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jCmluZGV4IDQ3YjE1NzMuLjE4N2IzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3NyaW92LmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpAQCAtMTEwLDEyICsxMTAsMTAgQEAKIAlyZXR1cm4gYWRhcHRlci0+aHcubWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgdmYsIChib29sKWFkZCk7CiB9CiAKLQogc3RhdGljIHZvaWQgaXhnYmVfc2V0X3Ztb2xyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2ZiwgYm9vbCBhdXBlKQogewogCXUzMiB2bW9sciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTU9MUih2ZikpOwogCXZtb2xyIHw9IChJWEdCRV9WTU9MUl9ST01QRSB8Ci0JCSAgSVhHQkVfVk1PTFJfUk9QRSB8CiAJCSAgSVhHQkVfVk1PTFJfQkFNKTsKIAlpZiAoYXVwZSkKIAkJdm1vbHIgfD0gSVhHQkVfVk1PTFJfQVVQRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3g1NDAuYwppbmRleCAzYTg5MjM5Li5mMjUxOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV94NTQwLmMKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfeDU0MC5jCkBAIC0xMzMsMTcgKzEzMywxNyBAQAogCX0KIAogCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7Ci0JSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IElYR0JFX0NUUkxfUlNUKSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9DVFJMLCAoY3RybCB8IHJlc2V0X2JpdCkpOwogCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKIAogCS8qIFBvbGwgZm9yIHJlc2V0IGJpdCB0byBzZWxmLWNsZWFyIGluZGljYXRpbmcgcmVzZXQgaXMgY29tcGxldGUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogCQl1ZGVsYXkoMSk7CiAJCWN0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTCk7Ci0JCWlmICghKGN0cmwgJiBJWEdCRV9DVFJMX1JTVCkpCisJCWlmICghKGN0cmwgJiByZXNldF9iaXQpKQogCQkJYnJlYWs7CiAJfQotCWlmIChjdHJsICYgSVhHQkVfQ1RSTF9SU1QpIHsKKwlpZiAoY3RybCAmIHJlc2V0X2JpdCkgewogCQlzdGF0dXMgPSBJWEdCRV9FUlJfUkVTRVRfRkFJTEVEOwogCQlod19kYmcoaHcsICJSZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2IuYyBiL2RyaXZlcnMvbmV0L21hY2IuYwppbmRleCBmNjllNzNlLi43OWNjYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNiLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjYi5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyBpKyspCiAJCWJwLT5taWlfYnVzLT5pcnFbaV0gPSBQSFlfUE9MTDsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGJwLT5kZXYsIGJwLT5taWlfYnVzKTsKKwlkZXZfc2V0X2RydmRhdGEoJmJwLT5kZXYtPmRldiwgYnAtPm1paV9idXMpOwogCiAJaWYgKG1kaW9idXNfcmVnaXN0ZXIoYnAtPm1paV9idXMpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvX2lycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21seDQvbWFpbi5jIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKaW5kZXggNGZmZGMxOC4uMjc2NWEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMKQEAgLTEyODYsNiArMTI4NiwyMSBAQAogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2NCkgfSwgLyogTVQyNjQ2OCBDb25uZWN0WCBFTiAxMEdpZ0UgUENJZSBnZW4yKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDY3NDYpIH0sIC8qIE1UMjY0MzggQ29ubmVjdFggRU4gNDBHaWdFIFBDSWUgZ2VuMiA1R1QvcyAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4Njc2ZSkgfSwgLyogTVQyNjQ3OCBDb25uZWN0WDIgNDBHaWdFIFBDSWUgZ2VuMiAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwMikgfSwgLyogTVQyNTQwMCBGYW1pbHkgW0Nvbm5lY3RYLTIgVmlydHVhbCBGdW5jdGlvbl0gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDMpIH0sIC8qIE1UMjc1MDAgRmFtaWx5IFtDb25uZWN0WC0zXSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNCkgfSwgLyogTVQyNzUwMCBGYW1pbHkgW0Nvbm5lY3RYLTMgVmlydHVhbCBGdW5jdGlvbl0gKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDUpIH0sIC8qIE1UMjc1MTAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA2KSB9LCAvKiBNVDI3NTExIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwNykgfSwgLyogTVQyNzUyMCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMDgpIH0sIC8qIE1UMjc1MjEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDA5KSB9LCAvKiBNVDI3NTMwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwYSkgfSwgLyogTVQyNzUzMSBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGIpIH0sIC8qIE1UMjc1NDAgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBjKSB9LCAvKiBNVDI3NTQxIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAwZCkgfSwgLyogTVQyNzU1MCBGYW1pbHkgKi8KKwl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDEwMGUpIH0sIC8qIE1UMjc1NTEgRmFtaWx5ICovCisJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHgxMDBmKSB9LCAvKiBNVDI3NTYwIEZhbWlseSAqLworCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4MTAxMCkgfSwgLyogTVQyNzU2MSBGYW1pbHkgKi8KIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pdS5jIGIvZHJpdmVycy9uZXQvbml1LmMKaW5kZXggMjU0MTMyMS4uOWZiNTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbml1LmMKKysrIGIvZHJpdmVycy9uZXQvbml1LmMKQEAgLTQ0ODksNiArNDQ4OSw5IEBACiB7CiAJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CiAJaW50IGZpcnN0X3J4X2NoYW5uZWwsIGZpcnN0X3R4X2NoYW5uZWw7CisJaW50IG51bV9yeF9yaW5ncywgbnVtX3R4X3JpbmdzOworCXN0cnVjdCByeF9yaW5nX2luZm8gKnJ4X3JpbmdzOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4X3JpbmdzOwogCWludCBpLCBwb3J0LCBlcnI7CiAKIAlwb3J0ID0gbnAtPnBvcnQ7CkBAIC00NDk4LDE4ICs0NTAxLDIxIEBACiAJCWZpcnN0X3R4X2NoYW5uZWwgKz0gcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV07CiAJfQogCi0JbnAtPm51bV9yeF9yaW5ncyA9IHBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W3BvcnRdOwotCW5wLT5udW1fdHhfcmluZ3MgPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwludW1fcnhfcmluZ3MgPSBwYXJlbnQtPnJ4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKKwludW1fdHhfcmluZ3MgPSBwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtwb3J0XTsKIAotCW5ldGlmX3NldF9yZWFsX251bV9yeF9xdWV1ZXMobnAtPmRldiwgbnAtPm51bV9yeF9yaW5ncyk7Ci0JbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhucC0+ZGV2LCBucC0+bnVtX3R4X3JpbmdzKTsKLQotCW5wLT5yeF9yaW5ncyA9IGtjYWxsb2MobnAtPm51bV9yeF9yaW5ncywgc2l6ZW9mKHN0cnVjdCByeF9yaW5nX2luZm8pLAotCQkJICAgICAgIEdGUF9LRVJORUwpOworCXJ4X3JpbmdzID0ga2NhbGxvYyhudW1fcnhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgcnhfcmluZ19pbmZvKSwKKwkJCSAgIEdGUF9LRVJORUwpOwogCWVyciA9IC1FTk9NRU07Ci0JaWYgKCFucC0+cnhfcmluZ3MpCisJaWYgKCFyeF9yaW5ncykKIAkJZ290byBvdXRfZXJyOwogCisJbnAtPm51bV9yeF9yaW5ncyA9IG51bV9yeF9yaW5nczsKKwlzbXBfd21iKCk7CisJbnAtPnJ4X3JpbmdzID0gcnhfcmluZ3M7CisKKwluZXRpZl9zZXRfcmVhbF9udW1fcnhfcXVldWVzKG5wLT5kZXYsIG51bV9yeF9yaW5ncyk7CisKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV9yeF9yaW5nczsgaSsrKSB7CiAJCXN0cnVjdCByeF9yaW5nX2luZm8gKnJwID0gJm5wLT5yeF9yaW5nc1tpXTsKIApAQCAtNDUzOCwxMiArNDU0NCwxOCBAQAogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlucC0+dHhfcmluZ3MgPSBrY2FsbG9jKG5wLT5udW1fdHhfcmluZ3MsIHNpemVvZihzdHJ1Y3QgdHhfcmluZ19pbmZvKSwKLQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwl0eF9yaW5ncyA9IGtjYWxsb2MobnVtX3R4X3JpbmdzLCBzaXplb2Yoc3RydWN0IHR4X3JpbmdfaW5mbyksCisJCQkgICBHRlBfS0VSTkVMKTsKIAllcnIgPSAtRU5PTUVNOwotCWlmICghbnAtPnR4X3JpbmdzKQorCWlmICghdHhfcmluZ3MpCiAJCWdvdG8gb3V0X2VycjsKIAorCW5wLT5udW1fdHhfcmluZ3MgPSBudW1fdHhfcmluZ3M7CisJc21wX3dtYigpOworCW5wLT50eF9yaW5ncyA9IHR4X3JpbmdzOworCisJbmV0aWZfc2V0X3JlYWxfbnVtX3R4X3F1ZXVlcyhucC0+ZGV2LCBudW1fdHhfcmluZ3MpOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CiAKQEAgLTYyNDYsMTEgKzYyNTgsMTcgQEAKIHN0YXRpYyB2b2lkIG5pdV9nZXRfcnhfc3RhdHMoc3RydWN0IG5pdSAqbnApCiB7CiAJdW5zaWduZWQgbG9uZyBwa3RzLCBkcm9wcGVkLCBlcnJvcnMsIGJ5dGVzOworCXN0cnVjdCByeF9yaW5nX2luZm8gKnJ4X3JpbmdzOwogCWludCBpOwogCiAJcGt0cyA9IGRyb3BwZWQgPSBlcnJvcnMgPSBieXRlcyA9IDA7CisKKwlyeF9yaW5ncyA9IEFDQ0VTU19PTkNFKG5wLT5yeF9yaW5ncyk7CisJaWYgKCFyeF9yaW5ncykKKwkJZ290byBub19yaW5nczsKKwogCWZvciAoaSA9IDA7IGkgPCBucC0+bnVtX3J4X3JpbmdzOyBpKyspIHsKLQkJc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAgPSAmbnAtPnJ4X3JpbmdzW2ldOworCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpycCA9ICZyeF9yaW5nc1tpXTsKIAogCQluaXVfc3luY19yeF9kaXNjYXJkX3N0YXRzKG5wLCBycCwgMCk7CiAKQEAgLTYyNTksNiArNjI3Nyw4IEBACiAJCWRyb3BwZWQgKz0gcnAtPnJ4X2Ryb3BwZWQ7CiAJCWVycm9ycyArPSBycC0+cnhfZXJyb3JzOwogCX0KKworbm9fcmluZ3M6CiAJbnAtPmRldi0+c3RhdHMucnhfcGFja2V0cyA9IHBrdHM7CiAJbnAtPmRldi0+c3RhdHMucnhfYnl0ZXMgPSBieXRlczsKIAlucC0+ZGV2LT5zdGF0cy5yeF9kcm9wcGVkID0gZHJvcHBlZDsKQEAgLTYyNjgsMTYgKzYyODgsMjQgQEAKIHN0YXRpYyB2b2lkIG5pdV9nZXRfdHhfc3RhdHMoc3RydWN0IG5pdSAqbnApCiB7CiAJdW5zaWduZWQgbG9uZyBwa3RzLCBlcnJvcnMsIGJ5dGVzOworCXN0cnVjdCB0eF9yaW5nX2luZm8gKnR4X3JpbmdzOwogCWludCBpOwogCiAJcGt0cyA9IGVycm9ycyA9IGJ5dGVzID0gMDsKKworCXR4X3JpbmdzID0gQUNDRVNTX09OQ0UobnAtPnR4X3JpbmdzKTsKKwlpZiAoIXR4X3JpbmdzKQorCQlnb3RvIG5vX3JpbmdzOworCiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewotCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CisJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJnR4X3JpbmdzW2ldOwogCiAJCXBrdHMgKz0gcnAtPnR4X3BhY2tldHM7CiAJCWJ5dGVzICs9IHJwLT50eF9ieXRlczsKIAkJZXJyb3JzICs9IHJwLT50eF9lcnJvcnM7CiAJfQorCitub19yaW5nczoKIAlucC0+ZGV2LT5zdGF0cy50eF9wYWNrZXRzID0gcGt0czsKIAlucC0+ZGV2LT5zdGF0cy50eF9ieXRlcyA9IGJ5dGVzOwogCW5wLT5kZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGVycm9yczsKQEAgLTYyODcsOSArNjMxNSwxMCBAQAogewogCXN0cnVjdCBuaXUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCW5pdV9nZXRfcnhfc3RhdHMobnApOwotCW5pdV9nZXRfdHhfc3RhdHMobnApOwotCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluaXVfZ2V0X3J4X3N0YXRzKG5wKTsKKwkJbml1X2dldF90eF9zdGF0cyhucCk7CisJfQogCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlLmggYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAppbmRleCBhMGMyNmE5Li5lMWUzM2M4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaAorKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmUuaApAQCAtNzMsNyArNzMsNyBAQAogCXN0cnVjdCBwY2hfZ2JlX3JlZ3NfbWFjX2FkciBtYWNfYWRyWzE2XTsKIAl1MzIgQUREUl9NQVNLOwogCXUzMiBNSUlNOwotCXUzMiByZXNlcnZlMjsKKwl1MzIgTUFDX0FERFJfTE9BRDsKIAl1MzIgUkdNSUlfU1Q7CiAJdTMyIFJHTUlJX0NUUkw7CiAJdTMyIHJlc2VydmUzWzNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKaW5kZXggZDczNTUzMC4uYjk5ZTkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFBDSF9HQkVfU0hPUlRfUEtUCQk2NAogI2RlZmluZSBEU0NfSU5JVDE2CQkJMHhDMDAwCiAjZGVmaW5lIFBDSF9HQkVfRE1BX0FMSUdOCQkwCisjZGVmaW5lIFBDSF9HQkVfRE1BX1BBRERJTkcJCTIKICNkZWZpbmUgUENIX0dCRV9XQVRDSERPR19QRVJJT0QJCSgxICogSFopCS8qIHdhdGNoZG9nIHRpbWUgKi8KICNkZWZpbmUgUENIX0dCRV9DT1BZQlJFQUtfREVGQVVMVAkyNTYKICNkZWZpbmUgUENIX0dCRV9QQ0lfQkFSCQkJMQpAQCAtODgsNiArODksMTIgQEAKIHN0YXRpYyBpbnQgcGNoX2diZV9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGFkZHIsIGludCByZWcpOwogc3RhdGljIHZvaWQgcGNoX2diZV9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBhZGRyLCBpbnQgcmVnLAogCQkJICAgICAgIGludCBkYXRhKTsKKworaW5saW5lIHZvaWQgcGNoX2diZV9tYWNfbG9hZF9tYWNfYWRkcihzdHJ1Y3QgcGNoX2diZV9odyAqaHcpCit7CisJaW93cml0ZTMyKDB4MDEsICZody0+cmVnLT5NQUNfQUREUl9MT0FEKTsKK30KKwogLyoqCiAgKiBwY2hfZ2JlX21hY19yZWFkX21hY19hZGRyIC0gUmVhZCBNQUMgYWRkcmVzcwogICogQGh3OgkgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKQEAgLTUxOSw3ICs1MjYsOSBAQAogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXI7CiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGNoX2diZV9hZGFwdGVyLCByZXNldF90YXNrKTsKIAorCXJ0bmxfbG9jaygpOwogCXBjaF9nYmVfcmVpbml0X2xvY2tlZChhZGFwdGVyKTsKKwlydG5sX3VubG9jaygpOwogfQogCiAvKioKQEAgLTUyOCwxNCArNTM3LDggQEAKICAqLwogdm9pZCBwY2hfZ2JlX3JlaW5pdF9sb2NrZWQoc3RydWN0IHBjaF9nYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwotCi0JcnRubF9sb2NrKCk7Ci0JaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgewotCQlwY2hfZ2JlX2Rvd24oYWRhcHRlcik7Ci0JCXBjaF9nYmVfdXAoYWRhcHRlcik7Ci0JfQotCXJ0bmxfdW5sb2NrKCk7CisJcGNoX2diZV9kb3duKGFkYXB0ZXIpOworCXBjaF9nYmVfdXAoYWRhcHRlcik7CiB9CiAKIC8qKgpAQCAtMTM2OSwxNiArMTM3MiwxMyBAQAogCXN0cnVjdCBwY2hfZ2JlX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJc3RydWN0IHBjaF9nYmVfcnhfZGVzYyAqcnhfZGVzYzsKIAl1MzIgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgdG1wX3BhY2tldFtFVEhfSExFTl07CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGNsZWFuZWRfY291bnQgPSAwOwogCWJvb2wgY2xlYW5lZCA9IGZhbHNlOwotCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5ld19za2I7CiAJdTggZG1hX3N0YXR1czsKIAl1MTYgZ2JlY19zdGF0dXM7CiAJdTMyIHRjcF9pcF9zdGF0dXM7Ci0JdTggc2tiX2NvcHlfZmxhZyA9IDA7Ci0JdTggc2tiX3BhZGRpbmdfZmxhZyA9IDA7CiAKIAlpID0gcnhfcmluZy0+bmV4dF90b19jbGVhbjsKIApAQCAtMTQyMiw1NSArMTQyMiw3MCBAQAogCQkJcHJfZXJyKCJSZWNlaXZlIENSQyBFcnJvclxuIik7CiAJCX0gZWxzZSB7CiAJCQkvKiBnZXQgcmVjZWl2ZSBsZW5ndGggKi8KLQkJCS8qIGxlbmd0aCBjb252ZXJ0Wy0zXSwgcGFkZGluZ1stMl0gKi8KLQkJCWxlbmd0aCA9IChyeF9kZXNjLT5yeF93b3Jkc19lb2IpIC0gMyAtIDI7CisJCQkvKiBsZW5ndGggY29udmVydFstM10gKi8KKwkJCWxlbmd0aCA9IChyeF9kZXNjLT5yeF93b3Jkc19lb2IpIC0gMzsKIAogCQkJLyogRGVjaWRlIHRoZSBkYXRhIGNvbnZlcnNpb24gbWV0aG9kICovCiAJCQlpZiAoIWFkYXB0ZXItPnJ4X2NzdW0pIHsKIAkJCQkvKiBbSGVhZGVyOjE0XVtwYXlsb2FkXSAqLwotCQkJCXNrYl9wYWRkaW5nX2ZsYWcgPSAwOwotCQkJCXNrYl9jb3B5X2ZsYWcgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBbSGVhZGVyOjE0XVtwYWRkaW5nOjJdW3BheWxvYWRdICovCi0JCQkJc2tiX3BhZGRpbmdfZmxhZyA9IDE7Ci0JCQkJaWYgKGxlbmd0aCA8IGNvcHlicmVhaykKLQkJCQkJc2tiX2NvcHlfZmxhZyA9IDE7Ci0JCQkJZWxzZQotCQkJCQlza2JfY29weV9mbGFnID0gMDsKLQkJCX0KLQotCQkJLyogRGF0YSBjb252ZXJzaW9uICovCi0JCQlpZiAoc2tiX2NvcHlfZmxhZykgewkvKiByZWN5Y2xlICBza2IgKi8KLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYjsKLQkJCQluZXdfc2tiID0KLQkJCQkgICAgbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCi0JCQkJCQkgICAgIGxlbmd0aCArIE5FVF9JUF9BTElHTik7Ci0JCQkJaWYgKG5ld19za2IpIHsKLQkJCQkJaWYgKCFza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJCQlza2JfcmVzZXJ2ZShuZXdfc2tiLAotCQkJCQkJCQlORVRfSVBfQUxJR04pOworCQkJCWlmIChORVRfSVBfQUxJR04pIHsKKwkJCQkJLyogQmVjYXVzZSBhbGlnbm1lbnQgZGlmZmVycywKKwkJCQkJICogdGhlIG5ld19za2IgaXMgbmV3bHkgYWxsb2NhdGVkLAorCQkJCQkgKiBhbmQgZGF0YSBpcyBjb3BpZWQgdG8gbmV3X3NrYi4qLworCQkJCQluZXdfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsCisJCQkJCQkJIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJCQkJCWlmICghbmV3X3NrYikgeworCQkJCQkJLyogZG9ycm9wIGVycm9yICovCisJCQkJCQlwcl9lcnIoIk5ldyBza2IgYWxsb2NhdGlvbiAiCisJCQkJCQkJIkVycm9yXG4iKTsKKwkJCQkJCWdvdG8gZG9ycm9wOwogCQkJCQl9CisJCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7CiAJCQkJCW1lbWNweShuZXdfc2tiLT5kYXRhLCBza2ItPmRhdGEsCi0JCQkJCQlsZW5ndGgpOwotCQkJCQkvKiBzYXZlIHRoZSBza2IKLQkJCQkJICogaW4gYnVmZmVyX2luZm8gYXMgZ29vZCAqLworCQkJCQkgICAgICAgbGVuZ3RoKTsKIAkJCQkJc2tiID0gbmV3X3NrYjsKLQkJCQl9IGVsc2UgaWYgKCFza2JfcGFkZGluZ19mbGFnKSB7Ci0JCQkJCS8qIGRvcnJvcCBlcnJvciAqLwotCQkJCQlwcl9lcnIoIk5ldyBza2IgYWxsb2NhdGlvbiBFcnJvclxuIik7Ci0JCQkJCWdvdG8gZG9ycm9wOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIERNQSBidWZmZXIgaXMgdXNlZCBhcyBTS0IgYXMgaXQgaXMuKi8KKwkJCQkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CiAJCQkJfQogCQkJfSBlbHNlIHsKLQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQkvKiBbSGVhZGVyOjE0XVtwYWRkaW5nOjJdW3BheWxvYWRdICovCisJCQkJLyogVGhlIGxlbmd0aCBpbmNsdWRlcyBwYWRkaW5nIGxlbmd0aCAqLworCQkJCWxlbmd0aCA9IGxlbmd0aCAtIFBDSF9HQkVfRE1BX1BBRERJTkc7CisJCQkJaWYgKChsZW5ndGggPCBjb3B5YnJlYWspIHx8CisJCQkJICAgIChORVRfSVBfQUxJR04gIT0gUENIX0dCRV9ETUFfUEFERElORykpIHsKKwkJCQkJLyogQmVjYXVzZSBhbGlnbm1lbnQgZGlmZmVycywKKwkJCQkJICogdGhlIG5ld19za2IgaXMgbmV3bHkgYWxsb2NhdGVkLAorCQkJCQkgKiBhbmQgZGF0YSBpcyBjb3BpZWQgdG8gbmV3X3NrYi4KKwkJCQkJICogUGFkZGluZyBkYXRhIGlzIGRlbGV0ZWQKKwkJCQkJICogYXQgdGhlIHRpbWUgb2YgYSBjb3B5LiovCisJCQkJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwKKwkJCQkJCQkgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKKwkJCQkJaWYgKCFuZXdfc2tiKSB7CisJCQkJCQkvKiBkb3Jyb3AgZXJyb3IgKi8KKwkJCQkJCXByX2VycigiTmV3IHNrYiBhbGxvY2F0aW9uICIKKwkJCQkJCQkiRXJyb3JcbiIpOworCQkJCQkJZ290byBkb3Jyb3A7CisJCQkJCX0KKwkJCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKKwkJCQkJbWVtY3B5KG5ld19za2ItPmRhdGEsIHNrYi0+ZGF0YSwKKwkJCQkJICAgICAgIEVUSF9ITEVOKTsKKwkJCQkJbWVtY3B5KCZuZXdfc2tiLT5kYXRhW0VUSF9ITEVOXSwKKwkJCQkJICAgICAgICZza2ItPmRhdGFbRVRIX0hMRU4gKworCQkJCQkgICAgICAgUENIX0dCRV9ETUFfUEFERElOR10sCisJCQkJCSAgICAgICBsZW5ndGggLSBFVEhfSExFTik7CisJCQkJCXNrYiA9IG5ld19za2I7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogUGFkZGluZyBkYXRhIGlzIGRlbGV0ZWQKKwkJCQkJICogYnkgbW92aW5nIGhlYWRlciBkYXRhLiovCisJCQkJCW1lbW1vdmUoJnNrYi0+ZGF0YVtQQ0hfR0JFX0RNQV9QQURESU5HXSwKKwkJCQkJCSZza2ItPmRhdGFbMF0sIEVUSF9ITEVOKTsKKwkJCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQkJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJCQl9CiAJCQl9Ci0JCQlpZiAoc2tiX3BhZGRpbmdfZmxhZykgewotCQkJCW1lbWNweSgmdG1wX3BhY2tldFswXSwgJnNrYi0+ZGF0YVswXSwgRVRIX0hMRU4pOwotCQkJCW1lbWNweSgmc2tiLT5kYXRhW05FVF9JUF9BTElHTl0sICZ0bXBfcGFja2V0WzBdLAotCQkJCQlFVEhfSExFTik7Ci0JCQkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCi0JCQl9Ci0KKwkJCS8qIFRoZSBsZW5ndGggaW5jbHVkZXMgRkNTIGxlbmd0aCAqLworCQkJbGVuZ3RoID0gbGVuZ3RoIC0gRVRIX0ZDU19MRU47CiAJCQkvKiB1cGRhdGUgc3RhdHVzIG9mIGRyaXZlciAqLwogCQkJYWRhcHRlci0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOwogCQkJYWRhcHRlci0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtMjI0Nyw3ICsyMjYyLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBwY2hfZ2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCi0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCiAJcGNoX2diZV9oYWxfcGh5X2h3X3Jlc2V0KCZhZGFwdGVyLT5odyk7CkBAIC0yMzIyLDYgKzIzMzcsNyBAQAogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0lQVjZfQ1NVTSB8IE5FVElGX0ZfR1JPOwogCXBjaF9nYmVfc2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CiAKKwlwY2hfZ2JlX21hY19sb2FkX21hY19hZGRyKCZhZGFwdGVyLT5odyk7CiAJcGNoX2diZV9tYWNfcmVzZXRfaHcoJmFkYXB0ZXItPmh3KTsKIAogCS8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwppbmRleCAxZjQyZjZhLi5kM2NiNzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYwpAQCAtMTQ4OCwxMiArMTQ4OCwxMCBAQAogICAgIAogCS8qIAogCSAqIFdhaXQgYSBmdWxsIFR4IHRpbWUgKDEuMm1zKSArIHNvbWUgZ3VhcmQgdGltZSwgTlMgc2F5cyAxLjZtcyB0b3RhbC4KLQkgKiBFYXJseSBkYXRhc2hlZXRzIHNhaWQgdG8gcG9sbCB0aGUgcmVzZXQgYml0LCBidXQgbm93IHRoZXkgc2F5IHRoYXQKLQkgKiBpdCAiaXMgbm90IGEgcmVsaWFibGUgaW5kaWNhdG9yIGFuZCBzdWJzZXF1ZW50bHkgc2hvdWxkIGJlIGlnbm9yZWQuIgotCSAqIFdlIHdhaXQgYXQgbGVhc3QgMTBtcy4KKwkgKiBXZSB3YWl0IGF0IGxlYXN0IDJtcy4KIAkgKi8KIAotCW1kZWxheSgxMCk7CisJbWRlbGF5KDIpOwogCiAJLyoKIAkgKiBSZXNldCBSQkNSWzAxXSBiYWNrIHRvIHplcm8gYXMgcGVyIG1hZ2ljIGluY2FudGF0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggOTIyNmNkYS4uNTMwYWI1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCkBAIC02OTEsNiArNjkxLDcgQEAKIAlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMTA1LCAweDBlMGEpLAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAwMzIsIDB4MGUwMSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDAsIDB4MDAzMiwgMHgwYTA1KSwKKwlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMDMyLCAweDBiMDUpLAogCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgwLCAweDAwMzIsIDB4MTEwMSksCiAJUENNQ0lBX0RFVklDRV9OVUxMLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3I4MTY5LmMgYi9kcml2ZXJzL25ldC9yODE2OS5jCmluZGV4IGJkZTdkNjEuLjdmZmRiODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3I4MTY5LmMKKysrIGIvZHJpdmVycy9uZXQvcjgxNjkuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFzcG0uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTYxNyw4ICs2MTgsOSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgcnRsODE2OF9vb2Jfbm90aWZ5KHZvaWQgX19pb21lbSAqaW9hZGRyLCB1OCBjbWQpCitzdGF0aWMgdm9pZCBydGw4MTY4X29vYl9ub3RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4IGNtZCkKIHsKKwl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJaW50IGk7CiAKIAlSVExfVzgoRVJJRFIsIGNtZCk7CkBAIC02MzAsNyArNjMyLDcgQEAKIAkJCWJyZWFrOwogCX0KIAotCW9jcF93cml0ZShpb2FkZHIsIDB4MSwgMHgzMCwgMHgwMDAwMDAwMSk7CisJb2NwX3dyaXRlKHRwLCAweDEsIDB4MzAsIDB4MDAwMDAwMDEpOwogfQogCiAjZGVmaW5lIE9PQl9DTURfUkVTRVQJCTB4MDAKQEAgLTk3Myw3ICs5NzUsOCBAQAogCQlpZiAocG0pCiAJCQlwbV9yZXF1ZXN0X3Jlc3VtZSgmdHAtPnBjaV9kZXYtPmRldik7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKLQkJbmV0aWZfaW5mbyh0cCwgaWZ1cCwgZGV2LCAibGluayB1cFxuIik7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQluZXRpZl9pbmZvKHRwLCBpZnVwLCBkZXYsICJsaW5rIHVwXG4iKTsKIAl9IGVsc2UgewogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCQluZXRpZl9pbmZvKHRwLCBpZmRvd24sIGRldiwgImxpbmsgZG93blxuIik7CkBAIC0yODY3LDggKzI4NzAsMTEgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAKLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpCisJaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjcpIHx8CisJICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjgpKSAmJgorCSAgICAob2NwX3JlYWQodHAsIDB4MGYsIDB4MDAxMCkgJiAweDAwMDA4MDAwKSkgewogCQlyZXR1cm47CisJfQogCiAJaWYgKCgodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjMpIHx8CiAJICAgICAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjQpKSAmJgpAQCAtMjg5MCw2ICsyODk2LDggQEAKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKIAkJUlRMX1c4KFBNQ0gsIFJUTF9SOChQTUNIKSAmIH4weDgwKTsKIAkJYnJlYWs7CiAJfQpAQCAtMjg5OSwxMiArMjkwNywxNyBAQAogewogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykKKwlpZiAoKCh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNykgfHwKKwkgICAgICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkpICYmCisJICAgIChvY3BfcmVhZCh0cCwgMHgwZiwgMHgwMDEwKSAmIDB4MDAwMDgwMDApKSB7CiAJCXJldHVybjsKKwl9CiAKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yODoKIAkJUlRMX1c4KFBNQ0gsIFJUTF9SOChQTUNIKSB8IDB4ODApOwogCQlicmVhazsKIAl9CkBAIC0zMDA4LDYgKzMwMjEsMTEgQEAKIAltaWktPnJlZ19udW1fbWFzayA9IDB4MWY7CiAJbWlpLT5zdXBwb3J0c19nbWlpID0gISEoY2ZnLT5mZWF0dXJlcyAmIFJUTF9GRUFUVVJFX0dNSUkpOwogCisJLyogZGlzYWJsZSBBU1BNIGNvbXBsZXRlbHkgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZworCSAqIHByb2JsZW1zIGFzIHdlbGwgYXMgZnVsbCBzeXN0ZW0gaGFuZ3MgZm9yIHNvbWUgUENJZSBkZXZpY2VzIHVzZXJzICovCisJcGNpX2Rpc2FibGVfbGlua19zdGF0ZShwZGV2LCBQQ0lFX0xJTktfU1RBVEVfTDBTIHwgUENJRV9MSU5LX1NUQVRFX0wxIHwKKwkJCQkgICAgIFBDSUVfTElOS19TVEFURV9DTEtQTSk7CisKIAkvKiBlbmFibGUgZGV2aWNlIChpbmNsLiBQQ0kgUE0gd2FrZXVwIGFuZCBob3RwbHVnIHNldHVwKSAqLwogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjIDwgMCkgewpAQCAtMzA0MSw3ICszMDU5LDcgQEAKIAkJZ290byBlcnJfb3V0X213aV8yOwogCX0KIAotCXRwLT5jcF9jbWQgPSBQQ0lNdWxSVyB8IFJ4Q2hrU3VtOworCXRwLT5jcF9jbWQgPSBSeENoa1N1bTsKIAogCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYKIAkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgJiYgdXNlX2RhYykgewpAQCAtMzE4OSw2ICszMjA3LDggQEAKIAlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKIAkJcG1fcnVudGltZV9wdXRfbm9pZGxlKCZwZGV2LT5kZXYpOwogCisJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwogb3V0OgogCXJldHVybiByYzsKIApAQCAtMzMxNSw3ICszMzM1LDggQEAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KIAlydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soaW9hZGRyKTsKIAotCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgeworCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yNyB8fAorCSAgICB0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8yOCkgewogCQl3aGlsZSAoUlRMX1I4KFR4UG9sbCkgJiBOUFEpCiAJCQl1ZGVsYXkoMjApOwogCkBAIC0zNzU3LDcgKzM3NzgsOCBAQAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDUxNTEpOwogCiAJLyogV29yayBhcm91bmQgZm9yIFJ4RklGTyBvdmVyZmxvdy4gKi8KLQlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEpIHsKKwlpZiAodHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMTEgfHwKKwkgICAgdHAtPm1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMjIpIHsKIAkJdHAtPmludHJfZXZlbnQgfD0gUnhGSUZPT3ZlciB8IFBDU1RpbWVvdXQ7CiAJCXRwLT5pbnRyX2V2ZW50ICY9IH5SeE92ZXJmbG93OwogCX0KQEAgLTM4NDMsOCArMzg2NSw3IEBACiAJQ3hwbF9kYmdfc2VsIHwgXAogCUFTRiB8IFwKIAlQa3RDbnRyRGlzYWJsZSB8IFwKLQlQQ0lEQUMgfCBcCi0JUENJTXVsUlcpCisJTWFjX2RiZ29fc2VsKQogCiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODEwMmVfMSh2b2lkIF9faW9tZW0gKmlvYWRkciwgc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CkBAIC0zODc0LDggKzM4OTUsNiBAQAogCWlmICgoY2ZnMSAmIExFRFMwKSAmJiAoY2ZnMSAmIExFRFMxKSkKIAkJUlRMX1c4KENvbmZpZzEsIGNmZzEgJiB+TEVEUzApOwogCi0JUlRMX1cxNihDUGx1c0NtZCwgUlRMX1IxNihDUGx1c0NtZCkgJiB+UjgxMFhfQ1BDTURfUVVJUktfTUFTSyk7Ci0KIAlydGxfZXBoeV9pbml0KGlvYWRkciwgZV9pbmZvXzgxMDJlXzEsIEFSUkFZX1NJWkUoZV9pbmZvXzgxMDJlXzEpKTsKIH0KIApAQCAtMzg4Nyw4ICszOTA2LDYgQEAKIAogCVJUTF9XOChDb25maWcxLCBNRU1NQVAgfCBJT01BUCB8IFZQRCB8IFBNRW5hYmxlKTsKIAlSVExfVzgoQ29uZmlnMywgUlRMX1I4KENvbmZpZzMpICYgfkJlYWNvbl9lbik7Ci0KLQlSVExfVzE2KENQbHVzQ21kLCBSVExfUjE2KENQbHVzQ21kKSAmIH5SODEwWF9DUENNRF9RVUlSS19NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMDJlXzModm9pZCBfX2lvbWVtICppb2FkZHIsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzkxNCw2ICszOTMxLDggQEAKIAkJfQogCX0KIAorCVJUTF9XOChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CisKIAlzd2l0Y2ggKHRwLT5tYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wNzoKIAkJcnRsX2h3X3N0YXJ0XzgxMDJlXzEoaW9hZGRyLCBwZGV2KTsKQEAgLTM5MjgsMTQgKzM5NDcsMTMgQEAKIAkJYnJlYWs7CiAJfQogCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlSVExfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAogCVJUTF9XOChNYXhUeFBhY2tldFNpemUsIFR4UGFja2V0TWF4KTsKIAogCXJ0bF9zZXRfcnhfbWF4X3NpemUoaW9hZGRyLCByeF9idWZfc3opOwogCi0JdHAtPmNwX2NtZCB8PSBydGxfcndfY3BsdXNjbWQoaW9hZGRyKSB8IFBDSU11bFJXOwotCisJdHAtPmNwX2NtZCAmPSB+UjgxMFhfQ1BDTURfUVVJUktfTUFTSzsKIAlSVExfVzE2KENQbHVzQ21kLCB0cC0+Y3BfY21kKTsKIAogCVJUTF9XMTYoSW50ck1pdGlnYXRlLCAweDAwMDApOwpAQCAtMzk0NSwxNCArMzk2MywxMCBAQAogCVJUTF9XOChDaGlwQ21kLCBDbWRUeEVuYiB8IENtZFJ4RW5iKTsKIAlydGxfc2V0X3J4X3R4X2NvbmZpZ19yZWdpc3RlcnModHApOwogCi0JUlRMX1c4KENmZzkzNDYsIENmZzkzNDZfTG9jayk7Ci0KIAlSVExfUjgoSW50ck1hc2spOwogCiAJcnRsX3NldF9yeF9tb2RlKGRldik7CiAKLQlSVExfVzgoQ2hpcENtZCwgQ21kVHhFbmIgfCBDbWRSeEVuYik7Ci0KIAlSVExfVzE2KE11bHRpSW50ciwgUlRMX1IxNihNdWx0aUludHIpICYgMHhmMDAwKTsKIAogCVJUTF9XMTYoSW50ck1hc2ssIHRwLT5pbnRyX2V2ZW50KTsKQEAgLTQ2MzksMTIgKzQ2NTMsMzMgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJLyogV29yayBhcm91bmQgZm9yIHJ4IGZpZm8gb3ZlcmZsb3cgKi8KLQkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIFJ4RklGT092ZXIpICYmCi0JCSh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8xMSkpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOwotCQkJYnJlYWs7CisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBSeEZJRk9PdmVyKSkgeworCQkJc3dpdGNoICh0cC0+bWFjX3ZlcnNpb24pIHsKKwkJCS8qIFdvcmsgYXJvdW5kIGZvciByeCBmaWZvIG92ZXJmbG93ICovCisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMTE6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjI6CisJCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfMjY6CisJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJCXJ0bDgxNjlfdHhfdGltZW91dChkZXYpOworCQkJCWdvdG8gZG9uZTsKKwkJCS8qIFRlc3RlcnMgbmVlZGVkLiAqLworCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzE5OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIwOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIxOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzIzOgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI0OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI3OgorCQkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzI4OgorCQkJLyogRXhwZXJpbWVudGFsIHNjaWVuY2UuIFBrdGdlbiBwcm9vZi4gKi8KKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8xMjoKKwkJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8yNToKKwkJCQlpZiAoc3RhdHVzID09IFJ4RklGT092ZXIpCisJCQkJCWdvdG8gZG9uZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAogCQlpZiAodW5saWtlbHkoc3RhdHVzICYgU1lTRXJyKSkgewpAQCAtNDY4MCw3ICs0NzE1LDcgQEAKIAkJCShzdGF0dXMgJiBSeEZJRk9PdmVyKSA/IChzdGF0dXMgfCBSeE92ZXJmbG93KSA6IHN0YXR1cyk7CiAJCXN0YXR1cyA9IFJUTF9SMTYoSW50clN0YXR1cyk7CiAJfQotCitkb25lOgogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCAwZThiYjE5Li5jYTg4NmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTU2OSw5ICs1NjksMTQgQEAKIAkJCQkgIHN0cnVjdCBldGh0b29sX3Rlc3QgKnRlc3QsIHU2NCAqZGF0YSkKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gbmV0ZGV2X3ByaXYobmV0X2Rldik7Ci0Jc3RydWN0IGVmeF9zZWxmX3Rlc3RzIGVmeF90ZXN0czsKKwlzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKmVmeF90ZXN0czsKIAlpbnQgYWxyZWFkeV91cDsKLQlpbnQgcmM7CisJaW50IHJjID0gLUVOT01FTTsKKworCWVmeF90ZXN0cyA9IGt6YWxsb2Moc2l6ZW9mKCplZnhfdGVzdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVmeF90ZXN0cykKKwkJZ290byBmYWlsOworCiAKIAlBU1NFUlRfUlROTCgpOwogCWlmIChlZngtPnN0YXRlICE9IFNUQVRFX1JVTk5JTkcpIHsKQEAgLTU4OSwxMyArNTk0LDExIEBACiAJCWlmIChyYykgewogCQkJbmV0aWZfZXJyKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsCiAJCQkJICAiZmFpbGVkIG9wZW5pbmcgZGV2aWNlLlxuIik7Ci0JCQlnb3RvIGZhaWwyOworCQkJZ290byBmYWlsMTsKIAkJfQogCX0KIAotCW1lbXNldCgmZWZ4X3Rlc3RzLCAwLCBzaXplb2YoZWZ4X3Rlc3RzKSk7Ci0KLQlyYyA9IGVmeF9zZWxmdGVzdChlZngsICZlZnhfdGVzdHMsIHRlc3QtPmZsYWdzKTsKKwlyYyA9IGVmeF9zZWxmdGVzdChlZngsIGVmeF90ZXN0cywgdGVzdC0+ZmxhZ3MpOwogCiAJaWYgKCFhbHJlYWR5X3VwKQogCQlkZXZfY2xvc2UoZWZ4LT5uZXRfZGV2KTsKQEAgLTYwNCwxMCArNjA3LDExIEBACiAJCSAgIHJjID09IDAgPyAicGFzc2VkIiA6ICJmYWlsZWQiLAogCQkgICAodGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSA/ICJvZmYiIDogIm9uIik7CiAKLSBmYWlsMjoKLSBmYWlsMToKK2ZhaWwxOgogCS8qIEZpbGwgZXRodG9vbCByZXN1bHRzIHN0cnVjdHVyZXMgKi8KLQllZnhfZXRodG9vbF9maWxsX3NlbGZfdGVzdHMoZWZ4LCAmZWZ4X3Rlc3RzLCBOVUxMLCBkYXRhKTsKKwllZnhfZXRodG9vbF9maWxsX3NlbGZfdGVzdHMoZWZ4LCBlZnhfdGVzdHMsIE5VTEwsIGRhdGEpOworCWtmcmVlKGVmeF90ZXN0cyk7CitmYWlsOgogCWlmIChyYykKIAkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA1OTc2ZDFkLi42NDBlMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMTc3Nyw2ICsxNzc3LDcgQEAKIAkJCQkJICAgICAgImN1cl9yeDolNC40ZCwgZGlydHlfcng6JTQuNGRcbiIsCiAJCQkJCSAgICAgIG5ldF9kZXYtPm5hbWUsIHNpc19wcml2LT5jdXJfcngsCiAJCQkJCSAgICAgIHNpc19wcml2LT5kaXJ0eV9yeCk7CisJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWJyZWFrOwogCQkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmMgYi9kcml2ZXJzL25ldC9za2dlLmMKaW5kZXggNDJkYWY5OC4uMzViMjhmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtMzg1Niw5ICszODU2LDYgQEAKIAltZW1jcHlfZnJvbWlvKGRldi0+ZGV2X2FkZHIsIGh3LT5yZWdzICsgQjJfTUFDXzEgKyBwb3J0KjgsIEVUSF9BTEVOKTsKIAltZW1jcHkoZGV2LT5wZXJtX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCi0JLyogZGV2aWNlIGlzIG9mZiB1bnRpbCBsaW5rIGRldGVjdGlvbiAqLwotCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0KIAlyZXR1cm4gZGV2OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDM0YTBhZjMuLjBlNWYwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC0xNTYwLDggKzE1NjAsMTAgQEAKIAogCXByaXYtPmh3ID0gZGV2aWNlOwogCi0JaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpCisJaWYgKGRldmljZV9jYW5fd2FrZXVwKHByaXYtPmRldmljZSkpIHsKIAkJcHJpdi0+d29sb3B0cyA9IFdBS0VfTUFHSUM7IC8qIE1hZ2ljIEZyYW1lIGFzIGRlZmF1bHQgKi8KKwkJZW5hYmxlX2lycV93YWtlKGRldi0+aXJxKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggNzg0MWE4Zi4uMDZjMGU1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02MCwxMiArNjAsNiBAQAogI2RlZmluZSBCQVJfMAkwCiAjZGVmaW5lIEJBUl8yCTIKIAotI2lmIGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpIHx8IGRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVFfTU9EVUxFKQotI2RlZmluZSBURzNfVkxBTl9UQUdfVVNFRCAxCi0jZWxzZQotI2RlZmluZSBURzNfVkxBTl9UQUdfVVNFRCAwCi0jZW5kaWYKLQogI2luY2x1ZGUgInRnMy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJInRnMyIKQEAgLTEzNCw5ICsxMjgsNiBAQAogCQkJCSBURzNfVFhfUklOR19TSVpFKQogI2RlZmluZSBORVhUX1RYKE4pCQkoKChOKSArIDEpICYgKFRHM19UWF9SSU5HX1NJWkUgLSAxKSkKIAotI2RlZmluZSBURzNfUlhfRE1BX0FMSUdOCQkxNgotI2RlZmluZSBURzNfUlhfSEVBRFJPT00JCQlBTElHTihWTEFOX0hMRU4sIFRHM19SWF9ETUFfQUxJR04pCi0KICNkZWZpbmUgVEczX0RNQV9CWVRFX0VOQUIJCTY0CiAKICNkZWZpbmUgVEczX1JYX1NURF9ETUFfU1oJCTE1MzYKQEAgLTQ3MjIsOCArNDcxMyw2IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJCXUzMiBvcGFxdWVfa2V5LCBkZXNjX2lkeCwgKnBvc3RfcHRyOwotCQlib29sIGh3X3ZsYW4gX19tYXliZV91bnVzZWQgPSBmYWxzZTsKLQkJdTE2IHZ0YWcgX19tYXliZV91bnVzZWQgPSAwOwogCiAJCWRlc2NfaWR4ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9JTkRFWF9NQVNLOwogCQlvcGFxdWVfa2V5ID0gZGVzYy0+b3BhcXVlICYgUlhEX09QQVFVRV9SSU5HX01BU0s7CkBAIC00NzgyLDEyICs0NzcxLDEyIEBACiAJCQl0ZzNfcmVjeWNsZV9yeCh0bmFwaSwgdHByLCBvcGFxdWVfa2V5LAogCQkJCSAgICAgICBkZXNjX2lkeCwgKnBvc3RfcHRyKTsKIAotCQkJY29weV9za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHRwLT5kZXYsIGxlbiArIFZMQU5fSExFTiArCisJCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsKIAkJCQkJCSAgICBURzNfUkFXX0lQX0FMSUdOKTsKIAkJCWlmIChjb3B5X3NrYiA9PSBOVUxMKQogCQkJCWdvdG8gZHJvcF9pdF9ub19yZWN5Y2xlOwogCi0JCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgVEczX1JBV19JUF9BTElHTiArIFZMQU5fSExFTik7CisJCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgVEczX1JBV19JUF9BTElHTik7CiAJCQlza2JfcHV0KGNvcHlfc2tiLCBsZW4pOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRwLT5wZGV2LCBkbWFfYWRkciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIGNvcHlfc2tiLT5kYXRhLCBsZW4pOwpAQCAtNDgxNCwzMCArNDgwMywxMSBAQAogCQl9CiAKIAkJaWYgKGRlc2MtPnR5cGVfZmxhZ3MgJiBSWERfRkxBR19WTEFOICYmCi0JCSAgICAhKHRwLT5yeF9tb2RlICYgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHKSkgewotCQkJdnRhZyA9IGRlc2MtPmVycl92bGFuICYgUlhEX1ZMQU5fTUFTSzsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotCQkJaWYgKHRwLT52bGdycCkKLQkJCQlod192bGFuID0gdHJ1ZTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJewotCQkJCXN0cnVjdCB2bGFuX2V0aGhkciAqdmUgPSAoc3RydWN0IHZsYW5fZXRoaGRyICopCi0JCQkJCQkgICAgX19za2JfcHVzaChza2IsIFZMQU5fSExFTik7CisJCSAgICAhKHRwLT5yeF9tb2RlICYgUlhfTU9ERV9LRUVQX1ZMQU5fVEFHKSkKKwkJCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLAorCQkJCQkgICAgICAgZGVzYy0+ZXJyX3ZsYW4gJiBSWERfVkxBTl9NQVNLKTsKIAotCQkJCW1lbW1vdmUodmUsIHNrYi0+ZGF0YSArIFZMQU5fSExFTiwKLQkJCQkJRVRIX0FMRU4gKiAyKTsKLQkJCQl2ZS0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOwotCQkJCXZlLT5oX3ZsYW5fVENJID0gaHRvbnModnRhZyk7Ci0JCQl9Ci0JCX0KLQotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JCWlmIChod192bGFuKQotCQkJdmxhbl9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHRwLT52bGdycCwgdnRhZywgc2tiKTsKLQkJZWxzZQotI2VuZGlmCi0JCQluYXBpX2dyb19yZWNlaXZlKCZ0bmFwaS0+bmFwaSwgc2tiKTsKKwkJbmFwaV9ncm9fcmVjZWl2ZSgmdG5hcGktPm5hcGksIHNrYik7CiAKIAkJcmVjZWl2ZWQrKzsKIAkJYnVkZ2V0LS07CkBAIC01NzQwLDExICs1NzEwLDkgQEAKIAkJYmFzZV9mbGFncyB8PSBUWERfRkxBR19UQ1BVRFBfQ1NVTTsKIAl9CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwotI2VuZGlmCiAKIAlsZW4gPSBza2JfaGVhZGxlbihza2IpOwogCkBAIC01OTg2LDExICs1OTU0LDEwIEBACiAJCQl9CiAJCX0KIAl9Ci0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKKwogCWlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpCiAJCWJhc2VfZmxhZ3MgfD0gKFRYRF9GTEFHX1ZMQU4gfAogCQkJICAgICAgICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwotI2VuZGlmCiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX0pVTUJPX0JERkxBRykgJiYKIAkgICAgIW1zcyAmJiBza2ItPmxlbiA+IFZMQU5fRVRIX0ZSQU1FX0xFTikKQEAgLTk1MzIsMTcgKzk0OTksMTAgQEAKIAlyeF9tb2RlID0gdHAtPnJ4X21vZGUgJiB+KFJYX01PREVfUFJPTUlTQyB8CiAJCQkJICBSWF9NT0RFX0tFRVBfVkxBTl9UQUcpOwogCisjaWYgIWRlZmluZWQoQ09ORklHX1ZMQU5fODAyMVEpICYmICFkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKIAkvKiBXaGVuIEFTRiBpcyBpbiB1c2UsIHdlIGFsd2F5cyBrZWVwIHRoZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcKIAkgKiBmbGFnIGNsZWFyLgogCSAqLwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JaWYgKCF0cC0+dmxncnAgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCi0JCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwotI2Vsc2UKLQkvKiBCeSBkZWZpbml0aW9uLCBWTEFOIGlzIGRpc2FibGVkIGFsd2F5cyBpbiB0aGlzCi0JICogY2FzZS4KLQkgKi8KIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCiAJCXJ4X21vZGUgfD0gUlhfTU9ERV9LRUVQX1ZMQU5fVEFHOwogI2VuZGlmCkBAIC0xMTE5OCw3ICsxMTE1OCw5IEBACiAJCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19QSFlfU0VSREVTKQogCQkJYnJlYWs7CQkJLyogV2UgaGF2ZSBubyBQSFkgKi8KIAotCQlpZiAodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKQorCQlpZiAoKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX0lTX0xPV19QT1dFUikgfHwKKwkJICAgICgodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpICYmCisJCSAgICAgIW5ldGlmX3J1bm5pbmcoZGV2KSkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlzcGluX2xvY2tfYmgoJnRwLT5sb2NrKTsKQEAgLTExMjE0LDcgKzExMTc2LDkgQEAKIAkJaWYgKHRwLT5waHlfZmxhZ3MgJiBURzNfUEhZRkxHX1BIWV9TRVJERVMpCiAJCQlicmVhazsJCQkvKiBXZSBoYXZlIG5vIFBIWSAqLwogCi0JCWlmICh0cC0+cGh5X2ZsYWdzICYgVEczX1BIWUZMR19JU19MT1dfUE9XRVIpCisJCWlmICgodHAtPnBoeV9mbGFncyAmIFRHM19QSFlGTEdfSVNfTE9XX1BPV0VSKSB8fAorCQkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgJiYKKwkJICAgICAhbmV0aWZfcnVubmluZyhkZXYpKSkKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwpAQCAtMTEyMzAsMzEgKzExMTk0LDYgQEAKIAlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAotc3RhdGljIHZvaWQgdGczX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHZsYW5fZ3JvdXAgKmdycCkKLXsKLQlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQl0cC0+dmxncnAgPSBncnA7Ci0JCXJldHVybjsKLQl9Ci0KLQl0ZzNfbmV0aWZfc3RvcCh0cCk7Ci0KLQl0ZzNfZnVsbF9sb2NrKHRwLCAwKTsKLQotCXRwLT52bGdycCA9IGdycDsKLQotCS8qIFVwZGF0ZSBSWF9NT0RFX0tFRVBfVkxBTl9UQUcgYml0IGluIFJYX01PREUgcmVnaXN0ZXIuICovCi0JX190ZzNfc2V0X3J4X21vZGUoZGV2KTsKLQotCXRnM19uZXRpZl9zdGFydCh0cCk7Ci0KLQl0ZzNfZnVsbF91bmxvY2sodHApOwotfQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgdGczX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTMwNjYsOSArMTMwMDUsNyBAQAogCiBzdGF0aWMgdm9pZCBpbmxpbmUgdmxhbl9mZWF0dXJlc19hZGQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLSNpZiBURzNfVkxBTl9UQUdfVVNFRAogCWRldi0+dmxhbl9mZWF0dXJlcyB8PSBmbGFnczsKLSNlbmRpZgogfQogCiBzdGF0aWMgaW5saW5lIHUzMiB0ZzNfcnhfcmV0X3Jpbmdfc2l6ZShzdHJ1Y3QgdGczICp0cCkKQEAgLTEzODYxLDExICsxMzc5OCwxMSBAQAogCWVsc2UKIAkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUE9MTF9TRVJERVM7CiAKLQl0cC0+cnhfb2Zmc2V0ID0gTkVUX0lQX0FMSUdOICsgVEczX1JYX0hFQURST09NOworCXRwLT5yeF9vZmZzZXQgPSBORVRfSVBfQUxJR047CiAJdHAtPnJ4X2NvcHlfdGhyZXNoID0gVEczX1JYX0NPUFlfVEhSRVNIT0xEOwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwMSAmJgogCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1BDSVhfTU9ERSkgIT0gMCkgewotCQl0cC0+cnhfb2Zmc2V0IC09IE5FVF9JUF9BTElHTjsKKwkJdHAtPnJ4X29mZnNldCA9IDA7CiAjaWZuZGVmIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJCXRwLT5yeF9jb3B5X3RocmVzaCA9IH4odTE2KTA7CiAjZW5kaWYKQEAgLTE0NjI5LDkgKzE0NTY2LDYgQEAKIAkubmRvX2RvX2lvY3RsCQk9IHRnM19pb2N0bCwKIAkubmRvX3R4X3RpbWVvdXQJCT0gdGczX3R4X3RpbWVvdXQsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IHRnM19jaGFuZ2VfbXR1LAotI2lmIFRHM19WTEFOX1RBR19VU0VECi0JLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gdGczX3ZsYW5fcnhfcmVnaXN0ZXIsCi0jZW5kaWYKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gdGczX3BvbGxfY29udHJvbGxlciwKICNlbmRpZgpAQCAtMTQ2NDgsOSArMTQ1ODIsNiBAQAogCS5uZG9fZG9faW9jdGwJCT0gdGczX2lvY3RsLAogCS5uZG9fdHhfdGltZW91dAkJPSB0ZzNfdHhfdGltZW91dCwKIAkubmRvX2NoYW5nZV9tdHUJCT0gdGczX2NoYW5nZV9tdHUsCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKLQkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSB0ZzNfdmxhbl9yeF9yZWdpc3RlciwKLSNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSB0ZzNfcG9sbF9jb250cm9sbGVyLAogI2VuZGlmCkBAIC0xNDcwMCw5ICsxNDYzMSw3IEBACiAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCi0jaWYgVEczX1ZMQU5fVEFHX1VTRUQKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWDsKLSNlbmRpZgogCiAJdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXRwLT5wZGV2ID0gcGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggZDYyYzhkOS4uZjUyODI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTI4MDgsOSArMjgwOCw2IEBACiAJdTMyCQkJCXJ4X3N0ZF9tYXhfcG9zdDsKIAl1MzIJCQkJcnhfb2Zmc2V0OwogCXUzMgkJCQlyeF9wa3RfbWFwX3N6OwotI2lmIFRHM19WTEFOX1RBR19VU0VECi0Jc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGdycDsKLSNlbmRpZgogCiAKIAkvKiBiZWdpbiAiZXZlcnl0aGluZyBlbHNlIiBjYWNoZWxpbmUocykgc2VjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKaW5kZXggMDRlOGNlMS4uNzExMzE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGNkY19uY20uYwogICoKLSAqIENvcHlyaWdodCAoQykgU1QtRXJpY3Nzb24gMjAxMAorICogQ29weXJpZ2h0IChDKSBTVC1Fcmljc3NvbiAyMDEwLTIwMTEKICAqIENvbnRhY3Q6IEFsZXhleSBPcmlzaGtvIDxhbGV4ZXkub3Jpc2hrb0BzdGVyaWNzc29uLmNvbT4KICAqIE9yaWdpbmFsIGF1dGhvcjogSGFucyBQZXR0ZXIgU2VsYXNreSA8aGFucy5wZXR0ZXIuc2VsYXNreUBzdGVyaWNzc29uLmNvbT4KICAqCkBAIC01NCw3ICs1NCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiL3VzYm5ldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9jZGMuaD4KIAotI2RlZmluZQlEUklWRVJfVkVSU0lPTgkJCQkiMTctSmFuLTIwMTEiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSI3LUZlYi0yMDExIgogCiAvKiBDREMgTkNNIHN1YmNsYXNzIDMuMi4xICovCiAjZGVmaW5lIFVTQl9DRENfTkNNX05EUDE2X0xFTkdUSF9NSU4JCTB4MTAKQEAgLTc3LDYgKzc3LDkgQEAKICAqLwogI2RlZmluZQlDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYCQkzMgogCisvKiBNYXhpbXVtIGFtb3VudCBvZiBJTiBkYXRhZ3JhbXMgaW4gTlRCICovCisjZGVmaW5lCUNEQ19OQ01fRFBUX0RBVEFHUkFNU19JTl9NQVgJCTAgLyogdW5saW1pdGVkICovCisKIC8qIFJlc3RhcnQgdGhlIHRpbWVyLCBpZiBhbW91bnQgb2YgZGF0YWdyYW1zIGlzIGxlc3MgdGhhbiBnaXZlbiB2YWx1ZSAqLwogI2RlZmluZQlDRENfTkNNX1JFU1RBUlRfVElNRVJfREFUQUdSQU1fQ05UCTMKIApAQCAtODUsMTEgKzg4LDYgQEAKIAkoc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9udGgxNikgKyBzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX25kcDE2KSArIFwKIAkoQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWCArIDEpICogc2l6ZW9mKHN0cnVjdCB1c2JfY2RjX25jbV9kcGUxNikpCiAKLXN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSB7Ci0JX19sZTMyCVVTQml0UmF0ZTsgLyogaG9sZHMgM0dQUCBkb3dubGluayB2YWx1ZSwgYml0cyBwZXIgc2Vjb25kICovCi0JX19sZTMyCURTQml0UmF0ZTsgLyogaG9sZHMgM0dQUCB1cGxpbmsgdmFsdWUsIGJpdHMgcGVyIHNlY29uZCAqLwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBjZGNfbmNtX2RhdGEgewogCXN0cnVjdCB1c2JfY2RjX25jbV9udGgxNiBudGgxNjsKIAlzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMTYgbmRwMTY7CkBAIC0xOTgsMTAgKzE5NiwxMCBAQAogewogCXN0cnVjdCB1c2JfY2RjX25vdGlmaWNhdGlvbiByZXE7CiAJdTMyIHZhbDsKLQlfX2xlMTYgbWF4X2RhdGFncmFtX3NpemU7CiAJdTggZmxhZ3M7CiAJdTggaWZhY2Vfbm87CiAJaW50IGVycjsKKwl1MTYgbnRiX2ZtdF9zdXBwb3J0ZWQ7CiAKIAlpZmFjZV9ubyA9IGN0eC0+Y29udHJvbC0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIApAQCAtMjIzLDYgKzIyMSw5IEBACiAJY3R4LT50eF9yZW1haW5kZXIgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXRQYXlsb2FkUmVtYWluZGVyKTsKIAljdHgtPnR4X21vZHVsdXMgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLndOZHBPdXREaXZpc29yKTsKIAljdHgtPnR4X25kcF9tb2R1bHVzID0gbGUxNl90b19jcHUoY3R4LT5uY21fcGFybS53TmRwT3V0QWxpZ25tZW50KTsKKwkvKiBkZXZpY2VzIHByaW9yIHRvIE5DTSBFcnJhdGEgc2hhbGwgc2V0IHRoaXMgZmllbGQgdG8gemVybyAqLworCWN0eC0+dHhfbWF4X2RhdGFncmFtcyA9IGxlMTZfdG9fY3B1KGN0eC0+bmNtX3Bhcm0ud050Yk91dE1heERhdGFncmFtcyk7CisJbnRiX2ZtdF9zdXBwb3J0ZWQgPSBsZTE2X3RvX2NwdShjdHgtPm5jbV9wYXJtLmJtTnRiRm9ybWF0c1N1cHBvcnRlZCk7CiAKIAlpZiAoY3R4LT5mdW5jX2Rlc2MgIT0gTlVMTCkKIAkJZmxhZ3MgPSBjdHgtPmZ1bmNfZGVzYy0+Ym1OZXR3b3JrQ2FwYWJpbGl0aWVzOwpAQCAtMjMxLDIyICsyMzIsNTggQEAKIAogCXByX2RlYnVnKCJkd050YkluTWF4U2l6ZT0ldSBkd050Yk91dE1heFNpemU9JXUgIgogCQkgIndOZHBPdXRQYXlsb2FkUmVtYWluZGVyPSV1IHdOZHBPdXREaXZpc29yPSV1ICIKLQkJICJ3TmRwT3V0QWxpZ25tZW50PSV1IGZsYWdzPTB4JXhcbiIsCisJCSAid05kcE91dEFsaWdubWVudD0ldSB3TnRiT3V0TWF4RGF0YWdyYW1zPSV1IGZsYWdzPTB4JXhcbiIsCiAJCSBjdHgtPnJ4X21heCwgY3R4LT50eF9tYXgsIGN0eC0+dHhfcmVtYWluZGVyLCBjdHgtPnR4X21vZHVsdXMsCi0JCSBjdHgtPnR4X25kcF9tb2R1bHVzLCBmbGFncyk7CisJCSBjdHgtPnR4X25kcF9tb2R1bHVzLCBjdHgtPnR4X21heF9kYXRhZ3JhbXMsIGZsYWdzKTsKIAotCS8qIG1heCBjb3VudCBvZiB0eCBkYXRhZ3JhbXMgd2l0aG91dCB0ZXJtaW5hdGluZyBOVUxMIGVudHJ5ICovCi0JY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKKwkvKiBtYXggY291bnQgb2YgdHggZGF0YWdyYW1zICovCisJaWYgKChjdHgtPnR4X21heF9kYXRhZ3JhbXMgPT0gMCkgfHwKKwkJCShjdHgtPnR4X21heF9kYXRhZ3JhbXMgPiBDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKSkKKwkJY3R4LT50eF9tYXhfZGF0YWdyYW1zID0gQ0RDX05DTV9EUFRfREFUQUdSQU1TX01BWDsKIAogCS8qIHZlcmlmeSBtYXhpbXVtIHNpemUgb2YgcmVjZWl2ZWQgTlRCIGluIGJ5dGVzICovCi0JaWYgKChjdHgtPnJ4X21heCA8Ci0JICAgIChDRENfTkNNX01JTl9IRFJfU0laRSArIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpKSB8fAotCSAgICAoY3R4LT5yeF9tYXggPiBDRENfTkNNX05UQl9NQVhfU0laRV9SWCkpIHsKKwlpZiAoY3R4LT5yeF9tYXggPCBVU0JfQ0RDX05DTV9OVEJfTUlOX0lOX1NJWkUpIHsKKwkJcHJfZGVidWcoIlVzaW5nIG1pbiByZWNlaXZlIGxlbmd0aD0lZFxuIiwKKwkJCQkJCVVTQl9DRENfTkNNX05UQl9NSU5fSU5fU0laRSk7CisJCWN0eC0+cnhfbWF4ID0gVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFOworCX0KKworCWlmIChjdHgtPnJ4X21heCA+IENEQ19OQ01fTlRCX01BWF9TSVpFX1JYKSB7CiAJCXByX2RlYnVnKCJVc2luZyBkZWZhdWx0IG1heGltdW0gcmVjZWl2ZSBsZW5ndGg9JWRcbiIsCiAJCQkJCQlDRENfTkNNX05UQl9NQVhfU0laRV9SWCk7CiAJCWN0eC0+cnhfbWF4ID0gQ0RDX05DTV9OVEJfTUFYX1NJWkVfUlg7CiAJfQogCisJLyogaW5mb3JtIGRldmljZSBhYm91dCBOVEIgaW5wdXQgc2l6ZSBjaGFuZ2VzICovCisJaWYgKGN0eC0+cnhfbWF4ICE9IGxlMzJfdG9fY3B1KGN0eC0+bmNtX3Bhcm0uZHdOdGJJbk1heFNpemUpKSB7CisJCXJlcS5ibVJlcXVlc3RUeXBlID0gVVNCX1RZUEVfQ0xBU1MgfCBVU0JfRElSX09VVCB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19TRVRfTlRCX0lOUFVUX1NJWkU7CisJCXJlcS53VmFsdWUgPSAwOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCisJCWlmIChmbGFncyAmIFVTQl9DRENfTkNNX05DQVBfTlRCX0lOUFVUX1NJWkUpIHsKKwkJCXN0cnVjdCB1c2JfY2RjX25jbV9uZHBfaW5wdXRfc2l6ZSBuZHBfaW5fc3o7CisKKwkJCXJlcS53TGVuZ3RoID0gODsKKwkJCW5kcF9pbl9zei5kd050YkluTWF4U2l6ZSA9IGNwdV90b19sZTMyKGN0eC0+cnhfbWF4KTsKKwkJCW5kcF9pbl9zei53TnRiSW5NYXhEYXRhZ3JhbXMgPQorCQkJCQljcHVfdG9fbGUxNihDRENfTkNNX0RQVF9EQVRBR1JBTVNfTUFYKTsKKwkJCW5kcF9pbl9zei53UmVzZXJ2ZWQgPSAwOworCQkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgJm5kcF9pbl9zeiwgMCwgTlVMTCwKKwkJCQkJCQkJCTEwMDApOworCQl9IGVsc2UgeworCQkJX19sZTMyIGR3TnRiSW5NYXhTaXplID0gY3B1X3RvX2xlMzIoY3R4LT5yeF9tYXgpOworCisJCQlyZXEud0xlbmd0aCA9IDQ7CisJCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmZHdOdGJJbk1heFNpemUsIDAsCisJCQkJCQkJCU5VTEwsIDEwMDApOworCQl9CisKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIE5UQiBJbnB1dCBTaXplIGZhaWxlZFxuIik7CisJfQorCiAJLyogdmVyaWZ5IG1heGltdW0gc2l6ZSBvZiB0cmFuc21pdHRlZCBOVEIgaW4gYnl0ZXMgKi8KIAlpZiAoKGN0eC0+dHhfbWF4IDwKIAkgICAgKENEQ19OQ01fTUlOX0hEUl9TSVpFICsgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkpIHx8CkBAIC0yOTcsNDcgKzMzNCw4NCBAQAogCS8qIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiAqLwogCiAJLyogc2V0IENSQyBNb2RlICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9DUkNfTU9ERTsKLQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRCk7Ci0JcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKLQlyZXEud0xlbmd0aCA9IDA7CisJaWYgKGZsYWdzICYgVVNCX0NEQ19OQ01fTkNBUF9DUkNfTU9ERSkgeworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfU0VUX0NSQ19NT0RFOworCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fQ1JDX05PVF9BUFBFTkRFRCk7CisJCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7CisJCXJlcS53TGVuZ3RoID0gMDsKIAotCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsIE5VTEwsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpCi0JCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCBOVUxMLCAwLCBOVUxMLCAxMDAwKTsKKwkJaWYgKGVycikKKwkJCXByX2RlYnVnKCJTZXR0aW5nIENSQyBtb2RlIG9mZiBmYWlsZWRcbiIpOworCX0KIAotCS8qIHNldCBOVEIgZm9ybWF0ICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRTsKLQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOwotCXJlcS53VmFsdWUgPSBjcHVfdG9fbGUxNihVU0JfQ0RDX05DTV9OVEIxNl9GT1JNQVQpOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSAwOworCS8qIHNldCBOVEIgZm9ybWF0LCBpZiBib3RoIGZvcm1hdHMgYXJlIHN1cHBvcnRlZCAqLworCWlmIChudGJfZm10X3N1cHBvcnRlZCAmIFVTQl9DRENfTkNNX05USDMyX1NJR04pIHsKKwkJcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfT1VUIHwKKwkJCQkJCQlVU0JfUkVDSVBfSU5URVJGQUNFOworCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9OVEJfRk9STUFUOworCQlyZXEud1ZhbHVlID0gY3B1X3RvX2xlMTYoVVNCX0NEQ19OQ01fTlRCMTZfRk9STUFUKTsKKwkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJcmVxLndMZW5ndGggPSAwOwogCi0JZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7Ci0JaWYgKGVycikKLQkJcHJfZGVidWcoIlNldHRpbmcgTlRCIGZvcm1hdCB0byAxNi1iaXQgZmFpbGVkXG4iKTsKKwkJZXJyID0gY2RjX25jbV9kb19yZXF1ZXN0KGN0eCwgJnJlcSwgTlVMTCwgMCwgTlVMTCwgMTAwMCk7CisJCWlmIChlcnIpCisJCQlwcl9kZWJ1ZygiU2V0dGluZyBOVEIgZm9ybWF0IHRvIDE2LWJpdCBmYWlsZWRcbiIpOworCX0KKworCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwogCiAJLyogc2V0IE1heCBEYXRhZ3JhbSBTaXplIChNVFUpICovCi0JcmVxLmJtUmVxdWVzdFR5cGUgPSBVU0JfVFlQRV9DTEFTUyB8IFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFOwotCXJlcS5iTm90aWZpY2F0aW9uVHlwZSA9IFVTQl9DRENfR0VUX01BWF9EQVRBR1JBTV9TSVpFOwotCXJlcS53VmFsdWUgPSAwOwotCXJlcS53SW5kZXggPSBjcHVfdG9fbGUxNihpZmFjZV9ubyk7Ci0JcmVxLndMZW5ndGggPSBjcHVfdG9fbGUxNigyKTsKKwlpZiAoZmxhZ3MgJiBVU0JfQ0RDX05DTV9OQ0FQX01BWF9EQVRBR1JBTV9TSVpFKSB7CisJCV9fbGUxNiBtYXhfZGF0YWdyYW1fc2l6ZTsKKwkJdTE2IGV0aF9tYXhfc3ogPSBsZTE2X3RvX2NwdShjdHgtPmV0aGVyX2Rlc2MtPndNYXhTZWdtZW50U2l6ZSk7CiAKLQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsIDAsIE5VTEwsIDEwMDApOwotCWlmIChlcnIpIHsKLQkJcHJfZGVidWcoIiBHRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkLCB1c2luZyBzaXplPSV1XG4iLAotCQkJIENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpOwotCQkvKiB1c2UgZGVmYXVsdCAqLwotCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRTsKLQl9IGVsc2UgewotCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9JTiB8CisJCQkJCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRTsKKwkJcmVxLmJOb3RpZmljYXRpb25UeXBlID0gVVNCX0NEQ19HRVRfTUFYX0RBVEFHUkFNX1NJWkU7CisJCXJlcS53VmFsdWUgPSAwOworCQlyZXEud0luZGV4ID0gY3B1X3RvX2xlMTYoaWZhY2Vfbm8pOworCQlyZXEud0xlbmd0aCA9IGNwdV90b19sZTE2KDIpOwogCi0JCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplIDwgQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSkKLQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOwotCQllbHNlIGlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKLQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPSBDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFOworCQllcnIgPSBjZGNfbmNtX2RvX3JlcXVlc3QoY3R4LCAmcmVxLCAmbWF4X2RhdGFncmFtX3NpemUsIDAsIE5VTEwsCisJCQkJCQkJCQkxMDAwKTsKKwkJaWYgKGVycikgeworCQkJcHJfZGVidWcoIkdFVF9NQVhfREFUQUdSQU1fU0laRSBmYWlsZWQsIHVzZSBzaXplPSV1XG4iLAorCQkJCQkJQ0RDX05DTV9NSU5fREFUQUdSQU1fU0laRSk7CisJCX0gZWxzZSB7CisJCQljdHgtPm1heF9kYXRhZ3JhbV9zaXplID0gbGUxNl90b19jcHUobWF4X2RhdGFncmFtX3NpemUpOworCQkJLyogQ2hlY2sgRXRoIGRlc2NyaXB0b3IgdmFsdWUgKi8KKwkJCWlmIChldGhfbWF4X3N6IDwgQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkgeworCQkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4gZXRoX21heF9zeikKKwkJCQkJY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSA9IGV0aF9tYXhfc3o7CisJCQl9IGVsc2UgeworCQkJCWlmIChjdHgtPm1heF9kYXRhZ3JhbV9zaXplID4KKwkJCQkJCUNEQ19OQ01fTUFYX0RBVEFHUkFNX1NJWkUpCisJCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPQorCQkJCQkJQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKKwkJCX0KKworCQkJaWYgKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgPCBDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFKQorCQkJCWN0eC0+bWF4X2RhdGFncmFtX3NpemUgPQorCQkJCQlDRENfTkNNX01JTl9EQVRBR1JBTV9TSVpFOworCisJCQkvKiBpZiB2YWx1ZSBjaGFuZ2VkLCB1cGRhdGUgZGV2aWNlICovCisJCQlyZXEuYm1SZXF1ZXN0VHlwZSA9IFVTQl9UWVBFX0NMQVNTIHwgVVNCX0RJUl9PVVQgfAorCQkJCQkJCVVTQl9SRUNJUF9JTlRFUkZBQ0U7CisJCQlyZXEuYk5vdGlmaWNhdGlvblR5cGUgPSBVU0JfQ0RDX1NFVF9NQVhfREFUQUdSQU1fU0laRTsKKwkJCXJlcS53VmFsdWUgPSAwOworCQkJcmVxLndJbmRleCA9IGNwdV90b19sZTE2KGlmYWNlX25vKTsKKwkJCXJlcS53TGVuZ3RoID0gMjsKKwkJCW1heF9kYXRhZ3JhbV9zaXplID0gY3B1X3RvX2xlMTYoY3R4LT5tYXhfZGF0YWdyYW1fc2l6ZSk7CisKKwkJCWVyciA9IGNkY19uY21fZG9fcmVxdWVzdChjdHgsICZyZXEsICZtYXhfZGF0YWdyYW1fc2l6ZSwKKwkJCQkJCQkJMCwgTlVMTCwgMTAwMCk7CisJCQlpZiAoZXJyKQorCQkJCXByX2RlYnVnKCJTRVRfTUFYX0RBVEFHUkFNX1NJWkUgZmFpbGVkXG4iKTsKKwkJfQorCiAJfQogCiAJaWYgKGN0eC0+bmV0ZGV2LT5tdHUgIT0gKGN0eC0+bWF4X2RhdGFncmFtX3NpemUgLSBFVEhfSExFTikpCkBAIC00NjYsMTkgKzU0MCwxMyBAQAogCiAJCQljdHgtPmV0aGVyX2Rlc2MgPQogCQkJCQkoY29uc3Qgc3RydWN0IHVzYl9jZGNfZXRoZXJfZGVzYyAqKWJ1ZjsKLQogCQkJZGV2LT5oYXJkX210dSA9CiAJCQkJbGUxNl90b19jcHUoY3R4LT5ldGhlcl9kZXNjLT53TWF4U2VnbWVudFNpemUpOwogCi0JCQlpZiAoZGV2LT5oYXJkX210dSA8Ci0JCQkgICAgKENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTikpCi0JCQkJZGV2LT5oYXJkX210dSA9Ci0JCQkJCUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUgLSBFVEhfSExFTjsKLQotCQkJZWxzZSBpZiAoZGV2LT5oYXJkX210dSA+Ci0JCQkJIChDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU4pKQotCQkJCWRldi0+aGFyZF9tdHUgPQotCQkJCQlDRENfTkNNX01BWF9EQVRBR1JBTV9TSVpFIC0gRVRIX0hMRU47CisJCQlpZiAoZGV2LT5oYXJkX210dSA8IENEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkUpCisJCQkJZGV2LT5oYXJkX210dSA9CUNEQ19OQ01fTUlOX0RBVEFHUkFNX1NJWkU7CisJCQllbHNlIGlmIChkZXYtPmhhcmRfbXR1ID4gQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRSkKKwkJCQlkZXYtPmhhcmRfbXR1ID0JQ0RDX05DTV9NQVhfREFUQUdSQU1fU0laRTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgVVNCX0NEQ19OQ01fVFlQRToKQEAgLTYyOCwxMyArNjk2LDEzIEBACiAJdTMyIG9mZnNldDsKIAl1MzIgbGFzdF9vZmZzZXQ7CiAJdTE2IG4gPSAwOwotCXU4IHRpbWVvdXQgPSAwOworCXU4IHJlYWR5MnNlbmQgPSAwOwogCiAJLyogaWYgdGhlcmUgaXMgYSByZW1haW5pbmcgc2tiLCBpdCBnZXRzIHByaW9yaXR5ICovCiAJaWYgKHNrYiAhPSBOVUxMKQogCQlzd2FwKHNrYiwgY3R4LT50eF9yZW1fc2tiKTsKIAllbHNlCi0JCXRpbWVvdXQgPSAxOworCQlyZWFkeTJzZW5kID0gMTsKIAogCS8qCiAJICogKy0tLS0tLS0tLS0tLS0tLS0rCkBAIC02ODIsOSArNzUwLDEwIEBACiAKIAlmb3IgKDsgbiA8IGN0eC0+dHhfbWF4X2RhdGFncmFtczsgbisrKSB7CiAJCS8qIGNoZWNrIGlmIGVuZCBvZiB0cmFuc21pdCBidWZmZXIgaXMgcmVhY2hlZCAqLwotCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KQorCQlpZiAob2Zmc2V0ID49IGN0eC0+dHhfbWF4KSB7CisJCQlyZWFkeTJzZW5kID0gMTsKIAkJCWJyZWFrOwotCisJCX0KIAkJLyogY29tcHV0ZSBtYXhpbXVtIGJ1ZmZlciBzaXplICovCiAJCXJlbSA9IGN0eC0+dHhfbWF4IC0gb2Zmc2V0OwogCkBAIC03MTEsOSArNzgwLDcgQEAKIAkJCQl9CiAJCQkJY3R4LT50eF9yZW1fc2tiID0gc2tiOwogCQkJCXNrYiA9IE5VTEw7Ci0KLQkJCQkvKiBsb29wIG9uZSBtb3JlIHRpbWUgKi8KLQkJCQl0aW1lb3V0ID0gMTsKKwkJCQlyZWFkeTJzZW5kID0gMTsKIAkJCX0KIAkJCWJyZWFrOwogCQl9CkBAIC03NTYsNyArODIzLDcgQEAKIAkJY3R4LT50eF9jdXJyX2xhc3Rfb2Zmc2V0ID0gbGFzdF9vZmZzZXQ7CiAJCWdvdG8gZXhpdF9ub19za2I7CiAKLQl9IGVsc2UgaWYgKChuIDwgY3R4LT50eF9tYXhfZGF0YWdyYW1zKSAmJiAodGltZW91dCA9PSAwKSkgeworCX0gZWxzZSBpZiAoKG4gPCBjdHgtPnR4X21heF9kYXRhZ3JhbXMpICYmIChyZWFkeTJzZW5kID09IDApKSB7CiAJCS8qIHdhaXQgZm9yIG1vcmUgZnJhbWVzICovCiAJCS8qIHB1c2ggdmFyaWFibGVzICovCiAJCWN0eC0+dHhfY3Vycl9za2IgPSBza2Jfb3V0OwpAQCAtODEzLDcgKzg4MCw3IEBACiAJCQkJCWNwdV90b19sZTE2KHNpemVvZihjdHgtPnR4X25jbS5udGgxNikpOwogCWN0eC0+dHhfbmNtLm50aDE2LndTZXF1ZW5jZSA9IGNwdV90b19sZTE2KGN0eC0+dHhfc2VxKTsKIAljdHgtPnR4X25jbS5udGgxNi53QmxvY2tMZW5ndGggPSBjcHVfdG9fbGUxNihsYXN0X29mZnNldCk7Ci0JY3R4LT50eF9uY20ubnRoMTYud0ZwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKKwljdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXggPSBBTElHTihzaXplb2Yoc3RydWN0IHVzYl9jZGNfbmNtX250aDE2KSwKIAkJCQkJCQljdHgtPnR4X25kcF9tb2R1bHVzKTsKIAogCW1lbWNweShza2Jfb3V0LT5kYXRhLCAmKGN0eC0+dHhfbmNtLm50aDE2KSwgc2l6ZW9mKGN0eC0+dHhfbmNtLm50aDE2KSk7CkBAIC04MjUsMTMgKzg5MiwxMyBAQAogCXJlbSA9IHNpemVvZihjdHgtPnR4X25jbS5uZHAxNikgKyAoKGN0eC0+dHhfY3Vycl9mcmFtZV9udW0gKyAxKSAqCiAJCQkJCXNpemVvZihzdHJ1Y3QgdXNiX2NkY19uY21fZHBlMTYpKTsKIAljdHgtPnR4X25jbS5uZHAxNi53TGVuZ3RoID0gY3B1X3RvX2xlMTYocmVtKTsKLQljdHgtPnR4X25jbS5uZHAxNi53TmV4dEZwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLworCWN0eC0+dHhfbmNtLm5kcDE2LndOZXh0TmRwSW5kZXggPSAwOyAvKiByZXNlcnZlZCAqLwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4LAorCW1lbWNweSgoKHU4ICopc2tiX291dC0+ZGF0YSkgKyBjdHgtPnR4X25jbS5udGgxNi53TmRwSW5kZXgsCiAJCQkJCQkmKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJCXNpemVvZihjdHgtPnR4X25jbS5uZHAxNikpOwogCi0JbWVtY3B5KCgodTggKilza2Jfb3V0LT5kYXRhKSArIGN0eC0+dHhfbmNtLm50aDE2LndGcEluZGV4ICsKKwltZW1jcHkoKCh1OCAqKXNrYl9vdXQtPmRhdGEpICsgY3R4LT50eF9uY20ubnRoMTYud05kcEluZGV4ICsKIAkJCQkJc2l6ZW9mKGN0eC0+dHhfbmNtLm5kcDE2KSwKIAkJCQkJJihjdHgtPnR4X25jbS5kcGUxNiksCiAJCQkJCShjdHgtPnR4X2N1cnJfZnJhbWVfbnVtICsgMSkgKgpAQCAtOTYxLDcgKzEwMjgsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCXRlbXAgPSBsZTE2X3RvX2NwdShjdHgtPnJ4X25jbS5udGgxNi53RnBJbmRleCk7CisJdGVtcCA9IGxlMTZfdG9fY3B1KGN0eC0+cnhfbmNtLm50aDE2LndOZHBJbmRleCk7CiAJaWYgKCh0ZW1wICsgc2l6ZW9mKGN0eC0+cnhfbmNtLm5kcDE2KSkgPiBhY3RsZW4pIHsKIAkJcHJfZGVidWcoImludmFsaWQgRFBUMTYgaW5kZXhcbiIpOwogCQlnb3RvIGVycm9yOwpAQCAtMTA0OCwxMCArMTExNSwxMCBAQAogCiBzdGF0aWMgdm9pZAogY2RjX25jbV9zcGVlZF9jaGFuZ2Uoc3RydWN0IGNkY19uY21fY3R4ICpjdHgsCi0JCSAgICAgc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlICpkYXRhKQorCQkgICAgIHN0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSAqZGF0YSkKIHsKLQl1aW50MzJfdCByeF9zcGVlZCA9IGxlMzJfdG9fY3B1KGRhdGEtPlVTQml0UmF0ZSk7Ci0JdWludDMyX3QgdHhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5EU0JpdFJhdGUpOworCXVpbnQzMl90IHJ4X3NwZWVkID0gbGUzMl90b19jcHUoZGF0YS0+RExCaXRSUmF0ZSk7CisJdWludDMyX3QgdHhfc3BlZWQgPSBsZTMyX3RvX2NwdShkYXRhLT5VTEJpdFJhdGUpOwogCiAJLyoKIAkgKiBDdXJyZW50bHkgdGhlIFVTQi1ORVQgQVBJIGRvZXMgbm90IHN1cHBvcnQgcmVwb3J0aW5nIHRoZSBhY3R1YWwKQEAgLTEwOTIsNyArMTE1OSw3IEBACiAJLyogdGVzdCBmb3Igc3BsaXQgZGF0YSBpbiA4LWJ5dGUgY2h1bmtzICovCiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChFVkVOVF9TVFNfU1BMSVQsICZkZXYtPmZsYWdzKSkgewogCQljZGNfbmNtX3NwZWVkX2NoYW5nZShjdHgsCi0JCSAgICAgIChzdHJ1Y3QgY29ubmVjdGlvbl9zcGVlZF9jaGFuZ2UgKil1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCSAgICAgIChzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UgKil1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTExMjAsMTIgKzExODcsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFVTQl9DRENfTk9USUZZX1NQRUVEX0NIQU5HRToKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8Ci0JCSAgICAoc2l6ZW9mKCpldmVudCkgKyBzaXplb2Yoc3RydWN0IGNvbm5lY3Rpb25fc3BlZWRfY2hhbmdlKSkpCisJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCAoc2l6ZW9mKCpldmVudCkgKworCQkJCQlzaXplb2Yoc3RydWN0IHVzYl9jZGNfc3BlZWRfY2hhbmdlKSkpCiAJCQlzZXRfYml0KEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpOwogCQllbHNlCiAJCQljZGNfbmNtX3NwZWVkX2NoYW5nZShjdHgsCi0JCQkJKHN0cnVjdCBjb25uZWN0aW9uX3NwZWVkX2NoYW5nZSAqKSAmZXZlbnRbMV0pOworCQkJCShzdHJ1Y3QgdXNiX2NkY19zcGVlZF9jaGFuZ2UgKikgJmV2ZW50WzFdKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jIGIvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCmluZGV4IDAyYjYyMmUuLjUwMDJmNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKQEAgLTY1MSw2ICs2NTEsMTAgQEAKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmZG05NjAxX2luZm8sCiAJIH0sCiAJeworCSBVU0JfREVWSUNFKDB4MGZlNiwgMHg5NzAwKSwJLyogRE05NjAxIFVTQiB0byBGYXN0IEV0aGVybmV0IEFkYXB0ZXIgKi8KKwkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAorCSB9LAorCXsKIAkgVVNCX0RFVklDRSgweDBhNDYsIDB4OTAwMCksCS8qIERNOTAwMEUgKi8KIAkgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJmRtOTYwMV9pbmZvLAogCSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCmluZGV4IGJlZDhmY2UuLjZkODM4MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYworKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKQEAgLTI2MjgsMTUgKzI2MjgsMTUgQEAKIAogc3RhdGljIHZvaWQgaHNvX2ZyZWVfdGlvbWdldChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKQogewotCXN0cnVjdCBoc29fdGlvY21nZXQgKnRpb2NtZ2V0ID0gc2VyaWFsLT50aW9jbWdldDsKKwlzdHJ1Y3QgaHNvX3Rpb2NtZ2V0ICp0aW9jbWdldDsKKwlpZiAoIXNlcmlhbCkKKwkJcmV0dXJuOworCXRpb2NtZ2V0ID0gc2VyaWFsLT50aW9jbWdldDsKIAlpZiAodGlvY21nZXQpIHsKLQkJaWYgKHRpb2NtZ2V0LT51cmIpIHsKLQkJCXVzYl9mcmVlX3VyYih0aW9jbWdldC0+dXJiKTsKLQkJCXRpb2NtZ2V0LT51cmIgPSBOVUxMOwotCQl9CisJCXVzYl9mcmVlX3VyYih0aW9jbWdldC0+dXJiKTsKKwkJdGlvY21nZXQtPnVyYiA9IE5VTEw7CiAJCXNlcmlhbC0+dGlvY21nZXQgPSBOVUxMOwogCQlrZnJlZSh0aW9jbWdldCk7Ci0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwppbmRleCA1ZTk4NjQzLi43ZGM4NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCkBAIC00MDYsNiArNDA2LDcgQEAKIAogCWlmIChmdy0+c2l6ZSA+IEtBV0VUSF9GSVJNV0FSRV9CVUZfU0laRSkgewogCQllcnIoIkZpcm13YXJlIHRvbyBiaWc6ICV6dSIsIGZ3LT5zaXplKTsKKwkJcmVsZWFzZV9maXJtd2FyZShmdyk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAlkYXRhX2xlbiA9IGZ3LT5zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IGVkOWE0MTYuLjk1YzQxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTkzMSw4ICs5MzEsMTAgQEAKIAkJaWYgKHVyYiAhPSBOVUxMKSB7CiAJCQljbGVhcl9iaXQgKEVWRU5UX1JYX01FTU9SWSwgJmRldi0+ZmxhZ3MpOwogCQkJc3RhdHVzID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGRldi0+aW50Zik7Ci0JCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCQkJZ290byBmYWlsX2xvd21lbTsKKwkJCX0KIAkJCWlmIChyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfS0VSTkVMKSA9PSAtRU5PTElOSykKIAkJCQlyZXNjaGVkID0gMDsKIAkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jIGIvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCmluZGV4IDkwYTIzZTQuLjgyZGJhNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYworKysgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKQEAgLTQ0Niw2ICs0NDYsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHZpcnRuZXRfbmFwaV9lbmFibGUoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCit7CisJbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKKworCS8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKKwkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKKwkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgorCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLworCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgeworCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2aS0+cnZxKTsKKwkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7CisJfQorfQorCiBzdGF0aWMgdm9pZCByZWZpbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmk7CkBAIC00NTQsNyArNDY4LDcgQEAKIAl2aSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdmlydG5ldF9pbmZvLCByZWZpbGwud29yayk7CiAJbmFwaV9kaXNhYmxlKCZ2aS0+bmFwaSk7CiAJc3RpbGxfZW1wdHkgPSAhdHJ5X2ZpbGxfcmVjdih2aSwgR0ZQX0tFUk5FTCk7Ci0JbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKKwl2aXJ0bmV0X25hcGlfZW5hYmxlKHZpKTsKIAogCS8qIEluIHRoZW9yeSwgdGhpcyBjYW4gaGFwcGVuOiBpZiB3ZSBkb24ndCBnZXQgYW55IGJ1ZmZlcnMgaW4KIAkgKiB3ZSB3aWxsICpuZXZlciogdHJ5IHRvIGZpbGwgYWdhaW4uICovCkBAIC02MzgsMTYgKzY1Miw3IEBACiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JbmFwaV9lbmFibGUoJnZpLT5uYXBpKTsKLQotCS8qIElmIGFsbCBidWZmZXJzIHdlcmUgZmlsbGVkIGJ5IG90aGVyIHNpZGUgYmVmb3JlIHdlIG5hcGlfZW5hYmxlZCwgd2UKLQkgKiB3b24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQsIHNvIHByb2Nlc3MgYW55IG91dHN0YW5kaW5nIHBhY2tldHMKLQkgKiBub3cuICB2aXJ0bmV0X3BvbGwgd2FudHMgcmUtZW5hYmxlIHRoZSBxdWV1ZSwgc28gd2UgZGlzYWJsZSBoZXJlLgotCSAqIFdlIHN5bmNocm9uaXplIGFnYWluc3QgaW50ZXJydXB0cyB2aWEgTkFQSV9TVEFURV9TQ0hFRCAqLwotCWlmIChuYXBpX3NjaGVkdWxlX3ByZXAoJnZpLT5uYXBpKSkgewotCQl2aXJ0cXVldWVfZGlzYWJsZV9jYih2aS0+cnZxKTsKLQkJX19uYXBpX3NjaGVkdWxlKCZ2aS0+bmFwaSk7Ci0JfQorCXZpcnRuZXRfbmFwaV9lbmFibGUodmkpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtY29uZmlnLmMKaW5kZXggMDFjMDVmNS4uMjI4ZDRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLWNvbmZpZy5jCisrKyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1jb25maWcuYwpAQCAtMzY5MCw3ICszNjkwLDcgQEAKIAlpZiAoc3RhdHVzICE9IFZYR0VfSFdfT0spCiAJCWdvdG8gZXhpdDsKIAotCWlmICgocnRzX3RhYmxlICE9IFZYR0VfSFdfUlRTX0FDQ0VTU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9EQSkgfHwKKwlpZiAoKHJ0c190YWJsZSAhPSBWWEdFX0hXX1JUU19BQ0NFU1NfU1RFRVJfQ1RSTF9EQVRBX1NUUlVDVF9TRUxfREEpICYmCiAJICAgIChydHNfdGFibGUgIT0KIAkgICAgIFZYR0VfSFdfUlRTX0FDU19TVEVFUl9DVFJMX0RBVEFfU1RSVUNUX1NFTF9SVEhfTVVMVElfSVQpKQogCQkqZGF0YTEgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2RtYS5jCmluZGV4IDAwNjRiZTcuLjIxMDkxYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvZG1hLmMKQEAgLTgzOCw5ICs4MzgsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBxbWF4OyBpKyspIHsKIAkJZXJyID0gYXRoNWtfaHdfc3RvcF90eF9kbWEoYWgsIGkpOwogCQkvKiAtRUlOVkFMIC0+IHF1ZXVlIGluYWN0aXZlICovCi0JCWlmIChlcnIgIT0gLUVJTlZBTCkKKwkJaWYgKGVyciAmJiBlcnIgIT0gLUVJTlZBTCkKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYwppbmRleCBlNWYyYjk2Li5hNzAyODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCkBAIC04Niw3ICs4Niw3IEBACiAJaWYgKCFhaC0+YWhfYndtb2RlKSB7CiAJCWR1ciA9IGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uKHNjLT5odywKIAkJCQkJCU5VTEwsIGxlbiwgcmF0ZSk7Ci0JCXJldHVybiBkdXI7CisJCXJldHVybiBsZTE2X3RvX2NwdShkdXIpOwogCX0KIAogCWJpdHJhdGUgPSByYXRlLT5iaXRyYXRlOwpAQCAtMjY1LDggKzI2NSw2IEBACiAJCSAqIHdoYXQgcmF0ZSB3ZSBzaG91bGQgY2hvb3NlIHRvIFRYIEFDS3MuICovCiAJCXR4X3RpbWUgPSBhdGg1a19od19nZXRfZnJhbWVfZHVyYXRpb24oYWgsIDEwLCByYXRlKTsKIAotCQl0eF90aW1lID0gbGUxNl90b19jcHUodHhfdGltZSk7Ci0KIAkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCB0eF90aW1lLCByZWcpOwogCiAJCWlmICghKHJhdGUtPmZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BoeS5jCmluZGV4IDc4YzI2ZmQuLjYyY2UyZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGh5LmMKQEAgLTI4Miw2ICsyODIsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFdhaXQgZm9yIHN5bnRoIHRvIHNldHRsZQorICovCitzdGF0aWMgdm9pZCBhdGg1a19od193YWl0X2Zvcl9zeW50aChzdHJ1Y3QgYXRoNWtfaHcgKmFoLAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQoreworCS8qCisJICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5CisJICogYW5kIHVzZSBpdCAoMTAwbnMgc3RlcHMpLgorCSAqLworCWlmIChhaC0+YWhfdmVyc2lvbiAhPSBBUjVLX0FSNTIxMCkgeworCQl1MzIgZGVsYXk7CisJCWRlbGF5ID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1JYX0RFTEFZKSAmCisJCQlBUjVLX1BIWV9SWF9ERUxBWV9NOworCQlkZWxheSA9IChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfQ0NLKSA/CisJCQkoKGRlbGF5IDw8IDIpIC8gMjIpIDogKGRlbGF5IC8gMTApOworCQlpZiAoYWgtPmFoX2J3bW9kZSA9PSBBUjVLX0JXTU9ERV8xME1IWikKKwkJCWRlbGF5ID0gZGVsYXkgPDwgMTsKKwkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfNU1IWikKKwkJCWRlbGF5ID0gZGVsYXkgPDwgMjsKKwkJLyogWFhYOiAvMiBvbiB0dXJibyA/IExldCdzIGJlIHNhZmUKKwkJICogZm9yIG5vdyAqLworCQl1ZGVsYXkoMTAwICsgZGVsYXkpOworCX0gZWxzZSB7CisJCW1kZWxheSgxKTsKKwl9Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKipcCiAqIFJGIEdhaW4gb3B0aW1pemF0aW9uICoKQEAgLTEyNTMsNiArMTI4MSw3IEBACiAJY2FzZSBBUjVLX1JGNTExMToKIAkJcmV0ID0gYXRoNWtfaHdfcmY1MTExX2NoYW5uZWwoYWgsIGNoYW5uZWwpOwogCQlicmVhazsKKwljYXNlIEFSNUtfUkYyMzE3OgogCWNhc2UgQVI1S19SRjI0MjU6CiAJCXJldCA9IGF0aDVrX2h3X3JmMjQyNV9jaGFubmVsKGFoLCBjaGFubmVsKTsKIAkJYnJlYWs7CkBAIC0zMjM3LDYgKzMyNjYsMTMgQEAKIAkJLyogRmFpbGVkICovCiAJCWlmIChpID49IDEwMCkKIAkJCXJldHVybiAtRUlPOworCisJCS8qIFNldCBjaGFubmVsIGFuZCB3YWl0IGZvciBzeW50aCAqLworCQlyZXQgPSBhdGg1a19od19jaGFubmVsKGFoLCBjaGFubmVsKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJYXRoNWtfaHdfd2FpdF9mb3Jfc3ludGgoYWgsIGNoYW5uZWwpOwogCX0KIAogCS8qCkBAIC0zMjUxLDEzICszMjg3LDUzIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAorCS8qIFdyaXRlIE9GRE0gdGltaW5ncyBvbiA1MjEyKi8KKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkJY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pIHsKKworCQlyZXQgPSBhdGg1a19od193cml0ZV9vZmRtX3RpbWluZ3MoYWgsIGNoYW5uZWwpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBTcHVyIGluZm8gaXMgYXZhaWxhYmxlIG9ubHkgZnJvbSBFRVBST00gdmVyc2lvbnMKKwkJICogZ3JlYXRlciB0aGFuIDUuMywgYnV0IHRoZSBFRVBST00gcm91dGluZXMgd2lsbCB1c2UKKwkJICogc3RhdGljIHZhbHVlcyBmb3Igb2xkZXIgdmVyc2lvbnMgKi8KKwkJaWYgKGFoLT5haF9tYWNfc3JldiA+PSBBUjVLX1NSRVZfQVI1NDI0KQorCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCisJCQkJCQkJICAgIGNoYW5uZWwpOworCX0KKworCS8qIElmIHdlIHVzZWQgZmFzdCBjaGFubmVsIHN3aXRjaGluZworCSAqIHdlIGFyZSBkb25lLCByZWxlYXNlIFJGIGJ1cyBhbmQKKwkgKiBmaXJlIHVwIE5GIGNhbGlicmF0aW9uLgorCSAqCisJICogTm90ZTogT25seSBORiBjYWxpYnJhdGlvbiBkdWUgdG8KKwkgKiBjaGFubmVsIGNoYW5nZSwgbm90IEFHQyBjYWxpYnJhdGlvbgorCSAqIHNpbmNlIEFHQyBpcyBzdGlsbCBydW5uaW5nICEKKwkgKi8KKwlpZiAoZmFzdCkgeworCQkvKgorCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAorCQkgKi8KKwkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCisJCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKKworCQkvKgorCQkgKiBTdGFydCBORiBjYWxpYnJhdGlvbgorCQkgKi8KKwkJQVI1S19SRUdfRU5BQkxFX0JJVFMoYWgsIEFSNUtfUEhZX0FHQ0NUTCwKKwkJCQkJQVI1S19QSFlfQUdDQ1RMX05GKTsKKworCQlyZXR1cm4gcmV0OworCX0KKwogCS8qCiAJICogRm9yIDUyMTAgd2UgZG8gYWxsIGluaXRpYWxpemF0aW9uIHVzaW5nCiAJICogaW5pdHZhbHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gbW9kaWZ5CiAJICogYW55IHNldHRpbmdzICg1MjEwIGFsc28gb25seSBzdXBwb3J0cwogCSAqIGEvYXR1cmJvIG1vZGVzKQogCSAqLwotCWlmICgoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApICYmICFmYXN0KSB7CisJaWYgKGFoLT5haF92ZXJzaW9uICE9IEFSNUtfQVI1MjEwKSB7CiAKIAkJLyoKIAkJICogV3JpdGUgaW5pdGlhbCBSRiBnYWluIHNldHRpbmdzCkBAIC0zMjc2LDIyICszMzUyLDYgQEAKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAKLQkJLyogV3JpdGUgT0ZETSB0aW1pbmdzIG9uIDUyMTIqLwotCQlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKLQkJCWNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9PRkRNKSB7Ci0KLQkJCXJldCA9IGF0aDVrX2h3X3dyaXRlX29mZG1fdGltaW5ncyhhaCwgY2hhbm5lbCk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0KLQkJCS8qIFNwdXIgaW5mbyBpcyBhdmFpbGFibGUgb25seSBmcm9tIEVFUFJPTSB2ZXJzaW9ucwotCQkJICogZ3JlYXRlciB0aGFuIDUuMywgYnV0IHRoZSBFRVBST00gcm91dGluZXMgd2lsbCB1c2UKLQkJCSAqIHN0YXRpYyB2YWx1ZXMgZm9yIG9sZGVyIHZlcnNpb25zICovCi0JCQlpZiAoYWgtPmFoX21hY19zcmV2ID49IEFSNUtfU1JFVl9BUjU0MjQpCi0JCQkJYXRoNWtfaHdfc2V0X3NwdXJfbWl0aWdhdGlvbl9maWx0ZXIoYWgsCi0JCQkJCQkJCSAgICBjaGFubmVsKTsKLQkJfQotCiAJCS8qRW5hYmxlL2Rpc2FibGUgODAyLjExYiBtb2RlIG9uIDUxMTEKIAkJKGVuYWJsZSAyMTExIGZyZXF1ZW5jeSBjb252ZXJ0ZXIgKyBDQ0spKi8KIAkJaWYgKGFoLT5haF9yYWRpbyA9PSBBUjVLX1JGNTExMSkgewpAQCAtMzMyMiw0NyArMzM4MiwyMCBAQAogCSAqLwogCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfQUNUX0VOQUJMRSwgQVI1S19QSFlfQUNUKTsKIAotCS8qCi0JICogT24gNTIxMSsgcmVhZCBhY3RpdmF0aW9uIC0+IHJ4IGRlbGF5Ci0JICogYW5kIHVzZSBpdC4KLQkgKi8KLQlpZiAoYWgtPmFoX3ZlcnNpb24gIT0gQVI1S19BUjUyMTApIHsKLQkJdTMyIGRlbGF5OwotCQlkZWxheSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9SWF9ERUxBWSkgJgotCQkJQVI1S19QSFlfUlhfREVMQVlfTTsKLQkJZGVsYXkgPSAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykgPwotCQkJKChkZWxheSA8PCAyKSAvIDIyKSA6IChkZWxheSAvIDEwKTsKLQkJaWYgKGFoLT5haF9id21vZGUgPT0gQVI1S19CV01PREVfMTBNSFopCi0JCQlkZWxheSA9IGRlbGF5IDw8IDE7Ci0JCWlmIChhaC0+YWhfYndtb2RlID09IEFSNUtfQldNT0RFXzVNSFopCi0JCQlkZWxheSA9IGRlbGF5IDw8IDI7Ci0JCS8qIFhYWDogLzIgb24gdHVyYm8gPyBMZXQncyBiZSBzYWZlCi0JCSAqIGZvciBub3cgKi8KLQkJdWRlbGF5KDEwMCArIGRlbGF5KTsKLQl9IGVsc2UgewotCQltZGVsYXkoMSk7Ci0JfQorCWF0aDVrX2h3X3dhaXRfZm9yX3N5bnRoKGFoLCBjaGFubmVsKTsKIAotCWlmIChmYXN0KQotCQkvKgotCQkgKiBSZWxlYXNlIFJGIEJ1cyBncmFudAotCQkgKi8KLQkJQVI1S19SRUdfRElTQUJMRV9CSVRTKGFoLCBBUjVLX1BIWV9SRkJVU19SRVEsCi0JCQkJICAgIEFSNUtfUEhZX1JGQlVTX1JFUV9SRVFVRVNUKTsKLQllbHNlIHsKLQkJLyoKLQkJICogUGVyZm9ybSBBREMgdGVzdCB0byBzZWUgaWYgYmFzZWJhbmQgaXMgcmVhZHkKLQkJICogU2V0IHR4IGhvbGQgYW5kIGNoZWNrIGFkYyB0ZXN0IHJlZ2lzdGVyCi0JCSAqLwotCQlwaHlfdHN0MSA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1BIWV9UU1QxKTsKLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBBUjVLX1BIWV9UU1QxX1RYSE9MRCwgQVI1S19QSFlfVFNUMSk7Ci0JCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgewotCQkJaWYgKCEoYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX0FEQ19URVNUKSAmIDB4MTApKQotCQkJCWJyZWFrOwotCQkJdWRlbGF5KDIwMCk7Ci0JCX0KLQkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBwaHlfdHN0MSwgQVI1S19QSFlfVFNUMSk7CisJLyoKKwkgKiBQZXJmb3JtIEFEQyB0ZXN0IHRvIHNlZSBpZiBiYXNlYmFuZCBpcyByZWFkeQorCSAqIFNldCB0eCBob2xkIGFuZCBjaGVjayBhZGMgdGVzdCByZWdpc3RlcgorCSAqLworCXBoeV90c3QxID0gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfUEhZX1RTVDEpOworCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgQVI1S19QSFlfVFNUMV9UWEhPTEQsIEFSNUtfUEhZX1RTVDEpOworCWZvciAoaSA9IDA7IGkgPD0gMjA7IGkrKykgeworCQlpZiAoIShhdGg1a19od19yZWdfcmVhZChhaCwgQVI1S19QSFlfQURDX1RFU1QpICYgMHgxMCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDIwMCk7CiAJfQorCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgcGh5X3RzdDEsIEFSNUtfUEhZX1RTVDEpOwogCiAJLyoKIAkgKiBTdGFydCBhdXRvbWF0aWMgZ2FpbiBjb250cm9sIGNhbGlicmF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYXI5MDAyX2h3LmMKaW5kZXggZjhhNzc3MS4uZjQ0Yzg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FyOTAwMl9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hcjkwMDJfaHcuYwpAQCAtNDI2LDkgKzQyNiw4IEBACiAJCX0KIAogCQkvKiBXQVIgZm9yIEFTUE0gc3lzdGVtIGhhbmcgKi8KLQkJaWYgKEFSX1NSRVZfOTI4MChhaCkgfHwgQVJfU1JFVl85Mjg1KGFoKSB8fCBBUl9TUkVWXzkyODcoYWgpKSB7CisJCWlmIChBUl9TUkVWXzkyODUoYWgpIHx8IEFSX1NSRVZfOTI4NyhhaCkpCiAJCQl2YWwgfD0gKEFSX1dBX0JJVDYgfCBBUl9XQV9CSVQ3KTsKLQkJfQogCiAJCWlmIChBUl9TUkVWXzkyODVFXzIwKGFoKSkKIAkJCXZhbCB8PSBBUl9XQV9CSVQyMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggMzY4MWNhZjUuLjFhN2ZhNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KLSNpbmNsdWRlIDxsaW51eC9wbV9xb3NfcGFyYW1zLmg+CiAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtNTcsOCArNTYsNiBAQAogCiAjZGVmaW5lIEFfTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCiAKLSNkZWZpbmUgQVRIOUtfUE1fUU9TX0RFRkFVTFRfVkFMVUUJNTUKLQogI2RlZmluZSBUU0ZfVE9fVFUoX2gsX2wpIFwKIAkoKCgodTMyKShfaCkpIDw8IDIyKSB8ICgoKHUzMikoX2wpKSA+PiAxMCkpCiAKQEAgLTIxOCw2ICsyMTUsNyBAQAogc3RydWN0IGF0aF9idWZfc3RhdGUgewogCXU4IGJmX3R5cGU7CiAJdTggYmZzX3BhcHJkOworCXVuc2lnbmVkIGxvbmcgYmZzX3BhcHJkX3RpbWVzdGFtcDsKIAllbnVtIGF0aDlrX2ludGVybmFsX2ZyYW1lX3R5cGUgYmZzX2Z0eXBlOwogfTsKIApAQCAtNTkzLDcgKzU5MSw2IEBACiAJc3RydWN0IHdvcmtfc3RydWN0IHBhcHJkX3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IGh3X2NoZWNrX3dvcms7CiAJc3RydWN0IGNvbXBsZXRpb24gcGFwcmRfY29tcGxldGU7Ci0JYm9vbCBwYXByZF9wZW5kaW5nOwogCiAJdTMyIGludHJzdGF0dXM7CiAJdTMyIHNjX2ZsYWdzOyAvKiBTQ19PUF8qICovCkBAIC02MzMsOCArNjMwLDYgQEAKIAlzdHJ1Y3QgYXRoX2Rlc2NkbWEgdHhzZG1hOwogCiAJc3RydWN0IGF0aF9hbnRfY29tYiBhbnRfY29tYjsKLQotCXN0cnVjdCBwbV9xb3NfcmVxdWVzdF9saXN0IHBtX3Fvc19yZXE7CiB9OwogCiBzdHJ1Y3QgYXRoX3dpcGh5IHsKQEAgLTY2Niw3ICs2NjEsNiBAQAogZXh0ZXJuIHN0cnVjdCBpZWVlODAyMTFfb3BzIGF0aDlrX29wczsKIGV4dGVybiBpbnQgYXRoOWtfbW9kcGFyYW1fbm9od2NyeXB0OwogZXh0ZXJuIGludCBsZWRfYmxpbms7Ci1leHRlcm4gaW50IGF0aDlrX3BtX3Fvc192YWx1ZTsKIGV4dGVybiBib29sIGlzX2F0aDlrX3VubG9hZGVkOwogCiBpcnFyZXR1cm5fdCBhdGhfaXNyKGludCBpcnEsIHZvaWQgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYwppbmRleCA1YWIzMDg0Li4wN2IxNjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKQEAgLTIxOSw4ICsyMTksOSBAQAogCXN0cnVjdCB0eF9idWYgKnR4X2J1ZiA9IE5VTEw7CiAJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSBOVUxMOwogCWludCByZXQgPSAwLCBpOwotCXUxNiAqaGRyLCB0eF9za2JfY250ID0gMDsKKwl1MTYgdHhfc2tiX2NudCA9IDA7CiAJdTggKmJ1ZjsKKwlfX2xlMTYgKmhkcjsKIAogCWlmIChoaWZfZGV2LT50eC50eF9za2JfY250ID09IDApCiAJCXJldHVybiAwOwpAQCAtMjQ1LDkgKzI0Niw5IEBACiAKIAkJYnVmID0gdHhfYnVmLT5idWY7CiAJCWJ1ZiArPSB0eF9idWYtPm9mZnNldDsKLQkJaGRyID0gKHUxNiAqKWJ1ZjsKLQkJKmhkcisrID0gbnNrYi0+bGVuOwotCQkqaGRyKysgPSBBVEhfVVNCX1RYX1NUUkVBTV9NT0RFX1RBRzsKKwkJaGRyID0gKF9fbGUxNiAqKWJ1ZjsKKwkJKmhkcisrID0gY3B1X3RvX2xlMTYobnNrYi0+bGVuKTsKKwkJKmhkcisrID0gY3B1X3RvX2xlMTYoQVRIX1VTQl9UWF9TVFJFQU1fTU9ERV9UQUcpOwogCQlidWYgKz0gNDsKIAkJbWVtY3B5KGJ1ZiwgbnNrYi0+ZGF0YSwgbnNrYi0+bGVuKTsKIAkJdHhfYnVmLT5sZW4gPSBuc2tiLT5sZW4gKyA0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfaW5pdC5jCmluZGV4IDM4NDMzZjkuLjAzNTJmMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9pbml0LmMKQEAgLTE0Miw5ICsxNDIsNiBAQAogewogCWF0aDlrX2h0Y19leGl0X2RlYnVnKHByaXYtPmFoKTsKIAlhdGg5a19od19kZWluaXQocHJpdi0+YWgpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+c3diYV90YXNrbGV0KTsKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfdGFza2xldCk7CiAJa2ZyZWUocHJpdi0+YWgpOwogCXByaXYtPmFoID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9odGNfZHJ2X21haW4uYwppbmRleCBmNGQ1NzZiLi42YmI1OTk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHRjX2Rydl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h0Y19kcnZfbWFpbi5jCkBAIC0xMDI1LDEyICsxMDI1LDYgQEAKIAlpbnQgcmV0ID0gMDsKIAl1OCBjbWRfcnNwOwogCi0JLyogQ2FuY2VsIGFsbCB0aGUgcnVubmluZyB0aW1lcnMvd29yayAuLiAqLwotCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPmZhdGFsX3dvcmspOwotCWNhbmNlbF93b3JrX3N5bmMoJnByaXYtPnBzX3dvcmspOwotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+YXRoOWtfbGVkX2JsaW5rX3dvcmspOwotCWF0aDlrX2xlZF9zdG9wX2JyaWdodG5lc3MocHJpdik7Ci0KIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlpZiAocHJpdi0+b3BfZmxhZ3MgJiBPUF9JTlZBTElEKSB7CkBAIC0xMDQ0LDggKzEwMzgsMjMgQEAKIAlXTUlfQ01EKFdNSV9ESVNBQkxFX0lOVFJfQ01ESUQpOwogCVdNSV9DTUQoV01JX0RSQUlOX1RYUV9BTExfQ01ESUQpOwogCVdNSV9DTUQoV01JX1NUT1BfUkVDVl9DTURJRCk7CisKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnN3YmFfdGFza2xldCk7CisJdGFza2xldF9raWxsKCZwcml2LT5yeF90YXNrbGV0KTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnR4X3Rhc2tsZXQpOworCiAJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT50eF9xdWV1ZSk7CiAKKwltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKKworCS8qIENhbmNlbCBhbGwgdGhlIHJ1bm5pbmcgdGltZXJzL3dvcmsgLi4gKi8KKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5mYXRhbF93b3JrKTsKKwljYW5jZWxfd29ya19zeW5jKCZwcml2LT5wc193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnByaXYtPmF0aDlrX2xlZF9ibGlua193b3JrKTsKKwlhdGg5a19sZWRfc3RvcF9icmlnaHRuZXNzKHByaXYpOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCiAJLyogUmVtb3ZlIG1vbml0b3IgaW50ZXJmYWNlIGhlcmUgKi8KIAlpZiAoYWgtPm9wbW9kZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSB7CiAJCWlmIChhdGg5a19odGNfcmVtb3ZlX21vbml0b3JfaW50ZXJmYWNlKHByaXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAxYWZiOGJiLi45ZjAxZTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMzY5LDYgKzM2OSw5IEBACiAJZWxzZQogCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDA7CiAKKwkvKiBQQVBSRCBuZWVkcyBzb21lIG1vcmUgd29yayB0byBiZSBlbmFibGVkICovCisJYWgtPmNvbmZpZy5wYXByZF9kaXNhYmxlID0gMTsKKwogCWFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uID0gdHJ1ZTsKIAlhaC0+Y29uZmlnLnBjaWVTZXJEZXNXcml0ZSA9IHRydWU7CiAKQEAgLTE5MzMsNyArMTkzNiw4IEBACiAJCXBDYXAtPnJ4X3N0YXR1c19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM19yeHMpOwogCQlwQ2FwLT50eF9kZXNjX2xlbiA9IHNpemVvZihzdHJ1Y3QgYXI5MDAzX3R4Yyk7CiAJCXBDYXAtPnR4c19sZW4gPSBzaXplb2Yoc3RydWN0IGFyOTAwM190eHMpOwotCQlpZiAoYWgtPmVlcF9vcHMtPmdldF9lZXByb20oYWgsIEVFUF9QQVBSRCkpCisJCWlmICghYWgtPmNvbmZpZy5wYXByZF9kaXNhYmxlICYmCisJCSAgICBhaC0+ZWVwX29wcy0+Z2V0X2VlcHJvbShhaCwgRUVQX1BBUFJEKSkKIAkJCXBDYXAtPmh3X2NhcHMgfD0gQVRIOUtfSFdfQ0FQX1BBUFJEOwogCX0gZWxzZSB7CiAJCXBDYXAtPnR4X2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCmluZGV4IDVhM2RmZWMuLmVhOWZkZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5oCkBAIC0yMjUsNiArMjI1LDcgQEAKIAl1MzIgcGNpZV93YWVuOwogCXU4IGFuYWxvZ19zaGlmdHJlZzsKIAl1OCBodF9lbmFibGU7CisJdTggcGFwcmRfZGlzYWJsZTsKIAl1MzIgb2ZkbV90cmlnX2xvdzsKIAl1MzIgb2ZkbV90cmlnX2hpZ2g7CiAJdTMyIGNja190cmlnX2hpZ2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwppbmRleCA3NjdkOGI4Li5hMDMzZDAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9pbml0LmMKQEAgLTQxLDEwICs0MSw2IEBACiBtb2R1bGVfcGFyYW1fbmFtZWQoYnRjb2V4X2VuYWJsZSwgYXRoOWtfYnRjb2V4X2VuYWJsZSwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYnRjb2V4X2VuYWJsZSwgIkVuYWJsZSB3aWZpLUJUIGNvZXhpc3RlbmNlIik7CiAKLWludCBhdGg5a19wbV9xb3NfdmFsdWUgPSBBVEg5S19QTV9RT1NfREVGQVVMVF9WQUxVRTsKLW1vZHVsZV9wYXJhbV9uYW1lZChwbXFvcywgYXRoOWtfcG1fcW9zX3ZhbHVlLCBpbnQsIFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JUk9USCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHBtcW9zLCAiVXNlciBzcGVjaWZpZWQgUE0tUU9TIHZhbHVlIik7Ci0KIGJvb2wgaXNfYXRoOWtfdW5sb2FkZWQ7CiAvKiBXZSB1c2UgdGhlIGh3X3ZhbHVlIGFzIGFuIGluZGV4IGludG8gb3VyIHByaXZhdGUgY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KIApAQCAtNTk4LDggKzU5NCw2IEBACiBlcnJfcXVldWVzOgogCWF0aDlrX2h3X2RlaW5pdChhaCk7CiBlcnJfaHc6Ci0JdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKIAogCWtmcmVlKGFoKTsKIAlzYy0+c2NfYWggPSBOVUxMOwpAQCAtNzY0LDkgKzc1OCw2IEBACiAJYXRoX2luaXRfbGVkcyhzYyk7CiAJYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKIAotCXBtX3Fvc19hZGRfcmVxdWVzdCgmc2MtPnBtX3Fvc19yZXEsIFBNX1FPU19DUFVfRE1BX0xBVEVOQ1ksCi0JCQkgICBQTV9RT1NfREVGQVVMVF9WQUxVRSk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyb3Jfd29ybGQ6CkBAIC04MDcsOSArNzk4LDYgQEAKIAogCWF0aDlrX2h3X2RlaW5pdChzYy0+c2NfYWgpOwogCi0JdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7Ci0JdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKLQogCWtmcmVlKHNjLT5zY19haCk7CiAJc2MtPnNjX2FoID0gTlVMTDsKIH0KQEAgLTgyNCw2ICs4MTIsOCBAQAogCXdpcGh5X3Jma2lsbF9zdG9wX3BvbGxpbmcoc2MtPmh3LT53aXBoeSk7CiAJYXRoX2RlaW5pdF9sZWRzKHNjKTsKIAorCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOworCiAJZm9yIChpID0gMDsgaSA8IHNjLT5udW1fc2VjX3dpcGh5OyBpKyspIHsKIAkJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IHNjLT5zZWNfd2lwaHlbaV07CiAJCWlmIChhcGh5ID09IE5VTEwpCkBAIC04MzQsNyArODI0LDYgQEAKIAl9CiAKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7Ci0JcG1fcW9zX3JlbW92ZV9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSk7CiAJYXRoX3J4X2NsZWFudXAoc2MpOwogCWF0aF90eF9jbGVhbnVwKHNjKTsKIAlhdGg5a19kZWluaXRfc29mdGMoc2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCmluZGV4IDE4MDE3MGQuLjI5MTViMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCiAJaWYgKCEoaW50cyAmIEFUSDlLX0lOVF9HTE9CQUwpKQotCQlhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyhhaCk7CisJCWF0aDlrX2h3X2Rpc2FibGVfaW50ZXJydXB0cyhhaCk7CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19JTlRFUlJVUFQsICIweCV4ID0+IDB4JXhcbiIsIG9tYXNrLCBpbnRzKTsKIApAQCAtOTYzLDcgKzk2Myw4IEBACiAJCQlSRUdfQ0xSX0JJVChhaCwgQVJfSU1SX1M1LCBBUl9JTVJfUzVfVElNX1RJTUVSKTsKIAl9CiAKLQlhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyhhaCk7CisJaWYgKGludHMgJiBBVEg5S19JTlRfR0xPQkFMKQorCQlhdGg5a19od19lbmFibGVfaW50ZXJydXB0cyhhaCk7CiAKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCBmOTBhNmNhLi5hMDlkMTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTMyNSw2ICszMjUsOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqdHhfaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIAlzdHJ1Y3QgYXRoX3R4X2NvbnRyb2wgdHhjdGw7CiAJaW50IHRpbWVfbGVmdDsKIApAQCAtMzQwLDE0ICszNDIsMTYgQEAKIAl0eF9pbmZvLT5jb250cm9sLnJhdGVzWzFdLmlkeCA9IC0xOwogCiAJaW5pdF9jb21wbGV0aW9uKCZzYy0+cGFwcmRfY29tcGxldGUpOwotCXNjLT5wYXByZF9wZW5kaW5nID0gdHJ1ZTsKIAl0eGN0bC5wYXByZCA9IEJJVChjaGFpbik7Ci0JaWYgKGF0aF90eF9zdGFydChodywgc2tiLCAmdHhjdGwpICE9IDApCisKKwlpZiAoYXRoX3R4X3N0YXJ0KGh3LCBza2IsICZ0eGN0bCkgIT0gMCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19YTUlULCAiUEFQUkQgVFggZmFpbGVkXG4iKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCXRpbWVfbGVmdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmc2MtPnBhcHJkX2NvbXBsZXRlLAogCQkJbXNlY3NfdG9famlmZmllcyhBVEhfUEFQUkRfVElNRU9VVCkpOwotCXNjLT5wYXByZF9wZW5kaW5nID0gZmFsc2U7CiAKIAlpZiAoIXRpbWVfbGVmdCkKIAkJYXRoX2RiZyhhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19DQUxJQlJBVEUsCkBAIC01OTIsMTQgKzU5NiwxMiBAQAogCXUzMiBzdGF0dXMgPSBzYy0+aW50cnN0YXR1czsKIAl1MzIgcnhtYXNrOwogCi0JYXRoOWtfcHNfd2FrZXVwKHNjKTsKLQogCWlmIChzdGF0dXMgJiBBVEg5S19JTlRfRkFUQUwpIHsKIAkJYXRoX3Jlc2V0KHNjLCB0cnVlKTsKLQkJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJCXJldHVybjsKIAl9CiAKKwlhdGg5a19wc193YWtldXAoc2MpOwogCXNwaW5fbG9jaygmc2MtPnNjX3BjdV9sb2NrKTsKIAogCWlmICghYXRoOWtfaHdfY2hlY2tfYWxpdmUoYWgpKQpAQCAtOTU1LDggKzk1Nyw2IEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKLQotCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9GVUxMX1NMRUVQKTsKIH0KIAogaW50IGF0aF9yZXNldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCkKQEAgLTk2OSw2ICs5NjksNyBAQAogCS8qIFN0b3AgQU5JICovCiAJZGVsX3RpbWVyX3N5bmMoJmNvbW1vbi0+YW5pLnRpbWVyKTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJc3Bpbl9sb2NrX2JoKCZzYy0+c2NfcGN1X2xvY2spOwogCiAJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKQEAgLTEwMTUsNiArMTAxNiw3IEBACiAKIAkvKiBTdGFydCBBTkkgKi8KIAlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTExNzEsMTIgKzExNzMsNiBAQAogCQkJYXRoOWtfYnRjb2V4X3RpbWVyX3Jlc3VtZShzYyk7CiAJfQogCi0JLyogVXNlciBoYXMgdGhlIG9wdGlvbiB0byBwcm92aWRlIHBtLXFvcyB2YWx1ZSBhcyBhIG1vZHVsZQotCSAqIHBhcmFtZXRlciByYXRoZXIgdGhhbiB1c2luZyB0aGUgZGVmYXVsdCB2YWx1ZSBvZgotCSAqICdBVEg5S19QTV9RT1NfREVGQVVMVF9WQUxVRScuCi0JICovCi0JcG1fcW9zX3VwZGF0ZV9yZXF1ZXN0KCZzYy0+cG1fcW9zX3JlcSwgYXRoOWtfcG1fcW9zX3ZhbHVlKTsKLQogCWlmIChhaC0+Y2Fwcy5wY2llX2xjcl9leHRzeW5jX2VuICYmIGNvbW1vbi0+YnVzX29wcy0+ZXh0bl9zeW5jaF9lbikKIAkJY29tbW9uLT5idXNfb3BzLT5leHRuX3N5bmNoX2VuKGNvbW1vbik7CiAKQEAgLTEzMDksNiArMTMwNSw5IEBACiAKIAlzcGluX2xvY2tfYmgoJnNjLT5zY19wY3VfbG9jayk7CiAKKwkvKiBwcmV2ZW50IHRhc2tsZXRzIHRvIGVuYWJsZSBpbnRlcnJ1cHRzIG9uY2Ugd2UgZGlzYWJsZSB0aGVtICovCisJYWgtPmltYXNrICY9IH5BVEg5S19JTlRfR0xPQkFMOworCiAJLyogbWFrZSBzdXJlIGgvdyB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkgaW50ZXJydXB0CiAJICogYmVmb3JlIHNldHRpbmcgdGhlIGludmFsaWQgZmxhZy4gKi8KIAlhdGg5a19od19kaXNhYmxlX2ludGVycnVwdHMoYWgpOwpAQCAtMTMyNiw2ICsxMzI1LDEyIEBACiAKIAlzcGluX3VubG9ja19iaCgmc2MtPnNjX3BjdV9sb2NrKTsKIAorCS8qIHdlIGNhbiBub3cgc3luYyBpcnEgYW5kIGtpbGwgYW55IHJ1bm5pbmcgdGFza2xldHMsIHNpbmNlIHdlIGFscmVhZHkKKwkgKiBkaXNhYmxlZCBpbnRlcnJ1cHRzIGFuZCBub3QgaG9sZGluZyBhIHNwaW4gbG9jayAqLworCXN5bmNocm9uaXplX2lycShzYy0+aXJxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKKwl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOworCiAJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlzYy0+cHNfaWRsZSA9IHRydWU7CkBAIC0xMzM0LDggKzEzMzksNiBAQAogCiAJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0lOVkFMSUQ7CiAKLQlwbV9xb3NfdXBkYXRlX3JlcXVlc3QoJnNjLT5wbV9xb3NfcmVxLCBQTV9RT1NfREVGQVVMVF9WQUxVRSk7Ci0KIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiAKIAlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICJEcml2ZXIgaGFsdFxuIik7CkBAIC0xNzAxLDcgKzE3MDQsOSBAQAogc2tpcF9jaGFuX2NoYW5nZToKIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QT1dFUikgewogCQlzYy0+Y29uZmlnLnR4cG93bGltaXQgPSAyICogY29uZi0+cG93ZXJfbGV2ZWw7CisJCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF91cGRhdGVfdHhwb3coc2MpOworCQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCmluZGV4IDMzMmQxZmUuLjA3Yjc4MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwpAQCAtMTcyNSw2ICsxNzI1LDkgQEAKIAkJCWFyOTAwM19od19zZXRfcGFwcmRfdHhkZXNjKHNjLT5zY19haCwgYmYtPmJmX2Rlc2MsCiAJCQkJCQkgICBiZi0+YmZfc3RhdGUuYmZzX3BhcHJkKTsKIAorCQlpZiAodHhjdGwtPnBhcHJkKQorCQkJYmYtPmJmX3N0YXRlLmJmc19wYXByZF90aW1lc3RhbXAgPSBqaWZmaWVzOworCiAJCWF0aF90eF9zZW5kX25vcm1hbChzYywgdHhjdGwtPnR4cSwgdGlkLCAmYmZfaGVhZCk7CiAJfQogCkBAIC0xODg2LDcgKzE4ODksOSBAQAogCWJmLT5iZl9idWZfYWRkciA9IDA7CiAKIAlpZiAoYmYtPmJmX3N0YXRlLmJmc19wYXByZCkgewotCQlpZiAoIXNjLT5wYXByZF9wZW5kaW5nKQorCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLAorCQkJCWJmLT5iZl9zdGF0ZS5iZnNfcGFwcmRfdGltZXN0YW1wICsKKwkJCQltc2Vjc190b19qaWZmaWVzKEFUSF9QQVBSRF9USU1FT1VUKSkpCiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQllbHNlCiAJCQljb21wbGV0ZSgmc2MtPnBhcHJkX2NvbXBsZXRlKTsKQEAgLTIxMTMsOSArMjExOCw3IEBACiAJaWYgKG5lZWRyZXNldCkgewogCQlhdGhfZGJnKGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX1JFU0VULAogCQkJInR4IGh1bmcsIHJlc2V0dGluZyB0aGUgY2hpcFxuIik7Ci0JCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJCWF0aF9yZXNldChzYywgdHJ1ZSk7Ci0JCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCX0KIAogCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LCAmc2MtPnR4X2NvbXBsZXRlX3dvcmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCmluZGV4IDkzOWEwZTkuLjg0ODY2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC9yeC5jCkBAIC01NjQsNyArNTY0LDcgQEAKIAljYW0gPSBpZWVlODAyMTFfY2hlY2tfdGltKHRpbV9pZSwgdGltX2xlbiwgYXItPmNvbW1vbi5jdXJhaWQpOwogCiAJLyogMi4gTWF5YmUgdGhlIEFQIHdhbnRzIHRvIHNlbmQgbXVsdGljYXN0L2Jyb2FkY2FzdCBkYXRhPyAqLwotCWNhbSA9ICEhKHRpbV9pZS0+Yml0bWFwX2N0cmwgJiAweDAxKTsKKwljYW0gfD0gISEodGltX2llLT5iaXRtYXBfY3RybCAmIDB4MDEpOwogCiAJaWYgKCFjYW0pIHsKIAkJLyogYmFjayB0byBsb3ctcG93ZXIgbGFuZC4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9jYXJsOTE3MC91c2IuYwppbmRleCA1Mzc3MzJlLi5mODJjNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvY2FybDkxNzAvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2Nhcmw5MTcwL3VzYi5jCkBAIC0xMTgsNiArMTE4LDggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNTdjLCAweDg0MDIpIH0sCiAJLyogUXdlc3QvQWN0aW9udGVjIDgwMkFJTiBXaXJlbGVzcyBOIFVTQiBOZXR3b3JrIEFkYXB0ZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNjY4LCAweDEyMDApIH0sCisJLyogQWlybGl2ZSBYLlVTQiBhL2IvZy9uICovCisJeyBVU0JfREVWSUNFKDB4MWI3NSwgMHg5MTcwKSB9LAogCiAJLyogdGVybWluYXRlICovCiAJe30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCBhOWI4NTJiLi4zOWI2ZjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC00MDIsNzIgKzQwMiw2IEBACiB9CiAjZW5kaWYKIAotLyoqCi0gKiBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGggLSBjaGVja3MgZm9yIHBsY3AgZXJyb3IuCi0gKgotICogV2hlbiB0aGUgcGxjcCBlcnJvciBpcyBleGNlZWRpbmcgdGhlIHRocmVzaG9sZHMsIHJlc2V0IHRoZSByYWRpbwotICogdG8gaW1wcm92ZSB0aGUgdGhyb3VnaHB1dC4KLSAqLwotc3RhdGljIGJvb2wgaXdsMzk0NV9nb29kX3BsY3BfaGVhbHRoKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0KQotewotCWJvb2wgcmMgPSB0cnVlOwotCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3MgY3VycmVudF9zdGF0OwotCWludCBjb21iaW5lZF9wbGNwX2RlbHRhOwotCXVuc2lnbmVkIGludCBwbGNwX21zZWM7Ci0JdW5zaWduZWQgbG9uZyBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7Ci0KLQlpZiAocHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPT0KLQkgICAgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfRElTQUJMRSkgewotCQlJV0xfREVCVUdfUkFESU8ocHJpdiwgInBsY3BfZXJyIGNoZWNrIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQltZW1jcHkoJmN1cnJlbnRfc3RhdCwgcGt0LT51LnJhdywgc2l6ZW9mKHN0cnVjdAotCQkJaXdsMzk0NV9ub3RpZl9zdGF0aXN0aWNzKSk7Ci0JLyoKLQkgKiBjaGVjayBmb3IgcGxjcF9lcnIgYW5kIHRyaWdnZXIgcmFkaW8gcmVzZXQgaWYgaXQgZXhjZWVkcwotCSAqIHRoZSBwbGNwIGVycm9yIHRocmVzaG9sZCBwbGNwX2RlbHRhLgotCSAqLwotCXBsY3BfcmVjZWl2ZWRfamlmZmllcyA9IGppZmZpZXM7Ci0JcGxjcF9tc2VjID0gamlmZmllc190b19tc2VjcygobG9uZykgcGxjcF9yZWNlaXZlZF9qaWZmaWVzIC0KLQkJCQkJKGxvbmcpIHByaXYtPnBsY3BfamlmZmllcyk7Ci0JcHJpdi0+cGxjcF9qaWZmaWVzID0gcGxjcF9yZWNlaXZlZF9qaWZmaWVzOwotCS8qCi0JICogY2hlY2sgdG8gbWFrZSBzdXJlIHBsY3BfbXNlYyBpcyBub3QgMCB0byBwcmV2ZW50IGRpdmlzaW9uCi0JICogYnkgemVyby4KLQkgKi8KLQlpZiAocGxjcF9tc2VjKSB7Ci0JCWNvbWJpbmVkX3BsY3BfZGVsdGEgPQotCQkJKGxlMzJfdG9fY3B1KGN1cnJlbnRfc3RhdC5yeC5vZmRtLnBsY3BfZXJyKSAtCi0JCQlsZTMyX3RvX2NwdShwcml2LT5fMzk0NS5zdGF0aXN0aWNzLnJ4Lm9mZG0ucGxjcF9lcnIpKTsKLQotCQlpZiAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgPiAwKSAmJgotCQkJKChjb21iaW5lZF9wbGNwX2RlbHRhICogMTAwKSAvIHBsY3BfbXNlYykgPgotCQkJcHJpdi0+Y2ZnLT5iYXNlX3BhcmFtcy0+cGxjcF9kZWx0YV90aHJlc2hvbGQpIHsKLQkJCS8qCi0JCQkgKiBpZiBwbGNwX2VyciBleGNlZWQgdGhlIHRocmVzaG9sZCwgdGhlIGZvbGxvd2luZwotCQkJICogZGF0YSBpcyBwcmludGVkIGluIGNzdiBmb3JtYXQ6Ci0JCQkgKiAgICBUZXh0OiBwbGNwX2VyciBleGNlZWRlZCAlZCwKLQkJCSAqICAgIFJlY2VpdmVkIG9mZG0ucGxjcF9lcnIsCi0JCQkgKiAgICBDdXJyZW50IG9mZG0ucGxjcF9lcnIsCi0JCQkgKiAgICBjb21iaW5lZF9wbGNwX2RlbHRhLAotCQkJICogICAgcGxjcF9tc2VjCi0JCQkgKi8KLQkJCUlXTF9ERUJVR19SQURJTyhwcml2LCAicGxjcF9lcnIgZXhjZWVkZWQgJXUsICIKLQkJCQkiJXUsICVkLCAldSBtU2Vjc1xuIiwKLQkJCQlwcml2LT5jZmctPmJhc2VfcGFyYW1zLT5wbGNwX2RlbHRhX3RocmVzaG9sZCwKLQkJCQlsZTMyX3RvX2NwdShjdXJyZW50X3N0YXQucngub2ZkbS5wbGNwX2VyciksCi0JCQkJY29tYmluZWRfcGxjcF9kZWx0YSwgcGxjcF9tc2VjKTsKLQkJCS8qCi0JCQkgKiBSZXNldCB0aGUgUkYgcmFkaW8gZHVlIHRvIHRoZSBoaWdoIHBsY3AKLQkJCSAqIGVycm9yIHJhdGUKLQkJCSAqLwotCQkJcmMgPSBmYWxzZTsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KIHZvaWQgaXdsMzk0NV9od19yeF9zdGF0aXN0aWNzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpCiB7CkBAIC0yNzM0LDcgKzI2NjgsNiBAQAogCS5pc3Jfb3BzID0gewogCQkuaXNyID0gaXdsX2lzcl9sZWdhY3ksCiAJfSwKLQkuY2hlY2tfcGxjcF9oZWFsdGggPSBpd2wzOTQ1X2dvb2RfcGxjcF9oZWFsdGgsCiAKIAkuZGVidWdmc19vcHMgPSB7CiAJCS5yeF9zdGF0c19yZWFkID0gaXdsMzk0NV91Y29kZV9yeF9zdGF0c19yZWFkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCmluZGV4IDNmMWU1ZjEuLjkxYTlmNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKQEAgLTI2MjQsNiArMjYyNCw3IEBACiAJLmZ3X25hbWVfcHJlID0gSVdMNDk2NV9GV19QUkUsCiAJLnVjb2RlX2FwaV9tYXggPSBJV0w0OTY1X1VDT0RFX0FQSV9NQVgsCiAJLnVjb2RlX2FwaV9taW4gPSBJV0w0OTY1X1VDT0RFX0FQSV9NSU4sCisJLnNrdSA9IElXTF9TS1VfQXxJV0xfU0tVX0d8SVdMX1NLVV9OLAogCS52YWxpZF90eF9hbnQgPSBBTlRfQUIsCiAJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNDk2NV9FRVBST01fVkVSU0lPTiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYwppbmRleCA3OWFiMGE2Li41MzdmYjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAiaXdsLWFnbi1kZWJ1Z2ZzLmgiCiAKIC8qIEhpZ2hlc3QgZmlybXdhcmUgQVBJIHZlcnNpb24gc3VwcG9ydGVkICovCi0jZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01BWCAyCisjZGVmaW5lIElXTDUwMDBfVUNPREVfQVBJX01BWCA1CiAjZGVmaW5lIElXTDUxNTBfVUNPREVfQVBJX01BWCAyCiAKIC8qIExvd2VzdCBmaXJtd2FyZSBBUEkgdmVyc2lvbiBzdXBwb3J0ZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCBhZjUwNWJjLi5lZjM2YWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC02ODEsNiArNjgxLDggQEAKIAkuZndfbmFtZV9wcmUgPSBJV0w2MDUwX0ZXX1BSRSwJCQkJXAogCS51Y29kZV9hcGlfbWF4ID0gSVdMNjA1MF9VQ09ERV9BUElfTUFYLAkJCVwKIAkudWNvZGVfYXBpX21pbiA9IElXTDYwNTBfVUNPREVfQVBJX01JTiwJCQlcCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQiwJCS8qIC5jZmcgb3ZlcndyaXRlICovCVwKKwkudmFsaWRfcnhfYW50ID0gQU5UX0FCLAkJLyogLmNmZyBvdmVyd3JpdGUgKi8JXAogCS5vcHMgPSAmaXdsNjA1MF9vcHMsCQkJCQlcCiAJLmVlcHJvbV92ZXIgPSBFRVBST01fNjA1MF9FRVBST01fVkVSU0lPTiwJCVwKIAkuZWVwcm9tX2NhbGliX3ZlciA9IEVFUFJPTV82MDUwX1RYX1BPV0VSX1ZFUlNJT04sCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1lZXByb20uYwppbmRleCAxNGNlYjRkLi4yN2I1YTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWVlcHJvbS5jCkBAIC0xNTIsMTEgKzE1MiwxNCBAQAogCiAJZWVwcm9tX3NrdSA9IGl3bF9lZXByb21fcXVlcnkxNihwcml2LCBFRVBST01fU0tVX0NBUCk7CiAKLQlwcml2LT5jZmctPnNrdSA9ICgoZWVwcm9tX3NrdSAmIEVFUFJPTV9TS1VfQ0FQX0JBTkRfU0VMRUNUSU9OKSA+PgorCWlmICghcHJpdi0+Y2ZnLT5za3UpIHsKKwkJLyogbm90IHVzaW5nIHNrdSBvdmVyd3JpdGUgKi8KKwkJcHJpdi0+Y2ZnLT5za3UgPQorCQkJKChlZXByb21fc2t1ICYgRUVQUk9NX1NLVV9DQVBfQkFORF9TRUxFQ1RJT04pID4+CiAJCQlFRVBST01fU0tVX0NBUF9CQU5EX1BPUyk7Ci0JaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQotCQlwcml2LT5jZmctPnNrdSB8PSBJV0xfU0tVX047Ci0KKwkJaWYgKGVlcHJvbV9za3UgJiBFRVBST01fU0tVX0NBUF8xMU5fRU5BQkxFKQorCQkJcHJpdi0+Y2ZnLT5za3UgfD0gSVdMX1NLVV9OOworCX0KIAlpZiAoIXByaXYtPmNmZy0+c2t1KSB7CiAJCUlXTF9FUlIocHJpdiwgIkludmFsaWQgZGV2aWNlIHNrdVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwppbmRleCAzNjMzNWIxLi5jMWNmZDk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24uYwpAQCAtMTE1Nyw2ICsxMTU3LDkgQEAKIAkvKiBvbmx5IFJlLWVuYWJsZSBpZiBkaXNhYmxlZCBieSBpcnEgKi8KIAlpZiAodGVzdF9iaXQoU1RBVFVTX0lOVF9FTkFCTEVELCAmcHJpdi0+c3RhdHVzKSkKIAkJaXdsX2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOworCS8qIFJlLWVuYWJsZSBSRl9LSUxMIGlmIGl0IG9jY3VycmVkICovCisJZWxzZSBpZiAoaGFuZGxlZCAmIENTUl9JTlRfQklUX1JGX0tJTEwpCisJCWl3bF9lbmFibGVfcmZraWxsX2ludChwcml2KTsKIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaWYgKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiAoSVdMX0RMX0lTUikpIHsKQEAgLTEzNzEsNiArMTM3NCw5IEBACiAJLyogb25seSBSZS1lbmFibGUgaWYgZGlzYWJsZWQgYnkgaXJxICovCiAJaWYgKHRlc3RfYml0KFNUQVRVU19JTlRfRU5BQkxFRCwgJnByaXYtPnN0YXR1cykpCiAJCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKKwkvKiBSZS1lbmFibGUgUkZfS0lMTCBpZiBpdCBvY2N1cnJlZCAqLworCWVsc2UgaWYgKGhhbmRsZWQgJiBDU1JfSU5UX0JJVF9SRl9LSUxMKQorCQlpd2xfZW5hYmxlX3Jma2lsbF9pbnQocHJpdik7CiB9CiAKIC8qIHRoZSB0aHJlc2hvbGQgcmF0aW8gb2YgYWN0dWFsX2Fja19jbnQgdG8gZXhwZWN0ZWRfYWNrX2NudCBpbiBwZXJjZW50ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKaW5kZXggMWVhY2JhNC4uMDQ5NGQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYwpAQCAtMTk5LDYgKzE5OSw3IEBACiAJd2hpbGUgKGkgIT0gaWR4KSB7CiAJCXUxNiBsZW47CiAJCXN0cnVjdCBza19idWZmICpza2I7CisJCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJCWRlc2MgPSAmcmluZ1tpXTsKIAkJbGVuID0gbGUxNl90b19jcHUoZGVzYy0+bGVuKTsKIAkJc2tiID0gcnhfYnVmW2ldOwpAQCAtMjE2LDE3ICsyMTcsMjAgQEAKIAogCQkJbGVuID0gcHJpdi0+Y29tbW9uLnJ4X210dTsKIAkJfQorCQlkbWFfYWRkciA9IGxlMzJfdG9fY3B1KGRlc2MtPmhvc3RfYWRkcik7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwcml2LT5wZGV2LCBkbWFfYWRkciwKKwkJCXByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJc2tiX3B1dChza2IsIGxlbik7CiAKIAkJaWYgKHA1NF9yeChkZXYsIHNrYikpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGRldiwKLQkJCQkJIGxlMzJfdG9fY3B1KGRlc2MtPmhvc3RfYWRkciksCi0JCQkJCSBwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcGNpX3VubWFwX3NpbmdsZShwcml2LT5wZGV2LCBkbWFfYWRkciwKKwkJCQlwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlyeF9idWZbaV0gPSBOVUxMOwotCQkJZGVzYy0+aG9zdF9hZGRyID0gMDsKKwkJCWRlc2MtPmhvc3RfYWRkciA9IGNwdV90b19sZTMyKDApOwogCQl9IGVsc2UgewogCQkJc2tiX3RyaW0oc2tiLCAwKTsKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwcml2LT5wZGV2LCBkbWFfYWRkciwKKwkJCQlwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXNjLT5sZW4gPSBjcHVfdG9fbGUxNihwcml2LT5jb21tb24ucnhfbXR1ICsgMzIpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCAyMTcxM2E3Li45YjM0NGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC05OCw2ICs5OCw3IEBACiAJe1VTQl9ERVZJQ0UoMHgxNDEzLCAweDU0MDApfSwgICAvKiBUZWxzZXkgODAyLjExZyBVU0IyLjAgQWRhcHRlciAqLwogCXtVU0JfREVWSUNFKDB4MTQzNSwgMHgwNDI3KX0sCS8qIEludmVudGVsIFVSMDU0RyAqLwogCXtVU0JfREVWSUNFKDB4MTY2OCwgMHgxMDUwKX0sCS8qIEFjdGlvbnRlYyA4MDJVSUctMSAqLworCXtVU0JfREVWSUNFKDB4MTc0MCwgMHgxMDAwKX0sCS8qIFNlbmFvIE5VQi0zNTAgKi8KIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzcwNCl9LAkvKiBETGluayBEV0wtRzEyMiByZXYgQTIgKi8KIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4MzcwNSl9LAkvKiBELUxpbmsgRFdMLUcxMjAgcmV2IEMxICovCiAJe1VTQl9ERVZJQ0UoMHg0MTNjLCAweDU1MTMpfSwJLyogRGVsbCBXTEEzMzEwIFVTQiBXaXJlbGVzcyBBZGFwdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggODQ4Y2MyYy4uNTE4NTQyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtMjU5Nyw2ICsyNTk3LDkgQEAKIAlfX2xlMzIgbW9kZTsKIAlpbnQgcmV0OwogCisJaWYgKHByaXYtPmRldmljZV90eXBlICE9IFJORElTX0JDTTQzMjBCKQorCQlyZXR1cm4gLUVOT1RTVVBQOworCiAJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6ICVzLCAlZFxuIiwgX19mdW5jX18sCiAJCQkJZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCiAJCQkJdGltZW91dCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKaW5kZXggYWE5Nzk3MS4uM2IzZjFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYwpAQCAtNjUyLDYgKzY1MiwxMiBAQAogCQkgKi8KIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOwogCisJCS8qCisJCSAqIFRoZSBoYXJkd2FyZSBoYXMgYWxyZWFkeSBjaGVja2VkIHRoZSBNaWNoYWVsIE1pYyBhbmQgaGFzCisJCSAqIHN0cmlwcGVkIGl0IGZyb20gdGhlIGZyYW1lLiBTaWduYWwgdGhpcyB0byBtYWM4MDIxMS4KKwkJICovCisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19NTUlDX1NUUklQUEVEOworCiAJCWlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX1NVQ0NFU1MpCiAJCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQllbHNlIGlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX0ZBSUxfTUlDKQpAQCAtMTA2NSw2ICsxMDcxLDggQEAKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMzOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUMzVYWAorCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcxMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDM1NjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYjk3YTRhNS4uMTk3YTM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtNDg2LDYgKzQ4NiwxMiBAQAogCQkgKi8KIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOwogCisJCS8qCisJCSAqIFRoZSBoYXJkd2FyZSBoYXMgYWxyZWFkeSBjaGVja2VkIHRoZSBNaWNoYWVsIE1pYyBhbmQgaGFzCisJCSAqIHN0cmlwcGVkIGl0IGZyb20gdGhlIGZyYW1lLiBTaWduYWwgdGhpcyB0byBtYWM4MDIxMS4KKwkJICovCisJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19NTUlDX1NUUklQUEVEOworCiAJCWlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX1NVQ0NFU1MpCiAJCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfREVDUllQVEVEOwogCQllbHNlIGlmIChyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPT0gUlhfQ1JZUFRPX0ZBSUxfTUlDKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKaW5kZXggMGI0ZTg1OS4uMDI5YmUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCkBAIC0yNDQ2LDYgKzI0NDYsNyBAQAogCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDkzZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyNTczKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI2NzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4MTIsIDB4MzEwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJLyogUWNvbSAqLwogCXsgVVNCX0RFVklDRSgweDE4ZTgsIDB4NjE5NiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjI5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvZWZ1c2UuYwppbmRleCBiODQzM2YzLi42Mjg3NmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL2VmdXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9lZnVzZS5jCkBAIC03MjYsOSArNzI2LDkgQEAKIH0KIAogc3RhdGljIHZvaWQgZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2ICplZnVzZV9hZGRyLAotCQkJCXU4IGVmdXNlX2RhdGEsIHU4IG9mZnNldCwgaW50ICpiY29udGludWFsLAotCQkJCXU4ICp3cml0ZV9zdGF0ZSwgc3RydWN0IHBncGt0X3N0cnVjdCB0YXJnZXRfcGt0LAotCQkJCWludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQsIHU4IHdvcmRfZW4pCisJCQl1OCBlZnVzZV9kYXRhLCB1OCBvZmZzZXQsIGludCAqYmNvbnRpbnVhbCwKKwkJCXU4ICp3cml0ZV9zdGF0ZSwgc3RydWN0IHBncGt0X3N0cnVjdCAqdGFyZ2V0X3BrdCwKKwkJCWludCAqcmVwZWF0X3RpbWVzLCBpbnQgKmJyZXN1bHQsIHU4IHdvcmRfZW4pCiB7CiAJc3RydWN0IHJ0bF9wcml2ICpydGxwcml2ID0gcnRsX3ByaXYoaHcpOwogCXN0cnVjdCBwZ3BrdF9zdHJ1Y3QgdG1wX3BrdDsKQEAgLTc0NCw4ICs3NDQsOCBAQAogCXRtcF9wa3Qud29yZF9lbiA9IHRtcF9oZWFkZXIgJiAweDBGOwogCXRtcF93b3JkX2NudHMgPSBlZnVzZV9jYWxjdWxhdGVfd29yZF9jbnRzKHRtcF9wa3Qud29yZF9lbik7CiAKLQlpZiAodG1wX3BrdC5vZmZzZXQgIT0gdGFyZ2V0X3BrdC5vZmZzZXQpIHsKLQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKwlpZiAodG1wX3BrdC5vZmZzZXQgIT0gdGFyZ2V0X3BrdC0+b2Zmc2V0KSB7CisJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKIAkJKndyaXRlX3N0YXRlID0gUEdfU1RBVEVfSEVBREVSOwogCX0gZWxzZSB7CiAJCWZvciAodG1waW5kZXggPSAwOyB0bXBpbmRleCA8ICh0bXBfd29yZF9jbnRzICogMik7IHRtcGluZGV4KyspIHsKQEAgLTc1NiwyMyArNzU2LDIzIEBACiAJCX0KIAogCQlpZiAoYmRhdGFlbXB0eSA9PSBmYWxzZSkgewotCQkJZWZ1c2VfYWRkciA9IGVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKKwkJCSplZnVzZV9hZGRyID0gKmVmdXNlX2FkZHIgKyAodG1wX3dvcmRfY250cyAqIDIpICsgMTsKIAkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJfSBlbHNlIHsKIAkJCW1hdGNoX3dvcmRfZW4gPSAweDBGOwotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgwKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMCkpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgwKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMCkpOwogCi0JCQlpZiAoISgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDEpKSB8CisJCQlpZiAoISgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgxKSkgfAogCQkJICAgICAodG1wX3BrdC53b3JkX2VuICYgQklUKDEpKSkpCiAJCQkJbWF0Y2hfd29yZF9lbiAmPSAofkJJVCgxKSk7CiAKLQkJCWlmICghKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMikpIHwKKwkJCWlmICghKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDIpKSB8CiAJCQkgICAgICh0bXBfcGt0LndvcmRfZW4gJiBCSVQoMikpKSkKIAkJCQltYXRjaF93b3JkX2VuICY9ICh+QklUKDIpKTsKIAotCQkJaWYgKCEoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgzKSkgfAorCQkJaWYgKCEoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMykpIHwKIAkJCSAgICAgKHRtcF9wa3Qud29yZF9lbiAmIEJJVCgzKSkpKQogCQkJCW1hdGNoX3dvcmRfZW4gJj0gKH5CSVQoMykpOwogCkBAIC03ODAsNyArNzgwLDcgQEAKIAkJCQliYWR3b3JkZW4gPSBlZnVzZV93b3JkX2VuYWJsZV9kYXRhX3dyaXRlKAogCQkJCQkJCSAgICBodywgKmVmdXNlX2FkZHIgKyAxLAogCQkJCQkJCSAgICB0bXBfcGt0LndvcmRfZW4sCi0JCQkJCQkJICAgIHRhcmdldF9wa3QuZGF0YSk7CisJCQkJCQkJICAgIHRhcmdldF9wa3QtPmRhdGEpOwogCiAJCQkJaWYgKDB4MEYgIT0gKGJhZHdvcmRlbiAmIDB4MEYpKSB7CiAJCQkJCXU4IHJlb3JnX29mZnNldCA9IG9mZnNldDsKQEAgLTc5MSwyNiArNzkxLDI2IEBACiAJCQkJfQogCiAJCQkJdG1wX3dvcmRfZW4gPSAweDBGOwotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDApKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDApKSBeCiAJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDApKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMCkpOwogCi0JCQkJaWYgKCh0YXJnZXRfcGt0LndvcmRfZW4gJiBCSVQoMSkpIF4KKwkJCQlpZiAoKHRhcmdldF9wa3QtPndvcmRfZW4gJiBCSVQoMSkpIF4KIAkJCQkgICAgKG1hdGNoX3dvcmRfZW4gJiBCSVQoMSkpKQogCQkJCQl0bXBfd29yZF9lbiAmPSAofkJJVCgxKSk7CiAKLQkJCQlpZiAoKHRhcmdldF9wa3Qud29yZF9lbiAmIEJJVCgyKSkgXgorCQkJCWlmICgodGFyZ2V0X3BrdC0+d29yZF9lbiAmIEJJVCgyKSkgXgogCQkJCQkobWF0Y2hfd29yZF9lbiAmIEJJVCgyKSkpCiAJCQkJCXRtcF93b3JkX2VuICY9ICh+QklUKDIpKTsKIAotCQkJCWlmICgodGFyZ2V0X3BrdC53b3JkX2VuICYgQklUKDMpKSBeCisJCQkJaWYgKCh0YXJnZXRfcGt0LT53b3JkX2VuICYgQklUKDMpKSBeCiAJCQkJICAgIChtYXRjaF93b3JkX2VuICYgQklUKDMpKSkKIAkJCQkJdG1wX3dvcmRfZW4gJj0gKH5CSVQoMykpOwogCiAJCQkJaWYgKCh0bXBfd29yZF9lbiAmIDB4MEYpICE9IDB4MEYpIHsKIAkJCQkJKmVmdXNlX2FkZHIgPSBlZnVzZV9nZXRfY3VycmVudF9zaXplKGh3KTsKLQkJCQkJdGFyZ2V0X3BrdC5vZmZzZXQgPSBvZmZzZXQ7Ci0JCQkJCXRhcmdldF9wa3Qud29yZF9lbiA9IHRtcF93b3JkX2VuOworCQkJCQl0YXJnZXRfcGt0LT5vZmZzZXQgPSBvZmZzZXQ7CisJCQkJCXRhcmdldF9wa3QtPndvcmRfZW4gPSB0bXBfd29yZF9lbjsKIAkJCQl9IGVsc2UKIAkJCQkJKmJjb250aW51YWwgPSBmYWxzZTsKIAkJCQkqd3JpdGVfc3RhdGUgPSBQR19TVEFURV9IRUFERVI7CkBAIC04MjEsOCArODIxLDggQEAKIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCSplZnVzZV9hZGRyICs9ICgyICogdG1wX3dvcmRfY250cykgKyAxOwotCQkJCXRhcmdldF9wa3Qub2Zmc2V0ID0gb2Zmc2V0OwotCQkJCXRhcmdldF9wa3Qud29yZF9lbiA9IHdvcmRfZW47CisJCQkJdGFyZ2V0X3BrdC0+b2Zmc2V0ID0gb2Zmc2V0OworCQkJCXRhcmdldF9wa3QtPndvcmRfZW4gPSB3b3JkX2VuOwogCQkJCSp3cml0ZV9zdGF0ZSA9IFBHX1NUQVRFX0hFQURFUjsKIAkJCX0KIAkJfQpAQCAtOTM4LDcgKzkzOCw3IEBACiAJCQkJZWZ1c2Vfd3JpdGVfZGF0YV9jYXNlMShodywgJmVmdXNlX2FkZHIsCiAJCQkJCQkgICAgICAgZWZ1c2VfZGF0YSwgb2Zmc2V0LAogCQkJCQkJICAgICAgICZiY29udGludWFsLAotCQkJCQkJICAgICAgICZ3cml0ZV9zdGF0ZSwgdGFyZ2V0X3BrdCwKKwkJCQkJCSAgICAgICAmd3JpdGVfc3RhdGUsICZ0YXJnZXRfcGt0LAogCQkJCQkJICAgICAgICZyZXBlYXRfdGltZXMsICZicmVzdWx0LAogCQkJCQkJICAgICAgIHdvcmRfZW4pOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bHdpZmkvcGNpLmMKaW5kZXggMGZhMzZhYS4uMTc1OGQ0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsd2lmaS9wY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGx3aWZpL3BjaS5jCkBAIC02MTksNiArNjE5LDEzIEBACiAJCQkJCXN0cnVjdCBza19idWZmICp1c2tiID0gTlVMTDsKIAkJCQkJdTggKnBkYXRhOwogCQkJCQl1c2tiID0gZGV2X2FsbG9jX3NrYihza2ItPmxlbiArIDEyOCk7CisJCQkJCWlmICghdXNrYikgeworCQkJCQkJUlRfVFJBQ0UocnRscHJpdiwKKwkJCQkJCQkoQ09NUF9JTlRSIHwgQ09NUF9SRUNWKSwKKwkJCQkJCQlEQkdfRU1FUkcsCisJCQkJCQkJKCJjYW4ndCBhbGxvYyByeCBza2JcbiIpKTsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQogCQkJCQltZW1jcHkoSUVFRTgwMjExX1NLQl9SWENCKHVza2IpLAogCQkJCQkJCSZyeF9zdGF0dXMsCiAJCQkJCQkJc2l6ZW9mKHJ4X3N0YXR1cykpOwpAQCAtNjQxLDcgKzY0OCw3IEBACiAJCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CiAJCQlpZiAodW5saWtlbHkoIW5ld19za2IpKSB7CiAJCQkJUlRfVFJBQ0UocnRscHJpdiwgKENPTVBfSU5UUiB8IENPTVBfUkVDViksCi0JCQkJCSBEQkdfRE1FU0csCisJCQkJCSBEQkdfRU1FUkcsCiAJCQkJCSAoImNhbid0IGFsbG9jIHNrYiBmb3IgcnhcbiIpKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CkBAIC0xMDY2LDkgKzEwNzMsOSBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9CiAJCQkgICAgZGV2X2FsbG9jX3NrYihydGxwY2ktPnJ4YnVmZmVyc2l6ZSk7CiAJCQl1MzIgYnVmZmVyYWRkcmVzczsKLQkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2NbaV07CiAJCQlpZiAoIXNrYikKIAkJCQlyZXR1cm4gMDsKKwkJCWVudHJ5ID0gJnJ0bHBjaS0+cnhfcmluZ1tyeF9xdWV1ZV9pZHhdLmRlc2NbaV07CiAKIAkJCS8qc2tiLT5kZXYgPSBkZXY7ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyNTEvbWFpbi5jCmluZGV4IDAxMmUxYTQuLjQwMzcyYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTI1MS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMjUxL21haW4uYwpAQCAtMTAzOSw2ICsxMDM5LDkgQEAKIAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKSB7CiAJCWJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCQlpZiAoIWJlYWNvbikKKwkJCWdvdG8gb3V0X3NsZWVwOworCiAJCXJldCA9IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfQkVBQ09OLCBiZWFjb24tPmRhdGEsCiAJCQkJCSAgICAgIGJlYWNvbi0+bGVuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3NwaS5jCmluZGV4IDQ2NzE0OTEuLjcxNDVlYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9zcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvc3BpLmMKQEAgLTExMCw5ICsxMTAsOCBAQAogCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ0LCAmbSk7CiAKIAlzcGlfc3luYyh3bF90b19zcGkod2wpLCAmbSk7Ci0Ja2ZyZWUoY21kKTsKLQogCXdsMTI3MV9kdW1wKERFQlVHX1NQSSwgInNwaSByZXNldCAtPiAiLCBjbWQsIFdTUElfSU5JVF9DTURfTEVOKTsKKwlrZnJlZShjbWQpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfc3BpX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCmluZGV4IDU0NmRlNTcuLmRhMWYxMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCisrKyBiL2RyaXZlcnMvbmV0L3hlbi1uZXRmcm9udC5jCkBAIC0xMjAsNiArMTIwLDkgQEAKIAl1bnNpZ25lZCBsb25nIHJ4X3Bmbl9hcnJheVtORVRfUlhfUklOR19TSVpFXTsKIAlzdHJ1Y3QgbXVsdGljYWxsX2VudHJ5IHJ4X21jbFtORVRfUlhfUklOR19TSVpFKzFdOwogCXN0cnVjdCBtbXVfdXBkYXRlIHJ4X21tdVtORVRfUlhfUklOR19TSVpFXTsKKworCS8qIFN0YXRpc3RpY3MgKi8KKwlpbnQgcnhfZ3NvX2NoZWNrc3VtX2ZpeHVwOwogfTsKIAogc3RydWN0IG5ldGZyb250X3J4X2luZm8gewpAQCAtNzcwLDExICs3NzMsMjkgQEAKIAlyZXR1cm4gY29uczsKIH0KIAotc3RhdGljIGludCBza2JfY2hlY2tzdW1fc2V0dXAoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgY2hlY2tzdW1fc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAl1bnNpZ25lZCBjaGFyICp0aDsKIAlpbnQgZXJyID0gLUVQUk9UTzsKKwlpbnQgcmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtID0gMDsKKworCS8qCisJICogQSBHU08gU0tCIG11c3QgYmUgQ0hFQ0tTVU1fUEFSVElBTC4gSG93ZXZlciBzb21lIGJ1Z2d5CisJICogcGVlcnMgY2FuIGZhaWwgdG8gc2V0IE5FVFJYRl9jc3VtX2JsYW5rIHdoZW4gc2VuZGluZyBhIEdTTworCSAqIGZyYW1lLiBJbiB0aGlzIGNhc2UgZm9yY2UgdGhlIFNLQiB0byBDSEVDS1NVTV9QQVJUSUFMIGFuZAorCSAqIHJlY2FsY3VsYXRlIHRoZSBwYXJ0aWFsIGNoZWNrc3VtLgorCSAqLworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMICYmIHNrYl9pc19nc28oc2tiKSkgeworCQlzdHJ1Y3QgbmV0ZnJvbnRfaW5mbyAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCQlucC0+cnhfZ3NvX2NoZWNrc3VtX2ZpeHVwKys7CisJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fUEFSVElBTDsKKwkJcmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtID0gMTsKKwl9CisKKwkvKiBBIG5vbi1DSEVDS1NVTV9QQVJUSUFMIFNLQiBkb2VzIG5vdCByZXF1aXJlIHNldHVwLiAqLworCWlmIChza2ItPmlwX3N1bW1lZCAhPSBDSEVDS1NVTV9QQVJUSUFMKQorCQlyZXR1cm4gMDsKIAogCWlmIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSkKIAkJZ290byBvdXQ7CkBAIC03ODgsOSArODA5LDIzIEBACiAJc3dpdGNoIChpcGgtPnByb3RvY29sKSB7CiAJY2FzZSBJUFBST1RPX1RDUDoKIAkJc2tiLT5jc3VtX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKTsKKworCQlpZiAocmVjYWxjdWxhdGVfcGFydGlhbF9jc3VtKSB7CisJCQlzdHJ1Y3QgdGNwaGRyICp0Y3BoID0gKHN0cnVjdCB0Y3BoZHIgKil0aDsKKwkJCXRjcGgtPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsCisJCQkJCQkJIHNrYi0+bGVuIC0gaXBoLT5paGwqNCwKKwkJCQkJCQkgSVBQUk9UT19UQ1AsIDApOworCQl9CiAJCWJyZWFrOwogCWNhc2UgSVBQUk9UT19VRFA6CiAJCXNrYi0+Y3N1bV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjayk7CisKKwkJaWYgKHJlY2FsY3VsYXRlX3BhcnRpYWxfY3N1bSkgeworCQkJc3RydWN0IHVkcGhkciAqdWRwaCA9IChzdHJ1Y3QgdWRwaGRyICopdGg7CisJCQl1ZHBoLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLCBpcGgtPmRhZGRyLAorCQkJCQkJCSBza2ItPmxlbiAtIGlwaC0+aWhsKjQsCisJCQkJCQkJIElQUFJPVE9fVURQLCAwKTsKKwkJfQogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtODI5LDEzICs4NjQsMTEgQEAKIAkJLyogRXRoZXJuZXQgd29yazogRGVsYXllZCB0byBoZXJlIGFzIGl0IHBlZWtzIHRoZSBoZWFkZXIuICovCiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAKLQkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKLQkJCWlmIChza2JfY2hlY2tzdW1fc2V0dXAoc2tiKSkgewotCQkJCWtmcmVlX3NrYihza2IpOwotCQkJCXBhY2tldHNfZHJvcHBlZCsrOwotCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQkJY29udGludWU7Ci0JCQl9CisJCWlmIChjaGVja3N1bV9zZXR1cChkZXYsIHNrYikpIHsKKwkJCWtmcmVlX3NrYihza2IpOworCQkJcGFja2V0c19kcm9wcGVkKys7CisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJY29udGludWU7CiAJCX0KIAogCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTE2MzIsMTIgKzE2NjUsNTkgQEAKIAl9CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeGVubmV0X3N0YXQgeworCWNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dOworCXUxNiBvZmZzZXQ7Cit9IHhlbm5ldF9zdGF0c1tdID0geworCXsKKwkJInJ4X2dzb19jaGVja3N1bV9maXh1cCIsCisJCW9mZnNldG9mKHN0cnVjdCBuZXRmcm9udF9pbmZvLCByeF9nc29fY2hlY2tzdW1fZml4dXApCisJfSwKK307CisKK3N0YXRpYyBpbnQgeGVubmV0X2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpbmdfc2V0KQoreworCXN3aXRjaCAoc3RyaW5nX3NldCkgeworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlyZXR1cm4gQVJSQVlfU0laRSh4ZW5uZXRfc3RhdHMpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIHZvaWQgeGVubmV0X2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqIGRhdGEpCit7CisJdm9pZCAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoeGVubmV0X3N0YXRzKTsgaSsrKQorCQlkYXRhW2ldID0gKihpbnQgKikobnAgKyB4ZW5uZXRfc3RhdHNbaV0ub2Zmc2V0KTsKK30KKworc3RhdGljIHZvaWQgeGVubmV0X2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICogZGF0YSkKK3sKKwlpbnQgaTsKKworCXN3aXRjaCAoc3RyaW5nc2V0KSB7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhlbm5ldF9zdGF0cyk7IGkrKykKKwkJCW1lbWNweShkYXRhICsgaSAqIEVUSF9HU1RSSU5HX0xFTiwKKwkJCSAgICAgICB4ZW5uZXRfc3RhdHNbaV0ubmFtZSwgRVRIX0dTVFJJTkdfTEVOKTsKKwkJYnJlYWs7CisJfQorfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHhlbm5ldF9ldGh0b29sX29wcyA9CiB7CiAJLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwKIAkuc2V0X3NnID0geGVubmV0X3NldF9zZywKIAkuc2V0X3RzbyA9IHhlbm5ldF9zZXRfdHNvLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisKKwkuZ2V0X3NzZXRfY291bnQgPSB4ZW5uZXRfZ2V0X3NzZXRfY291bnQsCisJLmdldF9ldGh0b29sX3N0YXRzID0geGVubmV0X2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfc3RyaW5ncyA9IHhlbm5ldF9nZXRfc3RyaW5ncywKIH07CiAKICNpZmRlZiBDT05GSUdfU1lTRlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmZjL0tjb25maWcgYi9kcml2ZXJzL25mYy9LY29uZmlnCmluZGV4IGZmZWRmZDQuLmVhMTU4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmZjL0tjb25maWcKKysrIGIvZHJpdmVycy9uZmMvS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKICMKIAogbWVudWNvbmZpZyBORkNfREVWSUNFUwotCWJvb2wgIk5GQyBkZXZpY2VzIgorCWJvb2wgIk5lYXIgRmllbGQgQ29tbXVuaWNhdGlvbiAoTkZDKSBkZXZpY2VzIgogCWRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIAkgIFlvdSdsbCBoYXZlIHRvIHNheSBZIGlmIHlvdXIgY29tcHV0ZXIgY29udGFpbnMgYW4gTkZDIGRldmljZSB0aGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25mYy9wbjU0NC5jIGIvZHJpdmVycy9uZmMvcG41NDQuYwppbmRleCBiYWU2NDcyLi43MjRmNjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25mYy9wbjU0NC5jCisrKyBiL2RyaXZlcnMvbmZjL3BuNTQ0LmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0cnVjdCBwbjU0NF9pbmZvIHsKIAlzdHJ1Y3QgbWlzY2RldmljZSBtaXNjZGV2OwogCXN0cnVjdCBpMmNfY2xpZW50ICppMmNfZGV2OwotCXN0cnVjdCByZWd1bGF0b3JfYnVsa19kYXRhIHJlZ3NbMl07CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgcmVnc1szXTsKIAogCWVudW0gcG41NDRfc3RhdGUgc3RhdGU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OwpAQCAtNzQsNiArNzQsNyBAQAogCiBzdGF0aWMgY29uc3QgY2hhciByZWdfdmRkX2lvW10JPSAiVmRkX0lPIjsKIHN0YXRpYyBjb25zdCBjaGFyIHJlZ192YmF0W10JPSAiVkJhdCI7CitzdGF0aWMgY29uc3QgY2hhciByZWdfdnNpbVtdCT0gIlZTaW0iOwogCiAvKiBzeXNmcyBpbnRlcmZhY2UgKi8KIHN0YXRpYyBzc2l6ZV90IHBuNTQ0X3Rlc3Qoc3RydWN0IGRldmljZSAqZGV2LApAQCAtNzQwLDYgKzc0MSw3IEBACiAKIAlpbmZvLT5yZWdzWzBdLnN1cHBseSA9IHJlZ192ZGRfaW87CiAJaW5mby0+cmVnc1sxXS5zdXBwbHkgPSByZWdfdmJhdDsKKwlpbmZvLT5yZWdzWzJdLnN1cHBseSA9IHJlZ192c2ltOwogCXIgPSByZWd1bGF0b3JfYnVsa19nZXQoJmNsaWVudC0+ZGV2LCBBUlJBWV9TSVpFKGluZm8tPnJlZ3MpLAogCQkJCSBpbmZvLT5yZWdzKTsKIAlpZiAociA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL3BkdC5jIGIvZHJpdmVycy9vZi9wZHQuYwppbmRleCAyODI5NWQwLi40ZDg3YjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL29mL3BkdC5jCisrKyBiL2RyaXZlcnMvb2YvcGR0LmMKQEAgLTM2LDE5ICszNiw1NSBAQAogCShwKS0+dW5pcXVlX2lkID0gb2ZfcGR0X3VuaXF1ZV9pZCsrOyBcCiB9IHdoaWxlICgwKQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm9mX3BkdF9ub2RlX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3N0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF9idWlsZF9mdWxsX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlyZXR1cm4gZHAtPnBhdGhfY29tcG9uZW50X25hbWU7CisJaW50IGxlbiwgb3VybGVuLCBwbGVuOworCWNoYXIgKm47CisKKwlkcC0+cGF0aF9jb21wb25lbnRfbmFtZSA9IGJ1aWxkX3BhdGhfY29tcG9uZW50KGRwKTsKKworCXBsZW4gPSBzdHJsZW4oZHAtPnBhcmVudC0+ZnVsbF9uYW1lKTsKKwlvdXJsZW4gPSBzdHJsZW4oZHAtPnBhdGhfY29tcG9uZW50X25hbWUpOworCWxlbiA9IG91cmxlbiArIHBsZW4gKyAyOworCisJbiA9IHByb21fZWFybHlfYWxsb2MobGVuKTsKKwlzdHJjcHkobiwgZHAtPnBhcmVudC0+ZnVsbF9uYW1lKTsKKwlpZiAoIW9mX25vZGVfaXNfcm9vdChkcC0+cGFyZW50KSkgeworCQlzdHJjcHkobiArIHBsZW4sICIvIik7CisJCXBsZW4rKzsKKwl9CisJc3RyY3B5KG4gKyBwbGVuLCBkcC0+cGF0aF9jb21wb25lbnRfbmFtZSk7CisKKwlyZXR1cm4gbjsKIH0KIAotI2Vsc2UKKyNlbHNlIC8qIENPTkZJR19TUEFSQyAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgb2ZfcGR0X2luY3JfdW5pcXVlX2lkKHZvaWQgKnApIHsgfQogc3RhdGljIGlubGluZSB2b2lkIGlycV90cmFuc19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApIHsgfQogCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKm9mX3BkdF9ub2RlX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKK3N0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF9idWlsZF9mdWxsX25hbWUoc3RydWN0IGRldmljZV9ub2RlICpkcCkKIHsKLQlyZXR1cm4gZHAtPm5hbWU7CisJc3RhdGljIGludCBmYWlsc2FmZV9pZCA9IDA7IC8qIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBuYW1lcyBvbiBmYWlsdXJlICovCisJY2hhciAqYnVmOworCWludCBsZW47CisKKwlpZiAob2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aChkcC0+cGhhbmRsZSwgTlVMTCwgMCwgJmxlbikpCisJCWdvdG8gZmFpbHNhZmU7CisKKwlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbiArIDEpOworCWlmIChvZl9wZHRfcHJvbV9vcHMtPnBrZzJwYXRoKGRwLT5waGFuZGxlLCBidWYsIGxlbiwgJmxlbikpCisJCWdvdG8gZmFpbHNhZmU7CisJcmV0dXJuIGJ1ZjsKKworIGZhaWxzYWZlOgorCWJ1ZiA9IHByb21fZWFybHlfYWxsb2Moc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSkgKworCQkJICAgICAgIHN0cmxlbihkcC0+bmFtZSkgKyAxNik7CisJc3ByaW50ZihidWYsICIlcy8lc0B1bmtub3duJWkiLAorCQlvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkgPyAiIiA6IGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSwKKwkJZHAtPm5hbWUsIGZhaWxzYWZlX2lkKyspOworCXByX2VycigiJXM6IHBrZzJwYXRoIGZhaWxlZDsgYXNzaWduaW5nICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlyZXR1cm4gYnVmOwogfQogCiAjZW5kaWYgLyogIUNPTkZJR19TUEFSQyAqLwpAQCAtMTMyLDQ3ICsxNjgsNiBAQAogCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF90cnlfcGtnMnBhdGgocGhhbmRsZSBub2RlKQotewotCWNoYXIgKnJlcywgKmJ1ZiA9IE5VTEw7Ci0JaW50IGxlbjsKLQotCWlmICghb2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAob2ZfcGR0X3Byb21fb3BzLT5wa2cycGF0aChub2RlLCBidWYsIDAsICZsZW4pKQotCQlyZXR1cm4gTlVMTDsKLQlidWYgPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbiArIDEpOwotCWlmIChvZl9wZHRfcHJvbV9vcHMtPnBrZzJwYXRoKG5vZGUsIGJ1ZiwgbGVuLCAmbGVuKSkgewotCQlwcl9lcnIoIiVzOiBwYWNrYWdlLXRvLXBhdGggZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJlcyA9IHN0cnJjaHIoYnVmLCAnLycpOwotCWlmICghcmVzKSB7Ci0JCXByX2VycigiJXM6IGNvdWxkbid0IGZpbmQgLyBpbiAlc1xuIiwgX19mdW5jX18sIGJ1Zik7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gcmVzKzE7Ci19Ci0KLS8qCi0gKiBXaGVuIGZldGNoaW5nIHRoZSBub2RlJ3MgbmFtZSwgZmlyc3QgdHJ5IHVzaW5nIHBhY2thZ2UtdG8tcGF0aDsgaWYKLSAqIHRoYXQgZmFpbHMgKGVpdGhlciBiZWNhdXNlIHRoZSBhcmNoIGhhc24ndCBzdXBwbGllZCBhIFBST00gY2FsbGJhY2ssCi0gKiBvciBzb21lIG90aGVyIHJhbmRvbSBmYWlsdXJlKSwgZmFsbCBiYWNrIHRvIGp1c3QgbG9va2luZyBhdCB0aGUgbm9kZSdzCi0gKiAnbmFtZScgcHJvcGVydHkuCi0gKi8KLXN0YXRpYyBjaGFyICogX19pbml0IG9mX3BkdF9idWlsZF9uYW1lKHBoYW5kbGUgbm9kZSkKLXsKLQljaGFyICpidWY7Ci0KLQlidWYgPSBvZl9wZHRfdHJ5X3BrZzJwYXRoKG5vZGUpOwotCWlmICghYnVmKQotCQlidWYgPSBvZl9wZHRfZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQogc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqIF9faW5pdCBvZl9wZHRfY3JlYXRlX25vZGUocGhhbmRsZSBub2RlLAogCQkJCQkJICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KQogewpAQCAtMTg3LDcgKzE4Miw3IEBACiAKIAlrcmVmX2luaXQoJmRwLT5rcmVmKTsKIAotCWRwLT5uYW1lID0gb2ZfcGR0X2J1aWxkX25hbWUobm9kZSk7CisJZHAtPm5hbWUgPSBvZl9wZHRfZ2V0X29uZV9wcm9wZXJ0eShub2RlLCAibmFtZSIpOwogCWRwLT50eXBlID0gb2ZfcGR0X2dldF9vbmVfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIik7CiAJZHAtPnBoYW5kbGUgPSBub2RlOwogCkBAIC0xOTgsMjYgKzE5Myw2IEBACiAJcmV0dXJuIGRwOwogfQogCi1zdGF0aWMgY2hhciAqIF9faW5pdCBvZl9wZHRfYnVpbGRfZnVsbF9uYW1lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZHApCi17Ci0JaW50IGxlbiwgb3VybGVuLCBwbGVuOwotCWNoYXIgKm47Ci0KLQlwbGVuID0gc3RybGVuKGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0Jb3VybGVuID0gc3RybGVuKG9mX3BkdF9ub2RlX25hbWUoZHApKTsKLQlsZW4gPSBvdXJsZW4gKyBwbGVuICsgMjsKLQotCW4gPSBwcm9tX2Vhcmx5X2FsbG9jKGxlbik7Ci0Jc3RyY3B5KG4sIGRwLT5wYXJlbnQtPmZ1bGxfbmFtZSk7Ci0JaWYgKCFvZl9ub2RlX2lzX3Jvb3QoZHAtPnBhcmVudCkpIHsKLQkJc3RyY3B5KG4gKyBwbGVuLCAiLyIpOwotCQlwbGVuKys7Ci0JfQotCXN0cmNweShuICsgcGxlbiwgb2ZfcGR0X25vZGVfbmFtZShkcCkpOwotCi0JcmV0dXJuIG47Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2luaXQgb2ZfcGR0X2J1aWxkX3RyZWUoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsCiAJCQkJCQkgICBwaGFuZGxlIG5vZGUsCiAJCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKioqbmV4dHApCkBAIC0yNDAsOSArMjE1LDYgQEAKIAkJKigqbmV4dHApID0gZHA7CiAJCSpuZXh0cCA9ICZkcC0+YWxsbmV4dDsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDKQotCQlkcC0+cGF0aF9jb21wb25lbnRfbmFtZSA9IGJ1aWxkX3BhdGhfY29tcG9uZW50KGRwKTsKLSNlbmRpZgogCQlkcC0+ZnVsbF9uYW1lID0gb2ZfcGR0X2J1aWxkX2Z1bGxfbmFtZShkcCk7CiAKIAkJZHAtPmNoaWxkID0gb2ZfcGR0X2J1aWxkX3RyZWUoZHAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvc2hhcmUuYyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCmluZGV4IGEyZDlkMWUuLmE4NDhlMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9zaGFyZS5jCkBAIC02NzgsNyArNjc4LDcgQEAKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlbid0IGxlZnQgYW55IHBvaW50ZXJzIGFyb3VuZCBpbiB0aGUgd2FpdAogCSAqIGxpc3QuICovCi0Jc3Bpbl9sb2NrICgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CiAJaWYgKGRldi0+d2FpdHByZXYgfHwgZGV2LT53YWl0bmV4dCB8fCBwb3J0LT53YWl0aGVhZCA9PSBkZXYpIHsKIAkJaWYgKGRldi0+d2FpdHByZXYpCiAJCQlkZXYtPndhaXRwcmV2LT53YWl0bmV4dCA9IGRldi0+d2FpdG5leHQ7CkBAIC02ODksNyArNjg5LDcgQEAKIAkJZWxzZQogCQkJcG9ydC0+d2FpdHRhaWwgPSBkZXYtPndhaXRwcmV2OwogCX0KLQlzcGluX3VubG9jayAoJnBvcnQtPndhaXRsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+d2FpdGxpc3RfbG9jayk7CiAKIAlrZnJlZShkZXYtPnN0YXRlKTsKIAlrZnJlZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwppbmRleCA4ZWNhYWM5Li5lYTI1ZTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2ktYXNwbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlICJwY2kuaCIKQEAgLTM2OCw3ICszNjksNyBAQAogCXU4ICpkYXRhID0gKHU4KikgYnVmOwogCiAJLyogU2V2ZXJhbCBjaGlwcyBsb2NrIHVwIHRyeWluZyB0byByZWFkIHVuZGVmaW5lZCBjb25maWcgc3BhY2UgKi8KLQlpZiAoY2FwX3JhaXNlZChmaWxwLT5mX2NyZWQtPmNhcF9lZmZlY3RpdmUsIENBUF9TWVNfQURNSU4pKSB7CisJaWYgKHNlY3VyaXR5X2NhcGFibGUoZmlscC0+Zl9jcmVkLCBDQVBfU1lTX0FETUlOKSA9PSAwKSB7CiAJCXNpemUgPSBkZXYtPmNmZ19zaXplOwogCX0gZWxzZSBpZiAoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQ0FSREJVUykgewogCQlzaXplID0gMTI4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCAwYmRkYTViMy4uNDJmYmYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMKQEAgLTUxOCw2ICs1MTgsOCBAQAogCQlmbGFncyB8PSBDT05GX0VOQUJMRV9JT0NBUkQ7CiAJaWYgKGZsYWdzICYgQ09ORl9FTkFCTEVfSU9DQVJEKQogCQlzLT5zb2NrZXQuZmxhZ3MgfD0gU1NfSU9DQVJEOworCWlmIChmbGFncyAmIENPTkZfRU5BQkxFX1pWQ0FSRCkKKwkJcy0+c29ja2V0LmZsYWdzIHw9IFNTX1pWQ0FSRCB8IFNTX0lPQ0FSRDsKIAlpZiAoZmxhZ3MgJiBDT05GX0VOQUJMRV9TUEtSKSB7CiAJCXMtPnNvY2tldC5mbGFncyB8PSBTU19TUEtSX0VOQTsKIAkJc3RhdHVzID0gQ0NTUl9BVURJT19FTkE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuYwppbmRleCAzNzU1ZTdjLi4yYzU0MDU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaCBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9iYXNlLmgKaW5kZXggYmI2MmVhOC4uYjYwOWI0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2Jhc2UuaAorKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfYmFzZS5oCkBAIC0xLDMgKzEsNCBAQAogaW50IHB4YTJ4eF9kcnZfcGNtY2lhX2FkZF9vbmUoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpOwogdm9pZCBweGEyeHhfZHJ2X3BjbWNpYV9vcHMoc3RydWN0IHBjbWNpYV9sb3dfbGV2ZWwgKm9wcyk7Cit2b2lkIHB4YTJ4eF9jb25maWd1cmVfc29ja2V0cyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jIGIvZHJpdmVycy9wY21jaWEvcHhhMnh4X2NvbGlicmkuYwppbmRleCBjM2Y3MjE5Li5hNTIwMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9weGEyeHhfY29saWJyaS5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9jb2xpYnJpLmMKQEAgLTE4MSw2ICsxODEsOSBAQAogewogCWludCByZXQ7CiAKKwlpZiAoIW1hY2hpbmVfaXNfY29saWJyaSgpICYmICFtYWNoaW5lX2lzX2NvbGlicmkzMjAoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAljb2xpYnJpX3BjbWNpYV9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoInB4YTJ4eC1wY21jaWEiLCAtMSk7CiAJaWYgKCFjb2xpYnJpX3BjbWNpYV9kZXZpY2UpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYyBiL2RyaXZlcnMvcGNtY2lhL3B4YTJ4eF9sdWJib2NrLmMKaW5kZXggYjlmOGM4Zi4uMjVhZmU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcHhhMnh4X2x1YmJvY2suYworKysgYi9kcml2ZXJzL3BjbWNpYS9weGEyeHhfbHViYm9jay5jCkBAIC0yMjYsNiArMjI2LDcgQEAKIAkJbHViYm9ja19zZXRfbWlzY193cigoMSA8PCAxNSkgfCAoMSA8PCAxNCksIDApOwogCiAJCXB4YTJ4eF9kcnZfcGNtY2lhX29wcygmbHViYm9ja19wY21jaWFfb3BzKTsKKwkJcHhhMnh4X2NvbmZpZ3VyZV9zb2NrZXRzKCZzYWRldi0+ZGV2KTsKIAkJcmV0ID0gc2ExMTExX3BjbWNpYV9hZGQoc2FkZXYsICZsdWJib2NrX3BjbWNpYV9vcHMsCiAJCQkJcHhhMnh4X2Rydl9wY21jaWFfYWRkX29uZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKaW5kZXggZDE2M2JjMi4uYTU5YWY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCkBAIC0yMjcsNyArMjI3LDcgQEAKIGNvbmZpZyBJREVBUEFEX0xBUFRPUAogCXRyaXN0YXRlICJMZW5vdm8gSWRlYVBhZCBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gQUNQSQotCWRlcGVuZHMgb24gUkZLSUxMCisJZGVwZW5kcyBvbiBSRktJTEwgJiYgSU5QVVQKIAlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSByZmtpbGwgc3dpdGNoZXMgb24gTGVub3ZvIElkZWFQYWQgbmV0Ym9va3MuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYWNlci13bWkuYwppbmRleCBjNWM0YjhjLi4zOGIzNGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hY2VyLXdtaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FjZXItd21pLmMKQEAgLTg0LDcgKzg0LDcgQEAKICAqLwogI2RlZmluZSBBTVcwX0dVSUQxCQkiNjdDMzM3MUQtOTVBMy00QzM3LUJCNjEtREQ0N0I0OTFEQUFCIgogI2RlZmluZSBBTVcwX0dVSUQyCQkiNDMxRjE2RUQtMEMyQi00NDRDLUIyNjctMjdERUIxNDBDRjlDIgotI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MmZkLUJFOTEtM0Q0QUMyRDdDMEQzIgorI2RlZmluZSBXTUlEX0dVSUQxCQkiNkFGNEYyNTgtQjQwMS00MkZELUJFOTEtM0Q0QUMyRDdDMEQzIgogI2RlZmluZSBXTUlEX0dVSUQyCQkiOTU3NjRFMDktRkI1Ni00ZTgzLUIzMUEtMzc3NjFGNjA5OTRBIgogI2RlZmluZSBXTUlEX0dVSUQzCQkiNjFFRjY5RUEtODY1Qy00QkMzLUE1MDItQTBERUJBMENCNTMxIgogCkBAIC0xMjgwLDcgKzEyODAsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JV1VHTyB8IFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Jvb2xfdGhyZWVnLAorc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYm9vbF90aHJlZWcsCiAJc2V0X2Jvb2xfdGhyZWVnKTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnRlcmZhY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKaW5kZXggNDYzM2ZkOC4uZmU0OTU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMKQEAgLTEwODEsMTQgKzEwODEsOCBAQAogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvYzsKIAltb2RlX3QgbW9kZTsKIAotCS8qCi0JICogSWYgcGFyYW1ldGVyIHVpZCBvciBnaWQgaXMgbm90IGNoYW5nZWQsIGtlZXAgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3IKLQkgKiBvdXIgcHJvYyBlbnRyaWVzICgtcnctcnctcnctKSBlbHNlLCBpdCBtZWFucyB3ZSBjYXJlIGFib3V0IHNlY3VyaXR5LAotCSAqIGFuZCB0aGVuIHNldCB0byAtcnctcnctLS0tCi0JICovCi0KIAlpZiAoKGFzdXNfdWlkID09IDApICYmIChhc3VzX2dpZCA9PSAwKSkgewotCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVUdPOworCQltb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSIHwgU19JV0dSUDsKIAl9IGVsc2UgewogCQltb2RlID0gU19JRlJFRyB8IFNfSVJVU1IgfCBTX0lSR1JQIHwgU19JV1VTUiB8IFNfSVdHUlA7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiAgYXN1c191aWQgYW5kIGFzdXNfZ2lkIHBhcmFtZXRlcnMgYXJlICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IDM0NjU3ZjkuLmFkMjRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMjkwLDkgKzI5MCwxMiBAQAogCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKIAogCS8qIElmIHRoZSBoYXJkd2FyZSBzd2l0Y2ggY29udHJvbHMgdGhpcyByYWRpbywgYW5kIHRoZSBoYXJkd2FyZQotCSAgIHN3aXRjaCBpcyBkaXNhYmxlZCwgZG9uJ3QgYWxsb3cgY2hhbmdpbmcgdGhlIHNvZnR3YXJlIHN0YXRlICovCisJICAgc3dpdGNoIGlzIGRpc2FibGVkLCBkb24ndCBhbGxvdyBjaGFuZ2luZyB0aGUgc29mdHdhcmUgc3RhdGUuCisJICAgSWYgdGhlIGhhcmR3YXJlIHN3aXRjaCBpcyByZXBvcnRlZCBhcyBub3Qgc3VwcG9ydGVkLCBhbHdheXMKKwkgICBmaXJlIHRoZSBTTUkgdG8gdG9nZ2xlIHRoZSBraWxsc3dpdGNoLiAqLwogCWlmICgoaHdzd2l0Y2hfc3RhdGUgJiBCSVQoaHdzd2l0Y2hfYml0KSkgJiYKLQkgICAgIShidWZmZXItPm91dHB1dFsxXSAmIEJJVCgxNikpKSB7CisJICAgICEoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMTYpKSAmJgorCSAgICAoYnVmZmVyLT5vdXRwdXRbMV0gJiBCSVQoMCkpKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTM5OCw2ICs0MDEsMjMgQEAKIAogc3RhdGljIHZvaWQgZGVsbF91cGRhdGVfcmZraWxsKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKKwlpbnQgc3RhdHVzOworCisJZ2V0X2J1ZmZlcigpOworCWRlbGxfc2VuZF9yZXF1ZXN0KGJ1ZmZlciwgMTcsIDExKTsKKwlzdGF0dXMgPSBidWZmZXItPm91dHB1dFsxXTsKKwlyZWxlYXNlX2J1ZmZlcigpOworCisJLyogaWYgaGFyZHdhcmUgcmZraWxsIGlzIG5vdCBzdXBwb3J0ZWQsIHNldCBpdCBleHBsaWNpdGx5ICovCisJaWYgKCEoc3RhdHVzICYgQklUKDApKSkgeworCQlpZiAod2lmaV9yZmtpbGwpCisJCQlkZWxsX3Jma2lsbF9zZXQoKHZvaWQgKikxLCAhKChzdGF0dXMgJiBCSVQoMTcpKSA+PiAxNykpOworCQlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTIsICEoKHN0YXR1cyAmIEJJVCgxOCkpID4+IDE4KSk7CisJCWlmICh3d2FuX3Jma2lsbCkKKwkJCWRlbGxfcmZraWxsX3NldCgodm9pZCAqKTMsICEoKHN0YXR1cyAmIEJJVCgxOSkpID4+IDE5KSk7CisJfQorCiAJaWYgKHdpZmlfcmZraWxsKQogCQlkZWxsX3Jma2lsbF9xdWVyeSh3aWZpX3Jma2lsbCwgKHZvaWQgKikxKTsKIAlpZiAoYmx1ZXRvb3RoX3Jma2lsbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3BtaWNfZ3Bpby5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKaW5kZXggOTMwZTYyNy4uNjE0MzNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfcG1pY19ncGlvLmMKQEAgLTYwLDY5ICs2MCwyMCBAQAogI2RlZmluZSBHUE9TV19ET1UgMHgwOAogI2RlZmluZSBHUE9TV19SRFJWIDB4MzAKIAorI2RlZmluZSBHUElPX1VQREFURV9UWVBFCTB4ODAwMDAwMDAKIAogI2RlZmluZSBOVU1fR1BJTyAyNAogCi1zdHJ1Y3QgcG1pY19ncGlvX2lycSB7Ci0Jc3BpbmxvY2tfdCBsb2NrOwotCXUzMiB0cmlnZ2VyW05VTV9HUElPXTsKLQl1MzIgZGlydHk7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci19OwotCi0KIHN0cnVjdCBwbWljX2dwaW8geworCXN0cnVjdCBtdXRleAkJYnVzbG9jazsKIAlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IHBtaWNfZ3Bpb19pcnEJaXJxdHlwZXM7CiAJdm9pZAkJCSpncGlvaW50cjsKIAlpbnQJCQlpcnE7CiAJdW5zaWduZWQJCWlycV9iYXNlOworCXVuc2lnbmVkIGludAkJdXBkYXRlX3R5cGU7CisJdTMyCQkJdHJpZ2dlcl90eXBlOwogfTsKIAotc3RhdGljIHZvaWQgcG1pY19wcm9ncmFtX2lycXR5cGUoaW50IGdwaW8sIGludCB0eXBlKQotewotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgyMCwgMHgyMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MjApOwotCi0JaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCi0JCWludGVsX3NjdV9pcGNfdXBkYXRlX3JlZ2lzdGVyKEdQSU8wICsgZ3BpbywgMHgxMCwgMHgxMCk7Ci0JZWxzZQotCQlpbnRlbF9zY3VfaXBjX3VwZGF0ZV9yZWdpc3RlcihHUElPMCArIGdwaW8sIDB4MDAsIDB4MTApOwotfTsKLQotc3RhdGljIHZvaWQgcG1pY19pcnF0eXBlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwbWljX2dwaW9faXJxICp0ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwbWljX2dwaW9faXJxLCB3b3JrKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwotCXUxNiB0eXBlOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkvKiBBcyB3ZSBkcm9wIHRoZSBsb2NrLCB3ZSBtYXkgbmVlZCBtdWx0aXBsZSBzY2FucyBpZiB3ZSByYWNlIHRoZQotCSAgIHBtaWNfaXJxX3R5cGUgZnVuY3Rpb24gKi8KLQl3aGlsZSAodC0+ZGlydHkpIHsKLQkJLyoKLQkJICoJRm9yIGVhY2ggcGluIHRoYXQgaGFzIHRoZSBkaXJ0eSBiaXQgc2V0IHNlbmQgYW4gSVBDCi0JCSAqCW1lc3NhZ2UgdG8gY29uZmlndXJlIHRoZSBoYXJkd2FyZSB2aWEgdGhlIFBNSUMKLQkJICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fR1BJTzsgaSsrKSB7Ci0JCQlpZiAoISh0LT5kaXJ0eSAmICgxIDw8IGkpKSkKLQkJCQljb250aW51ZTsKLQkJCXQtPmRpcnR5ICY9IH4oMSA8PCBpKTsKLQkJCS8qIFdlIGNhbid0IHRydXN0IHRoZSBhcnJheSBlbnRyeSBvciBkaXJ0eQotCQkJICAgb25jZSB0aGUgbG9jayBpcyBkcm9wcGVkICovCi0JCQl0eXBlID0gdC0+dHJpZ2dlcltpXTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJCXBtaWNfcHJvZ3JhbV9pcnF0eXBlKGksIHR5cGUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnQtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT5sb2NrLCBmbGFncyk7Ci19Ci0KIHN0YXRpYyBpbnQgcG1pY19ncGlvX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCiB7CiAJaWYgKG9mZnNldCA+IDgpIHsKQEAgLTE5MCwyNSArMTQxLDI0IEBACiAJCQkxIDw8IChvZmZzZXQgLSAxNikpOwogfQogCi1zdGF0aWMgaW50IHBtaWNfaXJxX3R5cGUodW5zaWduZWQgaXJxLCB1bnNpZ25lZCB0eXBlKQorLyoKKyAqIFRoaXMgaXMgY2FsbGVkIGZyb20gZ2VuaXJxIHdpdGggcGctPmJ1c2xvY2sgbG9ja2VkIGFuZAorICogaXJxX2Rlc2MtPmxvY2sgaGVsZC4gV2UgY2FuIG5vdCBhY2Nlc3MgdGhlIHNjdSBidXMgaGVyZSwgc28gd2UKKyAqIHN0b3JlIHRoZSBjaGFuZ2UgYW5kIHVwZGF0ZSBpbiB0aGUgYnVzX3N5bmNfdW5sb2NrKCkgZnVuY3Rpb24gYmVsb3cKKyAqLworc3RhdGljIGludCBwbWljX2lycV90eXBlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgdHlwZSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JdTMyIGdwaW8gPSBpcnEgLSBwZy0+aXJxX2Jhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOworCXUzMiBncGlvID0gZGF0YS0+aXJxIC0gcGctPmlycV9iYXNlOwogCiAJaWYgKGdwaW8gPj0gcGctPmNoaXAubmdwaW8pCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBnLT5pcnF0eXBlcy5sb2NrLCBmbGFncyk7Ci0JcGctPmlycXR5cGVzLnRyaWdnZXJbZ3Bpb10gPSB0eXBlOwotCXBnLT5pcnF0eXBlcy5kaXJ0eSB8PSAgKDEgPDwgZ3Bpbyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGctPmlycXR5cGVzLmxvY2ssIGZsYWdzKTsKLQlzY2hlZHVsZV93b3JrKCZwZy0+aXJxdHlwZXMud29yayk7CisJcGctPnRyaWdnZXJfdHlwZSA9IHR5cGU7CisJcGctPnVwZGF0ZV90eXBlID0gZ3BpbyB8IEdQSU9fVVBEQVRFX1RZUEU7CiAJcmV0dXJuIDA7CiB9CiAKLQotCiBzdGF0aWMgaW50IHBtaWNfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXN0cnVjdCBwbWljX2dwaW8gKnBnID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBwbWljX2dwaW8sIGNoaXApOwpAQCAtMjE3LDM4ICsxNjcsMzIgQEAKIH0KIAogLyogdGhlIGdwaW9pbnRyIHJlZ2lzdGVyIGlzIHJlYWQtY2xlYXIsIHNvIGp1c3QgZG8gbm90aGluZy4gKi8KLXN0YXRpYyB2b2lkIHBtaWNfaXJxX3VubWFzayh1bnNpZ25lZCBpcnEpCi17Ci19Oworc3RhdGljIHZvaWQgcG1pY19pcnFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkgeyB9CiAKLXN0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2sodW5zaWduZWQgaXJxKQotewotfTsKK3N0YXRpYyB2b2lkIHBtaWNfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKSB7IH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwbWljX2lycWNoaXAgPSB7CiAJLm5hbWUJCT0gIlBNSUMtR1BJTyIsCi0JLm1hc2sJCT0gcG1pY19pcnFfbWFzaywKLQkudW5tYXNrCQk9IHBtaWNfaXJxX3VubWFzaywKLQkuc2V0X3R5cGUJPSBwbWljX2lycV90eXBlLAorCS5pcnFfbWFzawk9IHBtaWNfaXJxX21hc2ssCisJLmlycV91bm1hc2sJPSBwbWljX2lycV91bm1hc2ssCisJLmlycV9zZXRfdHlwZQk9IHBtaWNfaXJxX3R5cGUsCiB9OwogCi1zdGF0aWMgdm9pZCBwbWljX2lycV9oYW5kbGVyKHVuc2lnbmVkIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQorc3RhdGljIGlycXJldHVybl90IHBtaWNfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQlzdHJ1Y3QgcG1pY19ncGlvICpwZyA9IChzdHJ1Y3QgcG1pY19ncGlvICopZ2V0X2lycV9kYXRhKGlycSk7CisJc3RydWN0IHBtaWNfZ3BpbyAqcGcgPSBkYXRhOwogCXU4IGludHN0cyA9ICooKHU4ICopcGctPmdwaW9pbnRyICsgNCk7CiAJaW50IGdwaW87CisJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX05PTkU7CiAKIAlmb3IgKGdwaW8gPSAwOyBncGlvIDwgODsgZ3BpbysrKSB7CiAJCWlmIChpbnRzdHMgJiAoMSA8PCBncGlvKSkgewogCQkJcHJfZGVidWcoInBtaWMgcGluICVkIHRyaWdnZXJlZFxuIiwgZ3Bpbyk7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEocGctPmlycV9iYXNlICsgZ3Bpbyk7CisJCQlyZXQgPSBJUlFfSEFORExFRDsKIAkJfQogCX0KLQotCWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQotCQlkZXNjLT5jaGlwLT5pcnFfZW9pKGlycV9nZXRfaXJxX2RhdGEoaXJxKSk7Ci0JZWxzZQotCQlkZXZfd2FybihwZy0+Y2hpcC5kZXYsICJtaXNzaW5nIEVPSSBoYW5kbGVyIGZvciBpcnEgJWRcbiIsIGlycSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgcGxhdGZvcm1fcG1pY19ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC0yOTcsOCArMjQxLDcgQEAKIAlwZy0+Y2hpcC5jYW5fc2xlZXAgPSAxOwogCXBnLT5jaGlwLmRldiA9IGRldjsKIAotCUlOSVRfV09SSygmcGctPmlycXR5cGVzLndvcmssIHBtaWNfaXJxdHlwZV93b3JrKTsKLQlzcGluX2xvY2tfaW5pdCgmcGctPmlycXR5cGVzLmxvY2spOworCW11dGV4X2luaXQoJnBnLT5idXNsb2NrKTsKIAogCXBnLT5jaGlwLmRldiA9IGRldjsKIAlyZXR2YWwgPSBncGlvY2hpcF9hZGQoJnBnLT5jaGlwKTsKQEAgLTMwNiw4ICsyNDksMTMgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2FuIG5vdCBhZGQgcG1pYyBncGlvIGNoaXAuXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyOwogCX0KLQlzZXRfaXJxX2RhdGEocGctPmlycSwgcGcpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHBnLT5pcnEsIHBtaWNfaXJxX2hhbmRsZXIpOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEocGctPmlycSwgcG1pY19pcnFfaGFuZGxlciwgMCwgInBtaWMiLCBwZyk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWljOiBJbnRlcnJ1cHQgcmVxdWVzdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycjsKKwl9CisKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGkgKyBwZy0+aXJxX2Jhc2UsICZwbWljX2lycWNoaXAsCiAJCQkJCWhhbmRsZV9zaW1wbGVfaXJxLCAiZGVtdXgiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGMuYwppbmRleCAxNzUyZWYwLi5hOTFkNTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwYy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2ZpLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxhc20vaW50ZWxfc2N1X2lwYy5oPgotI2luY2x1ZGUgPGFzbS9tcnN0Lmg+CiAKIC8qIElQQyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSB0eXBlcyAqLwogI2RlZmluZSBJUENNU0dfV0FUQ0hET0dfVElNRVIgMHhGOCAvKiBTZXQgS2VybmVsIFdhdGNoZG9nIFRocmVzaG9sZCAqLwpAQCAtMTYxLDcgKzE2MCw3IEBACiB7CiAJaW50IGksIG5jLCBieXRlcywgZDsKIAl1MzIgb2Zmc2V0ID0gMDsKLQl1MzIgZXJyID0gMDsKKwlpbnQgZXJyOwogCXU4IGNidWZbSVBDX1dXQlVGX1NJWkVdID0geyB9OwogCXUzMiAqd2J1ZiA9ICh1MzIgKikmY2J1ZjsKIApAQCAtNDA0LDcgKzQwMyw3IEBACiAgKi8KIGludCBpbnRlbF9zY3VfaXBjX3NpbXBsZV9jb21tYW5kKGludCBjbWQsIGludCBzdWIpCiB7Ci0JdTMyIGVyciA9IDA7CisJaW50IGVycjsKIAogCW11dGV4X2xvY2soJmlwY2xvY2spOwogCWlmIChpcGNkZXYucGRldiA9PSBOVUxMKSB7CkBAIC00MzQsOCArNDMzLDcgQEAKIGludCBpbnRlbF9zY3VfaXBjX2NvbW1hbmQoaW50IGNtZCwgaW50IHN1YiwgdTMyICppbiwgaW50IGlubGVuLAogCQkJCQkJCXUzMiAqb3V0LCBpbnQgb3V0bGVuKQogewotCXUzMiBlcnIgPSAwOwotCWludCBpID0gMDsKKwlpbnQgaSwgZXJyOwogCiAJbXV0ZXhfbG9jaygmaXBjbG9jayk7CiAJaWYgKGlwY2Rldi5wZGV2ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9pbnRlbF9zY3VfaXBjdXRpbC5jCmluZGV4IGJhMzIzMWQuLmI5M2EwMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2ludGVsX3NjdV9pcGN1dGlsLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaW50ZWxfc2N1X2lwY3V0aWwuYwpAQCAtMTI4LDYgKzEyOCw2IEBACiBtb2R1bGVfaW5pdChpcGNfbW9kdWxlX2luaXQpOwogbW9kdWxlX2V4aXQoaXBjX21vZHVsZV9leGl0KTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCBWMiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJVdGlsaXR5IGRyaXZlciBmb3IgaW50ZWwgc2N1IGlwYyIpOwogTU9EVUxFX0FVVEhPUigiU3JlZWRoYXJhIDxzcmVlZGhhcmEuZHNAaW50ZWwuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGMxMTAwLXdtaS5jCmluZGV4IDFmZTBmMWYuLjg2NWVmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RjMTEwMC13bWkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90YzExMDAtd21pLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0gXAotc3RhdGljIERFVklDRV9BVFRSKHZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTyB8IFNfSVdVU1IsIFwKK3N0YXRpYyBERVZJQ0VfQVRUUih2YWx1ZSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKIAlzaG93X2Jvb2xfIyN2YWx1ZSwgc2V0X2Jvb2xfIyN2YWx1ZSk7CiAKIHNob3dfc2V0X2Jvb2wod2lyZWxlc3MsIFRDMTEwMF9JTlNUQU5DRV9XSVJFTEVTUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKaW5kZXggZGQ1OTk1OC4uZWI5OTIyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjI3NSwxNiArMjI3NSwxMiBAQAogCWlmIChrZXljb2RlICE9IEtFWV9SRVNFUlZFRCkgewogCQltdXRleF9sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CiAKKwkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBzY2FuY29kZSk7CiAJCWlucHV0X3JlcG9ydF9rZXkodHBhY3BpX2lucHV0ZGV2LCBrZXljb2RlLCAxKTsKLQkJaWYgKGtleWNvZGUgPT0gS0VZX1VOS05PV04pCi0JCQlpbnB1dF9ldmVudCh0cGFjcGlfaW5wdXRkZXYsIEVWX01TQywgTVNDX1NDQU4sCi0JCQkJICAgIHNjYW5jb2RlKTsKIAkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOwogCisJCWlucHV0X2V2ZW50KHRwYWNwaV9pbnB1dGRldiwgRVZfTVNDLCBNU0NfU0NBTiwgc2NhbmNvZGUpOwogCQlpbnB1dF9yZXBvcnRfa2V5KHRwYWNwaV9pbnB1dGRldiwga2V5Y29kZSwgMCk7Ci0JCWlmIChrZXljb2RlID09IEtFWV9VTktOT1dOKQotCQkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLAotCQkJCSAgICBzY2FuY29kZSk7CiAJCWlucHV0X3N5bmModHBhY3BpX2lucHV0ZGV2KTsKIAogCQltdXRleF91bmxvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzLWt0aW1lci5jIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKaW5kZXggMjcyODQ2OS4uODI1ODNiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKKysrIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKQEAgLTQ2LDggKzQ2LDYgQEAKIAkvKiBGaXJzdCBvZiBhbGwgd2UgZ2V0IHRoZSB0aW1lIHN0YW1wLi4uICovCiAJcHBzX2dldF90cygmdHMpOwogCi0JZGV2X2luZm8ocHBzLT5kZXYsICJQUFMgZXZlbnQgYXQgJWx1XG4iLCBqaWZmaWVzKTsKLQogCXBwc19ldmVudChwcHMsICZ0cywgUFBTX0NBUFRVUkVBU1NFUlQsIE5VTEwpOwogCiAJbW9kX3RpbWVyKCZrdGltZXIsIGppZmZpZXMgKyBIWik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwc19wYXJwb3J0LmMKaW5kZXggMzIyMjFlZi4uYzU3MWQ2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHNfcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvcHBzX3BhcnBvcnQuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJfQogCiAJZGV2aWNlLT5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKLQkJCU5VTEwsIE5VTEwsIHBhcnBvcnRfaXJxLCAwLCBkZXZpY2UpOworCQkJTlVMTCwgTlVMTCwgcGFycG9ydF9pcnEsIFBBUlBPUlRfRkxBR19FWENMLCBkZXZpY2UpOwogCWlmICghZGV2aWNlLT5wYXJkZXYpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCByZWdpc3RlciB3aXRoICVzXG4iLCBwb3J0LT5uYW1lKTsKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvS2NvbmZpZwppbmRleCBmM2E3M2RkLi5lNGM0ZjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL0tjb25maWcKKysrIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCiBjb25maWcgUFBTX0dFTkVSQVRPUl9QQVJQT1JUCiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQgUFBTIHNpZ25hbCBnZW5lcmF0b3IiCi0JZGVwZW5kcyBvbiBQQVJQT1JUCisJZGVwZW5kcyBvbiBQQVJQT1JUICYmIEJST0tFTgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBhIFBQUyBzaWduYWwgZ2VuZXJhdG9yIHdoaWNoCiAJICB1dGlsaXplcyBTVFJPQkUgcGluIG9mIGEgcGFyYWxsZWwgcG9ydCB0byBzZW5kIFBQUyBzaWduYWxzLiBJdCB1c2VzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jIGIvZHJpdmVycy9wcHMvZ2VuZXJhdG9ycy9wcHNfZ2VuX3BhcnBvcnQuYwppbmRleCA1YzMyZjhkLi5iOTNhZjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9nZW5lcmF0b3JzL3Bwc19nZW5fcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvcHBzL2dlbmVyYXRvcnMvcHBzX2dlbl9wYXJwb3J0LmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCX0KIAogCWRldmljZS5wYXJkZXYgPSBwYXJwb3J0X3JlZ2lzdGVyX2RldmljZShwb3J0LCBLQlVJTERfTU9ETkFNRSwKLQkJCU5VTEwsIE5VTEwsIE5VTEwsIDAsICZkZXZpY2UpOworCQkJTlVMTCwgTlVMTCwgTlVMTCwgUEFSUE9SVF9GTEFHX0VYQ0wsICZkZXZpY2UpOwogCWlmICghZGV2aWNlLnBhcmRldikgewogCQlwcl9lcnIoImNvdWxkbid0IHJlZ2lzdGVyIHdpdGggJXNcbiIsIHBvcnQtPm5hbWUpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9rYXBpLmMgYi9kcml2ZXJzL3Bwcy9rYXBpLmMKaW5kZXggY2JhMWI0My4uYTRlOGViOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wcHMva2FwaS5jCisrKyBiL2RyaXZlcnMvcHBzL2thcGkuYwpAQCAtMTY4LDcgKzE2OCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgY2FwdHVyZWQgPSAwOwotCXN0cnVjdCBwcHNfa3RpbWUgdHNfcmVhbDsKKwlzdHJ1Y3QgcHBzX2t0aW1lIHRzX3JlYWwgPSB7IC5zZWMgPSAwLCAubnNlYyA9IDAsIC5mbGFncyA9IDAgfTsKIAogCS8qIGNoZWNrIGV2ZW50IHR5cGUgKi8KIAlCVUdfT04oKGV2ZW50ICYgKFBQU19DQVBUVVJFQVNTRVJUIHwgUFBTX0NBUFRVUkVDTEVBUikpID09IDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zY2FuLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwppbmRleCA0NjdlODJiLi5hNTAzOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYworKysgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXNjYW4uYwpAQCAtOTQzLDYgKzk0Myw4IEBACiAgKiBAcG9ydDogTWFzdGVyIHBvcnQgdG8gc2VuZCB0cmFuc2FjdGlvbnMKICAqIEBkZXN0aWQ6IEN1cnJlbnQgZGVzdGluYXRpb24gSUQgaW4gbmV0d29yawogICogQGhvcGNvdW50OiBOdW1iZXIgb2YgaG9wcyBpbnRvIHRoZSBuZXR3b3JrCisgKiBAcHJldjogcHJldmlvdXMgcmlvX2RldgorICogQHByZXZfcG9ydDogcHJldmlvdXMgcG9ydCBudW1iZXIKICAqCiAgKiBSZWN1cnNpdmVseSBkaXNjb3ZlcnMgYSBSSU8gbmV0d29yay4gIFRyYW5zYWN0aW9ucyBhcmUgc2VudCB2aWEgdGhlCiAgKiBtYXN0ZXIgcG9ydCBwYXNzZWQgaW4gQHBvcnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMgYi9kcml2ZXJzL3JhcGlkaW8vcmlvLXN5c2ZzLmMKaW5kZXggNzZiNDE4NS4uMTI2OWZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3Jpby1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9yaW8tc3lzZnMuYwpAQCAtNzcsOSArNzcsOSBAQAogCiAJLyogU2V2ZXJhbCBjaGlwcyBsb2NrIHVwIHRyeWluZyB0byByZWFkIHVuZGVmaW5lZCBjb25maWcgc3BhY2UgKi8KIAlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJc2l6ZSA9IDB4MjAwMDAwOworCQlzaXplID0gUklPX01BSU5UX1NQQUNFX1NaOwogCi0JaWYgKG9mZiA+IHNpemUpCisJaWYgKG9mZiA+PSBzaXplKQogCQlyZXR1cm4gMDsKIAlpZiAob2ZmICsgY291bnQgPiBzaXplKSB7CiAJCXNpemUgLT0gb2ZmOwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKIAlsb2ZmX3QgaW5pdF9vZmYgPSBvZmY7CiAJdTggKmRhdGEgPSAodTggKikgYnVmOwogCi0JaWYgKG9mZiA+IDB4MjAwMDAwKQorCWlmIChvZmYgPj0gUklPX01BSU5UX1NQQUNFX1NaKQogCQlyZXR1cm4gMDsKLQlpZiAob2ZmICsgY291bnQgPiAweDIwMDAwMCkgewotCQlzaXplID0gMHgyMDAwMDAgLSBvZmY7CisJaWYgKG9mZiArIGNvdW50ID4gUklPX01BSU5UX1NQQUNFX1NaKSB7CisJCXNpemUgPSBSSU9fTUFJTlRfU1BBQ0VfU1ogLSBvZmY7CiAJCWNvdW50ID0gc2l6ZTsKIAl9CiAKQEAgLTIwMCw3ICsyMDAsNyBAQAogCQkgLm5hbWUgPSAiY29uZmlnIiwKIAkJIC5tb2RlID0gU19JUlVHTyB8IFNfSVdVU1IsCiAJCSB9LAotCS5zaXplID0gMHgyMDAwMDAsCisJLnNpemUgPSBSSU9fTUFJTlRfU1BBQ0VfU1osCiAJLnJlYWQgPSByaW9fcmVhZF9jb25maWcsCiAJLndyaXRlID0gcmlvX3dyaXRlX2NvbmZpZywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzeHh4LXJlZ3VsYXRvci1jb3JlLmMKaW5kZXggZjUzZDMxYi4uMmJiNWRlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWMxM3h4eC1yZWd1bGF0b3ItY29yZS5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21jMTN4eHgtcmVndWxhdG9yLWNvcmUuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgaWQsIHZhbCk7CiAKLQlCVUdfT04odmFsIDwgMCB8fCB2YWwgPiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcyk7CisJQlVHX09OKHZhbCA+IG1jMTN4eHhfcmVndWxhdG9yc1tpZF0uZGVzYy5uX3ZvbHRhZ2VzKTsKIAogCXJldHVybiBtYzEzeHh4X3JlZ3VsYXRvcnNbaWRdLnZvbHRhZ2VzW3ZhbF07CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYwppbmRleCA4YjBkMmM0Li4wNmRmODk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKQEAgLTEyMCw2ICsxMjAsNyBAQAogCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfSURMRTsKIAlkZWZhdWx0OgogCQlCVUcoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCA5NTgzY2JjLi5jNDA0YjYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTE0Myw2ICsxNDMsNyBAQAogCXJ0Yy0+aWQgPSBpZDsKIAlydGMtPm9wcyA9IG9wczsKIAlydGMtPm93bmVyID0gb3duZXI7CisJcnRjLT5pcnFfZnJlcSA9IDE7CiAJcnRjLT5tYXhfdXNlcl9mcmVxID0gNjQ7CiAJcnRjLT5kZXYucGFyZW50ID0gZGV2OwogCXJ0Yy0+ZGV2LmNsYXNzID0gcnRjX2NsYXNzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwppbmRleCA5MDM4NGI5Li5jYjJmMDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3J0Yy9pbnRlcmZhY2UuYwpAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAorc3RhdGljIGludCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcik7CitzdGF0aWMgdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKKwogc3RhdGljIGludCBfX3J0Y19yZWFkX3RpbWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKIAlpbnQgZXJyOwpAQCAtMTIwLDEyICsxMjMsMTggQEAKIAllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnJ0Yy0+b3BzX2xvY2spOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JYWxhcm0tPmVuYWJsZWQgPSBydGMtPmFpZV90aW1lci5lbmFibGVkOwotCWlmIChhbGFybS0+ZW5hYmxlZCkKKwlpZiAocnRjLT5vcHMgPT0gTlVMTCkKKwkJZXJyID0gLUVOT0RFVjsKKwllbHNlIGlmICghcnRjLT5vcHMtPnJlYWRfYWxhcm0pCisJCWVyciA9IC1FSU5WQUw7CisJZWxzZSB7CisJCW1lbXNldChhbGFybSwgMCwgc2l6ZW9mKHN0cnVjdCBydGNfd2thbHJtKSk7CisJCWFsYXJtLT5lbmFibGVkID0gcnRjLT5haWVfdGltZXIuZW5hYmxlZDsKIAkJYWxhcm0tPnRpbWUgPSBydGNfa3RpbWVfdG9fdG0ocnRjLT5haWVfdGltZXIubm9kZS5leHBpcmVzKTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfcmVhZF9hbGFybSk7CiAKQEAgLTE3NSwxNiArMTg0LDE0IEBACiAJCXJldHVybiBlcnI7CiAJaWYgKHJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQpIHsKIAkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAwOwogCX0KIAlydGMtPmFpZV90aW1lci5ub2RlLmV4cGlyZXMgPSBydGNfdG1fdG9fa3RpbWUoYWxhcm0tPnRpbWUpOwogCXJ0Yy0+YWllX3RpbWVyLnBlcmlvZCA9IGt0aW1lX3NldCgwLCAwKTsKIAlpZiAoYWxhcm0tPmVuYWJsZWQpIHsKLQkJcnRjLT5haWVfdGltZXIuZW5hYmxlZCA9IDE7Ci0JCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJZXJyID0gcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOwogCX0KIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChydGNfc2V0X2FsYXJtKTsKIApAQCAtMTk1LDE2ICsyMDIsMTUgQEAKIAkJcmV0dXJuIGVycjsKIAogCWlmIChydGMtPmFpZV90aW1lci5lbmFibGVkICE9IGVuYWJsZWQpIHsKLQkJaWYgKGVuYWJsZWQpIHsKLQkJCXJ0Yy0+YWllX3RpbWVyLmVuYWJsZWQgPSAxOwotCQkJcnRjX3RpbWVyX2VucXVldWUocnRjLCAmcnRjLT5haWVfdGltZXIpOwotCQl9IGVsc2UgeworCQlpZiAoZW5hYmxlZCkKKwkJCWVyciA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+YWllX3RpbWVyKTsKKwkJZWxzZQogCQkJcnRjX3RpbWVyX3JlbW92ZShydGMsICZydGMtPmFpZV90aW1lcik7Ci0JCQlydGMtPmFpZV90aW1lci5lbmFibGVkID0gMDsKLQkJfQogCX0KIAotCWlmICghcnRjLT5vcHMpCisJaWYgKGVycikKKwkJLyogbm90aGluZyAqLzsKKwllbHNlIGlmICghcnRjLT5vcHMpCiAJCWVyciA9IC1FTk9ERVY7CiAJZWxzZSBpZiAoIXJ0Yy0+b3BzLT5hbGFybV9pcnFfZW5hYmxlKQogCQllcnIgPSAtRUlOVkFMOwpAQCAtMjIyLDYgKzIyOCwxMiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKyNpZmRlZiBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMCisJaWYgKGVuYWJsZWQgPT0gMCAmJiBydGMtPnVpZV9pcnFfYWN0aXZlKSB7CisJCW11dGV4X3VubG9jaygmcnRjLT5vcHNfbG9jayk7CisJCXJldHVybiBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwocnRjLCAwKTsKKwl9CisjZW5kaWYKIAkvKiBtYWtlIHN1cmUgd2UncmUgY2hhbmdpbmcgc3RhdGUgKi8KIAlpZiAocnRjLT51aWVfcnRjdGltZXIuZW5hYmxlZCA9PSBlbmFibGVkKQogCQlnb3RvIG91dDsKQEAgLTIzNSwxNSArMjQ3LDIyIEBACiAJCW5vdyA9IHJ0Y190bV90b19rdGltZSh0bSk7CiAJCXJ0Yy0+dWllX3J0Y3RpbWVyLm5vZGUuZXhwaXJlcyA9IGt0aW1lX2FkZChub3csIG9uZXNlYyk7CiAJCXJ0Yy0+dWllX3J0Y3RpbWVyLnBlcmlvZCA9IGt0aW1lX3NldCgxLCAwKTsKLQkJcnRjLT51aWVfcnRjdGltZXIuZW5hYmxlZCA9IDE7Ci0JCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgJnJ0Yy0+dWllX3J0Y3RpbWVyKTsKLQl9IGVsc2UgeworCQllcnIgPSBydGNfdGltZXJfZW5xdWV1ZShydGMsICZydGMtPnVpZV9ydGN0aW1lcik7CisJfSBlbHNlCiAJCXJ0Y190aW1lcl9yZW1vdmUocnRjLCAmcnRjLT51aWVfcnRjdGltZXIpOwotCQlydGMtPnVpZV9ydGN0aW1lci5lbmFibGVkID0gMDsKLQl9CiAKIG91dDoKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOworI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKKwkvKgorCSAqIEVuYWJsZSBlbXVsYXRpb24gaWYgdGhlIGRyaXZlciBkaWQgbm90IHByb3ZpZGUKKwkgKiB0aGUgdXBkYXRlX2lycV9lbmFibGUgZnVuY3Rpb24gcG9pbnRlciBvciBpZiByZXR1cm5lZAorCSAqIC1FSU5WQUwgdG8gc2lnbmFsIHRoYXQgaXQgaGFzIGJlZW4gY29uZmlndXJlZCB3aXRob3V0CisJICogaW50ZXJydXB0cyBvciB0aGF0IGFyZSBub3QgYXZhaWxhYmxlIGF0IHRoZSBtb21lbnQuCisJICovCisJaWYgKGVyciA9PSAtRUlOVkFMKQorCQllcnIgPSBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwocnRjLCBlbmFibGVkKTsKKyNlbmRpZgogCXJldHVybiBlcnI7CiAKIH0KQEAgLTI1OSw3ICsyNzgsNyBAQAogICoKICAqIFRyaWdnZXJzIHRoZSByZWdpc3RlcmVkIGlycV90YXNrIGZ1bmN0aW9uIGNhbGxiYWNrLgogICovCi1zdGF0aWMgdm9pZCBydGNfaGFuZGxlX2xlZ2FjeV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgaW50IG51bSwgaW50IG1vZGUpCit2b2lkIHJ0Y19oYW5kbGVfbGVnYWN5X2lycShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBpbnQgbnVtLCBpbnQgbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC00NjAsNiArNDc5LDkgQEAKIAlpbnQgZXJyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGZyZXEgPD0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjLT5pcnFfdGFza19sb2NrLCBmbGFncyk7CiAJaWYgKHJ0Yy0+aXJxX3Rhc2sgIT0gTlVMTCAmJiB0YXNrID09IE5VTEwpCiAJCWVyciA9IC1FQlVTWTsKQEAgLTQ4OCwxMCArNTEwLDEzIEBACiAgKiBFbnF1ZXVlcyBhIHRpbWVyIG9udG8gdGhlIHJ0YyBkZXZpY2VzIHRpbWVycXVldWUgYW5kIHNldHMKICAqIHRoZSBuZXh0IGFsYXJtIGV2ZW50IGFwcHJvcHJpYXRlbHkuCiAgKgorICogU2V0cyB0aGUgZW5hYmxlZCBiaXQgb24gdGhlIGFkZGVkIHRpbWVyLgorICoKICAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQogICovCi12b2lkIHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQorc3RhdGljIGludCBydGNfdGltZXJfZW5xdWV1ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcikKIHsKKwl0aW1lci0+ZW5hYmxlZCA9IDE7CiAJdGltZXJxdWV1ZV9hZGQoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKIAlpZiAoJnRpbWVyLT5ub2RlID09IHRpbWVycXVldWVfZ2V0bmV4dCgmcnRjLT50aW1lcnF1ZXVlKSkgewogCQlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKQEAgLTUwMSw3ICs1MjYsMTMgQEAKIAkJZXJyID0gX19ydGNfc2V0X2FsYXJtKHJ0YywgJmFsYXJtKTsKIAkJaWYgKGVyciA9PSAtRVRJTUUpCiAJCQlzY2hlZHVsZV93b3JrKCZydGMtPmlycXdvcmspOworCQllbHNlIGlmIChlcnIpIHsKKwkJCXRpbWVycXVldWVfZGVsKCZydGMtPnRpbWVycXVldWUsICZ0aW1lci0+bm9kZSk7CisJCQl0aW1lci0+ZW5hYmxlZCA9IDA7CisJCQlyZXR1cm4gZXJyOworCQl9CiAJfQorCXJldHVybiAwOwogfQogCiAvKioKQEAgLTUxMiwxMyArNTQzLDE1IEBACiAgKiBSZW1vdmVzIGEgdGltZXIgb250byB0aGUgcnRjIGRldmljZXMgdGltZXJxdWV1ZSBhbmQgc2V0cwogICogdGhlIG5leHQgYWxhcm0gZXZlbnQgYXBwcm9wcmlhdGVseS4KICAqCisgKiBDbGVhcnMgdGhlIGVuYWJsZWQgYml0IG9uIHRoZSByZW1vdmVkIHRpbWVyLgorICoKICAqIE11c3QgaG9sZCBvcHNfbG9jayBmb3IgcHJvcGVyIHNlcmlhbGl6YXRpb24gb2YgdGltZXJxdWV1ZQogICovCi12b2lkIHJ0Y190aW1lcl9yZW1vdmUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0Yywgc3RydWN0IHJ0Y190aW1lciAqdGltZXIpCitzdGF0aWMgdm9pZCBydGNfdGltZXJfcmVtb3ZlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKQogewogCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJnJ0Yy0+dGltZXJxdWV1ZSk7CiAJdGltZXJxdWV1ZV9kZWwoJnJ0Yy0+dGltZXJxdWV1ZSwgJnRpbWVyLT5ub2RlKTsKLQorCXRpbWVyLT5lbmFibGVkID0gMDsKIAlpZiAobmV4dCA9PSAmdGltZXItPm5vZGUpIHsKIAkJc3RydWN0IHJ0Y193a2Fscm0gYWxhcm07CiAJCWludCBlcnI7CkBAIC02MjYsOCArNjU5LDcgQEAKIAl0aW1lci0+bm9kZS5leHBpcmVzID0gZXhwaXJlczsKIAl0aW1lci0+cGVyaW9kID0gcGVyaW9kOwogCi0JdGltZXItPmVuYWJsZWQgPSAxOwotCXJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgdGltZXIpOworCXJldCA9IHJ0Y190aW1lcl9lbnF1ZXVlKHJ0YywgdGltZXIpOwogCiAJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtNjQ1LDcgKzY3Nyw2IEBACiAJbXV0ZXhfbG9jaygmcnRjLT5vcHNfbG9jayk7CiAJaWYgKHRpbWVyLT5lbmFibGVkKQogCQlydGNfdGltZXJfcmVtb3ZlKHJ0YywgdGltZXIpOwotCXRpbWVyLT5lbmFibGVkID0gMDsKIAltdXRleF91bmxvY2soJnJ0Yy0+b3BzX2xvY2spOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jIGIvZHJpdmVycy9ydGMvcnRjLWF0MzJhcDcwMHguYwppbmRleCBiMjc1MmI2Li5lNzI1ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQzMmFwNzAweC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1hdDMyYXA3MDB4LmMKQEAgLTEzNCwzNiArMTM0LDI5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBhdDMyX3J0Y19pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsCi0JCQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgYXQzMl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBydGNfYXQzMmFwNzAweCAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT046CisJaWYoZW5hYmxlZCkgewogCQlpZiAocnRjX3JlYWRsKHJ0YywgVkFMKSA+IHJ0Yy0+YWxhcm1fdGltZSkgewogCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CiAJCX0KIAkJcnRjX3dyaXRlbChydGMsIENUUkwsIHJ0Y19yZWFkbChydGMsIENUUkwpCiAJCQkJfCBSVENfQklUKENUUkxfVE9QRU4pKTsKIAkJcnRjX3dyaXRlbChydGMsIElDUiwgUlRDX0JJVChJQ1JfVE9QSSkpOwogCQlydGNfd3JpdGVsKHJ0YywgSUVSLCBSVENfQklUKElFUl9UT1BJKSk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6CisJfSBlbHNlIHsKIAkJcnRjX3dyaXRlbChydGMsIENUUkwsIHJ0Y19yZWFkbChydGMsIENUUkwpCiAJCQkJJiB+UlRDX0JJVChDVFJMX1RPUEVOKSk7CiAJCXJ0Y193cml0ZWwocnRjLCBJRFIsIFJUQ19CSVQoSURSX1RPUEkpKTsKIAkJcnRjX3dyaXRlbChydGMsIElDUiwgUlRDX0JJVChJQ1JfVE9QSSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwogCX0KLQorb3V0OgogCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC0xOTUsMTEgKzE4OCwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgYXQzMl9ydGNfb3BzID0gewotCS5pb2N0bAkJPSBhdDMyX3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gYXQzMl9ydGNfcmVhZHRpbWUsCiAJLnNldF90aW1lCT0gYXQzMl9ydGNfc2V0dGltZSwKIAkucmVhZF9hbGFybQk9IGF0MzJfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQzMl9ydGNfc2V0YWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDMyX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXQzMl9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXJtOTIwMC5jCmluZGV4IGJjOGJiY2EuLjI2ZDFjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxcm05MjAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFybTkyMDAuYwpAQCAtMTk1LDEzICsxOTUsNiBAQAogCiAJLyogaW1wb3J0YW50OiAgc2NydWIgb2xkIHN0YXR1cyBiZWZvcmUgZW5hYmxpbmcgSVJRcyAqLwogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoJLyogYWxhcm0gb2ZmICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX0lEUiwgQVQ5MV9SVENfQUxBUk0pOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCi0JCWF0OTFfc3lzX3dyaXRlKEFUOTFfUlRDX1NDQ1IsIEFUOTFfUlRDX0FMQVJNKTsKLQkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSUVSLCBBVDkxX1JUQ19BTEFSTSk7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CS8qIHVwZGF0ZSBvZmYgKi8KIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19TRUNFVik7CiAJCWJyZWFrOwpAQCAtMjE3LDYgKzIxMCwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgYXQ5MV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXByX2RlYnVnKCIlcygpOiBjbWQ9JTA4eFxuIiwgX19mdW5jX18sIGVuYWJsZWQpOworCisJaWYgKGVuYWJsZWQpIHsKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfU0NDUiwgQVQ5MV9SVENfQUxBUk0pOworCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRVIsIEFUOTFfUlRDX0FMQVJNKTsKKwl9IGVsc2UKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9SVENfSURSLCBBVDkxX1JUQ19BTEFSTSk7CisKKwlyZXR1cm4gMDsKK30KIC8qCiAgKiBQcm92aWRlIGFkZGl0aW9uYWwgUlRDIGluZm9ybWF0aW9uIGluIC9wcm9jL2RyaXZlci9ydGMKICAqLwpAQCAtMjcwLDYgKzI3NSw3IEBACiAJLnJlYWRfYWxhcm0JPSBhdDkxX3J0Y19yZWFkYWxhcm0sCiAJLnNldF9hbGFybQk9IGF0OTFfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IGF0OTFfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxc2FtOS5jIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKaW5kZXggZjY3N2UwNy4uNTQ2OWM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMKQEAgLTIyOSwxMiArMjI5LDYgQEAKIAlkZXZfZGJnKGRldiwgImlvY3RsOiBjbWQ9JTA4eCwgYXJnPSUwOGx4LCBtciAlMDh4XG4iLCBjbWQsIGFyZywgbXIpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkJLyogYWxhcm0gb2ZmICovCi0JCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfQUxNSUVOKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkJLyogYWxhcm0gb24gKi8KLQkJcnR0X3dyaXRlbChydGMsIE1SLCBtciB8IEFUOTFfUlRUX0FMTUlFTik7Ci0JCWJyZWFrOwogCWNhc2UgUlRDX1VJRV9PRkY6CQkvKiB1cGRhdGUgb2ZmICovCiAJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfUlRUSU5DSUVOKTsKIAkJYnJlYWs7CkBAIC0yNDksNiArMjQzLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBhdDkxX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IHNhbTlfcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MzIgbXIgPSBydHRfcmVhZGwocnRjLCBNUik7CisKKwlkZXZfZGJnKGRldiwgImFsYXJtX2lycV9lbmFibGU6IGVuYWJsZWQ9JTA4eCwgbXIgJTA4eFxuIiwgZW5hYmxlZCwgbXIpOworCWlmIChlbmFibGVkKQorCQlydHRfd3JpdGVsKHJ0YywgTVIsIG1yIHwgQVQ5MV9SVFRfQUxNSUVOKTsKKwllbHNlCisJCXJ0dF93cml0ZWwocnRjLCBNUiwgbXIgJiB+QVQ5MV9SVFRfQUxNSUVOKTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFByb3ZpZGUgYWRkaXRpb25hbCBSVEMgaW5mb3JtYXRpb24gaW4gL3Byb2MvZHJpdmVyL3J0YwogICovCkBAIC0zMDIsNiArMzA5LDcgQEAKIAkucmVhZF9hbGFybQk9IGF0OTFfcnRjX3JlYWRhbGFybSwKIAkuc2V0X2FsYXJtCT0gYXQ5MV9ydGNfc2V0YWxhcm0sCiAJLnByb2MJCT0gYXQ5MV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGF0OTFfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWJmaW4uYyBiL2RyaXZlcnMvcnRjL3J0Yy1iZmluLmMKaW5kZXggYjRiNjA4Ny4uMTc5NzFkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWJmaW4uYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYmZpbi5jCkBAIC0yNTksMTUgKzI1OSw2IEBACiAJCWJmaW5fcnRjX2ludF9jbGVhcih+UlRDX0lTVEFUX1NFQyk7CiAJCWJyZWFrOwogCi0JY2FzZSBSVENfQUlFX09OOgotCQlkZXZfZGJnX3N0YW1wKGRldik7Ci0JCWJmaW5fcnRjX2ludF9zZXRfYWxhcm0ocnRjKTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJZGV2X2RiZ19zdGFtcChkZXYpOwotCQliZmluX3J0Y19pbnRfY2xlYXIofihSVENfSVNUQVRfQUxBUk0gfCBSVENfSVNUQVRfQUxBUk1fREFZKSk7Ci0JCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJZGV2X2RiZ19zdGFtcChkZXYpOwogCQlyZXQgPSAtRU5PSU9DVExDTUQ7CkBAIC0yNzYsNiArMjY3LDE3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBiZmluX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3RydWN0IGJmaW5fcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRldl9kYmdfc3RhbXAoZGV2KTsKKwlpZiAoZW5hYmxlZCkKKwkJYmZpbl9ydGNfaW50X3NldF9hbGFybShydGMpOworCWVsc2UKKwkJYmZpbl9ydGNfaW50X2NsZWFyKH4oUlRDX0lTVEFUX0FMQVJNIHwgUlRDX0lTVEFUX0FMQVJNX0RBWSkpOworfQorCiBzdGF0aWMgaW50IGJmaW5fcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJc3RydWN0IGJmaW5fcnRjICpydGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTM2Miw2ICszNjQsNyBAQAogCS5yZWFkX2FsYXJtICAgID0gYmZpbl9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtICAgICA9IGJmaW5fcnRjX3NldF9hbGFybSwKIAkucHJvYyAgICAgICAgICA9IGJmaW5fcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBiZmluX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgYmZpbl9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYwppbmRleCAyMTJiMTZlLi5kMGUwNmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCkBAIC00Niw2ICs0NiwxMDUgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorLyoKKyAqIFJvdXRpbmUgdG8gcG9sbCBSVEMgc2Vjb25kcyBmaWVsZCBmb3IgY2hhbmdlIGFzIG9mdGVuIGFzIHBvc3NpYmxlLAorICogYWZ0ZXIgZmlyc3QgUlRDX1VJRSB1c2UgdGltZXIgdG8gcmVkdWNlIHBvbGxpbmcKKyAqLworc3RhdGljIHZvaWQgcnRjX3VpZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBydGNfZGV2aWNlLCB1aWVfdGFzayk7CisJc3RydWN0IHJ0Y190aW1lIHRtOworCWludCBudW0gPSAwOworCWludCBlcnI7CisKKwllcnIgPSBydGNfcmVhZF90aW1lKHJ0YywgJnRtKTsKKworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCWlmIChydGMtPnN0b3BfdWllX3BvbGxpbmcgfHwgZXJyKSB7CisJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwl9IGVsc2UgaWYgKHJ0Yy0+b2xkc2VjcyAhPSB0bS50bV9zZWMpIHsKKwkJbnVtID0gKHRtLnRtX3NlYyArIDYwIC0gcnRjLT5vbGRzZWNzKSAlIDYwOworCQlydGMtPm9sZHNlY3MgPSB0bS50bV9zZWM7CisJCXJ0Yy0+dWllX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogLSAoSFovMTApOworCQlydGMtPnVpZV90aW1lcl9hY3RpdmUgPSAxOworCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJCWFkZF90aW1lcigmcnRjLT51aWVfdGltZXIpOworCX0gZWxzZSBpZiAoc2NoZWR1bGVfd29yaygmcnRjLT51aWVfdGFzaykgPT0gMCkgeworCQlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJaWYgKG51bSkKKwkJcnRjX2hhbmRsZV9sZWdhY3lfaXJxKHJ0YywgbnVtLCBSVENfVUYpOworfQorc3RhdGljIHZvaWQgcnRjX3VpZV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IChzdHJ1Y3QgcnRjX2RldmljZSAqKWRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZydGMtPmlycV9sb2NrLCBmbGFncyk7CisJcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMDsKKwlydGMtPnVpZV90YXNrX2FjdGl2ZSA9IDE7CisJaWYgKChzY2hlZHVsZV93b3JrKCZydGMtPnVpZV90YXNrKSA9PSAwKSkKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ0Yy0+aXJxX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBjbGVhcl91aWUoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YykKK3sKKwlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlpZiAocnRjLT51aWVfaXJxX2FjdGl2ZSkgeworCQlydGMtPnN0b3BfdWllX3BvbGxpbmcgPSAxOworCQlpZiAocnRjLT51aWVfdGltZXJfYWN0aXZlKSB7CisJCQlzcGluX3VubG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCQkJZGVsX3RpbWVyX3N5bmMoJnJ0Yy0+dWllX3RpbWVyKTsKKwkJCXNwaW5fbG9ja19pcnEoJnJ0Yy0+aXJxX2xvY2spOworCQkJcnRjLT51aWVfdGltZXJfYWN0aXZlID0gMDsKKwkJfQorCQlpZiAocnRjLT51aWVfdGFza19hY3RpdmUpIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJCQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCQkJc3Bpbl9sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJCX0KKwkJcnRjLT51aWVfaXJxX2FjdGl2ZSA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5pcnFfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3VpZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQoreworCXN0cnVjdCBydGNfdGltZSB0bTsKKwlpbnQgZXJyOworCisJZXJyID0gcnRjX3JlYWRfdGltZShydGMsICZ0bSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlzcGluX2xvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlpZiAoIXJ0Yy0+dWllX2lycV9hY3RpdmUpIHsKKwkJcnRjLT51aWVfaXJxX2FjdGl2ZSA9IDE7CisJCXJ0Yy0+c3RvcF91aWVfcG9sbGluZyA9IDA7CisJCXJ0Yy0+b2xkc2VjcyA9IHRtLnRtX3NlYzsKKwkJcnRjLT51aWVfdGFza19hY3RpdmUgPSAxOworCQlpZiAoc2NoZWR1bGVfd29yaygmcnRjLT51aWVfdGFzaykgPT0gMCkKKwkJCXJ0Yy0+dWllX3Rhc2tfYWN0aXZlID0gMDsKKwl9CisJcnRjLT5pcnFfZGF0YSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmlycV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHJ0Y19kZXZfdXBkYXRlX2lycV9lbmFibGVfZW11bChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlpZiAoZW5hYmxlZCkKKwkJcmV0dXJuIHNldF91aWUocnRjKTsKKwllbHNlCisJCXJldHVybiBjbGVhcl91aWUocnRjKTsKK30KK0VYUE9SVF9TWU1CT0wocnRjX2Rldl91cGRhdGVfaXJxX2VuYWJsZV9lbXVsKTsKKworI2VuZGlmIC8qIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgKi8KIAogc3RhdGljIHNzaXplX3QKIHJ0Y19kZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC0xNTQsMTkgKzI1Myw3IEBACiAJaWYgKGVycikKIAkJZ290byBkb25lOwogCi0JLyogdHJ5IHRoZSBkcml2ZXIncyBpb2N0bCBpbnRlcmZhY2UgKi8KLQlpZiAob3BzLT5pb2N0bCkgewotCQllcnIgPSBvcHMtPmlvY3RsKHJ0Yy0+ZGV2LnBhcmVudCwgY21kLCBhcmcpOwotCQlpZiAoZXJyICE9IC1FTk9JT0NUTENNRCkgewotCQkJbXV0ZXhfdW5sb2NrKCZydGMtPm9wc19sb2NrKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KLQkvKiBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IHByb3ZpZGUgdGhlIGlvY3RsIGludGVyZmFjZQotCSAqIG9yIGlmIHRoYXQgcGFydGljdWxhciBpb2N0bCB3YXMgbm90IGltcGxlbWVudGVkCi0JICogKC1FTk9JT0NUTENNRCksIHdlIHdpbGwgdHJ5IHRvIGVtdWxhdGUgaGVyZS4KLQkgKgorCS8qCiAJICogRHJpdmVycyAqU0hPVUxEIE5PVCogcHJvdmlkZSBpb2N0bCBpbXBsZW1lbnRhdGlvbnMKIAkgKiBmb3IgdGhlc2UgcmVxdWVzdHMuICBJbnN0ZWFkLCBwcm92aWRlIG1ldGhvZHMgdG8KIAkgKiBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgY29kZSwgc28gdGhhdCB0aGUgUlRDJ3MgbWFpbgpAQCAtMzI5LDcgKzQxNiwxMiBAQAogCQlyZXR1cm4gZXJyOwogCiAJZGVmYXVsdDoKLQkJZXJyID0gLUVOT1RUWTsKKwkJLyogRmluYWxseSB0cnkgdGhlIGRyaXZlcidzIGlvY3RsIGludGVyZmFjZSAqLworCQlpZiAob3BzLT5pb2N0bCkgeworCQkJZXJyID0gb3BzLT5pb2N0bChydGMtPmRldi5wYXJlbnQsIGNtZCwgYXJnKTsKKwkJCWlmIChlcnIgPT0gLUVOT0lPQ1RMQ01EKQorCQkJCWVyciA9IC1FTk9UVFk7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0zOTQsNiArNDg2LDExIEBACiAKIAlydGMtPmRldi5kZXZ0ID0gTUtERVYoTUFKT1IocnRjX2RldnQpLCBydGMtPmlkKTsKIAorI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwKKwlJTklUX1dPUksoJnJ0Yy0+dWllX3Rhc2ssIHJ0Y191aWVfdGFzayk7CisJc2V0dXBfdGltZXIoJnJ0Yy0+dWllX3RpbWVyLCBydGNfdWllX3RpbWVyLCAodW5zaWduZWQgbG9uZylydGMpOworI2VuZGlmCisKIAljZGV2X2luaXQoJnJ0Yy0+Y2hhcl9kZXYsICZydGNfZGV2X2ZvcHMpOwogCXJ0Yy0+Y2hhcl9kZXYub3duZXIgPSBydGMtPm93bmVyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCmluZGV4IGJmNDMwZjkuLjYwY2U2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTQwLDYgKzQwLDI2IEBACiAJX19yYXdfd3JpdGVsKGRhdGEsICZwcml2LT5ydGNyZWdzW3JlZ10pOwogfQogCisKK3N0YXRpYyBpbnQgZHMxMjg2X2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlzdHJ1Y3QgZHMxMjg2X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgdmFsOworCisJLyogQWxsb3cgb3IgbWFzayBhbGFybSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7CisJaWYgKGVuYWJsZWQpCisJCXZhbCAmPSAgflJUQ19URE07CisJZWxzZQorCQl2YWwgfD0gIFJUQ19URE07CisJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiAjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVgogCiBzdGF0aWMgaW50IGRzMTI4Nl9pb2N0bChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpAQCAtNDksMjIgKzY5LDYgQEAKIAl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJLyogTWFzayBhbGFybSBpbnQuIGVuYWIuIGJpdAkqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQl2YWwgPSBkczEyODZfcnRjX3JlYWQocHJpdiwgUlRDX0NNRCk7Ci0JCXZhbCB8PSAgUlRDX1RETTsKLQkJZHMxMjg2X3J0Y193cml0ZShwcml2LCB2YWwsIFJUQ19DTUQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKLQkJLyogQWxsb3cgYWxhcm0gaW50ZXJydXB0cy4JKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJdmFsID0gZHMxMjg2X3J0Y19yZWFkKHByaXYsIFJUQ19DTUQpOwotCQl2YWwgJj0gIH5SVENfVERNOwotCQlkczEyODZfcnRjX3dyaXRlKHByaXYsIHZhbCwgUlRDX0NNRCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfV0lFX09GRjoKIAkJLyogTWFzayB3YXRjaGRvZyBpbnQuIGVuYWIuIGJpdAkqLwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMzE2LDEyICszMjAsMTMgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTI4Nl9vcHMgPSB7Ci0JLmlvY3RsICAgCT0gZHMxMjg2X2lvY3RsLAotCS5wcm9jICAgCT0gZHMxMjg2X3Byb2MsCisJLmlvY3RsCQk9IGRzMTI4Nl9pb2N0bCwKKwkucHJvYwkJPSBkczEyODZfcHJvYywKIAkucmVhZF90aW1lCT0gZHMxMjg2X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczEyODZfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0JPSBkczEyODZfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMjg2X3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTI4Nl9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgZHMxMjg2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA1LmMKaW5kZXggMDc3YWYxZC4uNTdmYmNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDUuYwpAQCAtMTM5LDQ5ICsxMzksMzIgQEAKICAqIEludGVyZmFjZSB0byBSVEMgZnJhbWV3b3JrCiAgKi8KIAotI2lmZGVmIENPTkZJR19SVENfSU5URl9ERVYKLQotLyoKLSAqIENvbnRleHQ6IGNhbGxlciBob2xkcyBydGMtPm9wc19sb2NrICh0byBwcm90ZWN0IGRzMTMwNS0+Y3RybCkKLSAqLwotc3RhdGljIGludCBkczEzMDVfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBkczEzMDVfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBkczEzMDUJKmRzMTMwNSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXU4CQlidWZbMl07Ci0JaW50CQlzdGF0dXMgPSAtRU5PSU9DVExDTUQ7CisJbG9uZwkJZXJyID0gLUVJTlZBTDsKIAogCWJ1ZlswXSA9IERTMTMwNV9XUklURSB8IERTMTMwNV9DT05UUk9MOwogCWJ1ZlsxXSA9IGRzMTMwNS0+Y3RybFswXTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3RhdHVzID0gMDsKLQkJaWYgKCEoYnVmWzFdICYgRFMxMzA1X0FFSTApKQotCQkJZ290byBkb25lOwotCQlidWZbMV0gJj0gfkRTMTMwNV9BRUkwOwotCQlicmVhazsKLQotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3RhdHVzID0gMDsKKwlpZiAoZW5hYmxlZCkgewogCQlpZiAoZHMxMzA1LT5jdHJsWzBdICYgRFMxMzA1X0FFSTApCiAJCQlnb3RvIGRvbmU7CiAJCWJ1ZlsxXSB8PSBEUzEzMDVfQUVJMDsKLQkJYnJlYWs7CisJfSBlbHNlIHsKKwkJaWYgKCEoYnVmWzFdICYgRFMxMzA1X0FFSTApKQorCQkJZ290byBkb25lOworCQlidWZbMV0gJj0gfkRTMTMwNV9BRUkwOwogCX0KLQlpZiAoc3RhdHVzID09IDApIHsKLQkJc3RhdHVzID0gc3BpX3dyaXRlX3RoZW5fcmVhZChkczEzMDUtPnNwaSwgYnVmLCBzaXplb2YgYnVmLAotCQkJCU5VTEwsIDApOwotCQlpZiAoc3RhdHVzID49IDApCi0JCQlkczEzMDUtPmN0cmxbMF0gPSBidWZbMV07Ci0JfQotCisJZXJyID0gc3BpX3dyaXRlX3RoZW5fcmVhZChkczEzMDUtPnNwaSwgYnVmLCBzaXplb2YgYnVmLCBOVUxMLCAwKTsKKwlpZiAoZXJyID49IDApCisJCWRzMTMwNS0+Y3RybFswXSA9IGJ1ZlsxXTsKIGRvbmU6Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gZXJyOworCiB9CiAKLSNlbHNlCi0jZGVmaW5lIGRzMTMwNV9pb2N0bAlOVUxMCi0jZW5kaWYKIAogLyoKICAqIEdldC9zZXQgb2YgZGF0ZSBhbmQgdGltZSBpcyBwcmV0dHkgbm9ybWFsLgpAQCAtNDYwLDEyICs0NDMsMTIgQEAKICNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxMzA1X29wcyA9IHsKLQkuaW9jdGwJCT0gZHMxMzA1X2lvY3RsLAogCS5yZWFkX3RpbWUJPSBkczEzMDVfZ2V0X3RpbWUsCiAJLnNldF90aW1lCT0gZHMxMzA1X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMzA1X2dldF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gZHMxMzA1X3NldF9hbGFybSwKIAkucHJvYwkJPSBkczEzMDVfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTMwNV9hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogc3RhdGljIHZvaWQgZHMxMzA1X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IDBkNTU5YjYuLjQ3MjRiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTQ5NSw1MCArNDk1LDI3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzA3X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTMwN19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzA3CQkqZHMxMzA3ID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50CQkJcmV0OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCQlpZiAoIXRlc3RfYml0KEhBU19BTEFSTSwgJmRzMTMwNy0+ZmxhZ3MpKQotCQkJcmV0dXJuIC1FTk9UVFk7CisJaWYgKCF0ZXN0X2JpdChIQVNfQUxBUk0sICZkczEzMDctPmZsYWdzKSkKKwkJcmV0dXJuIC1FTk9UVFk7CiAKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzM3X1JFR19DT05UUk9MKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAKKwlpZiAoZW5hYmxlZCkKKwkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKKwllbHNlCiAJCXJldCAmPSB+RFMxMzM3X0JJVF9BMUlFOwogCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJRFMxMzM3X1JFR19DT05UUk9MLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIFJUQ19BSUVfT046Ci0JCWlmICghdGVzdF9iaXQoSEFTX0FMQVJNLCAmZHMxMzA3LT5mbGFncykpCi0JCQlyZXR1cm4gLUVOT1RUWTsKLQotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzMzdfUkVHX0NPTlRST0wpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJcmV0IHw9IERTMTMzN19CSVRfQTFJRTsKLQotCQlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCURTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9CisJcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIERTMTMzN19SRUdfQ09OVFJPTCwgcmV0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAogCXJldHVybiAwOwogfQpAQCAtNTQ4LDcgKzUyNSw3IEBACiAJLnNldF90aW1lCT0gZHMxMzA3X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxMzM3X3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IGRzMTMzN19zZXRfYWxhcm0sCi0JLmlvY3RsCQk9IGRzMTMwN19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IGRzMTMwN19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kczEzNzQuYwppbmRleCA0N2ZiNjM1Li5kODM0YTYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZHMxMzc0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWRzMTM3NC5jCkBAIC0zMDcsNDIgKzMwNywyNSBAQAogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgZHMxMzc0X2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGRzMTM3NF9hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlzdHJ1Y3QgZHMxMzc0ICpkczEzNzQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgcmV0ID0gLUVOT0lPQ1RMQ01EOworCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZkczEzNzQtPm11dGV4KTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OwogCi0JCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOwotCi0JY2FzZSBSVENfQUlFX09OOgotCQlyZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dDsKLQorCWlmIChlbmFibGVkKSB7CiAJCXJldCB8PSBEUzEzNzRfUkVHX0NSX1dBQ0UgfCBEUzEzNzRfUkVHX0NSX0FJRTsKIAkJcmV0ICY9IH5EUzEzNzRfUkVHX0NSX1dEQUxNOwotCi0JCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzEzNzRfUkVHX0NSLCByZXQpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCi0JCWJyZWFrOworCX0gZWxzZSB7CisJCXJldCAmPSB+RFMxMzc0X1JFR19DUl9XQUNFOwogCX0KKwlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxMzc0X1JFR19DUiwgcmV0KTsKIAogb3V0OgogCW11dGV4X3VubG9jaygmZHMxMzc0LT5tdXRleCk7CkBAIC0zNTQsNyArMzM3LDcgQEAKIAkuc2V0X3RpbWUgPSBkczEzNzRfc2V0X3RpbWUsCiAJLnJlYWRfYWxhcm0gPSBkczEzNzRfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gZHMxMzc0X3NldF9hbGFybSwKLQkuaW9jdGwgPSBkczEzNzRfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBkczEzNzRfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgZHMxMzc0X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMgYi9kcml2ZXJzL3J0Yy9ydGMtZHMzMjMyLmMKaW5kZXggMjNhOWVlMS4uOTUwNzM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRzMzIzMi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1kczMyMzIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBSVEMgY2xpZW50L2RyaXZlciBmb3IgdGhlIE1heGltL0RhbGxhcyBEUzMyMzIgUmVhbC1UaW1lIENsb2NrIG92ZXIgSTJDCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3Rvci4KICAqIEF1dGhvcjogSmFjayBMYW4gPGphY2subGFuQGZyZWVzY2FsZS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC0xNDEsOSArMTQxLDExIEBACiAJCXRpbWUtPnRtX2hvdXIgPSBiY2QyYmluKGhvdXIpOwogCX0KIAotCXRpbWUtPnRtX3dkYXkgPSBiY2QyYmluKHdlZWspOworCS8qIERheSBvZiB0aGUgd2VlayBpbiBsaW51eCByYW5nZSBpcyAwfjYgd2hpbGUgMX43IGluIFJUQyBjaGlwICovCisJdGltZS0+dG1fd2RheSA9IGJjZDJiaW4od2VlaykgLSAxOwogCXRpbWUtPnRtX21kYXkgPSBiY2QyYmluKGRheSk7Ci0JdGltZS0+dG1fbW9uID0gYmNkMmJpbihtb250aCAmIDB4N0YpOworCS8qIGxpbnV4IHRtX21vbiByYW5nZTowfjExLCB3aGlsZSBtb250aCByYW5nZSBpcyAxfjEyIGluIFJUQyBjaGlwICovCisJdGltZS0+dG1fbW9uID0gYmNkMmJpbihtb250aCAmIDB4N0YpIC0gMTsKIAlpZiAoY2VudHVyeSkKIAkJYWRkX2NlbnR1cnkgPSAxMDA7CiAKQEAgLTE2Miw5ICsxNjQsMTEgQEAKIAlidWZbMF0gPSBiaW4yYmNkKHRpbWUtPnRtX3NlYyk7CiAJYnVmWzFdID0gYmluMmJjZCh0aW1lLT50bV9taW4pOwogCWJ1ZlsyXSA9IGJpbjJiY2QodGltZS0+dG1faG91cik7Ci0JYnVmWzNdID0gYmluMmJjZCh0aW1lLT50bV93ZGF5KTsgLyogRGF5IG9mIHRoZSB3ZWVrICovCisJLyogRGF5IG9mIHRoZSB3ZWVrIGluIGxpbnV4IHJhbmdlIGlzIDB+NiB3aGlsZSAxfjcgaW4gUlRDIGNoaXAgKi8KKwlidWZbM10gPSBiaW4yYmNkKHRpbWUtPnRtX3dkYXkgKyAxKTsKIAlidWZbNF0gPSBiaW4yYmNkKHRpbWUtPnRtX21kYXkpOyAvKiBEYXRlICovCi0JYnVmWzVdID0gYmluMmJjZCh0aW1lLT50bV9tb24pOworCS8qIGxpbnV4IHRtX21vbiByYW5nZTowfjExLCB3aGlsZSBtb250aCByYW5nZSBpcyAxfjEyIGluIFJUQyBjaGlwICovCisJYnVmWzVdID0gYmluMmJjZCh0aW1lLT50bV9tb24gKyAxKTsKIAlpZiAodGltZS0+dG1feWVhciA+PSAxMDApIHsKIAkJYnVmWzVdIHw9IDB4ODA7CiAJCWJ1Zls2XSA9IGJpbjJiY2QodGltZS0+dG1feWVhciAtIDEwMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKaW5kZXggNWE4ZGFhMy4uNjlmZTY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwpAQCAtMjEzLDQxICsyMTMsMjcgQEAKIAlyZXR1cm4gbTQxdDgwX3NldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKLXN0YXRpYyBpbnQKLW00MXQ4MF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbTQxdDgwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKIAlpbnQgcmM7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQogCXJjID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04pOwogCWlmIChyYyA8IDApCiAJCWdvdG8gZXJyOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmMgJj0gfk00MVQ4MF9BTE1PTl9BRkU7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoKKworCWlmIChlbmFibGVkKQogCQlyYyB8PSBNNDFUODBfQUxNT05fQUZFOwotCQlicmVhazsKLQl9CisJZWxzZQorCQlyYyAmPSB+TTQxVDgwX0FMTU9OX0FGRTsKKwogCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTTQxVDgwX1JFR19BTEFSTV9NT04sIHJjKSA8IDApCiAJCWdvdG8gZXJyOworCiAJcmV0dXJuIDA7CiBlcnI6CiAJcmV0dXJuIC1FSU87CiB9Ci0jZWxzZQotI2RlZmluZQltNDF0ODBfcnRjX2lvY3RsIE5VTEwKLSNlbmRpZgogCiBzdGF0aWMgaW50IG00MXQ4MF9ydGNfc2V0X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKnQpCiB7CkBAIC0zNzQsNyArMzYwLDcgQEAKIAkucmVhZF9hbGFybSA9IG00MXQ4MF9ydGNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtID0gbTQxdDgwX3J0Y19zZXRfYWxhcm0sCiAJLnByb2MgPSBtNDF0ODBfcnRjX3Byb2MsCi0JLmlvY3RsID0gbTQxdDgwX3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG00MXQ4MF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGUykgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfU1lTRlNfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ1OS5jCmluZGV4IGE5OWEwYjUuLjM5NzhmNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0NTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDU5LmMKQEAgLTI2MywzMCArMjYzLDIxIEBACiAvKgogICogSGFuZGxlIGNvbW1hbmRzIGZyb20gdXNlci1zcGFjZQogICovCi1zdGF0aWMgaW50IG00OHQ1OV9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IG00OHQ1OV9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgbTQ4dDU5X3BsYXRfZGF0YSAqcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgbTQ4dDU5X3ByaXZhdGUgKm00OHQ1OSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbTQ4dDU5LT5sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgkvKiBhbGFybSBpbnRlcnJ1cHQgb2ZmICovCi0JCU00OFQ1OV9XUklURSgweDAwLCBNNDhUNTlfSU5UUik7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PTjoJLyogYWxhcm0gaW50ZXJydXB0IG9uICovCisJaWYgKGVuYWJsZWQpCiAJCU00OFQ1OV9XUklURShNNDhUNTlfSU5UUl9BRkUsIE00OFQ1OV9JTlRSKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0ID0gLUVOT0lPQ1RMQ01EOwotCQlicmVhazsKLQl9CisJZWxzZQorCQlNNDhUNTlfV1JJVEUoMHgwMCwgTTQ4VDU5X0lOVFIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm00OHQ1OS0+bG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtNDh0NTlfcnRjX3Byb2Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSkKQEAgLTMzMCwxMiArMzIxLDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0NTlfcnRjX29wcyA9IHsKLQkuaW9jdGwJCT0gbTQ4dDU5X3J0Y19pb2N0bCwKIAkucmVhZF90aW1lCT0gbTQ4dDU5X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gbTQ4dDU5X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG00OHQ1OV9ydGNfcmVhZGFsYXJtLAogCS5zZXRfYWxhcm0JPSBtNDh0NTlfcnRjX3NldGFsYXJtLAogCS5wcm9jCQk9IG00OHQ1OV9ydGNfcHJvYywKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG00OHQ1OV9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtNDh0MDJfcnRjX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXJzdC5jCmluZGV4IGJjZDBjZjYuLjFkYjYyZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tcnN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1yc3QuYwpAQCAtMjU1LDQyICsyNTUsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX0RFVikgfHwgZGVmaW5lZChDT05GSUdfUlRDX0lOVEZfREVWX01PRFVMRSkKLQogLyogQ3VycmVudGx5LCB0aGUgdlJUQyBkb2Vzbid0IHN1cHBvcnQgVUlFIE9OL09GRiAqLwotc3RhdGljIGludAotbXJzdF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgbXJzdF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBtcnN0X3J0YwkqbXJzdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlpZiAoIW1yc3QtPmlycSkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBQSUUgT04vT0ZGIGlzIGhhbmRsZWQgYnkgbXJzdF9pcnFfc2V0X3N0YXRlKCkgKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQltcnN0X2lycV9kaXNhYmxlKG1yc3QsIFJUQ19BSUUpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CS8qIGFsYXJtIG9uICovCisJaWYgKGVuYWJsZWQpCiAJCW1yc3RfaXJxX2VuYWJsZShtcnN0LCBSVENfQUlFKTsKLQkJYnJlYWs7Ci0JfQorCWVsc2UKKwkJbXJzdF9pcnFfZGlzYWJsZShtcnN0LCBSVENfQUlFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCi0jZWxzZQotI2RlZmluZQltcnN0X3J0Y19pb2N0bAlOVUxMCi0jZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0MpIHx8IGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1BST0NfTU9EVUxFKQogCkBAIC0zMTcsMTMgKzI5NiwxMyBAQAogI2VuZGlmCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtcnN0X3J0Y19vcHMgPSB7Ci0JLmlvY3RsCQk9IG1yc3RfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBtcnN0X3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBtcnN0X3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gbXJzdF9yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBtcnN0X3NldF9hbGFybSwKIAkucHJvYwkJPSBtcnN0X3Byb2NmcywKIAkuaXJxX3NldF9zdGF0ZQk9IG1yc3RfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG1yc3RfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3RydWN0IG1yc3RfcnRjCW1yc3RfcnRjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggYjJmZmYwYy4uNjc4MjA2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC04Miw3ICs4Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgbXNtNjI0Ml93cml0ZShzdHJ1Y3QgbXNtNjI0Ml9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgdmFsLAogCQkJCXVuc2lnbmVkIGludCByZWcpCiB7Ci0JcmV0dXJuIF9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOworCV9fcmF3X3dyaXRlbCh2YWwsICZwcml2LT5yZWdzW3JlZ10pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXNtNjI0Ml9zZXQoc3RydWN0IG1zbTYyNDJfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHZhbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tdi5jIGIvZHJpdmVycy9ydGMvcnRjLW12LmMKaW5kZXggYmNjYTQ3Mi4uNjA2MjdhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW12LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW12LmMKQEAgLTE2OSwyNSArMTY5LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbXZfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQkJCXVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCBtdl9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcnRjX3BsYXRfZGF0YSAqcGRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHBkYXRhLT5pb2FkZHI7CiAKIAlpZiAocGRhdGEtPmlycSA8IDApCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7IC8qIGZhbGwgYmFjayBpbnRvIHJ0Yy1kZXYncyBlbXVsYXRpb24gKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXdyaXRlbCgwLCBpb2FkZHIgKyBSVENfQUxBUk1fSU5URVJSVVBUX01BU0tfUkVHX09GRlMpOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046CisJCXJldHVybiAtRUlOVkFMOyAvKiBmYWxsIGJhY2sgaW50byBydGMtZGV2J3MgZW11bGF0aW9uICovCisKKwlpZiAoZW5hYmxlZCkKIAkJd3JpdGVsKDEsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCWVsc2UKKwkJd3JpdGVsKDAsIGlvYWRkciArIFJUQ19BTEFSTV9JTlRFUlJVUFRfTUFTS19SRUdfT0ZGUyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIxNiw3ICsyMTAsNyBAQAogCS5zZXRfdGltZQk9IG12X3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG12X3J0Y19yZWFkX2FsYXJtLAogCS5zZXRfYWxhcm0JPSBtdl9ydGNfc2V0X2FsYXJtLAotCS5pb2N0bAkJPSBtdl9ydGNfaW9jdGwsCisJLmFsYXJtX2lycV9lbmFibGUgPSBtdl9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG12X3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW9tYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKaW5kZXggZTcyYjUyMy4uYjRkYmYzYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwpAQCAtMTQzLDggKzE0Myw2IEBACiAJdTggcmVnOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKIAljYXNlIFJUQ19VSUVfT0ZGOgogCWNhc2UgUlRDX1VJRV9PTjoKIAkJYnJlYWs7CkBAIC0xNTYsMTMgKzE1NCw2IEBACiAJcnRjX3dhaXRfbm90X2J1c3koKTsKIAlyZWcgPSBydGNfcmVhZChPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CiAJc3dpdGNoIChjbWQpIHsKLQkvKiBBSUUgPSBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCi0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwotCQlicmVhazsKLQljYXNlIFJUQ19BSUVfT046Ci0JCXJlZyB8PSBPTUFQX1JUQ19JTlRFUlJVUFRTX0lUX0FMQVJNOwotCQlicmVhazsKIAkvKiBVSUUgPSBVcGRhdGUgSW50ZXJydXB0IEVuYWJsZSAoMS9zZWNvbmQpICovCiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcmVnICY9IH5PTUFQX1JUQ19JTlRFUlJVUFRTX0lUX1RJTUVSOwpAQCAtMTgyLDYgKzE3MywyNCBAQAogI2RlZmluZQlvbWFwX3J0Y19pb2N0bAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIGludCBvbWFwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJdTggcmVnOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlydGNfd2FpdF9ub3RfYnVzeSgpOworCXJlZyA9IHJ0Y19yZWFkKE9NQVBfUlRDX0lOVEVSUlVQVFNfUkVHKTsKKwlpZiAoZW5hYmxlZCkKKwkJcmVnIHw9IE9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk07CisJZWxzZQorCQlyZWcgJj0gfk9NQVBfUlRDX0lOVEVSUlVQVFNfSVRfQUxBUk07CisJcnRjX3dhaXRfbm90X2J1c3koKTsKKwlydGNfd3JpdGUocmVnLCBPTUFQX1JUQ19JTlRFUlJVUFRTX1JFRyk7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJcmV0dXJuIDA7Cit9CisKIC8qIHRoaXMgaGFyZHdhcmUgZG9lc24ndCBzdXBwb3J0ICJkb24ndCBjYXJlIiBhbGFybSBmaWVsZHMgKi8KIHN0YXRpYyBpbnQgdG0yYmNkKHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CkBAIC0zMDksNiArMzE4LDcgQEAKIAkuc2V0X3RpbWUJPSBvbWFwX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IG9tYXBfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybQk9IG9tYXBfcnRjX3NldF9hbGFybSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IG9tYXBfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgaW50IG9tYXBfcnRjX2FsYXJtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKaW5kZXggYzA4NmZjMy4uMjQyYmJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCkBAIC04MSwxMiArODEsMTYgQEAKIAogc3RhdGljIGludCBydGNfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogeworCWludCByZXQ7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IFBERShpbm9kZSktPmRhdGE7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcnRjX3Byb2Nfc2hvdywgcnRjKTsKKwlyZXQgPSBzaW5nbGVfb3BlbihmaWxlLCBydGNfcHJvY19zaG93LCBydGMpOworCWlmIChyZXQpCisJCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgcnRjX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwppbmRleCAzNmViNjYxLi42OTRkYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCkBAIC03Niw3ICs3Niw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcnA1YzAxX3dyaXRlKHN0cnVjdCBycDVjMDFfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IHZhbCwKIAkJCQl1bnNpZ25lZCBpbnQgcmVnKQogewotCXJldHVybiBfX3Jhd193cml0ZWwodmFsLCAmcHJpdi0+cmVnc1tyZWddKTsKKwlfX3Jhd193cml0ZWwodmFsLCAmcHJpdi0+cmVnc1tyZWddKTsKIH0KIAogc3RhdGljIHZvaWQgcnA1YzAxX2xvY2soc3RydWN0IHJwNWMwMV9wcml2ICpwcml2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKaW5kZXggZGQxNGUyMC4uNmFhYTE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCkBAIC0yOTksMTQgKzI5OSw2IEBACiAJCWlmIChyczVjLT50eXBlID09IHJ0Y19yczVjMzcyYQogCQkJCSYmIChidWYgJiBSUzVDMzcyQV9DVFJMMV9TTDEpKQogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJLyogdGhlc2UgaXJxIG1hbmFnZW1lbnQgY2FsbHMgb25seSBtYWtlIHNlbnNlIGZvciBjaGlwcwotCQkgKiB3aGljaCBhcmUgd2lyZWQgdXAgdG8gYW4gSVJRLgotCQkgKi8KLQkJaWYgKCFyczVjLT5oYXNfaXJxKQotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CkBAIC0zMTcsMTIgKzMwOSw2IEBACiAKIAlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6CS8qIGFsYXJtIG9mZiAqLwotCQlidWYgJj0gflJTNUNfQ1RSTDFfQUFMRTsKLQkJYnJlYWs7Ci0JY2FzZSBSVENfQUlFX09OOgkvKiBhbGFybSBvbiAqLwotCQlidWYgfD0gUlM1Q19DVFJMMV9BQUxFOwotCQlicmVhazsKIAljYXNlIFJUQ19VSUVfT0ZGOgkvKiB1cGRhdGUgb2ZmICovCiAJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9DVF9NQVNLOwogCQlicmVhazsKQEAgLTM0Nyw2ICszMzMsMzkgQEAKICNlbmRpZgogCiAKK3N0YXRpYyBpbnQgcnM1Y19ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHJzNWMzNzIJCSpyczVjID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdW5zaWduZWQgY2hhcgkJYnVmOworCWludAkJCXN0YXR1cywgYWRkcjsKKworCWJ1ZiA9IHJzNWMtPnJlZ3NbUlM1Q19SRUdfQ1RSTDFdOworCisJaWYgKCFyczVjLT5oYXNfaXJxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IHJzNWNfZ2V0X3JlZ3MocnM1Yyk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlhZGRyID0gUlM1Q19BRERSKFJTNUNfUkVHX0NUUkwxKTsKKwlpZiAoZW5hYmxlZCkKKwkJYnVmIHw9IFJTNUNfQ1RSTDFfQUFMRTsKKwllbHNlCisJCWJ1ZiAmPSB+UlM1Q19DVFJMMV9BQUxFOworCisJaWYgKGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBhZGRyLCBidWYpIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgdXBkYXRlIGFsYXJtXG4iLAorCQkJcnM1Yy0+cnRjLT5uYW1lKTsKKwkJc3RhdHVzID0gLUVJTzsKKwl9IGVsc2UKKwkJcnM1Yy0+cmVnc1tSUzVDX1JFR19DVFJMMV0gPSBidWY7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisKIC8qIE5PVEU6ICBTaW5jZSBSVENfV0tBTE1fe1JELFNFVH0gd2VyZSBvcmlnaW5hbGx5IGRlZmluZWQgZm9yIEVGSSwKICAqIHdoaWNoIG9ubHkgZXhwb3NlcyBhIHBvbGxlZCBwcm9ncmFtbWluZyBpbnRlcmZhY2U7IGFuZCBzaW5jZQogICogdGhlc2UgY2FsbHMgbWFwIGRpcmVjdGx5IHRvIHRob3NlIEVGSSByZXF1ZXN0czsgd2UgZG9uJ3QgZGVtYW5kCkBAIC00NjYsNiArNDg1LDcgQEAKIAkuc2V0X3RpbWUJPSByczVjMzcyX3J0Y19zZXRfdGltZSwKIAkucmVhZF9hbGFybQk9IHJzNWNfcmVhZF9hbGFybSwKIAkuc2V0X2FsYXJtCT0gcnM1Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSByczVjX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1JUQ19JTlRGX1NZU0ZTKSB8fCBkZWZpbmVkKENPTkZJR19SVENfSU5URl9TWVNGU19NT0RVTEUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggY2Y5NTNlYy4uYjgwZmEyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtNzcsMTggKzc3LDIwIEBACiB9CiAKIC8qIFVwZGF0ZSBjb250cm9sIHJlZ2lzdGVycyAqLwotc3RhdGljIHZvaWQgczNjX3J0Y19zZXRhaWUoaW50IHRvKQorc3RhdGljIGludCBzM2NfcnRjX3NldGFpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKLQlwcl9kZWJ1ZygiJXM6IGFpZT0lZFxuIiwgX19mdW5jX18sIHRvKTsKKwlwcl9kZWJ1ZygiJXM6IGFpZT0lZFxuIiwgX19mdW5jX18sIGVuYWJsZWQpOwogCiAJdG1wID0gcmVhZGIoczNjX3J0Y19iYXNlICsgUzNDMjQxMF9SVENBTE0pICYgflMzQzI0MTBfUlRDQUxNX0FMTUVOOwogCi0JaWYgKHRvKQorCWlmIChlbmFibGVkKQogCQl0bXAgfD0gUzNDMjQxMF9SVENBTE1fQUxNRU47CiAKIAl3cml0ZWIodG1wLCBzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzM2NfcnRjX3NldHBpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBlbmFibGVkKQpAQCAtMzA4LDcgKzMxMCw3IEBACiAKIAl3cml0ZWIoYWxybV9lbiwgYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIAotCXMzY19ydGNfc2V0YWllKGFscm0tPmVuYWJsZWQpOworCXMzY19ydGNfc2V0YWllKGRldiwgYWxybS0+ZW5hYmxlZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0MCw3ICs0NDIsNyBAQAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCiAJczNjX3J0Y19zZXRwaWUoJmRldi0+ZGV2LCAwKTsKLQlzM2NfcnRjX3NldGFpZSgwKTsKKwlzM2NfcnRjX3NldGFpZSgmZGV2LT5kZXYsIDApOwogCiAJY2xrX2Rpc2FibGUocnRjX2Nsayk7CiAJY2xrX3B1dChydGNfY2xrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCA4OGVhNTJiLi41ZGZlNWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zMTQsMTYgKzMxNCw2IEBACiAJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJUlRTUiAmPSB+UlRTUl9BTEU7Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBSVENfQUlFX09OOgotCQlzcGluX2xvY2tfaXJxKCZzYTExMDBfcnRjX2xvY2spOwotCQlSVFNSIHw9IFJUU1JfQUxFOwotCQlzcGluX3VubG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7Ci0JCXJldHVybiAwOwogCWNhc2UgUlRDX1VJRV9PRkY6CiAJCXNwaW5fbG9ja19pcnEoJnNhMTEwMF9ydGNfbG9jayk7CiAJCVJUU1IgJj0gflJUU1JfSFpFOwpAQCAtMzM4LDYgKzMyOCwxNyBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKK3N0YXRpYyBpbnQgc2ExMTAwX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc3Bpbl9sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkKKwkJUlRTUiB8PSBSVFNSX0FMRTsKKwllbHNlCisJCVJUU1IgJj0gflJUU1JfQUxFOworCXNwaW5fdW5sb2NrX2lycSgmc2ExMTAwX3J0Y19sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzYTExMDBfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CiAJcnRjX3RpbWVfdG9fdG0oUkNOUiwgdG0pOwpAQCAtNDEwLDYgKzQxMSw3IEBACiAJLnByb2MgPSBzYTExMDBfcnRjX3Byb2MsCiAJLmlycV9zZXRfZnJlcSA9IHNhMTEwMF9pcnFfc2V0X2ZyZXEsCiAJLmlycV9zZXRfc3RhdGUgPSBzYTExMDBfaXJxX3NldF9zdGF0ZSwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHNhMTEwMF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgc2ExMTAwX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwppbmRleCAwNmU0MWVkLi45MzMxNGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2guYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpAQCAtMzUwLDEwICszNTAsNiBAQAogCXVuc2lnbmVkIGludCByZXQgPSAwOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19BSUVfT0ZGOgotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc2hfcnRjX3NldGFpZShkZXYsIGNtZCA9PSBSVENfQUlFX09OKTsKLQkJYnJlYWs7CiAJY2FzZSBSVENfVUlFX09GRjoKIAkJcnRjLT5wZXJpb2RpY19mcmVxICY9IH5QRl9PWFM7CiAJCXNoX3J0Y19zZXRjaWUoZGV2LCAwKTsKQEAgLTM2OSw2ICszNjUsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHNoX3J0Y19hbGFybV9pcnFfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGVuYWJsZWQpCit7CisJc2hfcnRjX3NldGFpZShkZXYsIGVuYWJsZWQpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHNoX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKQEAgLTYwNCw2ICs2MDYsNyBAQAogCS5pcnFfc2V0X3N0YXRlCT0gc2hfcnRjX2lycV9zZXRfc3RhdGUsCiAJLmlycV9zZXRfZnJlcQk9IHNoX3J0Y19pcnFfc2V0X2ZyZXEsCiAJLnByb2MJCT0gc2hfcnRjX3Byb2MsCisJLmFsYXJtX2lycV9lbmFibGUgPSBzaF9ydGNfYWxhcm1faXJxX2VuYWJsZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoX3J0Y19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYyBiL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKaW5kZXggNTE3MjVmNy4uYTgyZDZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXRlc3QuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCkBAIC01MCwyNCArNTAsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlc3RfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKLQl1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgdGVzdF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7Ci0JLyogV2UgZG8gc3VwcG9ydCBpbnRlcnJ1cHRzLCB0aGV5J3JlIGdlbmVyYXRlZAotCSAqIHVzaW5nIHRoZSBzeXNmcyBpbnRlcmZhY2UuCi0JICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFJUQ19QSUVfT046Ci0JY2FzZSBSVENfUElFX09GRjoKLQljYXNlIFJUQ19VSUVfT046Ci0JY2FzZSBSVENfVUlFX09GRjoKLQljYXNlIFJUQ19BSUVfT046Ci0JY2FzZSBSVENfQUlFX09GRjoKLQkJcmV0dXJuIDA7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHRlc3RfcnRjX29wcyA9IHsKQEAgLTc2LDcgKzYxLDcgQEAKIAkucmVhZF9hbGFybSA9IHRlc3RfcnRjX3JlYWRfYWxhcm0sCiAJLnNldF9hbGFybSA9IHRlc3RfcnRjX3NldF9hbGFybSwKIAkuc2V0X21tc3MgPSB0ZXN0X3J0Y19zZXRfbW1zcywKLQkuaW9jdGwgPSB0ZXN0X3J0Y19pb2N0bCwKKwkuYWxhcm1faXJxX2VuYWJsZSA9IHRlc3RfcnRjX2FsYXJtX2lycV9lbmFibGUsCiB9OwogCiBzdGF0aWMgc3NpemVfdCB0ZXN0X2lycV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwppbmRleCBjMzI0NDI0Li43NjkxOTBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCkBAIC0yNDAsMjYgKzI0MCw2IEBACiBzdGF0aWMgaW50IHZyNDF4eF9ydGNfaW9jdGwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PTjoKLQkJc3Bpbl9sb2NrX2lycSgmcnRjX2xvY2spOwotCi0JCWlmICghYWxhcm1fZW5hYmxlZCkgewotCQkJZW5hYmxlX2lycShhaWVfaXJxKTsKLQkJCWFsYXJtX2VuYWJsZWQgPSAxOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxKCZydGNfbG9jayk7Ci0JCWJyZWFrOwotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKLQotCQlpZiAoYWxhcm1fZW5hYmxlZCkgewotCQkJZGlzYWJsZV9pcnEoYWllX2lycSk7Ci0JCQlhbGFybV9lbmFibGVkID0gMDsKLQkJfQotCi0JCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOwotCQlicmVhazsKIAljYXNlIFJUQ19FUE9DSF9SRUFEOgogCQlyZXR1cm4gcHV0X3VzZXIoZXBvY2gsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZyk7CiAJY2FzZSBSVENfRVBPQ0hfU0VUOgpAQCAtMjc1LDYgKzI1NSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZyNDF4eF9ydGNfYWxhcm1faXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGVkKQoreworCXNwaW5fbG9ja19pcnEoJnJ0Y19sb2NrKTsKKwlpZiAoZW5hYmxlZCkgeworCQlpZiAoIWFsYXJtX2VuYWJsZWQpIHsKKwkJCWVuYWJsZV9pcnEoYWllX2lycSk7CisJCQlhbGFybV9lbmFibGVkID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhbGFybV9lbmFibGVkKSB7CisJCQlkaXNhYmxlX2lycShhaWVfaXJxKTsKKwkJCWFsYXJtX2VuYWJsZWQgPSAwOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycSgmcnRjX2xvY2spOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaXJxcmV0dXJuX3QgZWxhcHNlZHRpbWVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKilkZXZfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfYWxpYXMuYwppbmRleCA0MTU1ODA1Li4yYjc3MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9hbGlhcy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2FsaWFzLmMKQEAgLTMxOSw2ICszMTksOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgZGlzY29ubmVjdGVkICovCisJaWYgKCFsY3UpCisJCXJldHVybjsKIAlkZXZpY2UtPmRpc2NpcGxpbmUtPmdldF91aWQoZGV2aWNlLCAmdWlkKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJbGlzdF9kZWxfaW5pdCgmZGV2aWNlLT5hbGlhc19saXN0KTsKQEAgLTY4MCw2ICs2ODMsOSBAQAogCiAJcHJpdmF0ZSA9IChzdHJ1Y3QgZGFzZF9lY2tkX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWxjdSA9IHByaXZhdGUtPmxjdTsKKwkvKiBub3RoaW5nIHRvIGRvIGlmIGFscmVhZHkgcmVtb3ZlZCAqLworCWlmICghbGN1KQorCQlyZXR1cm4gMDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGN1LT5sb2NrLCBmbGFncyk7CiAJX3JlbW92ZV9kZXZpY2VfZnJvbV9sY3UobGN1LCBkZXZpY2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxjdS0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IDMxODY3MmQuLmE5ZmUyM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTcyLDcgKzcyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2N3X2RldmljZV9pZCBkYXNkX2Vja2RfaWRzW10gPSB7CiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4Mzk5MCwgMCwgMHgzMzkwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHgxfSwKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgyMTA1LCAwLCAweDMzOTAsIDApLCAuZHJpdmVyX2luZm8gPSAweDJ9LAotCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDM4ODAsIDAsIDB4MzM5MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4M30sCisJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4Mzg4MCwgMCwgMHgzMzgwLCAwKSwgLmRyaXZlcl9pbmZvID0gMHgzfSwKIAl7IENDV19ERVZJQ0VfREVWVFlQRSAoMHgzOTkwLCAwLCAweDMzODAsIDApLCAuZHJpdmVyX2luZm8gPSAweDR9LAogCXsgQ0NXX0RFVklDRV9ERVZUWVBFICgweDIxMDUsIDAsIDB4MzM4MCwgMCksIC5kcml2ZXJfaW5mbyA9IDB4NX0sCiAJeyBDQ1dfREVWSUNFX0RFVlRZUEUgKDB4OTM0MywgMCwgMHg5MzQ1LCAwKSwgLmRyaXZlcl9pbmZvID0gMHg2fSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMKaW5kZXggYzg4MWExNC4uMWY2YTRkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMKQEAgLTYyLDggKzYyLDggQEAKIC8qCiAgKiBQYXJhbWV0ZXIgcGFyc2luZyBmdW5jdGlvbnMuCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBkZXZzID0gWFBSQU1fREVWUzsKLXN0YXRpYyBjaGFyIF9faW5pdGRhdGEgKnNpemVzW1hQUkFNX01BWF9ERVZTXTsKK3N0YXRpYyBpbnQgZGV2cyA9IFhQUkFNX0RFVlM7CitzdGF0aWMgY2hhciAqc2l6ZXNbWFBSQU1fTUFYX0RFVlNdOwogCiBtb2R1bGVfcGFyYW0oZGV2cywgaW50LCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShzaXplcywgY2hhcnAsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvczM5MC9jaGFyL2tleWJvYXJkLmMKaW5kZXggOGNkNThlNC4uNWFkNDRkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIva2V5Ym9hcmQuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9rZXlib2FyZC5jCkBAIC00NjAsNyArNDYwLDggQEAKIAkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXZvaWQgX191c2VyICphcmdwOwotCWludCBjdCwgcGVybTsKKwl1bnNpZ25lZCBpbnQgY3Q7CisJaW50IHBlcm07CiAKIAlhcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmggYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlLmgKaW5kZXggN2EyNDJmMC4uMjY3YjU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZS5oCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGUuaApAQCAtMjgwLDYgKzI4MCwxNCBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCit0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UsIHN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3QpCit7CisJcmVxdWVzdC0+Y2FsbGJhY2sgPSAodm9pZCAqKSB0YXBlX2ZyZWVfcmVxdWVzdDsKKwlyZXF1ZXN0LT5jYWxsYmFja19kYXRhID0gTlVMTDsKKwl0YXBlX2RvX2lvX2FzeW5jKGRldmljZSwgcmVxdWVzdCk7Cit9CisKIGV4dGVybiBpbnQgdGFwZV9vcGVyX2hhbmRsZXIoaW50IGlycSwgaW50IHN0YXR1cyk7CiBleHRlcm4gdm9pZCB0YXBlX25vcGVyX2hhbmRsZXIoaW50IGlycSwgaW50IHN0YXR1cyk7CiBleHRlcm4gaW50IHRhcGVfb3BlbihzdHJ1Y3QgdGFwZV9kZXZpY2UgKik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM0eHguYyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCmluZGV4IGMxN2YzNWIuLmMyNjUxMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfMzR4eC5jCkBAIC01MywyMyArNTMsMTEgQEAKICAqIE1lZGl1bSBzZW5zZSBmb3IgMzR4eCB0YXBlcy4gVGhlcmUgaXMgbm8gJ3JlYWwnIG1lZGl1bSBzZW5zZSBjYWxsLgogICogU28gd2UganVzdCBkbyBhIG5vcm1hbCBzZW5zZS4KICAqLwotc3RhdGljIGludAotdGFwZV8zNHh4X21lZGl1bV9zZW5zZShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIF9fdGFwZV8zNHh4X21lZGl1bV9zZW5zZShzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0KQogewotCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7Ci0JdW5zaWduZWQgY2hhciAgICAgICAqc2Vuc2U7Ci0JaW50ICAgICAgICAgICAgICAgICAgcmM7CisJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UgPSByZXF1ZXN0LT5kZXZpY2U7CisJdW5zaWduZWQgY2hhciAqc2Vuc2U7CiAKLQlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDMyKTsKLQlpZiAoSVNfRVJSKHJlcXVlc3QpKSB7Ci0JCURCRl9FWENFUFRJT04oNiwgIk1TRU4gZmFpbFxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOwotCX0KLQotCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKLQl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBTRU5TRSwgMzIsIHJlcXVlc3QtPmNwZGF0YSk7Ci0KLQlyYyA9IHRhcGVfZG9faW9faW50ZXJydXB0aWJsZShkZXZpY2UsIHJlcXVlc3QpOwogCWlmIChyZXF1ZXN0LT5yYyA9PSAwKSB7CiAJCXNlbnNlID0gcmVxdWVzdC0+Y3BkYXRhOwogCkBAIC04OCwxNSArNzYsNDcgQEAKIAkJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyB8PSBHTVRfV1JfUFJPVCh+MCk7CiAJCWVsc2UKIAkJCWRldmljZS0+dGFwZV9nZW5lcmljX3N0YXR1cyAmPSB+R01UX1dSX1BST1QofjApOwotCX0gZWxzZSB7CisJfSBlbHNlCiAJCURCRl9FVkVOVCg0LCAidGFwZV8zNHh4OiBtZWRpdW0gc2Vuc2UgZmFpbGVkIHdpdGggcmM9JWRcbiIsCiAJCQlyZXF1ZXN0LT5yYyk7Ci0JfQogCXRhcGVfZnJlZV9yZXF1ZXN0KHJlcXVlc3QpOworfQogCitzdGF0aWMgaW50IHRhcGVfMzR4eF9tZWRpdW1fc2Vuc2Uoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKKwlpbnQgcmM7CisKKwlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDMyKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKSB7CisJCURCRl9FWENFUFRJT04oNiwgIk1TRU4gZmFpbFxuIik7CisJCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCX0KKworCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKKwl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBTRU5TRSwgMzIsIHJlcXVlc3QtPmNwZGF0YSk7CisJcmMgPSB0YXBlX2RvX2lvX2ludGVycnVwdGlibGUoZGV2aWNlLCByZXF1ZXN0KTsKKwlfX3RhcGVfMzR4eF9tZWRpdW1fc2Vuc2UocmVxdWVzdCk7CiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgdm9pZCB0YXBlXzM0eHhfbWVkaXVtX3NlbnNlX2FzeW5jKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDMyKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKSB7CisJCURCRl9FWENFUFRJT04oNiwgIk1TRU4gZmFpbFxuIik7CisJCXJldHVybjsKKwl9CisKKwlyZXF1ZXN0LT5vcCA9IFRPX01TRU47CisJdGFwZV9jY3dfZW5kKHJlcXVlc3QtPmNwYWRkciwgU0VOU0UsIDMyLCByZXF1ZXN0LT5jcGRhdGEpOworCXJlcXVlc3QtPmNhbGxiYWNrID0gKHZvaWQgKikgX190YXBlXzM0eHhfbWVkaXVtX3NlbnNlOworCXJlcXVlc3QtPmNhbGxiYWNrX2RhdGEgPSBOVUxMOworCXRhcGVfZG9faW9fYXN5bmMoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogc3RydWN0IHRhcGVfMzR4eF93b3JrIHsKIAlzdHJ1Y3QgdGFwZV9kZXZpY2UJKmRldmljZTsKIAllbnVtIHRhcGVfb3AJCSBvcDsKQEAgLTEwOSw2ICsxMjksOSBAQAogICogaXMgaW5zZXJ0ZWQgYnV0IGNhbm5vdCBjYWxsIHRhcGVfZG9faW8qIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuCiAgKiBNYXliZSB0aGF0J3MgdXNlZnVsIGZvciBvdGhlciBhY3Rpb25zIHdlIHdhbnQgdG8gc3RhcnQgZnJvbSB0aGUKICAqIGludGVycnVwdCBoYW5kbGVyLgorICogTm90ZTogdGhlIHdvcmsgaGFuZGxlciBpcyBjYWxsZWQgYnkgdGhlIHN5c3RlbSB3b3JrIHF1ZXVlLiBUaGUgdGFwZQorICogY29tbWFuZHMgc3RhcnRlZCBieSB0aGUgaGFuZGxlciBuZWVkIHRvIGJlIGFzeW5jaHJvdW5vdXMsIG90aGVyd2lzZQorICogYSBkZWFkbG9jayBjYW4gb2NjdXIgZS5nLiBpbiBjYXNlIG9mIGEgZGVmZXJyZWQgY2M9MSAoc2VlIF9fdGFwZV9kb19pcnEpLgogICovCiBzdGF0aWMgdm9pZAogdGFwZV8zNHh4X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xMTksNyArMTQyLDcgQEAKIAogCXN3aXRjaChwLT5vcCkgewogCQljYXNlIFRPX01TRU46Ci0JCQl0YXBlXzM0eHhfbWVkaXVtX3NlbnNlKGRldmljZSk7CisJCQl0YXBlXzM0eHhfbWVkaXVtX3NlbnNlX2FzeW5jKGRldmljZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURCRl9FVkVOVCgzLCAiVDM0WFg6IGludGVybmFsIGVycm9yOiB1bmtub3duIHdvcmtcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV8zNTkwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwppbmRleCBmYmUzNjFmLi5kZTJlOTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlXzM1OTAuYwpAQCAtMzI5LDE3ICszMjksMTcgQEAKIC8qCiAgKiBFbmFibGUgZW5jcnlwdGlvbgogICovCi1zdGF0aWMgaW50IHRhcGVfMzU5Ml9lbmFibGVfY3J5cHQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCitzdGF0aWMgc3RydWN0IHRhcGVfcmVxdWVzdCAqX190YXBlXzM1OTJfZW5hYmxlX2NyeXB0KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CiAJY2hhciAqZGF0YTsKIAogCURCRl9FVkVOVCg2LCAidGFwZV8zNTkyX2VuYWJsZV9jcnlwdFxuIik7CiAJaWYgKCFjcnlwdF9zdXBwb3J0ZWQoZGV2aWNlKSkKLQkJcmV0dXJuIC1FTk9TWVM7CisJCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgNzIpOwogCWlmIChJU19FUlIocmVxdWVzdCkpCi0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCQlyZXR1cm4gcmVxdWVzdDsKIAlkYXRhID0gcmVxdWVzdC0+Y3BkYXRhOwogCW1lbXNldChkYXRhLDAsNzIpOwogCkBAIC0zNTQsMjMgKzM1NCw0MiBAQAogCXJlcXVlc3QtPm9wID0gVE9fQ1JZUFRfT047CiAJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEpOwogCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAxLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEgKyAzNik7CisJcmV0dXJuIHJlcXVlc3Q7Cit9CisKK3N0YXRpYyBpbnQgdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChkZXZpY2UpOworCWlmIChJU19FUlIocmVxdWVzdCkpCisJCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOwogCXJldHVybiB0YXBlX2RvX2lvX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKIH0KIAorc3RhdGljIHZvaWQgdGFwZV8zNTkyX2VuYWJsZV9jcnlwdF9hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChkZXZpY2UpOworCWlmICghSVNfRVJSKHJlcXVlc3QpKQorCQl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogLyoKICAqIERpc2FibGUgZW5jcnlwdGlvbgogICovCi1zdGF0aWMgaW50IHRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0KHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHN0cnVjdCB0YXBlX3JlcXVlc3QgKl9fdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHRhcGVfcmVxdWVzdCAqcmVxdWVzdDsKIAljaGFyICpkYXRhOwogCiAJREJGX0VWRU5UKDYsICJ0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdFxuIik7CiAJaWYgKCFjcnlwdF9zdXBwb3J0ZWQoZGV2aWNlKSkKLQkJcmV0dXJuIC1FTk9TWVM7CisJCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMiwgNzIpOwogCWlmIChJU19FUlIocmVxdWVzdCkpCi0JCXJldHVybiBQVFJfRVJSKHJlcXVlc3QpOworCQlyZXR1cm4gcmVxdWVzdDsKIAlkYXRhID0gcmVxdWVzdC0+Y3BkYXRhOwogCW1lbXNldChkYXRhLDAsNzIpOwogCkBAIC0zODMsOSArNDAyLDI4IEBACiAJdGFwZV9jY3dfY2MocmVxdWVzdC0+Y3BhZGRyLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEpOwogCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAxLCBNT0RFX1NFVF9DQiwgMzYsIGRhdGEgKyAzNik7CiAKKwlyZXR1cm4gcmVxdWVzdDsKK30KKworc3RhdGljIGludCB0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OworCisJcmVxdWVzdCA9IF9fdGFwZV8zNTkyX2Rpc2FibGVfY3J5cHQoZGV2aWNlKTsKKwlpZiAoSVNfRVJSKHJlcXVlc3QpKQorCQlyZXR1cm4gUFRSX0VSUihyZXF1ZXN0KTsKIAlyZXR1cm4gdGFwZV9kb19pb19mcmVlKGRldmljZSwgcmVxdWVzdCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRhcGVfMzU5Ml9kaXNhYmxlX2NyeXB0X2FzeW5jKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlyZXF1ZXN0ID0gX190YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChkZXZpY2UpOworCWlmICghSVNfRVJSKHJlcXVlc3QpKQorCQl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogLyoKICAqIElPQ1RMOiBTZXQgZW5jcnlwdGlvbiBzdGF0dXMKICAqLwpAQCAtNDU3LDggKzQ5NSw3IEBACiAvKgogICogU0VOU0UgTWVkaXVtOiBHZXQgU2Vuc2UgZGF0YSBhYm91dCBtZWRpdW0gc3RhdGUKICAqLwotc3RhdGljIGludAotdGFwZV8zNTkwX3NlbnNlX21lZGl1bShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyBpbnQgdGFwZV8zNTkwX3NlbnNlX21lZGl1bShzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwogCkBAIC00NzAsNiArNTA3LDE4IEBACiAJcmV0dXJuIHRhcGVfZG9faW9fZnJlZShkZXZpY2UsIHJlcXVlc3QpOwogfQogCitzdGF0aWMgdm9pZCB0YXBlXzM1OTBfc2Vuc2VfbWVkaXVtX2FzeW5jKHN0cnVjdCB0YXBlX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCB0YXBlX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlyZXF1ZXN0ID0gdGFwZV9hbGxvY19yZXF1ZXN0KDEsIDEyOCk7CisJaWYgKElTX0VSUihyZXF1ZXN0KSkKKwkJcmV0dXJuOworCXJlcXVlc3QtPm9wID0gVE9fTVNFTjsKKwl0YXBlX2Njd19lbmQocmVxdWVzdC0+Y3BhZGRyLCBNRURJVU1fU0VOU0UsIDEyOCwgcmVxdWVzdC0+Y3BkYXRhKTsKKwl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKK30KKwogLyoKICAqIE1UVEVMTDogVGVsbCBibG9jay4gUmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2sgcmVsYXRpdmUgdG8gY3VycmVudCBmaWxlLgogICovCkBAIC01NDYsMTUgKzU5NSwxNCBAQAogICogMi4gVGhlIGF0dGVudGlvbiBtc2cgaXMgd3JpdHRlbiB0byB0aGUgInJlYWQgc3Vic3lzdGVtIGRhdGEiIGJ1ZmZlci4KICAqIEluIHRoaXMgY2FzZSB3ZSBwcm9iYWJseSBzaG91bGQgcHJpbnQgaXQgdG8gdGhlIGNvbnNvbGUuCiAgKi8KLXN0YXRpYyBpbnQKLXRhcGVfMzU5MF9yZWFkX2F0dG1zZyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKK3N0YXRpYyB2b2lkIHRhcGVfMzU5MF9yZWFkX2F0dG1zZ19hc3luYyhzdHJ1Y3QgdGFwZV9kZXZpY2UgKmRldmljZSkKIHsKIAlzdHJ1Y3QgdGFwZV9yZXF1ZXN0ICpyZXF1ZXN0OwogCWNoYXIgKmJ1ZjsKIAogCXJlcXVlc3QgPSB0YXBlX2FsbG9jX3JlcXVlc3QoMywgNDA5Nik7CiAJaWYgKElTX0VSUihyZXF1ZXN0KSkKLQkJcmV0dXJuIFBUUl9FUlIocmVxdWVzdCk7CisJCXJldHVybjsKIAlyZXF1ZXN0LT5vcCA9IFRPX1JFQURfQVRUTVNHOwogCWJ1ZiA9IHJlcXVlc3QtPmNwZGF0YTsKIAlidWZbMF0gPSBQUkVQX1JEX1NTX0RBVEE7CkBAIC01NjIsMTIgKzYxMCwxNSBAQAogCXRhcGVfY2N3X2NjKHJlcXVlc3QtPmNwYWRkciwgUEVSRk9STV9TU19GVU5DLCAxMiwgYnVmKTsKIAl0YXBlX2Njd19jYyhyZXF1ZXN0LT5jcGFkZHIgKyAxLCBSRUFEX1NTX0RBVEEsIDQwOTYgLSAxMiwgYnVmICsgMTIpOwogCXRhcGVfY2N3X2VuZChyZXF1ZXN0LT5jcGFkZHIgKyAyLCBOT1AsIDAsIE5VTEwpOwotCXJldHVybiB0YXBlX2RvX2lvX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKKwl0YXBlX2RvX2lvX2FzeW5jX2ZyZWUoZGV2aWNlLCByZXF1ZXN0KTsKIH0KIAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBzY2hlZHVsZSBmb2xsb3ctdXAgYWN0aW9ucyBmcm9tIHdpdGhpbiBhbgogICogaW50ZXJydXB0IGNvbnRleHQgKGxpa2UgdW5zb2xpY2l0ZWQgaW50ZXJydXB0cykuCisgKiBOb3RlOiB0aGUgd29yayBoYW5kbGVyIGlzIGNhbGxlZCBieSB0aGUgc3lzdGVtIHdvcmsgcXVldWUuIFRoZSB0YXBlCisgKiBjb21tYW5kcyBzdGFydGVkIGJ5IHRoZSBoYW5kbGVyIG5lZWQgdG8gYmUgYXN5bmNocm91bm91cywgb3RoZXJ3aXNlCisgKiBhIGRlYWRsb2NrIGNhbiBvY2N1ciBlLmcuIGluIGNhc2Ugb2YgYSBkZWZlcnJlZCBjYz0xIChzZWUgX190YXBlX2RvX2lycSkuCiAgKi8KIHN0cnVjdCB3b3JrX2hhbmRsZXJfZGF0YSB7CiAJc3RydWN0IHRhcGVfZGV2aWNlICpkZXZpY2U7CkBAIC01ODMsMTYgKzYzNCwxNiBAQAogCiAJc3dpdGNoIChwLT5vcCkgewogCWNhc2UgVE9fTVNFTjoKLQkJdGFwZV8zNTkwX3NlbnNlX21lZGl1bShwLT5kZXZpY2UpOworCQl0YXBlXzM1OTBfc2Vuc2VfbWVkaXVtX2FzeW5jKHAtPmRldmljZSk7CiAJCWJyZWFrOwogCWNhc2UgVE9fUkVBRF9BVFRNU0c6Ci0JCXRhcGVfMzU5MF9yZWFkX2F0dG1zZyhwLT5kZXZpY2UpOworCQl0YXBlXzM1OTBfcmVhZF9hdHRtc2dfYXN5bmMocC0+ZGV2aWNlKTsKIAkJYnJlYWs7CiAJY2FzZSBUT19DUllQVF9PTjoKLQkJdGFwZV8zNTkyX2VuYWJsZV9jcnlwdChwLT5kZXZpY2UpOworCQl0YXBlXzM1OTJfZW5hYmxlX2NyeXB0X2FzeW5jKHAtPmRldmljZSk7CiAJCWJyZWFrOwogCWNhc2UgVE9fQ1JZUFRfT0ZGOgotCQl0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdChwLT5kZXZpY2UpOworCQl0YXBlXzM1OTJfZGlzYWJsZV9jcnlwdF9hc3luYyhwLT5kZXZpY2UpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEQkZfRVZFTlQoMywgIlQzNTkwOiB3b3JrIGhhbmRsZXIgdW5kZWZpbmVkIGZvciAiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYwppbmRleCBlOWZmZjJiLi41NjQwYzg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKQEAgLTQ3Niw3ICs0NzYsNyBAQAogc3RhdGljIGludCBnZXRfaW5ib3VuZF9idWZmZXJfZnJvbnRpZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKIAlpbnQgY291bnQsIHN0b3A7Ci0JdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlID0gMDsKIAogCS8qCiAJICogRG9uJ3QgY2hlY2sgMTI4IGJ1ZmZlcnMsIGFzIG90aGVyd2lzZSBxZGlvX2luYm91bmRfcV9tb3ZlZApAQCAtNjQzLDcgKzY0Myw3IEBACiBzdGF0aWMgaW50IGdldF9vdXRib3VuZF9idWZmZXJfZnJvbnRpZXIoc3RydWN0IHFkaW9fcSAqcSkKIHsKIAlpbnQgY291bnQsIHN0b3A7Ci0JdW5zaWduZWQgY2hhciBzdGF0ZTsKKwl1bnNpZ25lZCBjaGFyIHN0YXRlID0gMDsKIAogCWlmIChuZWVkX3NpZ2Ffc3luYyhxKSkKIAkJaWYgKCgocXVldWVfdHlwZShxKSAhPSBRRElPX0lRRElPX1FGTVQpICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCmluZGV4IDY1ZWJlZTAuLmI2YTYzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvbmV0aXVjdi5jCkBAIC01NjUsNyArNTY1LDcgQEAKIAlzdHJ1Y3QgaXVjdl9ldmVudCBldjsKIAlpbnQgcmM7CiAKLQlpZiAobWVtY21wKGl1Y3ZNYWdpYywgaXB1c2VyLCBzaXplb2YoaXB1c2VyKSkpCisJaWYgKG1lbWNtcChpdWN2TWFnaWMsIGlwdXNlciwgMTYpKQogCQkvKiBpcHVzZXIgbXVzdCBtYXRjaCBpdWN2TWFnaWMuICovCiAJCXJldHVybiAtRUlOVkFMOwogCXJjID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwppbmRleCAyOWY4NDhiLi4wMTlhZTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCkBAIC05ODgsMTYgKzk4OCwzMCBAQAogCWNocF9kc2MgPSAoc3RydWN0IGNoYW5uZWxQYXRoX2RzYyAqKWNjd19kZXZpY2VfZ2V0X2NocF9kZXNjKGNjd2RldiwgMCk7CiAJaWYgKGNocF9kc2MgIT0gTlVMTCkgewogCQkvKiBDSFBQIGZpZWxkIGJpdCA2ID09IDEgLT4gc2luZ2xlIHF1ZXVlICovCi0JCWlmICgoY2hwX2RzYy0+Y2hwcCAmIDB4MDIpID09IDB4MDIpCisJCWlmICgoY2hwX2RzYy0+Y2hwcCAmIDB4MDIpID09IDB4MDIpIHsKKwkJCWlmICgoYXRvbWljX3JlYWQoJmNhcmQtPnFkaW8uc3RhdGUpICE9CisJCQkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpICYmCisJCQkgICAgKGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9PSA0KSkKKwkJCQkvKiBjaGFuZ2UgZnJvbSA0IHRvIDEgb3V0Ym91bmQgcXVldWVzICovCisJCQkJcWV0aF9mcmVlX3FkaW9fYnVmZmVycyhjYXJkKTsKIAkJCWNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlcyA9IDE7CisJCQlpZiAoY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSAhPSAwKQorCQkJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCisJCQkJCSJQcmlvcml0eSBRdWV1ZWluZyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJCWNhcmQtPnFkaW8uZGVmYXVsdF9vdXRfcXVldWUgPSAwOworCQl9IGVsc2UgeworCQkJaWYgKChhdG9taWNfcmVhZCgmY2FyZC0+cWRpby5zdGF0ZSkgIT0KKwkJCQlRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkgJiYKKwkJCSAgICAoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID09IDEpKSB7CisJCQkJLyogY2hhbmdlIGZyb20gMSB0byA0IG91dGJvdW5kIHF1ZXVlcyAqLworCQkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CisJCQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDI7CisJCQl9CisJCQljYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMgPSA0OworCQl9CiAJCWNhcmQtPmluZm8uZnVuY19sZXZlbCA9IDB4NDEwMCArIGNocF9kc2MtPmRlc2M7CiAJCWtmcmVlKGNocF9kc2MpOwogCX0KLQlpZiAoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzID09IDEpIHsKLQkJY2FyZC0+cWRpby5kZWZhdWx0X291dF9xdWV1ZSA9IDA7Ci0JCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkiUHJpb3JpdHkgUXVldWVpbmcgbm90IHN1cHBvcnRlZFxuIik7Ci0JfQogCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAibnI6JXgiLCBjYXJkLT5xZGlvLm5vX291dF9xdWV1ZXMpOwogCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAibHZsOiUwMngiLCBjYXJkLT5pbmZvLmZ1bmNfbGV2ZWwpOwogCXJldHVybjsKQEAgLTE4MzIsMzMgKzE4NDYsNiBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgcWV0aF9nZXRfbWF4X210dV9mb3JfY2FyZChpbnQgY2FyZHR5cGUpCi17Ci0Jc3dpdGNoIChjYXJkdHlwZSkgewotCi0JY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NEOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NOOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NNOgotCWNhc2UgUUVUSF9DQVJEX1RZUEVfT1NYOgotCQlyZXR1cm4gNjE0NDA7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCXJldHVybiA1NzM0NDsKLQlkZWZhdWx0OgotCQlyZXR1cm4gMTUwMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHFldGhfZ2V0X210dV9vdXRfb2ZfbXBjKGludCBjYXJkdHlwZSkKLXsKLQlzd2l0Y2ggKGNhcmR0eXBlKSB7Ci0JY2FzZSBRRVRIX0NBUkRfVFlQRV9JUUQ6Ci0JCXJldHVybiAxOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQogc3RhdGljIGlubGluZSBpbnQgcWV0aF9nZXRfbXR1X291dG9mX2ZyYW1lc2l6ZShpbnQgZnJhbWVzaXplKQogewogCXN3aXRjaCAoZnJhbWVzaXplKSB7CkBAIC0xODgxLDEwICsxODY4LDkgQEAKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TRDoKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TTToKIAljYXNlIFFFVEhfQ0FSRF9UWVBFX09TWDoKLQkJcmV0dXJuICgobXR1ID49IDU3NikgJiYgKG10dSA8PSA2MTQ0MCkpOwogCWNhc2UgUUVUSF9DQVJEX1RZUEVfSVFEOgogCQlyZXR1cm4gKChtdHUgPj0gNTc2KSAmJgotCQkJKG10dSA8PSBjYXJkLT5pbmZvLm1heF9tdHUgKyA0MDk2IC0gMzIpKTsKKwkJCShtdHUgPD0gY2FyZC0+aW5mby5tYXhfbXR1KSk7CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9PU046CiAJY2FzZSBRRVRIX0NBUkRfVFlQRV9VTktOT1dOOgogCWRlZmF1bHQ6CkBAIC0xOTA3LDcgKzE4OTMsNyBAQAogCW1lbWNweSgmY2FyZC0+dG9rZW4udWxwX2ZpbHRlcl9yLAogCSAgICAgICBRRVRIX1VMUF9FTkFCTEVfUkVTUF9GSUxURVJfVE9LRU4oaW9iLT5kYXRhKSwKIAkgICAgICAgUUVUSF9NUENfVE9LRU5fTEVOR1RIKTsKLQlpZiAocWV0aF9nZXRfbXR1X291dF9vZl9tcGMoY2FyZC0+aW5mby50eXBlKSkgeworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSB7CiAJCW1lbWNweSgmZnJhbWVzaXplLCBRRVRIX1VMUF9FTkFCTEVfUkVTUF9NQVhfTVRVKGlvYi0+ZGF0YSksIDIpOwogCQltdHUgPSBxZXRoX2dldF9tdHVfb3V0b2ZfZnJhbWVzaXplKGZyYW1lc2l6ZSk7CiAJCWlmICghbXR1KSB7CkBAIC0xOTE1LDEyICsxOTAxLDIxIEBACiAJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIiAgcmMlZCIsIGlvYi0+cmMpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FyZC0+aW5mby5tYXhfbXR1ID0gbXR1OworCQlpZiAoY2FyZC0+aW5mby5pbml0aWFsX210dSAmJiAoY2FyZC0+aW5mby5pbml0aWFsX210dSAhPSBtdHUpKSB7CisJCQkvKiBmcmFtZSBzaXplIGhhcyBjaGFuZ2VkICovCisJCQlpZiAoY2FyZC0+ZGV2ICYmCisJCQkgICAgKChjYXJkLT5kZXYtPm10dSA9PSBjYXJkLT5pbmZvLmluaXRpYWxfbXR1KSB8fAorCQkJICAgICAoY2FyZC0+ZGV2LT5tdHUgPiBtdHUpKSkKKwkJCQljYXJkLT5kZXYtPm10dSA9IG10dTsKKwkJCXFldGhfZnJlZV9xZGlvX2J1ZmZlcnMoY2FyZCk7CisJCX0KIAkJY2FyZC0+aW5mby5pbml0aWFsX210dSA9IG10dTsKKwkJY2FyZC0+aW5mby5tYXhfbXR1ID0gbXR1OwogCQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gbXR1ICsgMiAqIFBBR0VfU0laRTsKIAl9IGVsc2UgewogCQljYXJkLT5pbmZvLmluaXRpYWxfbXR1ID0gcWV0aF9nZXRfaW5pdGlhbF9tdHVfZm9yX2NhcmQoY2FyZCk7Ci0JCWNhcmQtPmluZm8ubWF4X210dSA9IHFldGhfZ2V0X21heF9tdHVfZm9yX2NhcmQoY2FyZC0+aW5mby50eXBlKTsKKwkJY2FyZC0+aW5mby5tYXhfbXR1ID0gKihfX3UxNiAqKVFFVEhfVUxQX0VOQUJMRV9SRVNQX01BWF9NVFUoCisJCQlpb2ItPmRhdGEpOwogCQljYXJkLT5xZGlvLmluX2J1Zl9zaXplID0gUUVUSF9JTl9CVUZfU0laRV9ERUZBVUxUOwogCX0KIApAQCAtMzc3NSw2ICszNzcwLDQ3IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBxZXRoX2RldGVybWluZV9jYXBhYmlsaXRpZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisJaW50IGxlbmd0aDsKKwljaGFyICpwcmNkOworCXN0cnVjdCBjY3dfZGV2aWNlICpkZGV2OworCWludCBkZGV2X29mZmxpbmUgPSAwOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRldGNhcGFiIik7CisJZGRldiA9IENBUkRfRERFVihjYXJkKTsKKwlpZiAoIWRkZXYtPm9ubGluZSkgeworCQlkZGV2X29mZmxpbmUgPSAxOworCQlyYyA9IGNjd19kZXZpY2Vfc2V0X29ubGluZShkZGV2KTsKKwkJaWYgKHJjKSB7CisJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjNlcnIlZCIsIHJjKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmMgPSBxZXRoX3JlYWRfY29uZl9kYXRhKGNhcmQsICh2b2lkICoqKSAmcHJjZCwgJmxlbmd0aCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIHFldGhfcmVhZF9jb25mX2RhdGEgcmV0dXJuZWQgJWlcbiIsCisJCQlkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjVlcnIlZCIsIHJjKTsKKwkJZ290byBvdXRfb2ZmbGluZTsKKwl9CisJcWV0aF9jb25maWd1cmVfdW5pdGFkZHIoY2FyZCwgcHJjZCk7CisJcWV0aF9jb25maWd1cmVfYmxrdF9kZWZhdWx0KGNhcmQsIHByY2QpOworCWtmcmVlKHByY2QpOworCisJcmMgPSBxZGlvX2dldF9zc3FkX2Rlc2MoZGRldiwgJmNhcmQtPnNzcWQpOworCWlmIChyYykKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7CisKK291dF9vZmZsaW5lOgorCWlmIChkZGV2X29mZmxpbmUgPT0gMSkKKwkJY2N3X2RldmljZV9zZXRfb2ZmbGluZShkZGV2KTsKK291dDoKKwlyZXR1cm47Cit9CisKIHN0YXRpYyBpbnQgcWV0aF9xZGlvX2VzdGFibGlzaChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewogCXN0cnVjdCBxZGlvX2luaXRpYWxpemUgaW5pdF9kYXRhOwpAQCAtMzkwNSw2ICszOTQxLDcgQEAKIAogCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJocmRzZXR1cCIpOwogCWF0b21pY19zZXQoJmNhcmQtPmZvcmNlX2FsbG9jX3NrYiwgMCk7CisJcWV0aF9nZXRfY2hhbm5lbF9wYXRoX2Rlc2MoY2FyZCk7CiByZXRyeToKIAlpZiAocmV0cmllcykKIAkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiJXMgUmV0cnlpbmcgdG8gZG8gSURYIGFjdGl2YXRlcy5cbiIsCkBAIC0zOTMzLDYgKzM5NzAsNyBAQAogCQllbHNlCiAJCQlnb3RvIHJldHJ5OwogCX0KKwlxZXRoX2RldGVybWluZV9jYXBhYmlsaXRpZXMoY2FyZCk7CiAJcWV0aF9pbml0X3Rva2VucyhjYXJkKTsKIAlxZXRoX2luaXRfZnVuY19sZXZlbChjYXJkKTsKIAlyYyA9IHFldGhfaWR4X2FjdGl2YXRlX2NoYW5uZWwoJmNhcmQtPnJlYWQsIHFldGhfaWR4X3JlYWRfY2IpOwpAQCAtNDIwMiw0MSArNDI0MCw2IEBACiAJY2FyZC0+ZGlzY2lwbGluZS5jY3dnZHJpdmVyID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCi17Ci0JaW50IHJjOwotCWludCBsZW5ndGg7Ci0JY2hhciAqcHJjZDsKLQotCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJkZXRjYXBhYiIpOwotCXJjID0gY2N3X2RldmljZV9zZXRfb25saW5lKENBUkRfRERFVihjYXJkKSk7Ci0JaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQotCXJjID0gcWV0aF9yZWFkX2NvbmZfZGF0YShjYXJkLCAodm9pZCAqKikgJnByY2QsICZsZW5ndGgpOwotCWlmIChyYykgewotCQlRRVRIX0RCRl9NRVNTQUdFKDIsICIlcyBxZXRoX3JlYWRfY29uZl9kYXRhIHJldHVybmVkICVpXG4iLAotCQkJZGV2X25hbWUoJmNhcmQtPmdkZXYtPmRldiksIHJjKTsKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI1ZXJyJWQiLCByYyk7Ci0JCWdvdG8gb3V0X29mZmxpbmU7Ci0JfQotCXFldGhfY29uZmlndXJlX3VuaXRhZGRyKGNhcmQsIHByY2QpOwotCXFldGhfY29uZmlndXJlX2Jsa3RfZGVmYXVsdChjYXJkLCBwcmNkKTsKLQlrZnJlZShwcmNkKTsKLQotCXJjID0gcWRpb19nZXRfc3NxZF9kZXNjKENBUkRfRERFVihjYXJkKSwgJmNhcmQtPnNzcWQpOwotCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICI2ZXJyJWQiLCByYyk7Ci0KLW91dF9vZmZsaW5lOgotCWNjd19kZXZpY2Vfc2V0X29mZmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKLW91dDoKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQgcWV0aF9jb3JlX3Byb2JlX2RldmljZShzdHJ1Y3QgY2N3Z3JvdXBfZGV2aWNlICpnZGV2KQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYwppbmRleCAyYWM4ZjZhLi5hZGEwZmU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKQEAgLTU3MywxMyArNTczLDEzIEBACiAJCWNhc2UgSVBBX1JDX0wyX0RVUF9MQVlFUjNfTUFDOgogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKIAkJCQkiTUFDIGFkZHJlc3MgJXBNIGFscmVhZHkgZXhpc3RzXG4iLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHIpOworCQkJCWNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjKTsKIAkJCWJyZWFrOwogCQljYXNlIElQQV9SQ19MMl9NQUNfTk9UX0FVVEhfQllfSFlQOgogCQljYXNlIElQQV9SQ19MMl9NQUNfTk9UX0FVVEhfQllfQURQOgogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKIAkJCQkiTUFDIGFkZHJlc3MgJXBNIGlzIG5vdCBhdXRob3JpemVkXG4iLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHIpOworCQkJCWNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKaW5kZXggNjVlMWNmMS4uMjA3YjdkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIGludCBzbXNnX3BhdGhfcGVuZGluZyhzdHJ1Y3QgaXVjdl9wYXRoICpwYXRoLCB1OCBpcHZtaWRbOF0sCiAJCQkgICAgIHU4IGlwdXNlclsxNl0pCiB7Ci0JaWYgKHN0cm5jbXAoaXB2bWlkLCAiKk1TRyAgICAiLCBzaXplb2YoaXB2bWlkKSkgIT0gMCkKKwlpZiAoc3RybmNtcChpcHZtaWQsICIqTVNHICAgICIsIDgpICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIFBhdGggcGVuZGluZyBmcm9tICpNU0cuICovCiAJcmV0dXJuIGl1Y3ZfcGF0aF9hY2NlcHQocGF0aCwgJnNtc2dfaGFuZGxlciwgIlNNU0dJVUNWICAgICAgICAiLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmggYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zci5oCmluZGV4IDQ3NWMzMWEuLjc3YjI2ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyLmgKKysrIGIvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3IuaApAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3IuaAotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogU0NTSSBSQUlEIERldmljZSBEcml2ZXIgZm9yCiAqKiAgICAgICAgICAgICAgICBBUkVDQSBSQUlEIEhvc3QgYWRhcHRlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDYsOCArNDYsMTIgQEAKIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlOwogLypUaGUgbGltaXQgb2Ygb3V0c3RhbmRpbmcgc2NzaSBjb21tYW5kIHRoYXQgZmlybXdhcmUgY2FuIGhhbmRsZSovCiAjZGVmaW5lIEFSQ01TUl9NQVhfT1VUU1RBTkRJTkdfQ01ECQkJCQkJMjU2Ci0jZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JCQkJCQkJMzIwCi0jZGVmaW5lIEFSQ01TUl9EUklWRVJfVkVSU0lPTgkJICAgICAiRHJpdmVyIFZlcnNpb24gMS4yMC4wMC4xNSAyMDEwLzAyLzAyIgorI2lmZGVmIENPTkZJR19YRU4KKwkjZGVmaW5lIEFSQ01TUl9NQVhfRlJFRUNDQl9OVU0JMTYwCisjZWxzZQorCSNkZWZpbmUgQVJDTVNSX01BWF9GUkVFQ0NCX05VTQkzMjAKKyNlbmRpZgorI2RlZmluZSBBUkNNU1JfRFJJVkVSX1ZFUlNJT04JCSAgICAgIkRyaXZlciBWZXJzaW9uIDEuMjAuMDAuMTUgMjAxMC8wOC8wNSIKICNkZWZpbmUgQVJDTVNSX1NDU0lfSU5JVElBVE9SX0lECQkJCQkJMjU1CiAjZGVmaW5lIEFSQ01TUl9NQVhfWEZFUl9TRUNUT1JTCQkJCQkJCTUxMgogI2RlZmluZSBBUkNNU1JfTUFYX1hGRVJfU0VDVE9SU19CCQkJCQkJNDA5NgpAQCAtNjAsNyArNjQsNiBAQAogI2RlZmluZSBBUkNNU1JfTUFYX0hCQl9QT1NUUVVFVUUJCQkJCQkyNjQKICNkZWZpbmUgQVJDTVNSX01BWF9YRkVSX0xFTgkJCQkJCQkweDI2MDAwIC8qIDE1MksgKi8KICNkZWZpbmUgQVJDTVNSX0NEQl9TR19QQUdFX0xFTkdUSAkJCQkJCTI1NiAKLSNkZWZpbmUgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMJCQkJCQkweEUxCiAjaWZuZGVmIFBDSV9ERVZJQ0VfSURfQVJFQ0FfMTg4MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSRUNBXzE4ODAgMHgxODgwCiAgI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMgYi9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9hdHRyLmMKaW5kZXggYTRlMDRjNS4uYWNkYWUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FyY21zci9hcmNtc3JfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2F0dHIuYwpAQCAtMiw3ICsyLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoqICAgICAgICBPLlMgICA6IExpbnV4CiAqKiAgIEZJTEUgTkFNRSAgOiBhcmNtc3JfYXR0ci5jCi0qKiAgICAgICAgQlkgICAgOiBFcmljaCBDaGVuCisqKiAgICAgICAgQlkgICAgOiBOaWNrIENoZW5nCiAqKiAgIERlc2NyaXB0aW9uOiBhdHRyaWJ1dGVzIGV4cG9ydGVkIHRvIHN5c2ZzIGFuZCBkZXZpY2UgaG9zdAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNSwgQXJlY2EgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBBbGwgcmlnaHRzIHJlc2VydmVkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJjbXNyL2FyY21zcl9oYmEuYyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCmluZGV4IDFjYWRjZDYuLjk4NGJkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCisrKyBiL2RyaXZlcnMvc2NzaS9hcmNtc3IvYXJjbXNyX2hiYS5jCkBAIC0yLDcgKzIsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiogICAgICAgIE8uUyAgIDogTGludXgKICoqICAgRklMRSBOQU1FICA6IGFyY21zcl9oYmEuYwotKiogICAgICAgIEJZICAgIDogRXJpY2ggQ2hlbgorKiogICAgICAgIEJZICAgIDogTmljayBDaGVuZwogKiogICBEZXNjcmlwdGlvbjogU0NTSSBSQUlEIERldmljZSBEcml2ZXIgZm9yCiAqKiAgICAgICAgICAgICAgICBBUkVDQSBSQUlEIEhvc3QgYWRhcHRlcgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNzYsNyArNzYsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oQVJDTVNSX0RSSVZFUl9WRVJTSU9OKTsKIHN0YXRpYyBpbnQgc2xlZXB0aW1lID0gMTA7Ci1zdGF0aWMgaW50IHJldHJ5Y291bnQgPSAzMDsKK3N0YXRpYyBpbnQgcmV0cnljb3VudCA9IDEyOwogd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xOwogc3RhdGljIGludCBhcmNtc3JfaW9wX21lc3NhZ2VfeGZlcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLAogCQkJCQlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQpOwpAQCAtMTg3LDcgKzE4Nyw2IEBACiAJCWlmIChpc2xlZXAgPiAwKSB7CiAJCQltc2xlZXAoaXNsZWVwKjEwMDApOwogCQl9Ci0JCXByaW50ayhLRVJOX05PVElDRSAid2FrZS11cFxuIik7CiAJCXJldHVybiAwOwogfQogCkBAIC05MjEsNyArOTIwLDYgQEAKIH0KIAogc3RhdGljIHZvaWQgYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiLCBzdHJ1Y3QgQ29tbWFuZENvbnRyb2xCbG9jayAqcENDQiwgYm9vbCBlcnJvcikKLQogewogCWludCBpZCwgbHVuOwogCWlmICgocENDQi0+YWNiICE9IGFjYikgfHwgKHBDQ0ItPnN0YXJ0ZG9uZSAhPSBBUkNNU1JfQ0NCX1NUQVJUKSkgewpAQCAtOTQ4LDcgKzk0Niw3IEBACiAJCQkJLCBwQ0NCLT5zdGFydGRvbmUKIAkJCQksIGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpKTsKIAkJICByZXR1cm47Ci0JCX0KKwl9CiAJYXJjbXNyX3JlcG9ydF9jY2Jfc3RhdGUoYWNiLCBwQ0NCLCBlcnJvcik7CiB9CiAKQEAgLTk4MSw3ICs5NzksNyBAQAogCWNhc2UgQUNCX0FEQVBURVJfVFlQRV9COiB7CiAJCXN0cnVjdCBNZXNzYWdlVW5pdF9CICpyZWcgPSBhY2ItPnBtdUI7CiAJCS8qY2xlYXIgYWxsIG91dGJvdW5kIHBvc3RlZCBRKi8KLQkJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgJnJlZy0+aW9wMmRydl9kb29yYmVsbCk7IC8qIGNsZWFyIGRvb3JiZWxsIGludGVycnVwdCAqLworCQl3cml0ZWwoQVJDTVNSX0RPT1JCRUxMX0lOVF9DTEVBUl9QQVRURVJOLCByZWctPmlvcDJkcnZfZG9vcmJlbGwpOyAvKiBjbGVhciBkb29yYmVsbCBpbnRlcnJ1cHQgKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSQ01TUl9NQVhfSEJCX1BPU1RRVUVVRTsgaSsrKSB7CiAJCQlpZiAoKGZsYWdfY2NiID0gcmVhZGwoJnJlZy0+ZG9uZV9xYnVmZmVyW2ldKSkgIT0gMCkgewogCQkJCXdyaXRlbCgwLCAmcmVnLT5kb25lX3FidWZmZXJbaV0pOwpAQCAtMTUxMSw3ICsxNTA5LDYgQEAKIAkJYXJjbXNyX2RyYWluX2RvbmVxdWV1ZShhY2IsIHBDQ0IsIGVycm9yKTsKIAl9CiB9Ci0KIHN0YXRpYyB2b2lkIGFyY21zcl9oYmJfcG9zdHF1ZXVlX2lzcihzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiKQogewogCXVpbnQzMl90IGluZGV4OwpAQCAtMjEwNiwxMCArMjEwMyw2IEBACiAJaWYgKGF0b21pY19yZWFkKCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQpID49CiAJCQlBUkNNU1JfTUFYX09VVFNUQU5ESU5HX0NNRCkKIAkJcmV0dXJuIFNDU0lfTUxRVUVVRV9IT1NUX0JVU1k7Ci0JaWYgKChzY3NpY21kID09IFNDU0lfQ01EX0FSRUNBX1NQRUNJRklDKSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlY2VpdmVpbmcgU0NTSV9DTURfQVJFQ0FfU1BFQ0lGSUMgY29tbWFuZC4uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQogCWNjYiA9IGFyY21zcl9nZXRfZnJlZWNjYihhY2IpOwogCWlmICghY2NiKQogCQlyZXR1cm4gU0NTSV9NTFFVRVVFX0hPU1RfQlVTWTsKQEAgLTIzOTMsNiArMjM4Niw3IEBACiAJaW50IGluZGV4LCBydG47CiAJYm9vbCBlcnJvcjsKIAlwb2xsaW5nX2hiYl9jY2JfcmV0cnk6CisKIAlwb2xsX2NvdW50Kys7CiAJLyogY2xlYXIgZG9vcmJlbGwgaW50ZXJydXB0ICovCiAJd3JpdGVsKEFSQ01TUl9ET09SQkVMTF9JTlRfQ0xFQVJfUEFUVEVSTiwgcmVnLT5pb3AyZHJ2X2Rvb3JiZWxsKTsKQEAgLTI2NjMsNiArMjY1Nyw3IEBACiB7CiAJc3RydWN0IE1lc3NhZ2VVbml0X0EgX19pb21lbSAqcmVnID0gYWNiLT5wbXVBOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHx8ICgoYWNiLT5hY2JfZmxhZ3MgJiBBQ0JfRl9CVVNfUkVTRVQpICE9IDAgKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQUJPUlQpICE9IDAgKSl7CisJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKQEAgLTI2NzAsOCArMjY2NSwxMCBAQAogCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikpOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKQorCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7CisJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQlyZXR1cm47CisJCX0KIAkJd3JpdGVsKEFSQ01TUl9JTkJPVU5EX01FU0cwX0dFVF9DT05GSUcsICZyZWctPmluYm91bmRfbXNnYWRkcjApOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJfQpAQCAtMjY4MiwxNSArMjY3OSwxOCBAQAogewogCXN0cnVjdCBNZXNzYWdlVW5pdF9CIF9faW9tZW0gKnJlZyA9IGFjYi0+cG11QjsKIAlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSA9PSAwKSB8fCAoKGFjYi0+YWNiX2ZsYWdzICYgQUNCX0ZfQlVTX1JFU0VUKSAhPSAwICkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwICkpeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CiAJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlKSA9PSBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKSB7Ci0JCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwxNik7CisJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQl9CiAJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgYXRvbWljX3JlYWQoJmFjYi0+cnFfbWFwX3Rva2VuKSk7Ci0JCWlmKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfTUVTU0FHRV9HRVRfQ09ORklHLCByZWctPmRydjJpb3BfZG9vcmJlbGwpOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJfQpAQCAtMjcwMSw2ICsyNzAxLDcgQEAKIHsKIAlzdHJ1Y3QgTWVzc2FnZVVuaXRfQyBfX2lvbWVtICpyZWcgPSBhY2ItPnBtdUM7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0JVU19SRVNFVCkgIT0gMCkgfHwgKChhY2ItPmFjYl9mbGFncyAmIEFDQl9GX0FCT1JUKSAhPSAwKSkgeworCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewogCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7CkBAIC0yNzA4LDggKzI3MDksMTAgQEAKIAkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CiAJCX0KIAkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCBhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pKTsKLQkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkKKwkJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmFjYi0+cnFfbWFwX3Rva2VuKSkgeworCQkJbW9kX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWikpOwogCQkJcmV0dXJuOworCQl9CiAJCXdyaXRlbChBUkNNU1JfSU5CT1VORF9NRVNHMF9HRVRfQ09ORklHLCAmcmVnLT5pbmJvdW5kX21zZ2FkZHIwKTsKIAkJd3JpdGVsKEFSQ01TUl9IQkNNVV9EUlYySU9QX01FU1NBR0VfQ01EX0RPTkUsICZyZWctPmluYm91bmRfZG9vcmJlbGwpOwogCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CkBAIC0yODk3LDYgKzI5MDAsOCBAQAogCXVpbnQzMl90IGludG1hc2tfb3JnOwogCXVpbnQ4X3QgcnRudmFsID0gMHgwMDsKIAlpbnQgaSA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCWlmIChhdG9taWNfcmVhZCgmYWNiLT5jY2JvdXRzdGFuZGluZ2NvdW50KSAhPSAwKSB7CiAJCS8qIGRpc2FibGUgYWxsIG91dGJvdW5kIGludGVycnVwdCAqLwogCQlpbnRtYXNrX29yZyA9IGFyY21zcl9kaXNhYmxlX291dGJvdW5kX2ludHMoYWNiKTsKQEAgLTI5MDcsNyArMjkxMiwxMiBAQAogCQlmb3IgKGkgPSAwOyBpIDwgQVJDTVNSX01BWF9GUkVFQ0NCX05VTTsgaSsrKSB7CiAJCQljY2IgPSBhY2ItPnBjY2JfcG9vbFtpXTsKIAkJCWlmIChjY2ItPnN0YXJ0ZG9uZSA9PSBBUkNNU1JfQ0NCX1NUQVJUKSB7Ci0JCQkJYXJjbXNyX2NjYl9jb21wbGV0ZShjY2IpOworCQkJCXNjc2lfZG1hX3VubWFwKGNjYi0+cGNtZCk7CisJCQkJY2NiLT5zdGFydGRvbmUgPSBBUkNNU1JfQ0NCX0RPTkU7CisJCQkJY2NiLT5jY2JfZmxhZ3MgPSAwOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZhY2ItPmNjYmxpc3RfbG9jaywgZmxhZ3MpOworCQkJCWxpc3RfYWRkX3RhaWwoJmNjYi0+bGlzdCwgJmFjYi0+Y2NiX2ZyZWVfbGlzdCk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWNiLT5jY2JsaXN0X2xvY2ssIGZsYWdzKTsKIAkJCX0KIAkJfQogCQlhdG9taWNfc2V0KCZhY2ItPmNjYm91dHN0YW5kaW5nY291bnQsIDApOwpAQCAtMjkyMCw4ICsyOTMwLDcgQEAKIAogc3RhdGljIGludCBhcmNtc3JfYnVzX3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKmNtZCkKIHsKLQlzdHJ1Y3QgQWRhcHRlckNvbnRyb2xCbG9jayAqYWNiID0KLQkJKHN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICopY21kLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBBZGFwdGVyQ29udHJvbEJsb2NrICphY2I7CiAJdWludDMyX3QgaW50bWFza19vcmcsIG91dGJvdW5kX2Rvb3JiZWxsOwogCWludCByZXRyeV9jb3VudCA9IDA7CiAJaW50IHJ0biA9IEZBSUxFRDsKQEAgLTI5NzEsMzEgKzI5ODAsMTYgQEAKIAkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwogCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwogCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBzY3NpICBidXMgcmVzZXQgZWggcmV0dXJucyB3aXRoIHN1Y2Nlc3NcbiIpOwogCQkJfSBlbHNlIHsKIAkJCQlhY2ItPmFjYl9mbGFncyAmPSB+QUNCX0ZfQlVTX1JFU0VUOwotCQkJCWlmIChhdG9taWNfcmVhZCgmYWNiLT5ycV9tYXBfdG9rZW4pID09IDApIHsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKLQkJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7Ci0JCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKLQkJCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWik7Ci0JCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGFjYjsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmZ1bmN0aW9uID0gJmFyY21zcl9yZXF1ZXN0X2RldmljZV9tYXA7Ci0JCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQl9IGVsc2UgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwotCQkJCX0KKwkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOworCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOworCQkJCWFjYi0+ZndfZmxhZyA9IEZXX05PUk1BTDsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNipIWikpOwogCQkJCXJ0biA9IFNVQ0NFU1M7CiAJCQl9CiAJCQlicmVhazsKQEAgLTMwMDcsMjEgKzMwMDEsMTAgQEAKIAkJCQlydG4gPSBGQUlMRUQ7CiAJCQl9IGVsc2UgewogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7Ci0JCQkJfQorCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2ICogSFopKTsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMDY3LDMxICszMDUwLDE2IEBACiAJCQkJYXRvbWljX3NldCgmYWNiLT5ycV9tYXBfdG9rZW4sIDE2KTsKIAkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKIAkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJaW5pdF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKLQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDYgKiBIWik7Ci0JCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCWFjYi0+ZXRlcm5hbF90aW1lci5mdW5jdGlvbiA9ICZhcmNtc3JfcmVxdWVzdF9kZXZpY2VfbWFwOwotCQkJCWFkZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyKTsKKwkJCQltb2RfdGltZXIoJmFjYi0+ZXRlcm5hbF90aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNiAqIEhaKSk7CiAJCQkJYWNiLT5hY2JfZmxhZ3MgJj0gfkFDQl9GX0JVU19SRVNFVDsKIAkJCQlydG4gPSBTVUNDRVNTOwogCQkJCXByaW50ayhLRVJOX0VSUiAiYXJjbXNyOiBzY3NpIGJ1cyByZXNldCBlaCByZXR1cm5zIHdpdGggc3VjY2Vzc1xuIik7CiAJCQl9IGVsc2UgewogCQkJCWFjYi0+YWNiX2ZsYWdzICY9IH5BQ0JfRl9CVVNfUkVTRVQ7Ci0JCQkJaWYgKGF0b21pY19yZWFkKCZhY2ItPnJxX21hcF90b2tlbikgPT0gMCkgewotCQkJCQlhdG9taWNfc2V0KCZhY2ItPnJxX21hcF90b2tlbiwgMTYpOwotCQkJCQlhdG9taWNfc2V0KCZhY2ItPmFudGVfdG9rZW5fdmFsdWUsIDE2KTsKLQkJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOwotCQkJCQlpbml0X3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKTsKLQkJCQkJYWNiLT5ldGVybmFsX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWNiOwotCQkJCQlhY2ItPmV0ZXJuYWxfdGltZXIuZnVuY3Rpb24gPSAmYXJjbXNyX3JlcXVlc3RfZGV2aWNlX21hcDsKLQkJCQkJYWRkX3RpbWVyKCZhY2ItPmV0ZXJuYWxfdGltZXIpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7Ci0JCQkJCWF0b21pY19zZXQoJmFjYi0+YW50ZV90b2tlbl92YWx1ZSwgMTYpOwotCQkJCQlhY2ItPmZ3X2ZsYWcgPSBGV19OT1JNQUw7Ci0JCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7Ci0JCQkJfQorCQkJCWF0b21pY19zZXQoJmFjYi0+cnFfbWFwX3Rva2VuLCAxNik7CisJCQkJYXRvbWljX3NldCgmYWNiLT5hbnRlX3Rva2VuX3ZhbHVlLCAxNik7CisJCQkJYWNiLT5md19mbGFnID0gRldfTk9STUFMOworCQkJCW1vZF90aW1lcigmYWNiLT5ldGVybmFsX3RpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg2KkhaKSk7CiAJCQkJcnRuID0gU1VDQ0VTUzsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwppbmRleCA1ODE1Y2JlLi45YTdhYWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19zY3NpX2hvc3QuYwpAQCAtNjQ2LDYgKzY0Niw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZShzaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJbGlzdF9zcGxpY2VfaW5pdCgmc2hvc3QtPmVoX2NtZF9xLCAmZWhfd29ya19xKTsKKwlzaG9zdC0+aG9zdF9laF9zY2hlZHVsZWQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoc2hvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJU0FTX0RQUklOVEsoIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2Jhc2UuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCmluZGV4IGIyYTgxNzAuLjllYWQwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfYmFzZS5jCkBAIC0yMTc2LDkgKzIxNzYsOSBAQAogCQkvKiBhZGp1c3QgaGJhX3F1ZXVlX2RlcHRoLCByZXBseV9mcmVlX3F1ZXVlX2RlcHRoLAogCQkgKiBhbmQgcXVldWVfc2l6ZQogCQkgKi8KLQkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gcXVldWVfZGlmZjsKLQkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IHF1ZXVlX2RpZmY7Ci0JCXF1ZXVlX3NpemUgLT0gcXVldWVfZGlmZjsKKwkJaW9jLT5oYmFfcXVldWVfZGVwdGggLT0gKHF1ZXVlX2RpZmYgLyAyKTsKKwkJaW9jLT5yZXBseV9mcmVlX3F1ZXVlX2RlcHRoIC09IChxdWV1ZV9kaWZmIC8gMik7CisJCXF1ZXVlX3NpemUgPSBmYWN0cy0+TWF4UmVwbHlEZXNjcmlwdG9yUG9zdFF1ZXVlRGVwdGg7CiAJfQogCWlvYy0+cmVwbHlfcG9zdF9xdWV1ZV9kZXB0aCA9IHF1ZXVlX3NpemU7CiAKQEAgLTM5NDEsNiArMzk0MSw4IEBACiBzdGF0aWMgdm9pZAogX2Jhc2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3QgTVBUMlNBU19BREFQVEVSICppb2MsIGludCByZXNldF9waGFzZSkKIHsKKwltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7CisJbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIAlzd2l0Y2ggKHJlc2V0X3BoYXNlKSB7CiAJY2FzZSBNUFQyX0lPQ19QUkVfUkVTRVQ6CiAJCWR0bXByaW50ayhpb2MsIHByaW50ayhNUFQyU0FTX0lORk9fRk1UICIlczogIgpAQCAtMzk3MSw4ICszOTczLDYgQEAKIAkJICAgICJNUFQyX0lPQ19ET05FX1JFU0VUXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fKSk7CiAJCWJyZWFrOwogCX0KLQltcHQyc2FzX3Njc2loX3Jlc2V0X2hhbmRsZXIoaW9jLCByZXNldF9waGFzZSk7Ci0JbXB0MnNhc19jdGxfcmVzZXRfaGFuZGxlcihpb2MsIHJlc2V0X3BoYXNlKTsKIH0KIAogLyoqCkBAIC00MDI2LDYgKzQwMjYsNyBAQAogewogCWludCByOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggcGVfY29tcGxldGUgPSBpb2MtPndhaXRfZm9yX3BvcnRfZW5hYmxlX3RvX2NvbXBsZXRlOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgIiVzOiBlbnRlclxuIiwgaW9jLT5uYW1lLAogCSAgICBfX2Z1bmNfXykpOwpAQCAtNDA2OCw2ICs0MDY5LDE0IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCV9iYXNlX3Jlc2V0X2hhbmRsZXIoaW9jLCBNUFQyX0lPQ19BRlRFUl9SRVNFVCk7CisKKwkvKiBJZiB0aGlzIGhhcmQgcmVzZXQgaXMgY2FsbGVkIHdoaWxlIHBvcnQgZW5hYmxlIGlzIGFjdGl2ZSwgdGhlbgorCSAqIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBjYWxsIG1ha2VfaW9jX29wZXJhdGlvbmFsCisJICovCisJaWYgKHBlX2NvbXBsZXRlKSB7CisJCXIgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CiAJciA9IF9iYXNlX21ha2VfaW9jX29wZXJhdGlvbmFsKGlvYywgc2xlZXBfZmxhZyk7CiAJaWYgKCFyKQogCQlfYmFzZV9yZXNldF9oYW5kbGVyKGlvYywgTVBUMl9JT0NfRE9ORV9SRVNFVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX3Njc2loLmMKaW5kZXggZWRhMzQ3Yy4uNWRlZDNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19zY3NpaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfc2NzaWguYwpAQCAtODE5LDcgKzgxOSw3IEBACiB9CiAKIC8qKgotICogbXB0c2NzaWhfZ2V0X3Njc2lfbG9va3VwIC0gcmV0dXJucyBzY21kIGVudHJ5CisgKiBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0IC0gcmV0dXJucyBzY21kIGVudHJ5CiAgKiBAaW9jOiBwZXIgYWRhcHRlciBvYmplY3QKICAqIEBzbWlkOiBzeXN0ZW0gcmVxdWVzdCBtZXNzYWdlIGluZGV4CiAgKgpAQCAtODMyLDYgKzgzMiwyOCBAQAogfQogCiAvKioKKyAqIF9zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIgLSByZXR1cm5zIHNjbWQgZW50cnkKKyAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAorICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKKyAqCisgKiBSZXR1cm5zIHRoZSBzbWlkIHN0b3JlZCBzY21kIHBvaW50ZXIuCisgKiBUaGVuIHdpbGwgZGVyZWZyZW5jZSB0aGUgc3RvcmVkIHNjbWQgcG9pbnRlci4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2NzaV9jbW5kICoKK19zY3NpaF9zY3NpX2xvb2t1cF9nZXRfY2xlYXIoc3RydWN0IE1QVDJTQVNfQURBUFRFUiAqaW9jLCB1MTYgc21pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzY3NpX2NtbmQgKnNjbWQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJc2NtZCA9IGlvYy0+c2NzaV9sb29rdXBbc21pZCAtIDFdLnNjbWQ7CisJaW9jLT5zY3NpX2xvb2t1cFtzbWlkIC0gMV0uc2NtZCA9IE5VTEw7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gc2NtZDsKK30KKworLyoqCiAgKiBfc2NzaWhfc2NzaV9sb29rdXBfZmluZF9ieV9zY21kIC0gc2NtZCBsb29rdXAKICAqIEBpb2M6IHBlciBhZGFwdGVyIG9iamVjdAogICogQHNtaWQ6IHN5c3RlbSByZXF1ZXN0IG1lc3NhZ2UgaW5kZXgKQEAgLTI5ODEsOSArMzAwMyw2IEBACiAJdTE2IGhhbmRsZTsKIAogCWZvciAoaSA9IDAgOyBpIDwgZXZlbnRfZGF0YS0+TnVtRW50cmllczsgaSsrKSB7Ci0JCWlmIChldmVudF9kYXRhLT5QSFlbaV0uUGh5U3RhdHVzICYKLQkJICAgIE1QSTJfRVZFTlRfU0FTX1RPUE9fUEhZU1RBVFVTX1ZBQ0FOVCkKLQkJCWNvbnRpbnVlOwogCQloYW5kbGUgPSBsZTE2X3RvX2NwdShldmVudF9kYXRhLT5QSFlbaV0uQXR0YWNoZWREZXZIYW5kbGUpOwogCQlpZiAoIWhhbmRsZSkKIAkJCWNvbnRpbnVlOwpAQCAtMzIxMCw3ICszMjI5LDcgQEAKIAl1MTYgY291bnQgPSAwOwogCiAJZm9yIChzbWlkID0gMTsgc21pZCA8PSBpb2MtPnNjc2lpb19kZXB0aDsgc21pZCsrKSB7Ci0JCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0KGlvYywgc21pZCk7CisJCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJCWlmICghc2NtZCkKIAkJCWNvbnRpbnVlOwogCQljb3VudCsrOwpAQCAtMzgwNCw3ICszODIzLDcgQEAKIAl1MzIgcmVzcG9uc2VfY29kZSA9IDA7CiAKIAltcGlfcmVwbHkgPSBtcHQyc2FzX2Jhc2VfZ2V0X3JlcGx5X3ZpcnRfYWRkcihpb2MsIHJlcGx5KTsKLQlzY21kID0gX3Njc2loX3Njc2lfbG9va3VwX2dldChpb2MsIHNtaWQpOworCXNjbWQgPSBfc2NzaWhfc2NzaV9sb29rdXBfZ2V0X2NsZWFyKGlvYywgc21pZCk7CiAJaWYgKHNjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKQEAgLTUwMDUsNiArNTAyNCwxMiBAQAogCQkgICAgIGV2ZW50X2RhdGEpOwogI2VuZGlmCiAKKwkvKiBJbiBNUEkgUmV2aXNpb24gSyAoMHhDKSwgdGhlIGludGVybmFsIGRldmljZSByZXNldCBjb21wbGV0ZSB3YXMKKwkgKiBpbXBsZW1lbnRlZCwgc28gYXZvaWQgc2V0dGluZyB0bV9idXN5IGZsYWcgZm9yIG9sZGVyIGZpcm13YXJlLgorCSAqLworCWlmICgoaW9jLT5mYWN0cy5IZWFkZXJWZXJzaW9uID4+IDgpIDwgMHhDKQorCQlyZXR1cm47CisKIAlpZiAoZXZlbnRfZGF0YS0+UmVhc29uQ29kZSAhPQogCSAgICBNUEkyX0VWRU5UX1NBU19ERVZfU1RBVF9SQ19JTlRFUk5BTF9ERVZJQ0VfUkVTRVQgJiYKIAkgICBldmVudF9kYXRhLT5SZWFzb25Db2RlICE9CkBAIC01MDk5LDYgKzUxMjQsNyBAQAogICAgIHN0cnVjdCBmd19ldmVudF93b3JrICpmd19ldmVudCkKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzY21kOworCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldjsKIAl1MTYgc21pZCwgaGFuZGxlOwogCXUzMiBsdW47CiAJc3RydWN0IE1QVDJTQVNfREVWSUNFICpzYXNfZGV2aWNlX3ByaXZfZGF0YTsKQEAgLTUxMDksMTIgKzUxMzUsMTcgQEAKIAlNcGkyRXZlbnREYXRhU2FzQnJvYWRjYXN0UHJpbWl0aXZlX3QgKmV2ZW50X2RhdGEgPSBmd19ldmVudC0+ZXZlbnRfZGF0YTsKICNlbmRpZgogCXUxNiBpb2Nfc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHI7CisKIAlkZXd0cHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQgImJyb2FkY2FzdCBwcmltYXRpdmU6ICIKIAkgICAgInBoeSBudW1iZXIoJWQpLCB3aWR0aCglZClcbiIsIGlvYy0+bmFtZSwgZXZlbnRfZGF0YS0+UGh5TnVtLAogCSAgICBldmVudF9kYXRhLT5Qb3J0V2lkdGgpKTsKIAlkdG1wcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGVudGVyXG4iLCBpb2MtPm5hbWUsCiAJICAgIF9fZnVuY19fKSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CisJaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOwogCXRlcm1pbmF0aW9uX2NvdW50ID0gMDsKIAlxdWVyeV9jb3VudCA9IDA7CiAJbXBpX3JlcGx5ID0gaW9jLT50bV9jbWRzLnJlcGx5OwpAQCAtNTEyMiw3ICs1MTUzLDggQEAKIAkJc2NtZCA9IF9zY3NpaF9zY3NpX2xvb2t1cF9nZXQoaW9jLCBzbWlkKTsKIAkJaWYgKCFzY21kKQogCQkJY29udGludWU7Ci0JCXNhc19kZXZpY2VfcHJpdl9kYXRhID0gc2NtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKKwkJc2RldiA9IHNjbWQtPmRldmljZTsKKwkJc2FzX2RldmljZV9wcml2X2RhdGEgPSBzZGV2LT5ob3N0ZGF0YTsKIAkJaWYgKCFzYXNfZGV2aWNlX3ByaXZfZGF0YSB8fCAhc2FzX2RldmljZV9wcml2X2RhdGEtPnNhc190YXJnZXQpCiAJCQljb250aW51ZTsKIAkJIC8qIHNraXAgaGlkZGVuIHJhaWQgY29tcG9uZW50cyAqLwpAQCAtNTEzOCw2ICs1MTcwLDcgQEAKIAkJbHVuID0gc2FzX2RldmljZV9wcml2X2RhdGEtPmx1bjsKIAkJcXVlcnlfY291bnQrKzsKIAorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAkJbXB0MnNhc19zY3NpaF9pc3N1ZV90bShpb2MsIGhhbmRsZSwgMCwgMCwgbHVuLAogCQkgICAgTVBJMl9TQ1NJVEFTS01HTVRfVEFTS1RZUEVfUVVFUllfVEFTSywgc21pZCwgMzAsIE5VTEwpOwogCQlpb2MtPnRtX2NtZHMuc3RhdHVzID0gTVBUMl9DTURfTk9UX1VTRUQ7CkBAIC01MTQ3LDE0ICs1MTgwLDIwIEBACiAJCSAgICAobXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KIAkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfVE1fU1VDQ0VFREVEIHx8CiAJCSAgICAgbXBpX3JlcGx5LT5SZXNwb25zZUNvZGUgPT0KLQkJICAgICBNUEkyX1NDU0lUQVNLTUdNVF9SU1BfSU9fUVVFVUVEX09OX0lPQykpCisJCSAgICAgTVBJMl9TQ1NJVEFTS01HTVRfUlNQX0lPX1FVRVVFRF9PTl9JT0MpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5zY3NpX2xvb2t1cF9sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKLQotCQltcHQyc2FzX3Njc2loX2lzc3VlX3RtKGlvYywgaGFuZGxlLCAwLCAwLCBsdW4sCi0JCSAgICBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQlJUX1RBU0tfU0VULCAwLCAzMCwgTlVMTCk7CisJCX0KKwkJciA9IG1wdDJzYXNfc2NzaWhfaXNzdWVfdG0oaW9jLCBoYW5kbGUsIHNkZXYtPmNoYW5uZWwsIHNkZXYtPmlkLAorCQkgICAgc2Rldi0+bHVuLCBNUEkyX1NDU0lUQVNLTUdNVF9UQVNLVFlQRV9BQk9SVF9UQVNLLCBzbWlkLCAzMCwKKwkJICAgIHNjbWQpOworCQlpZiAociA9PSBGQUlMRUQpCisJCQlzZGV2X3ByaW50ayhLRVJOX1dBUk5JTkcsIHNkZXYsICJ0YXNrIGFib3J0OiBGQUlMRUQgIgorCQkJICAgICJzY21kKCVwKVxuIiwgc2NtZCk7CiAJCXRlcm1pbmF0aW9uX2NvdW50ICs9IGxlMzJfdG9fY3B1KG1waV9yZXBseS0+VGVybWluYXRpb25Db3VudCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb2MtPnNjc2lfbG9va3VwX2xvY2ssIGZsYWdzKTsKIAl9Ci0JaW9jLT5icm9hZGNhc3RfYWVuX2J1c3kgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+c2NzaV9sb29rdXBfbG9jaywgZmxhZ3MpOwogCiAJZHRtcHJpbnRrKGlvYywgcHJpbnRrKE1QVDJTQVNfSU5GT19GTVQKIAkgICAgIiVzIC0gZXhpdCwgcXVlcnlfY291bnQgPSAlZCB0ZXJtaW5hdGlvbl9jb3VudCA9ICVkXG4iLApAQCAtNjYyNiw2ICs2NjY1LDcgQEAKIAkJZGVzdHJveV93b3JrcXVldWUod3EpOwogCiAJLyogcmVsZWFzZSBhbGwgdGhlIHZvbHVtZXMgKi8KKwlfc2NzaWhfaXJfc2h1dGRvd24oaW9jKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmFpZF9kZXZpY2UsIG5leHQsICZpb2MtPnJhaWRfZGV2aWNlX2xpc3QsCiAJICAgIGxpc3QpIHsKIAkJaWYgKHJhaWRfZGV2aWNlLT5zdGFyZ2V0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2F0dHIuYwppbmRleCA0NDU3OGI1Li5kM2U1OGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9hdHRyLmMKQEAgLTE1NjEsNiArMTU2MSw3IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IHJwb3J0X3RvX3Nob3N0KHJwb3J0KTsKIAlmY19wb3J0X3QgKmZjcG9ydCA9ICooZmNfcG9ydF90ICoqKXJwb3J0LT5kZF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIWZjcG9ydCkKIAkJcmV0dXJuOwpAQCAtMTU3MywxMCArMTU3NCwxMCBAQAogCSAqIFRyYW5zcG9ydCBoYXMgZWZmZWN0aXZlbHkgJ2RlbGV0ZWQnIHRoZSBycG9ydCwgY2xlYXIKIAkgKiBhbGwgbG9jYWwgcmVmZXJlbmNlcy4KIAkgKi8KLQlzcGluX2xvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJZmNwb3J0LT5ycG9ydCA9IGZjcG9ydC0+ZHJwb3J0ID0gTlVMTDsKIAkqKChmY19wb3J0X3QgKiopcnBvcnQtPmRkX2RhdGEpID0gTlVMTDsKLQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHRlc3RfYml0KEFCT1JUX0lTUF9BQ1RJVkUsICZmY3BvcnQtPnZoYS0+ZHBjX2ZsYWdzKSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggZjk0OGUxYS4uZDk0NzljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0yNTA1LDExICsyNTA1LDEyIEBACiB7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSBkYXRhOwogCXN0cnVjdCBmY19ycG9ydCAqcnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCXJwb3J0ID0gZmNwb3J0LT5kcnBvcnQgPyBmY3BvcnQtPmRycG9ydDogZmNwb3J0LT5ycG9ydDsKIAlmY3BvcnQtPmRycG9ydCA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCWlmIChycG9ydCkKIAkJZmNfcmVtb3RlX3BvcnRfZGVsZXRlKHJwb3J0KTsKIH0KQEAgLTI4NzksNiArMjg4MCw3IEBACiAJc3RydWN0IGZjX3Jwb3J0X2lkZW50aWZpZXJzIHJwb3J0X2lkczsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXN0cnVjdCBxbGFfaHdfZGF0YSAqaGEgPSB2aGEtPmh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlxbGEyeDAwX3Jwb3J0X2RlbChmY3BvcnQpOwogCkBAIC0yODkzLDkgKzI4OTUsOSBAQAogCQkgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBmYyByZW1vdGUgcG9ydCFcbiIpOwogCQlyZXR1cm47CiAJfQotCXNwaW5fbG9ja19pcnEoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCSooKGZjX3BvcnRfdCAqKilycG9ydC0+ZGRfZGF0YSkgPSBmY3BvcnQ7Ci0Jc3Bpbl91bmxvY2tfaXJxKGZjcG9ydC0+dmhhLT5ob3N0LT5ob3N0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoZmNwb3J0LT52aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJcnBvcnQtPnN1cHBvcnRlZF9jbGFzc2VzID0gZmNwb3J0LT5zdXBwb3J0ZWRfY2xhc3NlczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBjMTk0YzIzLi5mMjc3MjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtNTYyLDcgKzU2Miw2IEBACiAJfQogCWlmIChhdG9taWNfcmVhZCgmZmNwb3J0LT5zdGF0ZSkgIT0gRkNTX09OTElORSkgewogCQlpZiAoYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfREVBRCB8fAotCQkJYXRvbWljX3JlYWQoJmZjcG9ydC0+c3RhdGUpID09IEZDU19ERVZJQ0VfTE9TVCB8fAogCQkJYXRvbWljX3JlYWQoJmJhc2VfdmhhLT5sb29wX3N0YXRlKSA9PSBMT09QX0RFQUQpIHsKIAkJCWNtZC0+cmVzdWx0ID0gRElEX05PX0NPTk5FQ1QgPDwgMTY7CiAJCQlnb3RvIHFjMjRfZmFpbF9jb21tYW5kOwpAQCAtMjUxMyw2ICsyNTEyLDcgQEAKIHsKIAlzdHJ1Y3QgZmNfcnBvcnQgKnJwb3J0OwogCXNjc2lfcWxhX2hvc3RfdCAqYmFzZV92aGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghZmNwb3J0LT5ycG9ydCkKIAkJcmV0dXJuOwpAQCAtMjUyMCw5ICsyNTIwLDkgQEAKIAlycG9ydCA9IGZjcG9ydC0+cnBvcnQ7CiAJaWYgKGRlZmVyKSB7CiAJCWJhc2VfdmhhID0gcGNpX2dldF9kcnZkYXRhKHZoYS0+aHctPnBkZXYpOwotCQlzcGluX2xvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUodmhhLT5ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJZmNwb3J0LT5kcnBvcnQgPSBycG9ydDsKLQkJc3Bpbl91bmxvY2tfaXJxKHZoYS0+aG9zdC0+aG9zdF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh2aGEtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlzZXRfYml0KEZDUE9SVF9VUERBVEVfTkVFREVELCAmYmFzZV92aGEtPmRwY19mbGFncyk7CiAJCXFsYTJ4eHhfd2FrZV9kcGMoYmFzZV92aGEpOwogCX0gZWxzZQpAQCAtMzI4MiwxMCArMzI4MiwxMCBAQAogCiAJc2V0X3VzZXJfbmljZShjdXJyZW50LCAtMjApOwogCisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewogCQlERUJVRzMocHJpbnRrKCJxbGEyeDAwOiBEUEMgaGFuZGxlciBzbGVlcGluZ1xuIikpOwogCi0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNjaGVkdWxlKCk7CiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIApAQCAtMzQ1NCw3ICszNDU0LDkgQEAKIAkJcWxhMngwMF9kb19kcGNfYWxsX3ZwcyhiYXNlX3ZoYSk7CiAKIAkJaGEtPmRwY19hY3RpdmUgPSAwOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCX0gLyogRW5kIG9mIHdoaWxlKDEpICovCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCiAJREVCVUcocHJpbnRrKCJzY3NpKCVsZCk6IERQQyBoYW5kbGVyIGV4aXRpbmdcbiIsIGJhc2VfdmhhLT5ob3N0X25vKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZWJ1Zy5jCmluZGV4IDdiMzEwOTMuLmE2YjJkNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZGVidWcuYwpAQCAtMTY3MSw3ICsxNjcxLDcgQEAKIAkJCSAgICB1bnNpZ25lZCBsb25nIGxvbmcgbGJhLCB1bnNpZ25lZCBpbnQgbnVtLCBpbnQgd3JpdGUpCiB7CiAJaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgYmxvY2ssIHJlc3QgPSAwOworCXVuc2lnbmVkIGxvbmcgbG9uZyBibG9jaywgcmVzdCA9IDA7CiAJaW50ICgqZnVuYykoc3RydWN0IHNjc2lfY21uZCAqLCB1bnNpZ25lZCBjaGFyICosIGludCk7CiAKIAlmdW5jID0gd3JpdGUgPyBmZXRjaF90b19kZXZfYnVmZmVyIDogZmlsbF9mcm9tX2Rldl9idWZmZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCmluZGV4IDkwNDVjNTIuLmZiMmJiMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jCkBAIC00NDMsNyArNDQzLDcgQEAKIAkJCQkJJnNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2ZsYWdzKTsKIAkJaWYgKGZsYWdzZXQpCiAJCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCQlfX2Jsa19ydW5fcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBmYWxzZSk7CiAJCWlmIChmbGFnc2V0KQogCQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCQlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKaW5kZXggOTk4YzAxYi4uNWMzY2NmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2ZjLmMKQEAgLTM4MjksNyArMzgyOSw3IEBACiAJCSAgIXRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnJwb3J0LT5ycXN0X3EtPnF1ZXVlX2ZsYWdzKTsKIAlpZiAoZmxhZ3NldCkKIAkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBycG9ydC0+cnFzdF9xKTsKLQlfX2Jsa19ydW5fcXVldWUocnBvcnQtPnJxc3RfcSk7CisJX19ibGtfcnVuX3F1ZXVlKHJwb3J0LT5ycXN0X3EsIGZhbHNlKTsKIAlpZiAoZmxhZ3NldCkKIAkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHJwb3J0LT5ycXN0X3EpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocnBvcnQtPnJxc3RfcS0+cXVldWVfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zaC9pbnRjL2NoaXAuYyBiL2RyaXZlcnMvc2gvaW50Yy9jaGlwLmMKaW5kZXggZGU4ODVhMC4uZjMzZTJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjL2NoaXAuYworKysgYi9kcml2ZXJzL3NoL2ludGMvY2hpcC5jCkBAIC0xNzMsNyArMTczLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBWQUxJRCh4KSAoeCB8IDB4ODApCisjZGVmaW5lIFNFTlNFX1ZBTElEX0ZMQUcgMHg4MAorI2RlZmluZSBWQUxJRCh4KSAoeCB8IFNFTlNFX1ZBTElEX0ZMQUcpCiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGludGNfaXJxX3NlbnNlX3RhYmxlW0lSUV9UWVBFX1NFTlNFX01BU0sgKyAxXSA9IHsKIAlbSVJRX1RZUEVfRURHRV9GQUxMSU5HXSA9IFZBTElEKDApLApAQCAtMjAxLDcgKzIwMiw4IEBACiAJaWhwID0gaW50Y19maW5kX2lycShkLT5zZW5zZSwgZC0+bnJfc2Vuc2UsIGlycSk7CiAJaWYgKGlocCkgewogCQlhZGRyID0gSU5UQ19SRUcoZCwgX0lOVENfQUREUl9FKGlocC0+aGFuZGxlKSwgMCk7Ci0JCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLCB2YWx1ZSk7CisJCWludGNfcmVnX2Zuc1tfSU5UQ19GTihpaHAtPmhhbmRsZSldKGFkZHIsIGlocC0+aGFuZGxlLAorCQkJCQkJICAgIHZhbHVlICYgflNFTlNFX1ZBTElEX0ZMQUcpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvcHhhMnh4X3NwaV9wY2kuYyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGlfcGNpLmMKaW5kZXggMzUxZDhhMzc1Li4xOTc1MmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9weGEyeHhfc3BpX3BjaS5jCisrKyBiL2RyaXZlcnMvc3BpL3B4YTJ4eF9zcGlfcGNpLmMKQEAgLTcsMTAgKzcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9weGEyeHhfc3BpLmg+CiAKLXN0cnVjdCBhd2Vzb21lX3N0cnVjdCB7CitzdHJ1Y3QgY2U0MTAwX2luZm8gewogCXN0cnVjdCBzc3BfZGV2aWNlIHNzcDsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNwaV9wZGV2OwotCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBzcGlfcGRhdGE7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc3BpX3BkZXY7CiB9OwogCiBzdGF0aWMgREVGSU5FX01VVEVYKHNzcF9sb2NrKTsKQEAgLTUxLDIzICs1MCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocHhhX3NzcF9mcmVlKTsKIAotc3RhdGljIHZvaWQgcGxhdF9kZXZfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGF3ZXNvbWVfc3RydWN0ICphcyA9IGNvbnRhaW5lcl9vZihkZXYsCi0JCQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QsIHNwaV9wZGV2LmRldik7Ci0KLQlvZl9kZXZpY2Vfbm9kZV9wdXQoJmFzLT5zcGlfcGRldi5kZXYpOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjZTQxMDBfc3BpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7CiAJaW50IHJldDsKIAlyZXNvdXJjZV9zaXplX3QgcGh5c19iZWc7CiAJcmVzb3VyY2Vfc2l6ZV90IHBoeXNfbGVuOwotCXN0cnVjdCBhd2Vzb21lX3N0cnVjdCAqc3BpX2luZm87CisJc3RydWN0IGNlNDEwMF9pbmZvICpzcGlfaW5mbzsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwotCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciAqc3BpX3BkYXRhOworCXN0cnVjdCBweGEyeHhfc3BpX21hc3RlciBzcGlfcGRhdGE7CiAJc3RydWN0IHNzcF9kZXZpY2UgKnNzcDsKIAogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CkBAIC04NCwzMyArNzUsMzAgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlwZGV2ID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKCJweGEyeHgtc3BpIiwgZGV2LT5kZXZmbik7CiAJc3BpX2luZm8gPSBremFsbG9jKHNpemVvZigqc3BpX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNwaV9pbmZvKSB7CisJaWYgKCFwZGV2IHx8ICFzcGlfaW5mbyApIHsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBlcnJfa3o7CisJCWdvdG8gZXJyX25vbWVtOwogCX0KLQlzc3AgPSAmc3BpX2luZm8tPnNzcDsKLQlwZGV2ID0gJnNwaV9pbmZvLT5zcGlfcGRldjsKLQlzcGlfcGRhdGEgPSAgJnNwaV9pbmZvLT5zcGlfcGRhdGE7CisJbWVtc2V0KCZzcGlfcGRhdGEsIDAsIHNpemVvZihzcGlfcGRhdGEpKTsKKwlzcGlfcGRhdGEubnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOwogCi0JcGRldi0+bmFtZSA9ICJweGEyeHgtc3BpIjsKLQlwZGV2LT5pZCA9IGRldi0+ZGV2Zm47CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsICZzcGlfcGRhdGEsIHNpemVvZihzcGlfcGRhdGEpKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9ub21lbTsKKwogCXBkZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7Ci0JcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmc3BpX2luZm8tPnNwaV9wZGF0YTsKLQogI2lmZGVmIENPTkZJR19PRgogCXBkZXYtPmRldi5vZl9ub2RlID0gZGV2LT5kZXYub2Zfbm9kZTsKICNlbmRpZgotCXBkZXYtPmRldi5yZWxlYXNlID0gcGxhdF9kZXZfcmVsZWFzZTsKLQotCXNwaV9wZGF0YS0+bnVtX2NoaXBzZWxlY3QgPSBkZXYtPmRldmZuOwotCisJc3NwID0gJnNwaV9pbmZvLT5zc3A7CiAJc3NwLT5waHlzX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKTsKIAlzc3AtPm1taW9fYmFzZSA9IGlvcmVtYXAocGh5c19iZWcsIHBoeXNfbGVuKTsKIAlpZiAoIXNzcC0+bW1pb19iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBpb3JlbWFwKCkgcmVnaXN0ZXJzXG4iKTsKIAkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJfcmVtYXA7CisJCWdvdG8gZXJyX25vbWVtOwogCX0KIAlzc3AtPmlycSA9IGRldi0+aXJxOwogCXNzcC0+cG9ydF9pZCA9IHBkZXYtPmlkOwpAQCAtMTIyLDcgKzExMCw3IEBACiAKIAlwY2lfc2V0X2RydmRhdGEoZGV2LCBzcGlfaW5mbyk7CiAKLQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIocGRldik7CisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycl9kZXZfYWRkOwogCkBAIC0xMzUsMjcgKzEyMywyMSBAQAogCW11dGV4X3VubG9jaygmc3NwX2xvY2spOwogCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOwogCi1lcnJfcmVtYXA6Ci0Ja2ZyZWUoc3BpX2luZm8pOwotCi1lcnJfa3o6CitlcnJfbm9tZW06CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBoeXNfYmVnLCBwaHlzX2xlbik7Ci0KKwlwbGF0Zm9ybV9kZXZpY2VfcHV0KHBkZXYpOworCWtmcmVlKHNwaV9pbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2U0MTAwX3NwaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgYXdlc29tZV9zdHJ1Y3QgKnNwaV9pbmZvOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CisJc3RydWN0IGNlNDEwMF9pbmZvICpzcGlfaW5mbzsKIAlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwOwogCiAJc3BpX2luZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKLQogCXNzcCA9ICZzcGlfaW5mby0+c3NwOwotCXBkZXYgPSAmc3BpX2luZm8tPnNwaV9wZGV2OwotCi0JcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIocGRldik7CisJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoc3BpX2luZm8tPnNwaV9wZGV2KTsKIAogCWlvdW5tYXAoc3NwLT5tbWlvX2Jhc2UpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSwKQEAgLTE3MSw3ICsxNTMsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY2U0MTAwX3NwaV9kZXZpY2VzW10gX19kZXZpbml0ZGF0YSA9IHsKLQogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDJlNmEpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zaF9tc2lvZi5jIGIvZHJpdmVycy9zcGkvc3BpX3NoX21zaW9mLmMKaW5kZXggNTZmNjBjOC4uMmM2NjVmY2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYworKysgYi9kcml2ZXJzL3NwaS9zcGlfc2hfbXNpb2YuYwpAQCAtNTA5LDkgKzUwOSwxMSBAQAogCWJ5dGVzX2RvbmUgPSAwOwogCiAJd2hpbGUgKGJ5dGVzX2RvbmUgPCB0LT5sZW4pIHsKKwkJdm9pZCAqcnhfYnVmID0gdC0+cnhfYnVmID8gdC0+cnhfYnVmICsgYnl0ZXNfZG9uZSA6IE5VTEw7CisJCWNvbnN0IHZvaWQgKnR4X2J1ZiA9IHQtPnR4X2J1ZiA/IHQtPnR4X2J1ZiArIGJ5dGVzX2RvbmUgOiBOVUxMOwogCQluID0gc2hfbXNpb2Zfc3BpX3R4cnhfb25jZShwLCB0eF9maWZvLCByeF9maWZvLAotCQkJCQkgICB0LT50eF9idWYgKyBieXRlc19kb25lLAotCQkJCQkgICB0LT5yeF9idWYgKyBieXRlc19kb25lLAorCQkJCQkgICB0eF9idWYsCisJCQkJCSAgIHJ4X2J1ZiwKIAkJCQkJICAgd29yZHMsIGJpdHMpOwogCQlpZiAobiA8IDApCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3BjbWNpYS5jIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKaW5kZXggYzczNDVkYi4uZjg1MzM3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvcGNtY2lhLmMKKysrIGIvZHJpdmVycy9zc2IvcGNtY2lhLmMKQEAgLTczMyw3ICs3MzMsNyBAQAogCiAJLyogRmV0Y2ggdGhlIHZlbmRvciBzcGVjaWZpYyB0dXBsZXMuICovCiAJcmVzID0gcGNtY2lhX2xvb3BfdHVwbGUoYnVzLT5ob3N0X3BjbWNpYSwgU1NCX1BDTUNJQV9DSVMsCi0JCQkJc3NiX3BjbWNpYV9kb19nZXRfaW52YXJpYW50cywgc3Byb20pOworCQkJCXNzYl9wY21jaWFfZG9fZ2V0X2ludmFyaWFudHMsIGl2KTsKIAlpZiAoKHJlcyA9PSAwKSB8fCAocmVzID09IC1FTk9TUEMpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYyBiL2RyaXZlcnMvc3RhZ2luZy9hdGg2a2wvbWlzY2Rydi9hcjNrcHMvYXIza3BzY29uZmlnLmMKaW5kZXggMGUyOThkYi4uMjliOGFiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2F0aDZrbC9taXNjZHJ2L2FyM2twcy9hcjNrcHNjb25maWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYXRoNmtsL21pc2NkcnYvYXIza3BzL2FyM2twc2NvbmZpZy5jCkBAIC0zNjAsOCArMzYwLDggQEAKICAgICAgICAgCXN0YXR1cyA9IDE7CiAgICAgICAgIAlnb3RvIGNvbXBsZXRlOwogICAgIAl9Ci0gICAgICAgIGxlbiA9IChmaXJtd2FyZS0+c2l6ZSA+IE1BWF9CREFERFJfRk9STUFUX0xFTkdUSCk/IE1BWF9CREFERFJfRk9STUFUX0xFTkdUSDogZmlybXdhcmUtPnNpemU7Ci0JbWVtY3B5KGNvbmZpZ19iZGFkZHIsIGZpcm13YXJlLT5kYXRhLGxlbik7CisJbGVuID0gbWluKGZpcm13YXJlLT5zaXplLCBNQVhfQkRBRERSX0ZPUk1BVF9MRU5HVEggLSAxKTsKKwltZW1jcHkoY29uZmlnX2JkYWRkciwgZmlybXdhcmUtPmRhdGEsIGxlbik7CiAJY29uZmlnX2JkYWRkcltsZW5dID0gJ1wwJzsKIAl3cml0ZV9iZGFkZHIoaGRldixjb25maWdfYmRhZGRyLEJEQUREUl9UWVBFX1NUUklORyk7CiAgICAgICAgCUFfUkVMRUFTRV9GSVJNV0FSRShmaXJtd2FyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xfbWFjODAyMTEuYwppbmRleCBiZGQ2MjlkLi5jZDgzOTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bF9tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsX21hYzgwMjExLmMKQEAgLTIwOSwxMSArMjA5LDggQEAKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBody0+cHJpdjsKIAlBU1NFUlQod2wpOwogCVdMX0xPQ0sod2wpOwotCXdsX2Rvd24od2wpOwogCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhodyk7CiAJV0xfVU5MT0NLKHdsKTsKLQotCXJldHVybjsKIH0KIAogc3RhdGljIGludApAQCAtMjQ2LDcgKzI0MywxNCBAQAogc3RhdGljIHZvaWQKIHdsX29wc19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewotCXJldHVybjsKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2w7CisKKwl3bCA9IEhXX1RPX1dMKGh3KTsKKworCS8qIHB1dCBkcml2ZXIgaW4gZG93biBzdGF0ZSAqLworCVdMX0xPQ0sod2wpOworCXdsX2Rvd24od2wpOworCVdMX1VOTE9DSyh3bCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTI1OSw5ICsyNjMsNyBAQAogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTkw4MDIxMV9DSEFOX0hUMjA6CiAJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6Ci0JCVdMX0xPQ0sod2wpOwogCQllcnIgPSB3bGNfc2V0KHdsLT53bGMsIFdMQ19TRVRfQ0hBTk5FTCwgY2hhbi0+aHdfdmFsdWUpOwotCQlXTF9VTkxPQ0sod2wpOwogCQlicmVhazsKIAljYXNlIE5MODAyMTFfQ0hBTl9IVDQwTUlOVVM6CiAJY2FzZSBOTDgwMjExX0NIQU5fSFQ0MFBMVVM6CkBAIC0yODEsNiArMjgzLDcgQEAKIAlpbnQgZXJyID0gMDsKIAlpbnQgbmV3X2ludDsKIAorCVdMX0xPQ0sod2wpOwogCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTCkgewogCQlXTF9OT05FKCIlczogU2V0dGluZyBsaXN0ZW4gaW50ZXJ2YWwgdG8gJWRcbiIsCiAJCQlfX2Z1bmNfXywgY29uZi0+bGlzdGVuX2ludGVydmFsKTsKQEAgLTMzNyw2ICszNDAsNyBAQAogCX0KIAogIGNvbmZpZ19vdXQ6CisJV0xfVU5MT0NLKHdsKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00NTUsMTMgKzQ1OSwyMSBAQAogCiBzdGF0aWMgdm9pZCB3bF9vcHNfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKKwlzdHJ1Y3Qgd2xfaW5mbyAqd2wgPSBody0+cHJpdjsKIAlXTF9OT05FKCJTY2FuIFN0YXJ0XG4iKTsKKwlXTF9MT0NLKHdsKTsKKwl3bGNfc2Nhbl9zdGFydCh3bC0+d2xjKTsKKwlXTF9VTkxPQ0sod2wpOwogCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgd2xfb3BzX3N3X3NjYW5fY29tcGxldGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CisJc3RydWN0IHdsX2luZm8gKndsID0gaHctPnByaXY7CiAJV0xfTk9ORSgiU2NhbiBDb21wbGV0ZVxuIik7CisJV0xfTE9DSyh3bCk7CisJd2xjX3NjYW5fc3RvcCh3bC0+d2xjKTsKKwlXTF9VTkxPQ0sod2wpOwogCXJldHVybjsKIH0KIApAQCAtNzc5LDcgKzc5MSw3IEBACiAJd2xfZm91bmQrKzsKIAlyZXR1cm4gd2w7CiAKLSBmYWlsOgorZmFpbDoKIAl3bF9mcmVlKHdsKTsKIGZhaWwxOgogCXJldHVybiBOVUxMOwpAQCAtMTA5MCw3ICsxMTAyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIExJTlVYU1RBX1BTCiBzdGF0aWMgaW50IHdsX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgd2xfaW5mbyAqd2w7CkBAIC0xMTA1LDExICsxMTE2LDEyIEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCS8qIG9ubHkgbmVlZCB0byBmbGFnIGh3IGlzIGRvd24gZm9yIHByb3BlciByZXN1bWUgKi8KIAlXTF9MT0NLKHdsKTsKLQl3bF9kb3duKHdsKTsKIAl3bC0+cHViLT5od191cCA9IGZhbHNlOwogCVdMX1VOTE9DSyh3bCk7Ci0JcGNpX3NhdmVfc3RhdGUocGRldiwgd2wtPnBjaV9wc3N0YXRlKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlyZXR1cm4gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogfQpAQCAtMTEzMyw3ICsxMTQ1LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JcGNpX3Jlc3RvcmVfc3RhdGUocGRldiwgd2wtPnBjaV9wc3N0YXRlKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCkBAIC0xMTQ1LDEzICsxMTU3LDEyIEBACiAJaWYgKCh2YWwgJiAweDAwMDBmZjAwKSAhPSAwKQogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsIHZhbCAmIDB4ZmZmZjAwZmYpOwogCi0JV0xfTE9DSyh3bCk7Ci0JZXJyID0gd2xfdXAod2wpOwotCVdMX1VOTE9DSyh3bCk7Ci0KKwkvKgorCSogIGRvbmUuIGRyaXZlciB3aWxsIGJlIHB1dCBpbiB1cCBzdGF0ZQorCSogIGluIHdsX29wc19hZGRfaW50ZXJmYWNlKCkgY2FsbC4KKwkqLwogCXJldHVybiBlcnI7CiB9Ci0jZW5kaWYJCQkJLyogTElOVVhTVEFfUFMgKi8KIAogc3RhdGljIHZvaWQgd2xfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMTE4NCwxNCArMTE5NSwxMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgd2xfcGNpX2RyaXZlciA9IHsKLSAubmFtZSAgPSAiYnJjbTgwMjExIiwKLSAucHJvYmUgPSB3bF9wY2lfcHJvYmUsCi0jaWZkZWYgTElOVVhTVEFfUFMKLSAuc3VzcGVuZCA9IHdsX3N1c3BlbmQsCi0gLnJlc3VtZSAgPSB3bF9yZXN1bWUsCi0jZW5kaWYJCQkJLyogTElOVVhTVEFfUFMgKi8KLSAucmVtb3ZlICAgPSBfX2RldmV4aXRfcCh3bF9yZW1vdmUpLAotIC5pZF90YWJsZSA9IHdsX2lkX3RhYmxlLAorCS5uYW1lID0gImJyY204MDIxMSIsCisJLnByb2JlID0gd2xfcGNpX3Byb2JlLAorCS5zdXNwZW5kID0gd2xfc3VzcGVuZCwKKwkucmVzdW1lID0gd2xfcmVzdW1lLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bF9yZW1vdmUpLAorCS5pZF90YWJsZSA9IHdsX2lkX3RhYmxlLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfbWFjODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19tYWM4MDIxMS5jCmluZGV4IDFkNWQwMWEuLmUzN2U4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19tYWM4MDIxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19tYWM4MDIxMS5jCkBAIC01MTI2LDcgKzUxMjYsNiBAQAogCWZpZm8gPSBwcmlvMmZpZm9bcHJpb107CiAKIAlBU1NFUlQoKHVpbnQpIHNrYl9oZWFkcm9vbShzZHUpID49IFRYT0ZGKTsKLQlBU1NFUlQoIShzZHUtPmNsb25lZCkpOwogCUFTU0VSVCghKHNkdS0+bmV4dCkpOwogCUFTU0VSVCghKHNkdS0+cHJldikpOwogCUFTU0VSVChmaWZvIDwgTkZJRk8pOwpAQCAtODQ2MiwzICs4NDYxLDE2IEBACiAKIAlrZnJlZShxaSk7CiB9CisKKy8qCisgKiBGbGFnICdzY2FuIGluIHByb2dyZXNzJyB0byB3aXRob2xkIGR5bmFtaWMgcGh5IGNhbGlicmF0aW9uCisgKi8KK3ZvaWQgd2xjX3NjYW5fc3RhcnQoc3RydWN0IHdsY19pbmZvICp3bGMpCit7CisJd2xjX3BoeV9ob2xkX3VwZCh3bGMtPmJhbmQtPnBpLCBQSFlfSE9MRF9GT1JfU0NBTiwgdHJ1ZSk7Cit9CisKK3ZvaWQgd2xjX3NjYW5fc3RvcChzdHJ1Y3Qgd2xjX2luZm8gKndsYykKK3sKKwl3bGNfcGh5X2hvbGRfdXBkKHdsYy0+YmFuZC0+cGksIFBIWV9IT0xEX0ZPUl9TQ0FOLCBmYWxzZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmggYi9kcml2ZXJzL3N0YWdpbmcvYnJjbTgwMjExL3N5cy93bGNfcHViLmgKaW5kZXggMTQ2YTY5MC4uYWZmNDEzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JyY204MDIxMS9zeXMvd2xjX3B1Yi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9icmNtODAyMTEvc3lzL3dsY19wdWIuaApAQCAtNTcwLDYgKzU3MCw4IEBACiBleHRlcm4gdTE2IHdsY19yYXRlX3NobV9vZmZzZXQoc3RydWN0IHdsY19pbmZvICp3bGMsIHU4IHJhdGUpOwogZXh0ZXJuIHUzMiB3bGNfZ2V0X3JzcGVjX2hpc3Rvcnkoc3RydWN0IHdsY19ic3NjZmcgKmNmZyk7CiBleHRlcm4gdTMyIHdsY19nZXRfY3VycmVudF9oaWdoZXN0X3JhdGUoc3RydWN0IHdsY19ic3NjZmcgKmNmZyk7CitleHRlcm4gdm9pZCB3bGNfc2Nhbl9zdGFydChzdHJ1Y3Qgd2xjX2luZm8gKndsYyk7CitleHRlcm4gdm9pZCB3bGNfc2Nhbl9zdG9wKHN0cnVjdCB3bGNfaW5mbyAqd2xjKTsKIAogc3RhdGljIGlubGluZSBpbnQgd2xjX2lvdmFyX2dldHVpbnQoc3RydWN0IHdsY19pbmZvICp3bGMsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJICAgIHVpbnQgKmFyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvS2NvbmZpZwppbmRleCBhYWQ0NzMyLi4xNTAyZDgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9LY29uZmlnCkBAIC00MzksNiArNDM5LDcgQEAKIGNvbmZpZyBDT01FRElfTklfQVRNSU8KIAl0cmlzdGF0ZSAiTkkgQVQtTUlPIEUgc2VyaWVzIElTQS1QTlAgY2FyZCBzdXBwb3J0IgogCWRlcGVuZHMgb24gSVNBUE5QICYmIENPTUVESV9OSV9USU8gJiYgQ09NRURJX05JX0NPTU1PTgorCXNlbGVjdCBDT01FRElfODI1NQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBBVC1NSU8gRSBzZXJpZXMgY2FyZHMKQEAgLTEwNDAsNiArMTA0MSw4IEBACiBjb25maWcgQ09NRURJX05JX1BDSU1JTwogCXRyaXN0YXRlICJOSSBQQ0ktTUlPLUUgc2VyaWVzIGFuZCBNIHNlcmllcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gQ09NRURJX05JX1RJTyAmJiBDT01FRElfTklfQ09NTU9OCisJc2VsZWN0IENPTUVESV84MjU1CisJc2VsZWN0IENPTUVESV9GQwogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktTUlPLUUgc2VyaWVzIGFuZCBNIHNlcmllcwpAQCAtMTE2NCw2ICsxMTY3LDcgQEAKIGNvbmZpZyBDT01FRElfTklfTUlPX0NTCiAJdHJpc3RhdGUgIk5JIERBUUNhcmQgRSBzZXJpZXMgUENNQ0lBIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDT01FRElfTklfVElPICYmIENPTUVESV9OSV9DT01NT04KKwlzZWxlY3QgQ09NRURJXzgyNTUKIAlzZWxlY3QgQ09NRURJX0ZDCiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQpAQCAtMTI2OCw3ICsxMjcyLDYgQEAKIGNvbmZpZyBDT01FRElfTklfVElPCiAJdHJpc3RhdGUgIk5JIGdlbmVyYWwgcHVycG9zZSBjb3VudGVyIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDT01FRElfTUlURQotCXNlbGVjdCBDT01FRElfODI1NQogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBOYXRpb25hbCBJbnN0cnVtZW50cyBnZW5lcmFsIHB1cnBvc2UgY291bnRlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21pdGUuYwppbmRleCBjZDI1YjI0Li5mZDI3NGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbWl0ZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9taXRlLmMKQEAgLTYxLDggKzYxLDYgQEAKICNkZWZpbmUgUENJX0RBUV9TSVpFCQk0MDk2CiAjZGVmaW5lIFBDSV9EQVFfU0laRV82NjBYICAgICAgIDgxOTIKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCiBzdHJ1Y3QgbWl0ZV9zdHJ1Y3QgKm1pdGVfZGV2aWNlczsKIEVYUE9SVF9TWU1CT0wobWl0ZV9kZXZpY2VzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NTI3LmMKaW5kZXggMTRlNzE2ZS4uNTQ3NDFjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1MjcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjUyNy5jCkBAIC01MjcsMyArNTI3LDcgQEAKIAogbW9kdWxlX2luaXQoZHJpdmVyX25pNjUyN19pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChkcml2ZXJfbmk2NTI3X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggOGI4ZTJhYS4uNDAzZmMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC04NzEsMyArODcxLDcgQEAKIAogbW9kdWxlX2luaXQoZHJpdmVyX25pXzY1eHhfaW5pdF9tb2R1bGUpOwogbW9kdWxlX2V4aXQoZHJpdmVyX25pXzY1eHhfY2xlYW51cF9tb2R1bGUpOworCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYwppbmRleCA2NjEyYjA4Li5jYTJhZWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKQEAgLTE0MjEsMyArMTQyMSw3IEBACiAJfTsKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKaW5kZXggZTlmMDM0ZS4uZDhkOTFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCkBAIC0zODQsMyArMzg0LDcgQEAKIAltaXRlX2xpc3RfZGV2aWNlcygpOwogCXJldHVybiAtRUlPOwogfQorCitNT0RVTEVfQVVUSE9SKCJDb21lZGkgaHR0cDovL3d3dy5jb21lZGkub3JnIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbWVkaSBsb3ctbGV2ZWwgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCmluZGV4IDRkMTg2OGQuLjA3MjhjM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCkBAIC01NzUsNyArNTc1LDggQEAKIAkvKiBncmFiIG91ciBJUlEgKi8KIAlpZiAoaXJxKSB7CiAJCWlzcl9mbGFncyA9IDA7Ci0JCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNpX2J1c3R5cGUpCisJCWlmICh0aGlzYm9hcmQtPmJ1c3R5cGUgPT0gcGNpX2J1c3R5cGUKKwkJICAgIHx8IHRoaXNib2FyZC0+YnVzdHlwZSA9PSBwY21jaWFfYnVzdHlwZSkKIAkJCWlzcl9mbGFncyB8PSBJUlFGX1NIQVJFRDsKIAkJaWYgKHJlcXVlc3RfaXJxKGlycSwgbGFicGNfaW50ZXJydXB0LCBpc3JfZmxhZ3MsCiAJCQkJZHJpdmVyX2xhYnBjLmRyaXZlcl9uYW1lLCBkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKaW5kZXggODRhMTVjMy4uMDA1ZDJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwpAQCAtMTM1NCwzICsxMzU0LDcgQEAKIAogbW9kdWxlX2luaXQoZHJpdmVyX3BjaWRpb19pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChkcml2ZXJfcGNpZGlvX2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaW1pby5jCmluZGV4IDIzYTM4MTIuLjkxNDhhYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2ltaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpbWlvLmMKQEAgLTE4NTMsMyArMTg1Myw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKworTU9EVUxFX0FVVEhPUigiQ29tZWRpIGh0dHA6Ly93d3cuY29tZWRpLm9yZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDb21lZGkgbG93LWxldmVsIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggYjNkMDVmYy4uNGZiODA5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC0zNjgsNiArMzY4LDcgQEAKIAkJYmxrZGV2LT5nZC0+Zmlyc3RfbWlub3IgPSAwOwogCWJsa2Rldi0+Z2QtPmZvcHMgPSAmYmxvY2tfb3BzOwogCWJsa2Rldi0+Z2QtPnByaXZhdGVfZGF0YSA9IGJsa2RldjsKKwlibGtkZXYtPmdkLT5kcml2ZXJmc19kZXYgPSAmKGJsa2Rldi0+ZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAlzcHJpbnRmKGJsa2Rldi0+Z2QtPmRpc2tfbmFtZSwgImhkJWMiLCAnYScgKyBkZXZudW0pOwogCiAJYmxrdnNjX2RvX2lucXVpcnkoYmxrZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2MuYwppbmRleCBkZjljZDEzLi4wZWRiZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzYy5jCkBAIC0xMjc5LDcgKzEyNzksNyBAQAogCS8qIEFTU0VSVChkZXZpY2UpOyAqLwogCiAJcGFja2V0ID0ga3phbGxvYyhORVRWU0NfUEFDS0VUX1NJWkUgKiBzaXplb2YodW5zaWduZWQgY2hhciksCi0JCQkgR0ZQX0tFUk5FTCk7CisJCQkgR0ZQX0FUT01JQyk7CiAJaWYgKCFwYWNrZXQpCiAJCXJldHVybjsKIAlidWZmZXIgPSBwYWNrZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwppbmRleCAwMTQ3YjQwLi5iNDFjOTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKQEAgLTIzNiw2ICsyMzYsNyBAQAogCWlmIChzdGF0dXMgPT0gMSkgewogCQluZXRpZl9jYXJyaWVyX29uKG5ldCk7CiAJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKKwkJbmV0aWZfbm90aWZ5X3BlZXJzKG5ldCk7CiAJfSBlbHNlIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmV0KTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwpAQCAtMzU4LDcgKzM1OSw2IEBACiAKIAkvKiBTZXQgaW5pdGlhbCBzdGF0ZSAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldCk7Ci0JbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwogCiAJbmV0X2RldmljZV9jdHggPSBuZXRkZXZfcHJpdihuZXQpOwogCW5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4ID0gZGV2aWNlX2N0eDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc0NzZfY29yZS5jCmluZGV4IGRlYjY4YzguLmI4YjU0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzQ3Nl9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3NDc2X2NvcmUuYwpAQCAtNjgsNyArNjgsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3NjYWxlLCBTX0lSVUdPLCBhZDc0NzZfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc4ODdfY29yZS5jCmluZGV4IDY4NTkwODkuLjVkODVlZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzg4N19jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3ODg3X2NvcmUuYwpAQCAtNjgsNyArNjgsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+aW50X3ZyZWZfbXYgKiAxMDAwKSA+PiBzdC0+Y2hpcF9pbmZvLT5iaXRzOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWQuJWRcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDNkXG4iLCBzY2FsZV91diAvIDEwMDAsIHNjYWxlX3V2ICUgMTAwMCk7CiB9CiBzdGF0aWMgSUlPX0RFVklDRV9BVFRSKGluX3NjYWxlLCBTX0lSVUdPLCBhZDc4ODdfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2FkYy9hZDc5OXhfY29yZS5jCmluZGV4IDYzMDlkNTIuLjg5Y2NmMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vYWRjL2FkNzk5eF9jb3JlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9hZGMvYWQ3OTl4X2NvcmUuYwpAQCAtNDMyLDcgKzQzMiw3IEBACiAJLyogQ29ycmVzcG9uZHMgdG8gVnJlZiAvIDJeKGJpdHMpICovCiAJdW5zaWduZWQgaW50IHNjYWxlX3V2ID0gKHN0LT5pbnRfdnJlZl9tdiAqIDEwMDApID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKIH0KIAogc3RhdGljIElJT19ERVZJQ0VfQVRUUihpbl9zY2FsZSwgU19JUlVHTywgYWQ3OTl4X3Nob3dfc2NhbGUsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2lpby9kYWMvYWQ1NDQ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYwppbmRleCBlMzM4N2NkLi4wZjg3ZWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2RhYy9hZDU0NDYuYwpAQCAtODcsNyArODcsNyBAQAogCS8qIENvcnJlc3BvbmRzIHRvIFZyZWYgLyAyXihiaXRzKSAqLwogCXVuc2lnbmVkIGludCBzY2FsZV91diA9IChzdC0+dnJlZl9tdiAqIDEwMDApID4+IHN0LT5jaGlwX2luZm8tPmJpdHM7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lZFxuIiwgc2NhbGVfdXYgLyAxMDAwLCBzY2FsZV91diAlIDEwMDApOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkLiUwM2RcbiIsIHNjYWxlX3V2IC8gMTAwMCwgc2NhbGVfdXYgJSAxMDAwKTsKIH0KIHN0YXRpYyBJSU9fREVWSUNFX0FUVFIob3V0X3NjYWxlLCBTX0lSVUdPLCBhZDU0NDZfc2hvd19zY2FsZSwgTlVMTCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggZTM4ZTg5ZC4uZTJmNmQ2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKQEAgLTg3NCw3ICs4NzQsMTAgQEAKIAkJc2NfYWNjZXNzWzNdLnJlZ19hZGRyID0gMHgxMDk7CiAJCXNjX2FjY2Vzc1szXS5tYXNrID0gTUFTSzY7CiAJCXNjX2FjY2Vzc1szXS52YWx1ZSA9IDB4MDA7Ci0JCW51bV92YWwgPSA0OworCQlzY19hY2Nlc3NbNF0ucmVnX2FkZHIgPSAweDEwNDsKKwkJc2NfYWNjZXNzWzRdLnZhbHVlID0gMHgzQzsKKwkJc2NfYWNjZXNzWzRdLm1hc2sgPSAweGZmOworCQludW1fdmFsID0gNTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMgYi9kcml2ZXJzL3N0YWdpbmcvbGlyYy9saXJjX3ppbG9nLmMKaW5kZXggM2ZlNWY0MS4uMGFhZDBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2xpcmMvbGlyY196aWxvZy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9saXJjL2xpcmNfemlsb2cuYwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAvKiBzZW5kIGJvb3QgZGF0YSB0byB0aGUgSVIgVFggZGV2aWNlICovCiBzdGF0aWMgaW50IHNlbmRfYm9vdF9kYXRhKHN0cnVjdCBJUl90eCAqdHgpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCXVuc2lnbmVkIGNoYXIgYnVmWzRdOwogCiAJLyogc2VuZCB0aGUgYm9vdCBibG9jayAqLwpAQCAtNTAzLDcgKzUwMyw3IEBACiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwogCi0JLyoga2ljayBpdCBvZmY/ICovCisJLyogSGl0IHRoZSBnbyBidXR0b24gdG8gYWN0aXZhdGUgdGhlIG5ldyBib290IGRhdGEgKi8KIAlidWZbMF0gPSAweDAwOwogCWJ1ZlsxXSA9IDB4MjA7CiAJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKHR4LT5jLCBidWYsIDIpOwpAQCAtNTExLDcgKzUxMSwxOSBAQAogCQl6aWxvZ19lcnJvcigiaTJjX21hc3Rlcl9zZW5kIGZhaWxlZCB3aXRoICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IC1FRkFVTFQ7CiAJfQotCXJldCA9IGkyY19tYXN0ZXJfc2VuZCh0eC0+YywgYnVmLCAxKTsKKworCS8qCisJICogV2FpdCBmb3Igemlsb2cgdG8gc2V0dGxlIGFmdGVyIGhpdHRpbmcgZ28gcG9zdCBib290IGJsb2NrIHVwbG9hZC4KKwkgKiBXaXRob3V0IHRoaXMgZGVsYXksIHRoZSBIRC1QVlIgYW5kIEhWUi0xOTUwIGJvdGggcmV0dXJuIGFuIC1FSU8KKwkgKiB1cG9uIGF0dGVtcHRpbmcgdG8gZ2V0IGZpcm13YXJlIHJldmlzaW9uLCBhbmQgdHggcHJvYmUgdGh1cyBmYWlscy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKIAlpZiAocmV0ICE9IDEpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwpAQCAtNTIzLDggKzUzNSw4IEBACiAJCXppbG9nX2Vycm9yKCJpMmNfbWFzdGVyX3JlY3YgZmFpbGVkIHdpdGggJWRcbiIsIHJldCk7CiAJCXJldHVybiAwOwogCX0KLQlpZiAoYnVmWzBdICE9IDB4ODApIHsKLQkJemlsb2dfZXJyb3IoInVuZXhwZWN0ZWQgSVIgVFggcmVzcG9uc2U6ICUwMnhcbiIsIGJ1ZlswXSk7CisJaWYgKChidWZbMF0gIT0gMHg4MCkgJiYgKGJ1ZlswXSAhPSAweGEwKSkgeworCQl6aWxvZ19lcnJvcigidW5leHBlY3RlZCBJUiBUWCBpbml0IHJlc3BvbnNlOiAlMDJ4XG4iLCBidWZbMF0pOwogCQlyZXR1cm4gMDsKIAl9CiAJemlsb2dfbm90aWZ5KCJaaWxvZy9IYXVwcGF1Z2UgSVIgYmxhc3RlciBmaXJtd2FyZSB2ZXJzaW9uICIKQEAgLTgyNyw3ICs4MzksMTUgQEAKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwogCX0KLQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisKKwkvKiBHaXZlIHRoZSB6OCBhIG1vbWVudCB0byBwcm9jZXNzIGRhdGEgYmxvY2sgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQodHgtPmMsIGJ1ZiwgMSk7CisJCWlmIChyZXQgPT0gMSkKKwkJCWJyZWFrOworCQl1ZGVsYXkoMTAwKTsKKwl9CisKIAlpZiAocmV0ICE9IDEpIHsKIAkJemlsb2dfZXJyb3IoImkyY19tYXN0ZXJfc2VuZCBmYWlsZWQgd2l0aCAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAtRUZBVUxUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tc20vbXNtX2ZiLmMKaW5kZXggMjNmYTA0OS4uYTJmMjlkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21zbS9tc21fZmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbXNtL21zbV9mYi5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIAlpZiAoKCFtZmQpIHx8IChtZmQtPmtleSAhPSBNRkRfS0VZKSkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQobWZkLT5mYmksIDEpOwogCiAJcmV0ID0gbXNtX2ZiX3N1c3BlbmRfc3ViKG1mZCk7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAkJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CiAJfQogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KICNlbHNlCkBAIC00MzEsMTEgKzQzMSwxMSBAQAogCWlmICgoIW1mZCkgfHwgKG1mZC0+a2V5ICE9IE1GRF9LRVkpKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSBtc21fZmJfcmVzdW1lX3N1YihtZmQpOwogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAJZmJfc2V0X3N1c3BlbmQobWZkLT5mYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbi5jCmluZGV4IDlmMjZkYzkuLjU2YTI4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb24uYwpAQCAtMzczLDE3ICszNzMsMTcgQEAKIAkJICoKIAkJICogRm9yIG5vdywgd2UganVzdCBob3BlLi4KIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlnbm9yZV9mYl9ldmVudHMgPSAxOwogCQlpZiAoZmJfYmxhbmsoZmJpbmZvLCBGQl9CTEFOS19VTkJMQU5LKSkgewogCQkJaWdub3JlX2ZiX2V2ZW50cyA9IDA7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246ICBGYWlsZWQgdG8gZW50ZXIgQ1BVIG1vZGVcbiIpOwogCQkJZGNvbl9wZW5kaW5nID0gRENPTl9TT1VSQ0VfRENPTjsKIAkJCXJldHVybjsKIAkJfQogCQlpZ25vcmVfZmJfZXZlbnRzID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiAJCS8qIEFuZCB0dXJuIG9mZiB0aGUgRENPTiAqLwogCQlwZGF0YS0+c2V0X2Rjb25sb2FkKDEpOwpAQCAtNDM1LDEyICs0MzUsMTIgQEAKIAkJCX0KIAkJfQogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlnbm9yZV9mYl9ldmVudHMgPSAxOwogCQlpZiAoZmJfYmxhbmsoZmJpbmZvLCBGQl9CTEFOS19QT1dFUkRPV04pKQogCQkJcHJpbnRrKEtFUk5fRVJSICJvbHBjLWRjb246ICBjb3VsZG4ndCBibGFuayBmYiFcbiIpOwogCQlpZ25vcmVfZmJfZXZlbnRzID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCiAJCXByaW50ayhLRVJOX0lORk8gIm9scGMtZGNvbjogVGhlIERDT04gaGFzIGNvbnRyb2xcbiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbWFpbl9kZXYuYwppbmRleCA3MDE1NjFkLi4yMzZkZDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC00ODQsOCArNDg0LDYgQEAKIAluZXRfZGV2LT5tbF9wcml2ID0gKHZvaWQgKilwQWQ7CiAJcEFkLT5uZXRfZGV2ID0gbmV0X2RldjsKIAotCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7Ci0KIAlyZXR1cm4gbmV0X2RldjsKIAogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKaW5kZXggZWU2OGQ1MS4uMzIyYmY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDE2Zil9LAkvKiBNZWxDby4sSW5jLiBXTEktVUMtRzMwMU4gKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MCl9LAkvKiBMaW5rc3lzIFdVU0IxMDAgKi8KIAl7VVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MSl9LAkvKiBMaW5rc3lzIFdVU0I2MDBOICovCisJe1VTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzgpfSwJLyogTGlua3N5cyBXVVNCMTAwdjIgKi8KIAl7VVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCl9LAkvKiBCdWZmYWxvIFdMSS1VQy1HMzAwTiAqLwogCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4MTVjKX0sCS8qIEJlbGtpbiBGNUQ4MDUzICovCiAJe1VTQl9ERVZJQ0UoMHgxMDBELCAweDkwMzEpfSwJLyogTW90b3JvbGEgMjc3MCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL2hhbF9pbml0LmMKaW5kZXggMzIwODhhNi4uODRiZTM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvaGFsX2luaXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi9oYWxfaW5pdC5jCkBAIC0xMjgsMTIgKzEyOCwxMyBAQAogCXU4ICpwdG1wY2hhciA9IE5VTEwsICpwcGF5bG9hZCwgKnB0cjsKIAlzdHJ1Y3QgdHhfZGVzYyAqcHR4X2Rlc2M7CiAJdTMyIHR4ZHNjcF9zeiA9IHNpemVvZihzdHJ1Y3QgdHhfZGVzYyk7CisJdTggcmV0ID0gX0ZBSUw7CiAKIAl1bGZpbGVsZW5ndGggPSBydGw4NzF4X29wZW5fZncocGFkYXB0ZXIsICZwaGZ3ZmlsZV9oZGwsICZwbWFwcGVkZncpOwogCWlmIChwbWFwcGVkZncgJiYgKHVsZmlsZWxlbmd0aCA+IDApKSB7CiAJCXVwZGF0ZV9md2hkcigmZndoZHIsIHBtYXBwZWRmdyk7CiAJCWlmIChjaGtfZndoZHIoJmZ3aGRyLCB1bGZpbGVsZW5ndGgpID09IF9GQUlMKQotCQkJZ290byBleGl0X2ZhaWw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAkJZmlsbF9md3ByaXYocGFkYXB0ZXIsICZmd2hkci5md3ByaXYpOwogCQkvKiBmaXJtd2FyZSBjaGVjayBvayAqLwogCQltYXhsZW4gPSAoZndoZHIuaW1nX0lNRU1fc2l6ZSA+IGZ3aGRyLmltZ19TUkFNX3NpemUpID8KQEAgLTE0MSw3ICsxNDIsNyBAQAogCQltYXhsZW4gKz0gdHhkc2NwX3N6OwogCQlwdG1wY2hhciA9IF9tYWxsb2MobWF4bGVuICsgRldCVUZGX0FMSUdOX1NaKTsKIAkJaWYgKHB0bXBjaGFyID09IE5VTEwpCi0JCQlyZXR1cm4gX0ZBSUw7CisJCQlnb3RvIGZpcm13YXJlX3JlbDsKIAogCQlwdHhfZGVzYyA9IChzdHJ1Y3QgdHhfZGVzYyAqKShwdG1wY2hhciArIEZXQlVGRl9BTElHTl9TWiAtCiAJCQkgICAgKChhZGRyX3QpKHB0bXBjaGFyKSAmIChGV0JVRkZfQUxJR05fU1ogLSAxKSkpOwpAQCAtMjczLDExICsyNzQsMTMgQEAKIAkJCWdvdG8gZXhpdF9mYWlsOwogCX0gZWxzZQogCQlnb3RvIGV4aXRfZmFpbDsKLQlyZXR1cm4gX1NVQ0NFU1M7CisJcmV0ID0gX1NVQ0NFU1M7CiAKIGV4aXRfZmFpbDoKIAlrZnJlZShwdG1wY2hhcik7Ci0JcmV0dXJuIF9GQUlMOworZmlybXdhcmVfcmVsOgorCXJlbGVhc2VfZmlybXdhcmUoKHN0cnVjdCBmaXJtd2FyZSAqKXBoZndmaWxlX2hkbCk7CisJcmV0dXJuIHJldDsKIH0KIAogdWludCBydGw4NzEyX2hhbF9pbml0KHN0cnVjdCBfYWRhcHRlciAqcGFkYXB0ZXIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDg3MTIvdXNiX2ludGYuYwppbmRleCBhNjkyZWU4Li4yMWNlMmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODcxMi91c2JfaW50Zi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4NzEyL3VzYl9pbnRmLmMKQEAgLTQ3LDU0ICs0NywxMjMgQEAKIHN0YXRpYyB2b2lkIHI4NzF4dV9kZXZfcmVtb3ZlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpwdXNiX2ludGYpOwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODcxeF91c2JfaWRfdGJsW10gPSB7Ci0JLyo5MlNVCi0JICogUmVhbHRlayAqLwotCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTcxKX0sCi0Je1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzIpfSwKKworLyogUlRMODE4OFNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxNzMpfSwKLQl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODE3NCl9LAogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4NzEyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDg3MTMpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4QzUxMil9LAotCS8qIEFib2NvbSAgKi8KKwkvKiBBYm9jb20gKi8KIAl7VVNCX0RFVklDRSgweDA3QjgsIDB4ODE4OCl9LAotCS8qIENvcmVnYSAqLwotCXtVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQ3KX0sCi0JLyogRGxpbmsgKi8KLQl7VVNCX0RFVklDRSgweDA3ZDEsIDB4MzMwMyl9LAotCXtVU0JfREVWSUNFKDB4MDdkMSwgMHgzMzAyKX0sCi0Je1VTQl9ERVZJQ0UoMHgwN2QxLCAweDMzMDApfSwKLQkvKiBEbGluayBmb3IgU2t5d29ydGggKi8KLQl7VVNCX0RFVklDRSgweDE0YjIsIDB4MzMwMCl9LAotCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAxKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDIpfSwKLQkvKiBFbkdlbml1cyAqLwotCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjAzKX0sCi0Je1VTQl9ERVZJQ0UoMHgxNzQwLCAweDk2MDUpfSwKKwkvKiBBU1VTICovCisJe1VTQl9ERVZJQ0UoMHgwQjA1LCAweDE3ODYpfSwKKwl7VVNCX0RFVklDRSgweDBCMDUsIDB4MTc5MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogQmVsa2luICovCi0Je1VTQl9ERVZJQ0UoMHgwNTBkLCAweDgxNUYpfSwKLQl7VVNCX0RFVklDRSgweDA1MGQsIDB4OTQ1QSl9LAotCXtVU0JfREVWSUNFKDB4MDUwZCwgMHg4NDVBKX0sCi0JLyogR3VpbGxlbW90ICovCi0Je1VTQl9ERVZJQ0UoMHgwNmY4LCAweGUwMzEpfSwKKwl7VVNCX0RFVklDRSgweDA1MEQsIDB4OTQ1QSl9LAorCS8qIENvcmVnYSAqLworCXtVU0JfREVWSUNFKDB4MDdBQSwgMHgwMDQ3KX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgyMDAxLCAweDMzMDYpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJLyogRWRpbWF4ICovCiAJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTEpfSwKLQl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYxMil9LAotCXtVU0JfREVWSUNFKDB4NzM5MiwgMHg3NjIyKX0sCisJLyogRW5HZW5pdXMgKi8KKwl7VVNCX0RFVklDRSgweDE3NDAsIDB4OTYwMyl9LAorCS8qIEhhd2tpbmcgKi8KKwl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAorCS8qIEhlcmN1bGVzICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzQpfSwKKwl7VVNCX0RFVklDRSgweDA2RjgsIDB4RTAzMil9LAorCS8qIExvZ2l0ZWMgKi8KKwl7VVNCX0RFVklDRSgweDA3ODksIDB4MDE2Nyl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhBQjI4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweEVEMTYpfSwKIAkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTcpfSwKIAl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0NSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDU5KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0Qil9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDYzKX0sCisJLyogU3dlZXggKi8KKwl7VVNCX0RFVklDRSgweDE3N0YsIDB4MDE1NCl9LAorCS8qIFRoaW5rd2FyZSAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg1MDc3KX0sCisJLyogVG9zaGliYSAqLworCXtVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzUyKX0sCisJLyogLSAqLworCXtVU0JfREVWSUNFKDB4MjBGNCwgMHg2NDZCKX0sCisJe1VTQl9ERVZJQ0UoMHgwODNBLCAweEM1MTIpfSwKKworLyogUlRMODE5MVNVICovCisJLyogUmVhbHRlayAqLworCXtVU0JfREVWSUNFKDB4MEJEQSwgMHg4MTcyKX0sCisJLyogQW1pZ28gKi8KKwl7VVNCX0RFVklDRSgweDBFQjAsIDB4OTA2MSl9LAorCS8qIEFTVVMvRUtCICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzIpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMyMyl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzExKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0Mil9LAorCS8qIEFTVVMvRUtCTGVub3ZvICovCisJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMzMpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNCl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzM1KX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzNil9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCisJLyogQVNVUy9NZWRpYSBCT1ggKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4MTVGKX0sCisJLyogRC1MaW5rICovCisJe1VTQl9ERVZJQ0UoMHgwN0QxLCAweDMzMDIpfSwKKwl7VVNCX0RFVklDRSgweDA3RDEsIDB4MzMwMCl9LAorCXtVU0JfREVWSUNFKDB4MDdEMSwgMHgzMzAzKX0sCisJLyogRWRpbWF4ICovCisJe1VTQl9ERVZJQ0UoMHg3MzkyLCAweDc2MTIpfSwKKwkvKiBFbkdlbml1cyAqLworCXtVU0JfREVWSUNFKDB4MTc0MCwgMHg5NjA1KX0sCisJLyogR3VpbGxlbW90ICovCisJe1VTQl9ERVZJQ0UoMHgwNkY4LCAweEUwMzEpfSwKIAkvKiBIYXdraW5nICovCiAJe1VTQl9ERVZJQ0UoMHgwRTY2LCAweDAwMTUpfSwKLQl7VVNCX0RFVklDRSgweDBFNjYsIDB4MDAxNil9LAotCXtVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzg2KX0sCi0Je1VTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OTEpfSwgICAgLyogMTFuIG1vZGUgZGlzYWJsZSAqLwotCisJLyogTWVkaWFvICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMDYpfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMwOSl9LAorCS8qIFBDSSAqLworCXtVU0JfREVWSUNFKDB4MjAxOSwgMHhFRDE4KX0sCisJe1VTQl9ERVZJQ0UoMHgyMDE5LCAweDQ5MDEpfSwKKwkvKiBTaXRlY29tICovCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNTgpfSwKKwl7VVNCX0RFVklDRSgweDBERjYsIDB4MDA0OSl9LAorCXtVU0JfREVWSUNFKDB4MERGNiwgMHgwMDRDKX0sCisJe1VTQl9ERVZJQ0UoMHgwREY2LCAweDAwNjQpfSwKKwkvKiBTa3l3b3J0aCAqLworCXtVU0JfREVWSUNFKDB4MTRiMiwgMHgzMzAwKX0sCisJe1VTQl9ERVZJQ0UoMHgxNGIyLCAweDMzMDEpfSwKKwl7VVNCX0RFVklDRSgweDE0QjIsIDB4MzMwMil9LAorCS8qIC0gKi8KKwl7VVNCX0RFVklDRSgweDA0RjIsIDB4QUZGMil9LAorCXtVU0JfREVWSUNFKDB4MDRGMiwgMHhBRkY1KX0sCisJe1VTQl9ERVZJQ0UoMHgwNEYyLCAweEFGRjYpfSwKKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMzOSl9LAorCXtVU0JfREVWSUNFKDB4MTNEMywgMHgzMzQwKX0sIC8qIDExbiBtb2RlIGRpc2FibGUgKi8KKwl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzM0MSl9LCAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMTApfSwKLQl7VVNCX0RFVklDRSgweDEzRDMsIDB4MzMxMSl9LCAgICAvKiAxMW4gbW9kZSBkaXNhYmxlICovCiAJe1VTQl9ERVZJQ0UoMHgxM0QzLCAweDMzMjUpfSwKLQl7VVNCX0RFVklDRSgweDA4M0EsIDB4QzUxMil9LAorCisvKiBSVEw4MTkyU1UgKi8KKwkvKiBSZWFsdGVrICovCisJe1VTQl9ERVZJQ0UoMHgwQkRBLCAweDgxNzQpfSwKKwl7VVNCX0RFVklDRSgweDBCREEsIDB4ODE3NCl9LAorCS8qIEJlbGtpbiAqLworCXtVU0JfREVWSUNFKDB4MDUwRCwgMHg4NDVBKX0sCisJLyogQ29yZWdhICovCisJe1VTQl9ERVZJQ0UoMHgwN0FBLCAweDAwNTEpfSwKKwkvKiBFZGltYXggKi8KKwl7VVNCX0RFVklDRSgweDczOTIsIDB4NzYyMil9LAorCS8qIE5FQyAqLworCXtVU0JfREVWSUNFKDB4MDQwOSwgMHgwMkI2KX0sCiAJe30KIH07CiAKQEAgLTEwMyw4ICsxNzIsMjAgQEAKIHN0YXRpYyBzdHJ1Y3Qgc3BlY2lmaWNfZGV2aWNlX2lkIHNwZWNpZmljX2RldmljZV9pZF90YmxbXSA9IHsKIAl7LmlkVmVuZG9yID0gMHgwYjA1LCAuaWRQcm9kdWN0ID0gMHgxNzkxLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MGRmNiwgLmlkUHJvZHVjdCA9IDB4MDA1OSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMDYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKIAl7LmlkVmVuZG9yID0gMHgxM0QzLCAuaWRQcm9kdWN0ID0gMHgzMzExLAogCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzMzNSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAorCXsuaWRWZW5kb3IgPSAweDEzZDMsIC5pZFByb2R1Y3QgPSAweDMzMzYsCisJCSAuZmxhZ3MgPSBTUEVDX0RFVl9JRF9ESVNBQkxFX0hUfSwKKwl7LmlkVmVuZG9yID0gMHgxM2QzLCAuaWRQcm9kdWN0ID0gMHgzMzQwLAorCQkgLmZsYWdzID0gU1BFQ19ERVZfSURfRElTQUJMRV9IVH0sCisJey5pZFZlbmRvciA9IDB4MTNkMywgLmlkUHJvZHVjdCA9IDB4MzM0MSwKKwkJIC5mbGFncyA9IFNQRUNfREVWX0lEX0RJU0FCTEVfSFR9LAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKaW5kZXggMGJjMTEzYy4uZDAwN2U0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpAQCAtMTA0NCw5ICsxMDQ0LDkgQEAKIAogCS8qIHdoZW4gZG9pbmcgc3VzcGVuZCwgY2FsbCBmYiBhcGlzIGFuZCBwY2kgYXBpcyAqLwogCWlmIChtc2cuZXZlbnQgPT0gUE1fRVZFTlRfU1VTUEVORCkgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0diA9IHBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJCXJldHYgPSBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIG1zZyk7CkBAIC0xMTA1LDkgKzExMDUsOSBAQAogCiAJc210Y2ZiX3NldG1vZGUoc2ZiKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZCgmc2ZiLT5mYiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlYWt1cC9rb2JqZWN0cy5jCmluZGV4IDQwOGJiOWIuLjA3YTdmNTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zcGVha3VwL2tvYmplY3RzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NwZWFrdXAva29iamVjdHMuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxlbiA9IHN0cmxlbihidWYpOwotCWlmIChsZW4gPiAwIHx8IGxlbiA8IDMpIHsKKwlpZiAobGVuID4gMCAmJiBsZW4gPCAzKSB7CiAJCWNoID0gYnVmWzBdOwogCQlpZiAoY2ggPT0gJ1xuJykKIAkJCWNoID0gJzAnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jIGIvZHJpdmVycy9zdGFnaW5nL3N0ZV9ybWk0L3N5bmFwdGljc19pMmNfcm1pNC5jCmluZGV4IGU4ZjA0N2UuLjgwMTgzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zdGVfcm1pNC9zeW5hcHRpY3NfaTJjX3JtaTQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvc3RlX3JtaTQvc3luYXB0aWNzX2kyY19ybWk0LmMKQEAgLTk4NiwxMiArOTg2LDYgQEAKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhybWk0X2RhdGEtPmlucHV0X2RldiwgQUJTX01UX1RPVUNIX01BSk9SLCAwLAogCQkJCQkJTUFYX1RPVUNIX01BSk9SLCAwLCAwKTsKIAotCXJldHZhbCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShybWk0X2RhdGEtPmlucHV0X2Rldik7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIiVzOmlucHV0IHJlZ2lzdGVyIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9pbnB1dF9yZWdpc3RlcjsKLQl9Ci0KIAkvKiBDbGVhciBpbnRlcnJ1cHRzICovCiAJc3luYXB0aWNzX3JtaTRfaTJjX2Jsb2NrX3JlYWQocm1pNF9kYXRhLAogCQkJcm1pNF9kYXRhLT5mbjAxX2RhdGFfYmFzZV9hZGRyICsgMSwgaW50cl9zdGF0dXMsCkBAIC0xMDAzLDE1ICs5OTcsMjAgQEAKIAlpZiAocmV0dmFsKSB7CiAJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6VW5hYmxlIHRvIGdldCBhdHRuIGlycSAlZFxuIiwKIAkJCQlfX2Z1bmNfXywgcGxhdGZvcm1kYXRhLT5pcnFfbnVtYmVyKTsKLQkJZ290byBlcnJfcmVxdWVzdF9pcnE7CisJCWdvdG8gZXJyX3Vuc2V0X2NsaWVudGRhdGE7CisJfQorCisJcmV0dmFsID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHJtaTRfZGF0YS0+aW5wdXRfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJmNsaWVudC0+ZGV2LCAiJXM6aW5wdXQgcmVnaXN0ZXIgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCX0KIAogCXJldHVybiByZXR2YWw7CiAKLWVycl9yZXF1ZXN0X2lycToKK2Vycl9mcmVlX2lycToKIAlmcmVlX2lycShwbGF0Zm9ybWRhdGEtPmlycV9udW1iZXIsIHJtaTRfZGF0YSk7Ci0JaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uocm1pNF9kYXRhLT5pbnB1dF9kZXYpOwotZXJyX2lucHV0X3JlZ2lzdGVyOgorZXJyX3Vuc2V0X2NsaWVudGRhdGE6CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CiBlcnJfcXVlcnlfZGV2OgogCWlmIChwbGF0Zm9ybWRhdGEtPnJlZ3VsYXRvcl9lbikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL2lvX3NtLmMKaW5kZXggNTcxODY0NS4uMjdlMGFhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvaW9fc20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS9pb19zbS5jCkBAIC05NDksNyArOTQ5LDcgQEAKICAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIENITkxfSVNSIHRvIGRldGVybWluZSBpZiB0aGlzIGludGVycnVwdCBpcyBvdXJzLCB0aGVuCiAgKiAgICAgIHNjaGVkdWxlcyBhIERQQyB0byBkaXNwYXRjaCBJL08uCiAgKi8KLXZvaWQgaW9fbWJveF9tc2codTMyIG1zZykKK2ludCBpb19tYm94X21zZyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgbGVuLCB2b2lkICptc2cpCiB7CiAJc3RydWN0IGlvX21nciAqcGlvX21ncjsKIAlzdHJ1Y3QgZGV2X29iamVjdCAqZGV2X29iajsKQEAgLTk1OSw5ICs5NTksOSBAQAogCWRldl9nZXRfaW9fbWdyKGRldl9vYmosICZwaW9fbWdyKTsKIAogCWlmICghcGlvX21ncikKLQkJcmV0dXJuOworCQlyZXR1cm4gTk9USUZZX0JBRDsKIAotCXBpb19tZ3ItPmludHJfdmFsID0gKHUxNiltc2c7CisJcGlvX21nci0+aW50cl92YWwgPSAodTE2KSgodTMyKW1zZyk7CiAJaWYgKHBpb19tZ3ItPmludHJfdmFsICYgTUJYX1BNX0NMQVNTKQogCQlpb19kaXNwYXRjaF9wbShwaW9fbWdyKTsKIApAQCAtOTczLDcgKzk3Myw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBpb19tZ3ItPmRwY19sb2NrLCBmbGFncyk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJnBpb19tZ3ItPmRwY190YXNrbGV0KTsKIAl9Ci0JcmV0dXJuOworCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvY29yZS90aW9tYXAzNDMwLmMKaW5kZXggYTNiMGExOC4uYTNmNjlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2NvcmUvdGlvbWFwMzQzMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9jb3JlL3Rpb21hcDM0MzAuYwpAQCAtMjIzLDYgKzIyMywxMCBAQAogCWJyaWRnZV9tc2dfc2V0X3F1ZXVlX2lkLAogfTsKIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBkc3BfbWJveF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGlvX21ib3hfbXNnLAorfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2FsbChzdHJ1Y3QgYnJpZGdlX2Rldl9jb250ZXh0ICpkZXZfY29udGV4dCkKIHsKIAlpZiAoZGV2X2NvbnRleHQtPmR3X2JyZF9zdGF0ZSA9PSBCUkRfRFNQX0hJQkVSTkFUSU9OIHx8CkBAIC01NTMsNyArNTU3LDcgQEAKIAkJICogRW5hYmxlIE1haWxib3ggZXZlbnRzIGFuZCBhbHNvIGRyYWluIGFueSBwZW5kaW5nCiAJCSAqIHN0YWxlIG1lc3NhZ2VzLgogCQkgKi8KLQkJZGV2X2NvbnRleHQtPm1ib3ggPSBvbWFwX21ib3hfZ2V0KCJkc3AiKTsKKwkJZGV2X2NvbnRleHQtPm1ib3ggPSBvbWFwX21ib3hfZ2V0KCJkc3AiLCAmZHNwX21ib3hfbm90aWZpZXIpOwogCQlpZiAoSVNfRVJSKGRldl9jb250ZXh0LT5tYm94KSkgewogCQkJZGV2X2NvbnRleHQtPm1ib3ggPSBOVUxMOwogCQkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCBkc3AgbWFpbGJveCBoYW5kbGVcbiIsCkBAIC01NjMsOCArNTY3LDYgQEAKIAogCX0KIAlpZiAoIXN0YXR1cykgewotCQlkZXZfY29udGV4dC0+bWJveC0+cnhxLT5jYWxsYmFjayA9IChpbnQgKCopKHZvaWQgKikpaW9fbWJveF9tc2c7Ci0KIC8qUE1fSVZBMkdSUFNFTF9QRVIgPSAweEMwOyovCiAJCXRlbXAgPSByZWFkbChyZXNvdXJjZXMtPmR3X3Blcl9wbV9iYXNlICsgMHhBOCk7CiAJCXRlbXAgPSAodGVtcCAmIDB4RkZGRkZGMzApIHwgMHhDMDsKQEAgLTY4NSw3ICs2ODcsNyBAQAogCS8qIERpc2FibGUgdGhlIG1haWxib3ggaW50ZXJydXB0cyAqLwogCWlmIChkZXZfY29udGV4dC0+bWJveCkgewogCQlvbWFwX21ib3hfZGlzYWJsZV9pcnEoZGV2X2NvbnRleHQtPm1ib3gsIElSUV9SWCk7Ci0JCW9tYXBfbWJveF9wdXQoZGV2X2NvbnRleHQtPm1ib3gpOworCQlvbWFwX21ib3hfcHV0KGRldl9jb250ZXh0LT5tYm94LCAmZHNwX21ib3hfbm90aWZpZXIpOwogCQlkZXZfY29udGV4dC0+bWJveCA9IE5VTEw7CiAJfQogCS8qIFJlc2V0IElWQTIgY2xvY2tzKi8KQEAgLTc4NiwxMCArNzg4LDcgQEAKIAogCXB0X2F0dHJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBnX3RhYmxlX2F0dHJzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHB0X2F0dHJzICE9IE5VTEwpIHsKLQkJLyogQXNzdW1pbmcgdGhhdCB3ZSB1c2Ugb25seSBEU1AncyBtZW1vcnkgbWFwCi0JCSAqIHVudGlsIDB4NDAwMDowMDAwICwgd2Ugd291bGQgbmVlZCBvbmx5IDEwMjQKLQkJICogTDEgZW50aWVzIGkuZSBMMSBzaXplID0gNEsgKi8KLQkJcHRfYXR0cnMtPmwxX3NpemUgPSAweDEwMDA7CisJCXB0X2F0dHJzLT5sMV9zaXplID0gU1pfMTZLOyAvKiA0MDk2IGVudHJpZXMgb2YgMzIgYml0cyAqLwogCQlhbGlnbl9zaXplID0gcHRfYXR0cnMtPmwxX3NpemU7CiAJCS8qIEFsaWduIHNpemVzIGFyZSBleHBlY3RlZCB0byBiZSBwb3dlciBvZiAyICovCiAJCS8qIHdlIGxpa2UgdG8gZ2V0IGFsaWduZWQgb24gTDEgdGFibGUgc2l6ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2luY2x1ZGUvZHNwYnJpZGdlL2lvX3NtLmggYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaAppbmRleCAxOGFlYzU1Li44MjQyYzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvaW5jbHVkZS9kc3BicmlkZ2UvaW9fc20uaApAQCAtNzIsMjIgKzcyLDE3IEBACiAvKgogICogID09PT09PT09IGlvX21ib3hfbXNnID09PT09PT09CiAgKiAgUHVycG9zZToKLSAqICAgICAgTWFpbiBpbnRlcnJ1cHQgaGFuZGxlciBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgQnJpZGdlIGNoYW5uZWwgbWFuYWdlci4KLSAqICAgICAgQ2FsbHMgdGhlIEJyaWRnZSdzIGNobmxzbV9pc3IgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaW50ZXJydXB0IGlzIG91cnMsCi0gKiAgICAgIHRoZW4gc2NoZWR1bGVzIGEgRFBDIHRvIGRpc3BhdGNoIEkvTy4KKyAqCU1haW4gbWVzc2FnZSBoYW5kbGVyIGZvciB0aGUgc2hhcmVkIG1lbW9yeSBCcmlkZ2UgY2hhbm5lbCBtYW5hZ2VyLgorICoJRGV0ZXJtaW5lIGlmIHRoaXMgbWVzc2FnZSBpcyBvdXJzLCB0aGVuIHNjaGVkdWxlcyBhIERQQyB0bworICoJZGlzcGF0Y2ggSS9PLgogICogIFBhcmFtZXRlcnM6Ci0gKiAgICAgIHJlZl9kYXRhOiAgIFBvaW50ZXIgdG8gdGhlIGNoYW5uZWwgbWFuYWdlciBvYmplY3QgZm9yIHRoaXMgYm9hcmQuCi0gKiAgICAgICAgICAgICAgICAgIFNldCBpbiBhbiBpbml0aWFsIGNhbGwgdG8gSVNSX0luc3RhbGwoKS4KKyAqCXNlbGY6CVBvaW50ZXIgdG8gaXRzIG93biBub3RpZmllcl9ibG9jayBzdHJ1Y3QuCisgKglsZW46CUxlbmd0aCBvZiBtZXNzYWdlLgorICoJbXNnOglNZXNzYWdlIGNvZGUgcmVjZWl2ZWQuCiAgKiAgUmV0dXJuczoKLSAqICAgICAgVFJVRSBpZiBpbnRlcnJ1cHQgaGFuZGxlZDsgRkFMU0Ugb3RoZXJ3aXNlLgotICogIFJlcXVpcmVzOgotICogICAgICBNdXN0IGJlIGluIGxvY2tlZCBtZW1vcnkgaWYgZXhlY3V0aW5nIGluIGtlcm5lbCBtb2RlLgotICogICAgICBNdXN0IG9ubHkgY2FsbCBmdW5jdGlvbnMgd2hpY2ggYXJlIGluIGxvY2tlZCBtZW1vcnkgaWYgS2VybmVsIG1vZGUuCi0gKiAgICAgIE11c3Qgb25seSBjYWxsIGFzeW5jaHJvbm91cyBzZXJ2aWNlcy4KLSAqICAgICAgSW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgYW5kIEVPSSBmb3IgdGhpcyBpbnRlcnJ1cHQgaGFzIGJlZW4gc2VudC4KLSAqICBFbnN1cmVzOgorICoJTk9USUZZX09LIGlmIGhhbmRsZWQ7IE5PVElGWV9CQUQgb3RoZXJ3aXNlLgogICovCi12b2lkIGlvX21ib3hfbXNnKHUzMiBtc2cpOworaW50IGlvX21ib3hfbXNnKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBsZW4sIHZvaWQgKm1zZyk7CiAKIC8qCiAgKiAgPT09PT09PT0gaW9fcmVxdWVzdF9jaG5sID09PT09PT09CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWIuaAppbmRleCAzMGRiZmI2Li5kNzMyNjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViLmgKQEAgLTMyLDYgKzMyLDcgQEAKIAogc3RydWN0IHN0dWJfZGV2aWNlIHsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAogCXN0cnVjdCB1c2JpcF9kZXZpY2UgdWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9kZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCmluZGV4IGIxODZiNWYuLmE3Y2U1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX2Rldi5jCkBAIC0yNTgsMTAgKzI1OCwxMSBAQAogc3RhdGljIHZvaWQgc3R1Yl9kZXZpY2VfcmVzZXQoc3RydWN0IHVzYmlwX2RldmljZSAqdWQpCiB7CiAJc3RydWN0IHN0dWJfZGV2aWNlICpzZGV2ID0gY29udGFpbmVyX29mKHVkLCBzdHJ1Y3Qgc3R1Yl9kZXZpY2UsIHVkKTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkZXYtPnVkZXY7CiAJaW50IHJldDsKIAogCXVzYmlwX3VkYmcoImRldmljZSByZXNldCIpOworCiAJcmV0ID0gdXNiX2xvY2tfZGV2aWNlX2Zvcl9yZXNldCh1ZGV2LCBzZGV2LT5pbnRlcmZhY2UpOwogCWlmIChyZXQgPCAwKSB7CiAJCWRldl9lcnIoJnVkZXYtPmRldiwgImxvY2sgZm9yIHJlc2V0XG4iKTsKQEAgLTMwOSw3ICszMTAsOCBAQAogICoKICAqIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgc3R1Yl9kZXZpY2Ugc3RydWN0LgogICovCi1zdGF0aWMgc3RydWN0IHN0dWJfZGV2aWNlICpzdHViX2RldmljZV9hbGxvYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQorc3RhdGljIHN0cnVjdCBzdHViX2RldmljZSAqc3R1Yl9kZXZpY2VfYWxsb2Moc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCQkJCSAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXY7CiAJaW50IGJ1c251bSA9IGludGVyZmFjZV90b19idXNudW0oaW50ZXJmYWNlKTsKQEAgLTMyNCw3ICszMjYsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlzZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CisJc2Rldi0+aW50ZXJmYWNlID0gdXNiX2dldF9pbnRmKGludGVyZmFjZSk7CisJc2Rldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOwogCiAJLyoKIAkgKiBkZXZpZCBpcyBkZWZpbmVkIHdpdGggZGV2bnVtIHdoZW4gdGhpcyBkcml2ZXIgaXMgZmlyc3QgYWxsb2NhdGVkLgpAQCAtNDUwLDExICs0NTMsMTIgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAorCQl1c2JfZ2V0X2ludGYoaW50ZXJmYWNlKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogb2suIHRoaXMgaXMgbXkgZGV2aWNlLiAqLwotCXNkZXYgPSBzdHViX2RldmljZV9hbGxvYyhpbnRlcmZhY2UpOworCXNkZXYgPSBzdHViX2RldmljZV9hbGxvYyh1ZGV2LCBpbnRlcmZhY2UpOwogCWlmICghc2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTQ3Niw2ICs0ODAsOCBAQAogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgImNyZWF0ZSBzeXNmcyBmaWxlcyBmb3IgJXNcbiIsCiAJCQl1ZGV2X2J1c2lkKTsKIAkJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCQl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKKwogCQlidXNpZF9wcml2LT5pbnRlcmZfY291bnQgPSAwOwogCiAJCWJ1c2lkX3ByaXYtPnNkZXYgPSBOVUxMOwpAQCAtNTQ1LDYgKzU1MSw3IEBACiAJaWYgKGJ1c2lkX3ByaXYtPmludGVyZl9jb3VudCA+IDEpIHsKIAkJYnVzaWRfcHJpdi0+aW50ZXJmX2NvdW50LS07CiAJCXNodXRkb3duX2J1c2lkKGJ1c2lkX3ByaXYpOworCQl1c2JfcHV0X2ludGYoaW50ZXJmYWNlKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTU0LDYgKzU2MSw5IEBACiAJLyogMS4gc2h1dGRvd24gdGhlIGN1cnJlbnQgY29ubmVjdGlvbiAqLwogCXNodXRkb3duX2J1c2lkKGJ1c2lkX3ByaXYpOwogCisJdXNiX3B1dF9kZXYoc2Rldi0+dWRldik7CisJdXNiX3B1dF9pbnRmKGludGVyZmFjZSk7CisKIAkvKiAzLiBmcmVlIHNkZXYgKi8KIAlidXNpZF9wcml2LT5zZGV2ID0gTlVMTDsKIAlzdHViX2RldmljZV9mcmVlKHNkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9zdHViX3J4LmMKaW5kZXggM2RlNmZkMi4uYWU2YWM4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3N0dWJfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvc3R1Yl9yeC5jCkBAIC0zNjQsNyArMzY0LDcgQEAKIAogc3RhdGljIGludCBnZXRfcGlwZShzdHJ1Y3Qgc3R1Yl9kZXZpY2UgKnNkZXYsIGludCBlcG51bSwgaW50IGRpcikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkZXYtPnVkZXY7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCA9IE5VTEw7CiAKQEAgLTQ4NCw3ICs0ODQsNyBAQAogCWludCByZXQ7CiAJc3RydWN0IHN0dWJfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCA9ICZzZGV2LT51ZDsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoc2Rldi0+aW50ZXJmYWNlKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNkZXYtPnVkZXY7CiAJaW50IHBpcGUgPSBnZXRfcGlwZShzZGV2LCBwZHUtPmJhc2UuZXAsIHBkdS0+YmFzZS5kaXJlY3Rpb24pOwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmggYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaS5oCmluZGV4IDQxYTFmZTUuLmFmYzNiMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2kuaApAQCAtMTAwLDkgKzEwMCw2IEBACiAJICogQnV0LCB0aGUgaW5kZXggb2YgdGhpcyBhcnJheSBiZWdpbnMgZnJvbSAwLgogCSAqLwogCXN0cnVjdCB2aGNpX2RldmljZSB2ZGV2W1ZIQ0lfTlBPUlRTXTsKLQotCS8qIHZoY2lfZGV2aWNlIHdoaWNoIGhhcyBub3QgYmVlbiBhc3NpZ2VkIGl0cyBhZGRyZXNzIHlldCAqLwotCWludCBwZW5kaW5nX3BvcnQ7CiB9OwogCiAKQEAgLTExOSw2ICsxMTYsOSBAQAogdm9pZCB2aGNpX3J4X2xvb3Aoc3RydWN0IHVzYmlwX3Rhc2sgKnV0KTsKIHZvaWQgdmhjaV90eF9sb29wKHN0cnVjdCB1c2JpcF90YXNrICp1dCk7CiAKK3N0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCisJCQkJCSAgICBfX3UzMiBzZXFudW0pOworCiAjZGVmaW5lIGhhcmR3YXJlCQkoJnRoZV9jb250cm9sbGVyLT5wZGV2LmRldikKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdmhjaV9kZXZpY2UgKnBvcnRfdG9fdmRldihfX3UzMiBwb3J0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwppbmRleCAwOGJkMjZhLi5hMzVmZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9oY2QuYwpAQCAtMTM4LDggKzEzOCw2IEBACiAJICogdGhlX2NvbnRyb2xsZXItPnZkZXZbcmhwb3J0XS51ZC5zdGF0dXMgPSBWREVWX0NPTk5FQ1Q7CiAJICogc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT52ZGV2W3JocG9ydF0udWQubG9jayk7ICovCiAKLQl0aGVfY29udHJvbGxlci0+cGVuZGluZ19wb3J0ID0gcmhwb3J0OwotCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGhlX2NvbnRyb2xsZXItPmxvY2ssIGZsYWdzKTsKIAogCXVzYl9oY2RfcG9sbF9yaF9zdGF0dXModmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpKTsKQEAgLTU1OSw2ICs1NTcsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1cmItPmRldi0+ZGV2OwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2OwogCiAJdXNiaXBfZGJnX3ZoY2lfaGMoImVudGVyLCB1c2JfaGNkICVwIHVyYiAlcCBtZW1fZmxhZ3MgJWRcbiIsCiAJCSAgICBoY2QsIHVyYiwgbWVtX2ZsYWdzKTsKQEAgLTU3NCw2ICs1NzMsMTggQEAKIAkJcmV0dXJuIHVyYi0+c3RhdHVzOwogCX0KIAorCXZkZXYgPSBwb3J0X3RvX3ZkZXYodXJiLT5kZXYtPnBvcnRudW0tMSk7CisKKwkvKiByZWZ1c2UgZW5xdWV1ZSBmb3IgZGVhZCBjb25uZWN0aW9uICovCisJc3Bpbl9sb2NrKCZ2ZGV2LT51ZC5sb2NrKTsKKwlpZiAodmRldi0+dWQuc3RhdHVzID09IFZERVZfU1RfTlVMTCB8fCB2ZGV2LT51ZC5zdGF0dXMgPT0gVkRFVl9TVF9FUlJPUikgeworCQl1c2JpcF91ZXJyKCJlbnF1ZXVlIGZvciBpbmFjdGl2ZSBwb3J0ICVkXG4iLCB2ZGV2LT5yaHBvcnQpOworCQlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9jb250cm9sbGVyLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CisKIAlyZXQgPSB1c2JfaGNkX2xpbmtfdXJiX3RvX2VwKGhjZCwgdXJiKTsKIAlpZiAocmV0KQogCQlnb3RvIG5vX25lZWRfdW5saW5rOwpAQCAtNTkyLDggKzYwMyw2IEBACiAJCV9fdTggdHlwZSA9IHVzYl9waXBldHlwZSh1cmItPnBpcGUpOwogCQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpjdHJscmVxID0KIAkJCQkoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKSB1cmItPnNldHVwX3BhY2tldDsKLQkJc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2ID0KLQkJCQlwb3J0X3RvX3ZkZXYodGhlX2NvbnRyb2xsZXItPnBlbmRpbmdfcG9ydCk7CiAKIAkJaWYgKHR5cGUgIT0gUElQRV9DT05UUk9MIHx8ICFjdHJscmVxKSB7CiAJCQlkZXZfZXJyKGRldiwgImludmFsaWQgcmVxdWVzdCB0byBkZXZudW0gMFxuIik7CkBAIC02MDcsNyArNjE2LDkgQEAKIAkJCWRldl9pbmZvKGRldiwgIlNldEFkZHJlc3MgUmVxdWVzdCAoJWQpIHRvIHBvcnQgJWRcbiIsCiAJCQkJIGN0cmxyZXEtPndWYWx1ZSwgdmRldi0+cmhwb3J0KTsKIAotCQkJdmRldi0+dWRldiA9IHVyYi0+ZGV2OworCQkJaWYgKHZkZXYtPnVkZXYpCisJCQkJdXNiX3B1dF9kZXYodmRldi0+dWRldik7CisJCQl2ZGV2LT51ZGV2ID0gdXNiX2dldF9kZXYodXJiLT5kZXYpOwogCiAJCQlzcGluX2xvY2soJnZkZXYtPnVkLmxvY2spOwogCQkJdmRldi0+dWQuc3RhdHVzID0gVkRFVl9TVF9VU0VEOwpAQCAtNjI3LDggKzYzOCw5IEBACiAJCQkJCQkiR2V0X0Rlc2NyaXB0b3IgdG8gZGV2aWNlIDAgIgogCQkJCQkJIihnZXQgbWF4IHBpcGUgc2l6ZSlcbiIpOwogCi0JCQkvKiBGSVhNRTogcmVmZXJlbmNlIGNvdW50PyAodXNiX2dldF9kZXYoKSkgKi8KLQkJCXZkZXYtPnVkZXYgPSB1cmItPmRldjsKKwkJCWlmICh2ZGV2LT51ZGV2KQorCQkJCXVzYl9wdXRfZGV2KHZkZXYtPnVkZXYpOworCQkJdmRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVyYi0+ZGV2KTsKIAkJCWdvdG8gb3V0OwogCiAJCWRlZmF1bHQ6CkBAIC04MDUsNyArODE3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgdm9pZCB2aGNpX2RldmljZV91bmxpbmtfY2xlYW51cChzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYpCiB7CiAJc3RydWN0IHZoY2lfdW5saW5rICp1bmxpbmssICp0bXA7CkBAIC04MTMsMTEgKzgyNCwzNCBAQAogCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh1bmxpbmssIHRtcCwgJnZkZXYtPnVubGlua190eCwgbGlzdCkgeworCQl1c2JpcF91aW5mbygidW5saW5rIGNsZWFudXAgdHggJWx1XG4iLCB1bmxpbmstPnVubGlua19zZXFudW0pOwogCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJa2ZyZWUodW5saW5rKTsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodW5saW5rLCB0bXAsICZ2ZGV2LT51bmxpbmtfcngsIGxpc3QpIHsKKwkJc3RydWN0IHVyYiAqdXJiOworCisJCS8qIGdpdmUgYmFjayBVUkIgb2YgdW5hbnN3ZXJlZCB1bmxpbmsgcmVxdWVzdCAqLworCQl1c2JpcF91aW5mbygidW5saW5rIGNsZWFudXAgcnggJWx1XG4iLCB1bmxpbmstPnVubGlua19zZXFudW0pOworCisJCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCB1bmxpbmstPnVubGlua19zZXFudW0pOworCQlpZiAoIXVyYikgeworCQkJdXNiaXBfdWluZm8oInRoZSB1cmIgKHNlcW51bSAlbHUpIHdhcyBhbHJlYWR5IGdpdmVuIGJhY2tcbiIsCisJCQkJCQkJdW5saW5rLT51bmxpbmtfc2VxbnVtKTsKKwkJCWxpc3RfZGVsKCZ1bmxpbmstPmxpc3QpOworCQkJa2ZyZWUodW5saW5rKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXJiLT5zdGF0dXMgPSAtRU5PREVWOworCisJCXNwaW5fbG9jaygmdGhlX2NvbnRyb2xsZXItPmxvY2spOworCQl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcCh2aGNpX3RvX2hjZCh0aGVfY29udHJvbGxlciksIHVyYik7CisJCXNwaW5fdW5sb2NrKCZ0aGVfY29udHJvbGxlci0+bG9jayk7CisKKwkJdXNiX2hjZF9naXZlYmFja191cmIodmhjaV90b19oY2QodGhlX2NvbnRyb2xsZXIpLCB1cmIsIHVyYi0+c3RhdHVzKTsKKwogCQlsaXN0X2RlbCgmdW5saW5rLT5saXN0KTsKIAkJa2ZyZWUodW5saW5rKTsKIAl9CkBAIC04ODcsNiArOTIxLDEwIEBACiAJdmRldi0+c3BlZWQgID0gMDsKIAl2ZGV2LT5kZXZpZCAgPSAwOwogCisJaWYgKHZkZXYtPnVkZXYpCisJCXVzYl9wdXRfZGV2KHZkZXYtPnVkZXYpOworCXZkZXYtPnVkZXYgPSBOVUxMOworCiAJdWQtPnRjcF9zb2NrZXQgPSBOVUxMOwogCiAJdWQtPnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9yeC5jCmluZGV4IDgxNDdkNzIuLmJmNjk5MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfcnguYwpAQCAtMjMsMTYgKzIzLDE0IEBACiAjaW5jbHVkZSAidmhjaS5oIgogCiAKLS8qIGdldCBVUkIgZnJvbSB0cmFuc21pdHRlZCB1cmIgcXVldWUgKi8KLXN0YXRpYyBzdHJ1Y3QgdXJiICpwaWNrdXBfdXJiX2FuZF9mcmVlX3ByaXYoc3RydWN0IHZoY2lfZGV2aWNlICp2ZGV2LAorLyogZ2V0IFVSQiBmcm9tIHRyYW5zbWl0dGVkIHVyYiBxdWV1ZS4gY2FsbGVyIG11c3QgaG9sZCB2ZGV2LT5wcml2X2xvY2sgKi8KK3N0cnVjdCB1cmIgKnBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdihzdHJ1Y3QgdmhjaV9kZXZpY2UgKnZkZXYsCiAJCQkJCSAgICBfX3UzMiBzZXFudW0pCiB7CiAJc3RydWN0IHZoY2lfcHJpdiAqcHJpdiwgKnRtcDsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwogCWludCBzdGF0dXM7CiAKLQlzcGluX2xvY2soJnZkZXYtPnByaXZfbG9jayk7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCAmdmRldi0+cHJpdl9yeCwgbGlzdCkgewogCQlpZiAocHJpdi0+c2VxbnVtID09IHNlcW51bSkgewogCQkJdXJiID0gcHJpdi0+dXJiOwpAQCAtNjMsOCArNjEsNiBAQAogCQl9CiAJfQogCi0Jc3Bpbl91bmxvY2soJnZkZXYtPnByaXZfbG9jayk7Ci0KIAlyZXR1cm4gdXJiOwogfQogCkBAIC03NCw5ICs3MCwxMSBAQAogCXN0cnVjdCB1c2JpcF9kZXZpY2UgKnVkID0gJnZkZXYtPnVkOwogCXN0cnVjdCB1cmIgKnVyYjsKIAorCXNwaW5fbG9jaygmdmRldi0+cHJpdl9sb2NrKTsKIAogCXVyYiA9IHBpY2t1cF91cmJfYW5kX2ZyZWVfcHJpdih2ZGV2LCBwZHUtPmJhc2Uuc2VxbnVtKTsKIAorCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOwogCiAJaWYgKCF1cmIpIHsKIAkJdXNiaXBfdWVycigiY2Fubm90IGZpbmQgYSB1cmIgb2Ygc2VxbnVtICV1XG4iLApAQCAtMTYxLDcgKzE1OSwxMiBAQAogCQlyZXR1cm47CiAJfQogCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCiAJdXJiID0gcGlja3VwX3VyYl9hbmRfZnJlZV9wcml2KHZkZXYsIHVubGluay0+dW5saW5rX3NlcW51bSk7CisKKwlzcGluX3VubG9jaygmdmRldi0+cHJpdl9sb2NrKTsKKwogCWlmICghdXJiKSB7CiAJCS8qCiAJCSAqIEkgZ2V0IHRoZSByZXN1bHQgb2YgYSB1bmxpbmsgcmVxdWVzdC4gQnV0LCBpdCBzZWVtcyB0aGF0IEkKQEAgLTE5MCw2ICsxOTMsMTkgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyBpbnQgdmhjaV9wcml2X3R4X2VtcHR5KHN0cnVjdCB2aGNpX2RldmljZSAqdmRldikKK3sKKwlpbnQgZW1wdHkgPSAwOworCisJc3Bpbl9sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJZW1wdHkgPSBsaXN0X2VtcHR5KCZ2ZGV2LT5wcml2X3J4KTsKKworCXNwaW5fdW5sb2NrKCZ2ZGV2LT5wcml2X2xvY2spOworCisJcmV0dXJuIGVtcHR5OworfQorCiAvKiByZWN2IGEgcGR1ICovCiBzdGF0aWMgdm9pZCB2aGNpX3J4X3BkdShzdHJ1Y3QgdXNiaXBfZGV2aWNlICp1ZCkKIHsKQEAgLTIwMiwxMSArMjE4LDI5IEBACiAKIAltZW1zZXQoJnBkdSwgMCwgc2l6ZW9mKHBkdSkpOwogCi0KIAkvKiAxLiByZWNlaXZlIGEgcGR1IGhlYWRlciAqLwogCXJldCA9IHVzYmlwX3htaXQoMCwgdWQtPnRjcF9zb2NrZXQsIChjaGFyICopICZwZHUsIHNpemVvZihwZHUpLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlpZiAocmV0ID09IC1FQ09OTlJFU0VUKQorCQkJdXNiaXBfdWluZm8oImNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlclxuIik7CisJCWVsc2UgaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkvKiBpZ25vcmUgaWYgY29ubmVjdGlvbiB3YXMgaWRsZSAqLworCQkJaWYgKHZoY2lfcHJpdl90eF9lbXB0eSh2ZGV2KSkKKwkJCQlyZXR1cm47CisJCQl1c2JpcF91aW5mbygiY29ubmVjdGlvbiB0aW1lZCBvdXQgd2l0aCBwZW5kaW5nIHVyYnNcbiIpOworCQl9IGVsc2UgaWYgKHJldCAhPSAtRVJFU1RBUlRTWVMpCisJCQl1c2JpcF91aW5mbygieG1pdCBmYWlsZWQgJWRcbiIsIHJldCk7CisKKwkJdXNiaXBfZXZlbnRfYWRkKHVkLCBWREVWX0VWRU5UX0VSUk9SX1RDUCk7CisJCXJldHVybjsKKwl9CisJaWYgKHJldCA9PSAwKSB7CisJCXVzYmlwX3VpbmZvKCJjb25uZWN0aW9uIGNsb3NlZCIpOworCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRE9XTik7CisJCXJldHVybjsKKwl9CiAJaWYgKHJldCAhPSBzaXplb2YocGR1KSkgewotCQl1c2JpcF91ZXJyKCJyZWNlaXZpbmcgcGR1IGZhaWxlZCEgc2l6ZSBpcyAlZCwgc2hvdWxkIGJlICVkXG4iLAorCQl1c2JpcF91ZXJyKCJyZWNlaXZlZCBwZHUgc2l6ZSBpcyAlZCwgc2hvdWxkIGJlICVkXG4iLAogCQkJCQlyZXQsICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHBkdSkpOwogCQl1c2JpcF9ldmVudF9hZGQodWQsIFZERVZfRVZFTlRfRVJST1JfVENQKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL01vZHVsZS5zeW12ZXJzIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL01vZHVsZS5zeW12ZXJzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9Nb2R1bGUuc3ltdmVycworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jIGIvZHJpdmVycy9zdGFnaW5nL3hnaWZiL3ZiX3NldG1vZGUuYwppbmRleCA3MDE2ZmRkLi5lMTliOTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcveGdpZmIvdmJfc2V0bW9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy94Z2lmYi92Yl9zZXRtb2RlLmMKQEAgLTM5NTQsOCArMzk1NCw4IEBACiB1bnNpZ25lZCBjaGFyIFhHSV9Jc0xDRER1YWxMaW5rKHN0cnVjdCB2Yl9kZXZpY2VfaW5mbyAqcFZCSW5mbykKIHsKIAotCWlmICgoKChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0QpIHwgU2V0Q1JUMlRvTENEQSkpCi0JCQkmJiAocFZCSW5mby0+TENESW5mbyAmIFNldExDRER1YWxMaW5rKSkgLyogc2hhbXBvbzAxMjkgKi8KKwlpZiAoKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBKSkgJiYKKwkJCShwVkJJbmZvLT5MQ0RJbmZvICYgU2V0TENERHVhbExpbmspKSAvKiBzaGFtcG9vMDEyOSAqLwogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtODc3Myw3ICs4NzczLDcgQEAKIAogCWlmIChwVkJJbmZvLT5JRl9ERUZfTFZEUyA9PSAwKSB7CiAJCUNSVDJJbmRleCA9IENSVDJJbmRleCA+PiA2OyAvKiAgZm9yIExDRCAqLwotCQlpZiAoKChwVkJJbmZvLT5WQkluZm8gJiBTZXRDUlQyVG9MQ0QpIHwgU2V0Q1JUMlRvTENEQSkpIHsgLyozMDFiKi8KKwkJaWYgKHBWQkluZm8tPlZCSW5mbyAmIChTZXRDUlQyVG9MQ0QgfCBTZXRDUlQyVG9MQ0RBKSkgeyAvKjMwMWIqLwogCQkJaWYgKHBWQkluZm8tPkxDRFJlc0luZm8gIT0gUGFuZWwxMDI0eDc2OCkKIAkJCQlWQ0xLSW5kZXggPSBMQ0RYbGF0MlZDTEtbQ1JUMkluZGV4XTsKIAkJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvenJhbS96cmFtX2Rydi5jCmluZGV4IDU0MTU3MTIuLjRiZDhjYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy96cmFtL3pyYW1fZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3pyYW0venJhbV9kcnYuYwpAQCAtMjI3LDYgKzIyNyw3IEBACiAKIAkJaWYgKHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1pFUk8pKSB7CiAJCQloYW5kbGVfemVyb19wYWdlKHBhZ2UpOworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTIzNSwxMiArMjM2LDE0IEBACiAJCQlwcl9kZWJ1ZygiUmVhZCBiZWZvcmUgd3JpdGU6IHNlY3Rvcj0lbHUsIHNpemU9JXUiLAogCQkJCSh1bG9uZykoYmlvLT5iaV9zZWN0b3IpLCBiaW8tPmJpX3NpemUpOwogCQkJLyogRG8gbm90aGluZyAqLworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKIAkJLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkIHNpbmNlIGl0J3MgaW5jb21wcmVzc2libGUgKi8KIAkJaWYgKHVubGlrZWx5KHpyYW1fdGVzdF9mbGFnKHpyYW0sIGluZGV4LCBaUkFNX1VOQ09NUFJFU1NFRCkpKSB7CiAJCQloYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2UoenJhbSwgcGFnZSwgaW5kZXgpOworCQkJaW5kZXgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTMyMCw2ICszMjMsNyBAQAogCQkJbXV0ZXhfdW5sb2NrKCZ6cmFtLT5sb2NrKTsKIAkJCXpyYW1fc3RhdF9pbmMoJnpyYW0tPnN0YXRzLnBhZ2VzX3plcm8pOwogCQkJenJhbV9zZXRfZmxhZyh6cmFtLCBpbmRleCwgWlJBTV9aRVJPKTsKKwkJCWluZGV4Kys7CiAJCQljb250aW51ZTsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC9NYWtlZmlsZSBiL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlCmluZGV4IDVjZmQ3MDguLjk3M2JiMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdGFyZ2V0L01ha2VmaWxlCkBAIC0xMyw4ICsxMyw3IEBACiAJCQkJICAgdGFyZ2V0X2NvcmVfdHJhbnNwb3J0Lm8gXAogCQkJCSAgIHRhcmdldF9jb3JlX2NkYi5vIFwKIAkJCQkgICB0YXJnZXRfY29yZV91YS5vIFwKLQkJCQkgICB0YXJnZXRfY29yZV9yZC5vIFwKLQkJCQkgICB0YXJnZXRfY29yZV9taWIubworCQkJCSAgIHRhcmdldF9jb3JlX3JkLm8KIAogb2JqLSQoQ09ORklHX1RBUkdFVF9DT1JFKQkrPSB0YXJnZXRfY29yZV9tb2QubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYwppbmRleCAyNzY0NTEwLi5jYWY4ZGMxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfY29uZmlnZnMuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5jCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSA8bGludXgvcGFyc2VyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25maWdmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9iYXNlLmg+CiAjaW5jbHVkZSA8dGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5oPgpAQCAtMTk3MSwxMyArMTk3MCwzNSBAQAogewogCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2ICpzZV9kZXYgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAogCQkJCXN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LCBzZV9kZXZfZ3JvdXApOwotCXN0cnVjdCBjb25maWdfZ3JvdXAgKmRldl9jZzsKKwlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBpdGVtX3RvX2hiYSgmc2VfZGV2LT5zZV9kZXZfaGJhLT5oYmFfZ3JvdXAuY2dfaXRlbSk7CisJc3RydWN0IHNlX3N1YnN5c3RlbV9hcGkgKnQgPSBoYmEtPnRyYW5zcG9ydDsKKwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpkZXZfY2cgPSAmc2VfZGV2LT5zZV9kZXZfZ3JvdXA7CiAKLQlpZiAoIShzZV9kZXYpKQotCQlyZXR1cm47Ci0KLQlkZXZfY2cgPSAmc2VfZGV2LT5zZV9kZXZfZ3JvdXA7CiAJa2ZyZWUoZGV2X2NnLT5kZWZhdWx0X2dyb3Vwcyk7CisJLyoKKwkgKiBUaGlzIHBvaW50ZXIgd2lsbCBzZXQgd2hlbiB0aGUgc3RvcmFnZSBpcyBlbmFibGVkIHdpdGg6CisJICpgZWNobyAxID4gJENPTkZJR0ZTL2NvcmUvJEhCQS8kREVWL2Rldl9lbmFibGVgCisJICovCisJaWYgKHNlX2Rldi0+c2VfZGV2X3B0cikgeworCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyBzZV9mcmVlXyIKKwkJCSJ2aXJ0dWFsX2RldmljZSgpIGZvciBzZV9kZXZfcHRyOiAlcFxuIiwKKwkJCXNlX2Rldi0+c2VfZGV2X3B0cik7CisKKwkJc2VfZnJlZV92aXJ0dWFsX2RldmljZShzZV9kZXYtPnNlX2Rldl9wdHIsIGhiYSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUmVsZWFzZSBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2Rldi0+c2VfZGV2X3N1X3B0ci4uCisJCSAqLworCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyB0LT5mcmVlXyIKKwkJCSJkZXZpY2UoKSBmb3Igc2VfZGV2X3N1X3B0cjogJXBcbiIsCisJCQlzZV9kZXYtPnNlX2Rldl9zdV9wdHIpOworCisJCXQtPmZyZWVfZGV2aWNlKHNlX2Rldi0+c2VfZGV2X3N1X3B0cik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IERlYWxsb2NhdGluZyBzZV9zdWJzeXN0ZW0iCisJCQkiX2Rldl90OiAlcFxuIiwgc2VfZGV2KTsKKwlrZnJlZShzZV9kZXYpOwogfQogCiBzdGF0aWMgc3NpemVfdCB0YXJnZXRfY29yZV9kZXZfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCkBAIC0yMTQwLDcgKzIxNjEsMTYgQEAKIAlOVUxMLAogfTsKIAorc3RhdGljIHZvaWQgdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3QgdDEwX2FsdWFfbHVfZ3AgKmx1X2dwID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCXN0cnVjdCB0MTBfYWx1YV9sdV9ncCwgbHVfZ3BfZ3JvdXApOworCisJY29yZV9hbHVhX2ZyZWVfbHVfZ3AobHVfZ3ApOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX29wcyA9IHsKKwkucmVsZWFzZQkJPSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9jb3JlX2FsdWFfbHVfZ3BfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX2F0dHJfc3RvcmUsCiB9OwpAQCAtMjE5MSw5ICsyMjIxLDExIEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiVGFyZ2V0X0NvcmVfQ29uZmlnRlM6IFJlbGVhc2luZyBBTFVBIExvZ2ljYWwgVW5pdCIKIAkJIiBHcm91cDogY29yZS9hbHVhL2x1X2dwcy8lcywgSUQ6ICVodVxuIiwKIAkJY29uZmlnX2l0ZW1fbmFtZShpdGVtKSwgbHVfZ3AtPmx1X2dwX2lkKTsKLQorCS8qCisJICogY29yZV9hbHVhX2ZyZWVfbHVfZ3AoKSBpcyBjYWxsZWQgZnJvbSB0YXJnZXRfY29yZV9hbHVhX2x1X2dwX29wcy0+cmVsZWFzZSgpCisJICogLT4gdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncF9yZWxlYXNlKCkKKwkgKi8KIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JY29yZV9hbHVhX2ZyZWVfbHVfZ3AobHVfZ3ApOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV9sdV9ncHNfZ3JvdXBfb3BzID0gewpAQCAtMjU0OSw3ICsyNTgxLDE2IEBACiAJTlVMTCwKIH07CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHQxMF9hbHVhX3RnX3B0X2dwICp0Z19wdF9ncCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCisJCQlzdHJ1Y3QgdDEwX2FsdWFfdGdfcHRfZ3AsIHRnX3B0X2dwX2dyb3VwKTsKKworCWNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwKHRnX3B0X2dwKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9hdHRyX3N0b3JlLAogfTsKQEAgLTI2MDIsOSArMjY0MywxMSBAQAogCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBSZWxlYXNpbmcgQUxVQSBUYXJnZXQgUG9ydCIKIAkJIiBHcm91cDogYWx1YS90Z19wdF9ncHMvJXMsIElEOiAlaHVcbiIsCiAJCWNvbmZpZ19pdGVtX25hbWUoaXRlbSksIHRnX3B0X2dwLT50Z19wdF9ncF9pZCk7Ci0KKwkvKgorCSAqIGNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwKCkgaXMgY2FsbGVkIGZyb20gdGFyZ2V0X2NvcmVfYWx1YV90Z19wdF9ncF9vcHMtPnJlbGVhc2UoKQorCSAqIC0+IHRhcmdldF9jb3JlX2FsdWFfdGdfcHRfZ3BfcmVsZWFzZSgpLgorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQljb3JlX2FsdWFfZnJlZV90Z19wdF9ncCh0Z19wdF9ncCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwc19ncm91cF9vcHMgPSB7CkBAIC0yNzcxLDEzICsyODE0LDExIEBACiAJc3RydWN0IHNlX3N1YnN5c3RlbV9hcGkgKnQ7CiAJc3RydWN0IGNvbmZpZ19pdGVtICpkZl9pdGVtOwogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmRldl9jZywgKnRnX3B0X2dwX2NnOwotCWludCBpLCByZXQ7CisJaW50IGk7CiAKIAloYmEgPSBpdGVtX3RvX2hiYSgmc2VfZGV2LT5zZV9kZXZfaGJhLT5oYmFfZ3JvdXAuY2dfaXRlbSk7CiAKLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZoYmEtPmhiYV9hY2Nlc3NfbXV0ZXgpKQotCQlnb3RvIG91dDsKLQorCW11dGV4X2xvY2soJmhiYS0+aGJhX2FjY2Vzc19tdXRleCk7CiAJdCA9IGhiYS0+dHJhbnNwb3J0OwogCiAJc3Bpbl9sb2NrKCZzZV9nbG9iYWwtPmdfZGV2aWNlX2xvY2spOwpAQCAtMjc5MSw3ICsyODMyLDEwIEBACiAJCWNvbmZpZ19pdGVtX3B1dChkZl9pdGVtKTsKIAl9CiAJa2ZyZWUodGdfcHRfZ3BfY2ctPmRlZmF1bHRfZ3JvdXBzKTsKLQljb3JlX2FsdWFfZnJlZV90Z19wdF9ncChUMTBfQUxVQShzZV9kZXYpLT5kZWZhdWx0X3RnX3B0X2dwKTsKKwkvKgorCSAqIGNvcmVfYWx1YV9mcmVlX3RnX3B0X2dwKCkgaXMgY2FsbGVkIGZyb20gLT5kZWZhdWx0X3RnX3B0X2dwCisJICogZGlyZWN0bHkgZnJvbSB0YXJnZXRfY29yZV9hbHVhX3RnX3B0X2dwX3JlbGVhc2UoKS4KKwkgKi8KIAlUMTBfQUxVQShzZV9kZXYpLT5kZWZhdWx0X3RnX3B0X2dwID0gTlVMTDsKIAogCWRldl9jZyA9ICZzZV9kZXYtPnNlX2Rldl9ncm91cDsKQEAgLTI4MDAsMzggKzI4NDQsMTIgQEAKIAkJZGV2X2NnLT5kZWZhdWx0X2dyb3Vwc1tpXSA9IE5VTEw7CiAJCWNvbmZpZ19pdGVtX3B1dChkZl9pdGVtKTsKIAl9Ci0KLQljb25maWdfaXRlbV9wdXQoaXRlbSk7CiAJLyoKLQkgKiBUaGlzIHBvaW50ZXIgd2lsbCBzZXQgd2hlbiB0aGUgc3RvcmFnZSBpcyBlbmFibGVkIHdpdGg6Ci0JICogYGVjaG8gMSA+ICRDT05GSUdGUy9jb3JlLyRIQkEvJERFVi9kZXZfZW5hYmxlYAorCSAqIFRoZSByZWxlYXNpbmcgb2Ygc2VfZGV2IGFuZCBhc3NvY2lhdGVkIHNlX2Rldi0+c2VfZGV2X3B0ciBpcyBkb25lCisJICogZnJvbSB0YXJnZXRfY29yZV9kZXZfaXRlbV9vcHMtPnJlbGVhc2UoKSAtPnRhcmdldF9jb3JlX2Rldl9yZWxlYXNlKCkuCiAJICovCi0JaWYgKHNlX2Rldi0+c2VfZGV2X3B0cikgewotCQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogQ2FsbGluZyBzZV9mcmVlXyIKLQkJCSJ2aXJ0dWFsX2RldmljZSgpIGZvciBzZV9kZXZfcHRyOiAlcFxuIiwKLQkJCQlzZV9kZXYtPnNlX2Rldl9wdHIpOwotCi0JCXJldCA9IHNlX2ZyZWVfdmlydHVhbF9kZXZpY2Uoc2VfZGV2LT5zZV9kZXZfcHRyLCBoYmEpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gaGJhX291dDsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBSZWxlYXNlIHN0cnVjdCBzZV9zdWJzeXN0ZW1fZGV2LT5zZV9kZXZfc3VfcHRyLi4KLQkJICovCi0JCXByaW50ayhLRVJOX0lORk8gIlRhcmdldF9Db3JlX0NvbmZpZ0ZTOiBDYWxsaW5nIHQtPmZyZWVfIgotCQkJImRldmljZSgpIGZvciBzZV9kZXZfc3VfcHRyOiAlcFxuIiwKLQkJCXNlX2Rldi0+c2VfZGV2X3N1X3B0cik7Ci0KLQkJdC0+ZnJlZV9kZXZpY2Uoc2VfZGV2LT5zZV9kZXZfc3VfcHRyKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPICJUYXJnZXRfQ29yZV9Db25maWdGUzogRGVhbGxvY2F0aW5nIHNlX3N1YnN5c3RlbSIKLQkJIl9kZXZfdDogJXBcbiIsIHNlX2Rldik7Ci0KLWhiYV9vdXQ6CisJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCW11dGV4X3VubG9jaygmaGJhLT5oYmFfYWNjZXNzX211dGV4KTsKLW91dDoKLQlrZnJlZShzZV9kZXYpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfaGJhX2dyb3VwX29wcyA9IHsKQEAgLTI5MTQsNiArMjkzMiwxMyBAQAogCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2NvcmVfaGJhLCBzZV9oYmEsIGhiYV9ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9jb3JlX2hiYV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJCXN0cnVjdCBzZV9oYmEsIGhiYV9ncm91cCk7CisJY29yZV9kZWxldGVfaGJhKGhiYSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfYXR0cmlidXRlICp0YXJnZXRfY29yZV9oYmFfYXR0cnNbXSA9IHsKIAkmdGFyZ2V0X2NvcmVfaGJhX2hiYV9pbmZvLmF0dHIsCiAJJnRhcmdldF9jb3JlX2hiYV9oYmFfbW9kZS5hdHRyLApAQCAtMjkyMSw2ICsyOTQ2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfaXRlbV9vcGVyYXRpb25zIHRhcmdldF9jb3JlX2hiYV9pdGVtX29wcyA9IHsKKwkucmVsZWFzZQkJPSB0YXJnZXRfY29yZV9oYmFfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2NvcmVfaGJhX2F0dHJfc2hvdywKIAkuc3RvcmVfYXR0cmlidXRlCT0gdGFyZ2V0X2NvcmVfaGJhX2F0dHJfc3RvcmUsCiB9OwpAQCAtMjk5NywxMCArMzAyMywxMSBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmEgPSBpdGVtX3RvX2hiYShpdGVtKTsKLQorCS8qCisJICogY29yZV9kZWxldGVfaGJhKCkgaXMgY2FsbGVkIGZyb20gdGFyZ2V0X2NvcmVfaGJhX2l0ZW1fb3BzLT5yZWxlYXNlKCkKKwkgKiAtPiB0YXJnZXRfY29yZV9oYmFfcmVsZWFzZSgpCisJICovCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCWNvcmVfZGVsZXRlX2hiYShoYmEpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2NvcmVfZ3JvdXBfb3BzID0gewpAQCAtMzAyMiw3ICszMDQ5LDYgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICp0YXJnZXRfY2csICpoYmFfY2cgPSBOVUxMLCAqYWx1YV9jZyA9IE5VTEw7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqbHVfZ3BfY2cgPSBOVUxMOwogCXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5czsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdGFyZ2V0X3Byb2MgPSBOVUxMOwogCXN0cnVjdCB0MTBfYWx1YV9sdV9ncCAqbHVfZ3A7CiAJaW50IHJldDsKIApAQCAtMzEyOCwyMSArMzE1NCwxMCBAQAogCWlmIChjb3JlX2Rldl9zZXR1cF92aXJ0dWFsX2x1bjAoKSA8IDApCiAJCWdvdG8gb3V0OwogCi0Jc2NzaV90YXJnZXRfcHJvYyA9IHByb2NfbWtkaXIoInNjc2lfdGFyZ2V0IiwgMCk7Ci0JaWYgKCEoc2NzaV90YXJnZXRfcHJvYykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcm9jX21rZGlyKHNjc2lfdGFyZ2V0LCAwKSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gaW5pdF9zY3NpX3RhcmdldF9taWIoKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXQ7Ci0KIAlyZXR1cm4gMDsKIAogb3V0OgogCWNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN1YnN5cyk7Ci0JaWYgKHNjc2lfdGFyZ2V0X3Byb2MpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldCIsIDApOwogCWNvcmVfZGV2X3JlbGVhc2VfdmlydHVhbF9sdW4wKCk7CiAJcmRfbW9kdWxlX2V4aXQoKTsKIG91dF9nbG9iYWw6CkBAIC0zMTc4LDggKzMxOTMsNyBAQAogCQljb25maWdfaXRlbV9wdXQoaXRlbSk7CiAJfQogCWtmcmVlKGx1X2dwX2NnLT5kZWZhdWx0X2dyb3Vwcyk7Ci0JY29yZV9hbHVhX2ZyZWVfbHVfZ3Aoc2VfZ2xvYmFsLT5kZWZhdWx0X2x1X2dwKTsKLQlzZV9nbG9iYWwtPmRlZmF1bHRfbHVfZ3AgPSBOVUxMOworCWx1X2dwX2NnLT5kZWZhdWx0X2dyb3VwcyA9IE5VTEw7CiAKIAlhbHVhX2NnID0gJnNlX2dsb2JhbC0+YWx1YV9ncm91cDsKIAlmb3IgKGkgPSAwOyBhbHVhX2NnLT5kZWZhdWx0X2dyb3Vwc1tpXTsgaSsrKSB7CkBAIC0zMTg4LDYgKzMyMDIsNyBAQAogCQljb25maWdfaXRlbV9wdXQoaXRlbSk7CiAJfQogCWtmcmVlKGFsdWFfY2ctPmRlZmF1bHRfZ3JvdXBzKTsKKwlhbHVhX2NnLT5kZWZhdWx0X2dyb3VwcyA9IE5VTEw7CiAKIAloYmFfY2cgPSAmc2VfZ2xvYmFsLT50YXJnZXRfY29yZV9oYmFncm91cDsKIAlmb3IgKGkgPSAwOyBoYmFfY2ctPmRlZmF1bHRfZ3JvdXBzW2ldOyBpKyspIHsKQEAgLTMxOTYsMjAgKzMyMTEsMjAgQEAKIAkJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwogCX0KIAlrZnJlZShoYmFfY2ctPmRlZmF1bHRfZ3JvdXBzKTsKLQotCWZvciAoaSA9IDA7IHN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHNbaV07IGkrKykgewotCQlpdGVtID0gJnN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHNbaV0tPmNnX2l0ZW07Ci0JCXN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHNbaV0gPSBOVUxMOwotCQljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JfQorCWhiYV9jZy0+ZGVmYXVsdF9ncm91cHMgPSBOVUxMOworCS8qCisJICogV2UgZXhwZWN0IHN1YnN5cy0+c3VfZ3JvdXAuZGVmYXVsdF9ncm91cHMgdG8gYmUgcmVsZWFzZWQKKwkgKiBieSBjb25maWdmcyBzdWJzeXN0ZW0gcHJvdmlkZXIgbG9naWMuLgorCSAqLworCWNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN1YnN5cyk7CiAJa2ZyZWUoc3Vic3lzLT5zdV9ncm91cC5kZWZhdWx0X2dyb3Vwcyk7CiAKLQljb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdWJzeXMpOworCWNvcmVfYWx1YV9mcmVlX2x1X2dwKHNlX2dsb2JhbC0+ZGVmYXVsdF9sdV9ncCk7CisJc2VfZ2xvYmFsLT5kZWZhdWx0X2x1X2dwID0gTlVMTDsKKwogCXByaW50ayhLRVJOX0lORk8gIlRBUkdFVF9DT1JFWzBdOiBSZWxlYXNlZCBDb25maWdGUyBGYWJyaWMiCiAJCQkiIEluZnJhc3RydWN0dXJlXG4iKTsKIAotCXJlbW92ZV9zY3NpX3RhcmdldF9taWIoKTsKLQlyZW1vdmVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQiLCAwKTsKIAljb3JlX2Rldl9yZWxlYXNlX3ZpcnR1YWxfbHVuMCgpOwogCXJkX21vZHVsZV9leGl0KCk7CiAJcmVsZWFzZV9zZV9nbG9iYWwoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2RldmljZS5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKaW5kZXggMzE3Y2U1OC4uNWRhMDUxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZGV2aWNlLmMKQEAgLTM3MywxMSArMzczLDExIEBACiAJCS8qCiAJCSAqIGRldmUtPnNlX2x1bl9hY2wgd2lsbCBiZSBOVUxMIGZvciBkZW1vLW1vZGUgY3JlYXRlZCBMVU5zCiAJCSAqIHRoYXQgaGF2ZSBub3QgYmVlbiBleHBsaWN0bHkgY29uY2VydGVkIHRvIE1hcHBlZExVTnMgLT4KLQkJICogc3RydWN0IHNlX2x1bl9hY2wuCisJCSAqIHN0cnVjdCBzZV9sdW5fYWNsLCBidXQgd2UgcmVtb3ZlIGRldmUtPmFsdWFfcG9ydF9saXN0IGZyb20KKwkJICogcG9ydC0+c2VwX2FsdWFfbGlzdC4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgYWN0aXZlIFVBcyBhbmQKKwkJICogTm9kZUFDTCBjb250ZXh0IHNwZWNpZmljIFBSIG1ldGFkYXRhIGZvciBkZW1vLW1vZGUKKwkJICogTWFwcGVkTFVOICpkZXZlIHdpbGwgYmUgcmVsZWFzZWQgYmVsb3cuLgogCQkgKi8KLQkJaWYgKCEoZGV2ZS0+c2VfbHVuX2FjbCkpCi0JCQlyZXR1cm4gMDsKLQogCQlzcGluX2xvY2tfYmgoJnBvcnQtPnNlcF9hbHVhX2xvY2spOwogCQlsaXN0X2RlbCgmZGV2ZS0+YWx1YV9wb3J0X2xpc3QpOwogCQlzcGluX3VubG9ja19iaCgmcG9ydC0+c2VwX2FsdWFfbG9jayk7CkBAIC0zOTUsMTIgKzM5NSwxNCBAQAogCQkJCXByaW50ayhLRVJOX0VSUiAic3RydWN0IHNlX2Rldl9lbnRyeS0+c2VfbHVuX2FjbCIKIAkJCQkJIiBhbHJlYWR5IHNldCBmb3IgZGVtbyBtb2RlIC0+IGV4cGxpY3QiCiAJCQkJCSIgTFVOIEFDTCB0cmFuc2l0aW9uXG4iKTsKKwkJCQlzcGluX3VubG9ja19pcnEoJm5hY2wtPmRldmljZV9saXN0X2xvY2spOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWlmIChkZXZlLT5zZV9sdW4gIT0gbHVuKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJzdHJ1Y3Qgc2VfZGV2X2VudHJ5LT5zZV9sdW4gZG9lcyIKIAkJCQkJIiBtYXRjaCBwYXNzZWQgc3RydWN0IHNlX2x1biBmb3IgZGVtbyBtb2RlIgogCQkJCQkiIC0+IGV4cGxpY3QgTFVOIEFDTCB0cmFuc2l0aW9uXG4iKTsKKwkJCQlzcGluX3VubG9ja19pcnEoJm5hY2wtPmRldmljZV9saXN0X2xvY2spOwogCQkJCXJldHVybiAtMTsKIAkJCX0KIAkJCWRldmUtPnNlX2x1bl9hY2wgPSBsdW5fYWNsOwpAQCAtODY1LDkgKzg2Nyw2IEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmhiYS0+ZGV2aWNlX2xvY2spOwotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZoYmEtPmRldl9taWJfYWNjZXNzX2NvdW50KSkKLQkJY3B1X3JlbGF4KCk7CiB9CiAKIGludCBzZV9kZXZfY2hlY2tfb25saW5lKHN0cnVjdCBzZV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX2ZhYnJpY19jb25maWdmcy5jIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKaW5kZXggMzJiMTQ4ZC4uYjY1ZDFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX2NvbmZpZ2ZzLmMKQEAgLTIxNCwxMiArMjE0LDIyIEBACiAKIENPTkZJR0ZTX0VBVFRSX09QUyh0YXJnZXRfZmFicmljX21hcHBlZGx1biwgc2VfbHVuX2FjbCwgc2VfbHVuX2dyb3VwKTsKIAorc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX2x1bl9hY2wgKmxhY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJCXN0cnVjdCBzZV9sdW5fYWNsLCBzZV9sdW5fZ3JvdXApOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGxhY2wtPnNlX2x1bl9uYWNsLT5zZV90cGc7CisKKwljb3JlX2Rldl9mcmVlX2luaXRpYXRvcl9ub2RlX2x1bl9hY2woc2VfdHBnLCBsYWNsKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19hdHRyaWJ1dGUgKnRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2F0dHJzW10gPSB7CiAJJnRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX3dyaXRlX3Byb3RlY3QuYXR0ciwKIAlOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5faXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2ZhYnJpY19tYXBwZWRsdW5fYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX21hcHBlZGx1bl9hdHRyX3N0b3JlLAogCS5hbGxvd19saW5rCQk9IHRhcmdldF9mYWJyaWNfbWFwcGVkbHVuX2xpbmssCkBAIC0zMzcsMTUgKzM0NywyMSBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2VfbHVuX2FjbCAqbGFjbCA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCi0JCQlzdHJ1Y3Qgc2VfbHVuX2FjbCwgc2VfbHVuX2dyb3VwKTsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBsYWNsLT5zZV9sdW5fbmFjbC0+c2VfdHBnOwotCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCWNvcmVfZGV2X2ZyZWVfaW5pdGlhdG9yX25vZGVfbHVuX2FjbChzZV90cGcsIGxhY2wpOworfQorCitzdGF0aWMgdm9pZCB0YXJnZXRfZmFicmljX25hY2xfYmFzZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJc3RydWN0IHNlX25vZGVfYWNsLCBhY2xfZ3JvdXApOworCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IHNlX25hY2wtPnNlX3RwZzsKKwlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBzZV90cGctPnNlX3RwZ193d24tPnd3bl90ZjsKKworCXRmLT50Zl9vcHMuZmFicmljX2Ryb3Bfbm9kZWFjbChzZV9uYWNsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfcmVsZWFzZSwKIAkuc2hvd19hdHRyaWJ1dGUJCT0gdGFyZ2V0X2ZhYnJpY19uYWNsX2Jhc2VfYXR0cl9zaG93LAogCS5zdG9yZV9hdHRyaWJ1dGUJPSB0YXJnZXRfZmFicmljX25hY2xfYmFzZV9hdHRyX3N0b3JlLAogfTsKQEAgLTQwNCw5ICs0MjAsNiBAQAogCXN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCXN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIHsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBjb250YWluZXJfb2YoZ3JvdXAsCi0JCQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwLCB0cGdfYWNsX2dyb3VwKTsKLQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSBzZV90cGctPnNlX3RwZ193d24tPnd3bl90ZjsKIAlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2wgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAogCQkJc3RydWN0IHNlX25vZGVfYWNsLCBhY2xfZ3JvdXApOwogCXN0cnVjdCBjb25maWdfaXRlbSAqZGZfaXRlbTsKQEAgLTQxOSw5ICs0MzIsMTAgQEAKIAkJbmFjbF9jZy0+ZGVmYXVsdF9ncm91cHNbaV0gPSBOVUxMOwogCQljb25maWdfaXRlbV9wdXQoZGZfaXRlbSk7CiAJfQotCisJLyoKKwkgKiBzdHJ1Y3Qgc2Vfbm9kZV9hY2wgZnJlZSBpcyBkb25lIGluIHRhcmdldF9mYWJyaWNfbmFjbF9iYXNlX3JlbGVhc2UoKQorCSAqLwogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX25vZGVhY2woc2VfbmFjbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX25hY2xfZ3JvdXBfb3BzID0gewpAQCAtNDM3LDcgKzQ1MSwxOCBAQAogCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2ZhYnJpY19ucF9iYXNlLCBzZV90cGdfbnAsIHRwZ19ucF9ncm91cCk7CiAKK3N0YXRpYyB2b2lkIHRhcmdldF9mYWJyaWNfbnBfYmFzZV9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKK3sKKwlzdHJ1Y3Qgc2VfdHBnX25wICpzZV90cGdfbnAgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAorCQkJCXN0cnVjdCBzZV90cGdfbnAsIHRwZ19ucF9ncm91cCk7CisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gc2VfdHBnX25wLT50cGdfbnBfcGFyZW50OworCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHNlX3RwZy0+c2VfdHBnX3d3bi0+d3duX3RmOworCisJdGYtPnRmX29wcy5mYWJyaWNfZHJvcF9ucChzZV90cGdfbnApOworfQorCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2l0ZW1fb3BlcmF0aW9ucyB0YXJnZXRfZmFicmljX25wX2Jhc2VfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJCT0gdGFyZ2V0X2ZhYnJpY19ucF9iYXNlX3JlbGVhc2UsCiAJLnNob3dfYXR0cmlidXRlCQk9IHRhcmdldF9mYWJyaWNfbnBfYmFzZV9hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9mYWJyaWNfbnBfYmFzZV9hdHRyX3N0b3JlLAogfTsKQEAgLTQ2Niw2ICs0OTEsNyBAQAogCWlmICghKHNlX3RwZ19ucCkgfHwgSVNfRVJSKHNlX3RwZ19ucCkpCiAJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCisJc2VfdHBnX25wLT50cGdfbnBfcGFyZW50ID0gc2VfdHBnOwogCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmc2VfdHBnX25wLT50cGdfbnBfZ3JvdXAsIG5hbWUsCiAJCQkmVEZfQ0lUX1RNUEwodGYpLT50ZmNfdHBnX25wX2Jhc2VfY2l0KTsKIApAQCAtNDc2LDE0ICs1MDIsMTAgQEAKIAlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7Ci0Jc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKGdyb3VwLAotCQkJCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ucF9ncm91cCk7Ci0Jc3RydWN0IHRhcmdldF9mYWJyaWNfY29uZmlnZnMgKnRmID0gc2VfdHBnLT5zZV90cGdfd3duLT53d25fdGY7Ci0Jc3RydWN0IHNlX3RwZ19ucCAqc2VfdHBnX25wID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKLQkJCQlzdHJ1Y3Qgc2VfdHBnX25wLCB0cGdfbnBfZ3JvdXApOwotCisJLyoKKwkgKiBzdHJ1Y3Qgc2VfdHBnX25wIGlzIHJlbGVhc2VkIHZpYSB0YXJnZXRfZmFicmljX25wX2Jhc2VfcmVsZWFzZSgpCisJICovCiAJY29uZmlnX2l0ZW1fcHV0KGl0ZW0pOwotCXRmLT50Zl9vcHMuZmFicmljX2Ryb3BfbnAoc2VfdHBnX25wKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfbnBfZ3JvdXBfb3BzID0gewpAQCAtODE0LDcgKzgzNiwxOCBAQAogICovCiBDT05GSUdGU19FQVRUUl9PUFModGFyZ2V0X2ZhYnJpY190cGcsIHNlX3BvcnRhbF9ncm91cCwgdHBnX2dyb3VwKTsKIAorc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY190cGdfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ncm91cCk7CisJc3RydWN0IHNlX3d3biAqd3duID0gc2VfdHBnLT5zZV90cGdfd3duOworCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHd3bi0+d3duX3RmOworCisJdGYtPnRmX29wcy5mYWJyaWNfZHJvcF90cGcoc2VfdHBnKTsKK30KKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY190cGdfYmFzZV9pdGVtX29wcyA9IHsKKwkucmVsZWFzZQkJPSB0YXJnZXRfZmFicmljX3RwZ19yZWxlYXNlLAogCS5zaG93X2F0dHJpYnV0ZQkJPSB0YXJnZXRfZmFicmljX3RwZ19hdHRyX3Nob3csCiAJLnN0b3JlX2F0dHJpYnV0ZQk9IHRhcmdldF9mYWJyaWNfdHBnX2F0dHJfc3RvcmUsCiB9OwpAQCAtODcyLDggKzkwNSw2IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCXN0cnVjdCBzZV93d24gKnd3biA9IGNvbnRhaW5lcl9vZihncm91cCwgc3RydWN0IHNlX3d3biwgd3duX2dyb3VwKTsKLQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcyAqdGYgPSB3d24tPnd3bl90ZjsKIAlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICpzZV90cGcgPSBjb250YWluZXJfb2YodG9fY29uZmlnX2dyb3VwKGl0ZW0pLAogCQkJCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAsIHRwZ19ncm91cCk7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqdHBnX2NnID0gJnNlX3RwZy0+dHBnX2dyb3VwOwpAQCAtODkwLDE1ICs5MjEsMjggQEAKIAl9CiAKIAljb25maWdfaXRlbV9wdXQoaXRlbSk7Ci0JdGYtPnRmX29wcy5mYWJyaWNfZHJvcF90cGcoc2VfdHBnKTsKIH0KIAorc3RhdGljIHZvaWQgdGFyZ2V0X2ZhYnJpY19yZWxlYXNlX3d3bihzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCit7CisJc3RydWN0IHNlX3d3biAqd3duID0gY29udGFpbmVyX29mKHRvX2NvbmZpZ19ncm91cChpdGVtKSwKKwkJCQlzdHJ1Y3Qgc2Vfd3duLCB3d25fZ3JvdXApOworCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IHd3bi0+d3duX3RmOworCisJdGYtPnRmX29wcy5mYWJyaWNfZHJvcF93d24od3duKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25maWdmc19pdGVtX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY190cGdfaXRlbV9vcHMgPSB7CisJLnJlbGVhc2UJPSB0YXJnZXRfZmFicmljX3JlbGVhc2Vfd3duLAorfTsKKwogc3RhdGljIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHRhcmdldF9mYWJyaWNfdHBnX2dyb3VwX29wcyA9IHsKIAkubWFrZV9ncm91cAk9IHRhcmdldF9mYWJyaWNfbWFrZV90cGcsCiAJLmRyb3BfaXRlbQk9IHRhcmdldF9mYWJyaWNfZHJvcF90cGcsCiB9OwogCi1URl9DSVRfU0VUVVAodHBnLCBOVUxMLCAmdGFyZ2V0X2ZhYnJpY190cGdfZ3JvdXBfb3BzLCBOVUxMKTsKK1RGX0NJVF9TRVRVUCh0cGcsICZ0YXJnZXRfZmFicmljX3RwZ19pdGVtX29wcywgJnRhcmdldF9mYWJyaWNfdHBnX2dyb3VwX29wcywKKwkJTlVMTCk7CiAKIC8qIEVuZCBvZiB0ZmNfdHBnX2NpdCAqLwogCkBAIC05MzIsMTMgKzk3Niw3IEBACiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKQogewotCXN0cnVjdCB0YXJnZXRfZmFicmljX2NvbmZpZ2ZzICp0ZiA9IGNvbnRhaW5lcl9vZihncm91cCwKLQkJCQlzdHJ1Y3QgdGFyZ2V0X2ZhYnJpY19jb25maWdmcywgdGZfZ3JvdXApOwotCXN0cnVjdCBzZV93d24gKnd3biA9IGNvbnRhaW5lcl9vZih0b19jb25maWdfZ3JvdXAoaXRlbSksCi0JCQkJc3RydWN0IHNlX3d3biwgd3duX2dyb3VwKTsKLQogCWNvbmZpZ19pdGVtX3B1dChpdGVtKTsKLQl0Zi0+dGZfb3BzLmZhYnJpY19kcm9wX3d3bih3d24pOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMgdGFyZ2V0X2ZhYnJpY193d25fZ3JvdXBfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfaWJsb2NrLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYwppbmRleCBjNmUwZDc1Li42N2YwYzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9pYmxvY2suYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIAliZCA9IGJsa2Rldl9nZXRfYnlfcGF0aChpYl9kZXYtPmliZF91ZGV2X3BhdGgsCiAJCQkJRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMLCBpYl9kZXYpOwotCWlmICghKGJkKSkKKwlpZiAoSVNfRVJSKGJkKSkKIAkJZ290byBmYWlsZWQ7CiAJLyoKIAkgKiBTZXR1cCB0aGUgbG9jYWwgc2NvcGUgcXVldWVfbGltaXRzIGZyb20gc3RydWN0IHJlcXVlc3RfcXVldWUtPmxpbWl0cwpAQCAtMjIwLDggKzIyMCwxMCBAQAogewogCXN0cnVjdCBpYmxvY2tfZGV2ICppYl9kZXYgPSBwOwogCi0JYmxrZGV2X3B1dChpYl9kZXYtPmliZF9iZCwgRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMKTsKLQliaW9zZXRfZnJlZShpYl9kZXYtPmliZF9iaW9fc2V0KTsKKwlpZiAoaWJfZGV2LT5pYmRfYmQgIT0gTlVMTCkKKwkJYmxrZGV2X3B1dChpYl9kZXYtPmliZF9iZCwgRk1PREVfV1JJVEV8Rk1PREVfUkVBRHxGTU9ERV9FWENMKTsKKwlpZiAoaWJfZGV2LT5pYmRfYmlvX3NldCAhPSBOVUxMKQorCQliaW9zZXRfZnJlZShpYl9kZXYtPmliZF9iaW9fc2V0KTsKIAlrZnJlZShpYl9kZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWE0OGFhLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX21pYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogRmlsZW5hbWU6ICB0YXJnZXRfY29yZV9taWIuYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IFNCRSwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDEwIFJpc2luZyBUaWRlIFN5c3RlbXMKLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEwIExpbnV4LWlTQ1NJLm9yZwotICoKLSAqIE5pY2hvbGFzIEEuIEJlbGxpbmdlciA8bmFiQGxpbnV4LWlzY3NpLm9yZz4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+Ci0jaW5jbHVkZSA8Z2VuZXJhdGVkL3V0c3JlbGVhc2UuaD4KLSNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpLmg+Ci0jaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgotI2luY2x1ZGUgPHNjc2kvc2NzaV9ob3N0Lmg+Ci0KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oPgotI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDx0YXJnZXQvdGFyZ2V0X2NvcmVfZmFicmljX29wcy5oPgotI2luY2x1ZGUgPHRhcmdldC90YXJnZXRfY29yZV9jb25maWdmcy5oPgotCi0jaW5jbHVkZSAidGFyZ2V0X2NvcmVfaGJhLmgiCi0jaW5jbHVkZSAidGFyZ2V0X2NvcmVfbWliLmgiCi0KLS8qIFNDU0kgbWliIHRhYmxlIGluZGV4ICovCi1zdGF0aWMgc3RydWN0IHNjc2lfaW5kZXhfdGFibGUgc2NzaV9pbmRleF90YWJsZTsKLQotI2lmbmRlZiBJTklUSUFMX0pJRkZJRVMKLSNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgaW50KSAoLTMwMCpIWikpCi0jZW5kaWYKLQotLyogU0NTSSBJbnN0YW5jZSBUYWJsZSAqLwotI2RlZmluZSBTQ1NJX0lOU1RfU1dfSU5ERVgJCTEKLSNkZWZpbmUgU0NTSV9UUkFOU1BPUlRfSU5ERVgJCTEKLQotI2RlZmluZSBOT05FCQkiTm9uZSIKLSNkZWZpbmUgSVNQUklOVChhKSAgICgoYSA+PSAnICcpICYmIChhIDw9ICd+JykpCi0KLXN0YXRpYyBpbmxpbmUgaW50IGxpc3RfaXNfZmlyc3QoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQljb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXJldHVybiBsaXN0LT5wcmV2ID09IGhlYWQ7Ci19Ci0KLXN0YXRpYyB2b2lkICpsb2NhdGVfaGJhX3N0YXJ0KAotCXN0cnVjdCBzZXFfZmlsZSAqc2VxLAotCWxvZmZfdCAqcG9zKQotewotCXNwaW5fbG9jaygmc2VfZ2xvYmFsLT5nX2RldmljZV9sb2NrKTsKLQlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCwgKnBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpsb2NhdGVfaGJhX25leHQoCi0Jc3RydWN0IHNlcV9maWxlICpzZXEsCi0Jdm9pZCAqdiwKLQlsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NhdGVfaGJhX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2soJnNlX2dsb2JhbC0+Z19kZXZpY2VfbG9jayk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBTQ1NJIE1JQiBUYWJsZXMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogU0NTSSBJbnN0YW5jZSBUYWJsZQotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9pbnN0X3NlcV9zdGFydCgKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQlsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2soJnNlX2dsb2JhbC0+aGJhX2xvY2spOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VfZ2xvYmFsLT5nX2hiYV9saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfaW5zdF9zZXFfbmV4dCgKLQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQl2b2lkICp2LAotCWxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZzZV9nbG9iYWwtPmdfaGJhX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfaW5zdF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzcGluX3VubG9jaygmc2VfZ2xvYmFsLT5oYmFfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9pbnN0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9oYmEgKmhiYSA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX2hiYSwgaGJhX2xpc3QpOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJmhiYS0+aGJhX2xpc3QsICZzZV9nbG9iYWwtPmdfaGJhX2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IHN3X2luZHhcbiIpOwotCi0Jc2VxX3ByaW50ZihzZXEsICIldSAldVxuIiwgaGJhLT5oYmFfaW5kZXgsIFNDU0lfSU5TVF9TV19JTkRFWCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJwbHVnaW46ICVzIHZlcnNpb246ICVzXG4iLAotCQkJaGJhLT50cmFuc3BvcnQtPm5hbWUsIFRBUkdFVF9DT1JFX1ZFUlNJT04pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9pbnN0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0CT0gc2NzaV9pbnN0X3NlcV9zdGFydCwKLQkubmV4dAk9IHNjc2lfaW5zdF9zZXFfbmV4dCwKLQkuc3RvcAk9IHNjc2lfaW5zdF9zZXFfc3RvcCwKLQkuc2hvdwk9IHNjc2lfaW5zdF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2luc3Rfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX2luc3Rfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfaW5zdF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9pbnN0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBEZXZpY2UgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfZGV2X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV9kZXZfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX2Rldl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0JY2hhciBzdHJbMjhdOwotCWludCBrOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgaW5keCByb2xlIHBvcnRzXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICVzICV1XG4iLCBoYmEtPmhiYV9pbmRleCwKLQkJICAgZGV2LT5kZXZfaW5kZXgsICJUYXJnZXQiLCBkZXYtPmRldl9wb3J0X2NvdW50KTsKLQotCW1lbWNweSgmc3RyWzBdLCAodm9pZCAqKURFVl9UMTBfV1dOKGRldiksIDI4KTsKLQotCS8qIHZlbmRvciAqLwotCWZvciAoayA9IDA7IGsgPCA4OyBrKyspCi0JCXN0cltrXSA9IElTUFJJTlQoREVWX1QxMF9XV04oZGV2KS0+dmVuZG9yW2tdKSA/Ci0JCQkJREVWX1QxMF9XV04oZGV2KS0+dmVuZG9yW2tdIDogMHgyMDsKLQlzdHJba10gPSAweDIwOwotCi0JLyogbW9kZWwgKi8KLQlmb3IgKGsgPSAwOyBrIDwgMTY7IGsrKykKLQkJc3RyW2srOV0gPSBJU1BSSU5UKERFVl9UMTBfV1dOKGRldiktPm1vZGVsW2tdKSA/Ci0JCQkJREVWX1QxMF9XV04oZGV2KS0+bW9kZWxba10gOiAweDIwOwotCXN0cltrICsgOV0gPSAwOwotCi0Jc2VxX3ByaW50ZihzZXEsICJkZXZfYWxpYXM6ICVzXG4iLCBzdHIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9kZXZfc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gc2NzaV9kZXZfc2VxX3N0YXJ0LAotCS5uZXh0ICAgPSBzY3NpX2Rldl9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV9kZXZfc2VxX3N0b3AsCi0JLnNob3cgICA9IHNjc2lfZGV2X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfZGV2X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9kZXZfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfZGV2X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX2Rldl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgUG9ydCBUYWJsZQotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9wb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV9wb3J0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9wb3J0X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCWxvY2F0ZV9oYmFfc3RvcChzZXEsIHYpOwotfQotCi1zdGF0aWMgaW50IHNjc2lfcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0Jc3RydWN0IHNlX3BvcnQgKnNlcCwgKnNlcF90bXA7Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXZpY2UgaW5keCByb2xlIGJ1c3lfY291bnRcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIEZJWE1FOiBzY3NpUG9ydEJ1c3lTdGF0dXNlcyBjb3VudCAqLwotCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXAsIHNlcF90bXAsICZkZXYtPmRldl9zZXBfbGlzdCwgc2VwX2xpc3QpIHsKLQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAlcyV1ICV1XG4iLCBoYmEtPmhiYV9pbmRleCwKLQkJCWRldi0+ZGV2X2luZGV4LCBzZXAtPnNlcF9pbmRleCwgIkRldmljZSIsCi0JCQlkZXYtPmRldl9pbmRleCwgMCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX3BvcnRfc2VxX29wcyA9IHsKLQkuc3RhcnQgID0gc2NzaV9wb3J0X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV9wb3J0X3NlcV9uZXh0LAotCS5zdG9wICAgPSBzY3NpX3BvcnRfc2VxX3N0b3AsCi0JLnNob3cgICA9IHNjc2lfcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX3BvcnRfc2VxX29wcyk7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNjc2lfcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9wb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBUcmFuc3BvcnQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfdHJhbnNwb3J0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfc3RhcnQoc2VxLCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCAqc2NzaV90cmFuc3BvcnRfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX3RyYW5zcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX3RyYW5zcG9ydF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0Jc3RydWN0IHNlX3BvcnQgKnNlLCAqc2VfdG1wOwotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnRwZzsKLQlzdHJ1Y3QgdDEwX3d3biAqd3duOwotCWNoYXIgYnVmWzY0XTsKLQotCWlmIChsaXN0X2lzX2ZpcnN0KCZzZV9kZXYtPmdfc2VfZGV2X2xpc3QsICZzZV9nbG9iYWwtPmdfc2VfZGV2X2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldmljZSBpbmR4IGRldl9uYW1lXG4iKTsKLQotCWlmICghKGRldikpCi0JCXJldHVybiAwOwotCi0JaGJhID0gZGV2LT5zZV9oYmE7Ci0JaWYgKCEoaGJhKSkgewotCQkvKiBMb2cgZXJyb3IgPyAqLwotCQlyZXR1cm4gMDsKLQl9Ci0KLQl3d24gPSBERVZfVDEwX1dXTihkZXYpOwotCi0Jc3Bpbl9sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNlLCBzZV90bXAsICZkZXYtPmRldl9zZXBfbGlzdCwgc2VwX2xpc3QpIHsKLQkJdHBnID0gc2UtPnNlcF90cGc7Ci0JCXNwcmludGYoYnVmLCAic2NzaVRyYW5zcG9ydCVzIiwKLQkJCQlUUEdfVEZPKHRwZyktPmdldF9mYWJyaWNfbmFtZSgpKTsKLQotCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICVzICV1ICVzKyVzXG4iLAotCQkJaGJhLT5oYmFfaW5kZXgsIC8qIHNjc2lUcmFuc3BvcnRJbmRleCAqLwotCQkJYnVmLCAgLyogc2NzaVRyYW5zcG9ydFR5cGUgKi8KLQkJCShUUEdfVEZPKHRwZyktPnRwZ19nZXRfaW5zdF9pbmRleCAhPSBOVUxMKSA/Ci0JCQlUUEdfVEZPKHRwZyktPnRwZ19nZXRfaW5zdF9pbmRleCh0cGcpIDoKLQkJCTAsCi0JCQlUUEdfVEZPKHRwZyktPnRwZ19nZXRfd3duKHRwZyksCi0JCQkoc3RybGVuKHd3bi0+dW5pdF9zZXJpYWwpKSA/Ci0JCQkvKiBzY3NpVHJhbnNwb3J0RGV2TmFtZSAqLwotCQkJd3duLT51bml0X3NlcmlhbCA6IHd3bi0+dmVuZG9yKTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRldi0+c2VfcG9ydF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNjc2lfdHJhbnNwb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfdHJhbnNwb3J0X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV90cmFuc3BvcnRfc2VxX25leHQsCi0JLnN0b3AgICA9IHNjc2lfdHJhbnNwb3J0X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3RyYW5zcG9ydF9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX3RyYW5zcG9ydF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfdHJhbnNwb3J0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3RyYW5zcG9ydF9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV90cmFuc3BvcnRfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIFRhcmdldCBEZXZpY2UgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfdGd0X2Rldl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfdGd0X2Rldl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIGxvY2F0ZV9oYmFfbmV4dChzZXEsIHYsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfdGd0X2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotCi0jZGVmaW5lIExVX0NPVU5UCTEgIC8qIGZvciBub3cgKi8KLXN0YXRpYyBpbnQgc2NzaV90Z3RfZGV2X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9oYmEgKmhiYTsKLQlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiAqc2VfZGV2ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiwKLQkJCQkJCWdfc2VfZGV2X2xpc3QpOwotCXN0cnVjdCBzZV9kZXZpY2UgKmRldiA9IHNlX2Rldi0+c2VfZGV2X3B0cjsKLQlpbnQgbm9uX2FjY2Vzc2libGVfbHVzID0gMDsKLQljaGFyIHN0YXR1c1sxNl07Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBpbmR4IG51bV9MVXMgc3RhdHVzIG5vbl9hY2Nlc3NfTFVzIgotCQkJIiByZXNldHNcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAoZGV2LT5kZXZfc3RhdHVzKSB7Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX0FDVElWQVRFRDoKLQkJc3RyY3B5KHN0YXR1cywgImFjdGl2YXRlZCIpOwotCQlicmVhazsKLQljYXNlIFRSQU5TUE9SVF9ERVZJQ0VfREVBQ1RJVkFURUQ6Ci0JCXN0cmNweShzdGF0dXMsICJkZWFjdGl2YXRlZCIpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCQlicmVhazsKLQljYXNlIFRSQU5TUE9SVF9ERVZJQ0VfU0hVVERPV046Ci0JCXN0cmNweShzdGF0dXMsICJzaHV0ZG93biIpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCQlicmVhazsKLQljYXNlIFRSQU5TUE9SVF9ERVZJQ0VfT0ZGTElORV9BQ1RJVkFURUQ6Ci0JY2FzZSBUUkFOU1BPUlRfREVWSUNFX09GRkxJTkVfREVBQ1RJVkFURUQ6Ci0JCXN0cmNweShzdGF0dXMsICJvZmZsaW5lIik7Ci0JCW5vbl9hY2Nlc3NpYmxlX2x1cyA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXNwcmludGYoc3RhdHVzLCAidW5rbm93biglZCkiLCBkZXYtPmRldl9zdGF0dXMpOwotCQlub25fYWNjZXNzaWJsZV9sdXMgPSAxOwotCX0KLQotCXNlcV9wcmludGYoc2VxLCAiJXUgJXUgJXUgJXMgJXUgJXVcbiIsCi0JCSAgIGhiYS0+aGJhX2luZGV4LCBkZXYtPmRldl9pbmRleCwgTFVfQ09VTlQsCi0JCSAgIHN0YXR1cywgbm9uX2FjY2Vzc2libGVfbHVzLCBkZXYtPm51bV9yZXNldHMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV90Z3RfZGV2X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfdGd0X2Rldl9zZXFfc3RhcnQsCi0JLm5leHQgICA9IHNjc2lfdGd0X2Rldl9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV90Z3RfZGV2X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3RndF9kZXZfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV90Z3RfZGV2X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV90Z3RfZGV2X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3RndF9kZXZfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfdGd0X2Rldl9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoKLSAqIFNDU0kgVGFyZ2V0IFBvcnQgVGFibGUKLSAqLwotc3RhdGljIHZvaWQgKnNjc2lfdGd0X3BvcnRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9zdGFydChzZXEsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkICpzY3NpX3RndF9wb3J0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKLXsKLQlyZXR1cm4gbG9jYXRlX2hiYV9uZXh0KHNlcSwgdiwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV90Z3RfcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlsb2NhdGVfaGJhX3N0b3Aoc2VxLCB2KTsKLX0KLQotc3RhdGljIGludCBzY3NpX3RndF9wb3J0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9oYmEgKmhiYTsKLQlzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiAqc2VfZGV2ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2RldiwKLQkJCQkJCWdfc2VfZGV2X2xpc3QpOwotCXN0cnVjdCBzZV9kZXZpY2UgKmRldiA9IHNlX2Rldi0+c2VfZGV2X3B0cjsKLQlzdHJ1Y3Qgc2VfcG9ydCAqc2VwLCAqc2VwX3RtcDsKLQlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGc7Ci0JdTMyIHJ4X21ieXRlcywgdHhfbWJ5dGVzOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBudW1fY21kczsKLQljaGFyIGJ1Zls2NF07Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfZGV2LT5nX3NlX2Rldl9saXN0LCAmc2VfZ2xvYmFsLT5nX3NlX2Rldl9saXN0KSkKLQkJc2VxX3B1dHMoc2VxLCAiaW5zdCBkZXZpY2UgaW5keCBuYW1lIHBvcnRfaW5kZXggaW5fY21kcyIKLQkJCSIgd3JpdGVfbWJ5dGVzIHJlYWRfbWJ5dGVzIGhzX2luX2NtZHNcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9jaygmZGV2LT5zZV9wb3J0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzZXAsIHNlcF90bXAsICZkZXYtPmRldl9zZXBfbGlzdCwgc2VwX2xpc3QpIHsKLQkJdHBnID0gc2VwLT5zZXBfdHBnOwotCQlzcHJpbnRmKGJ1ZiwgIiVzUG9ydCMiLAotCQkJVFBHX1RGTyh0cGcpLT5nZXRfZmFicmljX25hbWUoKSk7Ci0KLQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAlcyVkICVzJXMlZCAiLAotCQkgICAgIGhiYS0+aGJhX2luZGV4LAotCQkgICAgIGRldi0+ZGV2X2luZGV4LAotCQkgICAgIHNlcC0+c2VwX2luZGV4LAotCQkgICAgIGJ1Ziwgc2VwLT5zZXBfaW5kZXgsCi0JCSAgICAgVFBHX1RGTyh0cGcpLT50cGdfZ2V0X3d3bih0cGcpLCAiK3QrIiwKLQkJICAgICBUUEdfVEZPKHRwZyktPnRwZ19nZXRfdGFnKHRwZykpOwotCi0JCXNwaW5fbG9jaygmc2VwLT5zZXBfbHVuLT5sdW5fc2VwX2xvY2spOwotCQludW1fY21kcyA9IHNlcC0+c2VwX3N0YXRzLmNtZF9wZHVzOwotCQlyeF9tYnl0ZXMgPSAoc2VwLT5zZXBfc3RhdHMucnhfZGF0YV9vY3RldHMgPj4gMjApOwotCQl0eF9tYnl0ZXMgPSAoc2VwLT5zZXBfc3RhdHMudHhfZGF0YV9vY3RldHMgPj4gMjApOwotCQlzcGluX3VubG9jaygmc2VwLT5zZXBfbHVuLT5sdW5fc2VwX2xvY2spOwotCi0JCXNlcV9wcmludGYoc2VxLCAiJWxsdSAldSAldSAldVxuIiwgbnVtX2NtZHMsCi0JCQlyeF9tYnl0ZXMsIHR4X21ieXRlcywgMCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZkZXYtPnNlX3BvcnRfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX3RndF9wb3J0X3NlcV9vcHMgPSB7Ci0JLnN0YXJ0ICA9IHNjc2lfdGd0X3BvcnRfc2VxX3N0YXJ0LAotCS5uZXh0ICAgPSBzY3NpX3RndF9wb3J0X3NlcV9uZXh0LAotCS5zdG9wICAgPSBzY3NpX3RndF9wb3J0X3NlcV9zdG9wLAotCS5zaG93ICAgPSBzY3NpX3RndF9wb3J0X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfdGd0X3BvcnRfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX3RndF9wb3J0X3NlcV9vcHMpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzY3NpX3RndF9wb3J0X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX3RndF9wb3J0X3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBBdXRob3JpemVkIEluaXRpYXRvciBUYWJsZToKLSAqIEl0IGNvbnRhaW5zIHRoZSBTQ1NJIEluaXRpYXRvcnMgYXV0aG9yaXplZCB0byBiZSBhdHRhY2hlZCB0byBvbmUgb2YgdGhlCi0gKiBsb2NhbCBUYXJnZXQgcG9ydHMuCi0gKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCBhY3RpdmUgVFBHcyBhbmQgZXh0cmFjdHMgdGhlIGluZm8gZnJvbSB0aGUgQUNMcwotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9hdXRoX2ludHJfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfYXV0aF9pbnRyX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LAotCQkJCQkgbG9mZl90ICpwb3MpCi17Ci0JcmV0dXJuIHNlcV9saXN0X25leHQodiwgJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgc2NzaV9hdXRoX2ludHJfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi17Ci0Jc3Bpbl91bmxvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotfQotCi1zdGF0aWMgaW50IHNjc2lfYXV0aF9pbnRyX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3BvcnRhbF9ncm91cCwKLQkJCQkJCXNlX3RwZ19saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2X2VudHJ5ICpkZXZlOwotCXN0cnVjdCBzZV9sdW4gKmx1bjsKLQlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2w7Ci0JaW50IGo7Ci0KLQlpZiAobGlzdF9pc19maXJzdCgmc2VfdHBnLT5zZV90cGdfbGlzdCwKLQkJCSAgJnNlX2dsb2JhbC0+Z19zZV90cGdfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2IHBvcnQgaW5keCBkZXZfb3JfcG9ydCBpbnRyX25hbWUgIgotCQkJICJtYXBfaW5keCBhdHRfY291bnQgbnVtX2NtZHMgcmVhZF9tYnl0ZXMgIgotCQkJICJ3cml0ZV9tYnl0ZXMgaHNfbnVtX2NtZHMgY3JlYXRpb25fdGltZSByb3dfc3RhdHVzXG4iKTsKLQotCWlmICghKHNlX3RwZykpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VfbmFjbCwgJnNlX3RwZy0+YWNsX25vZGVfbGlzdCwgYWNsX2xpc3QpIHsKLQotCQlhdG9taWNfaW5jKCZzZV9uYWNsLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JCXNwaW5fdW5sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCi0JCXNwaW5fbG9ja19pcnEoJnNlX25hY2wtPmRldmljZV9saXN0X2xvY2spOwotCQlmb3IgKGogPSAwOyBqIDwgVFJBTlNQT1JUX01BWF9MVU5TX1BFUl9UUEc7IGorKykgewotCQkJZGV2ZSA9ICZzZV9uYWNsLT5kZXZpY2VfbGlzdFtqXTsKLQkJCWlmICghKGRldmUtPmx1bl9mbGFncyAmCi0JCQkJCVRSQU5TUE9SVF9MVU5GTEFHU19JTklUSUFUT1JfQUNDRVNTKSB8fAotCQkJICAgICghZGV2ZS0+c2VfbHVuKSkKLQkJCQljb250aW51ZTsKLQkJCWx1biA9IGRldmUtPnNlX2x1bjsKLQkJCWlmICghbHVuLT5sdW5fc2VfZGV2KQotCQkJCWNvbnRpbnVlOwotCi0JCQlzZXFfcHJpbnRmKHNlcSwgIiV1ICV1ICV1ICV1ICV1ICVzICV1ICV1ICV1ICV1ICV1ICV1IgotCQkJCQkiICV1ICVzXG4iLAotCQkJCS8qIHNjc2lJbnN0SW5kZXggKi8KLQkJCQkoVFBHX1RGTyhzZV90cGcpLT50cGdfZ2V0X2luc3RfaW5kZXggIT0gTlVMTCkgPwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4KHNlX3RwZykgOgotCQkJCTAsCi0JCQkJLyogc2NzaURldmljZUluZGV4ICovCi0JCQkJbHVuLT5sdW5fc2VfZGV2LT5kZXZfaW5kZXgsCi0JCQkJLyogc2NzaUF1dGhJbnRyVGd0UG9ydEluZGV4ICovCi0JCQkJVFBHX1RGTyhzZV90cGcpLT50cGdfZ2V0X3RhZyhzZV90cGcpLAotCQkJCS8qIHNjc2lBdXRoSW50ckluZGV4ICovCi0JCQkJc2VfbmFjbC0+YWNsX2luZGV4LAotCQkJCS8qIHNjc2lBdXRoSW50ckRldk9yUG9ydCAqLwotCQkJCTEsCi0JCQkJLyogc2NzaUF1dGhJbnRyTmFtZSAqLwotCQkJCXNlX25hY2wtPmluaXRpYXRvcm5hbWVbMF0gPwotCQkJCQlzZV9uYWNsLT5pbml0aWF0b3JuYW1lIDogTk9ORSwKLQkJCQkvKiBGSVhNRTogc2NzaUF1dGhJbnRyTHVuTWFwSW5kZXggKi8KLQkJCQkwLAotCQkJCS8qIHNjc2lBdXRoSW50ckF0dGFjaGVkVGltZXMgKi8KLQkJCQlkZXZlLT5hdHRhY2hfY291bnQsCi0JCQkJLyogc2NzaUF1dGhJbnRyT3V0Q29tbWFuZHMgKi8KLQkJCQlkZXZlLT50b3RhbF9jbWRzLAotCQkJCS8qIHNjc2lBdXRoSW50clJlYWRNZWdhQnl0ZXMgKi8KLQkJCQkodTMyKShkZXZlLT5yZWFkX2J5dGVzID4+IDIwKSwKLQkJCQkvKiBzY3NpQXV0aEludHJXcml0dGVuTWVnYUJ5dGVzICovCi0JCQkJKHUzMikoZGV2ZS0+d3JpdGVfYnl0ZXMgPj4gMjApLAotCQkJCS8qIEZJWE1FOiBzY3NpQXV0aEludHJIU091dENvbW1hbmRzICovCi0JCQkJMCwKLQkJCQkvKiBzY3NpQXV0aEludHJMYXN0Q3JlYXRpb24gKi8KLQkJCQkodTMyKSgoKHUzMilkZXZlLT5jcmVhdGlvbl90aW1lIC0KLQkJCQkJICAgIElOSVRJQUxfSklGRklFUykgKiAxMDAgLyBIWiksCi0JCQkJLyogRklYTUU6IHNjc2lBdXRoSW50clJvd1N0YXR1cyAqLwotCQkJCSJSZWFkeSIpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmc2VfbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7Ci0KLQkJc3Bpbl9sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCQlhdG9taWNfZGVjKCZzZV9uYWNsLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9hdXRoX2ludHJfc2VxX29wcyA9IHsKLQkuc3RhcnQJPSBzY3NpX2F1dGhfaW50cl9zZXFfc3RhcnQsCi0JLm5leHQJPSBzY3NpX2F1dGhfaW50cl9zZXFfbmV4dCwKLQkuc3RvcAk9IHNjc2lfYXV0aF9pbnRyX3NlcV9zdG9wLAotCS5zaG93CT0gc2NzaV9hdXRoX2ludHJfc2VxX3Nob3cKLX07Ci0KLXN0YXRpYyBpbnQgc2NzaV9hdXRoX2ludHJfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIHNlcV9vcGVuKGZpbGUsICZzY3NpX2F1dGhfaW50cl9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV9hdXRoX2ludHJfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCSA9IFRISVNfTU9EVUxFLAotCS5vcGVuCSA9IHNjc2lfYXV0aF9pbnRyX3NlcV9vcGVuLAotCS5yZWFkCSA9IHNlcV9yZWFkLAotCS5sbHNlZWsJID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCi19OwotCi0vKgotICogU0NTSSBBdHRhY2hlZCBJbml0aWF0b3IgUG9ydCBUYWJsZToKLSAqIEl0IGxpc3RzIHRoZSBTQ1NJIEluaXRpYXRvcnMgYXR0YWNoZWQgdG8gb25lIG9mIHRoZSBsb2NhbCBUYXJnZXQgcG9ydHMuCi0gKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCBhY3RpdmUgVFBHcyBhbmQgdXNlIGFjdGl2ZSBzZXNzaW9ucyBmcm9tIGVhY2ggVFBHCi0gKiB0byBsaXN0IHRoZSBpbmZvIGZvIHRoaXMgdGFibGUuCi0gKi8KLXN0YXRpYyB2b2lkICpzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLXsKLQlzcGluX2xvY2tfYmgoJnNlX2dsb2JhbC0+c2VfdHBnX2xvY2spOwotCXJldHVybiBzZXFfbGlzdF9zdGFydCgmc2VfZ2xvYmFsLT5nX3NlX3RwZ19saXN0LCAqcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfYXR0X2ludHJfcG9ydF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwKLQkJCQkJIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QsIHBvcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzcGluX3VubG9ja19iaCgmc2VfZ2xvYmFsLT5zZV90cGdfbG9jayk7Ci19Ci0KLXN0YXRpYyBpbnQgc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCXN0cnVjdCBzZV9wb3J0YWxfZ3JvdXAgKnNlX3RwZyA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3BvcnRhbF9ncm91cCwKLQkJCQkJCXNlX3RwZ19saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2X2VudHJ5ICpkZXZlOwotCXN0cnVjdCBzZV9sdW4gKmx1bjsKLQlzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKnNlX25hY2w7Ci0Jc3RydWN0IHNlX3Nlc3Npb24gKnNlX3Nlc3M7Ci0JdW5zaWduZWQgY2hhciBidWZbNjRdOwotCWludCBqOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX3RwZy0+c2VfdHBnX2xpc3QsCi0JCQkgICZzZV9nbG9iYWwtPmdfc2VfdHBnX2xpc3QpKQotCQlzZXFfcHV0cyhzZXEsICJpbnN0IGRldiBwb3J0IGluZHggcG9ydF9hdXRoX2luZHggcG9ydF9uYW1lIgotCQkJIiBwb3J0X2lkZW50XG4iKTsKLQotCWlmICghKHNlX3RwZykpCi0JCXJldHVybiAwOwotCi0Jc3Bpbl9sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZV9zZXNzLCAmc2VfdHBnLT50cGdfc2Vzc19saXN0LCBzZXNzX2xpc3QpIHsKLQkJaWYgKChUUEdfVEZPKHNlX3RwZyktPnNlc3NfbG9nZ2VkX2luKHNlX3Nlc3MpKSB8fAotCQkgICAgKCFzZV9zZXNzLT5zZV9ub2RlX2FjbCkgfHwKLQkJICAgICghc2Vfc2Vzcy0+c2Vfbm9kZV9hY2wtPmRldmljZV9saXN0KSkKLQkJCWNvbnRpbnVlOwotCi0JCWF0b21pY19pbmMoJnNlX3Nlc3MtPm1pYl9yZWZfY291bnQpOwotCQlzbXBfbWJfX2FmdGVyX2F0b21pY19pbmMoKTsKLQkJc2VfbmFjbCA9IHNlX3Nlc3MtPnNlX25vZGVfYWNsOwotCQlhdG9taWNfaW5jKCZzZV9uYWNsLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfaW5jKCk7Ci0JCXNwaW5fdW5sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0KLQkJc3Bpbl9sb2NrX2lycSgmc2VfbmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7Ci0JCWZvciAoaiA9IDA7IGogPCBUUkFOU1BPUlRfTUFYX0xVTlNfUEVSX1RQRzsgaisrKSB7Ci0JCQlkZXZlID0gJnNlX25hY2wtPmRldmljZV9saXN0W2pdOwotCQkJaWYgKCEoZGV2ZS0+bHVuX2ZsYWdzICYKLQkJCQkJVFJBTlNQT1JUX0xVTkZMQUdTX0lOSVRJQVRPUl9BQ0NFU1MpIHx8Ci0JCQkgICAoIWRldmUtPnNlX2x1bikpCi0JCQkJY29udGludWU7Ci0KLQkJCWx1biA9IGRldmUtPnNlX2x1bjsKLQkJCWlmICghbHVuLT5sdW5fc2VfZGV2KQotCQkJCWNvbnRpbnVlOwotCi0JCQltZW1zZXQoYnVmLCAwLCA2NCk7Ci0JCQlpZiAoVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbml0aWF0b3Jfc2lkICE9IE5VTEwpCi0JCQkJVFBHX1RGTyhzZV90cGcpLT5zZXNzX2dldF9pbml0aWF0b3Jfc2lkKAotCQkJCQlzZV9zZXNzLCAodW5zaWduZWQgY2hhciAqKSZidWZbMF0sIDY0KTsKLQotCQkJc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAldSAldSAlcytpKyVzXG4iLAotCQkJCS8qIHNjc2lJbnN0SW5kZXggKi8KLQkJCQkoVFBHX1RGTyhzZV90cGcpLT50cGdfZ2V0X2luc3RfaW5kZXggIT0gTlVMTCkgPwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF9pbnN0X2luZGV4KHNlX3RwZykgOgotCQkJCTAsCi0JCQkJLyogc2NzaURldmljZUluZGV4ICovCi0JCQkJbHVuLT5sdW5fc2VfZGV2LT5kZXZfaW5kZXgsCi0JCQkJLyogc2NzaVBvcnRJbmRleCAqLwotCQkJCVRQR19URk8oc2VfdHBnKS0+dHBnX2dldF90YWcoc2VfdHBnKSwKLQkJCQkvKiBzY3NpQXR0SW50clBvcnRJbmRleCAqLwotCQkJCShUUEdfVEZPKHNlX3RwZyktPnNlc3NfZ2V0X2luZGV4ICE9IE5VTEwpID8KLQkJCQlUUEdfVEZPKHNlX3RwZyktPnNlc3NfZ2V0X2luZGV4KHNlX3Nlc3MpIDoKLQkJCQkwLAotCQkJCS8qIHNjc2lBdHRJbnRyUG9ydEF1dGhJbnRySWR4ICovCi0JCQkJc2VfbmFjbC0+YWNsX2luZGV4LAotCQkJCS8qIHNjc2lBdHRJbnRyUG9ydE5hbWUgKi8KLQkJCQlzZV9uYWNsLT5pbml0aWF0b3JuYW1lWzBdID8KLQkJCQkJc2VfbmFjbC0+aW5pdGlhdG9ybmFtZSA6IE5PTkUsCi0JCQkJLyogc2NzaUF0dEludHJQb3J0SWRlbnRpZmllciAqLwotCQkJCWJ1Zik7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxKCZzZV9uYWNsLT5kZXZpY2VfbGlzdF9sb2NrKTsKLQotCQlzcGluX2xvY2soJnNlX3RwZy0+c2Vzc2lvbl9sb2NrKTsKLQkJYXRvbWljX2RlYygmc2VfbmFjbC0+bWliX3JlZl9jb3VudCk7Ci0JCXNtcF9tYl9fYWZ0ZXJfYXRvbWljX2RlYygpOwotCQlhdG9taWNfZGVjKCZzZV9zZXNzLT5taWJfcmVmX2NvdW50KTsKLQkJc21wX21iX19hZnRlcl9hdG9taWNfZGVjKCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZzZV90cGctPnNlc3Npb25fbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wcyA9IHsKLQkuc3RhcnQJPSBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3N0YXJ0LAotCS5uZXh0CT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9uZXh0LAotCS5zdG9wCT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zdG9wLAotCS5zaG93CT0gc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9zaG93Ci19OwotCi1zdGF0aWMgaW50IHNjc2lfYXR0X2ludHJfcG9ydF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2VxX29wZW4oZmlsZSwgJnNjc2lfYXR0X2ludHJfcG9ydF9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV9hdHRfaW50cl9wb3J0X3NlcV9mb3BzID0gewotCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkub3BlbgkgPSBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX29wZW4sCi0JLnJlYWQJID0gc2VxX3JlYWQsCi0JLmxsc2VlawkgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKLX07Ci0KLS8qCi0gKiBTQ1NJIExvZ2ljYWwgVW5pdCBUYWJsZQotICovCi1zdGF0aWMgdm9pZCAqc2NzaV9sdV9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX3N0YXJ0KHNlcSwgcG9zKTsKLX0KLQotc3RhdGljIHZvaWQgKnNjc2lfbHVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQotewotCXJldHVybiBsb2NhdGVfaGJhX25leHQoc2VxLCB2LCBwb3MpOwotfQotCi1zdGF0aWMgdm9pZCBzY3NpX2x1X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQotewotCWxvY2F0ZV9oYmFfc3RvcChzZXEsIHYpOwotfQotCi0jZGVmaW5lIFNDU0lfTFVfSU5ERVgJCTEKLXN0YXRpYyBpbnQgc2NzaV9sdV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLXsKLQlzdHJ1Y3Qgc2VfaGJhICpoYmE7Ci0Jc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYgKnNlX2RldiA9IGxpc3RfZW50cnkodiwgc3RydWN0IHNlX3N1YnN5c3RlbV9kZXYsCi0JCQkJCQlnX3NlX2Rldl9saXN0KTsKLQlzdHJ1Y3Qgc2VfZGV2aWNlICpkZXYgPSBzZV9kZXYtPnNlX2Rldl9wdHI7Ci0JaW50IGo7Ci0JY2hhciBzdHJbMjhdOwotCi0JaWYgKGxpc3RfaXNfZmlyc3QoJnNlX2Rldi0+Z19zZV9kZXZfbGlzdCwgJnNlX2dsb2JhbC0+Z19zZV9kZXZfbGlzdCkpCi0JCXNlcV9wdXRzKHNlcSwgImluc3QgZGV2IGluZHggTFVOIGx1X25hbWUgdmVuZCBwcm9kIHJldiIKLQkJIiBkZXZfdHlwZSBzdGF0dXMgc3RhdGUtYml0IG51bV9jbWRzIHJlYWRfbWJ5dGVzIgotCQkiIHdyaXRlX21ieXRlcyByZXNldHMgZnVsbF9zdGF0IGhzX251bV9jbWRzIGNyZWF0aW9uX3RpbWVcbiIpOwotCi0JaWYgKCEoZGV2KSkKLQkJcmV0dXJuIDA7Ci0KLQloYmEgPSBkZXYtPnNlX2hiYTsKLQlpZiAoIShoYmEpKSB7Ci0JCS8qIExvZyBlcnJvciA/ICovCi0JCXJldHVybiAwOwotCX0KLQotCS8qIEZpeCBMVSBzdGF0ZSwgaWYgd2UgY2FuIHJlYWQgaXQgZnJvbSB0aGUgZGV2aWNlICovCi0Jc2VxX3ByaW50ZihzZXEsICIldSAldSAldSAlbGx1ICVzIiwgaGJhLT5oYmFfaW5kZXgsCi0JCQlkZXYtPmRldl9pbmRleCwgU0NTSV9MVV9JTkRFWCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpMCwgLyogRklYTUU6IHNjc2lMdURlZmF1bHRMdW4gKi8KLQkJCShzdHJsZW4oREVWX1QxMF9XV04oZGV2KS0+dW5pdF9zZXJpYWwpKSA/Ci0JCQkvKiBzY3NpTHVXd25OYW1lICovCi0JCQkoY2hhciAqKSZERVZfVDEwX1dXTihkZXYpLT51bml0X3NlcmlhbFswXSA6Ci0JCQkiTm9uZSIpOwotCi0JbWVtY3B5KCZzdHJbMF0sICh2b2lkICopREVWX1QxMF9XV04oZGV2KSwgMjgpOwotCS8qIHNjc2lMdVZlbmRvcklkICovCi0JZm9yIChqID0gMDsgaiA8IDg7IGorKykKLQkJc3RyW2pdID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT52ZW5kb3Jbal0pID8KLQkJCURFVl9UMTBfV1dOKGRldiktPnZlbmRvcltqXSA6IDB4MjA7Ci0Jc3RyWzhdID0gMDsKLQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIHN0cik7Ci0KLQkvKiBzY3NpTHVQcm9kdWN0SWQgKi8KLQlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykKLQkJc3RyW2pdID0gSVNQUklOVChERVZfVDEwX1dXTihkZXYpLT5tb2RlbFtqXSkgPwotCQkJREVWX1QxMF9XV04oZGV2KS0+bW9kZWxbal0gOiAweDIwOwotCXN0clsxNl0gPSAwOwotCXNlcV9wcmludGYoc2VxLCAiICVzIiwgc3RyKTsKLQotCS8qIHNjc2lMdVJldmlzaW9uSWQgKi8KLQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQotCQlzdHJbal0gPSBJU1BSSU5UKERFVl9UMTBfV1dOKGRldiktPnJldmlzaW9uW2pdKSA/Ci0JCQlERVZfVDEwX1dXTihkZXYpLT5yZXZpc2lvbltqXSA6IDB4MjA7Ci0Jc3RyWzRdID0gMDsKLQlzZXFfcHJpbnRmKHNlcSwgIiAlcyIsIHN0cik7Ci0KLQlzZXFfcHJpbnRmKHNlcSwgIiAldSAlcyAlcyAlbGx1ICV1ICV1ICV1ICV1ICV1ICV1XG4iLAotCQkvKiBzY3NpTHVQZXJpcGhlcmFsVHlwZSAqLwotCQkgICBUUkFOU1BPUlQoZGV2KS0+Z2V0X2RldmljZV90eXBlKGRldiksCi0JCSAgIChkZXYtPmRldl9zdGF0dXMgPT0gVFJBTlNQT1JUX0RFVklDRV9BQ1RJVkFURUQpID8KLQkJImF2YWlsYWJsZSIgOiAibm90YXZhaWxhYmxlIiwgLyogc2NzaUx1U3RhdHVzICovCi0JCSJleHBvc2VkIiwgCS8qIHNjc2lMdVN0YXRlICovCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpZGV2LT5udW1fY21kcywKLQkJLyogc2NzaUx1UmVhZE1lZ2FCeXRlcyAqLwotCQkodTMyKShkZXYtPnJlYWRfYnl0ZXMgPj4gMjApLAotCQkvKiBzY3NpTHVXcml0dGVuTWVnYUJ5dGVzICovCi0JCSh1MzIpKGRldi0+d3JpdGVfYnl0ZXMgPj4gMjApLAotCQlkZXYtPm51bV9yZXNldHMsIC8qIHNjc2lMdUluUmVzZXRzICovCi0JCTAsIC8qIHNjc2lMdU91dFRhc2tTZXRGdWxsU3RhdHVzICovCi0JCTAsIC8qIHNjc2lMdUhTSW5Db21tYW5kcyAqLwotCQkodTMyKSgoKHUzMilkZXYtPmNyZWF0aW9uX3RpbWUgLSBJTklUSUFMX0pJRkZJRVMpICoKLQkJCQkJCQkxMDAgLyBIWikpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgc2NzaV9sdV9zZXFfb3BzID0gewotCS5zdGFydCAgPSBzY3NpX2x1X3NlcV9zdGFydCwKLQkubmV4dCAgID0gc2NzaV9sdV9zZXFfbmV4dCwKLQkuc3RvcCAgID0gc2NzaV9sdV9zZXFfc3RvcCwKLQkuc2hvdyAgID0gc2NzaV9sdV9zZXFfc2hvdwotfTsKLQotc3RhdGljIGludCBzY3NpX2x1X3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzZXFfb3BlbihmaWxlLCAmc2NzaV9sdV9zZXFfb3BzKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc2NzaV9sdV9zZXFfZm9wcyA9IHsKLQkub3duZXIJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4JID0gc2NzaV9sdV9zZXFfb3BlbiwKLQkucmVhZAkgPSBzZXFfcmVhZCwKLQkubGxzZWVrCSA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAotfTsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBSZW1vdmUgcHJvYyBmcyBlbnRyaWVzCi0gKi8KLXZvaWQgcmVtb3ZlX3Njc2lfdGFyZ2V0X21pYih2b2lkKQotewotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9pbnN0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2RldiIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9wb3J0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RyYW5zcG9ydCIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90Z3RfZGV2IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3RndF9wb3J0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2F1dGhfaW50ciIsIE5VTEwpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9hdHRfaW50cl9wb3J0IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2x1IiwgTlVMTCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYiIsIE5VTEwpOwotfQotCi0vKgotICogQ3JlYXRlIHByb2MgZnMgZW50cmllcyBmb3IgdGhlIG1pYiB0YWJsZXMKLSAqLwotaW50IGluaXRfc2NzaV90YXJnZXRfbWliKHZvaWQpCi17Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkaXJfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX2luc3RfZW50cnk7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICpzY3NpX2Rldl9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfdHJhbnNwb3J0X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV90Z3RfZGV2X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV90Z3RfcG9ydF9lbnRyeTsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNjc2lfYXV0aF9pbnRyX2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9hdHRfaW50cl9wb3J0X2VudHJ5OwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqc2NzaV9sdV9lbnRyeTsKLQotCWRpcl9lbnRyeSA9IHByb2NfbWtkaXIoInNjc2lfdGFyZ2V0L21pYiIsIE5VTEwpOwotCWlmICghKGRpcl9lbnRyeSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwcm9jX21rZGlyKCkgZmFpbGVkLlxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlzY3NpX2luc3RfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfaW5zdCIsIDAsIE5VTEwpOwotCWlmIChzY3NpX2luc3RfZW50cnkpCi0JCXNjc2lfaW5zdF9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfaW5zdF9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX2Rldl9lbnRyeSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV9kZXYiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9kZXZfZW50cnkpCi0JCXNjc2lfZGV2X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV9kZXZfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9wb3J0X2VudHJ5ID0KLQkJY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX3BvcnQiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9wb3J0X2VudHJ5KQotCQlzY3NpX3BvcnRfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX3BvcnRfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV90cmFuc3BvcnRfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdHJhbnNwb3J0IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfdHJhbnNwb3J0X2VudHJ5KQotCQlzY3NpX3RyYW5zcG9ydF9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfdHJhbnNwb3J0X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfdGd0X2Rldl9lbnRyeSA9Ci0JCWNyZWF0ZV9wcm9jX2VudHJ5KCJzY3NpX3RhcmdldC9taWIvc2NzaV90Z3RfZGV2IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfdGd0X2Rldl9lbnRyeSkKLQkJc2NzaV90Z3RfZGV2X2VudHJ5LT5wcm9jX2ZvcHMgPSAmc2NzaV90Z3RfZGV2X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfdGd0X3BvcnRfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfdGd0X3BvcnQiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV90Z3RfcG9ydF9lbnRyeSkKLQkJc2NzaV90Z3RfcG9ydF9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfdGd0X3BvcnRfc2VxX2ZvcHM7Ci0JZWxzZQotCQlnb3RvIGVycm9yOwotCi0Jc2NzaV9hdXRoX2ludHJfZW50cnkgPQotCQljcmVhdGVfcHJvY19lbnRyeSgic2NzaV90YXJnZXQvbWliL3Njc2lfYXV0aF9pbnRyIiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfYXV0aF9pbnRyX2VudHJ5KQotCQlzY3NpX2F1dGhfaW50cl9lbnRyeS0+cHJvY19mb3BzID0gJnNjc2lfYXV0aF9pbnRyX3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXNjc2lfYXR0X2ludHJfcG9ydF9lbnRyeSA9Ci0JICAgICAgY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2F0dF9pbnRyX3BvcnQiLCAwLCBOVUxMKTsKLQlpZiAoc2NzaV9hdHRfaW50cl9wb3J0X2VudHJ5KQotCQlzY3NpX2F0dF9pbnRyX3BvcnRfZW50cnktPnByb2NfZm9wcyA9Ci0JCQkJJnNjc2lfYXR0X2ludHJfcG9ydF9zZXFfZm9wczsKLQllbHNlCi0JCWdvdG8gZXJyb3I7Ci0KLQlzY3NpX2x1X2VudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoInNjc2lfdGFyZ2V0L21pYi9zY3NpX2x1IiwgMCwgTlVMTCk7Ci0JaWYgKHNjc2lfbHVfZW50cnkpCi0JCXNjc2lfbHVfZW50cnktPnByb2NfZm9wcyA9ICZzY3NpX2x1X3NlcV9mb3BzOwotCWVsc2UKLQkJZ290byBlcnJvcjsKLQotCXJldHVybiAwOwotCi1lcnJvcjoKLQlwcmludGsoS0VSTl9FUlIgImNyZWF0ZV9wcm9jX2VudHJ5KCkgZmFpbGVkLlxuIik7Ci0JcmVtb3ZlX3Njc2lfdGFyZ2V0X21pYigpOwotCXJldHVybiAtMTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIGluZGV4IHRhYmxlIGZvciBhbGxvY2F0aW5nIHVuaXF1ZSByb3cgaW5kZXhlcyB0byB2YXJpb3VzIG1pYgotICogdGFibGVzCi0gKi8KLXZvaWQgaW5pdF9zY3NpX2luZGV4X3RhYmxlKHZvaWQpCi17Ci0JbWVtc2V0KCZzY3NpX2luZGV4X3RhYmxlLCAwLCBzaXplb2Yoc3RydWN0IHNjc2lfaW5kZXhfdGFibGUpKTsKLQlzcGluX2xvY2tfaW5pdCgmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKLX0KLQotLyoKLSAqIEFsbG9jYXRlIGEgbmV3IHJvdyBpbmRleCBmb3IgdGhlIGVudHJ5IHR5cGUgc3BlY2lmaWVkCi0gKi8KLXUzMiBzY3NpX2dldF9uZXdfaW5kZXgoc2NzaV9pbmRleF90IHR5cGUpCi17Ci0JdTMyIG5ld19pbmRleDsKLQotCWlmICgodHlwZSA8IDApIHx8ICh0eXBlID49IFNDU0lfSU5ERVhfVFlQRV9NQVgpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbmRleCB0eXBlICVkXG4iLCB0eXBlKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCXNwaW5fbG9jaygmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKLQluZXdfaW5kZXggPSArK3Njc2lfaW5kZXhfdGFibGUuc2NzaV9taWJfaW5kZXhbdHlwZV07Ci0JaWYgKG5ld19pbmRleCA9PSAwKQotCQluZXdfaW5kZXggPSArK3Njc2lfaW5kZXhfdGFibGUuc2NzaV9taWJfaW5kZXhbdHlwZV07Ci0Jc3Bpbl91bmxvY2soJnNjc2lfaW5kZXhfdGFibGUubG9jayk7Ci0KLQlyZXR1cm4gbmV3X2luZGV4OwotfQotRVhQT1JUX1NZTUJPTChzY3NpX2dldF9uZXdfaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfbWliLmggYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc3MjA0Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSNpZm5kZWYgVEFSR0VUX0NPUkVfTUlCX0gKLSNkZWZpbmUgVEFSR0VUX0NPUkVfTUlCX0gKLQotdHlwZWRlZiBlbnVtIHsKLQlTQ1NJX0lOU1RfSU5ERVgsCi0JU0NTSV9ERVZJQ0VfSU5ERVgsCi0JU0NTSV9BVVRIX0lOVFJfSU5ERVgsCi0JU0NTSV9JTkRFWF9UWVBFX01BWAotfSBzY3NpX2luZGV4X3Q7Ci0KLXN0cnVjdCBzY3NpX2luZGV4X3RhYmxlIHsKLQlzcGlubG9ja190CWxvY2s7Ci0JdTMyIAkJc2NzaV9taWJfaW5kZXhbU0NTSV9JTkRFWF9UWVBFX01BWF07Ci19IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKLQotLyogU0NTSSBQb3J0IHN0YXRzICovCi1zdHJ1Y3Qgc2NzaV9wb3J0X3N0YXRzIHsKLQl1NjQJY21kX3BkdXM7Ci0JdTY0CXR4X2RhdGFfb2N0ZXRzOwotCXU2NAlyeF9kYXRhX29jdGV0czsKLX0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCi1leHRlcm4gaW50IGluaXRfc2NzaV90YXJnZXRfbWliKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVtb3ZlX3Njc2lfdGFyZ2V0X21pYih2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfc2NzaV9pbmRleF90YWJsZSh2b2lkKTsKLWV4dGVybiB1MzIgc2NzaV9nZXRfbmV3X2luZGV4KHNjc2lfaW5kZXhfdCk7Ci0KLSNlbmRpZiAgIC8qKiogVEFSR0VUX0NPUkVfTUlCX0ggKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfcHNjc2kuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3BzY3NpLmMKaW5kZXggNzQyZDI0Ni4uZjJhMDg0NzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9wc2NzaS5jCisrKyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3BzY3NpLmMKQEAgLTQ2Miw4ICs0NjIsOCBAQAogCSAqLwogCWJkID0gYmxrZGV2X2dldF9ieV9wYXRoKHNlX2Rldi0+c2VfZGV2X3VkZXZfcGF0aCwKIAkJCQlGTU9ERV9XUklURXxGTU9ERV9SRUFEfEZNT0RFX0VYQ0wsIHBkdik7Ci0JaWYgKCEoYmQpKSB7Ci0JCXByaW50aygicFNDU0k6IGJsa2Rldl9nZXRfYnlfcGF0aCgpIGZhaWxlZFxuIik7CisJaWYgKElTX0VSUihiZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJwU0NTSTogYmxrZGV2X2dldF9ieV9wYXRoKCkgZmFpbGVkXG4iKTsKIAkJc2NzaV9kZXZpY2VfcHV0KHNkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHBnLmMgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYwppbmRleCBhYmZhODFhLi5jMjZmNjc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYworKysgYi9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cGcuYwpAQCAtMjc1LDcgKzI3NSw2IEBACiAJc3Bpbl9sb2NrX2luaXQoJmFjbC0+ZGV2aWNlX2xpc3RfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFjbC0+bmFjbF9zZXNzX2xvY2spOwogCWF0b21pY19zZXQoJmFjbC0+YWNsX3ByX3JlZl9jb3VudCwgMCk7Ci0JYXRvbWljX3NldCgmYWNsLT5taWJfcmVmX2NvdW50LCAwKTsKIAlhY2wtPnF1ZXVlX2RlcHRoID0gVFBHX1RGTyh0cGcpLT50cGdfZ2V0X2RlZmF1bHRfZGVwdGgodHBnKTsKIAlzbnByaW50ZihhY2wtPmluaXRpYXRvcm5hbWUsIFRSQU5TUE9SVF9JUU5fTEVOLCAiJXMiLCBpbml0aWF0b3JuYW1lKTsKIAlhY2wtPnNlX3RwZyA9IHRwZzsKQEAgLTMxOCwxMiArMzE3LDYgQEAKIAkJY3B1X3JlbGF4KCk7CiB9CiAKLXZvaWQgY29yZV90cGdfd2FpdF9mb3JfbWliX3JlZihzdHJ1Y3Qgc2Vfbm9kZV9hY2wgKm5hY2wpCi17Ci0Jd2hpbGUgKGF0b21pY19yZWFkKCZuYWNsLT5taWJfcmVmX2NvdW50KSAhPSAwKQotCQljcHVfcmVsYXgoKTsKLX0KLQogdm9pZCBjb3JlX3RwZ19jbGVhcl9vYmplY3RfbHVucyhzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGcpCiB7CiAJaW50IGksIHJldDsKQEAgLTQ4MCw3ICs0NzMsNiBAQAogCXNwaW5fdW5sb2NrX2JoKCZ0cGctPnNlc3Npb25fbG9jayk7CiAKIAljb3JlX3RwZ193YWl0X2Zvcl9uYWNsX3ByX3JlZihhY2wpOwotCWNvcmVfdHBnX3dhaXRfZm9yX21pYl9yZWYoYWNsKTsKIAljb3JlX2NsZWFyX2luaXRpYXRvcl9ub2RlX2Zyb21fdHBnKGFjbCwgdHBnKTsKIAljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUoYWNsLCB0cGcpOwogCkBAIC03MDEsNiArNjkzLDggQEAKIAogaW50IGNvcmVfdHBnX2RlcmVnaXN0ZXIoc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnKQogeworCXN0cnVjdCBzZV9ub2RlX2FjbCAqbmFjbCwgKm5hY2xfdG1wOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiVEFSR0VUX0NPUkVbJXNdOiBEZWFsbG9jYXRpbmcgJXMgc3RydWN0IHNlX3BvcnRhbF9ncm91cCIKIAkJIiBmb3IgZW5kcG9pbnQ6ICVzIFBvcnRhbCBUYWcgJXVcbiIsCiAJCShzZV90cGctPnNlX3RwZ190eXBlID09IFRSQU5TUE9SVF9UUEdfVFlQRV9OT1JNQUwpID8KQEAgLTcxNCw2ICs3MDgsMjUgQEAKIAogCXdoaWxlIChhdG9taWNfcmVhZCgmc2VfdHBnLT50cGdfcHJfcmVmX2NvdW50KSAhPSAwKQogCQljcHVfcmVsYXgoKTsKKwkvKgorCSAqIFJlbGVhc2UgYW55IHJlbWFpbmluZyBkZW1vLW1vZGUgZ2VuZXJhdGVkIHNlX25vZGVfYWNsIHRoYXQgaGF2ZQorCSAqIG5vdCBiZWVuIHJlbGVhc2VkIGJlY2F1c2Ugb2YgVEZPLT50cGdfY2hlY2tfZGVtb19tb2RlX2NhY2hlKCkgPT0gMQorCSAqIGluIHRyYW5zcG9ydF9kZXJlZ2lzdGVyX3Nlc3Npb24oKS4KKwkgKi8KKwlzcGluX2xvY2tfYmgoJnNlX3RwZy0+YWNsX25vZGVfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG5hY2wsIG5hY2xfdG1wLCAmc2VfdHBnLT5hY2xfbm9kZV9saXN0LAorCQkJYWNsX2xpc3QpIHsKKwkJbGlzdF9kZWwoJm5hY2wtPmFjbF9saXN0KTsKKwkJc2VfdHBnLT5udW1fbm9kZV9hY2xzLS07CisJCXNwaW5fdW5sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCisJCWNvcmVfdHBnX3dhaXRfZm9yX25hY2xfcHJfcmVmKG5hY2wpOworCQljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUobmFjbCwgc2VfdHBnKTsKKwkJVFBHX1RGTyhzZV90cGcpLT50cGdfcmVsZWFzZV9mYWJyaWNfYWNsKHNlX3RwZywgbmFjbCk7CisKKwkJc3Bpbl9sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOworCX0KKwlzcGluX3VubG9ja19iaCgmc2VfdHBnLT5hY2xfbm9kZV9sb2NrKTsKIAogCWlmIChzZV90cGctPnNlX3RwZ190eXBlID09IFRSQU5TUE9SVF9UUEdfVFlQRV9OT1JNQUwpCiAJCWNvcmVfdHBnX3JlbGVhc2VfdmlydHVhbF9sdW4wKHNlX3RwZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5jCmluZGV4IDI4YjYyOTJmZi4uMjM2ZTIyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmMKQEAgLTM3OSw2ICszNzksNDAgQEAKIAlzZV9nbG9iYWwgPSBOVUxMOwogfQogCisvKiBTQ1NJIHN0YXRpc3RpY3MgdGFibGUgaW5kZXggKi8KK3N0YXRpYyBzdHJ1Y3Qgc2NzaV9pbmRleF90YWJsZSBzY3NpX2luZGV4X3RhYmxlOworCisvKgorICogSW5pdGlhbGl6ZSB0aGUgaW5kZXggdGFibGUgZm9yIGFsbG9jYXRpbmcgdW5pcXVlIHJvdyBpbmRleGVzIHRvIHZhcmlvdXMgbWliCisgKiB0YWJsZXMuCisgKi8KK3ZvaWQgaW5pdF9zY3NpX2luZGV4X3RhYmxlKHZvaWQpCit7CisJbWVtc2V0KCZzY3NpX2luZGV4X3RhYmxlLCAwLCBzaXplb2Yoc3RydWN0IHNjc2lfaW5kZXhfdGFibGUpKTsKKwlzcGluX2xvY2tfaW5pdCgmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKK30KKworLyoKKyAqIEFsbG9jYXRlIGEgbmV3IHJvdyBpbmRleCBmb3IgdGhlIGVudHJ5IHR5cGUgc3BlY2lmaWVkCisgKi8KK3UzMiBzY3NpX2dldF9uZXdfaW5kZXgoc2NzaV9pbmRleF90IHR5cGUpCit7CisJdTMyIG5ld19pbmRleDsKKworCWlmICgodHlwZSA8IDApIHx8ICh0eXBlID49IFNDU0lfSU5ERVhfVFlQRV9NQVgpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbmRleCB0eXBlICVkXG4iLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrKCZzY3NpX2luZGV4X3RhYmxlLmxvY2spOworCW5ld19pbmRleCA9ICsrc2NzaV9pbmRleF90YWJsZS5zY3NpX21pYl9pbmRleFt0eXBlXTsKKwlpZiAobmV3X2luZGV4ID09IDApCisJCW5ld19pbmRleCA9ICsrc2NzaV9pbmRleF90YWJsZS5zY3NpX21pYl9pbmRleFt0eXBlXTsKKwlzcGluX3VubG9jaygmc2NzaV9pbmRleF90YWJsZS5sb2NrKTsKKworCXJldHVybiBuZXdfaW5kZXg7Cit9CisKIHZvaWQgdHJhbnNwb3J0X2luaXRfcXVldWVfb2JqKHN0cnVjdCBzZV9xdWV1ZV9vYmogKnFvYmopCiB7CiAJYXRvbWljX3NldCgmcW9iai0+cXVldWVfY250LCAwKTsKQEAgLTQzNyw3ICs0NzEsNiBAQAogCX0KIAlJTklUX0xJU1RfSEVBRCgmc2Vfc2Vzcy0+c2Vzc19saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmc2Vfc2Vzcy0+c2Vzc19hY2xfbGlzdCk7Ci0JYXRvbWljX3NldCgmc2Vfc2Vzcy0+bWliX3JlZl9jb3VudCwgMCk7CiAKIAlyZXR1cm4gc2Vfc2VzczsKIH0KQEAgLTU0NiwxMiArNTc5LDYgQEAKIAkJdHJhbnNwb3J0X2ZyZWVfc2Vzc2lvbihzZV9zZXNzKTsKIAkJcmV0dXJuOwogCX0KLQkvKgotCSAqIFdhaXQgZm9yIHBvc3NpYmxlIHJlZmVyZW5jZSBpbiBkcml2ZXJzL3RhcmdldC90YXJnZXRfY29yZV9taWIuYzoKLQkgKiBzY3NpX2F0dF9pbnRyX3BvcnRfc2VxX3Nob3coKQotCSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmc2Vfc2Vzcy0+bWliX3JlZl9jb3VudCkgIT0gMCkKLQkJY3B1X3JlbGF4KCk7CiAKIAlzcGluX2xvY2tfYmgoJnNlX3RwZy0+c2Vzc2lvbl9sb2NrKTsKIAlsaXN0X2RlbCgmc2Vfc2Vzcy0+c2Vzc19saXN0KTsKQEAgLTU3NCw3ICs2MDEsNiBAQAogCQkJCXNwaW5fdW5sb2NrX2JoKCZzZV90cGctPmFjbF9ub2RlX2xvY2spOwogCiAJCQkJY29yZV90cGdfd2FpdF9mb3JfbmFjbF9wcl9yZWYoc2VfbmFjbCk7Ci0JCQkJY29yZV90cGdfd2FpdF9mb3JfbWliX3JlZihzZV9uYWNsKTsKIAkJCQljb3JlX2ZyZWVfZGV2aWNlX2xpc3RfZm9yX25vZGUoc2VfbmFjbCwgc2VfdHBnKTsKIAkJCQlUUEdfVEZPKHNlX3RwZyktPnRwZ19yZWxlYXNlX2ZhYnJpY19hY2woc2VfdHBnLAogCQkJCQkJc2VfbmFjbCk7CkBAIC00ODI3LDYgKzQ4NTMsOCBAQAogCiAJCXJldHVybiByZXQ7CiAJfQorCisJQlVHX09OKGxpc3RfZW1wdHkoc2VfbWVtX2xpc3QpKTsKIAkvKgogCSAqIFRoaXMgaXMgdGhlIG5vcm1hbCBwYXRoIGZvciBhbGwgbm9ybWFsIG5vbiBCSURJIGFuZCBCSURJLUNPTU1BTkQKIAkgKiBXUklURSBwYXlsb2Fkcy4uICBJZiB3ZSBuZWVkIHRvIGRvIEJJREkgUkVBRCBwYXNzdGhyb3VnaCBmb3IKQEAgLTUwMDgsNyArNTAzNiw5IEBACiAJCXN0cnVjdCBzZV9tZW0gKnNlX21lbSA9IE5VTEwsICpzZV9tZW1fbG91dCA9IE5VTEw7CiAJCXUzMiBzZV9tZW1fY250ID0gMCwgdGFza19vZmZzZXQgPSAwOwogCi0JCUJVR19PTihsaXN0X2VtcHR5KGNtZC0+dF90YXNrLT50X21lbV9saXN0KSk7CisJCWlmICghbGlzdF9lbXB0eShUX1RBU0soY21kKS0+dF9tZW1fbGlzdCkpCisJCQlzZV9tZW0gPSBsaXN0X2VudHJ5KFRfVEFTSyhjbWQpLT50X21lbV9saXN0LT5uZXh0LAorCQkJCQlzdHJ1Y3Qgc2VfbWVtLCBzZV9saXN0KTsKIAogCQlyZXQgPSB0cmFuc3BvcnRfZG9fc2VfbWVtX21hcChkZXYsIHRhc2ssCiAJCQkJY21kLT50X3Rhc2stPnRfbWVtX2xpc3QsIE5VTEwsIHNlX21lbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9LY29uZmlnIGIvZHJpdmVycy90aGVybWFsL0tjb25maWcKaW5kZXggZjdhNWRiYS4uYmY3YzY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90aGVybWFsL0tjb25maWcKQEAgLTQsNyArNCw2IEBACiAKIG1lbnVjb25maWcgVEhFUk1BTAogCXRyaXN0YXRlICJHZW5lcmljIFRoZXJtYWwgc3lzZnMgZHJpdmVyIgotCWRlcGVuZHMgb24gTkVUCiAJaGVscAogCSAgR2VuZXJpYyBUaGVybWFsIFN5c2ZzIGRyaXZlciBvZmZlcnMgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IKIAkgIHRoZXJtYWwgbWFuYWdlbWVudC4gVXN1YWxseSBpdCdzIG1hZGUgdXAgb2Ygb25lIG9yIG1vcmUgdGhlcm1hbApkaWZmIC0tZ2l0IGEvZHJpdmVycy90aGVybWFsL3RoZXJtYWxfc3lzLmMgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwppbmRleCA3ZDBlNjNjLi43MTNiN2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYworKysgYi9kcml2ZXJzL3RoZXJtYWwvdGhlcm1hbF9zeXMuYwpAQCAtNjIsMjAgKzYyLDYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB0aGVybWFsX2V2ZW50X3NlcW51bTsKIAotc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSB0aGVybWFsX2V2ZW50X2dlbmxfZmFtaWx5ID0gewotCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCi0JLm5hbWUgPSBUSEVSTUFMX0dFTkxfRkFNSUxZX05BTUUsCi0JLnZlcnNpb24gPSBUSEVSTUFMX0dFTkxfVkVSU0lPTiwKLQkubWF4YXR0ciA9IFRIRVJNQUxfR0VOTF9BVFRSX01BWCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9tdWx0aWNhc3RfZ3JvdXAgdGhlcm1hbF9ldmVudF9tY2dycCA9IHsKLQkubmFtZSA9IFRIRVJNQUxfR0VOTF9NQ0FTVF9HUk9VUF9OQU1FLAotfTsKLQotc3RhdGljIGludCBnZW5ldGxpbmtfaW5pdCh2b2lkKTsKLXN0YXRpYyB2b2lkIGdlbmV0bGlua19leGl0KHZvaWQpOwotCiBzdGF0aWMgaW50IGdldF9pZHIoc3RydWN0IGlkciAqaWRyLCBzdHJ1Y3QgbXV0ZXggKmxvY2ssIGludCAqaWQpCiB7CiAJaW50IGVycjsKQEAgLTEyMjUsNiArMTIxMSwxOCBAQAogCiBFWFBPUlRfU1lNQk9MKHRoZXJtYWxfem9uZV9kZXZpY2VfdW5yZWdpc3Rlcik7CiAKKyNpZmRlZiBDT05GSUdfTkVUCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHRoZXJtYWxfZXZlbnRfZ2VubF9mYW1pbHkgPSB7CisJLmlkID0gR0VOTF9JRF9HRU5FUkFURSwKKwkubmFtZSA9IFRIRVJNQUxfR0VOTF9GQU1JTFlfTkFNRSwKKwkudmVyc2lvbiA9IFRIRVJNQUxfR0VOTF9WRVJTSU9OLAorCS5tYXhhdHRyID0gVEhFUk1BTF9HRU5MX0FUVFJfTUFYLAorfTsKKworc3RhdGljIHN0cnVjdCBnZW5sX211bHRpY2FzdF9ncm91cCB0aGVybWFsX2V2ZW50X21jZ3JwID0geworCS5uYW1lID0gVEhFUk1BTF9HRU5MX01DQVNUX0dST1VQX05BTUUsCit9OworCiBpbnQgZ2VuZXJhdGVfbmV0bGlua19ldmVudCh1MzIgb3JpZywgZW51bSBldmVudHMgZXZlbnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEzMDEsNiArMTI5OSwxNSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIGdlbmV0bGlua19leGl0KHZvaWQpCit7CisJZ2VubF91bnJlZ2lzdGVyX2ZhbWlseSgmdGhlcm1hbF9ldmVudF9nZW5sX2ZhbWlseSk7Cit9CisjZWxzZSAvKiAhQ09ORklHX05FVCAqLworc3RhdGljIGlubGluZSBpbnQgZ2VuZXRsaW5rX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGdlbmV0bGlua19leGl0KHZvaWQpIHt9CisjZW5kaWYgLyogIUNPTkZJR19ORVQgKi8KKwogc3RhdGljIGludCBfX2luaXQgdGhlcm1hbF9pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CkBAIC0xMzE2LDExICsxMzIzLDYgQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBnZW5ldGxpbmtfZXhpdCh2b2lkKQotewotCWdlbmxfdW5yZWdpc3Rlcl9mYW1pbHkoJnRoZXJtYWxfZXZlbnRfZ2VubF9mYW1pbHkpOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGhlcm1hbF9leGl0KHZvaWQpCiB7CiAJY2xhc3NfdW5yZWdpc3RlcigmdGhlcm1hbF9jbGFzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9odmMvTWFrZWZpbGUKaW5kZXggZTZiZWQ1Zi4uZDc5ZTdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvaHZjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L2h2Yy9NYWtlZmlsZQpAQCAtMTAsNCArMTAsMyBAQAogb2JqLSQoQ09ORklHX0hWQ19JVUNWKQkJKz0gaHZjX2l1Y3Yubwogb2JqLSQoQ09ORklHX0hWQ19VREJHKQkJKz0gaHZjX3VkYmcubwogb2JqLSQoQ09ORklHX0hWQ1MpCQkrPSBodmNzLm8KLW9iai0kKENPTkZJR19WSVJUSU9fQ09OU09MRSkJKz0gdmlydGlvX2NvbnNvbGUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvbl9nc20uYyBiL2RyaXZlcnMvdHR5L25fZ3NtLmMKaW5kZXggNDRiODQxMi4uYWEyZTVkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9nc20uYworKysgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCkBAIC0yNDE0LDYgKzI0MTQsNyBAQAogCiAJZ3NtLT5pbml0aWF0b3IgPSBjLT5pbml0aWF0b3I7CiAJZ3NtLT5tcnUgPSBjLT5tcnU7CisJZ3NtLT5tdHUgPSBjLT5tdHU7CiAJZ3NtLT5lbmNvZGluZyA9IGMtPmVuY2Fwc3VsYXRpb247CiAJZ3NtLT5hZGFwdGlvbiA9IGMtPmFkYXB0aW9uOwogCWdzbS0+bjIgPSBjLT5uMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25faGRsYy5jIGIvZHJpdmVycy90dHkvbl9oZGxjLmMKaW5kZXggNDdkMzIyOC4uNTJmYzBjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvbl9oZGxjLmMKKysrIGIvZHJpdmVycy90dHkvbl9oZGxjLmMKQEAgLTU4MSw4ICs1ODEsOSBAQAogCQkJICAgX191OCBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5yKQogewogCXN0cnVjdCBuX2hkbGMgKm5faGRsYyA9IHR0eTJuX2hkbGModHR5KTsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCXN0cnVjdCBuX2hkbGNfYnVmICpyYnVmOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCiAJaWYgKGRlYnVnbGV2ZWwgPj0gREVCVUdfTEVWRUxfSU5GTykJCiAJCXByaW50aygiJXMoJWQpbl9oZGxjX3R0eV9yZWFkKCkgY2FsbGVkXG4iLF9fRklMRV9fLF9fTElORV9fKTsKQEAgLTU5OCw1NyArNTk5LDU1IEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXR0eV9sb2NrKCk7CisJYWRkX3dhaXRfcXVldWUoJnR0eS0+cmVhZF93YWl0LCAmd2FpdCk7CiAKIAlmb3IgKDs7KSB7CiAJCWlmICh0ZXN0X2JpdChUVFlfT1RIRVJfQ0xPU0VELCAmdHR5LT5mbGFncykpIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUlPOworCQkJcmV0ID0gLUVJTzsKKwkJCWJyZWFrOwogCQl9CisJCWlmICh0dHlfaHVuZ191cF9wKGZpbGUpKQorCQkJYnJlYWs7CiAKLQkJbl9oZGxjID0gdHR5Mm5faGRsYyAodHR5KTsKLQkJaWYgKCFuX2hkbGMgfHwgbl9oZGxjLT5tYWdpYyAhPSBIRExDX01BR0lDIHx8Ci0JCQkgdHR5ICE9IG5faGRsYy0+dHR5KSB7Ci0JCQl0dHlfdW5sb2NrKCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCiAJCXJidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT5yeF9idWZfbGlzdCk7Ci0JCWlmIChyYnVmKQorCQlpZiAocmJ1ZikgeworCQkJaWYgKHJidWYtPmNvdW50ID4gbnIpIHsKKwkJCQkvKiB0b28gbGFyZ2UgZm9yIGNhbGxlcidzIGJ1ZmZlciAqLworCQkJCXJldCA9IC1FT1ZFUkZMT1c7CisJCQl9IGVsc2UgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCByYnVmLT5idWYsIHJidWYtPmNvdW50KSkKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQllbHNlCisJCQkJCXJldCA9IHJidWYtPmNvdW50OworCQkJfQorCisJCQlpZiAobl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LmNvdW50ID4KKwkJCSAgICBERUZBVUxUX1JYX0JVRl9DT1VOVCkKKwkJCQlrZnJlZShyYnVmKTsKKwkJCWVsc2UKKwkJCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LCByYnVmKTsKIAkJCWJyZWFrOworCQl9CiAJCQkKIAkJLyogbm8gZGF0YSAqLwogCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXR0eV91bmxvY2soKTsKLQkJCXJldHVybiAtRUFHQUlOOworCQkJcmV0ID0gLUVBR0FJTjsKKwkJCWJyZWFrOwogCQl9Ci0JCQkKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbiAoJnR0eS0+cmVhZF93YWl0KTsKKworCQlzY2hlZHVsZSgpOworCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJdHR5X3VubG9jaygpOwotCQkJcmV0dXJuIC1FSU5UUjsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOwogCQl9CiAJfQotCQkKLQlpZiAocmJ1Zi0+Y291bnQgPiBucikKLQkJLyogZnJhbWUgdG9vIGxhcmdlIGZvciBjYWxsZXIncyBidWZmZXIgKGRpc2NhcmQgZnJhbWUpICovCi0JCXJldCA9IC1FT1ZFUkZMT1c7Ci0JZWxzZSB7Ci0JCS8qIENvcHkgdGhlIGRhdGEgdG8gdGhlIGNhbGxlcidzIGJ1ZmZlciAqLwotCQlpZiAoY29weV90b191c2VyKGJ1ZiwgcmJ1Zi0+YnVmLCByYnVmLT5jb3VudCkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCQllbHNlCi0JCQlyZXQgPSByYnVmLT5jb3VudDsKLQl9Ci0JCi0JLyogcmV0dXJuIEhETEMgYnVmZmVyIHRvIGZyZWUgbGlzdCB1bmxlc3MgdGhlIGZyZWUgbGlzdCAqLwotCS8qIGNvdW50IGhhcyBleGNlZWRlZCB0aGUgZGVmYXVsdCB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB0aGUgKi8KLQkvKiBidWZmZXIgaXMgZnJlZWQgYmFjayB0byB0aGUgT1MgdG8gY29uc2VydmUgbWVtb3J5ICovCi0JaWYgKG5faGRsYy0+cnhfZnJlZV9idWZfbGlzdC5jb3VudCA+IERFRkFVTFRfUlhfQlVGX0NPVU5UKQotCQlrZnJlZShyYnVmKTsKLQllbHNlCQotCQluX2hkbGNfYnVmX3B1dCgmbl9oZGxjLT5yeF9mcmVlX2J1Zl9saXN0LHJidWYpOwotCXR0eV91bmxvY2soKTsKKworCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPnJlYWRfd2FpdCwgJndhaXQpOworCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKKwogCXJldHVybiByZXQ7CiAJCiB9CS8qIGVuZCBvZiBuX2hkbGNfdHR5X3JlYWQoKSAqLwpAQCAtNjkxLDE0ICs2OTAsMTUgQEAKIAkJY291bnQgPSBtYXhmcmFtZTsKIAl9CiAJCi0JdHR5X2xvY2soKTsKLQogCWFkZF93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQotCS8qIEFsbG9jYXRlIHRyYW5zbWl0IGJ1ZmZlciAqLwotCS8qIHNsZWVwIHVudGlsIHRyYW5zbWl0IGJ1ZmZlciBhdmFpbGFibGUgKi8JCQotCXdoaWxlICghKHRidWYgPSBuX2hkbGNfYnVmX2dldCgmbl9oZGxjLT50eF9mcmVlX2J1Zl9saXN0KSkpIHsKKwkJdGJ1ZiA9IG5faGRsY19idWZfZ2V0KCZuX2hkbGMtPnR4X2ZyZWVfYnVmX2xpc3QpOworCQlpZiAodGJ1ZikKKwkJCWJyZWFrOworCiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewogCQkJZXJyb3IgPSAtRUFHQUlOOwogCQkJYnJlYWs7CkBAIC03MTksNyArNzE5LDcgQEAKIAkJfQogCX0KIAotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCXJlbW92ZV93YWl0X3F1ZXVlKCZ0dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKIAogCWlmICghZXJyb3IpIHsJCQpAQCAtNzMxLDcgKzczMSw3IEBACiAJCW5faGRsY19idWZfcHV0KCZuX2hkbGMtPnR4X2J1Zl9saXN0LHRidWYpOwogCQluX2hkbGNfc2VuZF9mcmFtZXMobl9oZGxjLHR0eSk7CiAJfQotCXR0eV91bmxvY2soKTsKKwogCXJldHVybiBlcnJvcjsKIAkKIH0JLyogZW5kIG9mIG5faGRsY190dHlfd3JpdGUoKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsLzY4MzI4c2VyaWFsLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzMjhzZXJpYWwuYwppbmRleCBiZTBlYmNlLi5kZTAxNjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzMjhzZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvNjgzMjhzZXJpYWwuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAKIHN0YXRpYyB2b2lkIHJlY2VpdmVfY2hhcnMoc3RydWN0IG02OGtfc2VyaWFsICppbmZvLCB1bnNpZ25lZCBzaG9ydCByeCkKIHsKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+cG9ydC50dHk7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKIAltNjgzMjhfdWFydCAqdWFydCA9ICZ1YXJ0X2FkZHJbaW5mby0+bGluZV07CiAJdW5zaWduZWQgY2hhciBjaCwgZmxhZzsKIApAQCAtMzI5LDcgKzMyOSw3IEBACiAJCWdvdG8gY2xlYXJfYW5kX3JldHVybjsKIAl9CiAKLQlpZigoaW5mby0+eG1pdF9jbnQgPD0gMCkgfHwgaW5mby0+cG9ydC50dHktPnN0b3BwZWQpIHsKKwlpZigoaW5mby0+eG1pdF9jbnQgPD0gMCkgfHwgaW5mby0+dHR5LT5zdG9wcGVkKSB7CiAJCS8qIFRoYXQncyBwZWN1bGlhci4uLiBUWCBpbnRzIG9mZiAqLwogCQl1YXJ0LT51c3RjbnQgJj0gflVTVENOVF9UWF9JTlRSX01BU0s7CiAJCWdvdG8gY2xlYXJfYW5kX3JldHVybjsKQEAgLTM4Myw3ICszODMsNyBAQAogCXN0cnVjdCBtNjhrX3NlcmlhbAkqaW5mbyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbTY4a19zZXJpYWwsIHRxdWV1ZSk7CiAJc3RydWN0IHR0eV9zdHJ1Y3QJKnR0eTsKIAkKLQl0dHkgPSBpbmZvLT5wb3J0LnR0eTsKKwl0dHkgPSBpbmZvLT50dHk7CiAJaWYgKCF0dHkpCiAJCXJldHVybjsKICNpZiAwCkBAIC00MDcsNyArNDA3LDcgQEAKIAlzdHJ1Y3QgbTY4a19zZXJpYWwJKmluZm8gPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG02OGtfc2VyaWFsLCB0cXVldWVfaGFuZ3VwKTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdAkqdHR5OwogCQotCXR0eSA9IGluZm8tPnBvcnQudHR5OworCXR0eSA9IGluZm8tPnR0eTsKIAlpZiAoIXR0eSkKIAkJcmV0dXJuOwogCkBAIC00NTEsOCArNDUxLDggQEAKIAl1YXJ0LT51c3RjbnQgPSBVU1RDTlRfVUVOIHwgVVNUQ05UX1JYRU4gfCBVU1RDTlRfUlhfSU5UUl9NQVNLOwogI2VuZGlmCiAKLQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT5wb3J0LnR0eS0+ZmxhZ3MpOworCWlmIChpbmZvLT50dHkpCisJCWNsZWFyX2JpdChUVFlfSU9fRVJST1IsICZpbmZvLT50dHktPmZsYWdzKTsKIAlpbmZvLT54bWl0X2NudCA9IGluZm8tPnhtaXRfaGVhZCA9IGluZm8tPnhtaXRfdGFpbCA9IDA7CiAKIAkvKgpAQCAtNDg2LDggKzQ4Niw4IEBACiAJCWluZm8tPnhtaXRfYnVmID0gMDsKIAl9CiAKLQlpZiAoaW5mby0+cG9ydC50dHkpCi0JCXNldF9iaXQoVFRZX0lPX0VSUk9SLCAmaW5mby0+cG9ydC50dHktPmZsYWdzKTsKKwlpZiAoaW5mby0+dHR5KQorCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJmluZm8tPnR0eS0+ZmxhZ3MpOwogCQogCWluZm8tPmZsYWdzICY9IH5TX0lOSVRJQUxJWkVEOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTU1Myw5ICs1NTMsOSBAQAogCXVuc2lnbmVkIGNmbGFnOwogCWludAlpOwogCi0JaWYgKCFpbmZvLT5wb3J0LnR0eSB8fCAhaW5mby0+cG9ydC50dHktPnRlcm1pb3MpCisJaWYgKCFpbmZvLT50dHkgfHwgIWluZm8tPnR0eS0+dGVybWlvcykKIAkJcmV0dXJuOwotCWNmbGFnID0gaW5mby0+cG9ydC50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisJY2ZsYWcgPSBpbmZvLT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJaWYgKCEocG9ydCA9IGluZm8tPnBvcnQpKQogCQlyZXR1cm47CiAKQEAgLTk3MCw3ICs5NzAsNiBAQAogc3RhdGljIGludCByc19pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgZXJyb3I7CiAJc3RydWN0IG02OGtfc2VyaWFsICogaW5mbyA9IChzdHJ1Y3QgbTY4a19zZXJpYWwgKil0dHktPmRyaXZlcl9kYXRhOwogCWludCByZXR2YWw7CiAKQEAgLTExMDQsNyArMTEwMyw3IEBACiAJdHR5X2xkaXNjX2ZsdXNoKHR0eSk7CiAJdHR5LT5jbG9zaW5nID0gMDsKIAlpbmZvLT5ldmVudCA9IDA7Ci0JaW5mby0+cG9ydC50dHkgPSBOVUxMOworCWluZm8tPnR0eSA9IE5VTEw7CiAjd2FybmluZyAiVGhpcyBpcyBub3QgYW5kIGhhcyBuZXZlciBiZWVuIHZhbGlkIHNvIGZpeCBpdCIJCiAjaWYgMAogCWlmICh0dHktPmxkaXNjLm51bSAhPSBsZGlzY3NbTl9UVFldLm51bSkgewpAQCAtMTE0Miw3ICsxMTQxLDcgQEAKIAlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+Y291bnQgPSAwOwogCWluZm8tPmZsYWdzICY9IH5TX05PUk1BTF9BQ1RJVkU7Ci0JaW5mby0+cG9ydC50dHkgPSBOVUxMOworCWluZm8tPnR0eSA9IE5VTEw7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOwogfQogCkBAIC0xMjYxLDcgKzEyNjAsNyBAQAogCiAJaW5mby0+Y291bnQrKzsKIAl0dHktPmRyaXZlcl9kYXRhID0gaW5mbzsKLQlpbmZvLT5wb3J0LnR0eSA9IHR0eTsKKwlpbmZvLT50dHkgPSB0dHk7CiAKIAkvKgogCSAqIFN0YXJ0IHVwIHNlcmlhbCBwb3J0CkBAIC0xMzM4LDcgKzEzMzcsNyBAQAogCSAgICBpbmZvID0gJm02OGtfc29mdFtpXTsKIAkgICAgaW5mby0+bWFnaWMgPSBTRVJJQUxfTUFHSUM7CiAJICAgIGluZm8tPnBvcnQgPSAoaW50KSAmdWFydF9hZGRyW2ldOwotCSAgICBpbmZvLT5wb3J0LnR0eSA9IE5VTEw7CisJICAgIGluZm8tPnR0eSA9IE5VTEw7CiAJICAgIGluZm8tPmlycSA9IHVhcnRfaXJxc1tpXTsKIAkgICAgaW5mby0+Y3VzdG9tX2Rpdmlzb3IgPSAxNjsKIAkgICAgaW5mby0+Y2xvc2VfZGVsYXkgPSA1MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC82ODM2MHNlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKaW5kZXggODhiMTMzNS4uYmMyMWVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzY4MzYwc2VyaWFsLmMKQEAgLTI0MjgsNiArMjQyOCw3IEBACiAJLyogLnJlYWRfcHJvYyA9IHJzXzM2MF9yZWFkX3Byb2MsICovCiAJLnRpb2NtZ2V0ID0gcnNfMzYwX3Rpb2NtZ2V0LAogCS50aW9jbXNldCA9IHJzXzM2MF90aW9jbXNldCwKKwkuZ2V0X2ljb3VudCA9IHJzXzM2MF9nZXRfaWNvdW50LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgcnNfMzYwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvODI1MC5jCmluZGV4IGIyNWU2ZTQuLjM5NzVkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsLzgyNTAuYwpAQCAtMjM2LDcgKzIzNiw4IEBACiAJCS5maWZvX3NpemUJPSAxMjgsCiAJCS50eF9sb2Fkc3oJPSAxMjgsCiAJCS5mY3IJCT0gVUFSVF9GQ1JfRU5BQkxFX0ZJRk8gfCBVQVJUX0ZDUl9SX1RSSUdfMTAsCi0JCS5mbGFncwkJPSBVQVJUX0NBUF9GSUZPIHwgVUFSVF9DQVBfRUZSIHwgVUFSVF9DQVBfU0xFRVAsCisJCS8qIFVBUlRfQ0FQX0VGUiBicmVha3MgYmlsbGlvbm9uIENGIGJsdWV0b290aCBjYXJkLiAqLworCQkuZmxhZ3MJCT0gVUFSVF9DQVBfRklGTyB8IFVBUlRfQ0FQX1NMRUVQLAogCX0sCiAJW1BPUlRfMTY2NTRdID0gewogCQkubmFtZQkJPSAiU1QxNjY1NCIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCmluZGV4IGIxNjgyZDcuLjJiODMzNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnCkBAIC0xNTE4LDYgKzE1MTgsNyBAQAogY29uZmlnIFNFUklBTF9HUkxJQl9HQUlTTEVSX0FQQlVBUlQKIAl0cmlzdGF0ZSAiR1JMSUIgQVBCVUFSVCBzZXJpYWwgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE9GCisJc2VsZWN0IFNFUklBTF9DT1JFCiAJLS0taGVscC0tLQogCUFkZCBzdXBwb3J0IGZvciB0aGUgR1JMSUIgQVBCVUFSVCBzZXJpYWwgcG9ydC4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYwppbmRleCBlMzgxYjg5Li45YjFmZjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvYmZpbl81eHguYwpAQCAtMzcwLDEwICszNzAsOCBAQAogewogCXN0cnVjdCBiZmluX3NlcmlhbF9wb3J0ICp1YXJ0ID0gZGV2X2lkOwogCi0Jc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOwogCXdoaWxlIChVQVJUX0dFVF9MU1IodWFydCkgJiBEUikKIAkJYmZpbl9zZXJpYWxfcnhfY2hhcnModWFydCk7Ci0Jc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC00OTAsOSArNDg4LDggQEAKIHsKIAlpbnQgeF9wb3MsIHBvczsKIAotCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7Ci0JZG1hX2Rpc2FibGVfaXJxKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKLQlzcGluX2xvY2tfYmgoJnVhcnQtPnBvcnQubG9jayk7CisJZG1hX2Rpc2FibGVfaXJxX25vc3luYyh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CisJc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5yeF9sb2NrKTsKIAogCS8qIDJEIERNQSBSWCBidWZmZXIgcmluZyBpcyB1c2VkLiBCZWNhdXNlIGN1cnJfeV9jb3VudCBhbmQKIAkgKiBjdXJyX3hfY291bnQgY2FuJ3QgYmUgcmVhZCBhcyBhbiBhdG9taWMgb3BlcmF0aW9uLApAQCAtNTIzLDggKzUyMCw3IEBACiAJCXVhcnQtPnJ4X2RtYV9idWYudGFpbCA9IHVhcnQtPnJ4X2RtYV9idWYuaGVhZDsKIAl9CiAKLQlzcGluX3VubG9ja19iaCgmdWFydC0+cG9ydC5sb2NrKTsKLQlkbWFfZW5hYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CisJc3Bpbl91bmxvY2tfYmgoJnVhcnQtPnJ4X2xvY2spOwogCWRtYV9lbmFibGVfaXJxKHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKIAogCW1vZF90aW1lcigmKHVhcnQtPnJ4X2RtYV90aW1lciksIGppZmZpZXMgKyBETUFfUlhfRkxVU0hfSklGRklFUyk7CkBAIC01NzEsNyArNTY3LDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBpcnFzdGF0OwogCWludCB4X3BvcywgcG9zOwogCi0Jc3Bpbl9sb2NrKCZ1YXJ0LT5wb3J0LmxvY2spOworCXNwaW5fbG9jaygmdWFydC0+cnhfbG9jayk7CiAJaXJxc3RhdCA9IGdldF9kbWFfY3Vycl9pcnFzdGF0KHVhcnQtPnJ4X2RtYV9jaGFubmVsKTsKIAljbGVhcl9kbWFfaXJxc3RhdCh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAKQEAgLTU4OSw3ICs1ODUsNyBAQAogCQl1YXJ0LT5yeF9kbWFfYnVmLnRhaWwgPSB1YXJ0LT5yeF9kbWFfYnVmLmhlYWQ7CiAJfQogCi0Jc3Bpbl91bmxvY2soJnVhcnQtPnBvcnQubG9jayk7CisJc3Bpbl91bmxvY2soJnVhcnQtPnJ4X2xvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTMzMiw2ICsxMzI4LDcgQEAKIAkJfQogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX0RNQQorCQlzcGluX2xvY2tfaW5pdCgmdWFydC0+cnhfbG9jayk7CiAJCXVhcnQtPnR4X2RvbmUJICAgID0gMTsKIAkJdWFydC0+dHhfY291bnQJICAgID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDAuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTAwLmMKaW5kZXggYmViMWFmYTIuLjdiOTUxYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTAwLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDAuYwpAQCAtNjAxLDcgKzYwMSw3IEBACiAJcy0+cnRzID0gMDsKIAogCXNwcmludGYoYiwgIm1heDMxMDAtJWQiLCBzLT5taW5vcik7Ci0Jcy0+d29ya3F1ZXVlID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKGIpOworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKGIpOwogCWlmICghcy0+d29ya3F1ZXVlKSB7CiAJCWRldl93YXJuKCZzLT5zcGktPmRldiwgImNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmMgYi9kcml2ZXJzL3R0eS9zZXJpYWwvbWF4MzEwNy5jCmluZGV4IDkxMDg3MGUuLjc1MGI0ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9tYXgzMTA3LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL21heDMxMDcuYwpAQCAtODMzLDcgKzgzMyw3IEBACiAJc3RydWN0IG1heDMxMDdfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3QgbWF4MzEwN19wb3J0LCBwb3J0KTsKIAogCS8qIEluaXRpYWxpemUgd29yayBxdWV1ZSAqLwotCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWF4MzEwNyIpOworCXMtPndvcmtxdWV1ZSA9IGNyZWF0ZV9mcmVlemFibGVfd29ya3F1ZXVlKCJtYXgzMTA3Iik7CiAJaWYgKCFzLT53b3JrcXVldWUpIHsKIAkJZGV2X2Vycigmcy0+c3BpLT5kZXYsICJXb3JrcXVldWUgY3JlYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zYjEyNTAtZHVhcnQuYwppbmRleCBhMmYyYjMyLi42MDJkOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2IxMjUwLWR1YXJ0LmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NiMTI1MC1kdWFydC5jCkBAIC04MjksNyArODI5LDcgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMX1NCMTI1MF9EVUFSVF9DT05TT0xFCiAvKgogICogU2VyaWFsIGNvbnNvbGUgc3R1ZmYuICBWZXJ5IGJhc2ljLCBwb2xsaW5nIGRyaXZlciBmb3IgZG9pbmcgc2VyaWFsCi0gKiBjb25zb2xlIG91dHB1dC4gIFRoZSBjb25zb2xlX3NlbSBpcyBoZWxkIGJ5IHRoZSBjYWxsZXIsIHNvIHdlCisgKiBjb25zb2xlIG91dHB1dC4gIFRoZSBjb25zb2xlX2xvY2sgaXMgaGVsZCBieSB0aGUgY2FsbGVyLCBzbyB3ZQogICogc2hvdWxkbid0IGJlIGludGVycnVwdGVkIGZvciBtb3JlIGNvbnNvbGUgYWN0aXZpdHkuCiAgKi8KIHN0YXRpYyB2b2lkIHNiZF9jb25zb2xlX3B1dGNoYXIoc3RydWN0IHVhcnRfcG9ydCAqdXBvcnQsIGludCBjaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY3MuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9zZXJpYWxfY3MuYwppbmRleCA5Mzc2MGIyLi4xZWY0ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zZXJpYWwvc2VyaWFsX2NzLmMKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL3NlcmlhbF9jcy5jCkBAIC03MTIsNiArNzEyLDcgQEAKIAlQQ01DSUFfUEZDX0RFVklDRV9QUk9EX0lEMTIoMSwgIlhpcmNvbSIsICJDcmVkaXRDYXJkIEV0aGVybmV0K01vZGVtIElJIiwgMHgyZTNlZTg0NSwgMHhlY2E0MDFiZiksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDEsIDB4MDAzMiwgMHgwZTAxKSwKIAlQQ01DSUFfUEZDX0RFVklDRV9NQU5GX0NBUkQoMSwgMHgwMDMyLCAweDBhMDUpLAorCVBDTUNJQV9QRkNfREVWSUNFX01BTkZfQ0FSRCgxLCAweDAwMzIsIDB4MGIwNSksCiAJUENNQ0lBX1BGQ19ERVZJQ0VfTUFORl9DQVJEKDEsIDB4MDAzMiwgMHgxMTAxKSwKIAlQQ01DSUFfTUZDX0RFVklDRV9NQU5GX0NBUkQoMCwgMHgwMTA0LCAweDAwNzApLAogCVBDTUNJQV9NRkNfREVWSUNFX01BTkZfQ0FSRCgxLCAweDAxMDEsIDB4MDU2MiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zeXNycS5jIGIvZHJpdmVycy90dHkvc3lzcnEuYwppbmRleCBjNTU2ZWQ5Li44MWYxMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS9zeXNycS5jCisrKyBiL2RyaXZlcnMvdHR5L3N5c3JxLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKICNpbmNsdWRlIDxhc20vaXJxX3JlZ3MuaD4KIAogLyogV2hldGhlciB3ZSByZWFjdCBvbiBzeXNycSBrZXlzIG9yIGp1c3QgaWdub3JlIHRoZW0gKi8KLXN0YXRpYyBpbnQgX19yZWFkX21vc3RseSBzeXNycV9lbmFibGVkID0gMTsKK3N0YXRpYyBpbnQgX19yZWFkX21vc3RseSBzeXNycV9lbmFibGVkID0gU1lTUlFfREVGQVVMVF9FTkFCTEU7CiBzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IHN5c3JxX2Fsd2F5c19lbmFibGVkOwogCiBzdGF0aWMgYm9vbCBzeXNycV9vbih2b2lkKQpAQCAtNTcxLDYgKzU3MSw3IEBACiAJdW5zaWduZWQgaW50IGFsdF91c2U7CiAJYm9vbCBhY3RpdmU7CiAJYm9vbCBuZWVkX3JlaW5qZWN0OworCWJvb2wgcmVpbmplY3Rpbmc7CiB9OwogCiBzdGF0aWMgdm9pZCBzeXNycV9yZWluamVjdF9hbHRfc3lzcnEoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQpAQCAtNTgxLDYgKzU4MiwxMCBAQAogCXVuc2lnbmVkIGludCBhbHRfY29kZSA9IHN5c3JxLT5hbHRfdXNlOwogCiAJaWYgKHN5c3JxLT5uZWVkX3JlaW5qZWN0KSB7CisJCS8qIHdlIGRvIG5vdCB3YW50IHRoZSBhc3NpZ25tZW50IHRvIGJlIHJlb3JkZXJlZCAqLworCQlzeXNycS0+cmVpbmplY3RpbmcgPSB0cnVlOworCQltYigpOworCiAJCS8qIFNpbXVsYXRlIHByZXNzIGFuZCByZWxlYXNlIG9mIEFsdCArIFN5c1JxICovCiAJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX0tFWSwgYWx0X2NvZGUsIDEpOwogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9LRVksIEtFWV9TWVNSUSwgMSk7CkBAIC01ODksNiArNTk0LDkgQEAKIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfS0VZLCBLRVlfU1lTUlEsIDApOwogCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9LRVksIGFsdF9jb2RlLCAwKTsKIAkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfU1lOLCBTWU5fUkVQT1JULCAxKTsKKworCQltYigpOworCQlzeXNycS0+cmVpbmplY3RpbmcgPSBmYWxzZTsKIAl9CiB9CiAKQEAgLTU5OSw2ICs2MDcsMTMgQEAKIAlib29sIHdhc19hY3RpdmUgPSBzeXNycS0+YWN0aXZlOwogCWJvb2wgc3VwcHJlc3M7CiAKKwkvKgorCSAqIERvIG5vdCBmaWx0ZXIgYW55dGhpbmcgaWYgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJlLWluamVjdGluZworCSAqIEFsdCtTeXNScSBjb21iaW5hdGlvbi4KKwkgKi8KKwlpZiAoc3lzcnEtPnJlaW5qZWN0aW5nKQorCQlyZXR1cm4gZmFsc2U7CisKIAlzd2l0Y2ggKHR5cGUpIHsKIAogCWNhc2UgRVZfU1lOOgpAQCAtNjI5LDcgKzY0NCw3IEBACiAJCQkJc3lzcnEtPmFsdF91c2UgPSBzeXNycS0+YWx0OwogCQkJCS8qCiAJCQkJICogSWYgbm90aGluZyBlbHNlIHdpbGwgYmUgcHJlc3NlZCB3ZSdsbCBuZWVkCi0JCQkJICogdG8gKiByZS1pbmplY3QgQWx0LVN5c1JxIGtleXNyb2tlLgorCQkJCSAqIHRvIHJlLWluamVjdCBBbHQtU3lzUnEga2V5c3Jva2UuCiAJCQkJICovCiAJCQkJc3lzcnEtPm5lZWRfcmVpbmplY3QgPSB0cnVlOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdHR5X2lvLmMgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwppbmRleCA0NjRkMDlkLi4wMDY1ZGE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS90dHlfaW8uYworKysgYi9kcml2ZXJzL3R0eS90dHlfaW8uYwpAQCAtMzI1Niw4ICszMjU2LDggQEAKIAlzdHJ1Y3QgY29uc29sZSAqYzsKIAlzc2l6ZV90IGNvdW50ID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQlmb3IgKGMgPSBjb25zb2xlX2RyaXZlcnM7IGM7IGMgPSBjLT5uZXh0KSB7CisJY29uc29sZV9sb2NrKCk7CisJZm9yX2VhY2hfY29uc29sZShjKSB7CiAJCWlmICghYy0+ZGV2aWNlKQogCQkJY29udGludWU7CiAJCWlmICghYy0+d3JpdGUpCkBAIC0zMjcxLDcgKzMyNzEsNyBAQAogCXdoaWxlIChpLS0pCiAJCWNvdW50ICs9IHNwcmludGYoYnVmICsgY291bnQsICIlcyVkJWMiLAogCQkJCSBjc1tpXS0+bmFtZSwgY3NbaV0tPmluZGV4LCBpID8gJyAnOidcbicpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtMzMwNiw3ICszMzA2LDcgQEAKIAlpZiAoSVNfRVJSKGNvbnNkZXYpKQogCQljb25zZGV2ID0gTlVMTDsKIAllbHNlCi0JCWRldmljZV9jcmVhdGVfZmlsZShjb25zZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKwkJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUoY29uc2RldiwgJmRldl9hdHRyX2FjdGl2ZSkgPCAwKTsKIAogI2lmZGVmIENPTkZJR19WVAogCXZ0eV9pbml0KCZjb25zb2xlX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvc2VsZWN0aW9uLmMgYi9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYwppbmRleCBlYmFlMzQ0Li5jOTU2ZWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYworKysgYi9kcml2ZXJzL3R0eS92dC9zZWxlY3Rpb24uYwpAQCAtMzE2LDkgKzMxNiw5IEBACiAJLyogYWx3YXlzIGNhbGxlZCB3aXRoIEJUTSBmcm9tIHZ0X2lvY3RsICovCiAJV0FSTl9PTighdHR5X2xvY2tlZCgpKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwb2tlX2JsYW5rZWRfY29uc29sZSgpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CiAJaWYgKCFsZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYwppbmRleCBlYWIzYTFmLi5hNjcyZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYworKysgYi9kcml2ZXJzL3R0eS92dC92Y19zY3JlZW4uYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJLyogU2VsZWN0IHRoZSBwcm9wZXIgY3VycmVudCBjb25zb2xlIGFuZCB2ZXJpZnkKIAkgKiBzYW5pdHkgb2YgdGhlIHNpdHVhdGlvbiB1bmRlciB0aGUgY29uc29sZSBsb2NrLgogCSAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWF0dHIgPSAoY3VycmNvbnMgJiAxMjgpOwogCWN1cnJjb25zID0gKGN1cnJjb25zICYgMTI3KTsKQEAgLTMzNiw5ICszMzYsOSBAQAogCQkgKiB0aGUgcGFnZWZhdWx0IGhhbmRsaW5nIGNvZGUgbWF5IHdhbnQgdG8gY2FsbCBwcmludGsoKS4KIAkJICovCiAKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXQgPSBjb3B5X3RvX3VzZXIoYnVmLCBjb25fYnVmX3N0YXJ0LCBvcmlnX2NvdW50KTsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAogCQlpZiAocmV0KSB7CiAJCQlyZWFkICs9IChvcmlnX2NvdW50IC0gcmV0KTsKQEAgLTM1NCw3ICszNTQsNyBAQAogCWlmIChyZWFkKQogCQlyZXQgPSByZWFkOwogdW5sb2NrX291dDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAltdXRleF91bmxvY2soJmNvbl9idWZfbXR4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzc5LDcgKzM3OSw3IEBACiAJLyogU2VsZWN0IHRoZSBwcm9wZXIgY3VycmVudCBjb25zb2xlIGFuZCB2ZXJpZnkKIAkgKiBzYW5pdHkgb2YgdGhlIHNpdHVhdGlvbiB1bmRlciB0aGUgY29uc29sZSBsb2NrLgogCSAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWF0dHIgPSAoY3VycmNvbnMgJiAxMjgpOwogCWN1cnJjb25zID0gKGN1cnJjb25zICYgMTI3KTsKQEAgLTQxNCw5ICs0MTQsOSBAQAogCQkvKiBUZW1wb3JhcmlseSBkcm9wIHRoZSBjb25zb2xlIGxvY2sgc28gdGhhdCB3ZSBjYW4gcmVhZAogCQkgKiBpbiB0aGUgd3JpdGUgZGF0YSBmcm9tIHVzZXJzcGFjZSBzYWZlbHkuCiAJCSAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldCA9IGNvcHlfZnJvbV91c2VyKGNvbl9idWYsIGJ1ZiwgdGhpc19yb3VuZCk7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJaWYgKHJldCkgewogCQkJdGhpc19yb3VuZCAtPSByZXQ7CkBAIC01NDIsNyArNTQyLDcgQEAKIAkJdmNzX3Njcl91cGRhdGVkKHZjKTsKIAogdW5sb2NrX291dDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCW11dGV4X3VubG9jaygmY29uX2J1Zl9tdHgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS92dC92dC5jIGIvZHJpdmVycy90dHkvdnQvdnQuYwppbmRleCA3NjQwN2VjLi4xNDdlZGUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdnQuYworKysgYi9kcml2ZXJzL3R0eS92dC92dC5jCkBAIC0xMDAzLDkgKzEwMDMsOSBAQAogCXN0cnVjdCB2Y19kYXRhICp2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaW50IHJldDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlyZXQgPSB2Y19kb19yZXNpemUodHR5LCB2Yywgd3MtPndzX2NvbCwgd3MtPndzX3Jvdyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIAl2Yy0+dmNfY29sb3IgPSB2Yy0+dmNfZGVmX2NvbG9yOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX20oc3RydWN0IHZjX2RhdGEgKnZjKQogewogCWludCBpOwpAQCAtMTQxNSw3ICsxNDE1LDcgQEAKIAlyZXR1cm4gdmNfY29uc1tmZ19jb25zb2xlXS5kLT52Y19yZXBvcnRfbW91c2U7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBzZXRfbW9kZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIGludCBvbl9vZmYpCiB7CiAJaW50IGk7CkBAIC0xNDg1LDcgKzE0ODUsNyBAQAogCQl9CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBzZXR0ZXJtX2NvbW1hbmQoc3RydWN0IHZjX2RhdGEgKnZjKQogewogCXN3aXRjaCh2Yy0+dmNfcGFyWzBdKSB7CkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogCX0KIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIGNzaV9hdChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBucikKIHsKIAlpZiAobnIgPiB2Yy0+dmNfY29scyAtIHZjLT52Y194KQpAQCAtMTU1NSw3ICsxNTU1LDcgQEAKIAlpbnNlcnRfY2hhcih2YywgbnIpOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX0woc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX3Jvd3MgLSB2Yy0+dmNfeSkKQEAgLTE1NjYsNyArMTU2Niw3IEBACiAJdmMtPnZjX25lZWRfd3JhcCA9IDA7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkICovCiBzdGF0aWMgdm9pZCBjc2lfUChzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBucikKIHsKIAlpZiAobnIgPiB2Yy0+dmNfY29scyAtIHZjLT52Y194KQpAQCAtMTU3Niw3ICsxNTc2LDcgQEAKIAlkZWxldGVfY2hhcih2YywgbnIpOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgY3NpX00oc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQgbnIpCiB7CiAJaWYgKG5yID4gdmMtPnZjX3Jvd3MgLSB2Yy0+dmNfeSkKQEAgLTE1ODcsNyArMTU4Nyw3IEBACiAJdmMtPnZjX25lZWRfd3JhcCA9IDA7CiB9CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKGV4Y2VwdCB2aWEgdmNfaW5pdC0+cmVzZXRfdGVybWluYWwgKi8KKy8qIGNvbnNvbGVfbG9jayBpcyBoZWxkIChleGNlcHQgdmlhIHZjX2luaXQtPnJlc2V0X3Rlcm1pbmFsICovCiBzdGF0aWMgdm9pZCBzYXZlX2N1cihzdHJ1Y3QgdmNfZGF0YSAqdmMpCiB7CiAJdmMtPnZjX3NhdmVkX3gJCT0gdmMtPnZjX3g7CkBAIC0xNjAzLDcgKzE2MDMsNyBAQAogCXZjLT52Y19zYXZlZF9HMQkJPSB2Yy0+dmNfRzFfY2hhcnNldDsKIH0KIAotLyogY29uc29sZV9zZW0gaXMgaGVsZCAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKi8KIHN0YXRpYyB2b2lkIHJlc3RvcmVfY3VyKHN0cnVjdCB2Y19kYXRhICp2YykKIHsKIAlnb3RveHkodmMsIHZjLT52Y19zYXZlZF94LCB2Yy0+dmNfc2F2ZWRfeSk7CkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogCUVTaGFzaCwgRVNzZXRHMCwgRVNzZXRHMSwgRVNwZXJjZW50LCBFU2lnbm9yZSwgRVNub25zdGQsCiAJRVNwYWxldHRlIH07CiAKLS8qIGNvbnNvbGVfc2VtIGlzIGhlbGQgKGV4Y2VwdCB2aWEgdmNfaW5pdCgpKSAqLworLyogY29uc29sZV9sb2NrIGlzIGhlbGQgKGV4Y2VwdCB2aWEgdmNfaW5pdCgpKSAqLwogc3RhdGljIHZvaWQgcmVzZXRfdGVybWluYWwoc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgZG9fY2xlYXIpCiB7CiAJdmMtPnZjX3RvcAkJPSAwOwpAQCAtMTY4NSw3ICsxNjg1LDcgQEAKIAkgICAgY3NpX0oodmMsIDIpOwogfQogCi0vKiBjb25zb2xlX3NlbSBpcyBoZWxkICovCisvKiBjb25zb2xlX2xvY2sgaXMgaGVsZCAqLwogc3RhdGljIHZvaWQgZG9fY29uX3Ryb2woc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHZjX2RhdGEgKnZjLCBpbnQgYykKIHsKIAkvKgpAQCAtMjExOSw3ICsyMTE5LDcgQEAKIAlyZXR1cm4gYmlzZWFyY2godWNzLCBkb3VibGVfd2lkdGgsIEFSUkFZX1NJWkUoZG91YmxlX3dpZHRoKSAtIDEpOwogfQogCi0vKiBhY3F1aXJlcyBjb25zb2xlX3NlbSAqLworLyogYWNxdWlyZXMgY29uc29sZV9sb2NrICovCiBzdGF0aWMgaW50IGRvX2Nvbl93cml0ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKICNpZmRlZiBWVF9CVUZfVlJBTV9PTkxZCkBAIC0yMTQ3LDExICsyMTQ3LDExIEBACiAKIAltaWdodF9zbGVlcCgpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXZjID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpZiAodmMgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgInZ0OiBhcmdoLCBkcml2ZXJfZGF0YSBpcyBOVUxMICFcbiIpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjE1OSw3ICsyMTU5LDcgQEAKIAlpZiAoIXZjX2NvbnNfYWxsb2NhdGVkKGN1cnJjb25zKSkgewogCSAgICAvKiBjb3VsZCB0aGlzIGhhcHBlbj8gKi8KIAkJcHJpbnRrX29uY2UoImNvbl93cml0ZTogdHR5ICVkIG5vdCBhbGxvY2F0ZWRcbiIsIGN1cnJjb25zKzEpOwotCSAgICByZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJICAgIGNvbnNvbGVfdW5sb2NrKCk7CiAJICAgIHJldHVybiAwOwogCX0KIApAQCAtMjM3NSw3ICsyMzc1LDcgQEAKIAl9CiAJRkxVU0gKIAljb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbm90aWZ5X3VwZGF0ZSh2Yyk7CiAJcmV0dXJuIG47CiAjdW5kZWYgRkxVU0gKQEAgLTIzODgsMTEgKzIzODgsMTEgQEAKICAqIHVzIHRvIGRvIHRoZSBzd2l0Y2hlcyBhc3luY2hyb25vdXNseSAobmVlZGVkIHdoZW4gd2Ugd2FudAogICogdG8gc3dpdGNoIGR1ZSB0byBhIGtleWJvYXJkIGludGVycnVwdCkuICBTeW5jaHJvbml6YXRpb24KICAqIHdpdGggb3RoZXIgY29uc29sZSBjb2RlIGFuZCBwcmV2ZW50aW9uIG9mIHJlLWVudHJhbmN5IGlzCi0gKiBlbnN1cmVkIHdpdGggY29uc29sZV9zZW0uCisgKiBlbnN1cmVkIHdpdGggY29uc29sZV9sb2NrLgogICovCiBzdGF0aWMgdm9pZCBjb25zb2xlX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqaWdub3JlZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlpZiAod2FudF9jb25zb2xlID49IDApIHsKIAkJaWYgKHdhbnRfY29uc29sZSAhPSBmZ19jb25zb2xlICYmCkBAIC0yNDIyLDcgKzI0MjIsNyBAQAogCX0KIAlub3RpZnlfdXBkYXRlKHZjX2NvbnNbZmdfY29uc29sZV0uZCk7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogaW50IHNldF9jb25zb2xlKGludCBucikKQEAgLTI2MDMsNyArMjYwMyw3IEBACiAgKi8KIAogLyoKLSAqIEdlbmVyYWxseSBhIGJpdCByYWN5IHdpdGggcmVzcGVjdCB0byBjb25zb2xlX3NlbSgpLgorICogR2VuZXJhbGx5IGEgYml0IHJhY3kgd2l0aCByZXNwZWN0IHRvIGNvbnNvbGVfbG9jaygpOy4KICAqCiAgKiBUaGVyZSBhcmUgc29tZSBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgbmVlZCBpdC4KICAqCkBAIC0yNjI5LDE3ICsyNjI5LDE3IEBACiAJc3dpdGNoICh0eXBlKQogCXsKIAkJY2FzZSBUSU9DTF9TRVRTRUw6Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXJldCA9IHNldF9zZWxlY3Rpb24oKHN0cnVjdCB0aW9jbF9zZWxlY3Rpb24gX191c2VyICopKHArMSksIHR0eSk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfUEFTVEVTRUw6CiAJCQlyZXQgPSBwYXN0ZV9zZWxlY3Rpb24odHR5KTsKIAkJCWJyZWFrOwogCQljYXNlIFRJT0NMX1VOQkxBTktTQ1JFRU46Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXVuYmxhbmtfc2NyZWVuKCk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfU0VMTE9BRExVVDoKIAkJCXJldCA9IHNlbF9sb2FkbHV0KHApOwpAQCAtMjY4OCwxMCArMjY4OCwxMCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfQkxBTktTQ1JFRU46CS8qIHVudGlsIGV4cGxpY2l0bHkgdW5ibGFua2VkLCBub3Qgb25seSBwb2tlZCAqLwotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlpZ25vcmVfcG9rZSA9IDE7CiAJCQlkb19ibGFua19zY3JlZW4oMCk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJYnJlYWs7CiAJCWNhc2UgVElPQ0xfQkxBTktFRFNDUkVFTjoKIAkJCXJldCA9IGNvbnNvbGVfYmxhbmtlZDsKQEAgLTI3OTAsMTEgKzI3OTAsMTEgQEAKIAkJcmV0dXJuOwogCiAJLyogaWYgd2UgcmFjZSB3aXRoIGNvbl9jbG9zZSgpLCB2dCBtYXkgYmUgbnVsbCAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJaWYgKHZjKQogCQlzZXRfY3Vyc29yKHZjKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogLyoKQEAgLTI4MDUsNyArMjgwNSw3IEBACiAJdW5zaWduZWQgaW50IGN1cnJjb25zID0gdHR5LT5pbmRleDsKIAlpbnQgcmV0ID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAodHR5LT5kcml2ZXJfZGF0YSA9PSBOVUxMKSB7CiAJCXJldCA9IHZjX2FsbG9jYXRlKGN1cnJjb25zKTsKIAkJaWYgKHJldCA9PSAwKSB7CkBAIC0yODEzLDcgKzI4MTMsNyBAQAogCiAJCQkvKiBTdGlsbCBiZWluZyBmcmVlZCAqLwogCQkJaWYgKHZjLT5wb3J0LnR0eSkgewotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCQl9CiAJCQl0dHktPmRyaXZlcl9kYXRhID0gdmM7CkBAIC0yODI3LDExICsyODI3LDExIEBACiAJCQkJdHR5LT50ZXJtaW9zLT5jX2lmbGFnIHw9IElVVEY4OwogCQkJZWxzZQogCQkJCXR0eS0+dGVybWlvcy0+Y19pZmxhZyAmPSB+SVVURjg7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yODQ0LDkgKzI4NDQsOSBAQAogewogCXN0cnVjdCB2Y19kYXRhICp2YyA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJQlVHX09OKHZjID09IE5VTEwpOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAl2Yy0+cG9ydC50dHkgPSBOVUxMOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXR0eV9zaHV0ZG93bih0dHkpOwogfQogCkBAIC0yODkzLDEzICsyODkzLDEzIEBACiAJc3RydWN0IHZjX2RhdGEgKnZjOwogCXVuc2lnbmVkIGludCBjdXJyY29ucyA9IDAsIGk7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlpZiAoY29uc3dpdGNocCkKIAkJZGlzcGxheV9kZXNjID0gY29uc3dpdGNocC0+Y29uX3N0YXJ0dXAoKTsKIAlpZiAoIWRpc3BsYXlfZGVzYykgewogCQlmZ19jb25zb2xlID0gMDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI5NDYsNyArMjk0Niw3IEBACiAJcHJpbnRhYmxlID0gMTsKIAlwcmludGsoIlxuIik7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogI2lmZGVmIENPTkZJR19WVF9DT05TT0xFCiAJcmVnaXN0ZXJfY29uc29sZSgmdnRfY29uc29sZV9kcml2ZXIpOwpAQCAtMjk5NCw3ICsyOTk0LDcgQEAKIAlpZiAoSVNfRVJSKHR0eTBkZXYpKQogCQl0dHkwZGV2ID0gTlVMTDsKIAllbHNlCi0JCWRldmljZV9jcmVhdGVfZmlsZSh0dHkwZGV2LCAmZGV2X2F0dHJfYWN0aXZlKTsKKwkJV0FSTl9PTihkZXZpY2VfY3JlYXRlX2ZpbGUodHR5MGRldiwgJmRldl9hdHRyX2FjdGl2ZSkgPCAwKTsKIAogCXZjc19pbml0KCk7CiAKQEAgLTMwMzcsNyArMzAzNyw3IEBACiAJaWYgKCF0cnlfbW9kdWxlX2dldChvd25lcikpCiAJCXJldHVybiAtRU5PREVWOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJLyogY2hlY2sgaWYgZHJpdmVyIGlzIHJlZ2lzdGVyZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTl9EUklWRVI7IGkrKykgewpAQCAtMzEyMiw3ICszMTIyLDcgQEAKIAogCXJldHZhbCA9IDA7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbW9kdWxlX3B1dChvd25lcik7CiAJcmV0dXJuIHJldHZhbDsKIH07CkBAIC0zMTcxLDcgKzMxNzEsNyBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qIGNoZWNrIGlmIGRyaXZlciBpcyByZWdpc3RlcmVkIGFuZCBpZiBpdCBpcyB1bmJpbmRhYmxlICovCiAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05fRFJJVkVSOyBpKyspIHsKQEAgLTMxODUsNyArMzE4NSw3IEBACiAJfQogCiAJaWYgKHJldHZhbCkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMzIwNCwxMiArMzIwNCwxMiBAQAogCX0KIAogCWlmIChyZXR2YWwpIHsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlnb3RvIGVycjsKIAl9CiAKIAlpZiAoIWNvbl9pc19ib3VuZChjc3cpKSB7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZ290byBlcnI7CiAJfQogCkBAIC0zMjM4LDcgKzMyMzgsNyBAQAogCWlmICghY29uX2lzX2JvdW5kKGNzdykpCiAJCWNvbl9kcml2ZXItPmZsYWcgJj0gfkNPTl9EUklWRVJfRkxBR19JTklUOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJLyogaWdub3JlIHJldHVybiB2YWx1ZSwgYmluZGluZyBzaG91bGQgbm90IGZhaWwgKi8KIAliaW5kX2Nvbl9kcml2ZXIoZGVmY3N3LCBmaXJzdCwgbGFzdCwgZGVmbHQpOwogZXJyOgpAQCAtMzUzOCwxNCArMzUzOCwxNCBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQob3duZXIpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OX0RSSVZFUjsgaSsrKSB7CiAJCWNvbl9kcml2ZXIgPSAmcmVnaXN0ZXJlZF9jb25fZHJpdmVyW2ldOwogCiAJCS8qIGFscmVhZHkgcmVnaXN0ZXJlZCAqLwogCQlpZiAoY29uX2RyaXZlci0+Y29uID09IGNzdykKLQkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlyZXR2YWwgPSAtRUJVU1k7CiAJfQogCiAJaWYgKHJldHZhbCkKQEAgLTM1OTIsNyArMzU5Miw3IEBACiAJfQogCiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJbW9kdWxlX3B1dChvd25lcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTM2MTMsNyArMzYxMyw3IEBACiB7CiAJaW50IGksIHJldHZhbCA9IC1FTk9ERVY7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAkvKiBjYW5ub3QgdW5yZWdpc3RlciBhIGJvdW5kIGRyaXZlciAqLwogCWlmIChjb25faXNfYm91bmQoY3N3KSkKQEAgLTM2MzksNyArMzYzOSw3IEBACiAJCX0KIAl9CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jb25fZHJpdmVyKTsKQEAgLTM2NTYsNyArMzY1NiwxMiBAQAogCWludCBlcnI7CiAKIAllcnIgPSByZWdpc3Rlcl9jb25fZHJpdmVyKGNzdywgZmlyc3QsIGxhc3QpOwotCisJLyogaWYgd2UgZ2V0IGFuIGJ1c3kgZXJyb3Igd2Ugc3RpbGwgd2FudCB0byBiaW5kIHRoZSBjb25zb2xlIGRyaXZlcgorCSAqIGFuZCByZXR1cm4gc3VjY2VzcywgYXMgd2UgbWF5IGhhdmUgdW5ib3VuZCB0aGUgY29uc29sZSBkcml2ZXIKKwnCoCogYnV0IG5vdCB1bnJlZ2lzdGVyZWQgaXQuCisJKi8KKwlpZiAoZXJyID09IC1FQlVTWSkKKwkJZXJyID0gMDsKIAlpZiAoIWVycikKIAkJYmluZF9jb25fZHJpdmVyKGNzdywgZmlyc3QsIGxhc3QsIGRlZmx0KTsKIApAQCAtMzkzNCw5ICszOTM5LDkgQEAKIHsKIAlpbnQgcmM7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmMgPSBzZXRfZ2V0X2NtYXAgKGFyZywxKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTM5NDUsOSArMzk1MCw5IEBACiB7CiAJaW50IHJjOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJjID0gc2V0X2dldF9jbWFwIChhcmcsMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zOTk0LDEyICszOTk5LDEyIEBACiAJfSBlbHNlCiAJCWZvbnQuZGF0YSA9IE5VTEw7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHZjLT52Y19zdy0+Y29uX2ZvbnRfZ2V0KQogCQlyYyA9IHZjLT52Y19zdy0+Y29uX2ZvbnRfZ2V0KHZjLCAmZm9udCk7CiAJZWxzZQogCQlyYyA9IC1FTk9TWVM7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwpAQCAtNDA3NiwxMiArNDA4MSwxMiBAQAogCWZvbnQuZGF0YSA9IG1lbWR1cF91c2VyKG9wLT5kYXRhLCBzaXplKTsKIAlpZiAoSVNfRVJSKGZvbnQuZGF0YSkpCiAJCXJldHVybiBQVFJfRVJSKGZvbnQuZGF0YSk7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2Yy0+dmNfc3ctPmNvbl9mb250X3NldCkKIAkJcmMgPSB2Yy0+dmNfc3ctPmNvbl9mb250X3NldCh2YywgJmZvbnQsIG9wLT5mbGFncyk7CiAJZWxzZQogCQlyYyA9IC1FTk9TWVM7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJa2ZyZWUoZm9udC5kYXRhKTsKIAlyZXR1cm4gcmM7CiB9CkBAIC00MTAzLDEyICs0MTA4LDEyIEBACiAJZWxzZQogCQluYW1lW01BWF9GT05UX05BTUUgLSAxXSA9IDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKHZjLT52Y19zdy0+Y29uX2ZvbnRfZGVmYXVsdCkKIAkJcmMgPSB2Yy0+dmNfc3ctPmNvbl9mb250X2RlZmF1bHQodmMsICZmb250LCBzKTsKIAllbHNlCiAJCXJjID0gLUVOT1NZUzsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlpZiAoIXJjKSB7CiAJCW9wLT53aWR0aCA9IGZvbnQud2lkdGg7CiAJCW9wLT5oZWlnaHQgPSBmb250LmhlaWdodDsKQEAgLTQxMjQsNyArNDEyOSw3IEBACiAJaWYgKHZjLT52Y19tb2RlICE9IEtEX1RFWFQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICghdmMtPnZjX3N3LT5jb25fZm9udF9jb3B5KQogCQlyYyA9IC1FTk9TWVM7CiAJZWxzZSBpZiAoY29uIDwgMCB8fCAhdmNfY29uc19hbGxvY2F0ZWQoY29uKSkKQEAgLTQxMzMsNyArNDEzOCw3IEBACiAJCXJjID0gMDsKIAllbHNlCiAJCXJjID0gdmMtPnZjX3N3LT5jb25fZm9udF9jb3B5KHZjLCBjb24pOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYyBiL2RyaXZlcnMvdHR5L3Z0L3Z0X2lvY3RsLmMKaW5kZXggNmI2OGEwZi4uMTIzNWViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvdnQvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL3R0eS92dC92dF9pb2N0bC5jCkBAIC02NDksMTIgKzY0OSwxMiBAQAogCQkvKgogCQkgKiBleHBsaWNpdGx5IGJsYW5rL3VuYmxhbmsgdGhlIHNjcmVlbiBpZiBzd2l0Y2hpbmcgbW9kZXMKIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlmIChhcmcgPT0gS0RfVEVYVCkKIAkJCWRvX3VuYmxhbmtfc2NyZWVuKDEpOwogCQllbHNlCiAJCQlkb19ibGFua19zY3JlZW4oMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJYnJlYWs7CiAKIAljYXNlIEtER0VUTU9ERToKQEAgLTg5Myw3ICs4OTMsNyBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCXZjLT52dF9tb2RlID0gdG1wOwogCQkvKiB0aGUgZnJzaWcgaXMgaWdub3JlZCwgc28gd2Ugc2V0IGl0IHRvIDAgKi8KIAkJdmMtPnZ0X21vZGUuZnJzaWcgPSAwOwpAQCAtOTAxLDcgKzkwMSw3IEBACiAJCXZjLT52dF9waWQgPSBnZXRfcGlkKHRhc2tfcGlkKGN1cnJlbnQpKTsKIAkJLyogbm8gc3dpdGNoIGlzIHJlcXVpcmVkIC0tIHNhd0BzaGFkZS5tc3UucnUgKi8KIAkJdmMtPnZ0X25ld3Z0ID0gLTE7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJYnJlYWs7CiAJfQogCkBAIC05MTAsOSArOTEwLDkgQEAKIAkJc3RydWN0IHZ0X21vZGUgdG1wOwogCQlpbnQgcmM7CiAKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJbWVtY3B5KCZ0bXAsICZ2Yy0+dnRfbW9kZSwgc2l6ZW9mKHN0cnVjdCB2dF9tb2RlKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAogCQlyYyA9IGNvcHlfdG9fdXNlcih1cCwgJnRtcCwgc2l6ZW9mKHN0cnVjdCB2dF9tb2RlKSk7CiAJCWlmIChyYykKQEAgLTk2NSw5ICs5NjUsOSBAQAogCQkJcmV0ID0gIC1FTlhJTzsKIAkJZWxzZSB7CiAJCQlhcmctLTsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJcmV0ID0gdmNfYWxsb2NhdGUoYXJnKTsKLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCQlpZiAocmV0KQogCQkJCWJyZWFrOwogCQkJc2V0X2NvbnNvbGUoYXJnKTsKQEAgLTk5MCw3ICs5OTAsNyBAQAogCQkJcmV0ID0gLUVOWElPOwogCQllbHNlIHsKIAkJCXZzYS5jb25zb2xlLS07Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXJldCA9IHZjX2FsbG9jYXRlKHZzYS5jb25zb2xlKTsKIAkJCWlmIChyZXQgPT0gMCkgewogCQkJCXN0cnVjdCB2Y19kYXRhICpudmM7CkBAIC0xMDAzLDcgKzEwMDMsNyBAQAogCQkJCXB1dF9waWQobnZjLT52dF9waWQpOwogCQkJCW52Yy0+dnRfcGlkID0gZ2V0X3BpZCh0YXNrX3BpZChjdXJyZW50KSk7CiAJCQl9Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQkJaWYgKHJldCkKIAkJCQlicmVhazsKIAkJCS8qIENvbW1lbmNlIHN3aXRjaCBhbmQgbG9jayAqLwpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAkJLyoKIAkJICogU3dpdGNoaW5nLWZyb20gcmVzcG9uc2UKIAkJICovCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWlmICh2Yy0+dnRfbmV3dnQgPj0gMCkgewogCQkJaWYgKGFyZyA9PSAwKQogCQkJCS8qCkBAIC0xMDYzLDcgKzEwNjMsNyBAQAogCQkJCXZjLT52dF9uZXd2dCA9IC0xOwogCQkJCXJldCA9IHZjX2FsbG9jYXRlKG5ld3Z0KTsKIAkJCQlpZiAocmV0KSB7Ci0JCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCS8qCkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCQkJaWYgKGFyZyAhPSBWVF9BQ0tBQ1EpCiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJfQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCWJyZWFrOwogCiAJIC8qCkBAIC0xMDk2LDIwICsxMDk2LDIwIEBACiAJCX0KIAkJaWYgKGFyZyA9PSAwKSB7CiAJCSAgICAvKiBkZWFsbG9jYXRlIGFsbCB1bnVzZWQgY29uc29sZXMsIGJ1dCBsZWF2ZSAwICovCi0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCWZvciAoaT0xOyBpPE1BWF9OUl9DT05TT0xFUzsgaSsrKQogCQkJCWlmICghIFZUX0JVU1koaSkpCiAJCQkJCXZjX2RlYWxsb2NhdGUoaSk7Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQl9IGVsc2UgewogCQkJLyogZGVhbGxvY2F0ZSBhIHNpbmdsZSBjb25zb2xlLCBpZiBwb3NzaWJsZSAqLwogCQkJYXJnLS07CiAJCQlpZiAoVlRfQlVTWShhcmcpKQogCQkJCXJldCA9IC1FQlVTWTsKIAkJCWVsc2UgaWYgKGFyZykgewkJCSAgICAgIC8qIGxlYXZlIDAgKi8KLQkJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV9sb2NrKCk7CiAJCQkJdmNfZGVhbGxvY2F0ZShhcmcpOwotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJfQogCQl9CiAJCWJyZWFrOwpAQCAtMTEyNiw3ICsxMTI2LDcgQEAKIAkJICAgIGdldF91c2VyKGNjLCAmdnRzaXplcy0+dl9jb2xzKSkKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCWVsc2UgewotCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV9sb2NrKCk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTlNPTEVTOyBpKyspIHsKIAkJCQl2YyA9IHZjX2NvbnNbaV0uZDsKIApAQCAtMTEzNSw3ICsxMTM1LDcgQEAKIAkJCQkJdmNfcmVzaXplKHZjX2NvbnNbaV0uZCwgY2MsIGxsKTsKIAkJCQl9CiAJCQl9Ci0JCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX3VubG9jaygpOwogCQl9CiAJCWJyZWFrOwogCX0KQEAgLTExODcsMTQgKzExODcsMTQgQEAKIAkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CiAJCQlpZiAoIXZjX2NvbnNbaV0uZCkKIAkJCQljb250aW51ZTsKLQkJCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfbG9jaygpOwogCQkJaWYgKHZsaW4pCiAJCQkJdmNfY29uc1tpXS5kLT52Y19zY2FuX2xpbmVzID0gdmxpbjsKIAkJCWlmIChjbGluKQogCQkJCXZjX2NvbnNbaV0uZC0+dmNfZm9udC5oZWlnaHQgPSBjbGluOwogCQkJdmNfY29uc1tpXS5kLT52Y19yZXNpemVfdXNlciA9IDE7CiAJCQl2Y19yZXNpemUodmNfY29uc1tpXS5kLCBjYywgbGwpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQkJY29uc29sZV91bmxvY2soKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMzY3LDcgKzEzNjcsNyBAQAogCXN0cnVjdCB2Y19kYXRhICp2YzsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXZjID0gdmNfY29uLT5kOwogCWlmICh2YykgewogCQl0dHkgPSB2Yy0+cG9ydC50dHk7CkBAIC0xMzc5LDcgKzEzNzksNyBAQAogCQkJX19kb19TQUsodHR5KTsKIAkJcmVzZXRfdmModmMpOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTE3MzcsMTAgKzE3MzcsMTAgQEAKIHsKIAlpbnQgcHJldjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAkvKiBHcmFwaGljcyBtb2RlIC0gdXAgdG8gWCAqLwogCWlmIChkaXNhYmxlX3Z0X3N3aXRjaCkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIAlwcmV2ID0gZmdfY29uc29sZTsKQEAgLTE3NDgsNyArMTc0OCw3IEBACiAJaWYgKGFsbG9jICYmIHZjX2FsbG9jYXRlKHZ0KSkgewogCQkvKiB3ZSBjYW4ndCBoYXZlIGEgZnJlZSBWQyBmb3Igbm93LiBUb28gYmFkLAogCQkgKiB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdGhlIHNjcmVlbiBmb3Igbm93LiAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIApAQCAtMTc1OCwxMCArMTc1OCwxMCBAQAogCQkgKiBMZXQgdGhlIGNhbGxpbmcgZnVuY3Rpb24ga25vdyBzbyBpdCBjYW4gZGVjaWRlCiAJCSAqIHdoYXQgdG8gZG8uCiAJCSAqLwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAl0dHlfbG9jaygpOwogCWlmICh2dF93YWl0YWN0aXZlKHZ0ICsgMSkpIHsKIAkJcHJfZGVidWcoIlN1c3BlbmQ6IENhbid0IHN3aXRjaCBWQ3MuIik7CkBAIC0xNzgxLDggKzE3ODEsOCBAQAogICovCiB2b2lkIHBtX3NldF92dF9zd2l0Y2goaW50IGRvX3N3aXRjaCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZGlzYWJsZV92dF9zd2l0Y2ggPSAhZG9fc3dpdGNoOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChwbV9zZXRfdnRfc3dpdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwppbmRleCBkNmVkZTk4Li40YWI0OWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCkBAIC0xNjA3LDYgKzE2MDcsNyBAQAogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAxNTQpLCB9LCAvKiBOb2tpYSA1ODAwIFhwcmVzc011c2ljICovCiAJeyBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKDB4MDRjZSksIH0sIC8qIE5va2lhIEU5MCAqLwogCXsgTk9LSUFfUENTVUlURV9BQ01fSU5GTygweDAxZDQpLCB9LCAvKiBOb2tpYSBFNTUgKi8KKwl7IE5PS0lBX1BDU1VJVEVfQUNNX0lORk8oMHgwMzAyKSwgfSwgLyogTm9raWEgTjggKi8KIAl7IFNBTVNVTkdfUENTVUlURV9BQ01fSU5GTygweDY2NTEpLCB9LCAvKiBTYW1zdW5nIEdUaTg1MTAgKElOTk9WOCkgKi8KIAogCS8qIE5PVEU6IG5vbi1Ob2tpYSBDT01NL0FDTS8weGZmIGlzIGxpa2VseSBNU0ZUIFJORElTLi4uIE5PVCBhIG1vZGVtISAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IDZlZTQ0NTEuLjQ3MDg1ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTM0Miw3ICszNDIsNyBAQAogCQlnb3RvIG91dG5wOwogCX0KIAotCWlmICghZmlsZS0+Zl9mbGFncyAmJiBPX05PTkJMT0NLKQorCWlmICghKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSkKIAkJciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXNjLT53YWl0LCAhdGVzdF9iaXQoV0RNX0lOX1VTRSwKIAkJCQkJCQkJJmRlc2MtPmZsYWdzKSk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCmluZGV4IDlkYTI1MDUuLmRmNTAyYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKQEAgLTE5MiwxMiArMTkyLDEyIEBACiAJZXBfZGV2LT5kZXYucGFyZW50ID0gcGFyZW50OwogCWVwX2Rldi0+ZGV2LnJlbGVhc2UgPSBlcF9kZXZpY2VfcmVsZWFzZTsKIAlkZXZfc2V0X25hbWUoJmVwX2Rldi0+ZGV2LCAiZXBfJTAyeCIsIGVuZHBvaW50LT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwotCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcl9yZWdpc3RlcjsKIAorCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZXBfZGV2LT5kZXYpOwogCWVuZHBvaW50LT5lcF9kZXYgPSBlcF9kZXY7CiAJcmV0dXJuIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYwppbmRleCBiNTVkNDYwNy4uZjcxZThlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9oY2QtcGNpLmMKQEAgLTQwNSw3ICs0MDUsMTIgQEAKIAkJCXJldHVybiByZXR2YWw7CiAJfQogCi0Jc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CisJLyogSWYgTVNJLVggaXMgZW5hYmxlZCwgdGhlIGRyaXZlciB3aWxsIGhhdmUgc3luY2hyb25pemVkIGFsbCB2ZWN0b3JzCisJICogaW4gcGNpX3N1c3BlbmQoKS4gSWYgTVNJIG9yIGxlZ2FjeSBQQ0kgaXMgZW5hYmxlZCwgdGhhdCB3aWxsIGJlCisJICogc3luY2hyb25pemVkIGhlcmUuCisJICovCisJaWYgKCFoY2QtPm1zaXhfZW5hYmxlZCkKKwkJc3luY2hyb25pemVfaXJxKHBjaV9kZXYtPmlycSk7CiAKIAkvKiBEb3duc3RyZWFtIHBvcnRzIGZyb20gdGhpcyByb290IGh1YiBzaG91bGQgYWxyZWFkeSBiZSBxdWllc2NlZCwgc28KIAkgKiB0aGVyZSB3aWxsIGJlIG5vIERNQSBhY3Rpdml0eS4gIE5vdyB3ZSBjYW4gc2h1dCBkb3duIHRoZSB1cHN0cmVhbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKaW5kZXggNmE5NTAxNy4uZTkzNWY3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0xOTU1LDcgKzE5NTUsNiBAQAogCiAJZGV2X2RiZygmcmhkZXYtPmRldiwgInVzYiAlcyVzXG4iLAogCQkJKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8gPyAiYXV0by0iIDogIiIpLCAicmVzdW1lIik7Ci0JY2xlYXJfYml0KEhDRF9GTEFHX1dBS0VVUF9QRU5ESU5HLCAmaGNkLT5mbGFncyk7CiAJaWYgKCFoY2QtPmRyaXZlci0+YnVzX3Jlc3VtZSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJaWYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfUlVOTklORykKQEAgLTE5NjMsNiArMTk2Miw3IEBACiAKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUkVTVU1JTkc7CiAJc3RhdHVzID0gaGNkLT5kcml2ZXItPmJ1c19yZXN1bWUoaGNkKTsKKwljbGVhcl9iaXQoSENEX0ZMQUdfV0FLRVVQX1BFTkRJTkcsICZoY2QtPmZsYWdzKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJLyogVFJTTVJDWSA9IDEwIG1zZWMgKi8KIAkJbXNsZWVwKDEwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IGI5OGVmYWUuLjBmMjk5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtNjc2LDYgKzY3Niw4IEBACiBzdGF0aWMgdm9pZCBodWJfYWN0aXZhdGUoc3RydWN0IHVzYl9odWIgKmh1YiwgZW51bSBodWJfYWN0aXZhdGlvbl90eXBlIHR5cGUpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYgPSBodWItPmhkZXY7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKKwlpbnQgcmV0OwogCWludCBwb3J0MTsKIAlpbnQgc3RhdHVzOwogCWJvb2wgbmVlZF9kZWJvdW5jZV9kZWxheSA9IGZhbHNlOwpAQCAtNzE0LDYgKzcxNiwyNSBAQAogCQkJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSgKIAkJCQkJdG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKIAkJCXJldHVybjsJCS8qIENvbnRpbnVlcyBhdCBpbml0MjogYmVsb3cgKi8KKwkJfSBlbHNlIGlmICh0eXBlID09IEhVQl9SRVNFVF9SRVNVTUUpIHsKKwkJCS8qIFRoZSBpbnRlcm5hbCBob3N0IGNvbnRyb2xsZXIgc3RhdGUgZm9yIHRoZSBodWIgZGV2aWNlCisJCQkgKiBtYXkgYmUgZ29uZSBhZnRlciBhIGhvc3QgcG93ZXIgbG9zcyBvbiBzeXN0ZW0gcmVzdW1lLgorCQkJICogVXBkYXRlIHRoZSBkZXZpY2UncyBpbmZvIHNvIHRoZSBIVyBrbm93cyBpdCdzIGEgaHViLgorCQkJICovCisJCQloY2QgPSBidXNfdG9faGNkKGhkZXYtPmJ1cyk7CisJCQlpZiAoaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKSB7CisJCQkJcmV0ID0gaGNkLT5kcml2ZXItPnVwZGF0ZV9odWJfZGV2aWNlKGhjZCwgaGRldiwKKwkJCQkJCSZodWItPnR0LCBHRlBfTk9JTyk7CisJCQkJaWYgKHJldCA8IDApIHsKKwkJCQkJZGV2X2VycihodWItPmludGZkZXYsICJIb3N0IG5vdCAiCisJCQkJCQkJImFjY2VwdGluZyBodWIgaW5mbyAiCisJCQkJCQkJInVwZGF0ZS5cbiIpOworCQkJCQlkZXZfZXJyKGh1Yi0+aW50ZmRldiwgIkxTL0ZTIGRldmljZXMgIgorCQkJCQkJCSJhbmQgaHVicyBtYXkgbm90IHdvcmsgIgorCQkJCQkJCSJ1bmRlciB0aGlzIGh1YlxuLiIpOworCQkJCX0KKwkJCX0KKwkJCWh1Yl9wb3dlcl9vbihodWIsIHRydWUpOwogCQl9IGVsc2UgewogCQkJaHViX3Bvd2VyX29uKGh1YiwgdHJ1ZSk7CiAJCX0KQEAgLTI2NjAsMTcgKzI2ODEsMTMgQEAKIAogCW11dGV4X2xvY2soJnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKLQlpZiAoIXVkZXYtPmNvbmZpZyAmJiBvbGRzcGVlZCA9PSBVU0JfU1BFRURfU1VQRVIpIHsKLQkJLyogRG9uJ3QgcmVzZXQgVVNCIDMuMCBkZXZpY2VzIGR1cmluZyBhbiBpbml0aWFsIHNldHVwICovCi0JCXVzYl9zZXRfZGV2aWNlX3N0YXRlKHVkZXYsIFVTQl9TVEFURV9ERUZBVUxUKTsKLQl9IGVsc2UgewotCQkvKiBSZXNldCB0aGUgZGV2aWNlOyBmdWxsIHNwZWVkIG1heSBtb3JwaCB0byBoaWdoIHNwZWVkICovCi0JCS8qIEZJWE1FIGEgVVNCIDIuMCBkZXZpY2UgbWF5IG1vcnBoIGludG8gU3VwZXJTcGVlZCBvbiByZXNldC4gKi8KLQkJcmV0dmFsID0gaHViX3BvcnRfcmVzZXQoaHViLCBwb3J0MSwgdWRldiwgZGVsYXkpOwotCQlpZiAocmV0dmFsIDwgMCkJCS8qIGVycm9yIG9yIGRpc2Nvbm5lY3QgKi8KLQkJCWdvdG8gZmFpbDsKLQkJLyogc3VjY2Vzcywgc3BlZWQgaXMga25vd24gKi8KLQl9CisJLyogUmVzZXQgdGhlIGRldmljZTsgZnVsbCBzcGVlZCBtYXkgbW9ycGggdG8gaGlnaCBzcGVlZCAqLworCS8qIEZJWE1FIGEgVVNCIDIuMCBkZXZpY2UgbWF5IG1vcnBoIGludG8gU3VwZXJTcGVlZCBvbiByZXNldC4gKi8KKwlyZXR2YWwgPSBodWJfcG9ydF9yZXNldChodWIsIHBvcnQxLCB1ZGV2LCBkZWxheSk7CisJaWYgKHJldHZhbCA8IDApCQkvKiBlcnJvciBvciBkaXNjb25uZWN0ICovCisJCWdvdG8gZmFpbDsKKwkvKiBzdWNjZXNzLCBzcGVlZCBpcyBrbm93biAqLworCiAJcmV0dmFsID0gLUVOT0RFVjsKIAogCWlmIChvbGRzcGVlZCAhPSBVU0JfU1BFRURfVU5LTk9XTiAmJiBvbGRzcGVlZCAhPSB1ZGV2LT5zcGVlZCkgewpAQCAtMjczMiw2ICsyNzQ5LDExIEBACiAJCXVkZXYtPnR0cG9ydCA9IGhkZXYtPnR0cG9ydDsKIAl9IGVsc2UgaWYgKHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdICiAJCQkmJiBoZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgeworCQlpZiAoIWh1Yi0+dHQuaHViKSB7CisJCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJwYXJlbnQgaHViIGhhcyBubyBUVFxuIik7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBmYWlsOworCQl9CiAJCXVkZXYtPnR0ID0gJmh1Yi0+dHQ7CiAJCXVkZXYtPnR0cG9ydCA9IHBvcnQxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCmluZGV4IDQ0YzU5NTQuLjgxY2U2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwpAQCAtNDgsNiArNDgsMTAgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwNGI0LCAweDA1MjYpLCAuZHJpdmVyX2luZm8gPQogCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKIAorCS8qIFNhbXN1bmcgQW5kcm9pZCBwaG9uZSBtb2RlbSAtIElEIGNvbmZsaWN0IHdpdGggU1BILUk1MDAgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGU4LCAweDY2MDEpLCAuZHJpdmVyX2luZm8gPQorCQkJVVNCX1FVSVJLX0NPTkZJR19JTlRGX1NUUklOR1MgfSwKKwogCS8qIFJvbGFuZCBTQy04ODIwICovCiAJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDA3KSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCkBAIC02OCw2ICs3MiwxMCBAQAogCS8qIE0tU3lzdGVtcyBGbGFzaCBEaXNrIFBpb25lZXJzICovCiAJeyBVU0JfREVWSUNFKDB4MDhlYywgMHgxMDAwKSwgLmRyaXZlcl9pbmZvID0gVVNCX1FVSVJLX1JFU0VUX1JFU1VNRSB9LAogCisJLyogS2V5dG91Y2ggUVdFUlRZIFBhbmVsIGtleWJvYXJkICovCisJeyBVU0JfREVWSUNFKDB4MDkyNiwgMHgzMzMzKSwgLmRyaXZlcl9pbmZvID0KKwkJCVVTQl9RVUlSS19DT05GSUdfSU5URl9TVFJJTkdTIH0sCisKIAkvKiBYLVJpdGUvR3JldGFnLU1hY2JldGggRXllLU9uZSBQcm8gZGlzcGxheSBjb2xvcmltZXRlciAqLwogCXsgVVNCX0RFVklDRSgweDA5NzEsIDB4MjAwMCksIC5kcml2ZXJfaW5mbyA9IFVTQl9RVUlSS19OT19TRVRfSU5URiB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDFkYzk3MzkuLmQ1MDA5OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC01MDksNyArNTA5LDcgQEAKIAlzZWxlY3QgVVNCX0dBREdFVF9TRUxFQ1RFRAogCiBjb25maWcgVVNCX0dBREdFVF9FRzIwVAotCWJvb2xlYW4gIkludGVsIEVHMjBUKFRvcGNsaWZmKSBVU0IgRGV2aWNlIGNvbnRyb2xsZXIiCisJYm9vbGVhbiAiSW50ZWwgRUcyMFQgUENIL09LSSBTRU1JQ09ORFVDVE9SIE1MNzIxMyBJT0ggVURDIgogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IFVTQl9HQURHRVRfRFVBTFNQRUVECiAJaGVscApAQCAtNTI1LDYgKzUyNSwxMSBAQAogCSAgVGhpcyBkcml2ZXIgZG9zZSBub3Qgc3VwcG9ydCBpbnRlcnJ1cHQgdHJhbnNmZXIgb3IgaXNvY2hyb25vdXMKIAkgIHRyYW5zZmVyIG1vZGVzLgogCisJICBUaGlzIGRyaXZlciBhbHNvIGNhbiBiZSB1c2VkIGZvciBPS0kgU0VNSUNPTkRVQ1RPUidzIE1MNzIxMyB3aGljaCBpcworCSAgZm9yIElWSShJbi1WZWhpY2xlIEluZm90YWlubWVudCkgdXNlLgorCSAgTUw3MjEzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjEzIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILgorCiBjb25maWcgVVNCX0VHMjBUCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIFVTQl9HQURHRVRfRUcyMFQKQEAgLTU0MSw2ICs1NDYsOCBAQAogCSAgY2kxM3h4eF91ZGMgY29yZS4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiAJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQogCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImNpMTN4eHhfbXNtIiBhbmQgZm9yY2UgYWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCmluZGV4IDMxNjU2YTIuLmExYzY3YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9jaTEzeHh4X3VkYy5jCkBAIC03NiwxMCArNzYsMjEgQEAKIAogLyogY29udHJvbCBlbmRwb2ludCBkZXNjcmlwdGlvbiAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgotY3RybF9lbmRwdF9kZXNjID0geworY3RybF9lbmRwdF9vdXRfZGVzYyA9IHsKIAkuYkxlbmd0aCAgICAgICAgID0gVVNCX0RUX0VORFBPSU5UX1NJWkUsCiAJLmJEZXNjcmlwdG9yVHlwZSA9IFVTQl9EVF9FTkRQT0lOVCwKIAorCS5iRW5kcG9pbnRBZGRyZXNzID0gVVNCX0RJUl9PVVQsCisJLmJtQXR0cmlidXRlcyAgICA9IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wsCisJLndNYXhQYWNrZXRTaXplICA9IGNwdV90b19sZTE2KENUUkxfUEFZTE9BRF9NQVgpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvcgorY3RybF9lbmRwdF9pbl9kZXNjID0geworCS5iTGVuZ3RoICAgICAgICAgPSBVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPSBVU0JfRElSX0lOLAogCS5ibUF0dHJpYnV0ZXMgICAgPSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MLAogCS53TWF4UGFja2V0U2l6ZSAgPSBjcHVfdG9fbGUxNihDVFJMX1BBWUxPQURfTUFYKSwKIH07CkBAIC0yNjUsMTAgKzI3NiwxMCBAQAogCWh3X2Jhbmsuc2l6ZSAvPSBzaXplb2YodTMyKTsKIAogCXJlZyA9IGh3X2FyZWFkKEFCU19EQ0NQQVJBTVMsIERDQ1BBUkFNU19ERU4pID4+IGZmc19ucihEQ0NQQVJBTVNfREVOKTsKLQlpZiAocmVnID09IDAgfHwgcmVnID4gRU5EUFRfTUFYKQotCQlyZXR1cm4gLUVOT0RFVjsKKwlod19lcF9tYXggPSByZWcgKiAyOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLwogCi0JaHdfZXBfbWF4ID0gcmVnOyAgIC8qIGNhY2hlIGh3IEVORFBUX01BWCAqLworCWlmIChod19lcF9tYXggPT0gMCB8fCBod19lcF9tYXggPiBFTkRQVF9NQVgpCisJCXJldHVybiAtRU5PREVWOwogCiAJLyogc2V0dXAgbG9jayBtb2RlID8gKi8KIApAQCAtMTE5NywxNiArMTIwOCwxNyBAQAogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykgewotCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+Y2kxM3h4eF9lcFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgaHdfZXBfbWF4LzI7IGkrKykgeworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwUnggPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwVHggPSAmdWRjLT5jaTEzeHh4X2VwW2kgKyBod19lcF9tYXgvMl07CiAJCW4gKz0gc2NucHJpbnRmKGJ1ZiArIG4sIFBBR0VfU0laRSAtIG4sCiAJCQkgICAgICAgIkVQPSUwMmk6IFJYPSUwOFggVFg9JTA4WFxuIiwKLQkJCSAgICAgICBpLCAodTMyKW1FcC0+cWhbUlhdLmRtYSwgKHUzMiltRXAtPnFoW1RYXS5kbWEpOworCQkJICAgICAgIGksICh1MzIpbUVwUngtPnFoLmRtYSwgKHUzMiltRXBUeC0+cWguZG1hKTsKIAkJZm9yIChqID0gMDsgaiA8IChzaXplb2Yoc3RydWN0IGNpMTN4eHhfcWgpL3NpemVvZih1MzIpKTsgaisrKSB7CiAJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAogCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFggICAgJTA4WFxuIiwgaiwKLQkJCQkgICAgICAgKigodTMyICopbUVwLT5xaFtSWF0ucHRyICsgaiksCi0JCQkJICAgICAgICooKHUzMiAqKW1FcC0+cWhbVFhdLnB0ciArIGopKTsKKwkJCQkgICAgICAgKigodTMyICopbUVwUngtPnFoLnB0ciArIGopLAorCQkJCSAgICAgICAqKCh1MzIgKiltRXBUeC0+cWgucHRyICsgaikpOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CkBAIC0xMjkzLDcgKzEzMDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAgICpwdHIgPSBOVUxMOwogCXN0cnVjdCBjaTEzeHh4X3JlcSAqcmVxID0gTlVMTDsKLQl1bnNpZ25lZCBpLCBqLCBrLCBuID0gMCwgcVNpemUgPSBzaXplb2Yoc3RydWN0IGNpMTN4eHhfdGQpL3NpemVvZih1MzIpOworCXVuc2lnbmVkIGksIGosIG4gPSAwLCBxU2l6ZSA9IHNpemVvZihzdHJ1Y3QgY2kxM3h4eF90ZCkvc2l6ZW9mKHUzMik7CiAKIAlkYmdfdHJhY2UoIlslc10gJXBcbiIsIF9fZnVuY19fLCBidWYpOwogCWlmIChhdHRyID09IE5VTEwgfHwgYnVmID09IE5VTEwpIHsKQEAgLTEzMDMsMjIgKzEzMTUsMjAgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXg7IGkrKykKLQkJZm9yIChrID0gUlg7IGsgPD0gVFg7IGsrKykKLQkJCWxpc3RfZm9yX2VhY2gocHRyLCAmdWRjLT5jaTEzeHh4X2VwW2ldLnFoW2tdLnF1ZXVlKQotCQkJewotCQkJCXJlcSA9IGxpc3RfZW50cnkocHRyLAotCQkJCQkJIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOworCQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnVkYy0+Y2kxM3h4eF9lcFtpXS5xaC5xdWV1ZSkKKwkJeworCQkJcmVxID0gbGlzdF9lbnRyeShwdHIsIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCisJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAorCQkJCQkiRVA9JTAyaTogVEQ9JTA4WCAlc1xuIiwKKwkJCQkJaSAlIGh3X2VwX21heC8yLCAodTMyKXJlcS0+ZG1hLAorCQkJCQkoKGkgPCBod19lcF9tYXgvMikgPyAiUlgiIDogIlRYIikpOworCisJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKIAkJCQluICs9IHNjbnByaW50ZihidWYgKyBuLCBQQUdFX1NJWkUgLSBuLAotCQkJCQkgICAgICAgIkVQPSUwMmk6IFREPSUwOFggJXNcbiIsCi0JCQkJCSAgICAgICBpLCAodTMyKXJlcS0+ZG1hLAotCQkJCQkgICAgICAgKChrID09IFJYKSA/ICJSWCIgOiAiVFgiKSk7Ci0KLQkJCQlmb3IgKGogPSAwOyBqIDwgcVNpemU7IGorKykKLQkJCQkJbiArPSBzY25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwKLQkJCQkJCSAgICAgICAiICUwNFg6ICAgICUwOFhcbiIsIGosCi0JCQkJCQkgICAgICAgKigodTMyICopcmVxLT5wdHIgKyBqKSk7Ci0JCQl9CisJCQkJCQkiICUwNFg6ICAgICUwOFhcbiIsIGosCisJCQkJCQkqKCh1MzIgKilyZXEtPnB0ciArIGopKTsKKwkJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gbjsKQEAgLTE0NjcsMTIgKzE0NzcsMTIgQEAKIAkgKiAgQXQgdGhpcyBwb2ludCBpdCdzIGd1YXJhbnRlZWQgZXhjbHVzaXZlIGFjY2VzcyB0byBxaGVhZAogCSAqICAoZW5kcHQgaXMgbm90IHByaW1lZCkgc28gaXQncyBubyBuZWVkIHRvIHVzZSB0cmlwd2lyZQogCSAqLwotCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCAgID0gbVJlcS0+ZG1hOyAgICAvKiBURVJNSU5BVEUgPSAwICovCi0JbUVwLT5xaFttRXAtPmRpcl0ucHRyLT50ZC50b2tlbiAmPSB+VERfU1RBVFVTOyAgIC8qIGNsZWFyIHN0YXR1cyAqLworCW1FcC0+cWgucHRyLT50ZC5uZXh0ICAgPSBtUmVxLT5kbWE7ICAgIC8qIFRFUk1JTkFURSA9IDAgKi8KKwltRXAtPnFoLnB0ci0+dGQudG9rZW4gJj0gflREX1NUQVRVUzsgICAvKiBjbGVhciBzdGF0dXMgKi8KIAlpZiAobVJlcS0+cmVxLnplcm8gPT0gMCkKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgfD0gIFFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfWkxUOwogCWVsc2UKLQkJbUVwLT5xaFttRXAtPmRpcl0ucHRyLT5jYXAgJj0gflFIX1pMVDsKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCiAJd21iKCk7ICAgLyogc3luY2hyb25pemUgYmVmb3JlIGVwIHByaW1lICovCiAKQEAgLTE1NDIsMTEgKzE1NTIsMTEgQEAKIAogCWh3X2VwX2ZsdXNoKG1FcC0+bnVtLCBtRXAtPmRpcik7CiAKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAogCQkvKiBwb3Agb2xkZXN0IHJlcXVlc3QgKi8KIAkJc3RydWN0IGNpMTN4eHhfcmVxICptUmVxID0gXAotCQkJbGlzdF9lbnRyeShtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZS5uZXh0LAorCQkJbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkJICAgc3RydWN0IGNpMTN4eHhfcmVxLCBxdWV1ZSk7CiAJCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIAkJbVJlcS0+cmVxLnN0YXR1cyA9IC1FU0hVVERPV047CkBAIC0xNTcxLDggKzE1ODEsNiBAQAogewogCXN0cnVjdCB1c2JfZXAgKmVwOwogCXN0cnVjdCBjaTEzeHh4ICAgICp1ZGMgPSBjb250YWluZXJfb2YoZ2FkZ2V0LCBzdHJ1Y3QgY2kxM3h4eCwgZ2FkZ2V0KTsKLQlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gY29udGFpbmVyX29mKGdhZGdldC0+ZXAwLAotCQkJCQkgICAgICBzdHJ1Y3QgY2kxM3h4eF9lcCwgZXApOwogCiAJdHJhY2UoIiVwIiwgZ2FkZ2V0KTsKIApAQCAtMTU4Myw3ICsxNTkxLDggQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZmlmb19mbHVzaChlcCk7CiAJfQotCXVzYl9lcF9maWZvX2ZsdXNoKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZmlmb19mbHVzaCgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9maWZvX2ZsdXNoKCZ1ZGMtPmVwMGluLmVwKTsKIAogCXVkYy0+ZHJpdmVyLT5kaXNjb25uZWN0KGdhZGdldCk7CiAKQEAgLTE1OTEsMTEgKzE2MDAsMTIgQEAKIAlnYWRnZXRfZm9yX2VhY2hfZXAoZXAsIGdhZGdldCkgewogCQl1c2JfZXBfZGlzYWJsZShlcCk7CiAJfQotCXVzYl9lcF9kaXNhYmxlKGdhZGdldC0+ZXAwKTsKKwl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOworCXVzYl9lcF9kaXNhYmxlKCZ1ZGMtPmVwMGluLmVwKTsKIAotCWlmIChtRXAtPnN0YXR1cyAhPSBOVUxMKSB7Ci0JCXVzYl9lcF9mcmVlX3JlcXVlc3QoZ2FkZ2V0LT5lcDAsIG1FcC0+c3RhdHVzKTsKLQkJbUVwLT5zdGF0dXMgPSBOVUxMOworCWlmICh1ZGMtPnN0YXR1cyAhPSBOVUxMKSB7CisJCXVzYl9lcF9mcmVlX3JlcXVlc3QoJnVkYy0+ZXAwaW4uZXAsIHVkYy0+c3RhdHVzKTsKKwkJdWRjLT5zdGF0dXMgPSBOVUxMOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTYxNCw3ICsxNjI0LDYgQEAKIF9fcmVsZWFzZXModWRjLT5sb2NrKQogX19hY3F1aXJlcyh1ZGMtPmxvY2spCiB7Ci0Jc3RydWN0IGNpMTN4eHhfZXAgKm1FcCA9ICZ1ZGMtPmNpMTN4eHhfZXBbMF07CiAJaW50IHJldHZhbDsKIAogCXRyYWNlKCIlcCIsIHVkYyk7CkBAIC0xNjM1LDExICsxNjQ0LDE1IEBACiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCi0JcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmbUVwLT5lcCwgJmN0cmxfZW5kcHRfZGVzYyk7CisJcmV0dmFsID0gdXNiX2VwX2VuYWJsZSgmdWRjLT5lcDBvdXQuZXAsICZjdHJsX2VuZHB0X291dF9kZXNjKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGRvbmU7CisKKwlyZXR2YWwgPSB1c2JfZXBfZW5hYmxlKCZ1ZGMtPmVwMGluLmVwLCAmY3RybF9lbmRwdF9pbl9kZXNjKTsKIAlpZiAoIXJldHZhbCkgewotCQltRXAtPnN0YXR1cyA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KCZtRXAtPmVwLCBHRlBfQVRPTUlDKTsKLQkJaWYgKG1FcC0+c3RhdHVzID09IE5VTEwpIHsKLQkJCXVzYl9lcF9kaXNhYmxlKCZtRXAtPmVwKTsKKwkJdWRjLT5zdGF0dXMgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdCgmdWRjLT5lcDBpbi5lcCwgR0ZQX0FUT01JQyk7CisJCWlmICh1ZGMtPnN0YXR1cyA9PSBOVUxMKSB7CisJCQl1c2JfZXBfZGlzYWJsZSgmdWRjLT5lcDBvdXQuZXApOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJfQogCX0KQEAgLTE2NzIsMTYgKzE2ODUsMTcgQEAKIAogLyoqCiAgKiBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZTogZ2V0X3N0YXR1cyByZXF1ZXN0IHJlc3BvbnNlCi0gKiBAZXA6ICAgIGVuZHBvaW50CisgKiBAdWRjOiB1ZGMgc3RydWN0CiAgKiBAc2V0dXA6IHNldHVwIHJlcXVlc3QgcGFja2V0CiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUKICAqLwotc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwLAorc3RhdGljIGludCBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShzdHJ1Y3QgY2kxM3h4eCAqdWRjLAogCQkJCSAgIHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKnNldHVwKQogX19yZWxlYXNlcyhtRXAtPmxvY2spCiBfX2FjcXVpcmVzKG1FcC0+bG9jaykKIHsKKwlzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwID0gJnVkYy0+ZXAwaW47CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICpyZXEgPSBOVUxMOwogCWdmcF90IGdmcF9mbGFncyA9IEdGUF9BVE9NSUM7CiAJaW50IGRpciwgbnVtLCByZXR2YWw7CkBAIC0xNzM2LDI3ICsxNzUwLDIzIEBACiAKIC8qKgogICogaXNyX3NldHVwX3N0YXR1c19waGFzZTogcXVldWVzIHRoZSBzdGF0dXMgcGhhc2Ugb2YgYSBzZXR1cCB0cmFuc2F0aW9uCi0gKiBAbUVwOiBlbmRwb2ludAorICogQHVkYzogdWRjIHN0cnVjdAogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaXNyX3NldHVwX3N0YXR1c19waGFzZShzdHJ1Y3QgY2kxM3h4eF9lcCAqbUVwKQorc3RhdGljIGludCBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHN0cnVjdCBjaTEzeHh4ICp1ZGMpCiBfX3JlbGVhc2VzKG1FcC0+bG9jaykKIF9fYWNxdWlyZXMobUVwLT5sb2NrKQogewogCWludCByZXR2YWw7CisJc3RydWN0IGNpMTN4eHhfZXAgKm1FcDsKIAotCXRyYWNlKCIlcCIsIG1FcCk7CisJdHJhY2UoIiVwIiwgdWRjKTsKIAotCS8qIG1FcCBpcyBhbHdheXMgdmFsaWQgJiBjb25maWd1cmVkICovCi0KLQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCW1FcC0+ZGlyID0gKG1FcC0+ZGlyID09IFRYKSA/IFJYIDogVFg7Ci0KLQltRXAtPnN0YXR1cy0+bm9faW50ZXJydXB0ID0gMTsKKwltRXAgPSAodWRjLT5lcDBfZGlyID09IFRYKSA/ICZ1ZGMtPmVwMG91dCA6ICZ1ZGMtPmVwMGluOwogCiAJc3Bpbl91bmxvY2sobUVwLT5sb2NrKTsKLQlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIG1FcC0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2JfZXBfcXVldWUoJm1FcC0+ZXAsIHVkYy0+c3RhdHVzLCBHRlBfQVRPTUlDKTsKIAlzcGluX2xvY2sobUVwLT5sb2NrKTsKIAogCXJldHVybiByZXR2YWw7CkBAIC0xNzc4LDExICsxNzg4LDExIEBACiAKIAl0cmFjZSgiJXAiLCBtRXApOwogCi0JaWYgKGxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkKKwlpZiAobGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogcG9wIG9sZGVzdCByZXF1ZXN0ICovCi0JbVJlcSA9IGxpc3RfZW50cnkobUVwLT5xaFttRXAtPmRpcl0ucXVldWUubmV4dCwKKwltUmVxID0gbGlzdF9lbnRyeShtRXAtPnFoLnF1ZXVlLm5leHQsCiAJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCWxpc3RfZGVsX2luaXQoJm1SZXEtPnF1ZXVlKTsKIApAQCAtMTc5NCwxMCArMTgwNCwxMCBAQAogCiAJZGJnX2RvbmUoX3VzYl9hZGRyKG1FcCksIG1SZXEtPnB0ci0+dG9rZW4sIHJldHZhbCk7CiAKLQlpZiAoIWxpc3RfZW1wdHkoJm1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlKSkgeworCWlmICghbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpIHsKIAkJc3RydWN0IGNpMTN4eHhfcmVxKiBtUmVxRW5xOwogCi0JCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWhbbUVwLT5kaXJdLnF1ZXVlLm5leHQsCisJCW1SZXFFbnEgPSBsaXN0X2VudHJ5KG1FcC0+cWgucXVldWUubmV4dCwKIAkJCQkgIHN0cnVjdCBjaTEzeHh4X3JlcSwgcXVldWUpOwogCQlfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXFFbnEpOwogCX0KQEAgLTE4MzYsMTYgKzE4NDYsMTQgQEAKIAkJaW50IHR5cGUsIG51bSwgZXJyID0gLUVJTlZBTDsKIAkJc3RydWN0IHVzYl9jdHJscmVxdWVzdCByZXE7CiAKLQogCQlpZiAobUVwLT5kZXNjID09IE5VTEwpCiAJCQljb250aW51ZTsgICAvKiBub3QgY29uZmlndXJlZCAqLwogCi0JCWlmICgobUVwLT5kaXIgPT0gUlggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSkpIHx8Ci0JCSAgICAobUVwLT5kaXIgPT0gVFggJiYgaHdfdGVzdF9hbmRfY2xlYXJfY29tcGxldGUoaSArIDE2KSkpIHsKKwkJaWYgKGh3X3Rlc3RfYW5kX2NsZWFyX2NvbXBsZXRlKGkpKSB7CiAJCQllcnIgPSBpc3JfdHJfY29tcGxldGVfbG93KG1FcCk7CiAJCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpIHsKIAkJCQlpZiAoZXJyID4gMCkgICAvKiBuZWVkcyBzdGF0dXMgcGhhc2UgKi8KLQkJCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQkJaWYgKGVyciA8IDApIHsKIAkJCQkJZGJnX2V2ZW50KF91c2JfYWRkcihtRXApLAogCQkJCQkJICAiRVJST1IiLCBlcnIpOwpAQCAtMTg2NiwxNSArMTg3NCwyMiBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQkvKgorCQkgKiBGbHVzaCBkYXRhIGFuZCBoYW5kc2hha2UgdHJhbnNhY3Rpb25zIG9mIHByZXZpb3VzCisJCSAqIHNldHVwIHBhY2tldC4KKwkJICovCisJCV9lcF9udWtlKCZ1ZGMtPmVwMG91dCk7CisJCV9lcF9udWtlKCZ1ZGMtPmVwMGluKTsKKwogCQkvKiByZWFkX3NldHVwX3BhY2tldCAqLwogCQlkbyB7CiAJCQlod190ZXN0X2FuZF9zZXRfc2V0dXBfZ3VhcmQoKTsKLQkJCW1lbWNweSgmcmVxLCAmbUVwLT5xaFtSWF0ucHRyLT5zZXR1cCwgc2l6ZW9mKHJlcSkpOworCQkJbWVtY3B5KCZyZXEsICZtRXAtPnFoLnB0ci0+c2V0dXAsIHNpemVvZihyZXEpKTsKIAkJfSB3aGlsZSAoIWh3X3Rlc3RfYW5kX2NsZWFyX3NldHVwX2d1YXJkKCkpOwogCiAJCXR5cGUgPSByZXEuYlJlcXVlc3RUeXBlOwogCi0JCW1FcC0+ZGlyID0gKHR5cGUgJiBVU0JfRElSX0lOKSA/IFRYIDogUlg7CisJCXVkYy0+ZXAwX2RpciA9ICh0eXBlICYgVVNCX0RJUl9JTikgPyBUWCA6IFJYOwogCiAJCWRiZ19zZXR1cChfdXNiX2FkZHIobUVwKSwgJnJlcSk7CiAKQEAgLTE4OTUsNyArMTkxMCw3IEBACiAJCQkJaWYgKGVycikKIAkJCQkJYnJlYWs7CiAJCQl9Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJY2FzZSBVU0JfUkVRX0dFVF9TVEFUVVM6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfREVWSUNFKSAgICYmCkBAIC0xOTA1LDcgKzE5MjAsNyBAQAogCQkJaWYgKGxlMTZfdG9fY3B1KHJlcS53TGVuZ3RoKSAhPSAyIHx8CiAJCQkgICAgbGUxNl90b19jcHUocmVxLndWYWx1ZSkgICE9IDApCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3JfZ2V0X3N0YXR1c19yZXNwb25zZShtRXAsICZyZXEpOworCQkJZXJyID0gaXNyX2dldF9zdGF0dXNfcmVzcG9uc2UodWRjLCAmcmVxKTsKIAkJCWJyZWFrOwogCQljYXNlIFVTQl9SRVFfU0VUX0FERFJFU1M6CiAJCQlpZiAodHlwZSAhPSAoVVNCX0RJUl9PVVR8VVNCX1JFQ0lQX0RFVklDRSkpCkBAIC0xOTE2LDcgKzE5MzEsNyBAQAogCQkJZXJyID0gaHdfdXNiX3NldF9hZGRyZXNzKCh1OClsZTE2X3RvX2NwdShyZXEud1ZhbHVlKSk7CiAJCQlpZiAoZXJyKQogCQkJCWJyZWFrOwotCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZShtRXApOworCQkJZXJyID0gaXNyX3NldHVwX3N0YXR1c19waGFzZSh1ZGMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1JFUV9TRVRfRkVBVFVSRToKIAkJCWlmICh0eXBlICE9IChVU0JfRElSX09VVHxVU0JfUkVDSVBfRU5EUE9JTlQpICYmCkBAIC0xOTMyLDEyICsxOTQ3LDEyIEBACiAJCQlzcGluX2xvY2sodWRjLT5sb2NrKTsKIAkJCWlmIChlcnIpCiAJCQkJYnJlYWs7Ci0JCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKG1FcCk7CisJCQllcnIgPSBpc3Jfc2V0dXBfc3RhdHVzX3BoYXNlKHVkYyk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIGRlbGVnYXRlOgogCQkJaWYgKHJlcS53TGVuZ3RoID09IDApICAgLyogbm8gZGF0YSBwaGFzZSAqLwotCQkJCW1FcC0+ZGlyID0gVFg7CisJCQkJdWRjLT5lcDBfZGlyID0gVFg7CiAKIAkJCXNwaW5fdW5sb2NrKHVkYy0+bG9jayk7CiAJCQllcnIgPSB1ZGMtPmRyaXZlci0+c2V0dXAoJnVkYy0+Z2FkZ2V0LCAmcmVxKTsKQEAgLTE5NjgsNyArMTk4Myw3IEBACiAJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjKQogewogCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSBjb250YWluZXJfb2YoZXAsIHN0cnVjdCBjaTEzeHh4X2VwLCBlcCk7Ci0JaW50IGRpcmVjdGlvbiwgcmV0dmFsID0gMDsKKwlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdHJhY2UoIiVwLCAlcCIsIGVwLCBkZXNjKTsKQEAgLTE5ODIsNyArMTk5Nyw3IEBACiAKIAltRXAtPmRlc2MgPSBkZXNjOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPnFoLnF1ZXVlKSkKIAkJd2FybigiZW5hYmxpbmcgYSBub24tZW1wdHkgZW5kcG9pbnQhIik7CiAKIAltRXAtPmRpciAgPSB1c2JfZW5kcG9pbnRfZGlyX2luKGRlc2MpID8gVFggOiBSWDsKQEAgLTE5OTEsMjkgKzIwMDYsMjIgQEAKIAogCW1FcC0+ZXAubWF4cGFja2V0ID0gX19jb25zdGFudF9sZTE2X3RvX2NwdShkZXNjLT53TWF4UGFja2V0U2l6ZSk7CiAKLQlkaXJlY3Rpb24gPSBtRXAtPmRpcjsKLQlkbyB7Ci0JCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOworCWRiZ19ldmVudChfdXNiX2FkZHIobUVwKSwgIkVOQUJMRSIsIDApOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwID0gMDsKKwltRXAtPnFoLnB0ci0+Y2FwID0gMDsKIAotCQlpZiAobUVwLT50eXBlID09IFVTQl9FTkRQT0lOVF9YRkVSX0NPTlRST0wpCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCB8PSAgUUhfSU9TOwotCQllbHNlIGlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykKLQkJCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwICY9IH5RSF9NVUxUOwotCQllbHNlCi0JCQltRXAtPnFoW21FcC0+ZGlyXS5wdHItPmNhcCAmPSB+UUhfWkxUOworCWlmIChtRXAtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQ09OVFJPTCkKKwkJbUVwLT5xaC5wdHItPmNhcCB8PSAgUUhfSU9TOworCWVsc2UgaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQorCQltRXAtPnFoLnB0ci0+Y2FwICY9IH5RSF9NVUxUOworCWVsc2UKKwkJbUVwLT5xaC5wdHItPmNhcCAmPSB+UUhfWkxUOwogCi0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+Y2FwIHw9Ci0JCQkobUVwLT5lcC5tYXhwYWNrZXQgPDwgZmZzX25yKFFIX01BWF9QS1QpKSAmIFFIX01BWF9QS1Q7Ci0JCW1FcC0+cWhbbUVwLT5kaXJdLnB0ci0+dGQubmV4dCB8PSBURF9URVJNSU5BVEU7ICAgLyogbmVlZGVkPyAqLworCW1FcC0+cWgucHRyLT5jYXAgfD0KKwkJKG1FcC0+ZXAubWF4cGFja2V0IDw8IGZmc19ucihRSF9NQVhfUEtUKSkgJiBRSF9NQVhfUEtUOworCW1FcC0+cWgucHRyLT50ZC5uZXh0IHw9IFREX1RFUk1JTkFURTsgICAvKiBuZWVkZWQ/ICovCiAKLQkJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7Ci0KLQkJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKQotCQkJbUVwLT5kaXIgPSAobUVwLT5kaXIgPT0gVFgpID8gUlggOiBUWDsKLQotCX0gd2hpbGUgKG1FcC0+ZGlyICE9IGRpcmVjdGlvbik7CisJcmV0dmFsIHw9IGh3X2VwX2VuYWJsZShtRXAtPm51bSwgbUVwLT5kaXIsIG1FcC0+dHlwZSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKG1FcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CkBAIC0yMTQ2LDcgKzIxNTQsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKG1FcC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCV9lcF9udWtlKG1FcCk7CiAJCXJldHZhbCA9IC1FT1ZFUkZMT1c7CiAJCXdhcm4oImVuZHBvaW50IGN0cmwgJVggbnVrZWQiLCBfdXNiX2FkZHIobUVwKSk7CkBAIC0yMTcwLDkgKzIxNzgsOSBAQAogCS8qIHB1c2ggcmVxdWVzdCAqLwogCW1SZXEtPnJlcS5zdGF0dXMgPSAtRUlOUFJPR1JFU1M7CiAJbVJlcS0+cmVxLmFjdHVhbCA9IDA7Ci0JbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSk7CisJbGlzdF9hZGRfdGFpbCgmbVJlcS0+cXVldWUsICZtRXAtPnFoLnF1ZXVlKTsKIAotCWlmIChsaXN0X2lzX3Npbmd1bGFyKCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJaWYgKGxpc3RfaXNfc2luZ3VsYXIoJm1FcC0+cWgucXVldWUpKQogCQlyZXR2YWwgPSBfaGFyZHdhcmVfZW5xdWV1ZShtRXAsIG1SZXEpOwogCiAJaWYgKHJldHZhbCA9PSAtRUFMUkVBRFkpIHsKQEAgLTIxOTksNyArMjIwNyw3IEBACiAJdHJhY2UoIiVwLCAlcCIsIGVwLCByZXEpOwogCiAJaWYgKGVwID09IE5VTEwgfHwgcmVxID09IE5VTEwgfHwgbUVwLT5kZXNjID09IE5VTEwgfHwKLQkgICAgbGlzdF9lbXB0eSgmbVJlcS0+cXVldWUpICB8fCBsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpCisJICAgIGxpc3RfZW1wdHkoJm1SZXEtPnF1ZXVlKSAgfHwgbGlzdF9lbXB0eSgmbUVwLT5xaC5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUobUVwLT5sb2NrLCBmbGFncyk7CkBAIC0yMjQ0LDcgKzIyNTIsNyBAQAogI2lmbmRlZiBTVEFMTF9JTgogCS8qIGdfZmlsZV9zdG9yYWdlIE1TIGNvbXBsaWFudCBidXQgZ196ZXJvIGZhaWxzIGNoYXB0ZXIgOSBjb21wbGlhbmNlICovCiAJaWYgKHZhbHVlICYmIG1FcC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLICYmIG1FcC0+ZGlyID09IFRYICYmCi0JICAgICFsaXN0X2VtcHR5KCZtRXAtPnFoW21FcC0+ZGlyXS5xdWV1ZSkpIHsKKwkgICAgIWxpc3RfZW1wdHkoJm1FcC0+cWgucXVldWUpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUobUVwLT5sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KQEAgLTIzNTUsNyArMjM2Myw3IEBACiAJCWlmIChpc19hY3RpdmUpIHsKIAkJCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJl9nYWRnZXQtPmRldik7CiAJCQlod19kZXZpY2VfcmVzZXQodWRjKTsKLQkJCWh3X2RldmljZV9zdGF0ZSh1ZGMtPmNpMTN4eHhfZXBbMF0ucWhbUlhdLmRtYSk7CisJCQlod19kZXZpY2Vfc3RhdGUodWRjLT5lcDBvdXQucWguZG1hKTsKIAkJfSBlbHNlIHsKIAkJCWh3X2RldmljZV9zdGF0ZSgwKTsKIAkJCWlmICh1ZGMtPnVkY19kcml2ZXItPm5vdGlmeV9ldmVudCkKQEAgLTIzOTAsNyArMjM5OCw4IEBACiAJCWludCAoKmJpbmQpKHN0cnVjdCB1c2JfZ2FkZ2V0ICopKQogewogCXN0cnVjdCBjaTEzeHh4ICp1ZGMgPSBfdWRjOwotCXVuc2lnbmVkIGxvbmcgaSwgaywgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgajsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKIAogCXRyYWNlKCIlcCIsIGRyaXZlcik7CkBAIC0yNDI3LDQ1ICsyNDM2LDQ2IEBACiAKIAlpbmZvKCJod19lcF9tYXggPSAlZCIsIGh3X2VwX21heCk7CiAKLQl1ZGMtPmRyaXZlciA9IGRyaXZlcjsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKIAogCXJldHZhbCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7Ci0JCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOworCWZvciAoaSA9IDA7IGkgPCBod19lcF9tYXgvMjsgaSsrKSB7CisJCWZvciAoaiA9IFJYOyBqIDw9IFRYOyBqKyspIHsKKwkJCWludCBrID0gaSArIGogKiBod19lcF9tYXgvMjsKKwkJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2tdOwogCi0JCXNjbnByaW50ZihtRXAtPm5hbWUsIHNpemVvZihtRXAtPm5hbWUpLCAiZXAlaSIsIChpbnQpaSk7CisJCQlzY25wcmludGYobUVwLT5uYW1lLCBzaXplb2YobUVwLT5uYW1lKSwgImVwJWklcyIsIGksCisJCQkJCShqID09IFRYKSAgPyAiaW4iIDogIm91dCIpOwogCi0JCW1FcC0+bG9jayAgICAgICAgID0gdWRjLT5sb2NrOwotCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7Ci0JCW1FcC0+dGRfcG9vbCAgICAgID0gdWRjLT50ZF9wb29sOworCQkJbUVwLT5sb2NrICAgICAgICAgPSB1ZGMtPmxvY2s7CisJCQltRXAtPmRldmljZSAgICAgICA9ICZ1ZGMtPmdhZGdldC5kZXY7CisJCQltRXAtPnRkX3Bvb2wgICAgICA9IHVkYy0+dGRfcG9vbDsKIAotCQltRXAtPmVwLm5hbWUgICAgICA9IG1FcC0+bmFtZTsKLQkJbUVwLT5lcC5vcHMgICAgICAgPSAmdXNiX2VwX29wczsKLQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOworCQkJbUVwLT5lcC5uYW1lICAgICAgPSBtRXAtPm5hbWU7CisJCQltRXAtPmVwLm9wcyAgICAgICA9ICZ1c2JfZXBfb3BzOworCQkJbUVwLT5lcC5tYXhwYWNrZXQgPSBDVFJMX1BBWUxPQURfTUFYOwogCi0JCS8qIHRoaXMgYWxsb2NhdGlvbiBjYW5ub3QgYmUgcmFuZG9tICovCi0JCWZvciAoayA9IFJYOyBrIDw9IFRYOyBrKyspIHsKLQkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoW2tdLnF1ZXVlKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZtRXAtPnFoLnF1ZXVlKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JCQltRXAtPnFoW2tdLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwKLQkJCQkJCQlHRlBfS0VSTkVMLAotCQkJCQkJCSZtRXAtPnFoW2tdLmRtYSk7CisJCQltRXAtPnFoLnB0ciA9IGRtYV9wb29sX2FsbG9jKHVkYy0+cWhfcG9vbCwgR0ZQX0tFUk5FTCwKKwkJCQkJJm1FcC0+cWguZG1hKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKHVkYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKG1FcC0+cWhba10ucHRyID09IE5VTEwpCisJCQlpZiAobUVwLT5xaC5wdHIgPT0gTlVMTCkKIAkJCQlyZXR2YWwgPSAtRU5PTUVNOwogCQkJZWxzZQotCQkJCW1lbXNldChtRXAtPnFoW2tdLnB0ciwgMCwKLQkJCQkgICAgICAgc2l6ZW9mKCptRXAtPnFoW2tdLnB0cikpOwotCQl9Ci0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSAmbUVwLT5lcDsKLQkJZWxzZQorCQkJCW1lbXNldChtRXAtPnFoLnB0ciwgMCwgc2l6ZW9mKCptRXAtPnFoLnB0cikpOworCisJCQkvKiBza2lwIGVwMCBvdXQgYW5kIGluIGVuZHBvaW50cyAqLworCQkJaWYgKGkgPT0gMCkKKwkJCQljb250aW51ZTsKKwogCQkJbGlzdF9hZGRfdGFpbCgmbUVwLT5lcC5lcF9saXN0LCAmdWRjLT5nYWRnZXQuZXBfbGlzdCk7CisJCX0KIAl9CiAJaWYgKHJldHZhbCkKIAkJZ290byBkb25lOwogCisJdWRjLT5nYWRnZXQuZXAwID0gJnVkYy0+ZXAwaW4uZXA7CiAJLyogYmluZCBnYWRnZXQgKi8KIAlkcml2ZXItPmRyaXZlci5idXMgICAgID0gTlVMTDsKIAl1ZGMtPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwpAQCAtMjQ3OSw2ICsyNDg5LDcgQEAKIAkJZ290byBkb25lOwogCX0KIAorCXVkYy0+ZHJpdmVyID0gZHJpdmVyOwogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAJaWYgKHVkYy0+dWRjX2RyaXZlci0+ZmxhZ3MgJiBDSTEzWFhYX1BVTExVUF9PTl9WQlVTKSB7CiAJCWlmICh1ZGMtPnZidXNfYWN0aXZlKSB7CkBAIC0yNDkwLDE0ICsyNTAxLDEyIEBACiAJCX0KIAl9CiAKLQlyZXR2YWwgPSBod19kZXZpY2Vfc3RhdGUodWRjLT5jaTEzeHh4X2VwWzBdLnFoW1JYXS5kbWEpOworCXJldHZhbCA9IGh3X2RldmljZV9zdGF0ZSh1ZGMtPmVwMG91dC5xaC5kbWEpOwogCWlmIChyZXR2YWwpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnVkYy0+Z2FkZ2V0LmRldik7CiAKICBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWRjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHJldHZhbCkKLQkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihkcml2ZXIpOwogCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHVzYl9nYWRnZXRfcHJvYmVfZHJpdmVyKTsKQEAgLTI1MTAsNyArMjUxOSw3IEBACiBpbnQgdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgKmRyaXZlcikKIHsKIAlzdHJ1Y3QgY2kxM3h4eCAqdWRjID0gX3VkYzsKLQl1bnNpZ25lZCBsb25nIGksIGssIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgaSwgZmxhZ3M7CiAKIAl0cmFjZSgiJXAiLCBkcml2ZXIpOwogCkBAIC0yNTQ2LDE3ICsyNTU1LDE0IEBACiAJZm9yIChpID0gMDsgaSA8IGh3X2VwX21heDsgaSsrKSB7CiAJCXN0cnVjdCBjaTEzeHh4X2VwICptRXAgPSAmdWRjLT5jaTEzeHh4X2VwW2ldOwogCi0JCWlmIChpID09IDApCi0JCQl1ZGMtPmdhZGdldC5lcDAgPSBOVUxMOwotCQllbHNlIGlmICghbGlzdF9lbXB0eSgmbUVwLT5lcC5lcF9saXN0KSkKKwkJaWYgKCFsaXN0X2VtcHR5KCZtRXAtPmVwLmVwX2xpc3QpKQogCQkJbGlzdF9kZWxfaW5pdCgmbUVwLT5lcC5lcF9saXN0KTsKIAotCQlmb3IgKGsgPSBSWDsgayA8PSBUWDsgaysrKQotCQkJaWYgKG1FcC0+cWhba10ucHRyICE9IE5VTEwpCi0JCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsCi0JCQkJCSAgICAgIG1FcC0+cWhba10ucHRyLCBtRXAtPnFoW2tdLmRtYSk7CisJCWlmIChtRXAtPnFoLnB0ciAhPSBOVUxMKQorCQkJZG1hX3Bvb2xfZnJlZSh1ZGMtPnFoX3Bvb2wsIG1FcC0+cWgucHRyLCBtRXAtPnFoLmRtYSk7CiAJfQogCisJdWRjLT5nYWRnZXQuZXAwID0gTlVMTDsKIAl1ZGMtPmRyaXZlciA9IE5VTEw7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVkYy0+bG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NpMTN4eHhfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAppbmRleCBmNjFmZWQwLi5hMjQ5MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY2kxM3h4eF91ZGMuaApAQCAtMjAsNyArMjAsNyBAQAogICogREVGSU5FCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIENJMTNYWFhfUEFHRV9TSVpFICA0MDk2dWwgLyogcGFnZSBzaXplIGZvciBURCdzICovCi0jZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMTYpCisjZGVmaW5lIEVORFBUX01BWCAgICAgICAgICAoMzIpCiAjZGVmaW5lIENUUkxfUEFZTE9BRF9NQVggICAoNjQpCiAjZGVmaW5lIFJYICAgICAgICAoMCkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9PVVQgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCiAjZGVmaW5lIFRYICAgICAgICAoMSkgIC8qIHNpbWlsYXIgdG8gVVNCX0RJUl9JTiAgYnV0IGNhbiBiZSB1c2VkIGFzIGFuIGluZGV4ICovCkBAIC04OCw4ICs4OCw3IEBACiAJCXN0cnVjdCBsaXN0X2hlYWQgICBxdWV1ZTsKIAkJc3RydWN0IGNpMTN4eHhfcWggKnB0cjsKIAkJZG1hX2FkZHJfdCAgICAgICAgIGRtYTsKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxaFsyXTsKLQlzdHJ1Y3QgdXNiX3JlcXVlc3QgICAgICAgICAgICAgICAgICAgICpzdGF0dXM7CisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWg7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VkZ2U7CiAKIAkvKiBnbG9iYWwgcmVzb3VyY2VzICovCkBAIC0xMTksOSArMTE4LDEzIEBACiAKIAlzdHJ1Y3QgZG1hX3Bvb2wgICAgICAgICAgICpxaF9wb29sOyAgIC8qIERNQSBwb29sIGZvciBxdWV1ZSBoZWFkcyAqLwogCXN0cnVjdCBkbWFfcG9vbCAgICAgICAgICAgKnRkX3Bvb2w7ICAgLyogRE1BIHBvb2wgZm9yIHRyYW5zZmVyIGRlc2NzICovCisJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgICAqc3RhdHVzOyAgICAvKiBlcDAgc3RhdHVzIHJlcXVlc3QgKi8KIAogCXN0cnVjdCB1c2JfZ2FkZ2V0ICAgICAgICAgIGdhZGdldDsgICAgIC8qIFVTQiBzbGF2ZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgY2kxM3h4eF9lcCAgICAgICAgICBjaTEzeHh4X2VwW0VORFBUX01BWF07IC8qIGV4dGVuZGVkIGVuZHB0cyAqLworCXUzMiAgICAgICAgICAgICAgICAgICAgICAgIGVwMF9kaXI7ICAgIC8qIGVwMCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgZXAwb3V0IGNpMTN4eHhfZXBbMF0KKyNkZWZpbmUgZXAwaW4gIGNpMTN4eHhfZXBbMTZdCiAKIAlzdHJ1Y3QgdXNiX2dhZGdldF9kcml2ZXIgICpkcml2ZXI7ICAgICAvKiAzcmQgcGFydHkgZ2FkZ2V0IGRyaXZlciAqLwogCXN0cnVjdCBjaTEzeHh4X3VkY19kcml2ZXIgKnVkY19kcml2ZXI7IC8qIGRldmljZSBjb250cm9sbGVyIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2NvbXBvc2l0ZS5jCmluZGV4IGY2ZmY4NDUuLjFiYTRiZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9jb21wb3NpdGUuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvY29tcG9zaXRlLmMKQEAgLTkyOCw4ICs5MjgsOSBAQAogCQkgKi8KIAkJc3dpdGNoIChjdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfUkVDSVBfTUFTSykgewogCQljYXNlIFVTQl9SRUNJUF9JTlRFUkZBQ0U6Ci0JCQlpZiAoY2Rldi0+Y29uZmlnKQotCQkJCWYgPSBjZGV2LT5jb25maWctPmludGVyZmFjZVtpbnRmXTsKKwkJCWlmICghY2Rldi0+Y29uZmlnIHx8IHdfaW5kZXggPj0gTUFYX0NPTkZJR19JTlRFUkZBQ0VTKQorCQkJCWJyZWFrOworCQkJZiA9IGNkZXYtPmNvbmZpZy0+aW50ZXJmYWNlW2ludGZdOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBVU0JfUkVDSVBfRU5EUE9JTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IGI1ZGJiMjMuLjZkOGU1MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0yOTMsNiArMjkzLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3VzYi9jaDkuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ2FkZ2V0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2NvbXBvc2l0ZS5oPgogCiAjaW5jbHVkZSAiZ2FkZ2V0X2NoaXBzLmgiCiAKQEAgLTI3NjMsNyArMjc2NCw3IEBACiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDE7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KGNvbW1vbiwgMCwgc2l6ZW9mIGNvbW1vbik7CisJCW1lbXNldChjb21tb24sIDAsIHNpemVvZiAqY29tbW9uKTsKIAkJY29tbW9uLT5mcmVlX3N0b3JhZ2Vfb25fcmVsZWFzZSA9IDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9waG9uZXQuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCmluZGV4IDNjNmUxYTAuLjVlMTQ5NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3Bob25ldC5jCkBAIC0zNDYsMTQgKzM0NiwxOSBAQAogCiAJCWlmICh1bmxpa2VseSghc2tiKSkKIAkJCWJyZWFrOwotCQlza2JfYWRkX3J4X2ZyYWcoc2tiLCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzLCBwYWdlLCAwLAotCQkJCXJlcS0+YWN0dWFsKTsKKworCQlpZiAoc2tiLT5sZW4gPT0gMCkgeyAvKiBGaXJzdCBmcmFnbWVudCAqLworCQkJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX1BIT05FVCk7CisJCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCQkJLyogQ2FuJ3QgdXNlIHBza2JfcHVsbCgpIG9uIHBhZ2UgaW4gSVJRICovCisJCQltZW1jcHkoc2tiX3B1dChza2IsIDEpLCBwYWdlX2FkZHJlc3MocGFnZSksIDEpOworCQl9CisKKwkJc2tiX2FkZF9yeF9mcmFnKHNrYiwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywgcGFnZSwKKwkJCQlza2ItPmxlbiA9PSAwLCByZXEtPmFjdHVhbCk7CiAJCXBhZ2UgPSBOVUxMOwogCiAJCWlmIChyZXEtPmFjdHVhbCA8IHJlcS0+bGVuZ3RoKSB7IC8qIExhc3QgZnJhZ21lbnQgKi8KLQkJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9QSE9ORVQpOwotCQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJCXBza2JfcHVsbChza2IsIDEpOwogCQkJc2tiLT5kZXYgPSBkZXY7CiAJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3BjaF91ZGMuYwppbmRleCAwYzhkZDgxLi5iMTIwZGJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcGNoX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wY2hfdWRjLmMKQEAgLTE5OCwxMCArMTk4LDEwIEBACiAjZGVmaW5lIFBDSF9VRENfQlJMRU4JCTB4MEYJLyogQnVyc3QgbGVuZ3RoICovCiAjZGVmaW5lIFBDSF9VRENfVEhMRU4JCTB4MUYJLyogVGhyZXNob2xkIGxlbmd0aCAqLwogLyogVmFsdWUgb2YgRVAgQnVmZmVyIFNpemUgKi8KLSNkZWZpbmUgVURDX0VQMElOX0JVRkZfU0laRQk2NAotI2RlZmluZSBVRENfRVBJTl9CVUZGX1NJWkUJNTEyCi0jZGVmaW5lIFVEQ19FUDBPVVRfQlVGRl9TSVpFCTY0Ci0jZGVmaW5lIFVEQ19FUE9VVF9CVUZGX1NJWkUJNTEyCisjZGVmaW5lIFVEQ19FUDBJTl9CVUZGX1NJWkUJMTYKKyNkZWZpbmUgVURDX0VQSU5fQlVGRl9TSVpFCTI1NgorI2RlZmluZSBVRENfRVAwT1VUX0JVRkZfU0laRQkxNgorI2RlZmluZSBVRENfRVBPVVRfQlVGRl9TSVpFCTI1NgogLyogVmFsdWUgb2YgRVAgbWF4aW11bSBwYWNrZXQgc2l6ZSAqLwogI2RlZmluZSBVRENfRVAwSU5fTUFYX1BLVF9TSVpFCTY0CiAjZGVmaW5lIFVEQ19FUDBPVVRfTUFYX1BLVF9TSVpFCTY0CkBAIC0zNTEsNyArMzUxLDcgQEAKIAlzdHJ1Y3QgcGNpX3Bvb2wJCSpkYXRhX3JlcXVlc3RzOwogCXN0cnVjdCBwY2lfcG9vbAkJKnN0cF9yZXF1ZXN0czsKIAlkbWFfYWRkcl90CQkJZG1hX2FkZHI7Ci0JdW5zaWduZWQgbG9uZwkJCWVwMG91dF9idWZbNjRdOworCXZvaWQJCQkJKmVwMG91dF9idWY7CiAJc3RydWN0IHVzYl9jdHJscmVxdWVzdAkJc2V0dXBfZGF0YTsKIAl1bnNpZ25lZCBsb25nCQkJcGh5c19hZGRyOwogCXZvaWQgX19pb21lbQkJCSpiYXNlX2FkZHI7CkBAIC0zNjEsNiArMzYxLDggQEAKIAogI2RlZmluZSBQQ0hfVURDX1BDSV9CQVIJCQkxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRUcyMFRfVURDCTB4ODgwOAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JPSE0JCTB4MTBEQgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01MNzIxM19JT0hfVURDCTB4ODAxRAogCiBzdGF0aWMgY29uc3QgY2hhcgllcDBfc3RyaW5nW10gPSAiZXAwaW4iOwogc3RhdGljIERFRklORV9TUElOTE9DSyh1ZGNfc3RhbGxfc3BpbmxvY2spOwkvKiBzdGFsbCBzcGluIGxvY2sgKi8KQEAgLTEyMTksMTEgKzEyMjEsMTEgQEAKIAlkZXYgPSBlcC0+ZGV2OwogCWlmIChyZXEtPmRtYV9tYXBwZWQpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIHJlcS0+cmVxLmRtYSwKKwkJCQkJIHJlcS0+cmVxLmxlbmd0aCwgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXBjaV91bm1hcF9zaW5nbGUoZGV2LT5wZGV2LCByZXEtPnJlcS5kbWEsCi0JCQkJCSByZXEtPnJlcS5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwgcmVxLT5yZXEuZG1hLAorCQkJCQkgcmVxLT5yZXEubGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAwOwogCQlyZXEtPnJlcS5kbWEgPSBETUFfQUREUl9JTlZBTElEOwogCX0KQEAgLTE0MTQsNyArMTQxNiw2IEBACiAKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKIAl0ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwotCWVwLT50ZF9kYXRhID0gcmVxLT50ZF9kYXRhOwogCS8qIFNldCB0aGUgc3RhdHVzIGJpdHMgZm9yIGFsbCBkZXNjcmlwdG9ycyAqLwogCXdoaWxlICgxKSB7CiAJCXRkX2RhdGEtPnN0YXR1cyA9ICh0ZF9kYXRhLT5zdGF0dXMgJiB+UENIX1VEQ19CVUZGX1NUUykgfApAQCAtMTYxMywxNSArMTYxNCwxOSBAQAogCWlmICh1c2JyZXEtPmxlbmd0aCAmJgogCSAgICAoKHVzYnJlcS0+ZG1hID09IERNQV9BRERSX0lOVkFMSUQpIHx8ICF1c2JyZXEtPmRtYSkpIHsKIAkJaWYgKGVwLT5pbikKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJdXNicmVxLT5kbWEgPSBkbWFfbWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsCisJCQkJCQkgICAgIHVzYnJlcS0+YnVmLAorCQkJCQkJICAgICB1c2JyZXEtPmxlbmd0aCwKKwkJCQkJCSAgICAgRE1BX1RPX0RFVklDRSk7CiAJCWVsc2UKLQkJCXVzYnJlcS0+ZG1hID0gcGNpX21hcF9zaW5nbGUoZGV2LT5wZGV2LCB1c2JyZXEtPmJ1ZiwKLQkJCQkJdXNicmVxLT5sZW5ndGgsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQl1c2JyZXEtPmRtYSA9IGRtYV9tYXBfc2luZ2xlKCZkZXYtPnBkZXYtPmRldiwKKwkJCQkJCSAgICAgdXNicmVxLT5idWYsCisJCQkJCQkgICAgIHVzYnJlcS0+bGVuZ3RoLAorCQkJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlyZXEtPmRtYV9tYXBwZWQgPSAxOwogCX0KIAlpZiAodXNicmVxLT5sZW5ndGggPiAwKSB7Ci0JCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIGdmcCk7CisJCXJldHZhbCA9IHByZXBhcmVfZG1hKGVwLCByZXEsIEdGUF9BVE9NSUMpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBwcm9iZV9lbmQ7CiAJfQpAQCAtMTY0Niw3ICsxNjUxLDYgQEAKIAkJCXBjaF91ZGNfd2FpdF9lcF9zdGFsbChlcCk7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcCk7CiAJCQlwY2hfdWRjX2VuYWJsZV9lcF9pbnRlcnJ1cHRzKGVwLT5kZXYsICgxIDw8IGVwLT5udW0pKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfVFgpOwogCQl9CiAJfQogCS8qIE5vdyBhZGQgdGhpcyByZXF1ZXN0IHRvIHRoZSBlcCdzIHBlbmRpbmcgcmVxdWVzdHMgKi8KQEAgLTE5MjYsNiArMTkzMCw3IEBACiAJICAgIFBDSF9VRENfQlNfRE1BX0RPTkUpCiAJCXJldHVybjsKIAlwY2hfdWRjX2NsZWFyX2RtYShlcC0+ZGV2LCBETUFfRElSX1JYKTsKKwlwY2hfdWRjX2VwX3NldF9kZHB0cihlcCwgMCk7CiAJaWYgKChyZXEtPnRkX2RhdGFfbGFzdC0+c3RhdHVzICYgUENIX1VEQ19SWFRYX1NUUykgIT0KIAkgICAgUENIX1VEQ19SVFNfU1VDQykgewogCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgIkludmFsaWQgUlhUWCBzdGF0dXMgKDB4JTA4eCkgIgpAQCAtMTk2Myw3ICsxOTY4LDcgQEAKIAl1MzIJZXBzdHM7CiAJc3RydWN0IHBjaF91ZGNfZXAJKmVwOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJZXBzdHMgPSBlcC0+ZXBzdHM7CiAJZXAtPmVwc3RzID0gMDsKIApAQCAtMjAwOCw3ICsyMDEzLDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkJKmVwOwogCXN0cnVjdCBwY2hfdWRjX3JlcXVlc3QJCSpyZXEgPSBOVUxMOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bSArIDFdOworCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChlcF9udW0pXTsKIAllcHN0cyA9IGVwLT5lcHN0czsKIAllcC0+ZXBzdHMgPSAwOwogCkBAIC0yMDI1LDEwICsyMDMwLDExIEBACiAJfQogCWlmIChlcHN0cyAmIFVEQ19FUFNUU19IRSkKIAkJcmV0dXJuOwotCWlmIChlcHN0cyAmIFVEQ19FUFNUU19SU1MpCisJaWYgKGVwc3RzICYgVURDX0VQU1RTX1JTUykgewogCQlwY2hfdWRjX2VwX3NldF9zdGFsbChlcCk7CiAJCXBjaF91ZGNfZW5hYmxlX2VwX2ludGVycnVwdHMoZXAtPmRldiwKIAkJCQkJICAgICBQQ0hfVURDX0VQSU5UKGVwLT5pbiwgZXAtPm51bSkpOworCX0KIAlpZiAoZXBzdHMgJiBVRENfRVBTVFNfUkNTKSB7CiAJCWlmICghZGV2LT5wcm90X3N0YWxsKSB7CiAJCQlwY2hfdWRjX2VwX2NsZWFyX3N0YWxsKGVwKTsKQEAgLTIwNjAsOCArMjA2NiwxMCBAQAogewogCXUzMgllcHN0czsKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CisJc3RydWN0IHBjaF91ZGNfZXAJKmVwX291dDsKIAogCWVwID0gJmRldi0+ZXBbVURDX0VQMElOX0lEWF07CisJZXBfb3V0ID0gJmRldi0+ZXBbVURDX0VQME9VVF9JRFhdOwogCWVwc3RzID0gZXAtPmVwc3RzOwogCWVwLT5lcHN0cyA9IDA7CiAKQEAgLTIwNzMsOCArMjA4MSwxNiBAQAogCQlyZXR1cm47CiAJaWYgKGVwc3RzICYgVURDX0VQU1RTX0hFKQogCQlyZXR1cm47Ci0JaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpCisJaWYgKChlcHN0cyAmIFVEQ19FUFNUU19UREMpICYmICghZGV2LT5zdGFsbCkpIHsKIAkJcGNoX3VkY19jb21wbGV0ZV90cmFuc2ZlcihlcCk7CisJCXBjaF91ZGNfY2xlYXJfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCWVwX291dC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwX291dC0+dGRfZGF0YS0+c3RhdHVzICYKKwkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJUENIX1VEQ19CU19IU1RfUkRZOworCQlwY2hfdWRjX2VwX2NsZWFyX25hayhlcF9vdXQpOworCQlwY2hfdWRjX3NldF9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfcnJkeShlcF9vdXQpOworCX0KIAkvKiBPbiBJTiBpbnRlcnJ1cHQsIHByb3ZpZGUgZGF0YSBpZiB3ZSBoYXZlIGFueSAqLwogCWlmICgoZXBzdHMgJiBVRENfRVBTVFNfSU4pICYmICEoZXBzdHMgJiBVRENfRVBTVFNfVERDKSAmJgogCSAgICAgIShlcHN0cyAmIFVEQ19FUFNUU19UWEVNUFRZKSkKQEAgLTIxMDIsMTEgKzIxMTgsOSBAQAogCQlkZXYtPnN0YWxsID0gMDsKIAkJZGV2LT5lcFtVRENfRVAwSU5fSURYXS5oYWx0ZWQgPSAwOwogCQlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5oYWx0ZWQgPSAwOwotCQkvKiBJbiBkYXRhIG5vdCByZWFkeSAqLwotCQlwY2hfdWRjX2VwX3NldF9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCWRldi0+c2V0dXBfZGF0YSA9IGVwLT50ZF9zdHAtPnJlcXVlc3Q7CiAJCXBjaF91ZGNfaW5pdF9zZXR1cF9idWZmKGVwLT50ZF9zdHApOwotCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfVFgpOworCQlwY2hfdWRjX2NsZWFyX2RtYShkZXYsIERNQV9ESVJfUlgpOwogCQlwY2hfdWRjX2VwX2ZpZm9fZmx1c2goJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSwKIAkJCQkgICAgICBkZXYtPmVwW1VEQ19FUDBJTl9JRFhdLmluKTsKIAkJaWYgKChkZXYtPnNldHVwX2RhdGEuYlJlcXVlc3RUeXBlICYgVVNCX0RJUl9JTikpCkBAIC0yMTIyLDE0ICsyMTM2LDIzIEBACiAJCXNldHVwX3N1cHBvcnRlZCA9IGRldi0+ZHJpdmVyLT5zZXR1cCgmZGV2LT5nYWRnZXQsCiAJCQkJCQkgICAgICZkZXYtPnNldHVwX2RhdGEpOwogCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisKKwkJaWYgKGRldi0+c2V0dXBfZGF0YS5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOKSB7CisJCQllcC0+dGRfZGF0YS0+c3RhdHVzID0gKGVwLT50ZF9kYXRhLT5zdGF0dXMgJgorCQkJCQkJflBDSF9VRENfQlVGRl9TVFMpIHwKKwkJCQkJCVBDSF9VRENfQlNfSFNUX1JEWTsKKwkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKKwkJfQogCQkvKiBlcDAgaW4gcmV0dXJucyBkYXRhIG9uIElOIHBoYXNlICovCiAJCWlmIChzZXR1cF9zdXBwb3J0ZWQgPj0gMCAmJiBzZXR1cF9zdXBwb3J0ZWQgPAogCQkJCQkgICAgVURDX0VQMElOX01BWF9QS1RfU0laRSkgewogCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoJihkZXYtPmVwW1VEQ19FUDBJTl9JRFhdKSk7CiAJCQkvKiBHYWRnZXQgd291bGQgaGF2ZSBxdWV1ZWQgYSByZXF1ZXN0IHdoZW4KIAkJCSAqIHdlIGNhbGxlZCB0aGUgc2V0dXAgKi8KLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOwotCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJaWYgKCEoZGV2LT5zZXR1cF9kYXRhLmJSZXF1ZXN0VHlwZSAmIFVTQl9ESVJfSU4pKSB7CisJCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CisJCQkJcGNoX3VkY19lcF9jbGVhcl9uYWsoZXApOworCQkJfQogCQl9IGVsc2UgaWYgKHNldHVwX3N1cHBvcnRlZCA8IDApIHsKIAkJCS8qIGlmIHVuc3VwcG9ydGVkIHJlcXVlc3QsIHRoZW4gc3RhbGwgKi8KIAkJCXBjaF91ZGNfZXBfc2V0X3N0YWxsKCYoZGV2LT5lcFtVRENfRVAwSU5fSURYXSkpOwpAQCAtMjE0MiwyMiArMjE2NSwxMyBAQAogCQl9CiAJfSBlbHNlIGlmICgoKChzdGF0ICYgVURDX0VQU1RTX09VVF9NQVNLKSA+PiBVRENfRVBTVFNfT1VUX1NISUZUKSA9PQogCQkgICAgIFVEQ19FUFNUU19PVVRfREFUQSkgJiYgIWRldi0+c3RhbGwpIHsKLQkJaWYgKGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKLQkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJXM6IE5vIHJlcXVlc3RcbiIsIF9fZnVuY19fKTsKLQkJCWVwLT50ZF9kYXRhLT5zdGF0dXMgPSAoZXAtPnRkX2RhdGEtPnN0YXR1cyAmCi0JCQkJCSAgICAgICB+UENIX1VEQ19CVUZGX1NUUykgfAotCQkJCQkgICAgICAgUENIX1VEQ19CU19IU1RfUkRZOwotCQkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBjb250cm9sIHdyaXRlICovCi0JCQkvKiBuZXh0IGZ1bmN0aW9uIHdpbGwgcGlja3VvIGFuIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwkJcGNoX3VkY19jbGVhcl9kbWEoZGV2LCBETUFfRElSX1JYKTsKKwkJcGNoX3VkY19lcF9zZXRfZGRwdHIoZXAsIDApOworCQlpZiAoIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpIHsKIAkJCWVwLT5lcHN0cyA9IHN0YXQ7Ci0KLQkJCXBjaF91ZGNfc3ZjX2RhdGFfb3V0KGRldiwgMCk7Ci0JCQkvKiByZS1wcm9ncmFtIGRlc2MuIHBvaW50ZXIgZm9yIHBvc3NpYmxlIFpMUHMgKi8KLQkJCXBjaF91ZGNfZXBfc2V0X2RkcHRyKGVwLCBlcC0+dGRfZGF0YV9waHlzKTsKLQkJCXBjaF91ZGNfc2V0X2RtYShkZXYsIERNQV9ESVJfUlgpOworCQkJcGNoX3VkY19zdmNfZGF0YV9vdXQoZGV2LCBQQ0hfVURDX0VQMCk7CiAJCX0KKwkJcGNoX3VkY19zZXRfZG1hKGRldiwgRE1BX0RJUl9SWCk7CiAJfQogCXBjaF91ZGNfZXBfc2V0X3JyZHkoZXApOwogfQpAQCAtMjE3NCw3ICsyMTg4LDcgQEAKIAlzdHJ1Y3QgcGNoX3VkY19lcAkqZXA7CiAJc3RydWN0IHBjaF91ZGNfcmVxdWVzdCAqcmVxOwogCi0JZXAgPSAmZGV2LT5lcFsyKmVwX251bV07CisJZXAgPSAmZGV2LT5lcFtVRENfRVBJTl9JRFgoZXBfbnVtKV07CiAJaWYgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBwY2hfdWRjX3JlcXVlc3QsIHF1ZXVlKTsKIAkJcGNoX3VkY19lbmFibGVfZXBfaW50ZXJydXB0cyhlcC0+ZGV2LApAQCAtMjE5NiwxMyArMjIxMCwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBQQ0hfVURDX1VTRURfRVBfTlVNOyBpKyspIHsKIAkJLyogSU4gKi8KIAkJaWYgKGVwX2ludHIgJiAoMHgxIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaV07CisJCQllcCA9ICZkZXYtPmVwW1VEQ19FUElOX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CiAJCS8qIE9VVCAqLwogCQlpZiAoZXBfaW50ciAmICgweDEwMDAwIDw8IGkpKSB7Ci0JCQllcCA9ICZkZXYtPmVwWzIqaSsxXTsKKwkJCWVwID0gJmRldi0+ZXBbVURDX0VQT1VUX0lEWChpKV07CiAJCQllcC0+ZXBzdHMgPSBwY2hfdWRjX3JlYWRfZXBfc3RhdHVzKGVwKTsKIAkJCXBjaF91ZGNfY2xlYXJfZXBfc3RhdHVzKGVwLCBlcC0+ZXBzdHMpOwogCQl9CkBAIC0yNTYzLDkgKzI1NzcsNiBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0uZXAubWF4cGFja2V0ID0gVURDX0VQMElOX01BWF9QS1RfU0laRTsKIAlkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5tYXhwYWNrZXQgPSBVRENfRVAwT1VUX01BWF9QS1RfU0laRTsKIAotCWRldi0+ZG1hX2FkZHIgPSBwY2lfbWFwX3NpbmdsZShkZXYtPnBkZXYsIGRldi0+ZXAwb3V0X2J1ZiwgMjU2LAotCQkJCSAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQogCS8qIHJlbW92ZSBlcDAgaW4gYW5kIG91dCBmcm9tIHRoZSBsaXN0LiAgVGhleSBoYXZlIG93biBwb2ludGVyICovCiAJbGlzdF9kZWxfaW5pdCgmZGV2LT5lcFtVRENfRVAwSU5fSURYXS5lcC5lcF9saXN0KTsKIAlsaXN0X2RlbF9pbml0KCZkZXYtPmVwW1VEQ19FUDBPVVRfSURYXS5lcC5lcF9saXN0KTsKQEAgLTI2MzcsNiArMjY0OCwxMyBAQAogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfc3RwX3BoeXMgPSAwOwogCWRldi0+ZXBbVURDX0VQMElOX0lEWF0udGRfZGF0YSA9IE5VTEw7CiAJZGV2LT5lcFtVRENfRVAwSU5fSURYXS50ZF9kYXRhX3BoeXMgPSAwOworCisJZGV2LT5lcDBvdXRfYnVmID0ga3phbGxvYyhVRENfRVAwT1VUX0JVRkZfU0laRSAqIDQsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5lcDBvdXRfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkZXYtPmRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoJmRldi0+cGRldi0+ZGV2LCBkZXYtPmVwMG91dF9idWYsCisJCQkJICAgICAgIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwKKwkJCQkgICAgICAgRE1BX0ZST01fREVWSUNFKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcwMCw3ICsyNzE4LDggQEAKIAogCXBjaF91ZGNfZGlzYWJsZV9pbnRlcnJ1cHRzKGRldiwgVURDX0RFVklOVF9NU0spOwogCi0JLyogQXNzdWVzIHRoYXQgdGhlcmUgYXJlIG5vIHBlbmRpbmcgcmVxdWV0cyB3aXRoIHRoaXMgZHJpdmVyICovCisJLyogQXNzdXJlcyB0aGF0IHRoZXJlIGFyZSBubyBwZW5kaW5nIHJlcXVlc3RzIHdpdGggdGhpcyBkcml2ZXIgKi8KKwlkcml2ZXItPmRpc2Nvbm5lY3QoJmRldi0+Z2FkZ2V0KTsKIAlkcml2ZXItPnVuYmluZCgmZGV2LT5nYWRnZXQpOwogCWRldi0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOwogCWRldi0+ZHJpdmVyID0gTlVMTDsKQEAgLTI3NTAsNiArMjc2OSwxMSBAQAogCQlwY2lfcG9vbF9kZXN0cm95KGRldi0+c3RwX3JlcXVlc3RzKTsKIAl9CiAKKwlpZiAoZGV2LT5kbWFfYWRkcikKKwkJZG1hX3VubWFwX3NpbmdsZSgmZGV2LT5wZGV2LT5kZXYsIGRldi0+ZG1hX2FkZHIsCisJCQkJIFVEQ19FUDBPVVRfQlVGRl9TSVpFICogNCwgRE1BX0ZST01fREVWSUNFKTsKKwlrZnJlZShkZXYtPmVwMG91dF9idWYpOworCiAJcGNoX3VkY19leGl0KGRldik7CiAKIAlpZiAoZGV2LT5pcnFfcmVnaXN0ZXJlZCkKQEAgLTI3OTIsMTEgKzI4MTYsNyBAQAogCWludCByZXQ7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7Ci0JcmV0ID0gcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlczogcGNpX3Jlc3RvcmVfc3RhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCXJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZFxuIiwgX19mdW5jX18pOwpAQCAtMjkxNCw2ICsyOTM0LDExIEBACiAJCS5jbGFzcyA9IChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUsCiAJCS5jbGFzc19tYXNrID0gMHhmZmZmZmZmZiwKIAl9LAorCXsKKwkJUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JPSE0sIFBDSV9ERVZJQ0VfSURfTUw3MjEzX0lPSF9VREMpLAorCQkuY2xhc3MgPSAoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlLAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZmZmZmYsCisJfSwKIAl7IDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCmluZGV4IDJmYzg2MzYuLjEyZmY2Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYwpAQCAtMTMxLDMxICsxMzEsMzEgQEAKICAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgogICovCiAKLXN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBpZFZlbmRvcjsKK3N0YXRpYyB1c2hvcnQgaWRWZW5kb3I7CiBtb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgaWRQcm9kdWN0Oworc3RhdGljIHVzaG9ydCBpZFByb2R1Y3Q7CiBtb2R1bGVfcGFyYW0oaWRQcm9kdWN0LCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhpZFByb2R1Y3QsICJVU0IgUHJvZHVjdCBJRCIpOwogCi1zdGF0aWMgdXNob3J0IF9faW5pdGRhdGEgYmNkRGV2aWNlOworc3RhdGljIHVzaG9ydCBiY2REZXZpY2U7CiBtb2R1bGVfcGFyYW0oYmNkRGV2aWNlLCB1c2hvcnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhiY2REZXZpY2UsICJVU0IgRGV2aWNlIHZlcnNpb24gKEJDRCkiKTsKIAotc3RhdGljIGNoYXIgKl9faW5pdGRhdGEgaU1hbnVmYWN0dXJlcjsKK3N0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOwogbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQcm9kdWN0Oworc3RhdGljIGNoYXIgKmlQcm9kdWN0OwogbW9kdWxlX3BhcmFtKGlQcm9kdWN0LCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQcm9kdWN0LCAiVVNCIFByb2R1Y3Qgc3RyaW5nIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlTZXJpYWxOdW07CitzdGF0aWMgY2hhciAqaVNlcmlhbE51bTsKIG1vZHVsZV9wYXJhbShpU2VyaWFsTnVtLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlTZXJpYWxOdW0sICIxIik7CiAKLXN0YXRpYyBjaGFyICpfX2luaXRkYXRhIGlQTlBzdHJpbmc7CitzdGF0aWMgY2hhciAqaVBOUHN0cmluZzsKIG1vZHVsZV9wYXJhbShpUE5Qc3RyaW5nLCBjaGFycCwgU19JUlVHTyk7CiBNT0RVTEVfUEFSTV9ERVNDKGlQTlBzdHJpbmcsICJNRkc6bGludXg7TURMOmdfcHJpbnRlcjtDTFM6UFJJTlRFUjtTTjoxOyIpOwogCkBAIC0xNTk2LDEzICsxNTk2LDEyIEBACiAJaW50IHN0YXR1czsKIAogCW11dGV4X2xvY2soJnVzYl9wcmludGVyX2dhZGdldC5sb2NrX3ByaW50ZXJfaW8pOwotCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7Ci0JdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGdfcHJpbnRlcl9kZXZubywgMik7Ci0KIAlzdGF0dXMgPSB1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZwcmludGVyX2RyaXZlcik7CiAJaWYgKHN0YXR1cykKIAkJRVJST1IoZGV2LCAidXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlciAleFxuIiwgc3RhdHVzKTsKIAorCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihnX3ByaW50ZXJfZGV2bm8sIDIpOworCWNsYXNzX2Rlc3Ryb3kodXNiX2dhZGdldF9jbGFzcyk7CiAJbXV0ZXhfdW5sb2NrKCZ1c2JfcHJpbnRlcl9nYWRnZXQubG9ja19wcmludGVyX2lvKTsKIH0KIG1vZHVsZV9leGl0KGNsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3I4YTY2NTk3LXVkYy5jCmluZGV4IDIwZDQzZGEuLjAxNTExODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9yOGE2NjU5Ny11ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcjhhNjY1OTctdWRjLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogCQlicmVhazsKIAljYXNlIFI4QTY2NTk3X0JVTEs6CiAJCS8qIGlzb2Nocm9ub3VzIHBpcGVzIG1heSBiZSB1c2VkIGFzIGJ1bGsgcGlwZXMgKi8KLQkJaWYgKGluZm8tPnBpcGUgPiBSOEE2NjU5N19CQVNFX1BJUEVOVU1fQlVMSykKKwkJaWYgKGluZm8tPnBpcGUgPj0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEspCiAJCQlidWZudW0gPSBpbmZvLT5waXBlIC0gUjhBNjY1OTdfQkFTRV9QSVBFTlVNX0JVTEs7CiAJCWVsc2UKIAkJCWJ1Zm51bSA9IGluZm8tPnBpcGUgLSBSOEE2NjU5N19CQVNFX1BJUEVOVU1fSVNPQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCAyNDA0NmMwLi4wZTZhZmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC0xNTEsNiArMTUxLDggQEAKIAkgIFF1YWxjb21tIGNoaXBzZXRzLiBSb290IEh1YiBoYXMgaW5idWlsdCBUVC4KIAkgIFRoaXMgZHJpdmVyIGRlcGVuZHMgb24gT1RHIGRyaXZlciBmb3IgUEhZIGluaXRpYWxpemF0aW9uLAogCSAgY2xvY2sgbWFuYWdlbWVudCwgcG93ZXJpbmcgdXAgVkJVUywgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCisJICBUaGlzIGRyaXZlciBpcyBub3Qgc3VwcG9ydGVkIG9uIGJvYXJkcyBsaWtlIHRyb3V0IHdoaWNoCisJICBoYXMgYW4gZXh0ZXJuYWwgUEhZLgogCiBjb25maWcgVVNCX0VIQ0lfSENEX1BQQ19PRgogCWJvb2wgIkVIQ0kgc3VwcG9ydCBmb3IgUFBDIFVTQiBjb250cm9sbGVyIG9uIE9GIHBsYXRmb3JtIGJ1cyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwppbmRleCAyYmFmOGE4Li5hODY5ZTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCkBAIC0yMjcsOCArMjI3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfcHJlcGFyZV9wb3J0c19mb3JfY29udHJvbGxlcl9zdXNwZW5kKGVoY2ksIGRldmljZV9tYXlfd2FrZXVwKGRldikpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJZWhjaV93cml0ZWwoZWhjaSwgMCwgJmVoY2ktPnJlZ3MtPmludHJfZW5hYmxlKTsKIAkodm9pZCllaGNpX3JlYWRsKGVoY2ksICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCA4NmU0Mjg5Li41Yzc2MWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC01Miw3ICs1Miw2IEBACiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycTsKIAlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGludCB0ZW1wOwogCiAJcHJfZGVidWcoImluaXRpYWxpemluZyBGU0wtU09DIFVTQiBDb250cm9sbGVyXG4iKTsKIApAQCAtMTI2LDE4ICsxMjUsNiBAQAogCQlnb3RvIGVycjM7CiAJfQogCi0JLyoKLQkgKiBDaGVjayBpZiBpdCBpcyBNUEM1MTIxIFNvQywgb3RoZXJ3aXNlIHNldCBwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzCi0JICogZmxhZyBmb3IgODN4eCBvciA4NTM2IHN5c3RlbSBpbnRlcmZhY2UgcmVnaXN0ZXJzLgotCSAqLwotCWlmIChwZGF0YS0+YmlnX2VuZGlhbl9tbWlvKQotCQl0ZW1wID0gaW5fYmUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0JZWxzZQotCQl0ZW1wID0gaW5fbGUzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9JRCk7Ci0KLQlpZiAoKHRlbXAgJiBJRF9NU0spICE9ICh+KCh0ZW1wICYgTklEX01TSykgPj4gOCkgJiBJRF9NU0spKQotCQlwZGF0YS0+aGF2ZV9zeXNpZl9yZWdzID0gMTsKLQogCS8qIEVuYWJsZSBVU0IgY29udHJvbGxlciwgODN4eCBvciA4NTM2ICovCiAJaWYgKHBkYXRhLT5oYXZlX3N5c2lmX3JlZ3MpCiAJCXNldGJpdHMzMihoY2QtPnJlZ3MgKyBGU0xfU09DX1VTQl9DVFJMLCAweDQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5oCmluZGV4IDJjODM1MzcuLjNmYWJlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmgKQEAgLTE5LDkgKzE5LDYgQEAKICNkZWZpbmUgX0VIQ0lfRlNMX0gKIAogLyogb2Zmc2V0cyBmb3IgdGhlIG5vbi1laGNpIHJlZ2lzdGVycyBpbiB0aGUgRlNMIFNPQyBVU0IgY29udHJvbGxlciAqLwotI2RlZmluZSBGU0xfU09DX1VTQl9JRAkJMHgwCi0jZGVmaW5lIElEX01TSwkJCTB4M2YKLSNkZWZpbmUgTklEX01TSwkJCTB4M2YwMAogI2RlZmluZSBGU0xfU09DX1VTQl9VTFBJVlAJMHgxNzAKICNkZWZpbmUgRlNMX1NPQ19VU0JfUE9SVFNDMQkweDE4NAogI2RlZmluZSBQT1JUX1BUU19NU0sJCSgzPDwzMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCA2ZmVlM2NkLi43NGRjZjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC01NzIsNiArNTcyLDggQEAKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX2lhYV93YXRjaGRvZzsKIAllaGNpLT5pYWFfd2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwogCisJaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNTc5LDExICs1ODEsMjAgQEAKIAllaGNpLT5wZXJpb2RpY19zaXplID0gREVGQVVMVF9JX1REUFM7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9pdGRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmVoY2ktPmNhY2hlZF9zaXRkX2xpc3QpOworCisJaWYgKEhDQ19QR01fRlJBTUVMSVNUTEVOKGhjY19wYXJhbXMpKSB7CisJCS8qIHBlcmlvZGljIHNjaGVkdWxlIHNpemUgY2FuIGJlIHNtYWxsZXIgdGhhbiBkZWZhdWx0ICovCisJCXN3aXRjaCAoRUhDSV9UVU5FX0ZMUykgeworCQljYXNlIDA6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAxMDI0OyBicmVhazsKKwkJY2FzZSAxOiBlaGNpLT5wZXJpb2RpY19zaXplID0gNTEyOyBicmVhazsKKwkJY2FzZSAyOiBlaGNpLT5wZXJpb2RpY19zaXplID0gMjU2OyBicmVhazsKKwkJZGVmYXVsdDoJQlVHKCk7CisJCX0KKwl9CiAJaWYgKChyZXR2YWwgPSBlaGNpX21lbV9pbml0KGVoY2ksIEdGUF9LRVJORUwpKSA8IDApCiAJCXJldHVybiByZXR2YWw7CiAKIAkvKiBjb250cm9sbGVycyBtYXkgY2FjaGUgc29tZSBvZiB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgLi4uICovCi0JaGNjX3BhcmFtcyA9IGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOwogCWlmIChIQ0NfSVNPQ19DQUNIRShoY2NfcGFyYW1zKSkJCS8vIGZ1bGwgZnJhbWUgY2FjaGUKIAkJZWhjaS0+aV90aHJlc2ggPSAyICsgODsKIAllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZApAQCAtNjM3LDEyICs2NDgsNiBAQAogCQkvKiBwZXJpb2RpYyBzY2hlZHVsZSBzaXplIGNhbiBiZSBzbWFsbGVyIHRoYW4gZGVmYXVsdCAqLwogCQl0ZW1wICY9IH4oMyA8PCAyKTsKIAkJdGVtcCB8PSAoRUhDSV9UVU5FX0ZMUyA8PCAyKTsKLQkJc3dpdGNoIChFSENJX1RVTkVfRkxTKSB7Ci0JCWNhc2UgMDogZWhjaS0+cGVyaW9kaWNfc2l6ZSA9IDEwMjQ7IGJyZWFrOwotCQljYXNlIDE6IGVoY2ktPnBlcmlvZGljX3NpemUgPSA1MTI7IGJyZWFrOwotCQljYXNlIDI6IGVoY2ktPnBlcmlvZGljX3NpemUgPSAyNTY7IGJyZWFrOwotCQlkZWZhdWx0OglCVUcoKTsKLQkJfQogCX0KIAlpZiAoSENDX0xQTShoY2NfcGFyYW1zKSkgewogCQkvKiBzdXBwb3J0IGxpbmsgcG93ZXIgbWFuYWdlbWVudCBFSENJIDEuMSBhZGRlbmR1bSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCmluZGV4IDc5NmVhMGMuLjhhNTE1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogewogCWludAkJcG9ydDsKIAl1MzIJCXRlbXA7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKIAogCS8qIElmIHJlbW90ZSB3YWtldXAgaXMgZW5hYmxlZCBmb3IgdGhlIHJvb3QgaHViIGJ1dCBkaXNhYmxlZAogCSAqIGZvciB0aGUgY29udHJvbGxlciwgd2UgbXVzdCBhZGp1c3QgYWxsIHRoZSBwb3J0IHdha2V1cCBmbGFncwpAQCAtMTIwLDYgKzEyMSw4IEBACiAJaWYgKCFlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5yb290X2h1Yi0+ZG9fcmVtb3RlX3dha2V1cCB8fCBkb193YWtldXApCiAJCXJldHVybjsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNpLT5sb2NrLCBmbGFncyk7CisKIAkvKiBjbGVhciBwaHkgbG93LXBvd2VyIG1vZGUgYmVmb3JlIGNoYW5naW5nIHdha2V1cCBmbGFncyAqLwogCWlmIChlaGNpLT5oYXNfaG9zdHBjKSB7CiAJCXBvcnQgPSBIQ1NfTl9QT1JUUyhlaGNpLT5oY3NfcGFyYW1zKTsKQEAgLTEzMSw3ICsxMzQsOSBAQAogCQkJdGVtcCA9IGVoY2lfcmVhZGwoZWhjaSwgaG9zdHBjX3JlZyk7CiAJCQllaGNpX3dyaXRlbChlaGNpLCB0ZW1wICYgfkhPU1RQQ19QSENELCBob3N0cGNfcmVnKTsKIAkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNpLT5sb2NrLCBmbGFncyk7CiAJCW1zbGVlcCg1KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlwb3J0ID0gSENTX05fUE9SVFMoZWhjaS0+aGNzX3BhcmFtcyk7CkBAIC0xNzAsNiArMTc1LDggQEAKIAkvKiBEb2VzIHRoZSByb290IGh1YiBoYXZlIGEgcG9ydCB3YWtldXAgcGVuZGluZz8gKi8KIAlpZiAoIXN1c3BlbmRpbmcgJiYgKGVoY2lfcmVhZGwoZWhjaSwgJmVoY2ktPnJlZ3MtPnN0YXR1cykgJiBTVFNfUENEKSkKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoZWhjaV90b19oY2QoZWhjaSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjaS0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IGVoY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKaW5kZXggZmE1OWIyNi4uYzhlMzYwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYwpAQCAtMjEsMTAgKzIxLDEzIEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKICNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CiAKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCiAjZGVmaW5lIFVMUElfVklFV1BPUlRfT0ZGU0VUCTB4MTcwCiAKIHN0cnVjdCBlaGNpX214Y19wcml2IHsKQEAgLTExNCw2ICsxMTcsNyBAQAogCXN0cnVjdCB1c2JfaGNkICpoY2Q7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IGlycSwgcmV0OworCXVuc2lnbmVkIGludCBmbGFnczsKIAlzdHJ1Y3QgZWhjaV9teGNfcHJpdiAqcHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwogCXN0cnVjdCBlaGNpX2hjZCAqZWhjaTsKQEAgLTE3Nyw4ICsxODEsOCBAQAogCQljbGtfZW5hYmxlKHByaXYtPmFoYmNsayk7CiAJfQogCi0JLyogImRyIiBkZXZpY2UgaGFzIGl0cyBvd24gY2xvY2sgKi8KLQlpZiAocGRldi0+aWQgPT0gMCkgeworCS8qICJkciIgZGV2aWNlIGhhcyBpdHMgb3duIGNsb2NrIG9uIGkuTVg1MSAqLworCWlmIChjcHVfaXNfbXg1MSgpICYmIChwZGV2LT5pZCA9PSAwKSkgewogCQlwcml2LT5waHkxY2xrID0gY2xrX2dldChkZXYsICJ1c2JfcGh5MSIpOwogCQlpZiAoSVNfRVJSKHByaXYtPnBoeTFjbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKHByaXYtPnBoeTFjbGspOwpAQCAtMjQwLDYgKzI0NCwyMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2FkZDsKIAorCWlmIChwZGF0YS0+b3RnKSB7CisJCS8qCisJCSAqIGVmaWthbXggYW5kIGVmaWthc2IgaGF2ZSBzb21lIGhhcmR3YXJlIGJ1ZyB3aGljaCBpcworCQkgKiBwcmV2ZW50aW5nIHVzYiB0byB3b3JrIHVubGVzcyBDSFJHVkJVUyBpcyBzZXQuCisJCSAqIEl0J3MgaW4gdmlvbGF0aW9uIG9mIFVTQiBzcGVjcworCQkgKi8KKwkJaWYgKG1hY2hpbmVfaXNfbXg1MV9lZmlrYW14KCkgfHwgbWFjaGluZV9pc19teDUxX2VmaWthc2IoKSkgeworCQkJZmxhZ3MgPSBvdGdfaW9fcmVhZChwZGF0YS0+b3RnLCBVTFBJX09UR19DVFJMKTsKKwkJCWZsYWdzIHw9IFVMUElfT1RHX0NUUkxfQ0hSR1ZCVVM7CisJCQlyZXQgPSBvdGdfaW9fd3JpdGUocGRhdGEtPm90ZywgZmxhZ3MsIFVMUElfT1RHX0NUUkwpOworCQkJaWYgKHJldCkgeworCQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHNldCBDSFJWQlVTXG4iKTsKKwkJCQlnb3RvIGVycl9hZGQ7CisJCQl9CisJCX0KKwl9CisKIAlyZXR1cm4gMDsKIAogZXJyX2FkZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCmluZGV4IDY4MGYyZWYuLmY3ODRjZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiAJaGNkID0gdXNiX2NyZWF0ZV9oY2QoJmVoY2lfb21hcF9oY19kcml2ZXIsICZwZGV2LT5kZXYsCiAJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKCFoY2QpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBoY2Qgd2l0aCBlcnIgJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOwogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9jcmVhdGVfaGNkOwogCX0KQEAgLTg2NCw3ICs4NjQsNyBAQAogCiAJcmV0ID0gb21hcF9zdGFydF9laGMob21hcCwgaGNkKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBlaGNpXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGVoY2kgd2l0aCBlcnIgJWRcbiIsIHJldCk7CiAJCWdvdG8gZXJyX3N0YXJ0OwogCX0KIApAQCAtODc5LDcgKzg3OSw3IEBACiAKIAlyZXQgPSB1c2JfYWRkX2hjZChoY2QsIGlycSwgSVJRRl9ESVNBQkxFRCB8IElSUUZfU0hBUkVEKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgaGNkIHdpdGggZXJyICVkXG4iLCByZXQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGhjZCB3aXRoIGVyciAlZFxuIiwgcmV0KTsKIAkJZ290byBlcnJfYWRkX2hjZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCA3NjE3OWMzLi4wN2JiOTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC00NCwyOCArNDQsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBlaGNpX3F1aXJrX2FtZF9TQjgwMChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCitzdGF0aWMgaW50IGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmFtZF9zbWJ1c19kZXY7CiAJdTggcmV2ID0gMDsKIAogCWFtZF9zbWJ1c19kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FUSSwgMHg0Mzg1LCBOVUxMKTsKLQlpZiAoIWFtZF9zbWJ1c19kZXYpCi0JCXJldHVybiAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoYW1kX3NtYnVzX2RldiwgUENJX1JFVklTSU9OX0lELCAmcmV2KTsKLQlpZiAocmV2IDwgMHg0MCkgewotCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKLQkJYW1kX3NtYnVzX2RldiA9IE5VTEw7Ci0JCXJldHVybiAwOworCWlmIChhbWRfc21idXNfZGV2KSB7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF9zbWJ1c19kZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CisJCWlmIChyZXYgPCAweDQwKSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgeworCQlhbWRfc21idXNfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsIDB4NzgwYiwgTlVMTCk7CisJCWlmICghYW1kX3NtYnVzX2RldikKKwkJCXJldHVybiAwOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShhbWRfc21idXNfZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCQlpZiAocmV2IDwgMHgxMSB8fCByZXYgPiAweDE4KSB7CisJCQlwY2lfZGV2X3B1dChhbWRfc21idXNfZGV2KTsKKwkJCWFtZF9zbWJ1c19kZXYgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoIWFtZF9uYl9kZXYpCiAJCWFtZF9uYl9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FNRCwgMHgxNTEwLCBOVUxMKTsKLQlpZiAoIWFtZF9uYl9kZXYpCi0JCWVoY2lfZXJyKGVoY2ksICJRVUlSSzogdW5hYmxlIHRvIGdldCBBTUQgTkIgZGV2aWNlXG4iKTsKIAotCWVoY2lfaW5mbyhlaGNpLCAiUVVJUks6IEVuYWJsZSBBTUQgU0I4MDAgTDEgZml4XG4iKTsKKwllaGNpX2luZm8oZWhjaSwgIlFVSVJLOiBFbmFibGUgZXhjZXB0aW9uIGZvciBBTUQgSHVkc29uIEFTUE1cbiIpOwogCiAJcGNpX2Rldl9wdXQoYW1kX3NtYnVzX2Rldik7CiAJYW1kX3NtYnVzX2RldiA9IE5VTEw7CkBAIC0xMzEsNyArMTM4LDcgQEAKIAkvKiBjYWNoZSB0aGlzIHJlYWRvbmx5IGRhdGE7IG1pbmltaXplIGNoaXAgcmVhZHMgKi8KIAllaGNpLT5oY3NfcGFyYW1zID0gZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKLQlpZiAoZWhjaV9xdWlya19hbWRfU0I4MDAoZWhjaSkpCisJaWYgKGVoY2lfcXVpcmtfYW1kX2h1ZHNvbihlaGNpKSkKIAkJZWhjaS0+YW1kX2wxX2ZpeCA9IDE7CiAKIAlyZXR2YWwgPSBlaGNpX2hhbHQoZWhjaSk7CkBAIC0zNjAsOCArMzY3LDggQEAKIAkgKiBtYXJrIEhXIHVuYWNjZXNzaWJsZS4gIFRoZSBQTSBhbmQgVVNCIGNvcmVzIG1ha2Ugc3VyZSB0aGF0CiAJICogdGhlIHJvb3QgaHViIGlzIGVpdGhlciBzdXNwZW5kZWQgb3Igc3RvcHBlZC4KIAkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAllaGNpX3ByZXBhcmVfcG9ydHNfZm9yX2NvbnRyb2xsZXJfc3VzcGVuZChlaGNpLCBkb193YWtldXApOworCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCWVoY2lfd3JpdGVsKGVoY2ksIDAsICZlaGNpLT5yZWdzLT5pbnRyX2VuYWJsZSk7CiAJKHZvaWQpZWhjaV9yZWFkbChlaGNpLCAmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKaW5kZXggZThmNGYzNi4uYTZmMjFiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXhpbGlueC1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYwpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvb2YuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KIAogLyoqCiAgKiBlaGNpX3hpbGlueF9vZl9zZXR1cCAtIEluaXRpYWxpemUgdGhlIGRldmljZSBmb3IgZWhjaV9yZXNldCgpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2ZzbC1tcGgtZHItb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCmluZGV4IDU3NGI5OWUuLjc5YTY2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZnNsLW1waC1kci1vZi5jCkBAIC0yNjIsMTkgKzI2MiwyNCBAQAogCX0KIH0KIAotc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjNTEyMV9wZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBmc2xfdXNiMl9tcGM1MTIxX3BkID0gewogCS5iaWdfZW5kaWFuX2Rlc2MgPSAxLAogCS5iaWdfZW5kaWFuX21taW8gPSAxLAogCS5lcyA9IDEsCisJLmhhdmVfc3lzaWZfcmVncyA9IDAsCiAJLmxlX3NldHVwX2J1ZiA9IDEsCiAJLmluaXQgPSBmc2xfdXNiMl9tcGM1MTIxX2luaXQsCiAJLmV4aXQgPSBmc2xfdXNiMl9tcGM1MTIxX2V4aXQsCiB9OwogI2VuZGlmIC8qIENPTkZJR19QUENfTVBDNTEyeCAqLwogCitzdGF0aWMgc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgZnNsX3VzYjJfbXBjOHh4eF9wZCA9IHsKKwkuaGF2ZV9zeXNpZl9yZWdzID0gMSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF91c2IyX21waF9kcl9vZl9tYXRjaFtdID0gewotCXsgLmNvbXBhdGlibGUgPSAiZnNsLXVzYjItbXBoIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLWRyIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbC11c2IyLW1waCIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciIsIC5kYXRhID0gJmZzbF91c2IyX21wYzh4eHhfcGQsIH0sCiAjaWZkZWYgQ09ORklHX1BQQ19NUEM1MTJ4CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS11c2IyLWRyIiwgLmRhdGEgPSAmZnNsX3VzYjJfbXBjNTEyMV9wZCwgfSwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOTkwZjA2Yi4uMmU5NjAyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC04NjEsNiArODYxLDcgQEAKIAkJCURCRygiZGV2ICVkIGVwJWQgbWF4cGFja2V0ICVkXG4iLAogCQkJCXVkZXYtPmRldm51bSwgZXBudW0sIGVwLT5tYXhwYWNrZXQpOwogCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWtmcmVlKGVwKTsKIAkJCWdvdG8gZmFpbDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKaW5kZXggZmNiZjRhYi4uMDIzMTgxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYwpAQCAtMTY5LDkgKzE2OSwxMCBAQAogCX0KIH0KIAotdm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2ludHJfcmVnICppcl9zZXQsIGludCBzZXRfbnVtKQordm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzZXRfbnVtKQogewotCXZvaWQgKmFkZHI7CisJc3RydWN0IHhoY2lfaW50cl9yZWcgX19pb21lbSAqaXJfc2V0ID0gJnhoY2ktPnJ1bl9yZWdzLT5pcl9zZXRbc2V0X251bV07CisJdm9pZCBfX2lvbWVtICphZGRyOwogCXUzMiB0ZW1wOwogCXU2NCB0ZW1wXzY0OwogCkBAIC00NDksNyArNDUwLDcgQEAKIAl9CiB9CiAKLXZvaWQgeGhjaV9kYmdfc2xvdF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgpCitzdGF0aWMgdm9pZCB4aGNpX2RiZ19zbG90X2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCkKIHsKIAkvKiBGaWVsZHMgYXJlIDMyIGJpdHMgd2lkZSwgRE1BIGFkZHJlc3NlcyBhcmUgaW4gYnl0ZXMgKi8KIAlpbnQgZmllbGRfc2l6ZSA9IDMyIC8gODsKQEAgLTQ4OCw3ICs0ODksNyBAQAogCQlkYmdfcnN2ZDY0KHhoY2ksICh1NjQgKilzbG90X2N0eCwgZG1hKTsKIH0KIAotdm9pZCB4aGNpX2RiZ19lcF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9kYmdfZXBfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJICAgICBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgsCiAJCSAgICAgdW5zaWduZWQgaW50IGxhc3RfZXApCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKaW5kZXggMWQwZjQ1Zi4uYTk1MzQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAKIC8qKioqKioqKioqKioqKioqKiBTdHJlYW1zIHN0cnVjdHVyZXMgbWFuaXB1bGF0aW9uICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQgeGhjaV9mcmVlX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorc3RhdGljIHZvaWQgeGhjaV9mcmVlX3N0cmVhbV9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQl1bnNpZ25lZCBpbnQgbnVtX3N0cmVhbV9jdHhzLAogCQlzdHJ1Y3QgeGhjaV9zdHJlYW1fY3R4ICpzdHJlYW1fY3R4LCBkbWFfYWRkcl90IGRtYSkKIHsKQEAgLTMzNSw3ICszMzUsNyBAQAogICogVGhlIHN0cmVhbSBjb250ZXh0IGFycmF5IG11c3QgYmUgYSBwb3dlciBvZiAyLCBhbmQgY2FuIGJlIGFzIHNtYWxsIGFzCiAgKiA2NCBieXRlcyBvciBhcyBsYXJnZSBhcyAxTUIuCiAgKi8KLXN0cnVjdCB4aGNpX3N0cmVhbV9jdHggKnhoY2lfYWxsb2Nfc3RyZWFtX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCitzdGF0aWMgc3RydWN0IHhoY2lfc3RyZWFtX2N0eCAqeGhjaV9hbGxvY19zdHJlYW1fY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJdW5zaWduZWQgaW50IG51bV9zdHJlYW1fY3R4cywgZG1hX2FkZHJfdCAqZG1hLAogCQlnZnBfdCBtZW1fZmxhZ3MpCiB7CkBAIC0xOTAwLDExICsxOTAwLDExIEBACiAJdmFsICY9IERCT0ZGX01BU0s7CiAJeGhjaV9kYmcoeGhjaSwgIi8vIERvb3JiZWxsIGFycmF5IGlzIGxvY2F0ZWQgYXQgb2Zmc2V0IDB4JXgiCiAJCQkiIGZyb20gY2FwIHJlZ3MgYmFzZSBhZGRyXG4iLCB2YWwpOwotCXhoY2ktPmRiYSA9ICh2b2lkICopIHhoY2ktPmNhcF9yZWdzICsgdmFsOworCXhoY2ktPmRiYSA9ICh2b2lkIF9faW9tZW0gKikgeGhjaS0+Y2FwX3JlZ3MgKyB2YWw7CiAJeGhjaV9kYmdfcmVncyh4aGNpKTsKIAl4aGNpX3ByaW50X3J1bl9yZWdzKHhoY2kpOwogCS8qIFNldCBpcl9zZXQgdG8gaW50ZXJydXB0IHJlZ2lzdGVyIHNldCAwICovCi0JeGhjaS0+aXJfc2V0ID0gKHZvaWQgKikgeGhjaS0+cnVuX3JlZ3MtPmlyX3NldDsKKwl4aGNpLT5pcl9zZXQgPSAmeGhjaS0+cnVuX3JlZ3MtPmlyX3NldFswXTsKIAogCS8qCiAJICogRXZlbnQgcmluZyBzZXR1cDogQWxsb2NhdGUgYSBub3JtYWwgcmluZywgYnV0IGFsc28gc2V0dXAKQEAgLTE5NjEsNyArMTk2MSw3IEBACiAJLyogU2V0IHRoZSBldmVudCByaW5nIGRlcXVldWUgYWRkcmVzcyAqLwogCXhoY2lfc2V0X2hjX2V2ZW50X2RlcSh4aGNpKTsKIAl4aGNpX2RiZyh4aGNpLCAiV3JvdGUgRVJTVCBhZGRyZXNzIHRvIGlyX3NldCAwLlxuIik7Ci0JeGhjaV9wcmludF9pcl9zZXQoeGhjaSwgeGhjaS0+aXJfc2V0LCAwKTsKKwl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCAwKTsKIAogCS8qCiAJICogWFhYOiBNaWdodCBuZWVkIHRvIHNldCB0aGUgSW50ZXJydXB0ZXIgTW9kZXJhdGlvbiBSZWdpc3RlciB0bwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggZGY1NThmNi4uMzI4OWJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC0zMDgsMTEgKzMwOCw4IEBACiAvKiBSaW5nIHRoZSBob3N0IGNvbnRyb2xsZXIgZG9vcmJlbGwgYWZ0ZXIgcGxhY2luZyBhIGNvbW1hbmQgb24gdGhlIHJpbmcgKi8KIHZvaWQgeGhjaV9yaW5nX2NtZF9kYihzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCiB7Ci0JdTMyIHRlbXA7Ci0KIAl4aGNpX2RiZyh4aGNpLCAiLy8gRGluZyBkb25nIVxuIik7Ci0JdGVtcCA9IHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPmRiYS0+ZG9vcmJlbGxbMF0pICYgREJfTUFTSzsKLQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wIHwgREJfVEFSR0VUX0hPU1QsICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKKwl4aGNpX3dyaXRlbCh4aGNpLCBEQl9WQUxVRV9IT1NULCAmeGhjaS0+ZGJhLT5kb29yYmVsbFswXSk7CiAJLyogRmx1c2ggUENJIHBvc3RlZCB3cml0ZXMgKi8KIAl4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5kYmEtPmRvb3JiZWxsWzBdKTsKIH0KQEAgLTMyMiwyNiArMzE5LDI0IEBACiAJCXVuc2lnbmVkIGludCBlcF9pbmRleCwKIAkJdW5zaWduZWQgaW50IHN0cmVhbV9pZCkKIHsKLQlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcDsKLQl1bnNpZ25lZCBpbnQgZXBfc3RhdGU7Ci0JdTMyIGZpZWxkOwogCV9fdTMyIF9faW9tZW0gKmRiX2FkZHIgPSAmeGhjaS0+ZGJhLT5kb29yYmVsbFtzbG90X2lkXTsKKwlzdHJ1Y3QgeGhjaV92aXJ0X2VwICplcCA9ICZ4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdOworCXVuc2lnbmVkIGludCBlcF9zdGF0ZSA9IGVwLT5lcF9zdGF0ZTsKIAotCWVwID0gJnhoY2ktPmRldnNbc2xvdF9pZF0tPmVwc1tlcF9pbmRleF07Ci0JZXBfc3RhdGUgPSBlcC0+ZXBfc3RhdGU7CiAJLyogRG9uJ3QgcmluZyB0aGUgZG9vcmJlbGwgZm9yIHRoaXMgZW5kcG9pbnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcKLQkgKiBjYW5jZWxsYXRpb25zIGJlY2F1c2UgdGhlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCisJICogY2FuY2VsbGF0aW9ucyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gaW50ZXJydXB0IHByb2Nlc3NpbmcuCiAJICogV2UgZG9uJ3Qgd2FudCB0byByZXN0YXJ0IGFueSBzdHJlYW0gcmluZ3MgaWYgdGhlcmUncyBhIHNldCBkZXF1ZXVlCiAJICogcG9pbnRlciBjb21tYW5kIHBlbmRpbmcgYmVjYXVzZSB0aGUgZGV2aWNlIGNhbiBjaG9vc2UgdG8gc3RhcnQgYW55CiAJICogc3RyZWFtIG9uY2UgdGhlIGVuZHBvaW50IGlzIG9uIHRoZSBIVyBzY2hlZHVsZS4KIAkgKiBGSVhNRSAtIGNoZWNrIGFsbCB0aGUgc3RyZWFtIHJpbmdzIGZvciBwZW5kaW5nIGNhbmNlbGxhdGlvbnMuCiAJICovCi0JaWYgKCEoZXBfc3RhdGUgJiBFUF9IQUxUX1BFTkRJTkcpICYmICEoZXBfc3RhdGUgJiBTRVRfREVRX1BFTkRJTkcpCi0JCQkmJiAhKGVwX3N0YXRlICYgRVBfSEFMVEVEKSkgewotCQlmaWVsZCA9IHhoY2lfcmVhZGwoeGhjaSwgZGJfYWRkcikgJiBEQl9NQVNLOwotCQlmaWVsZCB8PSBFUElfVE9fREIoZXBfaW5kZXgpIHwgU1RSRUFNX0lEX1RPX0RCKHN0cmVhbV9pZCk7Ci0JCXhoY2lfd3JpdGVsKHhoY2ksIGZpZWxkLCBkYl9hZGRyKTsKLQl9CisJaWYgKChlcF9zdGF0ZSAmIEVQX0hBTFRfUEVORElORykgfHwgKGVwX3N0YXRlICYgU0VUX0RFUV9QRU5ESU5HKSB8fAorCSAgICAoZXBfc3RhdGUgJiBFUF9IQUxURUQpKQorCQlyZXR1cm47CisJeGhjaV93cml0ZWwoeGhjaSwgREJfVkFMVUUoZXBfaW5kZXgsIHN0cmVhbV9pZCksIGRiX2FkZHIpOworCS8qIFRoZSBDUFUgaGFzIGJldHRlciB0aGluZ3MgdG8gZG8gYXQgdGhpcyBwb2ludCB0aGFuIHdhaXQgZm9yIGEKKwkgKiB3cml0ZS1wb3N0aW5nIGZsdXNoLiAgSXQnbGwgZ2V0IHRoZXJlIHNvb24gZW5vdWdoLgorCSAqLwogfQogCiAvKiBSaW5nIHRoZSBkb29yYmVsbCBmb3IgYW55IHJpbmdzIHdpdGggcGVuZGluZyBVUkJzICovCkBAIC00NzksOCArNDc0LDExIEBACiAJc3RhdGUtPm5ld19kZXFfc2VnID0gZmluZF90cmJfc2VnKGN1cl90ZC0+c3RhcnRfc2VnLAogCQkJZGV2LT5lcHNbZXBfaW5kZXhdLnN0b3BwZWRfdHJiLAogCQkJJnN0YXRlLT5uZXdfY3ljbGVfc3RhdGUpOwotCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKQotCQlCVUcoKTsKKwlpZiAoIXN0YXRlLT5uZXdfZGVxX3NlZykgeworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCiAJLyogRGlnIG91dCB0aGUgY3ljbGUgc3RhdGUgc2F2ZWQgYnkgdGhlIHhIQyBkdXJpbmcgdGhlIHN0b3AgZXAgY21kICovCiAJeGhjaV9kYmcoeGhjaSwgIkZpbmRpbmcgZW5kcG9pbnQgY29udGV4dFxuIik7CiAJZXBfY3R4ID0geGhjaV9nZXRfZXBfY3R4KHhoY2ksIGRldi0+b3V0X2N0eCwgZXBfaW5kZXgpOwpAQCAtNDkxLDggKzQ4OSwxMCBAQAogCXN0YXRlLT5uZXdfZGVxX3NlZyA9IGZpbmRfdHJiX3NlZyhzdGF0ZS0+bmV3X2RlcV9zZWcsCiAJCQlzdGF0ZS0+bmV3X2RlcV9wdHIsCiAJCQkmc3RhdGUtPm5ld19jeWNsZV9zdGF0ZSk7Ci0JaWYgKCFzdGF0ZS0+bmV3X2RlcV9zZWcpCi0JCUJVRygpOworCWlmICghc3RhdGUtPm5ld19kZXFfc2VnKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CiAKIAl0cmIgPSAmc3RhdGUtPm5ld19kZXFfcHRyLT5nZW5lcmljOwogCWlmICgodHJiLT5maWVsZFszXSAmIFRSQl9UWVBFX0JJVE1BU0spID09IFRSQl9UWVBFKFRSQl9MSU5LKSAmJgpAQCAtMTE4OCw3ICsxMTg4LDcgQEAKIAogCWFkZHIgPSAmeGhjaS0+b3BfcmVncy0+cG9ydF9zdGF0dXNfYmFzZSArIE5VTV9QT1JUX1JFR1MgKiAocG9ydF9pZCAtIDEpOwogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOwotCWlmICgodGVtcCAmIFBPUlRfQ09OTkVDVCkgJiYgKGhjZC0+c3RhdGUgPT0gSENfU1RBVEVfU1VTUEVOREVEKSkgeworCWlmIChoY2QtPnN0YXRlID09IEhDX1NUQVRFX1NVU1BFTkRFRCkgewogCQl4aGNpX2RiZyh4aGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKIAkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAl9CkBAIC0xNzEwLDggKzE3MTAsNyBAQAogCQkvKiBPdGhlcnMgYWxyZWFkeSBoYW5kbGVkIGFib3ZlICovCiAJCWJyZWFrOwogCX0KLQlkZXZfZGJnKCZ0ZC0+dXJiLT5kZXYtPmRldiwKLQkJCSJlcCAlI3ggLSBhc2tlZCBmb3IgJWQgYnl0ZXMsICIKKwl4aGNpX2RiZyh4aGNpLCAiZXAgJSN4IC0gYXNrZWQgZm9yICVkIGJ5dGVzLCAiCiAJCQkiJWQgYnl0ZXMgdW50cmFuc2ZlcnJlZFxuIiwKIAkJCXRkLT51cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQl0ZC0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLApAQCAtMjM2OSwxMiArMjM2OCwxMyBAQAogCiAJCS8qIFNjYXR0ZXIgZ2F0aGVyIGxpc3QgZW50cmllcyBtYXkgY3Jvc3MgNjRLQiBib3VuZGFyaWVzICovCiAJCXJ1bm5pbmdfdG90YWwgPSBUUkJfTUFYX0JVRkZfU0laRSAtCi0JCQkoc2dfZG1hX2FkZHJlc3Moc2cpICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCQkoc2dfZG1hX2FkZHJlc3Moc2cpICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOworCQlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAkJaWYgKHJ1bm5pbmdfdG90YWwgIT0gMCkKIAkJCW51bV90cmJzKys7CiAKIAkJLyogSG93IG1hbnkgbW9yZSA2NEtCIGNodW5rcyB0byB0cmFuc2ZlciwgaG93IG1hbnkgbW9yZSBUUkJzPyAqLwotCQl3aGlsZSAocnVubmluZ190b3RhbCA8IHNnX2RtYV9sZW4oc2cpKSB7CisJCXdoaWxlIChydW5uaW5nX3RvdGFsIDwgc2dfZG1hX2xlbihzZykgJiYgcnVubmluZ190b3RhbCA8IHRlbXApIHsKIAkJCW51bV90cmJzKys7CiAJCQlydW5uaW5nX3RvdGFsICs9IFRSQl9NQVhfQlVGRl9TSVpFOwogCQl9CkBAIC0yMzg5LDcgKzIzODksOCBAQAogCX0KIAl4aGNpX2RiZyh4aGNpLCAiXG4iKTsKIAlpZiAoIWluX2ludGVycnVwdCgpKQotCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LCAiZXAgJSN4IC0gdXJiIGxlbiA9ICVkLCBzZ2xpc3QgdXNlZCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlZCwgc2dsaXN0IHVzZWQsICIKKwkJCQkibnVtX3RyYnMgPSAlZFxuIiwKIAkJCQl1cmItPmVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCiAJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAogCQkJCW51bV90cmJzKTsKQEAgLTIzOTksMTEgKzI0MDAsMTEgQEAKIHN0YXRpYyB2b2lkIGNoZWNrX3RyYl9tYXRoKHN0cnVjdCB1cmIgKnVyYiwgaW50IG51bV90cmJzLCBpbnQgcnVubmluZ190b3RhbCkKIHsKIAlpZiAobnVtX3RyYnMgIT0gMCkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCBudW1iZXIgb2YgIgorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBlcCAlI3ggLSBNaXNjYWxjdWxhdGVkIG51bWJlciBvZiAiCiAJCQkJIlRSQnMsICVkIGxlZnRcbiIsIF9fZnVuY19fLAogCQkJCXVyYi0+ZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcywgbnVtX3RyYnMpOwogCWlmIChydW5uaW5nX3RvdGFsICE9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCB0eCBsZW5ndGgsICIKKwkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZXAgJSN4IC0gTWlzY2FsY3VsYXRlZCB0eCBsZW5ndGgsICIKIAkJCQkicXVldWVkICUjeCAoJWQpLCBhc2tlZCBmb3IgJSN4ICglZClcbiIsCiAJCQkJX19mdW5jX18sCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLApAQCAtMjQxNCwxNCArMjQxNSwxNyBAQAogCiBzdGF0aWMgdm9pZCBnaXZlYmFja19maXJzdF90cmIoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2xvdF9pZCwKIAkJdW5zaWduZWQgaW50IGVwX2luZGV4LCB1bnNpZ25lZCBpbnQgc3RyZWFtX2lkLCBpbnQgc3RhcnRfY3ljbGUsCi0JCXN0cnVjdCB4aGNpX2dlbmVyaWNfdHJiICpzdGFydF90cmIsIHN0cnVjdCB4aGNpX3RkICp0ZCkKKwkJc3RydWN0IHhoY2lfZ2VuZXJpY190cmIgKnN0YXJ0X3RyYikKIHsKIAkvKgogCSAqIFBhc3MgYWxsIHRoZSBUUkJzIHRvIHRoZSBoYXJkd2FyZSBhdCBvbmNlIGFuZCBtYWtlIHN1cmUgdGhpcyB3cml0ZQogCSAqIGlzbid0IHJlb3JkZXJlZC4KIAkgKi8KIAl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOworCWlmIChzdGFydF9jeWNsZSkKKwkJc3RhcnRfdHJiLT5maWVsZFszXSB8PSBzdGFydF9jeWNsZTsKKwllbHNlCisJCXN0YXJ0X3RyYi0+ZmllbGRbM10gJj0gfjB4MTsKIAl4aGNpX3JpbmdfZXBfZG9vcmJlbGwoeGhjaSwgc2xvdF9pZCwgZXBfaW5kZXgsIHN0cmVhbV9pZCk7CiB9CiAKQEAgLTI0NDksNyArMjQ1Myw3IEBACiAJICogdG8gc2V0IHRoZSBwb2xsaW5nIGludGVydmFsIChvbmNlIHRoZSBBUEkgaXMgYWRkZWQpLgogCSAqLwogCWlmICh4aGNpX2ludGVydmFsICE9IGVwX2ludGVydmFsKSB7Ci0JCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgIkRyaXZlciB1c2VzIGRpZmZlcmVudCBpbnRlcnZhbCIKIAkJCQkJIiAoJWQgbWljcm9mcmFtZSVzKSB0aGFuIHhIQ0kgIgogCQkJCQkiKCVkIG1pY3JvZnJhbWUlcylcbiIsCkBAIC0yNTM1LDggKzI1MzksNyBAQAogCXNnID0gdXJiLT5zZzsKIAlhZGRyID0gKHU2NCkgc2dfZG1hX2FkZHJlc3Moc2cpOwogCXRoaXNfc2dfbGVuID0gc2dfZG1hX2xlbihzZyk7Ci0JdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpOworCXRyYl9idWZmX2xlbiA9IFRSQl9NQVhfQlVGRl9TSVpFIC0gKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CiAJdHJiX2J1ZmZfbGVuID0gbWluX3QoaW50LCB0cmJfYnVmZl9sZW4sIHRoaXNfc2dfbGVuKTsKIAlpZiAodHJiX2J1ZmZfbGVuID4gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKQogCQl0cmJfYnVmZl9sZW4gPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGg7CkBAIC0yNTUxLDkgKzI1NTQsMTEgQEAKIAkJdTMyIHJlbWFpbmRlciA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjU3Miw3ICsyNTc3LDcgQEAKIAkJCQkodW5zaWduZWQgaW50KSAoYWRkciArIFRSQl9NQVhfQlVGRl9TSVpFKSAmIH4oVFJCX01BWF9CVUZGX1NJWkUgLSAxKSwKIAkJCQkodW5zaWduZWQgaW50KSBhZGRyICsgdHJiX2J1ZmZfbGVuKTsKIAkJaWYgKFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJCQkoYWRkciAmICgoMSA8PCBUUkJfTUFYX0JVRkZfU0hJRlQpIC0gMSkpIDwgdHJiX2J1ZmZfbGVuKSB7CisJCQkJKGFkZHIgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSkgPCB0cmJfYnVmZl9sZW4pIHsKIAkJCXhoY2lfd2Fybih4aGNpLCAiV0FSTjogc2cgZG1hIHhmZXIgY3Jvc3NlcyA2NEtCIGJvdW5kYXJpZXMhXG4iKTsKIAkJCXhoY2lfZGJnKHhoY2ksICJOZXh0IGJvdW5kYXJ5IGF0ICUjeCwgZW5kIGRtYSA9ICUjeFxuIiwKIAkJCQkJKHVuc2lnbmVkIGludCkgKGFkZHIgKyBUUkJfTUFYX0JVRkZfU0laRSkgJiB+KFRSQl9NQVhfQlVGRl9TSVpFIC0gMSksCkBAIC0yNjE2LDcgKzI2MjEsNyBAQAogCQl9CiAKIAkJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJKGFkZHIgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwkJCShhZGRyICYgKFRSQl9NQVhfQlVGRl9TSVpFIC0gMSkpOwogCQl0cmJfYnVmZl9sZW4gPSBtaW5fdChpbnQsIHRyYl9idWZmX2xlbiwgdGhpc19zZ19sZW4pOwogCQlpZiAocnVubmluZ190b3RhbCArIHRyYl9idWZmX2xlbiA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKIAkJCXRyYl9idWZmX2xlbiA9CkBAIC0yNjI1LDcgKzI2MzAsNyBAQAogCiAJY2hlY2tfdHJiX21hdGgodXJiLCBudW1fdHJicywgcnVubmluZ190b3RhbCk7CiAJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjU2LDcgKzI2NjEsOCBAQAogCW51bV90cmJzID0gMDsKIAkvKiBIb3cgbXVjaCBkYXRhIGlzIChwb3RlbnRpYWxseSkgbGVmdCBiZWZvcmUgdGhlIDY0S0IgYm91bmRhcnk/ICovCiAJcnVubmluZ190b3RhbCA9IFRSQl9NQVhfQlVGRl9TSVpFIC0KLQkJKHVyYi0+dHJhbnNmZXJfZG1hICYgKCgxIDw8IFRSQl9NQVhfQlVGRl9TSElGVCkgLSAxKSk7CisJCSh1cmItPnRyYW5zZmVyX2RtYSAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAogCS8qIElmIHRoZXJlJ3Mgc29tZSBkYXRhIG9uIHRoaXMgNjRLQiBjaHVuaywgb3Igd2UgaGF2ZSB0byBzZW5kIGEKIAkgKiB6ZXJvLWxlbmd0aCB0cmFuc2Zlciwgd2UgbmVlZCBhdCBsZWFzdCBvbmUgVFJCCkBAIC0yNjcxLDcgKzI2NzcsOCBAQAogCS8qIEZJWE1FOiB0aGlzIGRvZXNuJ3QgZGVhbCB3aXRoIFVSQl9aRVJPX1BBQ0tFVCAtIG5lZWQgb25lIG1vcmUgKi8KIAogCWlmICghaW5faW50ZXJydXB0KCkpCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIGFkZHIgPSAlI2xseCwgbnVtX3RyYnMgPSAlZFxuIiwKKwkJeGhjaV9kYmcoeGhjaSwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwgIgorCQkJCSJhZGRyID0gJSNsbHgsIG51bV90cmJzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC0yNjk5LDggKzI3MDYsOCBAQAogCS8qIEhvdyBtdWNoIGRhdGEgaXMgaW4gdGhlIGZpcnN0IFRSQj8gKi8KIAlhZGRyID0gKHU2NCkgdXJiLT50cmFuc2Zlcl9kbWE7CiAJdHJiX2J1ZmZfbGVuID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKLQlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIDwgdHJiX2J1ZmZfbGVuKQorCQkodXJiLT50cmFuc2Zlcl9kbWEgJiAoVFJCX01BWF9CVUZGX1NJWkUgLSAxKSk7CisJaWYgKHRyYl9idWZmX2xlbiA+IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCkKIAkJdHJiX2J1ZmZfbGVuID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoOwogCiAJZmlyc3RfdHJiID0gdHJ1ZTsKQEAgLTI3MTEsOSArMjcxOCwxMSBAQAogCQlmaWVsZCA9IDA7CiAKIAkJLyogRG9uJ3QgY2hhbmdlIHRoZSBjeWNsZSBiaXQgb2YgdGhlIGZpcnN0IFRSQiB1bnRpbCBsYXRlciAqLwotCQlpZiAoZmlyc3RfdHJiKQorCQlpZiAoZmlyc3RfdHJiKSB7CiAJCQlmaXJzdF90cmIgPSBmYWxzZTsKLQkJZWxzZQorCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJZmllbGQgfD0gMHgxOworCQl9IGVsc2UKIAkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCiAJCS8qIENoYWluIGFsbCB0aGUgVFJCcyB0b2dldGhlcjsgY2xlYXIgdGhlIGNoYWluIGJpdCBpbiB0aGUgbGFzdApAQCAtMjc1Nyw3ICsyNzY2LDcgQEAKIAogCWNoZWNrX3RyYl9tYXRoKHVyYiwgbnVtX3RyYnMsIHJ1bm5pbmdfdG90YWwpOwogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgdXJiLT5zdHJlYW1faWQsCi0JCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiLCB0ZCk7CisJCQlzdGFydF9jeWNsZSwgc3RhcnRfdHJiKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjgxOCwxMyArMjgyNywxNyBAQAogCS8qIFF1ZXVlIHNldHVwIFRSQiAtIHNlZSBzZWN0aW9uIDYuNC4xLjIuMSAqLwogCS8qIEZJWE1FIGJldHRlciB3YXkgdG8gdHJhbnNsYXRlIHNldHVwX3BhY2tldCBpbnRvIHR3byB1MzIgZmllbGRzPyAqLwogCXNldHVwID0gKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikgdXJiLT5zZXR1cF9wYWNrZXQ7CisJZmllbGQgPSAwOworCWZpZWxkIHw9IFRSQl9JRFQgfCBUUkJfVFlQRShUUkJfU0VUVVApOworCWlmIChzdGFydF9jeWNsZSA9PSAwKQorCQlmaWVsZCB8PSAweDE7CiAJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCB0cnVlLAogCQkJLyogRklYTUUgZW5kaWFubmVzcyBpcyBwcm9iYWJseSBnb2luZyB0byBiaXRlIG15IGFzcyBoZXJlLiAqLwogCQkJc2V0dXAtPmJSZXF1ZXN0VHlwZSB8IHNldHVwLT5iUmVxdWVzdCA8PCA4IHwgc2V0dXAtPndWYWx1ZSA8PCAxNiwKIAkJCXNldHVwLT53SW5kZXggfCBzZXR1cC0+d0xlbmd0aCA8PCAxNiwKIAkJCVRSQl9MRU4oOCkgfCBUUkJfSU5UUl9UQVJHRVQoMCksCiAJCQkvKiBJbW1lZGlhdGUgZGF0YSBpbiBwb2ludGVyICovCi0JCQlUUkJfSURUIHwgVFJCX1RZUEUoVFJCX1NFVFVQKSk7CisJCQlmaWVsZCk7CiAKIAkvKiBJZiB0aGVyZSdzIGRhdGEsIHF1ZXVlIGRhdGEgVFJCcyAqLwogCWZpZWxkID0gMDsKQEAgLTI4NTksNyArMjg3Miw3IEBACiAJCQlmaWVsZCB8IFRSQl9JT0MgfCBUUkJfVFlQRShUUkJfU1RBVFVTKSB8IGVwX3JpbmctPmN5Y2xlX3N0YXRlKTsKIAogCWdpdmViYWNrX2ZpcnN0X3RyYih4aGNpLCBzbG90X2lkLCBlcF9pbmRleCwgMCwKLQkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIsIHRkKTsKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0yODcyLDggKzI4ODUsOCBAQAogCWFkZHIgPSAodTY0KSAodXJiLT50cmFuc2Zlcl9kbWEgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCk7CiAJdGRfbGVuID0gdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5sZW5ndGg7CiAKLQlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLQotCQkJKGFkZHIgJiAoKDEgPDwgVFJCX01BWF9CVUZGX1NISUZUKSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsID0gVFJCX01BWF9CVUZGX1NJWkUgLSAoYWRkciAmIChUUkJfTUFYX0JVRkZfU0laRSAtIDEpKTsKKwlydW5uaW5nX3RvdGFsICY9IFRSQl9NQVhfQlVGRl9TSVpFIC0gMTsKIAlpZiAocnVubmluZ190b3RhbCAhPSAwKQogCQludW1fdHJicysrOwogCkBAIC0yOTAwLDYgKzI5MTMsNyBAQAogCWludCBydW5uaW5nX3RvdGFsLCB0cmJfYnVmZl9sZW4sIHRkX2xlbiwgdGRfcmVtYWluX2xlbiwgcmV0OwogCXU2NCBzdGFydF9hZGRyLCBhZGRyOwogCWludCBpLCBqOworCWJvb2wgbW9yZV90cmJzX2NvbWluZzsKIAogCWVwX3JpbmcgPSB4aGNpLT5kZXZzW3Nsb3RfaWRdLT5lcHNbZXBfaW5kZXhdLnJpbmc7CiAKQEAgLTI5MTAsNyArMjkyNCw3IEBACiAJfQogCiAJaWYgKCFpbl9pbnRlcnJ1cHQoKSkKLQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwgImVwICUjeCAtIHVyYiBsZW4gPSAlI3ggKCVkKSwiCisJCXhoY2lfZGJnKHhoY2ksICJlcCAlI3ggLSB1cmIgbGVuID0gJSN4ICglZCksIgogCQkJCSIgYWRkciA9ICUjbGx4LCBudW1fdGRzID0gJWRcbiIsCiAJCQkJdXJiLT5lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzLAogCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKQEAgLTI5NTAsNyArMjk2NCwxMCBAQAogCQkJCWZpZWxkIHw9IFRSQl9UWVBFKFRSQl9JU09DKTsKIAkJCQkvKiBBc3N1bWUgVVJCX0lTT19BU0FQIGlzIHNldCAqLwogCQkJCWZpZWxkIHw9IFRSQl9TSUE7Ci0JCQkJaWYgKGkgPiAwKQorCQkJCWlmIChpID09IDApIHsKKwkJCQkJaWYgKHN0YXJ0X2N5Y2xlID09IDApCisJCQkJCQlmaWVsZCB8PSAweDE7CisJCQkJfSBlbHNlCiAJCQkJCWZpZWxkIHw9IGVwX3JpbmctPmN5Y2xlX3N0YXRlOwogCQkJCWZpcnN0X3RyYiA9IGZhbHNlOwogCQkJfSBlbHNlIHsKQEAgLTI5NjUsOSArMjk4MiwxMSBAQAogCQkJICovCiAJCQlpZiAoaiA8IHRyYnNfcGVyX3RkIC0gMSkgewogCQkJCWZpZWxkIHw9IFRSQl9DSEFJTjsKKwkJCQltb3JlX3RyYnNfY29taW5nID0gdHJ1ZTsKIAkJCX0gZWxzZSB7CiAJCQkJdGQtPmxhc3RfdHJiID0gZXBfcmluZy0+ZW5xdWV1ZTsKIAkJCQlmaWVsZCB8PSBUUkJfSU9DOworCQkJCW1vcmVfdHJic19jb21pbmcgPSBmYWxzZTsKIAkJCX0KIAogCQkJLyogQ2FsY3VsYXRlIFRSQiBsZW5ndGggKi8KQEAgLTI5ODAsNyArMjk5OSw3IEBACiAJCQlsZW5ndGhfZmllbGQgPSBUUkJfTEVOKHRyYl9idWZmX2xlbikgfAogCQkJCXJlbWFpbmRlciB8CiAJCQkJVFJCX0lOVFJfVEFSR0VUKDApOwotCQkJcXVldWVfdHJiKHhoY2ksIGVwX3JpbmcsIGZhbHNlLCBmYWxzZSwKKwkJCXF1ZXVlX3RyYih4aGNpLCBlcF9yaW5nLCBmYWxzZSwgbW9yZV90cmJzX2NvbWluZywKIAkJCQlsb3dlcl8zMl9iaXRzKGFkZHIpLAogCQkJCXVwcGVyXzMyX2JpdHMoYWRkciksCiAJCQkJbGVuZ3RoX2ZpZWxkLApAQCAtMzAwMywxMCArMzAyMiw4IEBACiAJCX0KIAl9CiAKLQl3bWIoKTsKLQlzdGFydF90cmItPmZpZWxkWzNdIHw9IHN0YXJ0X2N5Y2xlOwotCi0JeGhjaV9yaW5nX2VwX2Rvb3JiZWxsKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCk7CisJZ2l2ZWJhY2tfZmlyc3RfdHJiKHhoY2ksIHNsb3RfaWQsIGVwX2luZGV4LCB1cmItPnN0cmVhbV9pZCwKKwkJCXN0YXJ0X2N5Y2xlLCBzdGFydF90cmIpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDY0LDcgKzMwODEsNyBAQAogCSAqIHRvIHNldCB0aGUgcG9sbGluZyBpbnRlcnZhbCAob25jZSB0aGUgQVBJIGlzIGFkZGVkKS4KIAkgKi8KIAlpZiAoeGhjaV9pbnRlcnZhbCAhPSBlcF9pbnRlcnZhbCkgewotCQlpZiAoIXByaW50a19yYXRlbGltaXQoKSkKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKIAkJCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsICJEcml2ZXIgdXNlcyBkaWZmZXJlbnQgaW50ZXJ2YWwiCiAJCQkJCSIgKCVkIG1pY3JvZnJhbWUlcykgdGhhbiB4SENJICIKIAkJCQkJIiglZCBtaWNyb2ZyYW1lJXMpXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwppbmRleCA0NWU0YTMxLi4yMDgzZmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiAvKgogICogU2V0IHRoZSBydW4gYml0IGFuZCB3YWl0IGZvciB0aGUgaG9zdCB0byBiZSBydW5uaW5nLgogICovCi1pbnQgeGhjaV9zdGFydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpCitzdGF0aWMgaW50IHhoY2lfc3RhcnQoc3RydWN0IHhoY2lfaGNkICp4aGNpKQogewogCXUzMiB0ZW1wOwogCWludCByZXQ7CkBAIC0yMjYsNyArMjI2LDggQEAKIHN0YXRpYyBpbnQgeGhjaV9zZXR1cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAkvKgogCSAqIGNhbGN1bGF0ZSBudW1iZXIgb2YgbXNpLXggdmVjdG9ycyBzdXBwb3J0ZWQuCkBAIC0yNjUsNiArMjY2LDcgQEAKIAkJCWdvdG8gZGlzYWJsZV9tc2l4OwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMTsKIAlyZXR1cm4gcmV0OwogCiBkaXNhYmxlX21zaXg6CkBAIC0yODAsNyArMjgyLDggQEAKIC8qIEZyZWUgYW55IElSUXMgYW5kIGRpc2FibGUgTVNJLVggKi8KIHN0YXRpYyB2b2lkIHhoY2lfY2xlYW51cF9tc2l4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoeGhjaV90b19oY2QoeGhjaSktPnNlbGYuY29udHJvbGxlcik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihoY2QtPnNlbGYuY29udHJvbGxlcik7CiAKIAl4aGNpX2ZyZWVfaXJxKHhoY2kpOwogCkBAIC0yOTIsNiArMjk1LDcgQEAKIAkJcGNpX2Rpc2FibGVfbXNpKHBkZXYpOwogCX0KIAorCWhjZC0+bXNpeF9lbmFibGVkID0gMDsKIAlyZXR1cm47CiB9CiAKQEAgLTMyNSw3ICszMjksNyBAQAogCiAKICNpZmRlZiBDT05GSUdfVVNCX1hIQ0lfSENEX0RFQlVHR0lORwotdm9pZCB4aGNpX2V2ZW50X3Jpbmdfd29yayh1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyB2b2lkIHhoY2lfZXZlbnRfcmluZ193b3JrKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRlbXA7CkBAIC00NjksNyArNDczLDcgQEAKIAkJCXhoY2ktPmlyX3NldCwgKHVuc2lnbmVkIGludCkgRVJfSVJRX0VOQUJMRSh0ZW1wKSk7CiAJeGhjaV93cml0ZWwoeGhjaSwgRVJfSVJRX0VOQUJMRSh0ZW1wKSwKIAkJCSZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJaWYgKE5VTV9URVNUX05PT1BTID4gMCkKIAkJZG9vcmJlbGwgPSB4aGNpX3NldHVwX29uZV9ub29wKHhoY2kpOwpAQCAtNTA4LDkgKzUxMiwxMCBAQAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKIAl4aGNpX3Jlc2V0KHhoY2kpOwotCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAKKwl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKKwogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJLyogVGVsbCB0aGUgZXZlbnQgcmluZyBwb2xsIGZ1bmN0aW9uIG5vdCB0byByZXNjaGVkdWxlICovCiAJeGhjaS0+em9tYmllID0gMTsKQEAgLTUyMyw3ICs1MjgsNyBAQAogCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAl4aGNpX3dyaXRlbCh4aGNpLCBFUl9JUlFfRElTQUJMRSh0ZW1wKSwKIAkJCSZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKLQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCXhoY2lfcHJpbnRfaXJfc2V0KHhoY2ksIDApOwogCiAJeGhjaV9kYmcoeGhjaSwgImNsZWFuaW5nIHVwIG1lbW9yeVxuIik7CiAJeGhjaV9tZW1fY2xlYW51cCh4aGNpKTsKQEAgLTU0NCw5ICs1NDksMTAgQEAKIAogCXNwaW5fbG9ja19pcnEoJnhoY2ktPmxvY2spOwogCXhoY2lfaGFsdCh4aGNpKTsKLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJeGhjaV9jbGVhbnVwX21zaXgoeGhjaSk7CisKIAl4aGNpX2RiZyh4aGNpLCAieGhjaV9zaHV0ZG93biBjb21wbGV0ZWQgLSBzdGF0dXMgPSAleFxuIiwKIAkJICAgIHhoY2lfcmVhZGwoeGhjaSwgJnhoY2ktPm9wX3JlZ3MtPnN0YXR1cykpOwogfQpAQCAtNjQ3LDYgKzY1Myw3IEBACiAJaW50CQkJcmMgPSAwOwogCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0geGhjaV90b19oY2QoeGhjaSk7CiAJdTMyCQkJY29tbWFuZDsKKwlpbnQJCQlpOwogCiAJc3Bpbl9sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJY2xlYXJfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKTsKQEAgLTY3NywxMCArNjg0LDE1IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmeGhjaS0+bG9jayk7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KLQkvKiBzdGVwIDU6IHJlbW92ZSBjb3JlIHdlbGwgcG93ZXIgKi8KLQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwogCisJLyogc3RlcCA1OiByZW1vdmUgY29yZSB3ZWxsIHBvd2VyICovCisJLyogc3luY2hyb25pemUgaXJxIHdoZW4gdXNpbmcgTVNJLVggKi8KKwlpZiAoeGhjaS0+bXNpeF9lbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCB4aGNpLT5tc2l4X2NvdW50OyBpKyspCisJCQlzeW5jaHJvbml6ZV9pcnEoeGhjaS0+bXNpeF9lbnRyaWVzW2ldLnZlY3Rvcik7CisJfQorCiAJcmV0dXJuIHJjOwogfQogCkBAIC02OTQsNyArNzA2LDYgQEAKIHsKIAl1MzIJCQljb21tYW5kLCB0ZW1wID0gMDsKIAlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHhoY2lfdG9faGNkKHhoY2kpOwotCXN0cnVjdCBwY2lfZGV2CQkqcGRldiA9IHRvX3BjaV9kZXYoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOwogCWludAlvbGRfc3RhdGUsIHJldHZhbDsKIAogCW9sZF9zdGF0ZSA9IGhjZC0+c3RhdGU7CkBAIC03MjksOSArNzQwLDggQEAKIAkJeGhjaV9kYmcoeGhjaSwgIlN0b3AgSENEXG4iKTsKIAkJeGhjaV9oYWx0KHhoY2kpOwogCQl4aGNpX3Jlc2V0KHhoY2kpOwotCQlpZiAoaGliZXJuYXRlZCkKLQkJCXhoY2lfY2xlYW51cF9tc2l4KHhoY2kpOwogCQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOworCQl4aGNpX2NsZWFudXBfbXNpeCh4aGNpKTsKIAogI2lmZGVmIENPTkZJR19VU0JfWEhDSV9IQ0RfREVCVUdHSU5HCiAJCS8qIFRlbGwgdGhlIGV2ZW50IHJpbmcgcG9sbCBmdW5jdGlvbiBub3QgdG8gcmVzY2hlZHVsZSAqLwpAQCAtNzQ1LDcgKzc1NSw3IEBACiAJCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksICZ4aGNpLT5pcl9zZXQtPmlycV9wZW5kaW5nKTsKIAkJeGhjaV93cml0ZWwoeGhjaSwgRVJfSVJRX0RJU0FCTEUodGVtcCksCiAJCQkJJnhoY2ktPmlyX3NldC0+aXJxX3BlbmRpbmcpOwotCQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCB4aGNpLT5pcl9zZXQsIDApOworCQl4aGNpX3ByaW50X2lyX3NldCh4aGNpLCAwKTsKIAogCQl4aGNpX2RiZyh4aGNpLCAiY2xlYW5pbmcgdXAgbWVtb3J5XG4iKTsKIAkJeGhjaV9tZW1fY2xlYW51cCh4aGNpKTsKQEAgLTc2NSwzMCArNzc1LDYgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKLQlzcGluX3VubG9ja19pcnEoJnhoY2ktPmxvY2spOwotCS8qIFJlLXNldHVwIE1TSS1YICovCi0JaWYgKGhjZC0+aXJxKQotCQlmcmVlX2lycShoY2QtPmlycSwgaGNkKTsKLQloY2QtPmlycSA9IC0xOwotCi0JcmV0dmFsID0geGhjaV9zZXR1cF9tc2l4KHhoY2kpOwotCWlmIChyZXR2YWwpCi0JCS8qIGZhbGwgYmFjayB0byBtc2kqLwotCQlyZXR2YWwgPSB4aGNpX3NldHVwX21zaSh4aGNpKTsKLQotCWlmIChyZXR2YWwpIHsKLQkJLyogZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHQqLwotCQlyZXR2YWwgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsICZ1c2JfaGNkX2lycSwgSVJRRl9TSEFSRUQsCi0JCQkJCWhjZC0+aXJxX2Rlc2NyLCBoY2QpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQl4aGNpX2Vycih4aGNpLCAicmVxdWVzdCBpbnRlcnJ1cHQgJWQgZmFpbGVkXG4iLAotCQkJCQlwZGV2LT5pcnEpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCQloY2QtPmlycSA9IHBkZXYtPmlycTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxKCZ4aGNpLT5sb2NrKTsKIAkvKiBzdGVwIDQ6IHNldCBSdW4vU3RvcCBiaXQgKi8KIAljb21tYW5kID0geGhjaV9yZWFkbCh4aGNpLCAmeGhjaS0+b3BfcmVncy0+Y29tbWFuZCk7CiAJY29tbWFuZCB8PSBDTURfUlVOOwpAQCAtODcxLDcgKzg1Nyw3IEBACiAvKiBSZXR1cm5zIDEgaWYgdGhlIGFyZ3VtZW50cyBhcmUgT0s7CiAgKiByZXR1cm5zIDAgdGhpcyBpcyBhIHJvb3QgaHViOyByZXR1cm5zIC1FSU5WQUwgZm9yIE5VTEwgcG9pbnRlcnMuCiAgKi8KLWludCB4aGNpX2NoZWNrX2FyZ3Moc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCitzdGF0aWMgaW50IHhoY2lfY2hlY2tfYXJncyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCwgaW50IGNoZWNrX2VwLCBib29sIGNoZWNrX3ZpcnRfZGV2LAogCQljb25zdCBjaGFyICpmdW5jKSB7CiAJc3RydWN0IHhoY2lfaGNkCSp4aGNpOwpAQCAtMTcwNyw3ICsxNjkzLDcgQEAKIAl4aGNpX2RiZ19jdHgoeGhjaSwgaW5fY3R4LCB4aGNpX2xhc3RfdmFsaWRfZW5kcG9pbnQoYWRkX2ZsYWdzKSk7CiB9CiAKLXZvaWQgeGhjaV9zZXR1cF9pbnB1dF9jdHhfZm9yX3F1aXJrKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKK3N0YXRpYyB2b2lkIHhoY2lfc2V0dXBfaW5wdXRfY3R4X2Zvcl9xdWlyayhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCiAJCXVuc2lnbmVkIGludCBzbG90X2lkLCB1bnNpZ25lZCBpbnQgZXBfaW5kZXgsCiAJCXN0cnVjdCB4aGNpX2RlcXVldWVfc3RhdGUgKmRlcV9zdGF0ZSkKIHsKQEAgLTI0NDUsOCArMjQzMSwxMiBAQAogCQl4aGNpX2Vycih4aGNpLCAiRXJyb3Igd2hpbGUgYXNzaWduaW5nIGRldmljZSBzbG90IElEXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCS8qIHhoY2lfYWxsb2NfdmlydF9kZXZpY2UoKSBkb2VzIG5vdCB0b3VjaCByaW5nczsgbm8gbmVlZCB0byBsb2NrICovCi0JaWYgKCF4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHhoY2ksIHhoY2ktPnNsb3RfaWQsIHVkZXYsIEdGUF9LRVJORUwpKSB7CisJLyogeGhjaV9hbGxvY192aXJ0X2RldmljZSgpIGRvZXMgbm90IHRvdWNoIHJpbmdzOyBubyBuZWVkIHRvIGxvY2suCisJICogVXNlIEdGUF9OT0lPLCBzaW5jZSB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbQorCSAqIHhoY2lfZGlzY292ZXJfb3JfcmVzZXRfZGV2aWNlKCksIHdoaWNoIG1heSBiZSBjYWxsZWQgYXMgcGFydCBvZgorCSAqIG1hc3Mgc3RvcmFnZSBkcml2ZXIgZXJyb3IgaGFuZGxpbmcuCisJICovCisJaWYgKCF4aGNpX2FsbG9jX3ZpcnRfZGV2aWNlKHhoY2ksIHhoY2ktPnNsb3RfaWQsIHVkZXYsIEdGUF9OT0lPKSkgewogCQkvKiBEaXNhYmxlIHNsb3QsIGlmIHdlIGNhbiBkbyBpdCB3aXRob3V0IG1lbSBhbGxvYyAqLwogCQl4aGNpX3dhcm4oeGhjaSwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB4SENJIFVTQiBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS5oIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKaW5kZXggMTcwYzM2Ny4uN2YxMjdkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLmgKQEAgLTQzNiwyMiArNDM2LDE4IEBACiAvKioKICAqIHN0cnVjdCBkb29yYmVsbF9hcnJheQogICoKKyAqIEJpdHMgIDAgLSAgNzogRW5kcG9pbnQgdGFyZ2V0CisgKiBCaXRzICA4IC0gMTU6IFJzdmRaCisgKiBCaXRzIDE2IC0gMzE6IFN0cmVhbSBJRAorICoKICAqIFNlY3Rpb24gNS42CiAgKi8KIHN0cnVjdCB4aGNpX2Rvb3JiZWxsX2FycmF5IHsKIAl1MzIJZG9vcmJlbGxbMjU2XTsKIH07CiAKLSNkZWZpbmUJREJfVEFSR0VUX01BU0sJCTB4RkZGRkZGMDAKLSNkZWZpbmUJREJfU1RSRUFNX0lEX01BU0sJMHgwMDAwRkZGRgotI2RlZmluZQlEQl9UQVJHRVRfSE9TVAkJMHgwCi0jZGVmaW5lCURCX1NUUkVBTV9JRF9IT1NUCTB4MAotI2RlZmluZQlEQl9NQVNLCQkJKDB4ZmYgPDwgOCkKLQotLyogRW5kcG9pbnQgVGFyZ2V0IC0gYml0cyAwOjcgKi8KLSNkZWZpbmUgRVBJX1RPX0RCKHApCQkoKChwKSArIDEpICYgMHhmZikKLSNkZWZpbmUgU1RSRUFNX0lEX1RPX0RCKHApCSgoKHApICYgMHhmZmZmKSA8PCAxNikKLQorI2RlZmluZSBEQl9WQUxVRShlcCwgc3RyZWFtKQkoKCgoZXApICsgMSkgJiAweGZmKSB8ICgoc3RyZWFtKSA8PCAxNikpCisjZGVmaW5lIERCX1ZBTFVFX0hPU1QJCTB4MDAwMDAwMDAKIAogLyoqCiAgKiBzdHJ1Y3QgeGhjaV9wcm90b2NvbF9jYXBzCkBAIC0xMzUyLDcgKzEzNDgsNyBAQAogfQogCiAvKiB4SENJIGRlYnVnZ2luZyAqLwotdm9pZCB4aGNpX3ByaW50X2lyX3NldChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2ludHJfcmVnICppcl9zZXQsIGludCBzZXRfbnVtKTsKK3ZvaWQgeGhjaV9wcmludF9pcl9zZXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBpbnQgc2V0X251bSk7CiB2b2lkIHhoY2lfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiB2b2lkIHhoY2lfZGJnX3JlZ3Moc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIHZvaWQgeGhjaV9wcmludF9ydW5fcmVncyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKaW5kZXggMTczMmQ5Yi4uMTYxNmFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCkBAIC00NSw3ICs0NSw3IEBACiAKIHN0YXRpYyB2b2lkIGNoYW5nZV9jb2xvcihzdHJ1Y3QgdXNiX2xlZCAqbGVkKQogewotCWludCByZXR2YWw7CisJaW50IHJldHZhbCA9IDA7CiAJdW5zaWduZWQgY2hhciAqYnVmZmVyOwogCiAJYnVmZmVyID0ga21hbGxvYyg4LCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCmluZGV4IDRmZjIxNTguLmY3YTIwNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwpAQCAtNzc2LDcgKzc3Niw2IEBACiAJeyBVU0JfREVWSUNFKDB4MDU1NywgMHgyMDAxKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MjksIDB4MTI4NCkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxMjkzLCAweDAwMDIpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTI5MywgMHgwMDAyKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAwMikgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBlZWJhMjI4Li45ZDQ5ZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC00MDQsNiArNDA0LDcgQEAKIAkJbXVzYi0+eGNlaXYtPnNldF9wb3dlciA9IGJmaW5fbXVzYl9zZXRfcG93ZXI7CiAKIAltdXNiLT5pc3IgPSBibGFja2Zpbl9pbnRlcnJ1cHQ7CisJbXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2sgPSB0cnVlOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwppbmRleCAwN2NmMzk0Li5jMjkyZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKQEAgLTEyOCwxMiArMTI4LDcgQEAKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbXVzYiAqZGV2X3RvX211c2Ioc3RydWN0IGRldmljZSAqZGV2KQogewotI2lmZGVmIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRAotCS8qIHVzYmNvcmUgaW5zaXN0cyBkZXYtPmRyaXZlcl9kYXRhIGlzIGEgInN0cnVjdCBoY2QgKiIgKi8KLQlyZXR1cm4gaGNkX3RvX211c2IoZGV2X2dldF9kcnZkYXRhKGRldikpOwotI2Vsc2UKIAlyZXR1cm4gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0jZW5kaWYKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTE4NjksNiArMTg2NCw3IEBACiAJSU5JVF9MSVNUX0hFQUQoJm11c2ItPm91dF9idWxrKTsKIAogCWhjZC0+dXNlc19uZXdfcG9sbGluZyA9IDE7CisJaGNkLT5oYXNfdHQgPSAxOwogCiAJbXVzYi0+dmJ1c2Vycl9yZXRyeSA9IFZCVVNFUlJfUkVUUllfQ09VTlQ7CiAJbXVzYi0+YV93YWl0X2Jjb24gPSBPVEdfVElNRV9BX1dBSVRfQkNPTjsKQEAgLTE4NzYsMTAgKzE4NzIsOSBAQAogCW11c2IgPSBremFsbG9jKHNpemVvZiAqbXVzYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdXNiKQogCQlyZXR1cm4gTlVMTDsKLQlkZXZfc2V0X2RydmRhdGEoZGV2LCBtdXNiKTsKIAogI2VuZGlmCi0KKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBtdXNiKTsKIAltdXNiLT5tcmVncyA9IG1iYXNlOwogCW11c2ItPmN0cmxfYmFzZSA9IG1iYXNlOwogCW11c2ItPm5JcnEgPSAtRU5PREVWOwpAQCAtMjE5MSw3ICsyMTg2LDcgQEAKIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAKIAlpb21lbSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFpb21lbSB8fCBpcnEgPT0gMCkKKwlpZiAoIWlvbWVtIHx8IGlycSA8PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWJhc2UgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaCBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKaW5kZXggZDBjMjM2Zi4uZTY0MDBiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCkBAIC00OTcsNiArNDk3LDE5IEBACiAJc3RydWN0IHVzYl9nYWRnZXRfZHJpdmVyICpnYWRnZXRfZHJpdmVyOwkvKiBpdHMgZHJpdmVyICovCiAjZW5kaWYKIAorCS8qCisJICogRklYTUU6IFJlbW92ZSB0aGlzIGZsYWcuCisJICoKKwkgKiBUaGlzIGlzIG9ubHkgYWRkZWQgdG8gYWxsb3cgQmxhY2tmaW4gdG8gd29yaworCSAqIHdpdGggY3VycmVudCBkcml2ZXIuIEZvciBzb21lIHVua25vd24gcmVhc29uCisJICogQmxhY2tmaW4gZG9lc24ndCB3b3JrIHdpdGggZG91YmxlIGJ1ZmZlcmluZworCSAqIGFuZCB0aGF0J3MgZW5hYmxlZCBieSBkZWZhdWx0LgorCSAqCisJICogV2UgYWRkZWQgdGhpcyBmbGFnIHRvIGZvcmNlZnVsbHkgZGlzYWJsZSBkb3VibGUKKwkgKiBidWZmZXJpbmcgdW50aWwgd2UgZ2V0IGl0IHdvcmtpbmcuCisJICovCisJdW5zaWduZWQgICAgICAgICAgICAgICAgZG91YmxlX2J1ZmZlcl9ub3Rfb2s6MSBfX2RlcHJlY2F0ZWQ7CisKIAlzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZwkqY29uZmlnOwogCiAjaWZkZWYgTVVTQl9DT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2RtYS5oCmluZGV4IDkxNjA2NWIuLjNhOTdjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9kbWEuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZG1hLmgKQEAgLTE2OSw2ICsxNjksOSBAQAogCQkJCQkJCWRtYV9hZGRyX3QgZG1hX2FkZHIsCiAJCQkJCQkJdTMyIGxlbmd0aCk7CiAJaW50CQkJKCpjaGFubmVsX2Fib3J0KShzdHJ1Y3QgZG1hX2NoYW5uZWwgKik7CisJaW50CQkJKCppc19jb21wYXRpYmxlKShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwsCisJCQkJCQkJdTE2IG1heHBhY2tldCwKKwkJCQkJCQl2b2lkICpidWYsIHUzMiBsZW5ndGgpOwogfTsKIAogLyogY2FsbGVkIGFmdGVyIGNoYW5uZWxfcHJvZ3JhbSgpLCBtYXkgaW5kaWNhdGUgYSBmYXVsdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCmluZGV4IGVkNThjNmMuLjJmZTMwNDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKQEAgLTkyLDExICs5MiwzMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjZGVmaW5lIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSAoaXNfZG1hX2NhcGFibGUoKSAmJiBcCisJCQkJCShyZXEtPm1hcF9zdGF0ZSAhPSBVTl9NQVBQRUQpKQorCiAvKiBNYXBzIHRoZSBidWZmZXIgdG8gZG1hICAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKLQkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKKwkJCXN0cnVjdCBtdXNiICptdXNiLCBzdHJ1Y3QgbXVzYl9lcCAqbXVzYl9lcCkKIHsKKwlpbnQgY29tcGF0aWJsZSA9IHRydWU7CisJc3RydWN0IGRtYV9jb250cm9sbGVyICpkbWEgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKKworCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFVOX01BUFBFRDsKKworCWlmICghaXNfZG1hX2NhcGFibGUoKSB8fCAhbXVzYl9lcC0+ZG1hKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBpZiBETUEgZW5naW5lIGNhbiBoYW5kbGUgdGhpcyByZXF1ZXN0LgorCSAqIERNQSBjb2RlIG11c3QgcmVqZWN0IHRoZSBVU0IgcmVxdWVzdCBleHBsaWNpdGx5LgorCSAqIERlZmF1bHQgYmVoYXZpb3VyIGlzIHRvIG1hcCB0aGUgcmVxdWVzdC4KKwkgKi8KKwlpZiAoZG1hLT5pc19jb21wYXRpYmxlKQorCQljb21wYXRpYmxlID0gZG1hLT5pc19jb21wYXRpYmxlKG11c2JfZXAtPmRtYSwKKwkJCQltdXNiX2VwLT5wYWNrZXRfc3osIHJlcXVlc3QtPnJlcXVlc3QuYnVmLAorCQkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoKTsKKwlpZiAoIWNvbXBhdGlibGUpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gZG1hX21hcF9zaW5nbGUoCiAJCQkJbXVzYi0+Y29udHJvbGxlciwKQEAgLTEwNSw3ICsxMjcsNyBAQAogCQkJCXJlcXVlc3QtPnR4CiAJCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDE7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IE1VU0JfTUFQUEVEOwogCX0gZWxzZSB7CiAJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKQEAgLTExMyw3ICsxMzUsNyBAQAogCQkJcmVxdWVzdC0+dHgKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7Ci0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJCXJlcXVlc3QtPm1hcF9zdGF0ZSA9IFBSRV9NQVBQRUQ7CiAJfQogfQogCkBAIC0xMjEsMTEgKzE0MywxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIHVubWFwX2RtYV9idWZmZXIoc3RydWN0IG11c2JfcmVxdWVzdCAqcmVxdWVzdCwKIAkJCQlzdHJ1Y3QgbXVzYiAqbXVzYikKIHsKKwlpZiAoIWlzX2J1ZmZlcl9tYXBwZWQocmVxdWVzdCkpCisJCXJldHVybjsKKwogCWlmIChyZXF1ZXN0LT5yZXF1ZXN0LmRtYSA9PSBETUFfQUREUl9JTlZBTElEKSB7CiAJCURCRygyMCwgIm5vdCB1bm1hcHBpbmcgYSBuZXZlciBtYXBwZWQgYnVmZmVyXG4iKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAocmVxdWVzdC0+bWFwcGVkKSB7CisJaWYgKHJlcXVlc3QtPm1hcF9zdGF0ZSA9PSBNVVNCX01BUFBFRCkgewogCQlkbWFfdW5tYXBfc2luZ2xlKG11c2ItPmNvbnRyb2xsZXIsCiAJCQlyZXF1ZXN0LT5yZXF1ZXN0LmRtYSwKIAkJCXJlcXVlc3QtPnJlcXVlc3QubGVuZ3RoLApAQCAtMTMzLDE2ICsxNTgsMTUgQEAKIAkJCQk/IERNQV9UT19ERVZJQ0UKIAkJCQk6IERNQV9GUk9NX0RFVklDRSk7CiAJCXJlcXVlc3QtPnJlcXVlc3QuZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKLQkJcmVxdWVzdC0+bWFwcGVkID0gMDsKLQl9IGVsc2UgeworCX0gZWxzZSB7IC8qIFBSRV9NQVBQRUQgKi8KIAkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUobXVzYi0+Y29udHJvbGxlciwKIAkJCXJlcXVlc3QtPnJlcXVlc3QuZG1hLAogCQkJcmVxdWVzdC0+cmVxdWVzdC5sZW5ndGgsCiAJCQlyZXF1ZXN0LT50eAogCQkJCT8gRE1BX1RPX0RFVklDRQogCQkJCTogRE1BX0ZST01fREVWSUNFKTsKLQogCX0KKwlyZXF1ZXN0LT5tYXBfc3RhdGUgPSBVTl9NQVBQRUQ7CiB9CiAKIC8qCkBAIC0xNzIsOCArMTk2LDcgQEAKIAogCWVwLT5idXN5ID0gMTsKIAlzcGluX3VubG9jaygmbXVzYi0+bG9jayk7Ci0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgZXAtPmRtYSkKLQkJdW5tYXBfZG1hX2J1ZmZlcihyZXEsIG11c2IpOworCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAlpZiAocmVxdWVzdC0+c3RhdHVzID09IDApCiAJCURCRyg1LCAiJXMgZG9uZSByZXF1ZXN0ICVwLCAgJWQvJWRcbiIsCiAJCQkJZXAtPmVuZF9wb2ludC5uYW1lLCByZXF1ZXN0LApAQCAtMzM1LDcgKzM1OCw3IEBACiAJCQljc3IpOwogCiAjaWZuZGVmCUNPTkZJR19NVVNCX1BJT19PTkxZCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmMgPSBtdXNiLT5kbWFfY29udHJvbGxlcjsKIAkJc2l6ZV90IHJlcXVlc3Rfc2l6ZTsKIApAQCAtNDM2LDggKzQ1OSw3IEBACiAJCSAqIFVubWFwIHRoZSBkbWEgYnVmZmVyIGJhY2sgdG8gY3B1IGlmIGRtYSBjaGFubmVsCiAJCSAqIHByb2dyYW1taW5nIGZhaWxzCiAJCSAqLwotCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpCi0JCQl1bm1hcF9kbWFfYnVmZmVyKHJlcSwgbXVzYik7CisJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQltdXNiX3dyaXRlX2ZpZm8obXVzYl9lcC0+aHdfZXAsIGZpZm9fY291bnQsCiAJCQkJKHU4ICopIChyZXF1ZXN0LT5idWYgKyByZXF1ZXN0LT5hY3R1YWwpKTsKQEAgLTYyNyw3ICs2NDksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGlzX2NwcGlfZW5hYmxlZCgpICYmIG11c2JfZXAtPmRtYSkgeworCWlmIChpc19jcHBpX2VuYWJsZWQoKSAmJiBpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJc3RydWN0IGRtYV9jb250cm9sbGVyCSpjID0gbXVzYi0+ZG1hX2NvbnRyb2xsZXI7CiAJCXN0cnVjdCBkbWFfY2hhbm5lbAkqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIApAQCAtNjU4LDcgKzY4MCw3IEBACiAJCWxlbiA9IG11c2JfcmVhZHcoZXBpbywgTVVTQl9SWENPVU5UKTsKIAkJaWYgKHJlcXVlc3QtPmFjdHVhbCA8IHJlcXVlc3QtPmxlbmd0aCkgewogI2lmZGVmIENPTkZJR19VU0JfSU5WRU5UUkFfRE1BCi0JCQlpZiAoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiX2VwLT5kbWEpIHsKKwkJCWlmIChpc19idWZmZXJfbWFwcGVkKHJlcSkpIHsKIAkJCQlzdHJ1Y3QgZG1hX2NvbnRyb2xsZXIJKmM7CiAJCQkJc3RydWN0IGRtYV9jaGFubmVsCSpjaGFubmVsOwogCQkJCWludAkJCXVzZV9kbWEgPSAwOwpAQCAtNzQyLDcgKzc2NCw3IEBACiAJCQlmaWZvX2NvdW50ID0gbWluX3QodW5zaWduZWQsIGxlbiwgZmlmb19jb3VudCk7CiAKICNpZmRlZglDT05GSUdfVVNCX1RVU0JfT01BUF9ETUEKLQkJCWlmICh0dXNiX2RtYV9vbWFwKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQlpZiAodHVzYl9kbWFfb21hcCgpICYmIGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXN0cnVjdCBkbWFfY29udHJvbGxlciAqYyA9IG11c2ItPmRtYV9jb250cm9sbGVyOwogCQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbm5lbCA9IG11c2JfZXAtPmRtYTsKIAkJCQl1MzIgZG1hX2FkZHIgPSByZXF1ZXN0LT5kbWEgKyByZXF1ZXN0LT5hY3R1YWw7CkBAIC03NjIsNyArNzg0LDcgQEAKIAkJCSAqIHByb2dyYW1taW5nIGZhaWxzLiBUaGlzIGJ1ZmZlciBpcyBtYXBwZWQgaWYgdGhlCiAJCQkgKiBjaGFubmVsIGFsbG9jYXRpb24gaXMgc3VjY2Vzc2Z1bAogCQkJICovCi0JCQkgaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKSB7CisJCQkgaWYgKGlzX2J1ZmZlcl9tYXBwZWQocmVxKSkgewogCQkJCXVubWFwX2RtYV9idWZmZXIocmVxLCBtdXNiKTsKIAogCQkJCS8qCkBAIC05ODksNyArMTAxMSwxMSBAQAogCQkvKiBTZXQgVFhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkJICogdG8gZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG1vZGUuCiAJCSAqLwotCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6IHwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKKwkJaWYgKG11c2ItPmRvdWJsZV9idWZmZXJfbm90X29rKQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKKwkJZWxzZQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIG11c2JfZXAtPnBhY2tldF9zegorCQkJCQl8IChtdXNiX2VwLT5oYl9tdWx0IDw8IDExKSk7CiAKIAkJY3NyID0gTVVTQl9UWENTUl9NT0RFIHwgTVVTQl9UWENTUl9DTFJEQVRBVE9HOwogCQlpZiAobXVzYl9yZWFkdyhyZWdzLCBNVVNCX1RYQ1NSKQpAQCAtMTAyNSw3ICsxMDUxLDExIEBACiAJCS8qIFNldCBSWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAogCQkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXJpbmcgbW9kZS4KIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBtdXNiX2VwLT5wYWNrZXRfc3ogfCAobXVzYl9lcC0+aGJfbXVsdCA8PCAxMSkpOworCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgaHdfZXAtPm1heF9wYWNrZXRfc3pfdHgpOworCQllbHNlCisJCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1JYTUFYUCwgbXVzYl9lcC0+cGFja2V0X3N6CisJCQkJCXwgKG11c2JfZXAtPmhiX211bHQgPDwgMTEpKTsKIAogCQkvKiBmb3JjZSBzaGFyZWQgZmlmbyB0byBPVVQtb25seSBtb2RlICovCiAJCWlmIChod19lcC0+aXNfc2hhcmVkX2ZpZm8pIHsKQEAgLTEyMTQsMTAgKzEyNDQsNyBAQAogCXJlcXVlc3QtPmVwbnVtID0gbXVzYl9lcC0+Y3VycmVudF9lcG51bTsKIAlyZXF1ZXN0LT50eCA9IG11c2JfZXAtPmlzX2luOwogCi0JaWYgKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYl9lcC0+ZG1hKQotCQltYXBfZG1hX2J1ZmZlcihyZXF1ZXN0LCBtdXNiKTsKLQllbHNlCi0JCXJlcXVlc3QtPm1hcHBlZCA9IDA7CisJbWFwX2RtYV9idWZmZXIocmVxdWVzdCwgbXVzYiwgbXVzYl9lcCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgbG9ja2ZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5oCmluZGV4IGRlYzhkYzAuLmE1NTM1NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuaAorKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmgKQEAgLTM1LDEzICszNSwxOSBAQAogI2lmbmRlZiBfX01VU0JfR0FER0VUX0gKICNkZWZpbmUgX19NVVNCX0dBREdFVF9ICiAKK2VudW0gYnVmZmVyX21hcF9zdGF0ZSB7CisJVU5fTUFQUEVEID0gMCwKKwlQUkVfTUFQUEVELAorCU1VU0JfTUFQUEVECit9OworCiBzdHJ1Y3QgbXVzYl9yZXF1ZXN0IHsKIAlzdHJ1Y3QgdXNiX3JlcXVlc3QJcmVxdWVzdDsKIAlzdHJ1Y3QgbXVzYl9lcAkJKmVwOwogCXN0cnVjdCBtdXNiCQkqbXVzYjsKIAl1OCB0eDsJCQkvKiBlbmRwb2ludCBkaXJlY3Rpb24gKi8KIAl1OCBlcG51bTsKLQl1OCBtYXBwZWQ7CisJZW51bSBidWZmZXJfbWFwX3N0YXRlIG1hcF9zdGF0ZTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG11c2JfcmVxdWVzdCAqdG9fbXVzYl9yZXF1ZXN0KHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKaW5kZXggNGQ1YmNiNC4uMGY1MjNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCkBAIC02MDksNyArNjA5LDcgQEAKIAkvKiBTZXQgUlhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKIAkgKiB0byBkaXNhYmxlIGRvdWJsZSBidWZmZXIgbW9kZS4KIAkgKi8KLQlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCW11c2Jfd3JpdGV3KGVwLT5yZWdzLCBNVVNCX1JYTUFYUCwgZXAtPm1heF9wYWNrZXRfc3pfcngpOwogCWVsc2UKIAkJbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLApAQCAtNzg0LDE0ICs3ODQsMTMgQEAKIAkJLyogcHJvdG9jb2wvZW5kcG9pbnQvaW50ZXJ2YWwvTkFLbGltaXQgKi8KIAkJaWYgKGVwbnVtKSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYVFlQRSwgcWgtPnR5cGVfcmVnKTsKLQkJCWlmIChjYW5fYnVsa19zcGxpdChtdXNiLCBxaC0+dHlwZSkpCisJCQlpZiAobXVzYi0+ZG91YmxlX2J1ZmZlcl9ub3Rfb2spCiAJCQkJbXVzYl93cml0ZXcoZXBpbywgTVVTQl9UWE1BWFAsCi0JCQkJCXBhY2tldF9zegotCQkJCQl8ICgoaHdfZXAtPm1heF9wYWNrZXRfc3pfdHggLwotCQkJCQkJcGFja2V0X3N6KSAtIDEpIDw8IDExKTsKKwkJCQkJCWh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKIAkJCWVsc2UKIAkJCQltdXNiX3dyaXRldyhlcGlvLCBNVVNCX1RYTUFYUCwKLQkJCQkJcGFja2V0X3N6KTsKKwkJCQkJCXFoLT5tYXhwYWNrZXQgfAorCQkJCQkJKChxaC0+aGJfbXVsdCAtIDEpIDw8IDExKSk7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX1RYSU5URVJWQUwsIHFoLT5pbnR2X3JlZyk7CiAJCX0gZWxzZSB7CiAJCQltdXNiX3dyaXRlYihlcGlvLCBNVVNCX05BS0xJTUlUMCwgcWgtPmludHZfcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCmluZGV4IGY3NjNkNjIuLjIxMDU2YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaApAQCAtOTQsMjQgKzk0LDMzIEBACiB7CiAJbXVzYl93cml0ZXcobWJhc2UsCiAJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQUREUl9MT1cpLAotCQkoKHUxNikoKHUzMikgZG1hX2FkZHIgJiAweEZGRkYpKSk7CisJCWRtYV9hZGRyKTsKIAltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9BRERSX0hJR0gpLAotCQkoKHUxNikoKCh1MzIpIGRtYV9hZGRyID4+IDE2KSAmIDB4RkZGRikpKTsKKwkJKGRtYV9hZGRyID4+IDE2KSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG11c2JfcmVhZF9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBiY2hhbm5lbCkKIHsKLQlyZXR1cm4gbXVzYl9yZWFkbChtYmFzZSwKKwl1MzIgY291bnQgPSBtdXNiX3JlYWR3KG1iYXNlLAogCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0hJR0gpKTsKKworCWNvdW50ID0gY291bnQgPDwgMTY7CisKKwljb3VudCB8PSBtdXNiX3JlYWR3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVykpOworCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV9oc2RtYV9jb3VudCh2b2lkIF9faW9tZW0gKm1iYXNlLAogCQkJCXU4IGJjaGFubmVsLCB1MzIgbGVuKQogewotCW11c2Jfd3JpdGVsKG1iYXNlLAorCW11c2Jfd3JpdGV3KG1iYXNlLAorCQlNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0NPVU5UX0xPVyksbGVuKTsKKwltdXNiX3dyaXRldyhtYmFzZSwKIAkJTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVF9ISUdIKSwKLQkJbGVuKTsKKwkJKGxlbiA+PiAxNikpOwogfQogCiAjZW5kaWYgLyogQ09ORklHX0JMQUNLRklOICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKaW5kZXggYTNmMTIzMy4uYmM4YmFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwpAQCAtMzYyLDYgKzM2Miw3IEBACiAKIHN0YXRpYyBpbnQgb21hcDI0MzBfbXVzYl9leGl0KHN0cnVjdCBtdXNiICptdXNiKQogeworCWRlbF90aW1lcl9zeW5jKCZtdXNiX2lkbGVfdGltZXIpOwogCiAJb21hcDI0MzBfbG93X2xldmVsX2V4aXQobXVzYik7CiAJb3RnX3B1dF90cmFuc2NlaXZlcihtdXNiLT54Y2Vpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9vdGcvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCmluZGV4IDlmYjg3NWQuLjlmZmM4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL290Zy9LY29uZmlnCkBAIC0xMDMsNiArMTAzLDggQEAKIAkgIHJlcXVpcmVkIGFmdGVyIHJlc2V0dGluZyB0aGUgaGFyZHdhcmUgYW5kIHBvd2VyIG1hbmFnZW1lbnQuCiAJICBUaGlzIGRyaXZlciBpcyByZXF1aXJlZCBldmVuIGZvciBwZXJpcGhlcmFsIG9ubHkgb3IgaG9zdCBvbmx5CiAJICBtb2RlIGNvbmZpZ3VyYXRpb25zLgorCSAgVGhpcyBkcml2ZXIgaXMgbm90IHN1cHBvcnRlZCBvbiBib2FyZHMgbGlrZSB0cm91dCB3aGljaAorCSAgaGFzIGFuIGV4dGVybmFsIFBIWS4KIAogY29uZmlnIEFCODUwMF9VU0IKICAgICAgICAgdHJpc3RhdGUgIkFCODUwMCBVU0IgVHJhbnNjZWl2ZXIgRHJpdmVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYyBiL2RyaXZlcnMvdXNiL290Zy9ub3AtdXNiLXhjZWl2LmMKaW5kZXggZTcwMDE0YS4uOGFjZjE2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL25vcC11c2IteGNlaXYuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvbm9wLXVzYi14Y2Vpdi5jCkBAIC0xMzIsNiArMTMyLDggQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5vcCk7CiAKKwlCTE9DS0lOR19JTklUX05PVElGSUVSX0hFQUQoJm5vcC0+b3RnLm5vdGlmaWVyKTsKKwogCXJldHVybiAwOwogZXhpdDoKIAlrZnJlZShub3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYyBiL2RyaXZlcnMvdXNiL290Zy91bHBpLmMKaW5kZXggMDU5ZDlhYy4uNzcwZDc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivb3RnL3VscGkuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdWxwaS5jCkBAIC00NSw3ICs0NSw3IEBACiAvKiBVTFBJIGhhcmRjb2RlZCBJRHMsIHVzZWQgZm9yIHByb2JpbmcgKi8KIHN0YXRpYyBzdHJ1Y3QgdWxwaV9pbmZvIHVscGlfaWRzW10gPSB7CiAJVUxQSV9JTkZPKFVMUElfSUQoMHgwNGNjLCAweDE1MDQpLCAiTlhQIElTUDE1MDQiKSwKLQlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMTkiKSwKKwlVTFBJX0lORk8oVUxQSV9JRCgweDA0MjQsIDB4MDAwNiksICJTTVNDIFVTQjMzMXgiKSwKIH07CiAKIHN0YXRpYyBpbnQgdWxwaV9zZXRfb3RnX2ZsYWdzKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jaDM0MS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKaW5kZXggNjNmN2NjNC4uN2I4ODE1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMKQEAgLTQ4NiwxMiArNDg2LDIyIEBACiAJaWYgKGFjdHVhbF9sZW5ndGggPj0gNCkgewogCQlzdHJ1Y3QgY2gzNDFfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdTggcHJldl9saW5lX3N0YXR1cyA9IHByaXYtPmxpbmVfc3RhdHVzOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXByaXYtPmxpbmVfc3RhdHVzID0gKH4oZGF0YVsyXSkpICYgQ0gzNDFfQklUU19NT0RFTV9TVEFUOwogCQlpZiAoKGRhdGFbMV0gJiBDSDM0MV9NVUxUX1NUQVQpKQogCQkJcHJpdi0+bXVsdGlfc3RhdHVzX2NoYW5nZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCQlpZiAoKHByaXYtPmxpbmVfc3RhdHVzIF4gcHJldl9saW5lX3N0YXR1cykgJiBDSDM0MV9CSVRfRENEKSB7CisJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CisJCQlpZiAodHR5KQorCQkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCQkgICAgcHJpdi0+bGluZV9zdGF0dXMgJiBDSDM0MV9CSVRfRENEKTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggOGQ3NzMxZC4uNzM1ZWEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNDksNyArNDksNiBAQAogc3RhdGljIHZvaWQgY3AyMTB4X2JyZWFrX2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBpbnQpOwogc3RhdGljIGludCBjcDIxMHhfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqKTsKIHN0YXRpYyB2b2lkIGNwMjEweF9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnAsIGludCBvbik7Ci1zdGF0aWMgaW50IGNwMjEweF9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKIApAQCAtODcsNyArODYsNiBAQAogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODExNSkgfSwgLyogQXJ5Z29uIE5GQy9NaWZhcmUgUmVhZGVyICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTNEKSB9LCAvKiBCdXJuc2lkZSBUZWxlY29tIERlc2ttb2JpbGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxM0YpIH0sIC8qIFRhbXMgTWFzdGVyIEVhc3kgQ29udHJvbCAqLwotCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0OSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBDb21wdXRlcml6ZWQgQmF0dGVyeSBBbmFseXplciAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QSkgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUdibGFzdGVyIFAmUCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODE0QikgfSwgLyogV2VzdCBNb3VudGFpbiBSYWRpbyBSSUd0YWxrICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MTU2KSB9LCAvKiBCJkcgSDMwMDAgbGluayBjYWJsZSAqLwpAQCAtMTEwLDcgKzEwOCw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzgyKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNBOCkgfSwgLyogQW1iZXIgV2lyZWxlc3MgQU1CMjU2MCAqLworCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODNEOCkgfSwgLyogRGVrVGVjIERUQSBQbHVzIFZIRi9VSEYgQm9vc3Rlci9BdHRlbnVhdG9yICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDExKSB9LCAvKiBLeW9jZXJhIEdQUyBNb2R1bGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0MTgpIH0sIC8qIElSWiBBdXRvbWF0aW9uIFRlbGVwb3J0IFNHLTEwIEdTTS9HUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4NDZFKSB9LCAvKiBCRUkgVVNCIFNlbnNvciBJbnRlcmZhY2UgKFZDUCkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDg0NzcpIH0sIC8qIEJhbGx1ZmYgUkZJRCAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4RUE2MCkgfSwgLyogU2lsaWNvbiBMYWJzIGZhY3RvcnkgZGVmYXVsdCAqLwpAQCAtMTY1LDggKzE2NSw3IEBACiAJLnRpb2NtZ2V0IAkJPSBjcDIxMHhfdGlvY21nZXQsCiAJLnRpb2Ntc2V0CQk9IGNwMjEweF90aW9jbXNldCwKIAkuYXR0YWNoCQkJPSBjcDIxMHhfc3RhcnR1cCwKLQkuZHRyX3J0cwkJPSBjcDIxMHhfZHRyX3J0cywKLQkuY2Fycmllcl9yYWlzZWQJCT0gY3AyMTB4X2NhcnJpZXJfcmFpc2VkCisJLmR0cl9ydHMJCT0gY3AyMTB4X2R0cl9ydHMKIH07CiAKIC8qIENvbmZpZyByZXF1ZXN0IHR5cGVzICovCkBAIC03NjUsMTUgKzc2NCw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGludCBjcDIxMHhfY2Fycmllcl9yYWlzZWQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcCkKLXsKLQl1bnNpZ25lZCBpbnQgY29udHJvbDsKLQljcDIxMHhfZ2V0X2NvbmZpZyhwLCBDUDIxMFhfR0VUX01ETVNUUywgJmNvbnRyb2wsIDEpOwotCWlmIChjb250cm9sICYgQ09OVFJPTF9EQ0QpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBjcDIxMHhfYnJlYWtfY3RsIChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgYnJlYWtfc3RhdGUpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKaW5kZXggYjkyMDcwYy4uNjY2ZTVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYwpAQCAtNDU1LDcgKzQ1NSw2IEBACiBzdGF0aWMgaW50IGRpZ2lfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBkaWdpX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgZGlnaV9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbik7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cF9kZXZpY2Uoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50IGRpZ2lfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKQEAgLTUxMSw3ICs1MTAsNiBAQAogCS5vcGVuID0JCQkJZGlnaV9vcGVuLAogCS5jbG9zZSA9CQkJZGlnaV9jbG9zZSwKIAkuZHRyX3J0cyA9CQkJZGlnaV9kdHJfcnRzLAotCS5jYXJyaWVyX3JhaXNlZCA9CQlkaWdpX2NhcnJpZXJfcmFpc2VkLAogCS53cml0ZSA9CQkJZGlnaV93cml0ZSwKIAkud3JpdGVfcm9vbSA9CQkJZGlnaV93cml0ZV9yb29tLAogCS53cml0ZV9idWxrX2NhbGxiYWNrID0gCQlkaWdpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCkBAIC0xMzM5LDE0ICsxMzM3LDYgQEAKIAlkaWdpX3NldF9tb2RlbV9zaWduYWxzKHBvcnQsIG9uICogKFRJT0NNX0RUUnxUSU9DTV9SVFMpLCAxKTsKIH0KIAotc3RhdGljIGludCBkaWdpX2NhcnJpZXJfcmFpc2VkKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCi17Ci0Jc3RydWN0IGRpZ2lfcG9ydCAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlpZiAocHJpdi0+ZHBfbW9kZW1fc2lnbmFscyAmIFRJT0NNX0NEKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBkaWdpX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBhMjY2OGQwLi5mMzQ5YTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMTAwLDYgKzEwMCw3IEBACiBzdGF0aWMgaW50ICAgZnRkaV9qdGFnX3Byb2JlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCAgIGZ0ZGlfbXR4b3JiX2hhY2tfc2V0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgaW50ICAgZnRkaV9ORElfZGV2aWNlX3NldHVwKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOworc3RhdGljIGludCAgIGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCk7CiBzdGF0aWMgdm9pZCAgZnRkaV9VU0JfVUlSVF9zZXR1cChzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2KTsKIHN0YXRpYyB2b2lkICBmdGRpX0hFX1RJUkExX3NldHVwKHN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYpOwogCkBAIC0xMjMsNiArMTI0LDEwIEBACiAJLnBvcnRfcHJvYmUgPSBmdGRpX0hFX1RJUkExX3NldHVwLAogfTsKIAorc3RhdGljIHN0cnVjdCBmdGRpX3Npb19xdWlyayBmdGRpX3N0bWNsaXRlX3F1aXJrID0geworCS5wcm9iZQk9IGZ0ZGlfc3RtY2xpdGVfcHJvYmUsCit9OworCiAvKgogICogVGhlIDhVMjMyQU0gaGFzIHRoZSBzYW1lIEFQSSBhcyB0aGUgc2lvIGV4Y2VwdCBmb3I6CiAgKiAtIGl0IGNhbiBzdXBwb3J0IE1VQ0ggaGlnaGVyIGJhdWRyYXRlczsgdXAgdG86CkBAIC02MTYsNiArNjIxLDcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfT0NFQU5JQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFRUSV9WSUQsIFRUSV9RTDM1NVBfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9STV9DQU5WSUVXX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUNUT05fVklELCBBQ1RPTl9TUEVDVFJBUFJPX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ09OVEVDX1ZJRCwgQ09OVEVDX0NPTTFVU0JIX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU09UTDRfUElEKSB9LAogCXsgVVNCX0RFVklDRShCQU5EQl9WSUQsIEJBTkRCX1VTVEw0X1BJRCkgfSwKQEAgLTY3Niw3ICs2ODIsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUENESl9EQUMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUlJDSVJLSVRTX0xPQ09CVUZGRVJfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9BU0tfUkRSNDAwX1BJRCkgfSwKLQl7IFVTQl9ERVZJQ0UoSUNPTV9JRDFfVklELCBJQ09NX0lEMV9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEXzFfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9PUENfVV9VQ19QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMkMxX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyQzJfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJEX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoSUNPTV9WSUQsIElDT01fSURfUlAyVlRfUElEKSB9LAorCXsgVVNCX0RFVklDRShJQ09NX1ZJRCwgSUNPTV9JRF9SUDJWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQNEtWUl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKElDT01fVklELCBJQ09NX0lEX1JQMktWUl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDR19IRkRVQUxfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ZRUlfU0VSVk9DRU5URVIzMV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RIT1JMQUJTX1BJRCkgfSwKQEAgLTgwMCw2ICs4MTYsOCBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9ET1RFQ19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFFJSEFSRFdBUkVfVklELCBNSUxLWU1JU1RPTkVfSlRBR1NFUklBTF9QSUQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZ0ZGlfanRhZ19xdWlyayB9LAorCXsgVVNCX0RFVklDRShTVF9WSUQsIFNUX1NUTUNMVDEwMzBfUElEKSwKKwkJLmRyaXZlcl9pbmZvID0gKGtlcm5lbF91bG9uZ190KSZmdGRpX3N0bWNsaXRlX3F1aXJrIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTE2OTksNiArMTcxNywyNSBAQAogfQogCiAvKgorICogRmlyc3QgYW5kIHNlY29uZCBwb3J0IG9uIFNUTUNMaXRlYWRhcHRvcnMgaXMgcmVzZXJ2ZWQgZm9yIEpUQUcgaW50ZXJmYWNlCisgKiBhbmQgdGhlIGZvcnRoIHBvcnQgZm9yIHBpbworICovCitzdGF0aWMgaW50IGZ0ZGlfc3RtY2xpdGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNlcmlhbC0+ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSBzZXJpYWwtPmludGVyZmFjZTsKKworCWRiZygiJXMiLCBfX2Z1bmNfXyk7CisKKwlpZiAoaW50ZXJmYWNlID09IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlWzJdKQorCQlyZXR1cm4gMDsKKworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJJZ25vcmluZyBzZXJpYWwgcG9ydCByZXNlcnZlZCBmb3IgSlRBR1xuIik7CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworLyoKICAqIFRoZSBNYXRyaXggT3JiaXRhbCBWSzIwNC0yNS1VU0IgaGFzIGFuIGludmFsaWQgSU4gZW5kcG9pbnQuCiAgKiBXZSBoYXZlIHRvIGNvcnJlY3QgaXQgaWYgd2Ugd2FudCB0byByZWFkIGZyb20gaXQuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaAppbmRleCBiZjA4NjcyLi4xMTdlOGU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCkBAIC01MTgsNiArNTE4LDEyIEBACiAjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAogCiAvKgorICogQWN0b24gUmVzZWFyY2ggQ29ycC4KKyAqLworI2RlZmluZSBBQ1RPTl9WSUQJCTB4MDY0NwkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQUNUT05fU1BFQ1RSQVBST19QSUQJMHgwMTAwCisKKy8qCiAgKiBDb250ZWMgcHJvZHVjdHMgKGh0dHA6Ly93d3cuY29udGVjLmNvbSkKICAqIFN1Ym1pdHRlZCBieSBEYW5pZWwgU2FuZ29ycmluCiAgKi8KQEAgLTU2OSwxMSArNTc1LDIzIEBACiAjZGVmaW5lIE9DVF9VUzEwMV9QSUQJCTB4MDQyMQkvKiBPQ1QgVVMxMDEgVVNCIHRvIFJTLTIzMiAqLwogCiAvKgotICogSWNvbSBJRC0xIGRpZ2l0YWwgdHJhbnNjZWl2ZXIKKyAqIERlZmluaXRpb25zIGZvciBJY29tIEluYy4gZGV2aWNlcwogICovCi0KLSNkZWZpbmUgSUNPTV9JRDFfVklEICAgICAgICAgICAgMHgwQzI2Ci0jZGVmaW5lIElDT01fSUQxX1BJRCAgICAgICAgICAgIDB4MDAwNAorI2RlZmluZSBJQ09NX1ZJRAkJMHgwQzI2IC8qIEljb20gdmVuZG9yIElEICovCisvKiBOb3RlOiBJRC0xIGlzIGEgY29tbXVuaWNhdGlvbnMgdHJhbmNlaXZlciBmb3IgSEFNLXJhZGlvIG9wZXJhdG9ycyAqLworI2RlZmluZSBJQ09NX0lEXzFfUElECQkweDAwMDQgLyogSUQtMSBVU0IgdG8gUlMtMjMyICovCisvKiBOb3RlOiBPUEMgaXMgYW4gT3B0aW9uYWwgY2FibGUgdG8gY29ubmVjdCBhbiBJY29tIFRyYW5jZWl2ZXIgKi8KKyNkZWZpbmUgSUNPTV9PUENfVV9VQ19QSUQJMHgwMDE4IC8qIE9QQy00NzhVQywgT1BDLTExMjJVIGNsb25pbmcgY2FibGUgKi8KKy8qIE5vdGU6IElELVJQKiBkZXZpY2VzIGFyZSBJY29tIFJlcGVhdGVyIERldmljZXMgZm9yIEhBTS1yYWRpbyAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMxX1BJRAkweDAwMDkgLyogSUQtUlAyQyBBc3NldCAxIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkMyX1BJRAkweDAwMEEgLyogSUQtUlAyQyBBc3NldCAyIHRvIFJTLTIzMiAqLworI2RlZmluZSBJQ09NX0lEX1JQMkRfUElECTB4MDAwQiAvKiBJRC1SUDJEIGNvbmZpZ3VyYXRpb24gcG9ydCovCisjZGVmaW5lIElDT01fSURfUlAyVlRfUElECTB4MDAwQyAvKiBJRC1SUDJWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyVlJfUElECTB4MDAwRCAvKiBJRC1SUDJWIFJlY2VpdmUgY29uZmlnIHBvcnQgKi8KKyNkZWZpbmUgSUNPTV9JRF9SUDRLVlRfUElECTB4MDAxMCAvKiBJRC1SUDQwMDBWIFRyYW5zbWl0IGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlA0S1ZSX1BJRAkweDAwMTEgLyogSUQtUlA0MDAwViBSZWNlaXZlIGNvbmZpZyBwb3J0ICovCisjZGVmaW5lIElDT01fSURfUlAyS1ZUX1BJRAkweDAwMTIgLyogSUQtUlAyMDAwViBUcmFuc21pdCBjb25maWcgcG9ydCAqLworI2RlZmluZSBJQ09NX0lEX1JQMktWUl9QSUQJMHgwMDEzIC8qIElELVJQMjAwMFYgUmVjZWl2ZSBjb25maWcgcG9ydCAqLwogCiAvKgogICogR04gT3RvbWV0cmljcyAoaHR0cDovL3d3dy5vdG9tZXRyaWNzLmNvbSkKQEAgLTEwMjIsNiArMTA0MCwxMiBAQAogI2RlZmluZSBXSFRfUElECQkJMHgwMDA0IC8qIFdpcmVsZXNzIEhhbmRoZWxkIFRlcm1pbmFsICovCiAKIC8qCisgKiBTVE1pY3JvZWxlY3RvbmljcworICovCisjZGVmaW5lIFNUX1ZJRAkJCTB4MDQ4MworI2RlZmluZSBTVF9TVE1DTFQxMDMwX1BJRAkweDM3NDcgLyogU1QgTWljcm8gQ29ubmVjdCBMaXRlIFNUTUNMVDEwMzAgKi8KKworLyoKICAqIFBhcG91Y2ggcHJvZHVjdHMgKGh0dHA6Ly93d3cucGFwb3VjaC5jb20vKQogICogU3VibWl0dGVkIGJ5IEZvbGtlcnQgdmFuIEhldXNkZW4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggZTY4MzNlMi4uZTRkYjVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC00NzksNiArNDc5LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayk7CiAKKy8qKgorICoJdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSAtIGhhbmRsZSBhIGNoYW5nZSBvZiBjYXJyaWVyIGRldGVjdCBzdGF0ZQorICoJQHBvcnQ6IHVzYl9zZXJpYWxfcG9ydCBzdHJ1Y3R1cmUgZm9yIHRoZSBvcGVuIHBvcnQKKyAqCUB0dHk6IHR0eV9zdHJ1Y3Qgc3RydWN0dXJlIGZvciB0aGUgcG9ydAorICoJQHN0YXR1czogbmV3IGNhcnJpZXIgZGV0ZWN0IHN0YXR1cywgbm9uemVybyBpZiBhY3RpdmUKKyAqLwordm9pZCB1c2Jfc2VyaWFsX2hhbmRsZV9kY2RfY2hhbmdlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnVzYl9wb3J0LAorCQkJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJc3RydWN0IHR0eV9wb3J0ICpwb3J0ID0gJnVzYl9wb3J0LT5wb3J0OworCisJZGJnKCIlcyAtIHBvcnQgJWQsIHN0YXR1cyAlZCIsIF9fZnVuY19fLCB1c2JfcG9ydC0+bnVtYmVyLCBzdGF0dXMpOworCisJaWYgKHN0YXR1cykKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwb3J0LT5vcGVuX3dhaXQpOworCWVsc2UgaWYgKHR0eSAmJiAhQ19DTE9DQUwodHR5KSkKKwkJdHR5X2hhbmd1cCh0dHkpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZSk7CisKIGludCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKaW5kZXggY2Q3NjllZi4uM2IyNDZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMKQEAgLTI4ODksOCArMjg4OSw4IEBACiAKIAlkYmcoIiVzICVkLiVkLiVkIiwgZndfaW5mbywgcmVjLT5kYXRhWzBdLCByZWMtPmRhdGFbMV0sIGJ1aWxkKTsKIAotCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVNYWpvclZlcnNpb24gPSBmdy0+ZGF0YVswXTsKLQllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gZnctPmRhdGFbMV07CisJZWRnZV9zZXJpYWwtPnByb2R1Y3RfaW5mby5GaXJtd2FyZU1ham9yVmVyc2lvbiA9IHJlYy0+ZGF0YVswXTsKKwllZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLkZpcm13YXJlTWlub3JWZXJzaW9uID0gcmVjLT5kYXRhWzFdOwogCWVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uRmlybXdhcmVCdWlsZE51bWJlciA9IGNwdV90b19sZTE2KGJ1aWxkKTsKIAogCWZvciAocmVjID0gaWhleF9uZXh0X2JpbnJlYyhyZWMpOyByZWM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggNmFiMmEzZi4uMTc4YjIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMTk5LDYgKzE5OSw3IEBACiAJCS5uYW1lCQk9ICJlcGljIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiRVBpQyBkZXZpY2UiLAorCS51c2JfZHJpdmVyCQk9ICZpb19kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IEVwaWNfcG9ydF9pZF90YWJsZSwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4JCQk9IGVkZ2Vfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pdXVfcGhvZW5peC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKaW5kZXggMTJlZDU5NC4uOTliOTdjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMKQEAgLTEyNzUsNiArMTI3NSw3IEBACiAJCSAgIC5uYW1lID0gIml1dV9waG9lbml4IiwKIAkJICAgfSwKIAkuaWRfdGFibGUgPSBpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9ICZpdXVfZHJpdmVyLAogCS5udW1fcG9ydHMgPSAxLAogCS5idWxrX2luX3NpemUgPSA1MTIsCiAJLmJ1bGtfb3V0X3NpemUgPSA1MTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaAppbmRleCAyZDhiYWY2Li5jZTEzNGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKQEAgLTU0Niw2ICs1NDYsNyBAQAogCQkubmFtZQkJPSAia2V5c3Bhbl9ub19maXJtIiwKIAl9LAogCS5kZXNjcmlwdGlvbgkJPSAiS2V5c3BhbiAtICh3aXRob3V0IGZpcm13YXJlKSIsCisJLnVzYl9kcml2ZXIJCT0gJmtleXNwYW5fZHJpdmVyLAogCS5pZF90YWJsZQkJPSBrZXlzcGFuX3ByZV9pZHMsCiAJLm51bV9wb3J0cwkJPSAxLAogCS5hdHRhY2gJCQk9IGtleXNwYW5fZmFrZV9zdGFydHVwLApAQCAtNTU3LDYgKzU1OCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzEiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDEgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMXBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMSwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNTc5LDYgKzU4MSw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzIiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDIgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fMnBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gMiwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApAQCAtNjAxLDYgKzYwNCw3IEBACiAJCS5uYW1lCQk9ICJrZXlzcGFuXzQiLAogCX0sCiAJLmRlc2NyaXB0aW9uCQk9ICJLZXlzcGFuIDQgcG9ydCBhZGFwdGVyIiwKKwkudXNiX2RyaXZlcgkJPSAma2V5c3Bhbl9kcml2ZXIsCiAJLmlkX3RhYmxlCQk9IGtleXNwYW5fNHBvcnRfaWRzLAogCS5udW1fcG9ydHMJCT0gNCwKIAkub3BlbgkJCT0ga2V5c3Bhbl9vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW5fcGRhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwppbmRleCBhMTBkZDU2Li41NTRhODY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYwpAQCAtNjc5LDIyICs2NzksNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBrZXlzcGFuX3BkYV9jYXJyaWVyX3JhaXNlZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQotewotCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7Ci0JdW5zaWduZWQgY2hhciBtb2RlbWJpdHM7Ci0KLQkvKiBJZiB3ZSBjYW4gcmVhZCB0aGUgbW9kZW0gc3RhdHVzIGFuZCB0aGUgRENEIGlzIGxvdyB0aGVuCi0JICAgY2FycmllciBpcyBub3QgcmFpc2VkIHlldCAqLwotCWlmIChrZXlzcGFuX3BkYV9nZXRfbW9kZW1faW5mbyhzZXJpYWwsICZtb2RlbWJpdHMpID49IDApIHsKLQkJaWYgKCEobW9kZW1iaXRzICYgKDE+PjYpKSkKLQkJCXJldHVybiAwOwotCX0KLQkvKiBDYXJyaWVyIHJhaXNlZCwgb3Igd2UgZmFpbGVkIChlZyBkaXNjb25uZWN0ZWQpIHNvCi0JICAgcHJvZ3Jlc3MgYWNjb3JkaW5nbHkgKi8KLQlyZXR1cm4gMTsKLX0KLQogCiBzdGF0aWMgaW50IGtleXNwYW5fcGRhX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKQEAgLTg4MSw3ICs4NjUsNiBAQAogCS5pZF90YWJsZSA9CQlpZF90YWJsZV9zdGQsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5kdHJfcnRzID0JCWtleXNwYW5fcGRhX2R0cl9ydHMsCi0JLmNhcnJpZXJfcmFpc2VkCT0Ja2V5c3Bhbl9wZGFfY2Fycmllcl9yYWlzZWQsCiAJLm9wZW4gPQkJCWtleXNwYW5fcGRhX29wZW4sCiAJLmNsb3NlID0JCWtleXNwYW5fcGRhX2Nsb3NlLAogCS53cml0ZSA9CQlrZXlzcGFuX3BkYV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCmluZGV4IGNmMTcxODMuLjY1MzQ2NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3RvX21vZGVtLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwpAQCAtNDQsNiArNDQsNyBAQAogCQkubmFtZSA9CQkibW90by1tb2RlbSIsCiAJfSwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGUsCisJLnVzYl9kcml2ZXIgPQkJJm1vdG9fZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCA3NDg3NzgyLi41ZjQ2ODM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC0zODIsNyArMzgyLDE2IEBACiAjZGVmaW5lIEhBSUVSX1ZFTkRPUl9JRAkJCQkweDIwMWUKICNkZWZpbmUgSEFJRVJfUFJPRFVDVF9DRTEwMAkJCTB4MjAwOQogCi0jZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkweDA2ODEKKy8qIENpbnRlcmlvbiAoZm9ybWVybHkgU2llbWVucykgcHJvZHVjdHMgKi8KKyNkZWZpbmUgU0lFTUVOU19WRU5ET1JfSUQJCQkJMHgwNjgxCisjZGVmaW5lIENJTlRFUklPTl9WRU5ET1JfSUQJCQkJMHgxZTJkCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNCQkweDAwNDcKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyNV9NRE1ORVQJMHgwMDQwCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNCQkweDAwNEMKKyNkZWZpbmUgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQJMHgwMDRBIC8qIHNhbWUgZm9yIEhDMjhKICovCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19FCQkJMHgwMDUxCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX0VVM19QCQkJMHgwMDUyCisjZGVmaW5lIENJTlRFUklPTl9QUk9EVUNUX1BIOAkJCTB4MDA1MwogCiAvKiBPbGl2ZXR0aSBwcm9kdWN0cyAqLwogI2RlZmluZSBPTElWRVRUSV9WRU5ET1JfSUQJCQkweDBiM2MKQEAgLTk0NCw3ICs5NTMsMTcgQEAKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDBGKSB9LAogCXsgVVNCX0RFVklDRShQSVJFTExJX1ZFTkRPUl9JRCwgUElSRUxMSV9QUk9EVUNUXzEwMTEpfSwKIAl7IFVTQl9ERVZJQ0UoUElSRUxMSV9WRU5ET1JfSUQsIFBJUkVMTElfUFJPRFVDVF8xMDEyKX0sCi0JeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIDB4MDA0NykgfSwKKwkvKiBDaW50ZXJpb24gKi8KKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfRVUzX0UpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0VVM19QKSB9LAorCXsgVVNCX0RFVklDRShDSU5URVJJT05fVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9QSDgpIH0sCisJeyBVU0JfREVWSUNFKENJTlRFUklPTl9WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNKSB9LCAKKwl7IFVTQl9ERVZJQ0UoQ0lOVEVSSU9OX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE1ORVQpIH0sCisJeyBVU0JfREVWSUNFKFNJRU1FTlNfVkVORE9SX0lELCBDSU5URVJJT05fUFJPRFVDVF9IQzI1X01ETSkgfSwKKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjVfTURNTkVUKSB9LAorCXsgVVNCX0RFVklDRShTSUVNRU5TX1ZFTkRPUl9JRCwgQ0lOVEVSSU9OX1BST0RVQ1RfSEMyOF9NRE0pIH0sIC8qIEhDMjggZW51bWVyYXRlcyB3aXRoIFNpZW1lbnMgb3IgQ2ludGVyaW9uIFZJRCBkZXBlbmRpbmcgb24gRlcgcmV2aXNpb24gKi8KKwl7IFVTQl9ERVZJQ0UoU0lFTUVOU19WRU5ET1JfSUQsIENJTlRFUklPTl9QUk9EVUNUX0hDMjhfTURNTkVUKSB9LAorCiAJeyBVU0JfREVWSUNFKE9MSVZFVFRJX1ZFTkRPUl9JRCwgT0xJVkVUVElfUFJPRFVDVF9PTElDQVJEMTAwKSB9LAogCXsgVVNCX0RFVklDRShDRUxPVF9WRU5ET1JfSUQsIENFTE9UX1BST0RVQ1RfQ1Q2ODBNKSB9LCAvKiBDVC02NTAgQ0RNQSA0NTAgMXhFVkRPIG1vZGVtICovCiAJeyBVU0JfREVWSUNFKE9OREFfVkVORE9SX0lELCBPTkRBX01UODI1VVApIH0sIC8qIE9OREEgTVQ4MjVVUCBtb2RlbSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggNWJlODY2Yi4uNzM2MTMyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAkJLm5hbWUgPQkJIm90aTY4NTgiLAogCX0sCiAJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS51c2JfZHJpdmVyID0JCSZvdGk2ODU4X2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiAJLm9wZW4gPQkJCW90aTY4NThfb3BlbiwKIAkuY2xvc2UgPQkJb3RpNjg1OF9jbG9zZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwppbmRleCA4YWU0YzZjLi4wOGM5MTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCkBAIC01MCw2ICs1MCw3IEBACiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX01NWCkgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfR1BSUykgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfSENSMzMxKSB9LAorCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRF9NT1RPUk9MQSkgfSwKIAl7IFVTQl9ERVZJQ0UoSU9EQVRBX1ZFTkRPUl9JRCwgSU9EQVRBX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKElPREFUQV9WRU5ET1JfSUQsIElPREFUQV9QUk9EVUNUX0lEX1JTQVE1KSB9LAogCXsgVVNCX0RFVklDRShBVEVOX1ZFTkRPUl9JRCwgQVRFTl9QUk9EVUNUX0lEKSB9LApAQCAtNjc3LDkgKzY3OCwxMSBAQAogewogCiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1OCBzdGF0dXNfaWR4ID0gVUFSVF9TVEFURTsKIAl1OCBsZW5ndGggPSBVQVJUX1NUQVRFICsgMTsKKwl1OCBwcmV2X2xpbmVfc3RhdHVzOwogCXUxNiBpZHYsIGlkcDsKIAogCWlkdiA9IGxlMTZfdG9fY3B1KHBvcnQtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKTsKQEAgLTcwMSwxMSArNzA0LDIwIEBACiAKIAkvKiBTYXZlIG9mZiB0aGUgdWFydCBzdGF0dXMgZm9yIG90aGVycyB0byBsb29rIGF0ICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlwcmV2X2xpbmVfc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7CiAJcHJpdi0+bGluZV9zdGF0dXMgPSBkYXRhW3N0YXR1c19pZHhdOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAocHJpdi0+bGluZV9zdGF0dXMgJiBVQVJUX0JSRUFLX0VSUk9SKQogCQl1c2Jfc2VyaWFsX2hhbmRsZV9icmVhayhwb3J0KTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPmRlbHRhX21zcl93YWl0KTsKKworCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisJaWYgKChwcml2LT5saW5lX3N0YXR1cyBeIHByZXZfbGluZV9zdGF0dXMpICYgVUFSVF9EQ0QpCisJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCXByaXYtPmxpbmVfc3RhdHVzICYgVUFSVF9EQ0QpOworCXR0eV9rcmVmX3B1dCh0dHkpOwogfQogCiBzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCmluZGV4IDQzZWI5YmQuLjFiMDI1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTIxLDYgKzIxLDcgQEAKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU1YCQkweDA2MTIKICNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfR1BSUwkJMHgwNjA5CiAjZGVmaW5lIFBMMjMwM19QUk9EVUNUX0lEX0hDUjMzMQkweDMzMWEKKyNkZWZpbmUgUEwyMzAzX1BST0RVQ1RfSURfTU9UT1JPTEEJMHgwMzA3CiAKICNkZWZpbmUgQVRFTl9WRU5ET1JfSUQJCTB4MDU1NwogI2RlZmluZSBBVEVOX1ZFTkRPUl9JRDIJCTB4MDU0NwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3FjYXV4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwppbmRleCAyMTRhM2U1Li4zMGI3M2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwpAQCAtMzYsNiArMzYsNyBAQAogI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMQkJMHgzNzEyCiAjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YyCQkweDM3MTQKICNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfQUxMVEVMCQkweDM3MTUKKyNkZWZpbmUgUEFOVEVDSF9QUk9EVUNUX1VNTDI5MF9WWlcJCTB4MzcxOAogCiAvKiBDTU9URUNIIGRldmljZXMgKi8KICNkZWZpbmUgQ01PVEVDSF9WRU5ET1JfSUQJCQkweDE2ZDgKQEAgLTY2LDYgKzY3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKExHX1ZFTkRPUl9JRCwgTEdfUFJPRFVDVF9WWDQ0MDBfNjAwMCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFNBTllPX1ZFTkRPUl9JRCwgU0FOWU9fUFJPRFVDVF9LQVRBTkFfTFgsIDB4ZmYsIDB4ZmYsIDB4MDApIH0sCiAJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhTQU1TVU5HX1ZFTkRPUl9JRCwgU0FNU1VOR19QUk9EVUNUX1U1MjAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBQQU5URUNIX1BST0RVQ1RfVU1MMjkwX1ZaVywgMHhmZiwgMHhmZiwgMHhmZikgfSwKIAl7IH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKQEAgLTg0LDYgKzg2LDcgQEAKIAkJLm5hbWUgPQkJInFjYXV4IiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmcWNhdXhfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKaW5kZXggY2I4MTk1Yy4uNzRjZDRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZW1lbnNfbXBpLmMKQEAgLTQyLDYgKzQyLDcgQEAKIAkJLm5hbWUgPQkJInNpZW1lbnNfbXBpIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmc2llbWVuc191c2JfbXBpX2RyaXZlciwKIAkubnVtX3BvcnRzID0JCTEsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKaW5kZXggNzQ4MWZmOC4uMDQ1NzgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYwpAQCAtMzAxLDYgKzMwMSw5IEBACiAJeyBVU0JfREVWSUNFKDB4MTE5OSwgMHg2OEEzKSwgCS8qIFNpZXJyYSBXaXJlbGVzcyBEaXJlY3QgSVAgbW9kZW1zICovCiAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmRpcmVjdF9pcF9pbnRlcmZhY2VfYmxhY2tsaXN0CiAJfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZjNkLCAweDY4QTMpLCAJLyogQWlycHJpbWUvU2llcnJhIFdpcmVsZXNzIERpcmVjdCBJUCBtb2RlbXMgKi8KKwkgIC5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZGlyZWN0X2lwX2ludGVyZmFjZV9ibGFja2xpc3QKKwl9LAogICAgICAgIHsgVVNCX0RFVklDRSgweDQxM0MsIDB4MDgxMzMpIH0sIC8qIERlbGwgQ29tcHV0ZXIgQ29ycC4gV2lyZWxlc3MgNTcyMCBWWlcgTW9iaWxlIEJyb2FkYmFuZCAoRVZETyBSZXYtQSkgTWluaWNhcmQgR1BTIFBvcnQgKi8KIAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKaW5kZXggNzY1YWE5OC4uY2JmYjcwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAogLyogaG93IGNvbWUgPz8/ICovCiAjZGVmaW5lIFVBUlRfU1RBVEUJCQkweDA4Ci0jZGVmaW5lIFVBUlRfU1RBVEVfVFJBTlNJRU5UX01BU0sJMHg3NAorI2RlZmluZSBVQVJUX1NUQVRFX1RSQU5TSUVOVF9NQVNLCTB4NzUKICNkZWZpbmUgVUFSVF9EQ0QJCQkweDAxCiAjZGVmaW5lIFVBUlRfRFNSCQkJMHgwMgogI2RlZmluZSBVQVJUX0JSRUFLX0VSUk9SCQkweDA0CkBAIC01MjUsNiArNTI1LDEwIEBACiAJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCisJCWlmIChzdGF0dXMgJiBVQVJUX0RDRCkKKwkJCXVzYl9zZXJpYWxfaGFuZGxlX2RjZF9jaGFuZ2UocG9ydCwgdHR5LAorCQkJCSAgIHByaXYtPmxpbmVfc3RhdHVzICYgTVNSX1NUQVRVU19MSU5FX0RDRCk7CiAJfQogCiAJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSwgdHR5X2ZsYWcsCkBAIC02NDUsNiArNjQ5LDcgQEAKIAkJLm5hbWUgPQkJIlNQQ1A4eDUiLAogCX0sCiAJLmlkX3RhYmxlCQk9IGlkX3RhYmxlLAorCS51c2JfZHJpdmVyCQk9ICZzcGNwOHg1X2RyaXZlciwKIAkubnVtX3BvcnRzCQk9IDEsCiAJLm9wZW4gCQkJPSBzcGNwOHg1X29wZW4sCiAJLmR0cl9ydHMJCT0gc3BjcDh4NV9kdHJfcnRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggYjI5MDJmMy4uYTkxMDAwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0zNjksOSArMzY5LDkgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IHRpX2V4aXQodm9pZCkKIHsKKwl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CiAJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ0aV8xcG9ydF9kZXZpY2UpOwogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmdGlfMnBvcnRfZGV2aWNlKTsKLQl1c2JfZGVyZWdpc3RlcigmdGlfdXNiX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKaW5kZXggNjk1NGRlNS4uNTQ2YTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCkBAIC0xMzQ0LDExICsxMzQ0LDE1IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJZml4dXBfZ2VuZXJpYyhkcml2ZXIpOwotCWlmIChkcml2ZXItPnVzYl9kcml2ZXIpCi0JCWRyaXZlci0+dXNiX2RyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQgPSAxOwogCiAJaWYgKCFkcml2ZXItPmRlc2NyaXB0aW9uKQogCQlkcml2ZXItPmRlc2NyaXB0aW9uID0gZHJpdmVyLT5kcml2ZXIubmFtZTsKKwlpZiAoIWRyaXZlci0+dXNiX2RyaXZlcikgeworCQlXQVJOKDEsICJTZXJpYWwgZHJpdmVyICVzIGhhcyBubyB1c2JfZHJpdmVyXG4iLAorCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZHJpdmVyLT51c2JfZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCA9IDE7CiAKIAkvKiBBZGQgdGhpcyBkZXZpY2UgdG8gb3VyIGxpc3Qgb2YgZGV2aWNlcyAqLwogCW11dGV4X2xvY2soJnRhYmxlX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCmluZGV4IGYyZWQ2YTMuLjk1YTgyMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKQEAgLTc1LDYgKzc1LDcgQEAKIAkJLm5hbWUgPQkJImRlYnVnIiwKIAl9LAogCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmZGVidWdfZHJpdmVyLAogCS5udW1fcG9ydHMgPQkJMSwKIAkuYnVsa19vdXRfc2l6ZSA9CVVTQl9ERUJVR19NQVhfUEFDS0VUX1NJWkUsCiAJLmJyZWFrX2N0bCA9CQl1c2JfZGVidWdfYnJlYWtfY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl93d2FuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYwppbmRleCBiMDA0YjJhLi45YzAxNGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX3d3YW4uYwpAQCAtMjk1LDEyICsyOTUsMTUgQEAKIAkJICAgIF9fZnVuY19fLCBzdGF0dXMsIGVuZHBvaW50KTsKIAl9IGVsc2UgewogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKLQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQl9IGVsc2UKLQkJCWRiZygiJXM6IGVtcHR5IHJlYWQgdXJiIHJlY2VpdmVkIiwgX19mdW5jX18pOwotCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJaWYgKHR0eSkgeworCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLAorCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJfSBlbHNlCisJCQkJZGJnKCIlczogZW1wdHkgcmVhZCB1cmIgcmVjZWl2ZWQiLCBfX2Z1bmNfXyk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdmlzb3IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCmluZGV4IDE1YTVkODkuLjFjMTE5NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAjaW5jbHVkZSAidmlzb3IuaCIKIAogLyoKQEAgLTQ3OSw2ICs0ODAsMTcgQEAKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwkvKgorCSAqIHNvbWUgU2Ftc3VuZyBBbmRyb2lkIHBob25lcyBpbiBtb2RlbSBtb2RlIGhhdmUgdGhlIHNhbWUgSUQKKwkgKiBhcyBTUEgtSTUwMCwgYnV0IHRoZXkgYXJlIEFDTSBkZXZpY2VzLCBzbyBkb250IGJpbmQgdG8gdGhlbQorCSAqLworCWlmIChpZC0+aWRWZW5kb3IgPT0gU0FNU1VOR19WRU5ET1JfSUQgJiYKKwkJaWQtPmlkUHJvZHVjdCA9PSBTQU1TVU5HX1NQSF9JNTAwX0lEICYmCisJCXNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcyA9PSBVU0JfQ0xBU1NfQ09NTSAmJgorCQlzZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5iRGV2aWNlU3ViQ2xhc3MgPT0KKwkJCVVTQl9DRENfU1VCQ0xBU1NfQUNNKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChzZXJpYWwtPmRldi0+YWN0Y29uZmlnLT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWUgIT0gMSkgewogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LCAiYWN0aXZlIGNvbmZpZyAjJWQgIT0gMSA/P1xuIiwKIAkJCXNlcmlhbC0+ZGV2LT5hY3Rjb25maWctPmRlc2MuYkNvbmZpZ3VyYXRpb25WYWx1ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2N5cHJlc3MuaAppbmRleCBjODU0ZmRlLi4yYzg1NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfY3lwcmVzcy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9jeXByZXNzLmgKQEAgLTMxLDQgKzMxLDkgQEAKIAkJIkN5cHJlc3MgSVNELTMwMExQIiwKIAkJVVNCX1NDX0NZUF9BVEFDQiwgVVNCX1BSX0RFVklDRSwgTlVMTCwgMCksCiAKK1VOVVNVQUxfREVWKCAweDE0Y2QsIDB4NjExNiwgMHgwMDAwLCAweDk5OTksCisJCSJTdXBlciBUb3AiLAorCQkiVVNCIDIuMCAgU0FUQSBCUklER0UiLAorCQlVU0JfU0NfQ1lQX0FUQUNCLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IpIHx8IC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggZmNjMWUzMi4uYzE2MDJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMDQ0LDYgKzEwNDQsMTUgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfQlVMSzMyKSwKIAorLyogUmVwb3J0ZWQgYnkgPHR0a3NwYW1AZnJlZS5mcj4KKyAqIFRoZSBkZXZpY2UgcmVwb3J0cyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgY2xhc3MsIHJlcXVpcmluZyBhbgorICogZXhwbGljaXQgdmVuZG9yL3Byb2R1Y3QgbWF0Y2guCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwODUxLCAweDE1NDIsIDB4MDAwMiwgMHgwMDAyLAorCQkiTWFnaWNQaXhlbCIsCisJCSJGV19PbWVnYTIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLCAwKSwKKwogLyogQW5kcmV3IEx1bm4gPGFuZHJld0BsdW5uLmNoPgogICogUGFuRGlnaXRhbCBEaWdpdGFsIFBpY3R1cmUgRnJhbWUuIERvZXMgbm90IGxpa2UgQUxMT1dfTUVESVVNX1JFTU9WQUwKICAqIG9uIExVTiA0LgpAQCAtMTM4OCw2ICsxMzk3LDEzIEBACiAJCVVTQl9TQ19ERVZJQ0UsIFVTQl9QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCiAKKy8qIFN1Ym1pdHRlZCBieSBOaWNrIEhvbGxvd2F5ICovCitVTlVTVUFMX0RFViggMHgwZjg4LCAweDA0MmUsIDB4MDEwMCwgMHgwMTAwLAorCQkiVlRlY2giLAorCQkiS2lkaXpvb20iLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9GSVhfQ0FQQUNJVFkgKSwKKwogLyogUmVwb3J0ZWQgYnkgTWljaGFlbCBTdGF0dG1hbm4gPG1pY2hhZWxAc3RhdHRtYW5uLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGQwMDgsIDB4MDAwMCwgMHgwMDAwLAogCQkiU29ueSBFcmljc3NvbiIsCkBAIC0xODcyLDYgKzE4ODgsMjIgQEAKIAkJVVNCX1NDX0RFVklDRSwgVVNCX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fUkVBRF9ESVNDX0lORk8gKSwKIAorLyogUGF0Y2ggYnkgUmljaGFyZCBTY2j8dHogPHIuc2NodHpAdC1vbmxpbmUuZGU+CisgKiBUaGlzIGV4dGVybmFsIGhhcmQgZHJpdmUgZW5jbG9zdXJlIHVzZXMgYSBKTWljcm9uIGNoaXAgd2hpY2gKKyAqIG5lZWRzIHRoZSBVU19GTF9JR05PUkVfUkVTSURVRSBmbGFnIHRvIHdvcmsgcHJvcGVybHkuICovCitVTlVTVUFMX0RFViggIDB4MWU2OCwgMHgwMDFiLCAweDAwMDAsIDB4MDAwMCwKKwkJIlRyZWtTdG9yIEdtYkggJiBDby4gS0ciLAorCQkiRGF0YVN0YXRpb24gbWF4aSBnLnUiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX1NBTkVfU0VOU0UgKSwKKworLyogUmVwb3J0ZWQgYnkgSmFzcGVyIE1hY2tlbnppZSA8c2NhcmxldHBpbXBlcm5hbEBob3RtYWlsLmNvbT4gKi8KK1VOVVNVQUxfREVWKCAweDFlNzQsIDB4NDYyMSwgMHgwMDAwLCAweDAwMDAsCisJCSJDb2J5IEVsZWN0cm9uaWNzIiwKKwkJIk1QMyBQbGF5ZXIiLAorCQlVU0JfU0NfREVWSUNFLCBVU0JfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9CVUxLX0lHTk9SRV9UQUcgfCBVU19GTF9NQVhfU0VDVE9SU182NCApLAorCiBVTlVTVUFMX0RFViggMHgyMTE2LCAweDAzMjAsIDB4MDAwMSwgMHgwMDAxLAogCQkiU1QiLAogCQkiMkEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKaW5kZXggOWIzY2ExMC4uZjYxNmNlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aG9zdC9uZXQuYworKysgYi9kcml2ZXJzL3Zob3N0L25ldC5jCkBAIC0xMjgsOCArMTI4LDcgQEAKIAlzaXplX3QgaGRyX3NpemU7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAotCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/Ci0JICogTm90IHN1cmUgaXQncyB3b3J0aCBpdCwgaXQncyBzdHJhaWdodC1mb3J3YXJkIGVub3VnaC4gKi8KKwkvKiBUT0RPOiBjaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIGZyb20gdmhvc3Rfd29ya2VyPyAqLwogCXNvY2sgPSByY3VfZGVyZWZlcmVuY2VfY2hlY2sodnEtPnByaXZhdGVfZGF0YSwgMSk7CiAJaWYgKCFzb2NrKQogCQlyZXR1cm47CkBAIC0zMDYsNyArMzA1LDggQEAKIAlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOwogCWludCBlcnI7CiAJc2l6ZV90IGhkcl9zaXplOwotCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJLyogVE9ETzogY2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyBmcm9tIHZob3N0X3dvcmtlcj8gKi8KKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlX2NoZWNrKHZxLT5wcml2YXRlX2RhdGEsIDEpOwogCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJcmV0dXJuOwogCkBAIC00MTUsNyArNDE1LDggQEAKIAlpbnQgZXJyLCBoZWFkY291bnQ7CiAJc2l6ZV90IHZob3N0X2hsZW4sIHNvY2tfaGxlbjsKIAlzaXplX3Qgdmhvc3RfbGVuLCBzb2NrX2xlbjsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHZxLT5wcml2YXRlX2RhdGEpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXI/ICovCisJc3RydWN0IHNvY2tldCAqc29jayA9IHJjdV9kZXJlZmVyZW5jZV9jaGVjayh2cS0+cHJpdmF0ZV9kYXRhLCAxKTsKIAlpZiAoIXNvY2sgfHwgc2tiX3F1ZXVlX2VtcHR5KCZzb2NrLT5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5oIGIvZHJpdmVycy92aG9zdC92aG9zdC5oCmluZGV4IDJhZjQ0YjcuLmIzMzYzYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaAorKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKQEAgLTE3Myw5ICsxNzMsOSBAQAogewogCXVuc2lnbmVkIGFja2VkX2ZlYXR1cmVzOwogCi0JYWNrZWRfZmVhdHVyZXMgPQotCQlyY3VfZGVyZWZlcmVuY2VfaW5kZXhfY2hlY2soZGV2LT5hY2tlZF9mZWF0dXJlcywKLQkJCQkJICAgIGxvY2tkZXBfaXNfaGVsZCgmZGV2LT5tdXRleCkpOworCS8qIFRPRE86IGNoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgZnJvbSB2aG9zdF93b3JrZXIgb3IgZGV2IG11dGV4IGlzCisJICogaGVsZD8gKi8KKwlhY2tlZF9mZWF0dXJlcyA9IHJjdV9kZXJlZmVyZW5jZV9pbmRleF9jaGVjayhkZXYtPmFja2VkX2ZlYXR1cmVzLCAxKTsKIAlyZXR1cm4gYWNrZWRfZmVhdHVyZXMgJiAoMSA8PCBiaXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL2Fya2ZiLmMKaW5kZXggZDU4M2JlYS4uMzkxYWM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hcmtmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXJrZmIuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N2Z2EuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4gLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPHZpZGVvL3ZnYS5oPgogCiAjaWZkZWYgQ09ORklHX01UUlIKQEAgLTEwOTEsMTIgKzEwOTEsMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInN1c3BlbmRcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgcGNpX2Nob29zZV9zdGF0ZShkZXYsIHN0YXRlKSk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTIyLDcgKzExMjIsNyBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAicmVzdW1lXG4iKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAltdXRleF9sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKIAogCWlmIChwYXItPnJlZl9jb3VudCA9PSAwKQpAQCAtMTE0MSw3ICsxMTQxLDcgQEAKIAogZmFpbDoKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCmluZGV4IGRkOWRlMmUuLjRjYjZhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYwpAQCAtMTg2MCwxMSArMTg2MCwxMSBAQAogewogICAgICAgICBzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIgPSBkYXRhOwogCi0JaWYgKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpCisJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJcmV0dXJuOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBhci0+cGRldik7CiAJYXR5MTI4X2RvX3Jlc3VtZShwYXItPnBkZXYpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfUE1BQyAqLwogCkBAIC0yNDM4LDcgKzI0MzgsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgImF0eTEyOGZiOiBzdXNwZW5kaW5nLi4uXG4iKTsKIAkKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjQ3MCw3ICsyNDcwLDcgQEAKIAlpZiAoc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04pCiAJCWF0eTEyOF9zZXRfc3VzcGVuZChwYXIsIDEpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIApAQCAtMjUyNyw5ICsyNTI3LDkgQEAKIHsKIAlpbnQgcmM7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmMgPSBhdHkxMjhfZG9fcmVzdW1lKHBkZXYpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCmluZGV4IDc2N2FiNGYuLjk0ZTI5M2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKQEAgLTIwNjksNyArMjA2OSw3IEBACiAJaWYgKHN0YXRlLmV2ZW50ID09IHBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAKIAlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKIApAQCAtMjA5NywxNCArMjA5NywxNCBAQAogCQlwYXItPmxvY2tfYmxhbmsgPSAwOwogCQlhdHlmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKIAkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogI2Vsc2UKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKICNlbmRpZgogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKIApAQCAtMjEzMyw3ICsyMTMzLDcgQEAKIAlpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX09OKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCS8qCiAJICogUENJIHN0YXRlIHdpbGwgaGF2ZSBiZWVuIHJlc3RvcmVkIGJ5IHRoZSBjb3JlLCBzbwpAQCAtMjE2MSw3ICsyMTYxLDcgQEAKIAlwYXItPmxvY2tfYmxhbmsgPSAwOwogCWF0eWZiX2JsYW5rKEZCX0JMQU5LX1VOQkxBTkssIGluZm8pOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCmluZGV4IGM0ZTE3NjQuLjkyYmRhNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCkBAIC0yNjI2LDcgKzI2MjYsNyBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKQEAgLTI2OTAsNyArMjY5MCw3IEBACiAJaWYgKHJpbmZvLT5wbV9tb2RlICYgcmFkZW9uX3BtX2QyKQogCQlyYWRlb25fc2V0X3N1c3BlbmQocmluZm8sIDEpOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKICBkb25lOgogCXBkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IG1lc2c7CkBAIC0yNzE1LDEwICsyNzE1LDEwIEBACiAJCXJldHVybiAwOwogCiAJaWYgKHJpbmZvLT5ub19zY2hlZHVsZSkgewotCQlpZiAodHJ5X2FjcXVpcmVfY29uc29sZV9zZW0oKSkKKwkJaWYgKCFjb25zb2xlX3RyeWxvY2soKSkKIAkJCXJldHVybiAwOwogCX0gZWxzZQotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiICglcyk6IHJlc3VtaW5nIGZyb20gc3RhdGU6ICVkLi4uXG4iLAogCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50KTsKQEAgLTI3ODMsNyArMjc4Myw3IEBACiAJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAogIGJhaWw6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbHR2MzUwcXYuYwppbmRleCA4MDEwYWFlLi5kZDBlODRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sdHYzNTBxdi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2x0djM1MHF2LmMKQEAgLTIzOSwxMSArMjM5LDE1IEBACiAJbGNkLT5zcGkgPSBzcGk7CiAJbGNkLT5wb3dlciA9IEZCX0JMQU5LX1BPV0VSRE9XTjsKIAlsY2QtPmJ1ZmZlciA9IGt6YWxsb2MoOCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsY2QtPmJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2xjZDsKKwl9CiAKIAlsZCA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoImx0djM1MHF2IiwgJnNwaS0+ZGV2LCBsY2QsICZsdHZfb3BzKTsKIAlpZiAoSVNfRVJSKGxkKSkgewogCQlyZXQgPSBQVFJfRVJSKGxkKTsKLQkJZ290byBvdXRfZnJlZV9sY2Q7CisJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCX0KIAlsY2QtPmxkID0gbGQ7CiAKQEAgLTI1Nyw2ICsyNjEsOCBAQAogCiBvdXRfdW5yZWdpc3RlcjoKIAlsY2RfZGV2aWNlX3VucmVnaXN0ZXIobGQpOworb3V0X2ZyZWVfYnVmZmVyOgorCWtmcmVlKGxjZC0+YnVmZmVyKTsKIG91dF9mcmVlX2xjZDoKIAlrZnJlZShsY2QpOwogCXJldHVybiByZXQ7CkBAIC0yNjgsNiArMjc0LDcgQEAKIAogCWx0djM1MHF2X3Bvd2VyKGxjZCwgRkJfQkxBTktfUE9XRVJET1dOKTsKIAlsY2RfZGV2aWNlX3VucmVnaXN0ZXIobGNkLT5sZCk7CisJa2ZyZWUobGNkLT5idWZmZXIpOwogCWtmcmVlKGxjZCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYyBiL2RyaXZlcnMvdmlkZW8vYmY1MzctbHEwMzUuYwppbmRleCAxOGM1MDc4Li40N2MyMWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmNTM3LWxxMDM1LmMKKysrIGIvZHJpdmVycy92aWRlby9iZjUzNy1scTAzNS5jCkBAIC02OTYsNiArNjk2LDcgQEAKIHsKIAlzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcHJvcHM7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWludCByZXQ7CiAKIAlpZiAocmVxdWVzdF9kbWEoQ0hfUFBJLCBLQlVJTERfTU9ETkFNRSkpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCByZXF1ZXN0IFBQSSBETUFcbiIpOwpAQCAtNzA0LDE3ICs3MDUsMTYgQEAKIAogCWlmIChyZXF1ZXN0X3BvcnRzKCkpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCByZXF1ZXN0IGdwaW8gcG9ydFxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dF9wb3J0czsKIAl9CiAKIAlmYl9idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsCiAJCQkJICAgICAgICZkbWFfaGFuZGxlLCBHRlBfS0VSTkVMKTsKIAlpZiAoZmJfYnVmZmVyID09IE5VTEwpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBkbWEgYnVmZmVyXG4iKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJZnJlZV9wb3J0cygpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfZG1hX2NvaGVyZW50OwogCX0KIAogCWlmIChMMV9EQVRBX0FfTEVOR1RIKQpAQCAtNzI1LDEwICs3MjUsOCBAQAogCiAJaWYgKGRtYV9kZXNjX3RhYmxlID09IE5VTEwpIHsKIAkJcHJfZXJyKCJjb3VsZG4ndCBhbGxvY2F0ZSBkbWEgZGVzY3JpcHRvclxuIik7Ci0JCWZyZWVfZG1hKENIX1BQSSk7Ci0JCWZyZWVfcG9ydHMoKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF90YWJsZTsKIAl9CiAKIAliZmluX2xxMDM1X2ZiLnNjcmVlbl9iYXNlID0gKHZvaWQgKilmYl9idWZmZXI7CkBAIC03NzEsMzEgKzc2OSwyMSBAQAogCWJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUgPSBremFsbG9jKHNpemVvZih1MzIpICogMTYsIEdGUF9LRVJORUwpOwogCWlmIChiZmluX2xxMDM1X2ZiLnBzZXVkb19wYWxldHRlID09IE5VTEwpIHsKIAkJcHJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgcHNldWRvX3BhbGV0dGVcbiIpOwotCQlmcmVlX2RtYShDSF9QUEkpOwotCQlmcmVlX3BvcnRzKCk7Ci0JCWRtYV9mcmVlX2NvaGVyZW50KE5VTEwsIFRPVEFMX1ZJREVPX01FTV9TSVpFLCBmYl9idWZmZXIsIDApOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcGFsZXR0ZTsKIAl9CiAKIAlpZiAoZmJfYWxsb2NfY21hcCgmYmZpbl9scTAzNV9mYi5jbWFwLCBOQlJfUEFMRVRURSwgMCkgPCAwKSB7CiAJCXByX2VycigiZmFpbGVkIHRvIGFsbG9jYXRlIGNvbG9ybWFwICglZCBlbnRyaWVzKVxuIiwKIAkJCU5CUl9QQUxFVFRFKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJZnJlZV9wb3J0cygpOwotCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKLQkJa2ZyZWUoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSk7Ci0JCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dF9jbWFwOwogCX0KIAogCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYmZpbl9scTAzNV9mYikgPCAwKSB7CiAJCXByX2VycigidW5hYmxlIHRvIHJlZ2lzdGVyIGZyYW1lYnVmZmVyXG4iKTsKLQkJZnJlZV9kbWEoQ0hfUFBJKTsKLQkJZnJlZV9wb3J0cygpOwotCQlkbWFfZnJlZV9jb2hlcmVudChOVUxMLCBUT1RBTF9WSURFT19NRU1fU0laRSwgZmJfYnVmZmVyLCAwKTsKLQkJZmJfYnVmZmVyID0gTlVMTDsKLQkJa2ZyZWUoYmZpbl9scTAzNV9mYi5wc2V1ZG9fcGFsZXR0ZSk7Ci0JCWZiX2RlYWxsb2NfY21hcCgmYmZpbl9scTAzNV9mYi5jbWFwKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3JlZzsKIAl9CiAKIAlpMmNfYWRkX2RyaXZlcigmYWQ1MjgwX2RyaXZlcik7CkBAIC04MDcsMTEgKzc5NSwzMSBAQAogCiAJbGNkX2RldiA9IGxjZF9kZXZpY2VfcmVnaXN0ZXIoS0JVSUxEX01PRE5BTUUsICZwZGV2LT5kZXYsIE5VTEwsCiAJCQkJICAgICAgJmJmaW5fbGNkX29wcyk7CisJaWYgKElTX0VSUihsY2RfZGV2KSkgeworCQlwcl9lcnIoInVuYWJsZSB0byByZWdpc3RlciBsY2RcbiIpOworCQlyZXQgPSBQVFJfRVJSKGxjZF9kZXYpOworCQlnb3RvIG91dF9sY2Q7CisJfQogCWxjZF9kZXYtPnByb3BzLm1heF9jb250cmFzdCA9IDI1NSwKIAogCXByX2luZm8oImluaXRpYWxpemVkIik7CiAKIAlyZXR1cm4gMDsKK291dF9sY2Q6CisJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmYmZpbl9scTAzNV9mYik7CitvdXRfcmVnOgorCWZiX2RlYWxsb2NfY21hcCgmYmZpbl9scTAzNV9mYi5jbWFwKTsKK291dF9jbWFwOgorCWtmcmVlKGJmaW5fbHEwMzVfZmIucHNldWRvX3BhbGV0dGUpOworb3V0X3BhbGV0dGU6CitvdXRfdGFibGU6CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgVE9UQUxfVklERU9fTUVNX1NJWkUsIGZiX2J1ZmZlciwgMCk7CisJZmJfYnVmZmVyID0gTlVMTDsKK291dF9kbWFfY29oZXJlbnQ6CisJZnJlZV9wb3J0cygpOworb3V0X3BvcnRzOgorCWZyZWVfZG1hKENIX1BQSSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgYmZpbl9scTAzNV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY2hpcHNmYi5jIGIvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKaW5kZXggZDYzN2UxZi4uY2ZmNzQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9jaGlwc2ZiLmMKQEAgLTQ2MCwxMCArNDYwLDEwIEBACiAJaWYgKCEoc3RhdGUuZXZlbnQgJiBQTV9FVkVOVF9TTEVFUCkpCiAJCWdvdG8gZG9uZTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAljaGlwc2ZiX2JsYW5rKDEsIHApOwogCWZiX3NldF9zdXNwZW5kKHAsIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogIGRvbmU6CiAJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gc3RhdGU7CiAJcmV0dXJuIDA7CkBAIC00NzMsMTAgKzQ3MywxMCBAQAogewogICAgICAgICBzdHJ1Y3QgZmJfaW5mbyAqcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChwLCAwKTsKIAljaGlwc2ZiX2JsYW5rKDAsIHApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggN2NjYzk2Ny4uOWMwOTJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTM3NSwxNCArMzc1LDE0IEBACiAJaW50IGM7CiAJaW50IG1vZGU7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKG9wcyAmJiBvcHMtPmN1cnJjb24gIT0gLTEpCiAJCXZjID0gdmNfY29uc1tvcHMtPmN1cnJjb25dLmQ7CiAKIAlpZiAoIXZjIHx8ICFDT05fSVNfVklTSUJMRSh2YykgfHwKICAJICAgIHJlZ2lzdGVyZWRfZmJbY29uMmZiX21hcFt2Yy0+dmNfbnVtXV0gIT0gaW5mbyB8fAogCSAgICB2Yy0+dmNfZGVjY20gIT0gMSkgewotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTM5Miw3ICszOTIsNyBAQAogCQlDTV9FUkFTRSA6IENNX0RSQVc7CiAJb3BzLT5jdXJzb3IodmMsIGluZm8sIG1vZGUsIHNvZnRiYWNrX2xpbmVzLCBnZXRfY29sb3IodmMsIGluZm8sIGMsIDEpLAogCQkgICAgZ2V0X2NvbG9yKHZjLCBpbmZvLCBjLCAwKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGN1cnNvcl90aW1lcl9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGV2X2FkZHIpCkBAIC04MzYsNyArODM2LDcgQEAKIAogCWZvdW5kID0gc2VhcmNoX2ZiX2luX21hcChuZXdpZHgpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbjJmYl9tYXBbdW5pdF0gPSBuZXdpZHg7CiAJaWYgKCFlcnIgJiYgIWZvdW5kKQogIAkJZXJyID0gY29uMmZiX2FjcXVpcmVfbmV3aW5mbyh2YywgaW5mbywgdW5pdCwgb2xkaWR4KTsKQEAgLTg2Myw3ICs4NjMsNyBAQAogCWlmICghc2VhcmNoX2ZiX2luX21hcChpbmZvX2lkeCkpCiAJCWluZm9faWR4ID0gbmV3aWR4OwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAgCXJldHVybiBlcnI7CiB9CiAKQEAgLTMzMjEsNyArMzMyMSw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiBjb3VudDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTMzMzEsNyArMzMzMSw3IEBACiAJcm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKIAlmYmNvbl9yb3RhdGUoaW5mbywgcm90YXRlKTsKIGVycjoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTMzNDYsNyArMzM0Niw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiBjb3VudDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTMzNTYsNyArMzM1Niw3IEBACiAJcm90YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBsYXN0LCAwKTsKIAlmYmNvbl9yb3RhdGVfYWxsKGluZm8sIHJvdGF0ZSk7CiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMzY5LDcgKzMzNjksNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTMzNzgsNyArMzM3OCw3IEBACiAJaW5mbyA9IHJlZ2lzdGVyZWRfZmJbaWR4XTsKIAlyb3RhdGUgPSBmYmNvbl9nZXRfcm90YXRlKGluZm8pOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCByb3RhdGUpOwogfQogCkBAIC0zMzkyLDcgKzMzOTIsNyBAQAogCWlmIChmYmNvbl9oYXNfZXhpdGVkKQogCQlyZXR1cm4gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTM0MDYsNyArMzQwNiw3IEBACiAKIAlibGluayA9IChvcHMtPmZsYWdzICYgRkJDT05fRkxBR1NfQ1VSU09SX1RJTUVSKSA/IDEgOiAwOwogZXJyOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCBibGluayk7CiB9CiAKQEAgLTM0MjEsNyArMzQyMSw3IEBACiAJaWYgKGZiY29uX2hhc19leGl0ZWQpCiAJCXJldHVybiBjb3VudDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZHggPSBjb24yZmJfbWFwW2ZnX2NvbnNvbGVdOwogCiAJaWYgKGlkeCA9PSAtMSB8fCByZWdpc3RlcmVkX2ZiW2lkeF0gPT0gTlVMTCkKQEAgLTM0NDMsNyArMzQ0Myw3IEBACiAJfQogCiBlcnI6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zNDgyLDcgKzM0ODIsNyBAQAogCWlmIChudW1fcmVnaXN0ZXJlZF9mYikgewogCQlpbnQgaTsKIAotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBGQl9NQVg7IGkrKykgewogCQkJaWYgKHJlZ2lzdGVyZWRfZmJbaV0gIT0gTlVMTCkgewpAQCAtMzQ5MSw3ICszNDkxLDcgQEAKIAkJCX0KIAkJfQogCi0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJZmJjb25fdGFrZW92ZXIoMCk7CiAJfQogfQpAQCAtMzU1Miw3ICszNTUyLDcgQEAKIHsKIAlpbnQgaTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKIAlmYmNvbl9kZXZpY2UgPSBkZXZpY2VfY3JlYXRlKGZiX2NsYXNzLCBOVUxMLCBNS0RFVigwLCAwKSwgTlVMTCwKIAkJCQkgICAgICJmYmNvbiIpOwpAQCAtMzU2OCw3ICszNTY4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX0NPTlNPTEVTOyBpKyspCiAJCWNvbjJmYl9tYXBbaV0gPSAtMTsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWZiY29uX3N0YXJ0KCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zNTkxLDEyICszNTkxLDEyIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmYl9jb25zb2xlX2V4aXQodm9pZCkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfdW5yZWdpc3Rlcl9jbGllbnQoJmZiY29uX2V2ZW50X25vdGlmaWVyKTsKIAlmYmNvbl9kZWluaXRfZGV2aWNlKCk7CiAJZGV2aWNlX2Rlc3Ryb3koZmJfY2xhc3MsIE1LREVWKDAsIDApKTsKIAlmYmNvbl9leGl0KCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJdW5yZWdpc3Rlcl9jb25fZHJpdmVyKCZmYl9jb24pOwogfQkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCmluZGV4IGM5NzQ5MWIuLjkxNWZkNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKQEAgLTIwMiwxMSArMjAyLDcgQEAKIAl9CiB9CiAKLS8qCi0gKiBDYWxsZWQgb25seSBkdWluZyBpbml0IHNvIGNhbGwgb2YgYWxsb2NfYm9vdG1lbiBpcyBvay4KLSAqIE1hcmtlZCBfX2luaXRfcmVmb2sgdG8gc2lsZW5jZSBtb2Rwb3N0LgotICovCi1zdGF0aWMgdm9pZCBfX2luaXRfcmVmb2sgdmdhY29uX3Njcm9sbGJhY2tfc3RhcnR1cCh2b2lkKQorc3RhdGljIHZvaWQgdmdhY29uX3Njcm9sbGJhY2tfc3RhcnR1cCh2b2lkKQogewogCXZnYWNvbl9zY3JvbGxiYWNrID0ga2NhbGxvYyhDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDS19TSVpFLCAxMDI0LCBHRlBfTk9XQUlUKTsKIAl2Z2Fjb25fc2Nyb2xsYmFja19pbml0KHZnYV92aWRlb19udW1fY29sdW1ucyAqIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jIGIvZHJpdmVycy92aWRlby9kYTh4eC1mYi5jCmluZGV4IGMyNjVhZWQuLjhkNjFlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZGE4eHgtZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2RhOHh4LWZiLmMKQEAgLTEwOTIsOSArMTA5MiwxMCBAQAogCiBpcnFfZnJlcToKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlsY2RfZGE4eHhfY3B1ZnJlcV9kZXJlZ2lzdGVyKHBhcik7CisjZW5kaWYKIGVycl9jcHVfZnJlcToKIAl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGRhOHh4X2ZiX2luZm8pOwotI2VuZGlmCiAKIGVycl9kZWFsbG9jX2NtYXA6CiAJZmJfZGVhbGxvY19jbWFwKCZkYTh4eF9mYl9pbmZvLT5jbWFwKTsKQEAgLTExMzAsMTQgKzExMzEsMTQgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGRhOHh4X2ZiX3BhciAqcGFyID0gaW5mby0+cGFyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmIChwYXItPnBhbmVsX3Bvd2VyX2N0cmwpCiAJCXBhci0+cGFuZWxfcG93ZXJfY3RybCgwKTsKIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDEpOwogCWxjZF9kaXNhYmxlX3Jhc3RlcigpOwogCWNsa19kaXNhYmxlKHBhci0+bGNkY19jbGspOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTQ2LDE0ICsxMTQ3LDE0IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCBkYTh4eF9mYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAocGFyLT5wYW5lbF9wb3dlcl9jdHJsKQogCQlwYXItPnBhbmVsX3Bvd2VyX2N0cmwoMSk7CiAKIAljbGtfZW5hYmxlKHBhci0+bGNkY19jbGspOwogCWxjZF9lbmFibGVfcmFzdGVyKCk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCA0YWMxMjAxLi5lMmJmOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC0xMDM2LDExICsxMDM2LDExIEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCQlyZXQgPSBmYl9zZXRfdmFyKGluZm8sICZ2YXIpOwogCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXVubG9ja19mYl9pbmZvKGluZm8pOwogCQlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQogCQkJcmV0ID0gLUVGQVVMVDsKQEAgLTEwNzIsOSArMTA3Miw5IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJaWYgKCFsb2NrX2ZiX2luZm8oaW5mbykpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJcmV0ID0gZmJfcGFuX2Rpc3BsYXkoaW5mbywgJnZhcik7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJdW5sb2NrX2ZiX2luZm8oaW5mbyk7CiAJCWlmIChyZXQgPT0gMCAmJiBjb3B5X3RvX3VzZXIoYXJncCwgJnZhciwgc2l6ZW9mKHZhcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMTE5LDExICsxMTE5LDExIEBACiAJY2FzZSBGQklPQkxBTks6CiAJCWlmICghbG9ja19mYl9pbmZvKGluZm8pKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJcmV0ID0gZmJfYmxhbmsoaW5mbywgYXJnKTsKIAkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQl1bmxvY2tfZmJfaW5mbyhpbmZvKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJzeXNmcy5jIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKaW5kZXggMGEwOGYxMy4uZjRhMzI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKKysrIGIvZHJpdmVycy92aWRlby9mYnN5c2ZzLmMKQEAgLTkwLDExICs5MCwxMSBAQAogCWludCBlcnI7CiAKIAl2YXItPmFjdGl2YXRlIHw9IEZCX0FDVElWQVRFX0ZPUkNFOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9pbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CiAJZXJyID0gZmJfc2V0X3ZhcihmYl9pbmZvLCB2YXIpOwogCWZiX2luZm8tPmZsYWdzICY9IH5GQklORk9fTUlTQ19VU0VSRVZFTlQ7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAlyZXR1cm4gMDsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCWlmIChpICogc2l6ZW9mKHN0cnVjdCBmYl92aWRlb21vZGUpICE9IGNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlsaXN0X3NwbGljZSgmZmJfaW5mby0+bW9kZWxpc3QsICZvbGRfbGlzdCk7CiAJZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0KChjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlICopYnVmLCBpLAogCQkJCSAmZmJfaW5mby0+bW9kZWxpc3QpOwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJfSBlbHNlCiAJCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJm9sZF9saXN0KTsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEsMTEgKzMwMSwxMSBAQAogCWNoYXIgKmxhc3QgPSBOVUxMOwogCWludCBlcnI7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfaW5mby0+ZmxhZ3MgfD0gRkJJTkZPX01JU0NfVVNFUkVWRU5UOwogCWVyciA9IGZiX2JsYW5rKGZiX2luZm8sIHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmxhc3QsIDApKTsKIAlmYl9pbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCXJldHVybiBjb3VudDsKQEAgLTM2NCw5ICszNjQsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl2YXIueW9mZnNldCA9IHNpbXBsZV9zdHJ0b3VsKGxhc3QsICZsYXN0LCAwKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAllcnIgPSBmYl9wYW5fZGlzcGxheShmYl9pbmZvLCAmdmFyKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwpAQCAtMzk5LDkgKzM5OSw5IEBACiAKIAlzdGF0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgJmxhc3QsIDApOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGZiX2luZm8sIChpbnQpc3RhdGUpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIGNvdW50OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYyBiL2RyaXZlcnMvdmlkZW8vZ2VvZGUvZ3hmYl9jb3JlLmMKaW5kZXggNzBiMWQ5ZC4uYjRmMTlkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nZW9kZS9neGZiX2NvcmUuYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2d4ZmJfY29yZS5jCkBAIC0zNDQsMTAgKzM0NCwxMCBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKLQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX2xvY2soKTsKIAkJZ3hfcG93ZXJkb3duKGluZm8pOwogCQlmYl9zZXRfc3VzcGVuZChpbmZvLCAxKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCX0KIAogCS8qIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gc2V0dGluZyBQQ0kgc3RhdGVzOyB3ZSBlbXVsYXRlIFBDSSwgc28KQEAgLTM2MSw3ICszNjEsNyBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCByZXQ7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJcmV0ID0gZ3hfcG93ZXJ1cChpbmZvKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZ3hmYjogIHBvd2VyIHVwIGZhaWxlZCFcbiIpOwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJfQogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL2x4ZmJfY29yZS5jCmluZGV4IDM5YmRiZWQuLjQxNjg1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvbHhmYl9jb3JlLmMKKysrIGIvZHJpdmVycy92aWRlby9nZW9kZS9seGZiX2NvcmUuYwpAQCAtNDY1LDEwICs0NjUsMTAgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9TVVNQRU5EKSB7Ci0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAJCWx4X3Bvd2VyZG93bihpbmZvKTsKIAkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAKIAkvKiB0aGVyZSdzIG5vIHBvaW50IGluIHNldHRpbmcgUENJIHN0YXRlczsgd2UgZW11bGF0ZSBQQ0ksIHNvCkBAIC00ODIsNyArNDgyLDcgQEAKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlpbnQgcmV0OwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCXJldCA9IGx4X3Bvd2VydXAoaW5mbyk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9FUlIgImx4ZmI6ICBwb3dlciB1cCBmYWlsZWQhXG4iKTsKQEAgLTQ5MCw3ICs0OTAsNyBAQAogCX0KIAogCWZiX3NldF9zdXNwZW5kKGluZm8sIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYyBiL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwX21haW4uYwppbmRleCA1NzQzZWEyLi4zMThmNmZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2k4MTAvaTgxMF9tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTBfbWFpbi5jCkBAIC0xNTc0LDcgKzE1NzQsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCkBAIC0xNTg3LDcgKzE1ODcsNyBAQAogCXBjaV9zYXZlX3N0YXRlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBtZXNnKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2MDUsNyArMTYwNSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKIAlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwogCkBAIC0xNjIxLDcgKzE2MjEsNyBAQAogCWZiX3NldF9zdXNwZW5kIChpbmZvLCAwKTsKIAlpbmZvLT5mYm9wcy0+ZmJfYmxhbmsoVkVTQV9OT19CTEFOS0lORywgaW5mbyk7CiBmYWlsOgotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jIGIvZHJpdmVycy92aWRlby9qejQ3NDBfZmIuYwppbmRleCA2NzBlY2FhLi5kZTM2NjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2p6NDc0MF9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vano0NzQwX2ZiLmMKQEAgLTc3OCw5ICs3NzgsOSBAQAogewogCXN0cnVjdCBqemZiICpqemZiID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoanpmYi0+ZmIsIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJbXV0ZXhfbG9jaygmanpmYi0+bG9jayk7CiAJaWYgKGp6ZmItPmlzX2VuYWJsZWQpCkBAIC04MDAsOSArODAwLDkgQEAKIAkJanpmYl9lbmFibGUoanpmYik7CiAJbXV0ZXhfdW5sb2NrKCZqemZiLT5sb2NrKTsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChqemZiLT5mYiwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbXgzZmIuYyBiL2RyaXZlcnMvdmlkZW8vbXgzZmIuYwppbmRleCBjYjAxMzkxLi43ZTNhNDkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL214M2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9teDNmYi5jCkBAIC0xMTc3LDkgKzExNzcsOSBAQAogCXN0cnVjdCBteDNmYl9kYXRhICpteDNmYiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBteDNmYl9pbmZvICpteDNfZmJpID0gbXgzZmItPmZiaS0+cGFyOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKG14M2ZiLT5mYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKG14M19mYmktPmJsYW5rID09IEZCX0JMQU5LX1VOQkxBTkspIHsKIAkJc2RjX2Rpc2FibGVfY2hhbm5lbChteDNfZmJpKTsKQEAgLTEyMDIsOSArMTIwMiw5IEBACiAJCXNkY19zZXRfYnJpZ2h0bmVzcyhteDNmYiwgbXgzZmItPmJhY2tsaWdodF9sZXZlbCk7CiAJfQogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKG14M2ZiLT5mYmksIDApOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmMKaW5kZXggNjI0OThiZC4uZjgzOGQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udWM5MDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYwpAQCAtNjk2LDYgKzY5Niw4IEBACiAJbnVjOTAwZmJfc3RvcF9sY2QoZmJpbmZvKTsKIAltc2xlZXAoMSk7CiAKKwl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaW5mbyk7CisJbnVjOTAwZmJfY3B1ZnJlcV9kZXJlZ2lzdGVyKGZiaSk7CiAJbnVjOTAwZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaW5mbyk7CiAKIAlpb3VubWFwKGZiaS0+aW8pOwpAQCAtNzIzLDcgKzcyNSw3IEBACiAJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG51YzkwMGZiX2luZm8gKmluZm8gPSBmYmluZm8tPnBhcjsKIAotCW51YzkwMGZiX3N0b3BfbGNkKCk7CisJbnVjOTAwZmJfc3RvcF9sY2QoZmJpbmZvKTsKIAltc2xlZXAoMSk7CiAJY2xrX2Rpc2FibGUoaW5mby0+Y2xrKTsKIAlyZXR1cm4gMDsKQEAgLTc0MCw3ICs3NDIsNyBAQAogCW1zbGVlcCgxKTsKIAogCW51YzkwMGZiX2luaXRfcmVnaXN0ZXJzKGZiaW5mbyk7Ci0JbnVjOTAwZmJfYWN0aXZhdGVfdmFyKGJmaW5mbyk7CisJbnVjOTAwZmJfYWN0aXZhdGVfdmFyKGZiaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKaW5kZXggZWZlMTBmZi4uMDgxZGM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZpZGlhLmMKQEAgLTEwNTcsNyArMTA1Nyw3IEBACiAKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQogCQltZXNnLmV2ZW50ID0gUE1fRVZFTlRfRlJFRVpFOwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwYXItPnBtX3N0YXRlID0gbWVzZy5ldmVudDsKIAogCWlmIChtZXNnLmV2ZW50ICYgUE1fRVZFTlRfU0xFRVApIHsKQEAgLTEwNzAsNyArMTA3MCw3IEBACiAJfQogCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gbWVzZzsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDc5LDcgKzEwNzksNyBAQAogCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IG52aWRpYV9wYXIgKnBhciA9IGluZm8tPnBhcjsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwKTsKIAogCWlmIChwYXItPnBtX3N0YXRlICE9IFBNX0VWRU5UX0ZSRUVaRSkgewpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAKIAludmlkaWFmYl9ibGFuayhGQl9CTEFOS19VTkJMQU5LLCBpbmZvKTsKIAogZmFpbDoKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BzM2ZiLmMKaW5kZXggOWMwMTQ0ZS4uNjU1NjBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHMzZmIuYwpAQCAtNTEzLDkgKzUxMyw5IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnBzM2ZiLmZfY291bnQpKSB7CiAJCWlmIChhdG9taWNfcmVhZCgmcHMzZmIuZXh0X2ZsaXApKSB7CiAJCQlhdG9taWNfc2V0KCZwczNmYi5leHRfZmxpcCwgMCk7Ci0JCQlpZiAoIXRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpIHsKKwkJCWlmIChjb25zb2xlX3RyeWxvY2soKSkgewogCQkJCXBzM2ZiX3N5bmMoaW5mbywgMCk7CS8qIHNpbmdsZSBidWZmZXIgKi8KLQkJCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCQkJY29uc29sZV91bmxvY2soKTsKIAkJCX0KIAkJfQogCX0KQEAgLTgzMCwxNCArODMwLDE0IEBACiAJCQlpZiAodm1vZGUpIHsKIAkJCQl2YXIgPSBpbmZvLT52YXI7CiAJCQkJZmJfdmlkZW9tb2RlX3RvX3ZhcigmdmFyLCB2bW9kZSk7Ci0JCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCQkJCWNvbnNvbGVfbG9jaygpOwogCQkJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJCQkvKiBGb3JjZSwgaW4gY2FzZSBvbmx5IHNwZWNpYWwgYml0cyBjaGFuZ2VkICovCiAJCQkJdmFyLmFjdGl2YXRlIHw9IEZCX0FDVElWQVRFX0ZPUkNFOwogCQkJCXBhci0+bmV3X21vZGVfaWQgPSB2YWw7CiAJCQkJcmV0dmFsID0gZmJfc2V0X3ZhcihpbmZvLCAmdmFyKTsKIAkJCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX01JU0NfVVNFUkVWRU5UOwotCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCQljb25zb2xlX3VubG9jaygpOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KQEAgLTg4MSw5ICs4ODEsOSBAQAogCQkJYnJlYWs7CiAKIAkJZGV2X2RiZyhpbmZvLT5kZXZpY2UsICJQUzNGQl9JT0NUTF9GU0VMOiVkXG4iLCB2YWwpOwotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlyZXR2YWwgPSBwczNmYl9zeW5jKGluZm8sIHZhbCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtOTAzLDkgKzkwMyw5IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmIChwczNmYi5pc19raWNrZWQpIHsKIAkJCXBzM2ZiLmlzX2tpY2tlZCA9IDA7Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCQljb25zb2xlX2xvY2soKTsKIAkJCXBzM2ZiX3N5bmMoaW5mbywgMCk7CS8qIHNpbmdsZSBidWZmZXIgKi8KLQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCX0KIAkJc2NoZWR1bGUoKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3B4YTE2OGZiLmMKaW5kZXggY2VhNjQwMy4uMzVmNjFkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9weGExNjhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhMTY4ZmIuYwpAQCAtNzAxLDE2ICs3MDEsMTIgQEAKIAkgKi8KIAlweGExNjhmYl9pbml0X21vZGUoaW5mbywgbWkpOwogCi0JcmV0ID0gcHhhMTY4ZmJfY2hlY2tfdmFyKCZpbmZvLT52YXIsIGluZm8pOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbGVkX2ZyZWVfZmJtZW07Ci0KIAkvKgogCSAqIEZpbGwgaW4gc2FuZSBkZWZhdWx0cy4KIAkgKi8KIAlyZXQgPSBweGExNjhmYl9jaGVja192YXIoJmluZm8tPnZhciwgaW5mbyk7CiAJaWYgKHJldCkKLQkJZ290byBmYWlsZWQ7CisJCWdvdG8gZmFpbGVkX2ZyZWVfZmJtZW07CiAKIAkvKgogCSAqIGVuYWJsZSBjb250cm9sbGVyIGNsb2NrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3B4YTN4eC1nY3UuYyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCmluZGV4IGI4MTE2OGQuLmNmNGJlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcHhhM3h4LWdjdS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBweGEzeHgtZ2MuYyAtIExpbnV4IGtlcm5lbCBtb2R1bGUgZm9yIFBYQTN4eCBncmFwaGljcyBjb250cm9sbGVycworICogIHB4YTN4eC1nY3UuYyAtIExpbnV4IGtlcm5lbCBtb2R1bGUgZm9yIFBYQTN4eCBncmFwaGljcyBjb250cm9sbGVycwogICoKICAqICBUaGlzIGRyaXZlciBuZWVkcyBhIERpcmVjdEZCIGNvdW50ZXJwYXJ0IGluIHVzZXIgc3BhY2UsIGNvbW11bmljYXRpb24KICAqICBpcyBoYW5kbGVkIHZpYSBtbWFwKCllZCBtZW1vcnkgYXJlYXMgYW5kIGFuIGlvY3RsLgpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCWJ1ZmZlci0+bmV4dCA9IHByaXYtPmZyZWU7CiAJCXByaXYtPmZyZWUgPSBidWZmZXI7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiByZXQ7CisJCXJldHVybiAtRUZBVUxUOwogCX0KIAogCWJ1ZmZlci0+bGVuZ3RoID0gd29yZHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3MzZmIuYyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCmluZGV4IGRjZThjOTcuLjc1NzM4YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vczNmYi5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3ZnYS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGNvbnNvbGVfbG9jaygpICovCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKICNpZmRlZiBDT05GSUdfTVRSUgpAQCAtMTExMywxMiArMTExMywxMiBAQAogCiAJZGV2X2luZm8oaW5mby0+ZGV2aWNlLCAic3VzcGVuZFxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAoKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkgfHwgKHBhci0+cmVmX2NvdW50ID09IDApKSB7CiAJCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBwY2lfY2hvb3NlX3N0YXRlKGRldiwgc3RhdGUpKTsKIAogCW11dGV4X3VubG9jaygmKHBhci0+b3Blbl9sb2NrKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDUsMTIgKzExNDUsMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInJlc3VtZVxuIik7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmKHBhci0+b3Blbl9sb2NrKSk7CiAKIAlpZiAocGFyLT5yZWZfY291bnQgPT0gMCkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTE1OSw3ICsxMTU5LDcgQEAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShkZXYpOwogCWlmIChlcnIpIHsKIAkJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCQljb25zb2xlX3VubG9jaygpOwogCQlkZXZfZXJyKGluZm8tPmRldmljZSwgImVycm9yICVkIGVuYWJsaW5nIGRldmljZSBmb3IgcmVzdW1lXG4iLCBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KQEAgLTExNjksNyArMTE2OSw3IEBACiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiAKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYl9kcml2ZXIuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCmluZGV4IDg0MmQxNTcuLjQ4NzkxMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiX2RyaXZlci5jCkBAIC0yMzczLDcgKzIzNzMsNyBAQAogCWlmIChtZXNnLmV2ZW50ID09IFBNX0VWRU5UX0ZSRUVaRSkKIAkJcmV0dXJuIDA7CiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKIAlpZiAoaW5mby0+ZmJvcHMtPmZiX3N5bmMpCkBAIC0yMzg1LDcgKzIzODUsNyBAQAogCXBjaV9zYXZlX3N0YXRlKGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBtZXNnKSk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0MDksNyArMjQwOSw3IEBACiAJCXJldHVybiAwOwogCX0KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAogCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGRldik7CkBAIC0yNDIzLDcgKzI0MjMsNyBAQAogCXNhdmFnZWZiX3NldF9wYXIoaW5mbyk7CiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiAJc2F2YWdlZmJfYmxhbmsoRkJfQkxBTktfVU5CTEFOSywgaW5mbyk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2hkbWkuYwppbmRleCA3NGQ5ZjU0Li4yYjllNTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9oZG1pLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfaGRtaS5jCkBAIC0xMTUxLDcgKzExNTEsNyBAQAogCiAJCWNoID0gaW5mby0+cGFyOwogCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAkJLyogSERNSSBwbHVnIGluICovCiAJCWlmICghc2hfaGRtaV9tdXN0X3JlY29uZmlndXJlKGhkbWkpICYmCkBAIC0xMTcxLDcgKzExNzEsNyBAQAogCQkJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiAJCX0KIAotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfSBlbHNlIHsKIAkJcmV0ID0gMDsKIAkJaWYgKCFoZG1pLT5pbmZvKQpAQCAtMTE4MSwxMiArMTE4MSwxMiBAQAogCQlmYl9kZXN0cm95X21vZGVkYihoZG1pLT5tb25zcGVjLm1vZGVkYik7CiAJCWhkbWktPm1vbnNwZWMubW9kZWRiID0gTlVMTDsKIAotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCiAJCS8qIEhETUkgZGlzY29ubmVjdCAqLwogCQlmYl9zZXRfc3VzcGVuZChoZG1pLT5pbmZvLCAxKTsKIAotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXBtX3J1bnRpbWVfcHV0KGhkbWktPmRldik7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NoX21vYmlsZV9sY2RjZmIuYyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCmluZGV4IGJkNDg0MGEuLmJmMTJlNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jCkBAIC05MTIsOSArOTEyLDkgQEAKIAogCS8qIE5vdGhpbmcgdG8gcmVjb25maWd1cmUsIHdoZW4gY2FsbGVkIGZyb20gZmJjb24gKi8KIAlpZiAodXNlcikgewotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfbG9jaygpOwogCQlzaF9tb2JpbGVfZmJfcmVjb25maWcoaW5mbyk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV91bmxvY2soKTsKIAl9CiAKIAltdXRleF91bmxvY2soJmNoLT5vcGVuX2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwppbmRleCBiN2RjMTgwLi5iY2I0NGE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwpAQCAtMjAxMCw5ICsyMDEwLDkgQEAKIAogCS8qIHRlbGwgY29uc29sZS9mYiBkcml2ZXIgd2UgYXJlIHN1c3BlbmRpbmcgKi8KIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZChmYmksIDEpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJLyogYmFja3VwIGNvcGllcyBpbiBjYXNlIGNoaXAgaXMgcG93ZXJlZCBkb3duIG92ZXIgc3VzcGVuZCAqLwogCkBAIC0yMDY5LDkgKzIwNjksOSBAQAogCQltZW1jcHlfdG9pbyhwYXItPmN1cnNvci5rX2FkZHIsIHBhci0+c3RvcmVfY3Vyc29yLAogCQkJICAgIHBhci0+Y3Vyc29yLnNpemUpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZiX3NldF9zdXNwZW5kKGZiaSwgMCk7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAKIAl2ZnJlZShwYXItPnN0b3JlX2ZiKTsKIAl2ZnJlZShwYXItPnN0b3JlX2N1cnNvcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jIGIvZHJpdmVycy92aWRlby90bWlvZmIuYwppbmRleCA2OTEzZmUxLi5kZmVmODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3RtaW9mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdG1pb2ZiLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0vKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGFjcXVpcmVfY29uc29sZV9zZW0oKSAqLworLyogV2h5IHNob3VsZCBmYiBkcml2ZXIgY2FsbCBjb25zb2xlIGZ1bmN0aW9ucz8gYmVjYXVzZSBjb25zb2xlX2xvY2soKSAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CkBAIC05NDQsNyArOTQ0LDcgQEAKIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXR2YWwgPSAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMSk7CiAKQEAgLTk2NSw3ICs5NjUsNyBAQAogCWlmIChjZWxsLT5zdXNwZW5kKQogCQlyZXR2YWwgPSBjZWxsLT5zdXNwZW5kKGRldik7CiAKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC05NzYsNyArOTc2LDcgQEAKIAlzdHJ1Y3QgbWZkX2NlbGwgKmNlbGwgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCWludCByZXR2YWwgPSAwOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCiAJaWYgKGNlbGwtPnJlc3VtZSkgewogCQlyZXR2YWwgPSBjZWxsLT5yZXN1bWUoZGV2KTsKQEAgLTk5Miw3ICs5OTIsNyBAQAogCiAJZmJfc2V0X3N1c3BlbmQoaW5mbywgMCk7CiBvdXQ6Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCAyODllZGQ1Li40ZTY2MzQ5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCkBAIC0xNjc0LDE3ICsxNjc0LDE3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHZpYWZiX3N1c3BlbmQodm9pZCAqdW51c2VkKQogewotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmYl9zZXRfc3VzcGVuZCh2aWFmYmluZm8sIDEpOwogCXZpYWZiX3N5bmModmlhZmJpbmZvKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpYWZiX3Jlc3VtZSh2b2lkICp1bnVzZWQpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWlmICh2aWFwYXJpbmZvLT5zaGFyZWQtPnZkZXYtPmVuZ2luZV9tbWlvKQogCQl2aWFmYl9yZXNldF9lbmdpbmUodmlhcGFyaW5mbyk7CiAJdmlhZmJfc2V0X3Bhcih2aWFmYmluZm8pOwpAQCAtMTY5Miw3ICsxNjkyLDcgQEAKIAkJdmlhZmJfc2V0X3Bhcih2aWFmYmluZm8xKTsKIAlmYl9zZXRfc3VzcGVuZCh2aWFmYmluZm8sIDApOwogCi0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYyBiL2RyaXZlcnMvdmlkZW8vdnQ4NjIzZmIuYwppbmRleCA4NWQ3NmVjLi5hMjk2NWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Z0ODYyM2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby92dDg2MjNmYi5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3ZnYS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+IC8qIFdoeSBzaG91bGQgZmIgZHJpdmVyIGNhbGwgY29uc29sZSBmdW5jdGlvbnM/IGJlY2F1c2UgYWNxdWlyZV9jb25zb2xlX3NlbSgpICovCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPiAvKiBXaHkgc2hvdWxkIGZiIGRyaXZlciBjYWxsIGNvbnNvbGUgZnVuY3Rpb25zPyBiZWNhdXNlIGNvbnNvbGVfbG9jaygpICovCiAjaW5jbHVkZSA8dmlkZW8vdmdhLmg+CiAKICNpZmRlZiBDT05GSUdfTVRSUgpAQCAtODE5LDEyICs4MTksMTIgQEAKIAogCWRldl9pbmZvKGluZm8tPmRldmljZSwgInN1c3BlbmRcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHx8IChwYXItPnJlZl9jb3VudCA9PSAwKSkgewogCQltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODM1LDcgKzgzNSw3IEBACiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIHBjaV9jaG9vc2Vfc3RhdGUoZGV2LCBzdGF0ZSkpOwogCiAJbXV0ZXhfdW5sb2NrKCYocGFyLT5vcGVuX2xvY2spKTsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAogCXJldHVybiAwOwogfQpAQCAtODUwLDcgKzg1MCw3IEBACiAKIAlkZXZfaW5mbyhpbmZvLT5kZXZpY2UsICJyZXN1bWVcbiIpOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCW11dGV4X2xvY2soJihwYXItPm9wZW5fbG9jaykpOwogCiAJaWYgKHBhci0+cmVmX2NvdW50ID09IDApCkBAIC04NjksNyArODY5LDcgQEAKIAogZmFpbDoKIAltdXRleF91bmxvY2soJihwYXItPm9wZW5fbG9jaykpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMgYi9kcml2ZXJzL3ZpZGVvL3hlbi1mYmZyb250LmMKaW5kZXggM2U2OTM0ZC4uYTIwMjE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby94ZW4tZmJmcm9udC5jCisrKyBiL2RyaXZlcnMvdmlkZW8veGVuLWZiZnJvbnQuYwpAQCAtNDkxLDEyICs0OTEsMTIgQEAKIAlpZiAoY29uc29sZV9zZXRfb25fY21kbGluZSkKIAkJcmV0dXJuOwogCi0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWZvcl9lYWNoX2NvbnNvbGUoYykgewogCQlpZiAoIXN0cmNtcChjLT5uYW1lLCAidHR5IikgJiYgYy0+aW5kZXggPT0gMCkKIAkJCWJyZWFrOwogCX0KLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIAlpZiAoYykgewogCQl1bnJlZ2lzdGVyX2NvbnNvbGUoYyk7CiAJCWMtPmZsYWdzIHw9IENPTl9DT05TREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCAzYTdlOWZmLi4zOGU5NmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNTkzLDE5ICs1OTMsMTcgQEAKIAogCS8qIGdldCBpbnRlcmZhY2UgJiBmdW5jdGlvbmFsIGNsb2NrIG9iamVjdHMgKi8KIAloZHFfZGF0YS0+aGRxX2ljayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImljayIpOwotCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ljaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBpY2sgY2xvY2sgb2JqZWN0XG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2ljayk7CisJCWdvdG8gZXJyX2ljazsKKwl9CiAKLQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKSB8fCBJU19FUlIoaGRxX2RhdGEtPmhkcV9mY2spKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwgIkNhbid0IGdldCBIRFEgY2xvY2sgb2JqZWN0c1xuIik7Ci0JCWlmIChJU19FUlIoaGRxX2RhdGEtPmhkcV9pY2spKSB7Ci0JCQlyZXQgPSBQVFJfRVJSKGhkcV9kYXRhLT5oZHFfaWNrKTsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQotCQlpZiAoSVNfRVJSKGhkcV9kYXRhLT5oZHFfZmNrKSkgewotCQkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2Zjayk7Ci0JCQljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKLQkJCWdvdG8gZXJyX2NsazsKLQkJfQorCWhkcV9kYXRhLT5oZHFfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZmNrIik7CisJaWYgKElTX0VSUihoZHFfZGF0YS0+aGRxX2ZjaykpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IEhEUSBmY2sgY2xvY2sgb2JqZWN0XG4iKTsKKwkJcmV0ID0gUFRSX0VSUihoZHFfZGF0YS0+aGRxX2Zjayk7CisJCWdvdG8gZXJyX2ZjazsKIAl9CiAKIAloZHFfZGF0YS0+aGRxX3VzZWNvdW50ID0gMDsKQEAgLTY2NSwxMCArNjYzLDEyIEBACiAJY2xrX2Rpc2FibGUoaGRxX2RhdGEtPmhkcV9pY2spOwogCiBlcnJfaW50ZmNsazoKLQljbGtfcHV0KGhkcV9kYXRhLT5oZHFfaWNrKTsKIAljbGtfcHV0KGhkcV9kYXRhLT5oZHFfZmNrKTsKIAotZXJyX2NsazoKK2Vycl9mY2s6CisJY2xrX3B1dChoZHFfZGF0YS0+aGRxX2ljayk7CisKK2Vycl9pY2s6CiAJaW91bm1hcChoZHFfZGF0YS0+aGRxX2Jhc2UpOwogCiBlcnJfaW9yZW1hcDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCAyZTI0MDBlLi4zMTY0OWI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC04NjIsMTIgKzg2MiwxMiBAQAogCiAjIE02OEsgQXJjaGl0ZWN0dXJlCiAKLWNvbmZpZyBNNTQ4eF9XQVRDSERPRwotCXRyaXN0YXRlICJNQ0Y1NDh4IHdhdGNoZG9nIHN1cHBvcnQiCitjb25maWcgTTU0eHhfV0FUQ0hET0cKKwl0cmlzdGF0ZSAiTUNGNTR4eCB3YXRjaGRvZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gTTU0OHgKIAloZWxwCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtNTQ4eF93ZHQuCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbTU0eHhfd2R0LgogCiAjIE1JUFMgQXJjaGl0ZWN0dXJlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IGRkNzc2NjUuLjIwZTQ0YzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMTA2LDcgKzEwNiw3IEBACiAjIE0zMlIgQXJjaGl0ZWN0dXJlCiAKICMgTTY4SyBBcmNoaXRlY3R1cmUKLW9iai0kKENPTkZJR19NNTQ4eF9XQVRDSERPRykgKz0gbTU0OHhfd2R0Lm8KK29iai0kKENPTkZJR19NNTR4eF9XQVRDSERPRykgKz0gbTU0eHhfd2R0Lm8KIAogIyBNSVBTIEFyY2hpdGVjdHVyZQogb2JqLSQoQ09ORklHX0FUSDc5X1dEVCkgKz0gYXRoNzlfd2R0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL201NHh4X3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbTU0eHhfd2R0LmMKaW5kZXggY2FiYmNmZS4uNGQ0MzI4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tNTQ4eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL201NHh4X3dkdC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKLSAqIGRyaXZlcnMvd2F0Y2hkb2cvbTU0OHhfd2R0LmMKKyAqIGRyaXZlcnMvd2F0Y2hkb2cvbTU0eHhfd2R0LmMKICAqCi0gKiBXYXRjaGRvZyBkcml2ZXIgZm9yIENvbGRGaXJlIE1DRjU0OHggcHJvY2Vzc29ycworICogV2F0Y2hkb2cgZHJpdmVyIGZvciBDb2xkRmlyZSBNQ0Y1NDd4ICYgTUNGNTQ4eCBwcm9jZXNzb3JzCiAgKiBDb3B5cmlnaHQgMjAxMCAoYykgUGhpbGlwcGUgRGUgTXV5dGVyIDxwaGRtQG1hY3FlbC5iZT4KICAqCiAgKiBBZGFwdGVkIGZyb20gdGhlIElYUDR4eCB3YXRjaGRvZyBkcml2ZXIsIHdoaWNoIGNhcnJpZXMgdGhlc2Ugbm90aWNlczoKQEAgLTI5LDggKzI5LDggQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KLSNpbmNsdWRlIDxhc20vbTU0OHhzaW0uaD4KLSNpbmNsdWRlIDxhc20vbTU0OHhncHQuaD4KKyNpbmNsdWRlIDxhc20vbTU0eHhzaW0uaD4KKyNpbmNsdWRlIDxhc20vbTU0eHhncHQuaD4KIAogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogc3RhdGljIHVuc2lnbmVkIGludCBoZWFydGJlYXQgPSAzMDsJLyogKHNlY3MpIERlZmF1bHQgaXMgMC41IG1pbnV0ZSAqLwpAQCAtNzYsNyArNzYsNyBAQAogCV9fcmF3X3dyaXRlbChnbXMwLCBNQ0ZfTUJBUiArIE1DRl9HUFRfR01TMCk7CiB9CiAKLXN0YXRpYyBpbnQgbTU0OHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG01NHh4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFdEVF9JTl9VU0UsICZ3ZHRfc3RhdHVzKSkKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTg2LDcgKzg2LDcgQEAKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IG01NDh4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKK3N0YXRpYyBzc2l6ZV90IG01NHh4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKIAkJCQkJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKIAlpZiAobGVuKSB7CkBAIC0xMTIsMTAgKzExMiwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCS5vcHRpb25zCT0gV0RJT0ZfTUFHSUNDTE9TRSB8IFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCVdESU9GX0tFRVBBTElWRVBJTkcsCi0JLmlkZW50aXR5CT0gIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIiwKKwkuaWRlbnRpdHkJPSAiQ29sZGZpcmUgTTU0eHggV2F0Y2hkb2ciLAogfTsKIAotc3RhdGljIGxvbmcgbTU0OHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorc3RhdGljIGxvbmcgbTU0eHhfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCQkJCSB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgcmV0ID0gLUVOT1RUWTsKQEAgLTE2MSw3ICsxNjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbTU0OHhfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG01NHh4X3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWlmICh0ZXN0X2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKSkKIAkJd2R0X2Rpc2FibGUoKTsKQEAgLTE3Nyw0NSArMTc3LDQ1IEBACiB9CiAKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbTU0OHhfd2R0X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtNTR4eF93ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPSBub19sbHNlZWssCi0JLndyaXRlCQk9IG01NDh4X3dkdF93cml0ZSwKLQkudW5sb2NrZWRfaW9jdGwJPSBtNTQ4eF93ZHRfaW9jdGwsCi0JLm9wZW4JCT0gbTU0OHhfd2R0X29wZW4sCi0JLnJlbGVhc2UJPSBtNTQ4eF93ZHRfcmVsZWFzZSwKKwkud3JpdGUJCT0gbTU0eHhfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IG01NHh4X3dkdF9pb2N0bCwKKwkub3BlbgkJPSBtNTR4eF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG01NHh4X3dkdF9yZWxlYXNlLAogfTsKIAotc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG01NDh4X3dkdF9taXNjZGV2ID0geworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG01NHh4X3dkdF9taXNjZGV2ID0gewogCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKIAkubmFtZQkJPSAid2F0Y2hkb2ciLAotCS5mb3BzCQk9ICZtNTQ4eF93ZHRfZm9wcywKKwkuZm9wcwkJPSAmbTU0eHhfd2R0X2ZvcHMsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBtNTQ4eF93ZHRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbTU0eHhfd2R0X2luaXQodm9pZCkKIHsKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihNQ0ZfTUJBUiArIE1DRl9HUFRfR0NJUjAsIDQsCi0JCQkJCQkiQ29sZGZpcmUgTTU0OHggV2F0Y2hkb2ciKSkgeworCQkJCQkJIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJDb2xkZmlyZSBNNTQ4eCBXYXRjaGRvZyA6IEkvTyByZWdpb24gYnVzeVxuIik7CisJCQkJIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIDogSS9PIHJlZ2lvbiBidXN5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29sZEZpcmUgd2F0Y2hkb2cgZHJpdmVyIGlzIGxvYWRlZC5cbiIpOwogCi0JcmV0dXJuIG1pc2NfcmVnaXN0ZXIoJm01NDh4X3dkdF9taXNjZGV2KTsKKwlyZXR1cm4gbWlzY19yZWdpc3RlcigmbTU0eHhfd2R0X21pc2NkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbTU0OHhfd2R0X2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBtNTR4eF93ZHRfZXhpdCh2b2lkKQogewotCW1pc2NfZGVyZWdpc3RlcigmbTU0OHhfd2R0X21pc2NkZXYpOworCW1pc2NfZGVyZWdpc3RlcigmbTU0eHhfd2R0X21pc2NkZXYpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihNQ0ZfTUJBUiArIE1DRl9HUFRfR0NJUjAsIDQpOwogfQogCi1tb2R1bGVfaW5pdChtNTQ4eF93ZHRfaW5pdCk7Ci1tb2R1bGVfZXhpdChtNTQ4eF93ZHRfZXhpdCk7Cittb2R1bGVfaW5pdChtNTR4eF93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChtNTR4eF93ZHRfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBoaWxpcHBlIERlIE11eXRlciA8cGhkbUBtYWNxZWwuYmU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkNvbGRmaXJlIE01NDh4IFdhdGNoZG9nIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkNvbGRmaXJlIE01NHh4IFdhdGNoZG9nIik7CiAKIG1vZHVsZV9wYXJhbShoZWFydGJlYXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGhlYXJ0YmVhdCwgIldhdGNoZG9nIGhlYXJ0YmVhdCBpbiBzZWNvbmRzIChkZWZhdWx0IDMwcykiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggZGI4YzRjNC4uMjQxNzcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTM3LDExICszNywxOSBAQAogI2lmZGVmIENPTkZJR19QTV9TTEVFUAogc3RhdGljIGludCB4ZW5faHZtX3N1c3BlbmQodm9pZCAqZGF0YSkKIHsKKwlpbnQgZXJyOwogCXN0cnVjdCBzY2hlZF9zaHV0ZG93biByID0geyAucmVhc29uID0gU0hVVERPV05fc3VzcGVuZCB9OwogCWludCAqY2FuY2VsbGVkID0gZGF0YTsKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAorCWVyciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgInhlbl9odm1fc3VzcGVuZDogc3lzZGV2X3N1c3BlbmQgZmFpbGVkOiAlZFxuIiwKKwkJICAgICAgIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCiAJKmNhbmNlbGxlZCA9IEhZUEVSVklTT1Jfc2NoZWRfb3AoU0NIRURPUF9zaHV0ZG93biwgJnIpOwogCiAJeGVuX2h2bV9wb3N0X3N1c3BlbmQoKmNhbmNlbGxlZCk7CkBAIC01Myw2ICs2MSw4IEBACiAJCXhlbl90aW1lcl9yZXN1bWUoKTsKIAl9CiAKKwlzeXNkZXZfcmVzdW1lKCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYWZzL3dyaXRlLmMgYi9mcy9hZnMvd3JpdGUuYwppbmRleCAxNTY5MGJiLi43ODliM2FmIDEwMDY0NAotLS0gYS9mcy9hZnMvd3JpdGUuYworKysgYi9mcy9hZnMvd3JpdGUuYwpAQCAtMTQwLDYgKzE0MCw3IEBACiAJY2FuZGlkYXRlLT5maXJzdCA9IGNhbmRpZGF0ZS0+bGFzdCA9IGluZGV4OwogCWNhbmRpZGF0ZS0+b2Zmc2V0X2ZpcnN0ID0gZnJvbTsKIAljYW5kaWRhdGUtPnRvX2xhc3QgPSB0bzsKKwlJTklUX0xJU1RfSEVBRCgmY2FuZGlkYXRlLT5saW5rKTsKIAljYW5kaWRhdGUtPnVzYWdlID0gMTsKIAljYW5kaWRhdGUtPnN0YXRlID0gQUZTX1dCQUNLX1BFTkRJTkc7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FuZGlkYXRlLT53YWl0cSk7CmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IGZjNTU3YTMuLjI2ODY5Y2QgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC0yMzksMTUgKzIzOSwyMyBAQAogCWNhbGxfcmN1KCZjdHgtPnJjdV9oZWFkLCBjdHhfcmN1X2ZyZWUpOwogfQogCi0jZGVmaW5lIGdldF9pb2N0eChraW9jdHgpIGRvIHsJCQkJCQlcCi0JQlVHX09OKGF0b21pY19yZWFkKCYoa2lvY3R4KS0+dXNlcnMpIDw9IDApOwkJCVwKLQlhdG9taWNfaW5jKCYoa2lvY3R4KS0+dXNlcnMpOwkJCQkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgcHV0X2lvY3R4KGtpb2N0eCkgZG8gewkJCQkJCVwKLQlCVUdfT04oYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPD0gMCk7CQkJXAotCWlmICh1bmxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCYoa2lvY3R4KS0+dXNlcnMpKSkgCQlcCi0JCV9fcHV0X2lvY3R4KGtpb2N0eCk7CQkJCQlcCi19IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIGdldF9pb2N0eChzdHJ1Y3Qga2lvY3R4ICpraW9jdHgpCit7CisJQlVHX09OKGF0b21pY19yZWFkKCZraW9jdHgtPnVzZXJzKSA8PSAwKTsKKwlhdG9taWNfaW5jKCZraW9jdHgtPnVzZXJzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdHJ5X2dldF9pb2N0eChzdHJ1Y3Qga2lvY3R4ICpraW9jdHgpCit7CisJcmV0dXJuIGF0b21pY19pbmNfbm90X3plcm8oJmtpb2N0eC0+dXNlcnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lvY3R4KHN0cnVjdCBraW9jdHggKmtpb2N0eCkKK3sKKwlCVUdfT04oYXRvbWljX3JlYWQoJmtpb2N0eC0+dXNlcnMpIDw9IDApOworCWlmICh1bmxpa2VseShhdG9taWNfZGVjX2FuZF90ZXN0KCZraW9jdHgtPnVzZXJzKSkpCisJCV9fcHV0X2lvY3R4KGtpb2N0eCk7Cit9CiAKIC8qIGlvY3R4X2FsbG9jCiAgKglBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGFuIGlvY3R4LiAgUmV0dXJucyBhbiBFUlJfUFRSIGlmIGl0IGZhaWxlZC4KQEAgLTYwMSw4ICs2MDksMTMgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoY3R4LCBuLCAmbW0tPmlvY3R4X2xpc3QsIGxpc3QpIHsKLQkJaWYgKGN0eC0+dXNlcl9pZCA9PSBjdHhfaWQgJiYgIWN0eC0+ZGVhZCkgewotCQkJZ2V0X2lvY3R4KGN0eCk7CisJCS8qCisJCSAqIFJDVSBwcm90ZWN0cyB1cyBhZ2FpbnN0IGFjY2Vzc2luZyBmcmVlZCBtZW1vcnkgYnV0CisJCSAqIHdlIGhhdmUgdG8gYmUgY2FyZWZ1bCBub3QgdG8gZ2V0IGEgcmVmZXJlbmNlIHdoZW4gdGhlCisJCSAqIHJlZmVyZW5jZSBjb3VudCBhbHJlYWR5IGRyb3BwZWQgdG8gMCAoY3R4LT5kZWFkIHRlc3QKKwkJICogaXMgdW5yZWxpYWJsZSBiZWNhdXNlIG9mIHJhY2VzKS4KKwkJICovCisJCWlmIChjdHgtPnVzZXJfaWQgPT0gY3R4X2lkICYmICFjdHgtPmRlYWQgJiYgdHJ5X2dldF9pb2N0eChjdHgpKXsKIAkJCXJldCA9IGN0eDsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjI5LDYgKzE2NDIsMjMgQEAKIAkJZ290byBvdXRfcHV0X3JlcTsKIAogCXNwaW5fbG9ja19pcnEoJmN0eC0+Y3R4X2xvY2spOworCS8qCisJICogV2UgY291bGQgaGF2ZSByYWNlZCB3aXRoIGlvX2Rlc3Ryb3koKSBhbmQgYXJlIGN1cnJlbnRseSBob2xkaW5nIGEKKwkgKiByZWZlcmVuY2UgdG8gY3R4IHdoaWNoIHNob3VsZCBiZSBkZXN0cm95ZWQuIFdlIGNhbm5vdCBzdWJtaXQgSU8KKwkgKiBzaW5jZSBjdHggZ2V0cyBmcmVlZCBhcyBzb29uIGFzIGlvX3N1Ym1pdCgpIHB1dHMgaXRzIHJlZmVyZW5jZS4gIFRoZQorCSAqIGNoZWNrIGhlcmUgaXMgcmVsaWFibGU6IGlvX2Rlc3Ryb3koKSBzZXRzIGN0eC0+ZGVhZCBiZWZvcmUgd2FpdGluZworCSAqIGZvciBvdXRzdGFuZGluZyBJTyBhbmQgdGhlIGJhcnJpZXIgYmV0d2VlbiB0aGVzZSB0d28gaXMgcmVhbGl6ZWQgYnkKKwkgKiB1bmxvY2sgb2YgbW0tPmlvY3R4X2xvY2sgYW5kIGxvY2sgb2YgY3R4LT5jdHhfbG9jay4gIEFuYWxvZ291c2x5IHdlCisJICogaW5jcmVtZW50IGN0eC0+cmVxc19hY3RpdmUgYmVmb3JlIGNoZWNraW5nIGZvciBjdHgtPmRlYWQgYW5kIHRoZQorCSAqIGJhcnJpZXIgaXMgcmVhbGl6ZWQgYnkgdW5sb2NrIGFuZCBsb2NrIG9mIGN0eC0+Y3R4X2xvY2suIFRodXMgaWYgd2UKKwkgKiBkb24ndCBzZWUgY3R4LT5kZWFkIHNldCBoZXJlLCBpb19kZXN0cm95KCkgd2FpdHMgZm9yIG91ciBJTyB0bworCSAqIGZpbmlzaC4KKwkgKi8KKwlpZiAoY3R4LT5kZWFkKSB7CisJCXNwaW5fdW5sb2NrX2lycSgmY3R4LT5jdHhfbG9jayk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3B1dF9yZXE7CisJfQogCWFpb19ydW5faW9jYihyZXEpOwogCWlmICghbGlzdF9lbXB0eSgmY3R4LT5ydW5fbGlzdCkpIHsKIAkJLyogZHJhaW4gdGhlIHJ1biBsaXN0ICovCmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDMzM2E3YmIuLjg4OTI4NzAgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC04NzMsNiArODczLDExIEBACiAJcmV0ID0gYWRkX3N5bWxpbmsoYmRldi0+YmRfcGFydC0+aG9sZGVyX2RpciwgJmRpc2tfdG9fZGV2KGRpc2spLT5rb2JqKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9kZWw7CisJLyoKKwkgKiBiZGV2IGNvdWxkIGJlIGRlbGV0ZWQgYmVuZWF0aCB1cyB3aGljaCB3b3VsZCBpbXBsaWNpdGx5IGRlc3Ryb3kKKwkgKiB0aGUgaG9sZGVyIGRpcmVjdG9yeS4gIEhvbGQgb24gdG8gaXQuCisJICovCisJa29iamVjdF9nZXQoYmRldi0+YmRfcGFydC0+aG9sZGVyX2Rpcik7CiAKIAlsaXN0X2FkZCgmaG9sZGVyLT5saXN0LCAmYmRldi0+YmRfaG9sZGVyX2Rpc2tzKTsKIAlnb3RvIG91dF91bmxvY2s7CkBAIC05MDksNiArOTE0LDcgQEAKIAkJZGVsX3N5bWxpbmsoZGlzay0+c2xhdmVfZGlyLCAmcGFydF90b19kZXYoYmRldi0+YmRfcGFydCktPmtvYmopOwogCQlkZWxfc3ltbGluayhiZGV2LT5iZF9wYXJ0LT5ob2xkZXJfZGlyLAogCQkJICAgICZkaXNrX3RvX2RldihkaXNrKS0+a29iaik7CisJCWtvYmplY3RfcHV0KGJkZXYtPmJkX3BhcnQtPmhvbGRlcl9kaXIpOwogCQlsaXN0X2RlbF9pbml0KCZob2xkZXItPmxpc3QpOwogCQlrZnJlZShob2xkZXIpOwogCX0KQEAgLTkyMiwxNCArOTI4LDE1IEBACiAgKiBmbHVzaF9kaXNrIC0gaW52YWxpZGF0ZXMgYWxsIGJ1ZmZlci1jYWNoZSBlbnRyaWVzIG9uIGEgZGlzawogICoKICAqIEBiZGV2OiAgICAgIHN0cnVjdCBibG9jayBkZXZpY2UgdG8gYmUgZmx1c2hlZAorICogQGtpbGxfZGlydHk6IGZsYWcgdG8gZ3VpZGUgaGFuZGxpbmcgb2YgZGlydHkgaW5vZGVzCiAgKgogICogSW52YWxpZGF0ZXMgYWxsIGJ1ZmZlci1jYWNoZSBlbnRyaWVzIG9uIGEgZGlzay4gSXQgc2hvdWxkIGJlIGNhbGxlZAogICogd2hlbiBhIGRpc2sgaGFzIGJlZW4gY2hhbmdlZCAtLSBlaXRoZXIgYnkgYSBtZWRpYSBjaGFuZ2Ugb3Igb25saW5lCiAgKiByZXNpemUuCiAgKi8KLXN0YXRpYyB2b2lkIGZsdXNoX2Rpc2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3N0YXRpYyB2b2lkIGZsdXNoX2Rpc2soc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgYm9vbCBraWxsX2RpcnR5KQogewotCWlmIChfX2ludmFsaWRhdGVfZGV2aWNlKGJkZXYpKSB7CisJaWYgKF9faW52YWxpZGF0ZV9kZXZpY2UoYmRldiwga2lsbF9kaXJ0eSkpIHsKIAkJY2hhciBuYW1lW0JERVZOQU1FX1NJWkVdID0gIiI7CiAKIAkJaWYgKGJkZXYtPmJkX2Rpc2spCkBAIC05NjYsNyArOTczLDcgQEAKIAkJICAgICAgICIlczogZGV0ZWN0ZWQgY2FwYWNpdHkgY2hhbmdlIGZyb20gJWxsZCB0byAlbGxkXG4iLAogCQkgICAgICAgbmFtZSwgYmRldl9zaXplLCBkaXNrX3NpemUpOwogCQlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsIGRpc2tfc2l6ZSk7Ci0JCWZsdXNoX2Rpc2soYmRldik7CisJCWZsdXNoX2Rpc2soYmRldiwgZmFsc2UpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woY2hlY2tfZGlza19zaXplX2NoYW5nZSk7CkBAIC0xMDE5LDcgKzEwMjYsNyBAQAogCWlmICghKGV2ZW50cyAmIERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFKSkKIAkJcmV0dXJuIDA7CiAKLQlmbHVzaF9kaXNrKGJkZXYpOworCWZsdXNoX2Rpc2soYmRldiwgdHJ1ZSk7CiAJaWYgKGJkb3BzLT5yZXZhbGlkYXRlX2Rpc2spCiAJCWJkb3BzLT5yZXZhbGlkYXRlX2Rpc2soYmRldi0+YmRfZGlzayk7CiAJcmV0dXJuIDE7CkBAIC0xMjE1LDEyICsxMjIyLDYgQEAKIAogCXJlcyA9IF9fYmxrZGV2X2dldChiZGV2LCBtb2RlLCAwKTsKIAotCS8qIF9fYmxrZGV2X2dldCgpIG1heSBhbHRlciByZWFkIG9ubHkgc3RhdHVzLCBjaGVjayBpdCBhZnRlcndhcmRzICovCi0JaWYgKCFyZXMgJiYgKG1vZGUgJiBGTU9ERV9XUklURSkgJiYgYmRldl9yZWFkX29ubHkoYmRldikpIHsKLQkJX19ibGtkZXZfcHV0KGJkZXYsIG1vZGUsIDApOwotCQlyZXMgPSAtRUFDQ0VTOwotCX0KLQogCWlmICh3aG9sZSkgewogCQkvKiBmaW5pc2ggY2xhaW1pbmcgKi8KIAkJbXV0ZXhfbG9jaygmYmRldi0+YmRfbXV0ZXgpOwpAQCAtMTI5OCw2ICsxMjk5LDExIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIAorCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBiZGV2X3JlYWRfb25seShiZGV2KSkgeworCQlibGtkZXZfcHV0KGJkZXYsIG1vZGUpOworCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKKwl9CisKIAlyZXR1cm4gYmRldjsKIH0KIEVYUE9SVF9TWU1CT0woYmxrZGV2X2dldF9ieV9wYXRoKTsKQEAgLTE2MDEsNyArMTYwNyw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGxvb2t1cF9iZGV2KTsKIAotaW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK2ludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGJvb2wga2lsbF9kaXJ0eSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X3N1cGVyKGJkZXYpOwogCWludCByZXMgPSAwOwpAQCAtMTYxNCw3ICsxNjIwLDcgQEAKIAkJICogaG9sZCkuCiAJCSAqLwogCQlzaHJpbmtfZGNhY2hlX3NiKHNiKTsKLQkJcmVzID0gaW52YWxpZGF0ZV9pbm9kZXMoc2IpOworCQlyZXMgPSBpbnZhbGlkYXRlX2lub2RlcyhzYiwga2lsbF9kaXJ0eSk7CiAJCWRyb3Bfc3VwZXIoc2IpOwogCX0KIAlpbnZhbGlkYXRlX2JkZXYoYmRldik7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9hY2wuYyBiL2ZzL2J0cmZzL2FjbC5jCmluZGV4IDE1YjVjYTIuLjljOTQ5MzQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2FjbC5jCisrKyBiL2ZzL2J0cmZzL2FjbC5jCkBAIC0zNyw2ICszNyw5IEBACiAJY2hhciAqdmFsdWUgPSBOVUxMOwogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAorCWlmICghSVNfUE9TSVhBQ0woaW5vZGUpKQorCQlyZXR1cm4gTlVMTDsKKwogCWFjbCA9IGdldF9jYWNoZWRfYWNsKGlub2RlLCB0eXBlKTsKIAlpZiAoYWNsICE9IEFDTF9OT1RfQ0FDSEVEKQogCQlyZXR1cm4gYWNsOwpAQCAtODQsNiArODcsOSBAQAogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKIAlpbnQgcmV0ID0gMDsKIAorCWlmICghSVNfUE9TSVhBQ0woZGVudHJ5LT5kX2lub2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCiAJYWNsID0gYnRyZnNfZ2V0X2FjbChkZW50cnktPmRfaW5vZGUsIHR5cGUpOwogCiAJaWYgKElTX0VSUihhY2wpKQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY29tcHJlc3Npb24uYyBiL2ZzL2J0cmZzL2NvbXByZXNzaW9uLmMKaW5kZXggZjc0NTI4Ny4uNGQyMTEwZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY29tcHJlc3Npb24uYworKysgYi9mcy9idHJmcy9jb21wcmVzc2lvbi5jCkBAIC01NjIsNyArNTYyLDcgQEAKIAl1NjQgZW1fbGVuOwogCXU2NCBlbV9zdGFydDsKIAlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAl1MzIgKnN1bXM7CiAKIAl0cmVlID0gJkJUUkZTX0koaW5vZGUpLT5pb190cmVlOwpAQCAtNTc3LDYgKzU3Nyw5IEBACiAKIAljb21wcmVzc2VkX2xlbiA9IGVtLT5ibG9ja19sZW47CiAJY2IgPSBrbWFsbG9jKGNvbXByZXNzZWRfYmlvX3NpemUocm9vdCwgY29tcHJlc3NlZF9sZW4pLCBHRlBfTk9GUyk7CisJaWYgKCFjYikKKwkJZ290byBvdXQ7CisKIAlhdG9taWNfc2V0KCZjYi0+cGVuZGluZ19iaW9zLCAwKTsKIAljYi0+ZXJyb3JzID0gMDsKIAljYi0+aW5vZGUgPSBpbm9kZTsKQEAgLTU5NywxMyArNjAwLDE4IEBACiAKIAlucl9wYWdlcyA9IChjb21wcmVzc2VkX2xlbiArIFBBR0VfQ0FDSEVfU0laRSAtIDEpIC8KIAkJCQkgUEFHRV9DQUNIRV9TSVpFOwotCWNiLT5jb21wcmVzc2VkX3BhZ2VzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBucl9wYWdlcywKKwljYi0+Y29tcHJlc3NlZF9wYWdlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJfcGFnZXMsCiAJCQkJICAgICAgIEdGUF9OT0ZTKTsKKwlpZiAoIWNiLT5jb21wcmVzc2VkX3BhZ2VzKQorCQlnb3RvIGZhaWwxOworCiAJYmRldiA9IEJUUkZTX0koaW5vZGUpLT5yb290LT5mc19pbmZvLT5mc19kZXZpY2VzLT5sYXRlc3RfYmRldjsKIAogCWZvciAocGFnZV9pbmRleCA9IDA7IHBhZ2VfaW5kZXggPCBucl9wYWdlczsgcGFnZV9pbmRleCsrKSB7CiAJCWNiLT5jb21wcmVzc2VkX3BhZ2VzW3BhZ2VfaW5kZXhdID0gYWxsb2NfcGFnZShHRlBfTk9GUyB8CiAJCQkJCQkJICAgICAgX19HRlBfSElHSE1FTSk7CisJCWlmICghY2ItPmNvbXByZXNzZWRfcGFnZXNbcGFnZV9pbmRleF0pCisJCQlnb3RvIGZhaWwyOwogCX0KIAljYi0+bnJfcGFnZXMgPSBucl9wYWdlczsKIApAQCAtNjE0LDYgKzYyMiw4IEBACiAJY2ItPmxlbiA9IHVuY29tcHJlc3NlZF9sZW47CiAKIAljb21wX2JpbyA9IGNvbXByZXNzZWRfYmlvX2FsbG9jKGJkZXYsIGN1cl9kaXNrX2J5dGUsIEdGUF9OT0ZTKTsKKwlpZiAoIWNvbXBfYmlvKQorCQlnb3RvIGZhaWwyOwogCWNvbXBfYmlvLT5iaV9wcml2YXRlID0gY2I7CiAJY29tcF9iaW8tPmJpX2VuZF9pbyA9IGVuZF9jb21wcmVzc2VkX2Jpb19yZWFkOwogCWF0b21pY19pbmMoJmNiLT5wZW5kaW5nX2Jpb3MpOwpAQCAtNjgxLDYgKzY5MSwxNyBAQAogCiAJYmlvX3B1dChjb21wX2Jpbyk7CiAJcmV0dXJuIDA7CisKK2ZhaWwyOgorCWZvciAocGFnZV9pbmRleCA9IDA7IHBhZ2VfaW5kZXggPCBucl9wYWdlczsgcGFnZV9pbmRleCsrKQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpY2ItPmNvbXByZXNzZWRfcGFnZXNbcGFnZV9pbmRleF0pOworCisJa2ZyZWUoY2ItPmNvbXByZXNzZWRfcGFnZXMpOworZmFpbDE6CisJa2ZyZWUoY2IpOworb3V0OgorCWZyZWVfZXh0ZW50X21hcChlbSk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgY29tcF9pZGxlX3dvcmtzcGFjZVtCVFJGU19DT01QUkVTU19UWVBFU107CkBAIC05MDAsNyArOTIxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIF9fZXhpdCBidHJmc19leGl0X2NvbXByZXNzKHZvaWQpCit2b2lkIGJ0cmZzX2V4aXRfY29tcHJlc3Modm9pZCkKIHsKIAlmcmVlX3dvcmtzcGFjZXMoKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDJjOThiM2EuLjZmODIwZmEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtMTI1NCw2ICsxMjU0LDcgQEAKICNkZWZpbmUgQlRSRlNfTU9VTlRfU1BBQ0VfQ0FDSEUJCSgxIDw8IDEyKQogI2RlZmluZSBCVFJGU19NT1VOVF9DTEVBUl9DQUNIRQkJKDEgPDwgMTMpCiAjZGVmaW5lIEJUUkZTX01PVU5UX1VTRVJfU1VCVk9MX1JNX0FMTE9XRUQgKDEgPDwgMTQpCisjZGVmaW5lIEJUUkZTX01PVU5UX0VOT1NQQ19ERUJVRwkgKDEgPDwgMTUpCiAKICNkZWZpbmUgYnRyZnNfY2xlYXJfb3B0KG8sIG9wdCkJCSgobykgJj0gfkJUUkZTX01PVU5UXyMjb3B0KQogI2RlZmluZSBidHJmc19zZXRfb3B0KG8sIG9wdCkJCSgobykgfD0gQlRSRlNfTU9VTlRfIyNvcHQpCkBAIC0yMjE4LDYgKzIyMTksOCBAQAogCQkJCSAgIHU2NCBzdGFydCwgdTY0IGVuZCk7CiBpbnQgYnRyZnNfZXJyb3JfZGlzY2FyZF9leHRlbnQoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCBieXRlbnIsCiAJCQkgICAgICAgdTY0IG51bV9ieXRlcyk7CitpbnQgYnRyZnNfZm9yY2VfY2h1bmtfYWxsb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKTsKIAogLyogY3RyZWUuYyAqLwogaW50IGJ0cmZzX2Jpbl9zZWFyY2goc3RydWN0IGV4dGVudF9idWZmZXIgKmViLCBzdHJ1Y3QgYnRyZnNfa2V5ICprZXksCmRpZmYgLS1naXQgYS9mcy9idHJmcy9kaXNrLWlvLmMgYi9mcy9idHJmcy9kaXNrLWlvLmMKaW5kZXggYjUzMWMzNi4uZTFhYThkNiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZGlzay1pby5jCisrKyBiL2ZzL2J0cmZzL2Rpc2staW8uYwpAQCAtMzU5LDEwICszNTksMTQgQEAKIAogCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAotCWlmIChwYWdlLT5wcml2YXRlID09IEVYVEVOVF9QQUdFX1BSSVZBVEUpCisJaWYgKHBhZ2UtPnByaXZhdGUgPT0gRVhURU5UX1BBR0VfUFJJVkFURSkgeworCQlXQVJOX09OKDEpOwogCQlnb3RvIG91dDsKLQlpZiAoIXBhZ2UtPnByaXZhdGUpCisJfQorCWlmICghcGFnZS0+cHJpdmF0ZSkgeworCQlXQVJOX09OKDEpOwogCQlnb3RvIG91dDsKKwl9CiAJbGVuID0gcGFnZS0+cHJpdmF0ZSA+PiAyOwogCVdBUk5fT04obGVuID09IDApOwogCkBAIC0xNTUwLDYgKzE1NTQsNyBAQAogCQlzcGluX3VubG9jaygmcm9vdC0+ZnNfaW5mby0+bmV3X3RyYW5zX2xvY2spOwogCiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlpZiAodHJhbnNpZCA9PSB0cmFucy0+dHJhbnNpZCkgewogCQkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCUJVR19PTihyZXQpOwpAQCAtMjQ1MywxMCArMjQ1OCwxNCBAQAogCXVwX3dyaXRlKCZyb290LT5mc19pbmZvLT5jbGVhbnVwX3dvcmtfc2VtKTsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCXJldCA9IGJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJQlVHX09OKHJldCk7CiAJLyogcnVuIGNvbW1pdCBhZ2FpbiB0byBkcm9wIHRoZSBvcmlnaW5hbCBzbmFwc2hvdCAqLwogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJcmV0ID0gYnRyZnNfd3JpdGVfYW5kX3dhaXRfdHJhbnNhY3Rpb24oTlVMTCwgcm9vdCk7CiAJQlVHX09OKHJldCk7CkBAIC0yNTU0LDYgKzI1NjMsOCBAQAogCWtmcmVlKGZzX2luZm8tPmNodW5rX3Jvb3QpOwogCWtmcmVlKGZzX2luZm8tPmRldl9yb290KTsKIAlrZnJlZShmc19pbmZvLT5jc3VtX3Jvb3QpOworCWtmcmVlKGZzX2luZm8pOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4cG9ydC5jIGIvZnMvYnRyZnMvZXhwb3J0LmMKaW5kZXggOTc4Njk2My4uZmYyN2Q3YSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXhwb3J0LmMKKysrIGIvZnMvYnRyZnMvZXhwb3J0LmMKQEAgLTE3MSw2ICsxNzEsOCBAQAogCWludCByZXQ7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKIAlpZiAoZGlyLT5pX2lubyA9PSBCVFJGU19GSVJTVF9GUkVFX09CSkVDVElEKSB7CiAJCWtleS5vYmplY3RpZCA9IHJvb3QtPnJvb3Rfa2V5Lm9iamVjdGlkOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKaW5kZXggYjU1MjY5My4uNTg4ZmY5OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYworKysgYi9mcy9idHJmcy9leHRlbnQtdHJlZS5jCkBAIC0zMjAsMTEgKzMyMCw2IEBACiAJaWYgKCFwYXRoKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWV4Y2x1ZGVfc3VwZXJfc3RyaXBlcyhleHRlbnRfcm9vdCwgYmxvY2tfZ3JvdXApOwotCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnNwYWNlX2luZm8tPmxvY2spOwotCWJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5ieXRlc19yZWFkb25seSArPSBibG9ja19ncm91cC0+Ynl0ZXNfc3VwZXI7Ci0Jc3Bpbl91bmxvY2soJmJsb2NrX2dyb3VwLT5zcGFjZV9pbmZvLT5sb2NrKTsKLQogCWxhc3QgPSBtYXhfdCh1NjQsIGJsb2NrX2dyb3VwLT5rZXkub2JqZWN0aWQsIEJUUkZTX1NVUEVSX0lORk9fT0ZGU0VUKTsKIAogCS8qCkBAIC00NjcsOCArNDYyLDEwIEBACiAJCQljYWNoZS0+Y2FjaGVkID0gQlRSRlNfQ0FDSEVfTk87CiAJCX0KIAkJc3Bpbl91bmxvY2soJmNhY2hlLT5sb2NrKTsKLQkJaWYgKHJldCA9PSAxKQorCQlpZiAocmV0ID09IDEpIHsKKwkJCWZyZWVfZXhjbHVkZWRfZXh0ZW50cyhmc19pbmZvLT5leHRlbnRfcm9vdCwgY2FjaGUpOwogCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAobG9hZF9jYWNoZV9vbmx5KQpAQCAtMzM0NCw4ICszMzQxLDEwIEBACiAJdTY0IHJlc2VydmVkOwogCXU2NCBtYXhfcmVjbGFpbTsKIAl1NjQgcmVjbGFpbWVkID0gMDsKKwlsb25nIHRpbWVfbGVmdDsKIAlpbnQgcGF1c2UgPSAxOwogCWludCBucl9wYWdlcyA9ICgyICogMTAyNCAqIDEwMjQpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJaW50IGxvb3BzID0gMDsKIAogCWJsb2NrX3JzdiA9ICZyb290LT5mc19pbmZvLT5kZWxhbGxvY19ibG9ja19yc3Y7CiAJc3BhY2VfaW5mbyA9IGJsb2NrX3Jzdi0+c3BhY2VfaW5mbzsKQEAgLTMzNTgsNyArMzM1Nyw3IEBACiAKIAltYXhfcmVjbGFpbSA9IG1pbihyZXNlcnZlZCwgdG9fcmVjbGFpbSk7CiAKLQl3aGlsZSAoMSkgeworCXdoaWxlIChsb29wcyA8IDEwMjQpIHsKIAkJLyogaGF2ZSB0aGUgZmx1c2hlciB0aHJlYWRzIGp1bXAgaW4gYW5kIGRvIHNvbWUgSU8gKi8KIAkJc21wX21iKCk7CiAJCW5yX3BhZ2VzID0gbWluX3QodW5zaWduZWQgbG9uZywgbnJfcGFnZXMsCkBAIC0zMzY2LDggKzMzNjUsMTIgQEAKIAkJd3JpdGViYWNrX2lub2Rlc19zYl9ucl9pZl9pZGxlKHJvb3QtPmZzX2luZm8tPnNiLCBucl9wYWdlcyk7CiAKIAkJc3Bpbl9sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLQkJaWYgKHJlc2VydmVkID4gc3BhY2VfaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQpCisJCWlmIChyZXNlcnZlZCA+IHNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkKSB7CisJCQlsb29wcyA9IDA7CiAJCQlyZWNsYWltZWQgKz0gcmVzZXJ2ZWQgLSBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZDsKKwkJfSBlbHNlIHsKKwkJCWxvb3BzKys7CisJCX0KIAkJcmVzZXJ2ZWQgPSBzcGFjZV9pbmZvLT5ieXRlc19yZXNlcnZlZDsKIAkJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCkBAIC0zMzc4LDcgKzMzODEsMTIgQEAKIAkJCXJldHVybiAtRUFHQUlOOwogCiAJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJc2NoZWR1bGVfdGltZW91dChwYXVzZSk7CisJCXRpbWVfbGVmdCA9IHNjaGVkdWxlX3RpbWVvdXQocGF1c2UpOworCisJCS8qIFdlIHdlcmUgaW50ZXJydXB0ZWQsIGV4aXQgKi8KKwkJaWYgKHRpbWVfbGVmdCkKKwkJCWJyZWFrOworCiAJCXBhdXNlIDw8PSAxOwogCQlpZiAocGF1c2UgPiBIWiAvIDEwKQogCQkJcGF1c2UgPSBIWiAvIDEwOwpAQCAtMzU4OCw4ICszNTk2LDIwIEBACiAKIAlpZiAobnVtX2J5dGVzID4gMCkgewogCQlpZiAoZGVzdCkgewotCQkJYmxvY2tfcnN2X2FkZF9ieXRlcyhkZXN0LCBudW1fYnl0ZXMsIDApOwotCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrKCZkZXN0LT5sb2NrKTsKKwkJCWlmICghZGVzdC0+ZnVsbCkgeworCQkJCXU2NCBieXRlc190b19hZGQ7CisKKwkJCQlieXRlc190b19hZGQgPSBkZXN0LT5zaXplIC0gZGVzdC0+cmVzZXJ2ZWQ7CisJCQkJYnl0ZXNfdG9fYWRkID0gbWluKG51bV9ieXRlcywgYnl0ZXNfdG9fYWRkKTsKKwkJCQlkZXN0LT5yZXNlcnZlZCArPSBieXRlc190b19hZGQ7CisJCQkJaWYgKGRlc3QtPnJlc2VydmVkID49IGRlc3QtPnNpemUpCisJCQkJCWRlc3QtPmZ1bGwgPSAxOworCQkJCW51bV9ieXRlcyAtPSBieXRlc190b19hZGQ7CisJCQl9CisJCQlzcGluX3VubG9jaygmZGVzdC0+bG9jayk7CisJCX0KKwkJaWYgKG51bV9ieXRlcykgewogCQkJc3Bpbl9sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKIAkJCXNwYWNlX2luZm8tPmJ5dGVzX3Jlc2VydmVkIC09IG51bV9ieXRlczsKIAkJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKQEAgLTQwMTIsNiArNDAzMiw3IEBACiAKIAludW1fYnl0ZXMgPSBBTElHTihudW1fYnl0ZXMsIHJvb3QtPnNlY3RvcnNpemUpOwogCWF0b21pY19kZWMoJkJUUkZTX0koaW5vZGUpLT5vdXRzdGFuZGluZ19leHRlbnRzKTsKKwlXQVJOX09OKGF0b21pY19yZWFkKCZCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cykgPCAwKTsKIAogCXNwaW5fbG9jaygmQlRSRlNfSShpbm9kZSktPmFjY291bnRpbmdfbG9jayk7CiAJbnJfZXh0ZW50cyA9IGF0b21pY19yZWFkKCZCVFJGU19JKGlub2RlKS0+b3V0c3RhbmRpbmdfZXh0ZW50cyk7CkBAIC01MzU1LDcgKzUzNzYsNyBAQAogCQkJICAgICAgIG51bV9ieXRlcywgZGF0YSwgMSk7CiAJCWdvdG8gYWdhaW47CiAJfQotCWlmIChyZXQgPT0gLUVOT1NQQykgeworCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBidHJmc190ZXN0X29wdChyb290LCBFTk9TUENfREVCVUcpKSB7CiAJCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzaW5mbzsKIAogCQlzaW5mbyA9IF9fZmluZF9zcGFjZV9pbmZvKHJvb3QtPmZzX2luZm8sIGRhdGEpOwpAQCAtNTYzMyw2ICs1NjU0LDcgQEAKIAkgICAgICBzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgdTMyIGJsb2Nrc2l6ZSkKIHsKIAlzdHJ1Y3QgYnRyZnNfYmxvY2tfcnN2ICpibG9ja19yc3Y7CisJc3RydWN0IGJ0cmZzX2Jsb2NrX3JzdiAqZ2xvYmFsX3JzdiA9ICZyb290LT5mc19pbmZvLT5nbG9iYWxfYmxvY2tfcnN2OwogCWludCByZXQ7CiAKIAlibG9ja19yc3YgPSBnZXRfYmxvY2tfcnN2KHRyYW5zLCByb290KTsKQEAgLTU2NDAsMTQgKzU2NjIsMzkgQEAKIAlpZiAoYmxvY2tfcnN2LT5zaXplID09IDApIHsKIAkJcmV0ID0gcmVzZXJ2ZV9tZXRhZGF0YV9ieXRlcyh0cmFucywgcm9vdCwgYmxvY2tfcnN2LAogCQkJCQkgICAgIGJsb2Nrc2l6ZSwgMCk7Ci0JCWlmIChyZXQpCisJCS8qCisJCSAqIElmIHdlIGNvdWxkbid0IHJlc2VydmUgbWV0YWRhdGEgYnl0ZXMgdHJ5IGFuZCB1c2Ugc29tZSBmcm9tCisJCSAqIHRoZSBnbG9iYWwgcmVzZXJ2ZS4KKwkJICovCisJCWlmIChyZXQgJiYgYmxvY2tfcnN2ICE9IGdsb2JhbF9yc3YpIHsKKwkJCXJldCA9IGJsb2NrX3Jzdl91c2VfYnl0ZXMoZ2xvYmFsX3JzdiwgYmxvY2tzaXplKTsKKwkJCWlmICghcmV0KQorCQkJCXJldHVybiBnbG9iYWxfcnN2OwogCQkJcmV0dXJuIEVSUl9QVFIocmV0KTsKKwkJfSBlbHNlIGlmIChyZXQpIHsKKwkJCXJldHVybiBFUlJfUFRSKHJldCk7CisJCX0KIAkJcmV0dXJuIGJsb2NrX3JzdjsKIAl9CiAKIAlyZXQgPSBibG9ja19yc3ZfdXNlX2J5dGVzKGJsb2NrX3JzdiwgYmxvY2tzaXplKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIGJsb2NrX3JzdjsKKwlpZiAocmV0KSB7CisJCVdBUk5fT04oMSk7CisJCXJldCA9IHJlc2VydmVfbWV0YWRhdGFfYnl0ZXModHJhbnMsIHJvb3QsIGJsb2NrX3JzdiwgYmxvY2tzaXplLAorCQkJCQkgICAgIDApOworCQlpZiAoIXJldCkgeworCQkJc3Bpbl9sb2NrKCZibG9ja19yc3YtPmxvY2spOworCQkJYmxvY2tfcnN2LT5zaXplICs9IGJsb2Nrc2l6ZTsKKwkJCXNwaW5fdW5sb2NrKCZibG9ja19yc3YtPmxvY2spOworCQkJcmV0dXJuIGJsb2NrX3JzdjsKKwkJfSBlbHNlIGlmIChyZXQgJiYgYmxvY2tfcnN2ICE9IGdsb2JhbF9yc3YpIHsKKwkJCXJldCA9IGJsb2NrX3Jzdl91c2VfYnl0ZXMoZ2xvYmFsX3JzdiwgYmxvY2tzaXplKTsKKwkJCWlmICghcmV0KQorCQkJCXJldHVybiBnbG9iYWxfcnN2OworCQl9CisJfQogCiAJcmV0dXJuIEVSUl9QVFIoLUVOT1NQQyk7CiB9CkBAIC02MjIxLDYgKzYyNjgsOCBAQAogCUJVR19PTighd2MpOwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbih0cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKKwogCWlmIChibG9ja19yc3YpCiAJCXRyYW5zLT5ibG9ja19yc3YgPSBibG9ja19yc3Y7CiAKQEAgLTYzMTgsNiArNjM2Nyw3IEBACiAKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbl90aHJvdHRsZSh0cmFucywgdHJlZV9yb290KTsKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24odHJlZV9yb290LCAwKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJCWlmIChibG9ja19yc3YpCiAJCQkJdHJhbnMtPmJsb2NrX3JzdiA9IGJsb2NrX3JzdjsKIAkJfQpAQCAtNjQ0Niw2ICs2NDk2LDggQEAKIAlpbnQgcmV0ID0gMDsKIAogCXJhID0ga3phbGxvYyhzaXplb2YoKnJhKSwgR0ZQX05PRlMpOworCWlmICghcmEpCisJCXJldHVybiAtRU5PTUVNOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWZpcnN0X2luZGV4ID0gc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKQEAgLTY1MzEsNyArNjU4Myw3IEBACiAJdTY0IGVuZCA9IHN0YXJ0ICsgZXh0ZW50X2tleS0+b2Zmc2V0IC0gMTsKIAogCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7Ci0JQlVHX09OKCFlbSB8fCBJU19FUlIoZW0pKTsKKwlCVUdfT04oIWVtKTsKIAogCWVtLT5zdGFydCA9IHN0YXJ0OwogCWVtLT5sZW4gPSBleHRlbnRfa2V5LT5vZmZzZXQ7CkBAIC03NDc3LDcgKzc1MjksNyBAQAogCQlCVUdfT04ocmVsb2Nfcm9vdC0+Y29tbWl0X3Jvb3QgIT0gTlVMTCk7CiAJCXdoaWxlICgxKSB7CiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JCQlCVUdfT04oIXRyYW5zKTsKKwkJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCQkJbXV0ZXhfbG9jaygmcm9vdC0+ZnNfaW5mby0+ZHJvcF9tdXRleCk7CiAJCQlyZXQgPSBidHJmc19kcm9wX3NuYXBzaG90KHRyYW5zLCByZWxvY19yb290KTsKQEAgLTc1MzUsNyArNzU4Nyw3IEBACiAKIAlpZiAoZm91bmQpIHsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJQlVHX09OKCF0cmFucyk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJQlVHX09OKHJldCk7CiAJfQpAQCAtNzc3OSw3ICs3ODMxLDcgQEAKIAogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihleHRlbnRfcm9vdCwgMSk7Ci0JQlVHX09OKCF0cmFucyk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJaWYgKGV4dGVudF9rZXktPm9iamVjdGlkID09IDApIHsKIAkJcmV0ID0gZGVsX2V4dGVudF96ZXJvKHRyYW5zLCBleHRlbnRfcm9vdCwgcGF0aCwgZXh0ZW50X2tleSk7CkBAIC04MDEzLDYgKzgwNjUsMTMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgYnRyZnNfZm9yY2VfY2h1bmtfYWxsb2Moc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCisJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKQoreworCXU2NCBhbGxvY19mbGFncyA9IGdldF9hbGxvY19wcm9maWxlKHJvb3QsIHR5cGUpOworCXJldHVybiBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7Cit9CisKIC8qCiAgKiBoZWxwZXIgdG8gYWNjb3VudCB0aGUgdW51c2VkIHNwYWNlIG9mIGFsbCB0aGUgcmVhZG9ubHkgYmxvY2sgZ3JvdXAgaW4gdGhlCiAgKiBsaXN0LiB0YWtlcyBtaXJyb3JzIGludG8gYWNjb3VudC4KQEAgLTgyNzAsNiArODMyOSwxMyBAQAogCQlpZiAoYmxvY2tfZ3JvdXAtPmNhY2hlZCA9PSBCVFJGU19DQUNIRV9TVEFSVEVEKQogCQkJd2FpdF9ibG9ja19ncm91cF9jYWNoZV9kb25lKGJsb2NrX2dyb3VwKTsKIAorCQkvKgorCQkgKiBXZSBoYXZlbid0IGNhY2hlZCB0aGlzIGJsb2NrIGdyb3VwLCB3aGljaCBtZWFucyB3ZSBjb3VsZAorCQkgKiBwb3NzaWJseSBoYXZlIGV4Y2x1ZGVkIGV4dGVudHMgb24gdGhpcyBibG9jayBncm91cC4KKwkJICovCisJCWlmIChibG9ja19ncm91cC0+Y2FjaGVkID09IEJUUkZTX0NBQ0hFX05PKQorCQkJZnJlZV9leGNsdWRlZF9leHRlbnRzKGluZm8tPmV4dGVudF9yb290LCBibG9ja19ncm91cCk7CisKIAkJYnRyZnNfcmVtb3ZlX2ZyZWVfc3BhY2VfY2FjaGUoYmxvY2tfZ3JvdXApOwogCQlidHJmc19wdXRfYmxvY2tfZ3JvdXAoYmxvY2tfZ3JvdXApOwogCkBAIC04Mzg1LDYgKzg0NTEsMTMgQEAKIAkJY2FjaGUtPnNlY3RvcnNpemUgPSByb290LT5zZWN0b3JzaXplOwogCiAJCS8qCisJCSAqIFdlIG5lZWQgdG8gZXhjbHVkZSB0aGUgc3VwZXIgc3RyaXBlcyBub3cgc28gdGhhdCB0aGUgc3BhY2UKKwkJICogaW5mbyBoYXMgc3VwZXIgYnl0ZXMgYWNjb3VudGVkIGZvciwgb3RoZXJ3aXNlIHdlJ2xsIHRoaW5rCisJCSAqIHdlIGhhdmUgbW9yZSBzcGFjZSB0aGFuIHdlIGFjdHVhbGx5IGRvLgorCQkgKi8KKwkJZXhjbHVkZV9zdXBlcl9zdHJpcGVzKHJvb3QsIGNhY2hlKTsKKworCQkvKgogCQkgKiBjaGVjayBmb3IgdHdvIGNhc2VzLCBlaXRoZXIgd2UgYXJlIGZ1bGwsIGFuZCB0aGVyZWZvcmUKIAkJICogZG9uJ3QgbmVlZCB0byBib3RoZXIgd2l0aCB0aGUgY2FjaGluZyB3b3JrIHNpbmNlIHdlIHdvbid0CiAJCSAqIGZpbmQgYW55IHNwYWNlLCBvciB3ZSBhcmUgZW1wdHksIGFuZCB3ZSBjYW4ganVzdCBhZGQgYWxsCkBAIC04MzkyLDEyICs4NDY1LDEwIEBACiAJCSAqIHRpbWUsIHBhcnRpY3VsYXJseSBpbiB0aGUgZnVsbCBjYXNlLgogCQkgKi8KIAkJaWYgKGZvdW5kX2tleS5vZmZzZXQgPT0gYnRyZnNfYmxvY2tfZ3JvdXBfdXNlZCgmY2FjaGUtPml0ZW0pKSB7Ci0JCQlleGNsdWRlX3N1cGVyX3N0cmlwZXMocm9vdCwgY2FjaGUpOwogCQkJY2FjaGUtPmxhc3RfYnl0ZV90b191bnBpbiA9ICh1NjQpLTE7CiAJCQljYWNoZS0+Y2FjaGVkID0gQlRSRlNfQ0FDSEVfRklOSVNIRUQ7CiAJCQlmcmVlX2V4Y2x1ZGVkX2V4dGVudHMocm9vdCwgY2FjaGUpOwogCQl9IGVsc2UgaWYgKGJ0cmZzX2Jsb2NrX2dyb3VwX3VzZWQoJmNhY2hlLT5pdGVtKSA9PSAwKSB7Ci0JCQlleGNsdWRlX3N1cGVyX3N0cmlwZXMocm9vdCwgY2FjaGUpOwogCQkJY2FjaGUtPmxhc3RfYnl0ZV90b191bnBpbiA9ICh1NjQpLTE7CiAJCQljYWNoZS0+Y2FjaGVkID0gQlRSRlNfQ0FDSEVfRklOSVNIRUQ7CiAJCQlhZGRfbmV3X2ZyZWVfc3BhY2UoY2FjaGUsIHJvb3QtPmZzX2luZm8sCmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnRfaW8uYyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCmluZGV4IDJlOTkzY2YuLmZkM2YxNzIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9pby5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudF9pby5jCkBAIC0xNDMzLDEyICsxNDMzLDEzIEBACiAgKi8KIHU2NCBjb3VudF9yYW5nZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJICAgICB1NjQgKnN0YXJ0LCB1NjQgc2VhcmNoX2VuZCwgdTY0IG1heF9ieXRlcywKLQkJICAgICB1bnNpZ25lZCBsb25nIGJpdHMpCisJCSAgICAgdW5zaWduZWQgbG9uZyBiaXRzLCBpbnQgY29udGlnKQogewogCXN0cnVjdCByYl9ub2RlICpub2RlOwogCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlOwogCXU2NCBjdXJfc3RhcnQgPSAqc3RhcnQ7CiAJdTY0IHRvdGFsX2J5dGVzID0gMDsKKwl1NjQgbGFzdCA9IDA7CiAJaW50IGZvdW5kID0gMDsKIAogCWlmIChzZWFyY2hfZW5kIDw9IGN1cl9zdGFydCkgewpAQCAtMTQ2Myw3ICsxNDY0LDkgQEAKIAkJc3RhdGUgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3QgZXh0ZW50X3N0YXRlLCByYl9ub2RlKTsKIAkJaWYgKHN0YXRlLT5zdGFydCA+IHNlYXJjaF9lbmQpCiAJCQlicmVhazsKLQkJaWYgKHN0YXRlLT5lbmQgPj0gY3VyX3N0YXJ0ICYmIChzdGF0ZS0+c3RhdGUgJiBiaXRzKSkgeworCQlpZiAoY29udGlnICYmIGZvdW5kICYmIHN0YXRlLT5zdGFydCA+IGxhc3QgKyAxKQorCQkJYnJlYWs7CisJCWlmIChzdGF0ZS0+ZW5kID49IGN1cl9zdGFydCAmJiAoc3RhdGUtPnN0YXRlICYgYml0cykgPT0gYml0cykgewogCQkJdG90YWxfYnl0ZXMgKz0gbWluKHNlYXJjaF9lbmQsIHN0YXRlLT5lbmQpICsgMSAtCiAJCQkJICAgICAgIG1heChjdXJfc3RhcnQsIHN0YXRlLT5zdGFydCk7CiAJCQlpZiAodG90YWxfYnl0ZXMgPj0gbWF4X2J5dGVzKQpAQCAtMTQ3Miw2ICsxNDc1LDkgQEAKIAkJCQkqc3RhcnQgPSBzdGF0ZS0+c3RhcnQ7CiAJCQkJZm91bmQgPSAxOwogCQkJfQorCQkJbGFzdCA9IHN0YXRlLT5lbmQ7CisJCX0gZWxzZSBpZiAoY29udGlnICYmIGZvdW5kKSB7CisJCQlicmVhazsKIAkJfQogCQlub2RlID0gcmJfbmV4dChub2RlKTsKIAkJaWYgKCFub2RlKQpAQCAtMTg2NSw3ICsxODcxLDcgQEAKIAliaW9fZ2V0KGJpbyk7CiAKIAlpZiAodHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+c3VibWl0X2Jpb19ob29rKQotCQl0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vayhwYWdlLT5tYXBwaW5nLT5ob3N0LCBydywgYmlvLAorCQlyZXQgPSB0cmVlLT5vcHMtPnN1Ym1pdF9iaW9faG9vayhwYWdlLT5tYXBwaW5nLT5ob3N0LCBydywgYmlvLAogCQkJCQkgICBtaXJyb3JfbnVtLCBiaW9fZmxhZ3MsIHN0YXJ0KTsKIAllbHNlCiAJCXN1Ym1pdF9iaW8ocncsIGJpbyk7CkBAIC0xOTIwLDYgKzE5MjYsOCBAQAogCQluciA9IGJpb19nZXRfbnJfdmVjcyhiZGV2KTsKIAogCWJpbyA9IGJ0cmZzX2Jpb19hbGxvYyhiZGV2LCBzZWN0b3IsIG5yLCBHRlBfTk9GUyB8IF9fR0ZQX0hJR0gpOworCWlmICghYmlvKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCWJpb19hZGRfcGFnZShiaW8sIHBhZ2UsIHBhZ2Vfc2l6ZSwgb2Zmc2V0KTsKIAliaW8tPmJpX2VuZF9pbyA9IGVuZF9pb19mdW5jOwpAQCAtMTk0NCw2ICsxOTUyLDcgQEAKIAogc3RhdGljIHZvaWQgc2V0X3BhZ2VfZXh0ZW50X2hlYWQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbGVuKQogeworCVdBUk5fT04oIVBhZ2VQcml2YXRlKHBhZ2UpKTsKIAlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIEVYVEVOVF9QQUdFX1BSSVZBVEVfRklSU1RfUEFHRSB8IGxlbiA8PCAyKTsKIH0KIApAQCAtMjEyNiw3ICsyMTM1LDcgQEAKIAlyZXQgPSBfX2V4dGVudF9yZWFkX2Z1bGxfcGFnZSh0cmVlLCBwYWdlLCBnZXRfZXh0ZW50LCAmYmlvLCAwLAogCQkJCSAgICAgICZiaW9fZmxhZ3MpOwogCWlmIChiaW8pCi0JCXN1Ym1pdF9vbmVfYmlvKFJFQUQsIGJpbywgMCwgYmlvX2ZsYWdzKTsKKwkJcmV0ID0gc3VibWl0X29uZV9iaW8oUkVBRCwgYmlvLCAwLCBiaW9fZmxhZ3MpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4MTksOSArMjgyOCwxNyBAQAogCQkgKiBhdCB0aGlzIHBvaW50IHdlIGNhbiBzYWZlbHkgY2xlYXIgZXZlcnl0aGluZyBleGNlcHQgdGhlCiAJCSAqIGxvY2tlZCBiaXQgYW5kIHRoZSBub2RhdGFzdW0gYml0CiAJCSAqLwotCQljbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsCisJCXJldCA9IGNsZWFyX2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwKIAkJCQkgfihFWFRFTlRfTE9DS0VEIHwgRVhURU5UX05PREFUQVNVTSksCiAJCQkJIDAsIDAsIE5VTEwsIG1hc2spOworCisJCS8qIGlmIGNsZWFyX2V4dGVudF9iaXQgZmFpbGVkIGZvciBlbm9tZW0gcmVhc29ucywKKwkJICogd2UgY2FuJ3QgYWxsb3cgdGhlIHJlbGVhc2UgdG8gY29udGludWUuCisJCSAqLworCQlpZiAocmV0IDwgMCkKKwkJCXJldCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IDE7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yOTAxLDYgKzI5MTgsNDYgQEAKIAlyZXR1cm4gc2VjdG9yOwogfQogCisvKgorICogaGVscGVyIGZ1bmN0aW9uIGZvciBmaWVtYXAsIHdoaWNoIGRvZXNuJ3Qgd2FudCB0byBzZWUgYW55IGhvbGVzLgorICogVGhpcyBtYXBzIHVudGlsIHdlIGZpbmQgc29tZXRoaW5nIHBhc3QgJ2xhc3QnCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXh0ZW50X21hcCAqZ2V0X2V4dGVudF9za2lwX2hvbGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCQl1NjQgb2Zmc2V0LAorCQkJCQkJdTY0IGxhc3QsCisJCQkJCQlnZXRfZXh0ZW50X3QgKmdldF9leHRlbnQpCit7CisJdTY0IHNlY3RvcnNpemUgPSBCVFJGU19JKGlub2RlKS0+cm9vdC0+c2VjdG9yc2l6ZTsKKwlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CisJdTY0IGxlbjsKKworCWlmIChvZmZzZXQgPj0gbGFzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwl3aGlsZSgxKSB7CisJCWxlbiA9IGxhc3QgLSBvZmZzZXQ7CisJCWlmIChsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlsZW4gPSAobGVuICsgc2VjdG9yc2l6ZSAtIDEpICYgfihzZWN0b3JzaXplIC0gMSk7CisJCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgb2Zmc2V0LCBsZW4sIDApOworCQlpZiAoIWVtIHx8IElTX0VSUihlbSkpCisJCQlyZXR1cm4gZW07CisKKwkJLyogaWYgdGhpcyBpc24ndCBhIGhvbGUgcmV0dXJuIGl0ICovCisJCWlmICghdGVzdF9iaXQoRVhURU5UX0ZMQUdfVkFDQU5DWSwgJmVtLT5mbGFncykgJiYKKwkJICAgIGVtLT5ibG9ja19zdGFydCAhPSBFWFRFTlRfTUFQX0hPTEUpIHsKKwkJCXJldHVybiBlbTsKKwkJfQorCisJCS8qIHRoaXMgaXMgYSBob2xlLCBhZHZhbmNlIHRvIHRoZSBuZXh0IGV4dGVudCAqLworCQlvZmZzZXQgPSBleHRlbnRfbWFwX2VuZChlbSk7CisJCWZyZWVfZXh0ZW50X21hcChlbSk7CisJCWlmIChvZmZzZXQgPj0gbGFzdCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwogaW50IGV4dGVudF9maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJX191NjQgc3RhcnQsIF9fdTY0IGxlbiwgZ2V0X2V4dGVudF90ICpnZXRfZXh0ZW50KQogewpAQCAtMjkxMCwxNiArMjk2NywxOSBAQAogCXUzMiBmbGFncyA9IDA7CiAJdTMyIGZvdW5kX3R5cGU7CiAJdTY0IGxhc3Q7CisJdTY0IGxhc3RfZm9yX2dldF9leHRlbnQgPSAwOwogCXU2NCBkaXNrbyA9IDA7CisJdTY0IGlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCXN0cnVjdCBidHJmc19rZXkgZm91bmRfa2V5OwogCXN0cnVjdCBleHRlbnRfbWFwICplbSA9IE5VTEw7CiAJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkX3N0YXRlID0gTlVMTDsKIAlzdHJ1Y3QgYnRyZnNfcGF0aCAqcGF0aDsKIAlzdHJ1Y3QgYnRyZnNfZmlsZV9leHRlbnRfaXRlbSAqaXRlbTsKIAlpbnQgZW5kID0gMDsKLQl1NjQgZW1fc3RhcnQgPSAwLCBlbV9sZW4gPSAwOworCXU2NCBlbV9zdGFydCA9IDA7CisJdTY0IGVtX2xlbiA9IDA7CisJdTY0IGVtX2VuZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBlbWZsYWdzOwotCWludCBob2xlID0gMDsKIAogCWlmIChsZW4gPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yOTI5LDYgKzI5ODksMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwogCisJLyoKKwkgKiBsb29rdXAgdGhlIGxhc3QgZmlsZSBleHRlbnQuICBXZSdyZSBub3QgdXNpbmcgaV9zaXplIGhlcmUKKwkgKiBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHByZWFsbG9jYXRpb24gcGFzdCBpX3NpemUKKwkgKi8KIAlyZXQgPSBidHJmc19sb29rdXBfZmlsZV9leHRlbnQoTlVMTCwgQlRSRlNfSShpbm9kZSktPnJvb3QsCiAJCQkJICAgICAgIHBhdGgsIGlub2RlLT5pX2lubywgLTEsIDApOwogCWlmIChyZXQgPCAwKSB7CkBAIC0yOTQyLDE4ICszMDA2LDM4IEBACiAJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KHBhdGgtPm5vZGVzWzBdLCAmZm91bmRfa2V5LCBwYXRoLT5zbG90c1swXSk7CiAJZm91bmRfdHlwZSA9IGJ0cmZzX2tleV90eXBlKCZmb3VuZF9rZXkpOwogCi0JLyogTm8gZXh0ZW50cywganVzdCByZXR1cm4gKi8KKwkvKiBObyBleHRlbnRzLCBidXQgdGhlcmUgbWlnaHQgYmUgZGVsYWxsb2MgYml0cyAqLwogCWlmIChmb3VuZF9rZXkub2JqZWN0aWQgIT0gaW5vZGUtPmlfaW5vIHx8CiAJICAgIGZvdW5kX3R5cGUgIT0gQlRSRlNfRVhURU5UX0RBVEFfS0VZKSB7Ci0JCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQkJcmV0dXJuIDA7CisJCS8qIGhhdmUgdG8gdHJ1c3QgaV9zaXplIGFzIHRoZSBlbmQgKi8KKwkJbGFzdCA9ICh1NjQpLTE7CisJCWxhc3RfZm9yX2dldF9leHRlbnQgPSBpc2l6ZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiByZW1lbWJlciB0aGUgc3RhcnQgb2YgdGhlIGxhc3QgZXh0ZW50LiAgVGhlcmUgYXJlIGEKKwkJICogYnVuY2ggb2YgZGlmZmVyZW50IGZhY3RvcnMgdGhhdCBnbyBpbnRvIHRoZSBsZW5ndGggb2YgdGhlCisJCSAqIGV4dGVudCwgc28gaXRzIG11Y2ggbGVzcyBjb21wbGV4IHRvIHJlbWVtYmVyIHdoZXJlIGl0IHN0YXJ0ZWQKKwkJICovCisJCWxhc3QgPSBmb3VuZF9rZXkub2Zmc2V0OworCQlsYXN0X2Zvcl9nZXRfZXh0ZW50ID0gbGFzdCArIDE7CiAJfQotCWxhc3QgPSBmb3VuZF9rZXkub2Zmc2V0OwogCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAorCS8qCisJICogd2UgbWlnaHQgaGF2ZSBzb21lIGV4dGVudHMgYWxsb2NhdGVkIGJ1dCBtb3JlIGRlbGFsbG9jIHBhc3QgdGhvc2UKKwkgKiBleHRlbnRzLiAgc28sIHdlIHRydXN0IGlzaXplIHVubGVzcyB0aGUgc3RhcnQgb2YgdGhlIGxhc3QgZXh0ZW50IGlzCisJICogYmV5b25kIGlzaXplCisJICovCisJaWYgKGxhc3QgPCBpc2l6ZSkgeworCQlsYXN0ID0gKHU2NCktMTsKKwkJbGFzdF9mb3JfZ2V0X2V4dGVudCA9IGlzaXplOworCX0KKwogCWxvY2tfZXh0ZW50X2JpdHMoJkJUUkZTX0koaW5vZGUpLT5pb190cmVlLCBzdGFydCwgc3RhcnQgKyBsZW4sIDAsCiAJCQkgJmNhY2hlZF9zdGF0ZSwgR0ZQX05PRlMpOwotCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgTlVMTCwgMCwgb2ZmLCBtYXggLSBvZmYsIDApOworCisJZW0gPSBnZXRfZXh0ZW50X3NraXBfaG9sZXMoaW5vZGUsIG9mZiwgbGFzdF9mb3JfZ2V0X2V4dGVudCwKKwkJCQkgICBnZXRfZXh0ZW50KTsKIAlpZiAoIWVtKQogCQlnb3RvIG91dDsKIAlpZiAoSVNfRVJSKGVtKSkgewpAQCAtMjk2MiwxOSArMzA0NiwxNCBAQAogCX0KIAogCXdoaWxlICghZW5kKSB7Ci0JCWhvbGUgPSAwOwotCQlvZmYgPSBlbS0+c3RhcnQgKyBlbS0+bGVuOworCQlvZmYgPSBleHRlbnRfbWFwX2VuZChlbSk7CiAJCWlmIChvZmYgPj0gbWF4KQogCQkJZW5kID0gMTsKIAotCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ID09IEVYVEVOVF9NQVBfSE9MRSkgewotCQkJaG9sZSA9IDE7Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQogCQllbV9zdGFydCA9IGVtLT5zdGFydDsKIAkJZW1fbGVuID0gZW0tPmxlbjsKLQorCQllbV9lbmQgPSBleHRlbnRfbWFwX2VuZChlbSk7CisJCWVtZmxhZ3MgPSBlbS0+ZmxhZ3M7CiAJCWRpc2tvID0gMDsKIAkJZmxhZ3MgPSAwOwogCkBAIC0yOTkzLDM3ICszMDcyLDI5IEBACiAJCWlmICh0ZXN0X2JpdChFWFRFTlRfRkxBR19DT01QUkVTU0VELCAmZW0tPmZsYWdzKSkKIAkJCWZsYWdzIHw9IEZJRU1BUF9FWFRFTlRfRU5DT0RFRDsKIAotbmV4dDoKLQkJZW1mbGFncyA9IGVtLT5mbGFnczsKIAkJZnJlZV9leHRlbnRfbWFwKGVtKTsKIAkJZW0gPSBOVUxMOwotCQlpZiAoIWVuZCkgewotCQkJZW0gPSBnZXRfZXh0ZW50KGlub2RlLCBOVUxMLCAwLCBvZmYsIG1heCAtIG9mZiwgMCk7Ci0JCQlpZiAoIWVtKQotCQkJCWdvdG8gb3V0OwotCQkJaWYgKElTX0VSUihlbSkpIHsKLQkJCQlyZXQgPSBQVFJfRVJSKGVtKTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWVtZmxhZ3MgPSBlbS0+ZmxhZ3M7Ci0JCX0KLQotCQlpZiAodGVzdF9iaXQoRVhURU5UX0ZMQUdfVkFDQU5DWSwgJmVtZmxhZ3MpKSB7CisJCWlmICgoZW1fc3RhcnQgPj0gbGFzdCkgfHwgZW1fbGVuID09ICh1NjQpLTEgfHwKKwkJICAgKGxhc3QgPT0gKHU2NCktMSAmJiBpc2l6ZSA8PSBlbV9lbmQpKSB7CiAJCQlmbGFncyB8PSBGSUVNQVBfRVhURU5UX0xBU1Q7CiAJCQllbmQgPSAxOwogCQl9CiAKLQkJaWYgKGVtX3N0YXJ0ID09IGxhc3QpIHsKKwkJLyogbm93IHNjYW4gZm9yd2FyZCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgdGhlIGxhc3QgZXh0ZW50LiAqLworCQllbSA9IGdldF9leHRlbnRfc2tpcF9ob2xlcyhpbm9kZSwgb2ZmLCBsYXN0X2Zvcl9nZXRfZXh0ZW50LAorCQkJCQkgICBnZXRfZXh0ZW50KTsKKwkJaWYgKElTX0VSUihlbSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoZW0pOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKCFlbSkgewogCQkJZmxhZ3MgfD0gRklFTUFQX0VYVEVOVF9MQVNUOwogCQkJZW5kID0gMTsKIAkJfQotCi0JCWlmICghaG9sZSkgewotCQkJcmV0ID0gZmllbWFwX2ZpbGxfbmV4dF9leHRlbnQoZmllaW5mbywgZW1fc3RhcnQsIGRpc2tvLAotCQkJCQkJZW1fbGVuLCBmbGFncyk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gb3V0X2ZyZWU7Ci0JCX0KKwkJcmV0ID0gZmllbWFwX2ZpbGxfbmV4dF9leHRlbnQoZmllaW5mbywgZW1fc3RhcnQsIGRpc2tvLAorCQkJCQkgICAgICBlbV9sZW4sIGZsYWdzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2ZyZWU7CiAJfQogb3V0X2ZyZWU6CiAJZnJlZV9leHRlbnRfbWFwKGVtKTsKQEAgLTMxOTIsNyArMzI2MywxMyBAQAogCQl9CiAJCWlmICghUGFnZVVwdG9kYXRlKHApKQogCQkJdXB0b2RhdGUgPSAwOwotCQl1bmxvY2tfcGFnZShwKTsKKworCQkvKgorCQkgKiBzZWUgYmVsb3cgYWJvdXQgaG93IHdlIGF2b2lkIGEgbmFzdHkgcmFjZSB3aXRoIHJlbGVhc2UgcGFnZQorCQkgKiBhbmQgd2h5IHdlIHVubG9jayBsYXRlcgorCQkgKi8KKwkJaWYgKGkgIT0gMCkKKwkJCXVubG9ja19wYWdlKHApOwogCX0KIAlpZiAodXB0b2RhdGUpCiAJCXNldF9iaXQoRVhURU5UX0JVRkZFUl9VUFRPREFURSwgJmViLT5iZmxhZ3MpOwpAQCAtMzIxNiw5ICszMjkzLDI2IEBACiAJYXRvbWljX2luYygmZWItPnJlZnMpOwogCXNwaW5fdW5sb2NrKCZ0cmVlLT5idWZmZXJfbG9jayk7CiAJcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOworCisJLyoKKwkgKiB0aGVyZSBpcyBhIHJhY2Ugd2hlcmUgcmVsZWFzZSBwYWdlIG1heSBoYXZlCisJICogdHJpZWQgdG8gZmluZCB0aGlzIGV4dGVudCBidWZmZXIgaW4gdGhlIHJhZGl4CisJICogYnV0IGZhaWxlZC4gIEl0IHdpbGwgdGVsbCB0aGUgVk0gaXQgaXMgc2FmZSB0bworCSAqIHJlY2xhaW0gdGhlLCBhbmQgaXQgd2lsbCBjbGVhciB0aGUgcGFnZSBwcml2YXRlIGJpdC4KKwkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0byBzZXQgdGhlIHBhZ2UgcHJpdmF0ZSBiaXQgcHJvcGVybHkKKwkgKiBhZnRlciB0aGUgZXh0ZW50IGJ1ZmZlciBpcyBpbiB0aGUgcmFkaXggdHJlZSBzbworCSAqIGl0IGRvZXNuJ3QgZ2V0IGxvc3QKKwkgKi8KKwlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKGViLT5maXJzdF9wYWdlKTsKKwlzZXRfcGFnZV9leHRlbnRfaGVhZChlYi0+Zmlyc3RfcGFnZSwgZWItPmxlbik7CisJaWYgKCFwYWdlMCkKKwkJdW5sb2NrX3BhZ2UoZWItPmZpcnN0X3BhZ2UpOwogCXJldHVybiBlYjsKIAogZnJlZV9lYjoKKwlpZiAoZWItPmZpcnN0X3BhZ2UgJiYgIXBhZ2UwKQorCQl1bmxvY2tfcGFnZShlYi0+Zmlyc3RfcGFnZSk7CisKIAlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJmViLT5yZWZzKSkKIAkJcmV0dXJuIGV4aXN0czsKIAlidHJmc19yZWxlYXNlX2V4dGVudF9idWZmZXIoZWIpOwpAQCAtMzI2OSwxMCArMzM2MywxMSBAQAogCQkJY29udGludWU7CiAKIAkJbG9ja19wYWdlKHBhZ2UpOworCQlXQVJOX09OKCFQYWdlUHJpdmF0ZShwYWdlKSk7CisKKwkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKIAkJaWYgKGkgPT0gMCkKIAkJCXNldF9wYWdlX2V4dGVudF9oZWFkKHBhZ2UsIGViLT5sZW4pOwotCQllbHNlCi0JCQlzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIEVYVEVOVF9QQUdFX1BSSVZBVEUpOwogCiAJCWNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpOwogCQlzcGluX2xvY2tfaXJxKCZwYWdlLT5tYXBwaW5nLT50cmVlX2xvY2spOwpAQCAtMzQ2Miw2ICszNTU3LDEzIEBACiAKIAlmb3IgKGkgPSBzdGFydF9pOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKIAkJcGFnZSA9IGV4dGVudF9idWZmZXJfcGFnZShlYiwgaSk7CisKKwkJV0FSTl9PTighUGFnZVByaXZhdGUocGFnZSkpOworCisJCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7CisJCWlmIChpID09IDApCisJCQlzZXRfcGFnZV9leHRlbnRfaGVhZChwYWdlLCBlYi0+bGVuKTsKKwogCQlpZiAoaW5jX2FsbF9wYWdlcykKIAkJCXBhZ2VfY2FjaGVfZ2V0KHBhZ2UpOwogCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCA3MDgzY2ZhLi45MzE4ZGZlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIHU2NCBjb3VudF9yYW5nZV9iaXRzKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJICAgICB1NjQgKnN0YXJ0LCB1NjQgc2VhcmNoX2VuZCwKLQkJICAgICB1NjQgbWF4X2J5dGVzLCB1bnNpZ25lZCBsb25nIGJpdHMpOworCQkgICAgIHU2NCBtYXhfYnl0ZXMsIHVuc2lnbmVkIGxvbmcgYml0cywgaW50IGNvbnRpZyk7CiAKIHZvaWQgZnJlZV9leHRlbnRfc3RhdGUoc3RydWN0IGV4dGVudF9zdGF0ZSAqc3RhdGUpOwogaW50IHRlc3RfcmFuZ2VfYml0KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X21hcC5jIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCmluZGV4IGIwZTFmY2UuLjJiNmMxMmUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYworKysgYi9mcy9idHJmcy9leHRlbnRfbWFwLmMKQEAgLTUxLDggKzUxLDggQEAKIHsKIAlzdHJ1Y3QgZXh0ZW50X21hcCAqZW07CiAJZW0gPSBrbWVtX2NhY2hlX2FsbG9jKGV4dGVudF9tYXBfY2FjaGUsIG1hc2spOwotCWlmICghZW0gfHwgSVNfRVJSKGVtKSkKLQkJcmV0dXJuIGVtOworCWlmICghZW0pCisJCXJldHVybiBOVUxMOwogCWVtLT5pbl90cmVlID0gMDsKIAllbS0+ZmxhZ3MgPSAwOwogCWVtLT5jb21wcmVzc190eXBlID0gQlRSRlNfQ09NUFJFU1NfTk9ORTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUtaXRlbS5jIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKaW5kZXggYTU2MmEyNS4uNGYxOWEzZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZmlsZS1pdGVtLmMKKysrIGIvZnMvYnRyZnMvZmlsZS1pdGVtLmMKQEAgLTUzNiw2ICs1MzYsOCBAQAogCXJvb3QgPSByb290LT5mc19pbmZvLT5jc3VtX3Jvb3Q7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAl3aGlsZSAoMSkgewogCQlrZXkub2JqZWN0aWQgPSBCVFJGU19FWFRFTlRfQ1NVTV9PQkpFQ1RJRDsKQEAgLTU0OCw3ICs1NTAsMTAgQEAKIAkJCWlmIChwYXRoLT5zbG90c1swXSA9PSAwKQogCQkJCWdvdG8gb3V0OwogCQkJcGF0aC0+c2xvdHNbMF0tLTsKKwkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CisJCQlnb3RvIG91dDsKIAkJfQorCiAJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZrZXksIHBhdGgtPnNsb3RzWzBdKTsKIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZmlsZS5jIGIvZnMvYnRyZnMvZmlsZS5jCmluZGV4IGM4MDBkNTguLjcwODQxNDAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2ZpbGUuYworKysgYi9mcy9idHJmcy9maWxlLmMKQEAgLTE4Niw2ICsxODYsNyBAQAogCQkJc3BsaXQgPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKIAkJaWYgKCFzcGxpdDIpCiAJCQlzcGxpdDIgPSBhbGxvY19leHRlbnRfbWFwKEdGUF9OT0ZTKTsKKwkJQlVHX09OKCFzcGxpdCB8fCAhc3BsaXQyKTsKIAogCQl3cml0ZV9sb2NrKCZlbV90cmVlLT5sb2NrKTsKIAkJZW0gPSBsb29rdXBfZXh0ZW50X21hcHBpbmcoZW1fdHJlZSwgc3RhcnQsIGxlbik7CkBAIC03OTMsOCArNzk0LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CiAJCXBhZ2VzW2ldID0gZ3JhYl9jYWNoZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4ICsgaSk7CiAJCWlmICghcGFnZXNbaV0pIHsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlCVUdfT04oMSk7CisJCQlpbnQgYzsKKwkJCWZvciAoYyA9IGkgLSAxOyBjID49IDA7IGMtLSkgeworCQkJCXVubG9ja19wYWdlKHBhZ2VzW2NdKTsKKwkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZXNbY10pOworCQkJfQorCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJd2FpdF9vbl9wYWdlX3dyaXRlYmFjayhwYWdlc1tpXSk7CiAJfQpAQCAtOTQ2LDYgKzk1MSwxMCBAQAogCQkgICAgIFBBR0VfQ0FDSEVfU0laRSwgUEFHRV9DQUNIRV9TSVpFIC8KIAkJICAgICAoc2l6ZW9mKHN0cnVjdCBwYWdlICopKSk7CiAJcGFnZXMgPSBrbWFsbG9jKG5ycHRycyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwYWdlcykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAkvKiBnZW5lcmljX3dyaXRlX2NoZWNrcyBjYW4gY2hhbmdlIG91ciBwb3MgKi8KIAlzdGFydF9wb3MgPSBwb3M7CkBAIC05ODQsOCArOTkzLDggQEAKIAkJc2l6ZV90IHdyaXRlX2J5dGVzID0gbWluKGlvdl9pdGVyX2NvdW50KCZpKSwKIAkJCQkJIG5ycHRycyAqIChzaXplX3QpUEFHRV9DQUNIRV9TSVpFIC0KIAkJCQkJIG9mZnNldCk7Ci0JCXNpemVfdCBudW1fcGFnZXMgPSAod3JpdGVfYnl0ZXMgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgotCQkJCQlQQUdFX0NBQ0hFX1NISUZUOworCQlzaXplX3QgbnVtX3BhZ2VzID0gKHdyaXRlX2J5dGVzICsgb2Zmc2V0ICsKKwkJCQkgICAgUEFHRV9DQUNIRV9TSVpFIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCQlXQVJOX09OKG51bV9wYWdlcyA+IG5ycHRycyk7CiAJCW1lbXNldChwYWdlcywgMCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopICogbnJwdHJzKTsKQEAgLTEwMTUsOCArMTAyNCw4IEBACiAKIAkJY29waWVkID0gYnRyZnNfY29weV9mcm9tX3VzZXIocG9zLCBudW1fcGFnZXMsCiAJCQkJCSAgIHdyaXRlX2J5dGVzLCBwYWdlcywgJmkpOwotCQlkaXJ0eV9wYWdlcyA9IChjb3BpZWQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgotCQkJCQlQQUdFX0NBQ0hFX1NISUZUOworCQlkaXJ0eV9wYWdlcyA9IChjb3BpZWQgKyBvZmZzZXQgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PgorCQkJCVBBR0VfQ0FDSEVfU0hJRlQ7CiAKIAkJaWYgKG51bV9wYWdlcyA+IGRpcnR5X3BhZ2VzKSB7CiAJCQlpZiAoY29waWVkID4gMCkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwppbmRleCA2MGQ2ODQyLi5hMDM5MDY1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCkBAIC05ODcsMTEgKzk4NywxOCBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIHZvaWQgdW5saW5rX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKLQkJCSAgICAgIHN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvKQorc3RhdGljIGlubGluZSB2b2lkCitfX3VubGlua19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCSAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKIHsKIAlyYl9lcmFzZSgmaW5mby0+b2Zmc2V0X2luZGV4LCAmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0KTsKIAlibG9ja19ncm91cC0+ZnJlZV9leHRlbnRzLS07Cit9CisKK3N0YXRpYyB2b2lkIHVubGlua19mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgICAgICBzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSAqaW5mbykKK3sKKwlfX3VubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKIAlibG9ja19ncm91cC0+ZnJlZV9zcGFjZSAtPSBpbmZvLT5ieXRlczsKIH0KIApAQCAtMTAxNiwxNCArMTAyMywxOCBAQAogCXU2NCBtYXhfYnl0ZXM7CiAJdTY0IGJpdG1hcF9ieXRlczsKIAl1NjQgZXh0ZW50X2J5dGVzOworCXU2NCBzaXplID0gYmxvY2tfZ3JvdXAtPmtleS5vZmZzZXQ7CiAKIAkvKgogCSAqIFRoZSBnb2FsIGlzIHRvIGtlZXAgdGhlIHRvdGFsIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBwZXIgMWdiIG9mIHNwYWNlCiAJICogYXQgb3IgYmVsb3cgMzJrLCBzbyB3ZSBuZWVkIHRvIGFkanVzdCBob3cgbXVjaCBtZW1vcnkgd2UgYWxsb3cgdG8gYmUKIAkgKiB1c2VkIGJ5IGV4dGVudCBiYXNlZCBmcmVlIHNwYWNlIHRyYWNraW5nCiAJICovCi0JbWF4X2J5dGVzID0gTUFYX0NBQ0hFX0JZVEVTX1BFUl9HSUcgKgotCQkoZGl2NjRfdTY0KGJsb2NrX2dyb3VwLT5rZXkub2Zmc2V0LCAxMDI0ICogMTAyNCAqIDEwMjQpKTsKKwlpZiAoc2l6ZSA8IDEwMjQgKiAxMDI0ICogMTAyNCkKKwkJbWF4X2J5dGVzID0gTUFYX0NBQ0hFX0JZVEVTX1BFUl9HSUc7CisJZWxzZQorCQltYXhfYnl0ZXMgPSBNQVhfQ0FDSEVfQllURVNfUEVSX0dJRyAqCisJCQlkaXY2NF91NjQoc2l6ZSwgMTAyNCAqIDEwMjQgKiAxMDI0KTsKIAogCS8qCiAJICogd2Ugd2FudCB0byBhY2NvdW50IGZvciAxIG1vcmUgYml0bWFwIHRoYW4gd2hhdCB3ZSBoYXZlIHNvIHdlIGNhbiBtYWtlCkBAIC0xMTcxLDYgKzExODIsMTYgQEAKIAlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9iaXRtYXAoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpiaXRtYXBfaW5mbykKK3sKKwl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgYml0bWFwX2luZm8pOworCWtmcmVlKGJpdG1hcF9pbmZvLT5iaXRtYXApOworCWtmcmVlKGJpdG1hcF9pbmZvKTsKKwlibG9ja19ncm91cC0+dG90YWxfYml0bWFwcy0tOworCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOworfQorCiBzdGF0aWMgbm9pbmxpbmUgaW50IHJlbW92ZV9mcm9tX2JpdG1hcChzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAogCQkJICAgICAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmJpdG1hcF9pbmZvLAogCQkJICAgICAgdTY0ICpvZmZzZXQsIHU2NCAqYnl0ZXMpCkBAIC0xMTk1LDYgKzEyMTYsNyBAQAogCSAqLwogCXNlYXJjaF9zdGFydCA9ICpvZmZzZXQ7CiAJc2VhcmNoX2J5dGVzID0gKmJ5dGVzOworCXNlYXJjaF9ieXRlcyA9IG1pbihzZWFyY2hfYnl0ZXMsIGVuZCAtIHNlYXJjaF9zdGFydCArIDEpOwogCXJldCA9IHNlYXJjaF9iaXRtYXAoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvLCAmc2VhcmNoX3N0YXJ0LAogCQkJICAgICZzZWFyY2hfYnl0ZXMpOwogCUJVR19PTihyZXQgPCAwIHx8IHNlYXJjaF9zdGFydCAhPSAqb2Zmc2V0KTsKQEAgLTEyMTEsMTMgKzEyMzMsOCBAQAogCiAJaWYgKCpieXRlcykgewogCQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX25leHQoJmJpdG1hcF9pbmZvLT5vZmZzZXRfaW5kZXgpOwotCQlpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykgewotCQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKLQkJCWtmcmVlKGJpdG1hcF9pbmZvLT5iaXRtYXApOwotCQkJa2ZyZWUoYml0bWFwX2luZm8pOwotCQkJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKLQkJCXJlY2FsY3VsYXRlX3RocmVzaG9sZHMoYmxvY2tfZ3JvdXApOwotCQl9CisJCWlmICghYml0bWFwX2luZm8tPmJ5dGVzKQorCQkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKIAogCQkvKgogCQkgKiBubyBlbnRyeSBhZnRlciB0aGlzIGJpdG1hcCwgYnV0IHdlIHN0aWxsIGhhdmUgYnl0ZXMgdG8KQEAgLTEyNTAsMTMgKzEyNjcsOCBAQAogCQkJcmV0dXJuIC1FQUdBSU47CiAKIAkJZ290byBhZ2FpbjsKLQl9IGVsc2UgaWYgKCFiaXRtYXBfaW5mby0+Ynl0ZXMpIHsKLQkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKLQkJa2ZyZWUoYml0bWFwX2luZm8tPmJpdG1hcCk7Ci0JCWtmcmVlKGJpdG1hcF9pbmZvKTsKLQkJYmxvY2tfZ3JvdXAtPnRvdGFsX2JpdG1hcHMtLTsKLQkJcmVjYWxjdWxhdGVfdGhyZXNob2xkcyhibG9ja19ncm91cCk7Ci0JfQorCX0gZWxzZSBpZiAoIWJpdG1hcF9pbmZvLT5ieXRlcykKKwkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGJpdG1hcF9pbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM1OSwyMiArMTM3MSwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBidHJmc19hZGRfZnJlZV9zcGFjZShzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfY2FjaGUgKmJsb2NrX2dyb3VwLAotCQkJIHU2NCBvZmZzZXQsIHU2NCBieXRlcykKK2Jvb2wgdHJ5X21lcmdlX2ZyZWVfc3BhY2Uoc3RydWN0IGJ0cmZzX2Jsb2NrX2dyb3VwX2NhY2hlICpibG9ja19ncm91cCwKKwkJCSAgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKmluZm8sIGJvb2wgdXBkYXRlX3N0YXQpCiB7Ci0Jc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJpZ2h0X2luZm8gPSBOVUxMOwotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpsZWZ0X2luZm8gPSBOVUxMOwotCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvID0gTlVMTDsKLQlpbnQgcmV0ID0gMDsKLQotCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnRyZnNfZnJlZV9zcGFjZSksIEdGUF9OT0ZTKTsKLQlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaW5mby0+b2Zmc2V0ID0gb2Zmc2V0OwotCWluZm8tPmJ5dGVzID0gYnl0ZXM7Ci0KLQlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICpsZWZ0X2luZm87CisJc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UgKnJpZ2h0X2luZm87CisJYm9vbCBtZXJnZWQgPSBmYWxzZTsKKwl1NjQgb2Zmc2V0ID0gaW5mby0+b2Zmc2V0OworCXU2NCBieXRlcyA9IGluZm8tPmJ5dGVzOwogCiAJLyoKIAkgKiBmaXJzdCB3ZSB3YW50IHRvIHNlZSBpZiB0aGVyZSBpcyBmcmVlIHNwYWNlIGFkamFjZW50IHRvIHRoZSByYW5nZSB3ZQpAQCAtMTM4OCwzNyArMTM5Miw2MiBAQAogCWVsc2UKIAkJbGVmdF9pbmZvID0gdHJlZV9zZWFyY2hfb2Zmc2V0KGJsb2NrX2dyb3VwLCBvZmZzZXQgLSAxLCAwLCAwKTsKIAotCS8qCi0JICogSWYgdGhlcmUgd2FzIG5vIGV4dGVudCBkaXJlY3RseSB0byB0aGUgbGVmdCBvciByaWdodCBvZiB0aGlzIG5ldwotCSAqIGV4dGVudCB0aGVuIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gaGF2ZSB0byBhbGxvY2F0ZSBhIG5ldyBleHRlbnQsIHNvCi0JICogYmVmb3JlIHdlIGRvIHRoYXQgc2VlIGlmIHdlIG5lZWQgdG8gZHJvcCB0aGlzIGludG8gYSBiaXRtYXAKLQkgKi8KLQlpZiAoKCFsZWZ0X2luZm8gfHwgbGVmdF9pbmZvLT5iaXRtYXApICYmCi0JICAgICghcmlnaHRfaW5mbyB8fCByaWdodF9pbmZvLT5iaXRtYXApKSB7Ci0JCXJldCA9IGluc2VydF9pbnRvX2JpdG1hcChibG9ja19ncm91cCwgaW5mbyk7Ci0KLQkJaWYgKHJldCA8IDApIHsKLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UgaWYgKHJldCkgewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCiAJaWYgKHJpZ2h0X2luZm8gJiYgIXJpZ2h0X2luZm8tPmJpdG1hcCkgewotCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7CisJCWlmICh1cGRhdGVfc3RhdCkKKwkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCByaWdodF9pbmZvKTsKKwkJZWxzZQorCQkJX191bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgcmlnaHRfaW5mbyk7CiAJCWluZm8tPmJ5dGVzICs9IHJpZ2h0X2luZm8tPmJ5dGVzOwogCQlrZnJlZShyaWdodF9pbmZvKTsKKwkJbWVyZ2VkID0gdHJ1ZTsKIAl9CiAKIAlpZiAobGVmdF9pbmZvICYmICFsZWZ0X2luZm8tPmJpdG1hcCAmJgogCSAgICBsZWZ0X2luZm8tPm9mZnNldCArIGxlZnRfaW5mby0+Ynl0ZXMgPT0gb2Zmc2V0KSB7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBsZWZ0X2luZm8pOworCQlpZiAodXBkYXRlX3N0YXQpCisJCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKKwkJZWxzZQorCQkJX191bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgbGVmdF9pbmZvKTsKIAkJaW5mby0+b2Zmc2V0ID0gbGVmdF9pbmZvLT5vZmZzZXQ7CiAJCWluZm8tPmJ5dGVzICs9IGxlZnRfaW5mby0+Ynl0ZXM7CiAJCWtmcmVlKGxlZnRfaW5mbyk7CisJCW1lcmdlZCA9IHRydWU7CiAJfQogCisJcmV0dXJuIG1lcmdlZDsKK30KKworaW50IGJ0cmZzX2FkZF9mcmVlX3NwYWNlKHN0cnVjdCBidHJmc19ibG9ja19ncm91cF9jYWNoZSAqYmxvY2tfZ3JvdXAsCisJCQkgdTY0IG9mZnNldCwgdTY0IGJ5dGVzKQoreworCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICppbmZvOworCWludCByZXQgPSAwOworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBidHJmc19mcmVlX3NwYWNlKSwgR0ZQX05PRlMpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbmZvLT5vZmZzZXQgPSBvZmZzZXQ7CisJaW5mby0+Ynl0ZXMgPSBieXRlczsKKworCXNwaW5fbG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CisKKwlpZiAodHJ5X21lcmdlX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGluZm8sIHRydWUpKQorCQlnb3RvIGxpbms7CisKKwkvKgorCSAqIFRoZXJlIHdhcyBubyBleHRlbnQgZGlyZWN0bHkgdG8gdGhlIGxlZnQgb3IgcmlnaHQgb2YgdGhpcyBuZXcKKwkgKiBleHRlbnQgdGhlbiB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gYWxsb2NhdGUgYSBuZXcgZXh0ZW50LCBzbworCSAqIGJlZm9yZSB3ZSBkbyB0aGF0IHNlZSBpZiB3ZSBuZWVkIHRvIGRyb3AgdGhpcyBpbnRvIGEgYml0bWFwCisJICovCisJcmV0ID0gaW5zZXJ0X2ludG9fYml0bWFwKGJsb2NrX2dyb3VwLCBpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKHJldCkgeworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CitsaW5rOgogCXJldCA9IGxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CiAJaWYgKHJldCkKIAkJa2ZyZWUoaW5mbyk7CkBAIC0xNjIxLDYgKzE2NTAsNyBAQAogCQlub2RlID0gcmJfbmV4dCgmZW50cnktPm9mZnNldF9pbmRleCk7CiAJCXJiX2VyYXNlKCZlbnRyeS0+b2Zmc2V0X2luZGV4LCAmY2x1c3Rlci0+cm9vdCk7CiAJCUJVR19PTihlbnRyeS0+Yml0bWFwKTsKKwkJdHJ5X21lcmdlX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5LCBmYWxzZSk7CiAJCXRyZWVfaW5zZXJ0X29mZnNldCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0LAogCQkJCSAgIGVudHJ5LT5vZmZzZXQsICZlbnRyeS0+b2Zmc2V0X2luZGV4LCAwKTsKIAl9CkBAIC0xNjg1LDEzICsxNzE1LDggQEAKIAlyZXQgPSBvZmZzZXQ7CiAJaWYgKGVudHJ5LT5iaXRtYXApIHsKIAkJYml0bWFwX2NsZWFyX2JpdHMoYmxvY2tfZ3JvdXAsIGVudHJ5LCBvZmZzZXQsIGJ5dGVzKTsKLQkJaWYgKCFlbnRyeS0+Ynl0ZXMpIHsKLQkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7Ci0JCQlrZnJlZShlbnRyeS0+Yml0bWFwKTsKLQkJCWtmcmVlKGVudHJ5KTsKLQkJCWJsb2NrX2dyb3VwLT50b3RhbF9iaXRtYXBzLS07Ci0JCQlyZWNhbGN1bGF0ZV90aHJlc2hvbGRzKGJsb2NrX2dyb3VwKTsKLQkJfQorCQlpZiAoIWVudHJ5LT5ieXRlcykKKwkJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBlbnRyeSk7CiAJfSBlbHNlIHsKIAkJdW5saW5rX2ZyZWVfc3BhY2UoYmxvY2tfZ3JvdXAsIGVudHJ5KTsKIAkJZW50cnktPm9mZnNldCArPSBieXRlczsKQEAgLTE3ODksNiArMTgxNCw4IEBACiAKIAlyZXQgPSBzZWFyY2hfc3RhcnQ7CiAJYml0bWFwX2NsZWFyX2JpdHMoYmxvY2tfZ3JvdXAsIGVudHJ5LCByZXQsIGJ5dGVzKTsKKwlpZiAoZW50cnktPmJ5dGVzID09IDApCisJCWZyZWVfYml0bWFwKGJsb2NrX2dyb3VwLCBlbnRyeSk7CiBvdXQ6CiAJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOwogCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKQEAgLTE4NDIsMTUgKzE4NjksMjYgQEAKIAkJZW50cnktPm9mZnNldCArPSBieXRlczsKIAkJZW50cnktPmJ5dGVzIC09IGJ5dGVzOwogCi0JCWlmIChlbnRyeS0+Ynl0ZXMgPT0gMCkgeworCQlpZiAoZW50cnktPmJ5dGVzID09IDApCiAJCQlyYl9lcmFzZSgmZW50cnktPm9mZnNldF9pbmRleCwgJmNsdXN0ZXItPnJvb3QpOwotCQkJa2ZyZWUoZW50cnkpOwotCQl9CiAJCWJyZWFrOwogCX0KIG91dDoKIAlzcGluX3VubG9jaygmY2x1c3Rlci0+bG9jayk7CiAKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2soJmJsb2NrX2dyb3VwLT50cmVlX2xvY2spOworCisJYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2UgLT0gYnl0ZXM7CisJaWYgKGVudHJ5LT5ieXRlcyA9PSAwKSB7CisJCWJsb2NrX2dyb3VwLT5mcmVlX2V4dGVudHMtLTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKworCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDE2MGI1NWIuLjBlZmRiNjUgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtNDE2LDcgKzQxNiw3IEBACiAJfQogCWlmIChzdGFydCA9PSAwKSB7CiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQkJQlVHX09OKCF0cmFucyk7CisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAkJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBpbm9kZSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCkBAIC02MTIsNiArNjEyLDcgQEAKIAkJCSAgICBHRlBfTk9GUyk7CiAKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXJldCA9IGJ0cmZzX3Jlc2VydmVfZXh0ZW50KHRyYW5zLCByb290LAogCQkJCQkgICBhc3luY19leHRlbnQtPmNvbXByZXNzZWRfc2l6ZSwKIAkJCQkJICAgYXN5bmNfZXh0ZW50LT5jb21wcmVzc2VkX3NpemUsCkBAIC02NDMsNiArNjQ0LDcgQEAKIAkJCQkJYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZSAtIDEsIDApOwogCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCUJVR19PTighZW0pOwogCQllbS0+c3RhcnQgPSBhc3luY19leHRlbnQtPnN0YXJ0OwogCQllbS0+bGVuID0gYXN5bmNfZXh0ZW50LT5yYW1fc2l6ZTsKIAkJZW0tPm9yaWdfc3RhcnQgPSBlbS0+c3RhcnQ7CkBAIC03NzEsNyArNzczLDcgQEAKIAogCUJVR19PTihyb290ID09IHJvb3QtPmZzX2luZm8tPnRyZWVfcm9vdCk7CiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCUJVR19PTighdHJhbnMpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtODE5LDYgKzgyMSw3IEBACiAJCUJVR19PTihyZXQpOwogCiAJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCUJVR19PTighZW0pOwogCQllbS0+c3RhcnQgPSBzdGFydDsKIAkJZW0tPm9yaWdfc3RhcnQgPSBlbS0+c3RhcnQ7CiAJCXJhbV9zaXplID0gaW5zLm9mZnNldDsKQEAgLTEwNDksNyArMTA1Miw3IEBACiAJfSBlbHNlIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCX0KLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAljb3dfc3RhcnQgPSAodTY0KS0xOwogCWN1cl9vZmZzZXQgPSBzdGFydDsKQEAgLTExNjgsNiArMTE3MSw3IEBACiAJCQlzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICplbV90cmVlOwogCQkJZW1fdHJlZSA9ICZCVFJGU19JKGlub2RlKS0+ZXh0ZW50X3RyZWU7CiAJCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQkJQlVHX09OKCFlbSk7CiAJCQllbS0+c3RhcnQgPSBjdXJfb2Zmc2V0OwogCQkJZW0tPm9yaWdfc3RhcnQgPSBlbS0+c3RhcnQ7CiAJCQllbS0+bGVuID0gbnVtX2J5dGVzOwpAQCAtMTU1Nyw2ICsxNTYxLDcgQEAKIG91dF9wYWdlOgogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlrZnJlZShmaXh1cCk7CiB9CiAKIC8qCkBAIC0xNzAzLDcgKzE3MDgsNyBAQAogCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbl9ub2xvY2socm9vdCwgMSk7CiAJCQllbHNlCiAJCQkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCQkJQlVHX09OKCF0cmFucyk7CisJCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJCXRyYW5zLT5ibG9ja19yc3YgPSAmcm9vdC0+ZnNfaW5mby0+ZGVsYWxsb2NfYmxvY2tfcnN2OwogCQkJcmV0ID0gYnRyZnNfdXBkYXRlX2lub2RlKHRyYW5zLCByb290LCBpbm9kZSk7CkBAIC0xNzIwLDYgKzE3MjUsNyBAQAogCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOwogCWVsc2UKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtMTkwNyw3ICsxOTEzLDcgQEAKIAogCXByaXZhdGUgPSAwOwogCWlmIChjb3VudF9yYW5nZV9iaXRzKCZCVFJGU19JKGlub2RlKS0+aW9fZmFpbHVyZV90cmVlLCAmcHJpdmF0ZSwKLQkJCSAgICAgKHU2NCktMSwgMSwgRVhURU5UX0RJUlRZKSkgeworCQkJICAgICAodTY0KS0xLCAxLCBFWFRFTlRfRElSVFksIDApKSB7CiAJCXJldCA9IGdldF9zdGF0ZV9wcml2YXRlKCZCVFJGU19JKGlub2RlKS0+aW9fZmFpbHVyZV90cmVlLAogCQkJCQlzdGFydCwgJnByaXZhdGVfZmFpbHVyZSk7CiAJCWlmIChyZXQgPT0gMCkgewpAQCAtMjM1NCw2ICsyMzYwLDcgQEAKIAkJICovCiAJCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKSB7CiAJCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQkJYnRyZnNfb3JwaGFuX2RlbCh0cmFucywgaW5vZGUpOwogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWlwdXQoaW5vZGUpOwpAQCAtMjM4MSw2ICsyMzg4LDcgQEAKIAogCWlmIChyb290LT5vcnBoYW5fYmxvY2tfcnN2IHx8IHJvb3QtPm9ycGhhbl9pdGVtX2luc2VydGVkKSB7CiAJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJQlVHX09OKElTX0VSUih0cmFucykpOwogCQlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwogCX0KIApAQCAtMjY0MSw3ICsyNjQ5LDcgQEAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwogCWlmICghcGF0aCkgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsKKwkJZ290byBvdXQ7CiAJfQogCiAJcGF0aC0+bGVhdmVfc3Bpbm5pbmcgPSAxOwpAQCAtMjcxNCw5ICsyNzIyLDEwIEBACiAJc3RydWN0IGV4dGVudF9idWZmZXIgKmViOwogCWludCBsZXZlbDsKIAl1NjQgcmVmcyA9IDE7Ci0JaW50IHVuaW5pdGlhbGl6ZWRfdmFyKHJldCk7CiAKIAlmb3IgKGxldmVsID0gMDsgbGV2ZWwgPCBCVFJGU19NQVhfTEVWRUw7IGxldmVsKyspIHsKKwkJaW50IHJldDsKKwogCQlpZiAoIXBhdGgtPm5vZGVzW2xldmVsXSkKIAkJCWJyZWFrOwogCQllYiA9IHBhdGgtPm5vZGVzW2xldmVsXTsKQEAgLTI3MjcsNyArMjczNiw3IEBACiAJCWlmIChyZWZzID4gMSkKIAkJCXJldHVybiAxOwogCX0KLQlyZXR1cm4gcmV0OyAvKiBYWFggY2FsbGVycz8gKi8KKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTQxMzQsNyArNDE0Myw3IEBACiAJfQogCXNyY3VfcmVhZF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnN1YnZvbF9zcmN1LCBpbmRleCk7CiAKLQlpZiAocm9vdCAhPSBzdWJfcm9vdCkgeworCWlmICghSVNfRVJSKGlub2RlKSAmJiByb290ICE9IHN1Yl9yb290KSB7CiAJCWRvd25fcmVhZCgmcm9vdC0+ZnNfaW5mby0+Y2xlYW51cF93b3JrX3NlbSk7CiAJCWlmICghKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkKIAkJCWJ0cmZzX29ycGhhbl9jbGVhbnVwKHN1Yl9yb290KTsKQEAgLTQzNDcsNiArNDM1Niw4IEBACiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb25fbm9sb2NrKHJvb3QsIDEpOwogCQllbHNlCiAJCQl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMSk7CisJCWlmIChJU19FUlIodHJhbnMpKQorCQkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOwogCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJaWYgKG5vbG9jaykKIAkJCXJldCA9IGJ0cmZzX2VuZF90cmFuc2FjdGlvbl9ub2xvY2sodHJhbnMsIHJvb3QpOwpAQCAtNDM3Miw2ICs0MzgzLDcgQEAKIAkJcmV0dXJuOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAogCXJldCA9IGJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOwpAQCAtNTE3Niw2ICs1MTg4LDggQEAKIAkJCQllbSA9IE5VTEw7CiAJCQkJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCQkJCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKKwkJCQlpZiAoSVNfRVJSKHRyYW5zKSkKKwkJCQkJcmV0dXJuIEVSUl9DQVNUKHRyYW5zKTsKIAkJCQlnb3RvIGFnYWluOwogCQkJfQogCQkJbWFwID0ga21hcChwYWdlKTsKQEAgLTUyNjYsNiArNTI4MCwxMjggQEAKIAlyZXR1cm4gZW07CiB9CiAKK3N0cnVjdCBleHRlbnRfbWFwICpidHJmc19nZXRfZXh0ZW50X2ZpZW1hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJICAgc2l6ZV90IHBnX29mZnNldCwgdTY0IHN0YXJ0LCB1NjQgbGVuLAorCQkJCQkgICBpbnQgY3JlYXRlKQoreworCXN0cnVjdCBleHRlbnRfbWFwICplbTsKKwlzdHJ1Y3QgZXh0ZW50X21hcCAqaG9sZV9lbSA9IE5VTEw7CisJdTY0IHJhbmdlX3N0YXJ0ID0gc3RhcnQ7CisJdTY0IGVuZDsKKwl1NjQgZm91bmQ7CisJdTY0IGZvdW5kX2VuZDsKKwlpbnQgZXJyID0gMDsKKworCWVtID0gYnRyZnNfZ2V0X2V4dGVudChpbm9kZSwgcGFnZSwgcGdfb2Zmc2V0LCBzdGFydCwgbGVuLCBjcmVhdGUpOworCWlmIChJU19FUlIoZW0pKQorCQlyZXR1cm4gZW07CisJaWYgKGVtKSB7CisJCS8qCisJCSAqIGlmIG91ciBlbSBtYXBzIHRvIGEgaG9sZSwgdGhlcmUgbWlnaHQKKwkJICogYWN0dWFsbHkgYmUgZGVsYWxsb2MgYnl0ZXMgYmVoaW5kIGl0CisJCSAqLworCQlpZiAoZW0tPmJsb2NrX3N0YXJ0ICE9IEVYVEVOVF9NQVBfSE9MRSkKKwkJCXJldHVybiBlbTsKKwkJZWxzZQorCQkJaG9sZV9lbSA9IGVtOworCX0KKworCS8qIGNoZWNrIHRvIHNlZSBpZiB3ZSd2ZSB3cmFwcGVkIChsZW4gPT0gLTEgb3Igc2ltaWxhcikgKi8KKwllbmQgPSBzdGFydCArIGxlbjsKKwlpZiAoZW5kIDwgc3RhcnQpCisJCWVuZCA9ICh1NjQpLTE7CisJZWxzZQorCQllbmQgLT0gMTsKKworCWVtID0gTlVMTDsKKworCS8qIG9rLCB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZywgbGV0cyBsb29rIGZvciBkZWxhbGxvYyAqLworCWZvdW5kID0gY291bnRfcmFuZ2VfYml0cygmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsICZyYW5nZV9zdGFydCwKKwkJCQkgZW5kLCBsZW4sIEVYVEVOVF9ERUxBTExPQywgMSk7CisJZm91bmRfZW5kID0gcmFuZ2Vfc3RhcnQgKyBmb3VuZDsKKwlpZiAoZm91bmRfZW5kIDwgcmFuZ2Vfc3RhcnQpCisJCWZvdW5kX2VuZCA9ICh1NjQpLTE7CisKKwkvKgorCSAqIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIHVzZWZ1bCwgcmV0dXJuCisJICogdGhlIG9yaWdpbmFsIHJlc3VsdHMgZnJvbSBnZXRfZXh0ZW50KCkKKwkgKi8KKwlpZiAocmFuZ2Vfc3RhcnQgPiBlbmQgfHwgZm91bmRfZW5kIDw9IHN0YXJ0KSB7CisJCWVtID0gaG9sZV9lbTsKKwkJaG9sZV9lbSA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGFkanVzdCB0aGUgcmFuZ2Vfc3RhcnQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QKKwkgKiBnbyBiYWNrd2FyZHMgZnJvbSB0aGUgc3RhcnQgdGhleSBwYXNzZWQgaW4KKwkgKi8KKwlyYW5nZV9zdGFydCA9IG1heChzdGFydCxyYW5nZV9zdGFydCk7CisJZm91bmQgPSBmb3VuZF9lbmQgLSByYW5nZV9zdGFydDsKKworCWlmIChmb3VuZCA+IDApIHsKKwkJdTY0IGhvbGVfc3RhcnQgPSBzdGFydDsKKwkJdTY0IGhvbGVfbGVuID0gbGVuOworCisJCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CisJCWlmICghZW0pIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQkvKgorCQkgKiB3aGVuIGJ0cmZzX2dldF9leHRlbnQgY2FuJ3QgZmluZCBhbnl0aGluZyBpdAorCQkgKiByZXR1cm5zIG9uZSBodWdlIGhvbGUKKwkJICoKKwkJICogbWFrZSBzdXJlIHdoYXQgaXQgZm91bmQgcmVhbGx5IGZpdHMgb3VyIHJhbmdlLCBhbmQKKwkJICogYWRqdXN0IHRvIG1ha2Ugc3VyZSBpdCBpcyBiYXNlZCBvbiB0aGUgc3RhcnQgZnJvbQorCQkgKiB0aGUgY2FsbGVyCisJCSAqLworCQlpZiAoaG9sZV9lbSkgeworCQkJdTY0IGNhbGNfZW5kID0gZXh0ZW50X21hcF9lbmQoaG9sZV9lbSk7CisKKwkJCWlmIChjYWxjX2VuZCA8PSBzdGFydCB8fCAoaG9sZV9lbS0+c3RhcnQgPiBlbmQpKSB7CisJCQkJZnJlZV9leHRlbnRfbWFwKGhvbGVfZW0pOworCQkJCWhvbGVfZW0gPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQlob2xlX3N0YXJ0ID0gbWF4KGhvbGVfZW0tPnN0YXJ0LCBzdGFydCk7CisJCQkJaG9sZV9sZW4gPSBjYWxjX2VuZCAtIGhvbGVfc3RhcnQ7CisJCQl9CisJCX0KKwkJZW0tPmJkZXYgPSBOVUxMOworCQlpZiAoaG9sZV9lbSAmJiByYW5nZV9zdGFydCA+IGhvbGVfc3RhcnQpIHsKKwkJCS8qIG91ciBob2xlIHN0YXJ0cyBiZWZvcmUgb3VyIGRlbGFsbG9jLCBzbyB3ZQorCQkJICogaGF2ZSB0byByZXR1cm4ganVzdCB0aGUgcGFydHMgb2YgdGhlIGhvbGUKKwkJCSAqIHRoYXQgZ28gdW50aWwgIHRoZSBkZWxhbGxvYyBzdGFydHMKKwkJCSAqLworCQkJZW0tPmxlbiA9IG1pbihob2xlX2xlbiwKKwkJCQkgICAgICByYW5nZV9zdGFydCAtIGhvbGVfc3RhcnQpOworCQkJZW0tPnN0YXJ0ID0gaG9sZV9zdGFydDsKKwkJCWVtLT5vcmlnX3N0YXJ0ID0gaG9sZV9zdGFydDsKKwkJCS8qCisJCQkgKiBkb24ndCBhZGp1c3QgYmxvY2sgc3RhcnQgYXQgYWxsLAorCQkJICogaXQgaXMgZml4ZWQgYXQgRVhURU5UX01BUF9IT0xFCisJCQkgKi8KKwkJCWVtLT5ibG9ja19zdGFydCA9IGhvbGVfZW0tPmJsb2NrX3N0YXJ0OworCQkJZW0tPmJsb2NrX2xlbiA9IGhvbGVfbGVuOworCQl9IGVsc2UgeworCQkJZW0tPnN0YXJ0ID0gcmFuZ2Vfc3RhcnQ7CisJCQllbS0+bGVuID0gZm91bmQ7CisJCQllbS0+b3JpZ19zdGFydCA9IHJhbmdlX3N0YXJ0OworCQkJZW0tPmJsb2NrX3N0YXJ0ID0gRVhURU5UX01BUF9ERUxBTExPQzsKKwkJCWVtLT5ibG9ja19sZW4gPSBmb3VuZDsKKwkJfQorCX0gZWxzZSBpZiAoaG9sZV9lbSkgeworCQlyZXR1cm4gaG9sZV9lbTsKKwl9CitvdXQ6CisKKwlmcmVlX2V4dGVudF9tYXAoaG9sZV9lbSk7CisJaWYgKGVycikgeworCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlyZXR1cm4gZW07Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZXh0ZW50X21hcCAqYnRyZnNfbmV3X2V4dGVudF9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJCSAgdTY0IHN0YXJ0LCB1NjQgbGVuKQogewpAQCAtNTI4MCw4ICs1NDE2LDggQEAKIAlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSwgMCk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7Ci0JaWYgKCF0cmFucykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJaWYgKElTX0VSUih0cmFucykpCisJCXJldHVybiBFUlJfQ0FTVCh0cmFucyk7CiAKIAl0cmFucy0+YmxvY2tfcnN2ID0gJnJvb3QtPmZzX2luZm8tPmRlbGFsbG9jX2Jsb2NrX3JzdjsKIApAQCAtNTUwNSw3ICs1NjQxLDcgQEAKIAkJICogd2hpbGUgd2UgbG9vayBmb3Igbm9jb3cgY3Jvc3MgcmVmcwogCQkgKi8KIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwotCQlpZiAoIXRyYW5zKQorCQlpZiAoSVNfRVJSKHRyYW5zKSkKIAkJCWdvdG8gbXVzdF9jb3c7CiAKIAkJaWYgKGNhbl9ub2Nvd19vZGlyZWN0KHRyYW5zLCBpbm9kZSwgc3RhcnQsIGxlbikgPT0gMSkgewpAQCAtNTY0MCw3ICs1Nzc2LDcgQEAKIAlCVUdfT04oIW9yZGVyZWQpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwotCWlmICghdHJhbnMpIHsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC02MDg4LDcgKzYyMjQsNyBAQAogc3RhdGljIGludCBidHJmc19maWVtYXAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpZW1hcF9leHRlbnRfaW5mbyAqZmllaW5mbywKIAkJX191NjQgc3RhcnQsIF9fdTY0IGxlbikKIHsKLQlyZXR1cm4gZXh0ZW50X2ZpZW1hcChpbm9kZSwgZmllaW5mbywgc3RhcnQsIGxlbiwgYnRyZnNfZ2V0X2V4dGVudCk7CisJcmV0dXJuIGV4dGVudF9maWVtYXAoaW5vZGUsIGZpZWluZm8sIHN0YXJ0LCBsZW4sIGJ0cmZzX2dldF9leHRlbnRfZmllbWFwKTsKIH0KIAogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lvY3RsLmMgYi9mcy9idHJmcy9pb2N0bC5jCmluZGV4IGE1MDZhMjIuLjVmZGIyYWIgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lvY3RsLmMKKysrIGIvZnMvYnRyZnMvaW9jdGwuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlCVUdfT04ocmV0KTsKQEAgLTkwNyw2ICs5MDcsMTAgQEAKIAogCWlmIChuZXdfc2l6ZSA+IG9sZF9zaXplKSB7CiAJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJCWlmIChJU19FUlIodHJhbnMpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQogCQlyZXQgPSBidHJmc19ncm93X2RldmljZSh0cmFucywgZGV2aWNlLCBuZXdfc2l6ZSk7CiAJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CiAJfSBlbHNlIHsKQEAgLTEwNjcsMTIgKzEwNzEsMTUgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZsYWdzLCBhcmcsIHNpemVvZihmbGFncykpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWlmIChmbGFncyAmIH5CVFJGU19TVUJWT0xfQ1JFQVRFX0FTWU5DKQorCWlmIChmbGFncyAmIEJUUkZTX1NVQlZPTF9DUkVBVEVfQVNZTkMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzICYgfkJUUkZTX1NVQlZPTF9SRE9OTFkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAorCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAlkb3duX3dyaXRlKCZyb290LT5mc19pbmZvLT5zdWJ2b2xfc2VtKTsKIAogCS8qIG5vdGhpbmcgdG8gZG8gKi8KQEAgLTEwOTMsNyArMTEwMCw3IEBACiAJCWdvdG8gb3V0X3Jlc2V0OwogCX0KIAotCXJldCA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCByb290LAorCXJldCA9IGJ0cmZzX3VwZGF0ZV9yb290KHRyYW5zLCByb290LT5mc19pbmZvLT50cmVlX3Jvb3QsCiAJCQkJJnJvb3QtPnJvb3Rfa2V5LCAmcm9vdC0+cm9vdF9pdGVtKTsKIAogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcm9vdCk7CkBAIC0xODk4LDcgKzE5MDUsMTAgQEAKIAogCQkJbWVtY3B5KCZuZXdfa2V5LCAma2V5LCBzaXplb2YobmV3X2tleSkpOwogCQkJbmV3X2tleS5vYmplY3RpZCA9IGlub2RlLT5pX2lubzsKLQkJCW5ld19rZXkub2Zmc2V0ID0ga2V5Lm9mZnNldCArIGRlc3RvZmYgLSBvZmY7CisJCQlpZiAob2ZmIDw9IGtleS5vZmZzZXQpCisJCQkJbmV3X2tleS5vZmZzZXQgPSBrZXkub2Zmc2V0ICsgZGVzdG9mZiAtIG9mZjsKKwkJCWVsc2UKKwkJCQluZXdfa2V5Lm9mZnNldCA9IGRlc3RvZmY7CiAKIAkJCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7CiAJCQlpZiAoSVNfRVJSKHRyYW5zKSkgewpAQCAtMjA4Miw3ICsyMDkyLDcgQEAKIAogCXJldCA9IC1FTk9NRU07CiAJdHJhbnMgPSBidHJmc19zdGFydF9pb2N0bF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlpZiAoIXRyYW5zKQorCWlmIChJU19FUlIodHJhbnMpKQogCQlnb3RvIG91dF9kcm9wOwogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gdHJhbnM7CkBAIC0yMTM4LDkgKzIxNDgsOSBAQAogCXBhdGgtPmxlYXZlX3NwaW5uaW5nID0gMTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMSk7Ci0JaWYgKCF0cmFucykgeworCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBQVFJfRVJSKHRyYW5zKTsKIAl9CiAKIAlkaXJfaWQgPSBidHJmc19zdXBlcl9yb290X2Rpcigmcm9vdC0+ZnNfaW5mby0+c3VwZXJfY29weSk7CkBAIC0yMjAxLDcgKzIyMTEsNyBAQAogCWludCBudW1fdHlwZXMgPSA0OwogCWludCBhbGxvY19zaXplOwogCWludCByZXQgPSAwOwotCWludCBzbG90X2NvdW50ID0gMDsKKwl1NjQgc2xvdF9jb3VudCA9IDA7CiAJaW50IGksIGM7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnNwYWNlX2FyZ3MsCkBAIC0yMjQwLDcgKzIyNTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlzbG90X2NvdW50ID0gbWluX3QoaW50LCBzcGFjZV9hcmdzLnNwYWNlX3Nsb3RzLCBzbG90X2NvdW50KTsKKwlzbG90X2NvdW50ID0gbWluX3QodTY0LCBzcGFjZV9hcmdzLnNwYWNlX3Nsb3RzLCBzbG90X2NvdW50KTsKIAogCWFsbG9jX3NpemUgPSBzaXplb2YoKmRlc3QpICogc2xvdF9jb3VudDsKIApAQCAtMjI2MCw2ICsyMjcwLDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3R5cGVzOyBpKyspIHsKIAkJc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnRtcDsKIAorCQlpZiAoIXNsb3RfY291bnQpCisJCQlicmVhazsKKwogCQlpbmZvID0gTlVMTDsKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0bXAsICZyb290LT5mc19pbmZvLT5zcGFjZV9pbmZvLApAQCAtMjI4MSw3ICsyMjk0LDEwIEBACiAJCQkJbWVtY3B5KGRlc3QsICZzcGFjZSwgc2l6ZW9mKHNwYWNlKSk7CiAJCQkJZGVzdCsrOwogCQkJCXNwYWNlX2FyZ3MudG90YWxfc3BhY2VzKys7CisJCQkJc2xvdF9jb3VudC0tOwogCQkJfQorCQkJaWYgKCFzbG90X2NvdW50KQorCQkJCWJyZWFrOwogCQl9CiAJCXVwX3JlYWQoJmluZm8tPmdyb3Vwc19zZW0pOwogCX0KQEAgLTIzMzQsNiArMjM1MCw4IEBACiAJdTY0IHRyYW5zaWQ7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJdHJhbnNpZCA9IHRyYW5zLT50cmFuc2lkOwogCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbl9hc3luYyh0cmFucywgcm9vdCwgMCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2x6by5jIGIvZnMvYnRyZnMvbHpvLmMKaW5kZXggY2M5YjQ1MC4uYTE3OGY1ZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvbHpvLmMKKysrIGIvZnMvYnRyZnMvbHpvLmMKQEAgLTI4MCw2ICsyODAsNyBAQAogCXVuc2lnbmVkIGxvbmcgdG90X291dDsKIAl1bnNpZ25lZCBsb25nIHRvdF9sZW47CiAJY2hhciAqYnVmOworCWJvb2wgbWF5X2xhdGVfdW5tYXAsIG5lZWRfdW5tYXA7CiAKIAlkYXRhX2luID0ga21hcChwYWdlc19pblswXSk7CiAJdG90X2xlbiA9IHJlYWRfY29tcHJlc3NfbGVuZ3RoKGRhdGFfaW4pOwpAQCAtMzAwLDExICszMDEsMTMgQEAKIAogCQl0b3RfaW4gKz0gaW5fbGVuOwogCQl3b3JraW5nX2J5dGVzID0gaW5fbGVuOworCQltYXlfbGF0ZV91bm1hcCA9IG5lZWRfdW5tYXAgPSBmYWxzZTsKIAogCQkvKiBmYXN0IHBhdGg6IGF2b2lkIHVzaW5nIHRoZSB3b3JraW5nIGJ1ZmZlciAqLwogCQlpZiAoaW5fcGFnZV9ieXRlc19sZWZ0ID49IGluX2xlbikgewogCQkJYnVmID0gZGF0YV9pbiArIGluX29mZnNldDsKIAkJCWJ5dGVzID0gaW5fbGVuOworCQkJbWF5X2xhdGVfdW5tYXAgPSB0cnVlOwogCQkJZ290byBjb250OwogCQl9CiAKQEAgLTMyOSwxNCArMzMyLDE3IEBACiAJCQkJaWYgKHdvcmtpbmdfYnl0ZXMgPT0gMCAmJiB0b3RfaW4gPj0gdG90X2xlbikKIAkJCQkJYnJlYWs7CiAKLQkJCQlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOwotCQkJCXBhZ2VfaW5faW5kZXgrKzsKLQkJCQlpZiAocGFnZV9pbl9pbmRleCA+PSB0b3RhbF9wYWdlc19pbikgeworCQkJCWlmIChwYWdlX2luX2luZGV4ICsgMSA+PSB0b3RhbF9wYWdlc19pbikgewogCQkJCQlyZXQgPSAtMTsKLQkJCQkJZGF0YV9pbiA9IE5VTEw7CiAJCQkJCWdvdG8gZG9uZTsKIAkJCQl9Ci0JCQkJZGF0YV9pbiA9IGttYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOworCisJCQkJaWYgKG1heV9sYXRlX3VubWFwKQorCQkJCQluZWVkX3VubWFwID0gdHJ1ZTsKKwkJCQllbHNlCisJCQkJCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4XSk7CisKKwkJCQlkYXRhX2luID0ga21hcChwYWdlc19pblsrK3BhZ2VfaW5faW5kZXhdKTsKIAogCQkJCWluX3BhZ2VfYnl0ZXNfbGVmdCA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJCQlpbl9vZmZzZXQgPSAwOwpAQCAtMzQ2LDYgKzM1Miw4IEBACiAJCW91dF9sZW4gPSBsem8xeF93b3JzdF9jb21wcmVzcyhQQUdFX0NBQ0hFX1NJWkUpOwogCQlyZXQgPSBsem8xeF9kZWNvbXByZXNzX3NhZmUoYnVmLCBpbl9sZW4sIHdvcmtzcGFjZS0+YnVmLAogCQkJCQkgICAgJm91dF9sZW4pOworCQlpZiAobmVlZF91bm1hcCkKKwkJCWt1bm1hcChwYWdlc19pbltwYWdlX2luX2luZGV4IC0gMV0pOwogCQlpZiAocmV0ICE9IExaT19FX09LKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHJmcyBkZWNvbXByZXNzIGZhaWxlZFxuIik7CiAJCQlyZXQgPSAtMTsKQEAgLTM2Myw4ICszNzEsNyBAQAogCQkJYnJlYWs7CiAJfQogZG9uZToKLQlpZiAoZGF0YV9pbikKLQkJa3VubWFwKHBhZ2VzX2luW3BhZ2VfaW5faW5kZXhdKTsKKwlrdW5tYXAocGFnZXNfaW5bcGFnZV9pbl9pbmRleF0pOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5jIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKaW5kZXggMmI2MWUxZC4uMDgzYTU1NCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQkJCQkgIHU2NCBmaWxlX29mZnNldCkKIHsKIAlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZ0cmVlLT50cmVlOwotCXN0cnVjdCByYl9ub2RlICpwcmV2OworCXN0cnVjdCByYl9ub2RlICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmV0OwogCXN0cnVjdCBidHJmc19vcmRlcmVkX2V4dGVudCAqZW50cnk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ByaW50LXRyZWUuYyBiL2ZzL2J0cmZzL3ByaW50LXRyZWUuYwppbmRleCAwZDEyNmJlLi5mYjI2MDVkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9wcmludC10cmVlLmMKKysrIGIvZnMvYnRyZnMvcHJpbnQtdHJlZS5jCkBAIC0yNjAsNiArMjYwLDcgQEAKICNlbHNlCiAJCQlCVUcoKTsKICNlbmRpZgorCQkJYnJlYWs7CiAJCWNhc2UgQlRSRlNfQkxPQ0tfR1JPVVBfSVRFTV9LRVk6CiAJCQliaSA9IGJ0cmZzX2l0ZW1fcHRyKGwsIGksCiAJCQkJCSAgICBzdHJ1Y3QgYnRyZnNfYmxvY2tfZ3JvdXBfaXRlbSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMgYi9mcy9idHJmcy9yZWxvY2F0aW9uLmMKaW5kZXggMDQ1YzljMi4uMzFhZGU1OCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwpAQCAtMTE1Nyw2ICsxMTU3LDcgQEAKIAluZXdfbm9kZS0+Ynl0ZW5yID0gZGVzdC0+bm9kZS0+c3RhcnQ7CiAJbmV3X25vZGUtPmxldmVsID0gbm9kZS0+bGV2ZWw7CiAJbmV3X25vZGUtPmxvd2VzdCA9IG5vZGUtPmxvd2VzdDsKKwluZXdfbm9kZS0+Y2hlY2tlZCA9IDE7CiAJbmV3X25vZGUtPnJvb3QgPSBkZXN0OwogCiAJaWYgKCFub2RlLT5sb3dlc3QpIHsKQEAgLTIwMjgsNiArMjAyOSw3IEBACiAKIAl3aGlsZSAoMSkgewogCQl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJCXRyYW5zLT5ibG9ja19yc3YgPSByYy0+YmxvY2tfcnN2OwogCiAJCXJldCA9IGJ0cmZzX2Jsb2NrX3Jzdl9jaGVjayh0cmFucywgcm9vdCwgcmMtPmJsb2NrX3JzdiwKQEAgLTIxNDcsNiArMjE0OSwxMiBAQAogCX0KIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDEpOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWlmICghZXJyKQorCQkJYnRyZnNfYmxvY2tfcnN2X3JlbGVhc2UocmMtPmV4dGVudF9yb290LAorCQkJCQkJcmMtPmJsb2NrX3JzdiwgbnVtX2J5dGVzKTsKKwkJcmV0dXJuIFBUUl9FUlIodHJhbnMpOworCX0KIAogCWlmICghZXJyKSB7CiAJCWlmIChudW1fYnl0ZXMgIT0gcmMtPm1lcmdpbmdfcnN2X3NpemUpIHsKQEAgLTMyMjIsNiArMzIzMCw3IEBACiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOwogCWlmIChJU19FUlIodHJhbnMpKSB7CiAJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKKwkJcmV0ID0gUFRSX0VSUih0cmFucyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMzYyOCw2ICszNjM3LDcgQEAKIAlzZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogCXJldHVybiAwOwogfQpAQCAtMzY0NCw2ICszNjU0LDcgQEAKIAl1MzIgaXRlbV9zaXplOwogCWludCByZXQ7CiAJaW50IGVyciA9IDA7CisJaW50IHByb2dyZXNzID0gMDsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CiAJaWYgKCFwYXRoKQpAQCAtMzY1Niw4ICszNjY3LDEwIEBACiAJfQogCiAJd2hpbGUgKDEpIHsKKwkJcHJvZ3Jlc3MrKzsKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyYy0+ZXh0ZW50X3Jvb3QsIDApOwotCisJCUJVR19PTihJU19FUlIodHJhbnMpKTsKK3Jlc3RhcnQ6CiAJCWlmICh1cGRhdGVfYmFja3JlZl9jYWNoZSh0cmFucywgJnJjLT5iYWNrcmVmX2NhY2hlKSkgewogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOwogCQkJY29udGludWU7CkBAIC0zNzcwLDYgKzM3ODMsMTUgQEAKIAkJCX0KIAkJfQogCX0KKwlpZiAodHJhbnMgJiYgcHJvZ3Jlc3MgJiYgZXJyID09IC1FTk9TUEMpIHsKKwkJcmV0ID0gYnRyZnNfZm9yY2VfY2h1bmtfYWxsb2ModHJhbnMsIHJjLT5leHRlbnRfcm9vdCwKKwkJCQkJICAgICAgcmMtPmJsb2NrX2dyb3VwLT5mbGFncyk7CisJCWlmIChyZXQgPT0gMCkgeworCQkJZXJyID0gMDsKKwkJCXByb2dyZXNzID0gMDsKKwkJCWdvdG8gcmVzdGFydDsKKwkJfQorCX0KIAogCWJ0cmZzX3JlbGVhc2VfcGF0aChyYy0+ZXh0ZW50X3Jvb3QsIHBhdGgpOwogCWNsZWFyX2V4dGVudF9iaXRzKCZyYy0+cHJvY2Vzc2VkX2Jsb2NrcywgMCwgKHU2NCktMSwgRVhURU5UX0RJUlRZLApAQCAtMzgwNCw3ICszODI2LDEwIEBACiAKIAkvKiBnZXQgcmlkIG9mIHBpbm5lZCBleHRlbnRzICovCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7Ci0JYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOworCWlmIChJU19FUlIodHJhbnMpKQorCQllcnIgPSBQVFJfRVJSKHRyYW5zKTsKKwllbHNlCisJCWJ0cmZzX2NvbW1pdF90cmFuc2FjdGlvbih0cmFucywgcmMtPmV4dGVudF9yb290KTsKIG91dF9mcmVlOgogCWJ0cmZzX2ZyZWVfYmxvY2tfcnN2KHJjLT5leHRlbnRfcm9vdCwgcmMtPmJsb2NrX3Jzdik7CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOwpAQCAtNDAyMiw2ICs0MDQ3LDcgQEAKIAlpbnQgcmV0OwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LT5mc19pbmZvLT50cmVlX3Jvb3QsIDApOworCUJVR19PTihJU19FUlIodHJhbnMpKTsKIAogCW1lbXNldCgmcm9vdC0+cm9vdF9pdGVtLmRyb3BfcHJvZ3Jlc3MsIDAsCiAJCXNpemVvZihyb290LT5yb290X2l0ZW0uZHJvcF9wcm9ncmVzcykpOwpAQCAtNDEyNSw2ICs0MTUxLDExIEBACiAJc2V0X3JlbG9jX2NvbnRyb2wocmMpOwogCiAJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJjLT5leHRlbnRfcm9vdCwgMSk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIG91dF9mcmVlOworCX0KIAogCXJjLT5tZXJnZV9yZWxvY190cmVlID0gMTsKIApAQCAtNDE1NCw5ICs0MTg1LDEzIEBACiAJdW5zZXRfcmVsb2NfY29udHJvbChyYyk7CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocmMtPmV4dGVudF9yb290LCAxKTsKLQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24odHJhbnMsIHJjLT5leHRlbnRfcm9vdCk7Ci1vdXQ6CisJaWYgKElTX0VSUih0cmFucykpCisJCWVyciA9IFBUUl9FUlIodHJhbnMpOworCWVsc2UKKwkJYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByYy0+ZXh0ZW50X3Jvb3QpOworb3V0X2ZyZWU6CiAJa2ZyZWUocmMpOworb3V0OgogCXdoaWxlICghbGlzdF9lbXB0eSgmcmVsb2Nfcm9vdHMpKSB7CiAJCXJlbG9jX3Jvb3QgPSBsaXN0X2VudHJ5KHJlbG9jX3Jvb3RzLm5leHQsCiAJCQkJCXN0cnVjdCBidHJmc19yb290LCByb290X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggYjIxMzBjNC4uZDM5YTk4OSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0xNTUsNyArMTU1LDggQEAKIAlPcHRfbm9zc2QsIE9wdF9zc2Rfc3ByZWFkLCBPcHRfdGhyZWFkX3Bvb2wsIE9wdF9ub2FjbCwgT3B0X2NvbXByZXNzLAogCU9wdF9jb21wcmVzc190eXBlLCBPcHRfY29tcHJlc3NfZm9yY2UsIE9wdF9jb21wcmVzc19mb3JjZV90eXBlLAogCU9wdF9ub3RyZWVsb2csIE9wdF9yYXRpbywgT3B0X2ZsdXNob25jb21taXQsIE9wdF9kaXNjYXJkLAotCU9wdF9zcGFjZV9jYWNoZSwgT3B0X2NsZWFyX2NhY2hlLCBPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwgT3B0X2VyciwKKwlPcHRfc3BhY2VfY2FjaGUsIE9wdF9jbGVhcl9jYWNoZSwgT3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQsCisJT3B0X2Vub3NwY19kZWJ1ZywgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTE4NCw2ICsxODUsNyBAQAogCXtPcHRfc3BhY2VfY2FjaGUsICJzcGFjZV9jYWNoZSJ9LAogCXtPcHRfY2xlYXJfY2FjaGUsICJjbGVhcl9jYWNoZSJ9LAogCXtPcHRfdXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCwgInVzZXJfc3Vidm9sX3JtX2FsbG93ZWQifSwKKwl7T3B0X2Vub3NwY19kZWJ1ZywgImVub3NwY19kZWJ1ZyJ9LAogCXtPcHRfZXJyLCBOVUxMfSwKIH07CiAKQEAgLTM1OCw2ICszNjAsOSBAQAogCQljYXNlIE9wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkOgogCQkJYnRyZnNfc2V0X29wdChpbmZvLT5tb3VudF9vcHQsIFVTRVJfU1VCVk9MX1JNX0FMTE9XRUQpOwogCQkJYnJlYWs7CisJCWNhc2UgT3B0X2Vub3NwY19kZWJ1ZzoKKwkJCWJ0cmZzX3NldF9vcHQoaW5mby0+bW91bnRfb3B0LCBFTk9TUENfREVCVUcpOworCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2VycjoKIAkJCXByaW50ayhLRVJOX0lORk8gImJ0cmZzOiB1bnJlY29nbml6ZWQgbW91bnQgb3B0aW9uICIKIAkJCSAgICAgICAiJyVzJ1xuIiwgcCk7CkBAIC0zODMsNyArMzg4LDcgQEAKIAkJc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKipmc19kZXZpY2VzKQogewogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKLQljaGFyICpvcHRzLCAqcDsKKwljaGFyICpvcHRzLCAqb3JpZywgKnA7CiAJaW50IGVycm9yID0gMDsKIAlpbnQgaW50YXJnOwogCkBAIC0zOTcsNiArNDAyLDcgQEAKIAlvcHRzID0ga3N0cmR1cChvcHRpb25zLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW9wdHMpCiAJCXJldHVybiAtRU5PTUVNOworCW9yaWcgPSBvcHRzOwogCiAJd2hpbGUgKChwID0gc3Ryc2VwKCZvcHRzLCAiLCIpKSAhPSBOVUxMKSB7CiAJCWludCB0b2tlbjsKQEAgLTQzMiw3ICs0MzgsNyBAQAogCX0KIAogIG91dF9mcmVlX29wdHM6Ci0Ja2ZyZWUob3B0cyk7CisJa2ZyZWUob3JpZyk7CiAgb3V0OgogCS8qCiAJICogSWYgbm8gc3Vidm9sdW1lIG5hbWUgaXMgc3BlY2lmaWVkIHdlIHVzZSB0aGUgZGVmYXVsdCBvbmUuICBBbGxvY2F0ZQpAQCAtNjIzLDYgKzYyOSw4IEBACiAJYnRyZnNfd2FpdF9vcmRlcmVkX2V4dGVudHMocm9vdCwgMCwgMCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKQorCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CiAJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzYxLDYgKzc2OSw4IEBACiAJCX0KIAogCQlidHJmc19jbG9zZV9kZXZpY2VzKGZzX2RldmljZXMpOworCQlrZnJlZShmc19pbmZvKTsKKwkJa2ZyZWUodHJlZV9yb290KTsKIAl9IGVsc2UgewogCQljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMgYi9mcy9idHJmcy90cmFuc2FjdGlvbi5jCmluZGV4IGJhZTVjN2IuLjNkNzNjOGQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwpAQCAtMTE2MSw2ICsxMTYxLDExIEBACiAJSU5JVF9ERUxBWUVEX1dPUksoJmFjLT53b3JrLCBkb19hc3luY19jb21taXQpOwogCWFjLT5yb290ID0gcm9vdDsKIAlhYy0+bmV3dHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIoYWMtPm5ld3RyYW5zKSkgeworCQlpbnQgZXJyID0gUFRSX0VSUihhYy0+bmV3dHJhbnMpOworCQlrZnJlZShhYyk7CisJCXJldHVybiBlcnI7CisJfQogCiAJLyogdGFrZSB0cmFuc2FjdGlvbiByZWZlcmVuY2UgKi8KIAltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmVlLWxvZy5jIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwppbmRleCAwNTQ3NDRhLi5hNGJiYjg1IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmVlLWxvZy5jCisrKyBiL2ZzL2J0cmZzL3RyZWUtbG9nLmMKQEAgLTMzOCw2ICszMzgsMTIgQEAKIAkJfQogCQlkc3RfY29weSA9IGttYWxsb2MoaXRlbV9zaXplLCBHRlBfTk9GUyk7CiAJCXNyY19jb3B5ID0ga21hbGxvYyhpdGVtX3NpemUsIEdGUF9OT0ZTKTsKKwkJaWYgKCFkc3RfY29weSB8fCAhc3JjX2NvcHkpIHsKKwkJCWJ0cmZzX3JlbGVhc2VfcGF0aChyb290LCBwYXRoKTsKKwkJCWtmcmVlKGRzdF9jb3B5KTsKKwkJCWtmcmVlKHNyY19jb3B5KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CiAKIAkJcmVhZF9leHRlbnRfYnVmZmVyKGViLCBzcmNfY29weSwgc3JjX3B0ciwgaXRlbV9zaXplKTsKIApAQCAtNjY1LDYgKzY3MSw5IEBACiAJYnRyZnNfZGlyX2l0ZW1fa2V5X3RvX2NwdShsZWFmLCBkaSwgJmxvY2F0aW9uKTsKIAluYW1lX2xlbiA9IGJ0cmZzX2Rpcl9uYW1lX2xlbihsZWFmLCBkaSk7CiAJbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmVhZF9leHRlbnRfYnVmZmVyKGxlYWYsIG5hbWUsICh1bnNpZ25lZCBsb25nKShkaSArIDEpLCBuYW1lX2xlbik7CiAJYnRyZnNfcmVsZWFzZV9wYXRoKHJvb3QsIHBhdGgpOwogCkBAIC03NDQsNiArNzUzLDkgQEAKIAlpbnQgbWF0Y2ggPSAwOwogCiAJcGF0aCA9IGJ0cmZzX2FsbG9jX3BhdGgoKTsKKwlpZiAoIXBhdGgpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0ID0gYnRyZnNfc2VhcmNoX3Nsb3QoTlVMTCwgbG9nLCBrZXksIHBhdGgsIDAsIDApOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXQ7CkBAIC05NjcsNiArOTc5LDggQEAKIAlrZXkub2Zmc2V0ID0gKHU2NCktMTsKIAogCXBhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFwYXRoKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXdoaWxlICgxKSB7CiAJCXJldCA9IGJ0cmZzX3NlYXJjaF9zbG90KE5VTEwsIHJvb3QsICZrZXksIHBhdGgsIDAsIDApOwpAQCAtMTE3OCw2ICsxMTkyLDkgQEAKIAogCW5hbWVfbGVuID0gYnRyZnNfZGlyX25hbWVfbGVuKGViLCBkaSk7CiAJbmFtZSA9IGttYWxsb2MobmFtZV9sZW4sIEdGUF9OT0ZTKTsKKwlpZiAoIW5hbWUpCisJCXJldHVybiAtRU5PTUVNOworCiAJbG9nX3R5cGUgPSBidHJmc19kaXJfdHlwZShlYiwgZGkpOwogCXJlYWRfZXh0ZW50X2J1ZmZlcihlYiwgbmFtZSwgKHVuc2lnbmVkIGxvbmcpKGRpICsgMSksCiAJCSAgIG5hbWVfbGVuKTsKQEAgLTE2OTIsNiArMTcwOSw4IEBACiAJCXJvb3Rfb3duZXIgPSBidHJmc19oZWFkZXJfb3duZXIocGFyZW50KTsKIAogCQluZXh0ID0gYnRyZnNfZmluZF9jcmVhdGVfdHJlZV9ibG9jayhyb290LCBieXRlbnIsIGJsb2Nrc2l6ZSk7CisJCWlmICghbmV4dCkKKwkJCXJldHVybiAtRU5PTUVNOwogCiAJCWlmICgqbGV2ZWwgPT0gMSkgewogCQkJd2MtPnByb2Nlc3NfZnVuYyhyb290LCBuZXh0LCB3YywgcHRyX2dlbik7CkBAIC0yMDMyLDYgKzIwNTEsNyBAQAogCQl3YWl0X2xvZ19jb21taXQodHJhbnMsIGxvZ19yb290X3RyZWUsCiAJCQkJbG9nX3Jvb3RfdHJlZS0+bG9nX3RyYW5zaWQpOwogCQltdXRleF91bmxvY2soJmxvZ19yb290X3RyZWUtPmxvZ19tdXRleCk7CisJCXJldCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAlhdG9taWNfc2V0KCZsb2dfcm9vdF90cmVlLT5sb2dfY29tbWl0W2luZGV4Ml0sIDEpOwpAQCAtMjA5Niw3ICsyMTE2LDcgQEAKIAlzbXBfbWIoKTsKIAlpZiAod2FpdHF1ZXVlX2FjdGl2ZSgmcm9vdC0+bG9nX2NvbW1pdF93YWl0W2luZGV4MV0pKQogCQl3YWtlX3VwKCZyb290LT5sb2dfY29tbWl0X3dhaXRbaW5kZXgxXSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV9sb2dfdHJlZShzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKQEAgLTIxOTQsNiArMjIxNCw5IEBACiAKIAlsb2cgPSByb290LT5sb2dfcm9vdDsKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBwYXRoLCBkaXItPmlfaW5vLAogCQkJCSAgIG5hbWUsIG5hbWVfbGVuLCAtMSk7CiAJaWYgKElTX0VSUihkaSkpIHsKQEAgLTI1OTQsNiArMjYxNyw5IEBACiAKIAlpbnNfZGF0YSA9IGttYWxsb2MobnIgKiBzaXplb2Yoc3RydWN0IGJ0cmZzX2tleSkgKwogCQkJICAgbnIgKiBzaXplb2YodTMyKSwgR0ZQX05PRlMpOworCWlmICghaW5zX2RhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJaW5zX3NpemVzID0gKHUzMiAqKWluc19kYXRhOwogCWluc19rZXlzID0gKHN0cnVjdCBidHJmc19rZXkgKikoaW5zX2RhdGEgKyBuciAqIHNpemVvZih1MzIpKTsKIApAQCAtMjcyNSw3ICsyNzUxLDEzIEBACiAJbG9nID0gcm9vdC0+bG9nX3Jvb3Q7CiAKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOworCWlmICghcGF0aCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJZHN0X3BhdGggPSBidHJmc19hbGxvY19wYXRoKCk7CisJaWYgKCFkc3RfcGF0aCkgeworCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAogCW1pbl9rZXkub2JqZWN0aWQgPSBpbm9kZS0+aV9pbm87CiAJbWluX2tleS50eXBlID0gQlRSRlNfSU5PREVfSVRFTV9LRVk7CkBAIC0zMDgwLDYgKzMxMTIsNyBAQAogCUJVR19PTighcGF0aCk7CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKGZzX2luZm8tPnRyZWVfcm9vdCwgMCk7CisJQlVHX09OKElTX0VSUih0cmFucykpOwogCiAJd2MudHJhbnMgPSB0cmFuczsKIAl3Yy5waW4gPSAxOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvdm9sdW1lcy5jIGIvZnMvYnRyZnMvdm9sdW1lcy5jCmluZGV4IGQxNTg1MzAuLmRkMTNlYjggMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3ZvbHVtZXMuYworKysgYi9mcy9idHJmcy92b2x1bWVzLmMKQEAgLTEyMTMsNiArMTIxMywxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCXRyYW5zID0gYnRyZnNfc3RhcnRfdHJhbnNhY3Rpb24ocm9vdCwgMCk7CisJaWYgKElTX0VSUih0cmFucykpIHsKKwkJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworCQlyZXR1cm4gUFRSX0VSUih0cmFucyk7CisJfQogCWtleS5vYmplY3RpZCA9IEJUUkZTX0RFVl9JVEVNU19PQkpFQ1RJRDsKIAlrZXkudHlwZSA9IEJUUkZTX0RFVl9JVEVNX0tFWTsKIAlrZXkub2Zmc2V0ID0gZGV2aWNlLT5kZXZpZDsKQEAgLTEzMzQsMTEgKzEzMzgsMTEgQEAKIAogCXJldCA9IGJ0cmZzX3Nocmlua19kZXZpY2UoZGV2aWNlLCAwKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2JyZWxzZTsKKwkJZ290byBlcnJvcl91bmRvOwogCiAJcmV0ID0gYnRyZnNfcm1fZGV2X2l0ZW0ocm9vdC0+ZnNfaW5mby0+Y2h1bmtfcm9vdCwgZGV2aWNlKTsKIAlpZiAocmV0KQotCQlnb3RvIGVycm9yX2JyZWxzZTsKKwkJZ290byBlcnJvcl91bmRvOwogCiAJZGV2aWNlLT5pbl9mc19tZXRhZGF0YSA9IDA7CiAKQEAgLTE0MTIsNiArMTQxNiwxMyBAQAogCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dm9sdW1lX211dGV4KTsKIAltdXRleF91bmxvY2soJnV1aWRfbXV0ZXgpOwogCXJldHVybiByZXQ7CitlcnJvcl91bmRvOgorCWlmIChkZXZpY2UtPndyaXRlYWJsZSkgeworCQlsaXN0X2FkZCgmZGV2aWNlLT5kZXZfYWxsb2NfbGlzdCwKKwkJCSAmcm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+YWxsb2NfbGlzdCk7CisJCXJvb3QtPmZzX2luZm8tPmZzX2RldmljZXMtPnJ3X2RldmljZXMrKzsKKwl9CisJZ290byBlcnJvcl9icmVsc2U7CiB9CiAKIC8qCkBAIC0xNjAxLDExICsxNjEyLDE5IEBACiAKIAlyZXQgPSBmaW5kX25leHRfZGV2aWQocm9vdCwgJmRldmljZS0+ZGV2aWQpOwogCWlmIChyZXQpIHsKKwkJa2ZyZWUoZGV2aWNlLT5uYW1lKTsKIAkJa2ZyZWUoZGV2aWNlKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKIAl0cmFucyA9IGJ0cmZzX3N0YXJ0X3RyYW5zYWN0aW9uKHJvb3QsIDApOworCWlmIChJU19FUlIodHJhbnMpKSB7CisJCWtmcmVlKGRldmljZS0+bmFtZSk7CisJCWtmcmVlKGRldmljZSk7CisJCXJldCA9IFBUUl9FUlIodHJhbnMpOworCQlnb3RvIGVycm9yOworCX0KKwogCWxvY2tfY2h1bmtzKHJvb3QpOwogCiAJZGV2aWNlLT53cml0ZWFibGUgPSAxOwpAQCAtMTYyMSw3ICsxNjQwLDcgQEAKIAlkZXZpY2UtPmRldl9yb290ID0gcm9vdC0+ZnNfaW5mby0+ZGV2X3Jvb3Q7CiAJZGV2aWNlLT5iZGV2ID0gYmRldjsKIAlkZXZpY2UtPmluX2ZzX21ldGFkYXRhID0gMTsKLQlkZXZpY2UtPm1vZGUgPSAwOworCWRldmljZS0+bW9kZSA9IEZNT0RFX0VYQ0w7CiAJc2V0X2Jsb2Nrc2l6ZShkZXZpY2UtPmJkZXYsIDQwOTYpOwogCiAJaWYgKHNlZWRpbmdfZGV2KSB7CkBAIC0xODczLDcgKzE4OTIsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKLQlCVUdfT04oIXRyYW5zKTsKKwlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAlsb2NrX2NodW5rcyhyb290KTsKIApAQCAtMjA0Nyw3ICsyMDY2LDcgQEAKIAkJQlVHX09OKHJldCk7CiAKIAkJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihkZXZfcm9vdCwgMCk7Ci0JCUJVR19PTighdHJhbnMpOworCQlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CiAKIAkJcmV0ID0gYnRyZnNfZ3Jvd19kZXZpY2UodHJhbnMsIGRldmljZSwgb2xkX3NpemUpOwogCQlCVUdfT04ocmV0KTsKQEAgLTIyMTMsNiArMjIzMiwxMSBAQAogCiAJLyogU2hyaW5raW5nIHN1Y2NlZWRlZCwgZWxzZSB3ZSB3b3VsZCBiZSBhdCAiZG9uZSIuICovCiAJdHJhbnMgPSBidHJmc19zdGFydF90cmFuc2FjdGlvbihyb290LCAwKTsKKwlpZiAoSVNfRVJSKHRyYW5zKSkgeworCQlyZXQgPSBQVFJfRVJSKHRyYW5zKTsKKwkJZ290byBkb25lOworCX0KKwogCWxvY2tfY2h1bmtzKHJvb3QpOwogCiAJZGV2aWNlLT5kaXNrX3RvdGFsX2J5dGVzID0gbmV3X3NpemU7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2NhcHMuYyBiL2ZzL2NlcGgvY2Fwcy5jCmluZGV4IDYwZDI3YmMuLjZiNjFkZWQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvY2Fwcy5jCisrKyBiL2ZzL2NlcGgvY2Fwcy5jCkBAIC0xNTYwLDkgKzE1NjAsMTAgQEAKIAkJLyogTk9URTogbm8gc2lkZS1lZmZlY3RzIGFsbG93ZWQsIHVudGlsIHdlIHRha2Ugc19tdXRleCAqLwogCiAJCXJldm9raW5nID0gY2FwLT5pbXBsZW1lbnRlZCAmIH5jYXAtPmlzc3VlZDsKLQkJaWYgKHJldm9raW5nKQotCQkJZG91dCgiIG1kcyVkIHJldm9raW5nICVzXG4iLCBjYXAtPm1kcywKLQkJCSAgICAgY2VwaF9jYXBfc3RyaW5nKHJldm9raW5nKSk7CisJCWRvdXQoIiBtZHMlZCBjYXAgJXAgaXNzdWVkICVzIGltcGxlbWVudGVkICVzIHJldm9raW5nICVzXG4iLAorCQkgICAgIGNhcC0+bWRzLCBjYXAsIGNlcGhfY2FwX3N0cmluZyhjYXAtPmlzc3VlZCksCisJCSAgICAgY2VwaF9jYXBfc3RyaW5nKGNhcC0+aW1wbGVtZW50ZWQpLAorCQkgICAgIGNlcGhfY2FwX3N0cmluZyhyZXZva2luZykpOwogCiAJCWlmIChjYXAgPT0gY2ktPmlfYXV0aF9jYXAgJiYKIAkJICAgIChjYXAtPmlzc3VlZCAmIENFUEhfQ0FQX0ZJTEVfV1IpKSB7CkBAIC0xNjU4LDYgKzE2NTksOCBAQAogCiAJCWlmIChjYXAgPT0gY2ktPmlfYXV0aF9jYXAgJiYgY2ktPmlfZGlydHlfY2FwcykKIAkJCWZsdXNoaW5nID0gX19tYXJrX2NhcHNfZmx1c2hpbmcoaW5vZGUsIHNlc3Npb24pOworCQllbHNlCisJCQlmbHVzaGluZyA9IDA7CiAKIAkJbWRzID0gY2FwLT5tZHM7ICAvKiByZW1lbWJlciBtZHMsIHNvIHdlIGRvbid0IHJlcGVhdCAqLwogCQlzZW50Kys7CkBAIC0xOTQwLDYgKzE5NDMsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyhzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjLAorCQkJCSAgICAgc3RydWN0IGNlcGhfbWRzX3Nlc3Npb24gKnNlc3Npb24sCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShpbm9kZSk7CisJc3RydWN0IGNlcGhfY2FwICpjYXA7CisJaW50IGRlbGF5ZWQgPSAwOworCisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwljYXAgPSBjaS0+aV9hdXRoX2NhcDsKKwlkb3V0KCJraWNrX2ZsdXNoaW5nX2lub2RlX2NhcHMgJXAgZmx1c2hpbmcgJXMgZmx1c2hfc2VxICVsbGRcbiIsIGlub2RlLAorCSAgICAgY2VwaF9jYXBfc3RyaW5nKGNpLT5pX2ZsdXNoaW5nX2NhcHMpLCBjaS0+aV9jYXBfZmx1c2hfc2VxKTsKKwlfX2NlcGhfZmx1c2hfc25hcHMoY2ksICZzZXNzaW9uLCAxKTsKKwlpZiAoY2ktPmlfZmx1c2hpbmdfY2FwcykgeworCQlkZWxheWVkID0gX19zZW5kX2NhcChtZHNjLCBjYXAsIENFUEhfQ0FQX09QX0ZMVVNILAorCQkJCSAgICAgX19jZXBoX2NhcHNfdXNlZChjaSksCisJCQkJICAgICBfX2NlcGhfY2Fwc193YW50ZWQoY2kpLAorCQkJCSAgICAgY2FwLT5pc3N1ZWQgfCBjYXAtPmltcGxlbWVudGVkLAorCQkJCSAgICAgY2ktPmlfZmx1c2hpbmdfY2FwcywgTlVMTCk7CisJCWlmIChkZWxheWVkKSB7CisJCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCQkJX19jYXBfZGVsYXlfcmVxdWV1ZShtZHNjLCBjaSk7CisJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJCX0KKwl9IGVsc2UgeworCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJfQorfQorCiAKIC8qCiAgKiBUYWtlIHJlZmVyZW5jZXMgdG8gY2FwYWJpbGl0aWVzIHdlIGhvbGQsIHNvIHRoYXQgd2UgZG9uJ3QgcmVsZWFzZQpAQCAtMjY4Nyw3ICsyNzE5LDcgQEAKIAljZXBoX2FkZF9jYXAoaW5vZGUsIHNlc3Npb24sIGNhcF9pZCwgLTEsCiAJCSAgICAgaXNzdWVkLCB3YW50ZWQsIHNlcSwgbXNlcSwgcmVhbG1pbm8sIENFUEhfQ0FQX0ZMQUdfQVVUSCwKIAkJICAgICBOVUxMIC8qIG5vIGNhcHMgY29udGV4dCAqLyk7Ci0JdHJ5X2ZsdXNoX2NhcHMoaW5vZGUsIHNlc3Npb24sIE5VTEwpOworCWtpY2tfZmx1c2hpbmdfaW5vZGVfY2FwcyhtZHNjLCBzZXNzaW9uLCBpbm9kZSk7CiAJdXBfcmVhZCgmbWRzYy0+c25hcF9yd3NlbSk7CiAKIAkvKiBtYWtlIHN1cmUgd2UgcmUtcmVxdWVzdCBtYXhfc2l6ZSwgaWYgbmVjZXNzYXJ5ICovCkBAIC0yNzg1LDggKzI4MTcsNyBAQAogCWNhc2UgQ0VQSF9DQVBfT1BfSU1QT1JUOgogCQloYW5kbGVfY2FwX2ltcG9ydChtZHNjLCBpbm9kZSwgaCwgc2Vzc2lvbiwKIAkJCQkgIHNuYXB0cmFjZSwgc25hcHRyYWNlX2xlbik7Ci0JCWNlcGhfY2hlY2tfY2FwcyhjZXBoX2lub2RlKGlub2RlKSwgQ0hFQ0tfQ0FQU19OT0RFTEFZLAotCQkJCXNlc3Npb24pOworCQljZXBoX2NoZWNrX2NhcHMoY2VwaF9pbm9kZShpbm9kZSksIDAsIHNlc3Npb24pOwogCQlnb3RvIGRvbmVfdW5sb2NrZWQ7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9jZXBoL2Rpci5jIGIvZnMvY2VwaC9kaXIuYwppbmRleCAwYmM2OGRlLi4wOTlhNTg2IDEwMDY0NAotLS0gYS9mcy9jZXBoL2Rpci5jCisrKyBiL2ZzL2NlcGgvZGlyLmMKQEAgLTQwOSw3ICs0MDksNyBAQAogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaWYgKGNpLT5pX3JlbGVhc2VfY291bnQgPT0gZmktPmRpcl9yZWxlYXNlX2NvdW50KSB7CiAJCWRvdXQoIiBtYXJraW5nICVwIGNvbXBsZXRlXG4iLCBpbm9kZSk7Ci0JCWNpLT5pX2NlcGhfZmxhZ3MgfD0gQ0VQSF9JX0NPTVBMRVRFOworCQkvKiBjaS0+aV9jZXBoX2ZsYWdzIHw9IENFUEhfSV9DT01QTEVURTsgKi8KIAkJY2ktPmlfbWF4X29mZnNldCA9IGZpbHAtPmZfcG9zOwogCX0KIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CkBAIC00OTYsNiArNDk2LDcgQEAKIAogCS8qIC5zbmFwIGRpcj8gKi8KIAlpZiAoZXJyID09IC1FTk9FTlQgJiYKKwkgICAgY2VwaF9zbmFwKHBhcmVudCkgPT0gQ0VQSF9OT1NOQVAgJiYKIAkgICAgc3RyY21wKGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCSAgIGZzYy0+bW91bnRfb3B0aW9ucy0+c25hcGRpcl9uYW1lKSA9PSAwKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjZXBoX2dldF9zbmFwZGlyKHBhcmVudCk7CkBAIC0xMDI5LDI4ICsxMDMwLDggQEAKIHN0YXRpYyB2b2lkIGNlcGhfZGVudHJ5X3JlbGVhc2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCXN0cnVjdCBjZXBoX2RlbnRyeV9pbmZvICpkaSA9IGNlcGhfZGVudHJ5KGRlbnRyeSk7Ci0Jc3RydWN0IGlub2RlICpwYXJlbnRfaW5vZGUgPSBOVUxMOwotCXU2NCBzbmFwaWQgPSBDRVBIX05PU05BUDsKIAotCWlmICghSVNfUk9PVChkZW50cnkpKSB7Ci0JCXBhcmVudF9pbm9kZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7Ci0JCWlmIChwYXJlbnRfaW5vZGUpCi0JCQlzbmFwaWQgPSBjZXBoX3NuYXAocGFyZW50X2lub2RlKTsKLQl9Ci0JZG91dCgiZGVudHJ5X3JlbGVhc2UgJXAgcGFyZW50ICVwXG4iLCBkZW50cnksIHBhcmVudF9pbm9kZSk7Ci0JaWYgKHBhcmVudF9pbm9kZSAmJiBzbmFwaWQgIT0gQ0VQSF9TTkFQRElSKSB7Ci0JCXN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpID0gY2VwaF9pbm9kZShwYXJlbnRfaW5vZGUpOwotCi0JCXNwaW5fbG9jaygmcGFyZW50X2lub2RlLT5pX2xvY2spOwotCQlpZiAoY2ktPmlfc2hhcmVkX2dlbiA9PSBkaS0+bGVhc2Vfc2hhcmVkX2dlbiB8fAotCQkgICAgc25hcGlkIDw9IENFUEhfTUFYU05BUCkgewotCQkJZG91dCgiIGNsZWFyaW5nICVwIGNvbXBsZXRlIChkX3JlbGVhc2UpXG4iLAotCQkJICAgICBwYXJlbnRfaW5vZGUpOwotCQkJY2ktPmlfY2VwaF9mbGFncyAmPSB+Q0VQSF9JX0NPTVBMRVRFOwotCQkJY2ktPmlfcmVsZWFzZV9jb3VudCsrOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZwYXJlbnRfaW5vZGUtPmlfbG9jayk7Ci0JfQorCWRvdXQoImRlbnRyeV9yZWxlYXNlICVwXG4iLCBkZW50cnkpOwogCWlmIChkaSkgewogCQljZXBoX2RlbnRyeV9scnVfZGVsKGRlbnRyeSk7CiAJCWlmIChkaS0+bGVhc2Vfc2Vzc2lvbikKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvaW5vZGUuYyBiL2ZzL2NlcGgvaW5vZGUuYwppbmRleCBlODM1ZWZmLi4xOTNiZmE1IDEwMDY0NAotLS0gYS9mcy9jZXBoL2lub2RlLmMKKysrIGIvZnMvY2VwaC9pbm9kZS5jCkBAIC03MDcsMTMgKzcwNyw5IEBACiAJCSAgICAoaXNzdWVkICYgQ0VQSF9DQVBfRklMRV9FWENMKSA9PSAwICYmCiAJCSAgICAoY2ktPmlfY2VwaF9mbGFncyAmIENFUEhfSV9DT01QTEVURSkgPT0gMCkgewogCQkJZG91dCgiIG1hcmtpbmcgJXAgY29tcGxldGUgKGVtcHR5KVxuIiwgaW5vZGUpOwotCQkJY2ktPmlfY2VwaF9mbGFncyB8PSBDRVBIX0lfQ09NUExFVEU7CisJCQkvKiBjaS0+aV9jZXBoX2ZsYWdzIHw9IENFUEhfSV9DT01QTEVURTsgKi8KIAkJCWNpLT5pX21heF9vZmZzZXQgPSAyOwogCQl9Ci0KLQkJLyogaXQgbWF5IGJlIGJldHRlciB0byBzZXQgc3Rfc2l6ZSBpbiBnZXRhdHRyIGluc3RlYWQ/ICovCi0JCWlmIChjZXBoX3Rlc3RfbW91bnRfb3B0KGNlcGhfc2JfdG9fY2xpZW50KGlub2RlLT5pX3NiKSwgUkJZVEVTKSkKLQkJCWlub2RlLT5pX3NpemUgPSBjaS0+aV9yYnl0ZXM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByX2VycigiZmlsbF9pbm9kZSAlbGx4LiVsbHggQkFEIG1vZGUgMCVvXG4iLApAQCAtMTgxOSw3ICsxODE1LDExIEBACiAJCWVsc2UKIAkJCXN0YXQtPmRldiA9IDA7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCQlzdGF0LT5zaXplID0gY2ktPmlfcmJ5dGVzOworCQkJaWYgKGNlcGhfdGVzdF9tb3VudF9vcHQoY2VwaF9zYl90b19jbGllbnQoaW5vZGUtPmlfc2IpLAorCQkJCQkJUkJZVEVTKSkKKwkJCQlzdGF0LT5zaXplID0gY2ktPmlfcmJ5dGVzOworCQkJZWxzZQorCQkJCXN0YXQtPnNpemUgPSBjaS0+aV9maWxlcyArIGNpLT5pX3N1YmRpcnM7CiAJCQlzdGF0LT5ibG9ja3MgPSAwOwogCQkJc3RhdC0+Ymxrc2l6ZSA9IDY1NTM2OwogCQl9CmRpZmYgLS1naXQgYS9mcy9jZXBoL21kc19jbGllbnQuYyBiL2ZzL2NlcGgvbWRzX2NsaWVudC5jCmluZGV4IDFlMzBkMTkuLmExZWU4ZmEgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvbWRzX2NsaWVudC5jCisrKyBiL2ZzL2NlcGgvbWRzX2NsaWVudC5jCkBAIC02OTMsOSArNjkzLDExIEBACiAJCQkJZG91dCgiY2hvb3NlX21kcyAlcCAlbGx4LiVsbHggIgogCQkJCSAgICAgImZyYWcgJXUgbWRzJWQgKCVkLyVkKVxuIiwKIAkJCQkgICAgIGlub2RlLCBjZXBoX3Zpbm9wKGlub2RlKSwKLQkJCQkgICAgIGZyYWcuZnJhZywgZnJhZy5tZHMsCisJCQkJICAgICBmcmFnLmZyYWcsIG1kcywKIAkJCQkgICAgIChpbnQpciwgZnJhZy5uZGlzdCk7Ci0JCQkJcmV0dXJuIG1kczsKKwkJCQlpZiAoY2VwaF9tZHNtYXBfZ2V0X3N0YXRlKG1kc2MtPm1kc21hcCwgbWRzKSA+PQorCQkJCSAgICBDRVBIX01EU19TVEFURV9BQ1RJVkUpCisJCQkJCXJldHVybiBtZHM7CiAJCQl9CiAKIAkJCS8qIHNpbmNlIHRoaXMgZmlsZS9kaXIgd2Fzbid0IGtub3duIHRvIGJlCkBAIC03MDgsNyArNzEwLDkgQEAKIAkJCQlkb3V0KCJjaG9vc2VfbWRzICVwICVsbHguJWxseCAiCiAJCQkJICAgICAiZnJhZyAldSBtZHMlZCAoYXV0aClcbiIsCiAJCQkJICAgICBpbm9kZSwgY2VwaF92aW5vcChpbm9kZSksIGZyYWcuZnJhZywgbWRzKTsKLQkJCQlyZXR1cm4gbWRzOworCQkJCWlmIChjZXBoX21kc21hcF9nZXRfc3RhdGUobWRzYy0+bWRzbWFwLCBtZHMpID49CisJCQkJICAgIENFUEhfTURTX1NUQVRFX0FDVElWRSkKKwkJCQkJcmV0dXJuIG1kczsKIAkJCX0KIAkJfQogCX0KZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc25hcC5jIGIvZnMvY2VwaC9zbmFwLmMKaW5kZXggMzljMjQzYS4uZjQwYjkxMyAxMDA2NDQKLS0tIGEvZnMvY2VwaC9zbmFwLmMKKysrIGIvZnMvY2VwaC9zbmFwLmMKQEAgLTU4NCwxMCArNTg0LDE0IEBACiAJaWYgKGxhc3Rpbm9kZSkKIAkJaXB1dChsYXN0aW5vZGUpOwogCi0JZG91dCgicXVldWVfcmVhbG1fY2FwX3NuYXBzICVwICVsbHggY2hpbGRyZW5cbiIsIHJlYWxtLCByZWFsbS0+aW5vKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmcmVhbG0tPmNoaWxkcmVuLCBjaGlsZF9pdGVtKQotCQlxdWV1ZV9yZWFsbV9jYXBfc25hcHMoY2hpbGQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZyZWFsbS0+Y2hpbGRyZW4sIGNoaWxkX2l0ZW0pIHsKKwkJZG91dCgicXVldWVfcmVhbG1fY2FwX3NuYXBzICVwICVsbHggcXVldWUgY2hpbGQgJXAgJWxseFxuIiwKKwkJICAgICByZWFsbSwgcmVhbG0tPmlubywgY2hpbGQsIGNoaWxkLT5pbm8pOworCQlsaXN0X2RlbF9pbml0KCZjaGlsZC0+ZGlydHlfaXRlbSk7CisJCWxpc3RfYWRkKCZjaGlsZC0+ZGlydHlfaXRlbSwgJnJlYWxtLT5kaXJ0eV9pdGVtKTsKKwl9CiAKKwlsaXN0X2RlbF9pbml0KCZyZWFsbS0+ZGlydHlfaXRlbSk7CiAJZG91dCgicXVldWVfcmVhbG1fY2FwX3NuYXBzICVwICVsbHggZG9uZVxuIiwgcmVhbG0sIHJlYWxtLT5pbm8pOwogfQogCkBAIC02ODMsNyArNjg3LDkgQEAKIAkgKiBxdWV1ZSBjYXAgc25hcHMgX2FmdGVyXyB3ZSd2ZSBidWlsdCB0aGUgbmV3IHNuYXAgY29udGV4dHMsCiAJICogc28gdGhhdCBpX2hlYWRfc25hcGMgY2FuIGJlIHNldCBhcHByb3ByaWF0ZWx5LgogCSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkocmVhbG0sICZkaXJ0eV9yZWFsbXMsIGRpcnR5X2l0ZW0pIHsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmRpcnR5X3JlYWxtcykpIHsKKwkJcmVhbG0gPSBsaXN0X2ZpcnN0X2VudHJ5KCZkaXJ0eV9yZWFsbXMsIHN0cnVjdCBjZXBoX3NuYXBfcmVhbG0sCisJCQkJCSBkaXJ0eV9pdGVtKTsKIAkJcXVldWVfcmVhbG1fY2FwX3NuYXBzKHJlYWxtKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2NlcGgvc3VwZXIuYyBiL2ZzL2NlcGgvc3VwZXIuYwppbmRleCBiZjZmMGYzLi45YzUwODU0IDEwMDY0NAotLS0gYS9mcy9jZXBoL3N1cGVyLmMKKysrIGIvZnMvY2VwaC9zdXBlci5jCkBAIC0yOTAsNiArMjkwLDggQEAKIAogICAgICAgICBmc29wdC0+cnNpemUgPSBDRVBIX01PVU5UX1JTSVpFX0RFRkFVTFQ7CiAgICAgICAgIGZzb3B0LT5zbmFwZGlyX25hbWUgPSBrc3RyZHVwKENFUEhfU05BUERJUk5BTUVfREVGQVVMVCwgR0ZQX0tFUk5FTCk7CisJZnNvcHQtPmNhcHNfd2FudGVkX2RlbGF5X21pbiA9IENFUEhfQ0FQU19XQU5URURfREVMQVlfTUlOX0RFRkFVTFQ7CisJZnNvcHQtPmNhcHNfd2FudGVkX2RlbGF5X21heCA9IENFUEhfQ0FQU19XQU5URURfREVMQVlfTUFYX0RFRkFVTFQ7CiAgICAgICAgIGZzb3B0LT5jYXBfcmVsZWFzZV9zYWZldHkgPSBDRVBIX0NBUF9SRUxFQVNFX1NBRkVUWV9ERUZBVUxUOwogICAgICAgICBmc29wdC0+bWF4X3JlYWRkaXIgPSBDRVBIX01BWF9SRUFERElSX0RFRkFVTFQ7CiAgICAgICAgIGZzb3B0LT5tYXhfcmVhZGRpcl9ieXRlcyA9IENFUEhfTUFYX1JFQURESVJfQllURVNfREVGQVVMVDsKZGlmZiAtLWdpdCBhL2ZzL2NlcGgveGF0dHIuYyBiL2ZzL2NlcGgveGF0dHIuYwppbmRleCA2ZTEyYTZiLi44YzllYmE2IDEwMDY0NAotLS0gYS9mcy9jZXBoL3hhdHRyLmMKKysrIGIvZnMvY2VwaC94YXR0ci5jCkBAIC0yMTksNiArMjE5LDcgQEAKIAlzdHJ1Y3QgcmJfbm9kZSAqKnA7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IGNlcGhfaW5vZGVfeGF0dHIgKnhhdHRyID0gTlVMTDsKKwlpbnQgbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiAJaW50IGM7CiAKIAlwID0gJmNpLT5pX3hhdHRycy5pbmRleC5yYl9ub2RlOwpAQCAtMjI2LDYgKzIyNyw4IEBACiAJCXBhcmVudCA9ICpwOwogCQl4YXR0ciA9IHJiX2VudHJ5KHBhcmVudCwgc3RydWN0IGNlcGhfaW5vZGVfeGF0dHIsIG5vZGUpOwogCQljID0gc3RybmNtcChuYW1lLCB4YXR0ci0+bmFtZSwgeGF0dHItPm5hbWVfbGVuKTsKKwkJaWYgKGMgPT0gMCAmJiBuYW1lX2xlbiA+IHhhdHRyLT5uYW1lX2xlbikKKwkJCWMgPSAxOwogCQlpZiAoYyA8IDApCiAJCQlwID0gJigqcCktPnJiX2xlZnQ7CiAJCWVsc2UgaWYgKGMgPiAwKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9LY29uZmlnIGIvZnMvY2lmcy9LY29uZmlnCmluZGV4IGVlNDU2NDguLjdjYjBmN2YgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvS2NvbmZpZworKysgYi9mcy9jaWZzL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAJZGVwZW5kcyBvbiBJTkVUCiAJc2VsZWN0IE5MUwogCXNlbGVjdCBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX01ENAogCXNlbGVjdCBDUllQVE9fTUQ1CiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19BUkM0CmRpZmYgLS1naXQgYS9mcy9jaWZzL01ha2VmaWxlIGIvZnMvY2lmcy9NYWtlZmlsZQppbmRleCA0M2IxOWRkLi5kODc1NTg0IDEwMDY0NAotLS0gYS9mcy9jaWZzL01ha2VmaWxlCisrKyBiL2ZzL2NpZnMvTWFrZWZpbGUKQEAgLTUsNyArNSw3IEBACiAKIGNpZnMteSA6PSBjaWZzZnMubyBjaWZzc21iLm8gY2lmc19kZWJ1Zy5vIGNvbm5lY3QubyBkaXIubyBmaWxlLm8gaW5vZGUubyBcCiAJICBsaW5rLm8gbWlzYy5vIG5ldG1pc2MubyBzbWJkZXMubyBzbWJlbmNyeXB0Lm8gdHJhbnNwb3J0Lm8gYXNuMS5vIFwKLQkgIG1kNC5vIG1kNS5vIGNpZnNfdW5pY29kZS5vIG50ZXJyLm8geGF0dHIubyBjaWZzZW5jcnlwdC5vIFwKKwkgIGNpZnNfdW5pY29kZS5vIG50ZXJyLm8geGF0dHIubyBjaWZzZW5jcnlwdC5vIFwKIAkgIHJlYWRkaXIubyBpb2N0bC5vIHNlc3MubyBleHBvcnQubwogCiBjaWZzLSQoQ09ORklHX0NJRlNfQUNMKSArPSBjaWZzYWNsLm8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvUkVBRE1FIGIvZnMvY2lmcy9SRUFETUUKaW5kZXggNDZhZjk5YS4uZmUxNjgzNSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9SRUFETUUKKysrIGIvZnMvY2lmcy9SRUFETUUKQEAgLTQ1Miw2ICs0NTIsMTEgQEAKIAkJaWYgb3Bsb2NrIChjYWNoaW5nIHRva2VuKSBpcyBncmFudGVkIGFuZCBoZWxkLiBOb3RlIHRoYXQKIAkJZGlyZWN0IGFsbG93cyB3cml0ZSBvcGVyYXRpb25zIGxhcmdlciB0aGFuIHBhZ2Ugc2l6ZQogCQl0byBiZSBzZW50IHRvIHRoZSBzZXJ2ZXIuCisgIHN0cmljdGNhY2hlICAgVXNlIGZvciBzd2l0Y2hpbmcgb24gc3RyaWN0IGNhY2hlIG1vZGUuIEluIHRoaXMgbW9kZSB0aGUKKwkJY2xpZW50IHJlYWQgZnJvbSB0aGUgY2FjaGUgYWxsIHRoZSB0aW1lIGl0IGhhcyBPcGxvY2sgTGV2ZWwgSUksCisJCW90aGVyd2lzZSAtIHJlYWQgZnJvbSB0aGUgc2VydmVyLiBBbGwgd3JpdHRlbiBkYXRhIGFyZSBzdG9yZWQKKwkJaW4gdGhlIGNhY2hlLCBidXQgaWYgdGhlIGNsaWVudCBkb2Vzbid0IGhhdmUgRXhjbHVzaXZlIE9wbG9jaywKKwkJaXQgd3JpdGVzIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIuCiAgIGFjbCAgIAlBbGxvdyBzZXRmYWNsIGFuZCBnZXRmYWNsIHRvIG1hbmFnZSBwb3NpeCBBQ0xzIGlmIHNlcnZlcgogCQlzdXBwb3J0cyB0aGVtLiAgKGRlZmF1bHQpCiAgIG5vYWNsIAlEbyBub3QgYWxsb3cgc2V0ZmFjbCBhbmQgZ2V0ZmFjbCBjYWxscyBvbiB0aGlzIG1vdW50CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCA3ZWQzNjUzLi4wYTI2NWFkIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTI4Miw4ICsyODIsNiBAQAogCWNGWUkoMSwgImluICVzIiwgX19mdW5jX18pOwogCUJVR19PTihJU19ST09UKG1udHB0KSk7CiAKLQl4aWQgPSBHZXRYaWQoKTsKLQogCS8qCiAJICogVGhlIE1TREZTIHNwZWMgc3RhdGVzIHRoYXQgcGF0aHMgaW4gREZTIHJlZmVycmFsIHJlcXVlc3RzIGFuZAogCSAqIHJlc3BvbnNlcyBtdXN0IGJlIHByZWZpeGVkIGJ5IGEgc2luZ2xlICdcJyBjaGFyYWN0ZXIgaW5zdGVhZCBvZgpAQCAtMjkzLDIwICsyOTEsMjEgQEAKIAltbnQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkobW50cHQpOwogCWlmIChmdWxsX3BhdGggPT0gTlVMTCkKLQkJZ290byBmcmVlX3hpZDsKKwkJZ290byBjZGRhX2V4aXQ7CiAKIAljaWZzX3NiID0gQ0lGU19TQihtbnRwdC0+ZF9pbm9kZS0+aV9zYik7CiAJdGxpbmsgPSBjaWZzX3NiX3RsaW5rKGNpZnNfc2IpOwotCW1udCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJaWYgKElTX0VSUih0bGluaykpIHsKIAkJbW50ID0gRVJSX0NBU1QodGxpbmspOwogCQlnb3RvIGZyZWVfZnVsbF9wYXRoOwogCX0KIAlzZXMgPSB0bGlua190Y29uKHRsaW5rKS0+c2VzOwogCisJeGlkID0gR2V0WGlkKCk7CiAJcmMgPSBnZXRfZGZzX3BhdGgoeGlkLCBzZXMsIGZ1bGxfcGF0aCArIDEsIGNpZnNfc2ItPmxvY2FsX25scywKIAkJJm51bV9yZWZlcnJhbHMsICZyZWZlcnJhbHMsCiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOworCUZyZWVYaWQoeGlkKTsKIAogCWNpZnNfcHV0X3RsaW5rKHRsaW5rKTsKIApAQCAtMzM5LDggKzMzOCw3IEBACiAJZnJlZV9kZnNfaW5mb19hcnJheShyZWZlcnJhbHMsIG51bV9yZWZlcnJhbHMpOwogZnJlZV9mdWxsX3BhdGg6CiAJa2ZyZWUoZnVsbF9wYXRoKTsKLWZyZWVfeGlkOgotCUZyZWVYaWQoeGlkKTsKK2NkZGFfZXhpdDoKIAljRllJKDEsICJsZWF2aW5nICVzIiAsIF9fZnVuY19fKTsKIAlyZXR1cm4gbW50OwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzYWNsLmMgYi9mcy9jaWZzL2NpZnNhY2wuYwppbmRleCAxZTc2MzZiLi5iZWVlYmYxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNhY2wuYworKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtMzcyLDYgKzM3MiwxMCBAQAogCiAJCXBwYWNlID0ga21hbGxvYyhudW1fYWNlcyAqIHNpemVvZihzdHJ1Y3QgY2lmc19hY2UgKiksCiAJCQkJR0ZQX0tFUk5FTCk7CisJCWlmICghcHBhY2UpIHsKKwkJCWNFUlJPUigxLCAiREFDTCBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvciIpOworCQkJcmV0dXJuOworCQl9CiAKIAkJZm9yIChpID0gMDsgaSA8IG51bV9hY2VzOyArK2kpIHsKIAkJCXBwYWNlW2ldID0gKHN0cnVjdCBjaWZzX2FjZSAqKSAoYWNsX2Jhc2UgKyBhY2xfc2l6ZSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKaW5kZXggNjZmM2Q1MC4uYTUxNTg1ZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCisrKyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwpAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNpbmNsdWRlICJjaWZzZ2xvYi5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKLSNpbmNsdWRlICJtZDUuaCIKICNpbmNsdWRlICJjaWZzX3VuaWNvZGUuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKICNpbmNsdWRlICJudGxtc3NwLmgiCkBAIC0zNywxMSArMzYsNiBAQAogLyogTm90ZSB0aGF0IHRoZSBzbWIgaGVhZGVyIHNpZ25hdHVyZSBmaWVsZCBvbiBpbnB1dCBjb250YWlucyB0aGUKIAlzZXF1ZW5jZSBudW1iZXIgYmVmb3JlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkICovCiAKLWV4dGVybiB2b2lkIG1kZm91cih1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbik7Ci1leHRlcm4gdm9pZCBFX21kNGhhc2goY29uc3QgdW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpwMTYpOwotZXh0ZXJuIHZvaWQgU01CZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCQkgICAgICAgdW5zaWduZWQgY2hhciAqcDI0KTsKLQogc3RhdGljIGludCBjaWZzX2NhbGN1bGF0ZV9zaWduYXR1cmUoY29uc3Qgc3RydWN0IHNtYl9oZHIgKmNpZnNfcGR1LAogCQkJCXN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNlcnZlciwgY2hhciAqc2lnbmF0dXJlKQogewpAQCAtMjM0LDYgKzIyOCw3IEBACiAvKiBmaXJzdCBjYWxjdWxhdGUgMjQgYnl0ZXMgbnRsbSByZXNwb25zZSBhbmQgdGhlbiAxNiBieXRlIHNlc3Npb24ga2V5ICovCiBpbnQgc2V0dXBfbnRsbV9yZXNwb25zZShzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKIHsKKwlpbnQgcmMgPSAwOwogCXVuc2lnbmVkIGludCB0ZW1wX2xlbiA9IENJRlNfU0VTU19LRVlfU0laRSArIENJRlNfQVVUSF9SRVNQX1NJWkU7CiAJY2hhciB0ZW1wX2tleVtDSUZTX1NFU1NfS0VZX1NJWkVdOwogCkBAIC0yNDcsMTMgKzI0MiwyNiBAQAogCX0KIAlzZXMtPmF1dGhfa2V5LmxlbiA9IHRlbXBfbGVuOwogCi0JU01CTlRlbmNyeXB0KHNlcy0+cGFzc3dvcmQsIHNlcy0+c2VydmVyLT5jcnlwdGtleSwKKwlyYyA9IFNNQk5UZW5jcnlwdChzZXMtPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksCiAJCQlzZXMtPmF1dGhfa2V5LnJlc3BvbnNlICsgQ0lGU19TRVNTX0tFWV9TSVpFKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlRMTSByZXNwb25zZSwgZXJyb3I6ICVkIiwKKwkJCV9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CiAKLQlFX21kNGhhc2goc2VzLT5wYXNzd29yZCwgdGVtcF9rZXkpOwotCW1kZm91cihzZXMtPmF1dGhfa2V5LnJlc3BvbnNlLCB0ZW1wX2tleSwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKKwlyYyA9IEVfbWQ0aGFzaChzZXMtPnBhc3N3b3JkLCB0ZW1wX2tleSk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzIENhbid0IGdlbmVyYXRlIE5UIGhhc2gsIGVycm9yOiAlZCIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyYyA9IG1kZm91cihzZXMtPmF1dGhfa2V5LnJlc3BvbnNlLCB0ZW1wX2tleSwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKKwlpZiAocmMpCisJCWNGWUkoMSwgIiVzIENhbid0IGdlbmVyYXRlIE5UTE0gc2Vzc2lvbiBrZXksIGVycm9yOiAlZCIsCisJCQlfX2Z1bmNfXywgcmMpOworCisJcmV0dXJuIHJjOwogfQogCiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICkBAIC02NDksOSArNjU3LDEwIEBACiAJZ2V0X3JhbmRvbV9ieXRlcyhzZWNfa2V5LCBDSUZTX1NFU1NfS0VZX1NJWkUpOwogCiAJdGZtX2FyYzQgPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKCJlY2IoYXJjNCkiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKLQlpZiAoIXRmbV9hcmM0IHx8IElTX0VSUih0Zm1fYXJjNCkpIHsKKwlpZiAoSVNfRVJSKHRmbV9hcmM0KSkgeworCQlyYyA9IFBUUl9FUlIodGZtX2FyYzQpOwogCQljRVJST1IoMSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjcnlwdG8gQVBJIGFyYzRcbiIpOwotCQlyZXR1cm4gUFRSX0VSUih0Zm1fYXJjNCk7CisJCXJldHVybiByYzsKIAl9CiAKIAlkZXNjLnRmbSA9IHRmbV9hcmM0OwpAQCAtNzAwLDE0ICs3MDksMTMgQEAKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAogCXNlcnZlci0+c2VjbWVjaC5obWFjbWQ1ID0gY3J5cHRvX2FsbG9jX3NoYXNoKCJobWFjKG1kNSkiLCAwLCAwKTsKLQlpZiAoIXNlcnZlci0+c2VjbWVjaC5obWFjbWQ1IHx8Ci0JCQlJU19FUlIoc2VydmVyLT5zZWNtZWNoLmhtYWNtZDUpKSB7CisJaWYgKElTX0VSUihzZXJ2ZXItPnNlY21lY2guaG1hY21kNSkpIHsKIAkJY0VSUk9SKDEsICJjb3VsZCBub3QgYWxsb2NhdGUgY3J5cHRvIGhtYWNtZDVcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihzZXJ2ZXItPnNlY21lY2guaG1hY21kNSk7CiAJfQogCiAJc2VydmVyLT5zZWNtZWNoLm1kNSA9IGNyeXB0b19hbGxvY19zaGFzaCgibWQ1IiwgMCwgMCk7Ci0JaWYgKCFzZXJ2ZXItPnNlY21lY2gubWQ1IHx8IElTX0VSUihzZXJ2ZXItPnNlY21lY2gubWQ1KSkgeworCWlmIChJU19FUlIoc2VydmVyLT5zZWNtZWNoLm1kNSkpIHsKIAkJY0VSUk9SKDEsICJjb3VsZCBub3QgYWxsb2NhdGUgY3J5cHRvIG1kNVxuIik7CiAJCXJjID0gUFRSX0VSUihzZXJ2ZXItPnNlY21lY2gubWQ1KTsKIAkJZ290byBjcnlwdG9fYWxsb2NhdGVfbWQ1X2ZhaWw7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmggYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1ZDJlYzAuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICAgZnMvY2lmcy9jaWZzZW5jcnlwdC5oCi0gKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDA1Ci0gKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCi0gKgotICogICBFeHRlcm5zIGZvciBtaXNjLiBzbWFsbCBlbmNyeXB0aW9uIHJvdXRpbmVzCi0gKiAgIHNvIHdlIGRvIG5vdCBoYXZlIHRvIHB1dCB0aGVtIGluIGNpZnNwcm90by5oCi0gKgotICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKLSAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZQotICogICB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqLwotCi0vKiBtZDQuYyAqLwotZXh0ZXJuIHZvaWQgbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqaW4sIGludCBuKTsKLS8qIHNtYmRlcy5jICovCi1leHRlcm4gdm9pZCBFX1AxNih1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1leHRlcm4gdm9pZCBFX1AyNCh1bnNpZ25lZCBjaGFyICpwMjEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAotCQkgIHVuc2lnbmVkIGNoYXIgKnAyNCk7Ci0KLQotCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCBhODMyM2YxLi5mMjk3MDEzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTYwMCwxMCArNjAwLDE3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3NpemVfdCB3cml0dGVuOworCWludCByYzsKIAogCXdyaXR0ZW4gPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKLQlpZiAoIUNJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlQWxsKQotCQlmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCisJCXJldHVybiB3cml0dGVuOworCisJcmMgPSBmaWxlbWFwX2ZkYXRhd3JpdGUoaW5vZGUtPmlfbWFwcGluZyk7CisJaWYgKHJjKQorCQljRllJKDEsICJjaWZzX2ZpbGVfYWlvX3dyaXRlOiAlZCByYyBvbiAlcCBpbm9kZSIsIHJjLCBpbm9kZSk7CisKIAlyZXR1cm4gd3JpdHRlbjsKIH0KIApAQCAtNzM3LDcgKzc0NCw3IEBACiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKIAkuYWlvX3JlYWQgPSBjaWZzX3N0cmljdF9yZWFkdiwKLQkuYWlvX3dyaXRlID0gY2lmc19maWxlX2Fpb193cml0ZSwKKwkuYWlvX3dyaXRlID0gY2lmc19zdHJpY3Rfd3JpdGV2LAogCS5vcGVuID0gY2lmc19vcGVuLAogCS5yZWxlYXNlID0gY2lmc19jbG9zZSwKIAkubG9jayA9IGNpZnNfbG9jaywKQEAgLTc5Myw3ICs4MDAsNyBAQAogCS5yZWFkID0gZG9fc3luY19yZWFkLAogCS53cml0ZSA9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkID0gY2lmc19zdHJpY3RfcmVhZHYsCi0JLmFpb193cml0ZSA9IGNpZnNfZmlsZV9haW9fd3JpdGUsCisJLmFpb193cml0ZSA9IGNpZnNfc3RyaWN0X3dyaXRldiwKIAkub3BlbiA9IGNpZnNfb3BlbiwKIAkucmVsZWFzZSA9IGNpZnNfY2xvc2UsCiAJLmZzeW5jID0gY2lmc19zdHJpY3RfZnN5bmMsCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCBmMjMyMDZkLi5hOTM3MWI2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTg1LDcgKzg1LDkgQEAKIGV4dGVybiBzc2l6ZV90IGNpZnNfc3RyaWN0X3JlYWR2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCQkJIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcyk7CiBleHRlcm4gc3NpemVfdCBjaWZzX3VzZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICp3cml0ZV9kYXRhLAotCQkJIHNpemVfdCB3cml0ZV9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpOworCQkJICAgICAgIHNpemVfdCB3cml0ZV9zaXplLCBsb2ZmX3QgKnBvZmZzZXQpOworZXh0ZXJuIHNzaXplX3QgY2lmc19zdHJpY3Rfd3JpdGV2KHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOwogZXh0ZXJuIGludCBjaWZzX2xvY2soc3RydWN0IGZpbGUgKiwgaW50LCBzdHJ1Y3QgZmlsZV9sb2NrICopOwogZXh0ZXJuIGludCBjaWZzX2ZzeW5jKHN0cnVjdCBmaWxlICosIGludCk7CiBleHRlcm4gaW50IGNpZnNfc3RyaWN0X2ZzeW5jKHN0cnVjdCBmaWxlICosIGludCk7CkBAIC0xMjUsNSArMTI3LDUgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgY2lmc19leHBvcnRfb3BzOwogI2VuZGlmIC8qIEVYUEVSSU1FTlRBTCAqLwogCi0jZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjY5IgorI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS43MSIKICNlbmRpZgkJCQkvKiBfQ0lGU0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2dsb2IuaCBiL2ZzL2NpZnMvY2lmc2dsb2IuaAppbmRleCA1YmZiNzUzLi4xN2FmYjBmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNnbG9iLmgKKysrIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCkBAIC0xNjYsNiArMTY2LDkgQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzc29ja2V0OwogCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGRzdGFkZHI7CiAJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3JjYWRkcjsgLyogbG9jYWxseSBiaW5kIHRvIHRoaXMgSVAgKi8KKyNpZmRlZiBDT05GSUdfTkVUX05TCisJc3RydWN0IG5ldCAqbmV0OworI2VuZGlmCiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzcG9uc2VfcTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZXF1ZXN0X3E7IC8qIGlmIG1vcmUgdGhhbiBtYXhtcHggdG8gc3J2ciBtdXN0IGJsb2NrKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHBlbmRpbmdfbWlkX3E7CkBAIC0xODUsNiArMTg4LDggQEAKIAkvKiBtdWx0aXBsZXhlZCByZWFkcyBvciB3cml0ZXMgKi8KIAl1bnNpZ25lZCBpbnQgbWF4QnVmOwkvKiBtYXhCdWYgc3BlY2lmaWVzIHRoZSBtYXhpbXVtICovCiAJLyogbWVzc2FnZSBzaXplIHRoZSBzZXJ2ZXIgY2FuIHNlbmQgb3IgcmVjZWl2ZSBmb3Igbm9uLXJhdyBTTUJzICovCisJLyogbWF4QnVmIGlzIHJldHVybmVkIGJ5IFNNQiBOZWdvdGlhdGVQcm90b2NvbCBzbyBtYXhCdWYgaXMgb25seSAwICovCisJLyogd2hlbiBzb2NrZXQgaXMgc2V0dXAgKGFuZCBkdXJpbmcgcmVjb25uZWN0KSBiZWZvcmUgTmVnUHJvdCBzZW50ICovCiAJdW5zaWduZWQgaW50IG1heF9ydzsJLyogbWF4Uncgc3BlY2lmaWVzIHRoZSBtYXhpbXVtICovCiAJLyogbWVzc2FnZSBzaXplIHRoZSBzZXJ2ZXIgY2FuIHNlbmQgb3IgcmVjZWl2ZSBmb3IgKi8KIAkvKiBTTUJfQ09NX1dSSVRFX1JBVyBvciBTTUJfQ09NX1JFQURfUkFXLiAqLwpAQCAtMjE3LDYgKzIyMiwzNiBAQAogfTsKIAogLyoKKyAqIE1hY3JvcyB0byBhbGxvdyB0aGUgVENQX1NlcnZlcl9JbmZvLT5uZXQgZmllbGQgYW5kIHJlbGF0ZWQgY29kZSB0byBkcm9wIG91dAorICogd2hlbiBDT05GSUdfTkVUX05TIGlzbid0IHNldC4KKyAqLworCisjaWZkZWYgQ09ORklHX05FVF9OUworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKmNpZnNfbmV0X25zKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKnNydikKK3sKKwlyZXR1cm4gc3J2LT5uZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3NldF9uZXRfbnMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2LCBzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3J2LT5uZXQgPSBuZXQ7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY2lmc19uZXRfbnMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2KQoreworCXJldHVybiAmaW5pdF9uZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaWZzX3NldF9uZXRfbnMoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqc3J2LCBzdHJ1Y3QgbmV0ICpuZXQpCit7Cit9CisKKyNlbmRpZgorCisvKgogICogU2Vzc2lvbiBzdHJ1Y3R1cmUuICBPbmUgb2YgdGhlc2UgZm9yIGVhY2ggdWlkIHNlc3Npb24gd2l0aCBhIHBhcnRpY3VsYXIgaG9zdAogICovCiBzdHJ1Y3QgY2lmc1Nlc0luZm8gewpAQCAtNjE5LDcgKzY1NCw3IEBACiAjZGVmaW5lICAgTUlEX1JFUVVFU1RfU1VCTUlUVEVEIDIKICNkZWZpbmUgICBNSURfUkVTUE9OU0VfUkVDRUlWRUQgNAogI2RlZmluZSAgIE1JRF9SRVRSWV9ORUVERUQgICAgICA4IC8qIHNlc3Npb24gY2xvc2VkIHdoaWxlIHRoaXMgcmVxdWVzdCBvdXQgKi8KLSNkZWZpbmUgICBNSURfTk9fUkVTUF9ORUVERUQgMHgxMAorI2RlZmluZSAgIE1JRF9SRVNQT05TRV9NQUxGT1JNRUQgMHgxMAogCiAvKiBUeXBlcyBvZiByZXNwb25zZSBidWZmZXIgcmV0dXJuZWQgZnJvbSBTZW5kUmVjZWl2ZTIgKi8KICNkZWZpbmUgICBDSUZTX05PX0JVRkZFUiAgICAgICAgMCAgICAvKiBSZXNwb25zZSBidWZmZXIgbm90IHJldHVybmVkICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCA5ODI4OTVmLi44MDk2ZjI3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTg1LDYgKzg1LDggQEAKIGV4dGVybiBib29sIGlzX3ZhbGlkX29wbG9ja19icmVhayhzdHJ1Y3Qgc21iX2hkciAqc21iLAogCQkJCSAgc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKIGV4dGVybiBib29sIGlzX3NpemVfc2FmZV90b19jaGFuZ2Uoc3RydWN0IGNpZnNJbm9kZUluZm8gKiwgX191NjQgZW9mKTsKK2V4dGVybiB2b2lkIGNpZnNfdXBkYXRlX2VvZihzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqY2lmc2ksIGxvZmZfdCBvZmZzZXQsCisJCQkgICAgdW5zaWduZWQgaW50IGJ5dGVzX3dyaXR0ZW4pOwogZXh0ZXJuIHN0cnVjdCBjaWZzRmlsZUluZm8gKmZpbmRfd3JpdGFibGVfZmlsZShzdHJ1Y3QgY2lmc0lub2RlSW5mbyAqLCBib29sKTsKIGV4dGVybiBzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaW5kX3JlYWRhYmxlX2ZpbGUoc3RydWN0IGNpZnNJbm9kZUluZm8gKiwgYm9vbCk7CiBleHRlcm4gdW5zaWduZWQgaW50IHNtYkNhbGNTaXplKHN0cnVjdCBzbWJfaGRyICpwdHIpOwpAQCAtMzczLDcgKzM3NSw3IEBACiBleHRlcm4gaW50IGNpZnNfdmVyaWZ5X3NpZ25hdHVyZShzdHJ1Y3Qgc21iX2hkciAqLAogCQkJCSBzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIsCiAJCQkJX191MzIgZXhwZWN0ZWRfc2VxdWVuY2VfbnVtYmVyKTsKLWV4dGVybiB2b2lkIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgU01CTlRlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwogZXh0ZXJuIGludCBzZXR1cF9udGxtX3Jlc3BvbnNlKHN0cnVjdCBjaWZzU2VzSW5mbyAqKTsKIGV4dGVybiBpbnQgc2V0dXBfbnRsbXYyX3JzcChzdHJ1Y3QgY2lmc1Nlc0luZm8gKiwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqKTsKIGV4dGVybiBpbnQgY2lmc19jcnlwdG9fc2hhc2hfYWxsb2NhdGUoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyAqKTsKQEAgLTQyMyw0ICs0MjUsMTEgQEAKIGV4dGVybiBpbnQgQ0lGU0NoZWNrTUZTeW1saW5rKHN0cnVjdCBjaWZzX2ZhdHRyICpmYXR0ciwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqcGF0aCwKIAkJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYiwgaW50IHhpZCk7CitleHRlcm4gaW50IG1kZm91cih1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgRV9tZDRoYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgdW5zaWduZWQgY2hhciAqcDE2KTsKK2V4dGVybiB2b2lkIFNNQmVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKKwkJCXVuc2lnbmVkIGNoYXIgKnAyNCk7CitleHRlcm4gdm9pZCBFX1AxNih1bnNpZ25lZCBjaGFyICpwMTQsIHVuc2lnbmVkIGNoYXIgKnAxNik7CitleHRlcm4gdm9pZCBFX1AyNCh1bnNpZ25lZCBjaGFyICpwMjEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmM4LAorCQkJdW5zaWduZWQgY2hhciAqcDI0KTsKICNlbmRpZgkJCS8qIF9DSUZTUFJPVE9fSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCAzMTA2ZjVlLi45MDRhYTQ3IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMTM2LDkgKzEzNiw2IEBACiAJCX0KIAl9CiAKLQlpZiAoc2VzLT5zdGF0dXMgPT0gQ2lmc0V4aXRpbmcpCi0JCXJldHVybiAtRUlPOwotCiAJLyoKIAkgKiBHaXZlIGRlbXVsdGlwbGV4IHRocmVhZCB1cCB0byAxMCBzZWNvbmRzIHRvIHJlY29ubmVjdCwgc2hvdWxkIGJlCiAJICogZ3JlYXRlciB0aGFuIGNpZnMgc29ja2V0IHRpbWVvdXQgd2hpY2ggaXMgNyBzZWNvbmRzCkBAIC0xNTYsNyArMTUzLDcgQEAKIAkJICogcmV0cnlpbmcgdW50aWwgcHJvY2VzcyBpcyBraWxsZWQgb3Igc2VydmVyIGNvbWVzCiAJCSAqIGJhY2sgb24tbGluZQogCQkgKi8KLQkJaWYgKCF0Y29uLT5yZXRyeSB8fCBzZXMtPnN0YXR1cyA9PSBDaWZzRXhpdGluZykgeworCQlpZiAoIXRjb24tPnJldHJ5KSB7CiAJCQljRllJKDEsICJnYXZlIHVwIHdhaXRpbmcgb24gcmVjb25uZWN0IGluIHNtYl9pbml0Iik7CiAJCQlyZXR1cm4gLUVIT1NURE9XTjsKIAkJfQpAQCAtNDkxNCw3ICs0OTExLDYgQEAKIAkJICAgX191MTYgZmlkLCBfX3UzMiBwaWRfb2Zfb3BlbmVyLCBib29sIFNldEFsbG9jYXRpb24pCiB7CiAJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NmaV9yZXEgKnBTTUIgID0gTlVMTDsKLQljaGFyICpkYXRhX29mZnNldDsKIAlzdHJ1Y3QgZmlsZV9lbmRfb2ZfZmlsZV9pbmZvICpwYXJtX2RhdGE7CiAJaW50IHJjID0gMDsKIAlfX3UxNiBwYXJhbXMsIHBhcmFtX29mZnNldCwgb2Zmc2V0LCBieXRlX2NvdW50LCBjb3VudDsKQEAgLTQ5MzgsOCArNDkzNCw2IEBACiAJcGFyYW1fb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3NmaV9yZXEsIEZpZCkgLSA0OwogCW9mZnNldCA9IHBhcmFtX29mZnNldCArIHBhcmFtczsKIAotCWRhdGFfb2Zmc2V0ID0gKGNoYXIgKikgKCZwU01CLT5oZHIuUHJvdG9jb2wpICsgb2Zmc2V0OwotCiAJY291bnQgPSBzaXplb2Yoc3RydWN0IGZpbGVfZW5kX29mX2ZpbGVfaW5mbyk7CiAJcFNNQi0+TWF4UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNigyKTsKIAkvKiBCQiBmaW5kIGV4YWN0IG1heCBTTUIgUERVIGZyb20gc2VzcyBzdHJ1Y3R1cmUgQkIgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggMThkM2M3Ny4uOGQ2YzE3YSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTU1LDkgKzU1LDYgQEAKIC8qIFNNQiBlY2hvICJ0aW1lb3V0IiAtLSBGSVhNRTogdHVuYWJsZT8gKi8KICNkZWZpbmUgU01CX0VDSE9fSU5URVJWQUwgKDYwICogSFopCiAKLWV4dGVybiB2b2lkIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKmM4LAotCQkJIHVuc2lnbmVkIGNoYXIgKnAyNCk7Ci0KIGV4dGVybiBtZW1wb29sX3QgKmNpZnNfcmVxX3Bvb2xwOwogCiBzdHJ1Y3Qgc21iX3ZvbCB7CkBAIC04Nyw2ICs4NCw3IEBACiAJYm9vbCBub194YXR0cjoxOyAgIC8qIHNldCBpZiB4YXR0ciAoRUEpIHN1cHBvcnQgc2hvdWxkIGJlIGRpc2FibGVkKi8KIAlib29sIHNlcnZlcl9pbm86MTsgLyogdXNlIGlub2RlIG51bWJlcnMgZnJvbSBzZXJ2ZXIgaWUgVW5pcXVlSWQgKi8KIAlib29sIGRpcmVjdF9pbzoxOworCWJvb2wgc3RyaWN0X2lvOjE7IC8qIHN0cmljdCBjYWNoZSBiZWhhdmlvciAqLwogCWJvb2wgcmVtYXA6MTsgICAgICAvKiBzZXQgdG8gcmVtYXAgc2V2ZW4gcmVzZXJ2ZWQgY2hhcnMgaW4gZmlsZW5hbWVzICovCiAJYm9vbCBwb3NpeF9wYXRoczoxOyAvKiB1bnNldCB0byBub3QgYXNrIGZvciBwb3NpeCBwYXRobmFtZXMuICovCiAJYm9vbCBub19saW51eF9leHQ6MTsKQEAgLTMzOSw4ICszMzcsMTMgQEAKIAlzdHJ1Y3QgVENQX1NlcnZlcl9JbmZvICpzZXJ2ZXIgPSBjb250YWluZXJfb2Yod29yaywKIAkJCQkJc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbywgZWNoby53b3JrKTsKIAotCS8qIG5vIG5lZWQgdG8gcGluZyBpZiB3ZSBnb3QgYSByZXNwb25zZSByZWNlbnRseSAqLwotCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBzZXJ2ZXItPmxzdHJwICsgU01CX0VDSE9fSU5URVJWQUwgLSBIWikpCisJLyoKKwkgKiBXZSBjYW5ub3Qgc2VuZCBhbiBlY2hvIHVudGlsIHRoZSBORUdPVElBVEVfUFJPVE9DT0wgcmVxdWVzdCBpcworCSAqIGRvbmUsIHdoaWNoIGlzIGluZGljYXRlZCBieSBtYXhCdWYgIT0gMC4gQWxzbywgbm8gbmVlZCB0byBwaW5nIGlmCisJICogd2UgZ290IGEgcmVzcG9uc2UgcmVjZW50bHkKKwkgKi8KKwlpZiAoc2VydmVyLT5tYXhCdWYgPT0gMCB8fAorCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBzZXJ2ZXItPmxzdHJwICsgU01CX0VDSE9fSU5URVJWQUwgLSBIWikpCiAJCWdvdG8gcmVxdWV1ZV9lY2hvOwogCiAJcmMgPSBDSUZTU01CRWNobyhzZXJ2ZXIpOwpAQCAtNTgwLDE0ICs1ODMsMjMgQEAKIAkJZWxzZSBpZiAocmVjb25uZWN0ID09IDEpCiAJCQljb250aW51ZTsKIAotCQlsZW5ndGggKz0gNDsgLyogYWNjb3VudCBmb3IgcmZjMTAwMiBoZHIgKi8KKwkJdG90YWxfcmVhZCArPSA0OyAvKiBhY2NvdW50IGZvciByZmMxMDAyIGhkciAqLwogCisJCWR1bXBfc21iKHNtYl9idWZmZXIsIHRvdGFsX3JlYWQpOwogCi0JCWR1bXBfc21iKHNtYl9idWZmZXIsIGxlbmd0aCk7Ci0JCWlmIChjaGVja1NNQihzbWJfYnVmZmVyLCBzbWJfYnVmZmVyLT5NaWQsIHRvdGFsX3JlYWQrNCkpIHsKLQkJCWNpZnNfZHVtcF9tZW0oIkJhZCBTTUI6ICIsIHNtYl9idWZmZXIsIDQ4KTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCS8qCisJCSAqIFdlIGtub3cgdGhhdCB3ZSByZWNlaXZlZCBlbm91Z2ggdG8gZ2V0IHRvIHRoZSBNSUQgYXMgd2UKKwkJICogY2hlY2tlZCB0aGUgcGR1X2xlbmd0aCBlYXJsaWVyLiBOb3cgY2hlY2sgdG8gc2VlCisJCSAqIGlmIHRoZSByZXN0IG9mIHRoZSBoZWFkZXIgaXMgT0suIFdlIGJvcnJvdyB0aGUgbGVuZ3RoCisJCSAqIHZhciBmb3IgdGhlIHJlc3Qgb2YgdGhlIGxvb3AgdG8gYXZvaWQgYSBuZXcgc3RhY2sgdmFyLgorCQkgKgorCQkgKiA0OCBieXRlcyBpcyBlbm91Z2ggdG8gZGlzcGxheSB0aGUgaGVhZGVyIGFuZCBhIGxpdHRsZSBiaXQKKwkJICogaW50byB0aGUgcGF5bG9hZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgorCQkgKi8KKwkJbGVuZ3RoID0gY2hlY2tTTUIoc21iX2J1ZmZlciwgc21iX2J1ZmZlci0+TWlkLCB0b3RhbF9yZWFkKTsKKwkJaWYgKGxlbmd0aCAhPSAwKQorCQkJY2lmc19kdW1wX21lbSgiQmFkIFNNQjogIiwgc21iX2J1ZmZlciwKKwkJCQkJbWluX3QodW5zaWduZWQgaW50LCB0b3RhbF9yZWFkLCA0OCkpOwogCiAJCW1pZF9lbnRyeSA9IE5VTEw7CiAJCXNlcnZlci0+bHN0cnAgPSBqaWZmaWVzOwpAQCAtNTk5LDcgKzYxMSw4IEBACiAJCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNtYl9idWZmZXItPk1pZCkgJiYKIAkJCSAgICAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCiAJCQkgICAgKG1pZF9lbnRyeS0+Y29tbWFuZCA9PSBzbWJfYnVmZmVyLT5Db21tYW5kKSkgewotCQkJCWlmIChjaGVjazJuZFQyKHNtYl9idWZmZXIsc2VydmVyLT5tYXhCdWYpID4gMCkgeworCQkJCWlmIChsZW5ndGggPT0gMCAmJgorCQkJCSAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgewogCQkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCiAJCQkJCWlzTXVsdGlSc3AgPSB0cnVlOwogCQkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgewpAQCAtNjM0LDEyICs2NDcsMTcgQEAKIAkJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKIAkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gaXNMYXJnZUJ1ZjsKIG11bHRpX3QyX2ZuZDoKLQkJCQltaWRfZW50cnktPm1pZFN0YXRlID0gTUlEX1JFU1BPTlNFX1JFQ0VJVkVEOwotCQkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOwotCQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKKwkJCQlpZiAobGVuZ3RoID09IDApCisJCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQorCQkJCQkJCU1JRF9SRVNQT05TRV9SRUNFSVZFRDsKKwkJCQllbHNlCisJCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQorCQkJCQkJCU1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7CiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKICNlbmRpZgorCQkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOworCQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCW1pZF9lbnRyeSA9IE5VTEw7CkBAIC02NTUsNiArNjczLDkgQEAKIAkJCQllbHNlCiAJCQkJCXNtYWxsYnVmID0gTlVMTDsKIAkJCX0KKwkJfSBlbHNlIGlmIChsZW5ndGggIT0gMCkgeworCQkJLyogcmVzcG9uc2Ugc2FuaXR5IGNoZWNrcyBmYWlsZWQgKi8KKwkJCWNvbnRpbnVlOwogCQl9IGVsc2UgaWYgKCFpc192YWxpZF9vcGxvY2tfYnJlYWsoc21iX2J1ZmZlciwgc2VydmVyKSAmJgogCQkJICAgIWlzTXVsdGlSc3ApIHsKIAkJCWNFUlJPUigxLCAiTm8gdGFzayB0byB3YWtlLCB1bmtub3duIGZyYW1lIHJlY2VpdmVkISAiCkBAIC0xMzQ0LDYgKzEzNjUsOCBAQAogCQkJdm9sLT5kaXJlY3RfaW8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJmb3JjZWRpcmVjdGlvIiwgMTMpID09IDApIHsKIAkJCXZvbC0+ZGlyZWN0X2lvID0gMTsKKwkJfSBlbHNlIGlmIChzdHJuaWNtcChkYXRhLCAic3RyaWN0Y2FjaGUiLCAxMSkgPT0gMCkgeworCQkJdm9sLT5zdHJpY3RfaW8gPSAxOwogCQl9IGVsc2UgaWYgKHN0cm5pY21wKGRhdGEsICJub2FjIiwgNCkgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ0lGUzogTW91bnQgb3B0aW9uIG5vYWMgbm90ICIKIAkJCQkic3VwcG9ydGVkLiBJbnN0ZWFkIHNldCAiCkBAIC0xNTY4LDYgKzE1OTEsOSBAQAogCiAJc3Bpbl9sb2NrKCZjaWZzX3RjcF9zZXNfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzZXJ2ZXIsICZjaWZzX3RjcF9zZXNfbGlzdCwgdGNwX3Nlc19saXN0KSB7CisJCWlmICghbmV0X2VxKGNpZnNfbmV0X25zKHNlcnZlciksIGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucykpCisJCQljb250aW51ZTsKKwogCQlpZiAoIW1hdGNoX2FkZHJlc3Moc2VydmVyLCBhZGRyLAogCQkJCSAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmdm9sLT5zcmNhZGRyKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTU5OCw2ICsxNjI0LDggQEAKIAkJcmV0dXJuOwogCX0KIAorCXB1dF9uZXQoY2lmc19uZXRfbnMoc2VydmVyKSk7CisKIAlsaXN0X2RlbF9pbml0KCZzZXJ2ZXItPnRjcF9zZXNfbGlzdCk7CiAJc3Bpbl91bmxvY2soJmNpZnNfdGNwX3Nlc19sb2NrKTsKIApAQCAtMTY3Miw2ICsxNzAwLDcgQEAKIAkJZ290byBvdXRfZXJyOwogCX0KIAorCWNpZnNfc2V0X25ldF9ucyh0Y3Bfc2VzLCBnZXRfbmV0KGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucykpOwogCXRjcF9zZXMtPmhvc3RuYW1lID0gZXh0cmFjdF9ob3N0bmFtZSh2b2x1bWVfaW5mby0+VU5DKTsKIAlpZiAoSVNfRVJSKHRjcF9zZXMtPmhvc3RuYW1lKSkgewogCQlyYyA9IFBUUl9FUlIodGNwX3Nlcy0+aG9zdG5hbWUpOwpAQCAtMTc1Miw2ICsxNzgxLDggQEAKIG91dF9lcnJfY3J5cHRvX3JlbGVhc2U6CiAJY2lmc19jcnlwdG9fc2hhc2hfcmVsZWFzZSh0Y3Bfc2VzKTsKIAorCXB1dF9uZXQoY2lmc19uZXRfbnModGNwX3NlcykpOworCiBvdXRfZXJyOgogCWlmICh0Y3Bfc2VzKSB7CiAJCWlmICghSVNfRVJSKHRjcF9zZXMtPmhvc3RuYW1lKSkKQEAgLTIyNjMsOCArMjI5NCw4IEBACiAJfQogCiAJaWYgKHNvY2tldCA9PSBOVUxMKSB7Ci0JCXJjID0gc29ja19jcmVhdGVfa2VybihzZmFtaWx5LCBTT0NLX1NUUkVBTSwKLQkJCQkgICAgICBJUFBST1RPX1RDUCwgJnNvY2tldCk7CisJCXJjID0gX19zb2NrX2NyZWF0ZShjaWZzX25ldF9ucyhzZXJ2ZXIpLCBzZmFtaWx5LCBTT0NLX1NUUkVBTSwKKwkJCQkgICBJUFBST1RPX1RDUCwgJnNvY2tldCwgMSk7CiAJCWlmIChyYyA8IDApIHsKIAkJCWNFUlJPUigxLCAiRXJyb3IgJWQgY3JlYXRpbmcgc29ja2V0IiwgcmMpOwogCQkJc2VydmVyLT5zc29ja2V0ID0gTlVMTDsKQEAgLTI1NzYsNiArMjYwNyw4IEBACiAJaWYgKHB2b2x1bWVfaW5mby0+bXVsdGl1c2VyKQogCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyB8PSAoQ0lGU19NT1VOVF9NVUxUSVVTRVIgfAogCQkJCQkgICAgQ0lGU19NT1VOVF9OT19QRVJNKTsKKwlpZiAocHZvbHVtZV9pbmZvLT5zdHJpY3RfaW8pCisJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfU1RSSUNUX0lPOwogCWlmIChwdm9sdW1lX2luZm8tPmRpcmVjdF9pbykgewogCQljRllJKDEsICJtb3VudGluZyBzaGFyZSB1c2luZyBkaXJlY3QgaS9vIik7CiAJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzIHw9IENJRlNfTU9VTlRfRElSRUNUX0lPOwpAQCAtMjk3Nyw3ICszMDEwLDggQEAKIAkJCQkJIGJjY19wdHIpOwogCQllbHNlCiAjZW5kaWYgLyogQ0lGU19XRUFLX1BXX0hBU0ggKi8KLQkJU01CTlRlbmNyeXB0KHRjb24tPnBhc3N3b3JkLCBzZXMtPnNlcnZlci0+Y3J5cHRrZXksIGJjY19wdHIpOworCQlyYyA9IFNNQk5UZW5jcnlwdCh0Y29uLT5wYXNzd29yZCwgc2VzLT5zZXJ2ZXItPmNyeXB0a2V5LAorCQkJCQliY2NfcHRyKTsKIAogCQliY2NfcHRyICs9IENJRlNfQVVUSF9SRVNQX1NJWkU7CiAJCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklDT0RFKSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2ZpbGUuYyBiL2ZzL2NpZnMvZmlsZS5jCmluZGV4IGQ3ZDY1YTcuLmU5NjRiMWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZmlsZS5jCisrKyBiL2ZzL2NpZnMvZmlsZS5jCkBAIC0zNDYsNyArMzQ2LDYgQEAKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uOwogCXN0cnVjdCB0Y29uX2xpbmsgKnRsaW5rOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKnBDaWZzRmlsZSA9IE5VTEw7Ci0Jc3RydWN0IGNpZnNJbm9kZUluZm8gKnBDaWZzSW5vZGU7CiAJY2hhciAqZnVsbF9wYXRoID0gTlVMTDsKIAlib29sIHBvc2l4X29wZW5fb2sgPSBmYWxzZTsKIAlfX3UxNiBuZXRmaWQ7CkBAIC0zNjEsOCArMzYwLDYgQEAKIAl9CiAJdGNvbiA9IHRsaW5rX3Rjb24odGxpbmspOwogCi0JcENpZnNJbm9kZSA9IENJRlNfSShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQogCWZ1bGxfcGF0aCA9IGJ1aWxkX3BhdGhfZnJvbV9kZW50cnkoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CiAJaWYgKGZ1bGxfcGF0aCA9PSBOVUxMKSB7CiAJCXJjID0gLUVOT01FTTsKQEAgLTg0OCw3ICs4NDUsNyBAQAogfQogCiAvKiB1cGRhdGUgdGhlIGZpbGUgc2l6ZSAoaWYgbmVlZGVkKSBhZnRlciBhIHdyaXRlICovCi1zdGF0aWMgdm9pZAordm9pZAogY2lmc191cGRhdGVfZW9mKHN0cnVjdCBjaWZzSW5vZGVJbmZvICpjaWZzaSwgbG9mZl90IG9mZnNldCwKIAkJICAgICAgdW5zaWduZWQgaW50IGJ5dGVzX3dyaXR0ZW4pCiB7CkBAIC0xMTQ2LDcgKzExNDMsNiBAQAogCWNoYXIgKndyaXRlX2RhdGE7CiAJaW50IHJjID0gLUVGQVVMVDsKIAlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7Ci0Jc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKIApAQCAtMTE1NCw3ICsxMTUwLDYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7Ci0JY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCiAJb2Zmc2V0ICs9IChsb2ZmX3QpZnJvbTsKIAl3cml0ZV9kYXRhID0ga21hcChwYWdlKTsKQEAgLTE2MTksMTMgKzE2MTQsMjE1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50CitjaWZzX3dyaXRlX2FsbG9jYXRlX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzKQoreworCWludCByYyA9IDA7CisJdW5zaWduZWQgbG9uZyBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShfX0dGUF9ISUdITUVNKTsKKwkJaWYgKCFwYWdlc1tpXSkgeworCQkJLyoKKwkJCSAqIHNhdmUgbnVtYmVyIG9mIHBhZ2VzIHdlIGhhdmUgYWxyZWFkeSBhbGxvY2F0ZWQgYW5kCisJCQkgKiByZXR1cm4gd2l0aCBFTk9NRU0gZXJyb3IKKwkJCSAqLworCQkJbnVtX3BhZ2VzID0gaTsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwl9CisKKwlyZXR1cm4gcmM7CisKK2Vycm9yOgorCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCXJldHVybiByYzsKK30KKworc3RhdGljIGlubGluZQorc2l6ZV90IGdldF9udW1wYWdlcyhjb25zdCBzaXplX3Qgd3NpemUsIGNvbnN0IHNpemVfdCBsZW4sIHNpemVfdCAqY3VyX2xlbikKK3sKKwlzaXplX3QgbnVtX3BhZ2VzOworCXNpemVfdCBjbGVuOworCisJY2xlbiA9IG1pbl90KGNvbnN0IHNpemVfdCwgbGVuLCB3c2l6ZSk7CisJbnVtX3BhZ2VzID0gY2xlbiAvIFBBR0VfQ0FDSEVfU0laRTsKKwlpZiAoY2xlbiAlIFBBR0VfQ0FDSEVfU0laRSkKKwkJbnVtX3BhZ2VzKys7CisKKwlpZiAoY3VyX2xlbikKKwkJKmN1cl9sZW4gPSBjbGVuOworCisJcmV0dXJuIG51bV9wYWdlczsKK30KKworc3RhdGljIHNzaXplX3QKK2NpZnNfaW92ZWNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBvZmZzZXQpCit7CisJdW5zaWduZWQgaW50IHdyaXR0ZW47CisJdW5zaWduZWQgbG9uZyBudW1fcGFnZXMsIG5wYWdlcywgaTsKKwlzaXplX3QgY29waWVkLCBsZW4sIGN1cl9sZW47CisJc3NpemVfdCB0b3RhbF93cml0dGVuID0gMDsKKwlzdHJ1Y3Qga3ZlYyAqdG9fc2VuZDsKKwlzdHJ1Y3QgcGFnZSAqKnBhZ2VzOworCXN0cnVjdCBpb3ZfaXRlciBpdDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBjaWZzRmlsZUluZm8gKm9wZW5fZmlsZTsKKwlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKKwlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOworCWludCB4aWQsIHJjOworCisJbGVuID0gaW92X2xlbmd0aChpb3YsIG5yX3NlZ3MpOworCWlmICghbGVuKQorCQlyZXR1cm4gMDsKKworCXJjID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgcG9mZnNldCwgJmxlbiwgMCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwljaWZzX3NiID0gQ0lGU19TQihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3NiKTsKKwludW1fcGFnZXMgPSBnZXRfbnVtcGFnZXMoY2lmc19zYi0+d3NpemUsIGxlbiwgJmN1cl9sZW4pOworCisJcGFnZXMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcGFnZXMgKikqbnVtX3BhZ2VzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRvX3NlbmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZlYykqKG51bV9wYWdlcyArIDEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRvX3NlbmQpIHsKKwkJa2ZyZWUocGFnZXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlyYyA9IGNpZnNfd3JpdGVfYWxsb2NhdGVfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CisJaWYgKHJjKSB7CisJCWtmcmVlKHBhZ2VzKTsKKwkJa2ZyZWUodG9fc2VuZCk7CisJCXJldHVybiByYzsKKwl9CisKKwl4aWQgPSBHZXRYaWQoKTsKKwlvcGVuX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcFRjb24gPSB0bGlua190Y29uKG9wZW5fZmlsZS0+dGxpbmspOworCWlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKworCWlvdl9pdGVyX2luaXQoJml0LCBpb3YsIG5yX3NlZ3MsIGxlbiwgMCk7CisJbnBhZ2VzID0gbnVtX3BhZ2VzOworCisJZG8geworCQlzaXplX3Qgc2F2ZV9sZW4gPSBjdXJfbGVuOworCQlmb3IgKGkgPSAwOyBpIDwgbnBhZ2VzOyBpKyspIHsKKwkJCWNvcGllZCA9IG1pbl90KGNvbnN0IHNpemVfdCwgY3VyX2xlbiwgUEFHRV9DQUNIRV9TSVpFKTsKKwkJCWNvcGllZCA9IGlvdl9pdGVyX2NvcHlfZnJvbV91c2VyKHBhZ2VzW2ldLCAmaXQsIDAsCisJCQkJCQkJIGNvcGllZCk7CisJCQljdXJfbGVuIC09IGNvcGllZDsKKwkJCWlvdl9pdGVyX2FkdmFuY2UoJml0LCBjb3BpZWQpOworCQkJdG9fc2VuZFtpKzFdLmlvdl9iYXNlID0ga21hcChwYWdlc1tpXSk7CisJCQl0b19zZW5kW2krMV0uaW92X2xlbiA9IGNvcGllZDsKKwkJfQorCisJCWN1cl9sZW4gPSBzYXZlX2xlbiAtIGN1cl9sZW47CisKKwkJZG8geworCQkJaWYgKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgeworCQkJCXJjID0gY2lmc19yZW9wZW5fZmlsZShvcGVuX2ZpbGUsIGZhbHNlKTsKKwkJCQlpZiAocmMgIT0gMCkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlyYyA9IENJRlNTTUJXcml0ZTIoeGlkLCBwVGNvbiwgb3Blbl9maWxlLT5uZXRmaWQsCisJCQkJCSAgIGN1cl9sZW4sICpwb2Zmc2V0LCAmd3JpdHRlbiwKKwkJCQkJICAgdG9fc2VuZCwgbnBhZ2VzLCAwKTsKKwkJfSB3aGlsZSAocmMgPT0gLUVBR0FJTik7CisKKwkJZm9yIChpID0gMDsgaSA8IG5wYWdlczsgaSsrKQorCQkJa3VubWFwKHBhZ2VzW2ldKTsKKworCQlpZiAod3JpdHRlbikgeworCQkJbGVuIC09IHdyaXR0ZW47CisJCQl0b3RhbF93cml0dGVuICs9IHdyaXR0ZW47CisJCQljaWZzX3VwZGF0ZV9lb2YoQ0lGU19JKGlub2RlKSwgKnBvZmZzZXQsIHdyaXR0ZW4pOworCQkJKnBvZmZzZXQgKz0gd3JpdHRlbjsKKwkJfSBlbHNlIGlmIChyYyA8IDApIHsKKwkJCWlmICghdG90YWxfd3JpdHRlbikKKwkJCQl0b3RhbF93cml0dGVuID0gcmM7CisJCQlicmVhazsKKwkJfQorCisJCS8qIGdldCBsZW5ndGggYW5kIG51bWJlciBvZiBrdmVjcyBvZiB0aGUgbmV4dCB3cml0ZSAqLworCQlucGFnZXMgPSBnZXRfbnVtcGFnZXMoY2lmc19zYi0+d3NpemUsIGxlbiwgJmN1cl9sZW4pOworCX0gd2hpbGUgKGxlbiA+IDApOworCisJaWYgKHRvdGFsX3dyaXR0ZW4gPiAwKSB7CisJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJCWlmICgqcG9mZnNldCA+IGlub2RlLT5pX3NpemUpCisJCQlpX3NpemVfd3JpdGUoaW5vZGUsICpwb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCX0KKworCWNpZnNfc3RhdHNfYnl0ZXNfd3JpdHRlbihwVGNvbiwgdG90YWxfd3JpdHRlbik7CisJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykKKwkJcHV0X3BhZ2UocGFnZXNbaV0pOworCWtmcmVlKHRvX3NlbmQpOworCWtmcmVlKHBhZ2VzKTsKKwlGcmVlWGlkKHhpZCk7CisJcmV0dXJuIHRvdGFsX3dyaXR0ZW47Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNpZnNfdXNlcl93cml0ZXYoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCit7CisJc3NpemVfdCB3cml0dGVuOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwkvKgorCSAqIEJCIC0gb3B0aW1pemUgdGhlIHdheSB3aGVuIHNpZ25pbmcgaXMgZGlzYWJsZWQuIFdlIGNhbiBkcm9wIHRoaXMKKwkgKiBleHRyYSBtZW1vcnktdG8tbWVtb3J5IGNvcHlpbmcgYW5kIHVzZSBpb3ZlYyBidWZmZXJzIGZvciBjb25zdHJ1Y3RpbmcKKwkgKiB3cml0ZSByZXF1ZXN0LgorCSAqLworCisJd3JpdHRlbiA9IGNpZnNfaW92ZWNfd3JpdGUoaW9jYi0+a2lfZmlscCwgaW92LCBucl9zZWdzLCAmcG9zKTsKKwlpZiAod3JpdHRlbiA+IDApIHsKKwkJQ0lGU19JKGlub2RlKS0+aW52YWxpZF9tYXBwaW5nID0gdHJ1ZTsKKwkJaW9jYi0+a2lfcG9zID0gcG9zOworCX0KKworCXJldHVybiB3cml0dGVuOworfQorCitzc2l6ZV90IGNpZnNfc3RyaWN0X3dyaXRldihzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGlvY2ItPmtpX2ZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCisJCXJldHVybiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKworCS8qCisJICogSW4gc3RyaWN0IGNhY2hlIG1vZGUgd2UgbmVlZCB0byB3cml0ZSB0aGUgZGF0YSB0byB0aGUgc2VydmVyIGV4YWN0bHkKKwkgKiBmcm9tIHRoZSBwb3MgdG8gcG9zK2xlbi0xIHJhdGhlciB0aGFuIGZsdXNoIGFsbCBhZmZlY3RlZCBwYWdlcworCSAqIGJlY2F1c2UgaXQgbWF5IGNhdXNlIGEgZXJyb3Igd2l0aCBtYW5kYXRvcnkgbG9ja3Mgb24gdGhlc2UgcGFnZXMgYnV0CisJICogbm90IG9uIHRoZSByZWdpb24gZnJvbSBwb3MgdG8gcHBvcytsZW4tMS4KKwkgKi8KKworCXJldHVybiBjaWZzX3VzZXJfd3JpdGV2KGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKK30KKwogc3RhdGljIHNzaXplX3QKIGNpZnNfaW92ZWNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcG9mZnNldCkKIHsKIAlpbnQgcmM7CiAJaW50IHhpZDsKLQl1bnNpZ25lZCBpbnQgdG90YWxfcmVhZCwgYnl0ZXNfcmVhZCA9IDA7CisJc3NpemVfdCB0b3RhbF9yZWFkOworCXVuc2lnbmVkIGludCBieXRlc19yZWFkID0gMDsKIAlzaXplX3QgbGVuLCBjdXJfbGVuOwogCWludCBpb3Zfb2Zmc2V0ID0gMDsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9saW5rLmMgYi9mcy9jaWZzL2xpbmsuYwppbmRleCAzMDY3NjlkLi5lODgwNGQzIDEwMDY0NAotLS0gYS9mcy9jaWZzL2xpbmsuYworKysgYi9mcy9jaWZzL2xpbmsuYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNpZnNwcm90by5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKICNpbmNsdWRlICJjaWZzX2ZzX3NiLmgiCi0jaW5jbHVkZSAibWQ1LmgiCiAKICNkZWZpbmUgQ0lGU19NRl9TWU1MSU5LX0xFTl9PRkZTRVQgKDQrMSkKICNkZWZpbmUgQ0lGU19NRl9TWU1MSU5LX01ENV9PRkZTRVQgKENJRlNfTUZfU1lNTElOS19MRU5fT0ZGU0VUKyg0KzEpKQpAQCAtNDcsNiArNDYsNDUgQEAKIAltZDVfaGFzaFsxMl0sIG1kNV9oYXNoWzEzXSwgbWQ1X2hhc2hbMTRdLCBtZDVfaGFzaFsxNV0KIAogc3RhdGljIGludAorc3ltbGlua19oYXNoKHVuc2lnbmVkIGludCBsaW5rX2xlbiwgY29uc3QgY2hhciAqbGlua19zdHIsIHU4ICptZDVfaGFzaCkKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgaW50IHNpemU7CisJc3RydWN0IGNyeXB0b19zaGFzaCAqbWQ1OworCXN0cnVjdCBzZGVzYyAqc2Rlc2NtZDU7CisKKwltZDUgPSBjcnlwdG9fYWxsb2Nfc2hhc2goIm1kNSIsIDAsIDApOworCWlmIChJU19FUlIobWQ1KSkgeworCQlyYyA9IFBUUl9FUlIobWQ1KTsKKwkJY0VSUk9SKDEsICIlczogQ3J5cHRvIG1kNSBhbGxvY2F0aW9uIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmMpOworCQlyZXR1cm4gcmM7CisJfQorCXNpemUgPSBzaXplb2Yoc3RydWN0IHNoYXNoX2Rlc2MpICsgY3J5cHRvX3NoYXNoX2Rlc2NzaXplKG1kNSk7CisJc2Rlc2NtZDUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCWlmICghc2Rlc2NtZDUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQljRVJST1IoMSwgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gc3ltbGlua19oYXNoX2VycjsKKwl9CisJc2Rlc2NtZDUtPnNoYXNoLnRmbSA9IG1kNTsKKwlzZGVzY21kNS0+c2hhc2guZmxhZ3MgPSAweDA7CisKKwlyYyA9IGNyeXB0b19zaGFzaF9pbml0KCZzZGVzY21kNS0+c2hhc2gpOworCWlmIChyYykgeworCQljRVJST1IoMSwgIiVzOiBDb3VsZCBub3QgaW5pdCBtZDUgc2hhc2hcbiIsIF9fZnVuY19fKTsKKwkJZ290byBzeW1saW5rX2hhc2hfZXJyOworCX0KKwljcnlwdG9fc2hhc2hfdXBkYXRlKCZzZGVzY21kNS0+c2hhc2gsIGxpbmtfc3RyLCBsaW5rX2xlbik7CisJcmMgPSBjcnlwdG9fc2hhc2hfZmluYWwoJnNkZXNjbWQ1LT5zaGFzaCwgbWQ1X2hhc2gpOworCitzeW1saW5rX2hhc2hfZXJyOgorCWNyeXB0b19mcmVlX3NoYXNoKG1kNSk7CisJa2ZyZWUoc2Rlc2NtZDUpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CiBDSUZTUGFyc2VNRlN5bWxpbmsoY29uc3QgdTggKmJ1ZiwKIAkJICAgdW5zaWduZWQgaW50IGJ1Zl9sZW4sCiAJCSAgIHVuc2lnbmVkIGludCAqX2xpbmtfbGVuLApAQCAtNTYsNyArOTQsNiBAQAogCXVuc2lnbmVkIGludCBsaW5rX2xlbjsKIAljb25zdCBjaGFyICptZDVfc3RyMTsKIAljb25zdCBjaGFyICpsaW5rX3N0cjsKLQlzdHJ1Y3QgTUQ1Q29udGV4dCBtZDVfY3R4OwogCXU4IG1kNV9oYXNoWzE2XTsKIAljaGFyIG1kNV9zdHIyWzM0XTsKIApAQCAtNzAsOSArMTA3LDExIEBACiAJaWYgKHJjICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY2lmc19NRDVfaW5pdCgmbWQ1X2N0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZtZDVfY3R4LCAoY29uc3QgdTggKilsaW5rX3N0ciwgbGlua19sZW4pOwotCWNpZnNfTUQ1X2ZpbmFsKG1kNV9oYXNoLCAmbWQ1X2N0eCk7CisJcmMgPSBzeW1saW5rX2hhc2gobGlua19sZW4sIGxpbmtfc3RyLCBtZDVfaGFzaCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBNRDUgaGFzaCBmYWlsdXJlOiAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNucHJpbnRmKG1kNV9zdHIyLCBzaXplb2YobWQ1X3N0cjIpLAogCQkgQ0lGU19NRl9TWU1MSU5LX01ENV9GT1JNQVQsCkBAIC05NCw5ICsxMzMsOSBAQAogc3RhdGljIGludAogQ0lGU0Zvcm1hdE1GU3ltbGluayh1OCAqYnVmLCB1bnNpZ25lZCBpbnQgYnVmX2xlbiwgY29uc3QgY2hhciAqbGlua19zdHIpCiB7CisJaW50IHJjOwogCXVuc2lnbmVkIGludCBsaW5rX2xlbjsKIAl1bnNpZ25lZCBpbnQgb2ZzOwotCXN0cnVjdCBNRDVDb250ZXh0IG1kNV9jdHg7CiAJdTggbWQ1X2hhc2hbMTZdOwogCiAJaWYgKGJ1Zl9sZW4gIT0gQ0lGU19NRl9TWU1MSU5LX0ZJTEVfU0laRSkKQEAgLTEwNyw5ICsxNDYsMTEgQEAKIAlpZiAobGlua19sZW4gPiBDSUZTX01GX1NZTUxJTktfTElOS19NQVhMRU4pCiAJCXJldHVybiAtRU5BTUVUT09MT05HOwogCi0JY2lmc19NRDVfaW5pdCgmbWQ1X2N0eCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZtZDVfY3R4LCAoY29uc3QgdTggKilsaW5rX3N0ciwgbGlua19sZW4pOwotCWNpZnNfTUQ1X2ZpbmFsKG1kNV9oYXNoLCAmbWQ1X2N0eCk7CisJcmMgPSBzeW1saW5rX2hhc2gobGlua19sZW4sIGxpbmtfc3RyLCBtZDVfaGFzaCk7CisJaWYgKHJjKSB7CisJCWNGWUkoMSwgIiVzOiBNRDUgaGFzaCBmYWlsdXJlOiAlZFxuIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAogCXNucHJpbnRmKGJ1ZiwgYnVmX2xlbiwKIAkJIENJRlNfTUZfU1lNTElOS19MRU5fRk9STUFUIENJRlNfTUZfU1lNTElOS19NRDVfRk9STUFULApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9tZDQuYyBiL2ZzL2NpZnMvbWQ0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MjVjMjYuLjAwMDAwMDAKLS0tIGEvZnMvY2lmcy9tZDQuYworKysgL2Rldi9udWxsCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICAgVW5peCBTTUIvTmV0YmlvcyBpbXBsZW1lbnRhdGlvbi4KLSAgIFZlcnNpb24gMS45LgotICAgYSBpbXBsZW1lbnRhdGlvbiBvZiBNRDQgZGVzaWduZWQgZm9yIHVzZSBpbiB0aGUgU01CIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sCi0gICBDb3B5cmlnaHQgKEMpIEFuZHJldyBUcmlkZ2VsbCAxOTk3LTE5OTguCi0gICBNb2RpZmllZCBieSBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkgMjAwMi0yMDAzCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0qLwotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKLQotLyogTk9URTogVGhpcyBjb2RlIG1ha2VzIG5vIGF0dGVtcHQgdG8gYmUgZmFzdCEgKi8KLQotc3RhdGljIF9fdTMyCi1GKF9fdTMyIFgsIF9fdTMyIFksIF9fdTMyIFopCi17Ci0JcmV0dXJuIChYICYgWSkgfCAoKH5YKSAmIFopOwotfQotCi1zdGF0aWMgX191MzIKLUcoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gKFggJiBZKSB8IChYICYgWikgfCAoWSAmIFopOwotfQotCi1zdGF0aWMgX191MzIKLUgoX191MzIgWCwgX191MzIgWSwgX191MzIgWikKLXsKLQlyZXR1cm4gWCBeIFkgXiBaOwotfQotCi1zdGF0aWMgX191MzIKLWxzaGlmdChfX3UzMiB4LCBpbnQgcykKLXsKLQl4ICY9IDB4RkZGRkZGRkY7Ci0JcmV0dXJuICgoeCA8PCBzKSAmIDB4RkZGRkZGRkYpIHwgKHggPj4gKDMyIC0gcykpOwotfQotCi0jZGVmaW5lIFJPVU5EMShhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgRigqYiwqYywqZCkgKyBYW2tdLCBzKQotI2RlZmluZSBST1VORDIoYSxiLGMsZCxrLHMpICgqYSkgPSBsc2hpZnQoKCphKSArIEcoKmIsKmMsKmQpICsgWFtrXSArIChfX3UzMikweDVBODI3OTk5LHMpCi0jZGVmaW5lIFJPVU5EMyhhLGIsYyxkLGsscykgKCphKSA9IGxzaGlmdCgoKmEpICsgSCgqYiwqYywqZCkgKyBYW2tdICsgKF9fdTMyKTB4NkVEOUVCQTEscykKLQotLyogdGhpcyBhcHBsaWVzIG1kNCB0byA2NCBieXRlIGNodW5rcyAqLwotc3RhdGljIHZvaWQKLW1kZm91cjY0KF9fdTMyICpNLCBfX3UzMiAqQSwgX191MzIgKkIsIF9fdTMyICpDLCBfX3UzMiAqRCkKLXsKLQlpbnQgajsKLQlfX3UzMiBBQSwgQkIsIENDLCBERDsKLQlfX3UzMiBYWzE2XTsKLQotCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCVhbal0gPSBNW2pdOwotCi0JQUEgPSAqQTsKLQlCQiA9ICpCOwotCUNDID0gKkM7Ci0JREQgPSAqRDsKLQotCVJPVU5EMShBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgMSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDIsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgMywgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCA0LCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgNSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDYsIDExKTsKLQlST1VORDEoQiwgQywgRCwgQSwgNywgMTkpOwotCVJPVU5EMShBLCBCLCBDLCBELCA4LCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgOSwgNyk7Ci0JUk9VTkQxKEMsIEQsIEEsIEIsIDEwLCAxMSk7Ci0JUk9VTkQxKEIsIEMsIEQsIEEsIDExLCAxOSk7Ci0JUk9VTkQxKEEsIEIsIEMsIEQsIDEyLCAzKTsKLQlST1VORDEoRCwgQSwgQiwgQywgMTMsIDcpOwotCVJPVU5EMShDLCBELCBBLCBCLCAxNCwgMTEpOwotCVJPVU5EMShCLCBDLCBELCBBLCAxNSwgMTkpOwotCi0JUk9VTkQyKEEsIEIsIEMsIEQsIDAsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA0LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgOCwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDEyLCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDEsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA1LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgOSwgOSk7Ci0JUk9VTkQyKEIsIEMsIEQsIEEsIDEzLCAxMyk7Ci0JUk9VTkQyKEEsIEIsIEMsIEQsIDIsIDMpOwotCVJPVU5EMihELCBBLCBCLCBDLCA2LCA1KTsKLQlST1VORDIoQywgRCwgQSwgQiwgMTAsIDkpOwotCVJPVU5EMihCLCBDLCBELCBBLCAxNCwgMTMpOwotCVJPVU5EMihBLCBCLCBDLCBELCAzLCAzKTsKLQlST1VORDIoRCwgQSwgQiwgQywgNywgNSk7Ci0JUk9VTkQyKEMsIEQsIEEsIEIsIDExLCA5KTsKLQlST1VORDIoQiwgQywgRCwgQSwgMTUsIDEzKTsKLQotCVJPVU5EMyhBLCBCLCBDLCBELCAwLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgOCwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDQsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTIsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMiwgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDEwLCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNiwgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxNCwgMTUpOwotCVJPVU5EMyhBLCBCLCBDLCBELCAxLCAzKTsKLQlST1VORDMoRCwgQSwgQiwgQywgOSwgOSk7Ci0JUk9VTkQzKEMsIEQsIEEsIEIsIDUsIDExKTsKLQlST1VORDMoQiwgQywgRCwgQSwgMTMsIDE1KTsKLQlST1VORDMoQSwgQiwgQywgRCwgMywgMyk7Ci0JUk9VTkQzKEQsIEEsIEIsIEMsIDExLCA5KTsKLQlST1VORDMoQywgRCwgQSwgQiwgNywgMTEpOwotCVJPVU5EMyhCLCBDLCBELCBBLCAxNSwgMTUpOwotCi0JKkEgKz0gQUE7Ci0JKkIgKz0gQkI7Ci0JKkMgKz0gQ0M7Ci0JKkQgKz0gREQ7Ci0KLQkqQSAmPSAweEZGRkZGRkZGOwotCSpCICY9IDB4RkZGRkZGRkY7Ci0JKkMgJj0gMHhGRkZGRkZGRjsKLQkqRCAmPSAweEZGRkZGRkZGOwotCi0JZm9yIChqID0gMDsgaiA8IDE2OyBqKyspCi0JCVhbal0gPSAwOwotfQotCi1zdGF0aWMgdm9pZAotY29weTY0KF9fdTMyICpNLCB1bnNpZ25lZCBjaGFyICppbikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQotCQlNW2ldID0gKGluW2kgKiA0ICsgM10gPDwgMjQpIHwgKGluW2kgKiA0ICsgMl0gPDwgMTYpIHwKLQkJICAgIChpbltpICogNCArIDFdIDw8IDgpIHwgKGluW2kgKiA0ICsgMF0gPDwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jb3B5NCh1bnNpZ25lZCBjaGFyICpvdXQsIF9fdTMyIHgpCi17Ci0Jb3V0WzBdID0geCAmIDB4RkY7Ci0Jb3V0WzFdID0gKHggPj4gOCkgJiAweEZGOwotCW91dFsyXSA9ICh4ID4+IDE2KSAmIDB4RkY7Ci0Jb3V0WzNdID0gKHggPj4gMjQpICYgMHhGRjsKLX0KLQotLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KLXZvaWQKLW1kZm91cih1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGNoYXIgKmluLCBpbnQgbikKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOwotCV9fdTMyIE1bMTZdOwotCV9fdTMyIGIgPSBuICogODsKLQlpbnQgaTsKLQlfX3UzMiBBID0gMHg2NzQ1MjMwMTsKLQlfX3UzMiBCID0gMHhlZmNkYWI4OTsKLQlfX3UzMiBDID0gMHg5OGJhZGNmZTsKLQlfX3UzMiBEID0gMHgxMDMyNTQ3NjsKLQotCXdoaWxlIChuID4gNjQpIHsKLQkJY29weTY0KE0sIGluKTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCQlpbiArPSA2NDsKLQkJbiAtPSA2NDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspCi0JCWJ1ZltpXSA9IDA7Ci0JbWVtY3B5KGJ1ZiwgaW4sIG4pOwotCWJ1ZltuXSA9IDB4ODA7Ci0KLQlpZiAobiA8PSA1NSkgewotCQljb3B5NChidWYgKyA1NiwgYik7Ci0JCWNvcHk2NChNLCBidWYpOwotCQltZGZvdXI2NChNLCAmQSwgJkIsICZDLCAmRCk7Ci0JfSBlbHNlIHsKLQkJY29weTQoYnVmICsgMTIwLCBiKTsKLQkJY29weTY0KE0sIGJ1Zik7Ci0JCW1kZm91cjY0KE0sICZBLCAmQiwgJkMsICZEKTsKLQkJY29weTY0KE0sIGJ1ZiArIDY0KTsKLQkJbWRmb3VyNjQoTSwgJkEsICZCLCAmQywgJkQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKLQkJYnVmW2ldID0gMDsKLQljb3B5NjQoTSwgYnVmKTsKLQotCWNvcHk0KG91dCwgQSk7Ci0JY29weTQob3V0ICsgNCwgQik7Ci0JY29weTQob3V0ICsgOCwgQyk7Ci0JY29weTQob3V0ICsgMTIsIEQpOwotCi0JQSA9IEIgPSBDID0gRCA9IDA7Ci19CmRpZmYgLS1naXQgYS9mcy9jaWZzL21kNS5jIGIvZnMvY2lmcy9tZDUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThiNjZhNS4uMDAwMDAwMAotLS0gYS9mcy9jaWZzL21kNS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY2ICswLDAgQEAKLS8qCi0gKiBUaGlzIGNvZGUgaW1wbGVtZW50cyB0aGUgTUQ1IG1lc3NhZ2UtZGlnZXN0IGFsZ29yaXRobS4KLSAqIFRoZSBhbGdvcml0aG0gaXMgZHVlIHRvIFJvbiBSaXZlc3QuICBUaGlzIGNvZGUgd2FzCi0gKiB3cml0dGVuIGJ5IENvbGluIFBsdW1iIGluIDE5OTMsIG5vIGNvcHlyaWdodCBpcyBjbGFpbWVkLgotICogVGhpcyBjb2RlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluOyBkbyB3aXRoIGl0IHdoYXQgeW91IHdpc2guCi0gKgotICogRXF1aXZhbGVudCBjb2RlIGlzIGF2YWlsYWJsZSBmcm9tIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCi0gKiBUaGlzIGNvZGUgaGFzIGJlZW4gdGVzdGVkIGFnYWluc3QgdGhhdCwgYW5kIGlzIGVxdWl2YWxlbnQsCi0gKiBleGNlcHQgdGhhdCB5b3UgZG9uJ3QgbmVlZCB0byBpbmNsdWRlIHR3byBwYWdlcyBvZiBsZWdhbGVzZQotICogd2l0aCBldmVyeSBjb3B5LgotICoKLSAqIFRvIGNvbXB1dGUgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGEgY2h1bmsgb2YgYnl0ZXMsIGRlY2xhcmUgYW4KLSAqIE1ENUNvbnRleHQgc3RydWN0dXJlLCBwYXNzIGl0IHRvIGNpZnNfTUQ1X2luaXQsIGNhbGwgY2lmc19NRDVfdXBkYXRlIGFzCi0gKiBuZWVkZWQgb24gYnVmZmVycyBmdWxsIG9mIGJ5dGVzLCBhbmQgdGhlbiBjYWxsIGNpZnNfTUQ1X2ZpbmFsLCB3aGljaAotICogd2lsbCBmaWxsIGEgc3VwcGxpZWQgMTYtYnl0ZSBhcnJheSB3aXRoIHRoZSBkaWdlc3QuCi0gKi8KLQotLyogVGhpcyBjb2RlIHNsaWdodGx5IG1vZGlmaWVkIHRvIGZpdCBpbnRvIFNhbWJhIGJ5Ci0gICBhYmFydGxldEBzYW1iYS5vcmcgSnVuIDIwMDEKLSAgIGFuZCB0byBmaXQgdGhlIGNpZnMgdmZzIGJ5Ci0gICBTdGV2ZSBGcmVuY2ggc2ZyZW5jaEB1cy5pYm0uY29tICovCi0KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlICJtZDUuaCIKLQotc3RhdGljIHZvaWQgTUQ1VHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTZdKTsKLQotLyoKLSAqIE5vdGU6IHRoaXMgY29kZSBpcyBoYXJtbGVzcyBvbiBsaXR0bGUtZW5kaWFuIG1hY2hpbmVzLgotICovCi1zdGF0aWMgdm9pZAotYnl0ZVJldmVyc2UodW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsb25ncykKLXsKLQlfX3UzMiB0OwotCWRvIHsKLQkJdCA9IChfX3UzMikgKCh1bnNpZ25lZCkgYnVmWzNdIDw8IDggfCBidWZbMl0pIDw8IDE2IHwKLQkJICAgICgodW5zaWduZWQpIGJ1ZlsxXSA8PCA4IHwgYnVmWzBdKTsKLQkJKihfX3UzMiAqKSBidWYgPSB0OwotCQlidWYgKz0gNDsKLQl9IHdoaWxlICgtLWxvbmdzKTsKLX0KLQotLyoKLSAqIFN0YXJ0IE1ENSBhY2N1bXVsYXRpb24uICBTZXQgYml0IGNvdW50IHRvIDAgYW5kIGJ1ZmZlciB0byBteXN0ZXJpb3VzCi0gKiBpbml0aWFsaXphdGlvbiBjb25zdGFudHMuCi0gKi8KLXZvaWQKLWNpZnNfTUQ1X2luaXQoc3RydWN0IE1ENUNvbnRleHQgKmN0eCkKLXsKLQljdHgtPmJ1ZlswXSA9IDB4Njc0NTIzMDE7Ci0JY3R4LT5idWZbMV0gPSAweGVmY2RhYjg5OwotCWN0eC0+YnVmWzJdID0gMHg5OGJhZGNmZTsKLQljdHgtPmJ1ZlszXSA9IDB4MTAzMjU0NzY7Ci0KLQljdHgtPmJpdHNbMF0gPSAwOwotCWN0eC0+Yml0c1sxXSA9IDA7Ci19Ci0KLS8qCi0gKiBVcGRhdGUgY29udGV4dCB0byByZWZsZWN0IHRoZSBjb25jYXRlbmF0aW9uIG9mIGFub3RoZXIgYnVmZmVyIGZ1bGwKLSAqIG9mIGJ5dGVzLgotICovCi12b2lkCi1jaWZzX01ENV91cGRhdGUoc3RydWN0IE1ENUNvbnRleHQgKmN0eCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLCB1bnNpZ25lZCBsZW4pCi17Ci0JcmVnaXN0ZXIgX191MzIgdDsKLQotCS8qIFVwZGF0ZSBiaXRjb3VudCAqLwotCi0JdCA9IGN0eC0+Yml0c1swXTsKLQlpZiAoKGN0eC0+Yml0c1swXSA9IHQgKyAoKF9fdTMyKSBsZW4gPDwgMykpIDwgdCkKLQkJY3R4LT5iaXRzWzFdKys7CS8qIENhcnJ5IGZyb20gbG93IHRvIGhpZ2ggKi8KLQljdHgtPmJpdHNbMV0gKz0gbGVuID4+IDI5OwotCi0JdCA9ICh0ID4+IDMpICYgMHgzZjsJLyogQnl0ZXMgYWxyZWFkeSBpbiBzaHNJbmZvLT5kYXRhICovCi0KLQkvKiBIYW5kbGUgYW55IGxlYWRpbmcgb2RkLXNpemVkIGNodW5rcyAqLwotCi0JaWYgKHQpIHsKLQkJdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGN0eC0+aW4gKyB0OwotCi0JCXQgPSA2NCAtIHQ7Ci0JCWlmIChsZW4gPCB0KSB7Ci0JCQltZW1tb3ZlKHAsIGJ1ZiwgbGVuKTsKLQkJCXJldHVybjsKLQkJfQotCQltZW1tb3ZlKHAsIGJ1ZiwgdCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JCWJ1ZiArPSB0OwotCQlsZW4gLT0gdDsKLQl9Ci0JLyogUHJvY2VzcyBkYXRhIGluIDY0LWJ5dGUgY2h1bmtzICovCi0KLQl3aGlsZSAobGVuID49IDY0KSB7Ci0JCW1lbW1vdmUoY3R4LT5pbiwgYnVmLCA2NCk7Ci0JCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE2KTsKLQkJTUQ1VHJhbnNmb3JtKGN0eC0+YnVmLCAoX191MzIgKikgY3R4LT5pbik7Ci0JCWJ1ZiArPSA2NDsKLQkJbGVuIC09IDY0OwotCX0KLQotCS8qIEhhbmRsZSBhbnkgcmVtYWluaW5nIGJ5dGVzIG9mIGRhdGEuICovCi0KLQltZW1tb3ZlKGN0eC0+aW4sIGJ1ZiwgbGVuKTsKLX0KLQotLyoKLSAqIEZpbmFsIHdyYXB1cCAtIHBhZCB0byA2NC1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIGJpdCBwYXR0ZXJuCi0gKiAxIDAqICg2NC1iaXQgY291bnQgb2YgYml0cyBwcm9jZXNzZWQsIE1TQi1maXJzdCkKLSAqLwotdm9pZAotY2lmc19NRDVfZmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY3R4KQotewotCXVuc2lnbmVkIGludCBjb3VudDsKLQl1bnNpZ25lZCBjaGFyICpwOwotCi0JLyogQ29tcHV0ZSBudW1iZXIgb2YgYnl0ZXMgbW9kIDY0ICovCi0JY291bnQgPSAoY3R4LT5iaXRzWzBdID4+IDMpICYgMHgzRjsKLQotCS8qIFNldCB0aGUgZmlyc3QgY2hhciBvZiBwYWRkaW5nIHRvIDB4ODAuICBUaGlzIGlzIHNhZmUgc2luY2UgdGhlcmUgaXMKLQkgICBhbHdheXMgYXQgbGVhc3Qgb25lIGJ5dGUgZnJlZSAqLwotCXAgPSBjdHgtPmluICsgY291bnQ7Ci0JKnArKyA9IDB4ODA7Ci0KLQkvKiBCeXRlcyBvZiBwYWRkaW5nIG5lZWRlZCB0byBtYWtlIDY0IGJ5dGVzICovCi0JY291bnQgPSA2NCAtIDEgLSBjb3VudDsKLQotCS8qIFBhZCBvdXQgdG8gNTYgbW9kIDY0ICovCi0JaWYgKGNvdW50IDwgOCkgewotCQkvKiBUd28gbG90cyBvZiBwYWRkaW5nOiAgUGFkIHRoZSBmaXJzdCBibG9jayB0byA2NCBieXRlcyAqLwotCQltZW1zZXQocCwgMCwgY291bnQpOwotCQlieXRlUmV2ZXJzZShjdHgtPmluLCAxNik7Ci0JCU1ENVRyYW5zZm9ybShjdHgtPmJ1ZiwgKF9fdTMyICopIGN0eC0+aW4pOwotCi0JCS8qIE5vdyBmaWxsIHRoZSBuZXh0IGJsb2NrIHdpdGggNTYgYnl0ZXMgKi8KLQkJbWVtc2V0KGN0eC0+aW4sIDAsIDU2KTsKLQl9IGVsc2UgewotCQkvKiBQYWQgYmxvY2sgdG8gNTYgYnl0ZXMgKi8KLQkJbWVtc2V0KHAsIDAsIGNvdW50IC0gOCk7Ci0JfQotCWJ5dGVSZXZlcnNlKGN0eC0+aW4sIDE0KTsKLQotCS8qIEFwcGVuZCBsZW5ndGggaW4gYml0cyBhbmQgdHJhbnNmb3JtICovCi0JKChfX3UzMiAqKSBjdHgtPmluKVsxNF0gPSBjdHgtPmJpdHNbMF07Ci0JKChfX3UzMiAqKSBjdHgtPmluKVsxNV0gPSBjdHgtPmJpdHNbMV07Ci0KLQlNRDVUcmFuc2Zvcm0oY3R4LT5idWYsIChfX3UzMiAqKSBjdHgtPmluKTsKLQlieXRlUmV2ZXJzZSgodW5zaWduZWQgY2hhciAqKSBjdHgtPmJ1ZiwgNCk7Ci0JbWVtbW92ZShkaWdlc3QsIGN0eC0+YnVmLCAxNik7Ci0JbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsJLyogSW4gY2FzZSBpdCdzIHNlbnNpdGl2ZSAqLwotfQotCi0vKiBUaGUgZm91ciBjb3JlIGZ1bmN0aW9ucyAtIEYxIGlzIG9wdGltaXplZCBzb21ld2hhdCAqLwotCi0vKiAjZGVmaW5lIEYxKHgsIHksIHopICh4ICYgeSB8IH54ICYgeikgKi8KLSNkZWZpbmUgRjEoeCwgeSwgeikgKHogXiAoeCAmICh5IF4geikpKQotI2RlZmluZSBGMih4LCB5LCB6KSBGMSh6LCB4LCB5KQotI2RlZmluZSBGMyh4LCB5LCB6KSAoeCBeIHkgXiB6KQotI2RlZmluZSBGNCh4LCB5LCB6KSAoeSBeICh4IHwgfnopKQotCi0vKiBUaGlzIGlzIHRoZSBjZW50cmFsIHN0ZXAgaW4gdGhlIE1ENSBhbGdvcml0aG0uICovCi0jZGVmaW5lIE1ENVNURVAoZiwgdywgeCwgeSwgeiwgZGF0YSwgcykgXAotCSh3ICs9IGYoeCwgeSwgeikgKyBkYXRhLCAgdyA9IHc8PHMgfCB3Pj4oMzItcyksICB3ICs9IHgpCi0KLS8qCi0gKiBUaGUgY29yZSBvZiB0aGUgTUQ1IGFsZ29yaXRobSwgdGhpcyBhbHRlcnMgYW4gZXhpc3RpbmcgTUQ1IGhhc2ggdG8KLSAqIHJlZmxlY3QgdGhlIGFkZGl0aW9uIG9mIDE2IGxvbmd3b3JkcyBvZiBuZXcgZGF0YS4gIGNpZnNfTUQ1X3VwZGF0ZSBibG9ja3MKLSAqIHRoZSBkYXRhIGFuZCBjb252ZXJ0cyBieXRlcyBpbnRvIGxvbmd3b3JkcyBmb3IgdGhpcyByb3V0aW5lLgotICovCi1zdGF0aWMgdm9pZAotTUQ1VHJhbnNmb3JtKF9fdTMyIGJ1Zls0XSwgX191MzIgY29uc3QgaW5bMTZdKQotewotCXJlZ2lzdGVyIF9fdTMyIGEsIGIsIGMsIGQ7Ci0KLQlhID0gYnVmWzBdOwotCWIgPSBidWZbMV07Ci0JYyA9IGJ1ZlsyXTsKLQlkID0gYnVmWzNdOwotCi0JTUQ1U1RFUChGMSwgYSwgYiwgYywgZCwgaW5bMF0gKyAweGQ3NmFhNDc4LCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxXSArIDB4ZThjN2I3NTYsIDEyKTsKLQlNRDVTVEVQKEYxLCBjLCBkLCBhLCBiLCBpblsyXSArIDB4MjQyMDcwZGIsIDE3KTsKLQlNRDVTVEVQKEYxLCBiLCBjLCBkLCBhLCBpblszXSArIDB4YzFiZGNlZWUsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpbls0XSArIDB4ZjU3YzBmYWYsIDcpOwotCU1ENVNURVAoRjEsIGQsIGEsIGIsIGMsIGluWzVdICsgMHg0Nzg3YzYyYSwgMTIpOwotCU1ENVNURVAoRjEsIGMsIGQsIGEsIGIsIGluWzZdICsgMHhhODMwNDYxMywgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzddICsgMHhmZDQ2OTUwMSwgMjIpOwotCU1ENVNURVAoRjEsIGEsIGIsIGMsIGQsIGluWzhdICsgMHg2OTgwOThkOCwgNyk7Ci0JTUQ1U1RFUChGMSwgZCwgYSwgYiwgYywgaW5bOV0gKyAweDhiNDRmN2FmLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTBdICsgMHhmZmZmNWJiMSwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzExXSArIDB4ODk1Y2Q3YmUsIDIyKTsKLQlNRDVTVEVQKEYxLCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDZiOTAxMTIyLCA3KTsKLQlNRDVTVEVQKEYxLCBkLCBhLCBiLCBjLCBpblsxM10gKyAweGZkOTg3MTkzLCAxMik7Ci0JTUQ1U1RFUChGMSwgYywgZCwgYSwgYiwgaW5bMTRdICsgMHhhNjc5NDM4ZSwgMTcpOwotCU1ENVNURVAoRjEsIGIsIGMsIGQsIGEsIGluWzE1XSArIDB4NDliNDA4MjEsIDIyKTsKLQotCU1ENVNURVAoRjIsIGEsIGIsIGMsIGQsIGluWzFdICsgMHhmNjFlMjU2MiwgNSk7Ci0JTUQ1U1RFUChGMiwgZCwgYSwgYiwgYywgaW5bNl0gKyAweGMwNDBiMzQwLCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxMV0gKyAweDI2NWU1YTUxLCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bMF0gKyAweGU5YjZjN2FhLCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bNV0gKyAweGQ2MmYxMDVkLCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxMF0gKyAweDAyNDQxNDUzLCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweGQ4YTFlNjgxLCAxNCk7Ci0JTUQ1U1RFUChGMiwgYiwgYywgZCwgYSwgaW5bNF0gKyAweGU3ZDNmYmM4LCAyMCk7Ci0JTUQ1U1RFUChGMiwgYSwgYiwgYywgZCwgaW5bOV0gKyAweDIxZTFjZGU2LCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsxNF0gKyAweGMzMzcwN2Q2LCA5KTsKLQlNRDVTVEVQKEYyLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZjRkNTBkODcsIDE0KTsKLQlNRDVTVEVQKEYyLCBiLCBjLCBkLCBhLCBpbls4XSArIDB4NDU1YTE0ZWQsIDIwKTsKLQlNRDVTVEVQKEYyLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweGE5ZTNlOTA1LCA1KTsKLQlNRDVTVEVQKEYyLCBkLCBhLCBiLCBjLCBpblsyXSArIDB4ZmNlZmEzZjgsIDkpOwotCU1ENVNURVAoRjIsIGMsIGQsIGEsIGIsIGluWzddICsgMHg2NzZmMDJkOSwgMTQpOwotCU1ENVNURVAoRjIsIGIsIGMsIGQsIGEsIGluWzEyXSArIDB4OGQyYTRjOGEsIDIwKTsKLQotCU1ENVNURVAoRjMsIGEsIGIsIGMsIGQsIGluWzVdICsgMHhmZmZhMzk0MiwgNCk7Ci0JTUQ1U1RFUChGMywgZCwgYSwgYiwgYywgaW5bOF0gKyAweDg3NzFmNjgxLCAxMSk7Ci0JTUQ1U1RFUChGMywgYywgZCwgYSwgYiwgaW5bMTFdICsgMHg2ZDlkNjEyMiwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzE0XSArIDB4ZmRlNTM4MGMsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxXSArIDB4YTRiZWVhNDQsIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzRdICsgMHg0YmRlY2ZhOSwgMTEpOwotCU1ENVNURVAoRjMsIGMsIGQsIGEsIGIsIGluWzddICsgMHhmNmJiNGI2MCwgMTYpOwotCU1ENVNURVAoRjMsIGIsIGMsIGQsIGEsIGluWzEwXSArIDB4YmViZmJjNzAsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpblsxM10gKyAweDI4OWI3ZWM2LCA0KTsKLQlNRDVTVEVQKEYzLCBkLCBhLCBiLCBjLCBpblswXSArIDB4ZWFhMTI3ZmEsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblszXSArIDB4ZDRlZjMwODUsIDE2KTsKLQlNRDVTVEVQKEYzLCBiLCBjLCBkLCBhLCBpbls2XSArIDB4MDQ4ODFkMDUsIDIzKTsKLQlNRDVTVEVQKEYzLCBhLCBiLCBjLCBkLCBpbls5XSArIDB4ZDlkNGQwMzksIDQpOwotCU1ENVNURVAoRjMsIGQsIGEsIGIsIGMsIGluWzEyXSArIDB4ZTZkYjk5ZTUsIDExKTsKLQlNRDVTVEVQKEYzLCBjLCBkLCBhLCBiLCBpblsxNV0gKyAweDFmYTI3Y2Y4LCAxNik7Ci0JTUQ1U1RFUChGMywgYiwgYywgZCwgYSwgaW5bMl0gKyAweGM0YWM1NjY1LCAyMyk7Ci0KLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblswXSArIDB4ZjQyOTIyNDQsIDYpOwotCU1ENVNURVAoRjQsIGQsIGEsIGIsIGMsIGluWzddICsgMHg0MzJhZmY5NywgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzE0XSArIDB4YWI5NDIzYTcsIDE1KTsKLQlNRDVTVEVQKEY0LCBiLCBjLCBkLCBhLCBpbls1XSArIDB4ZmM5M2EwMzksIDIxKTsKLQlNRDVTVEVQKEY0LCBhLCBiLCBjLCBkLCBpblsxMl0gKyAweDY1NWI1OWMzLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblszXSArIDB4OGYwY2NjOTIsIDEwKTsKLQlNRDVTVEVQKEY0LCBjLCBkLCBhLCBiLCBpblsxMF0gKyAweGZmZWZmNDdkLCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMV0gKyAweDg1ODQ1ZGQxLCAyMSk7Ci0JTUQ1U1RFUChGNCwgYSwgYiwgYywgZCwgaW5bOF0gKyAweDZmYTg3ZTRmLCA2KTsKLQlNRDVTVEVQKEY0LCBkLCBhLCBiLCBjLCBpblsxNV0gKyAweGZlMmNlNmUwLCAxMCk7Ci0JTUQ1U1RFUChGNCwgYywgZCwgYSwgYiwgaW5bNl0gKyAweGEzMDE0MzE0LCAxNSk7Ci0JTUQ1U1RFUChGNCwgYiwgYywgZCwgYSwgaW5bMTNdICsgMHg0ZTA4MTFhMSwgMjEpOwotCU1ENVNURVAoRjQsIGEsIGIsIGMsIGQsIGluWzRdICsgMHhmNzUzN2U4MiwgNik7Ci0JTUQ1U1RFUChGNCwgZCwgYSwgYiwgYywgaW5bMTFdICsgMHhiZDNhZjIzNSwgMTApOwotCU1ENVNURVAoRjQsIGMsIGQsIGEsIGIsIGluWzJdICsgMHgyYWQ3ZDJiYiwgMTUpOwotCU1ENVNURVAoRjQsIGIsIGMsIGQsIGEsIGluWzldICsgMHhlYjg2ZDM5MSwgMjEpOwotCi0JYnVmWzBdICs9IGE7Ci0JYnVmWzFdICs9IGI7Ci0JYnVmWzJdICs9IGM7Ci0JYnVmWzNdICs9IGQ7Ci19Ci0KLSNpZiAwICAgLyogY3VycmVudGx5IHVudXNlZCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdGhlIHJmYyAyMTA0IHZlcnNpb24gb2YgaG1hY19tZDUgaW5pdGlhbGlzYXRpb24uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1obWFjX21kNV9pbml0X3JmYzIxMDQodW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJICAgICAgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JaW50IGk7Ci0KLQkvKiBpZiBrZXkgaXMgbG9uZ2VyIHRoYW4gNjQgYnl0ZXMgcmVzZXQgaXQgdG8ga2V5PU1ENShrZXkpICovCi0JaWYgKGtleV9sZW4gPiA2NCkgewotCQl1bnNpZ25lZCBjaGFyIHRrWzE2XTsKLQkJc3RydWN0IE1ENUNvbnRleHQgdGN0eDsKLQotCQljaWZzX01ENV9pbml0KCZ0Y3R4KTsKLQkJY2lmc19NRDVfdXBkYXRlKCZ0Y3R4LCBrZXksIGtleV9sZW4pOwotCQljaWZzX01ENV9maW5hbCh0aywgJnRjdHgpOwotCi0JCWtleSA9IHRrOwotCQlrZXlfbGVuID0gMTY7Ci0JfQotCi0JLyogc3RhcnQgb3V0IGJ5IHN0b3Jpbmcga2V5IGluIHBhZHMgKi8KLQltZW1zZXQoY3R4LT5rX2lwYWQsIDAsIHNpemVvZihjdHgtPmtfaXBhZCkpOwotCW1lbXNldChjdHgtPmtfb3BhZCwgMCwgc2l6ZW9mKGN0eC0+a19vcGFkKSk7Ci0JbWVtY3B5KGN0eC0+a19pcGFkLCBrZXksIGtleV9sZW4pOwotCW1lbWNweShjdHgtPmtfb3BhZCwga2V5LCBrZXlfbGVuKTsKLQotCS8qIFhPUiBrZXkgd2l0aCBpcGFkIGFuZCBvcGFkIHZhbHVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7Ci0JCWN0eC0+a19pcGFkW2ldIF49IDB4MzY7Ci0JCWN0eC0+a19vcGFkW2ldIF49IDB4NWM7Ci0JfQotCi0JY2lmc19NRDVfaW5pdCgmY3R4LT5jdHgpOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4LT5jdHgsIGN0eC0+a19pcGFkLCA2NCk7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gdGhlIG1pY3Jvc29mdCB2ZXJzaW9uIG9mIGhtYWNfbWQ1IGluaXRpYWxpc2F0aW9uLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV9pbml0X2xpbUtfdG9fNjQoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5X2xlbiwKLQkJCSBzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCkKLXsKLQlpbnQgaTsKLQotCS8qIGlmIGtleSBpcyBsb25nZXIgdGhhbiA2NCBieXRlcyB0cnVuY2F0ZSBpdCAqLwotCWlmIChrZXlfbGVuID4gNjQpCi0JCWtleV9sZW4gPSA2NDsKLQotCS8qIHN0YXJ0IG91dCBieSBzdG9yaW5nIGtleSBpbiBwYWRzICovCi0JbWVtc2V0KGN0eC0+a19pcGFkLCAwLCBzaXplb2YoY3R4LT5rX2lwYWQpKTsKLQltZW1zZXQoY3R4LT5rX29wYWQsIDAsIHNpemVvZihjdHgtPmtfb3BhZCkpOwotCW1lbWNweShjdHgtPmtfaXBhZCwga2V5LCBrZXlfbGVuKTsKLQltZW1jcHkoY3R4LT5rX29wYWQsIGtleSwga2V5X2xlbik7Ci0KLQkvKiBYT1Iga2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQljdHgtPmtfaXBhZFtpXSBePSAweDM2OwotCQljdHgtPmtfb3BhZFtpXSBePSAweDVjOwotCX0KLQotCWNpZnNfTUQ1X2luaXQoJmN0eC0+Y3R4KTsKLQljaWZzX01ENV91cGRhdGUoJmN0eC0+Y3R4LCBjdHgtPmtfaXBhZCwgNjQpOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSB1cGRhdGUgaG1hY19tZDUgImlubmVyIiBidWZmZXIKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZAotaG1hY19tZDVfdXBkYXRlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGludCB0ZXh0X2xlbiwKLQkJc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpCi17Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHgtPmN0eCwgdGV4dCwgdGV4dF9sZW4pOwkvKiB0aGVuIHRleHQgb2YgZGF0YWdyYW0gKi8KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gZmluaXNoIG9mZiBobWFjX21kNSAiaW5uZXIiIGJ1ZmZlciBhbmQgZ2VuZXJhdGUgb3V0ZXIgb25lLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCi1obWFjX21kNV9maW5hbCh1bnNpZ25lZCBjaGFyICpkaWdlc3QsIHN0cnVjdCBITUFDTUQ1Q29udGV4dCAqY3R4KQotewotCXN0cnVjdCBNRDVDb250ZXh0IGN0eF9vOwotCi0JY2lmc19NRDVfZmluYWwoZGlnZXN0LCAmY3R4LT5jdHgpOwotCi0JY2lmc19NRDVfaW5pdCgmY3R4X28pOwotCWNpZnNfTUQ1X3VwZGF0ZSgmY3R4X28sIGN0eC0+a19vcGFkLCA2NCk7Ci0JY2lmc19NRDVfdXBkYXRlKCZjdHhfbywgZGlnZXN0LCAxNik7Ci0JY2lmc19NRDVfZmluYWwoZGlnZXN0LCAmY3R4X28pOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSBzaW5nbGUgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGFuIEhNQUMgTUQ1IGRpZ2VzdCBmcm9tIGRhdGEuCi0gdXNlIHRoZSBtaWNyb3NvZnQgaG1hY21kNSBpbml0IG1ldGhvZCBiZWNhdXNlIHRoZSBrZXkgaXMgMTYgYnl0ZXMuCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWYgMCAvKiBjdXJyZW50bHkgdW51c2VkICovCi1zdGF0aWMgdm9pZAotaG1hY19tZDUodW5zaWduZWQgY2hhciBrZXlbMTZdLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgZGF0YV9sZW4sCi0JIHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCkKLXsKLQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgY3R4OwotCWhtYWNfbWQ1X2luaXRfbGltS190b182NChrZXksIDE2LCAmY3R4KTsKLQlpZiAoZGF0YV9sZW4gIT0gMCkKLQkJaG1hY19tZDVfdXBkYXRlKGRhdGEsIGRhdGFfbGVuLCAmY3R4KTsKLQotCWhtYWNfbWQ1X2ZpbmFsKGRpZ2VzdCwgJmN0eCk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWQ1LmggYi9mcy9jaWZzL21kNS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmJhOGNiLi4wMDAwMDAwCi0tLSBhL2ZzL2NpZnMvbWQ1LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0jaWZuZGVmIE1ENV9ICi0jZGVmaW5lIE1ENV9ICi0jaWZuZGVmIEhFQURFUl9NRDVfSAotLyogVHJ5IHRvIGF2b2lkIGNsYXNoZXMgd2l0aCBPcGVuU1NMICovCi0jZGVmaW5lIEhFQURFUl9NRDVfSAotI2VuZGlmCi0KLXN0cnVjdCBNRDVDb250ZXh0IHsKLQlfX3UzMiBidWZbNF07Ci0JX191MzIgYml0c1syXTsKLQl1bnNpZ25lZCBjaGFyIGluWzY0XTsKLX07Ci0jZW5kaWYJCQkJLyogIU1ENV9IICovCi0KLSNpZm5kZWYgX0hNQUNfTUQ1X0gKLXN0cnVjdCBITUFDTUQ1Q29udGV4dCB7Ci0Jc3RydWN0IE1ENUNvbnRleHQgY3R4OwotCXVuc2lnbmVkIGNoYXIga19pcGFkWzY1XTsKLQl1bnNpZ25lZCBjaGFyIGtfb3BhZFs2NV07Ci19OwotI2VuZGlmCQkJCS8qIF9ITUFDX01ENV9IICovCi0KLXZvaWQgY2lmc19NRDVfaW5pdChzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Ci12b2lkIGNpZnNfTUQ1X3VwZGF0ZShzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCwgdW5zaWduZWQgY2hhciBjb25zdCAqYnVmLAotCQkJdW5zaWduZWQgbGVuKTsKLXZvaWQgY2lmc19NRDVfZmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMTZdLCBzdHJ1Y3QgTUQ1Q29udGV4dCAqY29udGV4dCk7Ci0KLS8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY29tZSBmcm9tIGxpYi9obWFjbWQ1LmMgICovCi0KLS8qIHZvaWQgaG1hY19tZDVfaW5pdF9yZmMyMTA0KHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ki8KLXZvaWQgaG1hY19tZDVfaW5pdF9saW1LX3RvXzY0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleV9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci12b2lkIGhtYWNfbWQ1X3VwZGF0ZShjb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBpbnQgdGV4dF9sZW4sCi0JCQlzdHJ1Y3QgSE1BQ01ENUNvbnRleHQgKmN0eCk7Ci12b2lkIGhtYWNfbWQ1X2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IEhNQUNNRDVDb250ZXh0ICpjdHgpOwotLyogdm9pZCBobWFjX21kNSh1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHVuc2lnbmVkIGNoYXIgKmRhdGEsIGludCBkYXRhX2xlbiwKLQkJCXVuc2lnbmVkIGNoYXIgKmRpZ2VzdCk7Ki8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggYTA5ZTA3Ny4uMmE5MzBhNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTIzNiwxMCArMjM2LDcgQEAKIHsKIAlfX3UxNiBtaWQgPSAwOwogCV9fdTE2IGxhc3RfbWlkOwotCWludCAgIGNvbGxpc2lvbjsKLQotCWlmIChzZXJ2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIG1pZDsKKwlib29sIGNvbGxpc2lvbjsKIAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCWxhc3RfbWlkID0gc2VydmVyLT5DdXJyZW50TWlkOyAvKiB3ZSBkbyBub3Qgd2FudCB0byBsb29wIGZvcmV2ZXIgKi8KQEAgLTI1MiwyNCArMjQ5LDM4IEBACiAJKGFuZCBpdCB3b3VsZCBhbHNvIGhhdmUgdG8gaGF2ZSBiZWVuIGEgcmVxdWVzdCB0aGF0CiAJIGRpZCBub3QgdGltZSBvdXQpICovCiAJd2hpbGUgKHNlcnZlci0+Q3VycmVudE1pZCAhPSBsYXN0X21pZCkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkX2VudHJ5OworCQl1bnNpZ25lZCBpbnQgbnVtX21pZHM7CiAKLQkJY29sbGlzaW9uID0gMDsKKwkJY29sbGlzaW9uID0gZmFsc2U7CiAJCWlmIChzZXJ2ZXItPkN1cnJlbnRNaWQgPT0gMCkKIAkJCXNlcnZlci0+Q3VycmVudE1pZCsrOwogCi0JCWxpc3RfZm9yX2VhY2godG1wLCAmc2VydmVyLT5wZW5kaW5nX21pZF9xKSB7Ci0JCQltaWRfZW50cnkgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IG1pZF9xX2VudHJ5LCBxaGVhZCk7Ci0KLQkJCWlmICgobWlkX2VudHJ5LT5taWQgPT0gc2VydmVyLT5DdXJyZW50TWlkKSAmJgotCQkJICAgIChtaWRfZW50cnktPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHsKKwkJbnVtX21pZHMgPSAwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1pZF9lbnRyeSwgJnNlcnZlci0+cGVuZGluZ19taWRfcSwgcWhlYWQpIHsKKwkJCSsrbnVtX21pZHM7CisJCQlpZiAobWlkX2VudHJ5LT5taWQgPT0gc2VydmVyLT5DdXJyZW50TWlkICYmCisJCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKIAkJCQkvKiBUaGlzIG1pZCBpcyBpbiB1c2UsIHRyeSBhIGRpZmZlcmVudCBvbmUgKi8KLQkJCQljb2xsaXNpb24gPSAxOworCQkJCWNvbGxpc2lvbiA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KLQkJaWYgKGNvbGxpc2lvbiA9PSAwKSB7CisKKwkJLyoKKwkJICogaWYgd2UgaGF2ZSBtb3JlIHRoYW4gMzJrIG1pZHMgaW4gdGhlIGxpc3QsIHRoZW4gc29tZXRoaW5nCisJCSAqIGlzIHZlcnkgd3JvbmcuIFBvc3NpYmx5IGEgbG9jYWwgdXNlciBpcyB0cnlpbmcgdG8gRG9TIHRoZQorCQkgKiBib3ggYnkgaXNzdWluZyBsb25nLXJ1bm5pbmcgY2FsbHMgYW5kIFNJR0tJTEwnaW5nIHRoZW0uIElmCisJCSAqIHdlIGdldCB0byAyXjE2IG1pZHMgdGhlbiB3ZSdyZSBpbiBiaWcgdHJvdWJsZSBhcyB0aGlzCisJCSAqIGZ1bmN0aW9uIGNvdWxkIGxvb3AgZm9yZXZlci4KKwkJICoKKwkJICogR28gYWhlYWQgYW5kIGFzc2lnbiBvdXQgdGhlIG1pZCBpbiB0aGlzIHNpdHVhdGlvbiwgYnV0IGZvcmNlCisJCSAqIGFuIGV2ZW50dWFsIHJlY29ubmVjdCB0byBjbGVhbiBvdXQgdGhlIHBlbmRpbmdfbWlkX3EuCisJCSAqLworCQlpZiAobnVtX21pZHMgPiAzMjc2OCkKKwkJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWRSZWNvbm5lY3Q7CisKKwkJaWYgKCFjb2xsaXNpb24pIHsKIAkJCW1pZCA9IHNlcnZlci0+Q3VycmVudE1pZDsKIAkJCWJyZWFrOwogCQl9CkBAIC0zODEsMjkgKzM5MiwzMSBAQAogfQogCiBzdGF0aWMgaW50Ci1jaGVja1NNQmhkcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBfX3UxNiBtaWQpCitjaGVja19zbWJfaGRyKHN0cnVjdCBzbWJfaGRyICpzbWIsIF9fdTE2IG1pZCkKIHsKLQkvKiBNYWtlIHN1cmUgdGhhdCB0aGlzIHJlYWxseSBpcyBhbiBTTUIsIHRoYXQgaXQgaXMgYSByZXNwb25zZSwKLQkgICBhbmQgdGhhdCB0aGUgbWVzc2FnZSBpZHMgbWF0Y2ggKi8KLQlpZiAoKCooX19sZTMyICopIHNtYi0+UHJvdG9jb2wgPT0gY3B1X3RvX2xlMzIoMHg0MjRkNTNmZikpICYmCi0JCShtaWQgPT0gc21iLT5NaWQpKSB7Ci0JCWlmIChzbWItPkZsYWdzICYgU01CRkxHX1JFU1BPTlNFKQotCQkJcmV0dXJuIDA7Ci0JCWVsc2UgewotCQkvKiBvbmx5IG9uZSB2YWxpZCBjYXNlIHdoZXJlIHNlcnZlciBzZW5kcyB1cyByZXF1ZXN0ICovCi0JCQlpZiAoc21iLT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKQotCQkJCXJldHVybiAwOwotCQkJZWxzZQotCQkJCWNFUlJPUigxLCAiUmVjZWl2ZWQgUmVxdWVzdCBub3QgcmVzcG9uc2UiKTsKLQkJfQotCX0gZWxzZSB7IC8qIGJhZCBzaWduYXR1cmUgb3IgbWlkICovCi0JCWlmICgqKF9fbGUzMiAqKSBzbWItPlByb3RvY29sICE9IGNwdV90b19sZTMyKDB4NDI0ZDUzZmYpKQotCQkJY0VSUk9SKDEsICJCYWQgcHJvdG9jb2wgc3RyaW5nIHNpZ25hdHVyZSBoZWFkZXIgJXgiLAotCQkJCSoodW5zaWduZWQgaW50ICopIHNtYi0+UHJvdG9jb2wpOwotCQlpZiAobWlkICE9IHNtYi0+TWlkKQotCQkJY0VSUk9SKDEsICJNaWRzIGRvIG5vdCBtYXRjaCIpOworCS8qIGRvZXMgaXQgaGF2ZSB0aGUgcmlnaHQgU01CICJzaWduYXR1cmUiID8gKi8KKwlpZiAoKihfX2xlMzIgKikgc21iLT5Qcm90b2NvbCAhPSBjcHVfdG9fbGUzMigweDQyNGQ1M2ZmKSkgeworCQljRVJST1IoMSwgIkJhZCBwcm90b2NvbCBzdHJpbmcgc2lnbmF0dXJlIGhlYWRlciAweCV4IiwKKwkJCSoodW5zaWduZWQgaW50ICopc21iLT5Qcm90b2NvbCk7CisJCXJldHVybiAxOwogCX0KLQljRVJST1IoMSwgImJhZCBzbWIgZGV0ZWN0ZWQuIFRoZSBNaWQ9JWQiLCBzbWItPk1pZCk7CisKKwkvKiBNYWtlIHN1cmUgdGhhdCBtZXNzYWdlIGlkcyBtYXRjaCAqLworCWlmIChtaWQgIT0gc21iLT5NaWQpIHsKKwkJY0VSUk9SKDEsICJNaWRzIGRvIG5vdCBtYXRjaC4gcmVjZWl2ZWQ9JXUgZXhwZWN0ZWQ9JXUiLAorCQkJc21iLT5NaWQsIG1pZCk7CisJCXJldHVybiAxOworCX0KKworCS8qIGlmIGl0J3MgYSByZXNwb25zZSB0aGVuIGFjY2VwdCAqLworCWlmIChzbWItPkZsYWdzICYgU01CRkxHX1JFU1BPTlNFKQorCQlyZXR1cm4gMDsKKworCS8qIG9ubHkgb25lIHZhbGlkIGNhc2Ugd2hlcmUgc2VydmVyIHNlbmRzIHVzIHJlcXVlc3QgKi8KKwlpZiAoc21iLT5Db21tYW5kID09IFNNQl9DT01fTE9DS0lOR19BTkRYKQorCQlyZXR1cm4gMDsKKworCWNFUlJPUigxLCAiU2VydmVyIHNlbnQgcmVxdWVzdCwgbm90IHJlc3BvbnNlLiBtaWQ9JXUiLCBzbWItPk1pZCk7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTQ0OCw3ICs0NjEsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoY2hlY2tTTUJoZHIoc21iLCBtaWQpKQorCWlmIChjaGVja19zbWJfaGRyKHNtYiwgbWlkKSkKIAkJcmV0dXJuIDE7CiAJY2xjX2xlbiA9IHNtYkNhbGNTaXplX0xFKHNtYik7CiAKQEAgLTQ2NSwyNSArNDc4LDI2IEBACiAJCQlpZiAoKCg0ICsgbGVuKSAmIDB4RkZGRikgPT0gKGNsY19sZW4gJiAweEZGRkYpKQogCQkJCXJldHVybiAwOyAvKiBiY2Mgd3JhcHBlZCAqLwogCQl9Ci0JCWNGWUkoMSwgIkNhbGN1bGF0ZWQgc2l6ZSAlZCB2cyBsZW5ndGggJWQgbWlzbWF0Y2ggZm9yIG1pZCAlZCIsCisJCWNGWUkoMSwgIkNhbGN1bGF0ZWQgc2l6ZSAldSB2cyBsZW5ndGggJXUgbWlzbWF0Y2ggZm9yIG1pZD0ldSIsCiAJCQkJY2xjX2xlbiwgNCArIGxlbiwgc21iLT5NaWQpOwotCQkvKiBXaW5kb3dzIFhQIGNhbiByZXR1cm4gYSBmZXcgYnl0ZXMgdG9vIG11Y2gsIHByZXN1bWFibHkKLQkJYW4gaWxsZWdhbCBwYWQsIGF0IHRoZSBlbmQgb2YgYnl0ZSByYW5nZSBsb2NrIHJlc3BvbnNlcwotCQlzbyB3ZSBhbGxvdyBmb3IgdGhhdCB0aHJlZSBieXRlIHBhZCwgYXMgbG9uZyBhcyBhY3R1YWwKLQkJcmVjZWl2ZWQgbGVuZ3RoIGlzIGFzIGxvbmcgb3IgbG9uZ2VyIHRoYW4gY2FsY3VsYXRlZCBsZW5ndGggKi8KLQkJLyogV2UgaGF2ZSBub3cgaGFkIHRvIGV4dGVuZCB0aGlzIG1vcmUsIHNpbmNlIHRoZXJlIGlzIGEKLQkJY2FzZSBpbiB3aGljaCBpdCBuZWVkcyB0byBiZSBiaWdnZXIgc3RpbGwgdG8gaGFuZGxlIGEKLQkJbWFsZm9ybWVkIHJlc3BvbnNlIHRvIHRyYW5zYWN0MiBmaW5kZmlyc3QgZnJvbSBXaW5YUCB3aGVuCi0JCWFjY2VzcyBkZW5pZWQgaXMgcmV0dXJuZWQgYW5kIHRodXMgYmNjIGFuZCB3Y3QgYXJlIHplcm8KLQkJYnV0IHNlcnZlciBzYXlzIGxlbmd0aCBpcyAweDIxIGJ5dGVzIHRvbyBsb25nIGFzIGlmIHRoZSBzZXJ2ZXIKLQkJZm9yZ2V0IHRvIHJlc2V0IHRoZSBzbWIgcmZjMTAwMSBsZW5ndGggd2hlbiBpdCByZXNldCB0aGUKLQkJd2N0IGFuZCBiY2MgdG8gbWluaW11bSBzaXplIGFuZCBkcm9wIHRoZSB0MiBwYXJtcyBhbmQgZGF0YSAqLwotCQlpZiAoKDQrbGVuID4gY2xjX2xlbikgJiYgKGxlbiA8PSBjbGNfbGVuICsgNTEyKSkKLQkJCXJldHVybiAwOwotCQllbHNlIHsKLQkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICVkIGJpZ2dlciB0aGFuIFNNQiBmb3IgTWlkPSVkIiwKKworCQlpZiAoNCArIGxlbiA8IGNsY19sZW4pIHsKKwkJCWNFUlJPUigxLCAiUkZDMTAwMSBzaXplICV1IHNtYWxsZXIgdGhhbiBTTUIgZm9yIG1pZD0ldSIsCiAJCQkJCWxlbiwgc21iLT5NaWQpOwogCQkJcmV0dXJuIDE7CisJCX0gZWxzZSBpZiAobGVuID4gY2xjX2xlbiArIDUxMikgeworCQkJLyoKKwkJCSAqIFNvbWUgc2VydmVycyAoV2luZG93cyBYUCBpbiBwYXJ0aWN1bGFyKSBzZW5kIG1vcmUKKwkJCSAqIGRhdGEgdGhhbiB0aGUgbGVuZ3RocyBpbiB0aGUgU01CIHBhY2tldCB3b3VsZAorCQkJICogaW5kaWNhdGUgb24gY2VydGFpbiBjYWxscyAoYnl0ZSByYW5nZSBsb2NrcyBhbmQKKwkJCSAqIHRyYW5zMiBmaW5kIGZpcnN0IGNhbGxzIGluIHBhcnRpY3VsYXIpLiBXaGlsZSB0aGUKKwkJCSAqIGNsaWVudCBjYW4gaGFuZGxlIHN1Y2ggYSBmcmFtZSBieSBpZ25vcmluZyB0aGUKKwkJCSAqIHRyYWlsaW5nIGRhdGEsIHdlIGNob29zZSBsaW1pdCB0aGUgYW1vdW50IG9mIGV4dHJhCisJCQkgKiBkYXRhIHRvIDUxMiBieXRlcy4KKwkJCSAqLworCQkJY0VSUk9SKDEsICJSRkMxMDAxIHNpemUgJXUgbW9yZSB0aGFuIDUxMiBieXRlcyBsYXJnZXIgIgorCQkJCSAgInRoYW4gU01CIGZvciBtaWQ9JXUiLCBsZW4sIHNtYi0+TWlkKTsKKwkJCXJldHVybiAxOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9uZXRtaXNjLmMgYi9mcy9jaWZzL25ldG1pc2MuYwppbmRleCA4ZDkxODlmLi43OWY2NDFlIDEwMDY0NAotLS0gYS9mcy9jaWZzL25ldG1pc2MuYworKysgYi9mcy9jaWZzL25ldG1pc2MuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiB7CiAJaW50IHJjLCBhbGVuLCBzbGVuOwogCWNvbnN0IGNoYXIgKnBjdDsKLQljaGFyICplbmRwLCBzY29wZV9pZFsxM107CisJY2hhciBzY29wZV9pZFsxM107CiAJc3RydWN0IHNvY2thZGRyX2luICpzNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgZHN0OwogCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnM2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0OwogCkBAIC0xOTcsOSArMTk3LDkgQEAKIAkJbWVtY3B5KHNjb3BlX2lkLCBwY3QgKyAxLCBzbGVuKTsKIAkJc2NvcGVfaWRbc2xlbl0gPSAnXDAnOwogCi0JCXM2LT5zaW42X3Njb3BlX2lkID0gKHUzMikgc2ltcGxlX3N0cnRvdWwocGN0LCAmZW5kcCwgMCk7Ci0JCWlmIChlbmRwICE9IHNjb3BlX2lkICsgc2xlbikKLQkJCXJldHVybiAwOworCQlyYyA9IHN0cmljdF9zdHJ0b3VsKHNjb3BlX2lkLCAwLAorCQkJCQkodW5zaWduZWQgbG9uZyAqKSZzNi0+c2luNl9zY29wZV9pZCk7CisJCXJjID0gKHJjID09IDApID8gMSA6IDA7CiAJfQogCiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA3ZjI1Y2MzLi5mOGU0Y2QyIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtNzY0LDcgKzc2NCw2IEBACiB7CiAJaW50IHJjID0gMDsKIAlpbnQgeGlkLCBpOwotCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqY2lmc0ZpbGUgPSBOVUxMOwogCWNoYXIgKmN1cnJlbnRfZW50cnk7CkBAIC03NzUsOCArNzc0LDYgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JY2lmc19zYiA9IENJRlNfU0IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7Ci0KIAkvKgogCSAqIEVuc3VyZSBGaW5kRmlyc3QgZG9lc24ndCBmYWlsIGJlZm9yZSBkb2luZyBmaWxsZGlyKCkgZm9yICcuJyBhbmQKIAkgKiAnLi4nLiBPdGhlcndpc2Ugd2Ugd29uJ3QgYmUgYWJsZSB0byBub3RpZnkgVkZTIGluIGNhc2Ugb2YgZmFpbHVyZS4KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggMWFkYzk2Mi4uMTY3NjU3MCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTY1NiwxMyArNjU2LDEzIEBACiAKIAlpZiAodHlwZSA9PSBMQU5NQU4pIHsKICNpZmRlZiBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0gKLQkJY2hhciBsbm1fc2Vzc2lvbl9rZXlbQ0lGU19TRVNTX0tFWV9TSVpFXTsKKwkJY2hhciBsbm1fc2Vzc2lvbl9rZXlbQ0lGU19BVVRIX1JFU1BfU0laRV07CiAKIAkJcFNNQi0+cmVxLmhkci5GbGFnczIgJj0gflNNQkZMRzJfVU5JQ09ERTsKIAogCQkvKiBubyBjYXBhYmlsaXRpZXMgZmxhZ3MgaW4gb2xkIGxhbm1hbiBuZWdvdGlhdGlvbiAqLwogCi0JCXBTTUItPm9sZF9yZXEuUGFzc3dvcmRMZW5ndGggPSBjcHVfdG9fbGUxNihDSUZTX1NFU1NfS0VZX1NJWkUpOworCQlwU01CLT5vbGRfcmVxLlBhc3N3b3JkTGVuZ3RoID0gY3B1X3RvX2xlMTYoQ0lGU19BVVRIX1JFU1BfU0laRSk7CiAKIAkJLyogQ2FsY3VsYXRlIGhhc2ggd2l0aCBwYXNzd29yZCBhbmQgY29weSBpbnRvIGJjY19wdHIuCiAJCSAqIEVuY3J5cHRpb24gS2V5IChzdG9yZWQgYXMgaW4gY3J5cHRrZXkpIGdldHMgdXNlZCBpZiB0aGUKQEAgLTY3NSw4ICs2NzUsOCBAQAogCQkJCQl0cnVlIDogZmFsc2UsIGxubV9zZXNzaW9uX2tleSk7CiAKIAkJc2VzLT5mbGFncyB8PSBDSUZTX1NFU19MQU5NQU47Ci0JCW1lbWNweShiY2NfcHRyLCAoY2hhciAqKWxubV9zZXNzaW9uX2tleSwgQ0lGU19TRVNTX0tFWV9TSVpFKTsKLQkJYmNjX3B0ciArPSBDSUZTX1NFU1NfS0VZX1NJWkU7CisJCW1lbWNweShiY2NfcHRyLCAoY2hhciAqKWxubV9zZXNzaW9uX2tleSwgQ0lGU19BVVRIX1JFU1BfU0laRSk7CisJCWJjY19wdHIgKz0gQ0lGU19BVVRIX1JFU1BfU0laRTsKIAogCQkvKiBjYW4gbm90IHNpZ24gaWYgTEFOTUFOIG5lZ290aWF0ZWQgc28gbm8gbmVlZAogCQl0byBjYWxjdWxhdGUgc2lnbmluZyBrZXk/IGJ1dCB3aGF0IGlmIHNlcnZlcgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJkZXMuYyBiL2ZzL2NpZnMvc21iZGVzLmMKaW5kZXggYjZiNmRjYi4uMDQ3MjE0OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zbWJkZXMuYworKysgYi9mcy9jaWZzL3NtYmRlcy5jCkBAIC00NSw3ICs0NSw2IEBACiAgICB1cCB3aXRoIGEgZGlmZmVyZW50IGFuc3dlciB0byB0aGUgb25lIGFib3ZlKQogKi8KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSAiY2lmc2VuY3J5cHQuaCIKICNkZWZpbmUgdWNoYXIgdW5zaWduZWQgY2hhcgogCiBzdGF0aWMgdWNoYXIgcGVybTFbNTZdID0geyA1NywgNDksIDQxLCAzMywgMjUsIDE3LCA5LApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zbWJlbmNyeXB0LmMgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwppbmRleCAxOTJlYTUxLi5iNTA0MWM4IDEwMDY0NAotLS0gYS9mcy9jaWZzL3NtYmVuY3J5cHQuYworKysgYi9mcy9jaWZzL3NtYmVuY3J5cHQuYwpAQCAtMzIsOSArMzIsOCBAQAogI2luY2x1ZGUgImNpZnNfdW5pY29kZS5oIgogI2luY2x1ZGUgImNpZnNwZHUuaCIKICNpbmNsdWRlICJjaWZzZ2xvYi5oIgotI2luY2x1ZGUgIm1kNS5oIgogI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKLSNpbmNsdWRlICJjaWZzZW5jcnlwdC5oIgorI2luY2x1ZGUgImNpZnNwcm90by5oIgogCiAjaWZuZGVmIGZhbHNlCiAjZGVmaW5lIGZhbHNlIDAKQEAgLTQ4LDE0ICs0Nyw1OCBAQAogI2RlZmluZSBTU1ZBTFgoYnVmLHBvcyx2YWwpIChDVkFMKGJ1Zixwb3MpPSh2YWwpJjB4RkYsQ1ZBTChidWYscG9zKzEpPSh2YWwpPj44KQogI2RlZmluZSBTU1ZBTChidWYscG9zLHZhbCkgU1NWQUxYKChidWYpLChwb3MpLCgoX191MTYpKHZhbCkpKQogCi0vKlRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgY29tZSBmcm9tICBsaWJzbWIvc21iZW5jcnlwdC5jICAqLworLyogcHJvZHVjZSBhIG1kNCBtZXNzYWdlIGRpZ2VzdCBmcm9tIGRhdGEgb2YgbGVuZ3RoIG4gYnl0ZXMgKi8KK2ludAorbWRmb3VyKHVuc2lnbmVkIGNoYXIgKm1kNF9oYXNoLCB1bnNpZ25lZCBjaGFyICpsaW5rX3N0ciwgaW50IGxpbmtfbGVuKQoreworCWludCByYzsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwlzdHJ1Y3QgY3J5cHRvX3NoYXNoICptZDQ7CisJc3RydWN0IHNkZXNjICpzZGVzY21kNDsKIAotdm9pZCBTTUJlbmNyeXB0KHVuc2lnbmVkIGNoYXIgKnBhc3N3ZCwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCXVuc2lnbmVkIGNoYXIgKnAyNCk7Ci12b2lkIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNik7Ci1zdGF0aWMgdm9pZCBTTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JCSAgIHVuc2lnbmVkIGNoYXIgcDI0WzI0XSk7Ci12b2lkIFNNQk5UZW5jcnlwdCh1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKmM4LCB1bnNpZ25lZCBjaGFyICpwMjQpOworCW1kNCA9IGNyeXB0b19hbGxvY19zaGFzaCgibWQ0IiwgMCwgMCk7CisJaWYgKElTX0VSUihtZDQpKSB7CisJCXJjID0gUFRSX0VSUihtZDQpOworCQljRVJST1IoMSwgIiVzOiBDcnlwdG8gbWQ0IGFsbG9jYXRpb24gZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByYyk7CisJCXJldHVybiByYzsKKwl9CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhc2hfZGVzYykgKyBjcnlwdG9fc2hhc2hfZGVzY3NpemUobWQ0KTsKKwlzZGVzY21kNCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZGVzY21kNCkgeworCQlyYyA9IC1FTk9NRU07CisJCWNFUlJPUigxLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIsIF9fZnVuY19fKTsKKwkJZ290byBtZGZvdXJfZXJyOworCX0KKwlzZGVzY21kNC0+c2hhc2gudGZtID0gbWQ0OworCXNkZXNjbWQ0LT5zaGFzaC5mbGFncyA9IDB4MDsKKworCXJjID0gY3J5cHRvX3NoYXNoX2luaXQoJnNkZXNjbWQ0LT5zaGFzaCk7CisJaWYgKHJjKSB7CisJCWNFUlJPUigxLCAiJXM6IENvdWxkIG5vdCBpbml0IG1kNCBzaGFzaFxuIiwgX19mdW5jX18pOworCQlnb3RvIG1kZm91cl9lcnI7CisJfQorCWNyeXB0b19zaGFzaF91cGRhdGUoJnNkZXNjbWQ0LT5zaGFzaCwgbGlua19zdHIsIGxpbmtfbGVuKTsKKwlyYyA9IGNyeXB0b19zaGFzaF9maW5hbCgmc2Rlc2NtZDQtPnNoYXNoLCBtZDRfaGFzaCk7CisKK21kZm91cl9lcnI6CisJY3J5cHRvX2ZyZWVfc2hhc2gobWQ0KTsKKwlrZnJlZShzZGVzY21kNCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLworc3RhdGljIHZvaWQKK1NNQk9XRmVuY3J5cHQodW5zaWduZWQgY2hhciBwYXNzd2RbMTZdLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjOCwKKwkgICAgICB1bnNpZ25lZCBjaGFyIHAyNFsyNF0pCit7CisJdW5zaWduZWQgY2hhciBwMjFbMjFdOworCisJbWVtc2V0KHAyMSwgJ1wwJywgMjEpOworCisJbWVtY3B5KHAyMSwgcGFzc3dkLCAxNik7CisJRV9QMjQocDIxLCBjOCwgcDI0KTsKK30KIAogLyoKICAgIFRoaXMgaW1wbGVtZW50cyB0aGUgWC9PcGVuIFNNQiBwYXNzd29yZCBlbmNyeXB0aW9uCkBAIC0xMTgsOSArMTYxLDEwIEBACiAgKiBDcmVhdGVzIHRoZSBNRDQgSGFzaCBvZiB0aGUgdXNlcnMgcGFzc3dvcmQgaW4gTlQgVU5JQ09ERS4KICAqLwogCi12b2lkCitpbnQKIEVfbWQ0aGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd2QsIHVuc2lnbmVkIGNoYXIgKnAxNikKIHsKKwlpbnQgcmM7CiAJaW50IGxlbjsKIAlfX3UxNiB3cHdkWzEyOV07CiAKQEAgLTEzOSw4ICsxODMsMTAgQEAKIAkvKiBDYWxjdWxhdGUgbGVuZ3RoIGluIGJ5dGVzICovCiAJbGVuID0gX215X3djc2xlbih3cHdkKSAqIHNpemVvZihfX3UxNik7CiAKLQltZGZvdXIocDE2LCAodW5zaWduZWQgY2hhciAqKSB3cHdkLCBsZW4pOworCXJjID0gbWRmb3VyKHAxNiwgKHVuc2lnbmVkIGNoYXIgKikgd3B3ZCwgbGVuKTsKIAltZW1zZXQod3B3ZCwgMCwgMTI5ICogMik7CisKKwlyZXR1cm4gcmM7CiB9CiAKICNpZiAwIC8qIGN1cnJlbnRseSB1bnVzZWQgKi8KQEAgLTIxMiwxOSArMjU4LDYgQEAKIH0KICNlbmRpZgogCi0vKiBEb2VzIHRoZSBkZXMgZW5jcnlwdGlvbiBmcm9tIHRoZSBOVCBvciBMTSBNRDQgaGFzaC4gKi8KLXN0YXRpYyB2b2lkCi1TTUJPV0ZlbmNyeXB0KHVuc2lnbmVkIGNoYXIgcGFzc3dkWzE2XSwgY29uc3QgdW5zaWduZWQgY2hhciAqYzgsCi0JICAgICAgdW5zaWduZWQgY2hhciBwMjRbMjRdKQotewotCXVuc2lnbmVkIGNoYXIgcDIxWzIxXTsKLQotCW1lbXNldChwMjEsICdcMCcsIDIxKTsKLQotCW1lbWNweShwMjEsIHBhc3N3ZCwgMTYpOwotCUVfUDI0KHAyMSwgYzgsIHAyNCk7Ci19Ci0KIC8qIERvZXMgdGhlIGRlcyBlbmNyeXB0aW9uIGZyb20gdGhlIEZJUlNUIDggQllURVMgb2YgdGhlIE5UIG9yIExNIE1ENCBoYXNoLiAqLwogI2lmIDAgLyogY3VycmVudGx5IHVudXNlZCAqLwogc3RhdGljIHZvaWQKQEAgLTI0MiwxNiArMjc1LDIxIEBACiAjZW5kaWYKIAogLyogRG9lcyB0aGUgTlQgTUQ0IGhhc2ggdGhlbiBkZXMgZW5jcnlwdGlvbi4gKi8KLQotdm9pZAoraW50CiBTTUJOVGVuY3J5cHQodW5zaWduZWQgY2hhciAqcGFzc3dkLCB1bnNpZ25lZCBjaGFyICpjOCwgdW5zaWduZWQgY2hhciAqcDI0KQogeworCWludCByYzsKIAl1bnNpZ25lZCBjaGFyIHAyMVsyMV07CiAKIAltZW1zZXQocDIxLCAnXDAnLCAyMSk7CiAKLQlFX21kNGhhc2gocGFzc3dkLCBwMjEpOworCXJjID0gRV9tZDRoYXNoKHBhc3N3ZCwgcDIxKTsKKwlpZiAocmMpIHsKKwkJY0ZZSSgxLCAiJXMgQ2FuJ3QgZ2VuZXJhdGUgTlQgaGFzaCwgZXJyb3I6ICVkIiwgX19mdW5jX18sIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KIAlTTUJPV0ZlbmNyeXB0KHAyMSwgYzgsIHAyNCk7CisJcmV0dXJuIHJjOwogfQogCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IGMxY2NjYTEuLjQ2ZDg3NTZmIDEwMDY0NAotLS0gYS9mcy9jaWZzL3RyYW5zcG9ydC5jCisrKyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKQEAgLTIzNiw5ICsyMzYsOSBAQAogCQlzZXJ2ZXItPnRjcFN0YXR1cyA9IENpZnNOZWVkUmVjb25uZWN0OwogCX0KIAotCWlmIChyYyA8IDApIHsKKwlpZiAocmMgPCAwICYmIHJjICE9IC1FSU5UUikKIAkJY0VSUk9SKDEsICJFcnJvciAlZCBzZW5kaW5nIGRhdGEgb24gc29ja2V0IHRvIHNlcnZlciIsIHJjKTsKLQl9IGVsc2UKKwllbHNlCiAJCXJjID0gMDsKIAogCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQpAQCAtMzU5LDYgKzM1OSwxMCBAQAogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCisJLyogZW5hYmxlIHNpZ25pbmcgaWYgc2VydmVyIHJlcXVpcmVzIGl0ICovCisJaWYgKHNlcnZlci0+c2VjTW9kZSAmIChTRUNNT0RFX1NJR05fUkVRVUlSRUQgfCBTRUNNT0RFX1NJR05fRU5BQkxFRCkpCisJCWluX2J1Zi0+RmxhZ3MyIHw9IFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFOworCiAJbXV0ZXhfbG9jaygmc2VydmVyLT5zcnZfbXV0ZXgpOwogCW1pZCA9IEFsbG9jTWlkUUVudHJ5KGluX2J1Ziwgc2VydmVyKTsKIAlpZiAobWlkID09IE5VTEwpIHsKQEAgLTQ1Myw2ICs0NTcsOSBAQAogCWNhc2UgTUlEX1JFVFJZX05FRURFRDoKIAkJcmMgPSAtRUFHQUlOOwogCQlicmVhazsKKwljYXNlIE1JRF9SRVNQT05TRV9NQUxGT1JNRUQ6CisJCXJjID0gLUVJTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJY0VSUk9SKDEsICIlczogaW52YWxpZCBtaWQgc3RhdGUgbWlkPSVkIHN0YXRlPSVkIiwgX19mdW5jX18sCiAJCQltaWQtPm1pZCwgbWlkLT5taWRTdGF0ZSk7CkBAIC01NzAsMTcgKzU3NywzMyBAQAogI2VuZGlmCiAKIAltdXRleF91bmxvY2soJnNlcy0+c2VydmVyLT5zcnZfbXV0ZXgpOwotCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAotCWlmIChyYyA8IDApCisJaWYgKHJjIDwgMCkgeworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAJCWdvdG8gb3V0OworCX0KIAotCWlmIChsb25nX29wID09IENJRlNfQVNZTkNfT1ApCisJaWYgKGxvbmdfb3AgPT0gQ0lGU19BU1lOQ19PUCkgeworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CiAJCWdvdG8gb3V0OworCX0KIAogCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIG91dDsKKwlpZiAocmMgIT0gMCkgeworCQlzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKKwkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKKwkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKKwkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7CisJCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJCXJldHVybiByYzsKKwkJfQorCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCX0KKworCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKIAogCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKIAlpZiAocmMgIT0gMCkgewpAQCAtNzI0LDggKzc0NywxOSBAQAogCQlnb3RvIG91dDsKIAogCXJjID0gd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpOwotCWlmIChyYyAhPSAwKQotCQlnb3RvIG91dDsKKwlpZiAocmMgIT0gMCkgeworCQlzZW5kX250X2NhbmNlbChzZXMtPnNlcnZlciwgaW5fYnVmLCBtaWRRKTsKKwkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKKwkJCS8qIG5vIGxvbmdlciBjb25zaWRlcmVkIHRvIGJlICJpbi1mbGlnaHQiICovCisJCQltaWRRLT5jYWxsYmFjayA9IERlbGV0ZU1pZFFFbnRyeTsKKwkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOworCQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwl9CiAKIAlyYyA9IHN5bmNfbWlkX3Jlc3VsdChtaWRRLCBzZXMtPnNlcnZlcik7CiAJaWYgKHJjICE9IDApIHsKQEAgLTkyMiwxMCArOTU2LDIxIEBACiAJCQl9CiAJCX0KIAotCQlpZiAod2FpdF9mb3JfcmVzcG9uc2Uoc2VzLT5zZXJ2ZXIsIG1pZFEpID09IDApIHsKLQkJCS8qIFdlIGdvdCB0aGUgcmVzcG9uc2UgLSByZXN0YXJ0IHN5c3RlbSBjYWxsLiAqLwotCQkJcnN0YXJ0ID0gMTsKKwkJcmMgPSB3YWl0X2Zvcl9yZXNwb25zZShzZXMtPnNlcnZlciwgbWlkUSk7CisJCWlmIChyYykgeworCQkJc2VuZF9udF9jYW5jZWwoc2VzLT5zZXJ2ZXIsIGluX2J1ZiwgbWlkUSk7CisJCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKwkJCWlmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpIHsKKwkJCQkvKiBubyBsb25nZXIgY29uc2lkZXJlZCB0byBiZSAiaW4tZmxpZ2h0IiAqLworCQkJCW1pZFEtPmNhbGxiYWNrID0gRGVsZXRlTWlkUUVudHJ5OworCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQkJcmV0dXJuIHJjOworCQkJfQorCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAkJfQorCisJCS8qIFdlIGdvdCB0aGUgcmVzcG9uc2UgLSByZXN0YXJ0IHN5c3RlbSBjYWxsLiAqLworCQlyc3RhcnQgPSAxOwogCX0KIAogCXJjID0gc3luY19taWRfcmVzdWx0KG1pZFEsIHNlcy0+c2VydmVyKTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggOWY0OTNlZS4uMmE2YmQ5YTQgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0xNzYsNiArMTc2LDcgQEAKIAogLyoqCiAgKiBkZW50cnlfcmN1d2Fsa19iYXJyaWVyIC0gaW52YWxpZGF0ZSBpbi1wcm9ncmVzcyByY3Utd2FsayBsb29rdXBzCisgKiBAZGVudHJ5OiB0aGUgdGFyZ2V0IGRlbnRyeQogICogQWZ0ZXIgdGhpcyBjYWxsLCBpbi1wcm9ncmVzcyByY3Utd2FsayBwYXRoIGxvb2t1cCB3aWxsIGZhaWwuIFRoaXMKICAqIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgdW5oYXNoaW5nLCBhbmQgYWZ0ZXIgY2hhbmdpbmcgZF9pbm9kZSAoaWYKICAqIHRoZSBkZW50cnkgaGFzIG5vdCBhbHJlYWR5IGJlZW4gdW5oYXNoZWQpLgpAQCAtMjgxLDYgKzI4Miw3IEBACiAvKioKICAqIGRfa2lsbCAtIGtpbGwgZGVudHJ5IGFuZCByZXR1cm4gcGFyZW50CiAgKiBAZGVudHJ5OiBkZW50cnkgdG8ga2lsbAorICogQHBhcmVudDogcGFyZW50IGRlbnRyeQogICoKICAqIFRoZSBkZW50cnkgbXVzdCBhbHJlYWR5IGJlIHVuaGFzaGVkIGFuZCByZW1vdmVkIGZyb20gdGhlIExSVS4KICAqCkBAIC0xOTczLDcgKzE5NzUsNyBAQAogLyoqCiAgKiBkX3ZhbGlkYXRlIC0gdmVyaWZ5IGRlbnRyeSBwcm92aWRlZCBmcm9tIGluc2VjdXJlIHNvdXJjZSAoZGVwcmVjYXRlZCkKICAqIEBkZW50cnk6IFRoZSBkZW50cnkgYWxsZWdlZCB0byBiZSB2YWxpZCBjaGlsZCBvZiBAZHBhcmVudAotICogQHBhcmVudDogVGhlIHBhcmVudCBkZW50cnkgKGtub3duIHRvIGJlIHZhbGlkKQorICogQGRwYXJlbnQ6IFRoZSBwYXJlbnQgZGVudHJ5IChrbm93biB0byBiZSB2YWxpZCkKICAqCiAgKiBBbiBpbnNlY3VyZSBzb3VyY2UgaGFzIHNlbnQgdXMgYSBkZW50cnksIGhlcmUgd2UgdmVyaWZ5IGl0IGFuZCBkZ2V0KCkgaXQuCiAgKiBUaGlzIGlzIHVzZWQgYnkgbmNwZnMgaW4gaXRzIHJlYWRkaXIgaW1wbGVtZW50YXRpb24uCmRpZmYgLS1naXQgYS9mcy9kbG0vbG93Y29tbXMuYyBiL2ZzL2RsbS9sb3djb21tcy5jCmluZGV4IDljNjRhZTkuLjJkOGM4N2IgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS9sb3djb21tcy5jCisrKyBiL2ZzL2RsbS9sb3djb21tcy5jCkBAIC0xNDY4LDE1ICsxNDY4LDEzIEBACiAKIHN0YXRpYyBpbnQgd29ya19zdGFydCh2b2lkKQogewotCXJlY3Zfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJkbG1fcmVjdiIsIFdRX01FTV9SRUNMQUlNIHwKLQkJCQkJIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkVBQkxFLCAwKTsKKwlyZWN2X3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJkbG1fcmVjdiIpOwogCWlmICghcmVjdl93b3JrcXVldWUpIHsKIAkJbG9nX3ByaW50KCJjYW4ndCBzdGFydCBkbG1fcmVjdiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlzZW5kX3dvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgiZGxtX3NlbmQiLCBXUV9NRU1fUkVDTEFJTSB8Ci0JCQkJCSBXUV9ISUdIUFJJIHwgV1FfRlJFRVpFQUJMRSwgMCk7CisJc2VuZF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZGxtX3NlbmQiKTsKIAlpZiAoIXNlbmRfd29ya3F1ZXVlKSB7CiAJCWxvZ19wcmludCgiY2FuJ3Qgc3RhcnQgZGxtX3NlbmQiKTsKIAkJZGVzdHJveV93b3JrcXVldWUocmVjdl93b3JrcXVldWUpOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZGVudHJ5LmMgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwppbmRleCA2ZmM0ZjMxLi41MzRjMWQ0IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9kZW50cnkuYworKysgYi9mcy9lY3J5cHRmcy9kZW50cnkuYwpAQCAtNDYsMjQgKzQ2LDI4IEBACiB7CiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5OwogCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9zYXZlOwotCXN0cnVjdCB2ZnNtb3VudCAqdmZzbW91bnRfc2F2ZTsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfc2F2ZSA9IE5VTEw7CisJc3RydWN0IHZmc21vdW50ICp2ZnNtb3VudF9zYXZlID0gTlVMTDsKIAlpbnQgcmMgPSAxOwogCi0JaWYgKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCisJaWYgKG5kICYmIG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpCiAJCXJldHVybiAtRUNISUxEOwogCiAJbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSk7CiAJbG93ZXJfbW50ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChkZW50cnkpOwogCWlmICghbG93ZXJfZGVudHJ5LT5kX29wIHx8ICFsb3dlcl9kZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZSkKIAkJZ290byBvdXQ7Ci0JZGVudHJ5X3NhdmUgPSBuZC0+cGF0aC5kZW50cnk7Ci0JdmZzbW91bnRfc2F2ZSA9IG5kLT5wYXRoLm1udDsKLQluZC0+cGF0aC5kZW50cnkgPSBsb3dlcl9kZW50cnk7Ci0JbmQtPnBhdGgubW50ID0gbG93ZXJfbW50OworCWlmIChuZCkgeworCQlkZW50cnlfc2F2ZSA9IG5kLT5wYXRoLmRlbnRyeTsKKwkJdmZzbW91bnRfc2F2ZSA9IG5kLT5wYXRoLm1udDsKKwkJbmQtPnBhdGguZGVudHJ5ID0gbG93ZXJfZGVudHJ5OworCQluZC0+cGF0aC5tbnQgPSBsb3dlcl9tbnQ7CisJfQogCXJjID0gbG93ZXJfZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUobG93ZXJfZGVudHJ5LCBuZCk7Ci0JbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5X3NhdmU7Ci0JbmQtPnBhdGgubW50ID0gdmZzbW91bnRfc2F2ZTsKKwlpZiAobmQpIHsKKwkJbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5X3NhdmU7CisJCW5kLT5wYXRoLm1udCA9IHZmc21vdW50X3NhdmU7CisJfQogCWlmIChkZW50cnktPmRfaW5vZGUpIHsKIAkJc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZSA9CiAJCQllY3J5cHRmc19pbm9kZV90b19sb3dlcihkZW50cnktPmRfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmggYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAppbmRleCBkYmM4NGVkLi5lMDA3NTM0IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaAorKysgYi9mcy9lY3J5cHRmcy9lY3J5cHRmc19rZXJuZWwuaApAQCAtNjMyLDggKzYzMiw3IEBACiAJCSAgICAgICB1MzIgZmxhZ3MpOwogaW50IGVjcnlwdGZzX2xvb2t1cF9hbmRfaW50ZXJwb3NlX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKIAkJCQkJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5LAotCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSwKLQkJCQkJc3RydWN0IG5hbWVpZGF0YSAqZWNyeXB0ZnNfbmQpOworCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSk7CiBpbnQgZWNyeXB0ZnNfZGVjb2RlX2FuZF9kZWNyeXB0X2ZpbGVuYW1lKGNoYXIgKipkZWNyeXB0ZWRfbmFtZSwKIAkJCQkJIHNpemVfdCAqZGVjcnlwdGVkX25hbWVfc2l6ZSwKIAkJCQkJIHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2ZpbGUuYyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwppbmRleCA4MWUxMGU2Li43ZDEwNTBlIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9maWxlLmMKKysrIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCkBAIC0zMTcsNiArMzE3LDcgQEAKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlY3J5cHRmc19kaXJfZm9wcyA9IHsKIAkucmVhZGRpciA9IGVjcnlwdGZzX3JlYWRkaXIsCisJLnJlYWQgPSBnZW5lcmljX3JlYWRfZGlyLAogCS51bmxvY2tlZF9pb2N0bCA9IGVjcnlwdGZzX3VubG9ja2VkX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gZWNyeXB0ZnNfY29tcGF0X2lvY3RsLApkaWZmIC0tZ2l0IGEvZnMvZWNyeXB0ZnMvaW5vZGUuYyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKaW5kZXggYmQzM2Y4Ny4uYjU5MjkzOCAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvaW5vZGUuYworKysgYi9mcy9lY3J5cHRmcy9pbm9kZS5jCkBAIC03NCwxNiArNzQsMjAgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3Nfc2F2ZTsKIAlpbnQgcmM7CiAKLQlkZW50cnlfc2F2ZSA9IG5kLT5wYXRoLmRlbnRyeTsKLQl2ZnNtb3VudF9zYXZlID0gbmQtPnBhdGgubW50OwotCWZsYWdzX3NhdmUgPSBuZC0+ZmxhZ3M7Ci0JbmQtPnBhdGguZGVudHJ5ID0gbG93ZXJfZGVudHJ5OwotCW5kLT5wYXRoLm1udCA9IGxvd2VyX21udDsKLQluZC0+ZmxhZ3MgJj0gfkxPT0tVUF9PUEVOOworCWlmIChuZCkgeworCQlkZW50cnlfc2F2ZSA9IG5kLT5wYXRoLmRlbnRyeTsKKwkJdmZzbW91bnRfc2F2ZSA9IG5kLT5wYXRoLm1udDsKKwkJZmxhZ3Nfc2F2ZSA9IG5kLT5mbGFnczsKKwkJbmQtPnBhdGguZGVudHJ5ID0gbG93ZXJfZGVudHJ5OworCQluZC0+cGF0aC5tbnQgPSBsb3dlcl9tbnQ7CisJCW5kLT5mbGFncyAmPSB+TE9PS1VQX09QRU47CisJfQogCXJjID0gdmZzX2NyZWF0ZShsb3dlcl9kaXJfaW5vZGUsIGxvd2VyX2RlbnRyeSwgbW9kZSwgbmQpOwotCW5kLT5wYXRoLmRlbnRyeSA9IGRlbnRyeV9zYXZlOwotCW5kLT5wYXRoLm1udCA9IHZmc21vdW50X3NhdmU7Ci0JbmQtPmZsYWdzID0gZmxhZ3Nfc2F2ZTsKKwlpZiAobmQpIHsKKwkJbmQtPnBhdGguZGVudHJ5ID0gZGVudHJ5X3NhdmU7CisJCW5kLT5wYXRoLm1udCA9IHZmc21vdW50X3NhdmU7CisJCW5kLT5mbGFncyA9IGZsYWdzX3NhdmU7CisJfQogCXJldHVybiByYzsKIH0KIApAQCAtMjQxLDggKzI0NSw3IEBACiAgKi8KIGludCBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnksCiAJCQkJCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSwKLQkJCQkJc3RydWN0IGlub2RlICplY3J5cHRmc19kaXJfaW5vZGUsCi0JCQkJCXN0cnVjdCBuYW1laWRhdGEgKmVjcnlwdGZzX25kKQorCQkJCQlzdHJ1Y3QgaW5vZGUgKmVjcnlwdGZzX2Rpcl9pbm9kZSkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kaXJfZGVudHJ5OwogCXN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50OwpAQCAtMjkwLDggKzI5Myw2IEBACiAJCWdvdG8gb3V0OwogCWlmIChzcGVjaWFsX2ZpbGUobG93ZXJfaW5vZGUtPmlfbW9kZSkpCiAJCWdvdG8gb3V0OwotCWlmICghZWNyeXB0ZnNfbmQpCi0JCWdvdG8gb3V0OwogCS8qIFJlbGVhc2VkIGluIHRoaXMgZnVuY3Rpb24gKi8KIAlwYWdlX3ZpcnQgPSBrbWVtX2NhY2hlX3phbGxvYyhlY3J5cHRmc19oZWFkZXJfY2FjaGVfMiwgR0ZQX1VTRVIpOwogCWlmICghcGFnZV92aXJ0KSB7CkBAIC0zNDksNzUgKzM1MCw2IEBACiB9CiAKIC8qKgotICogZWNyeXB0ZnNfbmV3X2xvd2VyX2RlbnRyeQotICogQG5hbWU6IFRoZSBuYW1lIG9mIHRoZSBuZXcgZGVudHJ5LgotICogQGxvd2VyX2Rpcl9kZW50cnk6IFBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIG5ldyBkZW50cnkuCi0gKiBAbmQ6IG5hbWVpZGF0YSBmcm9tIGxhc3QgbG9va3VwLgotICoKLSAqIENyZWF0ZSBhIG5ldyBkZW50cnkgb3IgZ2V0IGl0IGZyb20gbG93ZXIgcGFyZW50IGRpci4KLSAqLwotc3RhdGljIHN0cnVjdCBkZW50cnkgKgotZWNyeXB0ZnNfbmV3X2xvd2VyX2RlbnRyeShzdHJ1Y3QgcXN0ciAqbmFtZSwgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSwKLQkJCSAgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqbmV3X2RlbnRyeTsKLQlzdHJ1Y3QgZGVudHJ5ICp0bXA7Ci0Jc3RydWN0IGlub2RlICpsb3dlcl9kaXJfaW5vZGU7Ci0KLQlsb3dlcl9kaXJfaW5vZGUgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlOwotCi0JdG1wID0gZF9hbGxvYyhsb3dlcl9kaXJfZGVudHJ5LCBuYW1lKTsKLQlpZiAoIXRtcCkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQltdXRleF9sb2NrKCZsb3dlcl9kaXJfaW5vZGUtPmlfbXV0ZXgpOwotCW5ld19kZW50cnkgPSBsb3dlcl9kaXJfaW5vZGUtPmlfb3AtPmxvb2t1cChsb3dlcl9kaXJfaW5vZGUsIHRtcCwgbmQpOwotCW11dGV4X3VubG9jaygmbG93ZXJfZGlyX2lub2RlLT5pX211dGV4KTsKLQotCWlmICghbmV3X2RlbnRyeSkKLQkJbmV3X2RlbnRyeSA9IHRtcDsKLQllbHNlCi0JCWRwdXQodG1wKTsKLQotCXJldHVybiBuZXdfZGVudHJ5OwotfQotCi0KLS8qKgotICogZWNyeXB0ZnNfbG9va3VwX29uZV9sb3dlcgotICogQGVjcnlwdGZzX2RlbnRyeTogVGhlIGVDcnlwdGZzIGRlbnRyeSB0aGF0IHdlIGFyZSBsb29raW5nIHVwCi0gKiBAbG93ZXJfZGlyX2RlbnRyeTogbG93ZXIgcGFyZW50IGRpcmVjdG9yeQotICogQG5hbWU6IGxvd2VyIGZpbGUgbmFtZQotICoKLSAqIEdldCB0aGUgbG93ZXIgZGVudHJ5IGZyb20gdmZzLiBJZiBsb3dlciBkZW50cnkgZG9lcyBub3QgZXhpc3QgeWV0LAotICogY3JlYXRlIGl0LgotICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqCi1lY3J5cHRmc19sb29rdXBfb25lX2xvd2VyKHN0cnVjdCBkZW50cnkgKmVjcnlwdGZzX2RlbnRyeSwKLQkJCSAgc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeSwgc3RydWN0IHFzdHIgKm5hbWUpCi17Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKLQlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKLQlpbnQgZXJyOwotCi0JbG93ZXJfbW50ID0gbW50Z2V0KGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoCi0JCQkJICAgIGVjcnlwdGZzX2RlbnRyeS0+ZF9wYXJlbnQpKTsKLQllcnIgPSB2ZnNfcGF0aF9sb29rdXAobG93ZXJfZGlyX2RlbnRyeSwgbG93ZXJfbW50LCBuYW1lLT5uYW1lICwgMCwgJm5kKTsKLQltbnRwdXQobG93ZXJfbW50KTsKLQotCWlmICghZXJyKSB7Ci0JCS8qIHdlIGRvbnQgbmVlZCB0aGUgbW91bnQgKi8KLQkJbW50cHV0KG5kLnBhdGgubW50KTsKLQkJcmV0dXJuIG5kLnBhdGguZGVudHJ5OwotCX0KLQlpZiAoZXJyICE9IC1FTk9FTlQpCi0JCXJldHVybiBFUlJfUFRSKGVycik7Ci0KLQkvKiBjcmVhdGUgYSBuZXcgbG93ZXIgZGVudHJ5ICovCi0JcmV0dXJuIGVjcnlwdGZzX25ld19sb3dlcl9kZW50cnkobmFtZSwgbG93ZXJfZGlyX2RlbnRyeSwgJm5kKTsKLX0KLQotLyoqCiAgKiBlY3J5cHRmc19sb29rdXAKICAqIEBlY3J5cHRmc19kaXJfaW5vZGU6IFRoZSBlQ3J5cHRmcyBkaXJlY3RvcnkgaW5vZGUKICAqIEBlY3J5cHRmc19kZW50cnk6IFRoZSBlQ3J5cHRmcyBkZW50cnkgdGhhdCB3ZSBhcmUgbG9va2luZyB1cApAQCAtNDM0LDcgKzM2Niw2IEBACiAJc2l6ZV90IGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lX3NpemU7CiAJc3RydWN0IGVjcnlwdGZzX21vdW50X2NyeXB0X3N0YXQgKm1vdW50X2NyeXB0X3N0YXQgPSBOVUxMOwogCXN0cnVjdCBkZW50cnkgKmxvd2VyX2Rpcl9kZW50cnksICpsb3dlcl9kZW50cnk7Ci0Jc3RydWN0IHFzdHIgbG93ZXJfbmFtZTsKIAlpbnQgcmMgPSAwOwogCiAJaWYgKChlY3J5cHRmc19kZW50cnktPmRfbmFtZS5sZW4gPT0gMQpAQCAtNDQ0LDIwICszNzUsMTQgQEAKIAkJZ290byBvdXRfZF9kcm9wOwogCX0KIAlsb3dlcl9kaXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGVjcnlwdGZzX2RlbnRyeS0+ZF9wYXJlbnQpOwotCWxvd2VyX25hbWUubmFtZSA9IGVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWU7Ci0JbG93ZXJfbmFtZS5sZW4gPSBlY3J5cHRmc19kZW50cnktPmRfbmFtZS5sZW47Ci0JbG93ZXJfbmFtZS5oYXNoID0gZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUuaGFzaDsKLQlpZiAobG93ZXJfZGlyX2RlbnRyeS0+ZF9vcCAmJiBsb3dlcl9kaXJfZGVudHJ5LT5kX29wLT5kX2hhc2gpIHsKLQkJcmMgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX29wLT5kX2hhc2gobG93ZXJfZGlyX2RlbnRyeSwKLQkJCQlsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLCAmbG93ZXJfbmFtZSk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dF9kX2Ryb3A7Ci0JfQotCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2xvb2t1cF9vbmVfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LAotCQkJCQkJIGxvd2VyX2Rpcl9kZW50cnksICZsb3dlcl9uYW1lKTsKKwltdXRleF9sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlsb3dlcl9kZW50cnkgPSBsb29rdXBfb25lX2xlbihlY3J5cHRmc19kZW50cnktPmRfbmFtZS5uYW1lLAorCQkJCSAgICAgIGxvd2VyX2Rpcl9kZW50cnksCisJCQkJICAgICAgZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubGVuKTsKKwltdXRleF91bmxvY2soJmxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmIChJU19FUlIobG93ZXJfZGVudHJ5KSkgewogCQlyYyA9IFBUUl9FUlIobG93ZXJfZGVudHJ5KTsKLQkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICIlczogbG9va3VwX29uZV9sb3dlcigpIHJldHVybmVkICIKKwkJZWNyeXB0ZnNfcHJpbnRrKEtFUk5fREVCVUcsICIlczogbG9va3VwX29uZV9sZW4oKSByZXR1cm5lZCAiCiAJCQkJIlslZF0gb24gbG93ZXJfZGVudHJ5ID0gWyVzXVxuIiwgX19mdW5jX18sIHJjLAogCQkJCWVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lKTsKIAkJZ290byBvdXRfZF9kcm9wOwpAQCAtNDc5LDI4ICs0MDQsMjEgQEAKIAkJICAgICAgICJmaWxlbmFtZTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywgcmMpOwogCQlnb3RvIG91dF9kX2Ryb3A7CiAJfQotCWxvd2VyX25hbWUubmFtZSA9IGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lOwotCWxvd2VyX25hbWUubGVuID0gZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWVfc2l6ZTsKLQlsb3dlcl9uYW1lLmhhc2ggPSBmdWxsX25hbWVfaGFzaChsb3dlcl9uYW1lLm5hbWUsIGxvd2VyX25hbWUubGVuKTsKLQlpZiAobG93ZXJfZGlyX2RlbnRyeS0+ZF9vcCAmJiBsb3dlcl9kaXJfZGVudHJ5LT5kX29wLT5kX2hhc2gpIHsKLQkJcmMgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX29wLT5kX2hhc2gobG93ZXJfZGlyX2RlbnRyeSwKLQkJCQlsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLCAmbG93ZXJfbmFtZSk7Ci0JCWlmIChyYyA8IDApCi0JCQlnb3RvIG91dF9kX2Ryb3A7Ci0JfQotCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2xvb2t1cF9vbmVfbG93ZXIoZWNyeXB0ZnNfZGVudHJ5LAotCQkJCQkJIGxvd2VyX2Rpcl9kZW50cnksICZsb3dlcl9uYW1lKTsKKwltdXRleF9sb2NrKCZsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlsb3dlcl9kZW50cnkgPSBsb29rdXBfb25lX2xlbihlbmNyeXB0ZWRfYW5kX2VuY29kZWRfbmFtZSwKKwkJCQkgICAgICBsb3dlcl9kaXJfZGVudHJ5LAorCQkJCSAgICAgIGVuY3J5cHRlZF9hbmRfZW5jb2RlZF9uYW1lX3NpemUpOworCW11dGV4X3VubG9jaygmbG93ZXJfZGlyX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJaWYgKElTX0VSUihsb3dlcl9kZW50cnkpKSB7CiAJCXJjID0gUFRSX0VSUihsb3dlcl9kZW50cnkpOwotCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xvd2VyKCkgcmV0dXJuZWQgIgorCQllY3J5cHRmc19wcmludGsoS0VSTl9ERUJVRywgIiVzOiBsb29rdXBfb25lX2xlbigpIHJldHVybmVkICIKIAkJCQkiWyVkXSBvbiBsb3dlcl9kZW50cnkgPSBbJXNdXG4iLCBfX2Z1bmNfXywgcmMsCiAJCQkJZW5jcnlwdGVkX2FuZF9lbmNvZGVkX25hbWUpOwogCQlnb3RvIG91dF9kX2Ryb3A7CiAJfQogbG9va3VwX2FuZF9pbnRlcnBvc2U6CiAJcmMgPSBlY3J5cHRmc19sb29rdXBfYW5kX2ludGVycG9zZV9sb3dlcihlY3J5cHRmc19kZW50cnksIGxvd2VyX2RlbnRyeSwKLQkJCQkJCSBlY3J5cHRmc19kaXJfaW5vZGUsCi0JCQkJCQkgZWNyeXB0ZnNfbmQpOworCQkJCQkJIGVjcnlwdGZzX2Rpcl9pbm9kZSk7CiAJZ290byBvdXQ7CiBvdXRfZF9kcm9wOgogCWRfZHJvcChlY3J5cHRmc19kZW50cnkpOwpAQCAtMTA5Miw2ICsxMDEwLDggQEAKIAlyYyA9IHZmc19nZXRhdHRyKGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcl9tbnQoZGVudHJ5KSwKIAkJCSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXIoZGVudHJ5KSwgJmxvd2VyX3N0YXQpOwogCWlmICghcmMpIHsKKwkJZnNzdGFja19jb3B5X2F0dHJfYWxsKGRlbnRyeS0+ZF9pbm9kZSwKKwkJCQkgICAgICBlY3J5cHRmc19pbm9kZV90b19sb3dlcihkZW50cnktPmRfaW5vZGUpKTsKIAkJZ2VuZXJpY19maWxsYXR0cihkZW50cnktPmRfaW5vZGUsIHN0YXQpOwogCQlzdGF0LT5ibG9ja3MgPSBsb3dlcl9zdGF0LmJsb2NrczsKIAl9CmRpZmYgLS1naXQgYS9mcy9ldmVudGZkLmMgYi9mcy9ldmVudGZkLmMKaW5kZXggZTAxOTRiMy4uZDlhNTkxNyAxMDA2NDQKLS0tIGEvZnMvZXZlbnRmZC5jCisrKyBiL2ZzL2V2ZW50ZmQuYwpAQCAtOTksNyArOTksNyBAQAogICogQGN0eDogW2luXSBQb2ludGVyIHRvIGV2ZW50ZmQgY29udGV4dC4KICAqCiAgKiBUaGUgZXZlbnRmZCBjb250ZXh0IHJlZmVyZW5jZSBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGFjcXVpcmVkIGVpdGhlcgotICogd2l0aCBldmVudGZkX2N0eF9nZXQoKSBvciBldmVudGZkX2N0eF9mZGdldCgpKS4KKyAqIHdpdGggZXZlbnRmZF9jdHhfZ2V0KCkgb3IgZXZlbnRmZF9jdHhfZmRnZXQoKS4KICAqLwogdm9pZCBldmVudGZkX2N0eF9wdXQoc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHgpCiB7CkBAIC0xNDYsOSArMTQ2LDkgQEAKICAqIGV2ZW50ZmRfY3R4X3JlbW92ZV93YWl0X3F1ZXVlIC0gUmVhZCB0aGUgY3VycmVudCBjb3VudGVyIGFuZCByZW1vdmVzIHdhaXQgcXVldWUuCiAgKiBAY3R4OiBbaW5dIFBvaW50ZXIgdG8gZXZlbnRmZCBjb250ZXh0LgogICogQHdhaXQ6IFtpbl0gV2FpdCBxdWV1ZSB0byBiZSByZW1vdmVkLgotICogQGNudDogW291dF0gUG9pbnRlciB0byB0aGUgNjRiaXQgY29udGVyIHZhbHVlLgorICogQGNudDogW291dF0gUG9pbnRlciB0byB0aGUgNjQtYml0IGNvdW50ZXIgdmFsdWUuCiAgKgotICogUmV0dXJucyB6ZXJvIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CisgKiBSZXR1cm5zICUwIGlmIHN1Y2Nlc3NmdWwsIG9yIHRoZSBmb2xsb3dpbmcgZXJyb3IgY29kZXM6CiAgKgogICogLUVBR0FJTiAgICAgIDogVGhlIG9wZXJhdGlvbiB3b3VsZCBoYXZlIGJsb2NrZWQuCiAgKgpAQCAtMTc1LDExICsxNzUsMTEgQEAKICAqIGV2ZW50ZmRfY3R4X3JlYWQgLSBSZWFkcyB0aGUgZXZlbnRmZCBjb3VudGVyIG9yIHdhaXQgaWYgaXQgaXMgemVyby4KICAqIEBjdHg6IFtpbl0gUG9pbnRlciB0byBldmVudGZkIGNvbnRleHQuCiAgKiBAbm9fd2FpdDogW2luXSBEaWZmZXJlbnQgZnJvbSB6ZXJvIGlmIHRoZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBibG9jay4KLSAqIEBjbnQ6IFtvdXRdIFBvaW50ZXIgdG8gdGhlIDY0Yml0IGNvbnRlciB2YWx1ZS4KKyAqIEBjbnQ6IFtvdXRdIFBvaW50ZXIgdG8gdGhlIDY0LWJpdCBjb3VudGVyIHZhbHVlLgogICoKLSAqIFJldHVybnMgemVybyBpZiBzdWNjZXNzZnVsLCBvciB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgorICogUmV0dXJucyAlMCBpZiBzdWNjZXNzZnVsLCBvciB0aGUgZm9sbG93aW5nIGVycm9yIGNvZGVzOgogICoKLSAqIC1FQUdBSU4gICAgICA6IFRoZSBvcGVyYXRpb24gd291bGQgaGF2ZSBibG9ja2VkIGJ1dCBAbm9fd2FpdCB3YXMgbm9uemVyby4KKyAqIC1FQUdBSU4gICAgICA6IFRoZSBvcGVyYXRpb24gd291bGQgaGF2ZSBibG9ja2VkIGJ1dCBAbm9fd2FpdCB3YXMgbm9uLXplcm8uCiAgKiAtRVJFU1RBUlRTWVMgOiBBIHNpZ25hbCBpbnRlcnJ1cHRlZCB0aGUgd2FpdCBvcGVyYXRpb24uCiAgKgogICogSWYgQG5vX3dhaXQgaXMgemVybywgdGhlIGZ1bmN0aW9uIG1pZ2h0IHNsZWVwIHVudGlsIHRoZSBldmVudGZkIGludGVybmFsCmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IGNjOGE5YjcuLjRhMDlhZjkgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC02Myw2ICs2MywxMyBAQAogICogY2xlYW51cCBwYXRoIGFuZCBpdCBpcyBhbHNvIGFjcXVpcmVkIGJ5IGV2ZW50cG9sbF9yZWxlYXNlX2ZpbGUoKQogICogaWYgYSBmaWxlIGhhcyBiZWVuIHB1c2hlZCBpbnNpZGUgYW4gZXBvbGwgc2V0IGFuZCBpdCBpcyB0aGVuCiAgKiBjbG9zZSgpZCB3aXRob3V0IGEgcHJldmlvdXMgY2FsbCB0b2Vwb2xsX2N0bChFUE9MTF9DVExfREVMKS4KKyAqIEl0IGlzIGFsc28gYWNxdWlyZWQgd2hlbiBpbnNlcnRpbmcgYW4gZXBvbGwgZmQgb250byBhbm90aGVyIGVwb2xsCisgKiBmZC4gV2UgZG8gdGhpcyBzbyB0aGF0IHdlIHdhbGsgdGhlIGVwb2xsIHRyZWUgYW5kIGVuc3VyZSB0aGF0IHRoaXMKKyAqIGluc2VydGlvbiBkb2VzIG5vdCBjcmVhdGUgYSBjeWNsZSBvZiBlcG9sbCBmaWxlIGRlc2NyaXB0b3JzLCB3aGljaAorICogY291bGQgbGVhZCB0byBkZWFkbG9jay4gV2UgbmVlZCBhIGdsb2JhbCBtdXRleCB0byBwcmV2ZW50IHR3bworICogc2ltdWx0YW5lb3VzIGluc2VydHMgKEEgaW50byBCIGFuZCBCIGludG8gQSkgZnJvbSByYWNpbmcgYW5kCisgKiBjb25zdHJ1Y3RpbmcgYSBjeWNsZSB3aXRob3V0IGVpdGhlciBpbnNlcnQgb2JzZXJ2aW5nIHRoYXQgaXQgaXMKKyAqIGdvaW5nIHRvLgogICogSXQgaXMgcG9zc2libGUgdG8gZHJvcCB0aGUgImVwLT5tdHgiIGFuZCB0byB1c2UgdGhlIGdsb2JhbAogICogbXV0ZXggImVwbXV0ZXgiICh0b2dldGhlciB3aXRoICJlcC0+bG9jayIpIHRvIGhhdmUgaXQgd29ya2luZywKICAqIGJ1dCBoYXZpbmcgImVwLT5tdHgiIHdpbGwgbWFrZSB0aGUgaW50ZXJmYWNlIG1vcmUgc2NhbGFibGUuCkBAIC0yMjQsNiArMjMxLDkgQEAKICAqLwogc3RhdGljIERFRklORV9NVVRFWChlcG11dGV4KTsKIAorLyogVXNlZCB0byBjaGVjayBmb3IgZXBvbGwgZmlsZSBkZXNjcmlwdG9yIGluY2x1c2lvbiBsb29wcyAqLworc3RhdGljIHN0cnVjdCBuZXN0ZWRfY2FsbHMgcG9sbF9sb29wX25jYWxsczsKKwogLyogVXNlZCBmb3Igc2FmZSB3YWtlIHVwIGltcGxlbWVudGF0aW9uICovCiBzdGF0aWMgc3RydWN0IG5lc3RlZF9jYWxscyBwb2xsX3NhZmV3YWtlX25jYWxsczsKIApAQCAtMTExNCw2ICsxMTI0LDE3IEBACiAJcmV0dXJuIGVwX3NjYW5fcmVhZHlfbGlzdChlcCwgZXBfc2VuZF9ldmVudHNfcHJvYywgJmVzZWQpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aW1lc3BlYyBlcF9zZXRfbXN0aW1lb3V0KGxvbmcgbXMpCit7CisJc3RydWN0IHRpbWVzcGVjIG5vdywgdHMgPSB7CisJCS50dl9zZWMgPSBtcyAvIE1TRUNfUEVSX1NFQywKKwkJLnR2X25zZWMgPSBOU0VDX1BFUl9NU0VDICogKG1zICUgTVNFQ19QRVJfU0VDKSwKKwl9OworCisJa3RpbWVfZ2V0X3RzKCZub3cpOworCXJldHVybiB0aW1lc3BlY19hZGRfc2FmZShub3csIHRzKTsKK30KKwogc3RhdGljIGludCBlcF9wb2xsKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICpldmVudHMsCiAJCSAgIGludCBtYXhldmVudHMsIGxvbmcgdGltZW91dCkKIHsKQEAgLTExMjEsMTIgKzExNDIsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWxvbmcgc2xhY2s7CiAJd2FpdF9xdWV1ZV90IHdhaXQ7Ci0Jc3RydWN0IHRpbWVzcGVjIGVuZF90aW1lOwogCWt0aW1lX3QgZXhwaXJlcywgKnRvID0gTlVMTDsKIAogCWlmICh0aW1lb3V0ID4gMCkgewotCQlrdGltZV9nZXRfdHMoJmVuZF90aW1lKTsKLQkJdGltZXNwZWNfYWRkX25zKCZlbmRfdGltZSwgKHU2NCl0aW1lb3V0ICogTlNFQ19QRVJfTVNFQyk7CisJCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZSA9IGVwX3NldF9tc3RpbWVvdXQodGltZW91dCk7CisKIAkJc2xhY2sgPSBzZWxlY3RfZXN0aW1hdGVfYWNjdXJhY3koJmVuZF90aW1lKTsKIAkJdG8gPSAmZXhwaXJlczsKIAkJKnRvID0gdGltZXNwZWNfdG9fa3RpbWUoZW5kX3RpbWUpOwpAQCAtMTE4OCw2ICsxMjA4LDYyIEBACiAJcmV0dXJuIHJlczsKIH0KIAorLyoqCisgKiBlcF9sb29wX2NoZWNrX3Byb2MgLSBDYWxsYmFjayBmdW5jdGlvbiB0byBiZSBwYXNzZWQgdG8gdGhlIEBlcF9jYWxsX25lc3RlZCgpCisgKiAgICAgICAgICAgICAgICAgICAgICBBUEksIHRvIHZlcmlmeSB0aGF0IGFkZGluZyBhbiBlcG9sbCBmaWxlIGluc2lkZSBhbm90aGVyCisgKiAgICAgICAgICAgICAgICAgICAgICBlcG9sbCBzdHJ1Y3R1cmUsIGRvZXMgbm90IHZpb2xhdGUgdGhlIGNvbnN0cmFpbnRzLCBpbgorICogICAgICAgICAgICAgICAgICAgICAgdGVybXMgb2YgY2xvc2VkIGxvb3BzLCBvciB0b28gZGVlcCBjaGFpbnMgKHdoaWNoIGNhbgorICogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGluIGV4Y2Vzc2l2ZSBzdGFjayB1c2FnZSkuCisgKgorICogQHByaXY6IFBvaW50ZXIgdG8gdGhlIGVwb2xsIGZpbGUgdG8gYmUgY3VycmVudGx5IGNoZWNrZWQuCisgKiBAY29va2llOiBPcmlnaW5hbCBjb29raWUgZm9yIHRoaXMgY2FsbC4gVGhpcyBpcyB0aGUgdG9wLW9mLXRoZS1jaGFpbiBlcG9sbAorICogICAgICAgICAgZGF0YSBzdHJ1Y3R1cmUgcG9pbnRlci4KKyAqIEBjYWxsX25lc3RzOiBDdXJyZW50IGRlcHQgb2YgdGhlIEBlcF9jYWxsX25lc3RlZCgpIGNhbGwgc3RhY2suCisgKgorICogUmV0dXJuczogUmV0dXJucyB6ZXJvIGlmIGFkZGluZyB0aGUgZXBvbGwgQGZpbGUgaW5zaWRlIGN1cnJlbnQgZXBvbGwKKyAqICAgICAgICAgIHN0cnVjdHVyZSBAZXAgZG9lcyBub3QgdmlvbGF0ZSB0aGUgY29uc3RyYWludHMsIG9yIC0xIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBlcF9sb29wX2NoZWNrX3Byb2Modm9pZCAqcHJpdiwgdm9pZCAqY29va2llLCBpbnQgY2FsbF9uZXN0cykKK3sKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBmaWxlICpmaWxlID0gcHJpdjsKKwlzdHJ1Y3QgZXZlbnRwb2xsICplcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJwOworCXN0cnVjdCBlcGl0ZW0gKmVwaTsKKworCW11dGV4X2xvY2soJmVwLT5tdHgpOworCWZvciAocmJwID0gcmJfZmlyc3QoJmVwLT5yYnIpOyByYnA7IHJicCA9IHJiX25leHQocmJwKSkgeworCQllcGkgPSByYl9lbnRyeShyYnAsIHN0cnVjdCBlcGl0ZW0sIHJibik7CisJCWlmICh1bmxpa2VseShpc19maWxlX2Vwb2xsKGVwaS0+ZmZkLmZpbGUpKSkgeworCQkJZXJyb3IgPSBlcF9jYWxsX25lc3RlZCgmcG9sbF9sb29wX25jYWxscywgRVBfTUFYX05FU1RTLAorCQkJCQkgICAgICAgZXBfbG9vcF9jaGVja19wcm9jLCBlcGktPmZmZC5maWxlLAorCQkJCQkgICAgICAgZXBpLT5mZmQuZmlsZS0+cHJpdmF0ZV9kYXRhLCBjdXJyZW50KTsKKwkJCWlmIChlcnJvciAhPSAwKQorCQkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmZXAtPm10eCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZXBfbG9vcF9jaGVjayAtIFBlcmZvcm1zIGEgY2hlY2sgdG8gdmVyaWZ5IHRoYXQgYWRkaW5nIGFuIGVwb2xsIGZpbGUgKEBmaWxlKQorICogICAgICAgICAgICAgICAgIGFub3RoZXIgZXBvbGwgZmlsZSAocmVwcmVzZW50ZWQgYnkgQGVwKSBkb2VzIG5vdCBjcmVhdGUKKyAqICAgICAgICAgICAgICAgICBjbG9zZWQgbG9vcHMgb3IgdG9vIGRlZXAgY2hhaW5zLgorICoKKyAqIEBlcDogUG9pbnRlciB0byB0aGUgZXBvbGwgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZS4KKyAqIEBmaWxlOiBQb2ludGVyIHRvIHRoZSBlcG9sbCBmaWxlIHRvIGJlIGNoZWNrZWQuCisgKgorICogUmV0dXJuczogUmV0dXJucyB6ZXJvIGlmIGFkZGluZyB0aGUgZXBvbGwgQGZpbGUgaW5zaWRlIGN1cnJlbnQgZXBvbGwKKyAqICAgICAgICAgIHN0cnVjdHVyZSBAZXAgZG9lcyBub3QgdmlvbGF0ZSB0aGUgY29uc3RyYWludHMsIG9yIC0xIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCBlcF9sb29wX2NoZWNrKHN0cnVjdCBldmVudHBvbGwgKmVwLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gZXBfY2FsbF9uZXN0ZWQoJnBvbGxfbG9vcF9uY2FsbHMsIEVQX01BWF9ORVNUUywKKwkJCSAgICAgIGVwX2xvb3BfY2hlY2tfcHJvYywgZmlsZSwgZXAsIGN1cnJlbnQpOworfQorCiAvKgogICogT3BlbiBhbiBldmVudHBvbGwgZmlsZSBkZXNjcmlwdG9yLgogICovCkBAIC0xMjM2LDYgKzEzMTIsNyBAQAogCQlzdHJ1Y3QgZXBvbGxfZXZlbnQgX191c2VyICosIGV2ZW50KQogewogCWludCBlcnJvcjsKKwlpbnQgZGlkX2xvY2tfZXBtdXRleCA9IDA7CiAJc3RydWN0IGZpbGUgKmZpbGUsICp0ZmlsZTsKIAlzdHJ1Y3QgZXZlbnRwb2xsICplcDsKIAlzdHJ1Y3QgZXBpdGVtICplcGk7CkBAIC0xMjc3LDYgKzEzNTQsMjUgQEAKIAkgKi8KIAllcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAorCS8qCisJICogV2hlbiB3ZSBpbnNlcnQgYW4gZXBvbGwgZmlsZSBkZXNjcmlwdG9yLCBpbnNpZGUgYW5vdGhlciBlcG9sbCBmaWxlCisJICogZGVzY3JpcHRvciwgdGhlcmUgaXMgdGhlIGNoYW5nZSBvZiBjcmVhdGluZyBjbG9zZWQgbG9vcHMsIHdoaWNoIGFyZQorCSAqIGJldHRlciBiZSBoYW5kbGVkIGhlcmUsIHRoYW4gaW4gbW9yZSBjcml0aWNhbCBwYXRocy4KKwkgKgorCSAqIFdlIGhvbGQgZXBtdXRleCBhY3Jvc3MgdGhlIGxvb3AgY2hlY2sgYW5kIHRoZSBpbnNlcnQgaW4gdGhpcyBjYXNlLCBpbgorCSAqIG9yZGVyIHRvIHByZXZlbnQgdHdvIHNlcGFyYXRlIGluc2VydHMgZnJvbSByYWNpbmcgYW5kIGVhY2ggZG9pbmcgdGhlCisJICogaW5zZXJ0ICJhdCB0aGUgc2FtZSB0aW1lIiBzdWNoIHRoYXQgZXBfbG9vcF9jaGVjayBwYXNzZXMgb24gYm90aAorCSAqIGJlZm9yZSBlaXRoZXIgb25lIGRvZXMgdGhlIGluc2VydCwgdGhlcmVieSBjcmVhdGluZyBhIGN5Y2xlLgorCSAqLworCWlmICh1bmxpa2VseShpc19maWxlX2Vwb2xsKHRmaWxlKSAmJiBvcCA9PSBFUE9MTF9DVExfQUREKSkgeworCQltdXRleF9sb2NrKCZlcG11dGV4KTsKKwkJZGlkX2xvY2tfZXBtdXRleCA9IDE7CisJCWVycm9yID0gLUVMT09QOworCQlpZiAoZXBfbG9vcF9jaGVjayhlcCwgdGZpbGUpICE9IDApCisJCQlnb3RvIGVycm9yX3RndF9mcHV0OworCX0KKworCiAJbXV0ZXhfbG9jaygmZXAtPm10eCk7CiAKIAkvKgpAQCAtMTMxMiw2ICsxNDA4LDkgQEAKIAltdXRleF91bmxvY2soJmVwLT5tdHgpOwogCiBlcnJvcl90Z3RfZnB1dDoKKwlpZiAodW5saWtlbHkoZGlkX2xvY2tfZXBtdXRleCkpCisJCW11dGV4X3VubG9jaygmZXBtdXRleCk7CisKIAlmcHV0KHRmaWxlKTsKIGVycm9yX2ZwdXQ6CiAJZnB1dChmaWxlKTsKQEAgLTE0MzEsNiArMTUzMCwxMiBAQAogCQlFUF9JVEVNX0NPU1Q7CiAJQlVHX09OKG1heF91c2VyX3dhdGNoZXMgPCAwKTsKIAorCS8qCisJICogSW5pdGlhbGl6ZSB0aGUgc3RydWN0dXJlIHVzZWQgdG8gcGVyZm9ybSBlcG9sbCBmaWxlIGRlc2NyaXB0b3IKKwkgKiBpbmNsdXNpb24gbG9vcHMgY2hlY2tzLgorCSAqLworCWVwX25lc3RlZF9jYWxsc19pbml0KCZwb2xsX2xvb3BfbmNhbGxzKTsKKwogCS8qIEluaXRpYWxpemUgdGhlIHN0cnVjdHVyZSB1c2VkIHRvIHBlcmZvcm0gc2FmZSBwb2xsIHdhaXQgaGVhZCB3YWtlIHVwcyAqLwogCWVwX25lc3RlZF9jYWxsc19pbml0KCZwb2xsX3NhZmV3YWtlX25jYWxscyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjNjJlZmNiLi41MmE0NDdkIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlmaWxlID0gZG9fZmlscF9vcGVuKEFUX0ZEQ1dELCB0bXAsCi0JCQkJT19MQVJHRUZJTEUgfCBPX1JET05MWSB8IEZNT0RFX0VYRUMsIDAsCisJCQkJT19MQVJHRUZJTEUgfCBPX1JET05MWSB8IF9fRk1PREVfRVhFQywgMCwKIAkJCQlNQVlfUkVBRCB8IE1BWV9FWEVDIHwgTUFZX09QRU4pOwogCXB1dG5hbWUodG1wKTsKIAllcnJvciA9IFBUUl9FUlIoZmlsZSk7CkBAIC03MjMsNyArNzIzLDcgQEAKIAlpbnQgZXJyOwogCiAJZmlsZSA9IGRvX2ZpbHBfb3BlbihBVF9GRENXRCwgbmFtZSwKLQkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgRk1PREVfRVhFQywgMCwKKwkJCQlPX0xBUkdFRklMRSB8IE9fUkRPTkxZIHwgX19GTU9ERV9FWEVDLCAwLAogCQkJCU1BWV9FWEVDIHwgTUFZX09QRU4pOwogCWlmIChJU19FUlIoZmlsZSkpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvaW5vZGUuYyBiL2ZzL2V4b2ZzL2lub2RlLmMKaW5kZXggNDI2ODU0Mi4uYTc1NTUyMyAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvaW5vZGUuYworKysgYi9mcy9leG9mcy9pbm9kZS5jCkBAIC0xMDMwLDcgKzEwMzAsNiBAQAogCQltZW1jcHkob2ktPmlfZGF0YSwgZmNiLmlfZGF0YSwgc2l6ZW9mKGZjYi5pX2RhdGEpKTsKIAl9CiAKLQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gc2ItPnNfYmRpOwogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmV4b2ZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIAkJaW5vZGUtPmlfZm9wID0gJmV4b2ZzX2ZpbGVfb3BlcmF0aW9uczsKQEAgLTExMzEsNyArMTEzMCw2IEBACiAKIAlzYmkgPSBzYi0+c19mc19pbmZvOwogCi0JaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9IHNiLT5zX2JkaTsKIAlzYi0+c19kaXJ0ID0gMTsKIAlpbm9kZV9pbml0X293bmVyKGlub2RlLCBkaXIsIG1vZGUpOwogCWlub2RlLT5pX2lubyA9IHNiaS0+c19uZXh0aWQrKzsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL25hbWVpLmMgYi9mcy9leG9mcy9uYW1laS5jCmluZGV4IDI2NGU5NWQuLjRkNzBkYjEgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL25hbWVpLmMKKysrIGIvZnMvZXhvZnMvbmFtZWkuYwpAQCAtMjcyLDcgKzI3Miw2IEBACiAJCW5ld19kZSA9IGV4b2ZzX2ZpbmRfZW50cnkobmV3X2RpciwgbmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IGV4b2ZzX3NldF9saW5rKG5ld19kaXIsIG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJaWYgKGRpcl9kZSkKQEAgLTI4NiwxMiArMjg1LDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IEVYT0ZTX0xJTktfTUFYKQogCQkJCWdvdG8gb3V0X2RpcjsKIAkJfQotCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQllcnIgPSBleG9mc19hZGRfbGluayhuZXdfZGVudHJ5LCBvbGRfaW5vZGUpOwotCQlpZiAoZXJyKSB7Ci0JCQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZGlyOwotCQl9CiAJCWlmIChkaXJfZGUpCiAJCQlpbm9kZV9pbmNfbGlua19jb3VudChuZXdfZGlyKTsKIAl9CkBAIC0yOTksNyArMjk1LDcgQEAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKIAlleG9mc19kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAKIAlpZiAoZGlyX2RlKSB7CiAJCWVyciA9IGV4b2ZzX3NldF9saW5rKG9sZF9pbm9kZSwgZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmMKaW5kZXggMmUxZDgzNC4uYWRiOTE4NSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCisrKyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtMzQ0LDcgKzM0NCw2IEBACiAJCW5ld19kZSA9IGV4dDJfZmluZF9lbnRyeSAobmV3X2RpciwgJm5ld19kZW50cnktPmRfbmFtZSwgJm5ld19wYWdlKTsKIAkJaWYgKCFuZXdfZGUpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWV4dDJfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlLCAxKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKQEAgLTM1NiwxMiArMzU1LDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IEVYVDJfTElOS19NQVgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IGV4dDJfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RpcjsKLQkJfQogCQlpZiAoZGlyX2RlKQogCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQpAQCAtMzY5LDEyICszNjUsMTEgQEAKIAkvKgogCSAqIExpa2UgbW9zdCBvdGhlciBVbml4IHN5c3RlbXMsIHNldCB0aGUgY3RpbWUgZm9yIGlub2RlcyBvbiBhCiAgCSAqIHJlbmFtZS4KLQkgKiBpbm9kZV9kZWNfbGlua19jb3VudCgpIHdpbGwgbWFyayB0aGUgaW5vZGUgZGlydHkuCiAJICovCiAJb2xkX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAKIAlleHQyX2RlbGV0ZV9lbnRyeSAob2xkX2RlLCBvbGRfcGFnZSk7Ci0JaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAogCWlmIChkaXJfZGUpIHsKIAkJaWYgKG9sZF9kaXIgIT0gbmV3X2RpcikKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggMGM4ZDk3Yi4uM2FhMGI3MiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKKysrIGIvZnMvZXh0NC9leHQ0LmgKQEAgLTg0OCw2ICs4NDgsNyBAQAogCWF0b21pY190IGlfaW9lbmRfY291bnQ7CS8qIE51bWJlciBvZiBvdXRzdGFuZGluZyBpb19lbmQgc3RydWN0cyAqLwogCS8qIGN1cnJlbnQgaW9fZW5kIHN0cnVjdHVyZSBmb3IgYXN5bmMgRElPIHdyaXRlKi8KIAlleHQ0X2lvX2VuZF90ICpjdXJfYWlvX2RpbzsKKwlhdG9taWNfdCBpX2Fpb2Rpb191bndyaXR0ZW47IC8qIE5yLiBvZiBpbmZsaWdodCBjb252ZXJzaW9ucyBwZW5kaW5nICovCiAKIAlzcGlubG9ja190IGlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jazsKIApAQCAtMjExOSw2ICsyMTIwLDE1IEBACiAKICNkZWZpbmUgaW5fcmFuZ2UoYiwgZmlyc3QsIGxlbikJKChiKSA+PSAoZmlyc3QpICYmIChiKSA8PSAoZmlyc3QpICsgKGxlbikgLSAxKQogCisvKiBGb3IgaW9lbmQgJiBhaW8gdW53cml0dGVuIGNvbnZlcnNpb24gd2FpdCBxdWV1ZXMgKi8KKyNkZWZpbmUgRVhUNF9XUV9IQVNIX1NaCQkzNworI2RlZmluZSBleHQ0X2lvZW5kX3dxKHYpICAgKCZleHQ0X19pb2VuZF93cVsoKHVuc2lnbmVkIGxvbmcpKHYpKSAlXAorCQkJCQkgICAgRVhUNF9XUV9IQVNIX1NaXSkKKyNkZWZpbmUgZXh0NF9haW9fbXV0ZXgodikgICgmZXh0NF9fYWlvX211dGV4WygodW5zaWduZWQgbG9uZykodikpICVcCisJCQkJCSAgICAgRVhUNF9XUV9IQVNIX1NaXSkKK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBleHQ0X19pb2VuZF93cVtFWFQ0X1dRX0hBU0hfU1pdOworZXh0ZXJuIHN0cnVjdCBtdXRleCBleHQ0X19haW9fbXV0ZXhbRVhUNF9XUV9IQVNIX1NaXTsKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9FWFQ0X0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmMKaW5kZXggNjNhNzU4MS4uY2NjZThhNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHRlbnRzLmMKKysrIGIvZnMvZXh0NC9leHRlbnRzLmMKQEAgLTMxNzQsOSArMzE3NCwxMCBAQAogCQkgKiB0aGF0IHRoaXMgSU8gbmVlZHMgdG8gY29udmVydGlvbiB0byB3cml0dGVuIHdoZW4gSU8gaXMKIAkJICogY29tcGxldGVkCiAJCSAqLwotCQlpZiAoaW8pCisJCWlmIChpbyAmJiAhKGlvLT5mbGFnICYgRVhUNF9JT19FTkRfVU5XUklUVEVOKSkgewogCQkJaW8tPmZsYWcgPSBFWFQ0X0lPX0VORF9VTldSSVRURU47Ci0JCWVsc2UKKwkJCWF0b21pY19pbmMoJkVYVDRfSShpbm9kZSktPmlfYWlvZGlvX3Vud3JpdHRlbik7CisJCX0gZWxzZQogCQkJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTik7CiAJCWlmIChleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhpbm9kZSkpCiAJCQltYXAtPm1fZmxhZ3MgfD0gRVhUNF9NQVBfVU5JTklUOwpAQCAtMzQ2Myw5ICszNDY0LDEwIEBACiAJCSAqIHRoYXQgd2UgbmVlZCB0byBwZXJmb3JtIGNvbnZlcnRpb24gd2hlbiBJTyBpcyBkb25lLgogCQkgKi8KIAkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19QUkVfSU8pKSB7Ci0JCQlpZiAoaW8pCisJCQlpZiAoaW8gJiYgIShpby0+ZmxhZyAmIEVYVDRfSU9fRU5EX1VOV1JJVFRFTikpIHsKIAkJCQlpby0+ZmxhZyA9IEVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKLQkJCWVsc2UKKwkJCQlhdG9taWNfaW5jKCZFWFQ0X0koaW5vZGUpLT5pX2Fpb2Rpb191bndyaXR0ZW4pOworCQkJfSBlbHNlCiAJCQkJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsCiAJCQkJCQkgICAgIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTik7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggMmU4MzIyYy4uN2I4MGQ1NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTU1LDExICs1NSw0NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBleHQ0X2Fpb2Rpb193YWl0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gZXh0NF9pb2VuZF93cShpbm9kZSk7CisKKwl3YWl0X2V2ZW50KCp3cSwgKGF0b21pY19yZWFkKCZFWFQ0X0koaW5vZGUpLT5pX2Fpb2Rpb191bndyaXR0ZW4pID09IDApKTsKK30KKworLyoKKyAqIFRoaXMgdGVzdHMgd2hldGhlciB0aGUgSU8gaW4gcXVlc3Rpb24gaXMgYmxvY2stYWxpZ25lZCBvciBub3QuCisgKiBFeHQ0IHV0aWxpemVzIHVud3JpdHRlbiBleHRlbnRzIHdoZW4gaG9sZS1maWxsaW5nIGR1cmluZyBkaXJlY3QgSU8sIGFuZCB0aGV5CisgKiBhcmUgY29udmVydGVkIHRvIHdyaXR0ZW4gb25seSBhZnRlciB0aGUgSU8gaXMgY29tcGxldGUuICBVbnRpbCB0aGV5IGFyZQorICogbWFwcGVkLCB0aGVzZSBibG9ja3MgYXBwZWFyIGFzIGhvbGVzLCBzbyBkaW9femVyb19ibG9jaygpIHdpbGwgYXNzdW1lIHRoYXQKKyAqIGl0IG5lZWRzIHRvIHplcm8gb3V0IHBvcnRpb25zIG9mIHRoZSBzdGFydCBhbmQvb3IgZW5kIGJsb2NrLiAgSWYgMiBBSU8KKyAqIHRocmVhZHMgYXJlIGF0IHdvcmsgb24gdGhlIHNhbWUgdW53cml0dGVuIGJsb2NrLCB0aGV5IG11c3QgYmUgc3luY2hyb25pemVkCisgKiBvciBvbmUgdGhyZWFkIHdpbGwgemVybyB0aGUgb3RoZXIncyBkYXRhLCBjYXVzaW5nIGNvcnJ1cHRpb24uCisgKi8KK3N0YXRpYyBpbnQKK2V4dDRfdW5hbGlnbmVkX2FpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlpbnQgYmxvY2ttYXNrID0gc2ItPnNfYmxvY2tzaXplIC0gMTsKKwlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CisJbG9mZl90IGZpbmFsX3NpemUgPSBwb3MgKyBjb3VudDsKKworCWlmIChwb3MgPj0gaW5vZGUtPmlfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoKHBvcyAmIGJsb2NrbWFzaykgfHwgKGZpbmFsX3NpemUgJiBibG9ja21hc2spKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3NpemVfdAogZXh0NF9maWxlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCiAJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgdW5hbGlnbmVkX2FpbyA9IDA7CisJaW50IHJldDsKIAogCS8qCiAJICogSWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhIGJpdG1hcC1mb3JtYXQgZmlsZSwgdGhlIHNpemUgbGltaXQKQEAgLTc4LDkgKzExNCwzMSBAQAogCQkJbnJfc2VncyA9IGlvdl9zaG9ydGVuKChzdHJ1Y3QgaW92ZWMgKilpb3YsIG5yX3NlZ3MsCiAJCQkJCSAgICAgIHNiaS0+c19iaXRtYXBfbWF4Ynl0ZXMgLSBwb3MpOwogCQl9CisJfSBlbHNlIGlmICh1bmxpa2VseSgoaW9jYi0+a2lfZmlscC0+Zl9mbGFncyAmIE9fRElSRUNUKSAmJgorCQkgICAhaXNfc3luY19raW9jYihpb2NiKSkpIHsKKwkJdW5hbGlnbmVkX2FpbyA9IGV4dDRfdW5hbGlnbmVkX2Fpbyhpbm9kZSwgaW92LCBucl9zZWdzLCBwb3MpOwogCX0KIAotCXJldHVybiBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKwkvKiBVbmFsaWduZWQgZGlyZWN0IEFJTyBtdXN0IGJlIHNlcmlhbGl6ZWQ7IHNlZSBjb21tZW50IGFib3ZlICovCisJaWYgKHVuYWxpZ25lZF9haW8pIHsKKwkJc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX3dhcm5fdGltZTsKKworCQkvKiBXYXJuIGFib3V0IHRoaXMgb25jZSBwZXIgZGF5ICovCisJCWlmIChwcmludGtfdGltZWRfcmF0ZWxpbWl0KCZ1bmFsaWduZWRfd2Fybl90aW1lLCA2MCo2MCoyNCpIWikpCisJCQlleHQ0X21zZyhpbm9kZS0+aV9zYiwgS0VSTl9XQVJOSU5HLAorCQkJCSAiVW5hbGlnbmVkIEFJTy9ESU8gb24gaW5vZGUgJWxkIGJ5ICVzOyAiCisJCQkJICJwZXJmb3JtYW5jZSB3aWxsIGJlIHBvb3IuIiwKKwkJCQkgaW5vZGUtPmlfaW5vLCBjdXJyZW50LT5jb21tKTsKKwkJbXV0ZXhfbG9jayhleHQ0X2Fpb19tdXRleChpbm9kZSkpOworCQlleHQ0X2Fpb2Rpb193YWl0KGlub2RlKTsKKwl9CisKKwlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKworCWlmICh1bmFsaWduZWRfYWlvKQorCQltdXRleF91bmxvY2soZXh0NF9haW9fbXV0ZXgoaW5vZGUpKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZXh0NF9maWxlX3ZtX29wcyA9IHsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWJhbGxvYy5jIGIvZnMvZXh0NC9tYmFsbG9jLmMKaW5kZXggODUxZjQ5Yi4uZDFmZTA5YSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9tYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9tYmFsbG9jLmMKQEAgLTM0MiwxMCArMzQyLDE1IEBACiAvKiBXZSBjcmVhdGUgc2xhYiBjYWNoZXMgZm9yIGdyb3VwaW5mbyBkYXRhIHN0cnVjdHVyZXMgYmFzZWQgb24gdGhlCiAgKiBzdXBlcmJsb2NrIGJsb2NrIHNpemUuICBUaGVyZSB3aWxsIGJlIG9uZSBwZXIgbW91bnRlZCBmaWxlc3lzdGVtIGZvcgogICogZWFjaCB1bmlxdWUgc19ibG9ja3NpemVfYml0cyAqLwotI2RlZmluZSBOUl9HUlBJTkZPX0NBQ0hFUwlcCi0JKEVYVDRfTUFYX0JMT0NLX0xPR19TSVpFIC0gRVhUNF9NSU5fQkxPQ0tfTE9HX1NJWkUgKyAxKQorI2RlZmluZSBOUl9HUlBJTkZPX0NBQ0hFUyA4CiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tOUl9HUlBJTkZPX0NBQ0hFU107CiAKK3N0YXRpYyBjb25zdCBjaGFyICpleHQ0X2dyb3VwaW5mb19zbGFiX25hbWVzW05SX0dSUElORk9fQ0FDSEVTXSA9IHsKKwkiZXh0NF9ncm91cGluZm9fMWsiLCAiZXh0NF9ncm91cGluZm9fMmsiLCAiZXh0NF9ncm91cGluZm9fNGsiLAorCSJleHQ0X2dyb3VwaW5mb184ayIsICJleHQ0X2dyb3VwaW5mb18xNmsiLCAiZXh0NF9ncm91cGluZm9fMzJrIiwKKwkiZXh0NF9ncm91cGluZm9fNjRrIiwgImV4dDRfZ3JvdXBpbmZvXzEyOGsiCit9OworCiBzdGF0aWMgdm9pZCBleHQ0X21iX2dlbmVyYXRlX2Zyb21fcGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqYml0bWFwLAogCQkJCQlleHQ0X2dyb3VwX3QgZ3JvdXApOwogc3RhdGljIHZvaWQgZXh0NF9tYl9nZW5lcmF0ZV9mcm9tX2ZyZWVsaXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmJpdG1hcCwKQEAgLTI0MTQsNiArMjQxOSw1NSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCitzdGF0aWMgdm9pZCBleHQ0X2dyb3VwaW5mb19kZXN0cm95X3NsYWJzKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfR1JQSU5GT19DQUNIRVM7IGkrKykgeworCQlpZiAoZXh0NF9ncm91cGluZm9fY2FjaGVzW2ldKQorCQkJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tpXSk7CisJCWV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tpXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGV4dDRfZ3JvdXBpbmZvX2NyZWF0ZV9zbGFiKHNpemVfdCBzaXplKQoreworCXN0YXRpYyBERUZJTkVfTVVURVgoZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKKwlpbnQgc2xhYl9zaXplOworCWludCBibG9ja3NpemVfYml0cyA9IG9yZGVyX2Jhc2VfMihzaXplKTsKKwlpbnQgY2FjaGVfaW5kZXggPSBibG9ja3NpemVfYml0cyAtIEVYVDRfTUlOX0JMT0NLX0xPR19TSVpFOworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisKKwlpZiAoY2FjaGVfaW5kZXggPj0gTlJfR1JQSU5GT19DQUNIRVMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHVubGlrZWx5KGNhY2hlX2luZGV4IDwgMCkpCisJCWNhY2hlX2luZGV4ID0gMDsKKworCW11dGV4X2xvY2soJmV4dDRfZ3JwaW5mb19zbGFiX2NyZWF0ZV9tdXRleCk7CisJaWYgKGV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF0pIHsKKwkJbXV0ZXhfdW5sb2NrKCZleHQ0X2dycGluZm9fc2xhYl9jcmVhdGVfbXV0ZXgpOworCQlyZXR1cm4gMDsJLyogQWxyZWFkeSBjcmVhdGVkICovCisJfQorCisJc2xhYl9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfZ3JvdXBfaW5mbywKKwkJCQliYl9jb3VudGVyc1tibG9ja3NpemVfYml0cyArIDJdKTsKKworCWNhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKGV4dDRfZ3JvdXBpbmZvX3NsYWJfbmFtZXNbY2FjaGVfaW5kZXhdLAorCQkJCQlzbGFiX3NpemUsIDAsIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULAorCQkJCQlOVUxMKTsKKworCW11dGV4X3VubG9jaygmZXh0NF9ncnBpbmZvX3NsYWJfY3JlYXRlX211dGV4KTsKKwlpZiAoIWNhY2hlcCkgeworCQlwcmludGsoS0VSTl9FTUVSRyAiRVhUNDogbm8gbWVtb3J5IGZvciBncm91cGluZm8gc2xhYiBjYWNoZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWV4dDRfZ3JvdXBpbmZvX2NhY2hlc1tjYWNoZV9pbmRleF0gPSBjYWNoZXA7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGV4dDRfbWJfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgbmVlZHNfcmVjb3ZlcnkpCiB7CiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CkBAIC0yNDIxLDkgKzI0NzUsNiBAQAogCXVuc2lnbmVkIG9mZnNldDsKIAl1bnNpZ25lZCBtYXg7CiAJaW50IHJldDsKLQlpbnQgY2FjaGVfaW5kZXg7Ci0Jc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcDsKLQljaGFyICpuYW1lcCA9IE5VTEw7CiAKIAlpID0gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMikgKiBzaXplb2YoKnNiaS0+c19tYl9vZmZzZXRzKTsKIApAQCAtMjQ0MCwzMCArMjQ5MSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWNhY2hlX2luZGV4ID0gc2ItPnNfYmxvY2tzaXplX2JpdHMgLSBFWFQ0X01JTl9CTE9DS19MT0dfU0laRTsKLQljYWNoZXAgPSBleHQ0X2dyb3VwaW5mb19jYWNoZXNbY2FjaGVfaW5kZXhdOwotCWlmICghY2FjaGVwKSB7Ci0JCWNoYXIgbmFtZVszMl07Ci0JCWludCBsZW4gPSBvZmZzZXRvZihzdHJ1Y3QgZXh0NF9ncm91cF9pbmZvLAotCQkJCQliYl9jb3VudGVyc1tzYi0+c19ibG9ja3NpemVfYml0cyArIDJdKTsKLQotCQlzcHJpbnRmKG5hbWUsICJleHQ0X2dyb3VwaW5mb18lZCIsIHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJbmFtZXAgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwotCQlpZiAoIW5hbWVwKSB7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBOZWVkIHRvIGZyZWUgdGhlIGttZW1fY2FjaGVfbmFtZSgpIHdoZW4gd2UKLQkJICogZGVzdHJveSB0aGUgc2xhYiAqLwotCQljYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShuYW1lcCwgbGVuLCAwLAotCQkJCQkgICAgIFNMQUJfUkVDTEFJTV9BQ0NPVU5ULCBOVUxMKTsKLQkJaWYgKCFjYWNoZXApIHsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlleHQ0X2dyb3VwaW5mb19jYWNoZXNbY2FjaGVfaW5kZXhdID0gY2FjaGVwOwotCX0KKwlyZXQgPSBleHQ0X2dyb3VwaW5mb19jcmVhdGVfc2xhYihzYi0+c19ibG9ja3NpemUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKIAogCS8qIG9yZGVyIDAgaXMgcmVndWxhciBiaXRtYXAgKi8KIAlzYmktPnNfbWJfbWF4c1swXSA9IHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzOwpAQCAtMjUyMCw3ICsyNTUwLDYgQEAKIAlpZiAocmV0KSB7CiAJCWtmcmVlKHNiaS0+c19tYl9vZmZzZXRzKTsKIAkJa2ZyZWUoc2JpLT5zX21iX21heHMpOwotCQlrZnJlZShuYW1lcCk7CiAJfQogCXJldHVybiByZXQ7CiB9CkBAIC0yNzM0LDcgKzI3NjMsNiBAQAogCiB2b2lkIGV4dDRfZXhpdF9tYmFsbG9jKHZvaWQpCiB7Ci0JaW50IGk7CiAJLyoKIAkgKiBXYWl0IGZvciBjb21wbGV0aW9uIG9mIGNhbGxfcmN1KCkncyBvbiBleHQ0X3BzcGFjZV9jYWNoZXAKIAkgKiBiZWZvcmUgZGVzdHJveWluZyB0aGUgc2xhYiBjYWNoZS4KQEAgLTI3NDMsMTUgKzI3NzEsNyBAQAogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X3BzcGFjZV9jYWNoZXApOwogCWttZW1fY2FjaGVfZGVzdHJveShleHQ0X2FjX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGV4dDRfZnJlZV9leHRfY2FjaGVwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOUl9HUlBJTkZPX0NBQ0hFUzsgaSsrKSB7Ci0JCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBleHQ0X2dyb3VwaW5mb19jYWNoZXNbaV07Ci0JCWlmIChjYWNoZXApIHsKLQkJCWNoYXIgKm5hbWUgPSAoY2hhciAqKWttZW1fY2FjaGVfbmFtZShjYWNoZXApOwotCQkJa21lbV9jYWNoZV9kZXN0cm95KGNhY2hlcCk7Ci0JCQlrZnJlZShuYW1lKTsKLQkJfQotCX0KKwlleHQ0X2dyb3VwaW5mb19kZXN0cm95X3NsYWJzKCk7CiAJZXh0NF9yZW1vdmVfZGVidWdmc19lbnRyeSgpOwogfQogCmRpZmYgLS1naXQgYS9mcy9leHQ0L3BhZ2UtaW8uYyBiL2ZzL2V4dDQvcGFnZS1pby5jCmluZGV4IDcyNzBkY2YuLjk1NWNjMzAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcGFnZS1pby5jCisrKyBiL2ZzL2V4dDQvcGFnZS1pby5jCkBAIC0zMiwxNCArMzIsOCBAQAogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmlvX3BhZ2VfY2FjaGVwLCAqaW9fZW5kX2NhY2hlcDsKIAotI2RlZmluZSBXUV9IQVNIX1NaCQkzNwotI2RlZmluZSB0b19pb2VuZF93cSh2KQkoJmlvZW5kX3dxWygodW5zaWduZWQgbG9uZyl2KSAlIFdRX0hBU0hfU1pdKQotc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IGlvZW5kX3dxW1dRX0hBU0hfU1pdOwotCiBpbnQgX19pbml0IGV4dDRfaW5pdF9wYWdlaW8odm9pZCkKIHsKLQlpbnQgaTsKLQogCWlvX3BhZ2VfY2FjaGVwID0gS01FTV9DQUNIRShleHQ0X2lvX3BhZ2UsIFNMQUJfUkVDTEFJTV9BQ0NPVU5UKTsKIAlpZiAoaW9fcGFnZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00OCw5ICs0Miw2IEBACiAJCWttZW1fY2FjaGVfZGVzdHJveShpb19wYWdlX2NhY2hlcCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlmb3IgKGkgPSAwOyBpIDwgV1FfSEFTSF9TWjsgaSsrKQotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpb2VuZF93cVtpXSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjIsNyArNTMsNyBAQAogCiB2b2lkIGV4dDRfaW9lbmRfd2FpdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCXdhaXRfcXVldWVfaGVhZF90ICp3cSA9IHRvX2lvZW5kX3dxKGlub2RlKTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCAqd3EgPSBleHQ0X2lvZW5kX3dxKGlub2RlKTsKIAogCXdhaXRfZXZlbnQoKndxLCAoYXRvbWljX3JlYWQoJkVYVDRfSShpbm9kZSktPmlfaW9lbmRfY291bnQpID09IDApKTsKIH0KQEAgLTg3LDcgKzc4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaW8tPm51bV9pb19wYWdlczsgaSsrKQogCQlwdXRfaW9fcGFnZShpby0+cGFnZXNbaV0pOwogCWlvLT5udW1faW9fcGFnZXMgPSAwOwotCXdxID0gdG9faW9lbmRfd3EoaW8tPmlub2RlKTsKKwl3cSA9IGV4dDRfaW9lbmRfd3EoaW8tPmlub2RlKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmRVhUNF9JKGlvLT5pbm9kZSktPmlfaW9lbmRfY291bnQpICYmCiAJICAgIHdhaXRxdWV1ZV9hY3RpdmUod3EpKQogCQl3YWtlX3VwX2FsbCh3cSk7CkBAIC0xMDIsNiArOTMsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBpby0+aW5vZGU7CiAJbG9mZl90IG9mZnNldCA9IGlvLT5vZmZzZXQ7CiAJc3NpemVfdCBzaXplID0gaW8tPnNpemU7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxOwogCWludCByZXQgPSAwOwogCiAJZXh0NF9kZWJ1ZygiZXh0NF9lbmRfaW9fbm9sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCkBAIC0xMjYsNyArMTE4LDE2IEBACiAJaWYgKGlvLT5pb2NiKQogCQlhaW9fY29tcGxldGUoaW8tPmlvY2IsIGlvLT5yZXN1bHQsIDApOwogCS8qIGNsZWFyIHRoZSBESU8gQUlPIHVud3JpdHRlbiBmbGFnICovCi0JaW8tPmZsYWcgJj0gfkVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKKwlpZiAoaW8tPmZsYWcgJiBFWFQ0X0lPX0VORF9VTldSSVRURU4pIHsKKwkJaW8tPmZsYWcgJj0gfkVYVDRfSU9fRU5EX1VOV1JJVFRFTjsKKwkJLyogV2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24gKi8KKwkJd3EgPSBleHQ0X2lvZW5kX3dxKGlvLT5pbm9kZSk7CisJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZFWFQ0X0koaW5vZGUpLT5pX2Fpb2Rpb191bndyaXR0ZW4pICYmCisJCSAgICB3YWl0cXVldWVfYWN0aXZlKHdxKSkgeworCQkJd2FrZV91cF9hbGwod3EpOworCQl9CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTkwLDYgKzE5MSw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOworCXNlY3Rvcl90IGJpX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCiAJQlVHX09OKCFpb19lbmQpOwogCWJpby0+YmlfcHJpdmF0ZSA9IE5VTEw7CkBAIC0yMDcsOSArMjA5LDcgQEAKIAkJaWYgKGVycm9yKQogCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQlCVUdfT04oIWhlYWQpOwotCQlpZiAoaGVhZC0+Yl9zaXplID09IFBBR0VfQ0FDSEVfU0laRSkKLQkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShoZWFkKTsKLQkJZWxzZSB7CisJCWlmIChoZWFkLT5iX3NpemUgIT0gUEFHRV9DQUNIRV9TSVpFKSB7CiAJCQlsb2ZmX3Qgb2Zmc2V0OwogCQkJbG9mZl90IGlvX2VuZF9vZmZzZXQgPSBpb19lbmQtPm9mZnNldCArIGlvX2VuZC0+c2l6ZTsKIApAQCAtMjIxLDcgKzIyMSw2IEBACiAJCQkJCWlmIChlcnJvcikKIAkJCQkJCWJ1ZmZlcl9pb19lcnJvcihiaCk7CiAKLQkJCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQl9CiAJCQkJaWYgKGJ1ZmZlcl9kZWxheShiaCkpCiAJCQkJCXBhcnRpYWxfd3JpdGUgPSAxOwpAQCAtMjU3LDcgKzI1Niw3IEBACiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlvX2VuZC0+b2Zmc2V0LAogCQkJICAgICAobG9uZykgaW9fZW5kLT5zaXplLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJICAgICBiaW8tPmJpX3NlY3RvciA+PiAoaW5vZGUtPmlfYmxrYml0cyAtIDkpKTsKKwkJCSAgICAgYmlfc2VjdG9yID4+IChpbm9kZS0+aV9ibGtiaXRzIC0gOSkpOwogCX0KIAogCS8qIEFkZCB0aGUgaW9fZW5kIHRvIHBlci1pbm9kZSBjb21wbGV0ZWQgaW8gbGlzdCovCkBAIC0zODAsNiArMzc5LDcgQEAKIAogCWJsb2Nrc2l6ZSA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKIAorCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CiAJQlVHX09OKFBhZ2VXcml0ZWJhY2socGFnZSkpOwogCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKQEAgLTM5NywxMiArMzk3LDE0IEBACiAJZm9yIChiaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSksIGJsb2NrX3N0YXJ0ID0gMDsKIAkgICAgIGJoICE9IGhlYWQgfHwgIWJsb2NrX3N0YXJ0OwogCSAgICAgYmxvY2tfc3RhcnQgPSBibG9ja19lbmQsIGJoID0gYmgtPmJfdGhpc19wYWdlKSB7CisKIAkJYmxvY2tfZW5kID0gYmxvY2tfc3RhcnQgKyBibG9ja3NpemU7CiAJCWlmIChibG9ja19zdGFydCA+PSBsZW4pIHsKIAkJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWNsZWFyX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCXJldCA9IGlvX3N1Ym1pdF9hZGRfYmgoaW8sIGlvX3BhZ2UsIGlub2RlLCB3YmMsIGJoKTsKIAkJaWYgKHJldCkgewogCQkJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCA0OGNlNTYxLi5mNmEzMThmIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC03Nyw2ICs3Nyw3IEBACiAJCSAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSk7CiBzdGF0aWMgdm9pZCBleHQ0X2Rlc3Ryb3lfbGF6eWluaXRfdGhyZWFkKHZvaWQpOwogc3RhdGljIHZvaWQgZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CitzdGF0aWMgdm9pZCBleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCh2b2lkKTsKIAogI2lmICFkZWZpbmVkKENPTkZJR19FWFQzX0ZTKSAmJiAhZGVmaW5lZChDT05GSUdfRVhUM19GU19NT0RVTEUpICYmIGRlZmluZWQoQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMykKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBleHQzX2ZzX3R5cGUgPSB7CkBAIC04MzIsNiArODMzLDcgQEAKIAllaS0+aV9zeW5jX3RpZCA9IDA7CiAJZWktPmlfZGF0YXN5bmNfdGlkID0gMDsKIAlhdG9taWNfc2V0KCZlaS0+aV9pb2VuZF9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZWktPmlfYWlvZGlvX3Vud3JpdHRlbiwgMCk7CiAKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CkBAIC0yNzE2LDYgKzI3MTgsOCBAQAogCW11dGV4X3VubG9jaygmZXh0NF9saV9pbmZvLT5saV9saXN0X210eCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmV4dDRfbGF6eWluaXRfdGFzazsKKwogLyoKICAqIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIHdoZXJlIGV4dDRsYXp5aW5pdCB0aHJlYWQgbGl2ZXMuIEl0IHdhbGtzCiAgKiB0aHJvdWdoIHRoZSByZXF1ZXN0IGxpc3Qgc2VhcmNoaW5nIGZvciBuZXh0IHNjaGVkdWxlZCBmaWxlc3lzdGVtLgpAQCAtMjc4NCw2ICsyNzg4LDEwIEBACiAJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBuZXh0X3dha2V1cCkpCiAJCQlzY2hlZHVsZSgpOwogCQlmaW5pc2hfd2FpdCgmZWxpLT5saV93YWl0X2RhZW1vbiwgJndhaXQpOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCQlleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCgpOworCQkJZ290byBleGl0X3RocmVhZDsKKwkJfQogCX0KIAogZXhpdF90aHJlYWQ6CkBAIC0yODA4LDYgKzI4MTYsNyBAQAogCXdha2VfdXAoJmVsaS0+bGlfd2FpdF90YXNrKTsKIAogCWtmcmVlKGV4dDRfbGlfaW5mbyk7CisJZXh0NF9sYXp5aW5pdF90YXNrID0gTlVMTDsKIAlleHQ0X2xpX2luZm8gPSBOVUxMOwogCW11dGV4X3VubG9jaygmZXh0NF9saV9tdHgpOwogCkBAIC0yODMwLDExICsyODM5LDEwIEBACiAKIHN0YXRpYyBpbnQgZXh0NF9ydW5fbGF6eWluaXRfdGhyZWFkKHZvaWQpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0OwotCi0JdCA9IGt0aHJlYWRfcnVuKGV4dDRfbGF6eWluaXRfdGhyZWFkLCBleHQ0X2xpX2luZm8sICJleHQ0bGF6eWluaXQiKTsKLQlpZiAoSVNfRVJSKHQpKSB7Ci0JCWludCBlcnIgPSBQVFJfRVJSKHQpOworCWV4dDRfbGF6eWluaXRfdGFzayA9IGt0aHJlYWRfcnVuKGV4dDRfbGF6eWluaXRfdGhyZWFkLAorCQkJCQkgZXh0NF9saV9pbmZvLCAiZXh0NGxhenlpbml0Iik7CisJaWYgKElTX0VSUihleHQ0X2xhenlpbml0X3Rhc2spKSB7CisJCWludCBlcnIgPSBQVFJfRVJSKGV4dDRfbGF6eWluaXRfdGFzayk7CiAJCWV4dDRfY2xlYXJfcmVxdWVzdF9saXN0KCk7CiAJCWRlbF90aW1lcl9zeW5jKCZleHQ0X2xpX2luZm8tPmxpX3RpbWVyKTsKIAkJa2ZyZWUoZXh0NF9saV9pbmZvKTsKQEAgLTI5ODUsMTYgKzI5OTMsMTAgQEAKIAkgKiBJZiB0aHJlYWQgZXhpdGVkIGVhcmxpZXIKIAkgKiB0aGVyZSdzIG5vdGhpbmcgdG8gYmUgZG9uZS4KIAkgKi8KLQlpZiAoIWV4dDRfbGlfaW5mbykKKwlpZiAoIWV4dDRfbGlfaW5mbyB8fCAhZXh0NF9sYXp5aW5pdF90YXNrKQogCQlyZXR1cm47CiAKLQlleHQ0X2NsZWFyX3JlcXVlc3RfbGlzdCgpOwotCi0Jd2hpbGUgKGV4dDRfbGlfaW5mby0+bGlfdGFzaykgewotCQl3YWtlX3VwKCZleHQ0X2xpX2luZm8tPmxpX3dhaXRfZGFlbW9uKTsKLQkJd2FpdF9ldmVudChleHQ0X2xpX2luZm8tPmxpX3dhaXRfdGFzaywKLQkJCSAgIGV4dDRfbGlfaW5mby0+bGlfdGFzayA9PSBOVUxMKTsKLQl9CisJa3RocmVhZF9zdG9wKGV4dDRfbGF6eWluaXRfdGFzayk7CiB9CiAKIHN0YXRpYyBpbnQgZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQpCkBAIC00NzY4LDcgKzQ3NzAsNyBAQAogCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKIH07CiAKLWludCBfX2luaXQgZXh0NF9pbml0X2ZlYXRfYWR2ZXJ0cyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZXh0NF9pbml0X2ZlYXRfYWR2ZXJ0cyh2b2lkKQogewogCXN0cnVjdCBleHQ0X2ZlYXR1cmVzICplZjsKIAlpbnQgcmV0ID0gLUVOT01FTTsKQEAgLTQ3OTIsMjMgKzQ3OTQsNDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBleHQ0X2V4aXRfZmVhdF9hZHZlcnRzKHZvaWQpCit7CisJa29iamVjdF9wdXQoJmV4dDRfZmVhdC0+Zl9rb2JqKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZleHQ0X2ZlYXQtPmZfa29ial91bnJlZ2lzdGVyKTsKKwlrZnJlZShleHQ0X2ZlYXQpOworfQorCisvKiBTaGFyZWQgYWNyb3NzIGFsbCBleHQ0IGZpbGUgc3lzdGVtcyAqLword2FpdF9xdWV1ZV9oZWFkX3QgZXh0NF9faW9lbmRfd3FbRVhUNF9XUV9IQVNIX1NaXTsKK3N0cnVjdCBtdXRleCBleHQ0X19haW9fbXV0ZXhbRVhUNF9XUV9IQVNIX1NaXTsKKwogc3RhdGljIGludCBfX2luaXQgZXh0NF9pbml0X2ZzKHZvaWQpCiB7Ci0JaW50IGVycjsKKwlpbnQgaSwgZXJyOwogCiAJZXh0NF9jaGVja19mbGFnX3ZhbHVlcygpOworCisJZm9yIChpID0gMDsgaSA8IEVYVDRfV1FfSEFTSF9TWjsgaSsrKSB7CisJCW11dGV4X2luaXQoJmV4dDRfX2Fpb19tdXRleFtpXSk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmV4dDRfX2lvZW5kX3dxW2ldKTsKKwl9CisKIAllcnIgPSBleHQ0X2luaXRfcGFnZWlvKCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAllcnIgPSBleHQ0X2luaXRfc3lzdGVtX3pvbmUoKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dDU7CisJCWdvdG8gb3V0NzsKIAlleHQ0X2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJleHQ0IiwgTlVMTCwgZnNfa29iaik7CiAJaWYgKCFleHQ0X2tzZXQpCi0JCWdvdG8gb3V0NDsKKwkJZ290byBvdXQ2OwogCWV4dDRfcHJvY19yb290ID0gcHJvY19ta2RpcigiZnMvZXh0NCIsIE5VTEwpOworCWlmICghZXh0NF9wcm9jX3Jvb3QpCisJCWdvdG8gb3V0NTsKIAogCWVyciA9IGV4dDRfaW5pdF9mZWF0X2FkdmVydHMoKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDQ7CiAKIAllcnIgPSBleHQ0X2luaXRfbWJhbGxvYygpOwogCWlmIChlcnIpCkBAIC00ODM4LDEyICs0ODYxLDE0IEBACiBvdXQyOgogCWV4dDRfZXhpdF9tYmFsbG9jKCk7CiBvdXQzOgotCWtmcmVlKGV4dDRfZmVhdCk7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoImZzL2V4dDQiLCBOVUxMKTsKLQlrc2V0X3VucmVnaXN0ZXIoZXh0NF9rc2V0KTsKKwlleHQ0X2V4aXRfZmVhdF9hZHZlcnRzKCk7CiBvdXQ0OgotCWV4dDRfZXhpdF9zeXN0ZW1fem9uZSgpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9leHQ0IiwgTlVMTCk7CiBvdXQ1OgorCWtzZXRfdW5yZWdpc3RlcihleHQ0X2tzZXQpOworb3V0NjoKKwlleHQ0X2V4aXRfc3lzdGVtX3pvbmUoKTsKK291dDc6CiAJZXh0NF9leGl0X3BhZ2VpbygpOwogCXJldHVybiBlcnI7CiB9CkBAIC00ODU3LDYgKzQ4ODIsNyBAQAogCWRlc3Ryb3lfaW5vZGVjYWNoZSgpOwogCWV4dDRfZXhpdF94YXR0cigpOwogCWV4dDRfZXhpdF9tYmFsbG9jKCk7CisJZXh0NF9leGl0X2ZlYXRfYWR2ZXJ0cygpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJmcy9leHQ0IiwgTlVMTCk7CiAJa3NldF91bnJlZ2lzdGVyKGV4dDRfa3NldCk7CiAJZXh0NF9leGl0X3N5c3RlbV96b25lKCk7CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBlY2M4YjM5Li5jYjEwMjYxIDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTgxNSw3ICs4MTUsNyBAQAogCQlfX09fU1lOQwl8IE9fRFNZTkMJfCBGQVNZTkMJfAogCQlPX0RJUkVDVAl8IE9fTEFSR0VGSUxFCXwgT19ESVJFQ1RPUlkJfAogCQlPX05PRk9MTE9XCXwgT19OT0FUSU1FCXwgT19DTE9FWEVDCXwKLQkJRk1PREVfRVhFQworCQlfX0ZNT0RFX0VYRUMKIAkJKSk7CiAKIAlmYXN5bmNfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZmFzeW5jX2NhY2hlIiwKZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCBjM2U4OWFkLi5lYjM2YjZiIDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xMjUsMTMgKzEyNSwxMyBAQAogCQlnb3RvIGZhaWw7CiAKIAlwZXJjcHVfY291bnRlcl9pbmMoJm5yX2ZpbGVzKTsKKwlmLT5mX2NyZWQgPSBnZXRfY3JlZChjcmVkKTsKIAlpZiAoc2VjdXJpdHlfZmlsZV9hbGxvYyhmKSkKIAkJZ290byBmYWlsX3NlYzsKIAogCUlOSVRfTElTVF9IRUFEKCZmLT5mX3UuZnVfbGlzdCk7CiAJYXRvbWljX2xvbmdfc2V0KCZmLT5mX2NvdW50LCAxKTsKIAlyd2xvY2tfaW5pdCgmZi0+Zl9vd25lci5sb2NrKTsKLQlmLT5mX2NyZWQgPSBnZXRfY3JlZChjcmVkKTsKIAlzcGluX2xvY2tfaW5pdCgmZi0+Zl9sb2NrKTsKIAlldmVudHBvbGxfaW5pdF9maWxlKGYpOwogCS8qIGYtPmZfdmVyc2lvbjogMCAqLwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggYmZlZDg0NC4uODM1NDNiNSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xMjgzLDggKzEyODMsMTEgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfT1BFTikgJiYgZmMtPmF0b21pY19vX3RydW5jKQotCQlyZXR1cm4gMDsKKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX09QRU4pIHsKKwkJaWYgKGZjLT5hdG9taWNfb190cnVuYykKKwkJCXJldHVybiAwOworCQlmaWxlID0gTlVMTDsKKwl9CiAKIAlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpCiAJCWlzX3RydW5jYXRlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggOTVkYTFiYy4uOWUwODMyZCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTg2LDE4ICs4Niw1MiBAQAogCXJldHVybiBmZjsKIH0KIAotc3RhdGljIHZvaWQgZnVzZV9yZWxlYXNlX2VuZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEpCitzdGF0aWMgdm9pZCBmdXNlX3JlbGVhc2VfYXN5bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXBhdGhfcHV0KCZyZXEtPm1pc2MucmVsZWFzZS5wYXRoKTsKKwlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKKwlzdHJ1Y3QgZnVzZV9jb25uICpmYzsKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCisJcmVxID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBmdXNlX3JlcSwgbWlzYy5yZWxlYXNlLndvcmspOworCXBhdGggPSByZXEtPm1pc2MucmVsZWFzZS5wYXRoOworCWZjID0gZ2V0X2Z1c2VfY29ubihwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisKKwlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOworCXBhdGhfcHV0KCZwYXRoKTsKIH0KIAotc3RhdGljIHZvaWQgZnVzZV9maWxlX3B1dChzdHJ1Y3QgZnVzZV9maWxlICpmZikKK3N0YXRpYyB2b2lkIGZ1c2VfcmVsZWFzZV9lbmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQoreworCWlmIChmYy0+ZGVzdHJveV9yZXEpIHsKKwkJLyoKKwkJICogSWYgdGhpcyBpcyBhIGZ1c2VibGsgbW91bnQsIHRoZW4gaXQncyBwb3NzaWJsZSB0aGF0CisJCSAqIHJlbGVhc2luZyB0aGUgcGF0aCB3aWxsIHJlc3VsdCBpbiByZWxlYXNpbmcgdGhlCisJCSAqIHN1cGVyIGJsb2NrIGFuZCBzZW5kaW5nIHRoZSBERVNUUk9ZIHJlcXVlc3QuICBJZgorCQkgKiB0aGUgc2VydmVyIGlzIHNpbmdsZSB0aHJlYWRlZCwgdGhpcyB3b3VsZCBoYW5nLgorCQkgKiBGb3IgdGhpcyByZWFzb24gZG8gdGhlIHBhdGhfcHV0KCkgaW4gYSBzZXBhcmF0ZQorCQkgKiB0aHJlYWQuCisJCSAqLworCQlhdG9taWNfaW5jKCZyZXEtPmNvdW50KTsKKwkJSU5JVF9XT1JLKCZyZXEtPm1pc2MucmVsZWFzZS53b3JrLCBmdXNlX3JlbGVhc2VfYXN5bmMpOworCQlzY2hlZHVsZV93b3JrKCZyZXEtPm1pc2MucmVsZWFzZS53b3JrKTsKKwl9IGVsc2UgeworCQlwYXRoX3B1dCgmcmVxLT5taXNjLnJlbGVhc2UucGF0aCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBmdXNlX2ZpbGVfcHV0KHN0cnVjdCBmdXNlX2ZpbGUgKmZmLCBib29sIHN5bmMpCiB7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZmLT5jb3VudCkpIHsKIAkJc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmZi0+cmVzZXJ2ZWRfcmVxOwogCi0JCXJlcS0+ZW5kID0gZnVzZV9yZWxlYXNlX2VuZDsKLQkJZnVzZV9yZXF1ZXN0X3NlbmRfYmFja2dyb3VuZChmZi0+ZmMsIHJlcSk7CisJCWlmIChzeW5jKSB7CisJCQlmdXNlX3JlcXVlc3Rfc2VuZChmZi0+ZmMsIHJlcSk7CisJCQlwYXRoX3B1dCgmcmVxLT5taXNjLnJlbGVhc2UucGF0aCk7CisJCQlmdXNlX3B1dF9yZXF1ZXN0KGZmLT5mYywgcmVxKTsKKwkJfSBlbHNlIHsKKwkJCXJlcS0+ZW5kID0gZnVzZV9yZWxlYXNlX2VuZDsKKwkJCWZ1c2VfcmVxdWVzdF9zZW5kX2JhY2tncm91bmQoZmYtPmZjLCByZXEpOworCQl9CiAJCWtmcmVlKGZmKTsKIAl9CiB9CkBAIC0yMTksOCArMjUzLDEyIEBACiAJICogTm9ybWFsbHkgdGhpcyB3aWxsIHNlbmQgdGhlIFJFTEVBU0UgcmVxdWVzdCwgaG93ZXZlciBpZgogCSAqIHNvbWUgYXN5bmNocm9ub3VzIFJFQUQgb3IgV1JJVEUgcmVxdWVzdHMgYXJlIG91dHN0YW5kaW5nLAogCSAqIHRoZSBzZW5kaW5nIHdpbGwgYmUgZGVsYXllZC4KKwkgKgorCSAqIE1ha2UgdGhlIHJlbGVhc2Ugc3luY2hyb25vdXMgaWYgdGhpcyBpcyBhIGZ1c2VibGsgbW91bnQsCisJICogc3luY2hyb25vdXMgUkVMRUFTRSBpcyBhbGxvd2VkIChhbmQgZGVzaXJhYmxlKSBpbiB0aGlzIGNhc2UKKwkgKiBiZWNhdXNlIHRoZSBzZXJ2ZXIgY2FuIGJlIHRydXN0ZWQgbm90IHRvIHNjcmV3IHVwLgogCSAqLwotCWZ1c2VfZmlsZV9wdXQoZmYpOworCWZ1c2VfZmlsZV9wdXQoZmYsIGZmLT5mYy0+ZGVzdHJveV9yZXEgIT0gTlVMTCk7CiB9CiAKIHN0YXRpYyBpbnQgZnVzZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtNTU4LDcgKzU5Niw3IEBACiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9CiAJaWYgKHJlcS0+ZmYpCi0JCWZ1c2VfZmlsZV9wdXQocmVxLT5mZik7CisJCWZ1c2VfZmlsZV9wdXQocmVxLT5mZiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBmdXNlX3NlbmRfcmVhZHBhZ2VzKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTExMzcsNyArMTE3NSw3IEBACiBzdGF0aWMgdm9pZCBmdXNlX3dyaXRlcGFnZV9mcmVlKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgZnVzZV9yZXEgKnJlcSkKIHsKIAlfX2ZyZWVfcGFnZShyZXEtPnBhZ2VzWzBdKTsKLQlmdXNlX2ZpbGVfcHV0KHJlcS0+ZmYpOworCWZ1c2VfZmlsZV9wdXQocmVxLT5mZiwgZmFsc2UpOwogfQogCiBzdGF0aWMgdm9pZCBmdXNlX3dyaXRlcGFnZV9maW5pc2goc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9mdXNlX2kuaCBiL2ZzL2Z1c2UvZnVzZV9pLmgKaW5kZXggYWU1NzQ0YS4uZDQyODY5NCAxMDA2NDQKLS0tIGEvZnMvZnVzZS9mdXNlX2kuaAorKysgYi9mcy9mdXNlL2Z1c2VfaS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKIC8qKiBNYXggbnVtYmVyIG9mIHBhZ2VzIHRoYXQgY2FuIGJlIHVzZWQgaW4gYSBzaW5nbGUgcmVhZCByZXF1ZXN0ICovCiAjZGVmaW5lIEZVU0VfTUFYX1BBR0VTX1BFUl9SRVEgMzIKQEAgLTI2Miw3ICsyNjMsMTAgQEAKIAkvKiogRGF0YSBmb3IgYXN5bmNocm9ub3VzIHJlcXVlc3RzICovCiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJc3RydWN0IGZ1c2VfcmVsZWFzZV9pbiBpbjsKKwkJCXVuaW9uIHsKKwkJCQlzdHJ1Y3QgZnVzZV9yZWxlYXNlX2luIGluOworCQkJCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCQkJfTsKIAkJCXN0cnVjdCBwYXRoIHBhdGg7CiAJCX0gcmVsZWFzZTsKIAkJc3RydWN0IGZ1c2VfaW5pdF9pbiBpbml0X2luOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9jay5jIGIvZnMvZ2ZzMi9nbG9jay5jCmluZGV4IDA4YThiZWIuLjdjZDlhNWEgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvY2suYworKysgYi9mcy9nZnMyL2dsb2NrLmMKQEAgLTE3NzksMTEgKzE3NzksMTEgQEAKICNlbmRpZgogCiAJZ2xvY2tfd29ya3F1ZXVlID0gYWxsb2Nfd29ya3F1ZXVlKCJnbG9ja193b3JrcXVldWUiLCBXUV9NRU1fUkVDTEFJTSB8Ci0JCQkJCSAgV1FfSElHSFBSSSB8IFdRX0ZSRUVaRUFCTEUsIDApOworCQkJCQkgIFdRX0hJR0hQUkkgfCBXUV9GUkVFWkFCTEUsIDApOwogCWlmIChJU19FUlIoZ2xvY2tfd29ya3F1ZXVlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ2xvY2tfd29ya3F1ZXVlKTsKIAlnZnMyX2RlbGV0ZV93b3JrcXVldWUgPSBhbGxvY193b3JrcXVldWUoImRlbGV0ZV93b3JrcXVldWUiLAotCQkJCQkJV1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkVBQkxFLAorCQkJCQkJV1FfTUVNX1JFQ0xBSU0gfCBXUV9GUkVFWkFCTEUsCiAJCQkJCQkwKTsKIAlpZiAoSVNfRVJSKGdmczJfZGVsZXRlX3dvcmtxdWV1ZSkpIHsKIAkJZGVzdHJveV93b3JrcXVldWUoZ2xvY2tfd29ya3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbWFpbi5jIGIvZnMvZ2ZzMi9tYWluLmMKaW5kZXggZWJlZjdhYi4uNzJjMzFhMyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9tYWluLmMKKysrIGIvZnMvZ2ZzMi9tYWluLmMKQEAgLTU5LDE0ICs1OSw3IEBACiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikoZ2wgKyAxKTsKIAogCWdmczJfaW5pdF9nbG9ja19vbmNlKGdsKTsKLQltZW1zZXQobWFwcGluZywgMCwgc2l6ZW9mKCptYXBwaW5nKSk7Ci0JSU5JVF9SQURJWF9UUkVFKCZtYXBwaW5nLT5wYWdlX3RyZWUsIEdGUF9BVE9NSUMpOwotCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT50cmVlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5pX21tYXBfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7Ci0JSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJm1hcHBpbmctPmlfbW1hcCk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOworCWFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKG1hcHBpbmcpOwogfQogCiAvKioKQEAgLTE0NCw3ICsxMzcsNyBAQAogCiAJZXJyb3IgPSAtRU5PTUVNOwogCWdmc19yZWNvdmVyeV93cSA9IGFsbG9jX3dvcmtxdWV1ZSgiZ2ZzX3JlY292ZXJ5IiwKLQkJCQkJICBXUV9NRU1fUkVDTEFJTSB8IFdRX0ZSRUVaRUFCTEUsIDApOworCQkJCQkgIFdRX01FTV9SRUNMQUlNIHwgV1FfRlJFRVpBQkxFLCAwKTsKIAlpZiAoIWdmc19yZWNvdmVyeV93cSkKIAkJZ290byBmYWlsX3dxOwogCmRpZmYgLS1naXQgYS9mcy9oZnMvZGlyLmMgYi9mcy9oZnMvZGlyLmMKaW5kZXggYWZhNjZhYS4uYjRkNzBiMSAxMDA2NDQKLS0tIGEvZnMvaGZzL2Rpci5jCisrKyBiL2ZzL2hmcy9kaXIuYwpAQCAtMjM4LDQ2ICsyMzgsMjIgQEAKIH0KIAogLyoKLSAqIGhmc191bmxpbmsoKQorICogaGZzX3JlbW92ZSgpCiAgKgotICogVGhpcyBpcyB0aGUgdW5saW5rKCkgZW50cnkgaW4gdGhlIGlub2RlX29wZXJhdGlvbnMgc3RydWN0dXJlIGZvcgotICogcmVndWxhciBIRlMgZGlyZWN0b3JpZXMuICBUaGUgcHVycG9zZSBpcyB0byBkZWxldGUgYW4gZXhpc3RpbmcKLSAqIGZpbGUsIGdpdmVuIHRoZSBpbm9kZSBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgYW5kIHRoZSBuYW1lCi0gKiAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBleGlzdGluZyBmaWxlLgorICogVGhpcyBzZXJ2ZXMgYXMgYm90aCB1bmxpbmsoKSBhbmQgcm1kaXIoKSBpbiB0aGUgaW5vZGVfb3BlcmF0aW9ucworICogc3RydWN0dXJlIGZvciByZWd1bGFyIEhGUyBkaXJlY3Rvcmllcy4gIFRoZSBwdXJwb3NlIGlzIHRvIGRlbGV0ZQorICogYW4gZXhpc3RpbmcgY2hpbGQsIGdpdmVuIHRoZSBpbm9kZSBmb3IgdGhlIHBhcmVudCBkaXJlY3RvcnkgYW5kCisgKiB0aGUgbmFtZSAoYW5kIGl0cyBsZW5ndGgpIG9mIHRoZSBleGlzdGluZyBkaXJlY3RvcnkuCisgKgorICogSEZTIGRvZXMgbm90IGhhdmUgaGFyZGxpbmtzLCBzbyBib3RoIHJtZGlyIGFuZCB1bmxpbmsgc2V0IHRoZQorICogbGluayBjb3VudCB0byAwLiAgVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGUgZW1wdGluZXNzIGNoZWNrLgogICovCi1zdGF0aWMgaW50IGhmc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgaGZzX3JlbW92ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgcmVzOwogCi0JaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JcmVzID0gaGZzX2NhdF9kZWxldGUoaW5vZGUtPmlfaW5vLCBkaXIsICZkZW50cnktPmRfbmFtZSk7Ci0JaWYgKHJlcykKLQkJcmV0dXJuIHJlczsKLQotCWRyb3BfbmxpbmsoaW5vZGUpOwotCWhmc19kZWxldGVfaW5vZGUoaW5vZGUpOwotCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQotCXJldHVybiByZXM7Ci19Ci0KLS8qCi0gKiBoZnNfcm1kaXIoKQotICoKLSAqIFRoaXMgaXMgdGhlIHJtZGlyKCkgZW50cnkgaW4gdGhlIGlub2RlX29wZXJhdGlvbnMgc3RydWN0dXJlIGZvcgotICogcmVndWxhciBIRlMgZGlyZWN0b3JpZXMuICBUaGUgcHVycG9zZSBpcyB0byBkZWxldGUgYW4gZXhpc3RpbmcKLSAqIGRpcmVjdG9yeSwgZ2l2ZW4gdGhlIGlub2RlIGZvciB0aGUgcGFyZW50IGRpcmVjdG9yeSBhbmQgdGhlIG5hbWUKLSAqIChhbmQgaXRzIGxlbmd0aCkgb2YgdGhlIGV4aXN0aW5nIGRpcmVjdG9yeS4KLSAqLwotc3RhdGljIGludCBoZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWludCByZXM7Ci0KLQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlpZiAoaW5vZGUtPmlfc2l6ZSAhPSAyKQorCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpICYmIGlub2RlLT5pX3NpemUgIT0gMikKIAkJcmV0dXJuIC1FTk9URU1QVFk7CiAJcmVzID0gaGZzX2NhdF9kZWxldGUoaW5vZGUtPmlfaW5vLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKHJlcykKQEAgLTMwNyw3ICsyODMsNyBAQAogCiAJLyogVW5saW5rIGRlc3RpbmF0aW9uIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCiAJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpIHsKLQkJcmVzID0gaGZzX3VubGluayhuZXdfZGlyLCBuZXdfZGVudHJ5KTsKKwkJcmVzID0gaGZzX3JlbW92ZShuZXdfZGlyLCBuZXdfZGVudHJ5KTsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CiAJfQpAQCAtMzMyLDkgKzMwOCw5IEBACiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBoZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLmNyZWF0ZQkJPSBoZnNfY3JlYXRlLAogCS5sb29rdXAJCT0gaGZzX2xvb2t1cCwKLQkudW5saW5rCQk9IGhmc191bmxpbmssCisJLnVubGluawkJPSBoZnNfcmVtb3ZlLAogCS5ta2RpcgkJPSBoZnNfbWtkaXIsCi0JLnJtZGlyCQk9IGhmc19ybWRpciwKKwkucm1kaXIJCT0gaGZzX3JlbW92ZSwKIAkucmVuYW1lCQk9IGhmc19yZW5hbWUsCiAJLnNldGF0dHIJPSBoZnNfaW5vZGVfc2V0YXR0ciwKIH07CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2V4dGVudHMuYyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCmluZGV4IDUyYTBiY2EuLmIxOTkxYTIgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCisrKyBiL2ZzL2hmc3BsdXMvZXh0ZW50cy5jCkBAIC0zOTcsOCArMzk3LDggQEAKIAl1MzIgc3RhcnQsIGxlbiwgZ29hbDsKIAlpbnQgcmVzOwogCi0JaWYgKHNiaS0+dG90YWxfYmxvY2tzIC0gc2JpLT5mcmVlX2Jsb2NrcyArIDggPgotCQkJc2JpLT5hbGxvY19maWxlLT5pX3NpemUgKiA4KSB7CisJaWYgKHNiaS0+YWxsb2NfZmlsZS0+aV9zaXplICogOCA8CisJICAgIHNiaS0+dG90YWxfYmxvY2tzIC0gc2JpLT5mcmVlX2Jsb2NrcyArIDgpIHsKIAkJLyogZXh0ZW5kIGFsbG9jIGZpbGUgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGV4dGVuZCBhbGxvYyBmaWxlISAiCiAJCQkJIiglbGx1LCV1LCV1KVxuIiwKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvcGFydF90YmwuYyBiL2ZzL2hmc3BsdXMvcGFydF90YmwuYwppbmRleCBkNjZhZDExLi40MGFkODhjIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL3BhcnRfdGJsLmMKKysrIGIvZnMvaGZzcGx1cy9wYXJ0X3RibC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIAlyZXMgPSBoZnNwbHVzX3N1Ym1pdF9iaW8oc2ItPnNfYmRldiwgKnBhcnRfc3RhcnQgKyBIRlNfUE1BUF9CTEssCiAJCQkJIGRhdGEsIFJFQUQpOwogCWlmIChyZXMpCi0JCXJldHVybiByZXM7CisJCWdvdG8gb3V0OwogCiAJc3dpdGNoIChiZTE2X3RvX2NwdSgqKChfX2JlMTYgKilkYXRhKSkpIHsKIAljYXNlIEhGU19PTERfUE1BUF9NQUdJQzoKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCQlyZXMgPSAtRU5PRU5UOwogCQlicmVhazsKIAl9Ci0KK291dDoKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IDlhM2I0NzkuLmI0OWI1NTUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTMzOCwyMCArMzM4LDIyIEBACiAJc3RydWN0IGlub2RlICpyb290LCAqaW5vZGU7CiAJc3RydWN0IHFzdHIgc3RyOwogCXN0cnVjdCBubHNfdGFibGUgKm5scyA9IE5VTEw7Ci0JaW50IGVyciA9IC1FSU5WQUw7CisJaW50IGVycjsKIAorCWVyciA9IC1FSU5WQUw7CiAJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXQ7CiAKIAlzYi0+c19mc19pbmZvID0gc2JpOwogCW11dGV4X2luaXQoJnNiaS0+YWxsb2NfbXV0ZXgpOwogCW11dGV4X2luaXQoJnNiaS0+dmhfbXV0ZXgpOwogCWhmc3BsdXNfZmlsbF9kZWZhdWx0cyhzYmkpOworCisJZXJyID0gLUVJTlZBTDsKIAlpZiAoIWhmc3BsdXNfcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYmkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB1bmFibGUgdG8gcGFyc2UgbW91bnQgb3B0aW9uc1xuIik7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfdW5sb2FkX25sczsKIAl9CiAKIAkvKiB0ZW1wb3JhcmlseSB1c2UgdXRmOCB0byBjb3JyZWN0bHkgZmluZCB0aGUgaGlkZGVuIGRpciBiZWxvdyAqLwpAQCAtMzU5LDE2ICszNjEsMTQgQEAKIAlzYmktPm5scyA9IGxvYWRfbmxzKCJ1dGY4Iik7CiAJaWYgKCFzYmktPm5scykgewogCQlwcmludGsoS0VSTl9FUlIgImhmczogdW5hYmxlIHRvIGxvYWQgbmxzIGZvciB1dGY4XG4iKTsKLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF91bmxvYWRfbmxzOwogCX0KIAogCS8qIEdyYWIgdGhlIHZvbHVtZSBoZWFkZXIgKi8KIAlpZiAoaGZzcGx1c19yZWFkX3dyYXBwZXIoc2IpKSB7CiAJCWlmICghc2lsZW50KQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaGZzOiB1bmFibGUgdG8gZmluZCBIRlMrIHN1cGVyYmxvY2tcbiIpOwotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X3VubG9hZF9ubHM7CiAJfQogCXZoZHIgPSBzYmktPnNfdmhkcjsKIApAQCAtMzc3LDcgKzM3Nyw3IEBACiAJaWYgKGJlMTZfdG9fY3B1KHZoZHItPnZlcnNpb24pIDwgSEZTUExVU19NSU5fVkVSU0lPTiB8fAogCSAgICBiZTE2X3RvX2NwdSh2aGRyLT52ZXJzaW9uKSA+IEhGU1BMVVNfQ1VSUkVOVF9WRVJTSU9OKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiB3cm9uZyBmaWxlc3lzdGVtIHZlcnNpb25cbiIpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2ZyZWVfdmhkcjsKIAl9CiAJc2JpLT50b3RhbF9ibG9ja3MgPSBiZTMyX3RvX2NwdSh2aGRyLT50b3RhbF9ibG9ja3MpOwogCXNiaS0+ZnJlZV9ibG9ja3MgPSBiZTMyX3RvX2NwdSh2aGRyLT5mcmVlX2Jsb2Nrcyk7CkBAIC00MjEsMTkgKzQyMSwxOSBAQAogCXNiaS0+ZXh0X3RyZWUgPSBoZnNfYnRyZWVfb3BlbihzYiwgSEZTUExVU19FWFRfQ05JRCk7CiAJaWYgKCFzYmktPmV4dF90cmVlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaGZzOiBmYWlsZWQgdG8gbG9hZCBleHRlbnRzIGZpbGVcbiIpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2ZyZWVfdmhkcjsKIAl9CiAJc2JpLT5jYXRfdHJlZSA9IGhmc19idHJlZV9vcGVuKHNiLCBIRlNQTFVTX0NBVF9DTklEKTsKIAlpZiAoIXNiaS0+Y2F0X3RyZWUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGNhdGFsb2cgZmlsZVxuIik7Ci0JCWdvdG8gY2xlYW51cDsKKwkJZ290byBvdXRfY2xvc2VfZXh0X3RyZWU7CiAJfQogCiAJaW5vZGUgPSBoZnNwbHVzX2lnZXQoc2IsIEhGU1BMVVNfQUxMT0NfQ05JRCk7CiAJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIGFsbG9jYXRpb24gZmlsZVxuIik7CiAJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCQlnb3RvIGNsZWFudXA7CisJCWdvdG8gb3V0X2Nsb3NlX2NhdF90cmVlOwogCX0KIAlzYmktPmFsbG9jX2ZpbGUgPSBpbm9kZTsKIApAQCAtNDQyLDE0ICs0NDIsNyBAQAogCWlmIChJU19FUlIocm9vdCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJoZnM6IGZhaWxlZCB0byBsb2FkIHJvb3QgZGlyZWN0b3J5XG4iKTsKIAkJZXJyID0gUFRSX0VSUihyb290KTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQlzYi0+c19kX29wID0gJmhmc3BsdXNfZGVudHJ5X29wZXJhdGlvbnM7Ci0Jc2ItPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChyb290KTsKLQlpZiAoIXNiLT5zX3Jvb3QpIHsKLQkJaXB1dChyb290KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBjbGVhbnVwOworCQlnb3RvIG91dF9wdXRfYWxsb2NfZmlsZTsKIAl9CiAKIAlzdHIubGVuID0gc2l6ZW9mKEhGU1BfSElEREVORElSX05BTUUpIC0gMTsKQEAgLTQ1OSw0NiArNDUyLDY5IEBACiAJaWYgKCFoZnNfYnJlY19yZWFkKCZmZCwgJmVudHJ5LCBzaXplb2YoZW50cnkpKSkgewogCQloZnNfZmluZF9leGl0KCZmZCk7CiAJCWlmIChlbnRyeS50eXBlICE9IGNwdV90b19iZTE2KEhGU1BMVVNfRk9MREVSKSkKLQkJCWdvdG8gY2xlYW51cDsKKwkJCWdvdG8gb3V0X3B1dF9yb290OwogCQlpbm9kZSA9IGhmc3BsdXNfaWdldChzYiwgYmUzMl90b19jcHUoZW50cnkuZm9sZGVyLmlkKSk7CiAJCWlmIChJU19FUlIoaW5vZGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQkJCWdvdG8gY2xlYW51cDsKKwkJCWdvdG8gb3V0X3B1dF9yb290OwogCQl9CiAJCXNiaS0+aGlkZGVuX2RpciA9IGlub2RlOwogCX0gZWxzZQogCQloZnNfZmluZF9leGl0KCZmZCk7CiAKLQlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCi0JCWdvdG8gb3V0OworCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgeworCQkvKgorCQkgKiBIK0xYID09IGhmc3BsdXN1dGlscywgSCtMeCA9PSB0aGlzIGRyaXZlciwgSCtseCBpcyB1bnVzZWQKKwkJICogYWxsIHRocmVlIGFyZSByZWdpc3RlcmVkIHdpdGggQXBwbGUgZm9yIG91ciB1c2UKKwkJICovCisJCXZoZHItPmxhc3RfbW91bnRfdmVycyA9IGNwdV90b19iZTMyKEhGU1BfTU9VTlRfVkVSU0lPTik7CisJCXZoZHItPm1vZGlmeV9kYXRlID0gaGZzcF9ub3cybXQoKTsKKwkJYmUzMl9hZGRfY3B1KCZ2aGRyLT53cml0ZV9jb3VudCwgMSk7CisJCXZoZHItPmF0dHJpYnV0ZXMgJj0gY3B1X3RvX2JlMzIofkhGU1BMVVNfVk9MX1VOTU5UKTsKKwkJdmhkci0+YXR0cmlidXRlcyB8PSBjcHVfdG9fYmUzMihIRlNQTFVTX1ZPTF9JTkNOU1ROVCk7CisJCWhmc3BsdXNfc3luY19mcyhzYiwgMSk7CiAKLQkvKiBIK0xYID09IGhmc3BsdXN1dGlscywgSCtMeCA9PSB0aGlzIGRyaXZlciwgSCtseCBpcyB1bnVzZWQKLQkgKiBhbGwgdGhyZWUgYXJlIHJlZ2lzdGVyZWQgd2l0aCBBcHBsZSBmb3Igb3VyIHVzZQotCSAqLwotCXZoZHItPmxhc3RfbW91bnRfdmVycyA9IGNwdV90b19iZTMyKEhGU1BfTU9VTlRfVkVSU0lPTik7Ci0Jdmhkci0+bW9kaWZ5X2RhdGUgPSBoZnNwX25vdzJtdCgpOwotCWJlMzJfYWRkX2NwdSgmdmhkci0+d3JpdGVfY291bnQsIDEpOwotCXZoZHItPmF0dHJpYnV0ZXMgJj0gY3B1X3RvX2JlMzIofkhGU1BMVVNfVk9MX1VOTU5UKTsKLQl2aGRyLT5hdHRyaWJ1dGVzIHw9IGNwdV90b19iZTMyKEhGU1BMVVNfVk9MX0lOQ05TVE5UKTsKLQloZnNwbHVzX3N5bmNfZnMoc2IsIDEpOworCQlpZiAoIXNiaS0+aGlkZGVuX2RpcikgeworCQkJbXV0ZXhfbG9jaygmc2JpLT52aF9tdXRleCk7CisJCQlzYmktPmhpZGRlbl9kaXIgPSBoZnNwbHVzX25ld19pbm9kZShzYiwgU19JRkRJUik7CisJCQloZnNwbHVzX2NyZWF0ZV9jYXQoc2JpLT5oaWRkZW5fZGlyLT5pX2lubywgcm9vdCwgJnN0ciwKKwkJCQkJICAgc2JpLT5oaWRkZW5fZGlyKTsKKwkJCW11dGV4X3VubG9jaygmc2JpLT52aF9tdXRleCk7CiAKLQlpZiAoIXNiaS0+aGlkZGVuX2RpcikgewotCQltdXRleF9sb2NrKCZzYmktPnZoX211dGV4KTsKLQkJc2JpLT5oaWRkZW5fZGlyID0gaGZzcGx1c19uZXdfaW5vZGUoc2IsIFNfSUZESVIpOwotCQloZnNwbHVzX2NyZWF0ZV9jYXQoc2JpLT5oaWRkZW5fZGlyLT5pX2lubywgc2ItPnNfcm9vdC0+ZF9pbm9kZSwKLQkJCQkgICAmc3RyLCBzYmktPmhpZGRlbl9kaXIpOwotCQltdXRleF91bmxvY2soJnNiaS0+dmhfbXV0ZXgpOwotCi0JCWhmc3BsdXNfbWFya19pbm9kZV9kaXJ0eShzYmktPmhpZGRlbl9kaXIsIEhGU1BMVVNfSV9DQVRfRElSVFkpOworCQkJaGZzcGx1c19tYXJrX2lub2RlX2RpcnR5KHNiaS0+aGlkZGVuX2RpciwKKwkJCQkJCSBIRlNQTFVTX0lfQ0FUX0RJUlRZKTsKKwkJfQogCX0KLW91dDoKKworCXNiLT5zX2Rfb3AgPSAmaGZzcGx1c19kZW50cnlfb3BlcmF0aW9uczsKKwlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3QpOworCWlmICghc2ItPnNfcm9vdCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9wdXRfaGlkZGVuX2RpcjsKKwl9CisKIAl1bmxvYWRfbmxzKHNiaS0+bmxzKTsKIAlzYmktPm5scyA9IG5sczsKIAlyZXR1cm4gMDsKIAotY2xlYW51cDoKLQloZnNwbHVzX3B1dF9zdXBlcihzYik7CitvdXRfcHV0X2hpZGRlbl9kaXI6CisJaXB1dChzYmktPmhpZGRlbl9kaXIpOworb3V0X3B1dF9yb290OgorCWlwdXQoc2JpLT5hbGxvY19maWxlKTsKK291dF9wdXRfYWxsb2NfZmlsZToKKwlpcHV0KHNiaS0+YWxsb2NfZmlsZSk7CitvdXRfY2xvc2VfY2F0X3RyZWU6CisJaGZzX2J0cmVlX2Nsb3NlKHNiaS0+Y2F0X3RyZWUpOworb3V0X2Nsb3NlX2V4dF90cmVlOgorCWhmc19idHJlZV9jbG9zZShzYmktPmV4dF90cmVlKTsKK291dF9mcmVlX3ZoZHI6CisJa2ZyZWUoc2JpLT5zX3ZoZHIpOworCWtmcmVlKHNiaS0+c19iYWNrdXBfdmhkcik7CitvdXRfdW5sb2FkX25sczoKKwl1bmxvYWRfbmxzKHNiaS0+bmxzKTsKIAl1bmxvYWRfbmxzKG5scyk7CisJa2ZyZWUoc2JpKTsKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3dyYXBwZXIuYyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCmluZGV4IDE5NjIzMTcuLjMwMzFkODEgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvd3JhcHBlci5jCisrKyBiL2ZzL2hmc3BsdXMvd3JhcHBlci5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBjcHVfdG9fYmUxNihIRlNQX1dSQVBfTUFHSUMpOgogCQlpZiAoIWhmc3BsdXNfcmVhZF9tZGIoc2JpLT5zX3ZoZHIsICZ3ZCkpCi0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X2ZyZWVfYmFja3VwX3ZoZHI7CiAJCXdkLmFibGtfc2l6ZSA+Pj0gSEZTUExVU19TRUNUT1JfU0hJRlQ7CiAJCXBhcnRfc3RhcnQgKz0gd2QuYWJsa19zdGFydCArIHdkLmVtYmVkX3N0YXJ0ICogd2QuYWJsa19zaXplOwogCQlwYXJ0X3NpemUgPSB3ZC5lbWJlZF9jb3VudCAqIHdkLmFibGtfc2l6ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCQkgKiAoc2hvdWxkIGRvIHRoaXMgb25seSBmb3IgY2Ryb20vbG9vcCB0aG91Z2gpCiAJCSAqLwogCQlpZiAoaGZzX3BhcnRfZmluZChzYiwgJnBhcnRfc3RhcnQsICZwYXJ0X3NpemUpKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9mcmVlX2JhY2t1cF92aGRyOwogCQlnb3RvIHJlcmVhZDsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IGRhODVlNTYuLjA2NDdkODAgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMjk1LDYgKzI5NSwyMCBAQAogCQljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBpX2NhbGxiYWNrKTsKIH0KIAordm9pZCBhZGRyZXNzX3NwYWNlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwltZW1zZXQobWFwcGluZywgMCwgc2l6ZW9mKCptYXBwaW5nKSk7CisJSU5JVF9SQURJWF9UUkVFKCZtYXBwaW5nLT5wYWdlX3RyZWUsIEdGUF9BVE9NSUMpOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT50cmVlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7CisJSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJm1hcHBpbmctPmlfbW1hcCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOworCW11dGV4X2luaXQoJm1hcHBpbmctPnVubWFwX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0woYWRkcmVzc19zcGFjZV9pbml0X29uY2UpOworCiAvKgogICogVGhlc2UgYXJlIGluaXRpYWxpemF0aW9ucyB0aGF0IG9ubHkgbmVlZCB0byBiZSBkb25lCiAgKiBvbmNlLCBiZWNhdXNlIHRoZSBmaWVsZHMgYXJlIGlkZW1wb3RlbnQgYWNyb3NzIHVzZQpAQCAtMzA4LDEzICszMjIsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZpbm9kZS0+aV9kZXZpY2VzKTsKIAlJTklUX0xJU1RfSEVBRCgmaW5vZGUtPmlfd2JfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2xydSk7Ci0JSU5JVF9SQURJWF9UUkVFKCZpbm9kZS0+aV9kYXRhLnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmlub2RlLT5pX2RhdGEudHJlZV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfZGF0YS5pX21tYXBfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RhdGEucHJpdmF0ZV9saXN0KTsKLQlzcGluX2xvY2tfaW5pdCgmaW5vZGUtPmlfZGF0YS5wcml2YXRlX2xvY2spOwotCUlOSVRfUkFXX1BSSU9fVFJFRV9ST09UKCZpbm9kZS0+aV9kYXRhLmlfbW1hcCk7Ci0JSU5JVF9MSVNUX0hFQUQoJmlub2RlLT5pX2RhdGEuaV9tbWFwX25vbmxpbmVhcik7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UoJmlub2RlLT5pX2RhdGEpOwogCWlfc2l6ZV9vcmRlcmVkX2luaXQoaW5vZGUpOwogI2lmZGVmIENPTkZJR19GU05PVElGWQogCUlOSVRfSExJU1RfSEVBRCgmaW5vZGUtPmlfZnNub3RpZnlfbWFya3MpOwpAQCAtNTQwLDExICs1NDgsMTQgQEAKIC8qKgogICogaW52YWxpZGF0ZV9pbm9kZXMJLSBhdHRlbXB0IHRvIGZyZWUgYWxsIGlub2RlcyBvbiBhIHN1cGVyYmxvY2sKICAqIEBzYjoJCXN1cGVyYmxvY2sgdG8gb3BlcmF0ZSBvbgorICogQGtpbGxfZGlydHk6IGZsYWcgdG8gZ3VpZGUgaGFuZGxpbmcgb2YgZGlydHkgaW5vZGVzCiAgKgogICogQXR0ZW1wdHMgdG8gZnJlZSBhbGwgaW5vZGVzIGZvciBhIGdpdmVuIHN1cGVyYmxvY2suICBJZiB0aGVyZSB3ZXJlIGFueQogICogYnVzeSBpbm9kZXMgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUsIGVsc2UgemVyby4KKyAqIElmIEBraWxsX2RpcnR5IGlzIHNldCwgZGlzY2FyZCBkaXJ0eSBpbm9kZXMgdG9vLCBvdGhlcndpc2UgdHJlYXQKKyAqIHRoZW0gYXMgYnVzeS4KICAqLwotaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYm9vbCBraWxsX2RpcnR5KQogewogCWludCBidXN5ID0gMDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqbmV4dDsKQEAgLTU1Niw2ICs1NjcsMTAgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5vZGUsIG5leHQsICZzYi0+c19pbm9kZXMsIGlfc2JfbGlzdCkgewogCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiAoSV9ORVcgfCBJX0ZSRUVJTkcgfCBJX1dJTExfRlJFRSkpCiAJCQljb250aW51ZTsKKwkJaWYgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSAmJiAha2lsbF9kaXJ0eSkgeworCQkJYnVzeSA9IDE7CisJCQljb250aW51ZTsKKwkJfQogCQlpZiAoYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSkgewogCQkJYnVzeSA9IDE7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2ZzL2ludGVybmFsLmggYi9mcy9pbnRlcm5hbC5oCmluZGV4IDA2NjM1NjguLjliOTc2YjUgMTAwNjQ0Ci0tLSBhL2ZzL2ludGVybmFsLmgKKysrIGIvZnMvaW50ZXJuYWwuaApAQCAtMTEyLDQgKzExMiw0IEBACiAgKi8KIGV4dGVybiBpbnQgZ2V0X25yX2RpcnR5X2lub2Rlcyh2b2lkKTsKIGV4dGVybiB2b2lkIGV2aWN0X2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7Ci1leHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKK2V4dGVybiBpbnQgaW52YWxpZGF0ZV9pbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICosIGJvb2wpOwpkaWZmIC0tZ2l0IGEvZnMvaW9jdGwuYyBiL2ZzL2lvY3RsLmMKaW5kZXggYTU5NjM1ZS4uMWVlYmViNyAxMDA2NDQKLS0tIGEvZnMvaW9jdGwuYworKysgYi9mcy9pb2N0bC5jCkBAIC0yNzMsNiArMjczLDEzIEBACiAJCWxlbiA9IGlzaXplOwogCX0KIAorCS8qCisJICogU29tZSBmaWxlc3lzdGVtcyBjYW4ndCBkZWFsIHdpdGggYmVpbmcgYXNrZWQgdG8gbWFwIGxlc3MgdGhhbgorCSAqIGJsb2Nrc2l6ZSwgc28gbWFrZSBzdXJlIG91ciBsZW4gaXMgYXQgbGVhc3QgYmxvY2sgbGVuZ3RoLgorCSAqLworCWlmIChsb2dpY2FsX3RvX2Jsayhpbm9kZSwgbGVuKSA9PSAwKQorCQlsZW4gPSBibGtfdG9fbG9naWNhbChpbm9kZSwgMSk7CisKIAlzdGFydF9ibGsgPSBsb2dpY2FsX3RvX2Jsayhpbm9kZSwgc3RhcnQpOwogCWxhc3RfYmxrID0gbG9naWNhbF90b19ibGsoaW5vZGUsIHN0YXJ0ICsgbGVuIC0gMSk7CiAKZGlmZiAtLWdpdCBhL2ZzL2piZDIvam91cm5hbC5jIGIvZnMvamJkMi9qb3VybmFsLmMKaW5kZXggOWU0Njg2OS4uOTdlNzM0NiAxMDA2NDQKLS0tIGEvZnMvamJkMi9qb3VybmFsLmMKKysrIGIvZnMvamJkMi9qb3VybmFsLmMKQEAgLTQ3Myw3ICs0NzMsOCBAQAogfQogCiAvKgotICogQ2FsbGVkIHVuZGVyIGpfc3RhdGVfbG9jay4gIFJldHVybnMgdHJ1ZSBpZiBhIHRyYW5zYWN0aW9uIGNvbW1pdCB3YXMgc3RhcnRlZC4KKyAqIENhbGxlZCB3aXRoIGpfc3RhdGVfbG9jayBsb2NrZWQgZm9yIHdyaXRpbmcuCisgKiBSZXR1cm5zIHRydWUgaWYgYSB0cmFuc2FjdGlvbiBjb21taXQgd2FzIHN0YXJ0ZWQuCiAgKi8KIGludCBfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsX3QgKmpvdXJuYWwsIHRpZF90IHRhcmdldCkKIHsKQEAgLTUyMCwxMSArNTIxLDEzIEBACiB7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24gPSBOVUxMOwogCXRpZF90IHRpZDsKKwlpbnQgbmVlZF90b19zdGFydCA9IDA7CiAKIAlyZWFkX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJaWYgKGpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbiAmJiAhY3VycmVudC0+am91cm5hbF9pbmZvKSB7CiAJCXRyYW5zYWN0aW9uID0gam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uOwotCQlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOworCQlpZiAoIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdHJhbnNhY3Rpb24tPnRfdGlkKSkKKwkJCW5lZWRfdG9fc3RhcnQgPSAxOwogCX0gZWxzZSBpZiAoam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKQogCQl0cmFuc2FjdGlvbiA9IGpvdXJuYWwtPmpfY29tbWl0dGluZ190cmFuc2FjdGlvbjsKIApAQCAtNTM1LDYgKzUzOCw4IEBACiAKIAl0aWQgPSB0cmFuc2FjdGlvbi0+dF90aWQ7CiAJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJaWYgKG5lZWRfdG9fc3RhcnQpCisJCWpiZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0aWQpOwogCWpiZDJfbG9nX3dhaXRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKaW5kZXggZmFhZDJiZC4uMWQxMTkxMCAxMDA2NDQKLS0tIGEvZnMvamJkMi90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIHN0YXRpYyBpbnQgc3RhcnRfdGhpc19oYW5kbGUoam91cm5hbF90ICpqb3VybmFsLCBoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICBpbnQgZ2ZwX21hc2spCiB7Ci0JdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb247Ci0JaW50IG5lZWRlZDsKLQlpbnQgbmJsb2NrcyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKLQl0cmFuc2FjdGlvbl90ICpuZXdfdHJhbnNhY3Rpb24gPSBOVUxMOworCXRyYW5zYWN0aW9uX3QJKnRyYW5zYWN0aW9uLCAqbmV3X3RyYW5zYWN0aW9uID0gTlVMTDsKKwl0aWRfdAkJdGlkOworCWludAkJbmVlZGVkLCBuZWVkX3RvX3N0YXJ0OworCWludAkJbmJsb2NrcyA9IGhhbmRsZS0+aF9idWZmZXJfY3JlZGl0czsKIAogCWlmIChuYmxvY2tzID4gam91cm5hbC0+al9tYXhfdHJhbnNhY3Rpb25fYnVmZmVycykgewogCQlwcmludGsoS0VSTl9FUlIgIkpCRDogJXMgd2FudHMgdG9vIG1hbnkgY3JlZGl0cyAoJWQgPiAlZClcbiIsCkBAIC0yMjIsOCArMjIyLDExIEBACiAJCWF0b21pY19zdWIobmJsb2NrcywgJnRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMpOwogCQlwcmVwYXJlX3RvX3dhaXQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQsICZ3YWl0LAogCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJX19qYmQyX2xvZ19zdGFydF9jb21taXQoam91cm5hbCwgdHJhbnNhY3Rpb24tPnRfdGlkKTsKKwkJdGlkID0gdHJhbnNhY3Rpb24tPnRfdGlkOworCQluZWVkX3RvX3N0YXJ0ID0gIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdGlkKTsKIAkJcmVhZF91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CisJCWlmIChuZWVkX3RvX3N0YXJ0KQorCQkJamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAJCXNjaGVkdWxlKCk7CiAJCWZpbmlzaF93YWl0KCZqb3VybmFsLT5qX3dhaXRfdHJhbnNhY3Rpb25fbG9ja2VkLCAmd2FpdCk7CiAJCWdvdG8gcmVwZWF0OwpAQCAtNDQyLDcgKzQ0NSw4IEBACiB7CiAJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24gPSBoYW5kbGUtPmhfdHJhbnNhY3Rpb247CiAJam91cm5hbF90ICpqb3VybmFsID0gdHJhbnNhY3Rpb24tPnRfam91cm5hbDsKLQlpbnQgcmV0OworCXRpZF90CQl0aWQ7CisJaW50CQluZWVkX3RvX3N0YXJ0LCByZXQ7CiAKIAkvKiBJZiB3ZSd2ZSBoYWQgYW4gYWJvcnQgb2YgYW55IHR5cGUsIGRvbid0IGV2ZW4gdGhpbmsgYWJvdXQKIAkgKiBhY3R1YWxseSBkb2luZyB0aGUgcmVzdGFydCEgKi8KQEAgLTQ2NSw4ICs0NjksMTEgQEAKIAlzcGluX3VubG9jaygmdHJhbnNhY3Rpb24tPnRfaGFuZGxlX2xvY2spOwogCiAJamJkX2RlYnVnKDIsICJyZXN0YXJ0aW5nIGhhbmRsZSAlcFxuIiwgaGFuZGxlKTsKLQlfX2piZDJfbG9nX3N0YXJ0X2NvbW1pdChqb3VybmFsLCB0cmFuc2FjdGlvbi0+dF90aWQpOworCXRpZCA9IHRyYW5zYWN0aW9uLT50X3RpZDsKKwluZWVkX3RvX3N0YXJ0ID0gIXRpZF9nZXEoam91cm5hbC0+al9jb21taXRfcmVxdWVzdCwgdGlkKTsKIAlyZWFkX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKKwlpZiAobmVlZF90b19zdGFydCkKKwkJamJkMl9sb2dfc3RhcnRfY29tbWl0KGpvdXJuYWwsIHRpZCk7CiAKIAlsb2NrX21hcF9yZWxlYXNlKCZoYW5kbGUtPmhfbG9ja2RlcF9tYXApOwogCWhhbmRsZS0+aF9idWZmZXJfY3JlZGl0cyA9IG5ibG9ja3M7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9ob3N0LmMgYi9mcy9sb2NrZC9ob3N0LmMKaW5kZXggNWYxYmNiMi4uYjdjOTliZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvaG9zdC5jCisrKyBiL2ZzL2xvY2tkL2hvc3QuYwpAQCAtNTIwLDcgKzUyMCw3IEBACiAJCQkJCXN0cnVjdCBuc21faGFuZGxlICpuc20sCiAJCQkJCWNvbnN0IHN0cnVjdCBubG1fcmVib290ICppbmZvKQogewotCXN0cnVjdCBubG1faG9zdCAqaG9zdCA9IE5VTEw7CisJc3RydWN0IG5sbV9ob3N0ICpob3N0OwogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwogCkBAIC01MzIsMTIgKzUzMiwxMyBAQAogCQkJaG9zdC0+aF9zdGF0ZSsrOwogCiAJCQlubG1fZ2V0X2hvc3QoaG9zdCk7Ci0JCQlnb3RvIG91dDsKKwkJCW11dGV4X3VubG9jaygmbmxtX2hvc3RfbXV0ZXgpOworCQkJcmV0dXJuIGhvc3Q7CiAJCX0KIAl9Ci1vdXQ6CisKIAltdXRleF91bmxvY2soJm5sbV9ob3N0X211dGV4KTsKLQlyZXR1cm4gaG9zdDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9taW5peC9uYW1laS5jIGIvZnMvbWluaXgvbmFtZWkuYwppbmRleCBjZTczMzdkLi42ZTY3NzdmIDEwMDY0NAotLS0gYS9mcy9taW5peC9uYW1laS5jCisrKyBiL2ZzL21pbml4L25hbWVpLmMKQEAgLTIxMyw3ICsyMTMsNiBAQAogCQluZXdfZGUgPSBtaW5peF9maW5kX2VudHJ5KG5ld19kZW50cnksICZuZXdfcGFnZSk7CiAJCWlmICghbmV3X2RlKQogCQkJZ290byBvdXRfZGlyOwotCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQltaW5peF9zZXRfbGluayhuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQpAQCAtMjI1LDE4ICsyMjQsMTUgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IGluZm8tPnNfbGlua19tYXgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IG1pbml4X2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCX0KIAkJaWYgKGRpcl9kZSkKIAkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KIAogCW1pbml4X2RlbGV0ZV9lbnRyeShvbGRfZGUsIG9sZF9wYWdlKTsKLQlpbm9kZV9kZWNfbGlua19jb3VudChvbGRfaW5vZGUpOworCW1hcmtfaW5vZGVfZGlydHkob2xkX2lub2RlKTsKIAogCWlmIChkaXJfZGUpIHsKIAkJbWluaXhfc2V0X2xpbmsoZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA3ZDc3ZjI0Li4wMDg3Y2Y5IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTQ1NSwxNCArNDU1LDYgQEAKIAlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOwogCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IG5kLT5wYXRoLmRlbnRyeTsKIAotCS8qCi0JICogSXQgY2FuIGJlIHBvc3NpYmxlIHRvIHJldmFsaWRhdGUgdGhlIGRlbnRyeSB0aGF0IHdlIHN0YXJ0ZWQKLQkgKiB0aGUgcGF0aCB3YWxrIHdpdGguIGZvcmNlX3JldmFsX3BhdGggbWF5IGFsc28gcmV2YWxpZGF0ZSB0aGUKLQkgKiBkZW50cnkgYWxyZWFkeSBjb21taXR0ZWQgdG8gdGhlIG5hbWVpZGF0YS4KLQkgKi8KLQlpZiAodW5saWtlbHkocGFyZW50ID09IGRlbnRyeSkpCi0JCXJldHVybiBuYW1laWRhdGFfZHJvcF9yY3UobmQpOwotCiAJQlVHX09OKCEobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkpOwogCWlmIChuZC0+cm9vdC5tbnQpIHsKIAkJc3Bpbl9sb2NrKCZmcy0+bG9jayk7CkBAIC01NjEsMzkgKzU1MywyNSBAQAogICovCiB2b2lkIHJlbGVhc2Vfb3Blbl9pbnRlbnQoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaWYgKG5kLT5pbnRlbnQub3Blbi5maWxlLT5mX3BhdGguZGVudHJ5ID09IE5VTEwpCi0JCXB1dF9maWxwKG5kLT5pbnRlbnQub3Blbi5maWxlKTsKLQllbHNlCi0JCWZwdXQobmQtPmludGVudC5vcGVuLmZpbGUpOwotfQorCXN0cnVjdCBmaWxlICpmaWxlID0gbmQtPmludGVudC5vcGVuLmZpbGU7CiAKLS8qCi0gKiBDYWxsIGRfcmV2YWxpZGF0ZSBhbmQgaGFuZGxlIGZpbGVzeXN0ZW1zIHRoYXQgcmVxdWVzdCByY3Utd2FsawotICogdG8gYmUgZHJvcHBlZC4gVGhpcyBtYXkgYmUgY2FsbGVkIGFuZCByZXR1cm4gaW4gcmN1LXdhbGsgbW9kZSwKLSAqIHJlZ2FyZGxlc3Mgb2Ygc3VjY2VzcyBvciBlcnJvci4gSWYgLUVDSElMRCBpcyByZXR1cm5lZCwgdGhlIGNhbGxlcgotICogbXVzdCByZXR1cm4gLUVDSElMRCBiYWNrIHVwIHRoZSBwYXRoIHdhbGsgc3RhY2sgc28gcGF0aCB3YWxrIG1heQotICogYmUgcmVzdGFydGVkIGluIHJlZi13YWxrIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQgZF9yZXZhbGlkYXRlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0JaW50IHN0YXR1czsKLQotCXN0YXR1cyA9IGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOwotCWlmIChzdGF0dXMgPT0gLUVDSElMRCkgewotCQlpZiAobmFtZWlkYXRhX2RlbnRyeV9kcm9wX3JjdShuZCwgZGVudHJ5KSkKLQkJCXJldHVybiBzdGF0dXM7Ci0JCXN0YXR1cyA9IGRlbnRyeS0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWlmIChmaWxlICYmICFJU19FUlIoZmlsZSkpIHsKKwkJaWYgKGZpbGUtPmZfcGF0aC5kZW50cnkgPT0gTlVMTCkKKwkJCXB1dF9maWxwKGZpbGUpOworCQllbHNlCisJCQlmcHV0KGZpbGUpOwogCX0KLQotCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqCitzdGF0aWMgaW5saW5lIGludCBkX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICoKIGRvX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWludCBzdGF0dXMgPSBkX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CiAJaWYgKHVubGlrZWx5KHN0YXR1cyA8PSAwKSkgewogCQkvKgogCQkgKiBUaGUgZGVudHJ5IGZhaWxlZCB2YWxpZGF0aW9uLgpAQCAtNjAyLDI0ICs1ODAsMzkgQEAKIAkJICogdG8gcmV0dXJuIGEgZmFpbCBzdGF0dXMuCiAJCSAqLwogCQlpZiAoc3RhdHVzIDwgMCkgewotCQkJLyogSWYgd2UncmUgaW4gcmN1LXdhbGssIHdlIGRvbid0IGhhdmUgYSByZWYgKi8KLQkJCWlmICghKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQotCQkJCWRwdXQoZGVudHJ5KTsKKwkJCWRwdXQoZGVudHJ5KTsKIAkJCWRlbnRyeSA9IEVSUl9QVFIoc3RhdHVzKTsKLQotCQl9IGVsc2UgewotCQkJLyogRG9uJ3QgZF9pbnZhbGlkYXRlIGluIHJjdS13YWxrIG1vZGUgKi8KLQkJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBkZW50cnkpKQotCQkJCXJldHVybiBFUlJfUFRSKC1FQ0hJTEQpOwotCQkJaWYgKCFkX2ludmFsaWRhdGUoZGVudHJ5KSkgewotCQkJCWRwdXQoZGVudHJ5KTsKLQkJCQlkZW50cnkgPSBOVUxMOwotCQkJfQorCQl9IGVsc2UgaWYgKCFkX2ludmFsaWRhdGUoZGVudHJ5KSkgeworCQkJZHB1dChkZW50cnkpOworCQkJZGVudHJ5ID0gTlVMTDsKIAkJfQogCX0KIAlyZXR1cm4gZGVudHJ5OwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKgorZG9fcmV2YWxpZGF0ZV9yY3Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpbnQgc3RhdHVzID0gZF9yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWlmIChsaWtlbHkoc3RhdHVzID4gMCkpCisJCXJldHVybiBkZW50cnk7CisJaWYgKHN0YXR1cyA9PSAtRUNISUxEKSB7CisJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVDSElMRCk7CisJCXJldHVybiBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoc3RhdHVzKTsKKwkvKiBEb24ndCBkX2ludmFsaWRhdGUgaW4gcmN1LXdhbGsgbW9kZSAqLworCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1KG5kLCBkZW50cnkpKQorCQlyZXR1cm4gRVJSX1BUUigtRUNISUxEKTsKKwlpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7CisJCWRwdXQoZGVudHJ5KTsKKwkJZGVudHJ5ID0gTlVMTDsKKwl9CisJcmV0dXJuIGRlbnRyeTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgbmVlZF9yZXZhbF9kb3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlmIChsaWtlbHkoIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkpKQpAQCAtNjY0LDkgKzY1Nyw2IEBACiAJCXJldHVybiAwOwogCiAJaWYgKCFzdGF0dXMpIHsKLQkJLyogRG9uJ3QgZF9pbnZhbGlkYXRlIGluIHJjdS13YWxrIG1vZGUgKi8KLQkJaWYgKG5hbWVpZGF0YV9kcm9wX3JjdShuZCkpCi0JCQlyZXR1cm4gLUVDSElMRDsKIAkJZF9pbnZhbGlkYXRlKGRlbnRyeSk7CiAJCXN0YXR1cyA9IC1FU1RBTEU7CiAJfQpAQCAtNzczLDYgKzc2Myw4IEBACiAJaW50IGVycm9yOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGxpbmstPmRlbnRyeTsKIAorCUJVR19PTihuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKTsKKwogCXRvdWNoX2F0aW1lKGxpbmstPm1udCwgZGVudHJ5KTsKIAluZF9zZXRfbGluayhuZCwgTlVMTCk7CiAKQEAgLTgwMywxMCArNzk1LDE2IEBACiAgKiBXaXRob3V0IHRoYXQga2luZCBvZiB0b3RhbCBsaW1pdCwgbmFzdHkgY2hhaW5zIG9mIGNvbnNlY3V0aXZlCiAgKiBzeW1saW5rcyBjYW4gY2F1c2UgYWxtb3N0IGFyYml0cmFyaWx5IGxvbmcgbG9va3Vwcy4gCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGRvX2ZvbGxvd19saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3N0YXRpYyBpbmxpbmUgaW50IGRvX2ZvbGxvd19saW5rKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAl2b2lkICpjb29raWU7CiAJaW50IGVyciA9IC1FTE9PUDsKKworCS8qIFdlIGRyb3AgcmN1LXdhbGsgaGVyZSAqLworCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBwYXRoLT5kZW50cnkpKQorCQlyZXR1cm4gLUVDSElMRDsKKwlCVUdfT04oaW5vZGUgIT0gcGF0aC0+ZGVudHJ5LT5kX2lub2RlKTsKKwogCWlmIChjdXJyZW50LT5saW5rX2NvdW50ID49IE1BWF9ORVNURURfTElOS1MpCiAJCWdvdG8gbG9vcDsKIAlpZiAoY3VycmVudC0+dG90YWxfbGlua19jb3VudCA+PSA0MCkKQEAgLTEyNTEsOSArMTI0OSwxNSBAQAogCQkJcmV0dXJuIC1FQ0hJTEQ7CiAKIAkJbmQtPnNlcSA9IHNlcTsKLQkJaWYgKGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKQotCQkJZ290byBuZWVkX3JldmFsaWRhdGU7Ci1kb25lMjoKKwkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9PUF9SRVZBTElEQVRFKSkgeworCQkJZGVudHJ5ID0gZG9fcmV2YWxpZGF0ZV9yY3UoZGVudHJ5LCBuZCk7CisJCQlpZiAoIWRlbnRyeSkKKwkJCQlnb3RvIG5lZWRfbG9va3VwOworCQkJaWYgKElTX0VSUihkZW50cnkpKQorCQkJCWdvdG8gZmFpbDsKKwkJCWlmICghKG5kLT5mbGFncyAmIExPT0tVUF9SQ1UpKQorCQkJCWdvdG8gZG9uZTsKKwkJfQogCQlwYXRoLT5tbnQgPSBtbnQ7CiAJCXBhdGgtPmRlbnRyeSA9IGRlbnRyeTsKIAkJaWYgKGxpa2VseShfX2ZvbGxvd19tb3VudF9yY3UobmQsIHBhdGgsIGlub2RlLCBmYWxzZSkpKQpAQCAtMTI2Niw4ICsxMjcwLDEzIEBACiAJaWYgKCFkZW50cnkpCiAJCWdvdG8gbmVlZF9sb29rdXA7CiBmb3VuZDoKLQlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX09QX1JFVkFMSURBVEUpCi0JCWdvdG8gbmVlZF9yZXZhbGlkYXRlOworCWlmICh1bmxpa2VseShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfT1BfUkVWQUxJREFURSkpIHsKKwkJZGVudHJ5ID0gZG9fcmV2YWxpZGF0ZShkZW50cnksIG5kKTsKKwkJaWYgKCFkZW50cnkpCisJCQlnb3RvIG5lZWRfbG9va3VwOworCQlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCQlnb3RvIGZhaWw7CisJfQogZG9uZToKIAlwYXRoLT5tbnQgPSBtbnQ7CiAJcGF0aC0+ZGVudHJ5ID0gZGVudHJ5OwpAQCAtMTMwOSwxNiArMTMxOCw2IEBACiAJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWdvdG8gZm91bmQ7CiAKLW5lZWRfcmV2YWxpZGF0ZToKLQlkZW50cnkgPSBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOwotCWlmICghZGVudHJ5KQotCQlnb3RvIG5lZWRfbG9va3VwOwotCWlmIChJU19FUlIoZGVudHJ5KSkKLQkJZ290byBmYWlsOwotCWlmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKQotCQlnb3RvIGRvbmUyOwotCWdvdG8gZG9uZTsKLQogZmFpbDoKIAlyZXR1cm4gUFRSX0VSUihkZW50cnkpOwogfQpAQCAtMTQxNSwxMSArMTQxNCw3IEBACiAJCQlnb3RvIG91dF9kcHV0OwogCiAJCWlmIChpbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspIHsKLQkJCS8qIFdlIGNvbW1vbmx5IGRyb3AgcmN1LXdhbGsgaGVyZSAqLwotCQkJaWYgKG5hbWVpZGF0YV9kZW50cnlfZHJvcF9yY3VfbWF5YmUobmQsIG5leHQuZGVudHJ5KSkKLQkJCQlyZXR1cm4gLUVDSElMRDsKLQkJCUJVR19PTihpbm9kZSAhPSBuZXh0LmRlbnRyeS0+ZF9pbm9kZSk7Ci0JCQllcnIgPSBkb19mb2xsb3dfbGluaygmbmV4dCwgbmQpOworCQkJZXJyID0gZG9fZm9sbG93X2xpbmsoaW5vZGUsICZuZXh0LCBuZCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gcmV0dXJuX2VycjsKIAkJCW5kLT5pbm9kZSA9IG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKQEAgLTE0NjMsMTAgKzE0NTgsNyBAQAogCQkJYnJlYWs7CiAJCWlmIChpbm9kZSAmJiB1bmxpa2VseShpbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspICYmCiAJCSAgICAobG9va3VwX2ZsYWdzICYgTE9PS1VQX0ZPTExPVykpIHsKLQkJCWlmIChuYW1laWRhdGFfZGVudHJ5X2Ryb3BfcmN1X21heWJlKG5kLCBuZXh0LmRlbnRyeSkpCi0JCQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JCQlCVUdfT04oaW5vZGUgIT0gbmV4dC5kZW50cnktPmRfaW5vZGUpOwotCQkJZXJyID0gZG9fZm9sbG93X2xpbmsoJm5leHQsIG5kKTsKKwkJCWVyciA9IGRvX2ZvbGxvd19saW5rKGlub2RlLCAmbmV4dCwgbmQpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIHJldHVybl9lcnI7CiAJCQluZC0+aW5vZGUgPSBuZC0+cGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC0xNTAwLDEyICsxNDkyLDE1IEBACiAJCSAqIFdlIG1heSBuZWVkIHRvIGNoZWNrIHRoZSBjYWNoZWQgZGVudHJ5IGZvciBzdGFsZW5lc3MuCiAJCSAqLwogCQlpZiAobmVlZF9yZXZhbF9kb3QobmQtPnBhdGguZGVudHJ5KSkgeworCQkJaWYgKG5hbWVpZGF0YV9kcm9wX3JjdV9sYXN0X21heWJlKG5kKSkKKwkJCQlyZXR1cm4gLUVDSElMRDsKIAkJCS8qIE5vdGU6IHdlIGRvIG5vdCBkX2ludmFsaWRhdGUoKSAqLwogCQkJZXJyID0gZF9yZXZhbGlkYXRlKG5kLT5wYXRoLmRlbnRyeSwgbmQpOwogCQkJaWYgKCFlcnIpCiAJCQkJZXJyID0gLUVTVEFMRTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWJyZWFrOworCQkJcmV0dXJuIDA7CiAJCX0KIHJldHVybl9iYXNlOgogCQlpZiAobmFtZWlkYXRhX2Ryb3BfcmN1X2xhc3RfbWF5YmUobmQpKQpAQCAtMjI2NSw4ICsyMjYwLDYgQEAKIAlyZXR1cm4gZmlscDsKIAogZXhpdDoKLQlpZiAoIUlTX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSkpCi0JCXJlbGVhc2Vfb3Blbl9pbnRlbnQobmQpOwogCXBhdGhfcHV0KCZuZC0+cGF0aCk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQpAQCAtMjM4OSw4ICsyMzgyLDYgQEAKIGV4aXRfZHB1dDoKIAlwYXRoX3B1dF9jb25kaXRpb25hbChwYXRoLCBuZCk7CiBleGl0OgotCWlmICghSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CiAJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiB9CkBAIC0yNDc3LDYgKzI0NjgsNyBAQAogCX0KIAlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQucGF0aC5kZW50cnkpOwogCWZpbHAgPSBmaW5pc2hfb3BlbigmbmQsIG9wZW5fZmxhZywgYWNjX21vZGUpOworCXJlbGVhc2Vfb3Blbl9pbnRlbnQoJm5kKTsKIAlyZXR1cm4gZmlscDsKIAogY3JlYXQ6CkBAIC0yNTUzLDYgKzI1NDUsNyBAQAogCQlwYXRoX3B1dCgmbmQucm9vdCk7CiAJaWYgKGZpbHAgPT0gRVJSX1BUUigtRVNUQUxFKSAmJiAhKGZsYWdzICYgTE9PS1VQX1JFVkFMKSkKIAkJZ290byByZXZhbDsKKwlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CiAJcmV0dXJuIGZpbHA7CiAKIGV4aXRfZHB1dDoKQEAgLTI1NjAsOCArMjU1Myw2IEBACiBvdXRfcGF0aDoKIAlwYXRoX3B1dCgmbmQucGF0aCk7CiBvdXRfZmlscDoKLQlpZiAoIUlTX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKSkKLQkJcmVsZWFzZV9vcGVuX2ludGVudCgmbmQpOwogCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKIAlnb3RvIG91dDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggN2IwYjk1My4uZDFlZGYyNiAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTEyNDQsNyArMTI0NCw3IEBACiAJCSAqLwogCQlicl93cml0ZV9sb2NrKHZmc21vdW50X2xvY2spOwogCQlpZiAobW50X2dldF9jb3VudChtbnQpICE9IDIpIHsKLQkJCWJyX3dyaXRlX2xvY2sodmZzbW91bnRfbG9jayk7CisJCQlicl93cml0ZV91bmxvY2sodmZzbW91bnRfbG9jayk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWJyX3dyaXRlX3VubG9jayh2ZnNtb3VudF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5jIGIvZnMvbmZzL2NhbGxiYWNrLmMKaW5kZXggMTk5MDE2NS4uZTNkMjk0MiAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmMKQEAgLTEzNSwzMyArMTM1LDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogLyoKLSAqICAqIENCX1NFUVVFTkNFIG9wZXJhdGlvbnMgd2lsbCBmYWlsIHVudGlsIHRoZSBjYWxsYmFjayBzZXNzaW9uaWQgaXMgc2V0LgotICogICAqLwotaW50IG5mczRfc2V0X2NhbGxiYWNrX3Nlc3Npb25pZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQotewotCXN0cnVjdCBzdmNfc2VydiAqc2VydiA9IGNscC0+Y2xfcnBjY2xpZW50LT5jbF94cHJ0LT5iY19zZXJ2OwotCXN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfc2lkOwotCi0JaWYgKCFzZXJ2LT5zdl9iY194cHJ0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCS8qIG9uIHN1Y2Nlc3MgZnJlZWQgaW4geHBydF9mcmVlICovCi0JYmNfc2lkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mczRfc2Vzc2lvbmlkKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFiY19zaWQpCi0JCXJldHVybiAtRU5PTUVNOwotCW1lbWNweShiY19zaWQtPmRhdGEsICZjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKLQkJTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7Ci0Jc3Bpbl9sb2NrX2JoKCZzZXJ2LT5zdl9jYl9sb2NrKTsKLQlzZXJ2LT5zdl9iY194cHJ0LT54cHRfYmNfc2lkID0gYmNfc2lkOwotCXNwaW5fdW5sb2NrX2JoKCZzZXJ2LT5zdl9jYl9sb2NrKTsKLQlkcHJpbnRrKCIlcyBzZXQgeHB0X2JjX3NpZD0ldToldToldToldSBmb3Igc3ZfYmNfeHBydCAlcFxuIiwgX19mdW5jX18sCi0JCSgodTMyICopYmNfc2lkLT5kYXRhKVswXSwgKCh1MzIgKiliY19zaWQtPmRhdGEpWzFdLAotCQkoKHUzMiAqKWJjX3NpZC0+ZGF0YSlbMl0sICgodTMyICopYmNfc2lkLT5kYXRhKVszXSwKLQkJc2Vydi0+c3ZfYmNfeHBydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBUaGUgY2FsbGJhY2sgc2VydmljZSBmb3IgTkZTdjQuMSBjYWxsYmFja3MKICAqLwogc3RhdGljIGludApAQCAtMjY2LDEwICsyMzksNiBAQAogCQlzdHJ1Y3QgbmZzX2NhbGxiYWNrX2RhdGEgKmNiX2luZm8pCiB7CiB9Ci1pbnQgbmZzNF9zZXRfY2FsbGJhY2tfc2Vzc2lvbmlkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0JcmV0dXJuIDA7Ci19CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIC8qCkBAIC0zNTksNzggKzMyOCw1OCBAQAogCW11dGV4X3VubG9jaygmbmZzX2NhbGxiYWNrX211dGV4KTsKIH0KIAotc3RhdGljIGludCBjaGVja19nc3NfY2FsbGJhY2tfcHJpbmNpcGFsKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCQkJCXN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCisvKiBCb29sZWFuIGNoZWNrIG9mIFJQQ19BVVRIX0dTUyBwcmluY2lwYWwgKi8KK2ludAorY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQogewogCXN0cnVjdCBycGNfY2xudCAqciA9IGNscC0+Y2xfcnBjY2xpZW50OwogCWNoYXIgKnAgPSBzdmNfZ3NzX3ByaW5jaXBhbChycXN0cCk7CiAKKwlpZiAocnFzdHAtPnJxX2F1dGhvcC0+Zmxhdm91ciAhPSBSUENfQVVUSF9HU1MpCisJCXJldHVybiAxOworCiAJLyogTm8gUlBDX0FVVEhfR1NTIG9uIE5GU3Y0LjEgYmFjayBjaGFubmVsIHlldCAqLwogCWlmIChjbHAtPmNsX21pbm9ydmVyc2lvbiAhPSAwKQotCQlyZXR1cm4gU1ZDX0RST1A7CisJCXJldHVybiAwOwogCS8qCiAJICogSXQgbWlnaHQganVzdCBiZSBhIG5vcm1hbCB1c2VyIHByaW5jaXBhbCwgaW4gd2hpY2ggY2FzZQogCSAqIHVzZXJzcGFjZSB3b24ndCBib3RoZXIgdG8gdGVsbCB1cyB0aGUgbmFtZSBhdCBhbGwuCiAJICovCiAJaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIFNWQ19ERU5JRUQ7CisJCXJldHVybiAwOwogCiAJLyogRXhwZWN0IGEgR1NTX0NfTlRfSE9TVEJBU0VEX05BTUUgbGlrZSAibmZzQHNlcnZlcmhvc3RuYW1lIiAqLwogCiAJaWYgKG1lbWNtcChwLCAibmZzQCIsIDQpICE9IDApCi0JCXJldHVybiBTVkNfREVOSUVEOworCQlyZXR1cm4gMDsKIAlwICs9IDQ7CiAJaWYgKHN0cmNtcChwLCByLT5jbF9zZXJ2ZXIpICE9IDApCi0JCXJldHVybiBTVkNfREVOSUVEOwotCXJldHVybiBTVkNfT0s7CisJCXJldHVybiAwOworCXJldHVybiAxOwogfQogCi0vKiBwZ19hdXRoZW50aWNhdGUgbWV0aG9kIGhlbHBlciAqLwotc3RhdGljIHN0cnVjdCBuZnNfY2xpZW50ICpuZnNfY2JfZmluZF9jbGllbnQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNlc3Npb25pZCA9IGJjX3hwcnRfc2lkKHJxc3RwKTsKLQlpbnQgaXNfY2JfY29tcG91bmQgPSBycXN0cC0+cnFfcHJvYyA9PSBDQl9DT01QT1VORCA/IDEgOiAwOwotCi0JZHByaW50aygiLS0+ICVzIHJxX3Byb2MgJWRcbiIsIF9fZnVuY19fLCBycXN0cC0+cnFfcHJvYyk7Ci0JaWYgKHN2Y19pc19iYWNrY2hhbm5lbChycXN0cCkpCi0JCS8qIFNlc3Npb25pZCAodXN1YWxseSkgc2V0IGFmdGVyIENCX05VTEwgcGluZyAqLwotCQlyZXR1cm4gbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoc3ZjX2FkZHIocnFzdHApLCBzZXNzaW9uaWQsCi0JCQkJCQkgIGlzX2NiX2NvbXBvdW5kKTsKLQllbHNlCi0JCS8qIE5vIGNhbGxiYWNrIGlkZW50aWZpZXIgaW4gcGdfYXV0aGVudGljYXRlICovCi0JCXJldHVybiBuZnM0X2ZpbmRfY2xpZW50X25vX2lkZW50KHN2Y19hZGRyKHJxc3RwKSk7Ci19Ci0KLS8qIHBnX2F1dGhlbnRpY2F0ZSBtZXRob2QgZm9yIG5mc3Y0IGNhbGxiYWNrIHRocmVhZHMuICovCisvKgorICogcGdfYXV0aGVudGljYXRlIG1ldGhvZCBmb3IgbmZzdjQgY2FsbGJhY2sgdGhyZWFkcy4KKyAqCisgKiBUaGUgYXV0aGZsYXZvciBoYXMgYmVlbiBuZWdvdGlhdGVkLCBzbyBhbiBpbmNvcnJlY3QgZmxhdm9yIGlzIGEgc2VydmVyCisgKiBidWcuIERyb3AgcGFja2V0cyB3aXRoIGluY29ycmVjdCBhdXRoZmxhdm9yLgorICoKKyAqIEFsbCBvdGhlciBjaGVja2luZyBkb25lIGFmdGVyIE5GUyBkZWNvZGluZyB3aGVyZSB0aGUgbmZzX2NsaWVudCBjYW4gYmUKKyAqIGZvdW5kIGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQKKyAqLwogc3RhdGljIGludCBuZnNfY2FsbGJhY2tfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0Jc3RydWN0IG5mc19jbGllbnQgKmNscDsKLQlSUENfSUZERUJVRyhjaGFyIGJ1ZltSUENfTUFYX0FERFJCVUZMRU5dKTsKLQlpbnQgcmV0ID0gU1ZDX09LOwotCi0JLyogRG9uJ3QgdGFsayB0byBzdHJhbmdlcnMgKi8KLQljbHAgPSBuZnNfY2JfZmluZF9jbGllbnQocnFzdHApOwotCWlmIChjbHAgPT0gTlVMTCkKLQkJcmV0dXJuIFNWQ19EUk9QOwotCi0JZHByaW50aygiJXM6ICVzIE5GU3Y0IGNhbGxiYWNrIVxuIiwgX19mdW5jX18sCi0JCQlzdmNfcHJpbnRfYWRkcihycXN0cCwgYnVmLCBzaXplb2YoYnVmKSkpOwotCiAJc3dpdGNoIChycXN0cC0+cnFfYXV0aG9wLT5mbGF2b3VyKSB7Ci0JCWNhc2UgUlBDX0FVVEhfTlVMTDoKLQkJCWlmIChycXN0cC0+cnFfcHJvYyAhPSBDQl9OVUxMKQotCQkJCXJldCA9IFNWQ19ERU5JRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSUENfQVVUSF9VTklYOgotCQkJYnJlYWs7Ci0JCWNhc2UgUlBDX0FVVEhfR1NTOgotCQkJcmV0ID0gY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChjbHAsIHJxc3RwKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0ID0gU1ZDX0RFTklFRDsKKwljYXNlIFJQQ19BVVRIX05VTEw6CisJCWlmIChycXN0cC0+cnFfcHJvYyAhPSBDQl9OVUxMKQorCQkJcmV0dXJuIFNWQ19EUk9QOworCQlicmVhazsKKwljYXNlIFJQQ19BVVRIX0dTUzoKKwkJLyogTm8gUlBDX0FVVEhfR1NTIHN1cHBvcnQgeWV0IGluIE5GU3Y0LjEgKi8KKwkJIGlmIChzdmNfaXNfYmFja2NoYW5uZWwocnFzdHApKQorCQkJcmV0dXJuIFNWQ19EUk9QOwogCX0KLQluZnNfcHV0X2NsaWVudChjbHApOwotCXJldHVybiByZXQ7CisJcmV0dXJuIFNWQ19PSzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFjay5oIGIvZnMvbmZzL2NhbGxiYWNrLmgKaW5kZXggZDNiNDRmOS4uNDZkOTNjZSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrLmgKKysrIGIvZnMvbmZzL2NhbGxiYWNrLmgKQEAgLTcsNiArNyw3IEBACiAgKi8KICNpZm5kZWYgX19MSU5VWF9GU19ORlNfQ0FMTEJBQ0tfSAogI2RlZmluZSBfX0xJTlVYX0ZTX05GU19DQUxMQkFDS19ICisjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogCiAjZGVmaW5lIE5GUzRfQ0FMTEJBQ0sgMHg0MDAwMDAwMAogI2RlZmluZSBORlM0X0NBTExCQUNLX1hEUlNJWkUgMjA0OApAQCAtMzcsNyArMzgsNiBAQAogc3RydWN0IGNiX3Byb2Nlc3Nfc3RhdGUgewogCV9fYmUzMgkJCWRyY19zdGF0dXM7CiAJc3RydWN0IG5mc19jbGllbnQJKmNscDsKLQlzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQJKnN2Y19zaWQ7IC8qIHY0LjEgY2FsbGJhY2sgc2VydmljZSBzZXNzaW9uaWQgKi8KIH07CiAKIHN0cnVjdCBjYl9jb21wb3VuZF9oZHJfYXJnIHsKQEAgLTE2OCw3ICsxNjgsNyBAQAogZXh0ZXJuIHZvaWQgbmZzNF9jaGVja19kcmFpbl9iY19jb21wbGV0ZShzdHJ1Y3QgbmZzNF9zZXNzaW9uICpzZXMpOwogZXh0ZXJuIHZvaWQgbmZzNF9jYl90YWtlX3Nsb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCk7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCi0KK2V4dGVybiBpbnQgY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3Qgc3ZjX3Jxc3QgKik7CiBleHRlcm4gX19iZTMyIG5mczRfY2FsbGJhY2tfZ2V0YXR0cihzdHJ1Y3QgY2JfZ2V0YXR0cmFyZ3MgKmFyZ3MsCiAJCQkJICAgIHN0cnVjdCBjYl9nZXRhdHRycmVzICpyZXMsCiAJCQkJICAgIHN0cnVjdCBjYl9wcm9jZXNzX3N0YXRlICpjcHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKaW5kZXggNGJiOTFjYi4uODk1ODc1NyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCkBAIC0zNzMsMTcgKzM3MywxMSBAQAogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAJaW50IGk7Ci0JX19iZTMyIHN0YXR1czsKKwlfX2JlMzIgc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9CQURTRVNTSU9OKTsKIAogCWNwcy0+Y2xwID0gTlVMTDsKIAotCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEU0VTU0lPTik7Ci0JLyogSW5jb21pbmcgc2Vzc2lvbiBtdXN0IG1hdGNoIHRoZSBjYWxsYmFjayBzZXNzaW9uICovCi0JaWYgKG1lbWNtcCgmYXJncy0+Y3NhX3Nlc3Npb25pZCwgY3BzLT5zdmNfc2lkLCBORlM0X01BWF9TRVNTSU9OSURfTEVOKSkKLQkJZ290byBvdXQ7Ci0KLQljbHAgPSBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChhcmdzLT5jc2FfYWRkciwKLQkJCQkJICZhcmdzLT5jc2Ffc2Vzc2lvbmlkLCAxKTsKKwljbHAgPSBuZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChhcmdzLT5jc2FfYWRkciwgJmFyZ3MtPmNzYV9zZXNzaW9uaWQpOwogCWlmIChjbHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKQEAgLTQxNCw5ICs0MDgsOSBAQAogCXJlcy0+Y3NyX2hpZ2hlc3RzbG90aWQgPSBORlM0MV9CQ19NQVhfQ0FMTEJBQ0tTIC0gMTsKIAlyZXMtPmNzcl90YXJnZXRfaGlnaGVzdHNsb3RpZCA9IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MgLSAxOwogCW5mczRfY2JfdGFrZV9zbG90KGNscCk7Ci0JY3BzLT5jbHAgPSBjbHA7IC8qIHB1dCBpbiBuZnM0X2NhbGxiYWNrX2NvbXBvdW5kICovCiAKIG91dDoKKwljcHMtPmNscCA9IGNscDsgLyogcHV0IGluIG5mczRfY2FsbGJhY2tfY29tcG91bmQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y3NhX25yY2xpc3RzOyBpKyspCiAJCWtmcmVlKGFyZ3MtPmNzYV9yY2xpc3RzW2ldLnJjbF9yZWZjYWxscyk7CiAJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3hkci5jIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCmluZGV4IDIzMTEyYzIuLjE0ZTBmOTMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9jYWxsYmFja194ZHIuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKQEAgLTc5NCwxMCArNzk0LDkgQEAKIAogCWlmIChoZHJfYXJnLm1pbm9ydmVyc2lvbiA9PSAwKSB7CiAJCWNwcy5jbHAgPSBuZnM0X2ZpbmRfY2xpZW50X2lkZW50KGhkcl9hcmcuY2JfaWRlbnQpOwotCQlpZiAoIWNwcy5jbHApCisJCWlmICghY3BzLmNscCB8fCAhY2hlY2tfZ3NzX2NhbGxiYWNrX3ByaW5jaXBhbChjcHMuY2xwLCBycXN0cCkpCiAJCQlyZXR1cm4gcnBjX2Ryb3BfcmVwbHk7Ci0JfSBlbHNlCi0JCWNwcy5zdmNfc2lkID0gYmNfeHBydF9zaWQocnFzdHApOworCX0KIAogCWhkcl9yZXMudGFnbGVuID0gaGRyX2FyZy50YWdsZW47CiAJaGRyX3Jlcy50YWcgPSBoZHJfYXJnLnRhZzsKZGlmZiAtLWdpdCBhL2ZzL25mcy9jbGllbnQuYyBiL2ZzL25mcy9jbGllbnQuYwppbmRleCAxOTJmMmY4Li5iZDNjYTMyIDEwMDY0NAotLS0gYS9mcy9uZnMvY2xpZW50LmMKKysrIGIvZnMvbmZzL2NsaWVudC5jCkBAIC0xMjA2LDE2ICsxMjA2LDExIEBACiAgKiBGb3IgQ0JfQ09NUE9VTkQgY2FsbHMsIGZpbmQgYSBjbGllbnQgYnkgSVAgYWRkcmVzcywgcHJvdG9jb2wgdmVyc2lvbiwKICAqIG1pbm9ydmVyc2lvbiwgYW5kIHNlc3Npb25JRAogICoKLSAqIENSRUFURV9TRVNTSU9OIHRyaWdnZXJzIGEgQ0JfTlVMTCBwaW5nIGZyb20gc2VydmVycy4gVGhlIGNhbGxiYWNrIHNlcnZpY2UKLSAqIHNlc3Npb25pZCBjYW4gb25seSBiZSBzZXQgYWZ0ZXIgdGhlIENSRUFURV9TRVNTSU9OIHJldHVybiwgc28gYSBDQl9OVUxMCi0gKiBjYW4gYXJyaXZlIGJlZm9yZSB0aGUgY2FsbGJhY2sgc2Vzc2lvbmlkIGlzIHNldC4gRm9yIENCX05VTEwgY2FsbHMsCi0gKiBmaW5kIGEgY2xpZW50IGJ5IElQIGFkZHJlc3MgcHJvdG9jb2wgdmVyc2lvbiwgYW5kIG1pbm9ydmVyc2lvbi4KLSAqCiAgKiBSZXR1cm5zIE5VTEwgaWYgbm8gc3VjaCBjbGllbnQKICAqLwogc3RydWN0IG5mc19jbGllbnQgKgogbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJICAgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQsIGludCBpc19jYl9jb21wb3VuZCkKKwkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7CiAKQEAgLTEyMjcsOSArMTIyMiw5IEBACiAJCWlmICghbmZzNF9oYXNfc2Vzc2lvbihjbHApKQogCQkJY29udGludWU7CiAKLQkJLyogTWF0Y2ggc2Vzc2lvbmlkIHVubGVzcyBjYl9udWxsIGNhbGwqLwotCQlpZiAoaXNfY2JfY29tcG91bmQgJiYgKG1lbWNtcChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwKLQkJICAgIHNpZC0+ZGF0YSwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTikgIT0gMCkpCisJCS8qIE1hdGNoIHNlc3Npb25pZCovCisJCWlmIChtZW1jbXAoY2xwLT5jbF9zZXNzaW9uLT5zZXNzX2lkLmRhdGEsCisJCSAgICBzaWQtPmRhdGEsIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pICE9IDApCiAJCQljb250aW51ZTsKIAogCQlhdG9taWNfaW5jKCZjbHAtPmNsX2NvdW50KTsKQEAgLTEyNDQsNyArMTIzOSw3IEBACiAKIHN0cnVjdCBuZnNfY2xpZW50ICoKIG5mczRfZmluZF9jbGllbnRfc2Vzc2lvbmlkKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJCSAgIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkLCBpbnQgaXNfY2JfY29tcG91bmQpCisJCQkgICBzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKnNpZCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IDM2NGU0MzIuLmJiYmM2YmYgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtMjMsOCArMjMsNiBAQAogCiBzdGF0aWMgdm9pZCBuZnNfZG9fZnJlZV9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKIHsKLQlpZiAoZGVsZWdhdGlvbi0+Y3JlZCkKLQkJcHV0X3JwY2NyZWQoZGVsZWdhdGlvbi0+Y3JlZCk7CiAJa2ZyZWUoZGVsZWdhdGlvbik7CiB9CiAKQEAgLTM3LDYgKzM1LDEwIEBACiAKIHN0YXRpYyB2b2lkIG5mc19mcmVlX2RlbGVnYXRpb24oc3RydWN0IG5mc19kZWxlZ2F0aW9uICpkZWxlZ2F0aW9uKQogeworCWlmIChkZWxlZ2F0aW9uLT5jcmVkKSB7CisJCXB1dF9ycGNjcmVkKGRlbGVnYXRpb24tPmNyZWQpOworCQlkZWxlZ2F0aW9uLT5jcmVkID0gTlVMTDsKKwl9CiAJY2FsbF9yY3UoJmRlbGVnYXRpb24tPnJjdSwgbmZzX2ZyZWVfZGVsZWdhdGlvbl9jYWxsYmFjayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCBlNmFjZTBkLi45OTQzYTc1IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC00MDcsMTUgKzQwNywxOCBAQAogCQlwb3MgKz0gdmVjLT5pb3ZfbGVuOwogCX0KIAorCS8qCisJICogSWYgbm8gYnl0ZXMgd2VyZSBzdGFydGVkLCByZXR1cm4gdGhlIGVycm9yLCBhbmQgbGV0IHRoZQorCSAqIGdlbmVyaWMgbGF5ZXIgaGFuZGxlIHRoZSBjb21wbGV0aW9uLgorCSAqLworCWlmIChyZXF1ZXN0ZWRfYnl0ZXMgPT0gMCkgeworCQluZnNfZGlyZWN0X3JlcV9yZWxlYXNlKGRyZXEpOworCQlyZXR1cm4gcmVzdWx0IDwgMCA/IHJlc3VsdCA6IC1FSU87CisJfQorCiAJaWYgKHB1dF9kcmVxKGRyZXEpKQogCQluZnNfZGlyZWN0X2NvbXBsZXRlKGRyZXEpOwotCi0JaWYgKHJlcXVlc3RlZF9ieXRlcyAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OwotCXJldHVybiAtRUlPOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBuZnNfZGlyZWN0X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKQEAgLTg0MSwxNSArODQ0LDE4IEBACiAJCXBvcyArPSB2ZWMtPmlvdl9sZW47CiAJfQogCisJLyoKKwkgKiBJZiBubyBieXRlcyB3ZXJlIHN0YXJ0ZWQsIHJldHVybiB0aGUgZXJyb3IsIGFuZCBsZXQgdGhlCisJICogZ2VuZXJpYyBsYXllciBoYW5kbGUgdGhlIGNvbXBsZXRpb24uCisJICovCisJaWYgKHJlcXVlc3RlZF9ieXRlcyA9PSAwKSB7CisJCW5mc19kaXJlY3RfcmVxX3JlbGVhc2UoZHJlcSk7CisJCXJldHVybiByZXN1bHQgPCAwID8gcmVzdWx0IDogLUVJTzsKKwl9CisKIAlpZiAocHV0X2RyZXEoZHJlcSkpCiAJCW5mc19kaXJlY3Rfd3JpdGVfY29tcGxldGUoZHJlcSwgZHJlcS0+aW5vZGUpOwotCi0JaWYgKHJlcXVlc3RlZF9ieXRlcyAhPSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChyZXN1bHQgPCAwKQotCQlyZXR1cm4gcmVzdWx0OwotCXJldHVybiAtRUlPOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3NpemVfdCBuZnNfZGlyZWN0X3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IGQ4NTEyNDIuLjFjYzYwMGUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC04ODEsOSArODgxLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgbmZzX3djY191cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZnNfd2NjX3VwZGF0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gMDsKIAogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFQ0hBTkdFKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX0NIQU5HRSkKQEAgLTg5MSwyNSArODkyLDMyIEBACiAJCW5mc2ktPmNoYW5nZV9hdHRyID0gZmF0dHItPmNoYW5nZV9hdHRyOwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKIAkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJfQogCS8qIElmIHdlIGhhdmUgYXRvbWljIFdDQyBkYXRhLCB3ZSBtYXkgdXBkYXRlIHNvbWUgYXR0cmlidXRlcyAqLwogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFQ1RJTUUpCiAJCQkmJiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ1RJTUUpCi0JCQkmJiB0aW1lc3BlY19lcXVhbCgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+cHJlX2N0aW1lKSkKLQkJCW1lbWNweSgmaW5vZGUtPmlfY3RpbWUsICZmYXR0ci0+Y3RpbWUsIHNpemVvZihpbm9kZS0+aV9jdGltZSkpOworCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX2N0aW1lLCAmZmF0dHItPnByZV9jdGltZSkpIHsKKwkJbWVtY3B5KCZpbm9kZS0+aV9jdGltZSwgJmZhdHRyLT5jdGltZSwgc2l6ZW9mKGlub2RlLT5pX2N0aW1lKSk7CisJCXJldCB8PSBORlNfSU5PX0lOVkFMSURfQVRUUjsKKwl9CiAKIAlpZiAoKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX1BSRU1USU1FKQogCQkJJiYgKGZhdHRyLT52YWxpZCAmIE5GU19BVFRSX0ZBVFRSX01USU1FKQogCQkJJiYgdGltZXNwZWNfZXF1YWwoJmlub2RlLT5pX210aW1lLCAmZmF0dHItPnByZV9tdGltZSkpIHsKLQkJCW1lbWNweSgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOwotCQkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCQkJbmZzaS0+Y2FjaGVfdmFsaWRpdHkgfD0gTkZTX0lOT19JTlZBTElEX0RBVEE7CisJCW1lbWNweSgmaW5vZGUtPmlfbXRpbWUsICZmYXR0ci0+bXRpbWUsIHNpemVvZihpbm9kZS0+aV9tdGltZSkpOworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCW5mc2ktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9EQVRBOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CiAJfQogCWlmICgoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfUFJFU0laRSkKIAkJCSYmIChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9TSVpFKQogCQkJJiYgaV9zaXplX3JlYWQoaW5vZGUpID09IG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+cHJlX3NpemUpCi0JCQkmJiBuZnNpLT5ucGFnZXMgPT0gMCkKLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgbmZzX3NpemVfdG9fbG9mZl90KGZhdHRyLT5zaXplKSk7CisJCQkmJiBuZnNpLT5ucGFnZXMgPT0gMCkgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5mc19zaXplX3RvX2xvZmZfdChmYXR0ci0+c2l6ZSkpOworCQlyZXQgfD0gTkZTX0lOT19JTlZBTElEX0FUVFI7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtMTIyMyw3ICsxMjMxLDcgQEAKIAkJCXwgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpOwogCiAJLyogRG8gYXRvbWljIHdlYWsgY2FjaGUgY29uc2lzdGVuY3kgdXBkYXRlcyAqLwotCW5mc193Y2NfdXBkYXRlX2lub2RlKGlub2RlLCBmYXR0cik7CisJaW52YWxpZCB8PSBuZnNfd2NjX3VwZGF0ZV9pbm9kZShpbm9kZSwgZmF0dHIpOwogCiAJLyogTW9yZSBjYWNoZSBjb25zaXN0ZW5jeSBjaGVja3MgKi8KIAlpZiAoZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfQ0hBTkdFKSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDQ2NDRmMDQuLmNmOWZkYmQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0xMzMsOCArMTMzLDcgQEAKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqbmZzNF9maW5kX2NsaWVudF9ub19pZGVudChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKik7CiBleHRlcm4gc3RydWN0IG5mc19jbGllbnQgKm5mczRfZmluZF9jbGllbnRfaWRlbnQoaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmZzX2NsaWVudCAqCi1uZnM0X2ZpbmRfY2xpZW50X3Nlc3Npb25pZChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IG5mczRfc2Vzc2lvbmlkICosCi0JCQkgICBpbnQpOworbmZzNF9maW5kX2NsaWVudF9zZXNzaW9uaWQoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqKTsKIGV4dGVybiBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzX2NyZWF0ZV9zZXJ2ZXIoCiAJCQkJCWNvbnN0IHN0cnVjdCBuZnNfcGFyc2VkX21vdW50X2RhdGEgKiwKIAkJCQkJc3RydWN0IG5mc19maCAqKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzYWNsLmMgYi9mcy9uZnMvbmZzM2FjbC5jCmluZGV4IDlmODhjNWYuLjI3NDM0MjcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnMzYWNsLmMKKysrIGIvZnMvbmZzL25mczNhY2wuYwpAQCAtMzExLDggKzMxMSw4IEBACiAJaWYgKCFuZnNfc2VydmVyX2NhcGFibGUoaW5vZGUsIE5GU19DQVBfQUNMUykpCiAJCWdvdG8gb3V0OwogCi0JLyogV2UgYXJlIGRvaW5nIHRoaXMgaGVyZSwgYmVjYXVzZSBYRFIgbWFyc2hhbGxpbmcgY2FuIG9ubHkKLQkgICByZXR1cm4gLUVOT01FTS4gKi8KKwkvKiBXZSBhcmUgZG9pbmcgdGhpcyBoZXJlIGJlY2F1c2UgWERSIG1hcnNoYWxsaW5nIGRvZXMgbm90CisJICogcmV0dXJuIGFueSByZXN1bHRzLCBpdCBCVUdzLiAqLwogCXN0YXR1cyA9IC1FTk9TUEM7CiAJaWYgKGFjbCAhPSBOVUxMICYmIGFjbC0+YV9jb3VudCA+IE5GU19BQ0xfTUFYX0VOVFJJRVMpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczN4ZHIuYyBiL2ZzL25mcy9uZnMzeGRyLmMKaW5kZXggMDFjNWU4Yi4uMTgzYzZiMSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczN4ZHIuYworKysgYi9mcy9uZnMvbmZzM3hkci5jCkBAIC0xMzI4LDEwICsxMzI4LDEzIEBACiAKIAllbmNvZGVfbmZzX2ZoMyh4ZHIsIE5GU19GSChhcmdzLT5pbm9kZSkpOwogCWVuY29kZV91aW50MzIoeGRyLCBhcmdzLT5tYXNrKTsKLQlpZiAoYXJncy0+bnBhZ2VzICE9IDApCi0JCXhkcl93cml0ZV9wYWdlcyh4ZHIsIGFyZ3MtPnBhZ2VzLCAwLCBhcmdzLT5sZW4pOwogCiAJYmFzZSA9IHJlcS0+cnFfc2xlbjsKKwlpZiAoYXJncy0+bnBhZ2VzICE9IDApCisJCXhkcl93cml0ZV9wYWdlcyh4ZHIsIGFyZ3MtPnBhZ2VzLCAwLCBhcmdzLT5sZW4pOworCWVsc2UKKwkJeGRyX3Jlc2VydmVfc3BhY2UoeGRyLCBORlNfQUNMX0lOTElORV9CVUZTSVpFKTsKKwogCWVycm9yID0gbmZzYWNsX2VuY29kZSh4ZHItPmJ1ZiwgYmFzZSwgYXJncy0+aW5vZGUsCiAJCQkgICAgKGFyZ3MtPm1hc2sgJiBORlNfQUNMKSA/CiAJCQkgICAgYXJncy0+YWNsX2FjY2VzcyA6IE5VTEwsIDEsIDApOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwppbmRleCA1MWZlNjRhLi5mNWM5YjEyIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIAkvKiBpcHY2IGxlbmd0aCBwbHVzIHBvcnQgaXMgbGVnYWwgKi8KIAlpZiAocmxlbiA+IElORVQ2X0FERFJTVFJMRU4gKyA4KSB7Ci0JCWRwcmludGsoIiVzIEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKKwkJZHByaW50aygiJXM6IEludmFsaWQgYWRkcmVzcywgbGVuZ3RoICVkXG4iLCBfX2Z1bmNfXywKIAkJCXJsZW4pOwogCQlnb3RvIG91dF9lcnI7CiAJfQpAQCAtMjI1LDYgKzIyNSwxMSBAQAogCS8qIHJlcGxhY2UgdGhlIHBvcnQgZG90cyB3aXRoIGRhc2hlcyBmb3IgdGhlIGluNF9wdG9uKCkgZGVsaW1pdGVyKi8KIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWNoYXIgKnJlcyA9IHN0cnJjaHIoYnVmLCAnLicpOworCQlpZiAoIXJlcykgeworCQkJZHByaW50aygiJXM6IEZhaWxlZCBmaW5kaW5nIGV4cGVjdGVkIGRvdHMgaW4gcG9ydFxuIiwKKwkJCQlfX2Z1bmNfXyk7CisJCQlnb3RvIG91dF9mcmVlOworCQl9CiAJCSpyZXMgPSAnLSc7CiAJfQogCkBAIC0yNDAsNyArMjQ1LDcgQEAKIAlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKIAogCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCk7Ci0JZHByaW50aygiJXMgRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKKwlkcHJpbnRrKCIlczogRGVjb2RlZCBhZGRyZXNzIGFuZCBwb3J0ICVzXG4iLCBfX2Z1bmNfXywgYnVmKTsKIG91dF9mcmVlOgogCWtmcmVlKGJ1Zik7CiBvdXRfZXJyOgpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5ZDk5MmIwLi4xZmY3NmFjIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9iY194cHJ0Lmg+CiAjaW5jbHVkZSA8bGludXgveGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogI2luY2x1ZGUgIm5mczRfZnMuaCIKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCkBAIC0zMjUxLDYgKzMyNTMsMzUgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgYnVmX3RvX3BhZ2VzX25vc2xhYihjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sCisJCXN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCAqcGdiYXNlKQoreworCXN0cnVjdCBwYWdlICpuZXdwYWdlLCAqKnNwYWdlczsKKwlpbnQgcmMgPSAwOworCXNpemVfdCBsZW47CisJc3BhZ2VzID0gcGFnZXM7CisKKwlkbyB7CisJCWxlbiA9IG1pbihQQUdFX0NBQ0hFX1NJWkUsIGJ1Zmxlbik7CisJCW5ld3BhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCisJCWlmIChuZXdwYWdlID09IE5VTEwpCisJCQlnb3RvIHVud2luZDsKKwkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhuZXdwYWdlKSwgYnVmLCBsZW4pOworICAgICAgICAgICAgICAgIGJ1ZiArPSBsZW47CisgICAgICAgICAgICAgICAgYnVmbGVuIC09IGxlbjsKKwkJKnBhZ2VzKysgPSBuZXdwYWdlOworCQlyYysrOworCX0gd2hpbGUgKGJ1ZmxlbiAhPSAwKTsKKworCXJldHVybiByYzsKKwordW53aW5kOgorCWZvcig7IHJjID4gMDsgcmMtLSkKKwkJX19mcmVlX3BhZ2Uoc3BhZ2VzW3JjLTFdKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwogc3RydWN0IG5mczRfY2FjaGVkX2FjbCB7CiAJaW50IGNhY2hlZDsKIAlzaXplX3QgbGVuOwpAQCAtMzQxOSwxMyArMzQ1MCwyMyBAQAogCQkucnBjX2FyZ3AJPSAmYXJnLAogCQkucnBjX3Jlc3AJPSAmcmVzLAogCX07Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpOwogCiAJaWYgKCFuZnM0X3NlcnZlcl9zdXBwb3J0c19hY2xzKHNlcnZlcikpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKKwlpID0gYnVmX3RvX3BhZ2VzX25vc2xhYihidWYsIGJ1ZmxlbiwgYXJnLmFjbF9wYWdlcywgJmFyZy5hY2xfcGdiYXNlKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiBpOwogCW5mc19pbm9kZV9yZXR1cm5fZGVsZWdhdGlvbihpbm9kZSk7Ci0JYnVmX3RvX3BhZ2VzKGJ1ZiwgYnVmbGVuLCBhcmcuYWNsX3BhZ2VzLCAmYXJnLmFjbF9wZ2Jhc2UpOwogCXJldCA9IG5mczRfY2FsbF9zeW5jKHNlcnZlciwgJm1zZywgJmFyZywgJnJlcywgMSk7CisKKwkvKgorCSAqIEZyZWUgZWFjaCBwYWdlIGFmdGVyIHR4LCBzbyB0aGUgb25seSByZWYgbGVmdCBpcworCSAqIGhlbGQgYnkgdGhlIG5ldHdvcmsgc3RhY2sKKwkgKi8KKwlmb3IgKDsgaSA+IDA7IGktLSkKKwkJcHV0X3BhZ2UocGFnZXNbaS0xXSk7CisKIAkvKgogCSAqIEFjbCB1cGRhdGUgY2FuIHJlc3VsdCBpbiBpbm9kZSBhdHRyaWJ1dGUgdXBkYXRlLgogCSAqIHNvIG1hcmsgdGhlIGF0dHJpYnV0ZSBjYWNoZSBpbnZhbGlkLgpAQCAtNDU3MiwyNyArNDYxMywxNiBAQAogCSpwID0gaHRvbmwoKHUzMiljbHAtPmNsX2Jvb3RfdGltZS50dl9uc2VjKTsKIAlhcmdzLnZlcmlmaWVyID0gJnZlcmlmaWVyOwogCi0Jd2hpbGUgKDEpIHsKLQkJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAotCQkJCQkiJXMvJXMgJXUiLAotCQkJCQljbHAtPmNsX2lwYWRkciwKLQkJCQkJcnBjX3BlZXJhZGRyMnN0cihjbHAtPmNsX3JwY2NsaWVudCwKLQkJCQkJCQkgUlBDX0RJU1BMQVlfQUREUiksCi0JCQkJCWNscC0+Y2xfaWRfdW5pcXVpZmllcik7CisJYXJncy5pZF9sZW4gPSBzY25wcmludGYoYXJncy5pZCwgc2l6ZW9mKGFyZ3MuaWQpLAorCQkJCSIlcy8lcy4lcy8ldSIsCisJCQkJY2xwLT5jbF9pcGFkZHIsCisJCQkJaW5pdF91dHNuYW1lKCktPm5vZGVuYW1lLAorCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAorCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOwotCi0JCWlmIChzdGF0dXMgIT0gLU5GUzRFUlJfQ0xJRF9JTlVTRSkKLQkJCWJyZWFrOwotCi0JCWlmIChzaWduYWxsZWQoKSkKLQkJCWJyZWFrOwotCi0JCWlmICgrK2NscC0+Y2xfaWRfdW5pcXVpZmllciA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCi0Jc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlpZiAoIXN0YXR1cykKKwkJc3RhdHVzID0gbmZzNF9jaGVja19jbF9leGNoYW5nZV9mbGFncyhjbHAtPmNsX2V4Y2hhbmdlX2ZsYWdzKTsKIAlkcHJpbnRrKCI8LS0gJXMgc3RhdHVzPSAlZFxuIiwgX19mdW5jX18sIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCAyMzM2ZDUzLi5lNjc0MmI1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC0yMzIsMTIgKzIzMiw2IEBACiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQlzdGF0dXMgPSBuZnM0X3NldF9jYWxsYmFja19zZXNzaW9uaWQoY2xwKTsKLQlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU2Vzc2lvbmlkIG5vdCBzZXQuIE5vIGNhbGxiYWNrIHNlcnZpY2VcbiIpOwotCQluZnNfY2FsbGJhY2tfZG93bigxKTsKLQkJc3RhdHVzID0gMDsKLQl9CiAJbmZzNDFfc2V0dXBfc3RhdGVfcmVuZXdhbChjbHApOwogCW5mc19tYXJrX2NsaWVudF9yZWFkeShjbHAsIE5GU19DU19SRUFEWSk7CiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHhkci5jIGIvZnMvbmZzL25mczR4ZHIuYwppbmRleCAyYWI4ZTVjLi40ZTJjMTY4IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHhkci5jCisrKyBiL2ZzL25mcy9uZnM0eGRyLmMKQEAgLTYwODYsMTEgKzYwODYsMTEgQEAKIAlfX2JlMzIgKnAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIDQpOwogCWlmICh1bmxpa2VseSghcCkpCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmICghbnRvaGwoKnArKykpIHsKKwlpZiAoKnAgPT0geGRyX3plcm8pIHsKIAkJcCA9IHhkcl9pbmxpbmVfZGVjb2RlKHhkciwgNCk7CiAJCWlmICh1bmxpa2VseSghcCkpCiAJCQlnb3RvIG91dF9vdmVyZmxvdzsKLQkJaWYgKCFudG9obCgqcCsrKSkKKwkJaWYgKCpwID09IHhkcl96ZXJvKQogCQkJcmV0dXJuIC1FQUdBSU47CiAJCWVudHJ5LT5lb2YgPSAxOwogCQlyZXR1cm4gLUVCQURDT09LSUU7CkBAIC02MTAxLDcgKzYxMDEsNyBAQAogCQlnb3RvIG91dF9vdmVyZmxvdzsKIAllbnRyeS0+cHJldl9jb29raWUgPSBlbnRyeS0+Y29va2llOwogCXAgPSB4ZHJfZGVjb2RlX2h5cGVyKHAsICZlbnRyeS0+Y29va2llKTsKLQllbnRyeS0+bGVuID0gbnRvaGwoKnArKyk7CisJZW50cnktPmxlbiA9IGJlMzJfdG9fY3B1cChwKTsKIAogCXAgPSB4ZHJfaW5saW5lX2RlY29kZSh4ZHIsIGVudHJ5LT5sZW4pOwogCWlmICh1bmxpa2VseSghcCkpCkBAIC02MTMyLDkgKzYxMzIsNiBAQAogCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfVFlQRSkKIAkJZW50cnktPmRfdHlwZSA9IG5mc191bW9kZV90b19kdHlwZShlbnRyeS0+ZmF0dHItPm1vZGUpOwogCi0JaWYgKHZlcmlmeV9hdHRyX2xlbih4ZHIsIHAsIGxlbikgPCAwKQotCQlnb3RvIG91dF9vdmVyZmxvdzsKLQogCXJldHVybiAwOwogCiBvdXRfb3ZlcmZsb3c6CmRpZmYgLS1naXQgYS9mcy9uZnMvcG5mcy5jIGIvZnMvbmZzL3BuZnMuYwppbmRleCBiYzQwODk3Li4xYjFiYzFhIDEwMDY0NAotLS0gYS9mcy9uZnMvcG5mcy5jCisrKyBiL2ZzL25mcy9wbmZzLmMKQEAgLTk1MSw3ICs5NTEsNyBAQAogewogCXN0cnVjdCBwbmZzX2RldmljZWlkX2NhY2hlICpsb2NhbCA9IGNscC0+Y2xfZGV2aWRfY2FjaGU7CiAKLQlkcHJpbnRrKCItLT4gJXMgY2xfZGV2aWRfY2FjaGUgJXBcbiIsIF9fZnVuY19fLCBjbHAtPmNsX2RldmlkX2NhY2hlKTsKKwlkcHJpbnRrKCItLT4gJXMgKHslZH0pXG4iLCBfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmxvY2FsLT5kY19yZWYpKTsKIAlpZiAoYXRvbWljX2RlY19hbmRfbG9jaygmbG9jYWwtPmRjX3JlZiwgJmNscC0+Y2xfbG9jaykpIHsKIAkJaW50IGk7CiAJCS8qIFZlcmlmeSBjYWNoZSBpcyBlbXB0eSAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCAxMGQ2NDhlYS4uYzgyNzhmNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTkzMiw3ICs5MzIsNyBAQAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJZGF0YSA9IGxpc3RfZW50cnkobGlzdC5uZXh0LCBzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEsIHBhZ2VzKTsKIAkJbGlzdF9kZWwoJmRhdGEtPnBhZ2VzKTsKLQkJbmZzX3dyaXRlZGF0YV9yZWxlYXNlKGRhdGEpOworCQluZnNfd3JpdGVkYXRhX2ZyZWUoZGF0YSk7CiAJfQogCW5mc19yZWRpcnR5X3JlcXVlc3QocmVxKTsKIAlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMgYi9mcy9uZnNfY29tbW9uL25mc2FjbC5jCmluZGV4IGZjMWM1MjUuLjg0YzI3ZDYgMTAwNjQ0Ci0tLSBhL2ZzL25mc19jb21tb24vbmZzYWNsLmMKKysrIGIvZnMvbmZzX2NvbW1vbi9uZnNhY2wuYwpAQCAtNDIsNiArNDIsMTEgQEAKIAlnaWRfdCBnaWQ7CiB9OwogCitzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgeworCXN0cnVjdCBwb3NpeF9hY2wgYWNsOworCXN0cnVjdCBwb3NpeF9hY2xfZW50cnkgYWNlWzRdOworfTsKKwogc3RhdGljIGludAogeGRyX25mc2FjZV9lbmNvZGUoc3RydWN0IHhkcl9hcnJheTJfZGVzYyAqZGVzYywgdm9pZCAqZWxlbSkKIHsKQEAgLTcyLDkgKzc3LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXVuc2lnbmVkIGludAotbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKQorLyoqCisgKiBuZnNhY2xfZW5jb2RlIC0gRW5jb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IGRlc3RpbmF0aW9uIHhkcl9idWYgdG8gY29udGFpbiBYRFIgZW5jb2RlZCBBQ0wKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBpbm9kZTogaW5vZGUgb2YgZmlsZSB3aG9zZSBBQ0wgdGhpcyBpcworICogQGFjbDogcG9zaXhfYWNsIHRvIGVuY29kZQorICogQGVuY29kZV9lbnRyaWVzOiB3aGV0aGVyIHRvIGVuY29kZSBBQ0VzIGFzIHdlbGwKKyAqIEB0eXBlZmxhZzogQUNMIHR5cGU6IE5GU19BQ0xfREVGQVVMVCBvciB6ZXJvCisgKgorICogUmV0dXJucyBzaXplIG9mIGVuY29kZWQgQUNMIGluIGJ5dGVzIG9yIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUuCisgKi8KK2ludCBuZnNhY2xfZW5jb2RlKHN0cnVjdCB4ZHJfYnVmICpidWYsIHVuc2lnbmVkIGludCBiYXNlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGVuY29kZV9lbnRyaWVzLCBpbnQgdHlwZWZsYWcpCiB7CiAJaW50IGVudHJpZXMgPSAoYWNsICYmIGFjbC0+YV9jb3VudCkgPyBtYXhfdChpbnQsIGFjbC0+YV9jb3VudCwgNCkgOiAwOwogCXN0cnVjdCBuZnNhY2xfZW5jb2RlX2Rlc2MgbmZzYWNsX2Rlc2MgPSB7CkBAIC04OCwxNyArMTA0LDIyIEBACiAJCS51aWQgPSBpbm9kZS0+aV91aWQsCiAJCS5naWQgPSBpbm9kZS0+aV9naWQsCiAJfTsKKwlzdHJ1Y3QgbmZzYWNsX3NpbXBsZV9hY2wgYWNsYnVmOwogCWludCBlcnI7Ci0Jc3RydWN0IHBvc2l4X2FjbCAqYWNsMiA9IE5VTEw7CiAKIAlpZiAoZW50cmllcyA+IE5GU19BQ0xfTUFYX0VOVFJJRVMgfHwKIAkgICAgeGRyX2VuY29kZV93b3JkKGJ1ZiwgYmFzZSwgZW50cmllcykpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlbmNvZGVfZW50cmllcyAmJiBhY2wgJiYgYWNsLT5hX2NvdW50ID09IDMpIHsKLQkJLyogRmFrZSB1cCBhbiBBQ0xfTUFTSyBlbnRyeS4gKi8KLQkJYWNsMiA9IHBvc2l4X2FjbF9hbGxvYyg0LCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFhY2wyKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDIgPSAmYWNsYnVmLmFjbDsKKworCQkvKiBBdm9pZCB0aGUgdXNlIG9mIHBvc2l4X2FjbF9hbGxvYygpLiAgbmZzYWNsX2VuY29kZSgpIGlzCisJCSAqIGludm9rZWQgaW4gY29udGV4dHMgd2hlcmUgYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGlzCisJCSAqIGZhdGFsLiAgRm9ydHVuYXRlbHkgdGhpcyBmYWtlIEFDTCBpcyBzbWFsbCBlbm91Z2ggdG8KKwkJICogY29uc3RydWN0IG9uIHRoZSBzdGFjay4gKi8KKwkJbWVtc2V0KGFjbDIsIDAsIHNpemVvZihhY2wyKSk7CisJCXBvc2l4X2FjbF9pbml0KGFjbDIsIDQpOworCiAJCS8qIEluc2VydCBlbnRyaWVzIGluIGNhbm9uaWNhbCBvcmRlcjogb3RoZXIgb3JkZXJzIHNlZW0KIAkJIHRvIGNvbmZ1c2UgU29sYXJpcyBWeEZTLiAqLwogCQlhY2wyLT5hX2VudHJpZXNbMF0gPSBhY2wtPmFfZW50cmllc1swXTsgIC8qIEFDTF9VU0VSX09CSiAqLwpAQCAtMTA5LDggKzEzMCw2IEBACiAJCW5mc2FjbF9kZXNjLmFjbCA9IGFjbDI7CiAJfQogCWVyciA9IHhkcl9lbmNvZGVfYXJyYXkyKGJ1ZiwgYmFzZSArIDQsICZuZnNhY2xfZGVzYy5kZXNjKTsKLQlpZiAoYWNsMikKLQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsMik7CiAJaWYgKCFlcnIpCiAJCWVyciA9IDggKyBuZnNhY2xfZGVzYy5kZXNjLmVsZW1fc2l6ZSAqCiAJCQkgIG5mc2FjbF9kZXNjLmRlc2MuYXJyYXlfbGVuOwpAQCAtMjI0LDkgKzI0MywxOCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBpbnQKLW5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAotCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKQorLyoqCisgKiBuZnNhY2xfZGVjb2RlIC0gRGVjb2RlIGFuIE5GU3YzIEFDTAorICoKKyAqIEBidWY6IHhkcl9idWYgY29udGFpbmluZyBYRFInZCBBQ0wgZGF0YSB0byBkZWNvZGUKKyAqIEBiYXNlOiBieXRlIG9mZnNldCBpbiB4ZHJfYnVmIHdoZXJlIFhEUidkIEFDTCBiZWdpbnMKKyAqIEBhY2xjbnQ6IGNvdW50IG9mIEFDRXMgaW4gZGVjb2RlZCBwb3NpeF9hY2wKKyAqIEBwYWNsOiBidWZmZXIgaW4gd2hpY2ggdG8gcGxhY2UgZGVjb2RlZCBwb3NpeF9hY2wKKyAqCisgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGRlY29kZWQgQUNMIGluIGJ5dGVzLCBvciBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlLgorICovCitpbnQgbmZzYWNsX2RlY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50ICphY2xjbnQsCisJCSAgc3RydWN0IHBvc2l4X2FjbCAqKnBhY2wpCiB7CiAJc3RydWN0IG5mc2FjbF9kZWNvZGVfZGVzYyBuZnNhY2xfZGVzYyA9IHsKIAkJLmRlc2MgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRjYWxsYmFjay5jIGIvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYwppbmRleCAzYmU5NzVlLi5jZGUzNmNiIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRjYWxsYmFjay5jCisrKyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKQEAgLTQ4NCw3ICs0ODQsNyBAQAogb3V0OgogCXJldHVybiBzdGF0dXM7CiBvdXRfZGVmYXVsdDoKLQlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8oc3RhdHVzKTsKKwlyZXR1cm4gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIH0KIAogLyoKQEAgLTU2NCwxMSArNTY0LDkgQEAKIAlpZiAodW5saWtlbHkoc3RhdHVzKSkKIAkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KG5mc2VyciAhPSBORlM0X09LKSkKLQkJZ290byBvdXRfZGVmYXVsdDsKKwkJc3RhdHVzID0gbmZzX2NiX3N0YXRfdG9fZXJybm8obmZzZXJyKTsKIG91dDoKIAlyZXR1cm4gc3RhdHVzOwotb3V0X2RlZmF1bHQ6Ci0JcmV0dXJuIG5mc19jYl9zdGF0X3RvX2Vycm5vKHN0YXR1cyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRzdGF0ZS5jIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwppbmRleCBkOThkMDIxLi41NGI2MGJmIDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczRzdGF0ZS5jCisrKyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKQEAgLTIzMCw5ICsyMzAsNiBAQAogCWRwLT5kbF9jbGllbnQgPSBjbHA7CiAJZ2V0X25mczRfZmlsZShmcCk7CiAJZHAtPmRsX2ZpbGUgPSBmcDsKLQlkcC0+ZGxfdmZzX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOwotCWdldF9maWxlKGRwLT5kbF92ZnNfZmlsZSk7Ci0JZHAtPmRsX2Zsb2NrID0gTlVMTDsKIAlkcC0+ZGxfdHlwZSA9IHR5cGU7CiAJZHAtPmRsX3N0YXRlaWQuc2lfYm9vdCA9IGJvb3RfdGltZTsKIAlkcC0+ZGxfc3RhdGVpZC5zaV9zdGF0ZW93bmVyaWQgPSBjdXJyZW50X2RlbGVnaWQrKzsKQEAgLTI0MSw4ICsyMzgsNiBAQAogCWZoX2NvcHlfc2hhbGxvdygmZHAtPmRsX2ZoLCAmY3VycmVudF9maC0+ZmhfaGFuZGxlKTsKIAlkcC0+ZGxfdGltZSA9IDA7CiAJYXRvbWljX3NldCgmZHAtPmRsX2NvdW50LCAxKTsKLQlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOwotCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmNscC0+Y2xfZGVsZWdhdGlvbnMpOwogCUlOSVRfV09SSygmZHAtPmRsX3JlY2FsbC5jYl93b3JrLCBuZnNkNF9kb19jYWxsYmFja19ycGMpOwogCXJldHVybiBkcDsKIH0KQEAgLTI1MywzNiArMjQ4LDMwIEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRwLT5kbF9jb3VudCkpIHsKIAkJZHByaW50aygiTkZTRDogZnJlZWluZyBkcCAlcFxuIixkcCk7CiAJCXB1dF9uZnM0X2ZpbGUoZHAtPmRsX2ZpbGUpOwotCQlmcHV0KGRwLT5kbF92ZnNfZmlsZSk7CiAJCWttZW1fY2FjaGVfZnJlZShkZWxlZ19zbGFiLCBkcCk7CiAJCW51bV9kZWxlZ2F0aW9ucy0tOwogCX0KIH0KIAotLyogUmVtb3ZlIHRoZSBhc3NvY2lhdGVkIGZpbGVfbG9jayBmaXJzdCwgdGhlbiByZW1vdmUgdGhlIGRlbGVnYXRpb24uCi0gKiBsZWFzZV9tb2RpZnkoKSBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBGU19MRUFTRSBmaWxlX2xvY2sgZnJvbQotICogdGhlIGlfZmxvY2sgbGlzdCwgZXZlbnR1YWxseSBjYWxsaW5nIG5mc2QncyBsb2NrX21hbmFnZXIKLSAqIGZsX3JlbGVhc2VfY2FsbGJhY2suCi0gKi8KLXN0YXRpYyB2b2lkCi1uZnM0X2Nsb3NlX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCitzdGF0aWMgdm9pZCBuZnM0X3B1dF9kZWxlZ19sZWFzZShzdHJ1Y3QgbmZzNF9maWxlICpmcCkKIHsKLQlkcHJpbnRrKCJORlNEOiBjbG9zZV9kZWxlZ2F0aW9uIGRwICVwXG4iLGRwKTsKLQkvKiBYWFg6IGRvIHdlIGV2ZW4gbmVlZCB0aGlzIGNoZWNrPzogKi8KLQlpZiAoZHAtPmRsX2Zsb2NrKQotCQl2ZnNfc2V0bGVhc2UoZHAtPmRsX3Zmc19maWxlLCBGX1VOTENLLCAmZHAtPmRsX2Zsb2NrKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZnAtPmZpX2RlbGVnZWVzKSkgeworCQl2ZnNfc2V0bGVhc2UoZnAtPmZpX2RlbGVnX2ZpbGUsIEZfVU5MQ0ssICZmcC0+ZmlfbGVhc2UpOworCQlmcC0+ZmlfbGVhc2UgPSBOVUxMOworCQlmcC0+ZmlfZGVsZWdfZmlsZSA9IE5VTEw7CisJfQogfQogCiAvKiBDYWxsZWQgdW5kZXIgdGhlIHN0YXRlIGxvY2suICovCiBzdGF0aWMgdm9pZAogdW5oYXNoX2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHApCiB7Ci0JbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmZpbGUpOwogCWxpc3RfZGVsX2luaXQoJmRwLT5kbF9wZXJjbG50KTsKIAlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkcC0+ZGxfcGVyZmlsZSk7CiAJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3JlY2FsbF9scnUpOwogCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7Ci0JbmZzNF9jbG9zZV9kZWxlZ2F0aW9uKGRwKTsKKwluZnM0X3B1dF9kZWxlZ19sZWFzZShkcC0+ZGxfZmlsZSk7CiAJbmZzNF9wdXRfZGVsZWdhdGlvbihkcCk7CiB9CiAKQEAgLTk1OCw4ICs5NDcsNiBAQAogCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCXdoaWxlICghbGlzdF9lbXB0eSgmY2xwLT5jbF9kZWxlZ2F0aW9ucykpIHsKIAkJZHAgPSBsaXN0X2VudHJ5KGNscC0+Y2xfZGVsZWdhdGlvbnMubmV4dCwgc3RydWN0IG5mczRfZGVsZWdhdGlvbiwgZGxfcGVyY2xudCk7Ci0JCWRwcmludGsoIk5GU0Q6IGV4cGlyZSBjbGllbnQuIGRwICVwLCBmcCAlcFxuIiwgZHAsCi0JCQkJZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOwogCQlsaXN0X21vdmUoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmcmVhcGxpc3QpOwogCX0KQEAgLTIwNzgsNiArMjA2NSw3IEBACiAJCWZwLT5maV9pbm9kZSA9IGlncmFiKGlubyk7CiAJCWZwLT5maV9pZCA9IGN1cnJlbnRfZmlsZWlkKys7CiAJCWZwLT5maV9oYWRfY29uZmxpY3QgPSBmYWxzZTsKKwkJZnAtPmZpX2xlYXNlID0gTlVMTDsKIAkJbWVtc2V0KGZwLT5maV9mZHMsIDAsIHNpemVvZihmcC0+ZmlfZmRzKSk7CiAJCW1lbXNldChmcC0+ZmlfYWNjZXNzLCAwLCBzaXplb2YoZnAtPmZpX2FjY2VzcykpOwogCQlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTIzMjksMjMgKzIzMTcsOCBAQAogCQluZnM0X2ZpbGVfcHV0X2FjY2VzcyhmcCwgT19SRE9OTFkpOwogfQogCi0vKgotICogU3Bhd24gYSB0aHJlYWQgdG8gcGVyZm9ybSBhIHJlY2FsbCBvbiB0aGUgZGVsZWdhdGlvbiByZXByZXNlbnRlZAotICogYnkgdGhlIGxlYXNlIChmaWxlX2xvY2spCi0gKgotICogQ2FsbGVkIGZyb20gYnJlYWtfbGVhc2UoKSB3aXRoIGxvY2tfZmxvY2tzKCkgaGVsZC4KLSAqIE5vdGU6IHdlIGFzc3VtZSBicmVha19sZWFzZSB3aWxsIG9ubHkgY2FsbCB0aGlzICpvbmNlKiBmb3IgYW55IGdpdmVuCi0gKiBsZWFzZS4KLSAqLwotc3RhdGljCi12b2lkIG5mc2RfYnJlYWtfZGVsZWdfY2Ioc3RydWN0IGZpbGVfbG9jayAqZmwpCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX29uZV9kZWxlZyhzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCkKIHsKLQlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcCA9IChzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICopZmwtPmZsX293bmVyOwotCi0JZHByaW50aygiTkZTRCBuZnNkX2JyZWFrX2RlbGVnX2NiOiBkcCAlcCBmbCAlcFxuIixkcCxmbCk7Ci0JaWYgKCFkcCkKLQkJcmV0dXJuOwotCiAJLyogV2UncmUgYXNzdW1pbmcgdGhlIHN0YXRlIGNvZGUgbmV2ZXIgZHJvcHMgaXRzIHJlZmVyZW5jZQogCSAqIHdpdGhvdXQgZmlyc3QgcmVtb3ZpbmcgdGhlIGxlYXNlLiAgU2luY2Ugd2UncmUgaW4gdGhpcyBsZWFzZQogCSAqIGNhbGxiYWNrIChhbmQgc2luY2UgdGhlIGxlYXNlIGNvZGUgaXMgc2VyaWFsaXplZCBieSB0aGUga2VybmVsCkBAIC0yMzUzLDIyICsyMzI2LDM1IEBACiAJICogaXQncyBzYWZlIHRvIHRha2UgYSByZWZlcmVuY2U6ICovCiAJYXRvbWljX2luYygmZHAtPmRsX2NvdW50KTsKIAotCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmRwLT5kbF9yZWNhbGxfbHJ1LCAmZGVsX3JlY2FsbF9scnUpOwotCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CiAKIAkvKiBvbmx5IHBsYWNlIGRsX3RpbWUgaXMgc2V0LiBwcm90ZWN0ZWQgYnkgbG9ja19mbG9ja3MqLwogCWRwLT5kbF90aW1lID0gZ2V0X3NlY29uZHMoKTsKIAorCW5mc2Q0X2NiX3JlY2FsbChkcCk7Cit9CisKKy8qIENhbGxlZCBmcm9tIGJyZWFrX2xlYXNlKCkgd2l0aCBsb2NrX2Zsb2NrcygpIGhlbGQuICovCitzdGF0aWMgdm9pZCBuZnNkX2JyZWFrX2RlbGVnX2NiKHN0cnVjdCBmaWxlX2xvY2sgKmZsKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gKHN0cnVjdCBuZnM0X2ZpbGUgKilmbC0+Zmxfb3duZXI7CisJc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHA7CisKKwlCVUdfT04oIWZwKTsKKwkvKiBXZSBhc3N1bWUgYnJlYWtfbGVhc2UgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgbGVhc2U6ICovCisJQlVHX09OKGZwLT5maV9oYWRfY29uZmxpY3QpOwogCS8qCiAJICogV2UgZG9uJ3Qgd2FudCB0aGUgbG9ja3MgY29kZSB0byB0aW1lb3V0IHRoZSBsZWFzZSBmb3IgdXM7Ci0JICogd2UnbGwgcmVtb3ZlIGl0IG91cnNlbGYgaWYgdGhlIGRlbGVnYXRpb24gaXNuJ3QgcmV0dXJuZWQKLQkgKiBpbiB0aW1lLgorCSAqIHdlJ2xsIHJlbW92ZSBpdCBvdXJzZWxmIGlmIGEgZGVsZWdhdGlvbiBpc24ndCByZXR1cm5lZAorCSAqIGluIHRpbWU6CiAJICovCiAJZmwtPmZsX2JyZWFrX3RpbWUgPSAwOwogCi0JZHAtPmRsX2ZpbGUtPmZpX2hhZF9jb25mbGljdCA9IHRydWU7Ci0JbmZzZDRfY2JfcmVjYWxsKGRwKTsKKwlzcGluX2xvY2soJnJlY2FsbF9sb2NrKTsKKwlmcC0+ZmlfaGFkX2NvbmZsaWN0ID0gdHJ1ZTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCAmZnAtPmZpX2RlbGVnYXRpb25zLCBkbF9wZXJmaWxlKQorCQluZnNkX2JyZWFrX29uZV9kZWxlZyhkcCk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKIH0KIAogc3RhdGljCkBAIC0yNDU5LDEzICsyNDQ1LDE1IEBACiBzdGF0aWMgc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqCiBmaW5kX2RlbGVnYXRpb25fZmlsZShzdHJ1Y3QgbmZzNF9maWxlICpmcCwgc3RhdGVpZF90ICpzdGlkKQogewotCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwOworCXN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwID0gTlVMTDsKIAorCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZHAsICZmcC0+ZmlfZGVsZWdhdGlvbnMsIGRsX3BlcmZpbGUpIHsKIAkJaWYgKGRwLT5kbF9zdGF0ZWlkLnNpX3N0YXRlb3duZXJpZCA9PSBzdGlkLT5zaV9zdGF0ZW93bmVyaWQpCi0JCQlyZXR1cm4gZHA7CisJCQlicmVhazsKIAl9Ci0JcmV0dXJuIE5VTEw7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlyZXR1cm4gZHA7CiB9CiAKIGludCBzaGFyZV9hY2Nlc3NfdG9fZmxhZ3ModTMyIHNoYXJlX2FjY2VzcykKQEAgLTI2NDEsNiArMjYyOSw2NiBAQAogCXJldHVybiBjbHAtPmNsX21pbm9ydmVyc2lvbiAmJiBjbHAtPmNsX2NiX3N0YXRlID09IE5GU0Q0X0NCX1VOS05PV047CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9sb2NrICpuZnM0X2FsbG9jX2luaXRfbGVhc2Uoc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCisJZmwgPSBsb2Nrc19hbGxvY19sb2NrKCk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIE5VTEw7CisJbG9ja3NfaW5pdF9sb2NrKGZsKTsKKwlmbC0+ZmxfbG1vcHMgPSAmbmZzZF9sZWFzZV9tbmdfb3BzOworCWZsLT5mbF9mbGFncyA9IEZMX0xFQVNFOworCWZsLT5mbF90eXBlID0gZmxhZyA9PSBORlM0X09QRU5fREVMRUdBVEVfUkVBRD8gRl9SRExDSzogRl9XUkxDSzsKKwlmbC0+ZmxfZW5kID0gT0ZGU0VUX01BWDsKKwlmbC0+Zmxfb3duZXIgPSAoZmxfb3duZXJfdCkoZHAtPmRsX2ZpbGUpOworCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOworCXJldHVybiBmbDsKK30KKworc3RhdGljIGludCBuZnM0X3NldGxlYXNlKHN0cnVjdCBuZnM0X2RlbGVnYXRpb24gKmRwLCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbmZzNF9maWxlICpmcCA9IGRwLT5kbF9maWxlOworCXN0cnVjdCBmaWxlX2xvY2sgKmZsOworCWludCBzdGF0dXM7CisKKwlmbCA9IG5mczRfYWxsb2NfaW5pdF9sZWFzZShkcCwgZmxhZyk7CisJaWYgKCFmbCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZmwtPmZsX2ZpbGUgPSBmaW5kX3JlYWRhYmxlX2ZpbGUoZnApOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyY2xudCwgJmRwLT5kbF9jbGllbnQtPmNsX2RlbGVnYXRpb25zKTsKKwlzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpOworCWlmIChzdGF0dXMpIHsKKwkJbGlzdF9kZWxfaW5pdCgmZHAtPmRsX3BlcmNsbnQpOworCQlsb2Nrc19mcmVlX2xvY2soZmwpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJZnAtPmZpX2xlYXNlID0gZmw7CisJZnAtPmZpX2RlbGVnX2ZpbGUgPSBmbC0+ZmxfZmlsZTsKKwlnZXRfZmlsZShmcC0+ZmlfZGVsZWdfZmlsZSk7CisJYXRvbWljX3NldCgmZnAtPmZpX2RlbGVnZWVzLCAxKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmZpbGUsICZmcC0+ZmlfZGVsZWdhdGlvbnMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5mczRfc2V0X2RlbGVnYXRpb24oc3RydWN0IG5mczRfZGVsZWdhdGlvbiAqZHAsIGludCBmbGFnKQoreworCXN0cnVjdCBuZnM0X2ZpbGUgKmZwID0gZHAtPmRsX2ZpbGU7CisKKwlpZiAoIWZwLT5maV9sZWFzZSkKKwkJcmV0dXJuIG5mczRfc2V0bGVhc2UoZHAsIGZsYWcpOworCXNwaW5fbG9jaygmcmVjYWxsX2xvY2spOworCWlmIChmcC0+ZmlfaGFkX2NvbmZsaWN0KSB7CisJCXNwaW5fdW5sb2NrKCZyZWNhbGxfbG9jayk7CisJCXJldHVybiAtRUFHQUlOOworCX0KKwlhdG9taWNfaW5jKCZmcC0+ZmlfZGVsZWdlZXMpOworCWxpc3RfYWRkKCZkcC0+ZGxfcGVyZmlsZSwgJmZwLT5maV9kZWxlZ2F0aW9ucyk7CisJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKKwlsaXN0X2FkZCgmZHAtPmRsX3BlcmNsbnQsICZkcC0+ZGxfY2xpZW50LT5jbF9kZWxlZ2F0aW9ucyk7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBBdHRlbXB0IHRvIGhhbmQgb3V0IGEgZGVsZWdhdGlvbi4KICAqLwpAQCAtMjY1MCw3ICsyNjk4LDYgQEAKIAlzdHJ1Y3QgbmZzNF9kZWxlZ2F0aW9uICpkcDsKIAlzdHJ1Y3QgbmZzNF9zdGF0ZW93bmVyICpzb3AgPSBzdHAtPnN0X3N0YXRlb3duZXI7CiAJaW50IGNiX3VwOwotCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCWludCBzdGF0dXMsIGZsYWcgPSAwOwogCiAJY2JfdXAgPSBuZnNkNF9jYl9jaGFubmVsX2dvb2Qoc29wLT5zb19jbGllbnQpOwpAQCAtMjY4MSwzNiArMjcyOCwxMSBAQAogCX0KIAogCWRwID0gYWxsb2NfaW5pdF9kZWxlZyhzb3AtPnNvX2NsaWVudCwgc3RwLCBmaCwgZmxhZyk7Ci0JaWYgKGRwID09IE5VTEwpIHsKLQkJZmxhZyA9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FOwotCQlnb3RvIG91dDsKLQl9Ci0Jc3RhdHVzID0gLUVOT01FTTsKLQlmbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKLQlpZiAoIWZsKQotCQlnb3RvIG91dDsKLQlsb2Nrc19pbml0X2xvY2soZmwpOwotCWZsLT5mbF9sbW9wcyA9ICZuZnNkX2xlYXNlX21uZ19vcHM7Ci0JZmwtPmZsX2ZsYWdzID0gRkxfTEVBU0U7Ci0JZmwtPmZsX3R5cGUgPSBmbGFnID09IE5GUzRfT1BFTl9ERUxFR0FURV9SRUFEPyBGX1JETENLOiBGX1dSTENLOwotCWZsLT5mbF9lbmQgPSBPRkZTRVRfTUFYOwotCWZsLT5mbF9vd25lciA9ICAoZmxfb3duZXJfdClkcDsKLQlmbC0+ZmxfZmlsZSA9IGZpbmRfcmVhZGFibGVfZmlsZShzdHAtPnN0X2ZpbGUpOwotCUJVR19PTighZmwtPmZsX2ZpbGUpOwotCWZsLT5mbF9waWQgPSBjdXJyZW50LT50Z2lkOwotCWRwLT5kbF9mbG9jayA9IGZsOwotCi0JLyogdmZzX3NldGxlYXNlIGNoZWNrcyB0byBzZWUgaWYgZGVsZWdhdGlvbiBzaG91bGQgYmUgaGFuZGVkIG91dC4KLQkgKiB0aGUgbG9ja19tYW5hZ2VyIGNhbGxiYWNrIGZsX2NoYW5nZSBpcyB1c2VkCi0JICovCi0JaWYgKChzdGF0dXMgPSB2ZnNfc2V0bGVhc2UoZmwtPmZsX2ZpbGUsIGZsLT5mbF90eXBlLCAmZmwpKSkgewotCQlkcHJpbnRrKCJORlNEOiBzZXRsZWFzZSBmYWlsZWQgWyVkXSwgbm8gZGVsZWdhdGlvblxuIiwgc3RhdHVzKTsKLQkJZHAtPmRsX2Zsb2NrID0gTlVMTDsKLQkJbG9ja3NfZnJlZV9sb2NrKGZsKTsKLQkJdW5oYXNoX2RlbGVnYXRpb24oZHApOwotCQlmbGFnID0gTkZTNF9PUEVOX0RFTEVHQVRFX05PTkU7Ci0JCWdvdG8gb3V0OwotCX0KKwlpZiAoZHAgPT0gTlVMTCkKKwkJZ290byBvdXRfbm9fZGVsZWc7CisJc3RhdHVzID0gbmZzNF9zZXRfZGVsZWdhdGlvbihkcCwgZmxhZyk7CisJaWYgKHN0YXR1cykKKwkJZ290byBvdXRfZnJlZTsKIAogCW1lbWNweSgmb3Blbi0+b3BfZGVsZWdhdGVfc3RhdGVpZCwgJmRwLT5kbF9zdGF0ZWlkLCBzaXplb2YoZHAtPmRsX3N0YXRlaWQpKTsKIApAQCAtMjcyMiw2ICsyNzQ0LDEyIEBACiAJCQkmJiBvcGVuLT5vcF9kZWxlZ2F0ZV90eXBlICE9IE5GUzRfT1BFTl9ERUxFR0FURV9OT05FKQogCQlkcHJpbnRrKCJORlNEOiBXQVJOSU5HOiByZWZ1c2luZyBkZWxlZ2F0aW9uIHJlY2xhaW1cbiIpOwogCW9wZW4tPm9wX2RlbGVnYXRlX3R5cGUgPSBmbGFnOworCXJldHVybjsKK291dF9mcmVlOgorCW5mczRfcHV0X2RlbGVnYXRpb24oZHApOworb3V0X25vX2RlbGVnOgorCWZsYWcgPSBORlM0X09QRU5fREVMRUdBVEVfTk9ORTsKKwlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTI5MTYsOCArMjk0NCw2IEBACiAJCQkJdGVzdF92YWwgPSB1OwogCQkJYnJlYWs7CiAJCX0KLQkJZHByaW50aygiTkZTRDogcHVyZ2luZyB1bnVzZWQgZGVsZWdhdGlvbiBkcCAlcCwgZnAgJXBcbiIsCi0JCQkgICAgICAgICAgICBkcCwgZHAtPmRsX2Zsb2NrKTsKIAkJbGlzdF9tb3ZlKCZkcC0+ZGxfcmVjYWxsX2xydSwgJnJlYXBsaXN0KTsKIAl9CiAJc3Bpbl91bmxvY2soJnJlY2FsbF9sb2NrKTsKQEAgLTMxMjgsNyArMzE1NCw3IEBACiAJCQlnb3RvIG91dDsKIAkJcmVuZXdfY2xpZW50KGRwLT5kbF9jbGllbnQpOwogCQlpZiAoZmlscHApIHsKLQkJCSpmaWxwcCA9IGZpbmRfcmVhZGFibGVfZmlsZShkcC0+ZGxfZmlsZSk7CisJCQkqZmlscHAgPSBkcC0+ZGxfZmlsZS0+ZmlfZGVsZWdfZmlsZTsKIAkJCUJVR19PTighKmZpbHBwKTsKIAkJfQogCX0gZWxzZSB7IC8qIG9wZW4gb3IgbG9jayBzdGF0ZWlkICovCmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczR4ZHIuYyBiL2ZzL25mc2QvbmZzNHhkci5jCmluZGV4IDk1NjYyOWIuLjEyNzViODYgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHhkci5jCisrKyBiL2ZzL25mc2QvbmZzNHhkci5jCkBAIC0zMTcsOCArMzE3LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fdWlkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfdWlkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b191aWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV91aWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX1VJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX09XTkVSX0dST1VQKSB7CkBAIC0zMjgsOCArMzI4LDggQEAKIAkJUkVBRF9CVUYoZHVtbXkzMik7CiAJCWxlbiArPSAoWERSX1FVQURMRU4oZHVtbXkzMikgPDwgMik7CiAJCVJFQURNRU0oYnVmLCBkdW1teTMyKTsKLQkJaWYgKChob3N0X2VyciA9IG5mc2RfbWFwX25hbWVfdG9fZ2lkKGFyZ3AtPnJxc3RwLCBidWYsIGR1bW15MzIsICZpYXR0ci0+aWFfZ2lkKSkpCi0JCQlnb3RvIG91dF9uZnNlcnI7CisJCWlmICgoc3RhdHVzID0gbmZzZF9tYXBfbmFtZV90b19naWQoYXJncC0+cnFzdHAsIGJ1ZiwgZHVtbXkzMiwgJmlhdHRyLT5pYV9naWQpKSkKKwkJCXJldHVybiBzdGF0dXM7CiAJCWlhdHRyLT5pYV92YWxpZCB8PSBBVFRSX0dJRDsKIAl9CiAJaWYgKGJtdmFsWzFdICYgRkFUVFI0X1dPUkQxX1RJTUVfQUNDRVNTX1NFVCkgewpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9zdGF0ZS5oIGIvZnMvbmZzZC9zdGF0ZS5oCmluZGV4IDMwNzQ2NTYuLjJkMzEyMjQgMTAwNjQ0Ci0tLSBhL2ZzL25mc2Qvc3RhdGUuaAorKysgYi9mcy9uZnNkL3N0YXRlLmgKQEAgLTgzLDggKzgzLDYgQEAKIAlhdG9taWNfdAkJZGxfY291bnQ7ICAgICAgIC8qIHJlZiBjb3VudCAqLwogCXN0cnVjdCBuZnM0X2NsaWVudAkqZGxfY2xpZW50OwogCXN0cnVjdCBuZnM0X2ZpbGUJKmRsX2ZpbGU7Ci0Jc3RydWN0IGZpbGUJCSpkbF92ZnNfZmlsZTsKLQlzdHJ1Y3QgZmlsZV9sb2NrCSpkbF9mbG9jazsKIAl1MzIJCQlkbF90eXBlOwogCXRpbWVfdAkJCWRsX3RpbWU7CiAvKiBGb3IgcmVjYWxsOiAqLwpAQCAtMzc5LDYgKzM3Nyw5IEBACiAJICovCiAJYXRvbWljX3QJCWZpX3JlYWRlcnM7CiAJYXRvbWljX3QJCWZpX3dyaXRlcnM7CisJc3RydWN0IGZpbGUJCSpmaV9kZWxlZ19maWxlOworCXN0cnVjdCBmaWxlX2xvY2sJKmZpX2xlYXNlOworCWF0b21pY190CQlmaV9kZWxlZ2VlczsKIAlzdHJ1Y3QgaW5vZGUJCSpmaV9pbm9kZTsKIAl1MzIgICAgICAgICAgICAgICAgICAgICBmaV9pZDsgICAgICAvKiB1c2VkIHdpdGggc3RhdGVvd25lci0+c29faWQgCiAJCQkJCSAgICAgKiBmb3Igc3RhdGVpZF9oYXNodGJsIGhhc2ggKi8KZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDY0MTExN2YuLmRhMWQ5NzAgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtODA4LDcgKzgwOCw3IEBACiAJCWlmIChyYS0+cF9jb3VudCA9PSAwKQogCQkJZnJhcCA9IHJhcDsKIAl9Ci0JZGVwdGggPSBuZnNkc3RhdHMucmFfc2l6ZSoxMS8xMDsKKwlkZXB0aCA9IG5mc2RzdGF0cy5yYV9zaXplOwogCWlmICghZnJhcCkgewkKIAkJc3Bpbl91bmxvY2soJnJhYi0+cGJfbG9jayk7CiAJCXJldHVybiBOVUxMOwpAQCAtMTc0NCw2ICsxNzQ0LDEzIEBACiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKG9kZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKIAkJZ290byBvdXRfZHJvcF93cml0ZTsKKwlpZiAobmRlbnRyeS0+ZF9pbm9kZSkgeworCQlob3N0X2VyciA9IG5mc2RfYnJlYWtfbGVhc2UobmRlbnRyeS0+ZF9pbm9kZSk7CisJCWlmIChob3N0X2VycikKKwkJCWdvdG8gb3V0X2Ryb3Bfd3JpdGU7CisJfQorCWlmIChob3N0X2VycikKKwkJZ290byBvdXRfZHJvcF93cml0ZTsKIAlob3N0X2VyciA9IHZmc19yZW5hbWUoZmRpciwgb2RlbnRyeSwgdGRpciwgbmRlbnRyeSk7CiAJaWYgKCFob3N0X2VycikgewogCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YSh0ZmhwKTsKQEAgLTE4MTIsMjIgKzE4MTksMjIgQEAKIAogCWhvc3RfZXJyID0gbW50X3dhbnRfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAlpZiAoaG9zdF9lcnIpCi0JCWdvdG8gb3V0X25mc2VycjsKKwkJZ290byBvdXRfcHV0OwogCiAJaG9zdF9lcnIgPSBuZnNkX2JyZWFrX2xlYXNlKHJkZW50cnktPmRfaW5vZGUpOwogCWlmIChob3N0X2VycikKLQkJZ290byBvdXRfcHV0OworCQlnb3RvIG91dF9kcm9wX3dyaXRlOwogCWlmICh0eXBlICE9IFNfSUZESVIpCiAJCWhvc3RfZXJyID0gdmZzX3VubGluayhkaXJwLCByZGVudHJ5KTsKIAllbHNlCiAJCWhvc3RfZXJyID0gdmZzX3JtZGlyKGRpcnAsIHJkZW50cnkpOworCWlmICghaG9zdF9lcnIpCisJCWhvc3RfZXJyID0gY29tbWl0X21ldGFkYXRhKGZocCk7CitvdXRfZHJvcF93cml0ZToKKwltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogb3V0X3B1dDoKIAlkcHV0KHJkZW50cnkpOwogCi0JaWYgKCFob3N0X2VycikKLQkJaG9zdF9lcnIgPSBjb21taXRfbWV0YWRhdGEoZmhwKTsKLQotCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CiBvdXRfbmZzZXJyOgogCWVyciA9IG5mc2Vycm5vKGhvc3RfZXJyKTsKIG91dDoKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuYyBiL2ZzL25pbGZzMi9idG5vZGUuYwppbmRleCAzODhlOWU4Li44NWY3YmFhIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmMKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5jCkBAIC0zNSwxMSArMzUsNiBAQAogI2luY2x1ZGUgImJ0bm9kZS5oIgogCiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYykKLXsKLQluaWxmc19tYXBwaW5nX2luaXRfb25jZShidG5jKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2J0bm9kZV9hb3BzID0gewogCS5zeW5jX3BhZ2UJCT0gYmxvY2tfc3luY19wYWdlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9idG5vZGUuaCBiL2ZzL25pbGZzMi9idG5vZGUuaAppbmRleCA3OTAzNzQ5Li4xYjhlYmQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYnRub2RlLmgKKysrIGIvZnMvbmlsZnMyL2J0bm9kZS5oCkBAIC0zNyw3ICszNyw2IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdiaDsKIH07CiAKLXZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXRfb25jZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfYnRub2RlX2NhY2hlX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKik7CiB2b2lkIG5pbGZzX2J0bm9kZV9jYWNoZV9jbGVhcihzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHN0cnVjdCBidWZmZXJfaGVhZCAqbmlsZnNfYnRub2RlX2NyZWF0ZV9ibG9jayhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqYnRuYywKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9tZHQuYyBiL2ZzL25pbGZzMi9tZHQuYwppbmRleCA2YTBlMmExLi5hMGJhYmQyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvbWR0LmMKKysrIGIvZnMvbmlsZnMyL21kdC5jCkBAIC00NTQsOSArNDU0LDkgQEAKIAlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gaW5vZGUtPmlfc2ItPnNfYmRpOwogCiAJSU5JVF9MSVNUX0hFQUQoJnNoYWRvdy0+ZnJvemVuX2J1ZmZlcnMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9kYXRhKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fZGF0YSk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9kYXRhLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwotCW5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKCZzaGFkb3ctPmZyb3plbl9idG5vZGVzKTsKKwlhZGRyZXNzX3NwYWNlX2luaXRfb25jZSgmc2hhZG93LT5mcm96ZW5fYnRub2Rlcyk7CiAJbmlsZnNfbWFwcGluZ19pbml0KCZzaGFkb3ctPmZyb3plbl9idG5vZGVzLCBiZGksICZzaGFkb3dfbWFwX2FvcHMpOwogCW1pLT5taV9zaGFkb3cgPSBzaGFkb3c7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDk4MDM0MjcuLjE2MTc5MWQgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC0zOTcsNyArMzk3LDYgQEAKIAkJbmV3X2RlID0gbmlsZnNfZmluZF9lbnRyeShuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lLCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5jX25saW5rKG9sZF9pbm9kZSk7CiAJCW5pbGZzX3NldF9saW5rKG5ld19kaXIsIG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5pbGZzX21hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKQEAgLTQxMSwxMyArNDEwLDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IE5JTEZTX0xJTktfTUFYKQogCQkJCWdvdG8gb3V0X2RpcjsKIAkJfQotCQlpbmNfbmxpbmsob2xkX2lub2RlKTsKIAkJZXJyID0gbmlsZnNfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZHJvcF9ubGluayhvbGRfaW5vZGUpOwotCQkJbmlsZnNfbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOworCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZGlyOwotCQl9CiAJCWlmIChkaXJfZGUpIHsKIAkJCWluY19ubGluayhuZXdfZGlyKTsKIAkJCW5pbGZzX21hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CkBAIC00MzEsNyArNDI2LDYgQEAKIAlvbGRfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKIAluaWxmc19kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JZHJvcF9ubGluayhvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQluaWxmc19zZXRfbGluayhvbGRfaW5vZGUsIGRpcl9kZSwgZGlyX3BhZ2UsIG5ld19kaXIpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3BhZ2UuYyBiL2ZzL25pbGZzMi9wYWdlLmMKaW5kZXggMGM0MzI0MS4uYTU4NWIzNSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3BhZ2UuYworKysgYi9mcy9uaWxmczIvcGFnZS5jCkBAIC00OTIsMTkgKzQ5Miw2IEBACiAJcmV0dXJuIG5jOwogfQogCi12b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCW1lbXNldChtYXBwaW5nLCAwLCBzaXplb2YoKm1hcHBpbmcpKTsKLQlJTklUX1JBRElYX1RSRUUoJm1hcHBpbmctPnBhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCUlOSVRfUkFXX1BSSU9fVFJFRV9ST09UKCZtYXBwaW5nLT5pX21tYXApOwotCUlOSVRfTElTVF9IRUFEKCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKTsKLX0KLQogdm9pZCBuaWxmc19tYXBwaW5nX2luaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpLAogCQkJY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyAqYW9wcykKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9wYWdlLmggYi9mcy9uaWxmczIvcGFnZS5oCmluZGV4IDYyMmRmMjcuLjJhMDA5NTMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9wYWdlLmgKKysrIGIvZnMvbmlsZnMyL3BhZ2UuaApAQCAtNjEsNyArNjEsNiBAQAogaW50IG5pbGZzX2NvcHlfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CiB2b2lkIG5pbGZzX2NvcHlfYmFja19wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKTsKIHZvaWQgbmlsZnNfY2xlYXJfZGlydHlfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7Ci12b2lkIG5pbGZzX21hcHBpbmdfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIHZvaWQgbmlsZnNfbWFwcGluZ19pbml0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSwKIAkJCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgKmFvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ21lbnQuYyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKaW5kZXggNTVlYmFlNS4uMmRlOWY2MyAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ21lbnQuYworKysgYi9mcy9uaWxmczIvc2VnbWVudC5jCkBAIC00MzAsNyArNDMwLDggQEAKIAluaWxmc19zZWdjdG9yX21hcF9zZWdzdW1fZW50cnkoCiAJCXNjaSwgJnNjaS0+c2NfYmluZm9fcHRyLCBzaXplb2Yoc3RydWN0IG5pbGZzX2ZpbmZvKSk7CiAKLQlpZiAoaW5vZGUtPmlfc2IgJiYgIXRlc3RfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKSkKKwlpZiAoTklMRlNfSShpbm9kZSktPmlfcm9vdCAmJgorCSAgICAhdGVzdF9iaXQoTklMRlNfU0NfSEFWRV9ERUxUQSwgJnNjaS0+c2NfZmxhZ3MpKQogCQlzZXRfYml0KE5JTEZTX1NDX0hBVkVfREVMVEEsICZzY2ktPnNjX2ZsYWdzKTsKIAkvKiBza2lwIGZpbmZvICovCiB9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc3VwZXIuYyBiL2ZzL25pbGZzMi9zdXBlci5jCmluZGV4IDA5OTRmNmE3Li4xNjczYjNkIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VwZXIuYworKysgYi9mcy9uaWxmczIvc3VwZXIuYwpAQCAtNzA0LDcgKzcwNCw4IEBACiAJc2JwWzBdLT5zX3N0YXRlID0KIAkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoc2JwWzBdLT5zX3N0YXRlKSAmIH5OSUxGU19WQUxJRF9GUyk7CiAJLyogc3luY2hyb25pemUgc2JwWzFdIHdpdGggc2JwWzBdICovCi0JbWVtY3B5KHNicFsxXSwgc2JwWzBdLCBuaWxmcy0+bnNfc2JzaXplKTsKKwlpZiAoc2JwWzFdKQorCQltZW1jcHkoc2JwWzFdLCBzYnBbMF0sIG5pbGZzLT5uc19zYnNpemUpOwogCXJldHVybiBuaWxmc19jb21taXRfc3VwZXIoc2JpLCBOSUxGU19TQl9DT01NSVRfQUxMKTsKIH0KIApAQCAtMTI3OCw3ICsxMjc5LDcgQEAKICNpZmRlZiBDT05GSUdfTklMRlNfWEFUVFIKIAlpbml0X3J3c2VtKCZpaS0+eGF0dHJfc2VtKTsKICNlbmRpZgotCW5pbGZzX2J0bm9kZV9jYWNoZV9pbml0X29uY2UoJmlpLT5pX2J0bm9kZV9jYWNoZSk7CisJYWRkcmVzc19zcGFjZV9pbml0X29uY2UoJmlpLT5pX2J0bm9kZV9jYWNoZSk7CiAJaWktPmlfYm1hcCA9ICZpaS0+aV9ibWFwX2RhdGE7CiAJaW5vZGVfaW5pdF9vbmNlKCZpaS0+dmZzX2lub2RlKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IGI1NzJiNjcuLjMyNmU3NDcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qKgogICogbWZ0LmMgLSBOVEZTIGtlcm5lbCBtZnQgcmVjb3JkIG9wZXJhdGlvbnMuIFBhcnQgb2YgdGhlIExpbnV4LU5URlMgcHJvamVjdC4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBBbnRvbiBBbHRhcGFybWFrb3YKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDExIEFudG9uIEFsdGFwYXJtYWtvdiBhbmQgVHV4ZXJhIEluYy4KICAqIENvcHlyaWdodCAoYykgMjAwMiBSaWNoYXJkIFJ1c3NvbgogICoKICAqIFRoaXMgcHJvZ3JhbS9pbmNsdWRlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNTc2LDYgKzI1NzYsOCBAQAogCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAlpZiAoYmFzZV9uaSkgeworCQlNRlRfUkVDT1JEICptX3RtcDsKKwogCQkvKgogCQkgKiBTZXR1cCB0aGUgYmFzZSBtZnQgcmVjb3JkIGluIHRoZSBleHRlbnQgbWZ0IHJlY29yZC4gIFRoaXMKIAkJICogY29tcGxldGVzIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhbGxvY2F0ZWQgZXh0ZW50IG1mdCByZWNvcmQKQEAgLTI1ODgsMTEgKzI1OTAsMTEgQEAKIAkJICogYXR0YWNoIGl0IHRvIHRoZSBiYXNlIGlub2RlIEBiYXNlX25pIGFuZCBtYXAsIHBpbiwgYW5kIGxvY2sKIAkJICogaXRzLCBpLmUuIHRoZSBhbGxvY2F0ZWQsIG1mdCByZWNvcmQuCiAJCSAqLwotCQltID0gbWFwX2V4dGVudF9tZnRfcmVjb3JkKGJhc2VfbmksIGJpdCwgJm5pKTsKLQkJaWYgKElTX0VSUihtKSkgeworCQltX3RtcCA9IG1hcF9leHRlbnRfbWZ0X3JlY29yZChiYXNlX25pLCBiaXQsICZuaSk7CisJCWlmIChJU19FUlIobV90bXApKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gbWFwIGFsbG9jYXRlZCBleHRlbnQgIgogCQkJCQkibWZ0IHJlY29yZCAweCVsbHguIiwgKGxvbmcgbG9uZyliaXQpOwotCQkJZXJyID0gUFRSX0VSUihtKTsKKwkJCWVyciA9IFBUUl9FUlIobV90bXApOwogCQkJLyogU2V0IHRoZSBtZnQgcmVjb3JkIGl0c2VsZiBub3QgaW4gdXNlLiAqLwogCQkJbS0+ZmxhZ3MgJj0gY3B1X3RvX2xlMTYoCiAJCQkJCX5sZTE2X3RvX2NwdShNRlRfUkVDT1JEX0lOX1VTRSkpOwpAQCAtMjYwMyw2ICsyNjA1LDcgQEAKIAkJCW50ZnNfdW5tYXBfcGFnZShwYWdlKTsKIAkJCWdvdG8gdW5kb19tZnRibXBfYWxsb2M7CiAJCX0KKwkJQlVHX09OKG0gIT0gbV90bXApOwogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhlIGFsbG9jYXRlZCBtZnQgcmVjb3JkIGlzIHdyaXR0ZW4gb3V0IHRvIGRpc2suCiAJCSAqIE5vIG5lZWQgdG8gc2V0IHRoZSBpbm9kZSBkaXJ0eSBiZWNhdXNlIHRoZSBjYWxsZXIgaXMgZ29pbmcKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2pvdXJuYWwuaCBiL2ZzL29jZnMyL2pvdXJuYWwuaAppbmRleCA0M2U1NmI5Li42MTgwZGExIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9qb3VybmFsLmgKKysrIGIvZnMvb2NmczIvam91cm5hbC5oCkBAIC00MDUsOSArNDA1LDkgQEAKIAkgICAgICAgb2NmczJfcXVvdGFfdHJhbnNfY3JlZGl0cyhzYik7CiB9CiAKLS8qIGRhdGEgYmxvY2sgZm9yIG5ldyBkaXIvc3ltbGluaywgMiBmb3IgYml0bWFwIHVwZGF0ZXMgKGJpdG1hcCBmZSArCi0gKiBiaXRtYXAgYmxvY2sgZm9yIHRoZSBuZXcgYml0KSBkeF9yb290IHVwZGF0ZSBmb3IgZnJlZSBsaXN0ICovCi0jZGVmaW5lIE9DRlMyX0RJUl9MSU5LX0FERElUSU9OQUxfQ1JFRElUUyAoMSArIDIgKyAxKQorLyogZGF0YSBibG9jayBmb3IgbmV3IGRpci9zeW1saW5rLCBhbGxvY2F0aW9uIG9mIGRpcmVjdG9yeSBibG9jaywgZHhfcm9vdAorICogdXBkYXRlIGZvciBmcmVlIGxpc3QgKi8KKyNkZWZpbmUgT0NGUzJfRElSX0xJTktfQURESVRJT05BTF9DUkVESVRTICgxICsgT0NGUzJfU1VCQUxMT0NfQUxMT0MgKyAxKQogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hZGRfZGlyX2luZGV4X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3JlZmNvdW50dHJlZS5jIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKaW5kZXggYjVmOTE2MC4uMTllYmM1YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKKysrIGIvZnMvb2NmczIvcmVmY291bnR0cmVlLmMKQEAgLTMyMjgsNyArMzIyOCw3IEBACiAJCQkJCXUzMiBudW1fY2x1c3RlcnMsIHVuc2lnbmVkIGludCBlX2ZsYWdzKQogewogCWludCByZXQsIGRlbGV0ZSwgaW5kZXgsIGNyZWRpdHMgPSAgMDsKLQl1MzIgbmV3X2JpdCwgbmV3X2xlbjsKKwl1MzIgbmV3X2JpdCwgbmV3X2xlbiwgb3JpZ19udW1fY2x1c3RlcnM7CiAJdW5zaWduZWQgaW50IHNldF9sZW47CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihzYik7CiAJaGFuZGxlX3QgKmhhbmRsZTsKQEAgLTMyNjEsNiArMzI2MSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAorCW9yaWdfbnVtX2NsdXN0ZXJzID0gbnVtX2NsdXN0ZXJzOworCiAJd2hpbGUgKG51bV9jbHVzdGVycykgewogCQlyZXQgPSBvY2ZzMl9nZXRfcmVmY291bnRfcmVjKHJlZl9jaSwgY29udGV4dC0+cmVmX3Jvb3RfYmgsCiAJCQkJCSAgICAgcF9jbHVzdGVyLCBudW1fY2x1c3RlcnMsCkBAIC0zMzQ4LDcgKzMzNTAsOCBAQAogCSAqIGluIHdyaXRlLWJhY2sgbW9kZS4KIAkgKi8KIAlpZiAoY29udGV4dC0+Z2V0X2NsdXN0ZXJzID09IG9jZnMyX2RpX2dldF9jbHVzdGVycykgewotCQlyZXQgPSBvY2ZzMl9jb3dfc3luY193cml0ZWJhY2soc2IsIGNvbnRleHQsIGNwb3MsIG51bV9jbHVzdGVycyk7CisJCXJldCA9IG9jZnMyX2Nvd19zeW5jX3dyaXRlYmFjayhzYiwgY29udGV4dCwgY3BvcywKKwkJCQkJICAgICAgIG9yaWdfbnVtX2NsdXN0ZXJzKTsKIAkJaWYgKHJldCkKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCAzOGY5ODZkLi4zNmM0MjNmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTEzMTYsNyArMTMxNiw3IEBACiAJCQkgICAgICAgc3RydWN0IG1vdW50X29wdGlvbnMgKm1vcHQsCiAJCQkgICAgICAgaW50IGlzX3JlbW91bnQpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzLCB1c2VyX3N0YWNrID0gMDsKIAljaGFyICpwOwogCXUzMiB0bXA7CiAKQEAgLTE0NTksNiArMTQ1OSwxNSBAQAogCQkJbWVtY3B5KG1vcHQtPmNsdXN0ZXJfc3RhY2ssIGFyZ3NbMF0uZnJvbSwKIAkJCSAgICAgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pOwogCQkJbW9wdC0+Y2x1c3Rlcl9zdGFja1tPQ0ZTMl9TVEFDS19MQUJFTF9MRU5dID0gJ1wwJzsKKwkJCS8qCisJCQkgKiBPcGVuIGNvZGUgdGhlIG1lbWNtcCBoZXJlIGFzIHdlIGRvbid0IGhhdmUKKwkJCSAqIGFuIG9zYiB0byBwYXNzIHRvCisJCQkgKiBvY2ZzMl91c2Vyc3BhY2Vfc3RhY2soKS4KKwkJCSAqLworCQkJaWYgKG1lbWNtcChtb3B0LT5jbHVzdGVyX3N0YWNrLAorCQkJCSAgIE9DRlMyX0NMQVNTSUNfQ0xVU1RFUl9TVEFDSywKKwkJCQkgICBPQ0ZTMl9TVEFDS19MQUJFTF9MRU4pKQorCQkJCXVzZXJfc3RhY2sgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2lub2RlNjQ6CiAJCQltb3B0LT5tb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfSU5PREU2NDsKQEAgLTE1MTQsMTMgKzE1MjMsMTYgQEAKIAkJfQogCX0KIAotCS8qIEVuc3VyZSBvbmx5IG9uZSBoZWFydGJlYXQgbW9kZSAqLwotCXRtcCA9IG1vcHQtPm1vdW50X29wdCAmIChPQ0ZTMl9NT1VOVF9IQl9MT0NBTCB8IE9DRlMyX01PVU5UX0hCX0dMT0JBTCB8Ci0JCQkJIE9DRlMyX01PVU5UX0hCX05PTkUpOwotCWlmIChod2VpZ2h0MzIodG1wKSAhPSAxKSB7Ci0JCW1sb2coTUxfRVJST1IsICJJbnZhbGlkIGhlYXJ0YmVhdCBtb3VudCBvcHRpb25zXG4iKTsKLQkJc3RhdHVzID0gMDsKLQkJZ290byBiYWlsOworCWlmICh1c2VyX3N0YWNrID09IDApIHsKKwkJLyogRW5zdXJlIG9ubHkgb25lIGhlYXJ0YmVhdCBtb2RlICovCisJCXRtcCA9IG1vcHQtPm1vdW50X29wdCAmIChPQ0ZTMl9NT1VOVF9IQl9MT0NBTCB8CisJCQkJCSBPQ0ZTMl9NT1VOVF9IQl9HTE9CQUwgfAorCQkJCQkgT0NGUzJfTU9VTlRfSEJfTk9ORSk7CisJCWlmIChod2VpZ2h0MzIodG1wKSAhPSAxKSB7CisJCQltbG9nKE1MX0VSUk9SLCAiSW52YWxpZCBoZWFydGJlYXQgbW91bnQgb3B0aW9uc1xuIik7CisJCQlzdGF0dXMgPSAwOworCQkJZ290byBiYWlsOworCQl9CiAJfQogCiAJc3RhdHVzID0gMTsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCBlNTIzODllLi41YTJjNmViIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC03OTAsNiArNzkwLDggQEAKIAogCS8qIFBpY2sgdXAgdGhlIGZpbHAgZnJvbSB0aGUgb3BlbiBpbnRlbnQgKi8KIAlmaWxwID0gbmQtPmludGVudC5vcGVuLmZpbGU7CisJbmQtPmludGVudC5vcGVuLmZpbGUgPSBOVUxMOworCiAJLyogSGFzIHRoZSBmaWxlc3lzdGVtIGluaXRpYWxpc2VkIHRoZSBmaWxlIGZvciB1cz8gKi8KIAlpZiAoZmlscC0+Zl9wYXRoLmRlbnRyeSA9PSBOVUxMKSB7CiAJCXBhdGhfZ2V0KCZuZC0+cGF0aCk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCA3ODljNjI1Li5iMTBlMzU0IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTI1MSw2ICsyNTEsMTEgQEAKIAl9CiAKIAl2bS0+dmJsa19zaXplICAgICA9IGdldF91bmFsaWduZWRfYmUzMihkYXRhICsgMHgwOCk7CisJaWYgKHZtLT52YmxrX3NpemUgPT0gMCkgeworCQlsZG1fZXJyb3IgKCJJbGxlZ2FsIFZCTEsgc2l6ZSIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCiAJdm0tPnZibGtfb2Zmc2V0ICAgPSBnZXRfdW5hbGlnbmVkX2JlMzIoZGF0YSArIDB4MEMpOwogCXZtLT5sYXN0X3ZibGtfc2VxID0gZ2V0X3VuYWxpZ25lZF9iZTMyKGRhdGEgKyAweDA0KTsKIApkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9tYWMuYyBiL2ZzL3BhcnRpdGlvbnMvbWFjLmMKaW5kZXggNjhkNmEyMS4uMTFmNjg4YiAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tYWMuYworKysgYi9mcy9wYXJ0aXRpb25zL21hYy5jCkBAIC0yOSwxMCArMjksOSBAQAogCiBpbnQgbWFjX3BhcnRpdGlvbihzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnN0YXRlKQogewotCWludCBzbG90ID0gMTsKIAlTZWN0b3Igc2VjdDsKIAl1bnNpZ25lZCBjaGFyICpkYXRhOwotCWludCBibGssIGJsb2Nrc19pbl9tYXA7CisJaW50IHNsb3QsIGJsb2Nrc19pbl9tYXA7CiAJdW5zaWduZWQgc2Vjc2l6ZTsKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAlpbnQgZm91bmRfcm9vdCA9IDA7CkBAIC01OSwxMCArNTgsMTQgQEAKIAkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CiAJCXJldHVybiAwOwkJLyogbm90IGEgTWFjT1MgZGlzayAqLwogCX0KLQlzdHJsY2F0KHN0YXRlLT5wcF9idWYsICIgW21hY10iLCBQQUdFX1NJWkUpOwogCWJsb2Nrc19pbl9tYXAgPSBiZTMyX3RvX2NwdShwYXJ0LT5tYXBfY291bnQpOwotCWZvciAoYmxrID0gMTsgYmxrIDw9IGJsb2Nrc19pbl9tYXA7ICsrYmxrKSB7Ci0JCWludCBwb3MgPSBibGsgKiBzZWNzaXplOworCWlmIChibG9ja3NfaW5fbWFwIDwgMCB8fCBibG9ja3NfaW5fbWFwID49IERJU0tfTUFYX1BBUlRTKSB7CisJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOworCQlyZXR1cm4gMDsKKwl9CisJc3RybGNhdChzdGF0ZS0+cHBfYnVmLCAiIFttYWNdIiwgUEFHRV9TSVpFKTsKKwlmb3IgKHNsb3QgPSAxOyBzbG90IDw9IGJsb2Nrc19pbl9tYXA7ICsrc2xvdCkgeworCQlpbnQgcG9zID0gc2xvdCAqIHNlY3NpemU7CiAJCXB1dF9kZXZfc2VjdG9yKHNlY3QpOwogCQlkYXRhID0gcmVhZF9wYXJ0X3NlY3RvcihzdGF0ZSwgcG9zLzUxMiwgJnNlY3QpOwogCQlpZiAoIWRhdGEpCkBAIC0xMTMsMTMgKzExNiwxMSBAQAogCQkJfQogCiAJCQlpZiAoZ29vZG5lc3MgPiBmb3VuZF9yb290X2dvb2RuZXNzKSB7Ci0JCQkJZm91bmRfcm9vdCA9IGJsazsKKwkJCQlmb3VuZF9yb290ID0gc2xvdDsKIAkJCQlmb3VuZF9yb290X2dvb2RuZXNzID0gZ29vZG5lc3M7CiAJCQl9CiAJCX0KICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KLQotCQkrK3Nsb3Q7CiAJfQogI2lmZGVmIENPTkZJR19QUENfUE1BQwogCWlmIChmb3VuZF9yb290X2dvb2RuZXNzKQpkaWZmIC0tZ2l0IGEvZnMvcG9zaXhfYWNsLmMgYi9mcy9wb3NpeF9hY2wuYwppbmRleCAzOWRmOTVhLi5iMWNmNmJmIDEwMDY0NAotLS0gYS9mcy9wb3NpeF9hY2wuYworKysgYi9mcy9wb3NpeF9hY2wuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAorRVhQT1JUX1NZTUJPTChwb3NpeF9hY2xfaW5pdCk7CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9hbGxvYyk7CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF9jbG9uZSk7CiBFWFBPUlRfU1lNQk9MKHBvc2l4X2FjbF92YWxpZCk7CkBAIC0zMiw2ICszMywxNiBAQAogRVhQT1JUX1NZTUJPTChwb3NpeF9hY2xfcGVybWlzc2lvbik7CiAKIC8qCisgKiBJbml0IGEgZnJlc2ggcG9zaXhfYWNsCisgKi8KK3ZvaWQKK3Bvc2l4X2FjbF9pbml0KHN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgaW50IGNvdW50KQoreworCWF0b21pY19zZXQoJmFjbC0+YV9yZWZjb3VudCwgMSk7CisJYWNsLT5hX2NvdW50ID0gY291bnQ7Cit9CisKKy8qCiAgKiBBbGxvY2F0ZSBhIG5ldyBBQ0wgd2l0aCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBlbnRyaWVzLgogICovCiBzdHJ1Y3QgcG9zaXhfYWNsICoKQEAgLTQwLDEwICs1MSw4IEBACiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2Yoc3RydWN0IHBvc2l4X2FjbCkgKwogCSAgICAgICAgICAgICAgICAgICAgY291bnQgKiBzaXplb2Yoc3RydWN0IHBvc2l4X2FjbF9lbnRyeSk7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0ga21hbGxvYyhzaXplLCBmbGFncyk7Ci0JaWYgKGFjbCkgewotCQlhdG9taWNfc2V0KCZhY2wtPmFfcmVmY291bnQsIDEpOwotCQlhY2wtPmFfY291bnQgPSBjb3VudDsKLQl9CisJaWYgKGFjbCkKKwkJcG9zaXhfYWNsX2luaXQoYWNsLCBjb3VudCk7CiAJcmV0dXJuIGFjbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGRmMmI3MDMuLjdjOTljMWMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYworKysgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTM1Myw5ICszNTMsNiBAQAogCXRhc2tfY2FwKG0sIHRhc2spOwogCXRhc2tfY3B1c19hbGxvd2VkKG0sIHRhc2spOwogCWNwdXNldF90YXNrX3N0YXR1c19hbGxvd2VkKG0sIHRhc2spOwotI2lmIGRlZmluZWQoQ09ORklHX1MzOTApCi0JdGFza19zaG93X3JlZ3MobSwgdGFzayk7Ci0jZW5kaWYKIAl0YXNrX2NvbnRleHRfc3dpdGNoX2NvdW50cyhtLCB0YXNrKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvY29uc29sZXMuYyBiL2ZzL3Byb2MvY29uc29sZXMuYwppbmRleCBlYWZjMjJhLi5iNzAxZWFhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2NvbnNvbGVzLmMKKysrIGIvZnMvcHJvYy9jb25zb2xlcy5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJc3RydWN0IGNvbnNvbGUgKmNvbjsKIAlsb2ZmX3Qgb2ZmID0gMDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmb3JfZWFjaF9jb25zb2xlKGNvbikKIAkJaWYgKG9mZisrID09ICpwb3MpCiAJCQlicmVhazsKQEAgLTg0LDcgKzg0LDcgQEAKIAogc3RhdGljIHZvaWQgY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV91bmxvY2soKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBjb25zb2xlc19vcCA9IHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMgYi9mcy9wcm9jL3Byb2NfZGV2dHJlZS5jCmluZGV4IGQ5Mzk2YTQuLjkyN2NiZDEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19kZXZ0cmVlLmMKKysrIGIvZnMvcHJvYy9wcm9jX2RldnRyZWUuYwpAQCAtMjMzLDcgKzIzMyw3IEBACiAJCXJldHVybjsKIAlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAocm9vdCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiL3Byb2MvZGV2aWNlLXRyZWU6IGNhbid0IGZpbmQgcm9vdFxuIik7CisJCXByX2RlYnVnKCIvcHJvYy9kZXZpY2UtdHJlZTogY2FuJ3QgZmluZCByb290XG4iKTsKIAkJcmV0dXJuOwogCX0KIAlwcm9jX2RldmljZV90cmVlX2FkZF9ub2RlKHJvb3QsIHByb2NfZGV2aWNlX3RyZWUpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggYmE1ZjUxZS4uNjhmZGY0NSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC03NzEsNyArNzcxLDcgQEAKIAkJCQkJRU1QVFlfRElSX1NJWkVfVjEgOiBFTVBUWV9ESVJfU0laRSwKIAkJCQkJZGVudHJ5LCBpbm9kZSwgJnNlY3VyaXR5KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRpci0+aV9ubGluay0tOworCQlERUNfRElSX0lOT0RFX05MSU5LKGRpcikKIAkJZ290byBvdXRfZmFpbGVkOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvYmxvY2suYyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKaW5kZXggMmZiMjg4Mi4uOGFiNDhiYyAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvYmxvY2suYworKysgYi9mcy9zcXVhc2hmcy9ibG9jay5jCkBAIC02Myw2ICs2MywxNCBAQAogCQkqbGVuZ3RoID0gKHVuc2lnbmVkIGNoYXIpIGJoLT5iX2RhdGFbKm9mZnNldF0gfAogCQkJKHVuc2lnbmVkIGNoYXIpIGJoLT5iX2RhdGFbKm9mZnNldCArIDFdIDw8IDg7CiAJCSpvZmZzZXQgKz0gMjsKKworCQlpZiAoKm9mZnNldCA9PSBtc2Jsay0+ZGV2Ymxrc2l6ZSkgeworCQkJcHV0X2JoKGJoKTsKKwkJCWJoID0gc2JfYnJlYWQoc2IsICsrKCpjdXJfaW5kZXgpKTsKKwkJCWlmIChiaCA9PSBOVUxMKQorCQkJCXJldHVybiBOVUxMOworCQkJKm9mZnNldCA9IDA7CisJCX0KIAl9CiAKIAlyZXR1cm4gYmg7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMgYi9mcy9zcXVhc2hmcy94el93cmFwcGVyLmMKaW5kZXggODU2NzU2Yy4uYzRlYjQwMCAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMveHpfd3JhcHBlci5jCisrKyBiL2ZzL3NxdWFzaGZzL3h6X3dyYXBwZXIuYwpAQCAtOTUsMTIgKzk1LDYgQEAKIAkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoW2tdKSkKIAkJCQlnb3RvIHJlbGVhc2VfbXV0ZXg7CiAKLQkJCWlmIChhdmFpbCA9PSAwKSB7Ci0JCQkJb2Zmc2V0ID0gMDsKLQkJCQlwdXRfYmgoYmhbaysrXSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KIAkJCXN0cmVhbS0+YnVmLmluID0gYmhba10tPmJfZGF0YSArIG9mZnNldDsKIAkJCXN0cmVhbS0+YnVmLmluX3NpemUgPSBhdmFpbDsKIAkJCXN0cmVhbS0+YnVmLmluX3BvcyA9IDA7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy96bGliX3dyYXBwZXIuYyBiL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCmluZGV4IDgxOGE1ZTAuLjQ2NjFhZTIgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCisrKyBiL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCkBAIC04MiwxMiArODIsNiBAQAogCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQogCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKIAotCQkJaWYgKGF2YWlsID09IDApIHsKLQkJCQlvZmZzZXQgPSAwOwotCQkJCXB1dF9iaChiaFtrKytdKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQogCQkJc3RyZWFtLT5uZXh0X2luID0gYmhba10tPmJfZGF0YSArIG9mZnNldDsKIAkJCXN0cmVhbS0+YXZhaWxfaW4gPSBhdmFpbDsKIAkJCW9mZnNldCA9IDA7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA3NGUxNDllLi43ZTlkZDRjIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTE3Nyw2ICsxNzcsMTEgQEAKIAlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnMgPSBzLT5zX3R5cGU7CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnMtPnNfYWN0aXZlKSkgewogCQlmcy0+a2lsbF9zYihzKTsKKwkJLyoKKwkJICogV2UgbmVlZCB0byBjYWxsIHJjdV9iYXJyaWVyIHNvIGFsbCB0aGUgZGVsYXllZCByY3UgZnJlZQorCQkgKiBpbm9kZXMgYXJlIGZsdXNoZWQgYmVmb3JlIHdlIHJlbGVhc2UgdGhlIGZzIG1vZHVsZS4KKwkJICovCisJCXJjdV9iYXJyaWVyKCk7CiAJCXB1dF9maWxlc3lzdGVtKGZzKTsKIAkJcHV0X3N1cGVyKHMpOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYjQyN2IxMi4uZTQ3NGZiYyAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMjQ1LDcgKzI0NSw2IEBACiAJCW5ld19kZSA9IHN5c3ZfZmluZF9lbnRyeShuZXdfZGVudHJ5LCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJc3lzdl9zZXRfbGluayhuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQpAQCAtMjU3LDE4ICsyNTYsMTUgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFNZU1ZfU0IobmV3X2Rpci0+aV9zYiktPnNfbGlua19tYXgpCiAJCQkJZ290byBvdXRfZGlyOwogCQl9Ci0JCWlub2RlX2luY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CiAJCWVyciA9IHN5c3ZfYWRkX2xpbmsobmV3X2RlbnRyeSwgb2xkX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwkJaWYgKGVycikKIAkJCWdvdG8gb3V0X2RpcjsKLQkJfQogCQlpZiAoZGlyX2RlKQogCQkJaW5vZGVfaW5jX2xpbmtfY291bnQobmV3X2Rpcik7CiAJfQogCiAJc3lzdl9kZWxldGVfZW50cnkob2xkX2RlLCBvbGRfcGFnZSk7Ci0JaW5vZGVfZGVjX2xpbmtfY291bnQob2xkX2lub2RlKTsKKwltYXJrX2lub2RlX2RpcnR5KG9sZF9pbm9kZSk7CiAKIAlpZiAoZGlyX2RlKSB7CiAJCXN5c3Zfc2V0X2xpbmsoZGlyX2RlLCBkaXJfcGFnZSwgbmV3X2Rpcik7CmRpZmYgLS1naXQgYS9mcy91ZGYvbmFtZWkuYyBiL2ZzL3VkZi9uYW1laS5jCmluZGV4IDJiZTBmOWUuLmI3YzMzOGQgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9uYW1laS5jCisrKyBiL2ZzL3VkZi9uYW1laS5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8bGludXgvY3JjLWl0dS10Lmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KIAorZW51bSB7IFVERl9NQVhfTElOS1MgPSAweGZmZmYgfTsKKwogc3RhdGljIGlubGluZSBpbnQgdWRmX21hdGNoKGludCBsZW4xLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lMSwgaW50IGxlbjIsCiAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTIpCiB7CkBAIC02NTAsNyArNjUyLDcgQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCiAJZXJyID0gLUVNTElOSzsKLQlpZiAoZGlyLT5pX25saW5rID49ICgyNTYgPDwgc2l6ZW9mKGRpci0+aV9ubGluaykpIC0gMSkKKwlpZiAoZGlyLT5pX25saW5rID49IFVERl9NQVhfTElOS1MpCiAJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVJTzsKQEAgLTEwMzQsOSArMTAzNiw4IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpLCAqZmk7CiAJaW50IGVycjsKIAotCWlmIChpbm9kZS0+aV9ubGluayA+PSAoMjU2IDw8IHNpemVvZihpbm9kZS0+aV9ubGluaykpIC0gMSkgeworCWlmIChpbm9kZS0+aV9ubGluayA+PSBVREZfTUFYX0xJTktTKQogCQlyZXR1cm4gLUVNTElOSzsKLQl9CiAKIAlmaSA9IHVkZl9hZGRfZW50cnkoZGlyLCBkZW50cnksICZmaWJoLCAmY2ZpLCAmZXJyKTsKIAlpZiAoIWZpKSB7CkBAIC0xMTMxLDkgKzExMzIsNyBAQAogCQkJZ290byBlbmRfcmVuYW1lOwogCiAJCXJldHZhbCA9IC1FTUxJTks7Ci0JCWlmICghbmV3X2lub2RlICYmCi0JCQluZXdfZGlyLT5pX25saW5rID49Ci0JCQkJKDI1NiA8PCBzaXplb2YobmV3X2Rpci0+aV9ubGluaykpIC0gMSkKKwkJaWYgKCFuZXdfaW5vZGUgJiYgbmV3X2Rpci0+aV9ubGluayA+PSBVREZfTUFYX0xJTktTKQogCQkJZ290byBlbmRfcmVuYW1lOwogCX0KIAlpZiAoIW5maSkgewpkaWZmIC0tZ2l0IGEvZnMvdWZzL25hbWVpLmMgYi9mcy91ZnMvbmFtZWkuYwppbmRleCAxMmYzOWI5Li5kNmY2ODE1IDEwMDY0NAotLS0gYS9mcy91ZnMvbmFtZWkuYworKysgYi9mcy91ZnMvbmFtZWkuYwpAQCAtMzA2LDcgKzMwNiw2IEBACiAJCW5ld19kZSA9IHVmc19maW5kX2VudHJ5KG5ld19kaXIsICZuZXdfZGVudHJ5LT5kX25hbWUsICZuZXdfcGFnZSk7CiAJCWlmICghbmV3X2RlKQogCQkJZ290byBvdXRfZGlyOwotCQlpbm9kZV9pbmNfbGlua19jb3VudChvbGRfaW5vZGUpOwogCQl1ZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKQEAgLTMxOCwxMiArMzE3LDkgQEAKIAkJCWlmIChuZXdfZGlyLT5pX25saW5rID49IFVGU19MSU5LX01BWCkKIAkJCQlnb3RvIG91dF9kaXI7CiAJCX0KLQkJaW5vZGVfaW5jX2xpbmtfY291bnQob2xkX2lub2RlKTsKIAkJZXJyID0gdWZzX2FkZF9saW5rKG5ld19kZW50cnksIG9sZF9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9kaXI7Ci0JCX0KIAkJaWYgKGRpcl9kZSkKIAkJCWlub2RlX2luY19saW5rX2NvdW50KG5ld19kaXIpOwogCX0KQEAgLTMzMSwxMiArMzI3LDExIEBACiAJLyoKIAkgKiBMaWtlIG1vc3Qgb3RoZXIgVW5peCBzeXN0ZW1zLCBzZXQgdGhlIGN0aW1lIGZvciBpbm9kZXMgb24gYQogIAkgKiByZW5hbWUuCi0JICogaW5vZGVfZGVjX2xpbmtfY291bnQoKSB3aWxsIG1hcmsgdGhlIGlub2RlIGRpcnR5LgogCSAqLwogCW9sZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAKIAl1ZnNfZGVsZXRlX2VudHJ5KG9sZF9kaXIsIG9sZF9kZSwgb2xkX3BhZ2UpOwotCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9pbm9kZSk7CisJbWFya19pbm9kZV9kaXJ0eShvbGRfaW5vZGUpOwogCiAJaWYgKGRpcl9kZSkgewogCQl1ZnNfc2V0X2xpbmsob2xkX2lub2RlLCBkaXJfZGUsIGRpcl9wYWdlLCBuZXdfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2Rpc2NhcmQuYwppbmRleCAwNTIwMWFlLi5kNjE2MTFjIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19kaXNjYXJkLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZGlzY2FyZC5jCkBAIC0xNTIsNiArMTUyLDggQEAKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRVBFUk0pOworCWlmICghYmxrX3F1ZXVlX2Rpc2NhcmQocSkpCisJCXJldHVybiAtWEZTX0VSUk9SKEVPUE5PVFNVUFApOwogCWlmIChjb3B5X2Zyb21fdXNlcigmcmFuZ2UsIHVyYW5nZSwgc2l6ZW9mKHJhbmdlKSkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGIwNmVkZTEuLjBjYTBlM2MgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNjk1LDE0ICs2OTUsMTkgQEAKIAl4ZnNfbW91bnRfdAkJKm1wLAogCXZvaWQJCQlfX3VzZXIgKmFyZykKIHsKLQl4ZnNfZnNvcF9nZW9tX3YxX3QJZnNnZW87CisJeGZzX2Zzb3BfZ2VvbV90ICAgICAgICAgZnNnZW87CiAJaW50CQkJZXJyb3I7CiAKLQllcnJvciA9IHhmc19mc19nZW9tZXRyeShtcCwgKHhmc19mc29wX2dlb21fdCAqKSZmc2dlbywgMyk7CisJZXJyb3IgPSB4ZnNfZnNfZ2VvbWV0cnkobXAsICZmc2dlbywgMyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gLWVycm9yOwogCi0JaWYgKGNvcHlfdG9fdXNlcihhcmcsICZmc2dlbywgc2l6ZW9mKGZzZ2VvKSkpCisJLyoKKwkgKiBDYWxsZXIgc2hvdWxkIGhhdmUgcGFzc2VkIGFuIGFyZ3VtZW50IG9mIHR5cGUKKwkgKiB4ZnNfZnNvcF9nZW9tX3YxX3QuICBUaGlzIGlzIGEgcHJvcGVyIHN1YnNldCBvZiB0aGUKKwkgKiB4ZnNfZnNvcF9nZW9tX3QgdGhhdCB4ZnNfZnNfZ2VvbWV0cnkoKSBmaWxscyBpbi4KKwkgKi8KKwlpZiAoY29weV90b191c2VyKGFyZywgJmZzZ2VvLCBzaXplb2YoeGZzX2Zzb3BfZ2VvbV92MV90KSkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVGQVVMVCk7CiAJcmV0dXJuIDA7CiB9CkBAIC05ODUsMTAgKzk5MCwyMiBAQAogCiAJCS8qCiAJCSAqIEV4dGVudCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYXBwcm9wcmlhdGUgYmxvY2sKLQkJICogc2l6ZSwgaWYgc2V0IGF0IGFsbC4KKwkJICogc2l6ZSwgaWYgc2V0IGF0IGFsbC4gSXQgbXVzdCBhbHNvIGJlIHNtYWxsZXIgdGhhbiB0aGUKKwkJICogbWF4aW11bSBleHRlbnQgc2l6ZSBzdXBwb3J0ZWQgYnkgdGhlIGZpbGVzeXN0ZW0uCisJCSAqCisJCSAqIEFsc28sIGZvciBub24tcmVhbHRpbWUgZmlsZXMsIGxpbWl0IHRoZSBleHRlbnQgc2l6ZSBoaW50IHRvCisJCSAqIGhhbGYgdGhlIHNpemUgb2YgdGhlIEFHcyBpbiB0aGUgZmlsZXN5c3RlbSBzbyBhbGlnbm1lbnQKKwkJICogZG9lc24ndCByZXN1bHQgaW4gZXh0ZW50cyBsYXJnZXIgdGhhbiBhbiBBRy4KIAkJICovCiAJCWlmIChmYS0+ZnN4X2V4dHNpemUgIT0gMCkgewotCQkJeGZzX2V4dGxlbl90CXNpemU7CisJCQl4ZnNfZXh0bGVuX3QgICAgc2l6ZTsKKwkJCXhmc19mc2Jsb2NrX3QgICBleHRzaXplX2ZzYjsKKworCQkJZXh0c2l6ZV9mc2IgPSBYRlNfQl9UT19GU0IobXAsIGZhLT5mc3hfZXh0c2l6ZSk7CisJCQlpZiAoZXh0c2l6ZV9mc2IgPiBNQVhFWFRMRU4pIHsKKwkJCQljb2RlID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCQkJZ290byBlcnJvcl9yZXR1cm47CisJCQl9CiAKIAkJCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApIHx8CiAJCQkgICAgKChtYXNrICYgRlNYX1hGTEFHUykgJiYKQEAgLTk5Nyw2ICsxMDE0LDEwIEBACiAJCQkJICAgICAgIG1wLT5tX3NiLnNiX2Jsb2NrbG9nOwogCQkJfSBlbHNlIHsKIAkJCQlzaXplID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplOworCQkJCWlmIChleHRzaXplX2ZzYiA+IG1wLT5tX3NiLnNiX2FnYmxvY2tzIC8gMikgeworCQkJCQljb2RlID0gWEZTX0VSUk9SKEVJTlZBTCk7CisJCQkJCWdvdG8gZXJyb3JfcmV0dXJuOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKGZhLT5mc3hfZXh0c2l6ZSAlIHNpemUpIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCBmOGU4NTRiLi4yMDZhMjgxIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xODYzLDEyICsxODYzLDE0IEBACiAJeGZzX2RxdW90X3QJKmRxcG91dDsKIAl4ZnNfZHF1b3RfdAkqZHFwOwogCWludAkJcmVzdGFydHM7CisJaW50CQlzdGFydGFnYWluOwogCiAJcmVzdGFydHMgPSAwOwogCWRxcG91dCA9IE5VTEw7CiAKIAkvKiBsb2Nrb3JkZXI6IGhhc2hjaGFpbmxvY2ssIGZyZWVsaXN0bG9jaywgbXBsaXN0bG9jaywgZHFsb2NrLCBkcWZsb2NrICovCi1zdGFydGFnYWluOgorYWdhaW46CisJc3RhcnRhZ2FpbiA9IDA7CiAJbXV0ZXhfbG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRxcCwgJnhmc19HcW0tPnFtX2RxZnJsaXN0LCBxX2ZyZWVsaXN0KSB7CkBAIC0xODg1LDEzICsxODg3LDEwIEBACiAJCQlBU1NFUlQoISAoZHFwLT5kcV9mbGFncyAmIFhGU19EUV9JTkFDVElWRSkpOwogCiAJCQl0cmFjZV94ZnNfZHFyZWNsYWltX3dhbnQoZHFwKTsKLQotCQkJeGZzX2RxdW5sb2NrKGRxcCk7Ci0JCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwotCQkJaWYgKCsrcmVzdGFydHMgPj0gWEZTX1FNX1JFQ0xBSU1fTUFYX1JFU1RBUlRTKQotCQkJCXJldHVybiBOVUxMOwogCQkJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcXdhbnRzKTsKLQkJCWdvdG8gc3RhcnRhZ2FpbjsKKwkJCXJlc3RhcnRzKys7CisJCQlzdGFydGFnYWluID0gMTsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQkvKgpAQCAtMTkwNiwyMyArMTkwNSwyMCBAQAogCQkJQVNTRVJUKGxpc3RfZW1wdHkoJmRxcC0+cV9tcGxpc3QpKTsKIAkJCWxpc3RfZGVsX2luaXQoJmRxcC0+cV9mcmVlbGlzdCk7CiAJCQl4ZnNfR3FtLT5xbV9kcWZybGlzdF9jbnQtLTsKLQkJCXhmc19kcXVubG9jayhkcXApOwogCQkJZHFwb3V0ID0gZHFwOwogCQkJWFFNX1NUQVRTX0lOQyh4cW1zdGF0cy54c19xbV9kcWluYWN0X3JlY2xhaW1zKTsKLQkJCWJyZWFrOworCQkJZ290byBkcXVubG9jazsKIAkJfQogCiAJCUFTU0VSVChkcXAtPnFfaGFzaCk7CiAJCUFTU0VSVCghbGlzdF9lbXB0eSgmZHFwLT5xX21wbGlzdCkpOwogCiAJCS8qCi0JCSAqIFRyeSB0byBncmFiIHRoZSBmbHVzaCBsb2NrLiBJZiB0aGlzIGRxdW90IGlzIGluIHRoZSBwcm9jZXNzIG9mCi0JCSAqIGdldHRpbmcgZmx1c2hlZCB0byBkaXNrLCB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaXQuCisJCSAqIFRyeSB0byBncmFiIHRoZSBmbHVzaCBsb2NrLiBJZiB0aGlzIGRxdW90IGlzIGluIHRoZSBwcm9jZXNzCisJCSAqIG9mIGdldHRpbmcgZmx1c2hlZCB0byBkaXNrLCB3ZSBkb24ndCB3YW50IHRvIHJlY2xhaW0gaXQuCiAJCSAqLwotCQlpZiAoIXhmc19kcWZsb2NrX25vd2FpdChkcXApKSB7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCWNvbnRpbnVlOwotCQl9CisJCWlmICgheGZzX2RxZmxvY2tfbm93YWl0KGRxcCkpCisJCQlnb3RvIGRxdW5sb2NrOwogCiAJCS8qCiAJCSAqIFdlIGhhdmUgdGhlIGZsdXNoIGxvY2sgc28gd2Uga25vdyB0aGF0IHRoaXMgaXMgbm90IGluIHRoZQpAQCAtMTk0NCw4ICsxOTQwLDcgQEAKIAkJCQl4ZnNfZnNfY21uX2VycihDRV9XQVJOLCBtcCwKIAkJCSJ4ZnNfcW1fZHFyZWNsYWltOiBkcXVvdCAlcCBmbHVzaCBmYWlsZWQiLCBkcXApOwogCQkJfQotCQkJeGZzX2RxdW5sb2NrKGRxcCk7IC8qIGRxZmx1c2ggdW5sb2NrcyBkcWZsb2NrICovCi0JCQljb250aW51ZTsKKwkJCWdvdG8gZHF1bmxvY2s7CiAJCX0KIAogCQkvKgpAQCAtMTk2NywxMyArMTk2Miw4IEBACiAJCSAqLwogCQlpZiAoIW11dGV4X3RyeWxvY2soJm1wLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0X2xvY2spKSB7CiAJCQlyZXN0YXJ0cysrOwotCQkJbXV0ZXhfdW5sb2NrKCZkcXAtPnFfaGFzaC0+cWhfbG9jayk7Ci0JCQl4ZnNfZHFmdW5sb2NrKGRxcCk7Ci0JCQl4ZnNfZHF1bmxvY2soZHFwKTsKLQkJCW11dGV4X3VubG9jaygmeGZzX0dxbS0+cW1fZHFmcmxpc3RfbG9jayk7Ci0JCQlpZiAocmVzdGFydHMrKyA+PSBYRlNfUU1fUkVDTEFJTV9NQVhfUkVTVEFSVFMpCi0JCQkJcmV0dXJuIE5VTEw7Ci0JCQlnb3RvIHN0YXJ0YWdhaW47CisJCQlzdGFydGFnYWluID0gMTsKKwkJCWdvdG8gcWh1bmxvY2s7CiAJCX0KIAogCQlBU1NFUlQoZHFwLT5xX25yZWZzID09IDApOwpAQCAtMTk4NiwxNCArMTk3NiwyMCBAQAogCQl4ZnNfR3FtLT5xbV9kcWZybGlzdF9jbnQtLTsKIAkJZHFwb3V0ID0gZHFwOwogCQltdXRleF91bmxvY2soJm1wLT5tX3F1b3RhaW5mby0+cWlfZHFsaXN0X2xvY2spOworcWh1bmxvY2s6CiAJCW11dGV4X3VubG9jaygmZHFwLT5xX2hhc2gtPnFoX2xvY2spOwogZHFmdW5sb2NrOgogCQl4ZnNfZHFmdW5sb2NrKGRxcCk7CitkcXVubG9jazoKIAkJeGZzX2RxdW5sb2NrKGRxcCk7CiAJCWlmIChkcXBvdXQpCiAJCQlicmVhazsKIAkJaWYgKHJlc3RhcnRzID49IFhGU19RTV9SRUNMQUlNX01BWF9SRVNUQVJUUykKLQkJCXJldHVybiBOVUxMOworCQkJYnJlYWs7CisJCWlmIChzdGFydGFnYWluKSB7CisJCQltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOworCQkJZ290byBhZ2FpbjsKKwkJfQogCX0KIAltdXRleF91bmxvY2soJnhmc19HcW0tPnFtX2RxZnJsaXN0X2xvY2spOwogCXJldHVybiBkcXBvdXQ7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FsbG9jLmggYi9mcy94ZnMveGZzX2FsbG9jLmgKaW5kZXggMGFiNTZiMy4uZDBiM2JjNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hbGxvYy5oCisrKyBiL2ZzL3hmcy94ZnNfYWxsb2MuaApAQCAtNzUsNiArNzUsMjIgQEAKICNkZWZpbmUgWEZTX0FMTE9DX1NFVF9BU0lERShtcCkgICg0ICsgKChtcCktPm1fc2Iuc2JfYWdjb3VudCAqIDQpKQogCiAvKgorICogV2hlbiBkZWNpZGluZyBob3cgbXVjaCBzcGFjZSB0byBhbGxvY2F0ZSBvdXQgb2YgYW4gQUcsIHdlIGxpbWl0IHRoZQorICogYWxsb2NhdGlvbiBtYXhpbXVtIHNpemUgdG8gdGhlIHNpemUgdGhlIEFHLiBIb3dldmVyLCB3ZSBjYW5ub3QgdXNlIGFsbCB0aGUKKyAqIGJsb2NrcyBpbiB0aGUgQUcgLSBzb21lIGFyZSBwZXJtYW5lbnRseSB1c2VkIGJ5IG1ldGFkYXRhLiBUaGVzZQorICogYmxvY2tzIGFyZSBnZW5lcmFsbHk6CisgKgktIHRoZSBBRyBzdXBlcmJsb2NrLCBBR0YsIEFHSSBhbmQgQUdGTAorICoJLSB0aGUgQUdGIChibm8gYW5kIGNudCkgYW5kIEFHSSBidHJlZSByb290IGJsb2NrcworICoJLSA0IGJsb2NrcyBvbiB0aGUgQUdGTCBhY2NvcmRpbmcgdG8gWEZTX0FMTE9DX1NFVF9BU0lERSgpIGxpbWl0cworICoKKyAqIFRoZSBBRyBoZWFkZXJzIGFyZSBzZWN0b3Igc2l6ZWQsIHNvIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhleSB0YWtlIHVwIGlzCisgKiBkZXBlbmRlbnQgb24gZmlsZXN5c3RlbSBnZW9tZXRyeS4gVGhlIG90aGVycyBhcmUgYWxsIHNpbmdsZSBibG9ja3MuCisgKi8KKyNkZWZpbmUgWEZTX0FMTE9DX0FHX01BWF9VU0FCTEUobXApCVwKKwkoKG1wKS0+bV9zYi5zYl9hZ2Jsb2NrcyAtIFhGU19CQl9UT19GU0IobXAsIFhGU19GU1NfVE9fQkIobXAsIDQpKSAtIDcpCisKKworLyoKICAqIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3IgeGZzX2FsbG9jIHJvdXRpbmVzLgogICogVGhpcyBpcyB0dXJuZWQgaW50byBhIHN0cnVjdHVyZSB0byBhdm9pZCBoYXZpbmcgMjAgYXJndW1lbnRzIHBhc3NlZAogICogZG93biBzZXZlcmFsIGxldmVscyBvZiB0aGUgc3RhY2suCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDQxMTFjZDMuLmRjM2FmZDc3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMTAzOCwxNyArMTAzOCwzNCBAQAogCQkgKiBGaWxsaW5nIGluIHRoZSBtaWRkbGUgcGFydCBvZiBhIHByZXZpb3VzIGRlbGF5ZWQgYWxsb2NhdGlvbi4KIAkJICogQ29udGlndWl0eSBpcyBpbXBvc3NpYmxlIGhlcmUuCiAJCSAqIFRoaXMgY2FzZSBpcyBhdm9pZGVkIGFsbW9zdCBhbGwgdGhlIHRpbWUuCisJCSAqCisJCSAqIFdlIHN0YXJ0IHdpdGggYSBkZWxheWVkIGFsbG9jYXRpb246CisJCSAqCisJCSAqICtkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkKworCQkgKiAgUFJFViBAIGlkeAorCQkgKgorCSAgICAgICAgICogYW5kIHdlIGFyZSBhbGxvY2F0aW5nOgorCQkgKiAgICAgICAgICAgICAgICAgICAgICtycnJycnJycnJycnJycnJycisKKwkJICoJCQkgICAgICBuZXcKKwkJICoKKwkJICogYW5kIHdlIHNldCBpdCB1cCBmb3IgaW5zZXJ0aW9uIGFzOgorCQkgKiArZGRkZGRkZGRkZGRkZGRkZGRkZCtycnJycnJycnJycnJycnJycitkZGRkZGRkZGRkZGRkZGRkZCsKKwkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3CisJCSAqICBQUkVWIEAgaWR4ICAgICAgICAgIExFRlQgICAgICAgICAgICAgIFJJR0hUCisJCSAqICAgICAgICAgICAgICAgICAgICAgIGluc2VydGVkIGF0IGlkeCArIDEKIAkJICovCiAJCXRlbXAgPSBuZXctPmJyX3N0YXJ0b2ZmIC0gUFJFVi5icl9zdGFydG9mZjsKLQkJdHJhY2VfeGZzX2JtYXBfcHJlX3VwZGF0ZShpcCwgaWR4LCAwLCBfVEhJU19JUF8pOwotCQl4ZnNfYm1idF9zZXRfYmxvY2tjb3VudChlcCwgdGVtcCk7Ci0JCXJbMF0gPSAqbmV3OwotCQlyWzFdLmJyX3N0YXRlID0gUFJFVi5icl9zdGF0ZTsKLQkJclsxXS5icl9zdGFydGJsb2NrID0gMDsKLQkJclsxXS5icl9zdGFydG9mZiA9IG5ld19lbmRvZmY7CiAJCXRlbXAyID0gUFJFVi5icl9zdGFydG9mZiArIFBSRVYuYnJfYmxvY2tjb3VudCAtIG5ld19lbmRvZmY7Ci0JCXJbMV0uYnJfYmxvY2tjb3VudCA9IHRlbXAyOwotCQl4ZnNfaWV4dF9pbnNlcnQoaXAsIGlkeCArIDEsIDIsICZyWzBdLCBzdGF0ZSk7CisJCXRyYWNlX3hmc19ibWFwX3ByZV91cGRhdGUoaXAsIGlkeCwgMCwgX1RISVNfSVBfKTsKKwkJeGZzX2JtYnRfc2V0X2Jsb2NrY291bnQoZXAsIHRlbXApOwkvKiB0cnVuY2F0ZSBQUkVWICovCisJCUxFRlQgPSAqbmV3OworCQlSSUdIVC5icl9zdGF0ZSA9IFBSRVYuYnJfc3RhdGU7CisJCVJJR0hULmJyX3N0YXJ0YmxvY2sgPSBudWxsc3RhcnRibG9jaygKKwkJCQkoaW50KXhmc19ibWFwX3dvcnN0X2luZGxlbihpcCwgdGVtcDIpKTsKKwkJUklHSFQuYnJfc3RhcnRvZmYgPSBuZXdfZW5kb2ZmOworCQlSSUdIVC5icl9ibG9ja2NvdW50ID0gdGVtcDI7CisJCS8qIGluc2VydCBMRUZUIChyWzBdKSBhbmQgUklHSFQgKHJbMV0pIGF0IHRoZSBzYW1lIHRpbWUgKi8KKwkJeGZzX2lleHRfaW5zZXJ0KGlwLCBpZHggKyAxLCAyLCAmTEVGVCwgc3RhdGUpOwogCQlpcC0+aV9kZi5pZl9sYXN0ZXggPSBpZHggKyAxOwogCQlpcC0+aV9kLmRpX25leHRlbnRzKys7CiAJCWlmIChjdXIgPT0gTlVMTCkKQEAgLTI0MzAsNyArMjQ0Nyw3IEBACiAJCXN0YXJ0YWcgPSBhZyA9IDA7CiAKIAlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7Ci0Jd2hpbGUgKCpibGVuIDwgYXAtPmFsZW4pIHsKKwl3aGlsZSAoKmJsZW4gPCBhcmdzLT5tYXhsZW4pIHsKIAkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgewogCQkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLT50cCwgYWcsCiAJCQkJCQkgICAgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSyk7CkBAIC0yNDUyLDcgKzI0NjksNyBAQAogCQkJbm90aW5pdCA9IDE7CiAKIAkJaWYgKHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpIHsKLQkJCWlmICgqYmxlbiA+PSBhcC0+YWxlbikKKwkJCWlmICgqYmxlbiA+PSBhcmdzLT5tYXhsZW4pCiAJCQkJYnJlYWs7CiAKIAkJCWlmIChhcC0+dXNlcmRhdGEpIHsKQEAgLTI0OTgsMTQgKzI1MTUsMTQgQEAKIAkgKiBJZiB0aGUgYmVzdCBzZWVuIGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3QKIAkgKiBsZW5ndGgsIHVzZSB0aGUgYmVzdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KLQllbHNlIGlmICgqYmxlbiA8IGFwLT5hbGVuKQorCWVsc2UgaWYgKCpibGVuIDwgYXJncy0+bWF4bGVuKQogCQlhcmdzLT5taW5sZW4gPSAqYmxlbjsKIAkvKgotCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgYWxlbiwKKwkgKiBPdGhlcndpc2Ugd2UndmUgc2VlbiBhbiBleHRlbnQgYXMgYmlnIGFzIG1heGxlbiwKIAkgKiB1c2UgdGhhdCBhcyB0aGUgbWluaW11bS4KIAkgKi8KIAllbHNlCi0JCWFyZ3MtPm1pbmxlbiA9IGFwLT5hbGVuOworCQlhcmdzLT5taW5sZW4gPSBhcmdzLT5tYXhsZW47CiAKIAkvKgogCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCkBAIC0yNTczLDcgKzI1OTAsOSBAQAogCWFyZ3MudHAgPSBhcC0+dHA7CiAJYXJncy5tcCA9IG1wOwogCWFyZ3MuZnNibm8gPSBhcC0+cnZhbDsKLQlhcmdzLm1heGxlbiA9IE1JTihhcC0+YWxlbiwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOworCisJLyogVHJpbSB0aGUgYWxsb2NhdGlvbiBiYWNrIHRvIHRoZSBtYXhpbXVtIGFuIEFHIGNhbiBmaXQuICovCisJYXJncy5tYXhsZW4gPSBNSU4oYXAtPmFsZW4sIFhGU19BTExPQ19BR19NQVhfVVNBQkxFKG1wKSk7CiAJYXJncy5maXJzdGJsb2NrID0gYXAtPmZpcnN0YmxvY2s7CiAJYmxlbiA9IDA7CiAJaWYgKG51bGxmYikgewpAQCAtMjYyMSw3ICsyNjQwLDcgQEAKIAkJCS8qCiAJCQkgKiBBZGp1c3QgZm9yIGFsaWdubWVudAogCQkJICovCi0JCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXAtPmFsZW4pCisJCQlpZiAoYmxlbiA+IGFyZ3MuYWxpZ25tZW50ICYmIGJsZW4gPD0gYXJncy5tYXhsZW4pCiAJCQkJYXJncy5taW5sZW4gPSBibGVuIC0gYXJncy5hbGlnbm1lbnQ7CiAJCQlhcmdzLm1pbmFsaWduc2xvcCA9IDA7CiAJCX0gZWxzZSB7CkBAIC0yNjQwLDcgKzI2NTksNyBAQAogCQkJICogb2YgbWlubGVuK2FsaWdubWVudCtzbG9wIGRvZXNuJ3QgZ28gdXAKIAkJCSAqIGJldHdlZW4gdGhlIGNhbGxzLgogCQkJICovCi0JCQlpZiAoYmxlbiA+IG1wLT5tX2RhbGlnbiAmJiBibGVuIDw9IGFwLT5hbGVuKQorCQkJaWYgKGJsZW4gPiBtcC0+bV9kYWxpZ24gJiYgYmxlbiA8PSBhcmdzLm1heGxlbikKIAkJCQluZXh0bWlubGVuID0gYmxlbiAtIG1wLT5tX2RhbGlnbjsKIAkJCWVsc2UKIAkJCQluZXh0bWlubGVuID0gYXJncy5taW5sZW47CkBAIC00NDg1LDYgKzQ1MDQsMTYgQEAKIAkJCQkvKiBGaWd1cmUgb3V0IHRoZSBleHRlbnQgc2l6ZSwgYWRqdXN0IGFsZW4gKi8KIAkJCQlleHRzeiA9IHhmc19nZXRfZXh0c3pfaGludChpcCk7CiAJCQkJaWYgKGV4dHN6KSB7CisJCQkJCS8qCisJCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgYSBzaW5nbGUKKwkJCQkJICogZXh0ZW50IGxlbmd0aCB3aGVuIHdlIGFsaWduIHRoZQorCQkJCQkgKiBleHRlbnQgYnkgcmVkdWNpbmcgbGVuZ3RoIHdlIGFyZQorCQkJCQkgKiBnb2luZyB0byBhbGxvY2F0ZSBieSB0aGUgbWF4aW11bQorCQkJCQkgKiBhbW91bnQgZXh0ZW50IHNpemUgYWxpZ21lbnQgbWF5CisJCQkJCSAqIHJlcXVpcmUuCisJCQkJCSAqLworCQkJCQlhbGVuID0gWEZTX0ZJTEJMS1NfTUlOKGxlbiwKKwkJCQkJCSAgIE1BWEVYVExFTiAtICgyICogZXh0c3ogLSAxKSk7CiAJCQkJCWVycm9yID0geGZzX2JtYXBfZXh0c2l6ZV9hbGlnbihtcCwKIAkJCQkJCQkmZ290LCAmcHJldiwgZXh0c3osCiAJCQkJCQkJcnQsIGVvZiwKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwppbmRleCA5OGM2ZjczLi42ZjhjMjFjIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19idWZfaXRlbS5jCkBAIC00MjcsMTMgKzQyNywxNSBAQAogCiAJCWlmIChyZW1vdmUpIHsKIAkJCS8qCi0JCQkgKiBXZSBoYXZlIHRvIHJlbW92ZSB0aGUgbG9nIGl0ZW0gZnJvbSB0aGUgdHJhbnNhY3Rpb24KLQkJCSAqIGFzIHdlIGFyZSBhYm91dCB0byByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhlCi0JCQkgKiBidWZmZXIuICBJZiB3ZSBkb24ndCwgdGhlIHVubG9jayB0aGF0IG9jY3VycyBsYXRlcgotCQkJICogaW4geGZzX3RyYW5zX3VuY29tbWl0KCkgd2lsbCByeSB0byByZWZlcmVuY2UgdGhlCisJCQkgKiBJZiB3ZSBhcmUgaW4gYSB0cmFuc2FjdGlvbiBjb250ZXh0LCB3ZSBoYXZlIHRvCisJCQkgKiByZW1vdmUgdGhlIGxvZyBpdGVtIGZyb20gdGhlIHRyYW5zYWN0aW9uIGFzIHdlIGFyZQorCQkJICogYWJvdXQgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoZSBidWZmZXIuICBJZiB3ZQorCQkJICogZG9uJ3QsIHRoZSB1bmxvY2sgdGhhdCBvY2N1cnMgbGF0ZXIgaW4KKwkJCSAqIHhmc190cmFuc191bmNvbW1pdCgpIHdpbGwgdHJ5IHRvIHJlZmVyZW5jZSB0aGUKIAkJCSAqIGJ1ZmZlciB3aGljaCB3ZSBubyBsb25nZXIgaGF2ZSBhIGhvbGQgb24uCiAJCQkgKi8KLQkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOworCQkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKIAogCQkJLyoKIAkJCSAqIFNpbmNlIHRoZSB0cmFuc2FjdGlvbiBubyBsb25nZXIgcmVmZXJzIHRvIHRoZSBidWZmZXIsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwppbmRleCA3NWYyZWY2Li5kMjJlNjI2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKQEAgLTEzOCw3ICsxMzgsOCBAQAogCiAJaWYgKHJlbW92ZSkgewogCQlBU1NFUlQoIShsaXAtPmxpX2ZsYWdzICYgWEZTX0xJX0lOX0FJTCkpOwotCQl4ZnNfdHJhbnNfZGVsX2l0ZW0obGlwKTsKKwkJaWYgKGxpcC0+bGlfZGVzYykKKwkJCXhmc190cmFuc19kZWxfaXRlbShsaXApOwogCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCBjZWM4OWRkLi44NTY2OGVmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC01Myw2ICs1Myw5IEBACiAJeGZzX2Zzb3BfZ2VvbV90CQkqZ2VvLAogCWludAkJCW5ld192ZXJzaW9uKQogeworCisJbWVtc2V0KGdlbywgMCwgc2l6ZW9mKCpnZW8pKTsKKwogCWdlby0+YmxvY2tzaXplID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplOwogCWdlby0+cnRleHRzaXplID0gbXAtPm1fc2Iuc2JfcmV4dHNpemU7CiAJZ2VvLT5hZ2Jsb2NrcyA9IG1wLT5tX3NiLnNiX2FnYmxvY2tzOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IDU1NTgyYmQuLjhhMGYwNDQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTMzNyw3ICszMzcsMTIgQEAKIAkJaW50IHNoaWZ0ID0gMDsKIAkJaW50NjRfdCBmcmVlc3A7CiAKLQkJYWxsb2NfYmxvY2tzID0gWEZTX0JfVE9fRlNCKG1wLCBpcC0+aV9zaXplKTsKKwkJLyoKKwkJICogcm91bmRkb3duX3Bvd19vZl90d28oKSByZXR1cm5zIGFuIHVuZGVmaW5lZCByZXN1bHQKKwkJICogaWYgd2UgcGFzcyBpbiBhbGxvY19ibG9ja3MgPSAwLiBIZW5jZSB0aGUgIisgMSIgdG8KKwkJICogZW5zdXJlIHdlIGFsd2F5cyBwYXNzIGluIGEgbm9uLXplcm8gdmFsdWUuCisJCSAqLworCQlhbGxvY19ibG9ja3MgPSBYRlNfQl9UT19GU0IobXAsIGlwLT5pX3NpemUpICsgMTsKIAkJYWxsb2NfYmxvY2tzID0gWEZTX0ZJTEVPRkZfTUlOKE1BWEVYVExFTiwKIAkJCQkJcm91bmRkb3duX3Bvd19vZl90d28oYWxsb2NfYmxvY2tzKSk7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmggYi9mcy94ZnMveGZzX2xvZy5oCmluZGV4IDkxNmViN2QuLjNiZDMyOTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmgKKysrIGIvZnMveGZzL3hmc19sb2cuaApAQCAtMTkxLDcgKzE5MSw3IEBACiAKIHhsb2dfdGlkX3QgeGZzX2xvZ19nZXRfdHJhbnNfaWRlbnQoc3RydWN0IHhmc190cmFucyAqdHApOwogCi1pbnQJeGZzX2xvZ19jb21taXRfY2lsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3RyYW5zICp0cCwKK3ZvaWQJeGZzX2xvZ19jb21taXRfY2lsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX3RyYW5zICp0cCwKIAkJCQlzdHJ1Y3QgeGZzX2xvZ192ZWMgKmxvZ192ZWN0b3IsCiAJCQkJeGZzX2xzbl90ICpjb21taXRfbHNuLCBpbnQgZmxhZ3MpOwogYm9vbAl4ZnNfbG9nX2l0ZW1faW5fY3VycmVudF9jaGtwdChzdHJ1Y3QgeGZzX2xvZ19pdGVtICpsaXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfY2lsLmMgYi9mcy94ZnMveGZzX2xvZ19jaWwuYwppbmRleCA5ZGM4MTI1Li45Y2E1OWJlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZ19jaWwuYworKysgYi9mcy94ZnMveGZzX2xvZ19jaWwuYwpAQCAtNTQzLDcgKzU0Myw3IEBACiAKIAllcnJvciA9IHhsb2dfd3JpdGUobG9nLCAmbHZoZHIsIHRpYywgJmN0eC0+c3RhcnRfbHNuLCBOVUxMLCAwKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2Fib3J0OworCQlnb3RvIG91dF9hYm9ydF9mcmVlX3RpY2tldDsKIAogCS8qCiAJICogbm93IHRoYXQgd2UndmUgd3JpdHRlbiB0aGUgY2hlY2twb2ludCBpbnRvIHRoZSBsb2csIHN0cmljdGx5CkBAIC01NjksOCArNTY5LDkgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmNpbC0+eGNfY2lsX2xvY2spOwogCisJLyogeGZzX2xvZ19kb25lIGFsd2F5cyBmcmVlcyB0aGUgdGlja2V0IG9uIGVycm9yLiAqLwogCWNvbW1pdF9sc24gPSB4ZnNfbG9nX2RvbmUobG9nLT5sX21wLCB0aWMsICZjb21taXRfaWNsb2csIDApOwotCWlmIChlcnJvciB8fCBjb21taXRfbHNuID09IC0xKQorCWlmIChjb21taXRfbHNuID09IC0xKQogCQlnb3RvIG91dF9hYm9ydDsKIAogCS8qIGF0dGFjaCBhbGwgdGhlIHRyYW5zYWN0aW9ucyB3LyBidXN5IGV4dGVudHMgdG8gaWNsb2cgKi8KQEAgLTYwMCw2ICs2MDEsOCBAQAogCWttZW1fZnJlZShuZXdfY3R4KTsKIAlyZXR1cm4gMDsKIAorb3V0X2Fib3J0X2ZyZWVfdGlja2V0OgorCXhmc19sb2dfdGlja2V0X3B1dCh0aWMpOwogb3V0X2Fib3J0OgogCXhsb2dfY2lsX2NvbW1pdHRlZChjdHgsIFhGU19MSV9BQk9SVEVEKTsKIAlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CkBAIC02MjIsNyArNjI1LDcgQEAKICAqIGJhY2tncm91bmQgY29tbWl0LCByZXR1cm5zIHdpdGhvdXQgaXQgaGVsZCBvbmNlIGJhY2tncm91bmQgY29tbWl0cyBhcmUKICAqIGFsbG93ZWQgYWdhaW4uCiAgKi8KLWludAordm9pZAogeGZzX2xvZ19jb21taXRfY2lsKAogCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLApAQCAtNjM3LDExICs2NDAsNiBAQAogCWlmIChmbGFncyAmIFhGU19UUkFOU19SRUxFQVNFX0xPR19SRVMpCiAJCWxvZ19mbGFncyA9IFhGU19MT0dfUkVMX1BFUk1fUkVTRVJWOwogCi0JaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykpIHsKLQkJeGxvZ19jaWxfZnJlZV9sb2d2ZWMobG9nX3ZlY3Rvcik7Ci0JCXJldHVybiBYRlNfRVJST1IoRUlPKTsKLQl9Ci0KIAkvKgogCSAqIGRvIGFsbCB0aGUgaGFyZCB3b3JrIG9mIGZvcm1hdHRpbmcgaXRlbXMgKGluY2x1ZGluZyBtZW1vcnkKIAkgKiBhbGxvY2F0aW9uKSBvdXRzaWRlIHRoZSBDSUwgY29udGV4dCBsb2NrLiBUaGlzIHByZXZlbnRzIHN0YWxsaW5nIENJTApAQCAtNzAxLDcgKzY5OSw2IEBACiAJICovCiAJaWYgKHB1c2gpCiAJCXhsb2dfY2lsX3B1c2gobG9nLCAwKTsKLQlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuYyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwppbmRleCAzM2RiYzRlLi43NjkyMjc5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmMKKysrIGIvZnMveGZzL3hmc190cmFucy5jCkBAIC0xNDQ2LDYgKzE0NDYsMTQgQEAKICAqIEJ1bGsgb3BlcmF0aW9uIHZlcnNpb24gb2YgeGZzX3RyYW5zX2NvbW1pdHRlZCB0aGF0IHRha2VzIGEgbG9nIHZlY3RvciBvZgogICogaXRlbXMgdG8gaW5zZXJ0IGludG8gdGhlIEFJTC4gVGhpcyB1c2VzIGJ1bGsgQUlMIGluc2VydGlvbiB0ZWNobmlxdWVzIHRvCiAgKiBtaW5pbWlzZSBsb2NrIHRyYWZmaWMuCisgKgorICogSWYgd2UgYXJlIGNhbGxlZCB3aXRoIHRoZSBhYm9ydGVkIGZsYWcgc2V0LCBpdCBpcyBiZWNhdXNlIGEgbG9nIHdyaXRlIGR1cmluZworICogYSBDSUwgY2hlY2twb2ludCBjb21taXQgaGFzIGZhaWxlZC4gSW4gdGhpcyBjYXNlLCBhbGwgdGhlIGl0ZW1zIGluIHRoZQorICogY2hlY2twb2ludCBoYXZlIGFscmVhZHkgZ29uZSB0aHJvdWdoIElPUF9DT01NSVRFRCBhbmQgSU9QX1VOTE9DSywgd2hpY2gKKyAqIG1lYW5zIHRoYXQgY2hlY2twb2ludCBjb21taXQgYWJvcnQgaGFuZGxpbmcgaXMgdHJlYXRlZCBleGFjdGx5IHRoZSBzYW1lCisgKiBhcyBhbiBpY2xvZyB3cml0ZSBlcnJvciBldmVuIHRob3VnaCB3ZSBoYXZlbid0IHN0YXJ0ZWQgYW55IElPIHlldC4gSGVuY2UgaW4KKyAqIHRoaXMgY2FzZSBhbGwgd2UgbmVlZCB0byBkbyBpcyBJT1BfQ09NTUlUVEVEIHByb2Nlc3NpbmcsIGZvbGxvd2VkIGJ5IGFuCisgKiBJT1BfVU5QSU4oYWJvcnRlZCkgY2FsbC4KICAqLwogdm9pZAogeGZzX3RyYW5zX2NvbW1pdHRlZF9idWxrKApAQCAtMTQ3Miw2ICsxNDgwLDE2IEBACiAJCWlmIChYRlNfTFNOX0NNUChpdGVtX2xzbiwgKHhmc19sc25fdCktMSkgPT0gMCkKIAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAqIGlmIHdlIGFyZSBhYm9ydGluZyB0aGUgb3BlcmF0aW9uLCBubyBwb2ludCBpbiBpbnNlcnRpbmcgdGhlCisJCSAqIG9iamVjdCBpbnRvIHRoZSBBSUwgYXMgd2UgYXJlIGluIGEgc2h1dGRvd24gc2l0dWF0aW9uLgorCQkgKi8KKwkJaWYgKGFib3J0ZWQpIHsKKwkJCUFTU0VSVChYRlNfRk9SQ0VEX1NIVVRET1dOKGFpbHAtPnhhX21vdW50KSk7CisJCQlJT1BfVU5QSU4obGlwLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKGl0ZW1fbHNuICE9IGNvbW1pdF9sc24pIHsKIAogCQkJLyoKQEAgLTE1MDMsMjAgKzE1MjEsMjQgQEAKIH0KIAogLyoKLSAqIENhbGxlZCBmcm9tIHRoZSB0cmFuc19jb21taXQgY29kZSB3aGVuIHdlIG5vdGljZSB0aGF0Ci0gKiB0aGUgZmlsZXN5c3RlbSBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgZm9yY2VkIHNodXRkb3duLgorICogQ2FsbGVkIGZyb20gdGhlIHRyYW5zX2NvbW1pdCBjb2RlIHdoZW4gd2Ugbm90aWNlIHRoYXQgdGhlIGZpbGVzeXN0ZW0gaXMgaW4KKyAqIHRoZSBtaWRkbGUgb2YgYSBmb3JjZWQgc2h1dGRvd24uCisgKgorICogV2hlbiB3ZSBhcmUgY2FsbGVkIGhlcmUsIHdlIGhhdmUgYWxyZWFkeSBwaW5uZWQgYWxsIHRoZSBpdGVtcyBpbiB0aGUKKyAqIHRyYW5zYWN0aW9uLiBIb3dldmVyLCBuZWl0aGVyIElPUF9DT01NSVRUSU5HIG9yIElPUF9VTkxPQ0sgaGFzIGJlZW4gY2FsbGVkCisgKiBzbyB3ZSBjYW4gc2ltcGx5IHdhbGsgdGhlIGl0ZW1zIGluIHRoZSB0cmFuc2FjdGlvbiwgdW5waW4gdGhlbSB3aXRoIGFuIGFib3J0CisgKiBmbGFnIGFuZCB0aGVuIGZyZWUgdGhlIGl0ZW1zLiBOb3RlIHRoYXQgdW5waW5uaW5nIHRoZSBpdGVtcyBjYW4gcmVzdWx0IGluCisgKiB0aGVtIGJlaW5nIGZyZWVkIGltbWVkaWF0ZWx5LCBzbyB3ZSBuZWVkIHRvIHVzZSBhIHNhZmUgbGlzdCB0cmF2ZXJzYWwgbWV0aG9kCisgKiBoZXJlLgogICovCiBTVEFUSUMgdm9pZAogeGZzX3RyYW5zX3VuY29tbWl0KAogCXN0cnVjdCB4ZnNfdHJhbnMJKnRwLAogCXVpbnQJCQlmbGFncykKIHsKLQlzdHJ1Y3QgeGZzX2xvZ19pdGVtX2Rlc2MgKmxpZHA7CisJc3RydWN0IHhmc19sb2dfaXRlbV9kZXNjICpsaWRwLCAqbjsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkobGlkcCwgJnRwLT50X2l0ZW1zLCBsaWRfdHJhbnMpIHsKLQkJLyoKLQkJICogVW5waW4gYWxsIGJ1dCB0aG9zZSB0aGF0IGFyZW4ndCBkaXJ0eS4KLQkJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpZHAsIG4sICZ0cC0+dF9pdGVtcywgbGlkX3RyYW5zKSB7CiAJCWlmIChsaWRwLT5saWRfZmxhZ3MgJiBYRlNfTElEX0RJUlRZKQogCQkJSU9QX1VOUElOKGxpZHAtPmxpZF9pdGVtLCAxKTsKIAl9CkBAIC0xNzMzLDcgKzE3NTUsNiBAQAogCWludAkJCWZsYWdzKQogewogCXN0cnVjdCB4ZnNfbG9nX3ZlYwkqbG9nX3ZlY3RvcjsKLQlpbnQJCQllcnJvcjsKIAogCS8qCiAJICogR2V0IGVhY2ggbG9nIGl0ZW0gdG8gYWxsb2NhdGUgYSB2ZWN0b3Igc3RydWN0dXJlIGZvcgpAQCAtMTc0NCw5ICsxNzY1LDcgQEAKIAlpZiAoIWxvZ192ZWN0b3IpCiAJCXJldHVybiBFTk9NRU07CiAKLQllcnJvciA9IHhmc19sb2dfY29tbWl0X2NpbChtcCwgdHAsIGxvZ192ZWN0b3IsIGNvbW1pdF9sc24sIGZsYWdzKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwl4ZnNfbG9nX2NvbW1pdF9jaWwobXAsIHRwLCBsb2dfdmVjdG9yLCBjb21taXRfbHNuLCBmbGFncyk7CiAKIAljdXJyZW50X3Jlc3RvcmVfZmxhZ3NfbmVzdGVkKCZ0cC0+dF9wZmxhZ3MsIFBGX0ZTVFJBTlMpOwogCXhmc190cmFuc19mcmVlKHRwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKaW5kZXggMzFiNjE4OC4uYjRiZmUzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTQsNiArNCw4IEBACiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2lmZGVmIENPTkZJR19NTVUKIAorI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CisKICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCiBleHRlcm4gaW50IHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCA2ODY0OTMzLi5mZTc3ZTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC0xMjQsNyArMTI0LDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKLSNkZWZpbmUgRlRSQUNFX0VWRU5UUygpCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfZnRyYWNlX2V2ZW50cykgPSAuOwlcCisjZGVmaW5lIEZUUkFDRV9FVkVOVFMoKQkuID0gQUxJR04oOCk7CQkJCQlcCisJCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X2Z0cmFjZV9ldmVudHMpID0gLjsJXAogCQkJKihfZnRyYWNlX2V2ZW50cykJCQkJXAogCQkJVk1MSU5VWF9TWU1CT0woX19zdG9wX2Z0cmFjZV9ldmVudHMpID0gLjsKICNlbHNlCkBAIC0xNDAsNyArMTQxLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0ZUUkFDRV9TWVNDQUxMUwotI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIFZNTElOVVhfU1lNQk9MKF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsJXAorI2RlZmluZSBUUkFDRV9TWVNDQUxMUygpIC4gPSBBTElHTig4KTsJCQkJCVwKKwkJCSBWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3N5c2NhbGxzX21ldGFkYXRhKSA9IC47CVwKIAkJCSAqKF9fc3lzY2FsbHNfbWV0YWRhdGEpCQkJCVwKIAkJCSBWTUxJTlVYX1NZTUJPTChfX3N0b3Bfc3lzY2FsbHNfbWV0YWRhdGEpID0gLjsKICNlbHNlCkBAIC0xNjUsMTAgKzE2Nyw4IEBACiAJQ1BVX0tFRVAoZXhpdC5kYXRhKQkJCQkJCVwKIAlNRU1fS0VFUChpbml0LmRhdGEpCQkJCQkJXAogCU1FTV9LRUVQKGV4aXQuZGF0YSkJCQkJCQlcCi0JLiA9IEFMSUdOKDMyKTsJCQkJCQkJXAotCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX190cmFjZXBvaW50cykgPSAuOwkJCVwKKwlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAogCSooX190cmFjZXBvaW50cykJCQkJCQlcCi0JVk1MSU5VWF9TWU1CT0woX19zdG9wX19fdHJhY2Vwb2ludHMpID0gLjsJCQlcCiAJLyogaW1wbGVtZW50IGR5bmFtaWMgcHJpbnRrIGRlYnVnICovCQkJCVwKIAkuID0gQUxJR04oOCk7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc2LDEzICsxNzYsNyBAQAogCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3ZlcmJvc2UpID0gLjsJCQkJXAogCUxJS0VMWV9QUk9GSUxFKCkJCSAgICAgICAJCQkJXAogCUJSQU5DSF9QUk9GSUxFKCkJCQkJCQlcCi0JVFJBQ0VfUFJJTlRLUygpCQkJCQkJCVwKLQkJCQkJCQkJCVwKLQlTVFJVQ1RfQUxJR04oKTsJCQkJCQkJXAotCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKLQlUUkFDRV9TWVNDQUxMUygpCisJVFJBQ0VfUFJJTlRLUygpCiAKIC8qCiAgKiBEYXRhIHNlY3Rpb24gaGVscGVycwpAQCAtMjIwLDYgKzIxNCwxMCBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3JvZGF0YSkgPSAuOwkJCVwKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKIAkJKihfX3Zlcm1hZ2ljKQkJLyogS2VybmVsIHZlcnNpb24gbWFnaWMgKi8JXAorCQkuID0gQUxJR04oOCk7CQkJCQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycykgPSAuOwkJXAorCQkqKF9fdHJhY2Vwb2ludHNfcHRycykJLyogVHJhY2Vwb2ludHM6IHBvaW50ZXIgYXJyYXkgKi9cCisJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpID0gLjsJCVwKIAkJKihfX21hcmtlcnNfc3RyaW5ncykJLyogTWFya2Vyczogc3RyaW5ncyAqLwkJXAogCQkqKF9fdHJhY2Vwb2ludHNfc3RyaW5ncykvKiBUcmFjZXBvaW50czogc3RyaW5ncyAqLwlcCiAJfQkJCQkJCQkJXApAQCAtMzY0LDYgKzM2MiwxMyBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fcGFyYW0pID0gLjsJCQlcCiAJCSooX19wYXJhbSkJCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX3BhcmFtKSA9IC47CQkJXAorCX0JCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwkvKiBCdWlsdC1pbiBtb2R1bGUgdmVyc2lvbnMuICovCQkJCQlcCisJX19tb2R2ZXIgOiBBVChBRERSKF9fbW9kdmVyKSAtIExPQURfT0ZGU0VUKSB7CQkJXAorCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fbW9kdmVyKSA9IC47CQkJXAorCQkqKF9fbW9kdmVyKQkJCQkJCVwKKwkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fbW9kdmVyKSA9IC47CQkJXAogCQkuID0gQUxJR04oKGFsaWduKSk7CQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fZW5kX3JvZGF0YSkgPSAuOwkJCVwKIAl9CQkJCQkJCQlcCkBAIC00NzUsNiArNDgwLDggQEAKIAlLRVJORUxfQ1RPUlMoKQkJCQkJCQlcCiAJKiguaW5pdC5yb2RhdGEpCQkJCQkJCVwKIAlNQ09VTlRfUkVDKCkJCQkJCQkJXAorCUZUUkFDRV9FVkVOVFMoKQkJCQkJCQlcCisJVFJBQ0VfU1lTQ0FMTFMoKQkJCQkJCVwKIAlERVZfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlDUFVfRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKIAlNRU1fRElTQ0FSRChpbml0LnJvZGF0YSkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAppbmRleCBhNDY5NGM2Li4zNDg4NDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1QLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtUC5oCkBAIC0xMTAxLDcgKzExMDEsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtZGV2OyAvKio8IFBsYXRmb3JtIGRldmljZSBzdHJ1dHVyZSAqLwogCiAJc3RydWN0IGRybV9zZ19tZW0gKnNnOwkvKio8IFNjYXR0ZXIgZ2F0aGVyIG1lbW9yeSAqLwotCWludCBudW1fY3J0Y3M7ICAgICAgICAgICAgICAgICAgLyoqPCBOdW1iZXIgb2YgQ1JUQ3Mgb24gdGhpcyBkZXZpY2UgKi8KKwl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOyAgICAgICAgICAgICAgICAgIC8qKjwgTnVtYmVyIG9mIENSVENzIG9uIHRoaXMgZGV2aWNlICovCiAJdm9pZCAqZGV2X3ByaXZhdGU7CQkvKio8IGRldmljZSBwcml2YXRlIGRhdGEgKi8KIAl2b2lkICptbV9wcml2YXRlOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICpkZXZfbWFwcGluZzsKQEAgLTEzNjcsNyArMTM2Nyw3IEBACiBleHRlcm4gdTMyIGRybV92YmxhbmtfY291bnQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIHUzMiBkcm1fdmJsYW5rX2NvdW50X2FuZF90aW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjLAogCQkJCSAgICAgc3RydWN0IHRpbWV2YWwgKnZibGFua3RpbWUpOwotZXh0ZXJuIHZvaWQgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOworZXh0ZXJuIGJvb2wgZHJtX2hhbmRsZV92Ymxhbmsoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNydGMpOwogZXh0ZXJuIGludCBkcm1fdmJsYW5rX2dldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX3B1dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CiBleHRlcm4gdm9pZCBkcm1fdmJsYW5rX29mZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY3J0Yyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oIGIvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAppbmRleCBhY2Q3ZmFkLi44MDFiZTU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKQEAgLTI3NSw2ICsyNzUsNyBAQAogCiAvKioKICAqIGRybV9jcnRjX2Z1bmNzIC0gY29udHJvbCBDUlRDcyBmb3IgYSBnaXZlbiBkZXZpY2UKKyAqIEByZXNldDogcmVzZXQgQ1JUQyBhZnRlciBzdGF0ZSBoYXMgYmVlbiBpbnZhbGlkYXRlIChlLmcuIHJlc3VtZSkKICAqIEBkcG1zOiBjb250cm9sIGRpc3BsYXkgcG93ZXIgbGV2ZWxzCiAgKiBAc2F2ZTogc2F2ZSBDUlRDIHN0YXRlCiAgKiBAcmVzb3JlOiByZXN0b3JlIENSVEMgc3RhdGUKQEAgLTMwMiw2ICszMDMsOCBAQAogCXZvaWQgKCpzYXZlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOyAvKiBzdXNwZW5kPyAqLwogCS8qIFJlc3RvcmUgQ1JUQyBzdGF0ZSAqLwogCXZvaWQgKCpyZXN0b3JlKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMpOyAvKiByZXN1bWU/ICovCisJLyogUmVzZXQgQ1JUQyBzdGF0ZSAqLworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jcnRjICpjcnRjKTsKIAogCS8qIGN1cnNvciBjb250cm9scyAqLwogCWludCAoKmN1cnNvcl9zZXQpKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCkBAIC0zNzksNiArMzgyLDcgQEAKICAqIEBkcG1zOiBzZXQgcG93ZXIgc3RhdGUgKHNlZSBkcm1fY3J0Y19mdW5jcyBhYm92ZSkKICAqIEBzYXZlOiBzYXZlIGNvbm5lY3RvciBzdGF0ZQogICogQHJlc3RvcmU6IHJlc3RvcmUgY29ubmVjdG9yIHN0YXRlCisgKiBAcmVzZXQ6IHJlc2V0IGNvbm5lY3RvciBhZnRlciBzdGF0ZSBoYXMgYmVlbiBpbnZhbGlkYXRlIChlLmcuIHJlc3VtZSkKICAqIEBtb2RlX3ZhbGlkOiBpcyB0aGlzIG1vZGUgdmFsaWQgb24gdGhlIGdpdmVuIGNvbm5lY3Rvcj8KICAqIEBtb2RlX2ZpeHVwOiB0cnkgdG8gZml4dXAgcHJvcG9zZWQgbW9kZSBmb3IgdGhpcyBjb25uZWN0b3IKICAqIEBtb2RlX3NldDogc2V0IHRoaXMgbW9kZQpAQCAtMzk2LDYgKzQwMCw3IEBACiAJdm9pZCAoKmRwbXMpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIGludCBtb2RlKTsKIAl2b2lkICgqc2F2ZSkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAJdm9pZCAoKnJlc3RvcmUpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOworCXZvaWQgKCpyZXNldCkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgYW55dGhpbmcgaXMgYXR0YWNoZWQgdG8gdGhlIGNvbm5lY3Rvci4KIAkgKiBAZm9yY2UgaXMgc2V0IHRvIGZhbHNlIHdoaWxzdCBwb2xsaW5nLCB0cnVlIHdoZW4gY2hlY2tpbmcgdGhlCkBAIC00MTMsNiArNDE4LDcgQEAKIH07CiAKIHN0cnVjdCBkcm1fZW5jb2Rlcl9mdW5jcyB7CisJdm9pZCAoKnJlc2V0KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIpOwogfTsKIApAQCAtNjU2LDYgKzY2Miw3IEBACiAJCQkJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9kZWJ1Z19wcmludG1vZGVsaW5lKHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX2NvbmZpZ19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfY29uZmlnX2NsZWFudXAoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBkcm1fbW9kZV9zZXRfbmFtZShzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSk7CiBleHRlcm4gYm9vbCBkcm1fbW9kZV9lcXVhbChzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTEsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlMik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmggYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggZmUyOWFlMy4uNWZmMTE5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCisrKyBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaApAQCAtMjgsNyArMjgsNiBAQAogCXsweDEwMDIsIDB4NDE1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM1MH0sIFwKIAl7MHgxMDAyLCAweDQyMzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUH0sIFwKIAl7MHgxMDAyLCAweDQyNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKLQl7MHgxMDAyLCAweDQyNDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKIAl7MHgxMDAyLCAweDQzMzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMxMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg0MzM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAogCXsweDEwMDIsIDB4NDQzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaCBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAppbmRleCBlOTVhODZiLi5lNWM2MDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCkBAIC05MDcsNiArOTA3LDcgQEAKICNkZWZpbmUgUkFERU9OX0lORk9fVElMSU5HX0NPTkZJRwkweDA2CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfSFlQRVJaCQkweDA3CiAjZGVmaW5lIFJBREVPTl9JTkZPX1dBTlRfQ01BU0sJCTB4MDggLyogZ2V0IGFjY2VzcyB0byBDTUFTSyBvbiByMzAwICovCisjZGVmaW5lIFJBREVPTl9JTkZPX0NMT0NLX0NSWVNUQUxfRlJFUQkweDA5IC8qIGNsb2NrIGNyeXN0YWwgZnJlcXVlbmN5ICovCiAKIHN0cnVjdCBkcm1fcmFkZW9uX2luZm8gewogCXVpbnQzMl90CQlyZXF1ZXN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9rZXlzL3J4cnBjLXR5cGUuaCBiL2luY2x1ZGUva2V5cy9yeHJwYy10eXBlLmgKaW5kZXggNWNiODZjMy4uZmM0ODc1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9rZXlzL3J4cnBjLXR5cGUuaAorKysgYi9pbmNsdWRlL2tleXMvcnhycGMtdHlwZS5oCkBAIC05OSw3ICs5OSw2IEBACiAgKiBzdHJ1Y3R1cmUgb2YgcmF3IHBheWxvYWRzIHBhc3NlZCB0byBhZGRfa2V5KCkgb3IgaW5zdGFudGlhdGUga2V5CiAgKi8KIHN0cnVjdCByeHJwY19rZXlfZGF0YV92MSB7Ci0JdTMyCQlraWZfdmVyc2lvbjsJCS8qIDEgKi8KIAl1MTYJCXNlY3VyaXR5X2luZGV4OwogCXUxNgkJdGlja2V0X2xlbmd0aDsKIAl1MzIJCWV4cGlyeTsJCQkvKiB0aW1lX3QgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggMjI5NmQ4Yi4uYjBhZGE2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTEsNSArMSw2IEBACiBoZWFkZXIteSArPSBieXRlb3JkZXIvCiBoZWFkZXIteSArPSBjYW4vCitoZWFkZXIteSArPSBjYWlmLwogaGVhZGVyLXkgKz0gZHZiLwogaGVhZGVyLXkgKz0gaGRsYy8KIGhlYWRlci15ICs9IGlzZG4vCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCA0ZDE4ZmYzLi5kNTA2M2UxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTY5OSw3ICs2OTksNyBAQAogZXh0ZXJuIHZvaWQgYmxrX3N0b3BfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgX19ibGtfc3RvcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci1leHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKik7CitleHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCk7CiBleHRlcm4gdm9pZCBibGtfcnVuX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogZXh0ZXJuIGludCBibGtfcnFfbWFwX3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCSAgIHN0cnVjdCBycV9tYXBfZGF0YSAqLCB2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nLApAQCAtMTA4OCw3ICsxMDg4LDYgQEAKIAogc3RydWN0IHdvcmtfc3RydWN0OwogaW50IGtibG9ja2Rfc2NoZWR1bGVfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLWludCBrYmxvY2tkX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpOwogCiAjaWZkZWYgQ09ORklHX0JMS19DR1JPVVAKIC8qCkBAIC0xMTM2LDcgKzExMzUsNiBAQAogZXh0ZXJuIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3Rocm90bF9leGl0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiBpbnQgYmxrX3Rocm90bF9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKipiaW8pOwotZXh0ZXJuIHZvaWQgdGhyb3RsX3NjaGVkdWxlX2RlbGF5ZWRfd29yayhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBkZWxheSk7CiBleHRlcm4gdm9pZCB0aHJvdGxfc2h1dGRvd25fdGltZXJfd3Eoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogI2Vsc2UgLyogQ09ORklHX0JMS19ERVZfVEhST1RUTElORyAqLwogc3RhdGljIGlubGluZSBpbnQgYmxrX3Rocm90bF9iaW8oc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKipiaW8pCkBAIC0xMTQ2LDcgKzExNDQsNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBibGtfdGhyb3RsX2luaXQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGJsa190aHJvdGxfZXhpdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSB2b2lkIHRocm90bF9zY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGxvbmcgZGVsYXkpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGhyb3RsX3NodXRkb3duX3RpbWVyX3dxKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKSB7fQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX1RIUk9UVExJTkcgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaCBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKaW5kZXggMzM5NWNmNy4uYjIyZmIwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCkBAIC0yNDUsNyArMjQ1LDYgQEAKIAogZXh0ZXJuIHZvaWQgYmxrX2R1bXBfY21kKGNoYXIgKmJ1Ziwgc3RydWN0IHJlcXVlc3QgKnJxKTsKIGV4dGVybiB2b2lkIGJsa19maWxsX3J3YnMoY2hhciAqcndicywgdTMyIHJ3LCBpbnQgYnl0ZXMpOwotZXh0ZXJuIHZvaWQgYmxrX2ZpbGxfcndic19ycShjaGFyICpyd2JzLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpOwogCiAjZW5kaWYgLyogQ09ORklHX0VWRU5UX1RSQUNJTkcgJiYgQ09ORklHX0JMT0NLICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FpZi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2NhaWYvS2J1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5Y2YyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NhaWYvS2J1aWxkCkBAIC0wLDAgKzEsMiBAQAoraGVhZGVyLXkgKz0gY2FpZl9zb2NrZXQuaAoraGVhZGVyLXkgKz0gaWZfY2FpZi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmggYi9pbmNsdWRlL2xpbnV4L2NlcGgvbWVzc2VuZ2VyLmgKaW5kZXggYzMwMTFiZS4uMzFkOTFhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZXBoL21lc3Nlbmdlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY2VwaC9tZXNzZW5nZXIuaApAQCAtMTIzLDYgKzEyMyw3IEBACiAjZGVmaW5lIFNPQ0tfQ0xPU0VECTExIC8qIHNvY2tldCBzdGF0ZSBjaGFuZ2VkIHRvIGNsb3NlZCAqLwogI2RlZmluZSBPUEVOSU5HICAgICAgICAgMTMgLyogb3BlbiBjb25uZWN0aW9uIHcvIChwb3NzaWJseSBuZXcpIHBlZXIgKi8KICNkZWZpbmUgREVBRCAgICAgICAgICAgIDE0IC8qIGRlYWQsIGFib3V0IHRvIGtmcmVlICovCisjZGVmaW5lIEJBQ0tPRkYgICAgICAgICAxNQogCiAvKgogICogQSBzaW5nbGUgY29ubmVjdGlvbiB3aXRoIGFub3RoZXIgaG9zdC4KQEAgLTE2MCw3ICsxNjEsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgb3V0X3F1ZXVlOwogCXN0cnVjdCBsaXN0X2hlYWQgb3V0X3NlbnQ7ICAgLyogc2VuZGluZyBvciBzZW50IGJ1dCB1bmFja2VkICovCiAJdTY0IG91dF9zZXE7CQkgICAgIC8qIGxhc3QgbWVzc2FnZSBxdWV1ZWQgZm9yIHNlbmQgKi8KLQlib29sIG91dF9rZWVwYWxpdmVfcGVuZGluZzsKIAogCXU2NCBpbl9zZXEsIGluX3NlcV9hY2tlZDsgIC8qIGxhc3QgbWVzc2FnZSByZWNlaXZlZCwgYWNrZWQgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmggYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAppbmRleCA5Nzc0ZmU2Li43NDUzY2ZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbnNvbGUuaApAQCAtMTM5LDkgKzEzOSw5IEBACiBleHRlcm4gdm9pZCByZWdpc3Rlcl9jb25zb2xlKHN0cnVjdCBjb25zb2xlICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2NvbnNvbGUoc3RydWN0IGNvbnNvbGUgKik7CiBleHRlcm4gc3RydWN0IGNvbnNvbGUgKmNvbnNvbGVfZHJpdmVyczsKLWV4dGVybiB2b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCk7Ci1leHRlcm4gaW50IHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKHZvaWQpOwotZXh0ZXJuIHZvaWQgcmVsZWFzZV9jb25zb2xlX3NlbSh2b2lkKTsKK2V4dGVybiB2b2lkIGNvbnNvbGVfbG9jayh2b2lkKTsKK2V4dGVybiBpbnQgY29uc29sZV90cnlsb2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgY29uc29sZV91bmxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBjb25zb2xlX2NvbmRpdGlvbmFsX3NjaGVkdWxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgY29uc29sZV91bmJsYW5rKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCB0dHlfZHJpdmVyICpjb25zb2xlX2RldmljZShpbnQgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYm5sLmggYi9pbmNsdWRlL2xpbnV4L2RjYm5sLmgKaW5kZXggNjhjZDI0OC4uNjY5MDBlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kY2JubC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNibmwuaApAQCAtMTAxLDggKzEwMSw4IEBACiAgKi8KIHN0cnVjdCBkY2JfYXBwIHsKIAlfX3U4CXNlbGVjdG9yOwotCV9fdTMyCXByb3RvY29sOwogCV9fdTgJcHJpb3JpdHk7CisJX191MTYJcHJvdG9jb2w7CiB9OwogCiBzdHJ1Y3QgZGNibXNnIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKaW5kZXggZGE3ZTUyYi4uMWVmZmM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcmVlemVyLmgKQEAgLTEwOSw3ICsxMDksNyBAQAogfQogCiAvKgotICogQ2hlY2sgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGNvdW50ZWQgYXMgZnJlZXplYWJsZSBieSB0aGUgZnJlZXplcgorICogQ2hlY2sgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGNvdW50ZWQgYXMgZnJlZXphYmxlIGJ5IHRoZSBmcmVlemVyCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZXJfc2hvdWxkX3NraXAoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDMyYjM4Y2QuLmUzOGI1MGE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02NDksNiArNjQ5LDcgQEAKIAlzcGlubG9ja190CQlwcml2YXRlX2xvY2s7CS8qIGZvciB1c2UgYnkgdGhlIGFkZHJlc3Nfc3BhY2UgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXByaXZhdGVfbGlzdDsJLyogZGl0dG8gKi8KIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZQkqYXNzb2NfbWFwcGluZzsJLyogZGl0dG8gKi8KKwlzdHJ1Y3QgbXV0ZXgJCXVubWFwX211dGV4OyAgICAvKiB0byBwcm90ZWN0IHVubWFwcGluZyAqLwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKIAkvKgogCSAqIE9uIG1vc3QgYXJjaGl0ZWN0dXJlcyB0aGF0IGFsaWdubWVudCBpcyBhbHJlYWR5IHRoZSBjYXNlOyBidXQKQEAgLTIxMzksNyArMjE0MCw3IEBACiAJCQkJICAgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldik7CiBleHRlcm4gaW50IHJldmFsaWRhdGVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqKTsKIGV4dGVybiBpbnQgY2hlY2tfZGlza19jaGFuZ2Uoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKLWV4dGVybiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworZXh0ZXJuIGludCBfX2ludmFsaWRhdGVfZGV2aWNlKHN0cnVjdCBibG9ja19kZXZpY2UgKiwgYm9vbCk7CiBleHRlcm4gaW50IGludmFsaWRhdGVfcGFydGl0aW9uKHN0cnVjdCBnZW5kaXNrICosIGludCk7CiAjZW5kaWYKIHVuc2lnbmVkIGxvbmcgaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLApAQCAtMjIyNSw2ICsyMjI2LDcgQEAKIAogZXh0ZXJuIGludCBpbm9kZV9pbml0X2Fsd2F5cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgaW5vZGVfaW5pdF9vbmNlKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiB2b2lkIGFkZHJlc3Nfc3BhY2VfaW5pdF9vbmNlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGlncmFiKHN0cnVjdCBpbm9kZSAqKTsKQEAgLTI1NTUsOSArMjU1NywxMiBAQAogCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiBpbnQgX19pbml0IGdldF9maWxlc3lzdGVtX2xpc3QoY2hhciAqYnVmKTsKIAorI2RlZmluZSBfX0ZNT0RFX0VYRUMJCSgoX19mb3JjZSBpbnQpIEZNT0RFX0VYRUMpCisjZGVmaW5lIF9fRk1PREVfTk9OT1RJRlkJKChfX2ZvcmNlIGludCkgRk1PREVfTk9OT1RJRlkpCisKICNkZWZpbmUgQUNDX01PREUoeCkgKCJcMDA0XDAwMlwwMDZcMDA2IlsoeCkmT19BQ0NNT0RFXSkKICNkZWZpbmUgT1BFTl9GTU9ERShmbGFnKSAoKF9fZm9yY2UgZm1vZGVfdCkoKChmbGFnICsgMSkgJiBPX0FDQ01PREUpIHwgXAotCQkJCQkgICAgKGZsYWcgJiBGTU9ERV9OT05PVElGWSkpKQorCQkJCQkgICAgKGZsYWcgJiBfX0ZNT0RFX05PTk9USUZZKSkpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0xJTlVYX0ZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IGEzYjE0OGEuLmRjYTMxNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2ZwLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZnAuaApAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCQkJCSAoKDEgPDwgWk9ORVNfU0hJRlQpIC0gMSk7CiAKIAlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoYml0KSkKLQkJTUFZQkVfQlVJTERfQlVHX09OKChHRlBfWk9ORV9CQUQgPj4gYml0KSAmIDEpOworCQlCVUlMRF9CVUdfT04oKEdGUF9aT05FX0JBRCA+PiBiaXQpICYgMSk7CiAJZWxzZSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCiAJCUJVR19PTigoR0ZQX1pPTkVfQkFEID4+IGJpdCkgJiAxKTsKQEAgLTMzMiwxNiArMzMyLDE5IEBACiAJcmV0dXJuIGFsbG9jX3BhZ2VzX2N1cnJlbnQoZ2ZwX21hc2ssIG9yZGVyKTsKIH0KIGV4dGVybiBzdHJ1Y3QgcGFnZSAqYWxsb2NfcGFnZXNfdm1hKGdmcF90IGdmcF9tYXNrLCBpbnQgb3JkZXIsCi0JCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKKwkJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQlpbnQgbm9kZSk7CiAjZWxzZQogI2RlZmluZSBhbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpIFwKIAkJYWxsb2NfcGFnZXNfbm9kZShudW1hX25vZGVfaWQoKSwgZ2ZwX21hc2ssIG9yZGVyKQotI2RlZmluZSBhbGxvY19wYWdlc192bWEoZ2ZwX21hc2ssIG9yZGVyLCB2bWEsIGFkZHIpCVwKKyNkZWZpbmUgYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCBvcmRlciwgdm1hLCBhZGRyLCBub2RlKQlcCiAJYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKQogI2VuZGlmCiAjZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21hc2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQotI2RlZmluZSBhbGxvY19wYWdlX3ZtYShnZnBfbWFzaywgdm1hLCBhZGRyKQlcCi0JYWxsb2NfcGFnZXNfdm1hKGdmcF9tYXNrLCAwLCB2bWEsIGFkZHIpCisjZGVmaW5lIGFsbG9jX3BhZ2Vfdm1hKGdmcF9tYXNrLCB2bWEsIGFkZHIpCQkJXAorCWFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgMCwgdm1hLCBhZGRyLCBudW1hX25vZGVfaWQoKSkKKyNkZWZpbmUgYWxsb2NfcGFnZV92bWFfbm9kZShnZnBfbWFzaywgdm1hLCBhZGRyLCBub2RlKQkJXAorCWFsbG9jX3BhZ2VzX3ZtYShnZnBfbWFzaywgMCwgdm1hLCBhZGRyLCBub2RlKQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2dldF9mcmVlX3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3plcm9lZF9wYWdlKGdmcF90IGdmcF9tYXNrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKaW5kZXggOGU2YzhjNC4uZGYyOWM4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9odWdlX21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9odWdlX21tLmgKQEAgLTU3LDcgKzU3LDggQEAKIAkgICh0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncyAmCQkJCQlcCiAJICAgKDE8PFRSQU5TUEFSRU5UX0hVR0VQQUdFX1JFUV9NQURWX0ZMQUcpICYmCQkJXAogCSAgICgoX192bWEpLT52bV9mbGFncyAmIFZNX0hVR0VQQUdFKSkpICYmCQkJXAotCSAhKChfX3ZtYSktPnZtX2ZsYWdzICYgVk1fTk9IVUdFUEFHRSkpCisJICEoKF9fdm1hKS0+dm1fZmxhZ3MgJiBWTV9OT0hVR0VQQUdFKSAmJgkJCVwKKwkgIWlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2soX192bWEpKQogI2RlZmluZSB0cmFuc3BhcmVudF9odWdlcGFnZV9kZWZyYWcoX192bWEpCQkJCVwKIAkoKHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzICYJCQkJCVwKIAkgICgxPDxUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfRkxBRykpIHx8CQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC9idTIxMDEzLmggYi9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaAppbmRleCBlNDcwZDM4Li4wNWUwMzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0L2J1MjEwMTMuaApAQCAtMTIsOCArMTIsNiBAQAogICogQGNzX2VuOglwb2ludGVyIHRvIHRoZSBjcyBlbmFibGUgZnVuY3Rpb24KICAqIEBjc19kaXM6CXBvaW50ZXIgdG8gdGhlIGNzIGRpc2FibGUgZnVuY3Rpb24KICAqIEBpcnFfcmVhZF92YWw6ICAgIHBvaW50ZXIgdG8gcmVhZCB0aGUgcGVuIGlycSB2YWx1ZSBmdW5jdGlvbgotICogQHhfbWF4X3JlczogeG1heCByZXNvbHV0aW9uCi0gKiBAeV9tYXhfcmVzOiB5bWF4IHJlc29sdXRpb24KICAqIEB0b3VjaF94X21heDogdG91Y2ggeCBtYXgKICAqIEB0b3VjaF95X21heDogdG91Y2ggeSBtYXgKICAqIEBjc19waW46IGNoaXAgc2VsZWN0IHBpbgpAQCAtMjksOCArMjcsNiBAQAogCWludCAoKmNzX2VuKShpbnQgcmVzZXRfcGluKTsKIAlpbnQgKCpjc19kaXMpKGludCByZXNldF9waW4pOwogCWludCAoKmlycV9yZWFkX3ZhbCkodm9pZCk7Ci0JaW50IHhfbWF4X3JlczsKLQlpbnQgeV9tYXhfcmVzOwogCWludCB0b3VjaF94X21heDsKIAlpbnQgdG91Y2hfeV9tYXg7CiAJdW5zaWduZWQgaW50IGNzX3BpbjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKaW5kZXggNjk3NDc0Ni4uZmU3YzRiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmgKQEAgLTQsOCArNCw4IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCi0jZGVmaW5lIE1BVFJJWF9NQVhfUk9XUwkJMTYKLSNkZWZpbmUgTUFUUklYX01BWF9DT0xTCQkxNgorI2RlZmluZSBNQVRSSVhfTUFYX1JPV1MJCTMyCisjZGVmaW5lIE1BVFJJWF9NQVhfQ09MUwkJMzIKIAogI2RlZmluZSBLRVkocm93LCBjb2wsIHZhbCkJKCgoKHJvdykgJiAoTUFUUklYX01BWF9ST1dTIC0gMSkpIDw8IDI0KSB8XAogCQkJCSAoKChjb2wpICYgKE1BVFJJWF9NQVhfQ09MUyAtIDEpKSA8PCAxNikgfFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXJxLmggYi9pbmNsdWRlL2xpbnV4L2lycS5oCmluZGV4IGFiZGUyNTIuLjgwZmNiNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcnEuaApAQCAtNzQsNyArNzQsOCBAQAogCiAjZGVmaW5lIElSUUZfTU9ESUZZX01BU0sJXAogCShJUlFfVFlQRV9TRU5TRV9NQVNLIHwgSVJRX05PUFJPQkUgfCBJUlFfTk9SRVFVRVNUIHwgXAotCSBJUlFfTk9BVVRPRU4gfCBJUlFfTU9WRV9QQ05UWFQgfCBJUlFfTEVWRUwpCisJIElSUV9OT0FVVE9FTiB8IElSUV9NT1ZFX1BDTlRYVCB8IElSUV9MRVZFTCB8IElSUV9OT19CQUxBTkNJTkcgfCBcCisJIElSUV9QRVJfQ1BVKQogCiAjaWZkZWYgQ09ORklHX0lSUV9QRVJfQ1BVCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpICgodmFyKSAmIElSUV9QRVJfQ1BVKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggZDA3ZDgwNS4uMmZlNmU4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC01NzUsMTIgKzU3NSw2IEBACiAJY2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07CS8qIFBhZGRpbmc6IGxpYmM1IHVzZXMgdGhpcy4uICovCiB9OwogCi0vKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyB0cnVlICovCi0jZGVmaW5lIEJVSUxEX0JVR19PTihjb25kaXRpb24pICgodm9pZClCVUlMRF9CVUdfT05fWkVSTyhjb25kaXRpb24pKQotCi0vKiBGb3JjZSBhIGNvbXBpbGF0aW9uIGVycm9yIGlmIGNvbmRpdGlvbiBpcyBjb25zdGFudCBhbmQgdHJ1ZSAqLwotI2RlZmluZSBNQVlCRV9CVUlMRF9CVUdfT04oY29uZCkgKCh2b2lkKXNpemVvZihjaGFyWzEgLSAyICogISEoY29uZCldKSkKLQogLyogRm9yY2UgYSBjb21waWxhdGlvbiBlcnJvciBpZiBhIGNvbnN0YW50IGV4cHJlc3Npb24gaXMgbm90IGEgcG93ZXIgb2YgMiAqLwogI2RlZmluZSBCVUlMRF9CVUdfT05fTk9UX1BPV0VSX09GXzIobikJCQlcCiAJQlVJTERfQlVHX09OKChuKSA9PSAwIHx8ICgoKG4pICYgKChuKSAtIDEpKSAhPSAwKSkKQEAgLTU5Miw2ICs1ODYsMzIgQEAKICNkZWZpbmUgQlVJTERfQlVHX09OX1pFUk8oZSkgKHNpemVvZihzdHJ1Y3QgeyBpbnQ6LSEhKGUpOyB9KSkKICNkZWZpbmUgQlVJTERfQlVHX09OX05VTEwoZSkgKCh2b2lkICopc2l6ZW9mKHN0cnVjdCB7IGludDotISEoZSk7IH0pKQogCisvKioKKyAqIEJVSUxEX0JVR19PTiAtIGJyZWFrIGNvbXBpbGUgaWYgYSBjb25kaXRpb24gaXMgdHJ1ZS4KKyAqIEBjb25kaXRpb246IHRoZSBjb25kaXRpb24gd2hpY2ggdGhlIGNvbXBpbGVyIHNob3VsZCBrbm93IGlzIGZhbHNlLgorICoKKyAqIElmIHlvdSBoYXZlIHNvbWUgY29kZSB3aGljaCByZWxpZXMgb24gY2VydGFpbiBjb25zdGFudHMgYmVpbmcgZXF1YWwsIG9yCisgKiBvdGhlciBjb21waWxlLXRpbWUtZXZhbHVhdGVkIGNvbmRpdGlvbiwgeW91IHNob3VsZCB1c2UgQlVJTERfQlVHX09OIHRvCisgKiBkZXRlY3QgaWYgc29tZW9uZSBjaGFuZ2VzIGl0LgorICoKKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIGdjYydzIHJlbHVjdGFuY2UgdG8gY3JlYXRlIGEgbmVnYXRpdmUgYXJyYXksIGJ1dAorICogZ2NjIChhcyBvZiA0LjQpIG9ubHkgZW1pdHMgdGhhdCBlcnJvciBmb3Igb2J2aW91cyBjYXNlcyAoZWcuIG5vdCBhcmd1bWVudHMKKyAqIHRvIGlubGluZSBmdW5jdGlvbnMpLiAgU28gYXMgYSBmYWxsYmFjayB3ZSB1c2UgdGhlIG9wdGltaXplcjsgaWYgaXQgY2FuJ3QKKyAqIHByb3ZlIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIGl0IHdpbGwgY2F1c2UgYSBsaW5rIGVycm9yIG9uIHRoZSB1bmRlZmluZWQKKyAqICJfX2J1aWxkX2J1Z19vbl9mYWlsZWQiLiAgVGhpcyBlcnJvciBtZXNzYWdlIGNhbiBiZSBoYXJkZXIgdG8gdHJhY2sgZG93bgorICogdGhvdWdoLCBoZW5jZSB0aGUgdHdvIGRpZmZlcmVudCBtZXRob2RzLgorICovCisjaWZuZGVmIF9fT1BUSU1JWkVfXworI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQorI2Vsc2UKK2V4dGVybiBpbnQgX19idWlsZF9idWdfb25fZmFpbGVkOworI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQkoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKTsJXAorCQlpZiAoY29uZGl0aW9uKSBfX2J1aWxkX2J1Z19vbl9mYWlsZWQgPSAxOwlcCisJfSB3aGlsZSgwKQorI2VuZGlmCisKIC8qIFRyYXAgcGFzdGVycyBvZiBfX0ZVTkNUSU9OX18gYXQgY29tcGlsZS10aW1lICovCiAjZGVmaW5lIF9fRlVOQ1RJT05fXyAoX19mdW5jX18pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2xpc3QuaCBiL2luY2x1ZGUvbGludXgva2xpc3QuaAppbmRleCBlOTFhNGU1Li5hMzcwY2U1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tsaXN0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rbGlzdC5oCkBAIC0yMiw3ICsyMiw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlrX2xpc3Q7CiAJdm9pZAkJCSgqZ2V0KShzdHJ1Y3Qga2xpc3Rfbm9kZSAqKTsKIAl2b2lkCQkJKCpwdXQpKHN0cnVjdCBrbGlzdF9ub2RlICopOwotfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoNCkpKTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQgKHNpemVvZih2b2lkICopKSkpOwogCiAjZGVmaW5lIEtMSVNUX0lOSVQoX25hbWUsIF9nZXQsIF9wdXQpCQkJCQlcCiAJeyAua19sb2NrCT0gX19TUElOX0xPQ0tfVU5MT0NLRUQoX25hbWUua19sb2NrKSwJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmggYi9pbmNsdWRlL2xpbnV4L2ttZW1jaGVjay5oCmluZGV4IDA4ZDdkYzQuLjM5Zjg0NTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21lbWNoZWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbWVtY2hlY2suaApAQCAtNzYsNyArNzYsNyBAQAogCQkJCQkJCQkJXAogCQlfbiA9IChsb25nKSAmKChwdHIpLT5uYW1lIyNfZW5kKQkJCVwKIAkJCS0gKGxvbmcpICYoKHB0ciktPm5hbWUjI19iZWdpbik7CQlcCi0JCU1BWUJFX0JVSUxEX0JVR19PTihfbiA8IDApOwkJCQlcCisJCUJVSUxEX0JVR19PTihfbiA8IDApOwkJCQkJXAogCQkJCQkJCQkJXAogCQlrbWVtY2hlY2tfbWFya19pbml0aWFsaXplZCgmKChwdHIpLT5uYW1lIyNfYmVnaW4pLCBfbik7CVwKIAl9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCA5YTVmOGE3Li4zYTU0MjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtOTYsNiArOTYsMTEgQEAKICAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KICAqLwogI2lmbmRlZiBDT05GSUdfREVCVUdfTElTVAorc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCiB7CiAJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOwpAQCAtMTAzLDYgKzEwOCw3IEBACiAJZW50cnktPnByZXYgPSBMSVNUX1BPSVNPTjI7CiB9CiAjZWxzZQorZXh0ZXJuIHZvaWQgX19saXN0X2RlbF9lbnRyeShzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSk7CiBleHRlcm4gdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSk7CiAjZW5kaWYKIApAQCAtMTM1LDcgKzE0MSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbF9pbml0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQogewotCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGVudHJ5KTsKIAlJTklUX0xJU1RfSEVBRChlbnRyeSk7CiB9CiAKQEAgLTE0Niw3ICsxNTIsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9tb3ZlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7Ci0JX19saXN0X2RlbChsaXN0LT5wcmV2LCBsaXN0LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGxpc3QpOwogCWxpc3RfYWRkKGxpc3QsIGhlYWQpOwogfQogCkBAIC0xNTgsNyArMTY0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X21vdmVfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAogCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKLQlfX2xpc3RfZGVsKGxpc3QtPnByZXYsIGxpc3QtPm5leHQpOworCV9fbGlzdF9kZWxfZW50cnkobGlzdCk7CiAJbGlzdF9hZGRfdGFpbChsaXN0LCBoZWFkKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODk5NC9jb3JlLmgKaW5kZXggM2ZkMzY4NC4uZWY0ZjBiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvY29yZS5oCkBAIC03MSw2ICs3MSw3IEBACiAJdTE2IGlycV9tYXNrc19jYWNoZVtXTTg5OTRfTlVNX0lSUV9SRUdTXTsKIAogCS8qIFVzZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCWJvb2wgc3VzcGVuZGVkOwogCXUxNiBsZG9fcmVnc1tXTTg5OTRfTlVNX0xET19SRUdTXTsKIAl1MTYgZ3Bpb19yZWdzW1dNODk5NF9OVU1fR1BJT19SRUdTXTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaCBiL2luY2x1ZGUvbGludXgvbW1jL3NoX21tY2lmLmgKaW5kZXggYmYxNzM1MC4uMzhkMzkzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvc2hfbW1jaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zaF9tbWNpZi5oCkBAIC05NCwxMiArOTQsMTIgQEAKIAogc3RhdGljIGlubGluZSB1MzIgc2hfbW1jaWZfcmVhZGwodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgcmVnKQogewotCXJldHVybiByZWFkbChhZGRyICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoYWRkciArIHJlZyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzaF9tbWNpZl93cml0ZWwodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgcmVnLCB1MzIgdmFsKQogewotCXdyaXRlbCh2YWwsIGFkZHIgKyByZWcpOworCV9fcmF3X3dyaXRlbCh2YWwsIGFkZHIgKyByZWcpOwogfQogCiAjZGVmaW5lIFNIX01NQ0lGX0JCUyA1MTIgLyogYm9vdCBibG9jayBzaXplICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA4YjE3ZmQ4Li41ZGU0MjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTU4LDYgKzU4LDEyIEBACiAJdm9pZCAoKmZyZWUpKHN0cnVjdCBtb2R1bGUgKik7CiB9OwogCitzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlIHsKKwlzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtYXR0cjsKKwljb25zdCBjaGFyICptb2R1bGVfbmFtZTsKKwljb25zdCBjaGFyICp2ZXJzaW9uOworfSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oc2l6ZW9mKHZvaWQgKikpKSk7CisKIHN0cnVjdCBtb2R1bGVfa29iamVjdAogewogCXN0cnVjdCBrb2JqZWN0IGtvYmo7CkBAIC0xNjEsNyArMTY3LDI4IEBACiAgIFVzaW5nIHRoaXMgYXV0b21hdGljYWxseSBhZGRzIGEgY2hlY2tzdW0gb2YgdGhlIC5jIGZpbGVzIGFuZCB0aGUKICAgbG9jYWwgaGVhZGVycyBpbiAic3JjdmVyc2lvbiIuCiAqLworCisjaWYgZGVmaW5lZChNT0RVTEUpIHx8ICFkZWZpbmVkKENPTkZJR19TWVNGUykKICNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pIE1PRFVMRV9JTkZPKHZlcnNpb24sIF92ZXJzaW9uKQorI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pCQkJCQlcCisJZXh0ZXJuIHNzaXplX3QgX19tb2R2ZXJfdmVyc2lvbl9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICosCVwKKwkJCQkJICAgICBzdHJ1Y3QgbW9kdWxlICosIGNoYXIgKik7CVwKKwlzdGF0aWMgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX21vZHZlcl92ZXJzaW9uX2F0dHIJXAorCV9fdXNlZAkJCQkJCQkJXAorICAgIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIl9fbW9kdmVyIiksYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKSBcCisJPSB7CQkJCQkJCQlcCisJCS5tYXR0cgk9IHsJCQkJCQlcCisJCQkuYXR0cgk9IHsJCQkJCVwKKwkJCQkubmFtZQk9ICJ2ZXJzaW9uIiwJCQlcCisJCQkJLm1vZGUJPSBTX0lSVUdPLAkJCVwKKwkJCX0sCQkJCQkJXAorCQkJLnNob3cJPSBfX21vZHZlcl92ZXJzaW9uX3Nob3csCQlcCisJCX0sCQkJCQkJCVwKKwkJLm1vZHVsZV9uYW1lCT0gS0JVSUxEX01PRE5BTUUsCQkJXAorCQkudmVyc2lvbgk9IF92ZXJzaW9uLAkJCQlcCisJfQorI2VuZGlmCiAKIC8qIE9wdGlvbmFsIGZpcm13YXJlIGZpbGUgKG9yIGZpbGVzKSBuZWVkZWQgYnkgdGhlIG1vZHVsZQogICogZm9ybWF0IGlzIHNpbXBseSBmaXJtd2FyZSBmaWxlIG5hbWUuICBNdWx0aXBsZSBmaXJtd2FyZQpAQCAtMzUwLDcgKzM3Nyw3IEBACiAJICAga2VlcGluZyBwb2ludGVycyB0byB0aGlzIHN0dWZmICovCiAJY2hhciAqYXJnczsKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqdHJhY2Vwb2ludHM7CisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHJhY2Vwb2ludHNfcHRyczsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCkBAIC0zNjIsNyArMzg5LDcgQEAKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlX2JwcmludGtfZm10OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0VWRU5UX1RSQUNJTkcKLQlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKnRyYWNlX2V2ZW50czsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKip0cmFjZV9ldmVudHM7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9ldmVudHM7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRlRSQUNFX01DT1VOVF9SRUNPUkQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaAppbmRleCAxMTJhZGY4Li4wN2I0MTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0xNiwxNSArMTYsMTcgQEAKIC8qIENob3NlbiBzbyB0aGF0IHN0cnVjdHMgd2l0aCBhbiB1bnNpZ25lZCBsb25nIGxpbmUgdXAuICovCiAjZGVmaW5lIE1BWF9QQVJBTV9QUkVGSVhfTEVOICg2NCAtIHNpemVvZih1bnNpZ25lZCBsb25nKSkKIAotI2lmZGVmIE1PRFVMRQogI2RlZmluZSBfX19tb2R1bGVfY2F0KGEsYikgX19tb2RfICMjIGEgIyMgYgogI2RlZmluZSBfX21vZHVsZV9jYXQoYSxiKSBfX19tb2R1bGVfY2F0KGEsYikKKyNpZmRlZiBNT0RVTEUKICNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCQkJCQkgIFwKIHN0YXRpYyBjb25zdCBjaGFyIF9fbW9kdWxlX2NhdChuYW1lLF9fTElORV9fKVtdCQkJCSAgXAogICBfX3VzZWQgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm1vZGluZm8iKSwgdW51c2VkLCBhbGlnbmVkKDEpKSkJICBcCiAgID0gX19zdHJpbmdpZnkodGFnKSAiPSIgaW5mbwogI2Vsc2UgIC8qICFNT0RVTEUgKi8KLSNkZWZpbmUgX19NT0RVTEVfSU5GTyh0YWcsIG5hbWUsIGluZm8pCisvKiBUaGlzIHN0cnVjdCBpcyBoZXJlIGZvciBzeW50YWN0aWMgY29oZXJlbmN5LCBpdCBpcyBub3QgdXNlZCAqLworI2RlZmluZSBfX01PRFVMRV9JTkZPKHRhZywgbmFtZSwgaW5mbykJCQkJCSAgXAorICBzdHJ1Y3QgX19tb2R1bGVfY2F0KG5hbWUsX19MSU5FX18pIHt9CiAjZW5kaWYKICNkZWZpbmUgX19NT0RVTEVfUEFSTV9UWVBFKG5hbWUsIF90eXBlKQkJCQkJICBcCiAgIF9fTU9EVUxFX0lORk8ocGFybXR5cGUsIG5hbWUjI3R5cGUsICNuYW1lICI6IiBfdHlwZSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCmluZGV4IDBmYTdhM2EuLmIyMWQ1NjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tcm91dGUuaApAQCAtMTUwLDYgKzE1MCw3IEBACiBleHRlcm4gaW50IGlwX21yb3V0ZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrICosIGludCwgY2hhciBfX3VzZXIgKiwgdW5zaWduZWQgaW50KTsKIGV4dGVybiBpbnQgaXBfbXJvdXRlX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKiwgaW50LCBjaGFyIF9fdXNlciAqLCBpbnQgX191c2VyICopOwogZXh0ZXJuIGludCBpcG1yX2lvY3RsKHN0cnVjdCBzb2NrICpzaywgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CitleHRlcm4gaW50IGlwbXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGlwX21yX2luaXQodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGU2LmggYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAppbmRleCA2MDkxYWI3Li45ZDJkZWIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZTYuaApAQCAtMTM2LDYgKzEzNiw3IEBACiBleHRlcm4gaW50IGlwNl9tcm91dGVfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqLCBpbnQsIGNoYXIgX191c2VyICosIGludCBfX3VzZXIgKik7CiBleHRlcm4gaW50IGlwNl9tcl9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgaXA2bXJfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnKTsKK2V4dGVybiBpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gaW50IGlwNl9tcl9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaXA2X21yX2NsZWFudXAodm9pZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaCBiL2luY2x1ZGUvbGludXgvbmZzYWNsLmgKaW5kZXggZjMyMWI1Ny4uZmFiY2IxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNhY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2FjbC5oCkBAIC01MSwxMCArNTEsMTAgQEAKIAlyZXR1cm4gdzsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGludAorZXh0ZXJuIGludAogbmZzYWNsX2VuY29kZShzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1bnNpZ25lZCBpbnQgYmFzZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkgICAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIGludCBlbmNvZGVfZW50cmllcywgaW50IHR5cGVmbGFnKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQKK2V4dGVybiBpbnQKIG5mc2FjbF9kZWNvZGUoc3RydWN0IHhkcl9idWYgKmJ1ZiwgdW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCAqYWNsY250LAogCSAgICAgIHN0cnVjdCBwb3NpeF9hY2wgKipwYWNsKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9vcHJvZmlsZS5oCmluZGV4IDMyZmI4MTIuLjFjYTY0MTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L29wcm9maWxlLmgKQEAgLTE2LDYgKzE2LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogIAogLyogRWFjaCBlc2NhcGVkIGVudHJ5IGlzIHByZWZpeGVkIGJ5IEVTQ0FQRV9DT0RFCkBAIC0xODYsMTAgKzE4OCwxNyBAQAogaW50IG9wcm9maWxlX2FkZF9kYXRhNjQoc3RydWN0IG9wX2VudHJ5ICplbnRyeSwgdTY0IHZhbCk7CiBpbnQgb3Byb2ZpbGVfd3JpdGVfY29tbWl0KHN0cnVjdCBvcF9lbnRyeSAqZW50cnkpOwogCi0jaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTCisjaWZkZWYgQ09ORklHX0hXX1BFUkZfRVZFTlRTCiBpbnQgX19pbml0IG9wcm9maWxlX3BlcmZfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKTsKIHZvaWQgb3Byb2ZpbGVfcGVyZl9leGl0KHZvaWQpOwogY2hhciAqb3BfbmFtZV9mcm9tX3BlcmZfaWQodm9pZCk7Ci0jZW5kaWYgLyogQ09ORklHX1BFUkZfRVZFTlRTICovCisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IG9wcm9maWxlX3BlcmZfaW5pdChzdHJ1Y3Qgb3Byb2ZpbGVfb3BlcmF0aW9ucyAqb3BzKQoreworCXByX2luZm8oIm9wcm9maWxlOiBoYXJkd2FyZSBjb3VudGVycyBub3QgYXZhaWxhYmxlXG4iKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBvcHJvZmlsZV9wZXJmX2V4aXQodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX0hXX1BFUkZfRVZFTlRTICovCiAKICNlbmRpZiAvKiBPUFJPRklMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggZGQ5YzdhYi4uMjE0MTVjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtNDMxLDYgKzQzMSw4IEBACiAJc3RydWN0IGxpc3RfaGVhZAllbnRyeTsKIAlzdHJ1Y3QgY29tcGxldGlvbgljb21wbGV0aW9uOwogCXN0cnVjdCB3YWtldXBfc291cmNlCSp3YWtldXA7CisjZWxzZQorCXVuc2lnbmVkIGludAkJc2hvdWxkX3dha2V1cDoxOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKIAlzdHJ1Y3QgdGltZXJfbGlzdAlzdXNwZW5kX3RpbWVyOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV93YWtldXAuaCBiL2luY2x1ZGUvbGludXgvcG1fd2FrZXVwLmgKaW5kZXggOWNmZjAwZC4uMDNhNjdkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV93YWtldXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX3dha2V1cC5oCkBAIC0xMDksMTEgKzEwOSw2IEBACiAJcmV0dXJuIGRldi0+cG93ZXIuY2FuX3dha2V1cDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGRldmljZV9tYXlfd2FrZXVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZmFsc2U7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHdha2V1cF9zb3VyY2UgKndha2V1cF9zb3VyY2VfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIE5VTEw7CkBAIC0xMzQsMjQgKzEyOSwzMiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2Vfd2FrZXVwX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5wb3dlci5zaG91bGRfd2FrZXVwID0gdHJ1ZTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3dha2V1cF9kaXNhYmxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlkZXYtPnBvd2VyLnNob3VsZF93YWtldXAgPSBmYWxzZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCit7CisJZGV2LT5wb3dlci5zaG91bGRfd2FrZXVwID0gZW5hYmxlOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBkZXZpY2VfaW5pdF93YWtldXAoc3RydWN0IGRldmljZSAqZGV2LCBib29sIHZhbCkKIHsKLQlkZXYtPnBvd2VyLmNhbl93YWtldXAgPSB2YWw7Ci0JcmV0dXJuIHZhbCA/IC1FSU5WQUwgOiAwOworCWRldmljZV9zZXRfd2FrZXVwX2NhcGFibGUoZGV2LCB2YWwpOworCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZShkZXYsIHZhbCk7CisJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGlubGluZSBpbnQgZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwgYm9vbCBlbmFibGUpCitzdGF0aWMgaW5saW5lIGJvb2wgZGV2aWNlX21heV93YWtldXAoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkZXYtPnBvd2VyLmNhbl93YWtldXAgJiYgZGV2LT5wb3dlci5zaG91bGRfd2FrZXVwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19wbV9zdGF5X2F3YWtlKHN0cnVjdCB3YWtldXBfc291cmNlICp3cykge30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmggYi9pbmNsdWRlL2xpbnV4L3Bvc2l4X2FjbC5oCmluZGV4IGQ2ODI4M2EuLjU0MjExYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG9zaXhfYWNsLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeF9hY2wuaApAQCAtNzEsNiArNzEsNyBAQAogCiAvKiBwb3NpeF9hY2wuYyAqLwogCitleHRlcm4gdm9pZCBwb3NpeF9hY2xfaW5pdChzdHJ1Y3QgcG9zaXhfYWNsICosIGludCk7CiBleHRlcm4gc3RydWN0IHBvc2l4X2FjbCAqcG9zaXhfYWNsX2FsbG9jKGludCwgZ2ZwX3QpOwogZXh0ZXJuIHN0cnVjdCBwb3NpeF9hY2wgKnBvc2l4X2FjbF9jbG9uZShjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICosIGdmcF90KTsKIGV4dGVybiBpbnQgcG9zaXhfYWNsX3ZhbGlkKGNvbnN0IHN0cnVjdCBwb3NpeF9hY2wgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCAwOTJhMDRmLi5hMTE0N2U1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTEwMiwxMSArMTAyLDggQEAKIAogZXh0ZXJuIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LAogCQkJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGRhdGEpOwotZXh0ZXJuIGludCBwdHJhY2VfdHJhY2VtZSh2b2lkKTsKIGV4dGVybiBpbnQgcHRyYWNlX3JlYWRkYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbik7CiBleHRlcm4gaW50IHB0cmFjZV93cml0ZWRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNoYXIgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgZHN0LCBpbnQgbGVuKTsKLWV4dGVybiBpbnQgcHRyYWNlX2F0dGFjaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Ci1leHRlcm4gaW50IHB0cmFjZV9kZXRhY2goc3RydWN0IHRhc2tfc3RydWN0ICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gaW50IHB0cmFjZV9jaGVja19hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQga2lsbCk7CiBleHRlcm4gaW50IHB0cmFjZV9yZXF1ZXN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGxvbmcgcmVxdWVzdCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcmVzX2NvdW50ZXIuaAppbmRleCBmY2I5ODg0Li5hNTkzMGNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jlc19jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZXNfY291bnRlci5oCkBAIC0xODIsNiArMTgyLDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiByZXNfY291bnRlcl9jaGVja19tYXJnaW4gLSBjaGVjayBpZiB0aGUgY291bnRlciBhbGxvd3MgY2hhcmdpbmcKKyAqIEBjbnQ6IHRoZSByZXNvdXJjZSBjb3VudGVyIHRvIGNoZWNrCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gY2hlY2sgdGhlIHJlbWFpbmluZyBzcGFjZSBhZ2FpbnN0CisgKgorICogUmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgb24gd2hldGhlciB0aGUgY291bnRlciBjYW4gYmUgY2hhcmdlZAorICogQGJ5dGVzIG9yIHdoZXRoZXIgdGhpcyB3b3VsZCBleGNlZWQgdGhlIGxpbWl0LgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgcmVzX2NvdW50ZXJfY2hlY2tfbWFyZ2luKHN0cnVjdCByZXNfY291bnRlciAqY250LAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwlib29sIHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldCA9IGNudC0+bGltaXQgLSBjbnQtPnVzYWdlID49IGJ5dGVzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNudC0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgYm9vbCByZXNfY291bnRlcl9jaGVja191bmRlcl9zb2Z0X2xpbWl0KHN0cnVjdCByZXNfY291bnRlciAqY250KQogewogCWJvb2wgcmV0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oIGIvaW5jbHVkZS9saW51eC9yaW9fcmVncy5oCmluZGV4IGQ2M2RjYmEuLjkwMjZiMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmlvX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpb19yZWdzLmgKQEAgLTE0LDEwICsxNCwxMiBAQAogI2RlZmluZSBMSU5VWF9SSU9fUkVHU19ICiAKIC8qCi0gKiBJbiBSYXBpZElPLCBlYWNoIGRldmljZSBoYXMgYSAyTUIgY29uZmlndXJhdGlvbiBzcGFjZSB0aGF0IGlzCisgKiBJbiBSYXBpZElPLCBlYWNoIGRldmljZSBoYXMgYSAxNk1CIGNvbmZpZ3VyYXRpb24gc3BhY2UgdGhhdCBpcwogICogYWNjZXNzZWQgdmlhIG1haW50ZW5hbmNlIHRyYW5zYWN0aW9ucy4gIFBvcnRpb25zIG9mIGNvbmZpZ3VyYXRpb24KICAqIHNwYWNlIGFyZSBzdGFuZGFyZGl6ZWQgYW5kL29yIHJlc2VydmVkLgogICovCisjZGVmaW5lIFJJT19NQUlOVF9TUEFDRV9TWgkweDEwMDAwMDAgLyogMTZNQiBvZiBSYXBpZElPIG1haW5lbmFuY2Ugc3BhY2UgKi8KKwogI2RlZmluZSBSSU9fREVWX0lEX0NBUgkJMHgwMAkvKiBbSV0gRGV2aWNlIElkZW50aXR5IENBUiAqLwogI2RlZmluZSBSSU9fREVWX0lORk9fQ0FSCTB4MDQJLyogW0ldIERldmljZSBJbmZvcm1hdGlvbiBDQVIgKi8KICNkZWZpbmUgUklPX0FTTV9JRF9DQVIJCTB4MDgJLyogW0ldIEFzc2VtYmx5IElkZW50aXR5IENBUiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ydGMuaCBiL2luY2x1ZGUvbGludXgvcnRjLmgKaW5kZXggM2M5OTViNC4uODljM2U1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ydGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3J0Yy5oCkBAIC0yMDMsNiArMjAzLDE4IEBACiAJc3RydWN0IGhydGltZXIgcGllX3RpbWVyOyAvKiBzdWIgc2Vjb25kIGV4cCwgc28gbmVlZHMgaHJ0aW1lciAqLwogCWludCBwaWVfZW5hYmxlZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaXJxd29yazsKKworCisjaWZkZWYgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTAorCXN0cnVjdCB3b3JrX3N0cnVjdCB1aWVfdGFzazsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB1aWVfdGltZXI7CisJLyogVGhvc2UgZmllbGRzIGFyZSBwcm90ZWN0ZWQgYnkgcnRjLT5pcnFfbG9jayAqLworCXVuc2lnbmVkIGludCBvbGRzZWNzOworCXVuc2lnbmVkIGludCB1aWVfaXJxX2FjdGl2ZToxOworCXVuc2lnbmVkIGludCBzdG9wX3VpZV9wb2xsaW5nOjE7CisJdW5zaWduZWQgaW50IHVpZV90YXNrX2FjdGl2ZToxOworCXVuc2lnbmVkIGludCB1aWVfdGltZXJfYWN0aXZlOjE7CisjZW5kaWYKIH07CiAjZGVmaW5lIHRvX3J0Y19kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBydGNfZGV2aWNlLCBkZXYpCiAKQEAgLTIzOCw2ICsyNTAsNyBAQAogZXh0ZXJuIGludCBydGNfZGV2X3VwZGF0ZV9pcnFfZW5hYmxlX2VtdWwoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywKIAkJCQkJCXVuc2lnbmVkIGludCBlbmFibGVkKTsKIAordm9pZCBydGNfaGFuZGxlX2xlZ2FjeV9pcnEoc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YywgaW50IG51bSwgaW50IG1vZGUpOwogdm9pZCBydGNfYWllX3VwZGF0ZV9pcnEodm9pZCAqcHJpdmF0ZSk7CiB2b2lkIHJ0Y191aWVfdXBkYXRlX2lycSh2b2lkICpwcml2YXRlKTsKIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IHJ0Y19waWVfdXBkYXRlX2lycShzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpOwpAQCAtMjQ2LDggKzI1OSw2IEBACiBpbnQgcnRjX3VucmVnaXN0ZXIocnRjX3Rhc2tfdCAqdGFzayk7CiBpbnQgcnRjX2NvbnRyb2wocnRjX3Rhc2tfdCAqdCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCi12b2lkIHJ0Y190aW1lcl9lbnF1ZXVlKHN0cnVjdCBydGNfZGV2aWNlICpydGMsIHN0cnVjdCBydGNfdGltZXIgKnRpbWVyKTsKLXZvaWQgcnRjX3RpbWVyX3JlbW92ZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyICp0aW1lcik7CiB2b2lkIHJ0Y190aW1lcl9pbml0KHN0cnVjdCBydGNfdGltZXIgKnRpbWVyLCB2b2lkICgqZikodm9pZCogcCksIHZvaWQqIGRhdGEpOwogaW50IHJ0Y190aW1lcl9zdGFydChzdHJ1Y3QgcnRjX2RldmljZSAqcnRjLCBzdHJ1Y3QgcnRjX3RpbWVyKiB0aW1lciwKIAkJCWt0aW1lX3QgZXhwaXJlcywga3RpbWVfdCBwZXJpb2QpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IGQ3NDdmOTQuLjc3N2Q4YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTE3NDQsNyArMTc0NCw3IEBACiAjZGVmaW5lIFBGX01DRV9FQVJMWSAgICAweDA4MDAwMDAwICAgICAgLyogRWFybHkga2lsbCBmb3IgbWNlIHByb2Nlc3MgcG9saWN5ICovCiAjZGVmaW5lIFBGX01FTVBPTElDWQkweDEwMDAwMDAwCS8qIE5vbi1kZWZhdWx0IE5VTUEgbWVtcG9saWN5ICovCiAjZGVmaW5lIFBGX01VVEVYX1RFU1RFUgkweDIwMDAwMDAwCS8qIFRocmVhZCBiZWxvbmdzIHRvIHRoZSBydCBtdXRleCB0ZXN0ZXIgKi8KLSNkZWZpbmUgUEZfRlJFRVpFUl9TS0lQCTB4NDAwMDAwMDAJLyogRnJlZXplciBzaG91bGQgbm90IGNvdW50IGl0IGFzIGZyZWV6ZWFibGUgKi8KKyNkZWZpbmUgUEZfRlJFRVpFUl9TS0lQCTB4NDAwMDAwMDAJLyogRnJlZXplciBzaG91bGQgbm90IGNvdW50IGl0IGFzIGZyZWV6YWJsZSAqLwogI2RlZmluZSBQRl9GUkVFWkVSX05PU0lHIDB4ODAwMDAwMDAJLyogRnJlZXplciB3b24ndCBzZW5kIHNpZ25hbHMgdG8gaXQgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCBjNjQyYmI4Li5iMmI3Zjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNjYyLDcgKzE2NjIsNyBAQAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCiAJCSAgICBjb25zdCBrZXJuZWxfY2FwX3QgKmluaGVyaXRhYmxlLAogCQkgICAgY29uc3Qga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpOwotaW50IHNlY3VyaXR5X2NhcGFibGUoaW50IGNhcCk7CitpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCk7CiBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKTsKIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGVfbm9hdWRpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGNhcCk7CiBpbnQgc2VjdXJpdHlfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApOwpAQCAtMTg1Niw5ICsxODU2LDkgQEAKIAlyZXR1cm4gY2FwX2NhcHNldChuZXcsIG9sZCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShpbnQgY2FwKQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCkKIHsKLQlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3VycmVudF9jcmVkKCksIGNhcCwgU0VDVVJJVFlfQ0FQX0FVRElUKTsKKwlyZXR1cm4gY2FwX2NhcGFibGUoY3VycmVudCwgY3JlZCwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9yZWFsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKaW5kZXggYzUwYjQ1OC4uMDgyODg0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaApAQCAtNDcsMTQgKzQ3LDYgQEAKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKLQkJcmV0dXJuIChzdHJ1Y3QgbmZzNF9zZXNzaW9uaWQgKikKLQkJCXJxc3RwLT5ycV9zZXJ2ZXItPnN2X2JjX3hwcnQtPnhwdF9iY19zaWQ7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KICNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLwogc3RhdGljIGlubGluZSBpbnQgeHBydF9zZXR1cF9iYWNrY2hhbm5lbChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbWluX3JlcXMpCkBAIC02NywxMSArNTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqYmNfeHBydF9zaWQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHhwcnRfZnJlZV9iY19yZXF1ZXN0KHN0cnVjdCBycGNfcnFzdCAqcmVxKQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y194cHJ0LmgKaW5kZXggMDU5ODc3Yi4uN2FkOTc1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjX3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNfeHBydC5oCkBAIC03Nyw3ICs3Nyw2IEBACiAJc2l6ZV90CQkJeHB0X3JlbW90ZWxlbjsJLyogbGVuZ3RoIG9mIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcnBjX3dhaXRfcXVldWUJeHB0X2JjX3BlbmRpbmc7CS8qIGJhY2tjaGFubmVsIHdhaXQgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCXhwdF91c2VyczsJLyogY2FsbGJhY2tzIG9uIGZyZWUgKi8KLQl2b2lkCQkJKnhwdF9iY19zaWQ7CS8qIGJhY2sgY2hhbm5lbCBzZXNzaW9uIElEICovCiAKIAlzdHJ1Y3QgbmV0CQkqeHB0X25ldDsKIAlzdHJ1Y3QgcnBjX3hwcnQJCSp4cHRfYmNfeHBydDsJLyogTkZTdjQuMSBiYWNrY2hhbm5lbCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDE4Y2QwNjguLjk4NjY0ZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKQEAgLTEyNSwzOSArMTI1LDM3IEBACiBleHRlcm4gc3RydWN0IHRyYWNlX2V2ZW50X2Z1bmN0aW9ucyBleGl0X3N5c2NhbGxfcHJpbnRfZnVuY3M7CiAKICNkZWZpbmUgU1lTQ0FMTF9UUkFDRV9FTlRFUl9FVkVOVChzbmFtZSkJCQkJXAotCXN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YQkJCQkJXAotCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX19zeXNjYWxsX21ldGFfIyNzbmFtZTsJCVwKIAlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpCQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKIAkgIGV2ZW50X2VudGVyXyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19lbnRlciIjc25hbWUsCQlcCiAJCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzX3N5c2NhbGxfZW50ZXIsCVwKIAkJLmV2ZW50LmZ1bmNzICAgICAgICAgICAgPSAmZW50ZXJfc3lzY2FsbF9wcmludF9mdW5jcywJXAogCQkuZGF0YQkJCT0gKHZvaWQgKikmX19zeXNjYWxsX21ldGFfIyNzbmFtZSxcCiAJfTsJCQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQlcCisJICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCisJICpfX2V2ZW50X2VudGVyXyMjc25hbWUgPSAmZXZlbnRfZW50ZXJfIyNzbmFtZTsJCQlcCiAJX19UUkFDRV9FVkVOVF9GTEFHUyhlbnRlcl8jI3NuYW1lLCBUUkFDRV9FVkVOVF9GTF9DQVBfQU5ZKQogCiAjZGVmaW5lIFNZU0NBTExfVFJBQ0VfRVhJVF9FVkVOVChzbmFtZSkJCQkJCVwKLQlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg0KSkpIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CQlcCiAJc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQJCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQlcCi0JICBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkJCQlcCiAJICBldmVudF9leGl0XyMjc25hbWUgPSB7CQkJCQlcCiAJCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInN5c19leGl0IiNzbmFtZSwJCVwKIAkJLmNsYXNzCQkJPSAmZXZlbnRfY2xhc3Nfc3lzY2FsbF9leGl0LAlcCiAJCS5ldmVudC5mdW5jcwkJPSAmZXhpdF9zeXNjYWxsX3ByaW50X2Z1bmNzLAlcCiAJCS5kYXRhCQkJPSAodm9pZCAqKSZfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLFwKIAl9OwkJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKQkJCVwKKwkqX19ldmVudF9leGl0XyMjc25hbWUgPSAmZXZlbnRfZXhpdF8jI3NuYW1lOwkJCVwKIAlfX1RSQUNFX0VWRU5UX0ZMQUdTKGV4aXRfIyNzbmFtZSwgVFJBQ0VfRVZFTlRfRkxfQ0FQX0FOWSkKIAogI2RlZmluZSBTWVNDQUxMX01FVEFEQVRBKHNuYW1lLCBuYikJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhXyMjc25hbWUgPSB7CQkJCVwKIAkJLm5hbWUgCQk9ICJzeXMiI3NuYW1lLAkJCVwKIAkJLm5iX2FyZ3MgCT0gbmIsCQkJCVwKQEAgLTE2NiwxNCArMTY0LDE1IEBACiAJCS5lbnRlcl9ldmVudAk9ICZldmVudF9lbnRlcl8jI3NuYW1lLAkJXAogCQkuZXhpdF9ldmVudAk9ICZldmVudF9leGl0XyMjc25hbWUsCQlcCiAJCS5lbnRlcl9maWVsZHMJPSBMSVNUX0hFQURfSU5JVChfX3N5c2NhbGxfbWV0YV8jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKLQl9OworCX07CQkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAorCSAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19zeXNjYWxsc19tZXRhZGF0YSIpKSkJXAorCSAqX19wX3N5c2NhbGxfbWV0YV8jI3NuYW1lID0gJl9fc3lzY2FsbF9tZXRhXyMjc25hbWU7CiAKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKHNuYW1lKQkJCQkJXAogCVNZU0NBTExfVFJBQ0VfRU5URVJfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlTWVNDQUxMX1RSQUNFX0VYSVRfRVZFTlQoXyMjc25hbWUpOwkJCVwKIAlzdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgX191c2VkCQkJXAotCSAgX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCVwKLQkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKIAkgIF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lID0gewkJCQlcCiAJCS5uYW1lIAkJPSAic3lzXyIjc25hbWUsCQkJXAogCQkubmJfYXJncyAJPSAwLAkJCQlcCkBAIC0xODEsNiArMTgwLDkgQEAKIAkJLmV4aXRfZXZlbnQJPSAmZXZlbnRfZXhpdF9fIyNzbmFtZSwJCVwKIAkJLmVudGVyX2ZpZWxkcwk9IExJU1RfSEVBRF9JTklUKF9fc3lzY2FsbF9tZXRhX18jI3NuYW1lLmVudGVyX2ZpZWxkcyksIFwKIAl9OwkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBzeXNjYWxsX21ldGFkYXRhIF9fdXNlZAkJCVwKKwkgIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fc3lzY2FsbHNfbWV0YWRhdGEiKSkpCVwKKwkgKl9fcF9zeXNjYWxsX21ldGFfIyNzbmFtZSA9ICZfX3N5c2NhbGxfbWV0YV9fIyNzbmFtZTsJXAogCWFzbWxpbmthZ2UgbG9uZyBzeXNfIyNzbmFtZSh2b2lkKQogI2Vsc2UKICNkZWZpbmUgU1lTQ0FMTF9ERUZJTkUwKG5hbWUpCSAgIGFzbWxpbmthZ2UgbG9uZyBzeXNfIyNuYW1lKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmggYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKaW5kZXggMzg3ZmE3ZC4uN2ZhZjkzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNycS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzcnEuaApAQCAtMTcsNiArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAorLyogRW5hYmxlL2Rpc2FibGUgU1lTUlEgc3VwcG9ydCBieSBkZWZhdWx0ICgwPT1ubywgMT09eWVzKS4gKi8KKyNkZWZpbmUgU1lTUlFfREVGQVVMVF9FTkFCTEUJMQorCiAvKiBQb3NzaWJsZSB2YWx1ZXMgb2YgYml0bWFzayBmb3IgZW5hYmxpbmcgc3lzcnEgZnVuY3Rpb25zICovCiAvKiAweDAwMDEgaXMgcmVzZXJ2ZWQgZm9yIGVuYWJsZSBldmVyeXRoaW5nICovCiAjZGVmaW5lIFNZU1JRX0VOQUJMRV9MT0cJMHgwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RoZXJtYWwuaCBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCmluZGV4IDg2NTE1NTYuLmQzZWM4OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGhlcm1hbC5oCkBAIC0xNzIsNiArMTcyLDE0IEBACiBzdHJ1Y3QgdGhlcm1hbF9jb29saW5nX2RldmljZSAqdGhlcm1hbF9jb29saW5nX2RldmljZV9yZWdpc3RlcihjaGFyICosIHZvaWQgKiwKIAkJY29uc3Qgc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2Vfb3BzICopOwogdm9pZCB0aGVybWFsX2Nvb2xpbmdfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHRoZXJtYWxfY29vbGluZ19kZXZpY2UgKik7CisKKyNpZmRlZiBDT05GSUdfTkVUCiBleHRlcm4gaW50IGdlbmVyYXRlX25ldGxpbmtfZXZlbnQodTMyIG9yaWcsIGVudW0gZXZlbnRzIGV2ZW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBnZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KHUzMiBvcmlnLCBlbnVtIGV2ZW50cyBldmVudCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogCiAjZW5kaWYgLyogX19USEVSTUFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmggYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAppbmRleCBjNjgxNDYxLi45N2M4NGE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyYWNlcG9pbnQuaApAQCAtMzMsMTIgKzMzLDcgQEAKIAl2b2lkICgqcmVnZnVuYykodm9pZCk7CiAJdm9pZCAoKnVucmVnZnVuYykodm9pZCk7CiAJc3RydWN0IHRyYWNlcG9pbnRfZnVuYyBfX3JjdSAqZnVuY3M7Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMzIpKSk7CQkvKgotCQkJCQkgKiBBbGlnbmVkIG9uIDMyIGJ5dGVzIGJlY2F1c2UgaXQgaXMKLQkJCQkJICogZ2xvYmFsbHkgdmlzaWJsZSBhbmQgZ2NjIGhhcHBpbHkKLQkJCQkJICogYWxpZ24gdGhlc2Ugb24gdGhlIHN0cnVjdHVyZSBzaXplLgotCQkJCQkgKiBLZWVwIGluIHN5bmMgd2l0aCB2bWxpbnV4Lmxkcy5oLgotCQkJCQkgKi8KK307CiAKIC8qCiAgKiBDb25uZWN0IGEgcHJvYmUgdG8gYSB0cmFjZXBvaW50LgpAQCAtNjEsMTUgKzU2LDE1IEBACiAKIHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgewogCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKLQlzdHJ1Y3QgdHJhY2Vwb2ludCAqdHJhY2Vwb2ludDsKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICp0cmFjZXBvaW50OwogfTsKIAogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX3N0YXJ0KHN0cnVjdCB0cmFjZXBvaW50X2l0ZXIgKml0ZXIpOwogZXh0ZXJuIHZvaWQgdHJhY2Vwb2ludF9pdGVyX25leHQoc3RydWN0IHRyYWNlcG9pbnRfaXRlciAqaXRlcik7CiBleHRlcm4gdm9pZCB0cmFjZXBvaW50X2l0ZXJfc3RvcChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKIGV4dGVybiB2b2lkIHRyYWNlcG9pbnRfaXRlcl9yZXNldChzdHJ1Y3QgdHJhY2Vwb2ludF9pdGVyICppdGVyKTsKLWV4dGVybiBpbnQgdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqKnRyYWNlcG9pbnQsCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqZW5kKTsKK2V4dGVybiBpbnQgdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICoqdHJhY2Vwb2ludCwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKTsKIAogLyoKICAqIHRyYWNlcG9pbnRfc3luY2hyb25pemVfdW5yZWdpc3RlciBtdXN0IGJlIGNhbGxlZCBiZXR3ZWVuIHRoZSBsYXN0IHRyYWNlcG9pbnQKQEAgLTg0LDExICs3OSwxMyBAQAogI2RlZmluZSBQQVJBTVMoYXJncy4uLikgYXJncwogCiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi1leHRlcm4gdm9pZCB0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShzdHJ1Y3QgdHJhY2Vwb2ludCAqYmVnaW4sCi0Jc3RydWN0IHRyYWNlcG9pbnQgKmVuZCk7CitleHRlcm4KK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKmJlZ2luLAotCXN0cnVjdCB0cmFjZXBvaW50ICplbmQpCitzdGF0aWMgaW5saW5lCit2b2lkIHRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmVuZCkKIHsgfQogI2VuZGlmIC8qIENPTkZJR19UUkFDRVBPSU5UUyAqLwogCkBAIC0xNzQsMTIgKzE3MSwyMCBAQAogCXsJCQkJCQkJCVwKIAl9CiAKKy8qCisgKiBXZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IGdjYyBhbmQgdGhlIGxpbmtlciB3b24ndCB1cC1hbGlnbiB0aGUgdHJhY2Vwb2ludAorICogc3RydWN0dXJlcywgc28gd2UgY3JlYXRlIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBpdGVyYXRpb24KKyAqIG9uIHRoZSB0cmFjZXBvaW50cy4KKyAqLwogI2RlZmluZSBERUZJTkVfVFJBQ0VfRk4obmFtZSwgcmVnLCB1bnJlZykJCQkJXAogCXN0YXRpYyBjb25zdCBjaGFyIF9fdHBzdHJ0YWJfIyNuYW1lW10JCQkJXAogCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2Vwb2ludHNfc3RyaW5ncyIpKSkgPSAjbmFtZTsJXAogCXN0cnVjdCB0cmFjZXBvaW50IF9fdHJhY2Vwb2ludF8jI25hbWUJCQkJXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2Vwb2ludHMiKSwgYWxpZ25lZCgzMikpKSA9CVwKLQkJeyBfX3Rwc3RydGFiXyMjbmFtZSwgMCwgcmVnLCB1bnJlZywgTlVMTCB9CisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpKSkgPQkJCVwKKwkJeyBfX3Rwc3RydGFiXyMjbmFtZSwgMCwgcmVnLCB1bnJlZywgTlVMTCB9OwkJXAorCXN0YXRpYyBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fdHJhY2Vwb2ludF9wdHJfIyNuYW1lIF9fdXNlZAlcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50c19wdHJzIikpKSA9CQlcCisJCSZfX3RyYWNlcG9pbnRfIyNuYW1lOwogCiAjZGVmaW5lIERFRklORV9UUkFDRShuYW1lKQkJCQkJCVwKIAlERUZJTkVfVFJBQ0VfRk4obmFtZSwgTlVMTCwgTlVMTCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9jZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCmluZGV4IDVlODZkYzcuLjgxYTkyNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2NkYy5oCkBAIC04OSw3ICs4OSw3IEBACiAKICNkZWZpbmUgVVNCX0NEQ19DT01NX0ZFQVRVUkUJMHgwMQogI2RlZmluZSBVU0JfQ0RDX0NBUF9MSU5FCTB4MDIKLSNkZWZpbmUgVVNCX0NEQ19DQVBfQlJLCTB4MDQKKyNkZWZpbmUgVVNCX0NEQ19DQVBfQlJLCQkweDA0CiAjZGVmaW5lIFVTQl9DRENfQ0FQX05PVElGWQkweDA4CiAKIC8qICJVbmlvbiBGdW5jdGlvbmFsIERlc2NyaXB0b3IiIGZyb20gQ0RDIHNwZWMgNS4yLjMuOCAqLwpAQCAtMjcxLDYgKzI3MSwxMSBAQAogCV9fbGUxNgl3TGVuZ3RoOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0cnVjdCB1c2JfY2RjX3NwZWVkX2NoYW5nZSB7CisJX19sZTMyCURMQml0UlJhdGU7CS8qIGNvbnRhaW5zIHRoZSBkb3dubGluayBiaXQgcmF0ZSAoSU4gcGlwZSkgKi8KKwlfX2xlMzIJVUxCaXRSYXRlOwkvKiBjb250YWlucyB0aGUgdXBsaW5rIGJpdCByYXRlIChPVVQgcGlwZSkgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKgpAQCAtMjkyLDcgKzI5Nyw3IEBACiAJX19sZTE2CXdOZHBPdXREaXZpc29yOwogCV9fbGUxNgl3TmRwT3V0UGF5bG9hZFJlbWFpbmRlcjsKIAlfX2xlMTYJd05kcE91dEFsaWdubWVudDsKLQlfX2xlMTYJd1BhZGRpbmcyOworCV9fbGUxNgl3TnRiT3V0TWF4RGF0YWdyYW1zOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIC8qCkBAIC0zMDcsNyArMzEyLDcgQEAKIAlfX2xlMTYJd0hlYWRlckxlbmd0aDsKIAlfX2xlMTYJd1NlcXVlbmNlOwogCV9fbGUxNgl3QmxvY2tMZW5ndGg7Ci0JX19sZTE2CXdGcEluZGV4OworCV9fbGUxNgl3TmRwSW5kZXg7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHVzYl9jZGNfbmNtX250aDMyIHsKQEAgLTMxNSw3ICszMjAsNyBAQAogCV9fbGUxNgl3SGVhZGVyTGVuZ3RoOwogCV9fbGUxNgl3U2VxdWVuY2U7CiAJX19sZTMyCWR3QmxvY2tMZW5ndGg7Ci0JX19sZTMyCWR3RnBJbmRleDsKKwlfX2xlMzIJZHdOZHBJbmRleDsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAvKgpAQCAtMzM3LDcgKzM0Miw3IEBACiBzdHJ1Y3QgdXNiX2NkY19uY21fbmRwMTYgewogCV9fbGUzMglkd1NpZ25hdHVyZTsKIAlfX2xlMTYJd0xlbmd0aDsKLQlfX2xlMTYJd05leHRGcEluZGV4OworCV9fbGUxNgl3TmV4dE5kcEluZGV4OwogCXN0cnVjdAl1c2JfY2RjX25jbV9kcGUxNiBkcGUxNlswXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC0zNzUsNiArMzgwLDcgQEAKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9FTkNBUF9DT01NQU5ECQkJKDEgPDwgMikKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9NQVhfREFUQUdSQU1fU0laRQkJKDEgPDwgMykKICNkZWZpbmUgVVNCX0NEQ19OQ01fTkNBUF9DUkNfTU9ERQkJCSgxIDw8IDQpCisjZGVmaW5lCVVTQl9DRENfTkNNX05DQVBfTlRCX0lOUFVUX1NJWkUJCQkoMSA8PCA1KQogCiAvKiBDREMgTkNNIHN1YmNsYXNzIFRhYmxlIDYtMzogTlRCIFBhcmFtZXRlciBTdHJ1Y3R1cmUgKi8KICNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCMTZfU1VQUE9SVEVECQkJKDEgPDwgMCkKQEAgLTM5Miw2ICszOTgsMTMgQEAKICNkZWZpbmUgVVNCX0NEQ19OQ01fTlRCX01JTl9JTl9TSVpFCQkJMjA0OAogI2RlZmluZSBVU0JfQ0RDX05DTV9OVEJfTUlOX09VVF9TSVpFCQkJMjA0OAogCisvKiBOVEIgSW5wdXQgU2l6ZSBTdHJ1Y3R1cmUgKi8KK3N0cnVjdCB1c2JfY2RjX25jbV9uZHBfaW5wdXRfc2l6ZSB7CisJX19sZTMyCWR3TnRiSW5NYXhTaXplOworCV9fbGUxNgl3TnRiSW5NYXhEYXRhZ3JhbXM7CisJX19sZTE2CXdSZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKiBDREMgTkNNIHN1YmNsYXNzIDYuMi4xMSBTZXRDcmNNb2RlICovCiAjZGVmaW5lIFVTQl9DRENfTkNNX0NSQ19OT1RfQVBQRU5ERUQJCQkweDAwCiAjZGVmaW5lIFVTQl9DRENfTkNNX0NSQ19BUFBFTkRFRAkJCTB4MDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL2hjZC5oIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKaW5kZXggZGQ2ZWU0OS4uYTg1NGZlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKQEAgLTExMiw2ICsxMTIsNyBAQAogCS8qIEZsYWdzIHRoYXQgZ2V0IHNldCBvbmx5IGR1cmluZyBIQ0QgcmVnaXN0cmF0aW9uIG9yIHJlbW92YWwuICovCiAJdW5zaWduZWQJCXJoX3JlZ2lzdGVyZWQ6MTsvKiBpcyByb290IGh1YiByZWdpc3RlcmVkPyAqLwogCXVuc2lnbmVkCQlyaF9wb2xsYWJsZToxOwkvKiBtYXkgd2UgcG9sbCB0aGUgcm9vdCBodWI/ICovCisJdW5zaWduZWQJCW1zaXhfZW5hYmxlZDoxOwkvKiBkcml2ZXIgaGFzIE1TSS1YIGVuYWJsZWQ/ICovCiAKIAkvKiBUaGUgbmV4dCBmbGFnIGlzIGEgc3RvcGdhcCwgdG8gYmUgcmVtb3ZlZCB3aGVuIGFsbCB0aGUgSENEcwogCSAqIHN1cHBvcnQgdGhlIG5ldyByb290LWh1YiBwb2xsaW5nIG1lY2hhbmlzbS4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL21zbV9oc3VzYl9ody5oIGIvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmgKaW5kZXggYjkyZTE3My4uN2QxYmFiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvbXNtX2hzdXNiX2h3LmgKQEAgLTE2LDEyICsxNiw4IEBACiAjaWZuZGVmIF9fTElOVVhfVVNCX0dBREdFVF9NU003MktfVURDX0hfXwogI2RlZmluZSBfX0xJTlVYX1VTQl9HQURHRVRfTVNNNzJLX1VEQ19IX18KIAotI2lmZGVmIENPTkZJR19BUkNIX01TTTdYMDBBCi0jZGVmaW5lIFVTQl9TQlVTQ0ZHICAgICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAwOTApCi0jZWxzZQogI2RlZmluZSBVU0JfQUhCQlVSU1QgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMDkwKQogI2RlZmluZSBVU0JfQUhCTU9ERSAgICAgICAgICAoTVNNX1VTQl9CQVNFICsgMHgwMDk4KQotI2VuZGlmCiAjZGVmaW5lIFVTQl9DQVBMRU5HVEggICAgICAgIChNU01fVVNCX0JBU0UgKyAweDAxMDApIC8qIDggYml0ICovCiAKICNkZWZpbmUgVVNCX1VTQkNNRCAgICAgICAgICAgKE1TTV9VU0JfQkFTRSArIDB4MDE0MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggMTZkNjgyZi4uYzkwNDkxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKQEAgLTM0Nyw2ICszNDcsOSBAQAogZXh0ZXJuIGludCB1c2Jfc2VyaWFsX2hhbmRsZV9zeXNycV9jaGFyKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCiAJCQkJCXVuc2lnbmVkIGludCBjaCk7CiBleHRlcm4gaW50IHVzYl9zZXJpYWxfaGFuZGxlX2JyZWFrKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgdXNiX3NlcmlhbF9oYW5kbGVfZGNkX2NoYW5nZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICp1c2JfcG9ydCwKKwkJCQkJIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCQkJCSB1bnNpZ25lZCBpbnQgc3RhdHVzKTsKIAogCiBleHRlcm4gaW50IHVzYl9zZXJpYWxfYnVzX3JlZ2lzdGVyKHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciAqZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbmZpZy5oIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKaW5kZXggMDA5M2RkNy4uODAwNjE3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uZmlnLmgKQEAgLTEwOSw3ICsxMDksMTAgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgZmJpdCkKIHsKIAkvKiBEaWQgeW91IGZvcmdldCB0byBmaXggYXNzdW1wdGlvbnMgb24gbWF4IGZlYXR1cmVzPyAqLwotCU1BWUJFX0JVSUxEX0JVR19PTihmYml0ID49IDMyKTsKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoZmJpdCkpCisJCUJVSUxEX0JVR19PTihmYml0ID49IDMyKTsKKwllbHNlCisJCUJVR19PTihmYml0ID49IDMyKTsKIAogCWlmIChmYml0IDwgVklSVElPX1RSQU5TUE9SVF9GX1NUQVJUKQogCQl2aXJ0aW9fY2hlY2tfZHJpdmVyX29mZmVyZWRfZmVhdHVyZSh2ZGV2LCBmYml0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaCBiL2luY2x1ZGUvbGludXgvdmlydGlvX2NvbnNvbGUuaAppbmRleCBhODUwNjRkLi5lNGQzMzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpcnRpb19jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fY29uc29sZS5oCkBAIC03LDcgKzcsOCBAQAogICogVGhpcyBoZWFkZXIsIGV4Y2x1ZGluZyB0aGUgI2lmZGVmIF9fS0VSTkVMX18gcGFydCwgaXMgQlNEIGxpY2Vuc2VkIHNvCiAgKiBhbnlvbmUgY2FuIHVzZSB0aGUgZGVmaW5pdGlvbnMgdG8gaW1wbGVtZW50IGNvbXBhdGlibGUgZHJpdmVycy9zZXJ2ZXJzLgogICoKLSAqIENvcHlyaWdodCAoQykgUmVkIEhhdCwgSW5jLiwgMjAwOSwgMjAxMAorICogQ29weXJpZ2h0IChDKSBSZWQgSGF0LCBJbmMuLCAyMDA5LCAyMDEwLCAyMDExCisgKiBDb3B5cmlnaHQgKEMpIEFtaXQgU2hhaCA8YW1pdC5zaGFoQHJlZGhhdC5jb20+LCAyMDA5LCAyMDEwLCAyMDExCiAgKi8KIAogLyogRmVhdHVyZSBiaXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaAppbmRleCAxYWMxMTU4Li5mNzk5OGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKQEAgLTI1MCw3ICsyNTAsNyBAQAogZW51bSB7CiAJV1FfTk9OX1JFRU5UUkFOVAk9IDEgPDwgMCwgLyogZ3VhcmFudGVlIG5vbi1yZWVudHJhbmNlICovCiAJV1FfVU5CT1VORAkJPSAxIDw8IDEsIC8qIG5vdCBib3VuZCB0byBhbnkgY3B1ICovCi0JV1FfRlJFRVpFQUJMRQkJPSAxIDw8IDIsIC8qIGZyZWV6ZSBkdXJpbmcgc3VzcGVuZCAqLworCVdRX0ZSRUVaQUJMRQkJPSAxIDw8IDIsIC8qIGZyZWV6ZSBkdXJpbmcgc3VzcGVuZCAqLwogCVdRX01FTV9SRUNMQUlNCQk9IDEgPDwgMywgLyogbWF5IGJlIHVzZWQgZm9yIG1lbW9yeSByZWNsYWltICovCiAJV1FfSElHSFBSSQkJPSAxIDw8IDQsIC8qIGhpZ2ggcHJpb3JpdHkgKi8KIAlXUV9DUFVfSU5URU5TSVZFCT0gMSA8PCA1LCAvKiBjcHUgaW5zdGVuc2l2ZSB3b3JrcXVldWUgKi8KQEAgLTMxOCw3ICszMTgsNyBAQAogLyoqCiAgKiBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZSAtIGFsbG9jYXRlIGFuIG9yZGVyZWQgd29ya3F1ZXVlCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgd29ya3F1ZXVlCi0gKiBAZmxhZ3M6IFdRXyogZmxhZ3MgKG9ubHkgV1FfRlJFRVpFQUJMRSBhbmQgV1FfTUVNX1JFQ0xBSU0gYXJlIG1lYW5pbmdmdWwpCisgKiBAZmxhZ3M6IFdRXyogZmxhZ3MgKG9ubHkgV1FfRlJFRVpBQkxFIGFuZCBXUV9NRU1fUkVDTEFJTSBhcmUgbWVhbmluZ2Z1bCkKICAqCiAgKiBBbGxvY2F0ZSBhbiBvcmRlcmVkIHdvcmtxdWV1ZS4gIEFuIG9yZGVyZWQgd29ya3F1ZXVlIGV4ZWN1dGVzIGF0CiAgKiBtb3N0IG9uZSB3b3JrIGl0ZW0gYXQgYW55IGdpdmVuIHRpbWUgaW4gdGhlIHF1ZXVlZCBvcmRlci4gIFRoZXkgYXJlCkBAIC0zMzUsOCArMzM1LDggQEAKIAogI2RlZmluZSBjcmVhdGVfd29ya3F1ZXVlKG5hbWUpCQkJCQlcCiAJYWxsb2Nfd29ya3F1ZXVlKChuYW1lKSwgV1FfTUVNX1JFQ0xBSU0sIDEpCi0jZGVmaW5lIGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZShuYW1lKQkJCVwKLQlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9GUkVFWkVBQkxFIHwgV1FfVU5CT1VORCB8IFdRX01FTV9SRUNMQUlNLCAxKQorI2RlZmluZSBjcmVhdGVfZnJlZXphYmxlX3dvcmtxdWV1ZShuYW1lKQkJCVwKKwlhbGxvY193b3JrcXVldWUoKG5hbWUpLCBXUV9GUkVFWkFCTEUgfCBXUV9VTkJPVU5EIHwgV1FfTUVNX1JFQ0xBSU0sIDEpCiAjZGVmaW5lIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpCQkJXAogCWFsbG9jX3dvcmtxdWV1ZSgobmFtZSksIFdRX1VOQk9VTkQgfCBXUV9NRU1fUkVDTEFJTSwgMSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAppbmRleCBhMjlmZWIwLi5kMmNmODg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaApAQCAtMTg0LDYgKzE4NCw3IEBACiAJX191MzIJCSBsaW5rX21vZGU7CiAJX191OCAgICAgICAgICAgICBhdXRoX3R5cGU7CiAJX191OCAgICAgICAgICAgICBzZWNfbGV2ZWw7CisJX191OAkJIHBlbmRpbmdfc2VjX2xldmVsOwogCV9fdTggICAgICAgICAgICAgcG93ZXJfc2F2ZTsKIAlfX3UxNiAgICAgICAgICAgIGRpc2NfdGltZW91dDsKIAl1bnNpZ25lZCBsb25nCSBwZW5kOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAppbmRleCA4YTY0YjgxLi5iNGM3YzFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9nZW5ldGxpbmsuaApAQCAtMTk1LDcgKzE5NSw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5sbXNnX2NhbmNlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICpoZHIpCiB7Ci0Jbmxtc2dfY2FuY2VsKHNrYiwgaGRyIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOworCWlmIChoZHIpCisJCW5sbXNnX2NhbmNlbChza2IsIGhkciAtIEdFTkxfSERSTEVOIC0gTkxNU0dfSERSTEVOKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcHY2LmggYi9pbmNsdWRlL25ldC9pcHY2LmgKaW5kZXggNGEzY2QyYy4uOTZlNTBlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L2lwdjYuaApAQCAtODksNiArODksMTggQEAKICNkZWZpbmUgSVBWNl9BRERSX1NDT1BFX0dMT0JBTAkJMHgwZQogCiAvKgorICoJQWRkciBmbGFncworICovCisjaWZkZWYgX19LRVJORUxfXworI2RlZmluZSBJUFY2X0FERFJfTUNfRkxBR19UUkFOU0lFTlQoYSkJXAorCSgoYSktPnM2X2FkZHJbMV0gJiAweDEwKQorI2RlZmluZSBJUFY2X0FERFJfTUNfRkxBR19QUkVGSVgoYSkJXAorCSgoYSktPnM2X2FkZHJbMV0gJiAweDIwKQorI2RlZmluZSBJUFY2X0FERFJfTUNfRkxBR19SRU5ERVpWT1VTKGEpCVwKKwkoKGEpLT5zNl9hZGRyWzFdICYgMHg0MCkKKyNlbmRpZgorCisvKgogICoJZnJhZ21lbnRhdGlvbiBoZWFkZXIKICAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaAppbmRleCA5NmJhNWY3Li4zNDljZWZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKQEAgLTc3LDkgKzc3LDYgQEAKIAlpZiAoZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlpZiAoIShlLT5jdG1hc2sgJiAoMSA8PCBldmVudCkpKQotCQlyZXR1cm47Ci0KIAlzZXRfYml0KGV2ZW50LCAmZS0+Y2FjaGUpOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oCmluZGV4IGNkODViM2IuLmU1MDUzNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5oCkBAIC0yMDEsMTggKzIwMSw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkCi1uZl90cHJveHlfcHV0X3NvY2soc3RydWN0IHNvY2sgKnNrKQotewotCS8qIFRJTUVfV0FJVCBpbmV0IHNvY2tldHMgaGF2ZSB0byBiZSBoYW5kbGVkIGRpZmZlcmVudGx5ICovCi0JaWYgKChzay0+c2tfcHJvdG9jb2wgPT0gSVBQUk9UT19UQ1ApICYmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkpCi0JCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7Ci0JZWxzZQotCQlzb2NrX3B1dChzayk7Ci19Ci0KIC8qIGFzc2lnbiBhIHNvY2tldCB0byB0aGUgc2tiIC0tIGNvbnN1bWVzIHNrICovCi1pbnQKK3ZvaWQKIG5mX3Rwcm94eV9hc3NpZ25fc29jayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IGU5ZWVlOTkuLjA0Zjg1NTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtMTk5LDcgKzE5OSw3IEBACiAKIHN0cnVjdCBxZGlzY19za2JfY2IgewogCXVuc2lnbmVkIGludAkJcGt0X2xlbjsKLQljaGFyCQkJZGF0YVtdOworCWxvbmcJCQlkYXRhW107CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBxZGlzY19xbGVuKHN0cnVjdCBRZGlzYyAqcSkKQEAgLTQ0NSw3ICs0NDUsNiBAQAogewogCV9fc2tiX3F1ZXVlX3RhaWwobGlzdCwgc2tiKTsKIAlzY2gtPnFzdGF0cy5iYWNrbG9nICs9IHFkaXNjX3BrdF9sZW4oc2tiKTsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogfQpAQCAtNDYwLDggKzQ1OSwxMCBAQAogewogCXN0cnVjdCBza19idWZmICpza2IgPSBfX3NrYl9kZXF1ZXVlKGxpc3QpOwogCi0JaWYgKGxpa2VseShza2IgIT0gTlVMTCkpCisJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKIAkJc2NoLT5xc3RhdHMuYmFja2xvZyAtPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOworCX0KIAogCXJldHVybiBza2I7CiB9CkBAIC00NzQsMTAgKzQ3NSwxMSBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgX19xZGlzY19xdWV1ZV9kcm9wX2hlYWQoc3RydWN0IFFkaXNjICpzY2gsCiAJCQkJCSAgICAgIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCwgbGlzdCk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAKIAlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkgewogCQl1bnNpZ25lZCBpbnQgbGVuID0gcWRpc2NfcGt0X2xlbihza2IpOworCQlzY2gtPnFzdGF0cy5iYWNrbG9nIC09IGxlbjsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBsZW47CiAJfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IGQ4ODRkMjYuLmJjMWNmN2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC03NTMsNiArNzUzLDggQEAKIAkJCQkJaW50IGxldmVsLAogCQkJCQlpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwKIAkJCQkJaW50IF9fdXNlciAqb3B0aW9uKTsKKwlpbnQJCQkoKmNvbXBhdF9pb2N0bCkoc3RydWN0IHNvY2sgKnNrLAorCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAjZW5kaWYKIAlpbnQJCQkoKnNlbmRtc2cpKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZHMuaCBiL2luY2x1ZGUvcGNtY2lhL2RzLmgKaW5kZXggODQ3OWI2Ni4uM2ZkNTA2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvZHMuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kcy5oCkBAIC0yNjEsNiArMjYxLDcgQEAKICNkZWZpbmUgQ09ORl9FTkFCTEVfRVNSICAgICAgICAgMHgwMDA4CiAjZGVmaW5lIENPTkZfRU5BQkxFX0lPQ0FSRAkweDAwMTAgLyogYXV0by1lbmFibGVkIGlmIElPIHJlc291cmNlcyBvciBJUlEKIAkJCQkJKiAoQ09ORl9FTkFCTEVfSVJRKSBpbiB1c2UgKi8KKyNkZWZpbmUgQ09ORl9FTkFCTEVfWlZDQVJECTB4MDAyMAogCiAvKiBmbGFncyB1c2VkIGJ5IHBjbWNpYV9sb29wX2NvbmZpZygpIGF1dG9jb25maWd1cmF0aW9uICovCiAjZGVmaW5lIENPTkZfQVVUT19DSEVDS19WQ0MJMHgwMTAwIC8qIGNoZWNrIGZvciBtYXRjaGluZyBWY2M/ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2kuaAppbmRleCA2NDhkMjMzLi5iNzZkNDAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpLmgKQEAgLTksNiArOSw3IEBACiAjZGVmaW5lIF9TQ1NJX1NDU0lfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCiBzdHJ1Y3Qgc2NzaV9jbW5kOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3dtODkwMy5oIGIvaW5jbHVkZS9zb3VuZC93bTg5MDMuaAppbmRleCBiNGEwZGIyMy4uMWVlZWJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC93bTg5MDMuaAorKysgYi9pbmNsdWRlL3NvdW5kL3dtODkwMy5oCkBAIC0xNywxMyArMTcsOSBAQAogLyoKICAqIFI2ICgweDA2KSAtIE1pYyBCaWFzIENvbnRyb2wgMAogICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfSFlTVF9FTkEgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JQ0RFVF9IWVNUX0VOQSAqLwotI2RlZmluZSBXTTg5MDNfTUlDREVUX0hZU1RfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDgwICAvKiBNSUNERVRfSFlTVF9FTkEgKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9IWVNUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogTUlDREVUX0hZU1RfRU5BICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfSFlTVF9FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0RFVF9IWVNUX0VOQSAqLwotI2RlZmluZSBXTTg5MDNfTUlDREVUX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBNSUNERVRfVEhSIC0gWzY6NF0gKi8KLSNkZWZpbmUgV004OTAzX01JQ0RFVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDREVUX1RIUiAtIFs2OjRdICovCi0jZGVmaW5lIFdNODkwM19NSUNERVRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0RFVF9USFIgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5MDNfTUlDREVUX1RIUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDMwICAvKiBNSUNERVRfVEhSIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTAzX01JQ0RFVF9USFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDREVUX1RIUiAtIFs1OjRdICovCisjZGVmaW5lIFdNODkwM19NSUNERVRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ0RFVF9USFIgLSBbNTo0XSAqLwogI2RlZmluZSBXTTg5MDNfTUlDU0hPUlRfVEhSX01BU0sgICAgICAgICAgICAgICAgMHgwMDBDICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLwogI2RlZmluZSBXTTg5MDNfTUlDU0hPUlRfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLwogI2RlZmluZSBXTTg5MDNfTUlDU0hPUlRfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNTSE9SVF9USFIgLSBbMzoyXSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfYmFzZS5oCmluZGV4IDA3ZmRmYjYuLjA4MjhiNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX2Jhc2UuaAorKysgYi9pbmNsdWRlL3RhcmdldC90YXJnZXRfY29yZV9iYXNlLmgKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC90Y3AuaD4KLSNpbmNsdWRlICJ0YXJnZXRfY29yZV9taWIuaCIKIAogI2RlZmluZSBUQVJHRVRfQ09SRV9NT0RfVkVSU0lPTgkJInY0LjAuMC1yYzYiCiAjZGVmaW5lIFNIVVRET1dOX1NJR1MJKHNpZ21hc2soU0lHS0lMTCl8c2lnbWFzayhTSUdJTlQpfHNpZ21hc2soU0lHQUJSVCkpCkBAIC0xOTUsNiArMTk0LDIxIEBACiAJU0FNX1RBU0tfQVRUUl9FTVVMQVRFRAogfSB0MTBfdGFza19hdHRyX2luZGV4X3Q7CiAKKy8qCisgKiBVc2VkIGZvciB0YXJnZXQgU0NTSSBzdGF0aXN0aWNzCisgKi8KK3R5cGVkZWYgZW51bSB7CisJU0NTSV9JTlNUX0lOREVYLAorCVNDU0lfREVWSUNFX0lOREVYLAorCVNDU0lfQVVUSF9JTlRSX0lOREVYLAorCVNDU0lfSU5ERVhfVFlQRV9NQVgKK30gc2NzaV9pbmRleF90OworCitzdHJ1Y3Qgc2NzaV9pbmRleF90YWJsZSB7CisJc3BpbmxvY2tfdAlsb2NrOworCXUzMgkJc2NzaV9taWJfaW5kZXhbU0NTSV9JTkRFWF9UWVBFX01BWF07Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwogc3RydWN0IHNlX2NtZDsKIAogc3RydWN0IHQxMF9hbHVhIHsKQEAgLTU3OCw4ICs1OTIsNiBAQAogCXNwaW5sb2NrX3QJCXN0YXRzX2xvY2s7CiAJLyogVXNlZCBmb3IgUFIgU1BFQ19JX1BUPTEgYW5kIFJFR0lTVEVSX0FORF9NT1ZFICovCiAJYXRvbWljX3QJCWFjbF9wcl9yZWZfY291bnQ7Ci0JLyogVXNlZCBmb3IgTUlCIGFjY2VzcyAqLwotCWF0b21pY190CQltaWJfcmVmX2NvdW50OwogCXN0cnVjdCBzZV9kZXZfZW50cnkJKmRldmljZV9saXN0OwogCXN0cnVjdCBzZV9zZXNzaW9uCSpuYWNsX3Nlc3M7CiAJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnOwpAQCAtNTk1LDggKzYwNyw2IEBACiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAogc3RydWN0IHNlX3Nlc3Npb24gewotCS8qIFVzZWQgZm9yIE1JQiBhY2Nlc3MgKi8KLQlhdG9taWNfdAkJbWliX3JlZl9jb3VudDsKIAl1NjQJCQlzZXNzX2Jpbl9pc2lkOwogCXN0cnVjdCBzZV9ub2RlX2FjbAkqc2Vfbm9kZV9hY2w7CiAJc3RydWN0IHNlX3BvcnRhbF9ncm91cCAqc2VfdHBnOwpAQCAtODA2LDcgKzgxNiw2IEBACiAJLyogVmlydHVhbCBpU0NTSSBkZXZpY2VzIGF0dGFjaGVkLiAqLwogCXUzMgkJCWRldl9jb3VudDsKIAl1MzIJCQloYmFfaW5kZXg7Ci0JYXRvbWljX3QJCWRldl9taWJfYWNjZXNzX2NvdW50OwogCWF0b21pY190CQlsb2FkX2JhbGFuY2VfcXVldWU7CiAJYXRvbWljX3QJCWxlZnRfcXVldWVfZGVwdGg7CiAJLyogTWF4aW11bSBxdWV1ZSBkZXB0aCB0aGUgSEJBIGNhbiBoYW5kbGUuICovCkBAIC04NDUsNiArODU0LDEyIEBACiAKICNkZWZpbmUgU0VfTFVOKGMpCQkoKHN0cnVjdCBzZV9sdW4gKikoYyktPnNlX2x1bikKIAorc3RydWN0IHNjc2lfcG9ydF9zdGF0cyB7CisgICAgICAgdTY0ICAgICBjbWRfcGR1czsKKyAgICAgICB1NjQgICAgIHR4X2RhdGFfb2N0ZXRzOworICAgICAgIHU2NCAgICAgcnhfZGF0YV9vY3RldHM7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwogc3RydWN0IHNlX3BvcnQgewogCS8qIFJFTEFUSVZFIFRBUkdFVCBQT1JUIElERU5USUZFUiAqLwogCXUxNgkJc2VwX3J0cGk7CkBAIC04NjcsNiArODgyLDcgQEAKIH0gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiBzdHJ1Y3Qgc2VfdHBnX25wIHsKKwlzdHJ1Y3Qgc2VfcG9ydGFsX2dyb3VwICp0cGdfbnBfcGFyZW50OwogCXN0cnVjdCBjb25maWdfZ3JvdXAJdHBnX25wX2dyb3VwOwogfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdGFyZ2V0L3RhcmdldF9jb3JlX3RyYW5zcG9ydC5oIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmgKaW5kZXggNjZmNDRlNS4uMjQ2OTQwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmgKKysrIGIvaW5jbHVkZS90YXJnZXQvdGFyZ2V0X2NvcmVfdHJhbnNwb3J0LmgKQEAgLTExMSw2ICsxMTEsOCBAQAogCiBleHRlcm4gaW50IGluaXRfc2VfZ2xvYmFsKHZvaWQpOwogZXh0ZXJuIHZvaWQgcmVsZWFzZV9zZV9nbG9iYWwodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3Njc2lfaW5kZXhfdGFibGUodm9pZCk7CitleHRlcm4gdTMyIHNjc2lfZ2V0X25ld19pbmRleChzY3NpX2luZGV4X3QpOwogZXh0ZXJuIHZvaWQgdHJhbnNwb3J0X2luaXRfcXVldWVfb2JqKHN0cnVjdCBzZV9xdWV1ZV9vYmogKik7CiBleHRlcm4gaW50IHRyYW5zcG9ydF9zdWJzeXN0ZW1fY2hlY2tfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgdHJhbnNwb3J0X3N1YnN5c3RlbV9yZWdpc3RlcihzdHJ1Y3Qgc2Vfc3Vic3lzdGVtX2FwaSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9ibG9jay5oCmluZGV4IGFiYTQyMWQuLjc4ZjE4YWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2Jsb2NrLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvYmxvY2suaApAQCAtMzEsNyArMzEsNyBAQAogCQkJCQkwIDogYmxrX3JxX3NlY3RvcnMocnEpOwogCQlfX2VudHJ5LT5lcnJvcnMgICAgPSBycS0+ZXJyb3JzOwogCi0JCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCQlibGtfZmlsbF9yd2JzKF9fZW50cnktPnJ3YnMsIHJxLT5jbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSkpOwogCQlibGtfZHVtcF9jbWQoX19nZXRfc3RyKGNtZCksIHJxKTsKIAkpLAogCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJX19lbnRyeS0+Ynl0ZXMgICAgID0gKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9CTE9DS19QQykgPwogCQkJCQlibGtfcnFfYnl0ZXMocnEpIDogMDsKIAotCQlibGtfZmlsbF9yd2JzX3JxKF9fZW50cnktPnJ3YnMsIHJxKTsKKwkJYmxrX2ZpbGxfcndicyhfX2VudHJ5LT5yd2JzLCBycS0+Y21kX2ZsYWdzLCBibGtfcnFfYnl0ZXMocnEpKTsKIAkJYmxrX2R1bXBfY21kKF9fZ2V0X3N0cihjbWQpLCBycSk7CiAJCW1lbWNweShfX2VudHJ5LT5jb21tLCBjdXJyZW50LT5jb21tLCBUQVNLX0NPTU1fTEVOKTsKIAkpLApAQCAtNTYzLDcgKzU2Myw3IEBACiAJCV9fZW50cnktPm5yX3NlY3Rvcgk9IGJsa19ycV9zZWN0b3JzKHJxKTsKIAkJX19lbnRyeS0+b2xkX2Rldgk9IGRldjsKIAkJX19lbnRyeS0+b2xkX3NlY3Rvcgk9IGZyb207Ci0JCWJsa19maWxsX3J3YnNfcnEoX19lbnRyeS0+cndicywgcnEpOworCQlibGtfZmlsbF9yd2JzKF9fZW50cnktPnJ3YnMsIHJxLT5jbWRfZmxhZ3MsIGJsa19ycV9ieXRlcyhycSkpOwogCSksCiAKIAlUUF9wcmludGsoIiVkLCVkICVzICVsbHUgKyAldSA8LSAoJWQsJWQpICVsbHUiLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaCBiL2luY2x1ZGUvdHJhY2UvZnRyYWNlLmgKaW5kZXggZTE2NjEwYy4uM2U2ODM2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9mdHJhY2UuaAorKysgYi9pbmNsdWRlL3RyYWNlL2Z0cmFjZS5oCkBAIC00NDYsMTQgKzQ0NiwxNiBAQAogICoJLnJlZwkJCT0gZnRyYWNlX2V2ZW50X3JlZywKICAqIH07CiAgKgotICogc3RhdGljIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3VzZWQKLSAqIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDQpKSkKLSAqIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF88Y2FsbD4gPSB7CisgKiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIGV2ZW50XzxjYWxsPiA9IHsKICAqCS5uYW1lCQkJPSAiPGNhbGw+IiwKICAqCS5jbGFzcwkJCT0gZXZlbnRfY2xhc3NfPHRlbXBsYXRlPiwKICAqCS5ldmVudAkJCT0gJmZ0cmFjZV9ldmVudF90eXBlXzxjYWxsPiwKICAqCS5wcmludF9mbXQJCT0gcHJpbnRfZm10XzxjYWxsPiwKICAqIH07CisgKiAvLyBpdHMgb25seSBzYWZlIHRvIHVzZSBwb2ludGVycyB3aGVuIGRvaW5nIGxpbmtlciB0cmlja3MgdG8KKyAqIC8vIGNyZWF0ZSBhbiBhcnJheS4KKyAqIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCisgKiBfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfZnRyYWNlX2V2ZW50cyIpKSkgKl9fZXZlbnRfPGNhbGw+ID0gJmV2ZW50XzxjYWxsPjsKICAqCiAgKi8KIApAQCAtNTc5LDI4ICs1ODEsMjggQEAKICN1bmRlZiBERUZJTkVfRVZFTlQKICNkZWZpbmUgREVGSU5FX0VWRU5UKHRlbXBsYXRlLCBjYWxsLCBwcm90bywgYXJncykJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAotX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZCBldmVudF8jI2NhbGwgPSB7CQkJXAogCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAogCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzXyMjdGVtcGxhdGUsCQlcCiAJLmV2ZW50LmZ1bmNzCQk9ICZmdHJhY2VfZXZlbnRfdHlwZV9mdW5jc18jI3RlbXBsYXRlLAlcCiAJLnByaW50X2ZtdAkJPSBwcmludF9mbXRfIyN0ZW1wbGF0ZSwJCQlcCi19OworfTsJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpICpfX2V2ZW50XyMjY2FsbCA9ICZldmVudF8jI2NhbGwKIAogI3VuZGVmIERFRklORV9FVkVOVF9QUklOVAogI2RlZmluZSBERUZJTkVfRVZFTlRfUFJJTlQodGVtcGxhdGUsIGNhbGwsIHByb3RvLCBhcmdzLCBwcmludCkJCVwKIAkJCQkJCQkJCVwKIHN0YXRpYyBjb25zdCBjaGFyIHByaW50X2ZtdF8jI2NhbGxbXSA9IHByaW50OwkJCQlcCiAJCQkJCQkJCQlcCi1zdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAotX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZCBldmVudF8jI2NhbGwgPSB7CQkJXAogCS5uYW1lCQkJPSAjY2FsbCwJCQkJXAogCS5jbGFzcwkJCT0gJmV2ZW50X2NsYXNzXyMjdGVtcGxhdGUsCQlcCiAJLmV2ZW50LmZ1bmNzCQk9ICZmdHJhY2VfZXZlbnRfdHlwZV9mdW5jc18jI2NhbGwsCVwKIAkucHJpbnRfZm10CQk9IHByaW50X2ZtdF8jI2NhbGwsCQkJXAotfQorfTsJCQkJCQkJCQlcCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJXAorX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX2Z0cmFjZV9ldmVudHMiKSkpICpfX2V2ZW50XyMjY2FsbCA9ICZldmVudF8jI2NhbGwKIAogI2luY2x1ZGUgVFJBQ0VfSU5DTFVERShUUkFDRV9JTkNMVURFX0ZJTEUpCiAKZGlmZiAtLWdpdCBhL2luaXQvY2FsaWJyYXRlLmMgYi9pbml0L2NhbGlicmF0ZS5jCmluZGV4IDZlYjQ4ZTUuLjI0ZmUwMjIgMTAwNjQ0Ci0tLSBhL2luaXQvY2FsaWJyYXRlLmMKKysrIGIvaW5pdC9jYWxpYnJhdGUuYwpAQCAtNjYsNyArNjYsNyBAQAogCQlwcmVfc3RhcnQgPSAwOwogCQlyZWFkX2N1cnJlbnRfdGltZXIoJnN0YXJ0KTsKIAkJc3RhcnRfamlmZmllcyA9IGppZmZpZXM7Ci0JCXdoaWxlIChqaWZmaWVzIDw9IChzdGFydF9qaWZmaWVzICsgMSkpIHsKKwkJd2hpbGUgKHRpbWVfYmVmb3JlX2VxKGppZmZpZXMsIHN0YXJ0X2ppZmZpZXMgKyAxKSkgewogCQkJcHJlX3N0YXJ0ID0gc3RhcnQ7CiAJCQlyZWFkX2N1cnJlbnRfdGltZXIoJnN0YXJ0KTsKIAkJfQpAQCAtNzQsOCArNzQsOCBAQAogCiAJCXByZV9lbmQgPSAwOwogCQllbmQgPSBwb3N0X3N0YXJ0OwotCQl3aGlsZSAoamlmZmllcyA8PQotCQkgICAgICAgKHN0YXJ0X2ppZmZpZXMgKyAxICsgREVMQVlfQ0FMSUJSQVRJT05fVElDS1MpKSB7CisJCXdoaWxlICh0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBzdGFydF9qaWZmaWVzICsgMSArCisJCQkJCSAgICAgICBERUxBWV9DQUxJQlJBVElPTl9USUNLUykpIHsKIAkJCXByZV9lbmQgPSBlbmQ7CiAJCQlyZWFkX2N1cnJlbnRfdGltZXIoJmVuZCk7CiAJCX0KZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCmluZGV4IDJmMDUzMDMuLjllOTM4NWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jYXBhYmlsaXR5LmMKKysrIGIva2VybmVsL2NhcGFiaWxpdHkuYwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJCUJVRygpOwogCX0KIAotCWlmIChzZWN1cml0eV9jYXBhYmxlKGNhcCkgPT0gMCkgeworCWlmIChzZWN1cml0eV9jYXBhYmxlKGN1cnJlbnRfY3JlZCgpLCBjYXApID09IDApIHsKIAkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfU1VQRVJQUklWOwogCQlyZXR1cm4gMTsKIAl9CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggNDM0OTkzNS4uZTkyZTk4MSAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMTU3NSw4ICsxNTc1LDEwIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJdHJpYWxjcyA9IGFsbG9jX3RyaWFsX2NwdXNldChjcyk7Ci0JaWYgKCF0cmlhbGNzKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIXRyaWFsY3MpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCiAJc3dpdGNoIChjZnQtPnByaXZhdGUpIHsKIAljYXNlIEZJTEVfQ1BVTElTVDoKQEAgLTE1OTEsNiArMTU5Myw3IEBACiAJfQogCiAJZnJlZV90cmlhbF9jcHVzZXQodHJpYWxjcyk7CitvdXQ6CiAJY2dyb3VwX3VubG9jaygpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvY3JlZC5jIGIva2VybmVsL2NyZWQuYwppbmRleCA2YTFhYTAwLi4zYTlkNmRkIDEwMDY0NAotLS0gYS9rZXJuZWwvY3JlZC5jCisrKyBiL2tlcm5lbC9jcmVkLmMKQEAgLTI1MiwxMyArMjUyLDEzIEBACiAjZW5kaWYKIAogCWF0b21pY19zZXQoJm5ldy0+dXNhZ2UsIDEpOworI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUworCW5ldy0+bWFnaWMgPSBDUkVEX01BR0lDOworI2VuZGlmCiAKIAlpZiAoc2VjdXJpdHlfY3JlZF9hbGxvY19ibGFuayhuZXcsIEdGUF9LRVJORUwpIDwgMCkKIAkJZ290byBlcnJvcjsKIAotI2lmZGVmIENPTkZJR19ERUJVR19DUkVERU5USUFMUwotCW5ldy0+bWFnaWMgPSBDUkVEX01BR0lDOwotI2VuZGlmCiAJcmV0dXJuIG5ldzsKIAogZXJyb3I6CkBAIC02NTcsNiArNjU3LDggQEAKIAl2YWxpZGF0ZV9jcmVkcyhvbGQpOwogCiAJKm5ldyA9ICpvbGQ7CisJYXRvbWljX3NldCgmbmV3LT51c2FnZSwgMSk7CisJc2V0X2NyZWRfc3Vic2NyaWJlcnMobmV3LCAwKTsKIAlnZXRfdWlkKG5ldy0+dXNlcik7CiAJZ2V0X2dyb3VwX2luZm8obmV3LT5ncm91cF9pbmZvKTsKIApAQCAtNjc0LDggKzY3Niw2IEBACiAJaWYgKHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMobmV3LCBvbGQsIEdGUF9LRVJORUwpIDwgMCkKIAkJZ290byBlcnJvcjsKIAotCWF0b21pY19zZXQoJm5ldy0+dXNhZ2UsIDEpOwotCXNldF9jcmVkX3N1YnNjcmliZXJzKG5ldywgMCk7CiAJcHV0X2NyZWQob2xkKTsKIAl2YWxpZGF0ZV9jcmVkcyhuZXcpOwogCXJldHVybiBuZXc7CkBAIC03NDgsNyArNzQ4LDExIEBACiAJaWYgKGNyZWQtPm1hZ2ljICE9IENSRURfTUFHSUMpCiAJCXJldHVybiB0cnVlOwogI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUxJTlVYCi0JaWYgKHNlbGludXhfaXNfZW5hYmxlZCgpKSB7CisJLyoKKwkgKiBjcmVkLT5zZWN1cml0eSA9PSBOVUxMIGlmIHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsoKSBvcgorCSAqIHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMoKSByZXR1cm5lZCBhbiBlcnJvci4KKwkgKi8KKwlpZiAoc2VsaW51eF9pc19lbmFibGVkKCkgJiYgY3JlZC0+c2VjdXJpdHkpIHsKIAkJaWYgKCh1bnNpZ25lZCBsb25nKSBjcmVkLT5zZWN1cml0eSA8IFBBR0VfU0laRSkKIAkJCXJldHVybiB0cnVlOwogCQlpZiAoKCoodTMyICopY3JlZC0+c2VjdXJpdHkgJiAweGZmZmZmZjAwKSA9PQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9pbnRlcm5hbHMuaCBiL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKaW5kZXggNDU3MWFlNy4uOTljM2JjOCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9pbnRlcm5hbHMuaAorKysgYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCkBAIC0zLDYgKzMsMTIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2lycWRlc2MuaD4KIAorI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCisjIGRlZmluZSBJUlFfQklUTUFQX0JJVFMJKE5SX0lSUVMgKyA4MTk2KQorI2Vsc2UKKyMgZGVmaW5lIElSUV9CSVRNQVBfQklUUwlOUl9JUlFTCisjZW5kaWYKKwogZXh0ZXJuIGludCBub2lycWRlYnVnOwogCiAjZGVmaW5lIGlycV9kYXRhX3RvX2Rlc2MoZGF0YSkJY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpcnFfZGVzYywgaXJxX2RhdGEpCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2lycWRlc2MuYyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCmluZGV4IDI4MmYyMDIuLjIwMzliZWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jCisrKyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCkBAIC05NCw3ICs5NCw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChucl9pcnFzKTsKIAogc3RhdGljIERFRklORV9NVVRFWChzcGFyc2VfaXJxX2xvY2spOwotc3RhdGljIERFQ0xBUkVfQklUTUFQKGFsbG9jYXRlZF9pcnFzLCBOUl9JUlFTKTsKK3N0YXRpYyBERUNMQVJFX0JJVE1BUChhbGxvY2F0ZWRfaXJxcywgSVJRX0JJVE1BUF9CSVRTKTsKIAogI2lmZGVmIENPTkZJR19TUEFSU0VfSVJRCiAKQEAgLTIxNyw2ICsyMTcsMTUgQEAKIAlpbml0Y250ID0gYXJjaF9wcm9iZV9ucl9pcnFzKCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiTlJfSVJRUzolZCBucl9pcnFzOiVkICVkXG4iLCBOUl9JUlFTLCBucl9pcnFzLCBpbml0Y250KTsKIAorCWlmIChXQVJOX09OKG5yX2lycXMgPiBJUlFfQklUTUFQX0JJVFMpKQorCQlucl9pcnFzID0gSVJRX0JJVE1BUF9CSVRTOworCisJaWYgKFdBUk5fT04oaW5pdGNudCA+IElSUV9CSVRNQVBfQklUUykpCisJCWluaXRjbnQgPSBJUlFfQklUTUFQX0JJVFM7CisKKwlpZiAoaW5pdGNudCA+IG5yX2lycXMpCisJCW5yX2lycXMgPSBpbml0Y250OworCiAJZm9yIChpID0gMDsgaSA8IGluaXRjbnQ7IGkrKykgewogCQlkZXNjID0gYWxsb2NfZGVzYyhpLCBub2RlKTsKIAkJc2V0X2JpdChpLCBhbGxvY2F0ZWRfaXJxcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCAwY2FhNTlmLi45MDMzYzFjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTExMDAsNyArMTEwMCw3IEBACiAJaWYgKHJldHZhbCkKIAkJa2ZyZWUoYWN0aW9uKTsKIAotI2lmZGVmIENPTkZJR19ERUJVR19TSElSUQorI2lmZGVmIENPTkZJR19ERUJVR19TSElSUV9GSVhNRQogCWlmICghcmV0dmFsICYmIChpcnFmbGFncyAmIElSUUZfU0hBUkVEKSkgewogCQkvKgogCQkgKiBJdCdzIGEgc2hhcmVkIElSUSAtLSB0aGUgZHJpdmVyIG91Z2h0IHRvIGJlIHByZXBhcmVkIGZvciBpdApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9taWdyYXRpb24uYyBiL2tlcm5lbC9pcnEvbWlncmF0aW9uLmMKaW5kZXggMWQyNTQxOS4uNDQxZmQ2MiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9taWdyYXRpb24uYworKysgYi9rZXJuZWwvaXJxL21pZ3JhdGlvbi5jCkBAIC01Niw2ICs1Niw3IEBACiB2b2lkIG1vdmVfbmF0aXZlX2lycShpbnQgaXJxKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisJYm9vbCBtYXNrZWQ7CiAKIAlpZiAobGlrZWx5KCEoZGVzYy0+c3RhdHVzICYgSVJRX01PVkVfUEVORElORykpKQogCQlyZXR1cm47CkBAIC02Myw4ICs2NCwxNSBAQAogCWlmICh1bmxpa2VseShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKQogCQlyZXR1cm47CiAKLQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOworCS8qCisJICogQmUgY2FyZWZ1bCB2cy4gYWxyZWFkeSBtYXNrZWQgaW50ZXJydXB0cy4gSWYgdGhpcyBpcyBhCisJICogdGhyZWFkZWQgaW50ZXJydXB0IHdpdGggT05FU0hPVCBzZXQsIHdlIGNhbiBlbmQgdXAgd2l0aCBhbgorCSAqIGludGVycnVwdCBzdG9ybS4KKwkgKi8KKwltYXNrZWQgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTUFTS0VEOworCWlmICghbWFza2VkKQorCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzaygmZGVzYy0+aXJxX2RhdGEpOwogCW1vdmVfbWFza2VkX2lycShpcnEpOwotCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV91bm1hc2soJmRlc2MtPmlycV9kYXRhKTsKKwlpZiAoIW1hc2tlZCkKKwkJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzaygmZGVzYy0+aXJxX2RhdGEpOwogfQotCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL3Jlc2VuZC5jIGIva2VybmVsL2lycS9yZXNlbmQuYwppbmRleCA4OTExMTVhLi5kYzQ5MzU4IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Jlc2VuZC5jCisrKyBiL2tlcm5lbC9pcnEvcmVzZW5kLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpZmRlZiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5ECiAKIC8qIEJpdG1hcCB0byBoYW5kbGUgc29mdHdhcmUgcmVzZW5kIG9mIGludGVycnVwdHM6ICovCi1zdGF0aWMgREVDTEFSRV9CSVRNQVAoaXJxc19yZXNlbmQsIE5SX0lSUVMpOworc3RhdGljIERFQ0xBUkVfQklUTUFQKGlycXNfcmVzZW5kLCBJUlFfQklUTUFQX0JJVFMpOwogCiAvKgogICogUnVuIHNvZnR3YXJlIHJlc2VuZHMgb2YgSVJRJ3MKZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUuYyBiL2tlcm5lbC9tb2R1bGUuYwppbmRleCAzNGUwMGI3Li5lZmEyOTBlIDEwMDY0NAotLS0gYS9rZXJuZWwvbW9kdWxlLmMKKysrIGIva2VybmVsL21vZHVsZS5jCkBAIC0yNDYwLDkgKzI0NjAsOSBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVFJBQ0VQT0lOVFMKLQltb2QtPnRyYWNlcG9pbnRzID0gc2VjdGlvbl9vYmpzKGluZm8sICJfX3RyYWNlcG9pbnRzIiwKLQkJCQkJc2l6ZW9mKCptb2QtPnRyYWNlcG9pbnRzKSwKLQkJCQkJJm1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKKwltb2QtPnRyYWNlcG9pbnRzX3B0cnMgPSBzZWN0aW9uX29ianMoaW5mbywgIl9fdHJhY2Vwb2ludHNfcHRycyIsCisJCQkJCSAgICAgc2l6ZW9mKCptb2QtPnRyYWNlcG9pbnRzX3B0cnMpLAorCQkJCQkgICAgICZtb2QtPm51bV90cmFjZXBvaW50cyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0pVTVBfTEFCRUwKIAltb2QtPmp1bXBfZW50cmllcyA9IHNlY3Rpb25fb2JqcyhpbmZvLCAiX19qdW1wX3RhYmxlIiwKQEAgLTMzOTMsNyArMzM5Myw3IEBACiAJCSAgIHN0cnVjdCBtb2R2ZXJzaW9uX2luZm8gKnZlciwKIAkJICAgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3AsCiAJCSAgIHN0cnVjdCBrZXJuZWxfc3ltYm9sICprcywKLQkJICAgc3RydWN0IHRyYWNlcG9pbnQgKnRwKQorCQkgICBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICp0cCkKIHsKIH0KIEVYUE9SVF9TWU1CT0wobW9kdWxlX2xheW91dCk7CkBAIC0zNDA3LDggKzM0MDcsOCBAQAogCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KQogCQlpZiAoIW1vZC0+dGFpbnRzKQotCQkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50cywKLQkJCQltb2QtPnRyYWNlcG9pbnRzICsgbW9kLT5udW1fdHJhY2Vwb2ludHMpOworCQkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50c19wdHJzLAorCQkJCW1vZC0+dHJhY2Vwb2ludHNfcHRycyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CiB9CiAKQEAgLTM0MzIsOCArMzQzMiw4IEBACiAJCQllbHNlIGlmIChpdGVyX21vZCA+IGl0ZXItPm1vZHVsZSkKIAkJCQlpdGVyLT50cmFjZXBvaW50ID0gTlVMTDsKIAkJCWZvdW5kID0gdHJhY2Vwb2ludF9nZXRfaXRlcl9yYW5nZSgmaXRlci0+dHJhY2Vwb2ludCwKLQkJCQlpdGVyX21vZC0+dHJhY2Vwb2ludHMsCi0JCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzCisJCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzX3B0cnMsCisJCQkJaXRlcl9tb2QtPnRyYWNlcG9pbnRzX3B0cnMKIAkJCQkJKyBpdGVyX21vZC0+bnVtX3RyYWNlcG9pbnRzKTsKIAkJCWlmIChmb3VuZCkgewogCQkJCWl0ZXItPm1vZHVsZSA9IGl0ZXJfbW9kOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDA4MTA3ZDEuLjBkYTE0MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTcxOSw5ICs3MTksNyBAQAogCQkJcGFyYW1zW2ldLm9wcy0+ZnJlZShwYXJhbXNbaV0uYXJnKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKLQkJCQkJICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcGFyYW0sCi0JCQkJCSAgdW5zaWduZWQgaW50IG5hbWVfc2tpcCkKK3N0YXRpYyBzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKiBfX2luaXQgbG9jYXRlX21vZHVsZV9rb2JqZWN0KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKIAlzdHJ1Y3Qga29iamVjdCAqa29iajsKQEAgLTcyOSwxMCArNzI3LDcgQEAKIAogCWtvYmogPSBrc2V0X2ZpbmRfb2JqKG1vZHVsZV9rc2V0LCBuYW1lKTsKIAlpZiAoa29iaikgewotCQkvKiBXZSBhbHJlYWR5IGhhdmUgb25lLiAgUmVtb3ZlIHBhcmFtcyBzbyB3ZSBjYW4gYWRkIG1vcmUuICovCiAJCW1rID0gdG9fbW9kdWxlX2tvYmplY3Qoa29iaik7Ci0JCS8qIFdlIG5lZWQgdG8gcmVtb3ZlIGl0IGJlZm9yZSBhZGRpbmcgcGFyYW1ldGVycy4gKi8KLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtay0+a29iaiwgJm1rLT5tcC0+Z3JwKTsKIAl9IGVsc2UgewogCQltayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb2R1bGVfa29iamVjdCksIEdGUF9LRVJORUwpOwogCQlCVUdfT04oIW1rKTsKQEAgLTc0MywxNSArNzM4LDM2IEBACiAJCQkJCSAgICIlcyIsIG5hbWUpOwogCQlpZiAoZXJyKSB7CiAJCQlrb2JqZWN0X3B1dCgmbWstPmtvYmopOwotCQkJcHJpbnRrKEtFUk5fRVJSICJNb2R1bGUgJyVzJyBmYWlsZWQgYWRkIHRvIHN5c2ZzLCAiCi0JCQkgICAgICAgImVycm9yIG51bWJlciAlZFxuIiwgbmFtZSwgZXJyKTsKLQkJCXByaW50ayhLRVJOX0VSUgkiVGhlIHN5c3RlbSB3aWxsIGJlIHVuc3RhYmxlIG5vdy5cbiIpOwotCQkJcmV0dXJuOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIk1vZHVsZSAnJXMnIGZhaWxlZCBhZGQgdG8gc3lzZnMsIGVycm9yIG51bWJlciAlZFxuIiwKKwkJCQluYW1lLCBlcnIpOworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIlRoZSBzeXN0ZW0gd2lsbCBiZSB1bnN0YWJsZSBub3cuXG4iKTsKKwkJCXJldHVybiBOVUxMOwogCQl9Ci0JCS8qIFNvIHRoYXQgZXhpdCBwYXRoIGlzIGV2ZW4uICovCisKKwkJLyogU28gdGhhdCB3ZSBob2xkIHJlZmVyZW5jZSBpbiBib3RoIGNhc2VzLiAqLwogCQlrb2JqZWN0X2dldCgmbWstPmtvYmopOwogCX0KIAorCXJldHVybiBtazsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGtlcm5lbF9hZGRfc3lzZnNfcGFyYW0oY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcGFyYW0sCisJCQkJCSAgdW5zaWduZWQgaW50IG5hbWVfc2tpcCkKK3sKKwlzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rOworCWludCBlcnI7CisKKwltayA9IGxvY2F0ZV9tb2R1bGVfa29iamVjdChuYW1lKTsKKwlpZiAoIW1rKQorCQlyZXR1cm47CisKKwkvKiBXZSBuZWVkIHRvIHJlbW92ZSBvbGQgcGFyYW1ldGVycyBiZWZvcmUgYWRkaW5nIG1vcmUuICovCisJaWYgKG1rLT5tcCkKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtay0+a29iaiwgJm1rLT5tcC0+Z3JwKTsKKwogCS8qIFRoZXNlIHNob3VsZCBub3QgZmFpbCBhdCBib290LiAqLwogCWVyciA9IGFkZF9zeXNmc19wYXJhbShtaywga3BhcmFtLCBrcGFyYW0tPm5hbWUgKyBuYW1lX3NraXApOwogCUJVR19PTihlcnIpOwpAQCAtNzk2LDYgKzgxMiwzMiBAQAogCX0KIH0KIAorc3NpemVfdCBfX21vZHZlcl92ZXJzaW9uX3Nob3coc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKm1hdHRyLAorCQkJICAgICAgc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpidWYpCit7CisJc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSAqdmF0dHIgPQorCQljb250YWluZXJfb2YobWF0dHIsIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUsIG1hdHRyKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB2YXR0ci0+dmVyc2lvbik7Cit9CisKK2V4dGVybiBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlIF9fc3RhcnRfX19tb2R2ZXJbXSwgX19zdG9wX19fbW9kdmVyW107CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2ZXJzaW9uX3N5c2ZzX2J1aWx0aW4odm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlICp2YXR0cjsKKwlzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rOworCWludCBlcnI7CisKKwlmb3IgKHZhdHRyID0gX19zdGFydF9fX21vZHZlcjsgdmF0dHIgPCBfX3N0b3BfX19tb2R2ZXI7IHZhdHRyKyspIHsKKwkJbWsgPSBsb2NhdGVfbW9kdWxlX2tvYmplY3QodmF0dHItPm1vZHVsZV9uYW1lKTsKKwkJaWYgKG1rKSB7CisJCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmbWstPmtvYmosICZ2YXR0ci0+bWF0dHIuYXR0cik7CisJCQlrb2JqZWN0X3VldmVudCgmbWstPmtvYmosIEtPQkpfQUREKTsKKwkJCWtvYmplY3RfcHV0KCZtay0+a29iaik7CisJCX0KKwl9Cit9CiAKIC8qIG1vZHVsZS1yZWxhdGVkIHN5c2ZzIHN0dWZmICovCiAKQEAgLTg3NSw2ICs5MTcsNyBAQAogCX0KIAltb2R1bGVfc3lzZnNfaW5pdGlhbGl6ZWQgPSAxOwogCisJdmVyc2lvbl9zeXNmc19idWlsdGluKCk7CiAJcGFyYW1fc3lzZnNfYnVpbHRpbigpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA4NDUyMmM3Li42NTYyMjJmIDEwMDY0NAotLS0gYS9rZXJuZWwvcGVyZl9ldmVudC5jCisrKyBiL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTc4Miw2ICs3ODIsMTAgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZjdHgtPmxvY2spOwogfQogCisjZGVmaW5lIE1BWF9JTlRFUlJVUFRTICh+MFVMTCkKKworc3RhdGljIHZvaWQgcGVyZl9sb2dfdGhyb3R0bGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZW5hYmxlKTsKKwogc3RhdGljIGludAogZXZlbnRfc2NoZWRfaW4oc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LAogCQkgc3RydWN0IHBlcmZfY3B1X2NvbnRleHQgKmNwdWN0eCwKQEAgLTc5NCw2ICs3OTgsMTcgQEAKIAogCWV2ZW50LT5zdGF0ZSA9IFBFUkZfRVZFTlRfU1RBVEVfQUNUSVZFOwogCWV2ZW50LT5vbmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogVW50aHJvdHRsZSBldmVudHMsIHNpbmNlIHdlIHNjaGVkdWxlZCB3ZSBtaWdodCBoYXZlIG1pc3NlZCBzZXZlcmFsCisJICogdGlja3MgYWxyZWFkeSwgYWxzbyBmb3IgYSBoZWF2aWx5IHNjaGVkdWxpbmcgdGFzayB0aGVyZSBpcyBsaXR0bGUKKwkgKiBndWFyYW50ZWUgaXQnbGwgZ2V0IGEgdGljayBpbiBhIHRpbWVseSBtYW5uZXIuCisJICovCisJaWYgKHVubGlrZWx5KGV2ZW50LT5ody5pbnRlcnJ1cHRzID09IE1BWF9JTlRFUlJVUFRTKSkgeworCQlwZXJmX2xvZ190aHJvdHRsZShldmVudCwgMSk7CisJCWV2ZW50LT5ody5pbnRlcnJ1cHRzID0gMDsKKwl9CisKIAkvKgogCSAqIFRoZSBuZXcgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0dXJuIGl0IG9uIGluIHRoZSBoYXJkd2FyZToKIAkgKi8KQEAgLTE1OTYsMTAgKzE2MTEsNiBAQAogCX0KIH0KIAotI2RlZmluZSBNQVhfSU5URVJSVVBUUyAofjBVTEwpCi0KLXN0YXRpYyB2b2lkIHBlcmZfbG9nX3Rocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgaW50IGVuYWJsZSk7Ci0KIHN0YXRpYyB1NjQgcGVyZl9jYWxjdWxhdGVfcGVyaW9kKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdTY0IG5zZWMsIHU2NCBjb3VudCkKIHsKIAl1NjQgZnJlcXVlbmN5ID0gZXZlbnQtPmF0dHIuc2FtcGxlX2ZyZXE7CkBAIC0xOTAxLDExICsxOTEyLDEyIEBACiAJCXJldHVybjsKIAogCXJhd19zcGluX2xvY2soJmN0eC0+bG9jayk7Ci0JdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOworCWlmIChjdHgtPmlzX2FjdGl2ZSkKKwkJdXBkYXRlX2NvbnRleHRfdGltZShjdHgpOwogCXVwZGF0ZV9ldmVudF90aW1lcyhldmVudCk7CisJaWYgKGV2ZW50LT5zdGF0ZSA9PSBQRVJGX0VWRU5UX1NUQVRFX0FDVElWRSkKKwkJZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiAJcmF3X3NwaW5fdW5sb2NrKCZjdHgtPmxvY2spOwotCi0JZXZlbnQtPnBtdS0+cmVhZChldmVudCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTY0IHBlcmZfZXZlbnRfY291bnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQpAQCAtMTk5OSw4ICsyMDExLDcgQEAKIAkgKiBhY2Nlc3NlZCBmcm9tIE5NSS4gVXNlIGEgdGVtcG9yYXJ5IG1hbnVhbCBwZXIgY3B1IGFsbG9jYXRpb24KIAkgKiB1bnRpbCB0aGF0IGdldHMgc29ydGVkIG91dC4KIAkgKi8KLQlzaXplID0gc2l6ZW9mKCplbnRyaWVzKSArIHNpemVvZihzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKikgKgotCQludW1fcG9zc2libGVfY3B1cygpOworCXNpemUgPSBvZmZzZXRvZihzdHJ1Y3QgY2FsbGNoYWluX2NwdXNfZW50cmllcywgY3B1X2VudHJpZXNbbnJfY3B1X2lkc10pOwogCiAJZW50cmllcyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFlbnRyaWVzKQpAQCAtMjIwMSwxMyArMjIxMiw2IEBACiAJaWYgKCF0YXNrKQogCQlyZXR1cm4gRVJSX1BUUigtRVNSQ0gpOwogCi0JLyoKLQkgKiBDYW4ndCBhdHRhY2ggZXZlbnRzIHRvIGEgZHlpbmcgdGFzay4KLQkgKi8KLQllcnIgPSAtRVNSQ0g7Ci0JaWYgKHRhc2stPmZsYWdzICYgUEZfRVhJVElORykKLQkJZ290byBlcnJvdXQ7Ci0KIAkvKiBSZXVzZSBwdHJhY2UgcGVybWlzc2lvbiBjaGVja3MgZm9yIG5vdy4gKi8KIAllcnIgPSAtRUFDQ0VTOwogCWlmICghcHRyYWNlX21heV9hY2Nlc3ModGFzaywgUFRSQUNFX01PREVfUkVBRCkpCkBAIC0yMjY4LDE0ICsyMjcyLDI3IEBACiAKIAkJZ2V0X2N0eChjdHgpOwogCi0JCWlmIChjbXB4Y2hnKCZ0YXNrLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl0sIE5VTEwsIGN0eCkpIHsKLQkJCS8qCi0JCQkgKiBXZSByYWNlZCB3aXRoIHNvbWUgb3RoZXIgdGFzazsgdXNlCi0JCQkgKiB0aGUgY29udGV4dCB0aGV5IHNldC4KLQkJCSAqLworCQllcnIgPSAwOworCQltdXRleF9sb2NrKCZ0YXNrLT5wZXJmX2V2ZW50X211dGV4KTsKKwkJLyoKKwkJICogSWYgaXQgaGFzIGFscmVhZHkgcGFzc2VkIHBlcmZfZXZlbnRfZXhpdF90YXNrKCkuCisJCSAqIHdlIG11c3Qgc2VlIFBGX0VYSVRJTkcsIGl0IHRha2VzIHRoaXMgbXV0ZXggdG9vLgorCQkgKi8KKwkJaWYgKHRhc2stPmZsYWdzICYgUEZfRVhJVElORykKKwkJCWVyciA9IC1FU1JDSDsKKwkJZWxzZSBpZiAodGFzay0+cGVyZl9ldmVudF9jdHhwW2N0eG5dKQorCQkJZXJyID0gLUVBR0FJTjsKKwkJZWxzZQorCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHRhc2stPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSwgY3R4KTsKKwkJbXV0ZXhfdW5sb2NrKCZ0YXNrLT5wZXJmX2V2ZW50X211dGV4KTsKKworCQlpZiAodW5saWtlbHkoZXJyKSkgewogCQkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCQkJa2ZyZWUoY3R4KTsKLQkJCWdvdG8gcmV0cnk7CisKKwkJCWlmIChlcnIgPT0gLUVBR0FJTikKKwkJCQlnb3RvIHJldHJ5OworCQkJZ290byBlcnJvdXQ7CiAJCX0KIAl9CiAKQEAgLTUzNzQsNiArNTM5MSw4IEBACiAJZ290byBvdXQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgY3B1Y3R4X211dGV4OworCiBpbnQgcGVyZl9wbXVfcmVnaXN0ZXIoc3RydWN0IHBtdSAqcG11LCBjaGFyICpuYW1lLCBpbnQgdHlwZSkKIHsKIAlpbnQgY3B1LCByZXQ7CkBAIC01NDIyLDYgKzU0NDEsNyBAQAogCiAJCWNwdWN0eCA9IHBlcl9jcHVfcHRyKHBtdS0+cG11X2NwdV9jb250ZXh0LCBjcHUpOwogCQlfX3BlcmZfZXZlbnRfaW5pdF9jb250ZXh0KCZjcHVjdHgtPmN0eCk7CisJCWxvY2tkZXBfc2V0X2NsYXNzKCZjcHVjdHgtPmN0eC5tdXRleCwgJmNwdWN0eF9tdXRleCk7CiAJCWNwdWN0eC0+Y3R4LnR5cGUgPSBjcHVfY29udGV4dDsKIAkJY3B1Y3R4LT5jdHgucG11ID0gcG11OwogCQljcHVjdHgtPmppZmZpZXNfaW50ZXJ2YWwgPSAxOwpAQCAtNjEyNyw3ICs2MTQ3LDcgQEAKIAkgKiBzY2hlZHVsZWQsIHNvIHdlIGFyZSBub3cgc2FmZSBmcm9tIHJlc2NoZWR1bGluZyBjaGFuZ2luZwogCSAqIG91ciBjb250ZXh0LgogCSAqLwotCWNoaWxkX2N0eCA9IGNoaWxkLT5wZXJmX2V2ZW50X2N0eHBbY3R4bl07CisJY2hpbGRfY3R4ID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhjaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dKTsKIAl0YXNrX2N0eF9zY2hlZF9vdXQoY2hpbGRfY3R4LCBFVkVOVF9BTEwpOwogCiAJLyoKQEAgLTY0NDAsMTEgKzY0NjAsNiBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAKLQljaGlsZC0+cGVyZl9ldmVudF9jdHhwW2N0eG5dID0gTlVMTDsKLQotCW11dGV4X2luaXQoJmNoaWxkLT5wZXJmX2V2ZW50X211dGV4KTsKLQlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPnBlcmZfZXZlbnRfbGlzdCk7Ci0KIAlpZiAobGlrZWx5KCFwYXJlbnQtPnBlcmZfZXZlbnRfY3R4cFtjdHhuXSkpCiAJCXJldHVybiAwOwogCkBAIC02NTMzLDYgKzY1NDgsMTAgQEAKIHsKIAlpbnQgY3R4biwgcmV0OwogCisJbWVtc2V0KGNoaWxkLT5wZXJmX2V2ZW50X2N0eHAsIDAsIHNpemVvZihjaGlsZC0+cGVyZl9ldmVudF9jdHhwKSk7CisJbXV0ZXhfaW5pdCgmY2hpbGQtPnBlcmZfZXZlbnRfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZjaGlsZC0+cGVyZl9ldmVudF9saXN0KTsKKwogCWZvcl9lYWNoX3Rhc2tfY29udGV4dF9ucihjdHhuKSB7CiAJCXJldCA9IHBlcmZfZXZlbnRfaW5pdF9jb250ZXh0KGNoaWxkLCBjdHhuKTsKIAkJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDdiNWRiNmEuLjcwMTg1MzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMzI2LDcgKzMyNiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBtX3N0YXJ0X3dvcmtxdWV1ZSh2b2lkKQogewotCXBtX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJwbSIsIFdRX0ZSRUVaRUFCTEUsIDApOworCXBtX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCJwbSIsIFdRX0ZSRUVaQUJMRSwgMCk7CiAKIAlyZXR1cm4gcG1fd3EgPyAwIDogLUVOT01FTTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCmluZGV4IGQ2ZDJhMTAuLjBjZjNhMjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAjZGVmaW5lIFRJTUVPVVQJKDIwICogSFopCiAKLXN0YXRpYyBpbmxpbmUgaW50IGZyZWV6ZWFibGUoc3RydWN0IHRhc2tfc3RydWN0ICogcCkKK3N0YXRpYyBpbmxpbmUgaW50IGZyZWV6YWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwKQogewogCWlmICgocCA9PSBjdXJyZW50KSB8fAogCSAgICAocC0+ZmxhZ3MgJiBQRl9OT0ZSRUVaRSkgfHwKQEAgLTUzLDcgKzUzLDcgQEAKIAkJdG9kbyA9IDA7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKLQkJCWlmIChmcm96ZW4ocCkgfHwgIWZyZWV6ZWFibGUocCkpCisJCQlpZiAoZnJvemVuKHApIHx8ICFmcmVlemFibGUocCkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICghZnJlZXplX3Rhc2socCwgc2lnX29ubHkpKQpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKLQkJaWYgKCFmcmVlemVhYmxlKHApKQorCQlpZiAoIWZyZWV6YWJsZShwKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChub3NpZ19vbmx5ICYmIHNob3VsZF9zZW5kX3NpZ25hbChwKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKaW5kZXggMGRhYzc1ZS4uNjRkYjY0OCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKKysrIGIva2VybmVsL3Bvd2VyL3NuYXBzaG90LmMKQEAgLTE1MTksMTEgKzE1MTksOCBAQAogc3dzdXNwX2FsbG9jKHN0cnVjdCBtZW1vcnlfYml0bWFwICpvcmlnX2JtLCBzdHJ1Y3QgbWVtb3J5X2JpdG1hcCAqY29weV9ibSwKIAkJdW5zaWduZWQgaW50IG5yX3BhZ2VzLCB1bnNpZ25lZCBpbnQgbnJfaGlnaG1lbSkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCiAJaWYgKG5yX2hpZ2htZW0gPiAwKSB7Ci0JCWVycm9yID0gZ2V0X2hpZ2htZW1fYnVmZmVyKFBHX0FOWSk7Ci0JCWlmIChlcnJvcikKKwkJaWYgKGdldF9oaWdobWVtX2J1ZmZlcihQR19BTlkpKQogCQkJZ290byBlcnJfb3V0OwogCQlpZiAobnJfaGlnaG1lbSA+IGFsbG9jX2hpZ2htZW0pIHsKIAkJCW5yX2hpZ2htZW0gLT0gYWxsb2NfaGlnaG1lbTsKQEAgLTE1NDYsNyArMTU0Myw3IEBACiAKICBlcnJfb3V0OgogCXN3c3VzcF9mcmVlKCk7Ci0JcmV0dXJuIGVycm9yOworCXJldHVybiAtRU5PTUVNOwogfQogCiBhc21saW5rYWdlIGludCBzd3N1c3Bfc2F2ZSh2b2lkKQpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDUzZDlhOWUuLjM2MjMxNTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTk3LDcgKzk3LDcgQEAKIC8qCiAgKiBsb2didWZfbG9jayBwcm90ZWN0cyBsb2dfYnVmLCBsb2dfc3RhcnQsIGxvZ19lbmQsIGNvbl9zdGFydCBhbmQgbG9nZ2VkX2NoYXJzCiAgKiBJdCBpcyBhbHNvIHVzZWQgaW4gaW50ZXJlc3Rpbmcgd2F5cyB0byBwcm92aWRlIGludGVybG9ja2luZyBpbgotICogcmVsZWFzZV9jb25zb2xlX3NlbSgpLgorICogY29uc29sZV91bmxvY2soKTsuCiAgKi8KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9nYnVmX2xvY2spOwogCkBAIC0yNjIsMjUgKzI2Miw0NyBAQAogaW50IGRtZXNnX3Jlc3RyaWN0OwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgc3lzbG9nX2FjdGlvbl9yZXN0cmljdGVkKGludCB0eXBlKQoreworCWlmIChkbWVzZ19yZXN0cmljdCkKKwkJcmV0dXJuIDE7CisJLyogVW5sZXNzIHJlc3RyaWN0ZWQsIHdlIGFsbG93ICJyZWFkIGFsbCIgYW5kICJnZXQgYnVmZmVyIHNpemUiIGZvciBldmVyeWJvZHkgKi8KKwlyZXR1cm4gdHlwZSAhPSBTWVNMT0dfQUNUSU9OX1JFQURfQUxMICYmIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUjsKK30KKworc3RhdGljIGludCBjaGVja19zeXNsb2dfcGVybWlzc2lvbnMoaW50IHR5cGUsIGJvb2wgZnJvbV9maWxlKQoreworCS8qCisJICogSWYgdGhpcyBpcyBmcm9tIC9wcm9jL2ttc2cgYW5kIHdlJ3ZlIGFscmVhZHkgb3BlbmVkIGl0LCB0aGVuIHdlJ3ZlCisJICogYWxyZWFkeSBkb25lIHRoZSBjYXBhYmlsaXRpZXMgY2hlY2tzIGF0IG9wZW4gdGltZS4KKwkgKi8KKwlpZiAoZnJvbV9maWxlICYmIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9PUEVOKQorCQlyZXR1cm4gMDsKKworCWlmIChzeXNsb2dfYWN0aW9uX3Jlc3RyaWN0ZWQodHlwZSkpIHsKKwkJaWYgKGNhcGFibGUoQ0FQX1NZU0xPRykpCisJCQlyZXR1cm4gMDsKKwkJLyogRm9yIGhpc3RvcmljYWwgcmVhc29ucywgYWNjZXB0IENBUF9TWVNfQURNSU4gdG9vLCB3aXRoIGEgd2FybmluZyAqLworCQlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgeworCQkJV0FSTl9PTkNFKDEsICJBdHRlbXB0IHRvIGFjY2VzcyBzeXNsb2cgd2l0aCBDQVBfU1lTX0FETUlOICIKKwkJCQkgImJ1dCBubyBDQVBfU1lTTE9HIChkZXByZWNhdGVkKS5cbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGludCBkb19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICpidWYsIGludCBsZW4sIGJvb2wgZnJvbV9maWxlKQogewogCXVuc2lnbmVkIGksIGosIGxpbWl0LCBjb3VudDsKIAlpbnQgZG9fY2xlYXIgPSAwOwogCWNoYXIgYzsKLQlpbnQgZXJyb3IgPSAwOworCWludCBlcnJvcjsKIAotCS8qCi0JICogSWYgdGhpcyBpcyBmcm9tIC9wcm9jL2ttc2cgd2Ugb25seSBkbyB0aGUgY2FwYWJpbGl0aWVzIGNoZWNrcwotCSAqIGF0IG9wZW4gdGltZS4KLQkgKi8KLQlpZiAodHlwZSA9PSBTWVNMT0dfQUNUSU9OX09QRU4gfHwgIWZyb21fZmlsZSkgewotCQlpZiAoZG1lc2dfcmVzdHJpY3QgJiYgIWNhcGFibGUoQ0FQX1NZU0xPRykpCi0JCQlnb3RvIHdhcm47IC8qIHN3aXRjaCB0byByZXR1cm4gLUVQRVJNIGFmdGVyIDIuNi4zOSAqLwotCQlpZiAoKHR5cGUgIT0gU1lTTE9HX0FDVElPTl9SRUFEX0FMTCAmJgotCQkgICAgIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUikgJiYKLQkJICAgICFjYXBhYmxlKENBUF9TWVNMT0cpKQotCQkJZ290byB3YXJuOyAvKiBzd2l0Y2ggdG8gcmV0dXJuIC1FUEVSTSBhZnRlciAyLjYuMzkgKi8KLQl9CisJZXJyb3IgPSBjaGVja19zeXNsb2dfcGVybWlzc2lvbnModHlwZSwgZnJvbV9maWxlKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OwogCiAJZXJyb3IgPSBzZWN1cml0eV9zeXNsb2codHlwZSk7CiAJaWYgKGVycm9yKQpAQCAtNDIzLDEyICs0NDUsNiBAQAogCX0KIG91dDoKIAlyZXR1cm4gZXJyb3I7Ci13YXJuOgotCS8qIHJlbW92ZSBhZnRlciAyLjYuMzkgKi8KLQlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJV0FSTl9PTkNFKDEsICJBdHRlbXB0IHRvIGFjY2VzcyBzeXNsb2cgd2l0aCBDQVBfU1lTX0FETUlOICIKLQkJICAiYnV0IG5vIENBUF9TWVNMT0cgKGRlcHJlY2F0ZWQgYW5kIGRlbmllZCkuXG4iKTsKLQlyZXR1cm4gLUVQRVJNOwogfQogCiBTWVNDQUxMX0RFRklORTMoc3lzbG9nLCBpbnQsIHR5cGUsIGNoYXIgX191c2VyICosIGJ1ZiwgaW50LCBsZW4pCkBAIC01MDEsNyArNTE3LDcgQEAKIC8qCiAgKiBDYWxsIHRoZSBjb25zb2xlIGRyaXZlcnMsIGFza2luZyB0aGVtIHRvIHdyaXRlIG91dAogICogbG9nX2J1ZltzdGFydF0gdG8gbG9nX2J1ZltlbmQgLSAxXS4KLSAqIFRoZSBjb25zb2xlX3NlbSBtdXN0IGJlIGhlbGQuCisgKiBUaGUgY29uc29sZV9sb2NrIG11c3QgYmUgaGVsZC4KICAqLwogc3RhdGljIHZvaWQgY2FsbF9jb25zb2xlX2RyaXZlcnModW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCkKIHsKQEAgLTYwNCwxMSArNjIwLDExIEBACiAgKgogICogVGhpcyBpcyBwcmludGsoKS4gIEl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29udGV4dC4gIFdlIHdhbnQgaXQgdG8gd29yay4KICAqCi0gKiBXZSB0cnkgdG8gZ3JhYiB0aGUgY29uc29sZV9zZW0uICBJZiB3ZSBzdWNjZWVkLCBpdCdzIGVhc3kgLSB3ZSBsb2cgdGhlIG91dHB1dCBhbmQKKyAqIFdlIHRyeSB0byBncmFiIHRoZSBjb25zb2xlX2xvY2suICBJZiB3ZSBzdWNjZWVkLCBpdCdzIGVhc3kgLSB3ZSBsb2cgdGhlIG91dHB1dCBhbmQKICAqIGNhbGwgdGhlIGNvbnNvbGUgZHJpdmVycy4gIElmIHdlIGZhaWwgdG8gZ2V0IHRoZSBzZW1hcGhvcmUgd2UgcGxhY2UgdGhlIG91dHB1dAogICogaW50byB0aGUgbG9nIGJ1ZmZlciBhbmQgcmV0dXJuLiAgVGhlIGN1cnJlbnQgaG9sZGVyIG9mIHRoZSBjb25zb2xlX3NlbSB3aWxsCi0gKiBub3RpY2UgdGhlIG5ldyBvdXRwdXQgaW4gcmVsZWFzZV9jb25zb2xlX3NlbSgpIGFuZCB3aWxsIHNlbmQgaXQgdG8gdGhlCi0gKiBjb25zb2xlcyBiZWZvcmUgcmVsZWFzaW5nIHRoZSBzZW1hcGhvcmUuCisgKiBub3RpY2UgdGhlIG5ldyBvdXRwdXQgaW4gY29uc29sZV91bmxvY2soKTsgYW5kIHdpbGwgc2VuZCBpdCB0byB0aGUKKyAqIGNvbnNvbGVzIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2suCiAgKgogICogT25lIGVmZmVjdCBvZiB0aGlzIGRlZmVycmVkIHByaW50aW5nIGlzIHRoYXQgY29kZSB3aGljaCBjYWxscyBwcmludGsoKSBhbmQKICAqIHRoZW4gY2hhbmdlcyBjb25zb2xlX2xvZ2xldmVsIG1heSBicmVhay4gVGhpcyBpcyBiZWNhdXNlIGNvbnNvbGVfbG9nbGV2ZWwKQEAgLTY1OSwxOSArNjc1LDE5IEBACiAvKgogICogVHJ5IHRvIGdldCBjb25zb2xlIG93bmVyc2hpcCB0byBhY3R1YWxseSBzaG93IHRoZSBrZXJuZWwKICAqIG1lc3NhZ2VzIGZyb20gYSAncHJpbnRrJy4gUmV0dXJuIHRydWUgKGFuZCB3aXRoIHRoZQotICogY29uc29sZV9zZW1hcGhvcmUgaGVsZCwgYW5kICdjb25zb2xlX2xvY2tlZCcgc2V0KSBpZiBpdAorICogY29uc29sZV9sb2NrIGhlbGQsIGFuZCAnY29uc29sZV9sb2NrZWQnIHNldCkgaWYgaXQKICAqIGlzIHN1Y2Nlc3NmdWwsIGZhbHNlIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGdldHMgY2FsbGVkIHdpdGggdGhlICdsb2didWZfbG9jaycgc3BpbmxvY2sgaGVsZCBhbmQKICAqIGludGVycnVwdHMgZGlzYWJsZWQuIEl0IHNob3VsZCByZXR1cm4gd2l0aCAnbG9ja2J1Zl9sb2NrJwogICogcmVsZWFzZWQgYnV0IGludGVycnVwdHMgc3RpbGwgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyBpbnQgYWNxdWlyZV9jb25zb2xlX3NlbWFwaG9yZV9mb3JfcHJpbnRrKHVuc2lnbmVkIGludCBjcHUpCitzdGF0aWMgaW50IGNvbnNvbGVfdHJ5bG9ja19mb3JfcHJpbnRrKHVuc2lnbmVkIGludCBjcHUpCiAJX19yZWxlYXNlcygmbG9nYnVmX2xvY2spCiB7CiAJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoIXRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKCkpIHsKKwlpZiAoY29uc29sZV90cnlsb2NrKCkpIHsKIAkJcmV0dmFsID0gMTsKIAogCQkvKgpAQCAtODI3LDEyICs4NDMsMTIgQEAKIAkgKiBhY3R1YWwgbWFnaWMgKHByaW50IG91dCBidWZmZXJzLCB3YWtlIHVwIGtsb2dkLAogCSAqIGV0YykuIAogCSAqCi0JICogVGhlIGFjcXVpcmVfY29uc29sZV9zZW1hcGhvcmVfZm9yX3ByaW50aygpIGZ1bmN0aW9uCisJICogVGhlIGNvbnNvbGVfdHJ5bG9ja19mb3JfcHJpbnRrKCkgZnVuY3Rpb24KIAkgKiB3aWxsIHJlbGVhc2UgJ2xvZ2J1Zl9sb2NrJyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQKIAkgKiBhY3R1YWxseSBnZXRzIHRoZSBzZW1hcGhvcmUgb3Igbm90LgogCSAqLwotCWlmIChhY3F1aXJlX2NvbnNvbGVfc2VtYXBob3JlX2Zvcl9wcmludGsodGhpc19jcHUpKQotCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CisJaWYgKGNvbnNvbGVfdHJ5bG9ja19mb3JfcHJpbnRrKHRoaXNfY3B1KSkKKwkJY29uc29sZV91bmxvY2soKTsKIAogCWxvY2tkZXBfb24oKTsKIG91dF9yZXN0b3JlX2lycXM6CkBAIC05OTMsNyArMTAwOSw3IEBACiAJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCkKIAkJcmV0dXJuOwogCXByaW50aygiU3VzcGVuZGluZyBjb25zb2xlKHMpICh1c2Ugbm9fY29uc29sZV9zdXNwZW5kIHRvIGRlYnVnKVxuIik7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbnNvbGVfc3VzcGVuZGVkID0gMTsKIAl1cCgmY29uc29sZV9zZW0pOwogfQpAQCAtMTAwNCw3ICsxMDIwLDcgQEAKIAkJcmV0dXJuOwogCWRvd24oJmNvbnNvbGVfc2VtKTsKIAljb25zb2xlX3N1c3BlbmRlZCA9IDA7Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiB9CiAKIC8qKgpAQCAtMTAyNywyMSArMTA0MywyMSBAQAogCWNhc2UgQ1BVX0RZSU5HOgogCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgotCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CisJCWNvbnNvbGVfdW5sb2NrKCk7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKIC8qKgotICogYWNxdWlyZV9jb25zb2xlX3NlbSAtIGxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtIGZvciBleGNsdXNpdmUgdXNlLgorICogY29uc29sZV9sb2NrIC0gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCiAgKgotICogQWNxdWlyZXMgYSBzZW1hcGhvcmUgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCisgKiBBY3F1aXJlcyBhIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCiAgKiBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHN5c3RlbSBhbmQgdGhlIGNvbnNvbGVfZHJpdmVycyBsaXN0LgogICoKICAqIENhbiBzbGVlcCwgcmV0dXJucyBub3RoaW5nLgogICovCi12b2lkIGFjcXVpcmVfY29uc29sZV9zZW0odm9pZCkKK3ZvaWQgY29uc29sZV9sb2NrKHZvaWQpCiB7CiAJQlVHX09OKGluX2ludGVycnVwdCgpKTsKIAlkb3duKCZjb25zb2xlX3NlbSk7CkBAIC0xMDUwLDIxICsxMDY2LDI5IEBACiAJY29uc29sZV9sb2NrZWQgPSAxOwogCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMTsKIH0KLUVYUE9SVF9TWU1CT0woYWNxdWlyZV9jb25zb2xlX3NlbSk7CitFWFBPUlRfU1lNQk9MKGNvbnNvbGVfbG9jayk7CiAKLWludCB0cnlfYWNxdWlyZV9jb25zb2xlX3NlbSh2b2lkKQorLyoqCisgKiBjb25zb2xlX3RyeWxvY2sgLSB0cnkgdG8gbG9jayB0aGUgY29uc29sZSBzeXN0ZW0gZm9yIGV4Y2x1c2l2ZSB1c2UuCisgKgorICogVHJpZWQgdG8gYWNxdWlyZSBhIGxvY2sgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IHRoZSBjYWxsZXIgaGFzCisgKiBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBjb25zb2xlIHN5c3RlbSBhbmQgdGhlIGNvbnNvbGVfZHJpdmVycyBsaXN0LgorICoKKyAqIHJldHVybnMgMSBvbiBzdWNjZXNzLCBhbmQgMCBvbiBmYWlsdXJlIHRvIGFjcXVpcmUgdGhlIGxvY2suCisgKi8KK2ludCBjb25zb2xlX3RyeWxvY2sodm9pZCkKIHsKIAlpZiAoZG93bl90cnlsb2NrKCZjb25zb2xlX3NlbSkpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CiAJaWYgKGNvbnNvbGVfc3VzcGVuZGVkKSB7CiAJCXVwKCZjb25zb2xlX3NlbSk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIDA7CiAJfQogCWNvbnNvbGVfbG9ja2VkID0gMTsKIAljb25zb2xlX21heV9zY2hlZHVsZSA9IDA7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIDE7CiB9Ci1FWFBPUlRfU1lNQk9MKHRyeV9hY3F1aXJlX2NvbnNvbGVfc2VtKTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV90cnlsb2NrKTsKIAogaW50IGlzX2NvbnNvbGVfbG9ja2VkKHZvaWQpCiB7CkBAIC0xMDk1LDIwICsxMTE5LDIwIEBACiB9CiAKIC8qKgotICogcmVsZWFzZV9jb25zb2xlX3NlbSAtIHVubG9jayB0aGUgY29uc29sZSBzeXN0ZW0KKyAqIGNvbnNvbGVfdW5sb2NrIC0gdW5sb2NrIHRoZSBjb25zb2xlIHN5c3RlbQogICoKLSAqIFJlbGVhc2VzIHRoZSBzZW1hcGhvcmUgd2hpY2ggdGhlIGNhbGxlciBob2xkcyBvbiB0aGUgY29uc29sZSBzeXN0ZW0KKyAqIFJlbGVhc2VzIHRoZSBjb25zb2xlX2xvY2sgd2hpY2ggdGhlIGNhbGxlciBob2xkcyBvbiB0aGUgY29uc29sZSBzeXN0ZW0KICAqIGFuZCB0aGUgY29uc29sZSBkcml2ZXIgbGlzdC4KICAqCi0gKiBXaGlsZSB0aGUgc2VtYXBob3JlIHdhcyBoZWxkLCBjb25zb2xlIG91dHB1dCBtYXkgaGF2ZSBiZWVuIGJ1ZmZlcmVkCi0gKiBieSBwcmludGsoKS4gIElmIHRoaXMgaXMgdGhlIGNhc2UsIHJlbGVhc2VfY29uc29sZV9zZW0oKSBlbWl0cwotICogdGhlIG91dHB1dCBwcmlvciB0byByZWxlYXNpbmcgdGhlIHNlbWFwaG9yZS4KKyAqIFdoaWxlIHRoZSBjb25zb2xlX2xvY2sgd2FzIGhlbGQsIGNvbnNvbGUgb3V0cHV0IG1heSBoYXZlIGJlZW4gYnVmZmVyZWQKKyAqIGJ5IHByaW50aygpLiAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgY29uc29sZV91bmxvY2soKTsgZW1pdHMKKyAqIHRoZSBvdXRwdXQgcHJpb3IgdG8gcmVsZWFzaW5nIHRoZSBsb2NrLgogICoKICAqIElmIHRoZXJlIGlzIG91dHB1dCB3YWl0aW5nIGZvciBrbG9nZCwgd2Ugd2FrZSBpdCB1cC4KICAqCi0gKiByZWxlYXNlX2NvbnNvbGVfc2VtKCkgbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LgorICogY29uc29sZV91bmxvY2soKTsgbWF5IGJlIGNhbGxlZCBmcm9tIGFueSBjb250ZXh0LgogICovCi12b2lkIHJlbGVhc2VfY29uc29sZV9zZW0odm9pZCkKK3ZvaWQgY29uc29sZV91bmxvY2sodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIF9jb25fc3RhcnQsIF9sb2dfZW5kOwpAQCAtMTE0MSw3ICsxMTY1LDcgQEAKIAlpZiAod2FrZV9rbG9nZCkKIAkJd2FrZV91cF9rbG9nZCgpOwogfQotRVhQT1JUX1NZTUJPTChyZWxlYXNlX2NvbnNvbGVfc2VtKTsKK0VYUE9SVF9TWU1CT0woY29uc29sZV91bmxvY2spOwogCiAvKioKICAqIGNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUgLSB5aWVsZCB0aGUgQ1BVIGlmIHJlcXVpcmVkCkBAIC0xMTUwLDcgKzExNzQsNyBAQAogICogaWYgdGhpcyBDUFUgc2hvdWxkIHlpZWxkIHRoZSBDUFUgdG8gYW5vdGhlciB0YXNrLCBkbwogICogc28gaGVyZS4KICAqCi0gKiBNdXN0IGJlIGNhbGxlZCB3aXRoaW4gYWNxdWlyZV9jb25zb2xlX3NlbSgpLgorICogTXVzdCBiZSBjYWxsZWQgd2l0aGluIGNvbnNvbGVfbG9jaygpOy4KICAqLwogdm9pZCBfX3NjaGVkIGNvbnNvbGVfY29uZGl0aW9uYWxfc2NoZWR1bGUodm9pZCkKIHsKQEAgLTExNzEsMTQgKzExOTUsMTQgQEAKIAkJaWYgKGRvd25fdHJ5bG9jaygmY29uc29sZV9zZW0pICE9IDApCiAJCQlyZXR1cm47CiAJfSBlbHNlCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwkJY29uc29sZV9sb2NrKCk7CiAKIAljb25zb2xlX2xvY2tlZCA9IDE7CiAJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAwOwogCWZvcl9lYWNoX2NvbnNvbGUoYykKIAkJaWYgKChjLT5mbGFncyAmIENPTl9FTkFCTEVEKSAmJiBjLT51bmJsYW5rKQogCQkJYy0+dW5ibGFuaygpOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogCiAvKgpAQCAtMTE4OSw3ICsxMjEzLDcgQEAKIAlzdHJ1Y3QgY29uc29sZSAqYzsKIAlzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyID0gTlVMTDsKIAotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlmb3JfZWFjaF9jb25zb2xlKGMpIHsKIAkJaWYgKCFjLT5kZXZpY2UpCiAJCQljb250aW51ZTsKQEAgLTExOTcsNyArMTIyMSw3IEBACiAJCWlmIChkcml2ZXIpCiAJCQlicmVhazsKIAl9Ci0JcmVsZWFzZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfdW5sb2NrKCk7CiAJcmV0dXJuIGRyaXZlcjsKIH0KIApAQCAtMTIwOCwxNyArMTIzMiwxNyBAQAogICovCiB2b2lkIGNvbnNvbGVfc3RvcChzdHJ1Y3QgY29uc29sZSAqY29uc29sZSkKIHsKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJY29uc29sZS0+ZmxhZ3MgJj0gfkNPTl9FTkFCTEVEOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChjb25zb2xlX3N0b3ApOwogCiB2b2lkIGNvbnNvbGVfc3RhcnQoc3RydWN0IGNvbnNvbGUgKmNvbnNvbGUpCiB7Ci0JYWNxdWlyZV9jb25zb2xlX3NlbSgpOworCWNvbnNvbGVfbG9jaygpOwogCWNvbnNvbGUtPmZsYWdzIHw9IENPTl9FTkFCTEVEOwotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogfQogRVhQT1JUX1NZTUJPTChjb25zb2xlX3N0YXJ0KTsKIApAQCAtMTM0MCw3ICsxMzY0LDcgQEAKIAkgKglQdXQgdGhpcyBjb25zb2xlIGluIHRoZSBsaXN0IC0ga2VlcCB0aGUKIAkgKglwcmVmZXJyZWQgZHJpdmVyIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LgogCSAqLwotCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX2xvY2soKTsKIAlpZiAoKG5ld2Nvbi0+ZmxhZ3MgJiBDT05fQ09OU0RFVikgfHwgY29uc29sZV9kcml2ZXJzID09IE5VTEwpIHsKIAkJbmV3Y29uLT5uZXh0ID0gY29uc29sZV9kcml2ZXJzOwogCQljb25zb2xlX2RyaXZlcnMgPSBuZXdjb247CkBAIC0xMzUyLDE0ICsxMzc2LDE0IEBACiAJfQogCWlmIChuZXdjb24tPmZsYWdzICYgQ09OX1BSSU5UQlVGRkVSKSB7CiAJCS8qCi0JCSAqIHJlbGVhc2VfY29uc29sZV9zZW0oKSB3aWxsIHByaW50IG91dCB0aGUgYnVmZmVyZWQgbWVzc2FnZXMKKwkJICogY29uc29sZV91bmxvY2soKTsgd2lsbCBwcmludCBvdXQgdGhlIGJ1ZmZlcmVkIG1lc3NhZ2VzCiAJCSAqIGZvciB1cy4KIAkJICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwogCQljb25fc3RhcnQgPSBsb2dfc3RhcnQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJfQotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWNvbnNvbGVfc3lzZnNfbm90aWZ5KCk7CiAKIAkvKgpAQCAtMTM5Niw3ICsxNDIwLDcgQEAKIAkJcmV0dXJuIGJyYWlsbGVfdW5yZWdpc3Rlcl9jb25zb2xlKGNvbnNvbGUpOwogI2VuZGlmCiAKLQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CisJY29uc29sZV9sb2NrKCk7CiAJaWYgKGNvbnNvbGVfZHJpdmVycyA9PSBjb25zb2xlKSB7CiAJCWNvbnNvbGVfZHJpdmVycz1jb25zb2xlLT5uZXh0OwogCQlyZXMgPSAwOwpAQCAtMTQxOCw3ICsxNDQyLDcgQEAKIAlpZiAoY29uc29sZV9kcml2ZXJzICE9IE5VTEwgJiYgY29uc29sZS0+ZmxhZ3MgJiBDT05fQ09OU0RFVikKIAkJY29uc29sZV9kcml2ZXJzLT5mbGFncyB8PSBDT05fQ09OU0RFVjsKIAotCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwljb25zb2xlX3VubG9jaygpOwogCWNvbnNvbGVfc3lzZnNfbm90aWZ5KCk7CiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9wdHJhY2UuYyBiL2tlcm5lbC9wdHJhY2UuYwppbmRleCA5OWJiYWEzLi5lMjMwMmU0IDEwMDY0NAotLS0gYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIva2VybmVsL3B0cmFjZS5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAlyZXR1cm4gIWVycjsKIH0KIAotaW50IHB0cmFjZV9hdHRhY2goc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorc3RhdGljIGludCBwdHJhY2VfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlpbnQgcmV0dmFsOwogCkBAIC0yMTksNyArMjE5LDcgQEAKICAqIFBlcmZvcm1zIGNoZWNrcyBhbmQgc2V0cyBQVF9QVFJBQ0VELgogICogU2hvdWxkIGJlIHVzZWQgYnkgYWxsIHB0cmFjZSBpbXBsZW1lbnRhdGlvbnMgZm9yIFBUUkFDRV9UUkFDRU1FLgogICovCi1pbnQgcHRyYWNlX3RyYWNlbWUodm9pZCkKK3N0YXRpYyBpbnQgcHRyYWNlX3RyYWNlbWUodm9pZCkKIHsKIAlpbnQgcmV0ID0gLUVQRVJNOwogCkBAIC0yOTMsNyArMjkzLDcgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLWludCBwdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBkYXRhKQorc3RhdGljIGludCBwdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIHVuc2lnbmVkIGludCBkYXRhKQogewogCWJvb2wgZGVhZCA9IGZhbHNlOwogCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7CiAJCWRlYWQgPSBfX3B0cmFjZV9kZXRhY2goY3VycmVudCwgY2hpbGQpOwogCQlpZiAoIWNoaWxkLT5leGl0X3N0YXRlKQotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKKwkJCXdha2VfdXBfc3RhdGUoY2hpbGQsIFRBU0tfVFJBQ0VEIHwgVEFTS19TVE9QUEVEKTsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mYWlyLmMgYi9rZXJuZWwvc2NoZWRfZmFpci5jCmluZGV4IDc3ZTkxNjYuLjBjMjZlMmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9mYWlyLmMKKysrIGIva2VybmVsL3NjaGVkX2ZhaXIuYwpAQCAtNjk5LDcgKzY5OSw4IEBACiAJY2ZzX3JxLT5ucl9ydW5uaW5nLS07CiB9CiAKLSNpZiBkZWZpbmVkIENPTkZJR19TTVAgJiYgZGVmaW5lZCBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAorI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECisjIGlmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jZnNfcnFfbG9hZF9jb250cmlidXRpb24oc3RydWN0IGNmc19ycSAqY2ZzX3JxLAogCQkJCQkgICAgaW50IGdsb2JhbF91cGRhdGUpCiB7CkBAIC03MjEsMTAgKzcyMiwxMCBAQAogCXU2NCBub3csIGRlbHRhOwogCXVuc2lnbmVkIGxvbmcgbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQ7CiAKLQlpZiAoIWNmc19ycSkKKwlpZiAoY2ZzX3JxLT50ZyA9PSAmcm9vdF90YXNrX2dyb3VwKQogCQlyZXR1cm47CiAKLQlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9jazsKKwlub3cgPSBycV9vZihjZnNfcnEpLT5jbG9ja190YXNrOwogCWRlbHRhID0gbm93IC0gY2ZzX3JxLT5sb2FkX3N0YW1wOwogCiAJLyogdHJ1bmNhdGUgbG9hZCBoaXN0b3J5IGF0IDQgaWRsZSBwZXJpb2RzICovCkBAIC03NjIsNiArNzYzLDUxIEBACiAJCWxpc3RfZGVsX2xlYWZfY2ZzX3JxKGNmc19ycSk7CiB9CiAKK3N0YXRpYyBsb25nIGNhbGNfY2ZzX3NoYXJlcyhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEsIHN0cnVjdCB0YXNrX2dyb3VwICp0ZywKKwkJCQlsb25nIHdlaWdodF9kZWx0YSkKK3sKKwlsb25nIGxvYWRfd2VpZ2h0LCBsb2FkLCBzaGFyZXM7CisKKwlsb2FkID0gY2ZzX3JxLT5sb2FkLndlaWdodCArIHdlaWdodF9kZWx0YTsKKworCWxvYWRfd2VpZ2h0ID0gYXRvbWljX3JlYWQoJnRnLT5sb2FkX3dlaWdodCk7CisJbG9hZF93ZWlnaHQgLT0gY2ZzX3JxLT5sb2FkX2NvbnRyaWJ1dGlvbjsKKwlsb2FkX3dlaWdodCArPSBsb2FkOworCisJc2hhcmVzID0gKHRnLT5zaGFyZXMgKiBsb2FkKTsKKwlpZiAobG9hZF93ZWlnaHQpCisJCXNoYXJlcyAvPSBsb2FkX3dlaWdodDsKKworCWlmIChzaGFyZXMgPCBNSU5fU0hBUkVTKQorCQlzaGFyZXMgPSBNSU5fU0hBUkVTOworCWlmIChzaGFyZXMgPiB0Zy0+c2hhcmVzKQorCQlzaGFyZXMgPSB0Zy0+c2hhcmVzOworCisJcmV0dXJuIHNoYXJlczsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2VudGl0eV9zaGFyZXNfdGljayhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCit7CisJaWYgKGNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgPiBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdykgeworCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKKwkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKKwl9Cit9CisjIGVsc2UgLyogQ09ORklHX1NNUCAqLworc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19sb2FkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGdsb2JhbF91cGRhdGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBjYWxjX2Nmc19zaGFyZXMoc3RydWN0IGNmc19ycSAqY2ZzX3JxLCBzdHJ1Y3QgdGFza19ncm91cCAqdGcsCisJCQkJbG9uZyB3ZWlnaHRfZGVsdGEpCit7CisJcmV0dXJuIHRnLT5zaGFyZXM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfZW50aXR5X3NoYXJlc190aWNrKHN0cnVjdCBjZnNfcnEgKmNmc19ycSkKK3sKK30KKyMgZW5kaWYgLyogQ09ORklHX1NNUCAqLwogc3RhdGljIHZvaWQgcmV3ZWlnaHRfZW50aXR5KHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgc3RydWN0IHNjaGVkX2VudGl0eSAqc2UsCiAJCQkgICAgdW5zaWduZWQgbG9uZyB3ZWlnaHQpCiB7CkBAIC03ODIsNDEgKzgyOCwyMCBAQAogewogCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZTsKLQlsb25nIGxvYWRfd2VpZ2h0LCBsb2FkLCBzaGFyZXM7Ci0KLQlpZiAoIWNmc19ycSkKLQkJcmV0dXJuOworCWxvbmcgc2hhcmVzOwogCiAJdGcgPSBjZnNfcnEtPnRnOwogCXNlID0gdGctPnNlW2NwdV9vZihycV9vZihjZnNfcnEpKV07CiAJaWYgKCFzZSkKIAkJcmV0dXJuOwotCi0JbG9hZCA9IGNmc19ycS0+bG9hZC53ZWlnaHQgKyB3ZWlnaHRfZGVsdGE7Ci0KLQlsb2FkX3dlaWdodCA9IGF0b21pY19yZWFkKCZ0Zy0+bG9hZF93ZWlnaHQpOwotCWxvYWRfd2VpZ2h0IC09IGNmc19ycS0+bG9hZF9jb250cmlidXRpb247Ci0JbG9hZF93ZWlnaHQgKz0gbG9hZDsKLQotCXNoYXJlcyA9ICh0Zy0+c2hhcmVzICogbG9hZCk7Ci0JaWYgKGxvYWRfd2VpZ2h0KQotCQlzaGFyZXMgLz0gbG9hZF93ZWlnaHQ7Ci0KLQlpZiAoc2hhcmVzIDwgTUlOX1NIQVJFUykKLQkJc2hhcmVzID0gTUlOX1NIQVJFUzsKLQlpZiAoc2hhcmVzID4gdGctPnNoYXJlcykKLQkJc2hhcmVzID0gdGctPnNoYXJlczsKKyNpZm5kZWYgQ09ORklHX1NNUAorCWlmIChsaWtlbHkoc2UtPmxvYWQud2VpZ2h0ID09IHRnLT5zaGFyZXMpKQorCQlyZXR1cm47CisjZW5kaWYKKwlzaGFyZXMgPSBjYWxjX2Nmc19zaGFyZXMoY2ZzX3JxLCB0Zywgd2VpZ2h0X2RlbHRhKTsKIAogCXJld2VpZ2h0X2VudGl0eShjZnNfcnFfb2Yoc2UpLCBzZSwgc2hhcmVzKTsKIH0KLQotc3RhdGljIHZvaWQgdXBkYXRlX2VudGl0eV9zaGFyZXNfdGljayhzdHJ1Y3QgY2ZzX3JxICpjZnNfcnEpCi17Ci0JaWYgKGNmc19ycS0+bG9hZF91bmFjY19leGVjX3RpbWUgPiBzeXNjdGxfc2NoZWRfc2hhcmVzX3dpbmRvdykgewotCQl1cGRhdGVfY2ZzX2xvYWQoY2ZzX3JxLCAwKTsKLQkJdXBkYXRlX2Nmc19zaGFyZXMoY2ZzX3JxLCAwKTsKLQl9Ci19CiAjZWxzZSAvKiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRCAqLwogc3RhdGljIHZvaWQgdXBkYXRlX2Nmc19sb2FkKHN0cnVjdCBjZnNfcnEgKmNmc19ycSwgaW50IGdsb2JhbF91cGRhdGUpCiB7CkBAIC0xNDA0LDcgKzE0MjksNyBAQAogCiBzdGF0aWMgaW50IHdha2VfYWZmaW5lKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzeW5jKQogewotCXVuc2lnbmVkIGxvbmcgdGhpc19sb2FkLCBsb2FkOworCXM2NCB0aGlzX2xvYWQsIGxvYWQ7CiAJaW50IGlkeCwgdGhpc19jcHUsIHByZXZfY3B1OwogCXVuc2lnbmVkIGxvbmcgdGxfcGVyX3Rhc2s7CiAJc3RydWN0IHRhc2tfZ3JvdXAgKnRnOwpAQCAtMTQ0Myw4ICsxNDY4LDggQEAKIAkgKiBPdGhlcndpc2UgY2hlY2sgaWYgZWl0aGVyIGNwdXMgYXJlIG5lYXIgZW5vdWdoIGluIGxvYWQgdG8gYWxsb3cgdGhpcwogCSAqIHRhc2sgdG8gYmUgd29rZW4gb24gdGhpc19jcHUuCiAJICovCi0JaWYgKHRoaXNfbG9hZCkgewotCQl1bnNpZ25lZCBsb25nIHRoaXNfZWZmX2xvYWQsIHByZXZfZWZmX2xvYWQ7CisJaWYgKHRoaXNfbG9hZCA+IDApIHsKKwkJczY0IHRoaXNfZWZmX2xvYWQsIHByZXZfZWZmX2xvYWQ7CiAKIAkJdGhpc19lZmZfbG9hZCA9IDEwMDsKIAkJdGhpc19lZmZfbG9hZCAqPSBwb3dlcl9vZihwcmV2X2NwdSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfcnQuYyBiL2tlcm5lbC9zY2hlZF9ydC5jCmluZGV4IGM5MTRlYzcuLmFkNjI2NzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9ydC5jCisrKyBiL2tlcm5lbC9zY2hlZF9ydC5jCkBAIC02MjUsNyArNjI1LDcgQEAKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxID0gcnRfcnFfb2Zfc2UocnRfc2UpOwogCXU2NCBkZWx0YV9leGVjOwogCi0JaWYgKCF0YXNrX2hhc19ydF9wb2xpY3koY3VycikpCisJaWYgKGN1cnItPnNjaGVkX2NsYXNzICE9ICZydF9zY2hlZF9jbGFzcykKIAkJcmV0dXJuOwogCiAJZGVsdGFfZXhlYyA9IHJxLT5jbG9ja190YXNrIC0gY3Vyci0+c2UuZXhlY19zdGFydDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAzMWI3MWEyLi4xOGRhNzAyIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0xMzg1LDcgKzEzODUsOCBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCksICp0Y3JlZDsKIAogCXRjcmVkID0gX190YXNrX2NyZWQodGFzayk7Ci0JaWYgKChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKKwlpZiAoY3VycmVudCAhPSB0YXNrICYmCisJICAgIChjcmVkLT51aWQgIT0gdGNyZWQtPmV1aWQgfHwKIAkgICAgIGNyZWQtPnVpZCAhPSB0Y3JlZC0+c3VpZCB8fAogCSAgICAgY3JlZC0+dWlkICE9IHRjcmVkLT51aWQgIHx8CiAJICAgICBjcmVkLT5naWQgIT0gdGNyZWQtPmVnaWQgfHwKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBiYzg2YmIzLi4wZjFiZDgzIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0xNzAsNyArMTcwLDggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi1zdGF0aWMgaW50IF9fc3lzcnFfZW5hYmxlZDsgLyogTm90ZTogc3lzcnEgY29kZSBpc2VzIGl0J3Mgb3duIHByaXZhdGUgY29weSAqLworLyogTm90ZTogc3lzcnEgY29kZSB1c2VzIGl0J3Mgb3duIHByaXZhdGUgY29weSAqLworc3RhdGljIGludCBfX3N5c3JxX2VuYWJsZWQgPSBTWVNSUV9ERUZBVUxUX0VOQUJMRTsKIAogc3RhdGljIGludCBzeXNycV9zeXNjdGxfaGFuZGxlcihjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggNDhiMjc2MS4uYTNiNWFmZiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC02MDAsNCArNjAwLDE0IEBACiAJcmV0dXJuIHRpY2tfYnJvYWRjYXN0X2RldmljZS5tb2RlID09IFRJQ0tERVZfTU9ERV9PTkVTSE9UOwogfQogCisvKgorICogQ2hlY2sgd2hldGhlciB0aGUgYnJvYWRjYXN0IGRldmljZSBzdXBwb3J0cyBvbmVzaG90LgorICovCitib29sIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYXZhaWxhYmxlKHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMgPSB0aWNrX2Jyb2FkY2FzdF9kZXZpY2UuZXZ0ZGV2OworCisJcmV0dXJuIGJjID8gYmMtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCA6IGZhbHNlOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMgYi9rZXJuZWwvdGltZS90aWNrLWNvbW1vbi5jCmluZGV4IDA1MWJjODAuLmVkMjI4ZWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stY29tbW9uLmMKKysrIGIva2VybmVsL3RpbWUvdGljay1jb21tb24uYwpAQCAtNTEsNyArNTEsMTEgQEAKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYgPSBfX3RoaXNfY3B1X3JlYWQodGlja19jcHVfZGV2aWNlLmV2dGRldik7CiAKLQlyZXR1cm4gZGV2ICYmIChkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCk7CisJaWYgKCFkZXYgfHwgIShkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCkpCisJCXJldHVybiAwOworCWlmICghKGRldi0+ZmVhdHVyZXMgJiBDTE9DS19FVlRfRkVBVF9DM1NUT1ApKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gdGlja19icm9hZGNhc3Rfb25lc2hvdF9hdmFpbGFibGUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaCBiL2tlcm5lbC90aW1lL3RpY2staW50ZXJuYWwuaAppbmRleCAyOTBlZWZiLi5mNjVkM2E3IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS90aWNrLWludGVybmFsLmgKKysrIGIva2VybmVsL3RpbWUvdGljay1pbnRlcm5hbC5oCkBAIC0zNiw2ICszNiw3IEBACiBleHRlcm4gaW50IHRpY2tfcmVzdW1lX2Jyb2FkY2FzdF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKTsKIGV4dGVybiBpbnQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hY3RpdmUodm9pZCk7CiBleHRlcm4gdm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpOworYm9vbCB0aWNrX2Jyb2FkY2FzdF9vbmVzaG90X2F2YWlsYWJsZSh2b2lkKTsKICMgZWxzZSAvKiBCUk9BRENBU1QgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2Jyb2FkY2FzdF9zZXR1cF9vbmVzaG90KHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmJjKQogewpAQCAtNDYsNiArNDcsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfc2h1dGRvd25fYnJvYWRjYXN0X29uZXNob3QodW5zaWduZWQgaW50ICpjcHVwKSB7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYWN0aXZlKHZvaWQpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX2NoZWNrX29uZXNob3RfYnJvYWRjYXN0KGludCBjcHUpIHsgfQorc3RhdGljIGlubGluZSBib29sIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYXZhaWxhYmxlKHZvaWQpIHsgcmV0dXJuIHRydWU7IH0KICMgZW5kaWYgLyogIUJST0FEQ0FTVCAqLwogCiAjZWxzZSAvKiAhT05FU0hPVCAqLwpAQCAtNzYsNiArNzgsNyBAQAogCXJldHVybiAwOwogfQogc3RhdGljIGlubGluZSBpbnQgdGlja19icm9hZGNhc3Rfb25lc2hvdF9hY3RpdmUodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBib29sIHRpY2tfYnJvYWRjYXN0X29uZXNob3RfYXZhaWxhYmxlKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZW5kaWYgLyogIVRJQ0tfT05FU0hPVCAqLwogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IDNlMjE2ZTAuLmM1NWVhMjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTY0Miw4ICs2NDIsNyBAQAogCX0KIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwKLQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwcmludGsoS0VSTl9JTkZPICJTd2l0Y2hlZCB0byBOT0h6IG1vZGUgb24gQ1BVICMlZFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIH0KIAogLyoKQEAgLTc5NSw4ICs3OTQsMTAgQEAKIAl9CiAKICNpZmRlZiBDT05GSUdfTk9fSFoKLQlpZiAodGlja19ub2h6X2VuYWJsZWQpCisJaWYgKHRpY2tfbm9oel9lbmFibGVkKSB7CiAJCXRzLT5ub2h6X21vZGUgPSBOT0haX01PREVfSElHSFJFUzsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU3dpdGNoZWQgdG8gTk9IeiBtb2RlIG9uIENQVSAjJWRcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJfQogI2VuZGlmCiB9CiAjZW5kaWYgLyogSElHSF9SRVNfVElNRVJTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMgYi9rZXJuZWwvdGltZS90aW1lcl9saXN0LmMKaW5kZXggMzJhMTlmOS4uMzI1ODQ1NSAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGltZXJfbGlzdC5jCisrKyBiL2tlcm5lbC90aW1lL3RpbWVyX2xpc3QuYwpAQCAtNDEsNyArNDEsNyBAQAogCWNoYXIgc3ltbmFtZVtLU1lNX05BTUVfTEVOXTsKIAogCWlmIChsb29rdXBfc3ltYm9sX25hbWUoKHVuc2lnbmVkIGxvbmcpc3ltLCBzeW1uYW1lKSA8IDApCi0JCVNFUV9wcmludGYobSwgIjwlcD4iLCBzeW0pOworCQlTRVFfcHJpbnRmKG0sICI8JXBLPiIsIHN5bSk7CiAJZWxzZQogCQlTRVFfcHJpbnRmKG0sICIlcyIsIHN5bW5hbWUpOwogfQpAQCAtMTEyLDcgKzExMiw3IEBACiBzdGF0aWMgdm9pZAogcHJpbnRfYmFzZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBocnRpbWVyX2Nsb2NrX2Jhc2UgKmJhc2UsIHU2NCBub3cpCiB7Ci0JU0VRX3ByaW50ZihtLCAiICAuYmFzZTogICAgICAgJXBcbiIsIGJhc2UpOworCVNFUV9wcmludGYobSwgIiAgLmJhc2U6ICAgICAgICVwS1xuIiwgYmFzZSk7CiAJU0VRX3ByaW50ZihtLCAiICAuaW5kZXg6ICAgICAgJWRcbiIsCiAJCQliYXNlLT5pbmRleCk7CiAJU0VRX3ByaW50ZihtLCAiICAucmVzb2x1dGlvbjogJUx1IG5zZWNzXG4iLApkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCA0M2NhOTkzLi5kNjQ1OTkyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtOTU5LDcgKzk1OSw3IEBACiAgKgogICogU3luY2hyb25pemF0aW9uIHJ1bGVzOiBDYWxsZXJzIG11c3QgcHJldmVudCByZXN0YXJ0aW5nIG9mIHRoZSB0aW1lciwKICAqIG90aGVyd2lzZSB0aGlzIGZ1bmN0aW9uIGlzIG1lYW5pbmdsZXNzLiBJdCBtdXN0IG5vdCBiZSBjYWxsZWQgZnJvbQotICogaGFyZGlycSBjb250ZXh0cy4gVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQKKyAqIGludGVycnVwdCBjb250ZXh0cy4gVGhlIGNhbGxlciBtdXN0IG5vdCBob2xkIGxvY2tzIHdoaWNoIHdvdWxkIHByZXZlbnQKICAqIGNvbXBsZXRpb24gb2YgdGhlIHRpbWVyJ3MgaGFuZGxlci4gVGhlIHRpbWVyJ3MgaGFuZGxlciBtdXN0IG5vdCBjYWxsCiAgKiBhZGRfdGltZXJfb24oKS4gVXBvbiBleGl0IHRoZSB0aW1lciBpcyBub3QgcXVldWVkIGFuZCB0aGUgaGFuZGxlciBpcwogICogbm90IHJ1bm5pbmcgb24gYW55IENQVS4KQEAgLTk2OSwxMCArOTY5LDEyIEBACiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewogI2lmZGVmIENPTkZJR19MT0NLREVQCi0JbG9jYWxfYmhfZGlzYWJsZSgpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja19tYXBfYWNxdWlyZSgmdGltZXItPmxvY2tkZXBfbWFwKTsKIAlsb2NrX21hcF9yZWxlYXNlKCZ0aW1lci0+bG9ja2RlcF9tYXApOwotCWxvY2FsX2JoX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICNlbmRpZgogCS8qCiAJICogZG9uJ3QgdXNlIGl0IGluIGhhcmRpcnEgY29udGV4dCwgYmVjYXVzZSBpdApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL2Jsa3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwppbmRleCAxNTM1NjJkLi5jYmFmZWQ3IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvYmxrdHJhY2UuYwpAQCAtMTM4LDYgKzEzOCwxMyBAQAogCQkgICAgICFibGtfdHJhY2VyX2VuYWJsZWQpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIElmIHRoZSBCTEtfVENfTk9USUZZIGFjdGlvbiBtYXNrIGlzbid0IHNldCwgZG9uJ3Qgc2VuZCBhbnkgbm90ZQorCSAqIG1lc3NhZ2UgdG8gdGhlIHRyYWNlLgorCSAqLworCWlmICghKGJ0LT5hY3RfbWFzayAmIEJMS19UQ19OT1RJRlkpKQorCQlyZXR1cm47CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJYnVmID0gcGVyX2NwdV9wdHIoYnQtPm1zZ19kYXRhLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CkBAIC0xODIwLDIxICsxODI3LDUgQEAKIAlyd2JzW2ldID0gJ1wwJzsKIH0KIAotdm9pZCBibGtfZmlsbF9yd2JzX3JxKGNoYXIgKnJ3YnMsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlpbnQgcncgPSBycS0+Y21kX2ZsYWdzICYgMHgwMzsKLQlpbnQgYnl0ZXM7Ci0KLQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9ESVNDQVJEKQotCQlydyB8PSBSRVFfRElTQ0FSRDsKLQotCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1NFQ1VSRSkKLQkJcncgfD0gUkVRX1NFQ1VSRTsKLQotCWJ5dGVzID0gYmxrX3JxX2J5dGVzKHJxKTsKLQotCWJsa19maWxsX3J3YnMocndicywgcncsIGJ5dGVzKTsKLX0KLQogI2VuZGlmIC8qIENPTkZJR19FVkVOVF9UUkFDSU5HICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwppbmRleCAzNWZkZTA5Li41ZjQ5OWUwNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIHN0YXRpYyB2b2lkIHRyYWNlX21vZHVsZV9hZGRfZXZlbnRzKHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKIAlzdHJ1Y3QgZnRyYWNlX21vZHVsZV9maWxlX29wcyAqZmlsZV9vcHMgPSBOVUxMOwotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbCwgKnN0YXJ0LCAqZW5kOworCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKmNhbGwsICoqc3RhcnQsICoqZW5kOwogCiAJc3RhcnQgPSBtb2QtPnRyYWNlX2V2ZW50czsKIAllbmQgPSBtb2QtPnRyYWNlX2V2ZW50cyArIG1vZC0+bnVtX3RyYWNlX2V2ZW50czsKQEAgLTEyOTcsNyArMTI5Nyw3IEBACiAJCXJldHVybjsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIHN0YXJ0LCBlbmQpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBtb2QsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIG1vZCwKIAkJCQkgICAgICAgJmZpbGVfb3BzLT5pZCwgJmZpbGVfb3BzLT5lbmFibGUsCiAJCQkJICAgICAgICZmaWxlX29wcy0+ZmlsdGVyLCAmZmlsZV9vcHMtPmZvcm1hdCk7CiAJfQpAQCAtMTM2Nyw4ICsxMzY3LDggQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCBfX3N0YXJ0X2Z0cmFjZV9ldmVudHNbXTsKLWV4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKK2V4dGVybiBzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKl9fc3RhcnRfZnRyYWNlX2V2ZW50c1tdOworZXh0ZXJuIHN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqX19zdG9wX2Z0cmFjZV9ldmVudHNbXTsKIAogc3RhdGljIGNoYXIgYm9vdHVwX2V2ZW50X2J1ZltDT01NQU5EX0xJTkVfU0laRV0gX19pbml0ZGF0YTsKIApAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAogc3RhdGljIF9faW5pdCBpbnQgZXZlbnRfdHJhY2VfaW5pdCh2b2lkKQogewotCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqY2FsbDsKKwlzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgKipjYWxsOwogCXN0cnVjdCBkZW50cnkgKmRfdHJhY2VyOwogCXN0cnVjdCBkZW50cnkgKmVudHJ5OwogCXN0cnVjdCBkZW50cnkgKmRfZXZlbnRzOwpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAkJcHJfd2FybmluZygidHJhY2luZzogRmFpbGVkIHRvIGFsbG9jYXRlIGNvbW1vbiBmaWVsZHMiKTsKIAogCWZvcl9lYWNoX2V2ZW50KGNhbGwsIF9fc3RhcnRfZnRyYWNlX2V2ZW50cywgX19zdG9wX2Z0cmFjZV9ldmVudHMpIHsKLQkJX190cmFjZV9hZGRfZXZlbnRfY2FsbChjYWxsLCBOVUxMLCAmZnRyYWNlX2V2ZW50X2lkX2ZvcHMsCisJCV9fdHJhY2VfYWRkX2V2ZW50X2NhbGwoKmNhbGwsIE5VTEwsICZmdHJhY2VfZXZlbnRfaWRfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9lbmFibGVfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9maWx0ZXJfZm9wcywKIAkJCQkgICAgICAgJmZ0cmFjZV9ldmVudF9mb3JtYXRfZm9wcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXhwb3J0LmMKaW5kZXggNGI3NGQ3MS4uYmJlZWMzMSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2V4cG9ydC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9leHBvcnQuYwpAQCAtMTYxLDEzICsxNjEsMTMgQEAKIAkuZmllbGRzCQkJPSBMSVNUX0hFQURfSU5JVChldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLmZpZWxkcyksXAogfTsJCQkJCQkJCQlcCiAJCQkJCQkJCQlcCi1zdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkCQkJCQkJXAotX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oNCkpKQkJCQkJCVwKLV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSBldmVudF8jI2NhbGwgPSB7CQlcCitzdHJ1Y3QgZnRyYWNlX2V2ZW50X2NhbGwgX191c2VkIGV2ZW50XyMjY2FsbCA9IHsJCQlcCiAJLm5hbWUJCQk9ICNjYWxsLAkJCQlcCiAJLmV2ZW50LnR5cGUJCT0gZXR5cGUsCQkJCVwKIAkuY2xhc3MJCQk9ICZldmVudF9jbGFzc19mdHJhY2VfIyNjYWxsLAkJXAogCS5wcmludF9mbXQJCT0gcHJpbnQsCQkJCVwKIH07CQkJCQkJCQkJXAorc3RydWN0IGZ0cmFjZV9ldmVudF9jYWxsIF9fdXNlZAkJCQkJCVwKK19fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9mdHJhY2VfZXZlbnRzIikpKSAqX19ldmVudF8jI2NhbGwgPSAmZXZlbnRfIyNjYWxsOwogCiAjaW5jbHVkZSAidHJhY2VfZW50cmllcy5oIgpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N5c2NhbGxzLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwppbmRleCBiNzA2NTI5Li41YzlmZTA4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3lzY2FsbHMuYwpAQCAtNTUsMjAgKzU1LDIxIEBACiAJLnJhd19pbml0CT0gaW5pdF9zeXNjYWxsX3RyYWNlLAogfTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdGFydF9zeXNjYWxsc19tZXRhZGF0YVtdOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CitleHRlcm4gc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKl9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGFbXTsKK2V4dGVybiBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqX19zdG9wX3N5c2NhbGxzX21ldGFkYXRhW107CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN5c2NhbGxzX21ldGFkYXRhOwogCi1zdGF0aWMgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKmZpbmRfc3lzY2FsbF9tZXRhKHVuc2lnbmVkIGxvbmcgc3lzY2FsbCkKK3N0YXRpYyBfX2luaXQgc3RydWN0IHN5c2NhbGxfbWV0YWRhdGEgKgorZmluZF9zeXNjYWxsX21ldGEodW5zaWduZWQgbG9uZyBzeXNjYWxsKQogewotCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICpzdGFydDsKLQlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqc3RvcDsKKwlzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKnN0YXJ0OworCXN0cnVjdCBzeXNjYWxsX21ldGFkYXRhICoqc3RvcDsKIAljaGFyIHN0cltLU1lNX1NZTUJPTF9MRU5dOwogCiAKLQlzdGFydCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7Ci0Jc3RvcCA9IChzdHJ1Y3Qgc3lzY2FsbF9tZXRhZGF0YSAqKV9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKKwlzdGFydCA9IF9fc3RhcnRfc3lzY2FsbHNfbWV0YWRhdGE7CisJc3RvcCA9IF9fc3RvcF9zeXNjYWxsc19tZXRhZGF0YTsKIAlrYWxsc3ltc19sb29rdXAoc3lzY2FsbCwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIAogCWZvciAoIDsgc3RhcnQgPCBzdG9wOyBzdGFydCsrKSB7CkBAIC03OCw4ICs3OSw4IEBACiAJCSAqIHdpdGggIlN5UyIgaW5zdGVhZCBvZiAic3lzIiwgbGVhZGluZyB0byBhbiB1bndhbnRlZAogCQkgKiBtaXNtYXRjaC4KIAkJICovCi0JCWlmIChzdGFydC0+bmFtZSAmJiAhc3RyY21wKHN0YXJ0LT5uYW1lICsgMywgc3RyICsgMykpCi0JCQlyZXR1cm4gc3RhcnQ7CisJCWlmICgoKnN0YXJ0KS0+bmFtZSAmJiAhc3RyY21wKCgqc3RhcnQpLT5uYW1lICsgMywgc3RyICsgMykpCisJCQlyZXR1cm4gKnN0YXJ0OwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZXBvaW50LmMgYi9rZXJuZWwvdHJhY2Vwb2ludC5jCmluZGV4IGU5NWVlN2YuLjY4MTg3YWYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZXBvaW50LmMKKysrIGIva2VybmVsL3RyYWNlcG9pbnQuYwpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCi1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdGFydF9fX3RyYWNlcG9pbnRzW107Ci1leHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX19zdG9wX19fdHJhY2Vwb2ludHNbXTsKK2V4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0IF9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzW107CitleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCBfX3N0b3BfX190cmFjZXBvaW50c19wdHJzW107CiAKIC8qIFNldCB0byAxIHRvIGVuYWJsZSB0cmFjZXBvaW50IGRlYnVnIG91dHB1dCAqLwogc3RhdGljIGNvbnN0IGludCB0cmFjZXBvaW50X2RlYnVnOwpAQCAtMjk4LDEwICsyOTgsMTAgQEAKICAqCiAgKiBVcGRhdGVzIHRoZSBwcm9iZSBjYWxsYmFjayBjb3JyZXNwb25kaW5nIHRvIGEgcmFuZ2Ugb2YgdHJhY2Vwb2ludHMuCiAgKi8KLXZvaWQKLXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK3ZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqYmVnaW4sCisJCQkJICAgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqZW5kKQogewotCXN0cnVjdCB0cmFjZXBvaW50ICppdGVyOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKml0ZXI7CiAJc3RydWN0IHRyYWNlcG9pbnRfZW50cnkgKm1hcmtfZW50cnk7CiAKIAlpZiAoIWJlZ2luKQpAQCAtMzA5LDEyICszMDksMTIgQEAKIAogCW11dGV4X2xvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKIAlmb3IgKGl0ZXIgPSBiZWdpbjsgaXRlciA8IGVuZDsgaXRlcisrKSB7Ci0JCW1hcmtfZW50cnkgPSBnZXRfdHJhY2Vwb2ludChpdGVyLT5uYW1lKTsKKwkJbWFya19lbnRyeSA9IGdldF90cmFjZXBvaW50KCgqaXRlciktPm5hbWUpOwogCQlpZiAobWFya19lbnRyeSkgewotCQkJc2V0X3RyYWNlcG9pbnQoJm1hcmtfZW50cnksIGl0ZXIsCisJCQlzZXRfdHJhY2Vwb2ludCgmbWFya19lbnRyeSwgKml0ZXIsCiAJCQkJCSEhbWFya19lbnRyeS0+cmVmY291bnQpOwogCQl9IGVsc2UgewotCQkJZGlzYWJsZV90cmFjZXBvaW50KGl0ZXIpOworCQkJZGlzYWJsZV90cmFjZXBvaW50KCppdGVyKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJnRyYWNlcG9pbnRzX211dGV4KTsKQEAgLTMyNiw4ICszMjYsOCBAQAogc3RhdGljIHZvaWQgdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVzKHZvaWQpCiB7CiAJLyogQ29yZSBrZXJuZWwgdHJhY2Vwb2ludHMgKi8KLQl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHMsCi0JCV9fc3RvcF9fX3RyYWNlcG9pbnRzKTsKKwl0cmFjZXBvaW50X3VwZGF0ZV9wcm9iZV9yYW5nZShfX3N0YXJ0X19fdHJhY2Vwb2ludHNfcHRycywKKwkJX19zdG9wX19fdHJhY2Vwb2ludHNfcHRycyk7CiAJLyogdHJhY2Vwb2ludHMgaW4gbW9kdWxlcy4gKi8KIAltb2R1bGVfdXBkYXRlX3RyYWNlcG9pbnRzKCk7CiB9CkBAIC01MTQsOCArNTE0LDggQEAKICAqIFdpbGwgcmV0dXJuIHRoZSBmaXJzdCB0cmFjZXBvaW50IGluIHRoZSByYW5nZSBpZiB0aGUgaW5wdXQgdHJhY2Vwb2ludCBpcwogICogTlVMTC4KICAqLwotaW50IHRyYWNlcG9pbnRfZ2V0X2l0ZXJfcmFuZ2Uoc3RydWN0IHRyYWNlcG9pbnQgKip0cmFjZXBvaW50LAotCXN0cnVjdCB0cmFjZXBvaW50ICpiZWdpbiwgc3RydWN0IHRyYWNlcG9pbnQgKmVuZCkKK2ludCB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKip0cmFjZXBvaW50LAorCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKmJlZ2luLCBzdHJ1Y3QgdHJhY2Vwb2ludCAqIGNvbnN0ICplbmQpCiB7CiAJaWYgKCEqdHJhY2Vwb2ludCAmJiBiZWdpbiAhPSBlbmQpIHsKIAkJKnRyYWNlcG9pbnQgPSBiZWdpbjsKQEAgLTUzNCw3ICs1MzQsOCBAQAogCS8qIENvcmUga2VybmVsIHRyYWNlcG9pbnRzICovCiAJaWYgKCFpdGVyLT5tb2R1bGUpIHsKIAkJZm91bmQgPSB0cmFjZXBvaW50X2dldF9pdGVyX3JhbmdlKCZpdGVyLT50cmFjZXBvaW50LAotCQkJCV9fc3RhcnRfX190cmFjZXBvaW50cywgX19zdG9wX19fdHJhY2Vwb2ludHMpOworCQkJCV9fc3RhcnRfX190cmFjZXBvaW50c19wdHJzLAorCQkJCV9fc3RvcF9fX3RyYWNlcG9pbnRzX3B0cnMpOwogCQlpZiAoZm91bmQpCiAJCQlnb3RvIGVuZDsKIAl9CkBAIC01ODUsOCArNTg2LDggQEAKIAlzd2l0Y2ggKHZhbCkgewogCWNhc2UgTU9EVUxFX1NUQVRFX0NPTUlORzoKIAljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKLQkJdHJhY2Vwb2ludF91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT50cmFjZXBvaW50cywKLQkJCW1vZC0+dHJhY2Vwb2ludHMgKyBtb2QtPm51bV90cmFjZXBvaW50cyk7CisJCXRyYWNlcG9pbnRfdXBkYXRlX3Byb2JlX3JhbmdlKG1vZC0+dHJhY2Vwb2ludHNfcHRycywKKwkJCW1vZC0+dHJhY2Vwb2ludHNfcHRycyArIG1vZC0+bnVtX3RyYWNlcG9pbnRzKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCBkN2ViZGY0Li4xOGJiMTU3IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KIAotaW50IHdhdGNoZG9nX2VuYWJsZWQ7CitpbnQgd2F0Y2hkb2dfZW5hYmxlZCA9IDE7CiBpbnQgX19yZWFkX21vc3RseSBzb2Z0bG9ja3VwX3RocmVzaCA9IDYwOwogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgd2F0Y2hkb2dfdG91Y2hfdHMpOwpAQCAtNDMsOSArNDMsNiBAQAogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2V2ZW50ICosIHdhdGNoZG9nX2V2KTsKICNlbmRpZgogCi1zdGF0aWMgaW50IG5vX3dhdGNoZG9nOwotCi0KIC8qIGJvb3QgY29tbWFuZHMgKi8KIC8qCiAgKiBTaG91bGQgd2UgcGFuaWMgd2hlbiBhIHNvZnQtbG9ja3VwIG9yIGhhcmQtbG9ja3VwIG9jY3VyczoKQEAgLTU4LDcgKzU1LDcgQEAKIAlpZiAoIXN0cm5jbXAoc3RyLCAicGFuaWMiLCA1KSkKIAkJaGFyZGxvY2t1cF9wYW5pYyA9IDE7CiAJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAiMCIsIDEpKQotCQlub193YXRjaGRvZyA9IDE7CisJCXdhdGNoZG9nX2VuYWJsZWQgPSAwOwogCXJldHVybiAxOwogfQogX19zZXR1cCgibm1pX3dhdGNoZG9nPSIsIGhhcmRsb2NrdXBfcGFuaWNfc2V0dXApOwpAQCAtNzcsNyArNzQsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBub3dhdGNoZG9nX3NldHVwKGNoYXIgKnN0cikKIHsKLQlub193YXRjaGRvZyA9IDE7CisJd2F0Y2hkb2dfZW5hYmxlZCA9IDA7CiAJcmV0dXJuIDE7CiB9CiBfX3NldHVwKCJub3dhdGNoZG9nIiwgbm93YXRjaGRvZ19zZXR1cCk7CkBAIC04NSw3ICs4Miw3IEBACiAvKiBkZXByZWNhdGVkICovCiBzdGF0aWMgaW50IF9faW5pdCBub3NvZnRsb2NrdXBfc2V0dXAoY2hhciAqc3RyKQogewotCW5vX3dhdGNoZG9nID0gMTsKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc29mdGxvY2t1cCIsIG5vc29mdGxvY2t1cF9zZXR1cCk7CkBAIC0zNjYsOCArMzYzLDE0IEBACiAJCWdvdG8gb3V0X3NhdmU7CiAJfQogCi0JcHJpbnRrKEtFUk5fRVJSICJOTUkgd2F0Y2hkb2cgZGlzYWJsZWQgZm9yIGNwdSVpOiB1bmFibGUgdG8gY3JlYXRlIHBlcmYgZXZlbnQ6ICVsZFxuIiwKLQkgICAgICAgY3B1LCBQVFJfRVJSKGV2ZW50KSk7CisKKwkvKiB2YXJ5IHRoZSBLRVJOIGxldmVsIGJhc2VkIG9uIHRoZSByZXR1cm5lZCBlcnJubyAqLworCWlmIChQVFJfRVJSKGV2ZW50KSA9PSAtRU9QTk9UU1VQUCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IG5vdCBzdXBwb3J0ZWQgKG5vIExBUElDPylcbiIsIGNwdSk7CisJZWxzZSBpZiAoUFRSX0VSUihldmVudCkgPT0gLUVOT0VOVCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IGhhcmR3YXJlIGV2ZW50cyBub3QgZW5hYmxlZFxuIiwgY3B1KTsKKwllbHNlCisJCXByaW50ayhLRVJOX0VSUiAiTk1JIHdhdGNoZG9nIGRpc2FibGVkIChjcHUlaSk6IHVuYWJsZSB0byBjcmVhdGUgcGVyZiBldmVudDogJWxkXG4iLCBjcHUsIFBUUl9FUlIoZXZlbnQpKTsKIAlyZXR1cm4gUFRSX0VSUihldmVudCk7CiAKIAkvKiBzdWNjZXNzIHBhdGggKi8KQEAgLTQzMiw5ICs0MzUsNiBAQAogCQl3YWtlX3VwX3Byb2Nlc3MocCk7CiAJfQogCi0JLyogaWYgYW55IGNwdSBzdWNjZWVkcywgd2F0Y2hkb2cgaXMgY29uc2lkZXJlZCBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCi0Jd2F0Y2hkb2dfZW5hYmxlZCA9IDE7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDYyLDEyICs0NjIsMTYgQEAKIHN0YXRpYyB2b2lkIHdhdGNoZG9nX2VuYWJsZV9hbGxfY3B1cyh2b2lkKQogewogCWludCBjcHU7Ci0JaW50IHJlc3VsdCA9IDA7CisKKwl3YXRjaGRvZ19lbmFibGVkID0gMDsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlyZXN1bHQgKz0gd2F0Y2hkb2dfZW5hYmxlKGNwdSk7CisJCWlmICghd2F0Y2hkb2dfZW5hYmxlKGNwdSkpCisJCQkvKiBpZiBhbnkgY3B1IHN1Y2NlZWRzLCB3YXRjaGRvZyBpcyBjb25zaWRlcmVkCisJCQkgICBlbmFibGVkIGZvciB0aGUgc3lzdGVtICovCisJCQl3YXRjaGRvZ19lbmFibGVkID0gMTsKIAotCWlmIChyZXN1bHQpCisJaWYgKCF3YXRjaGRvZ19lbmFibGVkKQogCQlwcmludGsoS0VSTl9FUlIgIndhdGNoZG9nOiBmYWlsZWQgdG8gYmUgZW5hYmxlZCBvbiBzb21lIGNwdXNcbiIpOwogCiB9CkBAIC00NzYsOSArNDgwLDYgQEAKIHsKIAlpbnQgY3B1OwogCi0JaWYgKG5vX3dhdGNoZG9nKQotCQlyZXR1cm47Ci0KIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKIAkJd2F0Y2hkb2dfZGlzYWJsZShjcHUpOwogCkBAIC00OTgsMTAgKzQ5OSwxMiBAQAogewogCXByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbmd0aCwgcHBvcyk7CiAKLQlpZiAod2F0Y2hkb2dfZW5hYmxlZCkKLQkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7Ci0JZWxzZQotCQl3YXRjaGRvZ19kaXNhYmxlX2FsbF9jcHVzKCk7CisJaWYgKHdyaXRlKSB7CisJCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQkJd2F0Y2hkb2dfZW5hYmxlX2FsbF9jcHVzKCk7CisJCWVsc2UKKwkJCXdhdGNoZG9nX2Rpc2FibGVfYWxsX2NwdXMoKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzMCw3ICs1MzMsOCBAQAogCQlicmVhazsKIAljYXNlIENQVV9PTkxJTkU6CiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJZXJyID0gd2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSk7CisJCWlmICh3YXRjaGRvZ19lbmFibGVkKQorCQkJZXJyID0gd2F0Y2hkb2dfZW5hYmxlKGhvdGNwdSk7CiAJCWJyZWFrOwogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgpAQCAtNTU1LDkgKzU1OSw2IEBACiAJdm9pZCAqY3B1ID0gKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCk7CiAJaW50IGVycjsKIAotCWlmIChub193YXRjaGRvZykKLQkJcmV0dXJuOwotCiAJZXJyID0gY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfVVBfUFJFUEFSRSwgY3B1KTsKIAlXQVJOX09OKG5vdGlmaWVyX3RvX2Vycm5vKGVycikpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggMTE4NjlmYS4uZWU2NTc4YiAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtNzksNyArNzksOSBAQAogCU1BWF9JRExFX1dPUktFUlNfUkFUSU8JPSA0LAkJLyogMS80IG9mIGJ1c3kgY2FuIGJlIGlkbGUgKi8KIAlJRExFX1dPUktFUl9USU1FT1VUCT0gMzAwICogSFosCS8qIGtlZXAgaWRsZSBvbmVzIGZvciA1IG1pbnMgKi8KIAotCU1BWURBWV9JTklUSUFMX1RJTUVPVVQJPSBIWiAvIDEwMCwJLyogY2FsbCBmb3IgaGVscCBhZnRlciAxMG1zICovCisJTUFZREFZX0lOSVRJQUxfVElNRU9VVCAgPSBIWiAvIDEwMCA+PSAyID8gSFogLyAxMDAgOiAyLAorCQkJCQkJLyogY2FsbCBmb3IgaGVscCBhZnRlciAxMG1zCisJCQkJCQkgICAobWluIHR3byB0aWNrcykgKi8KIAlNQVlEQVlfSU5URVJWQUwJCT0gSFogLyAxMCwJLyogYW5kIHRoZW4gZXZlcnkgMTAwbXMgKi8KIAlDUkVBVEVfQ09PTERPV04JCT0gSFosCQkvKiB0aW1lIHRvIGJyZWF0aCBhZnRlciBmYWlsICovCiAJVFJVU1RFRV9DT09MRE9XTgk9IEhaIC8gMTAsCS8qIGZvciB0cnVzdGVlIGRyYWluaW5nICovCkBAIC0yMDQ3LDYgKzIwNDksMTUgQEAKIAkJCQltb3ZlX2xpbmtlZF93b3Jrcyh3b3JrLCBzY2hlZHVsZWQsICZuKTsKIAogCQlwcm9jZXNzX3NjaGVkdWxlZF93b3JrcyhyZXNjdWVyKTsKKworCQkvKgorCQkgKiBMZWF2ZSB0aGlzIGdjd3EuICBJZiBrZWVwX3dvcmtpbmcoKSBpcyAldHJ1ZSwgbm90aWZ5IGEKKwkJICogcmVndWxhciB3b3JrZXI7IG90aGVyd2lzZSwgd2UgZW5kIHVwIHdpdGggMCBjb25jdXJyZW5jeQorCQkgKiBhbmQgc3RhbGxpbmcgdGhlIGV4ZWN1dGlvbi4KKwkJICovCisJCWlmIChrZWVwX3dvcmtpbmcoZ2N3cSkpCisJCQl3YWtlX3VwX3dvcmtlcihnY3dxKTsKKwogCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOwogCX0KIApAQCAtMjk1Niw3ICsyOTY3LDcgQEAKIAkgKi8KIAlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKIAotCWlmICh3b3JrcXVldWVfZnJlZXppbmcgJiYgd3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkKKwlpZiAod29ya3F1ZXVlX2ZyZWV6aW5nICYmIHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkKIAkJZm9yX2VhY2hfY3dxX2NwdShjcHUsIHdxKQogCQkJZ2V0X2N3cShjcHUsIHdxKS0+bWF4X2FjdGl2ZSA9IDA7CiAKQEAgLTMwNjgsNyArMzA3OSw3IEBACiAKIAkJc3Bpbl9sb2NrX2lycSgmZ2N3cS0+bG9jayk7CiAKLQkJaWYgKCEod3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkgfHwKKwkJaWYgKCEod3EtPmZsYWdzICYgV1FfRlJFRVpBQkxFKSB8fAogCQkgICAgIShnY3dxLT5mbGFncyAmIEdDV1FfRlJFRVpJTkcpKQogCQkJZ2V0X2N3cShnY3dxLT5jcHUsIHdxKS0+bWF4X2FjdGl2ZSA9IG1heF9hY3RpdmU7CiAKQEAgLTMzMTgsNyArMzMyOSw3IEBACiAJICogd2FudCB0byBnZXQgaXQgb3ZlciB3aXRoIEFTQVAgLSBzcGFtIHJlc2N1ZXJzLCB3YWtlIHVwIGFzCiAJICogbWFueSBpZGxlcnMgYXMgbmVjZXNzYXJ5IGFuZCBjcmVhdGUgbmV3IG9uZXMgdGlsbCB0aGUKIAkgKiB3b3JrbGlzdCBpcyBlbXB0eS4gIE5vdGUgdGhhdCBpZiB0aGUgZ2N3cSBpcyBmcm96ZW4sIHRoZXJlCi0JICogbWF5IGJlIGZyb3plbiB3b3JrcyBpbiBmcmVlemVhYmxlIGN3cXMuICBEb24ndCBkZWNsYXJlCisJICogbWF5IGJlIGZyb3plbiB3b3JrcyBpbiBmcmVlemFibGUgY3dxcy4gIERvbid0IGRlY2xhcmUKIAkgKiBjb21wbGV0aW9uIHdoaWxlIGZyb3plbi4KIAkgKi8KIAl3aGlsZSAoZ2N3cS0+bnJfd29ya2VycyAhPSBnY3dxLT5ucl9pZGxlIHx8CkBAIC0zNTc2LDkgKzM1ODcsOSBAQAogLyoqCiAgKiBmcmVlemVfd29ya3F1ZXVlc19iZWdpbiAtIGJlZ2luIGZyZWV6aW5nIHdvcmtxdWV1ZXMKICAqCi0gKiBTdGFydCBmcmVlemluZyB3b3JrcXVldWVzLiAgQWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLCBhbGwKLSAqIGZyZWV6ZWFibGUgd29ya3F1ZXVlcyB3aWxsIHF1ZXVlIG5ldyB3b3JrcyB0byB0aGVpciBmcm96ZW5fd29ya3MKLSAqIGxpc3QgaW5zdGVhZCBvZiBnY3dxLT53b3JrbGlzdC4KKyAqIFN0YXJ0IGZyZWV6aW5nIHdvcmtxdWV1ZXMuICBBZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMsIGFsbCBmcmVlemFibGUKKyAqIHdvcmtxdWV1ZXMgd2lsbCBxdWV1ZSBuZXcgd29ya3MgdG8gdGhlaXIgZnJvemVuX3dvcmtzIGxpc3QgaW5zdGVhZCBvZgorICogZ2N3cS0+d29ya2xpc3QuCiAgKgogICogQ09OVEVYVDoKICAqIEdyYWJzIGFuZCByZWxlYXNlcyB3b3JrcXVldWVfbG9jayBhbmQgZ2N3cS0+bG9jaydzLgpAQCAtMzYwNCw3ICszNjE1LDcgQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpIHsKIAkJCXN0cnVjdCBjcHVfd29ya3F1ZXVlX3N0cnVjdCAqY3dxID0gZ2V0X2N3cShjcHUsIHdxKTsKIAotCQkJaWYgKGN3cSAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkVBQkxFKQorCQkJaWYgKGN3cSAmJiB3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpCiAJCQkJY3dxLT5tYXhfYWN0aXZlID0gMDsKIAkJfQogCkBAIC0zNjE1LDcgKzM2MjYsNyBAQAogfQogCiAvKioKLSAqIGZyZWV6ZV93b3JrcXVldWVzX2J1c3kgLSBhcmUgZnJlZXplYWJsZSB3b3JrcXVldWVzIHN0aWxsIGJ1c3k/CisgKiBmcmVlemVfd29ya3F1ZXVlc19idXN5IC0gYXJlIGZyZWV6YWJsZSB3b3JrcXVldWVzIHN0aWxsIGJ1c3k/CiAgKgogICogQ2hlY2sgd2hldGhlciBmcmVlemluZyBpcyBjb21wbGV0ZS4gIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQKICAqIGJldHdlZW4gZnJlZXplX3dvcmtxdWV1ZXNfYmVnaW4oKSBhbmQgdGhhd193b3JrcXVldWVzKCkuCkBAIC0zNjI0LDggKzM2MzUsOCBAQAogICogR3JhYnMgYW5kIHJlbGVhc2VzIHdvcmtxdWV1ZV9sb2NrLgogICoKICAqIFJFVFVSTlM6Ci0gKiAldHJ1ZSBpZiBzb21lIGZyZWV6ZWFibGUgd29ya3F1ZXVlcyBhcmUgc3RpbGwgYnVzeS4gICVmYWxzZSBpZgotICogZnJlZXppbmcgaXMgY29tcGxldGUuCisgKiAldHJ1ZSBpZiBzb21lIGZyZWV6YWJsZSB3b3JrcXVldWVzIGFyZSBzdGlsbCBidXN5LiAgJWZhbHNlIGlmIGZyZWV6aW5nCisgKiBpcyBjb21wbGV0ZS4KICAqLwogYm9vbCBmcmVlemVfd29ya3F1ZXVlc19idXN5KHZvaWQpCiB7CkBAIC0zNjQ1LDcgKzM2NTYsNyBAQAogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewogCQkJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EgPSBnZXRfY3dxKGNwdSwgd3EpOwogCi0JCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaRUFCTEUpKQorCQkJaWYgKCFjd3EgfHwgISh3cS0+ZmxhZ3MgJiBXUV9GUkVFWkFCTEUpKQogCQkJCWNvbnRpbnVlOwogCiAJCQlCVUdfT04oY3dxLT5ucl9hY3RpdmUgPCAwKTsKQEAgLTM2OTAsNyArMzcwMSw3IEBACiAJCWxpc3RfZm9yX2VhY2hfZW50cnkod3EsICZ3b3JrcXVldWVzLCBsaXN0KSB7CiAJCQlzdHJ1Y3QgY3B1X3dvcmtxdWV1ZV9zdHJ1Y3QgKmN3cSA9IGdldF9jd3EoY3B1LCB3cSk7CiAKLQkJCWlmICghY3dxIHx8ICEod3EtPmZsYWdzICYgV1FfRlJFRVpFQUJMRSkpCisJCQlpZiAoIWN3cSB8fCAhKHdxLT5mbGFncyAmIFdRX0ZSRUVaQUJMRSkpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIHJlc3RvcmUgbWF4X2FjdGl2ZSBhbmQgcmVwb3B1bGF0ZSB3b3JrbGlzdCAqLwpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCAzOTY3YzIzNS4uMmI5NzQxOCAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTgwNSw3ICs4MDUsNyBAQAogY29uZmlnIEZSQU1FX1BPSU5URVIKIAlib29sICJDb21waWxlIHRoZSBrZXJuZWwgd2l0aCBmcmFtZSBwb2ludGVycyIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiBcCi0JCShDUklTIHx8IE02OEsgfHwgTTY4S05PTU1VIHx8IEZSViB8fCBVTUwgfHwgXAorCQkoQ1JJUyB8fCBNNjhLIHx8IEZSViB8fCBVTUwgfHwgXAogCQkgQVZSMzIgfHwgU1VQRVJIIHx8IEJMQUNLRklOIHx8IE1OMTAzMDApIHx8IFwKIAkJQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTCiAJZGVmYXVsdCB5IGlmIChERUJVR19JTkZPICYmIFVNTCkgfHwgQVJDSF9XQU5UX0ZSQU1FX1BPSU5URVJTCmRpZmYgLS1naXQgYS9saWIvbGlzdF9kZWJ1Zy5jIGIvbGliL2xpc3RfZGVidWcuYwppbmRleCAzNDRjNzEwLi5iODAyOWE1IDEwMDY0NAotLS0gYS9saWIvbGlzdF9kZWJ1Zy5jCisrKyBiL2xpYi9saXN0X2RlYnVnLmMKQEAgLTM1LDYgKzM1LDMxIEBACiB9CiBFWFBPUlRfU1lNQk9MKF9fbGlzdF9hZGQpOwogCit2b2lkIF9fbGlzdF9kZWxfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgKm5leHQ7CisKKwlwcmV2ID0gZW50cnktPnByZXY7CisJbmV4dCA9IGVudHJ5LT5uZXh0OworCisJaWYgKFdBUk4obmV4dCA9PSBMSVNUX1BPSVNPTjEsCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLCAlcC0+bmV4dCBpcyBMSVNUX1BPSVNPTjEgKCVwKVxuIiwKKwkJZW50cnksIExJU1RfUE9JU09OMSkgfHwKKwkgICAgV0FSTihwcmV2ID09IExJU1RfUE9JU09OMiwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24sICVwLT5wcmV2IGlzIExJU1RfUE9JU09OMiAoJXApXG4iLAorCQllbnRyeSwgTElTVF9QT0lTT04yKSB8fAorCSAgICBXQVJOKHByZXYtPm5leHQgIT0gZW50cnksCisJCSJsaXN0X2RlbCBjb3JydXB0aW9uLiBwcmV2LT5uZXh0IHNob3VsZCBiZSAlcCwgIgorCQkiYnV0IHdhcyAlcFxuIiwgZW50cnksIHByZXYtPm5leHQpIHx8CisJICAgIFdBUk4obmV4dC0+cHJldiAhPSBlbnRyeSwKKwkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCisJCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgbmV4dC0+cHJldikpCisJCXJldHVybjsKKworCV9fbGlzdF9kZWwocHJldiwgbmV4dCk7Cit9CitFWFBPUlRfU1lNQk9MKF9fbGlzdF9kZWxfZW50cnkpOworCiAvKioKICAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCiAgKiBAZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgpAQCAtNDMsMTkgKzY4LDcgQEAKICAqLwogdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKIHsKLQlXQVJOKGVudHJ5LT5uZXh0ID09IExJU1RfUE9JU09OMSwKLQkJImxpc3RfZGVsIGNvcnJ1cHRpb24sIG5leHQgaXMgTElTVF9QT0lTT04xICglcClcbiIsCi0JCUxJU1RfUE9JU09OMSk7Ci0JV0FSTihlbnRyeS0+bmV4dCAhPSBMSVNUX1BPSVNPTjEgJiYgZW50cnktPnByZXYgPT0gTElTVF9QT0lTT04yLAotCQkibGlzdF9kZWwgY29ycnVwdGlvbiwgcHJldiBpcyBMSVNUX1BPSVNPTjIgKCVwKVxuIiwKLQkJTElTVF9QT0lTT04yKTsKLQlXQVJOKGVudHJ5LT5wcmV2LT5uZXh0ICE9IGVudHJ5LAotCQkibGlzdF9kZWwgY29ycnVwdGlvbi4gcHJldi0+bmV4dCBzaG91bGQgYmUgJXAsICIKLQkJImJ1dCB3YXMgJXBcbiIsIGVudHJ5LCBlbnRyeS0+cHJldi0+bmV4dCk7Ci0JV0FSTihlbnRyeS0+bmV4dC0+cHJldiAhPSBlbnRyeSwKLQkJImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCi0JCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgZW50cnktPm5leHQtPnByZXYpOwotCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwlfX2xpc3RfZGVsX2VudHJ5KGVudHJ5KTsKIAllbnRyeS0+bmV4dCA9IExJU1RfUE9JU09OMTsKIAllbnRyeS0+cHJldiA9IExJU1RfUE9JU09OMjsKIH0KZGlmZiAtLWdpdCBhL2xpYi9ubGF0dHIuYyBiL2xpYi9ubGF0dHIuYwppbmRleCA1MDIxY2JjLi5hYzA5ZjIyIDEwMDY0NAotLS0gYS9saWIvbmxhdHRyLmMKKysrIGIvbGliL25sYXR0ci5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIHsKIAlpbnQgaSwgbGVuID0gMDsKIAotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrLCBwKyspIHsKIAkJaWYgKHAtPmxlbikKIAkJCWxlbiArPSBubGFfdG90YWxfc2l6ZShwLT5sZW4pOwogCQllbHNlIGlmIChubGFfYXR0cl9taW5sZW5bcC0+dHlwZV0pCmRpZmYgLS1naXQgYS9saWIvcmFkaXgtdHJlZS5jIGIvbGliL3JhZGl4LXRyZWUuYwppbmRleCA1MDg2YmI5Li43ZWEyZTAzIDEwMDY0NAotLS0gYS9saWIvcmFkaXgtdHJlZS5jCisrKyBiL2xpYi9yYWRpeC10cmVlLmMKQEAgLTczNiwxMCArNzM2LDExIEBACiAJCX0KIAl9CiAJLyoKLQkgKiBUaGUgaWZ0YWcgbXVzdCBoYXZlIGJlZW4gc2V0IHNvbWV3aGVyZSBiZWNhdXNlIG90aGVyd2lzZQotCSAqIHdlIHdvdWxkIHJldHVybiBpbW1lZGlhdGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uCisJICogV2UgbmVlZCBub3QgdG8gdGFnIHRoZSByb290IHRhZyBpZiB0aGVyZSBpcyBubyB0YWcgd2hpY2ggaXMgc2V0IHdpdGgKKwkgKiBzZXR0YWcgd2l0aGluIHRoZSByYW5nZSBmcm9tICpmaXJzdF9pbmRleHAgdG8gbGFzdF9pbmRleC4KIAkgKi8KLQlyb290X3RhZ19zZXQocm9vdCwgc2V0dGFnKTsKKwlpZiAodGFnZ2VkID4gMCkKKwkJcm9vdF90YWdfc2V0KHJvb3QsIHNldHRhZyk7CiAJKmZpcnN0X2luZGV4cCA9IGluZGV4OwogCiAJcmV0dXJuIHRhZ2dlZDsKZGlmZiAtLWdpdCBhL2xpYi9yYnRyZWUuYyBiL2xpYi9yYnRyZWUuYwppbmRleCA0NjkzZjc5Li5hMTZiZTE5IDEwMDY0NAotLS0gYS9saWIvcmJ0cmVlLmMKKysrIGIvbGliL3JidHJlZS5jCkBAIC0zMTUsNiArMzE1LDcgQEAKIAogCXJiX2F1Z21lbnRfcGF0aChub2RlLCBmdW5jLCBkYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0wocmJfYXVnbWVudF9pbnNlcnQpOwogCiAvKgogICogYmVmb3JlIHJlbW92aW5nIHRoZSBub2RlLCBmaW5kIHRoZSBkZWVwZXN0IG5vZGUgb24gdGhlIHJlYmFsYW5jZSBwYXRoCkBAIC0zNDAsNiArMzQxLDcgQEAKIAogCXJldHVybiBkZWVwZXN0OwogfQorRVhQT1JUX1NZTUJPTChyYl9hdWdtZW50X2VyYXNlX2JlZ2luKTsKIAogLyoKICAqIGFmdGVyIHJlbW92YWwsIHVwZGF0ZSB0aGUgdHJlZSB0byBhY2NvdW50IGZvciB0aGUgcmVtb3ZlZCBlbnRyeQpAQCAtMzUwLDYgKzM1Miw3IEBACiAJaWYgKG5vZGUpCiAJCXJiX2F1Z21lbnRfcGF0aChub2RlLCBmdW5jLCBkYXRhKTsKIH0KK0VYUE9SVF9TWU1CT0wocmJfYXVnbWVudF9lcmFzZV9lbmQpOwogCiAvKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBub2RlIChpbiBzb3J0IG9yZGVyKSBvZiB0aGUgdHJlZS4KZGlmZiAtLWdpdCBhL2xpYi9zd2lvdGxiLmMgYi9saWIvc3dpb3RsYi5jCmluZGV4IGM0N2JiZTEuLjkzY2EwOGIgMTAwNjQ0Ci0tLSBhL2xpYi9zd2lvdGxiLmMKKysrIGIvbGliL3N3aW90bGIuYwpAQCAtNjg2LDggKzY4NiwxMCBAQAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaXMgRE1BJ2JsZQogCSAqLwotCWlmICghZG1hX2NhcGFibGUoZGV2LCBkZXZfYWRkciwgc2l6ZSkpCi0JCXBhbmljKCJtYXBfc2luZ2xlOiBib3VuY2UgYnVmZmVyIGlzIG5vdCBETUEnYmxlIik7CisJaWYgKCFkbWFfY2FwYWJsZShkZXYsIGRldl9hZGRyLCBzaXplKSkgeworCQlzd2lvdGxiX3RibF91bm1hcF9zaW5nbGUoZGV2LCBtYXAsIHNpemUsIGRpcik7CisJCWRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhkZXYsIGlvX3RsYl9vdmVyZmxvd19idWZmZXIpOworCX0KIAogCXJldHVybiBkZXZfYWRkcjsKIH0KZGlmZiAtLWdpdCBhL2xpYi90ZXh0c2VhcmNoLmMgYi9saWIvdGV4dHNlYXJjaC5jCmluZGV4IGQ2MDgzMzEuLmUwY2MwMTQgMTAwNjQ0Ci0tLSBhL2xpYi90ZXh0c2VhcmNoLmMKKysrIGIvbGliL3RleHRzZWFyY2guYwpAQCAtMTMsNyArMTMsNyBAQAogICoKICAqIElOVFJPRFVDVElPTgogICoKLSAqICAgVGhlIHRleHRzZWFyY2ggaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZXMgdGV4dCBzZWFyY2hpbmcgZmFjaXRpbGllcyBmb3IKKyAqICAgVGhlIHRleHRzZWFyY2ggaW5mcmFzdHJ1Y3R1cmUgcHJvdmlkZXMgdGV4dCBzZWFyY2hpbmcgZmFjaWxpdGllcyBmb3IKICAqICAgYm90aCBsaW5lYXIgYW5kIG5vbi1saW5lYXIgZGF0YS4gSW5kaXZpZHVhbCBzZWFyY2ggYWxnb3JpdGhtcyBhcmUKICAqICAgaW1wbGVtZW50ZWQgaW4gbW9kdWxlcyBhbmQgY2hvc2VuIGJ5IHRoZSB1c2VyLgogICoKQEAgLTQzLDcgKzQzLDcgQEAKICAqICAgICAgIHRvIHRoZSBhbGdvcml0aG0gdG8gc3RvcmUgcGVyc2lzdGVudCB2YXJpYWJsZXMuCiAgKiAgICg0KSBDb3JlIGV2ZW50dWFsbHkgcmVzZXRzIHRoZSBzZWFyY2ggb2Zmc2V0IGFuZCBmb3J3YXJkcyB0aGUgZmluZCgpCiAgKiAgICAgICByZXF1ZXN0IHRvIHRoZSBhbGdvcml0aG0uCi0gKiAgICg1KSBBbGdvcml0aG0gY2FsbHMgZ2V0X25leHRfYmxvY2soKSBwcm92aWRlZCBieSB0aGUgdXNlciBjb250aW5vdXNseQorICogICAoNSkgQWxnb3JpdGhtIGNhbGxzIGdldF9uZXh0X2Jsb2NrKCkgcHJvdmlkZWQgYnkgdGhlIHVzZXIgY29udGludW91c2x5CiAgKiAgICAgICB0byBmZXRjaCB0aGUgZGF0YSB0byBiZSBzZWFyY2hlZCBpbiBibG9jayBieSBibG9jay4KICAqICAgKDYpIEFsZ29yaXRobSBpbnZva2VzIGZpbmlzaCgpIGFmdGVyIHRoZSBsYXN0IGNhbGwgdG8gZ2V0X25leHRfYmxvY2sKICAqICAgICAgIHRvIGNsZWFuIHVwIGFueSBsZWZ0b3ZlcnMgZnJvbSBnZXRfbmV4dF9ibG9jay4gKE9wdGlvbmFsKQpAQCAtNTgsMTUgKzU4LDE1IEBACiAgKiAgIHRoZSBwYXR0ZXJuIHRvIGxvb2sgZm9yIGFuZCBmbGFncy4gQXMgYSBmbGFnLCB5b3UgY2FuIHNldCBUU19JR05PUkVDQVNFCiAgKiAgIHRvIHBlcmZvcm0gY2FzZSBpbnNlbnNpdGl2ZSBtYXRjaGluZy4gQnV0IGl0IG1pZ2h0IHNsb3cgZG93bgogICogICBwZXJmb3JtYW5jZSBvZiBhbGdvcml0aG0sIHNvIHlvdSBzaG91bGQgdXNlIGl0IGF0IG93biB5b3VyIHJpc2suCi0gKiAgIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIG1heSB0aGVuIGJlIHVzZWQgZm9yIGFuIGFyYml0YXJ5CisgKiAgIFRoZSByZXR1cm5lZCBjb25maWd1cmF0aW9uIG1heSB0aGVuIGJlIHVzZWQgZm9yIGFuIGFyYml0cmFyeQogICogICBhbW91bnQgb2YgdGltZXMgYW5kIGV2ZW4gaW4gcGFyYWxsZWwgYXMgbG9uZyBhcyBhIHNlcGFyYXRlIHN0cnVjdAogICogICB0c19zdGF0ZSB2YXJpYWJsZSBpcyBwcm92aWRlZCB0byBldmVyeSBpbnN0YW5jZS4KICAqCiAgKiAgIFRoZSBhY3R1YWwgc2VhcmNoIGlzIHBlcmZvcm1lZCBieSBlaXRoZXIgY2FsbGluZyB0ZXh0c2VhcmNoX2ZpbmRfLQogICogICBjb250aW51b3VzKCkgZm9yIGxpbmVhciBkYXRhIG9yIGJ5IHByb3ZpZGluZyBhbiBvd24gZ2V0X25leHRfYmxvY2soKQogICogICBpbXBsZW1lbnRhdGlvbiBhbmQgY2FsbGluZyB0ZXh0c2VhcmNoX2ZpbmQoKS4gQm90aCBmdW5jdGlvbnMgcmV0dXJuCi0gKiAgIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgcGF0ZXJuIG9yIFVJTlRfTUFYIGlmCi0gKiAgIG5vIG1hdGNoIHdhcyBmb3VuZC4gU3Vic2VxdWVudCBvY2N1cmVuY2VzIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nCisgKiAgIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgcGF0dGVybiBvciBVSU5UX01BWCBpZgorICogICBubyBtYXRjaCB3YXMgZm91bmQuIFN1YnNlcXVlbnQgb2NjdXJyZW5jZXMgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKICAqICAgdGV4dHNlYXJjaF9uZXh0KCkgcmVnYXJkbGVzcyBvZiB0aGUgbGluZWFyaXR5IG9mIHRoZSBkYXRhLgogICoKICAqICAgT25jZSB5b3UncmUgZG9uZSB1c2luZyBhIGNvbmZpZ3VyYXRpb24gaXQgbXVzdCBiZSBnaXZlbiBiYWNrIHZpYQpkaWZmIC0tZ2l0IGEvbW0vS2NvbmZpZyBiL21tL0tjb25maWcKaW5kZXggM2FkNDgzYi4uZTljMGM2MSAxMDA2NDQKLS0tIGEvbW0vS2NvbmZpZworKysgYi9tbS9LY29uZmlnCkBAIC0xNzksNyArMTc5LDcgQEAKIGNvbmZpZyBDT01QQUNUSU9OCiAJYm9vbCAiQWxsb3cgZm9yIG1lbW9yeSBjb21wYWN0aW9uIgogCXNlbGVjdCBNSUdSQVRJT04KLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBIVUdFVExCX1BBR0UgJiYgTU1VCisJZGVwZW5kcyBvbiBNTVUKIAloZWxwCiAJICBBbGxvd3MgdGhlIGNvbXBhY3Rpb24gb2YgbWVtb3J5IGZvciB0aGUgYWxsb2NhdGlvbiBvZiBodWdlIHBhZ2VzLgogCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCBlMTg3NDU0Li5kYmU5OWE1IDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCisrKyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTY1MCwxMCArNjUwLDEwIEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKmFsbG9jX2h1Z2VwYWdlX3ZtYShpbnQgZGVmcmFnLAogCQkJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBoYWRkcikKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyBoYWRkciwgaW50IG5kKQogewogCXJldHVybiBhbGxvY19wYWdlc192bWEoYWxsb2NfaHVnZXBhZ2VfZ2ZwbWFzayhkZWZyYWcpLAotCQkJICAgICAgIEhQQUdFX1BNRF9PUkRFUiwgdm1hLCBoYWRkcik7CisJCQkgICAgICAgSFBBR0VfUE1EX09SREVSLCB2bWEsIGhhZGRyLCBuZCk7CiB9CiAKICNpZm5kZWYgQ09ORklHX05VTUEKQEAgLTY3OCw3ICs2NzgsNyBAQAogCQlpZiAodW5saWtlbHkoa2h1Z2VwYWdlZF9lbnRlcih2bWEpKSkKIAkJCXJldHVybiBWTV9GQVVMVF9PT007CiAJCXBhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEodHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVmcmFnKHZtYSksCi0JCQkJCSAgdm1hLCBoYWRkcik7CisJCQkJCSAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCkpOwogCQlpZiAodW5saWtlbHkoIXBhZ2UpKQogCQkJZ290byBvdXQ7CiAJCWlmICh1bmxpa2VseShtZW1fY2dyb3VwX25ld3BhZ2VfY2hhcmdlKHBhZ2UsIG1tLCBHRlBfS0VSTkVMKSkpIHsKQEAgLTc5OSw4ICs3OTksOCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBIUEFHRV9QTURfTlI7IGkrKykgewotCQlwYWdlc1tpXSA9IGFsbG9jX3BhZ2Vfdm1hKEdGUF9ISUdIVVNFUl9NT1ZBQkxFLAotCQkJCQkgIHZtYSwgYWRkcmVzcyk7CisJCXBhZ2VzW2ldID0gYWxsb2NfcGFnZV92bWFfbm9kZShHRlBfSElHSFVTRVJfTU9WQUJMRSwKKwkJCQkJICAgICAgIHZtYSwgYWRkcmVzcywgcGFnZV90b19uaWQocGFnZSkpOwogCQlpZiAodW5saWtlbHkoIXBhZ2VzW2ldIHx8CiAJCQkgICAgIG1lbV9jZ3JvdXBfbmV3cGFnZV9jaGFyZ2UocGFnZXNbaV0sIG1tLAogCQkJCQkJICAgICAgIEdGUF9LRVJORUwpKSkgewpAQCAtOTAyLDcgKzkwMiw3IEBACiAJaWYgKHRyYW5zcGFyZW50X2h1Z2VwYWdlX2VuYWJsZWQodm1hKSAmJgogCSAgICAhdHJhbnNwYXJlbnRfaHVnZXBhZ2VfZGVidWdfY293KCkpCiAJCW5ld19wYWdlID0gYWxsb2NfaHVnZXBhZ2Vfdm1hKHRyYW5zcGFyZW50X2h1Z2VwYWdlX2RlZnJhZyh2bWEpLAotCQkJCQkgICAgICB2bWEsIGhhZGRyKTsKKwkJCQkJICAgICAgdm1hLCBoYWRkciwgbnVtYV9ub2RlX2lkKCkpOwogCWVsc2UKIAkJbmV3X3BhZ2UgPSBOVUxMOwogCkBAIC0xMTYyLDcgKzExNjIsMTIgQEAKIAkJLyogYWZ0ZXIgY2xlYXJpbmcgUGFnZVRhaWwgdGhlIGd1cCByZWZjb3VudCBjYW4gYmUgcmVsZWFzZWQgKi8KIAkJc21wX21iKCk7CiAKLQkJcGFnZV90YWlsLT5mbGFncyAmPSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQOworCQkvKgorCQkgKiByZXRhaW4gaHdwb2lzb24gZmxhZyBvZiB0aGUgcG9pc29uZWQgdGFpbCBwYWdlOgorCQkgKiAgIGZpeCBmb3IgdGhlIHVuc3VpdGFibGUgcHJvY2VzcyBraWxsZWQgb24gR3Vlc3QgTWFjaGluZShLVk0pCisJCSAqICAgYnkgdGhlIG1lbW9yeS1mYWlsdXJlLgorCQkgKi8KKwkJcGFnZV90YWlsLT5mbGFncyAmPSB+UEFHRV9GTEFHU19DSEVDS19BVF9QUkVQIHwgX19QR19IV1BPSVNPTjsKIAkJcGFnZV90YWlsLT5mbGFncyB8PSAocGFnZS0+ZmxhZ3MgJgogCQkJCSAgICAgKCgxTCA8PCBQR19yZWZlcmVuY2VkKSB8CiAJCQkJICAgICAgKDFMIDw8IFBHX3N3YXBiYWNrZWQpIHwKQEAgLTE3NDAsNyArMTc0NSw4IEBACiBzdGF0aWMgdm9pZCBjb2xsYXBzZV9odWdlX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgICAgIHN0cnVjdCBwYWdlICoqaHBhZ2UsCi0JCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCisJCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkgICAgICAgaW50IG5vZGUpCiB7CiAJcGdkX3QgKnBnZDsKIAlwdWRfdCAqcHVkOwpAQCAtMTc2OCw3ICsxNzc0LDggQEAKIAkgKiBtbWFwX3NlbSBpbiByZWFkIG1vZGUgaXMgZ29vZCBpZGVhIGFsc28gdG8gYWxsb3cgZ3JlYXRlcgogCSAqIHNjYWxhYmlsaXR5LgogCSAqLwotCW5ld19wYWdlID0gYWxsb2NfaHVnZXBhZ2Vfdm1hKGtodWdlcGFnZWRfZGVmcmFnKCksIHZtYSwgYWRkcmVzcyk7CisJbmV3X3BhZ2UgPSBhbGxvY19odWdlcGFnZV92bWEoa2h1Z2VwYWdlZF9kZWZyYWcoKSwgdm1hLCBhZGRyZXNzLAorCQkJCSAgICAgIG5vZGUpOwogCWlmICh1bmxpa2VseSghbmV3X3BhZ2UpKSB7CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCSpocGFnZSA9IEVSUl9QVFIoLUVOT01FTSk7CkBAIC0xODA2LDYgKzE4MTMsOCBAQAogCS8qIFZNX1BGTk1BUCB2bWFzIG1heSBoYXZlIHZtX29wcyBudWxsIGJ1dCB2bV9maWxlIHNldCAqLwogCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCiAJCWdvdG8gb3V0OworCWlmIChpc192bWFfdGVtcG9yYXJ5X3N0YWNrKHZtYSkpCisJCWdvdG8gb3V0OwogCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKIAogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOwpAQCAtMTg0Nyw3ICsxODU2LDYgQEAKIAkJc2V0X3BtZF9hdChtbSwgYWRkcmVzcywgcG1kLCBfcG1kKTsKIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQlhbm9uX3ZtYV91bmxvY2sodm1hLT5hbm9uX3ZtYSk7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfcGFnZShuZXdfcGFnZSk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTg5Myw2ICsxOTAxLDcgQEAKIAlyZXR1cm47CiAKIG91dDoKKwltZW1fY2dyb3VwX3VuY2hhcmdlX3BhZ2UobmV3X3BhZ2UpOwogI2lmZGVmIENPTkZJR19OVU1BCiAJcHV0X3BhZ2UobmV3X3BhZ2UpOwogI2VuZGlmCkBAIC0xOTEyLDYgKzE5MjEsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgX2FkZHJlc3M7CiAJc3BpbmxvY2tfdCAqcHRsOworCWludCBub2RlID0gLTE7CiAKIAlWTV9CVUdfT04oYWRkcmVzcyAmIH5IUEFHRV9QTURfTUFTSyk7CiAKQEAgLTE5NDIsNiArMTk1MiwxMyBAQAogCQlwYWdlID0gdm1fbm9ybWFsX3BhZ2Uodm1hLCBfYWRkcmVzcywgcHRldmFsKTsKIAkJaWYgKHVubGlrZWx5KCFwYWdlKSkKIAkJCWdvdG8gb3V0X3VubWFwOworCQkvKgorCQkgKiBDaG9zZSB0aGUgbm9kZSBvZiB0aGUgZmlyc3QgcGFnZS4gVGhpcyBjb3VsZAorCQkgKiBiZSBtb3JlIHNvcGhpc3RpY2F0ZWQgYW5kIGxvb2sgYXQgbW9yZSBwYWdlcywKKwkJICogYnV0IGlzbid0IGZvciBub3cuCisJCSAqLworCQlpZiAobm9kZSA9PSAtMSkKKwkJCW5vZGUgPSBwYWdlX3RvX25pZChwYWdlKTsKIAkJVk1fQlVHX09OKFBhZ2VDb21wb3VuZChwYWdlKSk7CiAJCWlmICghUGFnZUxSVShwYWdlKSB8fCBQYWdlTG9ja2VkKHBhZ2UpIHx8ICFQYWdlQW5vbihwYWdlKSkKIAkJCWdvdG8gb3V0X3VubWFwOwpAQCAtMTk1OCw3ICsxOTc1LDcgQEAKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSwgcHRsKTsKIAlpZiAocmV0KQogCQkvKiBjb2xsYXBzZV9odWdlX3BhZ2Ugd2lsbCByZXR1cm4gd2l0aCB0aGUgbW1hcF9zZW0gcmVsZWFzZWQgKi8KLQkJY29sbGFwc2VfaHVnZV9wYWdlKG1tLCBhZGRyZXNzLCBocGFnZSwgdm1hKTsKKwkJY29sbGFwc2VfaHVnZV9wYWdlKG1tLCBhZGRyZXNzLCBocGFnZSwgdm1hLCBub2RlKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjAyNywzMiArMjA0NCwyNyBAQAogCQlpZiAoKCEodm1hLT52bV9mbGFncyAmIFZNX0hVR0VQQUdFKSAmJgogCQkgICAgICFraHVnZXBhZ2VkX2Fsd2F5cygpKSB8fAogCQkgICAgKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT0hVR0VQQUdFKSkgeworCQlza2lwOgogCQkJcHJvZ3Jlc3MrKzsKIAkJCWNvbnRpbnVlOwogCQl9Ci0KIAkJLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCi0JCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpIHsKLQkJCWtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gdm1hLT52bV9lbmQ7Ci0JCQlwcm9ncmVzcysrOwotCQkJY29udGludWU7Ci0JCX0KKwkJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzIHx8IHZtYS0+dm1fZmlsZSkKKwkJCWdvdG8gc2tpcDsKKwkJaWYgKGlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2sodm1hKSkKKwkJCWdvdG8gc2tpcDsKKwogCQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CiAKIAkJaHN0YXJ0ID0gKHZtYS0+dm1fc3RhcnQgKyB+SFBBR0VfUE1EX01BU0spICYgSFBBR0VfUE1EX01BU0s7CiAJCWhlbmQgPSB2bWEtPnZtX2VuZCAmIEhQQUdFX1BNRF9NQVNLOwotCQlpZiAoaHN0YXJ0ID49IGhlbmQpIHsKLQkJCXByb2dyZXNzKys7Ci0JCQljb250aW51ZTsKLQkJfQorCQlpZiAoaHN0YXJ0ID49IGhlbmQpCisJCQlnb3RvIHNraXA7CisJCWlmIChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA+IGhlbmQpCisJCQlnb3RvIHNraXA7CiAJCWlmIChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA8IGhzdGFydCkKIAkJCWtodWdlcGFnZWRfc2Nhbi5hZGRyZXNzID0gaHN0YXJ0OwotCQlpZiAoa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgPiBoZW5kKSB7Ci0JCQlraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA9IGhlbmQgKyBIUEFHRV9QTURfU0laRTsKLQkJCXByb2dyZXNzKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlCVUdfT04oa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgJiB+SFBBR0VfUE1EX01BU0spOworCQlWTV9CVUdfT04oa2h1Z2VwYWdlZF9zY2FuLmFkZHJlc3MgJiB+SFBBR0VfUE1EX01BU0spOwogCiAJCXdoaWxlIChraHVnZXBhZ2VkX3NjYW4uYWRkcmVzcyA8IGhlbmQpIHsKIAkJCWludCByZXQ7CkBAIC0yMDgxLDcgKzIwOTMsNyBAQAogYnJlYWtvdXRlcmxvb3BfbW1hcF9zZW06CiAKIAlzcGluX2xvY2soJmtodWdlcGFnZWRfbW1fbG9jayk7Ci0JQlVHX09OKGtodWdlcGFnZWRfc2Nhbi5tbV9zbG90ICE9IG1tX3Nsb3QpOworCVZNX0JVR19PTihraHVnZXBhZ2VkX3NjYW4ubW1fc2xvdCAhPSBtbV9zbG90KTsKIAkvKgogCSAqIFJlbGVhc2UgdGhlIGN1cnJlbnQgbW1fc2xvdCBpZiB0aGlzIG1tIGlzIGFib3V0IHRvIGRpZSwgb3IKIAkgKiBpZiB3ZSBzY2FubmVkIGFsbCB2bWFzIG9mIHRoaXMgbW0uCkBAIC0yMjM2LDkgKzIyNDgsOSBAQAogCiAJZm9yICg7OykgewogCQltdXRleF91bmxvY2soJmtodWdlcGFnZWRfbXV0ZXgpOwotCQlCVUdfT04oa2h1Z2VwYWdlZF90aHJlYWQgIT0gY3VycmVudCk7CisJCVZNX0JVR19PTihraHVnZXBhZ2VkX3RocmVhZCAhPSBjdXJyZW50KTsKIAkJa2h1Z2VwYWdlZF9sb29wKCk7Ci0JCUJVR19PTihraHVnZXBhZ2VkX3RocmVhZCAhPSBjdXJyZW50KTsKKwkJVk1fQlVHX09OKGtodWdlcGFnZWRfdGhyZWFkICE9IGN1cnJlbnQpOwogCiAJCW11dGV4X2xvY2soJmtodWdlcGFnZWRfbXV0ZXgpOwogCQlpZiAoIWtodWdlcGFnZWRfZW5hYmxlZCgpKQpkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWstdGVzdC5jIGIvbW0va21lbWxlYWstdGVzdC5jCmluZGV4IDE3N2E1MTYuLmZmMGQ5NzcgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLXRlc3QuYworKysgYi9tbS9rbWVtbGVhay10ZXN0LmMKQEAgLTc1LDEzICs3NSwxMSBAQAogCSAqIGFmdGVyIHRoZSBtb2R1bGUgaXMgcmVtb3ZlZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQllbGVtID0ga21hbGxvYyhzaXplb2YoKmVsZW0pLCBHRlBfS0VSTkVMKTsKLQkJcHJfaW5mbygia21lbWxlYWs6IGttYWxsb2Moc2l6ZW9mKCplbGVtKSkgPSAlcFxuIiwgZWxlbSk7CisJCWVsZW0gPSBremFsbG9jKHNpemVvZigqZWxlbSksIEdGUF9LRVJORUwpOworCQlwcl9pbmZvKCJrbWVtbGVhazoga3phbGxvYyhzaXplb2YoKmVsZW0pKSA9ICVwXG4iLCBlbGVtKTsKIAkJaWYgKCFlbGVtKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbXNldChlbGVtLCAwLCBzaXplb2YoKmVsZW0pKTsKIAkJSU5JVF9MSVNUX0hFQUQoJmVsZW0tPmxpc3QpOwotCiAJCWxpc3RfYWRkX3RhaWwoJmVsZW0tPmxpc3QsICZ0ZXN0X2xpc3QpOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0va21lbWxlYWsuYyBiL21tL2ttZW1sZWFrLmMKaW5kZXggYmQ5YmMyMS4uODQyMjVmMyAxMDA2NDQKLS0tIGEvbW0va21lbWxlYWsuYworKysgYi9tbS9rbWVtbGVhay5jCkBAIC0xMTMsNyArMTEzLDkgQEAKICNkZWZpbmUgQllURVNfUEVSX1BPSU5URVIJc2l6ZW9mKHZvaWQgKikKIAogLyogR0ZQIGJpdG1hc2sgZm9yIGttZW1sZWFrIGludGVybmFsIGFsbG9jYXRpb25zICovCi0jZGVmaW5lIEdGUF9LTUVNTEVBS19NQVNLCShHRlBfS0VSTkVMIHwgR0ZQX0FUT01JQykKKyNkZWZpbmUgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKQkoKChnZnApICYgKEdGUF9LRVJORUwgfCBHRlBfQVRPTUlDKSkgfCBcCisJCQkJIF9fR0ZQX05PUkVUUlkgfCBfX0dGUF9OT01FTUFMTE9DIHwgXAorCQkJCSBfX0dGUF9OT1dBUk4pCiAKIC8qIHNjYW5uaW5nIGFyZWEgaW5zaWRlIGEgbWVtb3J5IGJsb2NrICovCiBzdHJ1Y3Qga21lbWxlYWtfc2Nhbl9hcmVhIHsKQEAgLTUxMSw5ICs1MTMsMTAgQEAKIAlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmplY3Q7CiAJc3RydWN0IHByaW9fdHJlZV9ub2RlICpub2RlOwogCi0Jb2JqZWN0ID0ga21lbV9jYWNoZV9hbGxvYyhvYmplY3RfY2FjaGUsIGdmcCAmIEdGUF9LTUVNTEVBS19NQVNLKTsKKwlvYmplY3QgPSBrbWVtX2NhY2hlX2FsbG9jKG9iamVjdF9jYWNoZSwgZ2ZwX2ttZW1sZWFrX21hc2soZ2ZwKSk7CiAJaWYgKCFvYmplY3QpIHsKLQkJa21lbWxlYWtfc3RvcCgiQ2Fubm90IGFsbG9jYXRlIGEga21lbWxlYWtfb2JqZWN0IHN0cnVjdHVyZVxuIik7CisJCXByX3dhcm5pbmcoIkNhbm5vdCBhbGxvY2F0ZSBhIGttZW1sZWFrX29iamVjdCBzdHJ1Y3R1cmVcbiIpOworCQlrbWVtbGVha19kaXNhYmxlKCk7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNzM0LDkgKzczNyw5IEBACiAJCXJldHVybjsKIAl9CiAKLQlhcmVhID0ga21lbV9jYWNoZV9hbGxvYyhzY2FuX2FyZWFfY2FjaGUsIGdmcCAmIEdGUF9LTUVNTEVBS19NQVNLKTsKKwlhcmVhID0ga21lbV9jYWNoZV9hbGxvYyhzY2FuX2FyZWFfY2FjaGUsIGdmcF9rbWVtbGVha19tYXNrKGdmcCkpOwogCWlmICghYXJlYSkgewotCQlrbWVtbGVha193YXJuKCJDYW5ub3QgYWxsb2NhdGUgYSBzY2FuIGFyZWFcbiIpOworCQlwcl93YXJuaW5nKCJDYW5ub3QgYWxsb2NhdGUgYSBzY2FuIGFyZWFcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jCmluZGV4IGJkYmEyNDUuLjQ2MThmZGEgMTAwNjQ0Ci0tLSBhL21tL21lbWJsb2NrLmMKKysrIGIvbW0vbWVtYmxvY2suYwpAQCAtMTM3LDggKzEzNyw2IEBACiAKIAlCVUdfT04oMCA9PSBzaXplKTsKIAotCXNpemUgPSBtZW1ibG9ja19hbGlnbl91cChzaXplLCBhbGlnbik7Ci0KIAkvKiBQdW1wIHVwIG1heF9hZGRyICovCiAJaWYgKGVuZCA9PSBNRU1CTE9DS19BTExPQ19BQ0NFU1NJQkxFKQogCQllbmQgPSBtZW1ibG9jay5jdXJyZW50X2xpbWl0OwpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IGRiNzZlZjcuLmRhNTNhMjUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYworKysgYi9tbS9tZW1jb250cm9sLmMKQEAgLTYxMiw4ICs2MTIsMTAgQEAKIAkvKiBwYWdlaW4gb2YgYSBiaWcgcGFnZSBpcyBhbiBldmVudC4gU28sIGlnbm9yZSBwYWdlIHNpemUgKi8KIAlpZiAobnJfcGFnZXMgPiAwKQogCQlfX3RoaXNfY3B1X2luYyhtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9QR1BHSU5fQ09VTlRdKTsKLQllbHNlCisJZWxzZSB7CiAJCV9fdGhpc19jcHVfaW5jKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlRdKTsKKwkJbnJfcGFnZXMgPSAtbnJfcGFnZXM7IC8qIGZvciBldmVudCAqLworCX0KIAogCV9fdGhpc19jcHVfYWRkKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9FVkVOVFNdLCBucl9wYWdlcyk7CiAKQEAgLTExMTEsNiArMTExMywyMyBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorLyoqCisgKiBtZW1fY2dyb3VwX2NoZWNrX21hcmdpbiAtIGNoZWNrIGlmIHRoZSBtZW1vcnkgY2dyb3VwIGFsbG93cyBjaGFyZ2luZworICogQG1lbTogbWVtb3J5IGNncm91cCB0byBjaGVjaworICogQGJ5dGVzOiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBjaGFyZ2UKKyAqCisgKiBSZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSBvbiB3aGV0aGVyIEBtZW0gY2FuIGJlIGNoYXJnZWQgQGJ5dGVzIG9yCisgKiB3aGV0aGVyIHRoaXMgd291bGQgZXhjZWVkIHRoZSBsaW1pdC4KKyAqLworc3RhdGljIGJvb2wgbWVtX2Nncm91cF9jaGVja19tYXJnaW4oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdW5zaWduZWQgbG9uZyBieXRlcykKK3sKKwlpZiAoIXJlc19jb3VudGVyX2NoZWNrX21hcmdpbigmbWVtLT5yZXMsIGJ5dGVzKSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChkb19zd2FwX2FjY291bnQgJiYgIXJlc19jb3VudGVyX2NoZWNrX21hcmdpbigmbWVtLT5tZW1zdywgYnl0ZXMpKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N3YXBwaW5lc3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBtZW1jZy0+Y3NzLmNncm91cDsKQEAgLTE4MzIsMjcgKzE4NTEsMzkgQEAKIAkJaWYgKGxpa2VseSghcmV0KSkKIAkJCXJldHVybiBDSEFSR0VfT0s7CiAKKwkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBjc2l6ZSk7CiAJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCBtZW1zdyk7CiAJCWZsYWdzIHw9IE1FTV9DR1JPVVBfUkVDTEFJTV9OT1NXQVA7CiAJfSBlbHNlCiAJCW1lbV9vdmVyX2xpbWl0ID0gbWVtX2Nncm91cF9mcm9tX3Jlc19jb3VudGVyKGZhaWxfcmVzLCByZXMpOwotCi0JaWYgKGNzaXplID4gUEFHRV9TSVpFKSAvKiBjaGFuZ2UgY3NpemUgYW5kIHJldHJ5ICovCisJLyoKKwkgKiBjc2l6ZSBjYW4gYmUgZWl0aGVyIGEgaHVnZSBwYWdlIChIUEFHRV9TSVpFKSwgYSBiYXRjaCBvZgorCSAqIHJlZ3VsYXIgcGFnZXMgKENIQVJHRV9TSVpFKSwgb3IgYSBzaW5nbGUgcmVndWxhciBwYWdlCisJICogKFBBR0VfU0laRSkuCisJICoKKwkgKiBOZXZlciByZWNsYWltIG9uIGJlaGFsZiBvZiBvcHRpb25hbCBiYXRjaGluZywgcmV0cnkgd2l0aCBhCisJICogc2luZ2xlIHBhZ2UgaW5zdGVhZC4KKwkgKi8KKwlpZiAoY3NpemUgPT0gQ0hBUkdFX1NJWkUpCiAJCXJldHVybiBDSEFSR0VfUkVUUlk7CiAKIAlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQogCQlyZXR1cm4gQ0hBUkdFX1dPVUxEQkxPQ0s7CiAKIAlyZXQgPSBtZW1fY2dyb3VwX2hpZXJhcmNoaWNhbF9yZWNsYWltKG1lbV9vdmVyX2xpbWl0LCBOVUxMLAotCQkJCQlnZnBfbWFzaywgZmxhZ3MpOworCQkJCQkgICAgICBnZnBfbWFzaywgZmxhZ3MpOworCWlmIChtZW1fY2dyb3VwX2NoZWNrX21hcmdpbihtZW1fb3Zlcl9saW1pdCwgY3NpemUpKQorCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCS8qCi0JICogdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcygpIG1pZ2h0IG5vdCBnaXZlIHVzIGEgZnVsbAotCSAqIHBpY3R1cmUgb2YgcmVjbGFpbS4gU29tZSBwYWdlcyBhcmUgcmVjbGFpbWVkIGFuZCBtaWdodCBiZQotCSAqIG1vdmVkIHRvIHN3YXAgY2FjaGUgb3IganVzdCB1bm1hcHBlZCBmcm9tIHRoZSBjZ3JvdXAuCi0JICogQ2hlY2sgdGhlIGxpbWl0IGFnYWluIHRvIHNlZSBpZiB0aGUgcmVjbGFpbSByZWR1Y2VkIHRoZQotCSAqIGN1cnJlbnQgdXNhZ2Ugb2YgdGhlIGNncm91cCBiZWZvcmUgZ2l2aW5nIHVwCisJICogRXZlbiB0aG91Z2ggdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGF0IHRoaXMgcG9pbnQsIHJlY2xhaW0KKwkgKiBtYXkgaGF2ZSBiZWVuIGFibGUgdG8gZnJlZSBzb21lIHBhZ2VzLiAgUmV0cnkgdGhlIGNoYXJnZQorCSAqIGJlZm9yZSBraWxsaW5nIHRoZSB0YXNrLgorCSAqCisJICogT25seSBmb3IgcmVndWxhciBwYWdlcywgdGhvdWdoOiBodWdlIHBhZ2VzIGFyZSByYXRoZXIKKwkgKiB1bmxpa2VseSB0byBzdWNjZWVkIHNvIGNsb3NlIHRvIHRoZSBsaW1pdCwgYW5kIHdlIGZhbGwgYmFjaworCSAqIHRvIHJlZ3VsYXIgcGFnZXMgYW55d2F5IGluIGNhc2Ugb2YgZmFpbHVyZS4KIAkgKi8KLQlpZiAocmV0IHx8IG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQobWVtX292ZXJfbGltaXQpKQorCWlmIChjc2l6ZSA9PSBQQUdFX1NJWkUgJiYgcmV0KQogCQlyZXR1cm4gQ0hBUkdFX1JFVFJZOwogCiAJLyoKQEAgLTIxNDQsNiArMjE3NSw4IEBACiAJc3RydWN0IHBhZ2VfY2dyb3VwICp0YWlsX3BjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHRhaWwpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKQorCQlyZXR1cm47CiAJLyoKIAkgKiBXZSBoYXZlIG5vIHJhY2VzIHdpdGggY2hhcmdlL3VuY2hhcmdlIGJ1dCB3aWxsIGhhdmUgcmFjZXMgd2l0aAogCSAqIHBhZ2Ugc3RhdGUgYWNjb3VudGluZy4KQEAgLTIyMzMsNyArMjI2NiwxMiBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKwkvKgorCSAqIFRoZSBwYWdlIGlzIGlzb2xhdGVkIGZyb20gTFJVLiBTbywgY29sbGFwc2UgZnVuY3Rpb24KKwkgKiB3aWxsIG5vdCBoYW5kbGUgdGhpcyBwYWdlLiBCdXQgcGFnZSBzcGxpdHRpbmcgY2FuIGhhcHBlbi4KKwkgKiBEbyB0aGlzIGNoZWNrIHVuZGVyIGNvbXBvdW5kX3BhZ2VfbG9jaygpLiBUaGUgY2FsbGVyIHNob3VsZAorCSAqIGhvbGQgaXQuCisJICovCiAJaWYgKChjaGFyZ2Vfc2l6ZSA+IFBBR0VfU0laRSkgJiYgIVBhZ2VUcmFuc0h1Z2UocGMtPnBhZ2UpKQogCQlyZXR1cm4gLUVCVVNZOwogCkBAIC0yMjY1LDcgKzIzMDMsNyBAQAogCXN0cnVjdCBjZ3JvdXAgKmNnID0gY2hpbGQtPmNzcy5jZ3JvdXA7CiAJc3RydWN0IGNncm91cCAqcGNnID0gY2ctPnBhcmVudDsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50OwotCWludCBjaGFyZ2UgPSBQQUdFX1NJWkU7CisJaW50IHBhZ2Vfc2l6ZSA9IFBBR0VfU0laRTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKQEAgLTIyNzgsMjMgKzIzMTYsMjYgQEAKIAkJZ290byBvdXQ7CiAJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCiAJCWdvdG8gcHV0OwotCS8qIFRoZSBwYWdlIGlzIGlzb2xhdGVkIGZyb20gTFJVIGFuZCB3ZSBoYXZlIG5vIHJhY2Ugd2l0aCBzcGxpdHRpbmcgKi8KLQljaGFyZ2UgPSBQQUdFX1NJWkUgPDwgY29tcG91bmRfb3JkZXIocGFnZSk7CisKKwlpZiAoUGFnZVRyYW5zSHVnZShwYWdlKSkKKwkJcGFnZV9zaXplID0gSFBBR0VfU0laRTsKIAogCXBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KHBjZyk7Ci0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgZ2ZwX21hc2ssICZwYXJlbnQsIGZhbHNlLCBjaGFyZ2UpOworCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKE5VTEwsIGdmcF9tYXNrLAorCQkJCSZwYXJlbnQsIGZhbHNlLCBwYWdlX3NpemUpOwogCWlmIChyZXQgfHwgIXBhcmVudCkKIAkJZ290byBwdXRfYmFjazsKIAotCWlmIChjaGFyZ2UgPiBQQUdFX1NJWkUpCisJaWYgKHBhZ2Vfc2l6ZSA+IFBBR0VfU0laRSkKIAkJZmxhZ3MgPSBjb21wb3VuZF9sb2NrX2lycXNhdmUocGFnZSk7CiAKLQlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSwgY2hhcmdlKTsKKwlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCwgdHJ1ZSwgcGFnZV9zaXplKTsKIAlpZiAocmV0KQotCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50LCBjaGFyZ2UpOwotcHV0X2JhY2s6Ci0JaWYgKGNoYXJnZSA+IFBBR0VfU0laRSkKKwkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKHBhcmVudCwgcGFnZV9zaXplKTsKKworCWlmIChwYWdlX3NpemUgPiBQQUdFX1NJWkUpCiAJCWNvbXBvdW5kX3VubG9ja19pcnFyZXN0b3JlKHBhZ2UsIGZsYWdzKTsKK3B1dF9iYWNrOgogCXB1dGJhY2tfbHJ1X3BhZ2UocGFnZSk7CiBwdXQ6CiAJcHV0X3BhZ2UocGFnZSk7CkBAIC0yMzEyLDEzICsyMzUzLDE5IEBACiAJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGVudW0gY2hhcmdlX3R5cGUgY3R5cGUpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IE5VTEw7Ci0Jc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKLQlpbnQgcmV0OwogCWludCBwYWdlX3NpemUgPSBQQUdFX1NJWkU7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKKwlib29sIG9vbSA9IHRydWU7CisJaW50IHJldDsKIAogCWlmIChQYWdlVHJhbnNIdWdlKHBhZ2UpKSB7CiAJCXBhZ2Vfc2l6ZSA8PD0gY29tcG91bmRfb3JkZXIocGFnZSk7CiAJCVZNX0JVR19PTighUGFnZVRyYW5zSHVnZShwYWdlKSk7CisJCS8qCisJCSAqIE5ldmVyIE9PTS1raWxsIGEgcHJvY2VzcyBmb3IgYSBodWdlIHBhZ2UuICBUaGUKKwkJICogZmF1bHQgaGFuZGxlciB3aWxsIGZhbGwgYmFjayB0byByZWd1bGFyIHBhZ2VzLgorCQkgKi8KKwkJb29tID0gZmFsc2U7CiAJfQogCiAJcGMgPSBsb29rdXBfcGFnZV9jZ3JvdXAocGFnZSk7CkBAIC0yMzI3LDcgKzIzNzQsNyBAQAogCQlyZXR1cm4gMDsKIAlwcmVmZXRjaHcocGMpOwogCi0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAmbWVtLCB0cnVlLCBwYWdlX3NpemUpOworCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgJm1lbSwgb29tLCBwYWdlX3NpemUpOwogCWlmIChyZXQgfHwgIW1lbSkKIAkJcmV0dXJuIHJldDsKIApAQCAtNTAxMyw5ICs1MDYwLDkgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9zd2FwX2FjY291bnQoY2hhciAqcykKIHsKIAkvKiBjb25zaWRlciBlbmFibGVkIGlmIG5vIHBhcmFtZXRlciBvciAxIGlzIGdpdmVuICovCi0JaWYgKCFzIHx8ICFzdHJjbXAocywgIjEiKSkKKwlpZiAoISgqcykgfHwgIXN0cmNtcChzLCAiPTEiKSkKIAkJcmVhbGx5X2RvX3N3YXBfYWNjb3VudCA9IDE7Ci0JZWxzZSBpZiAoIXN0cmNtcChzLCAiMCIpKQorCWVsc2UgaWYgKCFzdHJjbXAocywgIj0wIikpCiAJCXJlYWxseV9kb19zd2FwX2FjY291bnQgPSAwOwogCXJldHVybiAxOwogfQpAQCAtNTAyMyw3ICs1MDcwLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9zd2FwX2FjY291bnQoY2hhciAqcykKIHsKLQllbmFibGVfc3dhcF9hY2NvdW50KCIwIik7CisJcHJpbnRrX29uY2UoIm5vc3dhcGFjY291bnQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDIuNi40MC4gVXNlIHN3YXBhY2NvdW50PTAgaW5zdGVhZFxuIik7CisJZW5hYmxlX3N3YXBfYWNjb3VudCgiPTAiKTsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoIm5vc3dhcGFjY291bnQiLCBkaXNhYmxlX3N3YXBfYWNjb3VudCk7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCA1NDhmYmQ3Li4wMjA3YzJmIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTIzMyw4ICsyMzMsOCBAQAogCX0KIAogCS8qCi0JICogT25seSBhbGwgc2hyaW5rX3NsYWIgaGVyZSAod2hpY2ggd291bGQgYWxzbwotCSAqIHNocmluayBvdGhlciBjYWNoZXMpIGlmIGFjY2VzcyBpcyBub3QgcG90ZW50aWFsbHkgZmF0YWwuCisJICogT25seSBjYWxsIHNocmlua19zbGFiIGhlcmUgKHdoaWNoIHdvdWxkIGFsc28gc2hyaW5rIG90aGVyIGNhY2hlcykgaWYKKwkgKiBhY2Nlc3MgaXMgbm90IHBvdGVudGlhbGx5IGZhdGFsLgogCSAqLwogCWlmIChhY2Nlc3MpIHsKIAkJaW50IG5yOwpAQCAtMzg2LDggKzM4Niw2IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJc3RydWN0IGFub25fdm1hICphdjsKIAotCWlmICghUGFnZUh1Z2UocGFnZSkgJiYgdW5saWtlbHkoc3BsaXRfaHVnZV9wYWdlKHBhZ2UpKSkKLQkJcmV0dXJuOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJYXYgPSBwYWdlX2xvY2tfYW5vbl92bWEocGFnZSk7CiAJaWYgKGF2ID09IE5VTEwpCS8qIE5vdCBhY3R1YWxseSBtYXBwZWQgYW55bW9yZSAqLwpAQCAtODU2LDYgKzg1NCw3IEBACiAJaW50IHJldDsKIAlpbnQga2lsbCA9IDE7CiAJc3RydWN0IHBhZ2UgKmhwYWdlID0gY29tcG91bmRfaGVhZChwKTsKKwlzdHJ1Y3QgcGFnZSAqcHBhZ2U7CiAKIAlpZiAoUGFnZVJlc2VydmVkKHApIHx8IFBhZ2VTbGFiKHApKQogCQlyZXR1cm4gU1dBUF9TVUNDRVNTOwpAQCAtODk3LDYgKzg5Niw0NCBAQAogCX0KIAogCS8qCisJICogcHBhZ2U6IHBvaXNvbmVkIHBhZ2UKKwkgKiAgIGlmIHAgaXMgcmVndWxhciBwYWdlKDRrIHBhZ2UpCisJICogICAgICAgIHBwYWdlID09IHJlYWwgcG9pc29uZWQgcGFnZTsKKwkgKiAgIGVsc2UgcCBpcyBodWdldGxiIG9yIFRIUCwgcHBhZ2UgPT0gaGVhZCBwYWdlLgorCSAqLworCXBwYWdlID0gaHBhZ2U7CisKKwlpZiAoUGFnZVRyYW5zSHVnZShocGFnZSkpIHsKKwkJLyoKKwkJICogVmVyaWZ5IHRoYXQgdGhpcyBpc24ndCBhIGh1Z2V0bGJmcyBoZWFkIHBhZ2UsIHRoZSBjaGVjayBmb3IKKwkJICogUGFnZUFub24gaXMganVzdCBmb3IgYXZvaWQgdHJpcHBpbmcgYSBzcGxpdF9odWdlX3BhZ2UKKwkJICogaW50ZXJuYWwgZGVidWcgY2hlY2ssIGFzIHNwbGl0X2h1Z2VfcGFnZSByZWZ1c2VzIHRvIGRlYWwgd2l0aAorCQkgKiBhbnl0aGluZyB0aGF0IGlzbid0IGFuIGFub24gcGFnZS4gUGFnZUFub24gY2FuJ3QgZ28gYXdheSBmcm8KKwkJICogdW5kZXIgdXMgYmVjYXVzZSB3ZSBob2xkIGEgcmVmY291bnQgb24gdGhlIGhwYWdlLCB3aXRob3V0IGEKKwkJICogcmVmY291bnQgb24gdGhlIGhwYWdlLiBzcGxpdF9odWdlX3BhZ2UgY2FuJ3QgYmUgc2FmZWx5IGNhbGxlZAorCQkgKiBpbiB0aGUgZmlyc3QgcGxhY2UsIGhhdmluZyBhIHJlZmNvdW50IG9uIHRoZSB0YWlsIGlzbid0CisJCSAqIGVub3VnaCAqIHRvIGJlIHNhZmUuCisJCSAqLworCQlpZiAoIVBhZ2VIdWdlKGhwYWdlKSAmJiBQYWdlQW5vbihocGFnZSkpIHsKKwkJCWlmICh1bmxpa2VseShzcGxpdF9odWdlX3BhZ2UoaHBhZ2UpKSkgeworCQkJCS8qCisJCQkJICogRklYTUU6IGlmIHNwbGl0dGluZyBUSFAgaXMgZmFpbGVkLCBpdCBpcworCQkJCSAqIGJldHRlciB0byBzdG9wIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW9uIHJhdGhlcgorCQkJCSAqIHRoYW4gY2F1c2luZyBwYW5pYyBieSB1bm1hcHBpbmcuIFN5c3RlbSBtaWdodAorCQkJCSAqIHN1cnZpdmUgaWYgdGhlIHBhZ2UgaXMgZnJlZWQgbGF0ZXIuCisJCQkJICovCisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkiTUNFICUjbHg6IGZhaWxlZCB0byBzcGxpdCBUSFBcbiIsIHBmbik7CisKKwkJCQlCVUdfT04oIVBhZ2VIV1BvaXNvbihwKSk7CisJCQkJcmV0dXJuIFNXQVBfRkFJTDsKKwkJCX0KKwkJCS8qIFRIUCBpcyBzcGxpdCwgc28gcHBhZ2Ugc2hvdWxkIGJlIHRoZSByZWFsIHBvaXNvbmVkIHBhZ2UuICovCisJCQlwcGFnZSA9IHA7CisJCX0KKwl9CisKKwkvKgogCSAqIEZpcnN0IGNvbGxlY3QgYWxsIHRoZSBwcm9jZXNzZXMgdGhhdCBoYXZlIHRoZSBwYWdlCiAJICogbWFwcGVkIGluIGRpcnR5IGZvcm0uICBUaGlzIGhhcyB0byBiZSBkb25lIGJlZm9yZSB0cnlfdG9fdW5tYXAsCiAJICogYmVjYXVzZSB0dHUgdGFrZXMgdGhlIHJtYXAgZGF0YSBzdHJ1Y3R1cmVzIGRvd24uCkBAIC05MDUsMTIgKzk0MiwxOCBAQAogCSAqIHRoZXJlJ3Mgbm90aGluZyB0aGF0IGNhbiBiZSBkb25lLgogCSAqLwogCWlmIChraWxsKQotCQljb2xsZWN0X3Byb2NzKGhwYWdlLCAmdG9raWxsKTsKKwkJY29sbGVjdF9wcm9jcyhwcGFnZSwgJnRva2lsbCk7CiAKLQlyZXQgPSB0cnlfdG9fdW5tYXAoaHBhZ2UsIHR0dSk7CisJaWYgKGhwYWdlICE9IHBwYWdlKQorCQlsb2NrX3BhZ2Vfbm9zeW5jKHBwYWdlKTsKKworCXJldCA9IHRyeV90b191bm1hcChwcGFnZSwgdHR1KTsKIAlpZiAocmV0ICE9IFNXQVBfU1VDQ0VTUykKIAkJcHJpbnRrKEtFUk5fRVJSICJNQ0UgJSNseDogZmFpbGVkIHRvIHVubWFwIHBhZ2UgKG1hcGNvdW50PSVkKVxuIiwKLQkJCQlwZm4sIHBhZ2VfbWFwY291bnQoaHBhZ2UpKTsKKwkJCQlwZm4sIHBhZ2VfbWFwY291bnQocHBhZ2UpKTsKKworCWlmIChocGFnZSAhPSBwcGFnZSkKKwkJdW5sb2NrX3BhZ2UocHBhZ2UpOwogCiAJLyoKIAkgKiBOb3cgdGhhdCB0aGUgZGlydHkgYml0IGhhcyBiZWVuIHByb3BhZ2F0ZWQgdG8gdGhlCkBAIC05MjEsNyArOTY0LDcgQEAKIAkgKiB1c2UgYSBtb3JlIGZvcmNlLWZ1bGwgdW5jYXRjaGFibGUga2lsbCB0byBwcmV2ZW50CiAJICogYW55IGFjY2Vzc2VzIHRvIHRoZSBwb2lzb25lZCBtZW1vcnkuCiAJICovCi0Ja2lsbF9wcm9jc19hbygmdG9raWxsLCAhIVBhZ2VEaXJ0eShocGFnZSksIHRyYXBubywKKwlraWxsX3Byb2NzX2FvKCZ0b2tpbGwsICEhUGFnZURpcnR5KHBwYWdlKSwgdHJhcG5vLAogCQkgICAgICByZXQgIT0gU1dBUF9TVUNDRVNTLCBwLCBwZm4pOwogCiAJcmV0dXJuIHJldDsKQEAgLTEwMjIsMTkgKzEwNjUsMjIgQEAKIAkgKiBUaGUgY2hlY2sgKHVubmVjZXNzYXJpbHkpIGlnbm9yZXMgTFJVIHBhZ2VzIGJlaW5nIGlzb2xhdGVkIGFuZAogCSAqIHdhbGtlZCBieSB0aGUgcGFnZSByZWNsYWltIGNvZGUsIGhvd2V2ZXIgdGhhdCdzIG5vdCBhIGJpZyBsb3NzLgogCSAqLwotCWlmICghUGFnZUxSVShwKSAmJiAhUGFnZUh1Z2UocCkpCi0JCXNoYWtlX3BhZ2UocCwgMCk7Ci0JaWYgKCFQYWdlTFJVKHApICYmICFQYWdlSHVnZShwKSkgewotCQkvKgotCQkgKiBzaGFrZV9wYWdlIGNvdWxkIGhhdmUgdHVybmVkIGl0IGZyZWUuCi0JCSAqLwotCQlpZiAoaXNfZnJlZV9idWRkeV9wYWdlKHApKSB7Ci0JCQlhY3Rpb25fcmVzdWx0KHBmbiwgImZyZWUgYnVkZHksIDJuZCB0cnkiLCBERUxBWUVEKTsKLQkJCXJldHVybiAwOworCWlmICghUGFnZUh1Z2UocCkgJiYgIVBhZ2VUcmFuc0NvbXBvdW5kKHApKSB7CisJCWlmICghUGFnZUxSVShwKSkKKwkJCXNoYWtlX3BhZ2UocCwgMCk7CisJCWlmICghUGFnZUxSVShwKSkgeworCQkJLyoKKwkJCSAqIHNoYWtlX3BhZ2UgY291bGQgaGF2ZSB0dXJuZWQgaXQgZnJlZS4KKwkJCSAqLworCQkJaWYgKGlzX2ZyZWVfYnVkZHlfcGFnZShwKSkgeworCQkJCWFjdGlvbl9yZXN1bHQocGZuLCAiZnJlZSBidWRkeSwgMm5kIHRyeSIsCisJCQkJCQlERUxBWUVEKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOworCQkJcHV0X3BhZ2UocCk7CisJCQlyZXR1cm4gLUVCVVNZOwogCQl9Ci0JCWFjdGlvbl9yZXN1bHQocGZuLCAibm9uIExSVSIsIElHTk9SRUQpOwotCQlwdXRfcGFnZShwKTsKLQkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAkvKgpAQCAtMTA2NCw3ICsxMTEwLDcgQEAKIAkgKiBGb3IgZXJyb3Igb24gdGhlIHRhaWwgcGFnZSwgd2Ugc2hvdWxkIHNldCBQR19od3BvaXNvbgogCSAqIG9uIHRoZSBoZWFkIHBhZ2UgdG8gc2hvdyB0aGF0IHRoZSBodWdlcGFnZSBpcyBod3BvaXNvbmVkCiAJICovCi0JaWYgKFBhZ2VUYWlsKHApICYmIFRlc3RTZXRQYWdlSFdQb2lzb24oaHBhZ2UpKSB7CisJaWYgKFBhZ2VIdWdlKHApICYmIFBhZ2VUYWlsKHApICYmIFRlc3RTZXRQYWdlSFdQb2lzb24oaHBhZ2UpKSB7CiAJCWFjdGlvbl9yZXN1bHQocGZuLCAiaHVnZXBhZ2UgYWxyZWFkeSBoYXJkd2FyZSBwb2lzb25lZCIsCiAJCQkJSUdOT1JFRCk7CiAJCXVubG9ja19wYWdlKGhwYWdlKTsKQEAgLTEyOTUsNyArMTM0MSwxMCBAQAogCXJldCA9IG1pZ3JhdGVfaHVnZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLCAwLAogCQkJCXRydWUpOwogCWlmIChyZXQpIHsKLQkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UxLCAqcGFnZTI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYWdlMSwgcGFnZTIsICZwYWdlbGlzdCwgbHJ1KQorCQkJcHV0X3BhZ2UocGFnZTEpOworCiAJCXByX2RlYnVnKCJzb2Z0IG9mZmxpbmU6ICUjbHg6IG1pZ3JhdGlvbiBmYWlsZWQgJWQsIHR5cGUgJWx4XG4iLAogCQkJIHBmbiwgcmV0LCBwYWdlLT5mbGFncyk7CiAJCWlmIChyZXQgPiAwKQpAQCAtMTQxOSw2ICsxNDY4LDcgQEAKIAkJcmV0ID0gbWlncmF0ZV9wYWdlcygmcGFnZWxpc3QsIG5ld19wYWdlLCBNUE9MX01GX01PVkVfQUxMLAogCQkJCQkJCQkwLCB0cnVlKTsKIAkJaWYgKHJldCkgeworCQkJcHV0YmFja19scnVfcGFnZXMoJnBhZ2VsaXN0KTsKIAkJCXByX2luZm8oInNvZnQgb2ZmbGluZTogJSNseDogbWlncmF0aW9uIGZhaWxlZCAlZCwgdHlwZSAlbHhcbiIsCiAJCQkJcGZuLCByZXQsIHBhZ2UtPmZsYWdzKTsKIAkJCWlmIChyZXQgPiAwKQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCAzMTI1MGZhLi41ODIzNjk4IDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYworKysgYi9tbS9tZW1vcnkuYwpAQCAtMjIxOSw3ICsyMjE5LDYgQEAKIAkJCQkJCQkgJnB0bCk7CiAJCQlpZiAoIXB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpIHsKIAkJCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIAkJCQlnb3RvIHVubG9jazsKIAkJCX0KIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShvbGRfcGFnZSk7CkBAIC0yMjg5LDcgKzIyODgsNiBAQAogCQkJCQkJCSAmcHRsKTsKIAkJCWlmICghcHRlX3NhbWUoKnBhZ2VfdGFibGUsIG9yaWdfcHRlKSkgewogCQkJCXVubG9ja19wYWdlKG9sZF9wYWdlKTsKLQkJCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwogCQkJCWdvdG8gdW5sb2NrOwogCQkJfQogCkBAIC0yMzY3LDE2ICsyMzY1LDYgQEAKIAl9CiAJX19TZXRQYWdlVXB0b2RhdGUobmV3X3BhZ2UpOwogCi0JLyoKLQkgKiBEb24ndCBsZXQgYW5vdGhlciB0YXNrLCB3aXRoIHBvc3NpYmx5IHVubG9ja2VkIHZtYSwKLQkgKiBrZWVwIHRoZSBtbG9ja2VkIHBhZ2UuCi0JICovCi0JaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSAmJiBvbGRfcGFnZSkgewotCQlsb2NrX3BhZ2Uob2xkX3BhZ2UpOwkvKiBmb3IgTFJVIG1hbmlwdWxhdGlvbiAqLwotCQljbGVhcl9wYWdlX21sb2NrKG9sZF9wYWdlKTsKLQkJdW5sb2NrX3BhZ2Uob2xkX3BhZ2UpOwotCX0KLQogCWlmIChtZW1fY2dyb3VwX25ld3BhZ2VfY2hhcmdlKG5ld19wYWdlLCBtbSwgR0ZQX0tFUk5FTCkpCiAJCWdvdG8gb29tX2ZyZWVfbmV3OwogCkBAIC0yNDQ0LDEwICsyNDMyLDIwIEBACiAKIAlpZiAobmV3X3BhZ2UpCiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShuZXdfcGFnZSk7Ci0JaWYgKG9sZF9wYWdlKQotCQlwYWdlX2NhY2hlX3JlbGVhc2Uob2xkX3BhZ2UpOwogdW5sb2NrOgogCXB0ZV91bm1hcF91bmxvY2socGFnZV90YWJsZSwgcHRsKTsKKwlpZiAob2xkX3BhZ2UpIHsKKwkJLyoKKwkJICogRG9uJ3QgbGV0IGFub3RoZXIgdGFzaywgd2l0aCBwb3NzaWJseSB1bmxvY2tlZCB2bWEsCisJCSAqIGtlZXAgdGhlIG1sb2NrZWQgcGFnZS4KKwkJICovCisJCWlmICgocmV0ICYgVk1fRkFVTFRfV1JJVEUpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSkgeworCQkJbG9ja19wYWdlKG9sZF9wYWdlKTsJLyogTFJVIG1hbmlwdWxhdGlvbiAqLworCQkJbXVubG9ja192bWFfcGFnZShvbGRfcGFnZSk7CisJCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7CisJCX0KKwkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKKwl9CiAJcmV0dXJuIHJldDsKIG9vbV9mcmVlX25ldzoKIAlwYWdlX2NhY2hlX3JlbGVhc2UobmV3X3BhZ2UpOwpAQCAtMjY1MCw2ICsyNjQ4LDcgQEAKIAkJZGV0YWlscy5sYXN0X2luZGV4ID0gVUxPTkdfTUFYOwogCWRldGFpbHMuaV9tbWFwX2xvY2sgPSAmbWFwcGluZy0+aV9tbWFwX2xvY2s7CiAKKwltdXRleF9sb2NrKCZtYXBwaW5nLT51bm1hcF9tdXRleCk7CiAJc3Bpbl9sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CiAKIAkvKiBQcm90ZWN0IGFnYWluc3QgZW5kbGVzcyB1bm1hcHBpbmcgbG9vcHMgKi8KQEAgLTI2NjYsNiArMjY2NSw3IEBACiAJaWYgKHVubGlrZWx5KCFsaXN0X2VtcHR5KCZtYXBwaW5nLT5pX21tYXBfbm9ubGluZWFyKSkpCiAJCXVubWFwX21hcHBpbmdfcmFuZ2VfbGlzdCgmbWFwcGluZy0+aV9tbWFwX25vbmxpbmVhciwgJmRldGFpbHMpOwogCXNwaW5fdW5sb2NrKCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZtYXBwaW5nLT51bm1hcF9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MKHVubWFwX21hcHBpbmdfcmFuZ2UpOwogCkBAIC0zMDUzLDEyICszMDUzLDYgQEAKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWNoYXJnZWQgPSAxOwotCQkJLyoKLQkJCSAqIERvbid0IGxldCBhbm90aGVyIHRhc2ssIHdpdGggcG9zc2libHkgdW5sb2NrZWQgdm1hLAotCQkJICoga2VlcCB0aGUgbWxvY2tlZCBwYWdlLgotCQkJICovCi0JCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0xPQ0tFRCkKLQkJCQljbGVhcl9wYWdlX21sb2NrKHZtZi5wYWdlKTsKIAkJCWNvcHlfdXNlcl9oaWdocGFnZShwYWdlLCB2bWYucGFnZSwgYWRkcmVzcywgdm1hKTsKIAkJCV9fU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAzNjhmYzlkLi5iNTNlYzk5IDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTUyNCwxMCArMTUyNCw5IEBACiB9CiAKIC8qIFJldHVybiBhIHpvbmVsaXN0IGluZGljYXRlZCBieSBnZnAgZm9yIG5vZGUgcmVwcmVzZW50aW5nIGEgbWVtcG9saWN5ICovCi1zdGF0aWMgc3RydWN0IHpvbmVsaXN0ICpwb2xpY3lfem9uZWxpc3QoZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3kpCitzdGF0aWMgc3RydWN0IHpvbmVsaXN0ICpwb2xpY3lfem9uZWxpc3QoZ2ZwX3QgZ2ZwLCBzdHJ1Y3QgbWVtcG9saWN5ICpwb2xpY3ksCisJaW50IG5kKQogewotCWludCBuZCA9IG51bWFfbm9kZV9pZCgpOwotCiAJc3dpdGNoIChwb2xpY3ktPm1vZGUpIHsKIAljYXNlIE1QT0xfUFJFRkVSUkVEOgogCQlpZiAoIShwb2xpY3ktPmZsYWdzICYgTVBPTF9GX0xPQ0FMKSkKQEAgLTE2NzksNyArMTY3OCw3IEBACiAJCXpsID0gbm9kZV96b25lbGlzdChpbnRlcmxlYXZlX25pZCgqbXBvbCwgdm1hLCBhZGRyLAogCQkJCWh1Z2VfcGFnZV9zaGlmdChoc3RhdGVfdm1hKHZtYSkpKSwgZ2ZwX2ZsYWdzKTsKIAl9IGVsc2UgewotCQl6bCA9IHBvbGljeV96b25lbGlzdChnZnBfZmxhZ3MsICptcG9sKTsKKwkJemwgPSBwb2xpY3lfem9uZWxpc3QoZ2ZwX2ZsYWdzLCAqbXBvbCwgbnVtYV9ub2RlX2lkKCkpOwogCQlpZiAoKCptcG9sKS0+bW9kZSA9PSBNUE9MX0JJTkQpCiAJCQkqbm9kZW1hc2sgPSAmKCptcG9sKS0+di5ub2RlczsKIAl9CkBAIC0xODIwLDcgKzE4MTksNyBAQAogICovCiBzdHJ1Y3QgcGFnZSAqCiBhbGxvY19wYWdlc192bWEoZ2ZwX3QgZ2ZwLCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHIpCisJCXVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpCiB7CiAJc3RydWN0IG1lbXBvbGljeSAqcG9sID0gZ2V0X3ZtYV9wb2xpY3koY3VycmVudCwgdm1hLCBhZGRyKTsKIAlzdHJ1Y3Qgem9uZWxpc3QgKnpsOwpAQCAtMTgzMCwxMyArMTgyOSwxMyBAQAogCWlmICh1bmxpa2VseShwb2wtPm1vZGUgPT0gTVBPTF9JTlRFUkxFQVZFKSkgewogCQl1bnNpZ25lZCBuaWQ7CiAKLQkJbmlkID0gaW50ZXJsZWF2ZV9uaWQocG9sLCB2bWEsIGFkZHIsIFBBR0VfU0hJRlQpOworCQluaWQgPSBpbnRlcmxlYXZlX25pZChwb2wsIHZtYSwgYWRkciwgUEFHRV9TSElGVCArIG9yZGVyKTsKIAkJbXBvbF9jb25kX3B1dChwb2wpOwogCQlwYWdlID0gYWxsb2NfcGFnZV9pbnRlcmxlYXZlKGdmcCwgb3JkZXIsIG5pZCk7CiAJCXB1dF9tZW1zX2FsbG93ZWQoKTsKIAkJcmV0dXJuIHBhZ2U7CiAJfQotCXpsID0gcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sKTsKKwl6bCA9IHBvbGljeV96b25lbGlzdChnZnAsIHBvbCwgbm9kZSk7CiAJaWYgKHVubGlrZWx5KG1wb2xfbmVlZHNfY29uZF9yZWYocG9sKSkpIHsKIAkJLyoKIAkJICogc2xvdyBwYXRoOiByZWYgY291bnRlZCBzaGFyZWQgcG9saWN5CkBAIC0xODkyLDcgKzE4OTEsOCBAQAogCQlwYWdlID0gYWxsb2NfcGFnZV9pbnRlcmxlYXZlKGdmcCwgb3JkZXIsIGludGVybGVhdmVfbm9kZXMocG9sKSk7CiAJZWxzZQogCQlwYWdlID0gX19hbGxvY19wYWdlc19ub2RlbWFzayhnZnAsIG9yZGVyLAotCQkJcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sKSwgcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sKSk7CisJCQkJcG9saWN5X3pvbmVsaXN0KGdmcCwgcG9sLCBudW1hX25vZGVfaWQoKSksCisJCQkJcG9saWN5X25vZGVtYXNrKGdmcCwgcG9sKSk7CiAJcHV0X21lbXNfYWxsb3dlZCgpOwogCXJldHVybiBwYWdlOwogfQpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDQ2ZmU4Y2MuLjM1MmRlNTU1IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKKysrIGIvbW0vbWlncmF0ZS5jCkBAIC03NzIsNiArNzcyLDcgQEAKIHVubG9jazoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorbW92ZV9uZXdwYWdlOgogCWlmIChyYyAhPSAtRUFHQUlOKSB7CiAgCQkvKgogIAkJICogQSBwYWdlIHRoYXQgaGFzIGJlZW4gbWlncmF0ZWQgaGFzIGFsbCByZWZlcmVuY2VzCkBAIC03ODUsOCArNzg2LDYgQEAKIAkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIAl9CiAKLW1vdmVfbmV3cGFnZToKLQogCS8qCiAJICogTW92ZSB0aGUgbmV3IHBhZ2UgdG8gdGhlIExSVS4gSWYgbWlncmF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bAogCSAqIHRoZW4gdGhpcyB3aWxsIGZyZWUgdGhlIHBhZ2UuCkBAIC04ODgsNyArODg3LDcgQEAKICAqIGFyZSBtb3ZhYmxlIGFueW1vcmUgYmVjYXVzZSB0byBoYXMgYmVjb21lIGVtcHR5CiAgKiBvciBubyByZXRyeWFibGUgcGFnZXMgZXhpc3QgYW55bW9yZS4KICAqIENhbGxlciBzaG91bGQgY2FsbCBwdXRiYWNrX2xydV9wYWdlcyB0byByZXR1cm4gcGFnZXMgdG8gdGhlIExSVQotICogb3IgZnJlZSBsaXN0LgorICogb3IgZnJlZSBsaXN0IG9ubHkgaWYgcmV0ICE9IDAuCiAgKgogICogUmV0dXJuOiBOdW1iZXIgb2YgcGFnZXMgbm90IG1pZ3JhdGVkIG9yIGVycm9yIGNvZGUuCiAgKi8KQEAgLTk4MSwxMCArOTgwLDYgQEAKIAl9CiAJcmMgPSAwOwogb3V0OgotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBhZ2UsIHBhZ2UyLCBmcm9tLCBscnUpCi0JCXB1dF9wYWdlKHBhZ2UpOwotCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKQEAgLTEyOTIsMTQgKzEyODcsMTQgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCS8qIEZpbmQgdGhlIG1tX3N0cnVjdCAqLwotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfbG9jaygpOwogCXRhc2sgPSBwaWQgPyBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpIDogY3VycmVudDsKIAlpZiAoIXRhc2spIHsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FU1JDSDsKIAl9CiAJbW0gPSBnZXRfdGFza19tbSh0YXNrKTsKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAoIW1tKQogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jCmluZGV4IDEzZTgxZWUuLmMzOTI0YzdmIDEwMDY0NAotLS0gYS9tbS9tbG9jay5jCisrKyBiL21tL21sb2NrLmMKQEAgLTE3OCw2ICsxNzgsMTMgQEAKIAlpZiAoKHZtYS0+dm1fZmxhZ3MgJiAoVk1fV1JJVEUgfCBWTV9TSEFSRUQpKSA9PSBWTV9XUklURSkKIAkJZ3VwX2ZsYWdzIHw9IEZPTExfV1JJVEU7CiAKKwkvKgorCSAqIFdlIHdhbnQgbWxvY2sgdG8gc3VjY2VlZCBmb3IgcmVnaW9ucyB0aGF0IGhhdmUgYW55IHBlcm1pc3Npb25zCisJICogb3RoZXIgdGhhbiBQUk9UX05PTkUuCisJICovCisJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpCisJCWd1cF9mbGFncyB8PSBGT0xMX0ZPUkNFOworCiAJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpCiAJCWd1cF9mbGFncyB8PSBGT0xMX01MT0NLOwogCmRpZmYgLS1naXQgYS9tbS9tcmVtYXAuYyBiL21tL21yZW1hcC5jCmluZGV4IDk5MjViNjMuLjFkZTk4ZDQgMTAwNjQ0Ci0tLSBhL21tL21yZW1hcC5jCisrKyBiL21tL21yZW1hcC5jCkBAIC05NCw5ICs5NCw3IEBACiAJCSAqLwogCQltYXBwaW5nID0gdm1hLT52bV9maWxlLT5mX21hcHBpbmc7CiAJCXNwaW5fbG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwotCQlpZiAobmV3X3ZtYS0+dm1fdHJ1bmNhdGVfY291bnQgJiYKLQkJICAgIG5ld192bWEtPnZtX3RydW5jYXRlX2NvdW50ICE9IHZtYS0+dm1fdHJ1bmNhdGVfY291bnQpCi0JCQluZXdfdm1hLT52bV90cnVuY2F0ZV9jb3VudCA9IDA7CisJCW5ld192bWEtPnZtX3RydW5jYXRlX2NvdW50ID0gMDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDkwYzE0MzkuLmNkZWYxZDQgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTEwODgsOCArMTA4OCwxMCBAQAogCQlwc2V0ID0gcGVyX2NwdV9wdHIoem9uZS0+cGFnZXNldCwgY3B1KTsKIAogCQlwY3AgPSAmcHNldC0+cGNwOwotCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKLQkJcGNwLT5jb3VudCA9IDA7CisJCWlmIChwY3AtPmNvdW50KSB7CisJCQlmcmVlX3BjcHBhZ2VzX2J1bGsoem9uZSwgcGNwLT5jb3VudCwgcGNwKTsKKwkJCXBjcC0+Y291bnQgPSAwOworCQl9CiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiB9CkBAIC0yMDM0LDYgKzIwMzYsMTQgQEAKIAkgKi8KIAlhbGxvY19mbGFncyA9IGdmcF90b19hbGxvY19mbGFncyhnZnBfbWFzayk7CiAKKwkvKgorCSAqIEZpbmQgdGhlIHRydWUgcHJlZmVycmVkIHpvbmUgaWYgdGhlIGFsbG9jYXRpb24gaXMgdW5jb25zdHJhaW5lZCBieQorCSAqIGNwdXNldHMuCisJICovCisJaWYgKCEoYWxsb2NfZmxhZ3MgJiBBTExPQ19DUFVTRVQpICYmICFub2RlbWFzaykKKwkJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGhpZ2hfem9uZWlkeCwgTlVMTCwKKwkJCQkJJnByZWZlcnJlZF96b25lKTsKKwogCS8qIFRoaXMgaXMgdGhlIGxhc3QgY2hhbmNlLCBpbiBnZW5lcmFsLCBiZWZvcmUgdGhlIGdvdG8gbm9wYWdlLiAqLwogCXBhZ2UgPSBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF9tYXNrLCBub2RlbWFzaywgb3JkZXIsIHpvbmVsaXN0LAogCQkJaGlnaF96b25laWR4LCBhbGxvY19mbGFncyAmIH5BTExPQ19OT19XQVRFUk1BUktTLApAQCAtMjE5Miw3ICsyMjAyLDkgQEAKIAogCWdldF9tZW1zX2FsbG93ZWQoKTsKIAkvKiBUaGUgcHJlZmVycmVkIHpvbmUgaXMgdXNlZCBmb3Igc3RhdGlzdGljcyBsYXRlciAqLwotCWZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsIG5vZGVtYXNrLCAmcHJlZmVycmVkX3pvbmUpOworCWZpcnN0X3pvbmVzX3pvbmVsaXN0KHpvbmVsaXN0LCBoaWdoX3pvbmVpZHgsCisJCQkJbm9kZW1hc2sgPyA6ICZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJJnByZWZlcnJlZF96b25lKTsKIAlpZiAoIXByZWZlcnJlZF96b25lKSB7CiAJCXB1dF9tZW1zX2FsbG93ZWQoKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC01MzY0LDEwICs1Mzc2LDkgQEAKIAlmb3IgKGZvdW5kID0gMCwgaXRlciA9IDA7IGl0ZXIgPCBwYWdlYmxvY2tfbnJfcGFnZXM7IGl0ZXIrKykgewogCQl1bnNpZ25lZCBsb25nIGNoZWNrID0gcGZuICsgaXRlcjsKIAotCQlpZiAoIXBmbl92YWxpZF93aXRoaW4oY2hlY2spKSB7Ci0JCQlpdGVyKys7CisJCWlmICghcGZuX3ZhbGlkX3dpdGhpbihjaGVjaykpCiAJCQljb250aW51ZTsKLQkJfQorCiAJCXBhZ2UgPSBwZm5fdG9fcGFnZShjaGVjayk7CiAJCWlmICghcGFnZV9jb3VudChwYWdlKSkgewogCQkJaWYgKFBhZ2VCdWRkeShwYWdlKSkKZGlmZiAtLWdpdCBhL21tL3BndGFibGUtZ2VuZXJpYy5jIGIvbW0vcGd0YWJsZS1nZW5lcmljLmMKaW5kZXggMDM2OWY1Yi4uZWI2NjNmYiAxMDA2NDQKLS0tIGEvbW0vcGd0YWJsZS1nZW5lcmljLmMKKysrIGIvbW0vcGd0YWJsZS1nZW5lcmljLmMKQEAgLTYsNiArNiw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDEwICBMaW51cyBUb3J2YWxkcwogICovCiAKKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3RsYi5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUuaD4KIApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggMDdhNDU4ZC4uMDM0MWM1NyAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xOTQwLDcgKzE5NDAsNyBAQAogCiAJZXJyb3IgPSAtRUlOVkFMOwogCWlmIChTX0lTQkxLKGlub2RlLT5pX21vZGUpKSB7Ci0JCWJkZXYgPSBJX0JERVYoaW5vZGUpOworCQliZGV2ID0gYmRncmFiKElfQkRFVihpbm9kZSkpOwogCQllcnJvciA9IGJsa2Rldl9nZXQoYmRldiwgRk1PREVfUkVBRCB8IEZNT0RFX1dSSVRFIHwgRk1PREVfRVhDTCwKIAkJCQkgICBzeXNfc3dhcG9uKTsKIAkJaWYgKGVycm9yIDwgMCkgewpkaWZmIC0tZ2l0IGEvbW0vdHJ1bmNhdGUuYyBiL21tL3RydW5jYXRlLmMKaW5kZXggNDlmZWI0Ni4uZDY0Mjk2YiAxMDA2NDQKLS0tIGEvbW0vdHJ1bmNhdGUuYworKysgYi9tbS90cnVuY2F0ZS5jCkBAIC0yMjUsNiArMjI1LDcgQEAKIAluZXh0ID0gc3RhcnQ7CiAJd2hpbGUgKG5leHQgPD0gZW5kICYmCiAJICAgICAgIHBhZ2V2ZWNfbG9va3VwKCZwdmVjLCBtYXBwaW5nLCBuZXh0LCBQQUdFVkVDX1NJWkUpKSB7CisJCW1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3RhcnQoKTsKIAkJZm9yIChpID0gMDsgaSA8IHBhZ2V2ZWNfY291bnQoJnB2ZWMpOyBpKyspIHsKIAkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKIAkJCXBnb2ZmX3QgcGFnZV9pbmRleCA9IHBhZ2UtPmluZGV4OwpAQCAtMjQ3LDYgKzI0OCw3IEBACiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQogCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOworCQltZW1fY2dyb3VwX3VuY2hhcmdlX2VuZCgpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggZjVkOTBkZS4uNjc3MWVhNyAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTE4NDEsMTYgKzE4NDEsMjggQEAKIAlpZiAoIShzYy0+cmVjbGFpbV9tb2RlICYgUkVDTEFJTV9NT0RFX0NPTVBBQ1RJT04pKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKgotCSAqIElmIHdlIGZhaWxlZCB0byByZWNsYWltIGFuZCBoYXZlIHNjYW5uZWQgdGhlIGZ1bGwgbGlzdCwgc3RvcC4KLQkgKiBOT1RFOiBDaGVja2luZyBqdXN0IG5yX3JlY2xhaW1lZCB3b3VsZCBleGl0IHJlY2xhaW0vY29tcGFjdGlvbiBmYXIKLQkgKiAgICAgICBmYXN0ZXIgYnV0IG9idmlvdXNseSB3b3VsZCBiZSBsZXNzIGxpa2VseSB0byBzdWNjZWVkCi0JICogICAgICAgYWxsb2NhdGlvbi4gSWYgdGhpcyBpcyBkZXNpcmFibGUsIHVzZSBHRlBfUkVQRUFUIHRvIGRlY2lkZQotCSAqICAgICAgIGlmIGJvdGggcmVjbGFpbWVkIGFuZCBzY2FubmVkIHNob3VsZCBiZSBjaGVja2VkIG9yIGp1c3QKLQkgKiAgICAgICByZWNsYWltZWQKLQkgKi8KLQlpZiAoIW5yX3JlY2xhaW1lZCAmJiAhbnJfc2Nhbm5lZCkKLQkJcmV0dXJuIGZhbHNlOworCS8qIENvbnNpZGVyIHN0b3BwaW5nIGRlcGVuZGluZyBvbiBzY2FuIGFuZCByZWNsYWltIGFjdGl2aXR5ICovCisJaWYgKHNjLT5nZnBfbWFzayAmIF9fR0ZQX1JFUEVBVCkgeworCQkvKgorCQkgKiBGb3IgX19HRlBfUkVQRUFUIGFsbG9jYXRpb25zLCBzdG9wIHJlY2xhaW1pbmcgaWYgdGhlCisJCSAqIGZ1bGwgTFJVIGxpc3QgaGFzIGJlZW4gc2Nhbm5lZCBhbmQgd2UgYXJlIHN0aWxsIGZhaWxpbmcKKwkJICogdG8gcmVjbGFpbSBwYWdlcy4gVGhpcyBmdWxsIExSVSBzY2FuIGlzIHBvdGVudGlhbGx5CisJCSAqIGV4cGVuc2l2ZSBidXQgYSBfX0dGUF9SRVBFQVQgY2FsbGVyIHJlYWxseSB3YW50cyB0byBzdWNjZWVkCisJCSAqLworCQlpZiAoIW5yX3JlY2xhaW1lZCAmJiAhbnJfc2Nhbm5lZCkKKwkJCXJldHVybiBmYWxzZTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3Igbm9uLV9fR0ZQX1JFUEVBVCBhbGxvY2F0aW9ucyB3aGljaCBjYW4gcHJlc3VtYWJseQorCQkgKiBmYWlsIHdpdGhvdXQgY29uc2VxdWVuY2UsIHN0b3AgaWYgd2UgZmFpbGVkIHRvIHJlY2xhaW0KKwkJICogYW55IHBhZ2VzIGZyb20gdGhlIGxhc3QgU1dBUF9DTFVTVEVSX01BWCBudW1iZXIgb2YKKwkJICogcGFnZXMgdGhhdCB3ZXJlIHNjYW5uZWQuIFRoaXMgd2lsbCByZXR1cm4gdG8gdGhlCisJCSAqIGNhbGxlciBmYXN0ZXIgYXQgdGhlIHJpc2sgcmVjbGFpbS9jb21wYWN0aW9uIGFuZAorCQkgKiB0aGUgcmVzdWx0aW5nIGFsbG9jYXRpb24gYXR0ZW1wdCBmYWlscworCQkgKi8KKwkJaWYgKCFucl9yZWNsYWltZWQpCisJCQlyZXR1cm4gZmFsc2U7CisJfQogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIG5vdCByZWNsYWltZWQgZW5vdWdoIHBhZ2VzIGZvciBjb21wYWN0aW9uIGFuZCB0aGUKQEAgLTE4ODIsMTIgKzE4OTQsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107CiAJdW5zaWduZWQgbG9uZyBucl90b19zY2FuOwogCWVudW0gbHJ1X2xpc3QgbDsKLQl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZDsKKwl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZDsKIAl1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW0gPSBzYy0+bnJfdG9fcmVjbGFpbTsKLQl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQgPSBzYy0+bnJfc2Nhbm5lZDsKIAogcmVzdGFydDoKIAlucl9yZWNsYWltZWQgPSAwOworCW5yX3NjYW5uZWQgPSBzYy0+bnJfc2Nhbm5lZDsKIAlnZXRfc2Nhbl9jb3VudCh6b25lLCBzYywgbnIsIHByaW9yaXR5KTsKIAogCXdoaWxlIChucltMUlVfSU5BQ1RJVkVfQU5PTl0gfHwgbnJbTFJVX0FDVElWRV9GSUxFXSB8fApAQCAtMjA4Myw3ICsyMDk1LDggQEAKIAkJCXN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZTsKIAogCQkJZmlyc3Rfem9uZXNfem9uZWxpc3Qoem9uZWxpc3QsIGdmcF96b25lKHNjLT5nZnBfbWFzayksCi0JCQkJCQkJTlVMTCwgJnByZWZlcnJlZF96b25lKTsKKwkJCQkJCSZjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQsCisJCQkJCQkmcHJlZmVycmVkX3pvbmUpOwogCQkJd2FpdF9pZmZfY29uZ2VzdGVkKHByZWZlcnJlZF96b25lLCBCTEtfUldfQVNZTkMsIEhaLzEwKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L3VuaWNhc3QuYwppbmRleCBlZTQxZmVmLi5kMWE2MTEzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi91bmljYXN0LmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdW5pY2FzdC5jCkBAIC01MCwxMiArNTAsMTIgQEAKIAkJc2tiID0gdGZwLT5za2I7CiAJfQogCisJaWYgKHNrYl9saW5lYXJpemUoc2tiKSA8IDAgfHwgc2tiX2xpbmVhcml6ZSh0bXBfc2tiKSA8IDApCisJCWdvdG8gZXJyOworCiAJc2tiX3B1bGwodG1wX3NrYiwgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X2ZyYWdfcGFja2V0KSk7Ci0JaWYgKHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCB0bXBfc2tiLT5sZW4sIEdGUF9BVE9NSUMpIDwgMCkgewotCQkvKiBmcmVlIGJ1ZmZlcmVkIHNrYiwgc2tiIHdpbGwgYmUgZnJlZWQgbGF0ZXIgKi8KLQkJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCWlmIChwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgdG1wX3NrYi0+bGVuLCBHRlBfQVRPTUlDKSA8IDApCisJCWdvdG8gZXJyOwogCiAJLyogbW92ZSBmcmVlIGVudHJ5IHRvIGVuZCAqLwogCXRmcC0+c2tiID0gTlVMTDsKQEAgLTcwLDYgKzcwLDExIEBACiAJdW5pY2FzdF9wYWNrZXQtPnBhY2tldF90eXBlID0gQkFUX1VOSUNBU1Q7CiAKIAlyZXR1cm4gc2tiOworCitlcnI6CisJLyogZnJlZSBidWZmZXJlZCBza2IsIHNrYiB3aWxsIGJlIGZyZWVkIGxhdGVyICovCisJa2ZyZWVfc2tiKHRmcC0+c2tiKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZnJhZ19jcmVhdGVfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3Zpcy5jIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKaW5kZXggY2Q0YzQyMy4uZGUxMDIyYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdmlzLmMKKysrIGIvbmV0L2JhdG1hbi1hZHYvdmlzLmMKQEAgLTY0LDYgKzY0LDcgQEAKIAogCXNwaW5fdW5sb2NrX2JoKCZiYXRfcHJpdi0+dmlzX2xpc3RfbG9jayk7CiAJa2ZyZWVfc2tiKGluZm8tPnNrYl9wYWNrZXQpOworCWtmcmVlKGluZm8pOwogfQogCiAvKiBDb21wYXJlIHR3byB2aXMgcGFja2V0cywgdXNlZCBieSB0aGUgaGFzaGluZyBhbGdvcml0aG0gKi8KQEAgLTI2OCwxMCArMjY5LDEwIEBACiAJCQkJYnVmZl9wb3MgKz0gc3ByaW50ZihidWZmICsgYnVmZl9wb3MsICIlcE0sIiwKIAkJCQkJCWVudHJ5LT5hZGRyKTsKIAotCQkJCWZvciAoaSA9IDA7IGkgPCBwYWNrZXQtPmVudHJpZXM7IGkrKykKKwkJCQlmb3IgKGogPSAwOyBqIDwgcGFja2V0LT5lbnRyaWVzOyBqKyspCiAJCQkJCWJ1ZmZfcG9zICs9IHZpc19kYXRhX3JlYWRfZW50cnkoCiAJCQkJCQkJYnVmZiArIGJ1ZmZfcG9zLAotCQkJCQkJCSZlbnRyaWVzW2ldLAorCQkJCQkJCSZlbnRyaWVzW2pdLAogCQkJCQkJCWVudHJ5LT5hZGRyLAogCQkJCQkJCWVudHJ5LT5wcmltYXJ5KTsKIApAQCAtNDQ0LDcgKzQ0NSw3IEBACiAJCQkgICAgICBpbmZvKTsKIAlpZiAoaGFzaF9hZGRlZCA8IDApIHsKIAkJLyogZGlkIG5vdCB3b3JrIChmb3Igc29tZSByZWFzb24pICovCi0JCWtyZWZfcHV0KCZvbGRfaW5mby0+cmVmY291bnQsIGZyZWVfaW5mbyk7CisJCWtyZWZfcHV0KCZpbmZvLT5yZWZjb3VudCwgZnJlZV9pbmZvKTsKIAkJaW5mbyA9IE5VTEw7CiAJfQogCkBAIC04MTUsNyArODE2LDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZWxheWVkX3dvcmssIHdvcmspOwogCXN0cnVjdCBiYXRfcHJpdiAqYmF0X3ByaXYgPQogCQljb250YWluZXJfb2YoZGVsYXllZF93b3JrLCBzdHJ1Y3QgYmF0X3ByaXYsIHZpc193b3JrKTsKLQlzdHJ1Y3QgdmlzX2luZm8gKmluZm8sICp0ZW1wOworCXN0cnVjdCB2aXNfaW5mbyAqaW5mbzsKIAogCXNwaW5fbG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwogCXB1cmdlX3Zpc19wYWNrZXRzKGJhdF9wcml2KTsKQEAgLTgyNSw4ICs4MjYsOSBAQAogCQlzZW5kX2xpc3RfYWRkKGJhdF9wcml2LCBiYXRfcHJpdi0+bXlfdmlzX2luZm8pOwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpbmZvLCB0ZW1wLCAmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QsCi0JCQkJIHNlbmRfbGlzdCkgeworCXdoaWxlICghbGlzdF9lbXB0eSgmYmF0X3ByaXYtPnZpc19zZW5kX2xpc3QpKSB7CisJCWluZm8gPSBsaXN0X2ZpcnN0X2VudHJ5KCZiYXRfcHJpdi0+dmlzX3NlbmRfbGlzdCwKKwkJCQkJdHlwZW9mKCppbmZvKSwgc2VuZF9saXN0KTsKIAogCQlrcmVmX2dldCgmaW5mby0+cmVmY291bnQpOwogCQlzcGluX3VubG9ja19iaCgmYmF0X3ByaXYtPnZpc19oYXNoX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jIGIvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCmluZGV4IDZiOTBhNDEuLjk5Y2Q4ZDkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKQEAgLTM3OSwxNCArMzc5LDEwIEBACiAJaGNpX2Nvbm5faG9sZChhY2wpOwogCiAJaWYgKGFjbC0+c3RhdGUgPT0gQlRfT1BFTiB8fCBhY2wtPnN0YXRlID09IEJUX0NMT1NFRCkgewotCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJYWNsLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CisJCWFjbC0+cGVuZGluZ19zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJCWFjbC0+YXV0aF90eXBlID0gYXV0aF90eXBlOwogCQloY2lfYWNsX2Nvbm5lY3QoYWNsKTsKLQl9IGVsc2UgewotCQlpZiAoYWNsLT5zZWNfbGV2ZWwgPCBzZWNfbGV2ZWwpCi0JCQlhY2wtPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKLQkJaWYgKGFjbC0+YXV0aF90eXBlIDwgYXV0aF90eXBlKQotCQkJYWNsLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAJfQogCiAJaWYgKHR5cGUgPT0gQUNMX0xJTkspCkBAIC00NDIsMTEgKzQzOCwxNyBAQAogewogCUJUX0RCRygiY29ubiAlcCIsIGNvbm4pOwogCisJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID4gc2VjX2xldmVsKQorCQlzZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKKwogCWlmIChzZWNfbGV2ZWwgPiBjb25uLT5zZWNfbGV2ZWwpCi0JCWNvbm4tPnNlY19sZXZlbCA9IHNlY19sZXZlbDsKKwkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgPSBzZWNfbGV2ZWw7CiAJZWxzZSBpZiAoY29ubi0+bGlua19tb2RlICYgSENJX0xNX0FVVEgpCiAJCXJldHVybiAxOwogCisJLyogTWFrZSBzdXJlIHdlIHByZXNlcnZlIGFuIGV4aXN0aW5nIE1JVE0gcmVxdWlyZW1lbnQqLworCWF1dGhfdHlwZSB8PSAoY29ubi0+YXV0aF90eXBlICYgMHgwMSk7CisKIAljb25uLT5hdXRoX3R5cGUgPSBhdXRoX3R5cGU7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSENJX0NPTk5fQVVUSF9QRU5ELCAmY29ubi0+cGVuZCkpIHsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA4YjYwMmQ4Li45YzQ1NDFiIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC0xMDExLDYgKzEwMTEsMTAgQEAKIAogCWRlc3Ryb3lfd29ya3F1ZXVlKGhkZXYtPndvcmtxdWV1ZSk7CiAKKwloY2lfZGV2X2xvY2tfYmgoaGRldik7CisJaGNpX2JsYWNrbGlzdF9jbGVhcihoZGV2KTsKKwloY2lfZGV2X3VubG9ja19iaChoZGV2KTsKKwogCV9faGNpX2Rldl9wdXQoaGRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDM4MTAwMTcuLmEyOTA4NTQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNjkyLDEzICs2OTIsMTMgQEAKIAlpZiAoY29ubi0+c3RhdGUgIT0gQlRfQ09ORklHIHx8ICFjb25uLT5vdXQpCiAJCXJldHVybiAwOwogCi0JaWYgKGNvbm4tPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9TRFApCisJaWYgKGNvbm4tPnBlbmRpbmdfc2VjX2xldmVsID09IEJUX1NFQ1VSSVRZX1NEUCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBPbmx5IHJlcXVlc3QgYXV0aGVudGljYXRpb24gZm9yIFNTUCBjb25uZWN0aW9ucyBvciBub24tU1NQCiAJICogZGV2aWNlcyB3aXRoIHNlY19sZXZlbCBISUdIICovCiAJaWYgKCEoaGRldi0+c3NwX21vZGUgPiAwICYmIGNvbm4tPnNzcF9tb2RlID4gMCkgJiYKLQkJCQkJY29ubi0+c2VjX2xldmVsICE9IEJUX1NFQ1VSSVRZX0hJR0gpCisJCQkJY29ubi0+cGVuZGluZ19zZWNfbGV2ZWwgIT0gQlRfU0VDVVJJVFlfSElHSCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKQEAgLTEwOTUsOSArMTA5NSwxMCBAQAogCiAJY29ubiA9IGhjaV9jb25uX2hhc2hfbG9va3VwX2hhbmRsZShoZGV2LCBfX2xlMTZfdG9fY3B1KGV2LT5oYW5kbGUpKTsKIAlpZiAoY29ubikgewotCQlpZiAoIWV2LT5zdGF0dXMpCisJCWlmICghZXYtPnN0YXR1cykgewogCQkJY29ubi0+bGlua19tb2RlIHw9IEhDSV9MTV9BVVRIOwotCQllbHNlCisJCQljb25uLT5zZWNfbGV2ZWwgPSBjb25uLT5wZW5kaW5nX3NlY19sZXZlbDsKKwkJfSBlbHNlCiAJCQljb25uLT5zZWNfbGV2ZWwgPSBCVF9TRUNVUklUWV9MT1c7CiAKIAkJY2xlYXJfYml0KEhDSV9DT05OX0FVVEhfUEVORCwgJmNvbm4tPnBlbmQpOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9sMmNhcC5jIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCmluZGV4IGM3OTFmY2QuLjY3NTYxNGUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXAuYworKysgYi9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKQEAgLTMwNSwzMyArMzA1LDQ0IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHU4IGwyY2FwX2dldF9hdXRoX3R5cGUoc3RydWN0IHNvY2sgKnNrKQoreworCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX1JBVykgeworCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7CisJCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKKwkJCXJldHVybiBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKKwkJY2FzZSBCVF9TRUNVUklUWV9NRURJVU06CisJCQlyZXR1cm4gSENJX0FUX0RFRElDQVRFRF9CT05ESU5HOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOworCQl9CisJfSBlbHNlIGlmIChsMmNhcF9waShzayktPnBzbSA9PSBjcHVfdG9fbGUxNigweDAwMDEpKSB7CisJCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCisJCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKKworCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKKwkJCXJldHVybiBIQ0lfQVRfTk9fQk9ORElOR19NSVRNOworCQllbHNlCisJCQlyZXR1cm4gSENJX0FUX05PX0JPTkRJTkc7CisJfSBlbHNlIHsKKwkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgeworCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6CisJCQlyZXR1cm4gSENJX0FUX0dFTkVSQUxfQk9ORElOR19NSVRNOworCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKKwkJCXJldHVybiBIQ0lfQVRfR0VORVJBTF9CT05ESU5HOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIEhDSV9BVF9OT19CT05ESU5HOworCQl9CisJfQorfQorCiAvKiBTZXJ2aWNlIGxldmVsIHNlY3VyaXR5ICovCiBzdGF0aWMgaW5saW5lIGludCBsMmNhcF9jaGVja19zZWN1cml0eShzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGwyY2FwX2Nvbm4gKmNvbm4gPSBsMmNhcF9waShzayktPmNvbm47CiAJX191OCBhdXRoX3R5cGU7CiAKLQlpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07Ci0JCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CiAKIAlyZXR1cm4gaGNpX2Nvbm5fc2VjdXJpdHkoY29ubi0+aGNvbiwgbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsCiAJCQkJCQkJCWF1dGhfdHlwZSk7CkBAIC04NDgsNiArODU5LDcgQEAKIAkJCQlyZXN1bHQgPSBMMkNBUF9DUl9TRUNfQkxPQ0s7CiAJCQllbHNlCiAJCQkJcmVzdWx0ID0gTDJDQVBfQ1JfQkFEX1BTTTsKKwkJCXNrLT5za19zdGF0ZSA9IEJUX0RJU0NPTk47CiAKIAkJCXJzcC5zY2lkICAgPSBjcHVfdG9fbGUxNihsMmNhcF9waShzayktPmRjaWQpOwogCQkJcnNwLmRjaWQgICA9IGNwdV90b19sZTE2KGwyY2FwX3BpKHNrKS0+c2NpZCk7CkBAIC0xMDY4LDM5ICsxMDgwLDcgQEAKIAogCWVyciA9IC1FTk9NRU07CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19SQVcpIHsKLQkJc3dpdGNoIChsMmNhcF9waShzayktPnNlY19sZXZlbCkgewotCQljYXNlIEJUX1NFQ1VSSVRZX0hJR0g6Ci0JCQlhdXRoX3R5cGUgPSBIQ0lfQVRfREVESUNBVEVEX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9ERURJQ0FURURfQk9ORElORzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYXV0aF90eXBlID0gSENJX0FUX05PX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSBpZiAobDJjYXBfcGkoc2spLT5wc20gPT0gY3B1X3RvX2xlMTYoMHgwMDAxKSkgewotCQlpZiAobDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwgPT0gQlRfU0VDVVJJVFlfSElHSCkKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HX01JVE07Ci0JCWVsc2UKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCi0JCWlmIChsMmNhcF9waShzayktPnNlY19sZXZlbCA9PSBCVF9TRUNVUklUWV9MT1cpCi0JCQlsMmNhcF9waShzayktPnNlY19sZXZlbCA9IEJUX1NFQ1VSSVRZX1NEUDsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGwyY2FwX3BpKHNrKS0+c2VjX2xldmVsKSB7Ci0JCWNhc2UgQlRfU0VDVVJJVFlfSElHSDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkdfTUlUTTsKLQkJCWJyZWFrOwotCQljYXNlIEJUX1NFQ1VSSVRZX01FRElVTToKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9HRU5FUkFMX0JPTkRJTkc7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWF1dGhfdHlwZSA9IEhDSV9BVF9OT19CT05ESU5HOwotCQkJYnJlYWs7Ci0JCX0KLQl9CisJYXV0aF90eXBlID0gbDJjYXBfZ2V0X2F1dGhfdHlwZShzayk7CiAKIAloY29uID0gaGNpX2Nvbm5lY3QoaGRldiwgQUNMX0xJTkssIGRzdCwKIAkJCQkJbDJjYXBfcGkoc2spLT5zZWNfbGV2ZWwsIGF1dGhfdHlwZSk7CkBAIC0xMTI3LDcgKzExMDcsOCBAQAogCQlpZiAoc2stPnNrX3R5cGUgIT0gU09DS19TRVFQQUNLRVQgJiYKIAkJCQlzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkgewogCQkJbDJjYXBfc29ja19jbGVhcl90aW1lcihzayk7Ci0JCQlzay0+c2tfc3RhdGUgPSBCVF9DT05ORUNURUQ7CisJCQlpZiAobDJjYXBfY2hlY2tfc2VjdXJpdHkoc2spKQorCQkJCXNrLT5za19zdGF0ZSA9IEJUX0NPTk5FQ1RFRDsKIAkJfSBlbHNlCiAJCQlsMmNhcF9kb19zdGFydChzayk7CiAJfQpAQCAtMTg5Myw4ICsxODc0LDggQEAKIAkJaWYgKHBpLT5tb2RlID09IEwyQ0FQX01PREVfU1RSRUFNSU5HKSB7CiAJCQlsMmNhcF9zdHJlYW1pbmdfc2VuZChzayk7CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGktPmNvbm5fc3RhdGUgJiBMMkNBUF9DT05OX1JFTU9URV9CVVNZICYmCi0JCQkJCXBpLT5jb25uX3N0YXRlICYmIEwyQ0FQX0NPTk5fV0FJVF9GKSB7CisJCQlpZiAoKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9SRU1PVEVfQlVTWSkgJiYKKwkJCQkJKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9XQUlUX0YpKSB7CiAJCQkJZXJyID0gbGVuOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCmluZGV4IGZmOGFhYTcuLjZiODM3NzYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKQEAgLTExNjQsNyArMTE2NCw4IEBACiAJCQkgKiBpbml0aWF0b3IgcmZjb21tX3Byb2Nlc3NfcnggYWxyZWFkeSBjYWxscwogCQkJICogcmZjb21tX3Nlc3Npb25fcHV0KCkgKi8KIAkJCWlmIChzLT5zb2NrLT5zay0+c2tfc3RhdGUgIT0gQlRfQ0xPU0VEKQotCQkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKKwkJCQlpZiAobGlzdF9lbXB0eSgmcy0+ZGxjcykpCisJCQkJCXJmY29tbV9zZXNzaW9uX3B1dChzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9yZmNvbW0vdHR5LmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwppbmRleCAyNTc1YzJkLi5kN2I5YWY0IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYworKysgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYwpAQCAtNzI3LDcgKzcyNyw5IEBACiAJCQlicmVhazsKIAkJfQogCisJCXR0eV91bmxvY2soKTsKIAkJc2NoZWR1bGUoKTsKKwkJdHR5X2xvY2soKTsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmZGV2LT53YWl0LCAmd2FpdCk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCAyODcyMzkzLi44ODQ4NWNjIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jCisrKyBiL25ldC9icmlkZ2UvYnJfZmRiLmMKQEAgLTMyOCwxMiArMzI4LDEyIEBACiAJZmRiID0ga21lbV9jYWNoZV9hbGxvYyhicl9mZGJfY2FjaGUsIEdGUF9BVE9NSUMpOwogCWlmIChmZGIpIHsKIAkJbWVtY3B5KGZkYi0+YWRkci5hZGRyLCBhZGRyLCBFVEhfQUxFTik7Ci0JCWhsaXN0X2FkZF9oZWFkX3JjdSgmZmRiLT5obGlzdCwgaGVhZCk7Ci0KIAkJZmRiLT5kc3QgPSBzb3VyY2U7CiAJCWZkYi0+aXNfbG9jYWwgPSBpc19sb2NhbDsKIAkJZmRiLT5pc19zdGF0aWMgPSBpc19sb2NhbDsKIAkJZmRiLT5hZ2VpbmdfdGltZXIgPSBqaWZmaWVzOworCisJCWhsaXN0X2FkZF9oZWFkX3JjdSgmZmRiLT5obGlzdCwgaGVhZCk7CiAJfQogCXJldHVybiBmZGI7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lucHV0LmMgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKaW5kZXggNmY2ZDhlMS4uODhlNGFhOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jCisrKyBiL25ldC9icmlkZ2UvYnJfaW5wdXQuYwpAQCAtODAsNyArODAsNyBAQAogCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihkZXN0KSkgewogCQltZHN0ID0gYnJfbWRiX2dldChiciwgc2tiKTsKIAkJaWYgKG1kc3QgfHwgQlJfSU5QVVRfU0tCX0NCX01ST1VURVJTX09OTFkoc2tiKSkgewotCQkJaWYgKChtZHN0ICYmICFobGlzdF91bmhhc2hlZCgmbWRzdC0+bWdsaXN0KSkgfHwKKwkJCWlmICgobWRzdCAmJiBtZHN0LT5tZ2xpc3QpIHx8CiAJCQkgICAgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihicikpCiAJCQkJc2tiMiA9IHNrYjsKIAkJCWJyX211bHRpY2FzdF9mb3J3YXJkKG1kc3QsIHNrYiwgc2tiMik7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jIGIvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYwppbmRleCBmNzAxYTIxLi4wMzBhMDAyIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX211bHRpY2FzdC5jCisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTM3LDEwICszNyw5IEBACiAJcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChYLCBsb2NrZGVwX2lzX2hlbGQoJmJyLT5tdWx0aWNhc3RfbG9jaykpCiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKLXN0YXRpYyBpbmxpbmUgaW50IGlwdjZfaXNfbG9jYWxfbXVsdGljYXN0KGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IGlwdjZfaXNfdHJhbnNpZW50X211bHRpY2FzdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCiB7Ci0JaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoYWRkcikgJiYKLQkgICAgSVBWNl9BRERSX01DX1NDT1BFKGFkZHIpIDw9IElQVjZfQUREUl9TQ09QRV9MSU5LTE9DQUwpCisJaWYgKGlwdjZfYWRkcl9pc19tdWx0aWNhc3QoYWRkcikgJiYgSVBWNl9BRERSX01DX0ZMQUdfVFJBTlNJRU5UKGFkZHIpKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMiw4ICsyMzEsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCB0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpKQogCQlnb3RvIG91dDsKIAotCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpKQotCQlobGlzdF9kZWxfaW5pdCgmbXAtPm1nbGlzdCk7CisJbXAtPm1nbGlzdCA9IGZhbHNlOwogCiAJaWYgKG1wLT5wb3J0cykKIAkJZ290byBvdXQ7CkBAIC0yNzYsNyArMjc0LDcgQEAKIAkJZGVsX3RpbWVyKCZwLT5xdWVyeV90aW1lcik7CiAJCWNhbGxfcmN1X2JoKCZwLT5yY3UsIGJyX211bHRpY2FzdF9mcmVlX3BnKTsKIAotCQlpZiAoIW1wLT5wb3J0cyAmJiBobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwkJaWYgKCFtcC0+cG9ydHMgJiYgIW1wLT5tZ2xpc3QgJiYKIAkJICAgIG5ldGlmX3J1bm5pbmcoYnItPmRldikpCiAJCQltb2RfdGltZXIoJm1wLT50aW1lciwgamlmZmllcyk7CiAKQEAgLTQzNiw3ICs0MzQsNiBAQAogCWV0aCA9IGV0aF9oZHIoc2tiKTsKIAogCW1lbWNweShldGgtPmhfc291cmNlLCBici0+ZGV2LT5kZXZfYWRkciwgNik7Ci0JaXB2Nl9ldGhfbWNfbWFwKGdyb3VwLCBldGgtPmhfZGVzdCk7CiAJZXRoLT5oX3Byb3RvID0gaHRvbnMoRVRIX1BfSVBWNik7CiAJc2tiX3B1dChza2IsIHNpemVvZigqZXRoKSk7CiAKQEAgLTQ0OCw4ICs0NDUsMTAgQEAKIAlpcDZoLT5wYXlsb2FkX2xlbiA9IGh0b25zKDggKyBzaXplb2YoKm1sZHEpKTsKIAlpcDZoLT5uZXh0aGRyID0gSVBQUk9UT19IT1BPUFRTOwogCWlwNmgtPmhvcF9saW1pdCA9IDE7Ci0JaXB2Nl9hZGRyX3NldCgmaXA2aC0+c2FkZHIsIDAsIDAsIDAsIDApOworCWlwdjZfZGV2X2dldF9zYWRkcihkZXZfbmV0KGJyLT5kZXYpLCBici0+ZGV2LCAmaXA2aC0+ZGFkZHIsIDAsCisJCQkgICAmaXA2aC0+c2FkZHIpOwogCWlwdjZfYWRkcl9zZXQoJmlwNmgtPmRhZGRyLCBodG9ubCgweGZmMDIwMDAwKSwgMCwgMCwgaHRvbmwoMSkpOworCWlwdjZfZXRoX21jX21hcCgmaXA2aC0+ZGFkZHIsIGV0aC0+aF9kZXN0KTsKIAogCWhvcG9wdCA9ICh1OCAqKShpcDZoICsgMSk7CiAJaG9wb3B0WzBdID0gSVBQUk9UT19JQ01QVjY7CQkvKiBuZXh0IGhkciAqLwpAQCAtNTI4LDcgKzUyNyw3IEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbXAtPmJyOwogCiAJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOwotCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCBobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgfHwKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgIW1wLT5tZ2xpc3QgfHwKIAkgICAgbXAtPnF1ZXJpZXNfc2VudCA+PSBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KQogCQlnb3RvIG91dDsKIApAQCAtNzE5LDcgKzcxOCw3IEBACiAJCWdvdG8gZXJyOwogCiAJaWYgKCFwb3J0KSB7Ci0JCWhsaXN0X2FkZF9oZWFkKCZtcC0+bWdsaXN0LCAmYnItPm1nbGlzdCk7CisJCW1wLT5tZ2xpc3QgPSB0cnVlOwogCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgYnItPm11bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzgxLDExICs3ODAsMTEgQEAKIHsKIAlzdHJ1Y3QgYnJfaXAgYnJfZ3JvdXA7CiAKLQlpZiAoaXB2Nl9pc19sb2NhbF9tdWx0aWNhc3QoZ3JvdXApKQorCWlmICghaXB2Nl9pc190cmFuc2llbnRfbXVsdGljYXN0KGdyb3VwKSkKIAkJcmV0dXJuIDA7CiAKIAlpcHY2X2FkZHJfY29weSgmYnJfZ3JvdXAudS5pcDYsIGdyb3VwKTsKLQlicl9ncm91cC5wcm90byA9IGh0b25zKEVUSF9QX0lQKTsKKwlicl9ncm91cC5wcm90byA9IGh0b25zKEVUSF9QX0lQVjYpOwogCiAJcmV0dXJuIGJyX211bHRpY2FzdF9hZGRfZ3JvdXAoYnIsIHBvcnQsICZicl9ncm91cCk7CiB9CkBAIC0xMDE0LDE4ICsxMDEzLDE5IEBACiAKIAkJbnNyY3MgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLAogCQkJCQkgICBsZW4gKyBvZmZzZXRvZihzdHJ1Y3QgbWxkMl9ncmVjLAotCQkJCQkJCSAgZ3JlY19tY2EpLAorCQkJCQkJCSAgZ3JlY19uc3JjcyksCiAJCQkJCSAgIHNpemVvZihfbnNyY3MpLCAmX25zcmNzKTsKIAkJaWYgKCFuc3JjcykKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmICghcHNrYl9tYXlfcHVsbChza2IsCiAJCQkJICAgbGVuICsgc2l6ZW9mKCpncmVjKSArCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiAoKm5zcmNzKSkpCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgKiBudG9ocygqbnNyY3MpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCWdyZWMgPSAoc3RydWN0IG1sZDJfZ3JlYyAqKShza2ItPmRhdGEgKyBsZW4pOwotCQlsZW4gKz0gc2l6ZW9mKCpncmVjKSArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogKCpuc3Jjcyk7CisJCWxlbiArPSBzaXplb2YoKmdyZWMpICsKKwkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICogbnRvaHMoKm5zcmNzKTsKIAogCQkvKiBXZSB0cmVhdCB0aGVzZSBhcyBNTER2MSByZXBvcnRzIGZvciBub3cuICovCiAJCXN3aXRjaCAoZ3JlYy0+Z3JlY190eXBlKSB7CkBAIC0xMTY1LDcgKzExNjUsNyBAQAogCiAJbWF4X2RlbGF5ICo9IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQ7CiAKLQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCWlmIChtcC0+bWdsaXN0ICYmCiAJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KIAkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKQpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKIAkJaWYgKHRpbWVyX3BlbmRpbmcoJnAtPnRpbWVyKSA/CiAJCSAgICB0aW1lX2FmdGVyKHAtPnRpbWVyLmV4cGlyZXMsIG5vdyArIG1heF9kZWxheSkgOgogCQkgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZwLT50aW1lcikgPj0gMCkKLQkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBtYXhfZGVsYXkpOworCQkJbW9kX3RpbWVyKCZwLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKIAl9CiAKIG91dDoKQEAgLTEyMzYsNyArMTIzNiw3IEBACiAJCWdvdG8gb3V0OwogCiAJbWF4X2RlbGF5ICo9IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQ7Ci0JaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwlpZiAobXAtPm1nbGlzdCAmJgogCSAgICAodGltZXJfcGVuZGluZygmbXAtPnRpbWVyKSA/CiAJICAgICB0aW1lX2FmdGVyKG1wLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKIAkgICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmbXAtPnRpbWVyKSA+PSAwKSkKQEAgLTEyNDgsNyArMTI0OCw3IEBACiAJCWlmICh0aW1lcl9wZW5kaW5nKCZwLT50aW1lcikgPwogCQkgICAgdGltZV9hZnRlcihwLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKIAkJICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmcC0+dGltZXIpID49IDApCi0JCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKKwkJCW1vZF90aW1lcigmcC0+dGltZXIsIG5vdyArIG1heF9kZWxheSk7CiAJfQogCiBvdXQ6CkBAIC0xMjgzLDcgKzEyODMsNyBAQAogCQkgICAgIGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWw7CiAKIAlpZiAoIXBvcnQpIHsKLQkJaWYgKCFobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwkJaWYgKG1wLT5tZ2xpc3QgJiYKIAkJICAgICh0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpID8KIAkJICAgICB0aW1lX2FmdGVyKG1wLT50aW1lci5leHBpcmVzLCB0aW1lKSA6CiAJCSAgICAgdHJ5X3RvX2RlbF90aW1lcl9zeW5jKCZtcC0+dGltZXIpID49IDApKSB7CkBAIC0xMzQxLDcgKzEzNDEsNyBAQAogewogCXN0cnVjdCBicl9pcCBicl9ncm91cDsKIAotCWlmIChpcHY2X2lzX2xvY2FsX211bHRpY2FzdChncm91cCkpCisJaWYgKCFpcHY2X2lzX3RyYW5zaWVudF9tdWx0aWNhc3QoZ3JvdXApKQogCQlyZXR1cm47CiAKIAlpcHY2X2FkZHJfY29weSgmYnJfZ3JvdXAudS5pcDYsIGdyb3VwKTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggODRhYWM3Ny4uNGUxYjYyMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTg0LDEzICs4NCwxMyBAQAogc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5CiB7CiAJc3RydWN0IGhsaXN0X25vZGUJCWhsaXN0WzJdOwotCXN0cnVjdCBobGlzdF9ub2RlCQltZ2xpc3Q7CiAJc3RydWN0IG5ldF9icmlkZ2UJCSpicjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwIF9fcmN1ICpwb3J0czsKIAlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0CQlxdWVyeV90aW1lcjsKIAlzdHJ1Y3QgYnJfaXAJCQlhZGRyOworCWJvb2wJCQkJbWdsaXN0OwogCXUzMgkJCQlxdWVyaWVzX3NlbnQ7CiB9OwogCkBAIC0yMzgsNyArMjM4LDYgQEAKIAlzcGlubG9ja190CQkJbXVsdGljYXN0X2xvY2s7CiAJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSBfX3JjdSAqbWRiOwogCXN0cnVjdCBobGlzdF9oZWFkCQlyb3V0ZXJfbGlzdDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZAkJbWdsaXN0OwogCiAJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9yb3V0ZXJfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9xdWVyaWVyX3RpbWVyOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2hubF9uZXQuYyBiL25ldC9jYWlmL2NobmxfbmV0LmMKaW5kZXggZmE5ZGFiMy4uNjAwOGQ2ZCAxMDA2NDQKLS0tIGEvbmV0L2NhaWYvY2hubF9uZXQuYworKysgYi9uZXQvY2FpZi9jaG5sX25ldC5jCkBAIC0zOTQsOSArMzk0LDcgQEAKIAlwcml2LT5jb25uX3JlcS5zb2NrYWRkci51LmRnbS5jb25uZWN0aW9uX2lkID0gLTE7CiAJcHJpdi0+Zmxvd2VuYWJsZWQgPSBmYWxzZTsKIAotCUFTU0VSVF9SVE5MKCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+bmV0bWdtdF93cSk7Ci0JbGlzdF9hZGQoJnByaXYtPmxpc3RfZmllbGQsICZjaG5sX25ldF9saXN0KTsKIH0KIAogCkBAIC00NTMsNiArNDUxLDggQEAKIAlyZXQgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAocmV0KQogCQlwcl93YXJuKCJkZXZpY2UgcnRtbCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwllbHNlCisJCWxpc3RfYWRkKCZjYWlmZGV2LT5saXN0X2ZpZWxkLCAmY2hubF9uZXRfbGlzdCk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwppbmRleCBkZmY2MzNkLi4wNWYzNTc4IDEwMDY0NAotLS0gYS9uZXQvY2VwaC9tZXNzZW5nZXIuYworKysgYi9uZXQvY2VwaC9tZXNzZW5nZXIuYwpAQCAtMjUyLDggKzI1MiwxMiBAQAogewogCXN0cnVjdCBrdmVjIGlvdiA9IHtidWYsIGxlbn07CiAJc3RydWN0IG1zZ2hkciBtc2cgPSB7IC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQgfCBNU0dfTk9TSUdOQUwgfTsKKwlpbnQgcjsKIAotCXJldHVybiBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBsZW4sIG1zZy5tc2dfZmxhZ3MpOworCXIgPSBrZXJuZWxfcmVjdm1zZyhzb2NrLCAmbXNnLCAmaW92LCAxLCBsZW4sIG1zZy5tc2dfZmxhZ3MpOworCWlmIChyID09IC1FQUdBSU4pCisJCXIgPSAwOworCXJldHVybiByOwogfQogCiAvKgpAQCAtMjY0LDEzICsyNjgsMTcgQEAKIAkJICAgICBzaXplX3Qga3ZsZW4sIHNpemVfdCBsZW4sIGludCBtb3JlKQogewogCXN0cnVjdCBtc2doZHIgbXNnID0geyAubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUIHwgTVNHX05PU0lHTkFMIH07CisJaW50IHI7CiAKIAlpZiAobW9yZSkKIAkJbXNnLm1zZ19mbGFncyB8PSBNU0dfTU9SRTsKIAllbHNlCiAJCW1zZy5tc2dfZmxhZ3MgfD0gTVNHX0VPUjsgIC8qIHN1cGVyZmx1b3VzLCBidXQgd2hhdCB0aGUgaGVsbCAqLwogCi0JcmV0dXJuIGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csIGlvdiwga3ZsZW4sIGxlbik7CisJciA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssICZtc2csIGlvdiwga3ZsZW4sIGxlbik7CisJaWYgKHIgPT0gLUVBR0FJTikKKwkJciA9IDA7CisJcmV0dXJuIHI7CiB9CiAKIApAQCAtMzI4LDcgKzMzNiw2IEBACiAJCWNlcGhfbXNnX3B1dChjb24tPm91dF9tc2cpOwogCQljb24tPm91dF9tc2cgPSBOVUxMOwogCX0KLQljb24tPm91dF9rZWVwYWxpdmVfcGVuZGluZyA9IGZhbHNlOwogCWNvbi0+aW5fc2VxID0gMDsKIAljb24tPmluX3NlcV9hY2tlZCA9IDA7CiB9CkBAIC04NDcsNiArODU0LDggQEAKIAkJICAgIChtc2ctPnBhZ2VzIHx8IG1zZy0+cGFnZWxpc3QgfHwgbXNnLT5iaW8gfHwgaW5fdHJhaWwpKQogCQkJa3VubWFwKHBhZ2UpOwogCisJCWlmIChyZXQgPT0gLUVBR0FJTikKKwkJCXJldCA9IDA7CiAJCWlmIChyZXQgPD0gMCkKIAkJCWdvdG8gb3V0OwogCkBAIC0xMjM4LDggKzEyNDcsNiBAQAogCQkgICAgIGNvbi0+YXV0aF9yZXRyeSk7CiAJCWlmIChjb24tPmF1dGhfcmV0cnkgPT0gMikgewogCQkJY29uLT5lcnJvcl9tc2cgPSAiY29ubmVjdCBhdXRob3JpemF0aW9uIGZhaWx1cmUiOwotCQkJcmVzZXRfY29ubmVjdGlvbihjb24pOwotCQkJc2V0X2JpdChDTE9TRUQsICZjb24tPnN0YXRlKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQljb24tPmF1dGhfcmV0cnkgPSAxOwpAQCAtMTcwNSwxNCArMTcxMiw2IEBACiAKIAkvKiBvcGVuIHRoZSBzb2NrZXQgZmlyc3Q/ICovCiAJaWYgKGNvbi0+c29jayA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIGlmIHdlIHdlcmUgU1RBTkRCWSBhbmQgYXJlIHJlY29ubmVjdGluZyBfdGhpc18KLQkJICogY29ubmVjdGlvbiwgYnVtcCBjb25uZWN0X3NlcSBub3cuICBBbHdheXMgYnVtcAotCQkgKiBnbG9iYWxfc2VxLgotCQkgKi8KLQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChTVEFOREJZLCAmY29uLT5zdGF0ZSkpCi0JCQljb24tPmNvbm5lY3Rfc2VxKys7Ci0KIAkJcHJlcGFyZV93cml0ZV9iYW5uZXIobXNnciwgY29uKTsKIAkJcHJlcGFyZV93cml0ZV9jb25uZWN0KG1zZ3IsIGNvbiwgMSk7CiAJCXByZXBhcmVfcmVhZF9iYW5uZXIoY29uKTsKQEAgLTE3MzcsMTYgKzE3MzYsMTIgQEAKIAlpZiAoY29uLT5vdXRfc2tpcCkgewogCQlyZXQgPSB3cml0ZV9wYXJ0aWFsX3NraXAoY29uKTsKIAkJaWYgKHJldCA8PSAwKQotCQkJZ290byBkb25lOwotCQlpZiAocmV0IDwgMCkgewotCQkJZG91dCgidHJ5X3dyaXRlIHdyaXRlX3BhcnRpYWxfc2tpcCBlcnIgJWRcbiIsIHJldCk7Ci0JCQlnb3RvIGRvbmU7Ci0JCX0KKwkJCWdvdG8gb3V0OwogCX0KIAlpZiAoY29uLT5vdXRfa3ZlY19sZWZ0KSB7CiAJCXJldCA9IHdyaXRlX3BhcnRpYWxfa3ZlYyhjb24pOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBtc2cgcGFnZXM/ICovCkBAIC0xNzYxLDExICsxNzU2LDExIEBACiAJCWlmIChyZXQgPT0gMSkKIAkJCWdvdG8gbW9yZV9rdmVjOyAgLyogd2UgbmVlZCB0byBzZW5kIHRoZSBmb290ZXIsIHRvbyEgKi8KIAkJaWYgKHJldCA9PSAwKQotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkb3V0KCJ0cnlfd3JpdGUgd3JpdGVfcGFydGlhbF9tc2dfcGFnZXMgZXJyICVkXG4iLAogCQkJICAgICByZXQpOwotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKQEAgLTE3ODksMTAgKzE3ODQsOSBAQAogCS8qIE5vdGhpbmcgdG8gZG8hICovCiAJY2xlYXJfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKTsKIAlkb3V0KCJ0cnlfd3JpdGUgbm90aGluZyBlbHNlIHRvIHdyaXRlLlxuIik7Ci1kb25lOgogCXJldCA9IDA7CiBvdXQ6Ci0JZG91dCgidHJ5X3dyaXRlIGRvbmUgb24gJXBcbiIsIGNvbik7CisJZG91dCgidHJ5X3dyaXRlIGRvbmUgb24gJXAgcmV0ICVkXG4iLCBjb24sIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTgyMSwxOSArMTgxNSwxNyBAQAogCQkJZG91dCgidHJ5X3JlYWQgY29ubmVjdGluZ1xuIik7CiAJCQlyZXQgPSByZWFkX3BhcnRpYWxfYmFubmVyKGNvbik7CiAJCQlpZiAocmV0IDw9IDApCi0JCQkJZ290byBkb25lOwotCQkJaWYgKHByb2Nlc3NfYmFubmVyKGNvbikgPCAwKSB7Ci0JCQkJcmV0ID0gLTE7CiAJCQkJZ290byBvdXQ7Ci0JCQl9CisJCQlyZXQgPSBwcm9jZXNzX2Jhbm5lcihjb24pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CiAJCX0KIAkJcmV0ID0gcmVhZF9wYXJ0aWFsX2Nvbm5lY3QoY29uKTsKIAkJaWYgKHJldCA8PSAwKQotCQkJZ290byBkb25lOwotCQlpZiAocHJvY2Vzc19jb25uZWN0KGNvbikgPCAwKSB7Ci0JCQlyZXQgPSAtMTsKIAkJCWdvdG8gb3V0OwotCQl9CisJCXJldCA9IHByb2Nlc3NfY29ubmVjdChjb24pOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OwogCQlnb3RvIG1vcmU7CiAJfQogCkBAIC0xODQ4LDcgKzE4NDAsNyBAQAogCQlkb3V0KCJza2lwcGluZyAlZCAvICVkIGJ5dGVzXG4iLCBza2lwLCAtY29uLT5pbl9iYXNlX3Bvcyk7CiAJCXJldCA9IGNlcGhfdGNwX3JlY3Ztc2coY29uLT5zb2NrLCBidWYsIHNraXApOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJY29uLT5pbl9iYXNlX3BvcyArPSByZXQ7CiAJCWlmIChjb24tPmluX2Jhc2VfcG9zKQogCQkJZ290byBtb3JlOwpAQCAtMTg1OSw3ICsxODUxLDcgQEAKIAkJICovCiAJCXJldCA9IGNlcGhfdGNwX3JlY3Ztc2coY29uLT5zb2NrLCAmY29uLT5pbl90YWcsIDEpOwogCQlpZiAocmV0IDw9IDApCi0JCQlnb3RvIGRvbmU7CisJCQlnb3RvIG91dDsKIAkJZG91dCgidHJ5X3JlYWQgZ290IHRhZyAlZFxuIiwgKGludCljb24tPmluX3RhZyk7CiAJCXN3aXRjaCAoY29uLT5pbl90YWcpIHsKIAkJY2FzZSBDRVBIX01TR1JfVEFHX01TRzoKQEAgLTE4NzAsNyArMTg2Miw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBDRVBIX01TR1JfVEFHX0NMT1NFOgogCQkJc2V0X2JpdChDTE9TRUQsICZjb24tPnN0YXRlKTsgICAvKiBmaXhtZSAqLwotCQkJZ290byBkb25lOworCQkJZ290byBvdXQ7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGJhZF90YWc7CiAJCX0KQEAgLTE4ODIsMTMgKzE4NzQsMTIgQEAKIAkJCWNhc2UgLUVCQURNU0c6CiAJCQkJY29uLT5lcnJvcl9tc2cgPSAiYmFkIGNyYyI7CiAJCQkJcmV0ID0gLUVJTzsKLQkJCQlnb3RvIG91dDsKKwkJCQlicmVhazsKIAkJCWNhc2UgLUVJTzoKIAkJCQljb24tPmVycm9yX21zZyA9ICJpbyBlcnJvciI7Ci0JCQkJZ290byBvdXQ7Ci0JCQlkZWZhdWx0OgotCQkJCWdvdG8gZG9uZTsKKwkJCQlicmVhazsKIAkJCX0KKwkJCWdvdG8gb3V0OwogCQl9CiAJCWlmIChjb24tPmluX3RhZyA9PSBDRVBIX01TR1JfVEFHX1JFQURZKQogCQkJZ290byBtb3JlOwpAQCAtMTg5OCwxNSArMTg4OSwxMyBAQAogCWlmIChjb24tPmluX3RhZyA9PSBDRVBIX01TR1JfVEFHX0FDSykgewogCQlyZXQgPSByZWFkX3BhcnRpYWxfYWNrKGNvbik7CiAJCWlmIChyZXQgPD0gMCkKLQkJCWdvdG8gZG9uZTsKKwkJCWdvdG8gb3V0OwogCQlwcm9jZXNzX2Fjayhjb24pOwogCQlnb3RvIG1vcmU7CiAJfQogCi1kb25lOgotCXJldCA9IDA7CiBvdXQ6Ci0JZG91dCgidHJ5X3JlYWQgZG9uZSBvbiAlcFxuIiwgY29uKTsKKwlkb3V0KCJ0cnlfcmVhZCBkb25lIG9uICVwIHJldCAlZFxuIiwgY29uLCByZXQpOwogCXJldHVybiByZXQ7CiAKIGJhZF90YWc6CkBAIC0xOTUxLDcgKzE5NDAsMjQgQEAKIAkJCQkJCSAgIHdvcmsud29yayk7CiAKIAltdXRleF9sb2NrKCZjb24tPm11dGV4KTsKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEJBQ0tPRkYsICZjb24tPnN0YXRlKSkgeworCQlkb3V0KCJjb25fd29yayAlcCBiYWNraW5nIG9mZlxuIiwgY29uKTsKKwkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhjZXBoX21zZ3Jfd3EsICZjb24tPndvcmssCisJCQkJICAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY29uLT5kZWxheSkpKSB7CisJCQlkb3V0KCJjb25fd29yayAlcCBiYWNrb2ZmICVsdVxuIiwgY29uLCBjb24tPmRlbGF5KTsKKwkJCW11dGV4X3VubG9jaygmY29uLT5tdXRleCk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQljb24tPm9wcy0+cHV0KGNvbik7CisJCQlkb3V0KCJjb25fd29yayAlcCBGQUlMRUQgdG8gYmFjayBvZmYgJWx1XG4iLCBjb24sCisJCQkgICAgIGNvbi0+ZGVsYXkpOworCQl9CisJfQogCisJaWYgKHRlc3RfYml0KFNUQU5EQlksICZjb24tPnN0YXRlKSkgeworCQlkb3V0KCJjb25fd29yayAlcCBTVEFOREJZXG4iLCBjb24pOworCQlnb3RvIGRvbmU7CisJfQogCWlmICh0ZXN0X2JpdChDTE9TRUQsICZjb24tPnN0YXRlKSkgeyAvKiBlLmcuIGlmIHdlIGFyZSByZXBsYWNlZCAqLwogCQlkb3V0KCJjb25fd29yayBDTE9TRURcbiIpOwogCQljb25fY2xvc2Vfc29ja2V0KGNvbik7CkBAIC0yMDA4LDEwICsyMDE0LDEyIEBACiAJLyogUmVxdWV1ZSBhbnl0aGluZyB0aGF0IGhhc24ndCBiZWVuIGFja2VkICovCiAJbGlzdF9zcGxpY2VfaW5pdCgmY29uLT5vdXRfc2VudCwgJmNvbi0+b3V0X3F1ZXVlKTsKIAotCS8qIElmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBpbiB0aGUgcXVldWUsIHBsYWNlIHRoZSBjb25uZWN0aW9uCi0JICogaW4gYSBTVEFOREJZIHN0YXRlIChpLmUuLCBkb24ndCB0cnkgdG8gcmVjb25uZWN0IGp1c3QgeWV0KS4gKi8KLQlpZiAobGlzdF9lbXB0eSgmY29uLT5vdXRfcXVldWUpICYmICFjb24tPm91dF9rZWVwYWxpdmVfcGVuZGluZykgewotCQlkb3V0KCJmYXVsdCBzZXR0aW5nIFNUQU5EQllcbiIpOworCS8qIElmIHRoZXJlIGFyZSBubyBtZXNzYWdlcyBxdWV1ZWQgb3Iga2VlcGFsaXZlIHBlbmRpbmcsIHBsYWNlCisJICogdGhlIGNvbm5lY3Rpb24gaW4gYSBTVEFOREJZIHN0YXRlICovCisJaWYgKGxpc3RfZW1wdHkoJmNvbi0+b3V0X3F1ZXVlKSAmJgorCSAgICAhdGVzdF9iaXQoS0VFUEFMSVZFX1BFTkRJTkcsICZjb24tPnN0YXRlKSkgeworCQlkb3V0KCJmYXVsdCAlcCBzZXR0aW5nIFNUQU5EQlkgY2xlYXJpbmcgV1JJVEVfUEVORElOR1xuIiwgY29uKTsKKwkJY2xlYXJfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKTsKIAkJc2V0X2JpdChTVEFOREJZLCAmY29uLT5zdGF0ZSk7CiAJfSBlbHNlIHsKIAkJLyogcmV0cnkgYWZ0ZXIgYSBkZWxheS4gKi8KQEAgLTIwMTksMTEgKzIwMjcsMjQgQEAKIAkJCWNvbi0+ZGVsYXkgPSBCQVNFX0RFTEFZX0lOVEVSVkFMOwogCQllbHNlIGlmIChjb24tPmRlbGF5IDwgTUFYX0RFTEFZX0lOVEVSVkFMKQogCQkJY29uLT5kZWxheSAqPSAyOwotCQlkb3V0KCJmYXVsdCBxdWV1ZWluZyAlcCBkZWxheSAlbHVcbiIsIGNvbiwgY29uLT5kZWxheSk7CiAJCWNvbi0+b3BzLT5nZXQoY29uKTsKIAkJaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhjZXBoX21zZ3Jfd3EsICZjb24tPndvcmssCi0JCQkJICAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY29uLT5kZWxheSkpID09IDApCisJCQkJICAgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoY29uLT5kZWxheSkpKSB7CisJCQlkb3V0KCJmYXVsdCBxdWV1ZWQgJXAgZGVsYXkgJWx1XG4iLCBjb24sIGNvbi0+ZGVsYXkpOworCQl9IGVsc2UgewogCQkJY29uLT5vcHMtPnB1dChjb24pOworCQkJZG91dCgiZmF1bHQgZmFpbGVkIHRvIHF1ZXVlICVwIGRlbGF5ICVsdSwgYmFja29mZlxuIiwKKwkJCSAgICAgY29uLCBjb24tPmRlbGF5KTsKKwkJCS8qCisJCQkgKiBJbiBtYW55IGNhc2VzIHdlIHNlZSBhIHNvY2tldCBzdGF0ZSBjaGFuZ2UKKwkJCSAqIHdoaWxlIGNvbl93b3JrIGlzIHJ1bm5pbmcgYW5kIGVuZCB1cAorCQkJICogcXVldWluZyAobm9uLWRlbGF5ZWQpIHdvcmssIHN1Y2ggdGhhdCB3ZQorCQkJICogY2FuJ3QgYmFja29mZiB3aXRoIGEgZGVsYXkuICBTZXQgYSBmbGFnIHNvCisJCQkgKiB0aGF0IHdoZW4gY29uX3dvcmsgcmVzdGFydHMgd2Ugc2NoZWR1bGUgdGhlCisJCQkgKiBkZWxheSB0aGVuLgorCQkJICovCisJCQlzZXRfYml0KEJBQ0tPRkYsICZjb24tPnN0YXRlKTsKKwkJfQogCX0KIAogb3V0X3VubG9jazoKQEAgLTIwOTQsNiArMjExNSwxOSBAQAogfQogRVhQT1JUX1NZTUJPTChjZXBoX21lc3Nlbmdlcl9kZXN0cm95KTsKIAorc3RhdGljIHZvaWQgY2xlYXJfc3RhbmRieShzdHJ1Y3QgY2VwaF9jb25uZWN0aW9uICpjb24pCit7CisJLyogY29tZSBiYWNrIGZyb20gU1RBTkRCWT8gKi8KKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNUQU5EQlksICZjb24tPnN0YXRlKSkgeworCQltdXRleF9sb2NrKCZjb24tPm11dGV4KTsKKwkJZG91dCgiY2xlYXJfc3RhbmRieSAlcCBhbmQgKytjb25uZWN0X3NlcVxuIiwgY29uKTsKKwkJY29uLT5jb25uZWN0X3NlcSsrOworCQlXQVJOX09OKHRlc3RfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKSk7CisJCVdBUk5fT04odGVzdF9iaXQoS0VFUEFMSVZFX1BFTkRJTkcsICZjb24tPnN0YXRlKSk7CisJCW11dGV4X3VubG9jaygmY29uLT5tdXRleCk7CisJfQorfQorCiAvKgogICogUXVldWUgdXAgYW4gb3V0Z29pbmcgbWVzc2FnZSBvbiB0aGUgZ2l2ZW4gY29ubmVjdGlvbi4KICAqLwpAQCAtMjEyNiw2ICsyMTYwLDcgQEAKIAogCS8qIGlmIHRoZXJlIHdhc24ndCBhbnl0aGluZyB3YWl0aW5nIHRvIHNlbmQgYmVmb3JlLCBxdWV1ZQogCSAqIG5ldyB3b3JrICovCisJY2xlYXJfc3RhbmRieShjb24pOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KFdSSVRFX1BFTkRJTkcsICZjb24tPnN0YXRlKSA9PSAwKQogCQlxdWV1ZV9jb24oY29uKTsKIH0KQEAgLTIxOTEsNiArMjIyNiw4IEBACiAgKi8KIHZvaWQgY2VwaF9jb25fa2VlcGFsaXZlKHN0cnVjdCBjZXBoX2Nvbm5lY3Rpb24gKmNvbikKIHsKKwlkb3V0KCJjb25fa2VlcGFsaXZlICVwXG4iLCBjb24pOworCWNsZWFyX3N0YW5kYnkoY29uKTsKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChLRUVQQUxJVkVfUEVORElORywgJmNvbi0+c3RhdGUpID09IDAgJiYKIAkgICAgdGVzdF9hbmRfc2V0X2JpdChXUklURV9QRU5ESU5HLCAmY29uLT5zdGF0ZSkgPT0gMCkKIAkJcXVldWVfY29uKGNvbik7CmRpZmYgLS1naXQgYS9uZXQvY2VwaC9wYWdldmVjLmMgYi9uZXQvY2VwaC9wYWdldmVjLmMKaW5kZXggMWEwNDBlNi4uY2Q5YzIxZCAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvcGFnZXZlYy5jCisrKyBiL25ldC9jZXBoL3BhZ2V2ZWMuYwpAQCAtMTYsMjIgKzE2LDMwIEBACiAJCQkJCSAgaW50IG51bV9wYWdlcywgYm9vbCB3cml0ZV9wYWdlKQogewogCXN0cnVjdCBwYWdlICoqcGFnZXM7Ci0JaW50IHJjOworCWludCBnb3QgPSAwOworCWludCByYyA9IDA7CiAKIAlwYWdlcyA9IGttYWxsb2Moc2l6ZW9mKCpwYWdlcykgKiBudW1fcGFnZXMsIEdGUF9OT0ZTKTsKIAlpZiAoIXBhZ2VzKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQlyYyA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCAodW5zaWduZWQgbG9uZylkYXRhLAotCQkJICAgIG51bV9wYWdlcywgd3JpdGVfcGFnZSwgMCwgcGFnZXMsIE5VTEwpOworCXdoaWxlIChnb3QgPCBudW1fcGFnZXMpIHsKKwkJcmMgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwKKwkJICAgICh1bnNpZ25lZCBsb25nKWRhdGEgKyAoKHVuc2lnbmVkIGxvbmcpZ290ICogUEFHRV9TSVpFKSwKKwkJICAgIG51bV9wYWdlcyAtIGdvdCwgd3JpdGVfcGFnZSwgMCwgcGFnZXMgKyBnb3QsIE5VTEwpOworCQlpZiAocmMgPCAwKQorCQkJYnJlYWs7CisJCUJVR19PTihyYyA9PSAwKTsKKwkJZ290ICs9IHJjOworCX0KIAl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCWlmIChyYyA8IG51bV9wYWdlcykKKwlpZiAocmMgPCAwKQogCQlnb3RvIGZhaWw7CiAJcmV0dXJuIHBhZ2VzOwogCiBmYWlsOgotCWNlcGhfcHV0X3BhZ2VfdmVjdG9yKHBhZ2VzLCByYyA+IDAgPyByYyA6IDAsIGZhbHNlKTsKKwljZXBoX3B1dF9wYWdlX3ZlY3RvcihwYWdlcywgZ290LCBmYWxzZSk7CiAJcmV0dXJuIEVSUl9QVFIocmMpOwogfQogRVhQT1JUX1NZTUJPTChjZXBoX2dldF9kaXJlY3RfcGFnZV92ZWN0b3IpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuYwppbmRleCA3YzZhNDZmLi44YWU2NjMxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYworKysgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzQ5LDcgKzc0OSw4IEBACiAgKglAaGE6IGhhcmR3YXJlIGFkZHJlc3MKICAqCiAgKglTZWFyY2ggZm9yIGFuIGludGVyZmFjZSBieSBNQUMgYWRkcmVzcy4gUmV0dXJucyBOVUxMIGlmIHRoZSBkZXZpY2UKLSAqCWlzIG5vdCBmb3VuZCBvciBhIHBvaW50ZXIgdG8gdGhlIGRldmljZS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgUkNVCisgKglpcyBub3QgZm91bmQgb3IgYSBwb2ludGVyIHRvIHRoZSBkZXZpY2UuCisgKglUaGUgY2FsbGVyIG11c3QgaG9sZCBSQ1Ugb3IgUlROTC4KICAqCVRoZSByZXR1cm5lZCBkZXZpY2UgaGFzIG5vdCBoYWQgaXRzIHJlZiBjb3VudCBpbmNyZWFzZWQKICAqCWFuZCB0aGUgY2FsbGVyIG11c3QgdGhlcmVmb3JlIGJlIGNhcmVmdWwgYWJvdXQgbG9ja2luZwogICoKQEAgLTEyNzksMTAgKzEyODAsMTMgQEAKIAogc3RhdGljIGludCBfX2Rldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCWludCByZXR2YWw7CiAJTElTVF9IRUFEKHNpbmdsZSk7CiAKIAlsaXN0X2FkZCgmZGV2LT51bnJlZ19saXN0LCAmc2luZ2xlKTsKLQlyZXR1cm4gX19kZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKKwlyZXR2YWwgPSBfX2Rldl9jbG9zZV9tYW55KCZzaW5nbGUpOworCWxpc3RfZGVsKCZzaW5nbGUpOworCXJldHVybiByZXR2YWw7CiB9CiAKIGludCBkZXZfY2xvc2VfbWFueShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQpAQCAtMTMyNCw3ICsxMzI4LDcgQEAKIAogCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOwogCWRldl9jbG9zZV9tYW55KCZzaW5nbGUpOwotCisJbGlzdF9kZWwoJnNpbmdsZSk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGRldl9jbG9zZSk7CkBAIC0yNTYyLDcgKzI1NjYsOCBAQAogCiAJbWFwID0gcmN1X2RlcmVmZXJlbmNlKHJ4cXVldWUtPnJwc19tYXApOwogCWlmIChtYXApIHsKLQkJaWYgKG1hcC0+bGVuID09IDEpIHsKKwkJaWYgKG1hcC0+bGVuID09IDEgJiYKKwkJICAgICFyY3VfZGVyZWZlcmVuY2VfcmF3KHJ4cXVldWUtPnJwc19mbG93X3RhYmxlKSkgewogCQkJdGNwdSA9IG1hcC0+Y3B1c1swXTsKIAkJCWlmIChjcHVfb25saW5lKHRjcHUpKQogCQkJCWNwdSA9IHRjcHU7CkBAIC0zNDIzLDYgKzM0MjgsOCBAQAogCV9fc2tiX3B1bGwoc2tiLCBza2JfaGVhZGxlbihza2IpKTsKIAlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTiAtIHNrYl9oZWFkcm9vbShza2IpKTsKIAlza2ItPnZsYW5fdGNpID0gMDsKKwlza2ItPmRldiA9IG5hcGktPmRldjsKKwlza2ItPnNrYl9paWYgPSAwOwogCiAJbmFwaS0+c2tiID0gc2tiOwogfQpAQCAtNTA1OSw2ICs1MDY2LDcgQEAKIAogCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOwogCXJvbGxiYWNrX3JlZ2lzdGVyZWRfbWFueSgmc2luZ2xlKTsKKwlsaXN0X2RlbCgmc2luZ2xlKTsKIH0KIAogdW5zaWduZWQgbG9uZyBuZXRkZXZfZml4X2ZlYXR1cmVzKHVuc2lnbmVkIGxvbmcgZmVhdHVyZXMsIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC01NjU2LDE4ICs1NjY0LDYgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgJmluaXRfbmV0KTsKIAotCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHR4cXM7Ci0JZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0eHFzOwotCWlmIChuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKGRldikpCi0JCWdvdG8gZnJlZV9wY3B1OwotCi0jaWZkZWYgQ09ORklHX1JQUwotCWRldi0+bnVtX3J4X3F1ZXVlcyA9IHJ4cXM7Ci0JZGV2LT5yZWFsX251bV9yeF9xdWV1ZXMgPSByeHFzOwotCWlmIChuZXRpZl9hbGxvY19yeF9xdWV1ZXMoZGV2KSkKLQkJZ290byBmcmVlX3BjcHU7Ci0jZW5kaWYKLQogCWRldi0+Z3NvX21heF9zaXplID0gR1NPX01BWF9TSVpFOwogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXRodG9vbF9udHVwbGVfbGlzdC5saXN0KTsKQEAgLTU2NzcsOSArNTY3MywyNiBAQAogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmxpbmtfd2F0Y2hfbGlzdCk7CiAJZGV2LT5wcml2X2ZsYWdzID0gSUZGX1hNSVRfRFNUX1JFTEVBU0U7CiAJc2V0dXAoZGV2KTsKKworCWRldi0+bnVtX3R4X3F1ZXVlcyA9IHR4cXM7CisJZGV2LT5yZWFsX251bV90eF9xdWV1ZXMgPSB0eHFzOworCWlmIChuZXRpZl9hbGxvY19uZXRkZXZfcXVldWVzKGRldikpCisJCWdvdG8gZnJlZV9hbGw7CisKKyNpZmRlZiBDT05GSUdfUlBTCisJZGV2LT5udW1fcnhfcXVldWVzID0gcnhxczsKKwlkZXYtPnJlYWxfbnVtX3J4X3F1ZXVlcyA9IHJ4cXM7CisJaWYgKG5ldGlmX2FsbG9jX3J4X3F1ZXVlcyhkZXYpKQorCQlnb3RvIGZyZWVfYWxsOworI2VuZGlmCisKIAlzdHJjcHkoZGV2LT5uYW1lLCBuYW1lKTsKIAlyZXR1cm4gZGV2OwogCitmcmVlX2FsbDoKKwlmcmVlX25ldGRldihkZXYpOworCXJldHVybiBOVUxMOworCiBmcmVlX3BjcHU6CiAJZnJlZV9wZXJjcHUoZGV2LT5wY3B1X3JlZmNudCk7CiAJa2ZyZWUoZGV2LT5fdHgpOwpAQCAtNjIwNyw2ICs2MjIwLDcgQEAKIAkJfQogCX0KIAl1bnJlZ2lzdGVyX25ldGRldmljZV9tYW55KCZkZXZfa2lsbF9saXN0KTsKKwlsaXN0X2RlbCgmZGV2X2tpbGxfbGlzdCk7CiAJcnRubF91bmxvY2soKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYyBiL25ldC9jb3JlL2Rldl9hZGRyX2xpc3RzLmMKaW5kZXggNTA4ZjljMS4uMTMzZmQyMiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2X2FkZHJfbGlzdHMuYworKysgYi9uZXQvY29yZS9kZXZfYWRkcl9saXN0cy5jCkBAIC0xNDQsNyArMTQ0LDcgQEAKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZmcm9tX2xpc3QtPmxpc3QsIGxpc3QpIHsKIAkJdHlwZSA9IGFkZHJfdHlwZSA/IGFkZHJfdHlwZSA6IGhhLT50eXBlOwotCQlfX2h3X2FkZHJfZGVsKHRvX2xpc3QsIGhhLT5hZGRyLCBhZGRyX2xlbiwgYWRkcl90eXBlKTsKKwkJX19od19hZGRyX2RlbCh0b19saXN0LCBoYS0+YWRkciwgYWRkcl9sZW4sIHR5cGUpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0woX19od19hZGRyX2RlbF9tdWx0aXBsZSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggMTc3NDE3OC4uZmYyMzAyOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtODE3LDcgKzgxNyw3IEBACiAJaWYgKHJlZ3MubGVuID4gcmVnbGVuKQogCQlyZWdzLmxlbiA9IHJlZ2xlbjsKIAotCXJlZ2J1ZiA9IHZtYWxsb2MocmVnbGVuKTsKKwlyZWdidWYgPSB2emFsbG9jKHJlZ2xlbik7CiAJaWYgKCFyZWdidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9ydG5ldGxpbmsuYyBiL25ldC9jb3JlL3J0bmV0bGluay5jCmluZGV4IDc1MGRiNTcuLjJkNjVjNmIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3J0bmV0bGluay5jCisrKyBiL25ldC9jb3JlL3J0bmV0bGluay5jCkBAIC0xMTIxLDggKzExMjEsNyBAQAogCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCQkJaWYgKGFmX29wcy0+dmFsaWRhdGVfbGlua19hZikgewotCQkJCWVyciA9IGFmX29wcy0+dmFsaWRhdGVfbGlua19hZihkZXYsCi0JCQkJCQkJdGJbSUZMQV9BRl9TUEVDXSk7CisJCQkJZXJyID0gYWZfb3BzLT52YWxpZGF0ZV9saW5rX2FmKGRldiwgYWYpOwogCQkJCWlmIChlcnIgPCAwKQogCQkJCQlyZXR1cm4gZXJyOwogCQkJfQpAQCAtMTY3Miw2ICsxNjcxLDkgQEAKIAkJCXNucHJpbnRmKGlmbmFtZSwgSUZOQU1TSVosICIlcyUlZCIsIG9wcy0+a2luZCk7CiAKIAkJZGVzdF9uZXQgPSBydG5sX2xpbmtfZ2V0X25ldChuZXQsIHRiKTsKKwkJaWYgKElTX0VSUihkZXN0X25ldCkpCisJCQlyZXR1cm4gUFRSX0VSUihkZXN0X25ldCk7CisKIAkJZGV2ID0gcnRubF9jcmVhdGVfbGluayhuZXQsIGRlc3RfbmV0LCBpZm5hbWUsIG9wcywgdGIpOwogCiAJCWlmIChJU19FUlIoZGV2KSkKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggZDMxYmIzNi4uZDg4M2RjYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTIxMCw2ICsyMTAsNyBAQAogCXNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKIAltZW1zZXQoc2hpbmZvLCAwLCBvZmZzZXRvZihzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvLCBkYXRhcmVmKSk7CiAJYXRvbWljX3NldCgmc2hpbmZvLT5kYXRhcmVmLCAxKTsKKwlrbWVtY2hlY2tfYW5ub3RhdGVfdmFyaWFibGUoc2hpbmZvLT5kZXN0cnVjdG9yX2FyZyk7CiAKIAlpZiAoZmNsb25lKSB7CiAJCXN0cnVjdCBza19idWZmICpjaGlsZCA9IHNrYiArIDE7CkBAIC0yNzQ0LDggKzI3NDUsMTIgQEAKIAogbWVyZ2U6CiAJaWYgKG9mZnNldCA+IGhlYWRsZW4pIHsKLQkJc2tiaW5mby0+ZnJhZ3NbMF0ucGFnZV9vZmZzZXQgKz0gb2Zmc2V0IC0gaGVhZGxlbjsKLQkJc2tiaW5mby0+ZnJhZ3NbMF0uc2l6ZSAtPSBvZmZzZXQgLSBoZWFkbGVuOworCQl1bnNpZ25lZCBpbnQgZWF0ID0gb2Zmc2V0IC0gaGVhZGxlbjsKKworCQlza2JpbmZvLT5mcmFnc1swXS5wYWdlX29mZnNldCArPSBlYXQ7CisJCXNrYmluZm8tPmZyYWdzWzBdLnNpemUgLT0gZWF0OworCQlza2ItPmRhdGFfbGVuIC09IGVhdDsKKwkJc2tiLT5sZW4gLT0gZWF0OwogCQlvZmZzZXQgPSBoZWFkbGVuOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IGQ5MDBhYjkuLmM0NDM0OGEgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTU4Myw3ICs1ODMsNyBAQAogCXU4IHVwLCBpZHR5cGU7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKLQlpZiAoIXRiW0RDQl9BVFRSX0FQUF0gfHwgIW5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHApCisJaWYgKCF0YltEQ0JfQVRUUl9BUFBdKQogCQlnb3RvIG91dDsKIAogCXJldCA9IG5sYV9wYXJzZV9uZXN0ZWQoYXBwX3RiLCBEQ0JfQVBQX0FUVFJfTUFYLCB0YltEQ0JfQVRUUl9BUFBdLApAQCAtNjA0LDcgKzYwNCwxNiBAQAogCQlnb3RvIG91dDsKIAogCWlkID0gbmxhX2dldF91MTYoYXBwX3RiW0RDQl9BUFBfQVRUUl9JRF0pOwotCXVwID0gbmV0ZGV2LT5kY2JubF9vcHMtPmdldGFwcChuZXRkZXYsIGlkdHlwZSwgaWQpOworCisJaWYgKG5ldGRldi0+ZGNibmxfb3BzLT5nZXRhcHApIHsKKwkJdXAgPSBuZXRkZXYtPmRjYm5sX29wcy0+Z2V0YXBwKG5ldGRldiwgaWR0eXBlLCBpZCk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRjYl9hcHAgYXBwID0geworCQkJCQkuc2VsZWN0b3IgPSBpZHR5cGUsCisJCQkJCS5wcm90b2NvbCA9IGlkLAorCQkJCSAgICAgfTsKKwkJdXAgPSBkY2JfZ2V0YXBwKG5ldGRldiwgJmFwcCk7CisJfQogCiAJLyogc2VuZCB0aGlzIGJhY2sgKi8KIAlkY2JubF9za2IgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKQEAgLTYxNyw2ICs2MjYsOSBAQAogCWRjYi0+Y21kID0gRENCX0NNRF9HQVBQOwogCiAJYXBwX25lc3QgPSBubGFfbmVzdF9zdGFydChkY2JubF9za2IsIERDQl9BVFRSX0FQUCk7CisJaWYgKCFhcHBfbmVzdCkKKwkJZ290byBvdXRfY2FuY2VsOworCiAJcmV0ID0gbmxhX3B1dF91OChkY2JubF9za2IsIERDQl9BUFBfQVRUUl9JRFRZUEUsIGlkdHlwZSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfY2FuY2VsOwpAQCAtMTE4MSw3ICsxMTkzLDcgQEAKIAkJCWdvdG8gZXJyOwogCX0KIAotCWlmIChpZWVlW0RDQl9BVFRSX0lFRUVfUEZDXSAmJiBvcHMtPmllZWVfc2V0ZXRzKSB7CisJaWYgKGllZWVbRENCX0FUVFJfSUVFRV9QRkNdICYmIG9wcy0+aWVlZV9zZXRwZmMpIHsKIAkJc3RydWN0IGllZWVfcGZjICpwZmMgPSBubGFfZGF0YShpZWVlW0RDQl9BVFRSX0lFRUVfUEZDXSk7CiAJCWVyciA9IG9wcy0+aWVlZV9zZXRwZmMobmV0ZGV2LCBwZmMpOwogCQlpZiAoZXJyKQpAQCAtMTYwNCw2ICsxNjE2LDEwIEBACiB1OCBkY2Jfc2V0YXBwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfYXBwICpuZXcpCiB7CiAJc3RydWN0IGRjYl9hcHBfdHlwZSAqaXRyOworCXN0cnVjdCBkY2JfYXBwX3R5cGUgZXZlbnQ7CisKKwltZW1jcHkoJmV2ZW50Lm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mKGV2ZW50Lm5hbWUpKTsKKwltZW1jcHkoJmV2ZW50LmFwcCwgbmV3LCBzaXplb2YoZXZlbnQuYXBwKSk7CiAKIAlzcGluX2xvY2soJmRjYl9sb2NrKTsKIAkvKiBTZWFyY2ggZm9yIGV4aXN0aW5nIG1hdGNoIGFuZCByZXBsYWNlICovCkBAIC0xNjM1LDcgKzE2NTEsNyBAQAogCX0KIG91dDoKIAlzcGluX3VubG9jaygmZGNiX2xvY2spOwotCWNhbGxfZGNiZXZlbnRfbm90aWZpZXJzKERDQl9BUFBfRVZFTlQsIG5ldyk7CisJY2FsbF9kY2JldmVudF9ub3RpZmllcnMoRENCX0FQUF9FVkVOVCwgJmV2ZW50KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZGNiX3NldGFwcCk7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9pbnB1dC5jIGIvbmV0L2RjY3AvaW5wdXQuYwppbmRleCA4Y2RlMDA5Li40MjIyZTdhIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pbnB1dC5jCisrKyBiL25ldC9kY2NwL2lucHV0LmMKQEAgLTYxNCw2ICs2MTQsOSBAQAogCQkvKiBDYWxsZXIgKGRjY3BfdjRfZG9fcmN2KSB3aWxsIHNlbmQgUmVzZXQgKi8KIAkJZGNiLT5kY2NwZF9yZXNldF9jb2RlID0gRENDUF9SRVNFVF9DT0RFX05PX0NPTk5FQ1RJT047CiAJCXJldHVybiAxOworCX0gZWxzZSBpZiAoc2stPnNrX3N0YXRlID09IERDQ1BfQ0xPU0VEKSB7CisJCWRjYi0+ZGNjcGRfcmVzZXRfY29kZSA9IERDQ1BfUkVTRVRfQ09ERV9OT19DT05ORUNUSU9OOworCQlyZXR1cm4gMTsKIAl9CiAKIAlpZiAoc2stPnNrX3N0YXRlICE9IERDQ1BfUkVRVUVTVElORyAmJiBzay0+c2tfc3RhdGUgIT0gRENDUF9SRVNQT05EKSB7CkBAIC02NjgsMTAgKzY3MSw2IEBACiAJfQogCiAJc3dpdGNoIChzay0+c2tfc3RhdGUpIHsKLQljYXNlIERDQ1BfQ0xPU0VEOgotCQlkY2ItPmRjY3BkX3Jlc2V0X2NvZGUgPSBEQ0NQX1JFU0VUX0NPREVfTk9fQ09OTkVDVElPTjsKLQkJcmV0dXJuIDE7Ci0KIAljYXNlIERDQ1BfUkVRVUVTVElORzoKIAkJcXVldWVkID0gZGNjcF9yY3ZfcmVxdWVzdF9zZW50X3N0YXRlX3Byb2Nlc3Moc2ssIHNrYiwgZGgsIGxlbik7CiAJCWlmIChxdWV1ZWQgPj0gMCkKZGlmZiAtLWdpdCBhL25ldC9kbnNfcmVzb2x2ZXIvZG5zX2tleS5jIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKaW5kZXggNzM5NDM1YS4uY2ZhN2E1ZSAxMDA2NDQKLS0tIGEvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKKysrIGIvbmV0L2Ruc19yZXNvbHZlci9kbnNfa2V5LmMKQEAgLTY3LDggKzY3LDkgQEAKIAlzaXplX3QgcmVzdWx0X2xlbiA9IDA7CiAJY29uc3QgY2hhciAqZGF0YSA9IF9kYXRhLCAqZW5kLCAqb3B0OwogCi0Ja2VudGVyKCIlJSVkLCVzLCclcycsJXp1IiwKLQkgICAgICAga2V5LT5zZXJpYWwsIGtleS0+ZGVzY3JpcHRpb24sIGRhdGEsIGRhdGFsZW4pOworCWtlbnRlcigiJSUlZCwlcywnJSouKnMnLCV6dSIsCisJICAgICAgIGtleS0+c2VyaWFsLCBrZXktPmRlc2NyaXB0aW9uLAorCSAgICAgICAoaW50KWRhdGFsZW4sIChpbnQpZGF0YWxlbiwgZGF0YSwgZGF0YWxlbik7CiAKIAlpZiAoZGF0YWxlbiA8PSAxIHx8ICFkYXRhIHx8IGRhdGFbZGF0YWxlbiAtIDFdICE9ICdcMCcpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjE3LDYgKzIxOCwxOSBAQAogCQlzZXFfcHJpbnRmKG0sICI6ICV1Iiwga2V5LT5kYXRhbGVuKTsKIH0KIAorLyoKKyAqIHJlYWQgdGhlIEROUyBkYXRhCisgKiAtIHRoZSBrZXkncyBzZW1hcGhvcmUgaXMgcmVhZC1sb2NrZWQKKyAqLworc3RhdGljIGxvbmcgZG5zX3Jlc29sdmVyX3JlYWQoY29uc3Qgc3RydWN0IGtleSAqa2V5LAorCQkJICAgICAgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlpZiAoa2V5LT50eXBlX2RhdGEueFswXSkKKwkJcmV0dXJuIGtleS0+dHlwZV9kYXRhLnhbMF07CisKKwlyZXR1cm4gdXNlcl9yZWFkKGtleSwgYnVmZmVyLCBidWZsZW4pOworfQorCiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZG5zX3Jlc29sdmVyID0gewogCS5uYW1lCQk9ICJkbnNfcmVzb2x2ZXIiLAogCS5pbnN0YW50aWF0ZQk9IGRuc19yZXNvbHZlcl9pbnN0YW50aWF0ZSwKQEAgLTIyNCw3ICsyMzgsNyBAQAogCS5yZXZva2UJCT0gdXNlcl9yZXZva2UsCiAJLmRlc3Ryb3kJPSB1c2VyX2Rlc3Ryb3ksCiAJLmRlc2NyaWJlCT0gZG5zX3Jlc29sdmVyX2Rlc2NyaWJlLAotCS5yZWFkCQk9IHVzZXJfcmVhZCwKKwkucmVhZAkJPSBkbnNfcmVzb2x2ZXJfcmVhZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfZG5zX3Jlc29sdmVyKHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvZHNhL2RzYS5jIGIvbmV0L2RzYS9kc2EuYwppbmRleCAwYzg3N2E3Li4zZmIxNGI3IDEwMDY0NAotLS0gYS9uZXQvZHNhL2RzYS5jCisrKyBiL25ldC9kc2EvZHNhLmMKQEAgLTQyOCw3ICs0MjgsNyBAQAogfQogbW9kdWxlX2V4aXQoZHNhX2NsZWFudXBfbW9kdWxlKTsKIAotTU9EVUxFX0FVVEhPUigiTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+IikKK01PRFVMRV9BVVRIT1IoIkxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIERpc3RyaWJ1dGVkIFN3aXRjaCBBcmNoaXRlY3R1cmUgc3dpdGNoIGNoaXBzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmRzYSIpOwpkaWZmIC0tZ2l0IGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYyBiL25ldC9lY29uZXQvYWZfZWNvbmV0LmMKaW5kZXggMTVkY2MxYS4uMGMyODI2MyAxMDA2NDQKLS0tIGEvbmV0L2Vjb25ldC9hZl9lY29uZXQuYworKysgYi9uZXQvZWNvbmV0L2FmX2Vjb25ldC5jCkBAIC0yNjUsMTMgKzI2NSwxMyBAQAogc3RhdGljIGludCBlY29uZXRfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKIHsKLQlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc29ja2FkZHJfZWMgKnNhZGRyPShzdHJ1Y3Qgc29ja2FkZHJfZWMgKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGVjX2FkZHIgYWRkcjsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGNoYXIgcG9ydCwgY2I7CiAjaWYgZGVmaW5lZChDT05GSUdfRUNPTkVUX0FVTlVEUCkgfHwgZGVmaW5lZChDT05GSUdfRUNPTkVUX05BVElWRSkKKwlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBlY19jYiAqZWI7CiAjZW5kaWYKQEAgLTQ4OCwxMCArNDg4LDEwIEBACiAKIGVycm9yX2ZyZWVfYnVmOgogCXZmcmVlKHVzZXJidWYpOworZXJyb3I6CiAjZWxzZQogCWVyciA9IC1FUFJPVE9UWVBFOwogI2VuZGlmCi0JZXJyb3I6CiAJbXV0ZXhfdW5sb2NrKCZlY29uZXRfbXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBmMmI2MTEwLi40NWI4OWQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC04ODAsNiArODgwLDE5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGluZXRfaW9jdGwpOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAoraW50IGluZXRfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCWludCBlcnIgPSAtRU5PSU9DVExDTUQ7CisKKwlpZiAoc2stPnNrX3Byb3QtPmNvbXBhdF9pb2N0bCkKKwkJZXJyID0gc2stPnNrX3Byb3QtPmNvbXBhdF9pb2N0bChzaywgY21kLCBhcmcpOworCisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCiBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIGluZXRfc3RyZWFtX29wcyA9IHsKIAkuZmFtaWx5CQkgICA9IFBGX0lORVQsCiAJLm93bmVyCQkgICA9IFRISVNfTU9EVUxFLApAQCAtOTAzLDYgKzkxNiw3IEBACiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCS5jb21wYXRfc2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9zZXRzb2Nrb3B0LAogCS5jb21wYXRfZ2V0c29ja29wdCA9IGNvbXBhdF9zb2NrX2NvbW1vbl9nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBpbmV0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgogfTsKIEVYUE9SVF9TWU1CT0woaW5ldF9zdHJlYW1fb3BzKTsKQEAgLTkyOSw2ICs5NDMsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gaW5ldF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIH07CiBFWFBPUlRfU1lNQk9MKGluZXRfZGdyYW1fb3BzKTsKQEAgLTk1OSw2ICs5NzQsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fc2V0c29ja29wdCwKIAkuY29tcGF0X2dldHNvY2tvcHQgPSBjb21wYXRfc29ja19jb21tb25fZ2V0c29ja29wdCwKKwkuY29tcGF0X2lvY3RsCSAgID0gaW5ldF9jb21wYXRfaW9jdGwsCiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggMDRjOGI2OS4uNzkyNzU4OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTEwMTcsMTQgKzEwMTcsMTMgQEAKIAkJSVBWNF9ERVZDT05GX0FMTChuZXQsIFBST1hZX0FSUCkgPSBvbjsKIAkJcmV0dXJuIDA7CiAJfQotCWlmIChfX2luX2Rldl9nZXRfcmN1KGRldikpIHsKLQkJSU5fREVWX0NPTkZfU0VUKF9faW5fZGV2X2dldF9yY3UoZGV2KSwgUFJPWFlfQVJQLCBvbik7CisJaWYgKF9faW5fZGV2X2dldF9ydG5sKGRldikpIHsKKwkJSU5fREVWX0NPTkZfU0VUKF9faW5fZGV2X2dldF9ydG5sKGRldiksIFBST1hZX0FSUCwgb24pOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FTlhJTzsKIH0KIAotLyogbXVzdCBiZSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrKCkgKi8KIHN0YXRpYyBpbnQgYXJwX3JlcV9zZXRfcHVibGljKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGFycHJlcSAqciwKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTEyMzMsMTAgKzEyMzIsMTAgQEAKIAlpZiAoIShyLmFycF9mbGFncyAmIEFURl9ORVRNQVNLKSkKIAkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmci5hcnBfbmV0bWFzayktPnNpbl9hZGRyLnNfYWRkciA9CiAJCQkJCQkJICAgaHRvbmwoMHhGRkZGRkZGRlVMKTsKLQlyY3VfcmVhZF9sb2NrKCk7CisJcnRubF9sb2NrKCk7CiAJaWYgKHIuYXJwX2RldlswXSkgewogCQllcnIgPSAtRU5PREVWOwotCQlkZXYgPSBkZXZfZ2V0X2J5X25hbWVfcmN1KG5ldCwgci5hcnBfZGV2KTsKKwkJZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUobmV0LCByLmFycF9kZXYpOwogCQlpZiAoZGV2ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIApAQCAtMTI2Myw3ICsxMjYyLDcgQEAKIAkJYnJlYWs7CiAJfQogb3V0OgotCXJjdV9yZWFkX3VubG9jaygpOworCXJ0bmxfdW5sb2NrKCk7CiAJaWYgKGNtZCA9PSBTSU9DR0FSUCAmJiAhZXJyICYmIGNvcHlfdG9fdXNlcihhcmcsICZyLCBzaXplb2YocikpKQogCQllcnIgPSAtRUZBVUxUOwogCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggNzQ4Y2I1Yi4uZGY0NjE2ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTAzMCw2ICsxMDMwLDIxIEBACiAJcmV0dXJuIG10dSA+PSA2ODsKIH0KIAorc3RhdGljIHZvaWQgaW5ldGRldl9zZW5kX2dyYXR1aXRvdXNfYXJwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKKworeworCXN0cnVjdCBpbl9pZmFkZHIgKmlmYSA9IGluX2Rldi0+aWZhX2xpc3Q7CisKKwlpZiAoIWlmYSkKKwkJcmV0dXJuOworCisJYXJwX3NlbmQoQVJQT1BfUkVRVUVTVCwgRVRIX1BfQVJQLAorCQkgaWZhLT5pZmFfYWRkcmVzcywgZGV2LAorCQkgaWZhLT5pZmFfYWRkcmVzcywgTlVMTCwKKwkJIGRldi0+ZGV2X2FkZHIsIE5VTEwpOworfQorCiAvKiBDYWxsZWQgb25seSB1bmRlciBSVE5MIHNlbWFwaG9yZSAqLwogCiBzdGF0aWMgaW50IGluZXRkZXZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LApAQCAtMTA4MiwxOCArMTA5NywxMyBAQAogCQl9CiAJCWlwX21jX3VwKGluX2Rldik7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgTkVUREVWX05PVElGWV9QRUVSUzoKIAljYXNlIE5FVERFVl9DSEFOR0VBRERSOgorCQlpZiAoIUlOX0RFVl9BUlBfTk9USUZZKGluX2RldikpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBORVRERVZfTk9USUZZX1BFRVJTOgogCQkvKiBTZW5kIGdyYXR1aXRvdXMgQVJQIHRvIG5vdGlmeSBvZiBsaW5rIGNoYW5nZSAqLwotCQlpZiAoSU5fREVWX0FSUF9OT1RJRlkoaW5fZGV2KSkgewotCQkJc3RydWN0IGluX2lmYWRkciAqaWZhID0gaW5fZGV2LT5pZmFfbGlzdDsKLQotCQkJaWYgKGlmYSkKLQkJCQlhcnBfc2VuZChBUlBPUF9SRVFVRVNULCBFVEhfUF9BUlAsCi0JCQkJCSBpZmEtPmlmYV9hZGRyZXNzLCBkZXYsCi0JCQkJCSBpZmEtPmlmYV9hZGRyZXNzLCBOVUxMLAotCQkJCQkgZGV2LT5kZXZfYWRkciwgTlVMTCk7Ci0JCX0KKwkJaW5ldGRldl9zZW5kX2dyYXR1aXRvdXNfYXJwKGRldiwgaW5fZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfRE9XTjoKIAkJaXBfbWNfZG93bihpbl9kZXYpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF90aW1ld2FpdF9zb2NrLmMgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwppbmRleCBjNWFmOTA5Li4zYzhkZmExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X3RpbWV3YWl0X3NvY2suYwpAQCAtNTA1LDcgKzUwNSw5IEBACiAJCQl9CiAKIAkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQkJaW5ldF90d3NrX2Rlc2NoZWR1bGUodHcsIHR3ZHIpOworCQkJbG9jYWxfYmhfZW5hYmxlKCk7CiAJCQlpbmV0X3R3c2tfcHV0KHR3KTsKIAkJCWdvdG8gcmVzdGFydF9yY3U7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IGQ5YmM4NTcuLmE5NmU2NTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiBzdHJ1Y3QgaW5ldF9wZWVyICppbmV0X2dldHBlZXIoc3RydWN0IGluZXRwZWVyX2FkZHIgKmRhZGRyLCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXSwgKioqc3RhY2twdHI7Ci0Jc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoQUZfSU5FVCk7CisJc3RydWN0IGluZXRfcGVlcl9iYXNlICpiYXNlID0gZmFtaWx5X3RvX2Jhc2UoZGFkZHItPmZhbWlseSk7CiAJc3RydWN0IGluZXRfcGVlciAqcDsKIAogCS8qIExvb2sgdXAgZm9yIHRoZSBhZGRyZXNzIHF1aWNrbHksIGxvY2tsZXNzLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfZ3JlLmMgYi9uZXQvaXB2NC9pcF9ncmUuYwppbmRleCBlYjY4YTBlLi42NjEzZWRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9ncmUuYworKysgYi9uZXQvaXB2NC9pcF9ncmUuYwpAQCAtNzc1LDYgKzc3NSw3IEBACiAJCQkuZmw0X2RzdCA9IGRzdCwKIAkJCS5mbDRfc3JjID0gdGlwaC0+c2FkZHIsCiAJCQkuZmw0X3RvcyA9IFJUX1RPUyh0b3MpLAorCQkJLnByb3RvID0gSVBQUk9UT19HUkUsCiAJCQkuZmxfZ3JlX2tleSA9IHR1bm5lbC0+cGFybXMub19rZXkKIAkJfTsKIAkJaWYgKGlwX3JvdXRlX291dHB1dF9rZXkoZGV2X25ldChkZXYpLCAmcnQsICZmbCkpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwbXIuYyBiL25ldC9pcHY0L2lwbXIuYwppbmRleCAzZjNhOWFmLi44YjY1YTEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcG1yLmMKKysrIGIvbmV0L2lwdjQvaXBtci5jCkBAIC02MCw2ICs2MCw3IEBACiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPG5ldC9pcGlwLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CiAjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KQEAgLTE0MzQsNiArMTQzNSw4MSBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfc2lvY19zZ19yZXEgeworCXN0cnVjdCBpbl9hZGRyIHNyYzsKKwlzdHJ1Y3QgaW5fYWRkciBncnA7CisJY29tcGF0X3Vsb25nX3QgcGt0Y250OworCWNvbXBhdF91bG9uZ190IGJ5dGVjbnQ7CisJY29tcGF0X3Vsb25nX3Qgd3JvbmdfaWY7Cit9OworCitzdHJ1Y3QgY29tcGF0X3Npb2NfdmlmX3JlcSB7CisJdmlmaV90CXZpZmk7CQkvKiBXaGljaCBpZmFjZSAqLworCWNvbXBhdF91bG9uZ190IGljb3VudDsKKwljb21wYXRfdWxvbmdfdCBvY291bnQ7CisJY29tcGF0X3Vsb25nX3QgaWJ5dGVzOworCWNvbXBhdF91bG9uZ190IG9ieXRlczsKK307CisKK2ludCBpcG1yX2NvbXBhdF9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCit7CisJc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcSBzcjsKKwlzdHJ1Y3QgY29tcGF0X3Npb2NfdmlmX3JlcSB2cjsKKwlzdHJ1Y3QgdmlmX2RldmljZSAqdmlmOworCXN0cnVjdCBtZmNfY2FjaGUgKmM7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOworCXN0cnVjdCBtcl90YWJsZSAqbXJ0OworCisJbXJ0ID0gaXBtcl9nZXRfdGFibGUobmV0LCByYXdfc2soc2spLT5pcG1yX3RhYmxlID8gOiBSVF9UQUJMRV9ERUZBVUxUKTsKKwlpZiAobXJ0ID09IE5VTEwpCisJCXJldHVybiAtRU5PRU5UOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NHRVRWSUZDTlQ6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdnIsIGFyZywgc2l6ZW9mKHZyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJaWYgKHZyLnZpZmkgPj0gbXJ0LT5tYXh2aWYpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmVhZF9sb2NrKCZtcnRfbG9jayk7CisJCXZpZiA9ICZtcnQtPnZpZl90YWJsZVt2ci52aWZpXTsKKwkJaWYgKFZJRl9FWElTVFMobXJ0LCB2ci52aWZpKSkgeworCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CisJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CisJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOworCQkJdnIub2J5dGVzID0gdmlmLT5ieXRlc19vdXQ7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnZyLCBzaXplb2YodnIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwljYXNlIFNJT0NHRVRTR0NOVDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzciwgYXJnLCBzaXplb2Yoc3IpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJjdV9yZWFkX2xvY2soKTsKKwkJYyA9IGlwbXJfY2FjaGVfZmluZChtcnQsIHNyLnNyYy5zX2FkZHIsIHNyLmdycC5zX2FkZHIpOworCQlpZiAoYykgeworCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CisJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKKwkJCXNyLndyb25nX2lmID0gYy0+bWZjX3VuLnJlcy53cm9uZ19pZjsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnNyLCBzaXplb2Yoc3IpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJjdV9yZWFkX3VubG9jaygpOworCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9Cit9CisjZW5kaWYKKwogCiBzdGF0aWMgaW50IGlwbXJfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwppbmRleCBiOGRkY2M0Li5hNWU1MmE5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdF9tYW5nbGUuYwpAQCAtNjAsMTIgKzYwLDEyIEBACiAKIAlpZiAobWFuZ2xlLT5mbGFncyAmIH5BUlBUX01BTkdMRV9NQVNLIHx8CiAJICAgICEobWFuZ2xlLT5mbGFncyAmIEFSUFRfTUFOR0xFX01BU0spKQotCQlyZXR1cm4gZmFsc2U7CisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG1hbmdsZS0+dGFyZ2V0ICE9IE5GX0RST1AgJiYgbWFuZ2xlLT50YXJnZXQgIT0gTkZfQUNDRVBUICYmCiAJICAgbWFuZ2xlLT50YXJnZXQgIT0gWFRfQ09OVElOVUUpCi0JCXJldHVybiBmYWxzZTsKLQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgeHRfdGFyZ2V0IGFycHRfbWFuZ2xlX3JlZyBfX3JlYWRfbW9zdGx5ID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcmF3LmMgYi9uZXQvaXB2NC9yYXcuYwppbmRleCBhM2Q1YWI3Li42MzkwYmEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yYXcuYworKysgYi9uZXQvaXB2NC9yYXcuYwpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogc3RhdGljIHN0cnVjdCByYXdfaGFzaGluZm8gcmF3X3Y0X2hhc2hpbmZvID0gewogCS5sb2NrID0gX19SV19MT0NLX1VOTE9DS0VEKHJhd192NF9oYXNoaW5mby5sb2NrKSwKQEAgLTgzOCw2ICs4MzksMjMgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXdfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgU0lPQ09VVFE6CisJY2FzZSBTSU9DSU5ROgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWRlZmF1bHQ6CisjaWZkZWYgQ09ORklHX0lQX01ST1VURQorCQlyZXR1cm4gaXBtcl9jb21wYXRfaW9jdGwoc2ssIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKyNlbHNlCisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisjZW5kaWYKKwl9Cit9CisjZW5kaWYKKwogc3RydWN0IHByb3RvIHJhd19wcm90ID0gewogCS5uYW1lCQkgICA9ICJSQVciLAogCS5vd25lcgkJICAgPSBUSElTX01PRFVMRSwKQEAgLTg2MCw2ICs4NzgsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X3NldHNvY2tvcHQgPSBjb21wYXRfcmF3X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd19nZXRzb2Nrb3B0LAorCS5jb21wYXRfaW9jdGwJICAgPSBjb21wYXRfcmF3X2lvY3RsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAzNTFkYzRlLi42ZWQ2NjAzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTI3MDcsNiArMjcwNywxMSBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXB2NF9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUoc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgbXR1KQogewogfQpAQCAtMjcxNiw2ICsyNzIxLDggQEAKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVApLAogCS5kZXN0cm95CQk9CWlwdjRfZHN0X2Rlc3Ryb3ksCiAJLmNoZWNrCQkJPQlpcHY0X2JsYWNraG9sZV9kc3RfY2hlY2ssCisJLmRlZmF1bHRfbXR1CQk9CWlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAorCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcHY0X2RlZmF1bHRfYWR2bXNzLAogCS51cGRhdGVfcG10dQkJPQlpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMjU0OWIyOS4uNjVmNmMwNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTEyMjIsNyArMTIyMiw3IEBACiAJfQogCiAJLyogRC1TQUNLIGZvciBhbHJlYWR5IGZvcmdvdHRlbiBkYXRhLi4uIERvIGR1bWIgY291bnRpbmcuICovCi0JaWYgKGR1cF9zYWNrICYmCisJaWYgKGR1cF9zYWNrICYmIHRwLT51bmRvX21hcmtlciAmJiB0cC0+dW5kb19yZXRyYW5zICYmCiAJICAgICFhZnRlcihlbmRfc2VxXzAsIHByaW9yX3NuZF91bmEpICYmCiAJICAgIGFmdGVyKGVuZF9zZXFfMCwgdHAtPnVuZG9fbWFya2VyKSkKIAkJdHAtPnVuZG9fcmV0cmFucy0tOwpAQCAtMTI5OSw3ICsxMjk5LDggQEAKIAogCS8qIEFjY291bnQgRC1TQUNLIGZvciByZXRyYW5zbWl0dGVkIHBhY2tldC4gKi8KIAlpZiAoZHVwX3NhY2sgJiYgKHNhY2tlZCAmIFRDUENCX1JFVFJBTlMpKSB7Ci0JCWlmIChhZnRlcihUQ1BfU0tCX0NCKHNrYiktPmVuZF9zZXEsIHRwLT51bmRvX21hcmtlcikpCisJCWlmICh0cC0+dW5kb19tYXJrZXIgJiYgdHAtPnVuZG9fcmV0cmFucyAmJgorCQkgICAgYWZ0ZXIoVENQX1NLQl9DQihza2IpLT5lbmRfc2VxLCB0cC0+dW5kb19tYXJrZXIpKQogCQkJdHAtPnVuZG9fcmV0cmFucy0tOwogCQlpZiAoc2Fja2VkICYgVENQQ0JfU0FDS0VEX0FDS0VEKQogCQkJc3RhdGUtPnJlb3JkID0gbWluKGZhY2tfY291bnQsIHN0YXRlLT5yZW9yZCk7CkBAIC00Mzk5LDcgKzQ0MDAsNyBAQAogCQkJaWYgKCFza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIDAsIHRwLT51Y29weS5pb3YsIGNodW5rKSkgewogCQkJCXRwLT51Y29weS5sZW4gLT0gY2h1bms7CiAJCQkJdHAtPmNvcGllZF9zZXEgKz0gY2h1bms7Ci0JCQkJZWF0ZW4gPSAoY2h1bmsgPT0gc2tiLT5sZW4gJiYgIXRoLT5maW4pOworCQkJCWVhdGVuID0gKGNodW5rID09IHNrYi0+bGVuKTsKIAkJCQl0Y3BfcmN2X3NwYWNlX2FkanVzdChzayk7CiAJCQl9CiAJCQlsb2NhbF9iaF9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA4NTZmNjg0Li4wMmY1ODNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE5OTQsNyArMTk5NCw2IEBACiAJCQkJfQogCQkJCXJlcSA9IHJlcS0+ZGxfbmV4dDsKIAkJCX0KLQkJCXN0LT5vZmZzZXQgPSAwOwogCQkJaWYgKCsrc3QtPnNidWNrZXQgPj0gaWNzay0+aWNza19hY2NlcHRfcXVldWUubGlzdGVuX29wdC0+bnJfdGFibGVfZW50cmllcykKIAkJCQlicmVhazsKIGdldF9yZXE6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKaW5kZXggNDA2ZjMyMC4uZGZhNWJlYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9vdXRwdXQuYwpAQCAtMjE2Miw3ICsyMTYyLDcgQEAKIAkJaWYgKCF0cC0+cmV0cmFuc19zdGFtcCkKIAkJCXRwLT5yZXRyYW5zX3N0YW1wID0gVENQX1NLQl9DQihza2IpLT53aGVuOwogCi0JCXRwLT51bmRvX3JldHJhbnMrKzsKKwkJdHAtPnVuZG9fcmV0cmFucyArPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwogCiAJCS8qIHNuZF9ueHQgaXMgc3RvcmVkIHRvIGRldGVjdCBsb3NzIG9mIHJldHJhbnNtaXR0ZWQgc2VnbWVudCwKIAkJICogc2VlIHRjcF9pbnB1dC5jIHRjcF9zYWNrdGFnX3dyaXRlX3F1ZXVlKCkuCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwppbmRleCAyNGExY2YxLi5mZDY3ODJlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jCisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmMKQEAgLTI2NjEsMTQgKzI2NjEsMTIgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRldik7CiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZmE7Ci0JTElTVF9IRUFEKGtlZXBfbGlzdCk7Ci0JaW50IHN0YXRlOworCWludCBzdGF0ZSwgaTsKIAogCUFTU0VSVF9SVE5MKCk7CiAKLQkvKiBGbHVzaCByb3V0ZXMgaWYgZGV2aWNlIGlzIGJlaW5nIHJlbW92ZWQgb3IgaXQgaXMgbm90IGxvb3BiYWNrICovCi0JaWYgKGhvdyB8fCAhKGRldi0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spKQotCQlydDZfaWZkb3duKG5ldCwgZGV2KTsKKwlydDZfaWZkb3duKG5ldCwgZGV2KTsKKwluZWlnaF9pZmRvd24oJm5kX3RibCwgZGV2KTsKIAogCWlkZXYgPSBfX2luNl9kZXZfZ2V0KGRldik7CiAJaWYgKGlkZXYgPT0gTlVMTCkKQEAgLTI2ODksNiArMjY4NywyMyBAQAogCiAJfQogCisJLyogU3RlcCAyOiBjbGVhciBoYXNoIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IElONl9BRERSX0hTSVpFOyBpKyspIHsKKwkJc3RydWN0IGhsaXN0X2hlYWQgKmggPSAmaW5ldDZfYWRkcl9sc3RbaV07CisJCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJCXNwaW5fbG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKKwlyZXN0YXJ0OgorCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoaWZhLCBuLCBoLCBhZGRyX2xzdCkgeworCQkJaWYgKGlmYS0+aWRldiA9PSBpZGV2KSB7CisJCQkJaGxpc3RfZGVsX2luaXRfcmN1KCZpZmEtPmFkZHJfbHN0KTsKKwkJCQlhZGRyY29uZl9kZWxfdGltZXIoaWZhKTsKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9CisJCX0KKwkJc3Bpbl91bmxvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CisJfQorCiAJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CiAKIAkvKiBTdGVwIDI6IGNsZWFyIGZsYWdzIGZvciBzdGF0ZWxlc3MgYWRkcmNvbmYgKi8KQEAgLTI3MjIsNTIgKzI3MzcsMjMgQEAKIAkJCQkgICAgICAgc3RydWN0IGluZXQ2X2lmYWRkciwgaWZfbGlzdCk7CiAJCWFkZHJjb25mX2RlbF90aW1lcihpZmEpOwogCi0JCS8qIElmIGp1c3QgZG9pbmcgbGluayBkb3duLCBhbmQgYWRkcmVzcyBpcyBwZXJtYW5lbnQKLQkJICAgYW5kIG5vdCBsaW5rLWxvY2FsLCB0aGVuIHJldGFpbiBpdC4gKi8KLQkJaWYgKCFob3cgJiYKLQkJICAgIChpZmEtPmZsYWdzJklGQV9GX1BFUk1BTkVOVCkgJiYKLQkJICAgICEoaXB2Nl9hZGRyX3R5cGUoJmlmYS0+YWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkgewotCQkJbGlzdF9tb3ZlX3RhaWwoJmlmYS0+aWZfbGlzdCwgJmtlZXBfbGlzdCk7CisJCWxpc3RfZGVsKCZpZmEtPmlmX2xpc3QpOwogCi0JCQkvKiBJZiBub3QgZG9pbmcgREFEIG9uIHRoaXMgYWRkcmVzcywganVzdCBrZWVwIGl0LiAqLwotCQkJaWYgKChkZXYtPmZsYWdzJihJRkZfTk9BUlB8SUZGX0xPT1BCQUNLKSkgfHwKLQkJCSAgICBpZGV2LT5jbmYuYWNjZXB0X2RhZCA8PSAwIHx8Ci0JCQkgICAgKGlmYS0+ZmxhZ3MgJiBJRkFfRl9OT0RBRCkpCi0JCQkJY29udGludWU7CisJCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAKLQkJCS8qIElmIGl0IHdhcyB0ZW50YXRpdmUgYWxyZWFkeSwgbm8gbmVlZCB0byBub3RpZnkgKi8KLQkJCWlmIChpZmEtPmZsYWdzICYgSUZBX0ZfVEVOVEFUSVZFKQotCQkJCWNvbnRpbnVlOworCQlzcGluX2xvY2tfYmgoJmlmYS0+c3RhdGVfbG9jayk7CisJCXN0YXRlID0gaWZhLT5zdGF0ZTsKKwkJaWZhLT5zdGF0ZSA9IElORVQ2X0lGQUREUl9TVEFURV9ERUFEOworCQlzcGluX3VubG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKIAotCQkJLyogRmxhZyBpdCBmb3IgbGF0ZXIgcmVzdG9yYXRpb24gd2hlbiBsaW5rIGNvbWVzIHVwICovCi0JCQlpZmEtPmZsYWdzIHw9IElGQV9GX1RFTlRBVElWRTsKLQkJCWlmYS0+c3RhdGUgPSBJTkVUNl9JRkFERFJfU1RBVEVfREFEOwotCQl9IGVsc2UgewotCQkJbGlzdF9kZWwoJmlmYS0+aWZfbGlzdCk7Ci0KLQkJCS8qIGNsZWFyIGhhc2ggdGFibGUgKi8KLQkJCXNwaW5fbG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKLQkJCWhsaXN0X2RlbF9pbml0X3JjdSgmaWZhLT5hZGRyX2xzdCk7Ci0JCQlzcGluX3VubG9ja19iaCgmYWRkcmNvbmZfaGFzaF9sb2NrKTsKLQotCQkJd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKLQkJCXNwaW5fbG9ja19iaCgmaWZhLT5zdGF0ZV9sb2NrKTsKLQkJCXN0YXRlID0gaWZhLT5zdGF0ZTsKLQkJCWlmYS0+c3RhdGUgPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRDsKLQkJCXNwaW5fdW5sb2NrX2JoKCZpZmEtPnN0YXRlX2xvY2spOwotCi0JCQlpZiAoc3RhdGUgIT0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQpIHsKLQkJCQlfX2lwdjZfaWZhX25vdGlmeShSVE1fREVMQUREUiwgaWZhKTsKLQkJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaW5ldDZhZGRyX2NoYWluLAotCQkJCQkJCSAgIE5FVERFVl9ET1dOLCBpZmEpOwotCQkJfQotCi0JCQlpbjZfaWZhX3B1dChpZmEpOwotCQkJd3JpdGVfbG9ja19iaCgmaWRldi0+bG9jayk7CisJCWlmIChzdGF0ZSAhPSBJTkVUNl9JRkFERFJfU1RBVEVfREVBRCkgeworCQkJX19pcHY2X2lmYV9ub3RpZnkoUlRNX0RFTEFERFIsIGlmYSk7CisJCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaW5ldDZhZGRyX2NoYWluLCBORVRERVZfRE9XTiwgaWZhKTsKIAkJfQotCX0KKwkJaW42X2lmYV9wdXQoaWZhKTsKIAotCWxpc3Rfc3BsaWNlKCZrZWVwX2xpc3QsICZpZGV2LT5hZGRyX2xpc3QpOworCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwl9CiAKIAl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCkBAIC00MTU2LDggKzQxNDIsNyBAQAogCQlhZGRyY29uZl9sZWF2ZV9zb2xpY3QoaWZwLT5pZGV2LCAmaWZwLT5hZGRyKTsKIAkJZHN0X2hvbGQoJmlmcC0+cnQtPmRzdCk7CiAKLQkJaWYgKGlmcC0+c3RhdGUgPT0gSU5FVDZfSUZBRERSX1NUQVRFX0RFQUQgJiYKLQkJICAgIGlwNl9kZWxfcnQoaWZwLT5ydCkpCisJCWlmIChpcDZfZGVsX3J0KGlmcC0+cnQpKQogCQkJZHN0X2ZyZWUoJmlmcC0+cnQtPmRzdCk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNm1yLmMgYi9uZXQvaXB2Ni9pcDZtci5jCmluZGV4IDlmYWIyNzQuLjBlMWQ1M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNm1yLmMKKysrIGIvbmV0L2lwdjYvaXA2bXIuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxuZXQvcHJvdG9jb2wuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgpAQCAtMTgwNCw2ICsxODA1LDgwIEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9zaW9jX3NnX3JlcTYgeworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgZ3JwOworCWNvbXBhdF91bG9uZ190IHBrdGNudDsKKwljb21wYXRfdWxvbmdfdCBieXRlY250OworCWNvbXBhdF91bG9uZ190IHdyb25nX2lmOworfTsKKworc3RydWN0IGNvbXBhdF9zaW9jX21pZl9yZXE2IHsKKwltaWZpX3QJbWlmaTsKKwljb21wYXRfdWxvbmdfdCBpY291bnQ7CisJY29tcGF0X3Vsb25nX3Qgb2NvdW50OworCWNvbXBhdF91bG9uZ190IGlieXRlczsKKwljb21wYXRfdWxvbmdfdCBvYnl0ZXM7Cit9OworCitpbnQgaXA2bXJfY29tcGF0X2lvY3RsKHN0cnVjdCBzb2NrICpzaywgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgY29tcGF0X3Npb2Nfc2dfcmVxNiBzcjsKKwlzdHJ1Y3QgY29tcGF0X3Npb2NfbWlmX3JlcTYgdnI7CisJc3RydWN0IG1pZl9kZXZpY2UgKnZpZjsKKwlzdHJ1Y3QgbWZjNl9jYWNoZSAqYzsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChzayk7CisJc3RydWN0IG1yNl90YWJsZSAqbXJ0OworCisJbXJ0ID0gaXA2bXJfZ2V0X3RhYmxlKG5ldCwgcmF3Nl9zayhzayktPmlwNm1yX3RhYmxlID8gOiBSVDZfVEFCTEVfREZMVCk7CisJaWYgKG1ydCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DR0VUTUlGQ05UX0lONjoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2ciwgYXJnLCBzaXplb2YodnIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAodnIubWlmaSA+PSBtcnQtPm1heHZpZikKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJdmlmID0gJm1ydC0+dmlmNl90YWJsZVt2ci5taWZpXTsKKwkJaWYgKE1JRl9FWElTVFMobXJ0LCB2ci5taWZpKSkgeworCQkJdnIuaWNvdW50ID0gdmlmLT5wa3RfaW47CisJCQl2ci5vY291bnQgPSB2aWYtPnBrdF9vdXQ7CisJCQl2ci5pYnl0ZXMgPSB2aWYtPmJ5dGVzX2luOworCQkJdnIub2J5dGVzID0gdmlmLT5ieXRlc19vdXQ7CisJCQlyZWFkX3VubG9jaygmbXJ0X2xvY2spOworCisJCQlpZiAoY29weV90b191c2VyKGFyZywgJnZyLCBzaXplb2YodnIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwljYXNlIFNJT0NHRVRTR0NOVF9JTjY6CisJCWlmIChjb3B5X2Zyb21fdXNlcigmc3IsIGFyZywgc2l6ZW9mKHNyKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZWFkX2xvY2soJm1ydF9sb2NrKTsKKwkJYyA9IGlwNm1yX2NhY2hlX2ZpbmQobXJ0LCAmc3Iuc3JjLnNpbjZfYWRkciwgJnNyLmdycC5zaW42X2FkZHIpOworCQlpZiAoYykgeworCQkJc3IucGt0Y250ID0gYy0+bWZjX3VuLnJlcy5wa3Q7CisJCQlzci5ieXRlY250ID0gYy0+bWZjX3VuLnJlcy5ieXRlczsKKwkJCXNyLndyb25nX2lmID0gYy0+bWZjX3VuLnJlcy53cm9uZ19pZjsKKwkJCXJlYWRfdW5sb2NrKCZtcnRfbG9jayk7CisKKwkJCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmc3IsIHNpemVvZihzcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0dXJuIDA7CisJCX0KKwkJcmVhZF91bmxvY2soJm1ydF9sb2NrKTsKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorfQorI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwNm1yX2ZvcndhcmQyX2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRfTE9HLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwppbmRleCAwOWM4ODg5Li5kZTMzODAzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9MT0cuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJCWlmIChwICE9IE5VTEwpIHsKIAkJCXNiX2FkZChtLCAiJTAyeCIsICpwKyspOwogCQkJZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKQotCQkJCXNiX2FkZChtLCAiOiUwMngiLCBwW2ldKTsKKwkJCQlzYl9hZGQobSwgIjolMDJ4IiwgKnArKyk7CiAJCX0KIAkJc2JfYWRkKG0sICIgIik7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggODZjMzk1Mi4uYzViMDkxNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogCkBAIC0xMTU3LDYgKzExNTgsMjMgQEAKIAl9CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdGF0aWMgaW50IGNvbXBhdF9yYXd2Nl9pb2N0bChzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DT1VUUToKKwljYXNlIFNJT0NJTlE6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJZGVmYXVsdDoKKyNpZmRlZiBDT05GSUdfSVBWNl9NUk9VVEUKKwkJcmV0dXJuIGlwNm1yX2NvbXBhdF9pb2N0bChzaywgY21kLCBjb21wYXRfcHRyKGFyZykpOworI2Vsc2UKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKyNlbmRpZgorCX0KK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZCByYXd2Nl9jbG9zZShzdHJ1Y3Qgc29jayAqc2ssIGxvbmcgdGltZW91dCkKIHsKIAlpZiAoaW5ldF9zayhzayktPmluZXRfbnVtID09IElQUFJPVE9fUkFXKQpAQCAtMTIxNSw2ICsxMjMzLDcgQEAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9zZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X3NldHNvY2tvcHQsCiAJLmNvbXBhdF9nZXRzb2Nrb3B0ID0gY29tcGF0X3Jhd3Y2X2dldHNvY2tvcHQsCisJLmNvbXBhdF9pb2N0bAkgICA9IGNvbXBhdF9yYXd2Nl9pb2N0bCwKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcm91dGUuYyBiL25ldC9pcHY2L3JvdXRlLmMKaW5kZXggMzczYmQwNC4uOTA0MzEyZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcm91dGUuYworKysgYi9uZXQvaXB2Ni9yb3V0ZS5jCkBAIC03Miw4ICs3Miw2IEBACiAjZGVmaW5lIFJUNl9UUkFDRSh4Li4uKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIENMT05FX09GRkxJTktfUk9VVEUgMAotCiBzdGF0aWMgc3RydWN0IHJ0Nl9pbmZvICogaXA2X3J0X2NvcHkoc3RydWN0IHJ0Nl9pbmZvICpvcnQpOwogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkJKmlwNl9kc3RfY2hlY2soc3RydWN0IGRzdF9lbnRyeSAqZHN0LCB1MzIgY29va2llKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQJIGlwNl9kZWZhdWx0X2Fkdm1zcyhjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpOwpAQCAtMTE1LDYgKzExMywxMSBAQAogCS5sb2NhbF9vdXQJCT0JX19pcDZfbG9jYWxfb3V0LAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1KGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgaXA2X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHUzMiBtdHUpCiB7CiB9CkBAIC0xMjQsNiArMTI3LDggQEAKIAkucHJvdG9jb2wJCT0JY3B1X3RvX2JlMTYoRVRIX1BfSVBWNiksCiAJLmRlc3Ryb3kJCT0JaXA2X2RzdF9kZXN0cm95LAogCS5jaGVjawkJCT0JaXA2X2RzdF9jaGVjaywKKwkuZGVmYXVsdF9tdHUJCT0JaXA2X2JsYWNraG9sZV9kZWZhdWx0X210dSwKKwkuZGVmYXVsdF9hZHZtc3MJCT0JaXA2X2RlZmF1bHRfYWR2bXNzLAogCS51cGRhdGVfcG10dQkJPQlpcDZfcnRfYmxhY2tob2xlX3VwZGF0ZV9wbXR1LAogfTsKIApAQCAtMTk2LDcgKzIwMSw2IEBACiAJCWluNl9kZXZfcHV0KGlkZXYpOwogCX0KIAlpZiAocGVlcikgewotCQlCVUdfT04oIShydC0+cnQ2aV9mbGFncyAmIFJURl9DQUNIRSkpOwogCQlydC0+cnQ2aV9wZWVyID0gTlVMTDsKIAkJaW5ldF9wdXRwZWVyKHBlZXIpOwogCX0KQEAgLTIwNiw5ICsyMTAsNiBAQAogewogCXN0cnVjdCBpbmV0X3BlZXIgKnBlZXI7CiAKLQlpZiAoV0FSTl9PTighKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX0NBQ0hFKSkpCi0JCXJldHVybjsKLQogCXBlZXIgPSBpbmV0X2dldHBlZXJfdjYoJnJ0LT5ydDZpX2RzdC5hZGRyLCBjcmVhdGUpOwogCWlmIChwZWVyICYmIGNtcHhjaGcoJnJ0LT5ydDZpX3BlZXIsIE5VTEwsIHBlZXIpICE9IE5VTEwpCiAJCWluZXRfcHV0cGVlcihwZWVyKTsKQEAgLTczOCwxMyArNzM5LDggQEAKIAogCWlmICghcnQtPnJ0NmlfbmV4dGhvcCAmJiAhKHJ0LT5ydDZpX2ZsYWdzICYgUlRGX05PTkVYVEhPUCkpCiAJCW5ydCA9IHJ0Nl9hbGxvY19jb3cocnQsICZmbC0+Zmw2X2RzdCwgJmZsLT5mbDZfc3JjKTsKLQllbHNlIHsKLSNpZiBDTE9ORV9PRkZMSU5LX1JPVVRFCisJZWxzZQogCQlucnQgPSBydDZfYWxsb2NfY2xvbmUocnQsICZmbC0+Zmw2X2RzdCk7Ci0jZWxzZQotCQlnb3RvIG91dDI7Ci0jZW5kaWYKLQl9CiAKIAlkc3RfcmVsZWFzZSgmcnQtPmRzdCk7CiAJcnQgPSBucnQgPyA6IG5ldC0+aXB2Ni5pcDZfbnVsbF9lbnRyeTsKQEAgLTI1NjEsMTQgKzI1NTcsMTYgQEAKIGludCBpcHY2X3N5c2N0bF9ydGNhY2hlX2ZsdXNoKGN0bF90YWJsZSAqY3RsLCBpbnQgd3JpdGUsCiAJCQkgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBjdXJyZW50LT5uc3Byb3h5LT5uZXRfbnM7Ci0JaW50IGRlbGF5ID0gbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheTsKLQlpZiAod3JpdGUpIHsKLQkJcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotCQlmaWI2X3J1bl9nYyhkZWxheSA8PSAwID8gfjBVTCA6ICh1bnNpZ25lZCBsb25nKWRlbGF5LCBuZXQpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisJaW50IGRlbGF5OworCWlmICghd3JpdGUpCiAJCXJldHVybiAtRUlOVkFMOworCisJbmV0ID0gKHN0cnVjdCBuZXQgKiljdGwtPmV4dHJhMTsKKwlkZWxheSA9IG5ldC0+aXB2Ni5zeXNjdGwuZmx1c2hfZGVsYXk7CisJcHJvY19kb2ludHZlYyhjdGwsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWZpYjZfcnVuX2djKGRlbGF5IDw9IDAgPyB+MFVMIDogKHVuc2lnbmVkIGxvbmcpZGVsYXksIG5ldCk7CisJcmV0dXJuIDA7CiB9CiAKIGN0bF90YWJsZSBpcHY2X3JvdXRlX3RhYmxlX3RlbXBsYXRlW10gPSB7CkBAIC0yNjU1LDYgKzI2NTMsNyBAQAogCiAJaWYgKHRhYmxlKSB7CiAJCXRhYmxlWzBdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5mbHVzaF9kZWxheTsKKwkJdGFibGVbMF0uZXh0cmExID0gbmV0OwogCQl0YWJsZVsxXS5kYXRhID0gJm5ldC0+aXB2Ni5pcDZfZHN0X29wcy5nY190aHJlc2g7CiAJCXRhYmxlWzJdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfbWF4X3NpemU7CiAJCXRhYmxlWzNdLmRhdGEgPSAmbmV0LT5pcHY2LnN5c2N0bC5pcDZfcnRfZ2NfbWluX2ludGVydmFsOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwppbmRleCBmYTFkOGY0Li43Y2I2NWVmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYworKysgYi9uZXQvaXB2Ni9zeXNjdGxfbmV0X2lwdjYuYwpAQCAtMTUsNiArMTUsOCBAQAogI2luY2x1ZGUgPG5ldC9hZGRyY29uZi5oPgogI2luY2x1ZGUgPG5ldC9pbmV0X2ZyYWcuaD4KIAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZW1wdHlbMV07CisKIHN0YXRpYyBjdGxfdGFibGUgaXB2Nl90YWJsZV90ZW1wbGF0ZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gInJvdXRlIiwKQEAgLTM1LDYgKzM3LDEyIEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvaW50dmVjCiAJfSwKKwl7CisJCS5wcm9jbmFtZQk9ICJuZWlnaCIsCisJCS5tYXhsZW4JCT0gMCwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IGVtcHR5LAorCX0sCiAJeyB9CiB9OwogCkBAIC0xNTIsNyArMTYwLDYgQEAKIAogaW50IGlwdjZfc3RhdGljX3N5c2N0bF9yZWdpc3Rlcih2b2lkKQogewotCXN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGVtcHR5WzFdOwogCWlwNl9iYXNlID0gcmVnaXN0ZXJfc3lzY3RsX3BhdGhzKG5ldF9pcHY2X2N0bF9wYXRoLCBlbXB0eSk7CiAJaWYgKGlwNl9iYXNlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCA3ZTc0MDIzLi5kYTg3NDI4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtOTgsNiArOTgsMTAgQEAKIAlpZiAoIXhkc3QtPnUucnQ2LnJ0NmlfaWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwl4ZHN0LT51LnJ0Ni5ydDZpX3BlZXIgPSBydC0+cnQ2aV9wZWVyOworCWlmIChydC0+cnQ2aV9wZWVyKQorCQlhdG9taWNfaW5jKCZydC0+cnQ2aV9wZWVyLT5yZWZjbnQpOworCiAJLyogU2hlaXQuLi4gSSByZW1lbWJlciBJIGRpZCB0aGlzIHJpZ2h0LiBBcHBhcmVudGx5LAogCSAqIGl0IHdhcyBtYWdpY2FsbHkgbG9zdCwgc28gdGhpcyBjb2RlIG5lZWRzIGF1ZGl0ICovCiAJeGRzdC0+dS5ydDYucnQ2aV9mbGFncyA9IHJ0LT5ydDZpX2ZsYWdzICYgKFJURl9BTllDQVNUIHwKQEAgLTIxNiw2ICsyMjAsOCBAQAogCiAJaWYgKGxpa2VseSh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpKQogCQlpbjZfZGV2X3B1dCh4ZHN0LT51LnJ0Ni5ydDZpX2lkZXYpOworCWlmIChsaWtlbHkoeGRzdC0+dS5ydDYucnQ2aV9wZWVyKSkKKwkJaW5ldF9wdXRwZWVyKHhkc3QtPnUucnQ2LnJ0NmlfcGVlcik7CiAJeGZybV9kc3RfZGVzdHJveSh4ZHN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2NmZy5jIGIvbmV0L21hYzgwMjExL2NmZy5jCmluZGV4IDRiYzhhOTIuLjljZDczYjEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9jZmcuYworKysgYi9uZXQvbWFjODAyMTEvY2ZnLmMKQEAgLTE4MjIsNiArMTgyMiw3IEBACiAJCSpjb29raWUgXj0gMjsKIAkJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1RYX09GRkNIQU47CiAJCWxvY2FsLT5od19yb2Nfc2tiID0gc2tiOworCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gc2tiOwogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwogCiAJCXJldHVybiAwOwpAQCAtMTg3NSw2ICsxODc2LDcgQEAKIAkJaWYgKHJldCA9PSAwKSB7CiAJCQlrZnJlZV9za2IobG9jYWwtPmh3X3JvY19za2IpOwogCQkJbG9jYWwtPmh3X3JvY19za2IgPSBOVUxMOworCQkJbG9jYWwtPmh3X3JvY19za2JfZm9yX3N0YXR1cyA9IE5VTEw7CiAJCX0KIAogCQltdXRleF91bmxvY2soJmxvY2FsLT5tdHgpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBjNDdkN2MwLi41MzNmZDMyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtOTUzLDcgKzk1Myw3IEBACiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmh3X3JvY19jaGFubmVsOwogCXN0cnVjdCBuZXRfZGV2aWNlICpod19yb2NfZGV2OwotCXN0cnVjdCBza19idWZmICpod19yb2Nfc2tiOworCXN0cnVjdCBza19idWZmICpod19yb2Nfc2tiLCAqaHdfcm9jX3NrYl9mb3Jfc3RhdHVzOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBod19yb2Nfc3RhcnQsIGh3X3JvY19kb25lOwogCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgaHdfcm9jX2NoYW5uZWxfdHlwZTsKIAl1bnNpZ25lZCBpbnQgaHdfcm9jX2R1cmF0aW9uOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2lmYWNlLmMgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwppbmRleCA4YWNiYTQ1Li43YTEwYThkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWZhY2UuYworKysgYi9uZXQvbWFjODAyMTEvaWZhY2UuYwpAQCAtMTIyOSw2ICsxMjI5LDcgQEAKIAl9CiAJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2VfbWFueSgmdW5yZWdfbGlzdCk7CisJbGlzdF9kZWwoJnVucmVnX2xpc3QpOwogfQogCiBzdGF0aWMgdTMyIGllZWU4MDIxMV9pZGxlX29mZihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tbG1lLmMgYi9uZXQvbWFjODAyMTEvbWxtZS5jCmluZGV4IDQ1ZmJiOWUuLmM5Y2ViNGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tbG1lLmMKKysrIGIvbmV0L21hYzgwMjExL21sbWUuYwpAQCAtMTAzMyw2ICsxMDMzLDEyIEBACiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpKQogCQlyZXR1cm47CiAKKwkvKgorCSAqIEluIGNhc2Ugd2UgcmVjZWl2ZSBmcmFtZXMgYWZ0ZXIgZGlzYXNzb2NpYXRpb24uCisJICovCisJaWYgKCFzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKKwkJcmV0dXJuOworCiAJaWVlZTgwMjExX3N0YV9yZXNldF9jb25uX21vbml0b3Ioc2RhdGEpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvc3RhdHVzLmMgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKaW5kZXggMzhhNzk3Mi4uMDcxYWM5NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YXR1cy5jCisrKyBiL25ldC9tYWM4MDIxMS9zdGF0dXMuYwpAQCAtMzIzLDYgKzMyMyw3IEBACiAKIAlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOworCQl1NjQgY29va2llID0gKHVuc2lnbmVkIGxvbmcpc2tiOwogCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CkBAIC0zMzQsOCArMzM1LDEyIEBACiAJCQlicmVhazsKIAkJfQogCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJaWYgKGxvY2FsLT5od19yb2Nfc2tiX2Zvcl9zdGF0dXMgPT0gc2tiKSB7CisJCQljb29raWUgPSBsb2NhbC0+aHdfcm9jX2Nvb2tpZSBeIDI7CisJCQlsb2NhbC0+aHdfcm9jX3NrYl9mb3Jfc3RhdHVzID0gTlVMTDsKKwkJfQogCQljZmc4MDIxMV9tZ210X3R4X3N0YXR1cygKLQkJCXNrYi0+ZGV2LCAodW5zaWduZWQgbG9uZykgc2tiLCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJc2tiLT5kZXYsIGNvb2tpZSwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCSEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSwgR0ZQX0FUT01JQyk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IDU5NTBlM2EuLmIwYmVhYTUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0xNTQ3LDcgKzE1NDcsNyBAQAogCQlza2Jfb3JwaGFuKHNrYik7CiAJfQogCi0JaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpCisJaWYgKHNrYl9jbG9uZWQoc2tiKSkKIAkJSTgwMl9ERUJVR19JTkMobG9jYWwtPnR4X2V4cGFuZF9za2JfaGVhZF9jbG9uZWQpOwogCWVsc2UgaWYgKGhlYWRfbmVlZCB8fCB0YWlsX25lZWQpCiAJCUk4MDJfREVCVUdfSU5DKGxvY2FsLT50eF9leHBhbmRfc2tiX2hlYWQpOwpAQCAtMjIzMCw2ICsyMjMwLDkgQEAKIAogCXNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CiAKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJZ290byBvdXQ7CisKIAlpZiAodGltX29mZnNldCkKIAkJKnRpbV9vZmZzZXQgPSAwOwogCWlmICh0aW1fbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggY2Y2ODcwMC4uZDAzNjU5NyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0xMjEwLDcgKzEyMTAsOSBAQAogCQlzd2l0Y2ggKHNkYXRhLT52aWYudHlwZSkgewogCQljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0FTU09DOworCQkJbXV0ZXhfbG9jaygmc2RhdGEtPnUubWdkLm10eCk7CiAJCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeShzZGF0YSwgY2hhbmdlZCk7CisJCQltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOwogCQkJYnJlYWs7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6CiAJCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0lCU1M7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCmluZGV4IDMyZmNiZTIuLjRhYTYxNGIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvY29yZS5jCkBAIC0xMzMsNiArMTMzLDcgQEAKIAogCQkvKiBPcHRpbWl6YXRpb246IHdlIGRvbid0IG5lZWQgdG8gaG9sZCBtb2R1bGUKIAkJICAgcmVmZXJlbmNlIGhlcmUsIHNpbmNlIGZ1bmN0aW9uIGNhbid0IHNsZWVwLiAtLVJSICovCityZXBlYXQ6CiAJCXZlcmRpY3QgPSBlbGVtLT5ob29rKGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbik7CiAJCWlmICh2ZXJkaWN0ICE9IE5GX0FDQ0VQVCkgewogI2lmZGVmIENPTkZJR19ORVRGSUxURVJfREVCVUcKQEAgLTE0NSw3ICsxNDYsNyBAQAogI2VuZGlmCiAJCQlpZiAodmVyZGljdCAhPSBORl9SRVBFQVQpCiAJCQkJcmV0dXJuIHZlcmRpY3Q7Ci0JCQkqaSA9ICgqaSktPnByZXY7CisJCQlnb3RvIHJlcGVhdDsKIAkJfQogCX0KIAlyZXR1cm4gTkZfQUNDRVBUOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCmluZGV4IDIyZjdhZDUuLmJhOThlMTMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKQEAgLTgwOCw5ICs4MDgsOSBAQAogCWRlc3QtPnVfdGhyZXNob2xkID0gdWRlc3QtPnVfdGhyZXNob2xkOwogCWRlc3QtPmxfdGhyZXNob2xkID0gdWRlc3QtPmxfdGhyZXNob2xkOwogCi0Jc3Bpbl9sb2NrKCZkZXN0LT5kc3RfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZkZXN0LT5kc3RfbG9jayk7CiAJaXBfdnNfZHN0X3Jlc2V0KGRlc3QpOwotCXNwaW5fdW5sb2NrKCZkZXN0LT5kc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmRlc3QtPmRzdF9sb2NrKTsKIAogCWlmIChhZGQpCiAJCWlwX3ZzX25ld19lc3RpbWF0b3IoJmRlc3QtPnN0YXRzKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCBlNjE1MTE5Li44NGY0ZmNjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC05NDIsOCArOTQyLDE1IEBACiAJaWYgKHNldF9yZXBseSAmJiAhdGVzdF9hbmRfc2V0X2JpdChJUFNfU0VFTl9SRVBMWV9CSVQsICZjdC0+c3RhdHVzKSkKIAkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfUkVQTFksIGN0KTsKIG91dDoKLQlpZiAodG1wbCkKLQkJbmZfY3RfcHV0KHRtcGwpOworCWlmICh0bXBsKSB7CisJCS8qIFNwZWNpYWwgY2FzZTogd2UgaGF2ZSB0byByZXBlYXQgdGhpcyBob29rLCBhc3NpZ24gdGhlCisJCSAqIHRlbXBsYXRlIGFnYWluIHRvIHRoaXMgcGFja2V0LiBXZSBhc3N1bWUgdGhhdCB0aGlzIHBhY2tldAorCQkgKiBoYXMgbm8gY29ubnRyYWNrIGFzc2lnbmVkLiBUaGlzIGlzIHVzZWQgYnkgbmZfY3RfdGNwLiAqLworCQlpZiAocmV0ID09IE5GX1JFUEVBVCkKKwkJCXNrYi0+bmZjdCA9IChzdHJ1Y3QgbmZfY29ubnRyYWNrICopdG1wbDsKKwkJZWxzZQorCQkJbmZfY3RfcHV0KHRtcGwpOworCX0KIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCmluZGV4IDU3MDJkZTMuLjYzYTFiOTEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5jCkBAIC02Myw2ICs2Myw5IEBACiAJCSAqIHRoaXMgZG9lcyBub3QgaGFybSBhbmQgaXQgaGFwcGVucyB2ZXJ5IHJhcmVseS4gKi8KIAkJdW5zaWduZWQgbG9uZyBtaXNzZWQgPSBlLT5taXNzZWQ7CiAKKwkJaWYgKCEoKGV2ZW50cyB8IG1pc3NlZCkgJiBlLT5jdG1hc2spKQorCQkJZ290byBvdXRfdW5sb2NrOworCiAJCXJldCA9IG5vdGlmeS0+ZmNuKGV2ZW50cyB8IG1pc3NlZCwgJml0ZW0pOwogCQlpZiAodW5saWtlbHkocmV0IDwgMCB8fCBtaXNzZWQpKSB7CiAJCQlzcGluX2xvY2tfYmgoJmN0LT5sb2NrKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwppbmRleCA5MzI5N2FhLi5lZWFkOWRiIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCkBAIC02NjcsNiArNjY3LDcgQEAKIAkJCWlmIChjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCQkJCQljYi0+bmxoLT5ubG1zZ19zZXEsCiAJCQkJCQlJUENUTkxfTVNHX0NUX05FVywgY3QpIDwgMCkgeworCQkJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5jdF9nZW5lcmFsKTsKIAkJCQljYi0+YXJnc1sxXSA9ICh1bnNpZ25lZCBsb25nKWN0OwogCQkJCWdvdG8gb3V0OwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZfbG9nLmMKaW5kZXggYjA3MzkzZS4uOTE4MTY5OSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2xvZy5jCkBAIC04NSw2ICs4NSw4IEBACiAKIGludCBuZl9sb2dfYmluZF9wZih1X2ludDhfdCBwZiwgY29uc3Qgc3RydWN0IG5mX2xvZ2dlciAqbG9nZ2VyKQogeworCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAltdXRleF9sb2NrKCZuZl9sb2dfbXV0ZXgpOwogCWlmIChfX2ZpbmRfbG9nZ2VyKHBmLCBsb2dnZXItPm5hbWUpID09IE5VTEwpIHsKIAkJbXV0ZXhfdW5sb2NrKCZuZl9sb2dfbXV0ZXgpOwpAQCAtOTgsNiArMTAwLDggQEAKIAogdm9pZCBuZl9sb2dfdW5iaW5kX3BmKHVfaW50OF90IHBmKQogeworCWlmIChwZiA+PSBBUlJBWV9TSVpFKG5mX2xvZ2dlcnMpKQorCQlyZXR1cm47CiAJbXV0ZXhfbG9jaygmbmZfbG9nX211dGV4KTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbG9nZ2Vyc1twZl0sIE5VTEwpOwogCW11dGV4X3VubG9jaygmbmZfbG9nX211dGV4KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuYwppbmRleCA0ZDg3YmVmLi40NzRkNjIxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3Rwcm94eV9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl90cHJveHlfY29yZS5jCkBAIC0yOCwyNiArMjgsMjMgQEAKIAlza2ItPmRlc3RydWN0b3IgPSBOVUxMOwogCiAJaWYgKHNrKQotCQluZl90cHJveHlfcHV0X3NvY2soc2spOworCQlzb2NrX3B1dChzayk7CiB9CiAKIC8qIGNvbnN1bWVzIHNrICovCi1pbnQKK3ZvaWQKIG5mX3Rwcm94eV9hc3NpZ25fc29jayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0JYm9vbCB0cmFuc3BhcmVudCA9IChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkgPwotCQkJCWluZXRfdHdzayhzayktPnR3X3RyYW5zcGFyZW50IDoKLQkJCQlpbmV0X3NrKHNrKS0+dHJhbnNwYXJlbnQ7CisJLyogYXNzaWduaW5nIHR3IHNvY2tldHMgY29tcGxpY2F0ZXMgdGhpbmdzOyBtb3N0CisJICogc2tiLT5zay0+WCBjaGVja3Mgd291bGQgaGF2ZSB0byB0ZXN0IHNrLT5za19zdGF0ZSBmaXJzdCAqLworCWlmIChzay0+c2tfc3RhdGUgPT0gVENQX1RJTUVfV0FJVCkgeworCQlpbmV0X3R3c2tfcHV0KGluZXRfdHdzayhzaykpOworCQlyZXR1cm47CisJfQogCi0JaWYgKHRyYW5zcGFyZW50KSB7Ci0JCXNrYl9vcnBoYW4oc2tiKTsKLQkJc2tiLT5zayA9IHNrOwotCQlza2ItPmRlc3RydWN0b3IgPSBuZl90cHJveHlfZGVzdHJ1Y3RvcjsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlCi0JCW5mX3Rwcm94eV9wdXRfc29jayhzayk7Ci0KLQlyZXR1cm4gMDsKKwlza2Jfb3JwaGFuKHNrYik7CisJc2tiLT5zayA9IHNrOworCXNrYi0+ZGVzdHJ1Y3RvciA9IG5mX3Rwcm94eV9kZXN0cnVjdG9yOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobmZfdHByb3h5X2Fzc2lnbl9zb2NrKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9UUFJPWFkuYyBiL25ldC9uZXRmaWx0ZXIveHRfVFBST1hZLmMKaW5kZXggNjQwNjc4Zi4uZGNmZDU3ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9UUFJPWFkuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1RQUk9YWS5jCkBAIC0zMyw2ICszMywyMCBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfdHByb3h5X2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfVFBST1hZLmg+CiAKK3N0YXRpYyBib29sIHRwcm94eV9za19pc190cmFuc3BhcmVudChzdHJ1Y3Qgc29jayAqc2spCit7CisJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfVElNRV9XQUlUKSB7CisJCWlmIChpbmV0X3NrKHNrKS0+dHJhbnNwYXJlbnQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJc29ja19wdXQoc2spOworCX0gZWxzZSB7CisJCWlmIChpbmV0X3R3c2soc2spLT50d190cmFuc3BhcmVudCkKKwkJCXJldHVybiB0cnVlOworCQlpbmV0X3R3c2tfcHV0KGluZXRfdHdzayhzaykpOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKIHN0YXRpYyBpbmxpbmUgX19iZTMyCiB0cHJveHlfbGFkZHI0KHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiB1c2VyX2xhZGRyLCBfX2JlMzIgZGFkZHIpCiB7CkBAIC0xNDEsNyArMTU1LDcgQEAKIAkJCQkJICAgc2tiLT5kZXYsIE5GVF9MT09LVVBfTElTVEVORVIpOwogCiAJLyogTk9URTogYXNzaWduX3NvY2sgY29uc3VtZXMgb3VyIHNrIHJlZmVyZW5jZSAqLwotCWlmIChzayAmJiBuZl90cHJveHlfYXNzaWduX3NvY2soc2tiLCBzaykpIHsKKwlpZiAoc2sgJiYgdHByb3h5X3NrX2lzX3RyYW5zcGFyZW50KHNrKSkgewogCQkvKiBUaGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHRhcmdldCwgYnV0IHdlIGRvbid0IGRvIG11bHRpcGxlCiAJCSAgIHRhcmdldHMgb24gdGhlIHNhbWUgcnVsZSB5ZXQgKi8KIAkJc2tiLT5tYXJrID0gKHNrYi0+bWFyayAmIH5tYXJrX21hc2spIF4gbWFya192YWx1ZTsKQEAgLTE0OSw2ICsxNjMsOCBAQAogCQlwcl9kZWJ1ZygicmVkaXJlY3Rpbmc6IHByb3RvICVoaHUgJXBJNDolaHUgLT4gJXBJNDolaHUsIG1hcms6ICV4XG4iLAogCQkJIGlwaC0+cHJvdG9jb2wsICZpcGgtPmRhZGRyLCBudG9ocyhocC0+ZGVzdCksCiAJCQkgJmxhZGRyLCBudG9ocyhscG9ydCksIHNrYi0+bWFyayk7CisKKwkJbmZfdHByb3h5X2Fzc2lnbl9zb2NrKHNrYiwgc2spOwogCQlyZXR1cm4gTkZfQUNDRVBUOwogCX0KIApAQCAtMzA2LDcgKzMyMiw3IEBACiAJCQkJCSAgIHBhci0+aW4sIE5GVF9MT09LVVBfTElTVEVORVIpOwogCiAJLyogTk9URTogYXNzaWduX3NvY2sgY29uc3VtZXMgb3VyIHNrIHJlZmVyZW5jZSAqLwotCWlmIChzayAmJiBuZl90cHJveHlfYXNzaWduX3NvY2soc2tiLCBzaykpIHsKKwlpZiAoc2sgJiYgdHByb3h5X3NrX2lzX3RyYW5zcGFyZW50KHNrKSkgewogCQkvKiBUaGlzIHNob3VsZCBiZSBpbiBhIHNlcGFyYXRlIHRhcmdldCwgYnV0IHdlIGRvbid0IGRvIG11bHRpcGxlCiAJCSAgIHRhcmdldHMgb24gdGhlIHNhbWUgcnVsZSB5ZXQgKi8KIAkJc2tiLT5tYXJrID0gKHNrYi0+bWFyayAmIH50Z2ktPm1hcmtfbWFzaykgXiB0Z2ktPm1hcmtfdmFsdWU7CkBAIC0zMTQsNiArMzMwLDggQEAKIAkJcHJfZGVidWcoInJlZGlyZWN0aW5nOiBwcm90byAlaGh1ICVwSTY6JWh1IC0+ICVwSTY6JWh1LCBtYXJrOiAleFxuIiwKIAkJCSB0cHJvdG8sICZpcGgtPnNhZGRyLCBudG9ocyhocC0+c291cmNlKSwKIAkJCSBsYWRkciwgbnRvaHMobHBvcnQpLCBza2ItPm1hcmspOworCisJCW5mX3Rwcm94eV9hc3NpZ25fc29jayhza2IsIHNrKTsKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfaXByYW5nZS5jIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKaW5kZXggODhmN2MzNS4uNzNjMzNhNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9pcHJhbmdlLmMKQEAgLTUzLDE1ICs1MywxMyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotaXByYW5nZV9pcHY2X3N1Yihjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYikKK2lwcmFuZ2VfaXB2Nl9sdChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmEsIGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYikKIHsKIAl1bnNpZ25lZCBpbnQgaTsKLQlpbnQgcjsKIAogCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKLQkJciA9IG50b2hsKGEtPnM2X2FkZHIzMltpXSkgLSBudG9obChiLT5zNl9hZGRyMzJbaV0pOwotCQlpZiAociAhPSAwKQotCQkJcmV0dXJuIHI7CisJCWlmIChhLT5zNl9hZGRyMzJbaV0gIT0gYi0+czZfYWRkcjMyW2ldKQorCQkJcmV0dXJuIG50b2hsKGEtPnM2X2FkZHIzMltpXSkgPCBudG9obChiLT5zNl9hZGRyMzJbaV0pOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzUsMTUgKzczLDE1IEBACiAJYm9vbCBtOwogCiAJaWYgKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkMpIHsKLQkJbSAgPSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPnNhZGRyLCAmaW5mby0+c3JjX21pbi5pbjYpIDwgMDsKLQkJbSB8PSBpcHJhbmdlX2lwdjZfc3ViKCZpcGgtPnNhZGRyLCAmaW5mby0+c3JjX21heC5pbjYpID4gMDsKKwkJbSAgPSBpcHJhbmdlX2lwdjZfbHQoJmlwaC0+c2FkZHIsICZpbmZvLT5zcmNfbWluLmluNik7CisJCW0gfD0gaXByYW5nZV9pcHY2X2x0KCZpbmZvLT5zcmNfbWF4LmluNiwgJmlwaC0+c2FkZHIpOwogCQltIF49ICEhKGluZm8tPmZsYWdzICYgSVBSQU5HRV9TUkNfSU5WKTsKIAkJaWYgKG0pCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUKSB7Ci0JCW0gID0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5kYWRkciwgJmluZm8tPmRzdF9taW4uaW42KSA8IDA7Ci0JCW0gfD0gaXByYW5nZV9pcHY2X3N1YigmaXBoLT5kYWRkciwgJmluZm8tPmRzdF9tYXguaW42KSA+IDA7CisJCW0gID0gaXByYW5nZV9pcHY2X2x0KCZpcGgtPmRhZGRyLCAmaW5mby0+ZHN0X21pbi5pbjYpOworCQltIHw9IGlwcmFuZ2VfaXB2Nl9sdCgmaW5mby0+ZHN0X21heC5pbjYsICZpcGgtPmRhZGRyKTsKIAkJbSBePSAhIShpbmZvLT5mbGFncyAmIElQUkFOR0VfRFNUX0lOVik7CiAJCWlmIChtKQogCQkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKaW5kZXggMDBkNmFlODMuLjljYzQ2MzUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfc29ja2V0LmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9zb2NrZXQuYwpAQCAtMzUsNiArMzUsMTUgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgogI2VuZGlmCiAKK3N0YXRpYyB2b2lkCit4dF9zb2NrZXRfcHV0X3NrKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoc2stPnNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQpCisJCWluZXRfdHdza19wdXQoaW5ldF90d3NrKHNrKSk7CisJZWxzZQorCQlzb2NrX3B1dChzayk7Cit9CisKIHN0YXRpYyBpbnQKIGV4dHJhY3RfaWNtcDRfZmllbGRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICB1OCAqcHJvdG9jb2wsCkBAIC0xNjQsNyArMTczLDcgQEAKIAkJCQkgICAgICAgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUICYmCiAJCQkJCWluZXRfdHdzayhzayktPnR3X3RyYW5zcGFyZW50KSk7CiAKLQkJbmZfdHByb3h5X3B1dF9zb2NrKHNrKTsKKwkJeHRfc29ja2V0X3B1dF9zayhzayk7CiAKIAkJaWYgKHdpbGRjYXJkIHx8ICF0cmFuc3BhcmVudCkKIAkJCXNrID0gTlVMTDsKQEAgLTI5OCw3ICszMDcsNyBAQAogCQkJCSAgICAgICAoc2stPnNrX3N0YXRlID09IFRDUF9USU1FX1dBSVQgJiYKIAkJCQkJaW5ldF90d3NrKHNrKS0+dHdfdHJhbnNwYXJlbnQpKTsKIAotCQluZl90cHJveHlfcHV0X3NvY2soc2spOworCQl4dF9zb2NrZXRfcHV0X3NrKHNrKTsKIAogCQlpZiAod2lsZGNhcmQgfHwgIXRyYW5zcGFyZW50KQogCQkJc2sgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDQ3ODE4MWQuLjFmOTI0NTkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTE0MDcsNyArMTQwNyw3IEBACiAJaW50IG5vYmxvY2sgPSBmbGFncyZNU0dfRE9OVFdBSVQ7CiAJc2l6ZV90IGNvcGllZDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqZGF0YV9za2I7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCByZXQ7CiAKIAlpZiAoZmxhZ3MmTVNHX09PQikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTQ3MCw4ICsxNDcwLDEzIEBACiAKIAlza2JfZnJlZV9kYXRhZ3JhbShzaywgc2tiKTsKIAotCWlmIChubGstPmNiICYmIGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykgPD0gc2stPnNrX3JjdmJ1ZiAvIDIpCi0JCW5ldGxpbmtfZHVtcChzayk7CisJaWYgKG5say0+Y2IgJiYgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSA8PSBzay0+c2tfcmN2YnVmIC8gMikgeworCQlyZXQgPSBuZXRsaW5rX2R1bXAoc2spOworCQlpZiAocmV0KSB7CisJCQlzay0+c2tfZXJyID0gcmV0OworCQkJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7CisJCX0KKwl9CiAKIAlzY21fcmVjdihzb2NrLCBtc2csIHNpb2NiLT5zY20sIGZsYWdzKTsKIG91dDoKQEAgLTE3MzYsNiArMTc0MSw3IEBACiAJc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiOwogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGs7CisJaW50IHJldDsKIAogCWNiID0ga3phbGxvYyhzaXplb2YoKmNiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGNiID09IE5VTEwpCkBAIC0xNzY0LDkgKzE3NzAsMTMgQEAKIAlubGstPmNiID0gY2I7CiAJbXV0ZXhfdW5sb2NrKG5say0+Y2JfbXV0ZXgpOwogCi0JbmV0bGlua19kdW1wKHNrKTsKKwlyZXQgPSBuZXRsaW5rX2R1bXAoc2spOworCiAJc29ja19wdXQoc2spOwogCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCS8qIFdlIHN1Y2Nlc3NmdWxseSBzdGFydGVkIGEgZHVtcCwgYnkgcmV0dXJuaW5nIC1FSU5UUiB3ZQogCSAqIHNpZ25hbCBub3QgdG8gc2VuZCBBQ0sgZXZlbiBpZiBpdCB3YXMgcmVxdWVzdGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvbmV0L3J4cnBjL2FyLWlucHV0LmMgYi9uZXQvcnhycGMvYXItaW5wdXQuYwppbmRleCA4OTMxNTAwLi4xYTJiMDYzMyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWlucHV0LmMKKysrIGIvbmV0L3J4cnBjL2FyLWlucHV0LmMKQEAgLTQyMyw2ICs0MjMsNyBAQAogCQkJZ290byBwcm90b2NvbF9lcnJvcjsKIAkJfQogCisJY2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9BQ0tBTEw6CiAJY2FzZSBSWFJQQ19QQUNLRVRfVFlQRV9BQ0s6CiAJCS8qIEFDSyBwcm9jZXNzaW5nIGlzIGRvbmUgaW4gcHJvY2VzcyBjb250ZXh0ICovCiAJCXJlYWRfbG9ja19iaCgmY2FsbC0+c3RhdGVfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvcnhycGMvYXIta2V5LmMgYi9uZXQvcnhycGMvYXIta2V5LmMKaW5kZXggNWVlMTZmMC4uZDc2Mzc5MyAxMDA2NDQKLS0tIGEvbmV0L3J4cnBjL2FyLWtleS5jCisrKyBiL25ldC9yeHJwYy9hci1rZXkuYwpAQCAtODksMTEgKzg5LDExIEBACiAJCXJldHVybiByZXQ7CiAKIAlwbGVuIC09IHNpemVvZigqdG9rZW4pOwotCXRva2VuID0ga21hbGxvYyhzaXplb2YoKnRva2VuKSwgR0ZQX0tFUk5FTCk7CisJdG9rZW4gPSBremFsbG9jKHNpemVvZigqdG9rZW4pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRva2VuKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXRva2VuLT5rYWQgPSBrbWFsbG9jKHBsZW4sIEdGUF9LRVJORUwpOworCXRva2VuLT5rYWQgPSBremFsbG9jKHBsZW4sIEdGUF9LRVJORUwpOwogCWlmICghdG9rZW4tPmthZCkgewogCQlrZnJlZSh0b2tlbik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNzMxLDEwICs3MzEsMTAgQEAKIAkJZ290byBlcnJvcjsKIAogCXJldCA9IC1FTk9NRU07Ci0JdG9rZW4gPSBrbWFsbG9jKHNpemVvZigqdG9rZW4pLCBHRlBfS0VSTkVMKTsKKwl0b2tlbiA9IGt6YWxsb2Moc2l6ZW9mKCp0b2tlbiksIEdGUF9LRVJORUwpOwogCWlmICghdG9rZW4pCiAJCWdvdG8gZXJyb3I7Ci0JdG9rZW4tPmthZCA9IGttYWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CisJdG9rZW4tPmthZCA9IGt6YWxsb2MocGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b2tlbi0+a2FkKQogCQlnb3RvIGVycm9yX2ZyZWU7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfY2JxLmMgYi9uZXQvc2NoZWQvc2NoX2NicS5jCmluZGV4IGM4MGQxYzIuLjVmNjNlYzUgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfY2JxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9jYnEuYwpAQCAtMzkwLDcgKzM5MCw2IEBACiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLT5xKTsKIAlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKIAkJc2NoLT5xLnFsZW4rKzsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCWNicV9tYXJrX3RvcGxldmVsKHEsIGNsKTsKIAkJaWYgKCFjbC0+bmV4dF9hbGl2ZSkKIAkJCWNicV9hY3RpdmF0ZV9jbGFzcyhjbCk7CkBAIC02NDksNyArNjQ4LDYgQEAKIAkJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIGNsLT5xKTsKIAkJaWYgKHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSB7CiAJCQlzY2gtPnEucWxlbisrOwotCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlpZiAoIWNsLT5uZXh0X2FsaXZlKQogCQkJCWNicV9hY3RpdmF0ZV9jbGFzcyhjbCk7CiAJCQlyZXR1cm4gMDsKQEAgLTk3MSw2ICs5NjksNyBAQAogCiAJCXNrYiA9IGNicV9kZXF1ZXVlXzEoc2NoKTsKIAkJaWYgKHNrYikgeworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJc2NoLT5mbGFncyAmPSB+VENRX0ZfVEhST1RUTEVEOwogCQkJcmV0dXJuIHNrYjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZHJyLmMgYi9uZXQvc2NoZWQvc2NoX2Ryci5jCmluZGV4IGRlNTVlNjQuLjZiN2ZlNGEgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZHJyLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9kcnIuYwpAQCAtMzc2LDcgKzM3Niw2IEBACiAJfQogCiAJYnN0YXRzX3VwZGF0ZSgmY2wtPmJzdGF0cywgc2tiKTsKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAogCXNjaC0+cS5xbGVuKys7CiAJcmV0dXJuIGVycjsKQEAgLTQwMyw2ICs0MDIsNyBAQAogCQkJc2tiID0gcWRpc2NfZGVxdWV1ZV9wZWVrZWQoY2wtPnFkaXNjKTsKIAkJCWlmIChjbC0+cWRpc2MtPnEucWxlbiA9PSAwKQogCQkJCWxpc3RfZGVsKCZjbC0+YWxpc3QpOworCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQlzY2gtPnEucWxlbi0tOwogCQkJcmV0dXJuIHNrYjsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYyBiL25ldC9zY2hlZC9zY2hfZHNtYXJrLmMKaW5kZXggNjBmNGJkZC4uMGY3YmYzZiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9kc21hcmsuYworKysgYi9uZXQvc2NoZWQvc2NoX2RzbWFyay5jCkBAIC0yNjAsNyArMjYwLDYgQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbisrOwogCiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CkBAIC0yODMsNiArMjgyLDcgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCisJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4tLTsKIAogCWluZGV4ID0gc2tiLT50Y19pbmRleCAmIChwLT5pbmRpY2VzIC0gMSk7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZpZm8uYyBiL25ldC9zY2hlZC9zY2hfZmlmby5jCmluZGV4IGFhNGQ2MzMuLmQ0NjhiNDcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZmlmby5jCisrKyBiL25ldC9zY2hlZC9zY2hfZmlmby5jCkBAIC00NiwxNyArNDYsMTQgQEAKIAogc3RhdGljIGludCBwZmlmb190YWlsX2VucXVldWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IFFkaXNjKiBzY2gpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYl9oZWFkOwogCXN0cnVjdCBmaWZvX3NjaGVkX2RhdGEgKnEgPSBxZGlzY19wcml2KHNjaCk7CiAKIAlpZiAobGlrZWx5KHNrYl9xdWV1ZV9sZW4oJnNjaC0+cSkgPCBxLT5saW1pdCkpCiAJCXJldHVybiBxZGlzY19lbnF1ZXVlX3RhaWwoc2tiLCBzY2gpOwogCiAJLyogcXVldWUgZnVsbCwgcmVtb3ZlIG9uZSBza2IgdG8gZnVsZmlsbCB0aGUgbGltaXQgKi8KLQlza2JfaGVhZCA9IHFkaXNjX2RlcXVldWVfaGVhZChzY2gpOworCV9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHNjaCwgJnNjaC0+cSk7CiAJc2NoLT5xc3RhdHMuZHJvcHMrKzsKLQlrZnJlZV9za2Ioc2tiX2hlYWQpOwotCiAJcWRpc2NfZW5xdWV1ZV90YWlsKHNrYiwgc2NoKTsKIAogCXJldHVybiBORVRfWE1JVF9DTjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggMzRkYzU5OC4uMWJjNjk4MCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTgzOSw2ICs4MzksNyBAQAogCiAJbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7CiAJZGV2X2RlYWN0aXZhdGVfbWFueSgmc2luZ2xlKTsKKwlsaXN0X2RlbCgmc2luZ2xlKTsKIH0KIAogc3RhdGljIHZvaWQgZGV2X2luaXRfc2NoZWR1bGVyX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2hmc2MuYyBiL25ldC9zY2hlZC9zY2hfaGZzYy5jCmluZGV4IDJlNDU3OTEuLjE0YTc5OWRlIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2hmc2MuYworKysgYi9uZXQvc2NoZWQvc2NoX2hmc2MuYwpAQCAtMTYwMCw3ICsxNjAwLDYgQEAKIAkJc2V0X2FjdGl2ZShjbCwgcWRpc2NfcGt0X2xlbihza2IpKTsKIAogCWJzdGF0c191cGRhdGUoJmNsLT5ic3RhdHMsIHNrYik7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4rKzsKIAogCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwpAQCAtMTY2Niw2ICsxNjY1LDcgQEAKIAl9CiAKIAlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7CisJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJc2NoLT5xLnFsZW4tLTsKIAogCXJldHVybiBza2I7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2h0Yi5jIGIvbmV0L3NjaGVkL3NjaF9odGIuYwppbmRleCA5ODRjMWIwLi5mYzEyZmU2IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2h0Yi5jCisrKyBiL25ldC9zY2hlZC9zY2hfaHRiLmMKQEAgLTU3NCw3ICs1NzQsNiBAQAogCX0KIAogCXNjaC0+cS5xbGVuKys7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CiAKQEAgLTg0Miw3ICs4NDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmh0Yl9kZXF1ZXVlKHN0cnVjdCBRZGlzYyAqc2NoKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOworCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGh0Yl9zY2hlZCAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKIAlpbnQgbGV2ZWw7CiAJcHNjaGVkX3RpbWVfdCBuZXh0X2V2ZW50OwpAQCAtODUxLDYgKzg1MCw4IEBACiAJLyogdHJ5IHRvIGRlcXVldWUgZGlyZWN0IHBhY2tldHMgYXMgaGlnaCBwcmlvICghKSB0byBtaW5pbWl6ZSBjcHUgd29yayAqLwogCXNrYiA9IF9fc2tiX2RlcXVldWUoJnEtPmRpcmVjdF9xdWV1ZSk7CiAJaWYgKHNrYiAhPSBOVUxMKSB7CitvazoKKwkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKIAkJc2NoLT5xLnFsZW4tLTsKIAkJcmV0dXJuIHNrYjsKQEAgLTg4NCwxMSArODg1LDggQEAKIAkJCWludCBwcmlvID0gZmZ6KG0pOwogCQkJbSB8PSAxIDw8IHByaW87CiAJCQlza2IgPSBodGJfZGVxdWV1ZV90cmVlKHEsIHByaW8sIGxldmVsKTsKLQkJCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7Ci0JCQkJc2NoLT5xLnFsZW4tLTsKLQkJCQlzY2gtPmZsYWdzICY9IH5UQ1FfRl9USFJPVFRMRUQ7Ci0JCQkJZ290byBmaW47Ci0JCQl9CisJCQlpZiAobGlrZWx5KHNrYiAhPSBOVUxMKSkKKwkJCQlnb3RvIG9rOwogCQl9CiAJfQogCXNjaC0+cXN0YXRzLm92ZXJsaW1pdHMrKzsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMgYi9uZXQvc2NoZWQvc2NoX211bHRpcS5jCmluZGV4IDIxZjEzZGEuLjQzNmEyZTcgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbXVsdGlxLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9tdWx0aXEuYwpAQCAtODMsNyArODMsNiBAQAogCiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIHFkaXNjKTsKIAlpZiAocmV0ID09IE5FVF9YTUlUX1NVQ0NFU1MpIHsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXNjaC0+cS5xbGVuKys7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KQEAgLTExMiw2ICsxMTEsNyBAQAogCQkJcWRpc2MgPSBxLT5xdWV1ZXNbcS0+Y3VyYmFuZF07CiAJCQlza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7CiAJCQlpZiAoc2tiKSB7CisJCQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCQkJc2NoLT5xLnFsZW4tLTsKIAkJCQlyZXR1cm4gc2tiOwogCQkJfQpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9uZXRlbS5jIGIvbmV0L3NjaGVkL3NjaF9uZXRlbS5jCmluZGV4IDFjNGJjZTguLjZhMzAwNmIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfbmV0ZW0uYworKysgYi9uZXQvc2NoZWQvc2NoX25ldGVtLmMKQEAgLTI0MCw3ICsyNDAsNiBAQAogCiAJaWYgKGxpa2VseShyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykpIHsKIAkJc2NoLT5xLnFsZW4rKzsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJfSBlbHNlIGlmIChuZXRfeG1pdF9kcm9wX2NvdW50KHJldCkpIHsKIAkJc2NoLT5xc3RhdHMuZHJvcHMrKzsKIAl9CkBAIC0yODksNiArMjg4LDcgQEAKIAkJCQlza2ItPnRzdGFtcC50djY0ID0gMDsKICNlbmRpZgogCQkJcHJfZGVidWcoIm5ldGVtX2RlcXVldWU6IHJldHVybiBza2I9JXBcbiIsIHNrYik7CisJCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJCXNjaC0+cS5xbGVuLS07CiAJCQlyZXR1cm4gc2tiOwogCQl9CkBAIC00NzYsNyArNDc2LDYgQEAKIAkJX19za2JfcXVldWVfYWZ0ZXIobGlzdCwgc2tiLCBuc2tiKTsKIAogCQlzY2gtPnFzdGF0cy5iYWNrbG9nICs9IHFkaXNjX3BrdF9sZW4obnNrYik7Ci0JCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBuc2tiKTsKIAogCQlyZXR1cm4gTkVUX1hNSVRfU1VDQ0VTUzsKIAl9CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3ByaW8uYyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCmluZGV4IDk2NjE1OGQuLmZiZDcxMGQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcHJpby5jCisrKyBiL25ldC9zY2hlZC9zY2hfcHJpby5jCkBAIC04NCw3ICs4NCw2IEBACiAKIAlyZXQgPSBxZGlzY19lbnF1ZXVlKHNrYiwgcWRpc2MpOwogCWlmIChyZXQgPT0gTkVUX1hNSVRfU1VDQ0VTUykgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiAJfQpAQCAtMTE2LDYgKzExNSw3IEBACiAJCXN0cnVjdCBRZGlzYyAqcWRpc2MgPSBxLT5xdWV1ZXNbcHJpb107CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBxZGlzYy0+ZGVxdWV1ZShxZGlzYyk7CiAJCWlmIChza2IpIHsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXJldHVybiBza2I7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfcmVkLmMgYi9uZXQvc2NoZWQvc2NoX3JlZC5jCmluZGV4IGE2MDA5YzUuLjlmOThkYmQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfcmVkLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9yZWQuYwpAQCAtOTQsNyArOTQsNiBAQAogCiAJcmV0ID0gcWRpc2NfZW5xdWV1ZShza2IsIGNoaWxkKTsKIAlpZiAobGlrZWx5KHJldCA9PSBORVRfWE1JVF9TVUNDRVNTKSkgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAkJc2NoLT5xLnFsZW4rKzsKIAl9IGVsc2UgaWYgKG5ldF94bWl0X2Ryb3BfY291bnQocmV0KSkgewogCQlxLT5zdGF0cy5wZHJvcCsrOwpAQCAtMTE0LDExICsxMTMsMTMgQEAKIAlzdHJ1Y3QgUWRpc2MgKmNoaWxkID0gcS0+cWRpc2M7CiAKIAlza2IgPSBjaGlsZC0+ZGVxdWV1ZShjaGlsZCk7Ci0JaWYgKHNrYikKKwlpZiAoc2tiKSB7CisJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQlzY2gtPnEucWxlbi0tOwotCWVsc2UgaWYgKCFyZWRfaXNfaWRsaW5nKCZxLT5wYXJtcykpCi0JCXJlZF9zdGFydF9vZl9pZGxlX3BlcmlvZCgmcS0+cGFybXMpOwotCisJfSBlbHNlIHsKKwkJaWYgKCFyZWRfaXNfaWRsaW5nKCZxLT5wYXJtcykpCisJCQlyZWRfc3RhcnRfb2ZfaWRsZV9wZXJpb2QoJnEtPnBhcm1zKTsKKwl9CiAJcmV0dXJuIHNrYjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9zZnEuYyBiL25ldC9zY2hlZC9zY2hfc2ZxLmMKaW5kZXggMjM5ZWM1My4uZWRlYThjZSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9zZnEuYworKysgYi9uZXQvc2NoZWQvc2NoX3NmcS5jCkBAIC00MDIsMTAgKzQwMiw4IEBACiAJCXEtPnRhaWwgPSBzbG90OwogCQlzbG90LT5hbGxvdCA9IHEtPnNjYWxlZF9xdWFudHVtOwogCX0KLQlpZiAoKytzY2gtPnEucWxlbiA8PSBxLT5saW1pdCkgewotCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKKwlpZiAoKytzY2gtPnEucWxlbiA8PSBxLT5saW1pdCkKIAkJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7Ci0JfQogCiAJc2ZxX2Ryb3Aoc2NoKTsKIAlyZXR1cm4gTkVUX1hNSVRfQ047CkBAIC00NDUsNiArNDQzLDcgQEAKIAl9CiAJc2tiID0gc2xvdF9kZXF1ZXVlX2hlYWQoc2xvdCk7CiAJc2ZxX2RlYyhxLCBhKTsKKwlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAlzY2gtPnEucWxlbi0tOwogCXNjaC0+cXN0YXRzLmJhY2tsb2cgLT0gcWRpc2NfcGt0X2xlbihza2IpOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RiZi5jIGIvbmV0L3NjaGVkL3NjaF90YmYuYwppbmRleCA3NzU2NWU3Li5lOTMxNjU4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX3RiZi5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGJmLmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogCX0KIAogCXNjaC0+cS5xbGVuKys7Ci0JcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJcmV0dXJuIE5FVF9YTUlUX1NVQ0NFU1M7CiB9CiAKQEAgLTE4Nyw2ICsxODYsNyBAQAogCQkJcS0+cHRva2VucyA9IHB0b2tzOwogCQkJc2NoLT5xLnFsZW4tLTsKIAkJCXNjaC0+ZmxhZ3MgJj0gflRDUV9GX1RIUk9UVExFRDsKKwkJCXFkaXNjX2JzdGF0c191cGRhdGUoc2NoLCBza2IpOwogCQkJcmV0dXJuIHNrYjsKIAkJfQogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX3RlcWwuYyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCmluZGV4IDg0Y2U0OGUuLmQ4NGU3MzIgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfdGVxbC5jCisrKyBiL25ldC9zY2hlZC9zY2hfdGVxbC5jCkBAIC04Nyw3ICs4Nyw2IEBACiAKIAlpZiAocS0+cS5xbGVuIDwgZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJX19za2JfcXVldWVfdGFpbCgmcS0+cSwgc2tiKTsKLQkJcWRpc2NfYnN0YXRzX3VwZGF0ZShzY2gsIHNrYik7CiAJCXJldHVybiBORVRfWE1JVF9TVUNDRVNTOwogCX0KIApAQCAtMTExLDYgKzExMCw4IEBACiAJCQlkYXQtPm0tPnNsYXZlcyA9IHNjaDsKIAkJCW5ldGlmX3dha2VfcXVldWUobSk7CiAJCX0KKwl9IGVsc2UgeworCQlxZGlzY19ic3RhdHNfdXBkYXRlKHNjaCwgc2tiKTsKIAl9CiAJc2NoLT5xLnFsZW4gPSBkYXQtPnEucWxlbiArIGRhdF9xdWV1ZS0+cWRpc2MtPnEucWxlbjsKIAlyZXR1cm4gc2tiOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCmluZGV4IDJjYzQ2ZjAuLmIyMzQyOGYgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYworKysgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKQEAgLTIwMjksMTEgKzIwMjksMTEgQEAKIAkJCSplcnJwID0gc2N0cF9tYWtlX29wX2Vycm9yX2ZpeGVkKGFzb2MsIGNodW5rKTsKIAogCQlpZiAoKmVycnApIHsKLQkJCXNjdHBfaW5pdF9jYXVzZV9maXhlZCgqZXJycCwgU0NUUF9FUlJPUl9VTktOT1dOX1BBUkFNLAotCQkJCQlXT1JEX1JPVU5EKG50b2hzKHBhcmFtLnAtPmxlbmd0aCkpKTsKLQkJCXNjdHBfYWRkdG9fY2h1bmtfZml4ZWQoKmVycnAsCi0JCQkJCVdPUkRfUk9VTkQobnRvaHMocGFyYW0ucC0+bGVuZ3RoKSksCi0JCQkJCXBhcmFtLnYpOworCQkJaWYgKCFzY3RwX2luaXRfY2F1c2VfZml4ZWQoKmVycnAsIFNDVFBfRVJST1JfVU5LTk9XTl9QQVJBTSwKKwkJCQkJV09SRF9ST1VORChudG9ocyhwYXJhbS5wLT5sZW5ndGgpKSkpCisJCQkJc2N0cF9hZGR0b19jaHVua19maXhlZCgqZXJycCwKKwkJCQkJCVdPUkRfUk9VTkQobnRvaHMocGFyYW0ucC0+bGVuZ3RoKSksCisJCQkJCQlwYXJhbS52KTsKIAkJfSBlbHNlIHsKIAkJCS8qIElmIHRoZXJlIGlzIG5vIG1lbW9yeSBmb3IgZ2VuZXJhdGluZyB0aGUgRVJST1IKIAkJCSAqIHJlcG9ydCBhcyBzcGVjaWZpZWQsIGFuIEFCT1JUIHdpbGwgYmUgdHJpZ2dlcmVkCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y3NvY2suYyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCmluZGV4IDdiZDNiYmIuLmQ4MDJlOTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3Zjc29jay5jCisrKyBiL25ldC9zdW5ycGMvc3Zjc29jay5jCkBAIC0xNjA5LDkgKzE2MDksNyBAQAogICovCiBzdGF0aWMgdm9pZCBzdmNfYmNfc29ja19mcmVlKHN0cnVjdCBzdmNfeHBydCAqeHBydCkKIHsKLQlpZiAoeHBydCkgewotCQlrZnJlZSh4cHJ0LT54cHRfYmNfc2lkKTsKKwlpZiAoeHBydCkKIAkJa2ZyZWUoY29udGFpbmVyX29mKHhwcnQsIHN0cnVjdCBzdmNfc29jaywgc2tfeHBydCkpOwotCX0KIH0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy93ZXh0LWNvbXBhdC5jIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKaW5kZXggM2U1ZGJkNC4uZDExMmYwMyAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKKysrIGIvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMKQEAgLTgwMiwxMSArODAyLDExIEBACiAJCQlyZXR1cm4gZnJlcTsKIAkJaWYgKGZyZXEgPT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl3ZGV2X2xvY2sod2Rldik7CiAJCW11dGV4X2xvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKKwkJd2Rldl9sb2NrKHdkZXYpOwogCQllcnIgPSBjZmc4MDIxMV9zZXRfZnJlcShyZGV2LCB3ZGV2LCBmcmVxLCBOTDgwMjExX0NIQU5fTk9fSFQpOwotCQltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKIAkJd2Rldl91bmxvY2sod2Rldik7CisJCW11dGV4X3VubG9jaygmcmRldi0+ZGV2bGlzdF9tdHgpOwogCQlyZXR1cm4gZXJyOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYyBiL25ldC94MjUveDI1X2ZhY2lsaXRpZXMuYwppbmRleCA1NTE4N2M4Li40MDYyMDc1IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9mYWNpbGl0aWVzLmMKKysrIGIvbmV0L3gyNS94MjVfZmFjaWxpdGllcy5jCkBAIC0yNyw5ICsyNywxOSBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L3gyNS5oPgogCi0vKgotICogUGFyc2UgYSBzZXQgb2YgZmFjaWxpdGllcyBpbnRvIHRoZSBmYWNpbGl0aWVzIHN0cnVjdHVyZXMuIFVucmVjb2duaXNlZAotICoJZmFjaWxpdGllcyBhcmUgd3JpdHRlbiB0byB0aGUgZGVidWcgbG9nIGZpbGUuCisvKioKKyAqIHgyNV9wYXJzZV9mYWNpbGl0aWVzIC0gUGFyc2UgZmFjaWxpdGllcyBmcm9tIHNrYiBpbnRvIHRoZSBmYWNpbGl0aWVzIHN0cnVjdHMKKyAqCisgKiBAc2tiOiBza19idWZmIHRvIHBhcnNlCisgKiBAZmFjaWxpdGllczogUmVndWxhciBmYWNpbGl0ZXMsIHVwZGF0ZWQgYXMgZmFjaWxpdGllcyBhcmUgZm91bmQKKyAqIEBkdGVfZmFjczogSVRVIERURSBmYWNpbGl0aWVzLCB1cGRhdGVkIGFzIERURSBmYWNpbGl0aWVzIGFyZSBmb3VuZAorICogQHZjX2ZhY19tYXNrOiBtYXNrIGlzIHVwZGF0ZWQgd2l0aCBhbGwgZmFjaWxpdGllcyBmb3VuZAorICoKKyAqIFJldHVybiBjb2RlczoKKyAqICAtMSAtIFBhcnNpbmcgZXJyb3IsIGNhbGxlciBzaG91bGQgZHJvcCBjYWxsIGFuZCBjbGVhbiB1cAorICogICAwIC0gUGFyc2UgT0ssIHRoaXMgc2tiIGhhcyBubyBmYWNpbGl0aWVzCisgKiAgPjAgLSBQYXJzZSBPSywgcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBmYWNpbGl0aWVzIGhlYWRlcgorICoKICAqLwogaW50IHgyNV9wYXJzZV9mYWNpbGl0aWVzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4MjVfZmFjaWxpdGllcyAqZmFjaWxpdGllcywKIAkJc3RydWN0IHgyNV9kdGVfZmFjaWxpdGllcyAqZHRlX2ZhY3MsIHVuc2lnbmVkIGxvbmcgKnZjX2ZhY19tYXNrKQpAQCAtNjIsNyArNzIsNyBAQAogCQlzd2l0Y2ggKCpwICYgWDI1X0ZBQ19DTEFTU19NQVNLKSB7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19BOgogCQkJaWYgKGxlbiA8IDIpCi0JCQkJcmV0dXJuIDA7CisJCQkJcmV0dXJuIC0xOwogCQkJc3dpdGNoICgqcCkgewogCQkJY2FzZSBYMjVfRkFDX1JFVkVSU0U6CiAJCQkJaWYoKHBbMV0gJiAweDgxKSA9PSAweDgxKSB7CkBAIC0xMDcsNyArMTE3LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFgyNV9GQUNfQ0xBU1NfQjoKIAkJCWlmIChsZW4gPCAzKQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAtMTsKIAkJCXN3aXRjaCAoKnApIHsKIAkJCWNhc2UgWDI1X0ZBQ19QQUNLRVRfU0laRToKIAkJCQlmYWNpbGl0aWVzLT5wYWNzaXplX2luICA9IHBbMV07CkBAIC0xMzAsNyArMTQwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFgyNV9GQUNfQ0xBU1NfQzoKIAkJCWlmIChsZW4gPCA0KQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAtMTsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJYLjI1OiB1bmtub3duIGZhY2lsaXR5ICUwMlgsICIKIAkJCSAgICAgICAidmFsdWVzICUwMlgsICUwMlgsICUwMlhcbiIsCiAJCQkgICAgICAgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7CkBAIC0xMzksMTggKzE0OSwxOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgWDI1X0ZBQ19DTEFTU19EOgogCQkJaWYgKGxlbiA8IHBbMV0gKyAyKQotCQkJCXJldHVybiAwOworCQkJCXJldHVybiAtMTsKIAkJCXN3aXRjaCAoKnApIHsKIAkJCWNhc2UgWDI1X0ZBQ19DQUxMSU5HX0FFOgogCQkJCWlmIChwWzFdID4gWDI1X01BWF9EVEVfRkFDSUxfTEVOIHx8IHBbMV0gPD0gMSkKLQkJCQkJcmV0dXJuIDA7CisJCQkJCXJldHVybiAtMTsKIAkJCQlkdGVfZmFjcy0+Y2FsbGluZ19sZW4gPSBwWzJdOwogCQkJCW1lbWNweShkdGVfZmFjcy0+Y2FsbGluZ19hZSwgJnBbM10sIHBbMV0gLSAxKTsKIAkJCQkqdmNfZmFjX21hc2sgfD0gWDI1X01BU0tfQ0FMTElOR19BRTsKIAkJCQlicmVhazsKIAkJCWNhc2UgWDI1X0ZBQ19DQUxMRURfQUU6CiAJCQkJaWYgKHBbMV0gPiBYMjVfTUFYX0RURV9GQUNJTF9MRU4gfHwgcFsxXSA8PSAxKQotCQkJCQlyZXR1cm4gMDsKKwkJCQkJcmV0dXJuIC0xOwogCQkJCWR0ZV9mYWNzLT5jYWxsZWRfbGVuID0gcFsyXTsKIAkJCQltZW1jcHkoZHRlX2ZhY3MtPmNhbGxlZF9hZSwgJnBbM10sIHBbMV0gLSAxKTsKIAkJCQkqdmNfZmFjX21hc2sgfD0gWDI1X01BU0tfQ0FMTEVEX0FFOwpkaWZmIC0tZ2l0IGEvbmV0L3gyNS94MjVfaW4uYyBiL25ldC94MjUveDI1X2luLmMKaW5kZXggZjcyOWYwMi4uMTVkZTY1ZiAxMDA2NDQKLS0tIGEvbmV0L3gyNS94MjVfaW4uYworKysgYi9uZXQveDI1L3gyNV9pbi5jCkBAIC05MSwxMCArOTEsMTAgQEAKIHsKIAlzdHJ1Y3QgeDI1X2FkZHJlc3Mgc291cmNlX2FkZHIsIGRlc3RfYWRkcjsKIAlpbnQgbGVuOworCXN0cnVjdCB4MjVfc29jayAqeDI1ID0geDI1X3NrKHNrKTsKIAogCXN3aXRjaCAoZnJhbWV0eXBlKSB7CiAJCWNhc2UgWDI1X0NBTExfQUNDRVBURUQ6IHsKLQkJCXN0cnVjdCB4MjVfc29jayAqeDI1ID0geDI1X3NrKHNrKTsKIAogCQkJeDI1X3N0b3BfdGltZXIoc2spOwogCQkJeDI1LT5jb25kaXRpb24gPSAweDAwOwpAQCAtMTEzLDE0ICsxMTMsMTYgQEAKIAkJCQkJCSZkZXN0X2FkZHIpOwogCQkJaWYgKGxlbiA+IDApCiAJCQkJc2tiX3B1bGwoc2tiLCBsZW4pOworCQkJZWxzZSBpZiAobGVuIDwgMCkKKwkJCQlnb3RvIG91dF9jbGVhcjsKIAogCQkJbGVuID0geDI1X3BhcnNlX2ZhY2lsaXRpZXMoc2tiLCAmeDI1LT5mYWNpbGl0aWVzLAogCQkJCQkJJngyNS0+ZHRlX2ZhY2lsaXRpZXMsCiAJCQkJCQkmeDI1LT52Y19mYWNpbF9tYXNrKTsKIAkJCWlmIChsZW4gPiAwKQogCQkJCXNrYl9wdWxsKHNrYiwgbGVuKTsKLQkJCWVsc2UKLQkJCQlyZXR1cm4gLTE7CisJCQllbHNlIGlmIChsZW4gPCAwKQorCQkJCWdvdG8gb3V0X2NsZWFyOwogCQkJLyoKIAkJCSAqCUNvcHkgYW55IENhbGwgVXNlciBEYXRhLgogCQkJICovCkBAIC0xNDQsNiArMTQ2LDEyIEBACiAJfQogCiAJcmV0dXJuIDA7CisKK291dF9jbGVhcjoKKwl4MjVfd3JpdGVfaW50ZXJuYWwoc2ssIFgyNV9DTEVBUl9SRVFVRVNUKTsKKwl4MjUtPnN0YXRlID0gWDI1X1NUQVRFXzI7CisJeDI1X3N0YXJ0X3QyM3RpbWVyKHNrKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X2xpbmsuYyBiL25ldC94MjUveDI1X2xpbmsuYwppbmRleCA0Y2JjOTQyLi4yMTMwNjkyIDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9saW5rLmMKKysrIGIvbmV0L3gyNS94MjVfbGluay5jCkBAIC0zOTYsOSArMzk2LDEyIEBACiAJd3JpdGVfbG9ja19iaCgmeDI1X25laWdoX2xpc3RfbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX3NhZmUoZW50cnksIHRtcCwgJngyNV9uZWlnaF9saXN0KSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKIAkJbmIgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgeDI1X25laWdoLCBub2RlKTsKKwkJZGV2ID0gbmItPmRldjsKIAkJX194MjVfcmVtb3ZlX25laWdoKG5iKTsKLQkJZGV2X3B1dChuYi0+ZGV2KTsKKwkJZGV2X3B1dChkZXYpOwogCX0KIAl3cml0ZV91bmxvY2tfYmgoJngyNV9uZWlnaF9saXN0X2xvY2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKaW5kZXggOGIzZWY0MC4uNjQ1OTU4OCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wb2xpY3kuYworKysgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCkBAIC0xMzQwLDEwICsxMzQwLDEzIEBACiAJZGVmYXVsdDoKIAkJQlVHKCk7CiAJfQotCXhkc3QgPSBkc3RfYWxsb2MoZHN0X29wcykgPzogRVJSX1BUUigtRU5PQlVGUyk7CisJeGRzdCA9IGRzdF9hbGxvYyhkc3Rfb3BzKTsKIAl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7CiAKLQl4ZHN0LT5mbG8ub3BzID0gJnhmcm1fYnVuZGxlX2ZjX29wczsKKwlpZiAobGlrZWx5KHhkc3QpKQorCQl4ZHN0LT5mbG8ub3BzID0gJnhmcm1fYnVuZGxlX2ZjX29wczsKKwllbHNlCisJCXhkc3QgPSBFUlJfUFRSKC1FTk9CVUZTKTsKIAogCXJldHVybiB4ZHN0OwogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYyBiL3NjcmlwdHMvYmFzaWMvZml4ZGVwLmMKaW5kZXggYzlhMTZhYi4uNmM5NGM2YyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9iYXNpYy9maXhkZXAuYworKysgYi9zY3JpcHRzL2Jhc2ljL2ZpeGRlcC5jCkBAIC0zMTUsNiArMzE1LDcgQEAKIAljaGFyICplbmQgPSBtICsgbGVuOwogCWNoYXIgKnA7CiAJY2hhciBzW1BBVEhfTUFYXTsKKwlpbnQgZmlyc3Q7CiAKIAlwID0gc3RyY2hyKG0sICc6Jyk7CiAJaWYgKCFwKSB7CkBAIC0zMjcsNiArMzI4LDcgQEAKIAogCWNsZWFyX2NvbmZpZygpOwogCisJZmlyc3QgPSAxOwogCXdoaWxlIChtIDwgZW5kKSB7CiAJCXdoaWxlIChtIDwgZW5kICYmICgqbSA9PSAnICcgfHwgKm0gPT0gJ1xcJyB8fCAqbSA9PSAnXG4nKSkKIAkJCW0rKzsKQEAgLTM0MCw5ICszNDIsMTcgQEAKIAkJaWYgKHN0cnJjbXAocywgImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgiKSAmJgogCQkgICAgc3RycmNtcChzLCAiYXJjaC91bS9pbmNsdWRlL3VtbC1jb25maWcuaCIpICYmCiAJCSAgICBzdHJyY21wKHMsICIudmVyIikpIHsKLQkJCXByaW50ZigiICAlcyBcXFxuIiwgcyk7CisJCQkvKgorCQkJICogRG8gbm90IG91dHB1dCB0aGUgZmlyc3QgZGVwZW5kZW5jeSAodGhlCisJCQkgKiBzb3VyY2UgZmlsZSksIHNvIHRoYXQga2J1aWxkIGlzIG5vdCBjb25mdXNlZAorCQkJICogaWYgYSAuYyBmaWxlIGlzIHJld3JpdHRlbiBpbnRvIC5TIG9yIHZpY2UKKwkJCSAqIHZlcnNhLgorCQkJICovCisJCQlpZiAoIWZpcnN0KQorCQkJCXByaW50ZigiICAlcyBcXFxuIiwgcyk7CiAJCQlkb19jb25maWdfZmlsZShzKTsKIAkJfQorCQlmaXJzdCA9IDA7CiAJCW0gPSBwICsgMTsKIAl9CiAJcHJpbnRmKCJcbiVzOiAkKGRlcHNfJXMpXG5cbiIsIHRhcmdldCwgdGFyZ2V0KTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYiBiL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgppbmRleCBiMGIyMzU3Li5mNmNiYzNkIDEwMDY0NAotLS0gYS9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKKysrIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCkBAIC0yMzgsMTIgKzIzOCwxMiBAQAogZmkKIAogIyBCdWlsZCBoZWFkZXIgcGFja2FnZQotZmluZCAuIC1uYW1lIE1ha2VmaWxlIC1vIC1uYW1lIEtjb25maWdcKiAtbyAtbmFtZSBcKi5wbCA+IC90bXAvZmlsZXMkJAotZmluZCBhcmNoL3g4Ni9pbmNsdWRlIGluY2x1ZGUgc2NyaXB0cyAtdHlwZSBmID4+IC90bXAvZmlsZXMkJAorKGNkICRzcmN0cmVlOyBmaW5kIC4gLW5hbWUgTWFrZWZpbGUgLW8gLW5hbWUgS2NvbmZpZ1wqIC1vIC1uYW1lIFwqLnBsID4gL3RtcC9maWxlcyQkKQorKGNkICRzcmN0cmVlOyBmaW5kIGFyY2gvJFNSQ0FSQ0gvaW5jbHVkZSBpbmNsdWRlIHNjcmlwdHMgLXR5cGUgZiA+PiAvdG1wL2ZpbGVzJCQpCiAoY2QgJG9ianRyZWU7IGZpbmQgLmNvbmZpZyBNb2R1bGUuc3ltdmVycyBpbmNsdWRlIHNjcmlwdHMgLXR5cGUgZiA+PiAvdG1wL29iamZpbGVzJCQpCiBkZXN0ZGlyPSRrZXJuZWxfaGVhZGVyc19kaXIvdXNyL3NyYy9saW51eC1oZWFkZXJzLSR2ZXJzaW9uCiBta2RpciAtcCAiJGRlc3RkaXIiCi10YXIgLWMgLWYgLSAtVCAvdG1wL2ZpbGVzJCQgfCAoY2QgJGRlc3RkaXI7IHRhciAteGYgLSkKKyhjZCAkc3JjdHJlZTsgdGFyIC1jIC1mIC0gLVQgL3RtcC9maWxlcyQkKSB8IChjZCAkZGVzdGRpcjsgdGFyIC14ZiAtKQogKGNkICRvYmp0cmVlOyB0YXIgLWMgLWYgLSAtVCAvdG1wL29iamZpbGVzJCQpIHwgKGNkICRkZXN0ZGlyOyB0YXIgLXhmIC0pCiBybSAtZiAvdG1wL2ZpbGVzJCQgL3RtcC9vYmpmaWxlcyQkCiBhcmNoPSQoZHBrZyAtLXByaW50LWFyY2hpdGVjdHVyZSkKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUgYi9zZWN1cml0eS9rZXlzL01ha2VmaWxlCmluZGV4IDZjOTQxMDUuLjFiZjA5MGEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvTWFrZWZpbGUKKysrIGIvc2VjdXJpdHkva2V5cy9NYWtlZmlsZQpAQCAtMTMsOCArMTMsOCBAQAogCXJlcXVlc3Rfa2V5X2F1dGgubyBcCiAJdXNlcl9kZWZpbmVkLm8KIAotb2JqLSQoQ09ORklHX1RSVVNURURfS0VZUykgKz0gdHJ1c3RlZF9kZWZpbmVkLm8KLW9iai0kKENPTkZJR19FTkNSWVBURURfS0VZUykgKz0gZW5jcnlwdGVkX2RlZmluZWQubworb2JqLSQoQ09ORklHX1RSVVNURURfS0VZUykgKz0gdHJ1c3RlZC5vCitvYmotJChDT05GSUdfRU5DUllQVEVEX0tFWVMpICs9IGVuY3J5cHRlZC5vCiBvYmotJChDT05GSUdfS0VZU19DT01QQVQpICs9IGNvbXBhdC5vCiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfU1lTQ1RMKSArPSBzeXNjdGwubwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZF9kZWZpbmVkLmMKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmMKaW5kZXggMjg3OTFhNi4uOWU3ZTRjZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5jCisrKyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxjcnlwdG8vc2hhLmg+CiAjaW5jbHVkZSA8Y3J5cHRvL2Flcy5oPgogCi0jaW5jbHVkZSAiZW5jcnlwdGVkX2RlZmluZWQuaCIKKyNpbmNsdWRlICJlbmNyeXB0ZWQuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgS0VZX1RSVVNURURfUFJFRklYW10gPSAidHJ1c3RlZDoiOwogc3RhdGljIGNvbnN0IGNoYXIgS0VZX1VTRVJfUFJFRklYW10gPSAidXNlcjoiOwpAQCAtODg4LDYgKzg4OCw3IEBACiBvdXQ6CiAJZW5jcnlwdGVkX3NoYXNoX3JlbGVhc2UoKTsKIAlyZXR1cm4gcmV0OworCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2VuY3J5cHRlZCh2b2lkKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5oIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWRfZGVmaW5lZC5oCnJlbmFtZSB0byBzZWN1cml0eS9rZXlzL2VuY3J5cHRlZC5oCmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2ludGVybmFsLmggYi9zZWN1cml0eS9rZXlzL2ludGVybmFsLmgKaW5kZXggZWRmYTUwZC4uYTUyYWE3YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9pbnRlcm5hbC5oCisrKyBiL3NlY3VyaXR5L2tleXMvaW50ZXJuYWwuaApAQCAtODcsMTMgKzg3LDEzIEBACiBleHRlcm4gaW50IF9fa2V5X2xpbmtfYmVnaW4oc3RydWN0IGtleSAqa2V5cmluZywKIAkJCSAgICBjb25zdCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCiAJCQkgICAgY29uc3QgY2hhciAqZGVzY3JpcHRpb24sCi0JCQkgICAgc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYyk7CisJCQkgICAgdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKTsKIGV4dGVybiBpbnQgX19rZXlfbGlua19jaGVja19saXZlX2tleShzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5ICprZXkpOwogZXh0ZXJuIHZvaWQgX19rZXlfbGluayhzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5ICprZXksCi0JCSAgICAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKTsKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgKl9wcmVhbGxvYyk7CiBleHRlcm4gdm9pZCBfX2tleV9saW5rX2VuZChzdHJ1Y3Qga2V5ICprZXlyaW5nLAogCQkJICAgc3RydWN0IGtleV90eXBlICp0eXBlLAotCQkJICAgc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2MpOworCQkJICAgdW5zaWduZWQgbG9uZyBwcmVhbGxvYyk7CiAKIGV4dGVybiBrZXlfcmVmX3QgX19rZXlyaW5nX3NlYXJjaF9vbmUoa2V5X3JlZl90IGtleXJpbmdfcmVmLAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jCmluZGV4IDg0ZDRlYjUuLjFjMmQ0M2QgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMva2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAJCQkJICAgICAgc2l6ZV90IGRhdGFsZW4sCiAJCQkJICAgICAgc3RydWN0IGtleSAqa2V5cmluZywKIAkJCQkgICAgICBzdHJ1Y3Qga2V5ICphdXRoa2V5LAotCQkJCSAgICAgIHN0cnVjdCBrZXlyaW5nX2xpc3QgKipfcHJlYWxsb2MpCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKQogewogCWludCByZXQsIGF3YWtlbjsKIApAQCAtNDgxLDcgKzQ4MSw3IEBACiAJCQkgICAgIHN0cnVjdCBrZXkgKmtleXJpbmcsCiAJCQkgICAgIHN0cnVjdCBrZXkgKmF1dGhrZXkpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlpbnQgcmV0OwogCiAJaWYgKGtleXJpbmcpIHsKQEAgLTUyNiw3ICs1MjYsNyBAQAogCQkJc3RydWN0IGtleSAqa2V5cmluZywKIAkJCXN0cnVjdCBrZXkgKmF1dGhrZXkpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CisJdW5zaWduZWQgbG9uZyBwcmVhbGxvYzsKIAlzdHJ1Y3QgdGltZXNwZWMgbm93OwogCWludCByZXQsIGF3YWtlbiwgbGlua19yZXQgPSAwOwogCkBAIC04MTQsNyArODE0LDcgQEAKIAkJCSAgICAgICBrZXlfcGVybV90IHBlcm0sCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYzsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJc3RydWN0IGtleV90eXBlICprdHlwZTsKIAlzdHJ1Y3Qga2V5ICprZXlyaW5nLCAqa2V5ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5cmluZy5jIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKaW5kZXggOTIwMjRlZC4uNTYyMGYwOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKKysrIGIvc2VjdXJpdHkva2V5cy9rZXlyaW5nLmMKQEAgLTI1LDYgKzI1LDggQEAKIAkJKGtleXJpbmcpLT5wYXlsb2FkLnN1YnNjcmlwdGlvbnMsCQkJXAogCQlyd3NlbV9pc19sb2NrZWQoKHN0cnVjdCByd19zZW1hcGhvcmUgKikmKGtleXJpbmcpLT5zZW0pKSkKIAorI2RlZmluZSBLRVlfTElOS19GSVhRVU9UQSAxVUwKKwogLyoKICAqIFdoZW4gcGx1bWJpbmcgdGhlIGRlcHRocyBvZiB0aGUga2V5IHRyZWUsIHRoaXMgc2V0cyBhIGhhcmQgbGltaXQKICAqIHNldCBvbiBob3cgZGVlcCB3ZSdyZSB3aWxsaW5nIHRvIGdvLgpAQCAtNjk5LDExICs3MDEsMTEgQEAKICAqIFByZWFsbG9jYXRlIG1lbW9yeSBzbyB0aGF0IGEga2V5IGNhbiBiZSBsaW5rZWQgaW50byB0byBhIGtleXJpbmcuCiAgKi8KIGludCBfX2tleV9saW5rX2JlZ2luKHN0cnVjdCBrZXkgKmtleXJpbmcsIGNvbnN0IHN0cnVjdCBrZXlfdHlwZSAqdHlwZSwKLQkJICAgICBjb25zdCBjaGFyICpkZXNjcmlwdGlvbiwKLQkJICAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICoqX3ByZWFsbG9jKQorCQkgICAgIGNvbnN0IGNoYXIgKmRlc2NyaXB0aW9uLCB1bnNpZ25lZCBsb25nICpfcHJlYWxsb2MpCiAJX19hY3F1aXJlcygma2V5cmluZy0+c2VtKQogewogCXN0cnVjdCBrZXlyaW5nX2xpc3QgKmtsaXN0LCAqbmtsaXN0OworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJdW5zaWduZWQgbWF4OwogCXNpemVfdCBzaXplOwogCWludCBsb29wLCByZXQ7CkBAIC03NDYsNiArNzQ4LDcgQEAKIAogCQkJCS8qIG5vdGUgcmVwbGFjZW1lbnQgc2xvdCAqLwogCQkJCWtsaXN0LT5kZWxrZXkgPSBua2xpc3QtPmRlbGtleSA9IGxvb3A7CisJCQkJcHJlYWxsb2MgPSAodW5zaWduZWQgbG9uZylua2xpc3Q7CiAJCQkJZ290byBkb25lOwogCQkJfQogCQl9CkBAIC03NjAsNiArNzYzLDcgQEAKIAlpZiAoa2xpc3QgJiYga2xpc3QtPm5rZXlzIDwga2xpc3QtPm1heGtleXMpIHsKIAkJLyogdGhlcmUncyBzdWZmaWNpZW50IHNsYWNrIHNwYWNlIHRvIGFwcGVuZCBkaXJlY3RseSAqLwogCQlua2xpc3QgPSBOVUxMOworCQlwcmVhbGxvYyA9IEtFWV9MSU5LX0ZJWFFVT1RBOwogCX0gZWxzZSB7CiAJCS8qIGdyb3cgdGhlIGtleSBsaXN0ICovCiAJCW1heCA9IDQ7CkBAIC03OTQsOCArNzk4LDkgQEAKIAkJbmtsaXN0LT5rZXlzW25rbGlzdC0+ZGVsa2V5XSA9IE5VTEw7CiAJfQogCisJcHJlYWxsb2MgPSAodW5zaWduZWQgbG9uZylua2xpc3QgfCBLRVlfTElOS19GSVhRVU9UQTsKIGRvbmU6Ci0JKl9wcmVhbGxvYyA9IG5rbGlzdDsKKwkqX3ByZWFsbG9jID0gcHJlYWxsb2M7CiAJa2xlYXZlKCIgPSAwIik7CiAJcmV0dXJuIDA7CiAKQEAgLTgzNiwxMiArODQxLDEyIEBACiAgKiBjb21iaW5hdGlvbi4KICAqLwogdm9pZCBfX2tleV9saW5rKHN0cnVjdCBrZXkgKmtleXJpbmcsIHN0cnVjdCBrZXkgKmtleSwKLQkJc3RydWN0IGtleXJpbmdfbGlzdCAqKl9wcmVhbGxvYykKKwkJdW5zaWduZWQgbG9uZyAqX3ByZWFsbG9jKQogewogCXN0cnVjdCBrZXlyaW5nX2xpc3QgKmtsaXN0LCAqbmtsaXN0OwogCi0JbmtsaXN0ID0gKl9wcmVhbGxvYzsKLQkqX3ByZWFsbG9jID0gTlVMTDsKKwlua2xpc3QgPSAoc3RydWN0IGtleXJpbmdfbGlzdCAqKSgqX3ByZWFsbG9jICYgfktFWV9MSU5LX0ZJWFFVT1RBKTsKKwkqX3ByZWFsbG9jID0gMDsKIAogCWtlbnRlcigiJWQsJWQsJXAiLCBrZXlyaW5nLT5zZXJpYWwsIGtleS0+c2VyaWFsLCBua2xpc3QpOwogCkBAIC04ODEsMjAgKzg4NiwyMiBAQAogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBfX2tleV9saW5rX2JlZ2luKCkgaGF2aW5nIGJlaW5nIGNhbGxlZC4KICAqLwogdm9pZCBfX2tleV9saW5rX2VuZChzdHJ1Y3Qga2V5ICprZXlyaW5nLCBzdHJ1Y3Qga2V5X3R5cGUgKnR5cGUsCi0JCSAgICBzdHJ1Y3Qga2V5cmluZ19saXN0ICpwcmVhbGxvYykKKwkJICAgIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2MpCiAJX19yZWxlYXNlcygma2V5cmluZy0+c2VtKQogewogCUJVR19PTih0eXBlID09IE5VTEwpOwogCUJVR19PTih0eXBlLT5uYW1lID09IE5VTEwpOwotCWtlbnRlcigiJWQsJXMsJXAiLCBrZXlyaW5nLT5zZXJpYWwsIHR5cGUtPm5hbWUsIHByZWFsbG9jKTsKKwlrZW50ZXIoIiVkLCVzLCVseCIsIGtleXJpbmctPnNlcmlhbCwgdHlwZS0+bmFtZSwgcHJlYWxsb2MpOwogCiAJaWYgKHR5cGUgPT0gJmtleV90eXBlX2tleXJpbmcpCiAJCXVwX3dyaXRlKCZrZXlyaW5nX3NlcmlhbGlzZV9saW5rX3NlbSk7CiAKIAlpZiAocHJlYWxsb2MpIHsKLQkJa2ZyZWUocHJlYWxsb2MpOwotCQlrZXlfcGF5bG9hZF9yZXNlcnZlKGtleXJpbmcsCi0JCQkJICAgIGtleXJpbmctPmRhdGFsZW4gLSBLRVlRVU9UQV9MSU5LX0JZVEVTKTsKKwkJaWYgKHByZWFsbG9jICYgS0VZX0xJTktfRklYUVVPVEEpCisJCQlrZXlfcGF5bG9hZF9yZXNlcnZlKGtleXJpbmcsCisJCQkJCSAgICBrZXlyaW5nLT5kYXRhbGVuIC0KKwkJCQkJICAgIEtFWVFVT1RBX0xJTktfQllURVMpOworCQlrZnJlZSgoc3RydWN0IGtleXJpbmdfbGlzdCAqKShwcmVhbGxvYyAmIH5LRVlfTElOS19GSVhRVU9UQSkpOwogCX0KIAl1cF93cml0ZSgma2V5cmluZy0+c2VtKTsKIH0KQEAgLTkyMSw3ICs5MjgsNyBAQAogICovCiBpbnQga2V5X2xpbmsoc3RydWN0IGtleSAqa2V5cmluZywgc3RydWN0IGtleSAqa2V5KQogewotCXN0cnVjdCBrZXlyaW5nX2xpc3QgKnByZWFsbG9jOworCXVuc2lnbmVkIGxvbmcgcHJlYWxsb2M7CiAJaW50IHJldDsKIAogCWtleV9jaGVjayhrZXlyaW5nKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYyBiL3NlY3VyaXR5L2tleXMvcmVxdWVzdF9rZXkuYwppbmRleCA5YTdmYjM5Li5hM2RjMGQ0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3JlcXVlc3Rfa2V5LmMKKysrIGIvc2VjdXJpdHkva2V5cy9yZXF1ZXN0X2tleS5jCkBAIC0zNTIsOCArMzUyLDggQEAKIAkJCSAgICAgICBzdHJ1Y3Qga2V5X3VzZXIgKnVzZXIsCiAJCQkgICAgICAgc3RydWN0IGtleSAqKl9rZXkpCiB7Ci0Jc3RydWN0IGtleXJpbmdfbGlzdCAqcHJlYWxsb2M7CiAJY29uc3Qgc3RydWN0IGNyZWQgKmNyZWQgPSBjdXJyZW50X2NyZWQoKTsKKwl1bnNpZ25lZCBsb25nIHByZWFsbG9jOwogCXN0cnVjdCBrZXkgKmtleTsKIAlrZXlfcmVmX3Qga2V5X3JlZjsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIHNlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmMKcmVuYW1lIHRvIHNlY3VyaXR5L2tleXMvdHJ1c3RlZC5jCmluZGV4IDI4MzZjNmQuLjgzZmM5MmUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZF9kZWZpbmVkLmMKKysrIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC90cG0uaD4KICNpbmNsdWRlIDxsaW51eC90cG1fY29tbWFuZC5oPgogCi0jaW5jbHVkZSAidHJ1c3RlZF9kZWZpbmVkLmgiCisjaW5jbHVkZSAidHJ1c3RlZC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciBobWFjX2FsZ1tdID0gImhtYWMoc2hhMSkiOwogc3RhdGljIGNvbnN0IGNoYXIgaGFzaF9hbGdbXSA9ICJzaGExIjsKQEAgLTEwMzIsNiArMTAzMiw3IEBACiAJcmV0ID0gZGF0YWJsb2JfcGFyc2UoZGF0YWJsb2IsIG5ld19wLCBuZXdfbyk7CiAJaWYgKHJldCAhPSBPcHRfdXBkYXRlKSB7CiAJCXJldCA9IC1FSU5WQUw7CisJCWtmcmVlKG5ld19wKTsKIAkJZ290byBvdXQ7CiAJfQogCS8qIGNvcHkgb2xkIGtleSB2YWx1ZXMsIGFuZCByZXNlYWwgd2l0aCBuZXcgcGNycyAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy90cnVzdGVkX2RlZmluZWQuaCBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzZWN1cml0eS9rZXlzL3RydXN0ZWRfZGVmaW5lZC5oCnJlbmFtZSB0byBzZWN1cml0eS9rZXlzL3RydXN0ZWQuaApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VjdXJpdHkuYyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKaW5kZXggNzM5ZTQwMy4uN2I3MzA4YSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjdXJpdHkuYworKysgYi9zZWN1cml0eS9zZWN1cml0eS5jCkBAIC0xNTQsMTAgKzE1NCw5IEBACiAJCQkJICAgIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsIHBlcm1pdHRlZCk7CiB9CiAKLWludCBzZWN1cml0eV9jYXBhYmxlKGludCBjYXApCitpbnQgc2VjdXJpdHlfY2FwYWJsZShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwgaW50IGNhcCkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5jYXBhYmxlKGN1cnJlbnQsIGN1cnJlbnRfY3JlZCgpLCBjYXAsCi0JCQkJICAgICBTRUNVUklUWV9DQVBfQVVESVQpOworCXJldHVybiBzZWN1cml0eV9vcHMtPmNhcGFibGUoY3VycmVudCwgY3JlZCwgY2FwLCBTRUNVUklUWV9DQVBfQVVESVQpOwogfQogCiBpbnQgc2VjdXJpdHlfcmVhbF9jYXBhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgY2FwKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGUyNzZlYjQuLmM4ZDY5OTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTMxOTgsNyArMzE5OCwxMSBAQAogewogCXN0cnVjdCB0YXNrX3NlY3VyaXR5X3N0cnVjdCAqdHNlYyA9IGNyZWQtPnNlY3VyaXR5OwogCi0JQlVHX09OKCh1bnNpZ25lZCBsb25nKSBjcmVkLT5zZWN1cml0eSA8IFBBR0VfU0laRSk7CisJLyoKKwkgKiBjcmVkLT5zZWN1cml0eSA9PSBOVUxMIGlmIHNlY3VyaXR5X2NyZWRfYWxsb2NfYmxhbmsoKSBvcgorCSAqIHNlY3VyaXR5X3ByZXBhcmVfY3JlZHMoKSByZXR1cm5lZCBhbiBlcnJvci4KKwkgKi8KKwlCVUdfT04oY3JlZC0+c2VjdXJpdHkgJiYgKHVuc2lnbmVkIGxvbmcpIGNyZWQtPnNlY3VyaXR5IDwgUEFHRV9TSVpFKTsKIAljcmVkLT5zZWN1cml0eSA9ICh2b2lkICopIDB4N1VMOwogCWtmcmVlKHRzZWMpOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9jb25kaXRpb25hbC5jCmluZGV4IGMzZjg0NWMuLmE1MzM3MzIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvY29uZGl0aW9uYWwuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbmRpdGlvbmFsLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCXAtPmJvb2xfdmFsX3RvX3N0cnVjdCA9IChzdHJ1Y3QgY29uZF9ib29sX2RhdHVtICoqKQogCQlrbWFsbG9jKHAtPnBfYm9vbHMubnByaW0gKiBzaXplb2Yoc3RydWN0IGNvbmRfYm9vbF9kYXR1bSAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwLT5ib29sX3ZhbF90b19zdHJ1Y3QpCi0JCXJldHVybiAtMTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCBiZTlkZTM4Li41NzM2MzU2IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC01MDEsOCArNTAxLDggQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCi0JcmMgPSAtRU5PTUVNOwotCWlmIChjb25kX2luaXRfYm9vbF9pbmRleGVzKHApKQorCXJjID0gY29uZF9pbml0X2Jvb2xfaW5kZXhlcyhwKTsKKwlpZiAocmMpCiAJCWdvdG8gb3V0OwogCiAJZm9yIChpID0gMDsgaSA8IFNZTV9OVU07IGkrKykgewpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggOTFhY2M5YS4uN2MxZmM2NCAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC0zMCw2ICszMCw4IEBACiAKICNkZWZpbmUgRFJJVkVSX05BTUUJImFhY2ktcGwwNDEiCiAKKyNkZWZpbmUgRlJBTUVfUEVSSU9EX1VTCTIxCisKIC8qCiAgKiBQTSBzdXBwb3J0IGlzIG5vdCBjb21wbGV0ZS4gIFR1cm4gaXQgb2ZmLgogICovCkBAIC00OCw3ICs1MCwxMSBAQAogCWlmICh2ICYgU0xGUl8xUlhWKQogCQlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9TTDFSWCk7CiAKLQl3cml0ZWwobWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCWlmIChtYWluY3IgIT0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKSkgeworCQl3cml0ZWwobWFpbmNyLCBhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCQlyZWFkbChhYWNpLT5iYXNlICsgQUFDSV9NQUlOQ1IpOworCQl1ZGVsYXkoMSk7CisJfQogfQogCiAvKgpAQCAtNjQsOCArNzAsOCBAQAogCQkJICAgIHVuc2lnbmVkIHNob3J0IHZhbCkKIHsKIAlzdHJ1Y3QgYWFjaSAqYWFjaSA9IGFjOTctPnByaXZhdGVfZGF0YTsKKwlpbnQgdGltZW91dDsKIAl1MzIgdjsKLQlpbnQgdGltZW91dCA9IDUwMDA7CiAKIAlpZiAoYWM5Ny0+bnVtID49IDQpCiAJCXJldHVybjsKQEAgLTgxLDE0ICs4NywxNyBAQAogCXdyaXRlbCh2YWwgPDwgNCwgYWFjaS0+YmFzZSArIEFBQ0lfU0wyVFgpOwogCXdyaXRlbChyZWcgPDwgMTIsIGFhY2ktPmJhc2UgKyBBQUNJX1NMMVRYKTsKIAotCS8qCi0JICogV2FpdCBmb3IgdGhlIHRyYW5zbWlzc2lvbiBvZiBib3RoIHNsb3RzIHRvIGNvbXBsZXRlLgotCSAqLworCS8qIEluaXRpYWxseSwgd2FpdCBvbmUgZnJhbWUgcGVyaW9kICovCisJdWRlbGF5KEZSQU1FX1BFUklPRF9VUyk7CisKKwkvKiBBbmQgdGhlbiB3YWl0IGFuIGFkZGl0aW9uYWwgZWlnaHQgZnJhbWUgcGVyaW9kcyBmb3IgaXQgdG8gYmUgc2VudCAqLworCXRpbWVvdXQgPSBGUkFNRV9QRVJJT0RfVVMgKiA4OwogCWRvIHsKKwkJdWRlbGF5KDEpOwogCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0xGUik7CiAJfSB3aGlsZSAoKHYgJiAoU0xGUl8xVFhCfFNMRlJfMlRYQikpICYmIC0tdGltZW91dCk7CiAKLQlpZiAoIXRpbWVvdXQpCisJaWYgKHYgJiAoU0xGUl8xVFhCfFNMRlJfMlRYQikpCiAJCWRldl9lcnIoJmFhY2ktPmRldi0+ZGV2LAogCQkJInRpbWVvdXQgd2FpdGluZyBmb3Igd3JpdGUgdG8gY29tcGxldGVcbiIpOwogCkBAIC0xMDEsOSArMTEwLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhYWNpX2FjOTdfcmVhZChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcsIHVuc2lnbmVkIHNob3J0IHJlZykKIHsKIAlzdHJ1Y3QgYWFjaSAqYWFjaSA9IGFjOTctPnByaXZhdGVfZGF0YTsKKwlpbnQgdGltZW91dCwgcmV0cmllcyA9IDEwOwogCXUzMiB2OwotCWludCB0aW1lb3V0ID0gNTAwMDsKLQlpbnQgcmV0cmllcyA9IDEwOwogCiAJaWYgKGFjOTctPm51bSA+PSA0KQogCQlyZXR1cm4gfjA7CkBAIC0xMTcsMzUgKzEyNSwzNCBAQAogCSAqLwogCXdyaXRlbCgocmVnIDw8IDEyKSB8ICgxIDw8IDE5KSwgYWFjaS0+YmFzZSArIEFBQ0lfU0wxVFgpOwogCi0JLyoKLQkgKiBXYWl0IGZvciB0aGUgdHJhbnNtaXNzaW9uIHRvIGNvbXBsZXRlLgotCSAqLworCS8qIEluaXRpYWxseSwgd2FpdCBvbmUgZnJhbWUgcGVyaW9kICovCisJdWRlbGF5KEZSQU1FX1BFUklPRF9VUyk7CisKKwkvKiBBbmQgdGhlbiB3YWl0IGFuIGFkZGl0aW9uYWwgZWlnaHQgZnJhbWUgcGVyaW9kcyBmb3IgaXQgdG8gYmUgc2VudCAqLworCXRpbWVvdXQgPSBGUkFNRV9QRVJJT0RfVVMgKiA4OwogCWRvIHsKKwkJdWRlbGF5KDEpOwogCQl2ID0gcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfU0xGUik7CiAJfSB3aGlsZSAoKHYgJiBTTEZSXzFUWEIpICYmIC0tdGltZW91dCk7CiAKLQlpZiAoIXRpbWVvdXQpIHsKKwlpZiAodiAmIFNMRlJfMVRYQikgewogCQlkZXZfZXJyKCZhYWNpLT5kZXYtPmRldiwgInRpbWVvdXQgb24gc2xvdCAxIFRYIGJ1c3lcbiIpOwogCQl2ID0gfjA7CiAJCWdvdG8gb3V0OwogCX0KIAotCS8qCi0JICogR2l2ZSB0aGUgQUMnOTcgY29kZWMgbW9yZSB0aGFuIGVub3VnaCB0aW1lCi0JICogdG8gcmVzcG9uZC4gKDQydXMgPSB+MiBmcmFtZXMgYXQgNDhrSHouKQotCSAqLwotCXVkZWxheSg0Mik7CisJLyogTm93IHdhaXQgZm9yIHRoZSByZXNwb25zZSBmcmFtZSAqLworCXVkZWxheShGUkFNRV9QRVJJT0RfVVMpOwogCi0JLyoKLQkgKiBXYWl0IGZvciBzbG90IDIgdG8gaW5kaWNhdGUgZGF0YS4KLQkgKi8KLQl0aW1lb3V0ID0gNTAwMDsKKwkvKiBBbmQgdGhlbiB3YWl0IGFuIGFkZGl0aW9uYWwgZWlnaHQgZnJhbWUgcGVyaW9kcyBmb3IgZGF0YSAqLworCXRpbWVvdXQgPSBGUkFNRV9QRVJJT0RfVVMgKiA4OwogCWRvIHsKKwkJdWRlbGF5KDEpOwogCQljb25kX3Jlc2NoZWQoKTsKIAkJdiA9IHJlYWRsKGFhY2ktPmJhc2UgKyBBQUNJX1NMRlIpICYgKFNMRlJfMVJYVnxTTEZSXzJSWFYpOwogCX0gd2hpbGUgKCh2ICE9IChTTEZSXzFSWFZ8U0xGUl8yUlhWKSkgJiYgLS10aW1lb3V0KTsKIAotCWlmICghdGltZW91dCkgeworCWlmICh2ICE9IChTTEZSXzFSWFZ8U0xGUl8yUlhWKSkgewogCQlkZXZfZXJyKCZhYWNpLT5kZXYtPmRldiwgInRpbWVvdXQgb24gUlggdmFsaWRcbiIpOwogCQl2ID0gfjA7CiAJCWdvdG8gb3V0OwpAQCAtMTc5LDYgKzE4Niw3IEBACiAJaW50IHRpbWVvdXQgPSA1MDAwOwogCiAJZG8geworCQl1ZGVsYXkoMSk7CiAJCXZhbCA9IHJlYWRsKGFhY2lydW4tPmJhc2UgKyBBQUNJX1NSKTsKIAl9IHdoaWxlICh2YWwgJiBtYXNrICYmIHRpbWVvdXQtLSk7CiB9CkBAIC04NzQsNyArODgyLDcgQEAKIAkgKiBHaXZlIHRoZSBBQyc5NyBjb2RlYyBtb3JlIHRoYW4gZW5vdWdoIHRpbWUKIAkgKiB0byB3YWtlIHVwLiAoNDJ1cyA9IH4yIGZyYW1lcyBhdCA0OGtIei4pCiAJICovCi0JdWRlbGF5KDQyKTsKKwl1ZGVsYXkoRlJBTUVfUEVSSU9EX1VTICogMik7CiAKIAlyZXQgPSBzbmRfYWM5N19idXMoYWFjaS0+Y2FyZCwgMCwgJmFhY2lfYnVzX29wcywgYWFjaSwgJmFjOTdfYnVzKTsKIAlpZiAocmV0KQpAQCAtOTg5LDYgKzk5Nyw4IEBACiAJICogZGlzYWJsaW5nIHRoZSBjaGFubmVsIGRvZXNuJ3QgY2xlYXIgdGhlIEZJRk8uCiAJICovCiAJd3JpdGVsKGFhY2ktPm1haW5jciAmIH5NQUlOQ1JfSUUsIGFhY2ktPmJhc2UgKyBBQUNJX01BSU5DUik7CisJcmVhZGwoYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKKwl1ZGVsYXkoMSk7CiAJd3JpdGVsKGFhY2ktPm1haW5jciwgYWFjaS0+YmFzZSArIEFBQ0lfTUFJTkNSKTsKIAogCS8qCmRpZmYgLS1naXQgYS9zb3VuZC9hdG1lbC9hYzk3Yy5jIGIvc291bmQvYXRtZWwvYWM5N2MuYwppbmRleCAxMGMzYTg3Li5iMzEwNzAyIDEwMDY0NAotLS0gYS9zb3VuZC9hdG1lbC9hYzk3Yy5jCisrKyBiL3NvdW5kL2F0bWVsL2FjOTdjLmMKQEAgLTMzLDkgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZHdfZG1hYy5oPgogCiAjaW5jbHVkZSA8bWFjaC9jcHUuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9BVDkxCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhYzk3Yy5oIgogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvaHJ0aW1lci5jIGIvc291bmQvY29yZS9ocnRpbWVyLmMKaW5kZXggNzczMDU3NS4uYjhiMzFjNCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9ocnRpbWVyLmMKKysrIGIvc291bmQvY29yZS9ocnRpbWVyLmMKQEAgLTQ1LDEyICs0NSwxMyBAQAogewogCXN0cnVjdCBzbmRfaHJ0aW1lciAqc3RpbWUgPSBjb250YWluZXJfb2YoaHJ0LCBzdHJ1Y3Qgc25kX2hydGltZXIsIGhydCk7CiAJc3RydWN0IHNuZF90aW1lciAqdCA9IHN0aW1lLT50aW1lcjsKKwl1bnNpZ25lZCBsb25nIG9ydW5zOwogCiAJaWYgKCFhdG9taWNfcmVhZCgmc3RpbWUtPnJ1bm5pbmcpKQogCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CiAKLQlocnRpbWVyX2ZvcndhcmRfbm93KGhydCwgbnNfdG9fa3RpbWUodC0+c3RpY2tzICogcmVzb2x1dGlvbikpOwotCXNuZF90aW1lcl9pbnRlcnJ1cHQoc3RpbWUtPnRpbWVyLCB0LT5zdGlja3MpOworCW9ydW5zID0gaHJ0aW1lcl9mb3J3YXJkX25vdyhocnQsIG5zX3RvX2t0aW1lKHQtPnN0aWNrcyAqIHJlc29sdXRpb24pKTsKKwlzbmRfdGltZXJfaW50ZXJydXB0KHN0aW1lLT50aW1lciwgdC0+c3RpY2tzICogb3J1bnMpOwogCiAJaWYgKCFhdG9taWNfcmVhZCgmc3RpbWUtPnJ1bm5pbmcpKQogCQlyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7CkBAIC0xMDQsNyArMTA1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzbmRfdGltZXJfaGFyZHdhcmUgaHJ0aW1lcl9odyA9IHsKLQkuZmxhZ3MgPQlTTkRSVl9USU1FUl9IV19BVVRPLAorCS5mbGFncyA9CVNORFJWX1RJTUVSX0hXX0FVVE8gfCBTTkRSVl9USU1FUl9IV19UQVNLTEVULAogCS5vcGVuID0JCXNuZF9ocnRpbWVyX29wZW4sCiAJLmNsb3NlID0Jc25kX2hydGltZXJfY2xvc2UsCiAJLnN0YXJ0ID0Jc25kX2hydGltZXJfc3RhcnQsCmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL2phY2suYyBiL3NvdW5kL2NvcmUvamFjay5jCmluZGV4IDQ5MDJhZTUuLjUzYjUzZTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvamFjay5jCisrKyBiL3NvdW5kL2NvcmUvamFjay5jCkBAIC0xNDEsNiArMTQxLDcgQEAKIAogZmFpbF9pbnB1dDoKIAlpbnB1dF9mcmVlX2RldmljZShqYWNrLT5pbnB1dF9kZXYpOworCWtmcmVlKGphY2stPmlkKTsKIAlrZnJlZShqYWNrKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvc291bmQvZHJpdmVycy9tdHBhdi5jIGIvc291bmQvZHJpdmVycy9tdHBhdi5jCmluZGV4IGRhMDM1OTcuLjVjNDI2ZGYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2RyaXZlcnMvbXRwYXYuYworKysgYi9zb3VuZC9kcml2ZXJzL210cGF2LmMKQEAgLTU1LDE0ICs1NSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvaW5pdHZhbC5oPgogI2luY2x1ZGUgPHNvdW5kL3Jhd21pZGkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KIC8qCiAgKiAgICAgIGdsb2JhbHMKICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL01ha2VmaWxlIGIvc291bmQvb3NzL01ha2VmaWxlCmluZGV4IDk2ZjE0ZGMuLjkwZmZiOTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9NYWtlZmlsZQorKysgYi9zb3VuZC9vc3MvTWFrZWZpbGUKQEAgLTg3LDcgKzg3LDcgQEAKIAkkKG9iaikvYmluMmhleCBwc3Nfc3ludGggPCAkPCA+ICRACiBlbHNlCiAgICAgJChvYmopL3Bzc19ib290Lmg6Ci0JKAkJCQkJCQlcCisJJChRKSgJCQkJCQkJXAogCSAgICBlY2hvICdzdGF0aWMgdW5zaWduZWQgY2hhciAqIHBzc19zeW50aCA9IE5VTEw7JzsJXAogCSAgICBlY2hvICdzdGF0aWMgaW50IHBzc19zeW50aExlbiA9IDA7JzsJCVwKIAkpID4gJEAKQEAgLTEwMiw3ICsxMDIsNyBAQAogCSQob2JqKS9oZXgyaGV4IC1pIHRyaXhfYm9vdCA8ICQ8ID4gJEAKIGVsc2UKICAgICAkKG9iaikvdHJpeF9ib290Lmg6Ci0JKAkJCQkJCQlcCisJJChRKSgJCQkJCQkJXAogCSAgICBlY2hvICdzdGF0aWMgdW5zaWduZWQgY2hhciAqIHRyaXhfYm9vdCA9IE5VTEw7JzsJXAogCSAgICBlY2hvICdzdGF0aWMgaW50IHRyaXhfYm9vdF9sZW4gPSAwOyc7CQlcCiAJKSA+ICRACmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9jb3JlLmMKaW5kZXggMjNmNDlmMy4uMTZjMGJkZiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2F1ODh4MC9hdTg4eDBfY29yZS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX2NvcmUuYwpAQCAtMTI1MiwxMSArMTI1MiwxOSBAQAogc3RhdGljIGludCBpbmxpbmUgdm9ydGV4X2FkYmRtYV9nZXRsaW5lYXJwb3Modm9ydGV4X3QgKiB2b3J0ZXgsIGludCBhZGJkbWEpCiB7CiAJc3RyZWFtX3QgKmRtYSA9ICZ2b3J0ZXgtPmRtYV9hZGJbYWRiZG1hXTsKLQlpbnQgdGVtcDsKKwlpbnQgdGVtcCwgcGFnZSwgZGVsdGE7CiAKIAl0ZW1wID0gaHdyZWFkKHZvcnRleC0+bW1pbywgVk9SVEVYX0FEQkRNQV9TVEFUICsgKGFkYmRtYSA8PCAyKSk7Ci0JdGVtcCA9IChkbWEtPnBlcmlvZF92aXJ0ICogZG1hLT5wZXJpb2RfYnl0ZXMpICsgKHRlbXAgJiAoZG1hLT5wZXJpb2RfYnl0ZXMgLSAxKSk7Ci0JcmV0dXJuIHRlbXA7CisJcGFnZSA9ICh0ZW1wICYgQURCX1NVQkJVRl9NQVNLKSA+PiBBREJfU1VCQlVGX1NISUZUOworCWlmIChkbWEtPm5yX3BlcmlvZHMgPj0gNCkKKwkJZGVsdGEgPSAocGFnZSAtIGRtYS0+cGVyaW9kX3JlYWwpICYgMzsKKwllbHNlIHsKKwkJZGVsdGEgPSAocGFnZSAtIGRtYS0+cGVyaW9kX3JlYWwpOworCQlpZiAoZGVsdGEgPCAwKQorCQkJZGVsdGEgKz0gZG1hLT5ucl9wZXJpb2RzOworCX0KKwlyZXR1cm4gKGRtYS0+cGVyaW9kX3ZpcnQgKyBkZWx0YSkgKiBkbWEtPnBlcmlvZF9ieXRlcworCQkrICh0ZW1wICYgKGRtYS0+cGVyaW9kX2J5dGVzIC0gMSkpOwogfQogCiBzdGF0aWMgdm9pZCB2b3J0ZXhfYWRiZG1hX3N0YXJ0Zmlmbyh2b3J0ZXhfdCAqIHZvcnRleCwgaW50IGFkYmRtYSkKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9henQzMzI4LmMgYi9zb3VuZC9wY2kvYXp0MzMyOC5jCmluZGV4IDYxMTc1OTUuLjU3MzU5NGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9henQzMzI4LmMKKysrIGIvc291bmQvcGNpL2F6dDMzMjguYwpAQCAtOTc5LDMxICs5NzksMjUgQEAKIAogCXNuZF9hemYzMzI4X2RiZ2NhbGxlbnRlcigpOwogCXN3aXRjaCAoYml0cmF0ZSkgewotI2RlZmluZSBBWkZfRk1UX1hMQVRFKGluX2ZyZXEsIG91dF9iaXRzKSBcCi0JZG8geyBcCi0JCWNhc2UgQVpGX0ZSRVFfICMjIGluX2ZyZXE6IFwKLQkJCWZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXyAjIyBvdXRfYml0czsgXAotCQkJYnJlYWs7IFwKLQl9IHdoaWxlICgwKTsKLQlBWkZfRk1UX1hMQVRFKDQwMDAsIFNVU1BFQ1RFRF80MDAwKQotCUFaRl9GTVRfWExBVEUoNDgwMCwgU1VTUEVDVEVEXzQ4MDApCi0JLyogdGhlIEFaRjMzMjggbmFtZXMgaXQgIjU1MTAiIGZvciBzb21lIHN0cmFuZ2UgcmVhc29uOiAqLwotCUFaRl9GTVRfWExBVEUoNTUxMiwgNTUxMCkKLQlBWkZfRk1UX1hMQVRFKDY2MjAsIDY2MjApCi0JQVpGX0ZNVF9YTEFURSg4MDAwLCA4MDAwKQotCUFaRl9GTVRfWExBVEUoOTYwMCwgOTYwMCkKLQlBWkZfRk1UX1hMQVRFKDExMDI1LCAxMTAyNSkKLQlBWkZfRk1UX1hMQVRFKDEzMjQwLCBTVVNQRUNURURfMTMyNDApCi0JQVpGX0ZNVF9YTEFURSgxNjAwMCwgMTYwMDApCi0JQVpGX0ZNVF9YTEFURSgyMjA1MCwgMjIwNTApCi0JQVpGX0ZNVF9YTEFURSgzMjAwMCwgMzIwMDApCisJY2FzZSBBWkZfRlJFUV80MDAwOiAgZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzQwMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNDgwMDogIGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRX1NVU1BFQ1RFRF80ODAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzU1MTI6CisJCS8qIHRoZSBBWkYzMzI4IG5hbWVzIGl0ICI1NTEwIiBmb3Igc29tZSBzdHJhbmdlIHJlYXNvbiAqLworCQkJICAgICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV81NTEwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzY2MjA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV82NjIwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzgwMDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV84MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzk2MDA6ICBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV85NjAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzExMDI1OiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8xMTAyNTsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8xMzI0MDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfU1VTUEVDVEVEXzEzMjQwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzE2MDAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV8xNjAwMDsgYnJlYWs7CisJY2FzZSBBWkZfRlJFUV8yMjA1MDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfMjIwNTA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfMzIwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzMyMDAwOyBicmVhazsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAidW5rbm93biBiaXRyYXRlICVkLCBhc3N1bWluZyA0NC4xa0h6IVxuIiwgYml0cmF0ZSk7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwotCUFaRl9GTVRfWExBVEUoNDQxMDAsIDQ0MTAwKQotCUFaRl9GTVRfWExBVEUoNDgwMDAsIDQ4MDAwKQotCUFaRl9GTVRfWExBVEUoNjYyMDAsIFNVU1BFQ1RFRF82NjIwMCkKLSN1bmRlZiBBWkZfRk1UX1hMQVRFCisJY2FzZSBBWkZfRlJFUV80NDEwMDogZnJlcSA9IFNPVU5ERk9STUFUX0ZSRVFfNDQxMDA7IGJyZWFrOworCWNhc2UgQVpGX0ZSRVFfNDgwMDA6IGZyZXEgPSBTT1VOREZPUk1BVF9GUkVRXzQ4MDAwOyBicmVhazsKKwljYXNlIEFaRl9GUkVRXzY2MjAwOiBmcmVxID0gU09VTkRGT1JNQVRfRlJFUV9TVVNQRUNURURfNjYyMDA7IGJyZWFrOwogCX0KIAkvKiB2YWwgPSAweGZmMDc7IDNtMjcuOTkzcyAoNjUzMDFIejsgLT4gNjQwMDBIej8/PykgaG1tLCA2NjEyMCwgNjU5NjcsIDY2MTIzICovCiAJLyogdmFsID0gMHhmZjA5OyAxN20xNS4wOThzICgxMzEyMyw0NzhIejsgLT4gMTIwMDBIej8/PykgaG1tLCAxMzIzNy4ySHo/ICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9lbGQuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCmluZGV4IDRhNjYzNDcuLjc0YjA1NjAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAlzbmRfcHJpbnRfcGNtX3JhdGVzKGEtPnJhdGVzLCBidWYsIHNpemVvZihidWYpKTsKIAogCWlmIChhLT5mb3JtYXQgPT0gQVVESU9fQ09ESU5HX1RZUEVfTFBDTSkKLQkJc25kX3ByaW50X3BjbV9iaXRzKGEtPnNhbXBsZV9iaXRzLCBidWYyICsgOCwgc2l6ZW9mKGJ1ZjIgLSA4KSk7CisJCXNuZF9wcmludF9wY21fYml0cyhhLT5zYW1wbGVfYml0cywgYnVmMiArIDgsIHNpemVvZihidWYyKSAtIDgpOwogCWVsc2UgaWYgKGEtPm1heF9iaXRyYXRlKQogCQlzbnByaW50ZihidWYyLCBzaXplb2YoYnVmMiksCiAJCQkJIiwgbWF4IGJpdHJhdGUgPSAlZCIsIGEtPm1heF9iaXRyYXRlKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCmluZGV4IDJlOTFhOTkuLmZjZWRhZDkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwpAQCAtMjMwOCw2ICsyMzA4LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTNkLCAiQVNVUyBQNUFEMiIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFiMywgIkFTVVMiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZTcsICJBU1VTIE0yViIsIFBPU19GSVhfTFBJQiksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODQxMCwgIkFTVVMiLCBQT1NfRklYX0xQSUIpLAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwNjksICJTb255IFZQQ1MxMVY5RSIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDExMDYsIDB4MzI4OCwgIkFTVVMgTTJWLU1YIFNFIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTE3OSwgMHhmZjEwLCAiVG9zaGliYSBBMTAwLTI1OSIsIFBPU19GSVhfTFBJQiksCkBAIC0yNzAzLDcgKzI3MDQsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIG91dF9mcmVlOwogI2lmZGVmIENPTkZJR19TTkRfSERBX1BBVENIX0xPQURFUgotCWlmIChwYXRjaFtkZXZdKSB7CisJaWYgKHBhdGNoW2Rldl0gJiYgKnBhdGNoW2Rldl0pIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiBTRlggIkFwcGx5aW5nIHBhdGNoIGZpcm13YXJlICclcydcbiIsCiAJCQkgICBwYXRjaFtkZXZdKTsKIAkJZXJyID0gc25kX2hkYV9sb2FkX3BhdGNoKGNoaXAtPmJ1cywgcGF0Y2hbZGV2XSk7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYwppbmRleCBhMDdiMDMxLi4wNjc5ODJmNCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9jaXJydXMuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2NpcnJ1cy5jCkBAIC0xMDM5LDkgKzEwMzksMTEgQEAKIAl7MHgxMSwgQUNfVkVSQl9TRVRfUFJPQ19DT0VGLCAweDAwMDh9LAogCXsweDExLCBBQ19WRVJCX1NFVF9QUk9DX1NUQVRFLCAweDAwfSwKIAorI2lmIDAgLyogRG9uJ3QgdG8gc2V0IHRvIEQzIGFzIHdlIGFyZSBpbiBwb3dlci11cCBzZXF1ZW5jZSAqLwogCXsweDA3LCBBQ19WRVJCX1NFVF9QT1dFUl9TVEFURSwgMHgwM30sIC8qIFMvUERJRiBSeDogRDMgKi8KIAl7MHgwOCwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIDB4MDN9LCAvKiBTL1BESUYgVHg6IEQzICovCiAJLyp7MHgwMSwgQUNfVkVSQl9TRVRfUE9XRVJfU1RBVEUsIDB4MDN9LCovIC8qIEFGRzogRDMgVGhpcyBpcyBhbHJlYWR5IGhhbmRsZWQgKi8KKyNlbmRpZgogCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfY29uZXhhbnQuYwppbmRleCA5YmIwMzBhLi40ZDUwMDRlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2NvbmV4YW50LmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9jb25leGFudC5jCkBAIC04NSw2ICs4NSw3IEBACiAJdW5zaWduZWQgaW50IGF1dG9fbWljOwogCWludCBhdXRvX21pY19leHQ7CQkvKiBhdXRvY2ZnLmlucHV0c1tdIGluZGV4IGZvciBleHQgbWljICovCiAJdW5zaWduZWQgaW50IG5lZWRfZGFjX2ZpeDsKKwloZGFfbmlkX3Qgc2xhdmVfZGlnX291dHNbMl07CiAKIAkvKiBjYXB0dXJlICovCiAJdW5zaWduZWQgaW50IG51bV9hZGNfbmlkczsKQEAgLTEyNyw2ICsxMjgsNyBAQAogCXVuc2lnbmVkIGludCBpZGVhcGFkOjE7CiAJdW5zaWduZWQgaW50IHRoaW5rcGFkOjE7CiAJdW5zaWduZWQgaW50IGhwX2xhcHRvcDoxOworCXVuc2lnbmVkIGludCBhc3VzOjE7CiAKIAl1bnNpZ25lZCBpbnQgZXh0X21pY19wcmVzZW50OwogCXVuc2lnbmVkIGludCByZWNvcmRpbmc7CkBAIC0zNTIsNiArMzU0LDggQEAKIAkJCWluZm8tPnN0cmVhbVtTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkVdLm5pZCA9CiAJCQkJc3BlYy0+ZGlnX2luX25pZDsKIAkJfQorCQlpZiAoc3BlYy0+c2xhdmVfZGlnX291dHNbMF0pCisJCQljb2RlYy0+c2xhdmVfZGlnX291dHMgPSBzcGVjLT5zbGF2ZV9kaWdfb3V0czsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTQwMywxMCArNDA3LDE2IEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWM7CiAJc3RydWN0IGNvbmV4YW50X2phY2sgKmphY2s7CiAJY29uc3QgY2hhciAqbmFtZTsKLQlpbnQgZXJyOworCWludCBpLCBlcnI7CiAKIAlzcGVjID0gY29kZWMtPnNwZWM7CiAJc25kX2FycmF5X2luaXQoJnNwZWMtPmphY2tzLCBzaXplb2YoKmphY2spLCAzMik7CisKKwlqYWNrID0gc3BlYy0+amFja3MubGlzdDsKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+amFja3MudXNlZDsgaSsrLCBqYWNrKyspCisJCWlmIChqYWNrLT5uaWQgPT0gbmlkKQorCQkJcmV0dXJuIDAgOyAvKiBhbHJlYWR5IHByZXNlbnQgKi8KKwogCWphY2sgPSBzbmRfYXJyYXlfbmV3KCZzcGVjLT5qYWNrcyk7CiAJbmFtZSA9ICh0eXBlID09IFNORF9KQUNLX0hFQURQSE9ORSkgPyAiSGVhZHBob25lIiA6ICJNaWMiIDsKIApAQCAtMjEwMCw3ICsyMTEwLDcgQEAKIHN0YXRpYyBoZGFfbmlkX3QgY3h0NTA2Nl9kYWNfbmlkc1sxXSA9IHsgMHgxMCB9Owogc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2FkY19uaWRzWzNdID0geyAweDE0LCAweDE1LCAweDE2IH07CiBzdGF0aWMgaGRhX25pZF90IGN4dDUwNjZfY2Fwc3JjX25pZHNbMV0gPSB7IDB4MTcgfTsKLSNkZWZpbmUgQ1hUNTA2Nl9TUERJRl9PVVQJMHgyMQorc3RhdGljIGhkYV9uaWRfdCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkc1syXSA9IHsgMHgyMCwgMHgyMiB9OwogCiAvKiBPTFBDJ3MgbWljcm9waG9uZSBwb3J0IGlzIERDIGNvdXBsZWQgZm9yIHVzZSB3aXRoIGV4dGVybmFsIHNlbnNvcnMsCiAgKiB0aGVyZWZvcmUgd2UgdXNlIGEgNTAlIG1pYyBiaWFzIGluIG9yZGVyIHRvIGNlbnRlciB0aGUgaW5wdXQgc2lnbmFsIHdpdGgKQEAgLTIzMTIsNiArMjMyMiwxOSBAQAogCX0KIH0KIAorCisvKiB0b2dnbGUgaW5wdXQgb2YgYnVpbHQtaW4gZGlnaXRhbCBtaWMgYW5kIG1pYyBqYWNrIGFwcHJvcHJpYXRlbHkgKi8KK3N0YXRpYyB2b2lkIGN4dDUwNjZfYXN1c19hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXVuc2lnbmVkIGludCBwcmVzZW50OworCisJcHJlc2VudCA9IHNuZF9oZGFfamFja19kZXRlY3QoY29kZWMsIDB4MWIpOworCXNuZF9wcmludGRkKCJDWFQ1MDY2OiBleHRlcm5hbCBtaWNyb3Bob25lIHByZXNlbnQ9JWRcbiIsIHByZXNlbnQpOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIDB4MTcsIDAsIEFDX1ZFUkJfU0VUX0NPTk5FQ1RfU0VMLAorCQkJICAgIHByZXNlbnQgPyAxIDogMCk7Cit9CisKKwogLyogdG9nZ2xlIGlucHV0IG9mIGJ1aWx0LWluIGRpZ2l0YWwgbWljIGFuZCBtaWMgamFjayBhcHByb3ByaWF0ZWx5ICovCiBzdGF0aWMgdm9pZCBjeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewpAQCAtMjM4Nyw2ICsyNDEwLDIzIEBACiAJY3h0NTA2Nl91cGRhdGVfc3BlYWtlcihjb2RlYyk7CiB9CiAKKy8qIERpc3BhdGNoIHRoZSByaWdodCBtaWMgYXV0b3N3aXRjaCBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgY3h0NTA2Nl9hdXRvbWljKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBjb25leGFudF9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisKKwlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCisJCWN4dDUwNjZfdm9zdHJvX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmlkZWFwYWQpCisJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT50aGlua3BhZCkKKwkJY3h0NTA2Nl90aGlua3BhZF9hdXRvbWljKGNvZGVjKTsKKwllbHNlIGlmIChzcGVjLT5ocF9sYXB0b3ApCisJCWN4dDUwNjZfaHBfbGFwdG9wX2F1dG9taWMoY29kZWMpOworCWVsc2UgaWYgKHNwZWMtPmFzdXMpCisJCWN4dDUwNjZfYXN1c19hdXRvbWljKGNvZGVjKTsKK30KKwogLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwogc3RhdGljIHZvaWQgY3h0NTA2Nl9vbHBjX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQogewpAQCAtMjQwNSw2MCArMjQ0NSwxOSBAQAogfQogCiAvKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X3Zvc3Ryb19ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKK3N0YXRpYyB2b2lkIGN4dDUwNjZfdW5zb2xfZXZlbnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCByZXMpCiB7Ci0Jc25kX3ByaW50ZGQoIkNYVDUwNjZfdm9zdHJvOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7CisJc25kX3ByaW50ZGQoIkNYVDUwNjY6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKIAlzd2l0Y2ggKHJlcyA+PiAyNikgewogCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwogCQlicmVhazsKIAljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl92b3N0cm9fYXV0b21pYyhjb2RlYyk7CisJCWN4dDUwNjZfYXV0b21pYyhjb2RlYyk7CiAJCWJyZWFrOwogCX0KIH0KIAotLyogdW5zb2xpY2l0ZWQgZXZlbnQgZm9yIGphY2sgc2Vuc2luZyAqLwotc3RhdGljIHZvaWQgY3h0NTA2Nl9pZGVhcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X2lkZWFwYWQ6IHVuc29sIGV2ZW50ICV4ICgleClcbiIsIHJlcywgcmVzID4+IDI2KTsKLQlzd2l0Y2ggKHJlcyA+PiAyNikgewotCWNhc2UgQ09ORVhBTlRfSFBfRVZFTlQ6Ci0JCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlicmVhazsKLQljYXNlIENPTkVYQU5UX01JQ19FVkVOVDoKLQkJY3h0NTA2Nl9pZGVhcGFkX2F1dG9taWMoY29kZWMpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIHVuc29saWNpdGVkIGV2ZW50IGZvciBqYWNrIHNlbnNpbmcgKi8KLXN0YXRpYyB2b2lkIGN4dDUwNjZfaHBfbGFwdG9wX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X2hwX2xhcHRvcDogdW5zb2wgZXZlbnQgJXggKCV4KVxuIiwgcmVzLCByZXMgPj4gMjYpOwotCXN3aXRjaCAocmVzID4+IDI2KSB7Ci0JY2FzZSBDT05FWEFOVF9IUF9FVkVOVDoKLQkJY3h0NTA2Nl9ocF9hdXRvbXV0ZShjb2RlYyk7Ci0JCWJyZWFrOwotCWNhc2UgQ09ORVhBTlRfTUlDX0VWRU5UOgotCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKiB1bnNvbGljaXRlZCBldmVudCBmb3IgamFjayBzZW5zaW5nICovCi1zdGF0aWMgdm9pZCBjeHQ1MDY2X3RoaW5rcGFkX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXNuZF9wcmludGRkKCJDWFQ1MDY2X3RoaW5rcGFkOiB1bnNvbCBldmVudCAleCAoJXgpXG4iLCByZXMsIHJlcyA+PiAyNik7Ci0Jc3dpdGNoIChyZXMgPj4gMjYpIHsKLQljYXNlIENPTkVYQU5UX0hQX0VWRU5UOgotCQljeHQ1MDY2X2hwX2F1dG9tdXRlKGNvZGVjKTsKLQkJYnJlYWs7Ci0JY2FzZSBDT05FWEFOVF9NSUNfRVZFTlQ6Ci0JCWN4dDUwNjZfdGhpbmtwYWRfYXV0b21pYyhjb2RlYyk7Ci0JCWJyZWFrOwotCX0KLX0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBoZGFfaW5wdXRfbXV4IGN4dDUwNjZfYW5hbG9nX21pY19ib29zdCA9IHsKIAkubnVtX2l0ZW1zID0gNSwKQEAgLTI2MzMsNiArMjYzMiwyNyBAQAogCXNwZWMtPnJlY29yZGluZyA9IDA7CiB9CiAKK3N0YXRpYyB2b2lkIGNvbmV4YW50X2NoZWNrX2RpZ19vdXRzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICBoZGFfbmlkX3QgKmRpZ19waW5zLAorCQkJCSAgICBpbnQgbnVtX3BpbnMpCit7CisJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwloZGFfbmlkX3QgKm5pZF9sb2MgPSAmc3BlYy0+bXVsdGlvdXQuZGlnX291dF9uaWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpbnM7IGkrKywgZGlnX3BpbnMrKykgeworCQl1bnNpZ25lZCBpbnQgY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAqZGlnX3BpbnMpOworCQlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgPT0gQUNfSkFDS19QT1JUX05PTkUpCisJCQljb250aW51ZTsKKwkJaWYgKHNuZF9oZGFfZ2V0X2Nvbm5lY3Rpb25zKGNvZGVjLCAqZGlnX3BpbnMsIG5pZF9sb2MsIDEpICE9IDEpCisJCQljb250aW51ZTsKKwkJaWYgKHNwZWMtPnNsYXZlX2RpZ19vdXRzWzBdKQorCQkJbmlkX2xvYysrOworCQllbHNlCisJCQluaWRfbG9jID0gc3BlYy0+c2xhdmVfZGlnX291dHM7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGhkYV9pbnB1dF9tdXggY3h0NTA2Nl9jYXB0dXJlX3NvdXJjZSA9IHsKIAkubnVtX2l0ZW1zID0gNCwKIAkuaXRlbXMgPSB7CkBAIC0zMDM5LDIwICszMDU5LDExIEBACiAvKiBpbml0aWFsaXplIGphY2stc2Vuc2luZywgdG9vICovCiBzdGF0aWMgaW50IGN4dDUwNjZfaW5pdChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKLQlzdHJ1Y3QgY29uZXhhbnRfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCiAJc25kX3ByaW50ZGQoIkNYVDUwNjY6IGluaXRcbiIpOwogCWNvbmV4YW50X2luaXQoY29kZWMpOwogCWlmIChjb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50KSB7CiAJCWN4dDUwNjZfaHBfYXV0b211dGUoY29kZWMpOwotCQlpZiAoc3BlYy0+ZGVsbF92b3N0cm8pCi0JCQljeHQ1MDY2X3Zvc3Ryb19hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+aWRlYXBhZCkKLQkJCWN4dDUwNjZfaWRlYXBhZF9hdXRvbWljKGNvZGVjKTsKLQkJZWxzZSBpZiAoc3BlYy0+dGhpbmtwYWQpCi0JCQljeHQ1MDY2X3RoaW5rcGFkX2F1dG9taWMoY29kZWMpOwotCQllbHNlIGlmIChzcGVjLT5ocF9sYXB0b3ApCi0JCQljeHQ1MDY2X2hwX2xhcHRvcF9hdXRvbWljKGNvZGVjKTsKKwkJY3h0NTA2Nl9hdXRvbWljKGNvZGVjKTsKIAl9CiAJY3h0NTA2Nl9zZXRfbWljX2Jvb3N0KGNvZGVjKTsKIAlyZXR1cm4gMDsKQEAgLTMwODAsNiArMzA5MSw3IEBACiAJQ1hUNTA2Nl9ERUxMX1ZPU1RSTywJLyogRGVsbCBWb3N0cm8gMTAxNWkgKi8KIAlDWFQ1MDY2X0lERUFQQUQsCS8qIExlbm92byBJZGVhUGFkIFUxNTAgKi8KIAlDWFQ1MDY2X1RISU5LUEFELAkvKiBMZW5vdm8gVGhpbmtQYWQgVDQxMHMsIG90aGVycz8gKi8KKwlDWFQ1MDY2X0FTVVMsCQkvKiBBc3VzIEs1MkpVLCBMZW5vdm8gRzU2MCAtIEludCBtaWMgYXQgMHgxYSBhbmQgRXh0IG1pYyBhdCAweDFiICovCiAJQ1hUNTA2Nl9IUF9MQVBUT1AsICAgICAgLyogSFAgTGFwdG9wICovCiAJQ1hUNTA2Nl9NT0RFTFMKIH07CkBAIC0zMDkxLDYgKzMxMDMsNyBAQAogCVtDWFQ1MDY2X0RFTExfVk9TVFJPXQk9ICJkZWxsLXZvc3RybyIsCiAJW0NYVDUwNjZfSURFQVBBRF0JPSAiaWRlYXBhZCIsCiAJW0NYVDUwNjZfVEhJTktQQURdCT0gInRoaW5rcGFkIiwKKwlbQ1hUNTA2Nl9BU1VTXQkJPSAiYXN1cyIsCiAJW0NYVDUwNjZfSFBfTEFQVE9QXQk9ICJocC1sYXB0b3AiLAogfTsKIApAQCAtMzEwMSw4ICszMTE0LDEyIEBACiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQwMSwgIkRlbGwgVm9zdHJvIDEwMTQiLCBDWFQ1MDY2X0RFTExfVk9TVFJPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDAyLCAiRGVsbCBWb3N0cm8iLCBDWFQ1MDY2X0RFTExfVk9TVFJPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDA4LCAiRGVsbCBJbnNwaXJvbiBPbmUgMTlUIiwgQ1hUNTA2Nl9JREVBUEFEKSwKKwlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNTBmLCAiRGVsbCBJbnNwaXJvbiIsIENYVDUwNjZfSURFQVBBRCksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDUxMCwgIkRlbGwgVm9zdHJvIiwgQ1hUNTA2Nl9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAzYywgMHgzNjBiLCAiSFAgRzYwIiwgQ1hUNTA2Nl9IUF9MQVBUT1ApLAotCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDEzZjMsICJBc3VzIEE1MkoiLCBDWFQ1MDY2X0hQX0xBUFRPUCksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTNmMywgIkFzdXMgQTUySiIsIENYVDUwNjZfQVNVUyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTY0MywgIkFzdXMgSzUySlUiLCBDWFQ1MDY2X0FTVVMpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDE5OTMsICJBc3VzIFU1MEYiLCBDWFQ1MDY2X0FTVVMpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmMWUsICJUb3NoaWJhIFNhdGVsbGl0ZSBDNjUwRCIsIENYVDUwNjZfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDExNzksIDB4ZmY1MCwgIlRvc2hpYmEgU2F0ZWxsaXRlIFA1MDAtUFNQR1NDLTAxODAwVCIsIENYVDUwNjZfT0xQQ19YT18xXzUpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmZTAsICJUb3NoaWJhIFNhdGVsbGl0ZSBQcm8gVDEzMC0xNUYiLCBDWFQ1MDY2X09MUENfWE9fMV81KSwKQEAgLTMxMTEsNyArMzEyOCw5IEBACiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MDgzMywgIk9MUEMgWE8tMS41IiwgQ1hUNTA2Nl9PTFBDX1hPXzFfNSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIkxlbm92byBUNDAwcyIsIENYVDUwNjZfVEhJTktQQUQpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYzUsICJUaGlua3BhZCBFZGdlIDEzIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFjNiwgIlRoaW5rcGFkIEVkZ2UgMTMiLCBDWFQ1MDY2X0FTVVMpLAogIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiTGVub3ZvIFRoaW5rcGFkIiwgQ1hUNTA2Nl9USElOS1BBRCksCisJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzhhZiwgIkxlbm92byBHNTYwIiwgQ1hUNTA2Nl9BU1VTKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDE3YWEsICJMZW5vdm8iLCBDWFQ1MDY2X0lERUFQQUQpLCAvKiBGYWxsYmFjayBmb3IgTGVub3ZvcyB3aXRob3V0IGRvY2sgbWljICovCiAJe30KIH07CkBAIC0zMTMzLDcgKzMxNTIsOCBAQAogCXNwZWMtPm11bHRpb3V0Lm1heF9jaGFubmVscyA9IDI7CiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSBBUlJBWV9TSVpFKGN4dDUwNjZfZGFjX25pZHMpOwogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gY3h0NTA2Nl9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IENYVDUwNjZfU1BESUZfT1VUOworCWNvbmV4YW50X2NoZWNrX2RpZ19vdXRzKGNvZGVjLCBjeHQ1MDY2X2RpZ291dF9waW5fbmlkcywKKwkgICAgQVJSQVlfU0laRShjeHQ1MDY2X2RpZ291dF9waW5fbmlkcykpOwogCXNwZWMtPm51bV9hZGNfbmlkcyA9IDE7CiAJc3BlYy0+YWRjX25pZHMgPSBjeHQ1MDY2X2FkY19uaWRzOwogCXNwZWMtPmNhcHNyY19uaWRzID0gY3h0NTA2Nl9jYXBzcmNfbmlkczsKQEAgLTMxNjcsMTcgKzMxODcsMjAgQEAKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMrKzsKIAkJc3BlYy0+ZGVsbF9hdXRvbXV0ZSA9IDE7CiAJCWJyZWFrOworCWNhc2UgQ1hUNTA2Nl9BU1VTOgogCWNhc2UgQ1hUNTA2Nl9IUF9MQVBUT1A6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaHBfbGFwdG9wX2V2ZW50OworCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl91bnNvbF9ldmVudDsKIAkJc3BlYy0+aW5pdF92ZXJic1tzcGVjLT5udW1faW5pdF92ZXJic10gPQogCQkJY3h0NTA2Nl9pbml0X3ZlcmJzX2hwX2xhcHRvcDsKIAkJc3BlYy0+bnVtX2luaXRfdmVyYnMrKzsKLQkJc3BlYy0+aHBfbGFwdG9wID0gMTsKKwkJc3BlYy0+aHBfbGFwdG9wID0gYm9hcmRfY29uZmlnID09IENYVDUwNjZfSFBfTEFQVE9QOworCQlzcGVjLT5hc3VzID0gYm9hcmRfY29uZmlnID09IENYVDUwNjZfQVNVUzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3RlcjsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyczsKIAkJLyogbm8gUy9QRElGIG91dCAqLwotCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CisJCWlmIChib2FyZF9jb25maWcgPT0gQ1hUNTA2Nl9IUF9MQVBUT1ApCisJCQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IDA7CiAJCS8qIGlucHV0IHNvdXJjZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkICovCiAJCXNwZWMtPmlucHV0X211eCA9IE5VTEw7CiAJCXNwZWMtPnBvcnRfZF9tb2RlID0gMDsKQEAgLTMyMDcsNyArMzIzMCw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9ERUxMX1ZPU1RSTzoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl92b3N0cm9fZXZlbnQ7CisJCWNvZGVjLT5wYXRjaF9vcHMudW5zb2xfZXZlbnQgPSBjeHQ1MDY2X3Vuc29sX2V2ZW50OwogCQlzcGVjLT5pbml0X3ZlcmJzWzBdID0gY3h0NTA2Nl9pbml0X3ZlcmJzX3Zvc3RybzsKIAkJc3BlYy0+bWl4ZXJzW3NwZWMtPm51bV9taXhlcnMrK10gPSBjeHQ1MDY2X21peGVyX21hc3Rlcl9vbHBjOwogCQlzcGVjLT5taXhlcnNbc3BlYy0+bnVtX21peGVycysrXSA9IGN4dDUwNjZfbWl4ZXJzOwpAQCAtMzIyNCw3ICszMjQ3LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBDWFQ1MDY2X0lERUFQQUQ6CiAJCWNvZGVjLT5wYXRjaF9vcHMuaW5pdCA9IGN4dDUwNjZfaW5pdDsKLQkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfaWRlYXBhZF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfaWRlYXBhZDsKQEAgLTMyNDAsNyArMzI2Myw3IEBACiAJCWJyZWFrOwogCWNhc2UgQ1hUNTA2Nl9USElOS1BBRDoKIAkJY29kZWMtPnBhdGNoX29wcy5pbml0ID0gY3h0NTA2Nl9pbml0OwotCQljb2RlYy0+cGF0Y2hfb3BzLnVuc29sX2V2ZW50ID0gY3h0NTA2Nl90aGlua3BhZF9ldmVudDsKKwkJY29kZWMtPnBhdGNoX29wcy51bnNvbF9ldmVudCA9IGN4dDUwNjZfdW5zb2xfZXZlbnQ7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcl9tYXN0ZXI7CiAJCXNwZWMtPm1peGVyc1tzcGVjLT5udW1fbWl4ZXJzKytdID0gY3h0NTA2Nl9taXhlcnM7CiAJCXNwZWMtPmluaXRfdmVyYnNbMF0gPSBjeHQ1MDY2X2luaXRfdmVyYnNfdGhpbmtwYWQ7CkBAIC0zMzg5LDcgKzM0MTIsNyBAQAogCQl9CiAJfQogCXNwZWMtPm11bHRpb3V0LmRhY19uaWRzID0gc3BlYy0+cHJpdmF0ZV9kYWNfbmlkczsKLQlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBudW1zICogMjsKKwlzcGVjLT5tdWx0aW91dC5tYXhfY2hhbm5lbHMgPSBzcGVjLT5tdWx0aW91dC5udW1fZGFjcyAqIDI7CiAKIAlpZiAoY2ZnLT5ocF9vdXRzID4gMCkKIAkJc3BlYy0+YXV0b19tdXRlID0gMTsKQEAgLTM3MDgsOSArMzczMSw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3hfYXV0b19hZGRfdm9sdW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBjb25zdCBjaGFyICpiYXNlbmFtZSwKK3N0YXRpYyBpbnQgY3hfYXV0b19hZGRfdm9sdW1lX2lkeChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgY29uc3QgY2hhciAqYmFzZW5hbWUsCiAJCQkgICAgICBjb25zdCBjaGFyICpkaXIsIGludCBjaWR4LAotCQkJICAgICAgaGRhX25pZF90IG5pZCwgaW50IGhkYV9kaXIpCisJCQkgICAgICBoZGFfbmlkX3QgbmlkLCBpbnQgaGRhX2RpciwgaW50IGFtcF9pZHgpCiB7CiAJc3RhdGljIGNoYXIgbmFtZVszMl07CiAJc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGtuZXdbXSA9IHsKQEAgLTM3MjIsNyArMzc0NSw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjdGw7Ci0JCWtuZXdbaV0ucHJpdmF0ZV92YWx1ZSA9IEhEQV9DT01QT1NFX0FNUF9WQUwobmlkLCAzLCAwLCBoZGFfZGlyKTsKKwkJa25ld1tpXS5wcml2YXRlX3ZhbHVlID0gSERBX0NPTVBPU0VfQU1QX1ZBTChuaWQsIDMsIGFtcF9pZHgsCisJCQkJCQkJICAgIGhkYV9kaXIpOwogCQlrbmV3W2ldLnN1YmRldmljZSA9IEhEQV9TVUJERVZfQU1QX0ZMQUc7CiAJCWtuZXdbaV0uaW5kZXggPSBjaWR4OwogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyVzICVzIiwgYmFzZW5hbWUsIGRpciwgc2Z4W2ldKTsKQEAgLTM3MzgsNiArMzc2Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCBzdHIsIGRpciwgY2lkeCwgbmlkLCBoZGFfZGlyKQkJXAorCWN4X2F1dG9fYWRkX3ZvbHVtZV9pZHgoY29kZWMsIHN0ciwgZGlyLCBjaWR4LCBuaWQsIGhkYV9kaXIsIDApCisKICNkZWZpbmUgY3hfYXV0b19hZGRfcGJfdm9sdW1lKGNvZGVjLCBuaWQsIHN0ciwgaWR4KQkJCVwKIAljeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsIHN0ciwgIiBQbGF5YmFjayIsIGlkeCwgbmlkLCBIREFfT1VUUFVUKQogCkBAIC0zNzg3LDI5ICszODE0LDYwIEBACiAJc3RydWN0IGNvbmV4YW50X3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgYXV0b19waW5fY2ZnICpjZmcgPSAmc3BlYy0+YXV0b2NmZzsKIAlzdGF0aWMgY29uc3QgY2hhciAqcHJldl9sYWJlbDsKLQlpbnQgaSwgZXJyLCBjaWR4OworCWludCBpLCBlcnIsIGNpZHgsIGNvbm5fbGVuOworCWhkYV9uaWRfdCBjb25uW0hEQV9NQVhfQ09OTkVDVElPTlNdOwogCi0JZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCAiQ2FwdHVyZSIsICIiLCAwLCBzcGVjLT5hZGNfbmlkc1swXSwKLQkJCQkgSERBX0lOUFVUKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpbnQgbXVsdGlfYWRjX3ZvbHVtZSA9IDA7IC8qIElmIHRoZSBBREMgbmlkIGhhcyBzZXZlcmFsIGlucHV0IHZvbHVtZXMgKi8KKwlpbnQgYWRjX25pZCA9IHNwZWMtPmFkY19uaWRzWzBdOworCisJY29ubl9sZW4gPSBzbmRfaGRhX2dldF9jb25uZWN0aW9ucyhjb2RlYywgYWRjX25pZCwgY29ubiwKKwkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CisJaWYgKGNvbm5fbGVuIDwgMCkKKwkJcmV0dXJuIGNvbm5fbGVuOworCisJbXVsdGlfYWRjX3ZvbHVtZSA9IGNmZy0+bnVtX2lucHV0cyA+IDEgJiYgY29ubl9sZW4gPiAxOworCWlmICghbXVsdGlfYWRjX3ZvbHVtZSkgeworCQllcnIgPSBjeF9hdXRvX2FkZF92b2x1bWUoY29kZWMsICJDYXB0dXJlIiwgIiIsIDAsIGFkY19uaWQsCisJCQkJCSBIREFfSU5QVVQpOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCiAJcHJldl9sYWJlbCA9IE5VTEw7CiAJY2lkeCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGNmZy0+bnVtX2lucHV0czsgaSsrKSB7CiAJCWhkYV9uaWRfdCBuaWQgPSBjZmctPmlucHV0c1tpXS5waW47CiAJCWNvbnN0IGNoYXIgKmxhYmVsOwotCQlpZiAoIShnZXRfd2NhcHMoY29kZWMsIG5pZCkgJiBBQ19XQ0FQX0lOX0FNUCkpCisJCWludCBqOworCQlpbnQgcGluX2FtcCA9IGdldF93Y2Fwcyhjb2RlYywgbmlkKSAmIEFDX1dDQVBfSU5fQU1QOworCQlpZiAoIXBpbl9hbXAgJiYgIW11bHRpX2FkY192b2x1bWUpCiAJCQljb250aW51ZTsKKwogCQlsYWJlbCA9IGhkYV9nZXRfYXV0b2NmZ19pbnB1dF9sYWJlbChjb2RlYywgY2ZnLCBpKTsKIAkJaWYgKGxhYmVsID09IHByZXZfbGFiZWwpCiAJCQljaWR4Kys7CiAJCWVsc2UKIAkJCWNpZHggPSAwOwogCQlwcmV2X2xhYmVsID0gbGFiZWw7Ci0JCWVyciA9IGN4X2F1dG9fYWRkX3ZvbHVtZShjb2RlYywgbGFiZWwsICIgQ2FwdHVyZSIsIGNpZHgsCi0JCQkJCSBuaWQsIEhEQV9JTlBVVCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0dXJuIGVycjsKKworCQlpZiAocGluX2FtcCkgeworCQkJZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lKGNvZGVjLCBsYWJlbCwgIiBCb29zdCIsIGNpZHgsCisJCQkJCQkgbmlkLCBIREFfSU5QVVQpOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCisJCWlmICghbXVsdGlfYWRjX3ZvbHVtZSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGogPSAwOyBqIDwgY29ubl9sZW47IGorKykgeworCQkJaWYgKGNvbm5bal0gPT0gbmlkKSB7CisJCQkJZXJyID0gY3hfYXV0b19hZGRfdm9sdW1lX2lkeChjb2RlYywgbGFiZWwsCisJCQkJICAgICIgQ2FwdHVyZSIsIGNpZHgsIGFkY19uaWQsIEhEQV9JTlBVVCwgaik7CisJCQkJaWYgKGVyciA8IDApCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0zODgxLDYgKzM5MzksOCBAQAogCSAgLnBhdGNoID0gcGF0Y2hfY3h0NTA2NiB9LAogCXsgLmlkID0gMHgxNGYxNTA2OSwgLm5hbWUgPSAiQ1gyMDU4NSIsCiAJICAucGF0Y2ggPSBwYXRjaF9jeHQ1MDY2IH0sCisJeyAuaWQgPSAweDE0ZjE1MDZlLCAubmFtZSA9ICJDWDIwNTkwIiwKKwkgIC5wYXRjaCA9IHBhdGNoX2N4dDUwNjYgfSwKIAl7IC5pZCA9IDB4MTRmMTUwOTcsIC5uYW1lID0gIkNYMjA2MzEiLAogCSAgLnBhdGNoID0gcGF0Y2hfY29uZXhhbnRfYXV0byB9LAogCXsgLmlkID0gMHgxNGYxNTA5OCwgLm5hbWUgPSAiQ1gyMDYzMiIsCkBAIC0zOTA3LDYgKzM5NjcsNyBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDY3Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwNjgiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA2OSIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MDZlIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTRmMTUwOTciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxNGYxNTA5OCIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjE0ZjE1MGExIik7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCmluZGV4IDJkNWI4M2YuLmVjMGZhMmQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCkBAIC02NDIsNiArNjQyLDcgQEAKIAkJCWhkbWlfYWktPnZlcgkJPSAweDAxOwogCQkJaGRtaV9haS0+bGVuCQk9IDB4MGE7CiAJCQloZG1pX2FpLT5DQzAyX0NUNDcJPSBjaGFubmVscyAtIDE7CisJCQloZG1pX2FpLT5DQQkJPSBjYTsKIAkJCWhkbWlfY2hlY2tzdW1fYXVkaW9faW5mb2ZyYW1lKGhkbWlfYWkpOwogCQl9IGVsc2UgaWYgKHNwZWMtPnNpbmtfZWxkW2ldLmNvbm5fdHlwZSA9PSAxKSB7IC8qIERpc3BsYXlQb3J0ICovCiAJCQlzdHJ1Y3QgZHBfYXVkaW9faW5mb2ZyYW1lICpkcF9haTsKQEAgLTY1MSw2ICs2NTIsNyBAQAogCQkJZHBfYWktPmxlbgkJPSAweDFiOwogCQkJZHBfYWktPnZlcgkJPSAweDExIDw8IDI7CiAJCQlkcF9haS0+Q0MwMl9DVDQ3CT0gY2hhbm5lbHMgLSAxOworCQkJZHBfYWktPkNBCQk9IGNhOwogCQl9IGVsc2UgewogCQkJc25kX3ByaW50ZCgiSERNSTogdW5rbm93biBjb25uZWN0aW9uIHR5cGUgYXQgcGluICVkXG4iLAogCQkJCSAgIHBpbl9uaWQpOwpAQCAtMTYzMiw2ICsxNjM0LDkgQEAKIHsgLmlkID0gMHgxMGRlMDAxMiwgLm5hbWUgPSAiR1BVIDEyIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCiB7IC5pZCA9IDB4MTBkZTAwMTMsIC5uYW1lID0gIkdQVSAxMyBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAogeyAuaWQgPSAweDEwZGUwMDE0LCAubmFtZSA9ICJHUFUgMTQgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKK3sgLmlkID0gMHgxMGRlMDAxNSwgLm5hbWUgPSAiR1BVIDE1IEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCit7IC5pZCA9IDB4MTBkZTAwMTYsIC5uYW1lID0gIkdQVSAxNiBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAorLyogMTcgaXMga25vd24gdG8gYmUgYWJzZW50ICovCiB7IC5pZCA9IDB4MTBkZTAwMTgsIC5uYW1lID0gIkdQVSAxOCBIRE1JL0RQIiwJLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAogeyAuaWQgPSAweDEwZGUwMDE5LCAubmFtZSA9ICJHUFUgMTkgSERNSS9EUCIsCS5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKIHsgLmlkID0gMHgxMGRlMDAxYSwgLm5hbWUgPSAiR1BVIDFhIEhETUkvRFAiLAkucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCkBAIC0xNjc0LDYgKzE2NzksOCBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDEyIik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTMiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxNCIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDE1Iik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMTYiKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAxOCIpOwogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDE5Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMWEiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKaW5kZXggYmU0ZGY0Yy4uNDI2MWJiOCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKKysrIGIvc291bmQvcGNpL2hkYS9wYXRjaF9yZWFsdGVrLmMKQEAgLTExMzMsMTEgKzExMzMsOCBAQAogCQluaWQgPSBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbaV07CiAJCWlmICghbmlkKQogCQkJYnJlYWs7Ci0JCWlmIChzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpKSB7Ci0JCQlzcGVjLT5qYWNrX3ByZXNlbnQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWxjX3JlcG9ydF9qYWNrKGNvZGVjLCBzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbaV0pOworCQlhbGNfcmVwb3J0X2phY2soY29kZWMsIG5pZCk7CisJCXNwZWMtPmphY2tfcHJlc2VudCB8PSBzbmRfaGRhX2phY2tfZGV0ZWN0KGNvZGVjLCBuaWQpOwogCX0KIAogCW11dGUgPSBzcGVjLT5qYWNrX3ByZXNlbnQgPyBIREFfQU1QX01VVEUgOiAwOwpAQCAtMjI5MCw2ICsyMjg3LDI5IEBACiAJeyB9IC8qIGVuZCAqLwogfTsKIAorc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ19taXhlcltdID0geworCUhEQV9DT0RFQ19WT0xVTUUoIkZyb250IFBsYXliYWNrIFZvbHVtZSIsIDB4MGMsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiRnJvbnQgUGxheWJhY2sgU3dpdGNoIiwgMHgwYywgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTdXJyb3VuZCBQbGF5YmFjayBWb2x1bWUiLCAweDBkLCAweDAsIEhEQV9PVVRQVVQpLAorCUhEQV9CSU5EX01VVEUoIlN1cnJvdW5kIFBsYXliYWNrIFN3aXRjaCIsIDB4MGQsIDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRV9NT05PKCJDZW50ZXIgUGxheWJhY2sgVm9sdW1lIiwgMHgwZiwgMiwgMHgwLAorCQlIREFfT1VUUFVUKSwKKwlIREFfQklORF9NVVRFX01PTk8oIkNlbnRlciBQbGF5YmFjayBTd2l0Y2giLCAweDBmLCAyLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUVfTU9OTygiTEZFIFBsYXliYWNrIFZvbHVtZSIsIDB4MGYsIDEsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURV9NT05PKCJMRkUgUGxheWJhY2sgU3dpdGNoIiwgMHgwZiwgMSwgMiwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJTaWRlIFBsYXliYWNrIFZvbHVtZSIsIDB4MGUsIDB4MCwgSERBX09VVFBVVCksCisJSERBX0JJTkRfTVVURSgiU2lkZSBQbGF5YmFjayBTd2l0Y2giLCAweDBlLCAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19WT0xVTUUoIkNEIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX01VVEUoIkNEIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDQsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTGluZSBQbGF5YmFjayBWb2x1bWUiLCAweDBiLCAweDAyLCBIREFfSU5QVVQpLAorCUhEQV9DT0RFQ19NVVRFKCJMaW5lIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MDIsIEhEQV9JTlBVVCksCisJSERBX0NPREVDX1ZPTFVNRSgiTWljIFBsYXliYWNrIFZvbHVtZSIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfVk9MVU1FKCJNaWMgQm9vc3QgVm9sdW1lIiwgMHgxOCwgMCwgSERBX0lOUFVUKSwKKwlIREFfQ09ERUNfTVVURSgiTWljIFBsYXliYWNrIFN3aXRjaCIsIDB4MGIsIDB4MCwgSERBX0lOUFVUKSwKKwl7IH0gLyogZW5kICovCit9OworCisKIHN0YXRpYyBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhbGM4ODlfYWNlcl9hc3BpcmVfODkzMGdfbWl4ZXJbXSA9IHsKIAlIREFfQ09ERUNfVk9MVU1FKCJGcm9udCBQbGF5YmFjayBWb2x1bWUiLCAweDBjLCAweDAsIEhEQV9PVVRQVVQpLAogCUhEQV9CSU5EX01VVEUoIkZyb250IFBsYXliYWNrIFN3aXRjaCIsIDB4MGMsIDIsIEhEQV9JTlBVVCksCkBAIC0xMDM1OSw3ICsxMDM3OSw3IEBACiAJCS5pbml0X2hvb2sgPSBhbGNfYXV0b211dGVfYW1wLAogCX0sCiAJW0FMQzg4OF9BQ0VSX0FTUElSRV80OTMwR10gPSB7Ci0JCS5taXhlcnMgPSB7IGFsYzg4OF9iYXNlX21peGVyLAorCQkubWl4ZXJzID0geyBhbGM4ODhfYWNlcl9hc3BpcmVfNDkzMGdfbWl4ZXIsCiAJCQkJYWxjODgzX2NobW9kZV9taXhlciB9LAogCQkuaW5pdF92ZXJicyA9IHsgYWxjODgzX2luaXRfdmVyYnMsIGFsYzg4MF9ncGlvMV9pbml0X3ZlcmJzLAogCQkJCWFsYzg4OF9hY2VyX2FzcGlyZV80OTMwZ192ZXJicyB9LApAQCAtMTQ5NTQsOSArMTQ5NzQsMTEgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA0ZCwgMHg5MDg0LCAiU29ueSBWQUlPIiwgQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSksCiAJU05EX1BDSV9RVUlSS19WRU5ET1IoMHgxMDRkLCAiU29ueSBWQUlPIiwgQUxDMjY5X0ZJWFVQX1NPTllfVkFJTyksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDQ3MCwgIkRlbGwgTTEwMXoiLCBBTEMyNjlfRklYVVBfREVMTF9NMTAxWiksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFiOCwgIlRoaW5rcGFkIEVkZ2UgMTQiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCi0JU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjFlOSwgIlRoaW5rcGFkIEVkZ2UgMTQiLCBBTEMyNjlfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MjBmMiwgIlRoaW5rcGFkIFNMNDEwLzUxMCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMTVlLCAiVGhpbmtwYWQgTDUxMiIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWI4LCAiVGhpbmtwYWQgRWRnZSAxNCIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWNhLCAiVGhpbmtwYWQgTDQxMiIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKKwlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMWU5LCAiVGhpbmtwYWQgRWRnZSAxNSIsIEFMQzI2OV9GSVhVUF9TS1VfSUdOT1JFKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxYTEzLCAiQXN1cyBHNzNKdyIsIEFMQzI2OV9GSVhVUF9BU1VTX0c3M0pXKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHg5ZTU0LCAiTEVOT1ZPIE5CIiwgQUxDMjY5X0ZJWFVQX0xFTk9WT19FQVBEKSwKIAl7fQpAQCAtMTQ5OTAsNyArMTUwMTIsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDExZTMsICJBU1VTIFUzM0pjIiwgQUxDMjY5VkJfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI3MywgIkFTVVMgVUw4MEp0IiwgQUxDMjY5VkJfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTI4MywgIkFTVVMgVTUzSmMiLCBBTEMyNjlfQU1JQyksCi0JU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySnYiLCBBTEMyNjlfQU1JQyksCisJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTJiMywgIkFTVVMgTjgySlYiLCBBTEMyNjlWQl9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxMmQzLCAiQVNVUyBONjFKdiIsIEFMQzI2OV9BTUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHgxM2EzLCAiQVNVUyBVTDMwVnQiLCBBTEMyNjlfQU1JQyksCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4MTM3MywgIkFTVVMgRzczSlgiLCBBTEMyNjlfQU1JQyksCkBAIC0xODgwMCw2ICsxODgyMiw3IEBACiAJCQkJCUFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSS19NQVNLKDB4MTg1NCwgMHhmMDAwLCAweDIwMDAsICJBU1VTIEgxMy0yMDB4IiwKIAkJCSAgIEFMQzY2M19BU1VTX0gxMyksCisJU05EX1BDSV9RVUlSSygweDE5OTEsIDB4NTYyOCwgIk9yZGlzc2ltbyBFVkUiLCBBTEM2NjJfTEVOT1ZPXzEwMUUpLAogCXt9CiB9OwogCkBAIC0xOTQ5Miw2ICsxOTUxNSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2ZpeHVwX3RibFtdID0geworCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMDgsICJBY2VyIEFzcGlyZSA4OTQyRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzOGIsICJBY2VyIEFzcGlyZSA4OTQzRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGMwNTEsICJTYW1zdW5nIFI3MjAiLCBBTEM2NjJfRklYVVBfSURFQVBBRCksCiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4MzhhZiwgIkxlbm92byBJZGVhcGFkIFk1NTBQIiwgQUxDNjYyX0ZJWFVQX0lERUFQQUQpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9zaWdtYXRlbC5jCmluZGV4IDllYTQ4YjQuLmJkN2IxMjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfc2lnbWF0ZWwuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3NpZ21hdGVsLmMKQEAgLTU4Niw3ICs1ODYsMTIgQEAKIAkweDBmLCAweDEwLCAweDExLCAweDFmLCAweDIwLAogfTsKIAotc3RhdGljIGhkYV9uaWRfdCBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzWzEwXSA9IHsKK3N0YXRpYyBoZGFfbmlkX3Qgc3RhYzkyaGQ4N3h4eF9waW5fbmlkc1s2XSA9IHsKKwkweDBhLCAweDBiLCAweDBjLCAweDBkLAorCTB4MGYsIDB4MTEsCit9OworCitzdGF0aWMgaGRhX25pZF90IHN0YWM5MmhkODh4eHhfcGluX25pZHNbOF0gPSB7CiAJMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwKIAkweDBmLCAweDExLCAweDFmLCAweDIwLAogfTsKQEAgLTU0MzAsMTIgKzU0MzUsMTMgQEAKIAlzd2l0Y2ggKGNvZGVjLT52ZW5kb3JfaWQpIHsKIAljYXNlIDB4MTExZDc2ZDE6CiAJY2FzZSAweDExMWQ3NmQ5OgorCWNhc2UgMHgxMTFkNzZlNToKIAkJc3BlYy0+ZG1pY19uaWRzID0gc3RhYzkyaGQ4N2JfZG1pY19uaWRzOwogCQlzcGVjLT5udW1fZG1pY3MgPSBzdGFjOTJ4eF9jb25uZWN0ZWRfcG9ydHMoY29kZWMsCiAJCQkJc3RhYzkyaGQ4N2JfZG1pY19uaWRzLAogCQkJCVNUQUM5MkhEODdCX05VTV9ETUlDUyk7Ci0JCXNwZWMtPm51bV9waW5zID0gQVJSQVlfU0laRShzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzKTsKLQkJc3BlYy0+cGluX25pZHMgPSBzdGFjOTJoZDg4eHh4X3Bpbl9uaWRzOworCQlzcGVjLT5udW1fcGlucyA9IEFSUkFZX1NJWkUoc3RhYzkyaGQ4N3h4eF9waW5fbmlkcyk7CisJCXNwZWMtPnBpbl9uaWRzID0gc3RhYzkyaGQ4N3h4eF9waW5fbmlkczsKIAkJc3BlYy0+bW9ub19uaWQgPSAwOwogCQlzcGVjLT5udW1fcHdycyA9IDA7CiAJCWJyZWFrOwpAQCAtNTQ0Myw2ICs1NDQ5LDcgQEAKIAljYXNlIDB4MTExZDc2Njc6CiAJY2FzZSAweDExMWQ3NjY4OgogCWNhc2UgMHgxMTFkNzY2OToKKwljYXNlIDB4MTExZDc2ZTM6CiAJCXNwZWMtPm51bV9kbWljcyA9IHN0YWM5Mnh4X2Nvbm5lY3RlZF9wb3J0cyhjb2RlYywKIAkJCQlzdGFjOTJoZDg4eHh4X2RtaWNfbmlkcywKIAkJCQlTVEFDOTJIRDg4WFhYX05VTV9ETUlDUyk7CkBAIC02Mzg3LDYgKzYzOTQsOCBAQAogCXsgLmlkID0gMHgxMTFkNzZjZCwgLm5hbWUgPSAiOTJIRDg5RjIiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDczeHggfSwKIAl7IC5pZCA9IDB4MTExZDc2Y2UsIC5uYW1lID0gIjkySEQ4OUYxIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ3M3h4IH0sCiAJeyAuaWQgPSAweDExMWQ3NmUwLCAubmFtZSA9ICI5MkhEOTFCWFgiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKKwl7IC5pZCA9IDB4MTExZDc2ZTMsIC5uYW1lID0gIjkySEQ5OEJYWCIsIC5wYXRjaCA9IHBhdGNoX3N0YWM5MmhkODN4eHh9LAorCXsgLmlkID0gMHgxMTFkNzZlNSwgLm5hbWUgPSAiOTJIRDk5QlhYIiwgLnBhdGNoID0gcGF0Y2hfc3RhYzkyaGQ4M3h4eH0sCiAJeyAuaWQgPSAweDExMWQ3NmU3LCAubmFtZSA9ICI5MkhEOTBCWFgiLCAucGF0Y2ggPSBwYXRjaF9zdGFjOTJoZDgzeHh4fSwKIAl7fSAvKiB0ZXJtaW5hdG9yICovCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggYTc2YzMyNi4uNjNiMDA1NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC01NjcsNyArNTY3LDcgQEAKIAkJaGRhX25pZF90IG5pZCA9IGNmZy0+aW5wdXRzW2ldLnBpbjsKIAkJaWYgKHNwZWMtPnNtYXJ0NTFfZW5hYmxlZCAmJiBpc19zbWFydDUxX3BpbnMoc3BlYywgbmlkKSkKIAkJCWN0bCA9IFBJTl9PVVQ7Ci0JCWVsc2UgaWYgKGkgPT0gQVVUT19QSU5fTUlDKQorCQllbHNlIGlmIChjZmctPmlucHV0c1tpXS50eXBlID09IEFVVE9fUElOX01JQykKIAkJCWN0bCA9IFBJTl9WUkVGNTA7CiAJCWVsc2UKIAkJCWN0bCA9IFBJTl9JTjsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmggYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbi5oCmluZGV4IGMyYWU2M2QuLmY1Mzg5N2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuLmgKKysrIGIvc291bmQvcGNpL294eWdlbi9veHlnZW4uaApAQCAtOTIsNiArOTIsOCBAQAogCXZvaWQgKCp1cGRhdGVfZGFjX3ZvbHVtZSkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKnVwZGF0ZV9kYWNfbXV0ZSkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKnVwZGF0ZV9jZW50ZXJfbGZlX21peCkoc3RydWN0IG94eWdlbiAqY2hpcCwgYm9vbCBtaXhlZCk7CisJdW5zaWduZWQgaW50ICgqYWRqdXN0X2RhY19yb3V0aW5nKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgcGxheV9yb3V0aW5nKTsKIAl2b2lkICgqZ3Bpb19jaGFuZ2VkKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwKTsKIAl2b2lkICgqdWFydF9pbnB1dCkoc3RydWN0IG94eWdlbiAqY2hpcCk7CiAJdm9pZCAoKmFjOTdfc3dpdGNoKShzdHJ1Y3Qgb3h5Z2VuICpjaGlwLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYyBiL3NvdW5kL3BjaS9veHlnZW4vb3h5Z2VuX21peGVyLmMKaW5kZXggOWJmZjE0ZC4uMjZjN2U4YiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi9veHlnZW5fbWl4ZXIuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL294eWdlbl9taXhlci5jCkBAIC0xODAsNiArMTgwLDggQEAKIAkJCSAgICAoMSA8PCBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCkgfAogCQkJICAgICgyIDw8IE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX1NISUZUKSB8CiAJCQkgICAgKDMgPDwgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfU0hJRlQpOworCWlmIChjaGlwLT5tb2RlbC5hZGp1c3RfZGFjX3JvdXRpbmcpCisJCXJlZ192YWx1ZSA9IGNoaXAtPm1vZGVsLmFkanVzdF9kYWNfcm91dGluZyhjaGlwLCByZWdfdmFsdWUpOwogCW94eWdlbl93cml0ZTE2X21hc2tlZChjaGlwLCBPWFlHRU5fUExBWV9ST1VUSU5HLCByZWdfdmFsdWUsCiAJCQkgICAgICBPWFlHRU5fUExBWV9EQUMwX1NPVVJDRV9NQVNLIHwKIAkJCSAgICAgIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX01BU0sgfApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYyBiL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfY3M0M3h4LmMKaW5kZXggOWY3MmQ0Mi4uMjUyNzE5MSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL294eWdlbi94b25hcl9jczQzeHguYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2NzNDN4eC5jCkBAIC0zOTIsNyArMzkyLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuQ1M0Mzk4OiA3PyIpOwotCWZvciAoaSA9IDI7IGkgPD0gODsgKytpKQorCWZvciAoaSA9IDI7IGkgPCA4OyArK2kpCiAJCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiAlMDJ4IiwgZGF0YS0+Y3M0Mzk4X3JlZ3NbaV0pOwogCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIlxuIik7CiAJZHVtcF9jczQzNjJhX3JlZ2lzdGVycyhkYXRhLCBidWZmZXIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jIGIvc291bmQvcGNpL294eWdlbi94b25hcl9kZy5jCmluZGV4IGUxZmE2MDIuLmJjNmViNTggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfZGcuYworKysgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX2RnLmMKQEAgLTI0LDYgKzI0LDExIEBACiAgKgogICogICBTUEkgMCAtPiBDUzQyNDUKICAqCisgKiAgIEnCslMgMSAtPiBDUzQyNDUKKyAqICAgScKyUyAyIC0+IENTNDM2MSAoY2VudGVyL0xGRSkKKyAqICAgScKyUyAzIC0+IENTNDM2MSAoc3Vycm91bmQpCisgKiAgIEnCslMgNCAtPiBDUzQzNjEgKGZyb250KQorICoKICAqICAgR1BJTyAzIDwtID8KICAqICAgR1BJTyA0IDwtIGhlYWRwaG9uZSBkZXRlY3QKICAqICAgR1BJTyA1IC0+IHJvdXRlIGlucHV0IGphY2sgdG8gbGluZS1pbiAoMCkgb3IgbWljLWluICgxKQpAQCAtMzYsNiArNDEsNyBAQAogICogICBpbnB1dCAxIDwtIGF1eAogICogICBpbnB1dCAyIDwtIGZyb250IG1pYwogICogICBpbnB1dCA0IDwtIGxpbmUvbWljCisgKiAgIERBQyBvdXQgLT4gaGVhZHBob25lcwogICogICBhdXggb3V0IC0+IGZyb250IHBhbmVsIGhlYWRwaG9uZXMKICAqLwogCkBAIC0yMDcsNiArMjEzLDM1IEBACiAJY3M0MjQ1X3dyaXRlX2NhY2hlZChjaGlwLCBDUzQyNDVfQURDX0NUUkwsIHZhbHVlKTsKIH0KIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2hpZnRfYml0cyh1bnNpZ25lZCBpbnQgdmFsdWUsCisJCQkJICAgICAgdW5zaWduZWQgaW50IHNoaWZ0X2Zyb20sCisJCQkJICAgICAgdW5zaWduZWQgaW50IHNoaWZ0X3RvLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXNrKQoreworCWlmIChzaGlmdF9mcm9tIDwgc2hpZnRfdG8pCisJCXJldHVybiAodmFsdWUgPDwgKHNoaWZ0X3RvIC0gc2hpZnRfZnJvbSkpICYgbWFzazsKKwllbHNlCisJCXJldHVybiAodmFsdWUgPj4gKHNoaWZ0X2Zyb20gLSBzaGlmdF90bykpICYgbWFzazsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhZGp1c3RfZGdfZGFjX3JvdXRpbmcoc3RydWN0IG94eWdlbiAqY2hpcCwKKwkJCQkJICB1bnNpZ25lZCBpbnQgcGxheV9yb3V0aW5nKQoreworCXJldHVybiAocGxheV9yb3V0aW5nICYgT1hZR0VOX1BMQVlfREFDMF9TT1VSQ0VfTUFTSykgfAorCSAgICAgICBzaGlmdF9iaXRzKHBsYXlfcm91dGluZywKKwkJCSAgT1hZR0VOX1BMQVlfREFDMl9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzFfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9NQVNLKSB8CisJICAgICAgIHNoaWZ0X2JpdHMocGxheV9yb3V0aW5nLAorCQkJICBPWFlHRU5fUExBWV9EQUMxX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDMl9TT1VSQ0VfU0hJRlQsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzJfU09VUkNFX01BU0spIHwKKwkgICAgICAgc2hpZnRfYml0cyhwbGF5X3JvdXRpbmcsCisJCQkgIE9YWUdFTl9QTEFZX0RBQzBfU09VUkNFX1NISUZULAorCQkJICBPWFlHRU5fUExBWV9EQUMzX1NPVVJDRV9TSElGVCwKKwkJCSAgT1hZR0VOX1BMQVlfREFDM19TT1VSQ0VfTUFTSyk7Cit9CisKIHN0YXRpYyBpbnQgb3V0cHV0X3N3aXRjaF9pbmZvKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bCwKIAkJCSAgICAgIHN0cnVjdCBzbmRfY3RsX2VsZW1faW5mbyAqaW5mbykKIHsKQEAgLTU1Nyw2ICs1OTIsNyBAQAogCS5yZXN1bWUgPSBkZ19yZXN1bWUsCiAJLnNldF9kYWNfcGFyYW1zID0gc2V0X2NzNDI0NV9kYWNfcGFyYW1zLAogCS5zZXRfYWRjX3BhcmFtcyA9IHNldF9jczQyNDVfYWRjX3BhcmFtcywKKwkuYWRqdXN0X2RhY19yb3V0aW5nID0gYWRqdXN0X2RnX2RhY19yb3V0aW5nLAogCS5kdW1wX3JlZ2lzdGVycyA9IGR1bXBfY3M0MjQ1X3JlZ2lzdGVycywKIAkubW9kZWxfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkZyksCiAJLmRldmljZV9jb25maWcgPSBQTEFZQkFDS18wX1RPX0kyUyB8CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oIGIvc291bmQvcGNtY2lhL3BkYXVkaW9jZi9wZGF1ZGlvY2YuaAppbmRleCBiZDI2ZTA5Li42Y2U5YWQ3IDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvcGRhdWRpb2NmL3BkYXVkaW9jZi5oCisrKyBiL3NvdW5kL3BjbWNpYS9wZGF1ZGlvY2YvcGRhdWRpb2NmLmgKQEAgLTIyLDcgKzIyLDcgQEAKICNkZWZpbmUgX19QREFVRElPQ0ZfSAogCiAjaW5jbHVkZSA8c291bmQvcGNtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxwY21jaWEvY2lzdHBsLmg+CiAjaW5jbHVkZSA8cGNtY2lhL2RzLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jIGIvc291bmQvcGNtY2lhL3Z4L3Z4cF9vcHMuYwppbmRleCA5ODllMDRhLi5mZTMzZTEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY21jaWEvdngvdnhwX29wcy5jCisrKyBiL3NvdW5kL3BjbWNpYS92eC92eHBfb3BzLmMKQEAgLTIzLDggKzIzLDggQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAidnhwb2NrZXQuaCIKIAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jIGIvc291bmQvc29jL2F0bWVsL3NuZC1zb2MtYWZlYjkyNjAuYwppbmRleCBkYTIyMDhlLi41ZTRkNDk5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvYXRtZWwvc25kLXNvYy1hZmViOTI2MC5jCisrKyBiL3NvdW5kL3NvYy9hdG1lbC9zbmQtc29jLWFmZWI5MjYwLmMKQEAgLTEyOSw3ICsxMjksNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYXRtZWwtc3NjLWRhaS4wIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljMjMtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAiYXRtZWxfcGNtLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ0bHYzMjBhaWMyMy1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzIzLWNvZGVjLjAtMDAxYSIsCiAJLmluaXQgPSBhZmViOTI2MF90bHYzMjBhaWMyM19pbml0LAogCS5vcHMgPSAmYWZlYjkyNjBfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMgYi9zb3VuZC9zb2MvYmxhY2tmaW4vYmY1eHgtc3NtMjYwMi5jCmluZGV4IGU5MDJiMjQuLmFkMjg2NjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9ibGFja2Zpbi9iZjV4eC1zc20yNjAyLmMKKysrIGIvc291bmQvc29jL2JsYWNrZmluL2JmNXh4LXNzbTI2MDIuYwpAQCAtMTE5LDcgKzExOSw3IEBACiAJLmNwdV9kYWlfbmFtZSA9ICJiZjV4eC1pMnMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJzc20yNjAyLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gImJmNXh4LXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAic3NtMjYwMi1jb2RlYy4wLTB4MWIiLAorCS5jb2RlY19uYW1lID0gInNzbTI2MDItY29kZWMuMC0wMDFiIiwKIAkub3BzID0gJmJmNXh4X3NzbTI2MDJfb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3E5M3ZjLmMKaW5kZXggNDZkYmZkMC4uMzQ3YTU2NyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy9jcTkzdmMuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL2NxOTN2Yy5jCkBAIC0xNTMsNyArMTUzLDcgQEAKIAogc3RhdGljIGludCBjcTkzdmNfcHJvYmUoc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBkYXZpbmNpX3ZjICpkYXZpbmNpX3ZjID0gY29kZWMtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgZGF2aW5jaV92YyAqZGF2aW5jaV92YyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOwogCiAJZGF2aW5jaV92Yy0+Y3E5M3ZjLmNvZGVjID0gY29kZWM7CiAJY29kZWMtPmNvbnRyb2xfZGF0YSA9IGRhdmluY2lfdmM7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2N4MjA0NDIuYyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCmluZGV4IDAzZDFlODYuLjBiYjQyNGEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvY3gyMDQ0Mi5jCkBAIC0zNjcsOSArMzY3LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCB1OCBjeDIwNDQyX3JlZzsKKwogc3RhdGljIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RyaXZlciBjeDIwNDQyX2NvZGVjX2RldiA9IHsKIAkucHJvYmUgPSAJY3gyMDQ0Ml9jb2RlY19wcm9iZSwKIAkucmVtb3ZlID0gCWN4MjA0NDJfY29kZWNfcmVtb3ZlLAorCS5yZWdfY2FjaGVfZGVmYXVsdCA9ICZjeDIwNDQyX3JlZywKIAkucmVnX2NhY2hlX3NpemUgPSAxLAogCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHU4KSwKIAkucmVhZCA9IGN4MjA0NDJfcmVhZF9yZWdfY2FjaGUsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCA5ODc0NzZhLi4wMTdkOTljIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTE0ODIsNyArMTQ4Miw3IEBACiAJCQkgICAgV004OTAzX01JQ0RFVF9FSU5UIHwgV004OTAzX01JQ1NIUlRfRUlOVCwKIAkJCSAgICBpcnFfbWFzayk7CiAKLQlpZiAoZGV0ICYmIHNocnQpIHsKKwlpZiAoZGV0IHx8IHNocnQpIHsKIAkJLyogRW5hYmxlIG1pYyBkZXRlY3Rpb24sIHRoaXMgbWF5IG5vdCBoYXZlIGJlZW4gc2V0IHRocm91Z2gKIAkJICogcGxhdGZvcm0gZGF0YSAoZWcsIGlmIHRoZSBkZWZhdWx0cyBhcmUgT0spLiAqLwogCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzAsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuaAppbmRleCBlODQ5MGYzLi5lM2VjMjQzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5oCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogCiAjZGVmaW5lIFdNODkwM19WTUlEX1JFU181MEsgICAgICAgICAgICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgV004OTAzX1ZNSURfUkVTXzI1MEsgICAgICAgICAgICAgICAgICAgICAgICAgMwotI2RlZmluZSBXTTg5MDNfVk1JRF9SRVNfNUsgICAgICAgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFdNODkwM19WTUlEX1JFU181SyAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKIAogLyoKICAqIFI4ICgweDA4KSAtIEFuYWxvZ3VlIERBQyAwCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYwppbmRleCAyNDdhNmE5Li40YWZiZTNiIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKQEAgLTEwNyw2ICsxMDcsMTIgQEAKIAogCWludCByZXZpc2lvbjsKIAlzdHJ1Y3Qgd204OTk0X3BkYXRhICpwZGF0YTsKKworCXVuc2lnbmVkIGludCBhaWYxY2xrX2VuYWJsZToxOworCXVuc2lnbmVkIGludCBhaWYyY2xrX2VuYWJsZToxOworCisJdW5zaWduZWQgaW50IGFpZjFjbGtfZGlzYWJsZToxOworCXVuc2lnbmVkIGludCBhaWYyY2xrX2Rpc2FibGU6MTsKIH07CiAKIHN0YXRpYyBpbnQgd204OTk0X3JlYWRhYmxlKHVuc2lnbmVkIGludCByZWcpCkBAIC0xMDA0LDYgKzEwMTAsMTEwIEBACiAJfQogfQogCitzdGF0aWMgaW50IGxhdGVfZW5hYmxlX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJaWYgKHdtODk5NC0+YWlmMWNsa19lbmFibGUpIHsKKwkJCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsCisJCQkJCSAgICBXTTg5OTRfQUlGMUNMS19FTkFfTUFTSywKKwkJCQkJICAgIFdNODk5NF9BSUYxQ0xLX0VOQSk7CisJCQl3bTg5OTQtPmFpZjFjbGtfZW5hYmxlID0gMDsKKwkJfQorCQlpZiAod204OTk0LT5haWYyY2xrX2VuYWJsZSkgeworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwKKwkJCQkJICAgIFdNODk5NF9BSUYyQ0xLX0VOQV9NQVNLLAorCQkJCQkgICAgV004OTk0X0FJRjJDTEtfRU5BKTsKKwkJCXdtODk5NC0+YWlmMmNsa19lbmFibGUgPSAwOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxhdGVfZGlzYWJsZV9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJCSAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QT1NUX1BNRDoKKwkJaWYgKHdtODk5NC0+YWlmMWNsa19kaXNhYmxlKSB7CisJCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLAorCQkJCQkgICAgV004OTk0X0FJRjFDTEtfRU5BX01BU0ssIDApOworCQkJd204OTk0LT5haWYxY2xrX2Rpc2FibGUgPSAwOworCQl9CisJCWlmICh3bTg5OTQtPmFpZjJjbGtfZGlzYWJsZSkgeworCQkJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMSwKKwkJCQkJICAgIFdNODk5NF9BSUYyQ0xLX0VOQV9NQVNLLCAwKTsKKwkJCXdtODk5NC0+YWlmMmNsa19kaXNhYmxlID0gMDsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaWYxY2xrX2V2KHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0ICp3LAorCQkgICAgICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXN0cnVjdCB3bTg5OTRfcHJpdiAqd204OTk0ID0gc25kX3NvY19jb2RlY19nZXRfZHJ2ZGF0YShjb2RlYyk7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBTTkRfU09DX0RBUE1fUFJFX1BNVToKKwkJd204OTk0LT5haWYxY2xrX2VuYWJsZSA9IDE7CisJCWJyZWFrOworCWNhc2UgU05EX1NPQ19EQVBNX1BPU1RfUE1EOgorCQl3bTg5OTQtPmFpZjFjbGtfZGlzYWJsZSA9IDE7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFpZjJjbGtfZXYoc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKncsCisJCSAgICAgIHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLCBpbnQgZXZlbnQpCit7CisJc3RydWN0IHNuZF9zb2NfY29kZWMgKmNvZGVjID0gdy0+Y29kZWM7CisJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFNORF9TT0NfREFQTV9QUkVfUE1VOgorCQl3bTg5OTQtPmFpZjJjbGtfZW5hYmxlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTTkRfU09DX0RBUE1fUE9TVF9QTUQ6CisJCXdtODk5NC0+YWlmMmNsa19kaXNhYmxlID0gMTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRjX211eF9ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICAgICAgc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsIGludCBldmVudCkKK3sKKwlsYXRlX2VuYWJsZV9ldih3LCBrY29udHJvbCwgZXZlbnQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRhY19ldihzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCAqdywKKwkJICBzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwgaW50IGV2ZW50KQoreworCXN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYyA9IHctPmNvZGVjOworCXVuc2lnbmVkIGludCBtYXNrID0gMSA8PCB3LT5zaGlmdDsKKworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsCisJCQkgICAgbWFzaywgbWFzayk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpocF9tdXhfdGV4dFtdID0gewogCSJNaXhlciIsCiAJIkRBQyIsCkBAIC0xMjcyLDYgKzEzODIsNTkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX2tjb250cm9sX25ldyBhaWYyZGFjcl9zcmNfbXV4ID0KIAlTT0NfREFQTV9FTlVNKCJBSUYyREFDUiBNdXgiLCBhaWYyZGFjcl9zcmNfZW51bSk7CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTRfbGF0ZWNsa19yZXZkX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBTTkRfU09DX05PUE0sIDAsIDAsIGFpZjFjbGtfZXYsCisJU05EX1NPQ19EQVBNX1BSRV9QTVUgfCBTTkRfU09DX0RBUE1fUE9TVF9QTUQpLAorU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFNORF9TT0NfTk9QTSwgMCwgMCwgYWlmMmNsa19ldiwKKwlTTkRfU09DX0RBUE1fUFJFX1BNVSB8IFNORF9TT0NfREFQTV9QT1NUX1BNRCksCisKK1NORF9TT0NfREFQTV9QR0FfRSgiTGF0ZSBEQUMxTCBFbmFibGUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCWxhdGVfZW5hYmxlX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fUEdBX0UoIkxhdGUgREFDMVIgRW5hYmxlIFBHQSIsIFNORF9TT0NfTk9QTSwgMCwgMCwgTlVMTCwgMCwKKwlsYXRlX2VuYWJsZV9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX1BHQV9FKCJMYXRlIERBQzJMIEVuYWJsZSBQR0EiLCBTTkRfU09DX05PUE0sIDAsIDAsIE5VTEwsIDAsCisJbGF0ZV9lbmFibGVfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKK1NORF9TT0NfREFQTV9QR0FfRSgiTGF0ZSBEQUMyUiBFbmFibGUgUEdBIiwgU05EX1NPQ19OT1BNLCAwLCAwLCBOVUxMLCAwLAorCWxhdGVfZW5hYmxlX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCisKK1NORF9TT0NfREFQTV9QT1NUKCJMYXRlIERpc2FibGUgUEdBIiwgbGF0ZV9kaXNhYmxlX2V2KQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9sYXRlY2xrX3dpZGdldHNbXSA9IHsKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjFDTEsiLCBXTTg5OTRfQUlGMV9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9TVVBQTFkoIkFJRjJDTEsiLCBXTTg5OTRfQUlGMl9DTE9DS0lOR18xLCAwLCAwLCBOVUxMLCAwKQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYWNfcmV2ZF93aWRnZXRzW10gPSB7CitTTkRfU09DX0RBUE1fREFDX0UoIkRBQzJMIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAzLCAwLAorCWRhY19ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX0RBQ19FKCJEQUMyUiIsIE5VTEwsIFNORF9TT0NfTk9QTSwgMiwgMCwKKwlkYWNfZXYsIFNORF9TT0NfREFQTV9QUkVfUE1VKSwKK1NORF9TT0NfREFQTV9EQUNfRSgiREFDMUwiLCBOVUxMLCBTTkRfU09DX05PUE0sIDEsIDAsCisJZGFjX2V2LCBTTkRfU09DX0RBUE1fUFJFX1BNVSksCitTTkRfU09DX0RBUE1fREFDX0UoIkRBQzFSIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAwLCAwLAorCWRhY19ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYWNfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX0RBQygiREFDMkwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAzLCAwKSwKK1NORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMiwgMCksCitTTkRfU09DX0RBUE1fREFDKCJEQUMxTCIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDEsIDApLAorU05EX1NPQ19EQVBNX0RBQygiREFDMVIiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAwLCAwKSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3dpZGdldCB3bTg5OTRfYWRjX3JldmRfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01VWF9FKCJBRENMIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDAsICZhZGNsX211eCwKKwkJICAgYWRjX211eF9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorU05EX1NPQ19EQVBNX01VWF9FKCJBRENSIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDAsICZhZGNyX211eCwKKwkJICAgYWRjX211eF9ldiwgU05EX1NPQ19EQVBNX1BSRV9QTVUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9hZGNfd2lkZ2V0c1tdID0geworU05EX1NPQ19EQVBNX01VWCgiQURDTCBNdXgiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAxLCAwLCAmYWRjbF9tdXgpLAorU05EX1NPQ19EQVBNX01VWCgiQURDUiBNdXgiLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCAwLCAwLCAmYWRjcl9tdXgpLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fd2lkZ2V0IHdtODk5NF9kYXBtX3dpZGdldHNbXSA9IHsKIFNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzFEQVQiKSwKIFNORF9TT0NfREFQTV9JTlBVVCgiRE1JQzJEQVQiKSwKQEAgLTEyODQsMTIgKzE0NDcsOSBAQAogU05EX1NPQ19EQVBNX1NVUFBMWSgiRFNQMkNMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAyLCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9TVVBQTFkoIkRTUElOVENMSyIsIFdNODk5NF9DTE9DS0lOR18xLCAxLCAwLCBOVUxMLCAwKSwKIAotU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMUNMSyIsIFdNODk5NF9BSUYxX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1NVUFBMWSgiQUlGMkNMSyIsIFdNODk5NF9BSUYyX0NMT0NLSU5HXzEsIDAsIDAsIE5VTEwsIDApLAotCi1TTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFMIiwgIkFJRjEgQ2FwdHVyZSIsCitTTkRfU09DX0RBUE1fQUlGX09VVCgiQUlGMUFEQzFMIiwgTlVMTCwKIAkJICAgICAwLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80LCA5LCAwKSwKLVNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMVIiLCAiQUlGMSBDYXB0dXJlIiwKK1NORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYxQURDMVIiLCBOVUxMLAogCQkgICAgIDAsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDgsIDApLAogU05EX1NPQ19EQVBNX0FJRl9JTl9FKCJBSUYxREFDMUwiLCBOVUxMLCAwLAogCQkgICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCA5LCAwLCB3bTg5NThfYWlmX2V2LApAQCAtMTI5OCw5ICsxNDU4LDkgQEAKIAkJICAgICAgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgOCwgMCwgd204OTU4X2FpZl9ldiwKIAkJICAgICAgU05EX1NPQ19EQVBNX1BPU1RfUE1VIHwgU05EX1NPQ19EQVBNX1BPU1RfUE1EKSwKIAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyTCIsICJBSUYxIENhcHR1cmUiLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyTCIsIE5VTEwsCiAJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTEsIDApLAotU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyUiIsICJBSUYxIENhcHR1cmUiLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBREMyUiIsIE5VTEwsCiAJCSAgICAgMCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNCwgMTAsIDApLAogU05EX1NPQ19EQVBNX0FJRl9JTl9FKCJBSUYxREFDMkwiLCBOVUxMLCAwLAogCQkgICAgICBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxMSwgMCwgd204OTU4X2FpZl9ldiwKQEAgLTEzNDUsNiArMTUwNSw3IEBACiAKIFNORF9TT0NfREFQTV9BSUZfSU4oIkFJRjFEQUNEQVQiLCAiQUlGMSBQbGF5YmFjayIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCiBTTkRfU09DX0RBUE1fQUlGX0lOKCJBSUYyREFDREFUIiwgIkFJRjIgUGxheWJhY2siLCAwLCBTTkRfU09DX05PUE0sIDAsIDApLAorU05EX1NPQ19EQVBNX0FJRl9PVVQoIkFJRjFBRENEQVQiLCAiQUlGMSBDYXB0dXJlIiwgMCwgU05EX1NPQ19OT1BNLCAwLCAwKSwKIFNORF9TT0NfREFQTV9BSUZfT1VUKCJBSUYyQURDREFUIiwgIkFJRjIgQ2FwdHVyZSIsIDAsIFNORF9TT0NfTk9QTSwgMCwgMCksCiAKIFNORF9TT0NfREFQTV9NVVgoIkFJRjFEQUMgTXV4IiwgU05EX1NPQ19OT1BNLCAwLCAwLCAmYWlmMWRhY19tdXgpLApAQCAtMTM2OCwxNCArMTUyOSw2IEBACiBTTkRfU09DX0RBUE1fQURDKCJBRENMIiwgTlVMTCwgU05EX1NPQ19OT1BNLCAxLCAwKSwKIFNORF9TT0NfREFQTV9BREMoIkFEQ1IiLCBOVUxMLCBTTkRfU09DX05PUE0sIDAsIDApLAogCi1TTkRfU09DX0RBUE1fTVVYKCJBRENMIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDEsIDAsICZhZGNsX211eCksCi1TTkRfU09DX0RBUE1fTVVYKCJBRENSIE11eCIsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzQsIDAsIDAsICZhZGNyX211eCksCi0KLVNORF9TT0NfREFQTV9EQUMoIkRBQzJMIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMywgMCksCi1TTkRfU09DX0RBUE1fREFDKCJEQUMyUiIsIE5VTEwsIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUsIDIsIDApLAotU05EX1NPQ19EQVBNX0RBQygiREFDMUwiLCBOVUxMLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LCAxLCAwKSwKLVNORF9TT0NfREFQTV9EQUMoIkRBQzFSIiwgTlVMTCwgV004OTk0X1BPV0VSX01BTkFHRU1FTlRfNSwgMCwgMCksCi0KIFNORF9TT0NfREFQTV9NVVgoIkxlZnQgSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwbF9tdXgpLAogU05EX1NPQ19EQVBNX01VWCgiUmlnaHQgSGVhZHBob25lIE11eCIsIFNORF9TT0NfTk9QTSwgMCwgMCwgJmhwcl9tdXgpLAogCkBAIC0xNTE1LDE0ICsxNjY4LDEyIEBACiAJeyAiQUlGMkFEQyBNdXgiLCAiQUlGM0RBQ0RBVCIsICJBSUYzQURDREFUIiB9LAogCiAJLyogREFDMSBpbnB1dHMgKi8KLQl7ICJEQUMxTCIsIE5VTEwsICJEQUMxTCBNaXhlciIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJBSUYyIFN3aXRjaCIsICJBSUYyREFDTCIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJBSUYxLjEgU3dpdGNoIiwgIkFJRjFEQUMxTCIgfSwKIAl7ICJEQUMxTCBNaXhlciIsICJMZWZ0IFNpZGV0b25lIFN3aXRjaCIsICJMZWZ0IFNpZGV0b25lIiB9LAogCXsgIkRBQzFMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKIAotCXsgIkRBQzFSIiwgTlVMTCwgIkRBQzFSIE1peGVyIiB9LAogCXsgIkRBQzFSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAogCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMiBTd2l0Y2giLCAiQUlGMURBQzJSIiB9LAogCXsgIkRBQzFSIE1peGVyIiwgIkFJRjEuMSBTd2l0Y2giLCAiQUlGMURBQzFSIiB9LApAQCAtMTUzMSw3ICsxNjgyLDYgQEAKIAogCS8qIERBQzIvQUlGMiBvdXRwdXRzICAqLwogCXsgIkFJRjJBRENMIiwgTlVMTCwgIkFJRjJEQUMyTCBNaXhlciIgfSwKLQl7ICJEQUMyTCIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCiAJeyAiQUlGMkRBQzJMIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNMIiB9LAogCXsgIkFJRjJEQUMyTCBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyTCIgfSwKIAl7ICJBSUYyREFDMkwgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMUwiIH0sCkBAIC0xNTM5LDEzICsxNjg5LDE3IEBACiAJeyAiQUlGMkRBQzJMIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKIAogCXsgIkFJRjJBRENSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKLQl7ICJEQUMyUiIsIE5VTEwsICJBSUYyREFDMlIgTWl4ZXIiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkFJRjIgU3dpdGNoIiwgIkFJRjJEQUNSIiB9LAogCXsgIkFJRjJEQUMyUiBNaXhlciIsICJBSUYxLjIgU3dpdGNoIiwgIkFJRjFEQUMyUiIgfSwKIAl7ICJBSUYyREFDMlIgTWl4ZXIiLCAiQUlGMS4xIFN3aXRjaCIsICJBSUYxREFDMVIiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIkxlZnQgU2lkZXRvbmUgU3dpdGNoIiwgIkxlZnQgU2lkZXRvbmUiIH0sCiAJeyAiQUlGMkRBQzJSIE1peGVyIiwgIlJpZ2h0IFNpZGV0b25lIFN3aXRjaCIsICJSaWdodCBTaWRldG9uZSIgfSwKIAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzFMIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzFSIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzJMIiB9LAorCXsgIkFJRjFBRENEQVQiLCBOVUxMLCAiQUlGMUFEQzJSIiB9LAorCiAJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYyQURDIE11eCIgfSwKIAogCS8qIEFJRjMgb3V0cHV0ICovCkBAIC0xNTc4LDYgKzE3MzIsMzEgQEAKIAl7ICJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIkRBQyIsICJEQUMxUiIgfSwKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9sYXRlY2xrX3JldmRfaW50ZXJjb25bXSA9IHsKKwl7ICJEQUMxTCIsIE5VTEwsICJMYXRlIERBQzFMIEVuYWJsZSBQR0EiIH0sCisJeyAiTGF0ZSBEQUMxTCBFbmFibGUgUEdBIiwgTlVMTCwgIkRBQzFMIE1peGVyIiB9LAorCXsgIkRBQzFSIiwgTlVMTCwgIkxhdGUgREFDMVIgRW5hYmxlIFBHQSIgfSwKKwl7ICJMYXRlIERBQzFSIEVuYWJsZSBQR0EiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiTGF0ZSBEQUMyTCBFbmFibGUgUEdBIiB9LAorCXsgIkxhdGUgREFDMkwgRW5hYmxlIFBHQSIsIE5VTEwsICJBSUYyREFDMkwgTWl4ZXIiIH0sCisJeyAiREFDMlIiLCBOVUxMLCAiTGF0ZSBEQUMyUiBFbmFibGUgUEdBIiB9LAorCXsgIkxhdGUgREFDMlIgRW5hYmxlIFBHQSIsIE5VTEwsICJBSUYyREFDMlIgTWl4ZXIiIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9sYXRlY2xrX2ludGVyY29uW10gPSB7CisJeyAiREFDMUwiLCBOVUxMLCAiREFDMUwgTWl4ZXIiIH0sCisJeyAiREFDMVIiLCBOVUxMLCAiREFDMVIgTWl4ZXIiIH0sCisJeyAiREFDMkwiLCBOVUxMLCAiQUlGMkRBQzJMIE1peGVyIiB9LAorCXsgIkRBQzJSIiwgTlVMTCwgIkFJRjJEQUMyUiBNaXhlciIgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25kX3NvY19kYXBtX3JvdXRlIHdtODk5NF9yZXZkX2ludGVyY29uW10gPSB7CisJeyAiQUlGMURBQ0RBVCIsIE5VTEwsICJBSUYyREFDREFUIiB9LAorCXsgIkFJRjJEQUNEQVQiLCBOVUxMLCAiQUlGMURBQ0RBVCIgfSwKKwl7ICJBSUYxQURDREFUIiwgTlVMTCwgIkFJRjJBRENEQVQiIH0sCisJeyAiQUlGMkFEQ0RBVCIsIE5VTEwsICJBSUYxQURDREFUIiB9LAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfc29jX2RhcG1fcm91dGUgd204OTk0X2ludGVyY29uW10gPSB7CiAJeyAiQUlGMkRBQ0wiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCiAJeyAiQUlGMkRBQ1IiLCBOVUxMLCAiQUlGMkRBQyBNdXgiIH0sCkBAIC0yMzg2LDcgKzI1NjUsNyBAQAogCWVsc2UKIAkJdmFsID0gMDsKIAotCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHJlZyk7CisJcmV0dXJuIHNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIHJlZywgbWFzaywgdmFsKTsKIH0KIAogI2RlZmluZSBXTTg5OTRfUkFURVMgU05EUlZfUENNX1JBVEVfODAwMF85NjAwMApAQCAtMjUwMSw2ICsyNjgwLDIyIEBACiB7CiAJc3RydWN0IHdtODk5NF9wcml2ICp3bTg5OTQgPSBzbmRfc29jX2NvZGVjX2dldF9kcnZkYXRhKGNvZGVjKTsKIAlpbnQgaSwgcmV0OworCXVuc2lnbmVkIGludCB2YWwsIG1hc2s7CisKKwlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKKwkJLyogZm9yY2UgYSBIVyByZWFkICovCisJCXZhbCA9IHdtODk5NF9yZWdfcmVhZChjb2RlYy0+Y29udHJvbF9kYXRhLAorCQkJCSAgICAgIFdNODk5NF9QT1dFUl9NQU5BR0VNRU5UXzUpOworCisJCS8qIG1vZGlmeSB0aGUgY2FjaGUgb25seSAqLworCQljb2RlYy0+Y2FjaGVfb25seSA9IDE7CisJCW1hc2sgPSAgV004OTk0X0RBQzFSX0VOQSB8IFdNODk5NF9EQUMxTF9FTkEgfAorCQkJV004OTk0X0RBQzJSX0VOQSB8IFdNODk5NF9EQUMyTF9FTkE7CisJCXZhbCAmPSBtYXNrOworCQlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81LAorCQkJCSAgICBtYXNrLCB2YWwpOworCQljb2RlYy0+Y2FjaGVfb25seSA9IDA7CisJfQogCiAJLyogUmVzdG9yZSB0aGUgcmVnaXN0ZXJzICovCiAJcmV0ID0gc25kX3NvY19jYWNoZV9zeW5jKGNvZGVjKTsKQEAgLTI4MzQsMTEgKzMwMjksMTAgQEAKIAkJcmVwb3J0IHw9IFNORF9KQUNLX0JUTl81OwogCiBkb25lOgotCXNuZF9zb2NfamFja19yZXBvcnQod204OTk0LT5taWNkZXRbMF0uamFjaywKKwlzbmRfc29jX2phY2tfcmVwb3J0KHdtODk5NC0+bWljZGV0WzBdLmphY2ssIHJlcG9ydCwKIAkJCSAgICBTTkRfSkFDS19CVE5fMCB8IFNORF9KQUNLX0JUTl8xIHwgU05EX0pBQ0tfQlROXzIgfAogCQkJICAgIFNORF9KQUNLX0JUTl8zIHwgU05EX0pBQ0tfQlROXzQgfCBTTkRfSkFDS19CVE5fNSB8Ci0JCQkgICAgU05EX0pBQ0tfTUlDUk9QSE9ORSB8IFNORF9KQUNLX1ZJREVPT1VULAotCQkJICAgIHJlcG9ydCk7CisJCQkgICAgU05EX0pBQ0tfTUlDUk9QSE9ORSB8IFNORF9KQUNLX1ZJREVPT1VUKTsKIH0KIAogLyoqCkBAIC0zMTEyLDYgKzMzMDYsMjEgQEAKIAljYXNlIFdNODk5NDoKIAkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfc3BlY2lmaWNfZGFwbV93aWRnZXRzLAogCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X3NwZWNpZmljX2RhcG1fd2lkZ2V0cykpOworCQlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2xhdGVjbGtfcmV2ZF93aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX3JldmRfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfYWRjX3JldmRfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfYWRjX3JldmRfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfZGFjX3JldmRfd2lkZ2V0cywKKwkJCQkJCSAgQVJSQVlfU0laRSh3bTg5OTRfZGFjX3JldmRfd2lkZ2V0cykpOworCQl9IGVsc2UgeworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfbGF0ZWNsa193aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX3dpZGdldHMpKTsKKwkJCXNuZF9zb2NfZGFwbV9uZXdfY29udHJvbHMoZGFwbSwgd204OTk0X2FkY193aWRnZXRzLAorCQkJCQkJICBBUlJBWV9TSVpFKHdtODk5NF9hZGNfd2lkZ2V0cykpOworCQkJc25kX3NvY19kYXBtX25ld19jb250cm9scyhkYXBtLCB3bTg5OTRfZGFjX3dpZGdldHMsCisJCQkJCQkgIEFSUkFZX1NJWkUod204OTk0X2RhY193aWRnZXRzKSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5NTg6CiAJCXNuZF9zb2NfYWRkX2NvbnRyb2xzKGNvZGVjLCB3bTg5NThfc25kX2NvbnRyb2xzLApAQCAtMzEyOSw2ICszMzM4LDE2IEBACiAJY2FzZSBXTTg5OTQ6CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9pbnRlcmNvbiwKIAkJCQkJQVJSQVlfU0laRSh3bTg5OTRfaW50ZXJjb24pKTsKKworCQlpZiAod204OTk0LT5yZXZpc2lvbiA8IDQpIHsKKwkJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk5NF9yZXZkX2ludGVyY29uLAorCQkJCQkJQVJSQVlfU0laRSh3bTg5OTRfcmV2ZF9pbnRlcmNvbikpOworCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X2xhdGVjbGtfcmV2ZF9pbnRlcmNvbiwKKwkJCQkJCUFSUkFZX1NJWkUod204OTk0X2xhdGVjbGtfcmV2ZF9pbnRlcmNvbikpOworCQl9IGVsc2UgeworCQkJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgd204OTk0X2xhdGVjbGtfaW50ZXJjb24sCisJCQkJCQlBUlJBWV9TSVpFKHdtODk5NF9sYXRlY2xrX2ludGVyY29uKSk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBXTTg5NTg6CiAJCXNuZF9zb2NfZGFwbV9hZGRfcm91dGVzKGRhcG0sIHdtODk1OF9pbnRlcmNvbiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NS5jCmluZGV4IDYwNDVjYmQuLjYwOGM4NGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk1LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bTg5OTUuYwpAQCAtMTIyMyw3ICsxMjIzLDcgQEAKIAllbHNlCiAJCXZhbCA9IDA7CiAKLQlyZXR1cm4gc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgcmVnLCBtYXNrLCByZWcpOworCXJldHVybiBzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCByZWcsIG1hc2ssIHZhbCk7CiB9CiAKIC8qIFRoZSBzaXplIGluIGJpdHMgb2YgdGhlIEZMTCBkaXZpZGUgbXVsdGlwbGllZCBieSAxMApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd205MDgxLmMKaW5kZXggNDM4MjViMi4uY2NlNzA0YyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTkwODEuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtOTA4MS5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgpAQCAtMTM0MSw2ICsxMzQyLDEwIEBACiAJd205MDgxLT5jb250cm9sX3R5cGUgPSBTTkRfU09DX0kyQzsKIAl3bTkwODEtPmNvbnRyb2xfZGF0YSA9IGkyYzsKIAorCWlmIChkZXZfZ2V0X3BsYXRkYXRhKCZpMmMtPmRldikpCisJCW1lbWNweSgmd205MDgxLT5yZXR1bmUsIGRldl9nZXRfcGxhdGRhdGEoJmkyYy0+ZGV2KSwKKwkJICAgICAgIHNpemVvZih3bTkwODEtPnJldHVuZSkpOworCiAJcmV0ID0gc25kX3NvY19yZWdpc3Rlcl9jb2RlYygmaTJjLT5kZXYsCiAJCQkmc29jX2NvZGVjX2Rldl93bTkwODEsICZ3bTkwODFfZGFpLCAxKTsKIAlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggYzQ2Njk4Mi4uNTE2ODkyNyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTkxLDYgKzkxLDcgQEAKIHN0YXRpYyB2b2lkIGNhbGlicmF0ZV9kY19zZXJ2byhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IHdtX2h1YnNfZGF0YSAqaHVicyA9IHNuZF9zb2NfY29kZWNfZ2V0X2RydmRhdGEoY29kZWMpOworCXM4IG9mZnNldDsKIAl1MTYgcmVnLCByZWdfbCwgcmVnX3IsIGRjc19jZmc7CiAKIAkvKiBJZiB3ZSdyZSB1c2luZyBhIGRpZ2l0YWwgb25seSBwYXRoIGFuZCBoYXZlIGEgcHJldmlvdXNseQpAQCAtMTQ5LDE2ICsxNTAsMTQgQEAKIAkJCWh1YnMtPmRjc19jb2Rlcyk7CiAKIAkJLyogSFBPVVQxTCAqLwotCQlpZiAocmVnX2wgKyBodWJzLT5kY3NfY29kZXMgPiAwICYmCi0JCSAgICByZWdfbCArIGh1YnMtPmRjc19jb2RlcyA8IDB4ZmYpCi0JCQlyZWdfbCArPSBodWJzLT5kY3NfY29kZXM7Ci0JCWRjc19jZmcgPSByZWdfbCA8PCBXTTg5OTNfRENTX0RBQ19XUl9WQUxfMV9TSElGVDsKKwkJb2Zmc2V0ID0gcmVnX2w7CisJCW9mZnNldCArPSBodWJzLT5kY3NfY29kZXM7CisJCWRjc19jZmcgPSAodTgpb2Zmc2V0IDw8IFdNODk5M19EQ1NfREFDX1dSX1ZBTF8xX1NISUZUOwogCiAJCS8qIEhQT1VUMVIgKi8KLQkJaWYgKHJlZ19yICsgaHVicy0+ZGNzX2NvZGVzID4gMCAmJgotCQkgICAgcmVnX3IgKyBodWJzLT5kY3NfY29kZXMgPCAweGZmKQotCQkJcmVnX3IgKz0gaHVicy0+ZGNzX2NvZGVzOwotCQlkY3NfY2ZnIHw9IHJlZ19yOworCQlvZmZzZXQgPSByZWdfcjsKKwkJb2Zmc2V0ICs9IGh1YnMtPmRjc19jb2RlczsKKwkJZGNzX2NmZyB8PSAodTgpb2Zmc2V0OwogCiAJCWRldl9kYmcoY29kZWMtPmRldiwgIkRDUyByZXN1bHQ6ICV4XG4iLCBkY3NfY2ZnKTsKIApAQCAtNjc1LDYgKzY3NCw5IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9zb2NfZGFwbV9yb3V0ZSBhbmFsb2d1ZV9yb3V0ZXNbXSA9IHsKKwl7ICJNSUNCSUFTMSIsIE5VTEwsICJDTEtfU1lTIiB9LAorCXsgIk1JQ0JJQVMyIiwgTlVMTCwgIkNMS19TWVMiIH0sCisKIAl7ICJJTjFMIFBHQSIsICJJTjFMUCBTd2l0Y2giLCAiSU4xTFAiIH0sCiAJeyAiSU4xTCBQR0EiLCAiSU4xTE4gU3dpdGNoIiwgIklOMUxOIiB9LAogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jIGIvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1ldm0uYwppbmRleCAwYzJkNmJhLi5mZTc5ODQyIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLWV2bS5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktZXZtLmMKQEAgLTIxOCwxMiArMjE4LDI0IEBACiAJCS5vcHMgPSAmZXZtX3NwZGlmX29wcywKIAl9LAogfTsKLXN0YXRpYyBzdHJ1Y3Qgc25kX3NvY19kYWlfbGluayBkYTh4eF9ldm1fZGFpID0geworCitzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgZGE4MzBfZXZtX2RhaSA9IHsKKwkubmFtZSA9ICJUTFYzMjBBSUMzWCIsCisJLnN0cmVhbV9uYW1lID0gIkFJQzNYIiwKKwkuY3B1X2RhaV9uYW1lID0gImRhdmluY2ktbWNhc3AuMSIsCisJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAorCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjEtMDAxOCIsCisJLnBsYXRmb3JtX25hbWUgPSAiZGF2aW5jaS1wY20tYXVkaW8iLAorCS5pbml0ID0gZXZtX2FpYzN4X2luaXQsCisJLm9wcyA9ICZldm1fb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIGRhODUwX2V2bV9kYWkgPSB7CiAJLm5hbWUgPSAiVExWMzIwQUlDM1giLAogCS5zdHJlYW1fbmFtZSA9ICJBSUMzWCIsCiAJLmNwdV9kYWlfbmFtZT0gImRhdmluY2ktbWNhc3AuMCIsCiAJLmNvZGVjX2RhaV9uYW1lID0gInRsdjMyMGFpYzN4LWhpZmkiLAotCS5jb2RlY19uYW1lID0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAidGx2MzIwYWljM3gtY29kZWMuMS0wMDE4IiwKIAkucGxhdGZvcm1fbmFtZSA9ICJkYXZpbmNpLXBjbS1hdWRpbyIsCiAJLmluaXQgPSBldm1fYWljM3hfaW5pdCwKIAkub3BzID0gJmV2bV9vcHMsCkBAIC0yNTksMTMgKzI3MSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYTgzMF9zbmRfc29jX2NhcmQgPSB7CiAJLm5hbWUgPSAiREE4MzAvT01BUC1MMTM3IEVWTSIsCi0JLmRhaV9saW5rID0gJmRhOHh4X2V2bV9kYWksCisJLmRhaV9saW5rID0gJmRhODMwX2V2bV9kYWksCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfY2FyZCBkYTg1MF9zbmRfc29jX2NhcmQgPSB7CiAJLm5hbWUgPSAiREE4NTAvT01BUC1MMTM4IEVWTSIsCi0JLmRhaV9saW5rID0gJmRhOHh4X2V2bV9kYWksCisJLmRhaV9saW5rID0gJmRhODUwX2V2bV9kYWksCiAJLm51bV9saW5rcyA9IDEsCiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvaW14L2V1a3JlYS10bHYzMjAuYyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCmluZGV4IGUyMGM5ZTEuLjFlOWJjY2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCisrKyBiL3NvdW5kL3NvYy9pbXgvZXVrcmVhLXRsdjMyMC5jCkBAIC03OSw3ICs3OSw3IEBACiAJLm5hbWUJCT0gInRsdjMyMGFpYzIzIiwKIAkuc3RyZWFtX25hbWUJPSAiVExWMzIwQUlDMjMiLAogCS5jb2RlY19kYWlfbmFtZQk9ICJ0bHYzMjBhaWMyMy1oaWZpIiwKLQkucGxhdGZvcm1fbmFtZQk9ICJpbXgtcGNtLWF1ZGlvLjAiLAorCS5wbGF0Zm9ybV9uYW1lCT0gImlteC1maXEtcGNtLWF1ZGlvLjAiLAogCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzIzLWNvZGVjLjAtMDAxYSIsCiAJLmNwdV9kYWlfbmFtZQk9ICJpbXgtc3NpLjAiLAogCS5vcHMJCT0gJmV1a3JlYV90bHYzMjBfc25kX29wcywKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9vbWFwL2Ftcy1kZWx0YS5jIGIvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKaW5kZXggMjEwMWJkYy4uMzE2N2JlNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKKysrIGIvc291bmQvc29jL29tYXAvYW1zLWRlbHRhLmMKQEAgLTUwNyw4ICs1MDcsNiBAQAogCS8qIFNldCB1cCBkaWdpdGFsIG11dGUgaWYgbm90IHByb3ZpZGVkIGJ5IHRoZSBjb2RlYyAqLwogCWlmICghY29kZWNfZGFpLT5kcml2ZXItPm9wcykgewogCQljb2RlY19kYWktPmRyaXZlci0+b3BzID0gJmFtc19kZWx0YV9kYWlfb3BzOwotCX0gZWxzZSBpZiAoIWNvZGVjX2RhaS0+ZHJpdmVyLT5vcHMtPmRpZ2l0YWxfbXV0ZSkgewotCQljb2RlY19kYWktPmRyaXZlci0+b3BzLT5kaWdpdGFsX211dGUgPSBhbXNfZGVsdGFfZGlnaXRhbF9tdXRlOwogCX0gZWxzZSB7CiAJCWFtc19kZWx0YV9vcHMuc3RhcnR1cCA9IGFtc19kZWx0YV9zdGFydHVwOwogCQlhbXNfZGVsdGFfb3BzLnNodXRkb3duID0gYW1zX2RlbHRhX3NodXRkb3duOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9jb3JnaS5jIGIvc291bmQvc29jL3B4YS9jb3JnaS5jCmluZGV4IGZjNTkyZjAuLjc4NGNmZjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvY29yZ2kuYworKysgYi9zb3VuZC9zb2MvcHhhL2NvcmdpLmMKQEAgLTMwNywxMCArMzA3LDEwIEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgY29yZ2lfZGFpID0gewogCS5uYW1lID0gIldNODczMSIsCiAJLnN0cmVhbV9uYW1lID0gIldNODczMSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtaXMyLWRhaSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzMxLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy0wLjAwMWEiLAorCS5jb2RlY19uYW1lID0gIndtODczMS1jb2RlYy0wLjAwMWIiLAogCS5pbml0ID0gY29yZ2lfd204NzMxX2luaXQsCiAJLm9wcyA9ICZjb3JnaV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzQwX3dtOTcwNS5jCmluZGV4IDI4MzMzZTcuLmRjNjU2NTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTc0MF93bTk3MDUuYworKysgYi9zb3VuZC9zb2MvcHhhL2U3NDBfd205NzA1LmMKQEAgLTExNyw3ICsxMTcsNyBAQAogCXsKIAkJLm5hbWUgPSAiQUM5NyIsCiAJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjAiLAorCQkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkJLmNvZGVjX2RhaV9uYW1lID0gIndtOTcwNS1oaWZpIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcwNS1jb2RlYyIsCkBAIC0xMjYsNyArMTI2LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzA1LWF1eCIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MDUtY29kZWMiLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jIGIvc291bmQvc29jL3B4YS9lNzUwX3dtOTcwNS5jCmluZGV4IDAxYmYzMTYuLjUxODk3ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZTc1MF93bTk3MDUuYworKysgYi9zb3VuZC9zb2MvcHhhL2U3NTBfd205NzA1LmMKQEAgLTk5LDcgKzk5LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTciLAogCQkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MDUtaGlmaSIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MDUtY29kZWMiLApAQCAtMTA5LDcgKzEwOSw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IEF1eCIsCiAJCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEF1eCIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKIAkJLmNvZGVjX2RhaV9uYW1lID0id205NzA1LWF1eCIsCiAJCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MDUtY29kZWMiLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCmluZGV4IGM2YTM3YzZlLi4wNTNlZDIwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL2U4MDBfd205NzEyLmMKKysrIGIvc291bmQvc29jL3B4YS9lODAwX3dtOTcxMi5jCkBAIC04OSw3ICs4OSw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKQEAgLTk4LDcgKzk4LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MTItYXV4IiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL2VtLXgyNzAuYyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCmluZGV4IGZjMjJlNmUuLmIxM2E0MjUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCisrKyBiL3NvdW5kL3NvYy9weGEvZW0teDI3MC5jCkBAIC0zNyw3ICszNyw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWhpZmkiLAogCQkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKQEAgLTQ1LDcgKzQ1LDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MTItYXV4IiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMgYi9zb3VuZC9zb2MvcHhhL21pb2E3MDFfd205NzEzLmMKaW5kZXggMGQ3MGZjOC4uMzhjYTY3NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9taW9hNzAxX3dtOTcxMy5jCisrKyBiL3NvdW5kL3NvYy9weGEvbWlvYTcwMV93bTk3MTMuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJewogCQkubmFtZSA9ICJBQzk3IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTciLAogCQkuY29kZWNfZGFpX25hbWUgPSAid205NzEzLWhpZmkiLAogCQkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCQkuaW5pdCA9IG1pb2E3MDFfd205NzEzX2luaXQsCkBAIC0xNzIsNyArMTcyLDcgQEAKIAl7CiAJCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkJLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4xIiwKKwkJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCQkuY29kZWNfZGFpX25hbWUgPSJ3bTk3MTMtYXV4IiwKIAkJLmNvZGVjX25hbWUgPSAid205NzEzLWNvZGVjIiwKIAkJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvcHhhL3BhbG0yN3guYyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCmluZGV4IDg1N2RiOTYuLjUwNGU0MDAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCisrKyBiL3NvdW5kL3NvYy9weGEvcGFsbTI3eC5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IEhpRmkiLAogCS5zdHJlYW1fbmFtZSA9ICJBQzk3IEhpRmkiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gICJ3bTk3MTItaGlmaSIsCiAJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJweGEtcGNtLWF1ZGlvIiwKQEAgLTE0MSw3ICsxNDEsNyBAQAogewogCS5uYW1lID0gIkFDOTcgQXV4IiwKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBBdXgiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTk3MTItYXV4IiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTItY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9wb29kbGUuYyBiL3NvdW5kL3NvYy9weGEvcG9vZGxlLmMKaW5kZXggNjI5OGVlMS4uYTdkNDk5OSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3B4YS9wb29kbGUuYworKysgYi9zb3VuZC9zb2MvcHhhL3Bvb2RsZS5jCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1pMnMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg3MzEtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCi0JLmNvZGVjX25hbWUgPSAid204NzMxLWNvZGVjLjAtMDAxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzMxLWNvZGVjLjAtMDAxYiIsCiAJLmluaXQgPSBwb29kbGVfd204NzMxX2luaXQsCiAJLm9wcyA9ICZwb29kbGVfb3BzLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvc3BpdHouYyBiL3NvdW5kL3NvYy9weGEvc3BpdHouYwppbmRleCBjMmFjYjY5Li44ZTE1NzEzIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3NwaXR6LmMKKysrIGIvc291bmQvc29jL3B4YS9zcGl0ei5jCkBAIC0zMTUsMTAgKzMxNSwxMCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNwaXR6X2RhaSA9IHsKIAkubmFtZSA9ICJ3bTg3NTAiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3NTAiLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWlzMiIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtaTJzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUwLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODc1MC1jb2RlYy4wLTAwMWEiLAorCS5jb2RlY19uYW1lID0gIndtODc1MC1jb2RlYy4wLTAwMWIiLAogCS5pbml0ID0gc3BpdHpfd204NzUwX2luaXQsCiAJLm9wcyA9ICZzcGl0el9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS90b3NhLmMgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwppbmRleCBmNzU4MDRlLi40YjZlNWQ2IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3Rvc2EuYworKysgYi9zb3VuZC9zb2MvcHhhL3Rvc2EuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiB7CiAJLm5hbWUgPSAiQUM5NyIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgSGlGaSIsCi0JLmNwdV9kYWlfbmFtZSA9ICJweGEtYWM5Ny4wIiwKKwkuY3B1X2RhaV9uYW1lID0gInB4YTJ4eC1hYzk3IiwKIAkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWhpZmkiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAogCS5jb2RlY19uYW1lID0gIndtOTcxMi1jb2RlYyIsCkBAIC0yMjksNyArMjI5LDcgQEAKIHsKIAkubmFtZSA9ICJBQzk3IEF1eCIsCiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKLQkuY3B1X2RhaV9uYW1lID0gInB4YS1hYzk3LjEiLAorCS5jcHVfZGFpX25hbWUgPSAicHhhMnh4LWFjOTctYXV4IiwKIAkuY29kZWNfZGFpX25hbWUgPSAid205NzEyLWF1eCIsCiAJLnBsYXRmb3JtX25hbWUgPSAicHhhLXBjbS1hdWRpbyIsCiAJLmNvZGVjX25hbWUgPSAid205NzEyLWNvZGVjIiwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYyBiL3NvdW5kL3NvYy9weGEvenlsb25pdGUuYwppbmRleCBiMjIyYTdkLi4yNWJiYTEwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3p5bG9uaXRlLmMKKysrIGIvc291bmQvc29jL3B4YS96eWxvbml0ZS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIAkuc3RyZWFtX25hbWUgPSAiQUM5NyBIaUZpIiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMCIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5NyIsCiAJLmNvZGVjX25hbWUgPSAid205NzEzLWhpZmkiLAogCS5pbml0ID0genlsb25pdGVfd205NzEzX2luaXQsCiB9LApAQCAtMTc1LDcgKzE3NSw3IEBACiAJLnN0cmVhbV9uYW1lID0gIkFDOTcgQXV4IiwKIAkuY29kZWNfbmFtZSA9ICJ3bTk3MTMtY29kZWMiLAogCS5wbGF0Zm9ybV9uYW1lID0gInB4YS1wY20tYXVkaW8iLAotCS5jcHVfZGFpX25hbWUgPSAicHhhLWFjOTcuMSIsCisJLmNwdV9kYWlfbmFtZSA9ICJweGEyeHgtYWM5Ny1hdXgiLAogCS5jb2RlY19uYW1lID0gIndtOTcxMy1hdXgiLAogfSwKIHsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX2d0YTAyX3dtODc1My5jCmluZGV4IDNlZWM2MTAuLjBkMGFlMmIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfZ3RhMDJfd204NzUzLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M19ndGEwMl93bTg3NTMuYwpAQCAtMzk3LDExICszOTcsMTEgQEAKIHsgLyogSGlmaSBQbGF5YmFjayAtIGZvciBzaW1pbGF0aW91cyB1c2Ugd2l0aCB2b2ljZSBiZWxvdyAqLwogCS5uYW1lID0gIldNODc1MyIsCiAJLnN0cmVhbV9uYW1lID0gIldNODc1MyBIaUZpIiwKLQkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaTJzIiwKKwkuY3B1X2RhaV9uYW1lID0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAid204NzUzLWhpZmkiLAogCS5pbml0ID0gbmVvMTk3M19ndGEwMl93bTg3NTNfaW5pdCwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkub3BzID0gJm5lbzE5NzNfZ3RhMDJfaGlmaV9vcHMsCiB9LAogeyAvKiBWb2ljZSB2aWEgQlQgKi8KQEAgLTQxMCw3ICs0MTAsNyBAQAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCiAJLm9wcyA9ICZuZW8xOTczX2d0YTAyX3ZvaWNlX29wcywKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL25lbzE5NzNfd204NzUzLmMKaW5kZXggYzdhMjQ1MS4uZDIwODE1ZCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvbmVvMTk3M193bTg3NTMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9uZW8xOTczX3dtODc1My5jCkBAIC01NTksOSArNTU5LDkgQEAKIAkubmFtZSA9ICJXTTg3NTMiLAogCS5zdHJlYW1fbmFtZSA9ICJXTTg3NTMgSGlGaSIsCiAJLnBsYXRmb3JtX25hbWUgPSAic2Ftc3VuZy1hdWRpbyIsCi0JLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWkycyIsCisJLmNwdV9kYWlfbmFtZSA9ICJzM2MyNHh4LWlpcyIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My1oaWZpIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg3NTMtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IG5lbzE5NzNfd204NzUzX2luaXQsCiAJLm9wcyA9ICZuZW8xOTczX2hpZmlfb3BzLAogfSwKQEAgLTU3MSw3ICs1NzEsNyBAQAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAogCS5jcHVfZGFpX25hbWUgPSAiYmx1ZXRvb3RoLWRhaSIsCiAJLmNvZGVjX2RhaV9uYW1lID0gIndtODc1My12b2ljZSIsCi0JLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMHgxYSIsCisJLmNvZGVjX25hbWUgPSAid204NzUzLWNvZGVjLjAtMDAxYSIsCiAJLm9wcyA9ICZuZW8xOTczX3ZvaWNlX29wcywKIH0sCiB9OwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfaGVybWVzLmMgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwppbmRleCBiYjQyOTJlLi4wOGZjYWFhIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY19oZXJtZXMuYwpAQCAtOTQsOCArOTQsOCBAQAogc3RhdGljIHN0cnVjdCBzbmRfc29jX2RhaV9saW5rIHNpbXRlY19kYWlfYWljMzMgPSB7CiAJLm5hbWUJCT0gInRsdjMyMGFpYzMzIiwKIAkuc3RyZWFtX25hbWUJPSAiVExWMzIwQUlDMzMiLAotCS5jb2RlY19uYW1lCT0gInRsdjMyMGFpYzN4LWNvZGVjLjAtMHgxYSIsCi0JLmNwdV9kYWlfbmFtZQk9ICJzM2MyNHh4LWkycyIsCisJLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0wMDFhIiwKKwkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaWlzIiwKIAkuY29kZWNfZGFpX25hbWUgPSAidGx2MzIwYWljM3gtaGlmaSIsCiAJLnBsYXRmb3JtX25hbWUJPSAic2Ftc3VuZy1hdWRpbyIsCiAJLmluaXQJCT0gc2ltdGVjX2hlcm1lc19pbml0LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfc2ltdGVjX3RsdjMyMGFpYzIzLmMKaW5kZXggZmJiYTRlMy4uMTE2ZTNlNiAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF9zaW10ZWNfdGx2MzIwYWljMjMuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9zM2MyNHh4X3NpbXRlY190bHYzMjBhaWMyMy5jCkBAIC04NSw4ICs4NSw4IEBACiBzdGF0aWMgc3RydWN0IHNuZF9zb2NfZGFpX2xpbmsgc2ltdGVjX2RhaV9haWMyMyA9IHsKIAkubmFtZQkJPSAidGx2MzIwYWljMjMiLAogCS5zdHJlYW1fbmFtZQk9ICJUTFYzMjBBSUMyMyIsCi0JLmNvZGVjX25hbWUJPSAidGx2MzIwYWljM3gtY29kZWMuMC0weDFhIiwKLQkuY3B1X2RhaV9uYW1lCT0gInMzYzI0eHgtaTJzIiwKKwkuY29kZWNfbmFtZQk9ICJ0bHYzMjBhaWMzeC1jb2RlYy4wLTAwMWEiLAorCS5jcHVfZGFpX25hbWUJPSAiczNjMjR4eC1paXMiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ0bHYzMjBhaWMzeC1oaWZpIiwKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIAkuaW5pdAkJPSBzaW10ZWNfdGx2MzIwYWljMjNfaW5pdCwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3MzYzI0eHhfdWRhMTM0eC5jIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKaW5kZXggY2RjOGVjYi4uMmMwOWU5MyAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvczNjMjR4eF91ZGExMzR4LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCS5zdHJlYW1fbmFtZSA9ICJVREExMzRYIiwKIAkuY29kZWNfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAogCS5jb2RlY19kYWlfbmFtZSA9ICJ1ZGExMzR4LWhpZmkiLAotCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1pMnMiLAorCS5jcHVfZGFpX25hbWUgPSAiczNjMjR4eC1paXMiLAogCS5vcHMgPSAmczNjMjR4eF91ZGExMzR4X29wcywKIAkucGxhdGZvcm1fbmFtZQk9ICJzYW1zdW5nLWF1ZGlvIiwKIH07CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGJhYzcyOTEuLmMzZjZmMWU3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMTQ0OSw2ICsxNDQ5LDcgQEAKIAkJcnRkID0gJmNhcmQtPnJ0ZF9hdXhbbnVtXTsKIAkJbmFtZSA9IGF1eF9kZXYtPm5hbWU7CiAJfQorCXJ0ZC0+Y2FyZCA9IGNhcmQ7CiAKIAkvKiBtYWNoaW5lIGNvbnRyb2xzLCByb3V0ZXMgYW5kIHdpZGdldHMgYXJlIG5vdCBwcmVmaXhlZCAqLwogCXRlbXAgPSBjb2RlYy0+bmFtZV9wcmVmaXg7CkBAIC0xNDcxLDcgKzE0NzIsNiBAQAogCiAJLyogcmVnaXN0ZXIgdGhlIHJ0ZCBkZXZpY2UgKi8KIAlydGQtPmNvZGVjID0gY29kZWM7Ci0JcnRkLT5jYXJkID0gY2FyZDsKIAlydGQtPmRldi5wYXJlbnQgPSBjYXJkLT5kZXY7CiAJcnRkLT5kZXYucmVsZWFzZSA9IHJ0ZF9yZWxlYXNlOwogCXJ0ZC0+ZGV2LmluaXRfbmFtZSA9IG5hbWU7CkBAIC0xNjY0LDkgKzE2NjQsNiBAQAogCWdvdG8gb3V0OwogCiBmb3VuZDoKLQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNvZGVjLT5kZXYtPmRyaXZlci0+b3duZXIpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXJldCA9IHNvY19wcm9iZV9jb2RlYyhjYXJkLCBjb2RlYyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWRhcG0uYyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCmluZGV4IDQ5OTczMGEuLjI1ZTU0MjMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtZGFwbS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtZGFwbS5jCkBAIC03MTIsNyArNzEyLDE1IEBACiAJCSAgICAhcGF0aC0+Y29ubmVjdGVkKHBhdGgtPnNvdXJjZSwgcGF0aC0+c2luaykpCiAJCQljb250aW51ZTsKIAotCQlpZiAocGF0aC0+c2luayAmJiBwYXRoLT5zaW5rLT5wb3dlcl9jaGVjayAmJgorCQlpZiAoIXBhdGgtPnNpbmspCisJCQljb250aW51ZTsKKworCQlpZiAocGF0aC0+c2luay0+Zm9yY2UpIHsKKwkJCXBvd2VyID0gMTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHBhdGgtPnNpbmstPnBvd2VyX2NoZWNrICYmCiAJCSAgICBwYXRoLT5zaW5rLT5wb3dlcl9jaGVjayhwYXRoLT5zaW5rKSkgewogCQkJcG93ZXIgPSAxOwogCQkJYnJlYWs7CkBAIC0xNjI3LDYgKzE2MzUsNyBAQAogaW50IHNuZF9zb2NfZGFwbV9uZXdfd2lkZ2V0cyhzdHJ1Y3Qgc25kX3NvY19kYXBtX2NvbnRleHQgKmRhcG0pCiB7CiAJc3RydWN0IHNuZF9zb2NfZGFwbV93aWRnZXQgKnc7CisJdW5zaWduZWQgaW50IHZhbDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJmRhcG0tPmNhcmQtPndpZGdldHMsIGxpc3QpCiAJewpAQCAtMTY3NSw2ICsxNjg0LDE4IEBACiAJCWNhc2Ugc25kX3NvY19kYXBtX3Bvc3Q6CiAJCQlicmVhazsKIAkJfQorCisJCS8qIFJlYWQgdGhlIGluaXRpYWwgcG93ZXIgc3RhdGUgZnJvbSB0aGUgZGV2aWNlICovCisJCWlmICh3LT5yZWcgPj0gMCkgeworCQkJdmFsID0gc25kX3NvY19yZWFkKHctPmNvZGVjLCB3LT5yZWcpOworCQkJdmFsICY9IDEgPDwgdy0+c2hpZnQ7CisJCQlpZiAody0+aW52ZXJ0KQorCQkJCXZhbCA9ICF2YWw7CisKKwkJCWlmICh2YWwpCisJCQkJdy0+cG93ZXIgPSAxOworCQl9CisKIAkJdy0+bmV3ID0gMTsKIAl9CiAKQEAgLTE3NDIsNyArMTc2Myw3IEBACiAJaW50IG1heCA9IG1jLT5tYXg7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAoMSA8PCBmbHMobWF4KSkgLSAxOwogCXVuc2lnbmVkIGludCBpbnZlcnQgPSBtYy0+aW52ZXJ0OwotCXVuc2lnbmVkIGludCB2YWwsIHZhbF9tYXNrOworCXVuc2lnbmVkIGludCB2YWw7CiAJaW50IGNvbm5lY3QsIGNoYW5nZTsKIAlzdHJ1Y3Qgc25kX3NvY19kYXBtX3VwZGF0ZSB1cGRhdGU7CiAKQEAgLTE3NTAsMTMgKzE3NzEsMTMgQEAKIAogCWlmIChpbnZlcnQpCiAJCXZhbCA9IG1heCAtIHZhbDsKLQl2YWxfbWFzayA9IG1hc2sgPDwgc2hpZnQ7CisJbWFzayA9IG1hc2sgPDwgc2hpZnQ7CiAJdmFsID0gdmFsIDw8IHNoaWZ0OwogCiAJbXV0ZXhfbG9jaygmd2lkZ2V0LT5jb2RlYy0+bXV0ZXgpOwogCXdpZGdldC0+dmFsdWUgPSB2YWw7CiAKLQljaGFuZ2UgPSBzbmRfc29jX3Rlc3RfYml0cyh3aWRnZXQtPmNvZGVjLCByZWcsIHZhbF9tYXNrLCB2YWwpOworCWNoYW5nZSA9IHNuZF9zb2NfdGVzdF9iaXRzKHdpZGdldC0+Y29kZWMsIHJlZywgbWFzaywgdmFsKTsKIAlpZiAoY2hhbmdlKSB7CiAJCWlmICh2YWwpCiAJCQkvKiBuZXcgY29ubmVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL2F1ZGlvLmMgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwppbmRleCA2OGI5NzQ3Li42NmVhYmFmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYworKysgYi9zb3VuZC91c2IvY2FpYXEvYXVkaW8uYwpAQCAtNzg1LDcgKzc4NSw3IEBACiAJfQogCiAJZGV2LT5wY20tPnByaXZhdGVfZGF0YSA9IGRldjsKLQlzdHJjcHkoZGV2LT5wY20tPm5hbWUsIGRldi0+cHJvZHVjdF9uYW1lKTsKKwlzdHJsY3B5KGRldi0+cGNtLT5uYW1lLCBkZXYtPnByb2R1Y3RfbmFtZSwgc2l6ZW9mKGRldi0+cGNtLT5uYW1lKSk7CiAKIAltZW1zZXQoZGV2LT5zdWJfcGxheWJhY2ssIDAsIHNpemVvZihkZXYtPnN1Yl9wbGF5YmFjaykpOwogCW1lbXNldChkZXYtPnN1Yl9jYXB0dXJlLCAwLCBzaXplb2YoZGV2LT5zdWJfY2FwdHVyZSkpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2NhaWFxL21pZGkuYyBiL3NvdW5kL3VzYi9jYWlhcS9taWRpLmMKaW5kZXggMmYyMThjNy4uYTFhNDcwODggMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9taWRpLmMKKysrIGIvc291bmQvdXNiL2NhaWFxL21pZGkuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlzdHJjcHkocm1pZGktPm5hbWUsIGRldmljZS0+cHJvZHVjdF9uYW1lKTsKKwlzdHJsY3B5KHJtaWRpLT5uYW1lLCBkZXZpY2UtPnByb2R1Y3RfbmFtZSwgc2l6ZW9mKHJtaWRpLT5uYW1lKSk7CiAKIAlybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19EVVBMRVg7CiAJcm1pZGktPnByaXZhdGVfZGF0YSA9IGRldmljZTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9jYXJkLmMgYi9zb3VuZC91c2IvY2FyZC5jCmluZGV4IDgwMGY3Y2IuLmMwZjgyNzBiIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FyZC5jCisrKyBiL3NvdW5kL3VzYi9jYXJkLmMKQEAgLTMyMyw2ICszMjMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwltdXRleF9pbml0KCZjaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJY2hpcC0+aW5kZXggPSBpZHg7CiAJY2hpcC0+ZGV2ID0gZGV2OwogCWNoaXAtPmNhcmQgPSBjYXJkOwpAQCAtNTMxLDYgKzUzMiw3IEBACiAJY2hpcCA9IHB0cjsKIAljYXJkID0gY2hpcC0+Y2FyZDsKIAltdXRleF9sb2NrKCZyZWdpc3Rlcl9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCWNoaXAtPnNodXRkb3duID0gMTsKIAljaGlwLT5udW1faW50ZXJmYWNlcy0tOwogCWlmIChjaGlwLT5udW1faW50ZXJmYWNlcyA8PSAwKSB7CkBAIC01NDgsOSArNTUwLDExIEBACiAJCQlzbmRfdXNiX21peGVyX2Rpc2Nvbm5lY3QocCk7CiAJCX0KIAkJdXNiX2NoaXBbY2hpcC0+aW5kZXhdID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZjaGlwLT5zaHV0ZG93bl9tdXRleCk7CiAJCW11dGV4X3VubG9jaygmcmVnaXN0ZXJfbXV0ZXgpOwogCQlzbmRfY2FyZF9mcmVlX3doZW5fY2xvc2VkKGNhcmQpOwogCX0gZWxzZSB7CisJCW11dGV4X3VubG9jaygmY2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCQltdXRleF91bmxvY2soJnJlZ2lzdGVyX211dGV4KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvbWl4ZXIuYyBiL3NvdW5kL3VzYi9taXhlci5jCmluZGV4IDdkZjg5YjMuLjg1YWY2MDUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9taXhlci5jCisrKyBiL3NvdW5kL3VzYi9taXhlci5jCkBAIC05NSw3ICs5NSw3IEBACiB9OwogCiAKLS8qRS1tdSAwMjAyKDA0MDQpIGVYdGVuc2lvbiBVbml0KFhVKSBjb250cm9sKi8KKy8qRS1tdSAwMjAyLzA0MDQvMDIwNCBlWHRlbnNpb24gVW5pdChYVSkgY29udHJvbCovCiBlbnVtIHsKIAlVU0JfWFVfQ0xPQ0tfUkFURSAJCT0gMHhlMzAxLAogCVVTQl9YVV9DTE9DS19TT1VSQ0UJCT0gMHhlMzAyLApAQCAtMTU2Niw3ICsxNTY2LDcgQEAKIAkJCWN2YWwtPmluaXRpYWxpemVkID0gMTsKIAkJfSBlbHNlIHsKIAkJCWlmICh0eXBlID09IFVTQl9YVV9DTE9DS19SQVRFKSB7Ci0JCQkJLyogRS1NdSBVU0IgMDQwNC8wMjAyL1RyYWNrZXJQcmUKKwkJCQkvKiBFLU11IFVTQiAwNDA0LzAyMDIvVHJhY2tlclByZS8wMjA0CiAJCQkJICogc2FtcGxlcmF0ZSBjb250cm9sIHF1aXJrCiAJCQkJICovCiAJCQkJY3ZhbC0+bWluID0gMDsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9wY20uYyBiL3NvdW5kL3VzYi9wY20uYwppbmRleCA0MTMyNTIyLi5lM2Y2ODA1IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcGNtLmMKKysrIGIvc291bmQvdXNiL3BjbS5jCkBAIC0zNjEsNiArMzYxLDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCkgeworCQltdXRleF9sb2NrKCZzdWJzLT5zdHJlYW0tPmNoaXAtPnNodXRkb3duX211dGV4KTsKIAkJLyogZm9ybWF0IGNoYW5nZWQgKi8KIAkJc25kX3VzYl9yZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOwogCQkvKiBpbmZsdWVuY2VkOiBwZXJpb2RfYnl0ZXMsIGNoYW5uZWxzLCByYXRlLCBmb3JtYXQsICovCkBAIC0zNjgsNiArMzY5LDcgQEAKIAkJCQkJCSAgcGFyYW1zX3JhdGUoaHdfcGFyYW1zKSwKIAkJCQkJCSAgc25kX3BjbV9mb3JtYXRfcGh5c2ljYWxfd2lkdGgocGFyYW1zX2Zvcm1hdChod19wYXJhbXMpKSAqCiAJCQkJCQkJcGFyYW1zX2NoYW5uZWxzKGh3X3BhcmFtcykpOworCQltdXRleF91bmxvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zODUsOCArMzg3LDkgQEAKIAlzdWJzLT5jdXJfYXVkaW9mbXQgPSBOVUxMOwogCXN1YnMtPmN1cl9yYXRlID0gMDsKIAlzdWJzLT5wZXJpb2RfYnl0ZXMgPSAwOwotCWlmICghc3Vicy0+c3RyZWFtLT5jaGlwLT5zaHV0ZG93bikKLQkJc25kX3VzYl9yZWxlYXNlX3N1YnN0cmVhbV91cmJzKHN1YnMsIDApOworCW11dGV4X2xvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOworCXNuZF91c2JfcmVsZWFzZV9zdWJzdHJlYW1fdXJicyhzdWJzLCAwKTsKKwltdXRleF91bmxvY2soJnN1YnMtPnN0cmVhbS0+Y2hpcC0+c2h1dGRvd25fbXV0ZXgpOwogCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3ZtYWxsb2NfYnVmZmVyKHN1YnN0cmVhbSk7CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaCBiL3NvdW5kL3VzYi9xdWlya3MtdGFibGUuaAppbmRleCAzNTk5OTg3Li45MjFhODZmIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvcXVpcmtzLXRhYmxlLmgKKysrIGIvc291bmQvdXNiL3F1aXJrcy10YWJsZS5oCkBAIC03OSw2ICs3OSwxMyBAQAogCS5pZFByb2R1Y3QgPSAweDNmMGEsCiAJLmJJbnRlcmZhY2VDbGFzcyA9IFVTQl9DTEFTU19BVURJTywKIH0sCit7CisJLyogRS1NdSAwMjA0IFVTQiAqLworCS5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFLAorCS5pZFZlbmRvciA9IDB4MDQxZSwKKwkuaWRQcm9kdWN0ID0gMHgzZjE5LAorCS5iSW50ZXJmYWNlQ2xhc3MgPSBVU0JfQ0xBU1NfQVVESU8sCit9LAogCiAvKgogICogTG9naXRlY2ggUXVpY2tDYW06IGJEZXZpY2VDbGFzcyBpcyB2ZW5kb3Itc3BlY2lmaWMsIHNvIGdlbmVyaWMgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvcXVpcmtzLmMgYi9zb3VuZC91c2IvcXVpcmtzLmMKaW5kZXggY2Y4YmYwOC4uZTMxNGNkYiAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3F1aXJrcy5jCisrKyBiL3NvdW5kL3VzYi9xdWlya3MuYwpAQCAtNTMyLDcgKzUzMiw3IEBACiB9CiAKIC8qCi0gKiBGb3IgRS1NdSAwNDA0VVNCLzAyMDJVU0IvVHJhY2tlclByZSBzYW1wbGUgcmF0ZSBzaG91bGQgYmUgc2V0IGZvciBkZXZpY2UsCisgKiBGb3IgRS1NdSAwNDA0VVNCLzAyMDJVU0IvVHJhY2tlclByZS8wMjA0IHNhbXBsZSByYXRlIHNob3VsZCBiZSBzZXQgZm9yIGRldmljZSwKICAqIG5vdCBmb3IgaW50ZXJmYWNlLgogICovCiAKQEAgLTU4OSw2ICs1ODksNyBAQAogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjAyKTogLyogRS1NdSAwMjAyIFVTQiAqLwogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjA0KTogLyogRS1NdSAwNDA0IFVTQiAqLwogCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjBhKTogLyogRS1NdSBUcmFja2VyIFByZSAqLworCWNhc2UgVVNCX0lEKDB4MDQxZSwgMHgzZjE5KTogLyogRS1NdSAwMjA0IFVTQiAqLwogCQlzZXRfZm9ybWF0X2VtdV9xdWlyayhzdWJzLCBmbXQpOwogCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uaCBiL3NvdW5kL3VzYi91c2JhdWRpby5oCmluZGV4IGRiM2ViMjEuLjZlNjZmZmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5oCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5oCkBAIC0zNiw2ICszNiw3IEBACiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwogCXUzMiB1c2JfaWQ7CiAJaW50IHNodXRkb3duOworCXN0cnVjdCBtdXRleCBzaHV0ZG93bl9tdXRleDsKIAl1bnNpZ25lZCBpbnQgdHhmcl9xdWlyazoxOyAvKiBTdWJmcmFtZSBib3VuZGFyaWVzIG9uIHRyYW5zZmVycyAqLwogCWludCBudW1faW50ZXJmYWNlczsKIAlpbnQgbnVtX3N1c3BlbmRlZF9pbnRmOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9NYWtlZmlsZSBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKaW5kZXggMmI1Mzg3ZC4uNzE0MWM0MiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9NYWtlZmlsZQorKysgYi90b29scy9wZXJmL01ha2VmaWxlCkBAIC0yMDQsMTMgKzIwNCwxMSBAQAogRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdpbml0LXNlbGYKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XcGFja2VkCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3JlZHVuZGFudC1kZWNscwotRVhUUkFfV0FSTklOR1MgOj0gJChFWFRSQV9XQVJOSU5HUykgLVdzdGFjay1wcm90ZWN0b3IKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3RyaWN0LWFsaWFzaW5nPTMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3dpdGNoLWRlZmF1bHQKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xc3dpdGNoLWVudW0KIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xbm8tc3lzdGVtLWhlYWRlcnMKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XdW5kZWYKLUVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyCiBFWFRSQV9XQVJOSU5HUyA6PSAkKEVYVFJBX1dBUk5JTkdTKSAtV3dyaXRlLXN0cmluZ3MKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XYmFkLWZ1bmN0aW9uLWNhc3QKIEVYVFJBX1dBUk5JTkdTIDo9ICQoRVhUUkFfV0FSTklOR1MpIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMKQEAgLTI5NCw2ICsyOTIsMTMgQEAKIAlDRkxBR1MgOj0gJChDRkxBR1MpIC1mc3RhY2stcHJvdGVjdG9yLWFsbAogZW5kaWYKIAoraWZlcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9IRUxMTyksLVdlcnJvciAtV3N0YWNrLXByb3RlY3RvcikseSkKKyAgICAgICBDRkxBR1MgOj0gJChDRkxBR1MpIC1Xc3RhY2stcHJvdGVjdG9yCitlbmRpZgorCitpZmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0hFTExPKSwtV2Vycm9yIC1Xdm9sYXRpbGUtcmVnaXN0ZXItdmFyKSx5KQorICAgICAgIENGTEFHUyA6PSAkKENGTEFHUykgLVd2b2xhdGlsZS1yZWdpc3Rlci12YXIKK2VuZGlmCiAKICMjIyAtLS0gRU5EIENPTkZJR1VSQVRJT04gU0VDVElPTiAtLS0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLWFubm90YXRlLmMgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwppbmRleCBjMDU2Y2RjLi44ODc5NDYzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tYW5ub3RhdGUuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJCQljb250aW51ZTsKIAogCQlvZmZzZXQgPSBzdGFydCArIGk7Ci0JCXNwcmludGYoY21kLCAiYWRkcjJsaW5lIC1lICVzICUwMTZsbHgiLCBmaWxlbmFtZSwgb2Zmc2V0KTsKKwkJc3ByaW50ZihjbWQsICJhZGRyMmxpbmUgLWUgJXMgJTAxNiIgUFJJeDY0LCBmaWxlbmFtZSwgb2Zmc2V0KTsKIAkJZnAgPSBwb3BlbihjbWQsICJyIik7CiAJCWlmICghZnApCiAJCQljb250aW51ZTsKQEAgLTI3MCw5ICsyNzAsOSBAQAogCiAJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBsZW47ICsrb2Zmc2V0KQogCQlpZiAoaC0+aXBbb2Zmc2V0XSAhPSAwKQotCQkJcHJpbnRmKCIlKkx4OiAlTHVcbiIsIEJJVFNfUEVSX0xPTkcgLyAyLAorCQkJcHJpbnRmKCIlKiIgUFJJeDY0ICI6ICUiIFBSSXU2NCAiXG4iLCBCSVRTX1BFUl9MT05HIC8gMiwKIAkJCSAgICAgICBzeW0tPnN0YXJ0ICsgb2Zmc2V0LCBoLT5pcFtvZmZzZXRdKTsKLQlwcmludGYoIiUqczogJUx1XG4iLCBCSVRTX1BFUl9MT05HIC8gMiwgImgtPnN1bSIsIGgtPnN1bSk7CisJcHJpbnRmKCIlKnM6ICUiIFBSSXU2NCAiXG4iLCBCSVRTX1BFUl9MT05HIC8gMiwgImgtPnN1bSIsIGgtPnN1bSk7CiB9CiAKIHN0YXRpYyBpbnQgaGlzdF9lbnRyeV9fdHR5X2Fubm90YXRlKHN0cnVjdCBoaXN0X2VudHJ5ICpoZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMgYi90b29scy9wZXJmL2J1aWx0aW4ta21lbS5jCmluZGV4IGRlZjdkZGMuLmQ5NzI1NmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1rbWVtLmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLWttZW0uYwpAQCAtMzcxLDEwICszNzEsMTAgQEAKIAkJCWFkZHIgPSBkYXRhLT5wdHI7CiAKIAkJaWYgKHN5bSAhPSBOVUxMKQotCQkJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzKyVMeCIsIHN5bS0+bmFtZSwKKwkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyslIiBQUkl4NjQgIiIsIHN5bS0+bmFtZSwKIAkJCQkgYWRkciAtIG1hcC0+dW5tYXBfaXAobWFwLCBzeW0tPnN0YXJ0KSk7CiAJCWVsc2UKLQkJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlI0x4IiwgYWRkcik7CisJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJSMiIFBSSXg2NCAiIiwgYWRkcik7CiAJCXByaW50ZigiICUtMzRzIHwiLCBidWYpOwogCiAJCXByaW50ZigiICU5bGx1LyUtNWx1IHwgJTlsbHUvJS01bHUgfCAlOGx1IHwgJThsdSB8ICU2LjNmJSVcbiIsCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jIGIvdG9vbHMvcGVyZi9idWlsdGluLWxvY2suYwppbmRleCBiOWM2ZTU0Li4yYjM2ZGVmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tbG9jay5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1sb2NrLmMKQEAgLTc4Miw5ICs3ODIsOSBAQAogCQlwcl9pbmZvKCIlMTB1ICIsIHN0LT5ucl9hY3F1aXJlZCk7CiAJCXByX2luZm8oIiUxMHUgIiwgc3QtPm5yX2NvbnRlbmRlZCk7CiAKLQkJcHJfaW5mbygiJTE1bGx1ICIsIHN0LT53YWl0X3RpbWVfdG90YWwpOwotCQlwcl9pbmZvKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9tYXgpOwotCQlwcl9pbmZvKCIlMTVsbHUgIiwgc3QtPndhaXRfdGltZV9taW4gPT0gVUxMT05HX01BWCA/CisJCXByX2luZm8oIiUxNSIgUFJJdTY0ICIgIiwgc3QtPndhaXRfdGltZV90b3RhbCk7CisJCXByX2luZm8oIiUxNSIgUFJJdTY0ICIgIiwgc3QtPndhaXRfdGltZV9tYXgpOworCQlwcl9pbmZvKCIlMTUiIFBSSXU2NCAiICIsIHN0LT53YWl0X3RpbWVfbWluID09IFVMTE9OR19NQVggPwogCQkgICAgICAgMCA6IHN0LT53YWl0X3RpbWVfbWluKTsKIAkJcHJfaW5mbygiXG4iKTsKIAl9CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKaW5kZXggZmNkMjllOC4uNjBjYWM2ZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYwpAQCAtNzU5LDggKzc1OSw4IEBACiAJCXBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19tYWNoaW5lcyhzZXNzaW9uLCBldmVudF9fc3ludGhlc2l6ZV9ndWVzdF9vcyk7CiAKIAlpZiAoIXN5c3RlbV93aWRlKQotCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWQodGFyZ2V0X3RpZCwgcHJvY2Vzc19zeW50aGVzaXplZF9ldmVudCwKLQkJCQkJIHNlc3Npb24pOworCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHRocmVhZHMsIHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsCisJCQkJCSAgICAgc2Vzc2lvbik7CiAJZWxzZQogCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKHByb2Nlc3Nfc3ludGhlc2l6ZWRfZXZlbnQsIHNlc3Npb24pOwogCkBAIC04MTcsNyArODE3LDcgQEAKIAkgKiBBcHByb3hpbWF0ZSBSSVAgZXZlbnQgc2l6ZTogMjQgYnl0ZXMuCiAJICovCiAJZnByaW50ZihzdGRlcnIsCi0JCSJbIHBlcmYgcmVjb3JkOiBDYXB0dXJlZCBhbmQgd3JvdGUgJS4zZiBNQiAlcyAofiVsbGQgc2FtcGxlcykgXVxuIiwKKwkJIlsgcGVyZiByZWNvcmQ6IENhcHR1cmVkIGFuZCB3cm90ZSAlLjNmIE1CICVzICh+JSIgUFJJdTY0ICIgc2FtcGxlcykgXVxuIiwKIAkJKGRvdWJsZSlieXRlc193cml0dGVuIC8gMTAyNC4wIC8gMTAyNC4wLAogCQlvdXRwdXRfbmFtZSwKIAkJYnl0ZXNfd3JpdHRlbiAvIDI0KTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZXBvcnQuYwppbmRleCA3NTE4M2E0Li5jMjdlMzFmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tcmVwb3J0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlcG9ydC5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIAkJCQkJICAgZXZlbnQtPnJlYWQudmFsdWUpOwogCX0KIAotCWR1bXBfcHJpbnRmKCI6ICVkICVkICVzICVMdVxuIiwgZXZlbnQtPnJlYWQucGlkLCBldmVudC0+cmVhZC50aWQsCisJZHVtcF9wcmludGYoIjogJWQgJWQgJXMgJSIgUFJJdTY0ICJcbiIsIGV2ZW50LT5yZWFkLnBpZCwgZXZlbnQtPnJlYWQudGlkLAogCQkgICAgYXR0ciA/IF9fZXZlbnRfbmFtZShhdHRyLT50eXBlLCBhdHRyLT5jb25maWcpIDogIkZBSUwiLAogCQkgICAgZXZlbnQtPnJlYWQudmFsdWUpOwogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY2hlZC5jCmluZGV4IDI5ZTdmZmQuLjI5YWNiODk0IDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NoZWQuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJfQogCXJ1bl9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50ZigicnVuIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlTGQgbnNlY3NcbiIsIG1pbl9kZWx0YSk7CisJcHJpbnRmKCJydW4gbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBtaW5fZGVsdGEpOwogfQogCiBzdGF0aWMgdm9pZCBjYWxpYnJhdGVfc2xlZXBfbWVhc3VyZW1lbnRfb3ZlcmhlYWQodm9pZCkKQEAgLTIxMSw3ICsyMTEsNyBAQAogCW1pbl9kZWx0YSAtPSAxMDAwMDsKIAlzbGVlcF9tZWFzdXJlbWVudF9vdmVyaGVhZCA9IG1pbl9kZWx0YTsKIAotCXByaW50Zigic2xlZXAgbWVhc3VyZW1lbnQgb3ZlcmhlYWQ6ICVMZCBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKKwlwcmludGYoInNsZWVwIG1lYXN1cmVtZW50IG92ZXJoZWFkOiAlIiBQUkl1NjQgIiBuc2Vjc1xuIiwgbWluX2RlbHRhKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzY2hlZF9hdG9tICoKQEAgLTYxNywxMyArNjE3LDEzIEBACiAJYnVybl9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBydW4gdGVzdCB0b29rICVMZCBuc2Vjc1xuIiwgVDEtVDApOworCXByaW50ZigidGhlIHJ1biB0ZXN0IHRvb2sgJSIgUFJJdTY0ICIgbnNlY3NcbiIsIFQxIC0gVDApOwogCiAJVDAgPSBnZXRfbnNlY3MoKTsKIAlzbGVlcF9uc2VjcygxZTYpOwogCVQxID0gZ2V0X25zZWNzKCk7CiAKLQlwcmludGYoInRoZSBzbGVlcCB0ZXN0IHRvb2sgJUxkIG5zZWNzXG4iLCBUMS1UMCk7CisJcHJpbnRmKCJ0aGUgc2xlZXAgdGVzdCB0b29rICUiIFBSSXU2NCAiIG5zZWNzXG4iLCBUMSAtIFQwKTsKIH0KIAogI2RlZmluZSBGSUxMX0ZJRUxEKHB0ciwgZmllbGQsIGV2ZW50LCBkYXRhKQlcCkBAIC04MTYsMTAgKzgxNiwxMCBAQAogCQlkZWx0YSA9IDA7CiAKIAlpZiAoZGVsdGEgPCAwKQotCQlkaWUoImhtLCBkZWx0YTogJUxkIDwgMCA/XG4iLCBkZWx0YSk7CisJCWRpZSgiaG0sIGRlbHRhOiAlIiBQUkl1NjQgIiA8IDAgP1xuIiwgZGVsdGEpOwogCiAJaWYgKHZlcmJvc2UpIHsKLQkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJUxkIG5zZWNzXVxuIiwKKwkJcHJpbnRmKCIgLi4uIHN3aXRjaCBmcm9tICVzLyVkIHRvICVzLyVkIFtyYW4gJSIgUFJJdTY0ICIgbnNlY3NdXG4iLAogCQkJc3dpdGNoX2V2ZW50LT5wcmV2X2NvbW0sIHN3aXRjaF9ldmVudC0+cHJldl9waWQsCiAJCQlzd2l0Y2hfZXZlbnQtPm5leHRfY29tbSwgc3dpdGNoX2V2ZW50LT5uZXh0X3BpZCwKIAkJCWRlbHRhKTsKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTEyMjEsNyArMTIyMSw3IEBACiAKIAlhdmcgPSB3b3JrX2xpc3QtPnRvdGFsX2xhdCAvIHdvcmtfbGlzdC0+bmJfYXRvbXM7CiAKLQlwcmludGYoInwlMTEuM2YgbXMgfCU5bGx1IHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAorCXByaW50ZigifCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHwgYXZnOiU5LjNmIG1zIHwgbWF4OiU5LjNmIG1zIHwgbWF4IGF0OiAlOS42ZiBzXG4iLAogCSAgICAgIChkb3VibGUpd29ya19saXN0LT50b3RhbF9ydW50aW1lIC8gMWU2LAogCQkgd29ya19saXN0LT5uYl9hdG9tcywgKGRvdWJsZSlhdmcgLyAxZTYsCiAJCSAoZG91YmxlKXdvcmtfbGlzdC0+bWF4X2xhdCAvIDFlNiwKQEAgLTE0MjMsNyArMTQyMyw3IEBACiAJCWRlbHRhID0gMDsKIAogCWlmIChkZWx0YSA8IDApCi0JCWRpZSgiaG0sIGRlbHRhOiAlTGQgPCAwID9cbiIsIGRlbHRhKTsKKwkJZGllKCJobSwgZGVsdGE6ICUiIFBSSXU2NCAiIDwgMCA/XG4iLCBkZWx0YSk7CiAKIAogCXNjaGVkX291dCA9IHBlcmZfc2Vzc2lvbl9fZmluZG5ldyhzZXNzaW9uLCBzd2l0Y2hfZXZlbnQtPnByZXZfcGlkKTsKQEAgLTE3MTMsNyArMTcxMyw3IEBACiAJfQogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTlMZCB8XG4iLAorCXByaW50ZigiICBUT1RBTDogICAgICAgICAgICAgICAgfCUxMS4zZiBtcyB8JTkiIFBSSXU2NCAiIHxcbiIsCiAJCShkb3VibGUpYWxsX3J1bnRpbWUvMWU2LCBhbGxfY291bnQpOwogCiAJcHJpbnRmKCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYwppbmRleCAxNTBhNjA2Li5iNzY2YzJhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKKysrIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCkBAIC03Nyw4ICs3Nyw4IEBACiAJaWYgKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfUkFXKSB7CiAJCWlmIChkZWJ1Z19tb2RlKSB7CiAJCQlpZiAoc2FtcGxlLT50aW1lIDwgbGFzdF90aW1lc3RhbXApIHsKLQkJCQlwcl9lcnIoIlNhbXBsZXMgbWlzb3JkZXJlZCwgcHJldmlvdXM6ICVsbHUgIgotCQkJCQkidGhpczogJWxsdVxuIiwgbGFzdF90aW1lc3RhbXAsCisJCQkJcHJfZXJyKCJTYW1wbGVzIG1pc29yZGVyZWQsIHByZXZpb3VzOiAlIiBQUkl1NjQKKwkJCQkJIiB0aGlzOiAlIiBQUkl1NjQgIlxuIiwgbGFzdF90aW1lc3RhbXAsCiAJCQkJCXNhbXBsZS0+dGltZSk7CiAJCQkJbnJfdW5vcmRlcmVkKys7CiAJCQl9CkBAIC0xMjYsNyArMTI2LDcgQEAKIAlyZXQgPSBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnRzKHNlc3Npb24sICZldmVudF9vcHMpOwogCiAJaWYgKGRlYnVnX21vZGUpCi0JCXByX2VycigiTWlzb3JkZXJlZCB0aW1lc3RhbXBzOiAlbGx1XG4iLCBucl91bm9yZGVyZWQpOworCQlwcl9lcnIoIk1pc29yZGVyZWQgdGltZXN0YW1wczogJSIgUFJJdTY0ICJcbiIsIG5yX3Vub3JkZXJlZCk7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKaW5kZXggMGZmMTFkOS4uYTQ4MmExOSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCkBAIC0yMDYsOCArMjA2LDggQEAKIAkJdXBkYXRlX3N0YXRzKCZwcy0+cmVzX3N0YXRzW2ldLCBjb3VudFtpXSk7CiAKIAlpZiAodmVyYm9zZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlTGQgJUxkICVMZFxuIiwgZXZlbnRfbmFtZShjb3VudGVyKSwKLQkJCQljb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICIgJSIgUFJJdTY0ICJcbiIsCisJCQlldmVudF9uYW1lKGNvdW50ZXIpLCBjb3VudFswXSwgY291bnRbMV0sIGNvdW50WzJdKTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggZWQ1Njk2MS4uNWRjZGJhNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC0xNDYsNyArMTQ2LDcgQEAKIAkJCQlpZiAobGxhYnMoc2tldykgPCBwYWdlX3NpemUpCiAJCQkJCWNvbnRpbnVlOwogCi0JCQkJcHJfZGVidWcoIiUjTHg6IGRpZmYgZW5kIGFkZHIgZm9yICVzIHY6ICUjTHggazogJSNMeFxuIiwKKwkJCQlwcl9kZWJ1ZygiJSMiIFBSSXg2NCAiOiBkaWZmIGVuZCBhZGRyIGZvciAlcyB2OiAlIyIgUFJJeDY0ICIgazogJSMiIFBSSXg2NCAiXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBzeW0tPmVuZCwgcGFpci0+ZW5kKTsKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IHJiX25vZGUgKm5uZDsKQEAgLTE2OCwxMSArMTY4LDExIEBACiAJCQkJCWdvdG8gZGV0b3VyOwogCQkJCX0KIAotCQkJCXByX2RlYnVnKCIlI0x4OiBkaWZmIG5hbWUgdjogJXMgazogJXNcbiIsCisJCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogZGlmZiBuYW1lIHY6ICVzIGs6ICVzXG4iLAogCQkJCQkgc3ltLT5zdGFydCwgc3ltLT5uYW1lLCBwYWlyLT5uYW1lKTsKIAkJCX0KIAkJfSBlbHNlCi0JCQlwcl9kZWJ1ZygiJSNMeDogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOworCQkJcHJfZGVidWcoIiUjIiBQUkl4NjQgIjogJXMgbm90IG9uIGthbGxzeW1zXG4iLCBzeW0tPnN0YXJ0LCBzeW0tPm5hbWUpOwogCiAJCWVyciA9IC0xOwogCX0KQEAgLTIxMSwxMCArMjExLDEwIEBACiAKIAkJaWYgKHBhaXItPnN0YXJ0ID09IHBvcy0+c3RhcnQpIHsKIAkJCXBhaXItPnByaXYgPSAxOwotCQkJcHJfaW5mbygiICVMeC0lTHggJUx4ICVzIGluIGthbGxzeW1zIGFzIiwKKwkJCXByX2luZm8oIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlIiBQUkl4NjQgIiAlcyBpbiBrYWxsc3ltcyBhcyIsCiAJCQkJcG9zLT5zdGFydCwgcG9zLT5lbmQsIHBvcy0+cGdvZmYsIHBvcy0+ZHNvLT5uYW1lKTsKIAkJCWlmIChwb3MtPnBnb2ZmICE9IHBhaXItPnBnb2ZmIHx8IHBvcy0+ZW5kICE9IHBhaXItPmVuZCkKLQkJCQlwcl9pbmZvKCI6IFxuKiVMeC0lTHggJUx4IiwKKwkJCQlwcl9pbmZvKCI6IFxuKiUiIFBSSXg2NCAiLSUiIFBSSXg2NCAiICUiIFBSSXg2NCAiIiwKIAkJCQkJcGFpci0+c3RhcnQsIHBhaXItPmVuZCwgcGFpci0+cGdvZmYpOwogCQkJcHJfaW5mbygiICVzXG4iLCBwYWlyLT5kc28tPm5hbWUpOwogCQkJcGFpci0+cHJpdiA9IDE7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAl9CiAKIAlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1WzBdLnZhbCAhPSBucl9vcGVuX2NhbGxzKSB7Ci0JCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdTogZXhwZWN0ZWQgdG8gaW50ZXJjZXB0ICVkIGNhbGxzLCBnb3QgJUxkXG4iLAorCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscywgZ290ICUiIFBSSXU2NCAiXG4iLAogCQkJIG5yX29wZW5fY2FsbHMsIGV2c2VsLT5jb3VudHMtPmNwdVswXS52YWwpOwogCQlnb3RvIG91dF9jbG9zZV9mZDsKIAl9CkBAIC0zMzIsOCArMzMyLDcgQEAKIAlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CiAJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciBhdHRyOwogCXVuc2lnbmVkIGludCBucl9vcGVuX2NhbGxzID0gMTExLCBpOwotCWNwdV9zZXRfdCAqY3B1X3NldDsKLQlzaXplX3QgY3B1X3NldF9zaXplOworCWNwdV9zZXRfdCBjcHVfc2V0OwogCWludCBpZCA9IHRyYWNlX2V2ZW50X19pZCgic3lzX2VudGVyX29wZW4iKTsKIAogCWlmIChpZCA8IDApIHsKQEAgLTM1MywxMyArMzUyLDggQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWNwdV9zZXQgPSBDUFVfQUxMT0MoY3B1cy0+bnIpOwogCi0JaWYgKGNwdV9zZXQgPT0gTlVMTCkKLQkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7Ci0KLQljcHVfc2V0X3NpemUgPSBDUFVfQUxMT0NfU0laRShjcHVzLT5ucik7Ci0JQ1BVX1pFUk9fUyhjcHVfc2V0X3NpemUsIGNwdV9zZXQpOworCUNQVV9aRVJPKCZjcHVfc2V0KTsKIAogCW1lbXNldCgmYXR0ciwgMCwgc2l6ZW9mKGF0dHIpKTsKIAlhdHRyLnR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKQEAgLTM2Nyw3ICszNjEsNyBAQAogCWV2c2VsID0gcGVyZl9ldnNlbF9fbmV3KCZhdHRyLCAwKTsKIAlpZiAoZXZzZWwgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fbmV3XG4iKTsKLQkJZ290byBvdXRfY3B1X2ZyZWU7CisJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOwogCX0KIAogCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzKSA8IDApIHsKQEAgLTM3OSwxNCArMzczLDI5IEBACiAKIAlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyArK2NwdSkgewogCQl1bnNpZ25lZCBpbnQgbmNhbGxzID0gbnJfb3Blbl9jYWxscyArIGNwdTsKKwkJLyoKKwkJICogWFhYIGV2ZW50dWFsbHkgbGlmdCB0aGlzIHJlc3RyaWN0aW9uIGluIGEgd2F5IHRoYXQKKwkJICoga2VlcHMgcGVyZiBidWlsZGluZyBvbiBvbGRlciBnbGliYyBpbnN0YWxsYXRpb25zCisJCSAqIHdpdGhvdXQgQ1BVX0FMTE9DLiAxMDI0IGNwdXMgaW4gMjAxMCBzdGlsbCBzZWVtcworCQkgKiBhIHJlYXNvbmFibGUgdXBwZXIgbGltaXQgdGhvIDotKQorCQkgKi8KKwkJaWYgKGNwdXMtPm1hcFtjcHVdID49IENQVV9TRVRTSVpFKSB7CisJCQlwcl9kZWJ1ZygiSWdub3JpbmcgQ1BVICVkXG4iLCBjcHVzLT5tYXBbY3B1XSk7CisJCQljb250aW51ZTsKKwkJfQogCi0JCUNQVV9TRVQoY3B1LCBjcHVfc2V0KTsKLQkJc2NoZWRfc2V0YWZmaW5pdHkoMCwgY3B1X3NldF9zaXplLCBjcHVfc2V0KTsKKwkJQ1BVX1NFVChjcHVzLT5tYXBbY3B1XSwgJmNwdV9zZXQpOworCQlpZiAoc2NoZWRfc2V0YWZmaW5pdHkoMCwgc2l6ZW9mKGNwdV9zZXQpLCAmY3B1X3NldCkgPCAwKSB7CisJCQlwcl9kZWJ1Zygic2NoZWRfc2V0YWZmaW5pdHkoKSBmYWlsZWQgb24gQ1BVICVkOiAlcyAiLAorCQkJCSBjcHVzLT5tYXBbY3B1XSwKKwkJCQkgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gb3V0X2Nsb3NlX2ZkOworCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBuY2FsbHM7ICsraSkgewogCQkJZmQgPSBvcGVuKCIvZXRjL3Bhc3N3ZCIsIE9fUkRPTkxZKTsKIAkJCWNsb3NlKGZkKTsKIAkJfQotCQlDUFVfQ0xSKGNwdSwgY3B1X3NldCk7CisJCUNQVV9DTFIoY3B1cy0+bWFwW2NwdV0sICZjcHVfc2V0KTsKIAl9CiAKIAkvKgpAQCAtNDAyLDYgKzQxMSw5IEBACiAJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgKytjcHUpIHsKIAkJdW5zaWduZWQgaW50IGV4cGVjdGVkOwogCisJCWlmIChjcHVzLT5tYXBbY3B1XSA+PSBDUFVfU0VUU0laRSkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChwZXJmX2V2c2VsX19yZWFkX29uX2NwdShldnNlbCwgY3B1LCAwKSA8IDApIHsKIAkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19vcGVuX3JlYWRfb25fY3B1XG4iKTsKIAkJCWdvdG8gb3V0X2Nsb3NlX2ZkOwpAQCAtNDA5LDggKzQyMSw4IEBACiAKIAkJZXhwZWN0ZWQgPSBucl9vcGVuX2NhbGxzICsgY3B1OwogCQlpZiAoZXZzZWwtPmNvdW50cy0+Y3B1W2NwdV0udmFsICE9IGV4cGVjdGVkKSB7Ci0JCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlTGRcbiIsCi0JCQkJIGV4cGVjdGVkLCBjcHUsIGV2c2VsLT5jb3VudHMtPmNwdVtjcHVdLnZhbCk7CisJCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fcmVhZF9vbl9jcHU6IGV4cGVjdGVkIHRvIGludGVyY2VwdCAlZCBjYWxscyBvbiBjcHUgJWQsIGdvdCAlIiBQUkl1NjQgIlxuIiwKKwkJCQkgZXhwZWN0ZWQsIGNwdXMtPm1hcFtjcHVdLCBldnNlbC0+Y291bnRzLT5jcHVbY3B1XS52YWwpOwogCQkJZ290byBvdXRfY2xvc2VfZmQ7CiAJCX0KIAl9CkBAIC00MjAsOCArNDMyLDYgQEAKIAlwZXJmX2V2c2VsX19jbG9zZV9mZChldnNlbCwgMSwgdGhyZWFkcy0+bnIpOwogb3V0X2V2c2VsX2RlbGV0ZToKIAlwZXJmX2V2c2VsX19kZWxldGUoZXZzZWwpOwotb3V0X2NwdV9mcmVlOgotCUNQVV9GUkVFKGNwdV9zZXQpOwogb3V0X3RocmVhZF9tYXBfZGVsZXRlOgogCXRocmVhZF9tYXBfX2RlbGV0ZSh0aHJlYWRzKTsKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRpbWVjaGFydC5jCmluZGV4IDc0NmNmMDMuLjBhY2U3ODYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10aW1lY2hhcnQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGltZWNoYXJ0LmMKQEAgLTI2NCw5ICsyNjQsNiBAQAogCQljLT5zdGFydF90aW1lID0gc3RhcnQ7CiAJaWYgKHAtPnN0YXJ0X3RpbWUgPT0gMCB8fCBwLT5zdGFydF90aW1lID4gc3RhcnQpCiAJCXAtPnN0YXJ0X3RpbWUgPSBzdGFydDsKLQotCWlmIChjcHUgPiBudW1jcHVzKQotCQludW1jcHVzID0gY3B1OwogfQogCiAjZGVmaW5lIE1BWF9DUFVTIDQwOTYKQEAgLTUxMSw2ICs1MDgsOSBAQAogCQlpZiAoIWV2ZW50X3N0cikKIAkJCXJldHVybiAwOwogCisJCWlmIChzYW1wbGUtPmNwdSA+IG51bWNwdXMpCisJCQludW1jcHVzID0gc2FtcGxlLT5jcHU7CisKIAkJaWYgKHN0cmNtcChldmVudF9zdHIsICJwb3dlcjpjcHVfaWRsZSIpID09IDApIHsKIAkJCXN0cnVjdCBwb3dlcl9wcm9jZXNzb3JfZW50cnkgKnBwZSA9ICh2b2lkICopdGU7CiAJCQlpZiAocHBlLT5zdGF0ZSA9PSAodTMyKVBXUl9FVkVOVF9FWElUKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCmluZGV4IDA1MzQ0YzYuLjVhMjlkOWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHRlcm1pb3MuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx0aW1lLmg+CkBAIC0yMTQsNyArMjE1LDcgQEAKIAlsZW4gPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAKIAlzcHJpbnRmKGNvbW1hbmQsCi0JCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqTHggLS1zdG9wLWFkZHJlc3M9JSMwKkx4IC1kUyAlcyIsCisJCSJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtLXN0b3AtYWRkcmVzcz0lIzAqIiBQUkl4NjQgIiAtZFMgJXMiLAogCQlCSVRTX1BFUl9MT05HIC8gNCwgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJQklUU19QRVJfTE9ORyAvIDQsIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLCBwYXRoKTsKIApAQCAtMzA4LDcgKzMwOSw3IEBACiAJc3RydWN0IHNvdXJjZV9saW5lICpsaW5lOwogCWNoYXIgcGF0dGVybltQQVRURVJOX0xFTiArIDFdOwogCi0Jc3ByaW50ZihwYXR0ZXJuLCAiJTAqTHggPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAorCXNwcmludGYocGF0dGVybiwgIiUwKiIgUFJJeDY0ICIgPCIsIEJJVFNfUEVSX0xPTkcgLyA0LAogCQltYXBfX3JpcF8yb2JqZHVtcChzeW1lLT5tYXAsIHN5bWJvbC0+c3RhcnQpKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmc3ltZS0+c3JjLT5sb2NrKTsKQEAgLTUzNyw3ICs1MzgsNyBAQAogCWlmIChucl9jb3VudGVycyA9PSAxIHx8ICFkaXNwbGF5X3dlaWdodGVkKSB7CiAJCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdDsKIAkJZmlyc3QgPSBsaXN0X2VudHJ5KGV2c2VsX2xpc3QubmV4dCwgc3RydWN0IHBlcmZfZXZzZWwsIG5vZGUpOwotCQlwcmludGYoIiVMZCIsIGZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOworCQlwcmludGYoIiUiIFBSSXU2NCwgKHVpbnQ2NF90KWZpcnN0LT5hdHRyLnNhbXBsZV9wZXJpb2QpOwogCQlpZiAoZnJlcSkKIAkJCXByaW50ZigiSHogIik7CiAJCWVsc2UKQEAgLTY0MCw3ICs2NDEsNyBAQAogCiAJCXBlcmNlbnRfY29sb3JfZnByaW50ZihzdGRvdXQsICIlNC4xZiUlIiwgcGNudCk7CiAJCWlmICh2ZXJib3NlKQotCQkJcHJpbnRmKCIgJTAxNmxseCIsIHN5bS0+c3RhcnQpOworCQkJcHJpbnRmKCIgJTAxNiIgUFJJeDY0LCBzeW0tPnN0YXJ0KTsKIAkJcHJpbnRmKCIgJS0qLipzIiwgc3ltX3dpZHRoLCBzeW1fd2lkdGgsIHN5bS0+bmFtZSk7CiAJCXByaW50ZigiICUtKi4qc1xuIiwgZHNvX3dpZHRoLCBkc29fd2lkdGgsCiAJCSAgICAgICBkc29fd2lkdGggPj0gc3ltZS0+bWFwLT5kc28tPmxvbmdfbmFtZV9sZW4gPwpAQCAtMTMwNSw3ICsxMzA2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAodGFyZ2V0X3RpZCAhPSAtMSkKLQkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHRhcmdldF90aWQsIGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKKwkJZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkX21hcCh0aHJlYWRzLCBldmVudF9fcHJvY2Vzcywgc2Vzc2lvbik7CiAJZWxzZQogCQlldmVudF9fc3ludGhlc2l6ZV90aHJlYWRzKGV2ZW50X19wcm9jZXNzLCBzZXNzaW9uKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwppbmRleCAyMzAyZWMwLi41MGQwYTkzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuYwpAQCAtMjYzLDExICsyNjMsMTIgQEAKIAkJCQkJICAgICBwcm9jZXNzLCBzZXNzaW9uKTsKIH0KIAotaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZChwaWRfdCBwaWQsIGV2ZW50X19oYW5kbGVyX3QgcHJvY2VzcywKLQkJCSAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbikKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLAorCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCiB7CiAJZXZlbnRfdCAqY29tbV9ldmVudCwgKm1tYXBfZXZlbnQ7Ci0JaW50IGVyciA9IC0xOworCWludCBlcnIgPSAtMSwgdGhyZWFkOwogCiAJY29tbV9ldmVudCA9IG1hbGxvYyhzaXplb2YoY29tbV9ldmVudC0+Y29tbSkgKyBzZXNzaW9uLT5pZF9oZHJfc2l6ZSk7CiAJaWYgKGNvbW1fZXZlbnQgPT0gTlVMTCkKQEAgLTI3Nyw4ICsyNzgsMTUgQEAKIAlpZiAobW1hcF9ldmVudCA9PSBOVUxMKQogCQlnb3RvIG91dF9mcmVlX2NvbW07CiAKLQllcnIgPSBfX2V2ZW50X19zeW50aGVzaXplX3RocmVhZChjb21tX2V2ZW50LCBtbWFwX2V2ZW50LCBwaWQsCi0JCQkJCSBwcm9jZXNzLCBzZXNzaW9uKTsKKwllcnIgPSAwOworCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgdGhyZWFkcy0+bnI7ICsrdGhyZWFkKSB7CisJCWlmIChfX2V2ZW50X19zeW50aGVzaXplX3RocmVhZChjb21tX2V2ZW50LCBtbWFwX2V2ZW50LAorCQkJCQkgICAgICAgdGhyZWFkcy0+bWFwW3RocmVhZF0sCisJCQkJCSAgICAgICBwcm9jZXNzLCBzZXNzaW9uKSkgeworCQkJZXJyID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0KIAlmcmVlKG1tYXBfZXZlbnQpOwogb3V0X2ZyZWVfY29tbToKIAlmcmVlKGNvbW1fZXZlbnQpOwpAQCAtNDU5LDcgKzQ2Nyw4IEBACiBpbnQgZXZlbnRfX3Byb2Nlc3NfbG9zdChldmVudF90ICpzZWxmLCBzdHJ1Y3Qgc2FtcGxlX2RhdGEgKnNhbXBsZSBfX3VzZWQsCiAJCQlzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQogewotCWR1bXBfcHJpbnRmKCI6IGlkOiVMZDogbG9zdDolTGRcbiIsIHNlbGYtPmxvc3QuaWQsIHNlbGYtPmxvc3QubG9zdCk7CisJZHVtcF9wcmludGYoIjogaWQ6JSIgUFJJdTY0ICI6IGxvc3Q6JSIgUFJJdTY0ICJcbiIsCisJCSAgICBzZWxmLT5sb3N0LmlkLCBzZWxmLT5sb3N0Lmxvc3QpOwogCXNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QgKz0gc2VsZi0+bG9zdC5sb3N0OwogCXJldHVybiAwOwogfQpAQCAtNTc1LDcgKzU4NCw3IEBACiAJdTggY3B1bW9kZSA9IHNlbGYtPmhlYWRlci5taXNjICYgUEVSRl9SRUNPUkRfTUlTQ19DUFVNT0RFX01BU0s7CiAJaW50IHJldCA9IDA7CiAKLQlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSNMeCglI0x4KSBAICUjTHhdOiAlc1xuIiwKKwlkdW1wX3ByaW50ZigiICVkLyVkOiBbJSMiIFBSSXg2NCAiKCUjIiBQUkl4NjQgIikgQCAlIyIgUFJJeDY0ICJdOiAlc1xuIiwKIAkJCXNlbGYtPm1tYXAucGlkLCBzZWxmLT5tbWFwLnRpZCwgc2VsZi0+bW1hcC5zdGFydCwKIAkJCXNlbGYtPm1tYXAubGVuLCBzZWxmLT5tbWFwLnBnb2ZmLCBzZWxmLT5tbWFwLmZpbGVuYW1lKTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2ZW50LmggYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaAppbmRleCAyYjdlOTE5Li5jYzdiNTJmIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZlbnQuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZlbnQuaApAQCAtMTM1LDE0ICsxMzUsMTYgQEAKIHZvaWQgZXZlbnRfX3ByaW50X3RvdGFscyh2b2lkKTsKIAogc3RydWN0IHBlcmZfc2Vzc2lvbjsKK3N0cnVjdCB0aHJlYWRfbWFwOwogCiB0eXBlZGVmIGludCAoKmV2ZW50X19oYW5kbGVyX3N5bnRoX3QpKGV2ZW50X3QgKmV2ZW50LCAKIAkJCQkgICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKIHR5cGVkZWYgaW50ICgqZXZlbnRfX2hhbmRsZXJfdCkoZXZlbnRfdCAqZXZlbnQsIHN0cnVjdCBzYW1wbGVfZGF0YSAqc2FtcGxlLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogCi1pbnQgZXZlbnRfX3N5bnRoZXNpemVfdGhyZWFkKHBpZF90IHBpZCwgZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAotCQkJICAgICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKTsKK2ludCBldmVudF9fc3ludGhlc2l6ZV90aHJlYWRfbWFwKHN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLAorCQkJCSBldmVudF9faGFuZGxlcl90IHByb2Nlc3MsCisJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwogaW50IGV2ZW50X19zeW50aGVzaXplX3RocmVhZHMoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLAogCQkJICAgICAgc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbik7CiBpbnQgZXZlbnRfX3N5bnRoZXNpemVfa2VybmVsX21tYXAoZXZlbnRfX2hhbmRsZXJfdCBwcm9jZXNzLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCBmNWNmZWQ2Li5kODU3NWQzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtOTAsNyArOTAsNyBAQAogCWludCBjcHUsIHRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9jb3VudHNfdmFsdWVzICphZ2dyID0gJmV2c2VsLT5jb3VudHMtPmFnZ3IsIGNvdW50OwogCi0JYWdnci0+dmFsID0gMDsKKwlhZ2dyLT52YWwgPSBhZ2dyLT5lbmEgPSBhZ2dyLT5ydW4gPSAwOwogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBuY3B1czsgY3B1KyspIHsKIAkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCBudGhyZWFkczsgdGhyZWFkKyspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oZWFkZXIuYwppbmRleCA5ODlmYTJkLi5mNmE5MjllIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGVhZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL2hlYWRlci5jCkBAIC03OTgsOCArNzk4LDggQEAKIAkJCQkgICAgICBpbnQgZmVhdCwgaW50IGZkKQogewogCWlmIChsc2VlayhmZCwgc2VsZi0+b2Zmc2V0LCBTRUVLX1NFVCkgPT0gKG9mZl90KS0xKSB7Ci0JCXByX2RlYnVnKCJGYWlsZWQgdG8gbHNlZWsgdG8gJUxkIG9mZnNldCBmb3IgZmVhdHVyZSAlZCwgIgotCQkJICJjb250aW51aW5nLi4uXG4iLCBzZWxmLT5vZmZzZXQsIGZlYXQpOworCQlwcl9kZWJ1ZygiRmFpbGVkIHRvIGxzZWVrIHRvICUiIFBSSXU2NCAiIG9mZnNldCBmb3IgZmVhdHVyZSAiCisJCQkgICIlZCwgY29udGludWluZy4uLlxuIiwgc2VsZi0+b2Zmc2V0LCBmZWF0KTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvaGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2hpc3QuYwppbmRleCBjNzQ5YmE2Li5kZjUxNTYwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvaGlzdC5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKQEAgLTU4NSw2ICs1ODUsNyBAQAogewogCXN0cnVjdCBzb3J0X2VudHJ5ICpzZTsKIAl1NjQgcGVyaW9kLCB0b3RhbCwgcGVyaW9kX3N5cywgcGVyaW9kX3VzLCBwZXJpb2RfZ3Vlc3Rfc3lzLCBwZXJpb2RfZ3Vlc3RfdXM7CisJdTY0IG5yX2V2ZW50czsKIAljb25zdCBjaGFyICpzZXAgPSBzeW1ib2xfY29uZi5maWVsZF9zZXA7CiAJaW50IHJldDsKIApAQCAtNTkzLDYgKzU5NCw3IEBACiAKIAlpZiAocGFpcl9oaXN0cykgewogCQlwZXJpb2QgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kIDogMDsKKwkJbnJfZXZlbnRzID0gc2VsZi0+cGFpciA/IHNlbGYtPnBhaXItPm5yX2V2ZW50cyA6IDA7CiAJCXRvdGFsID0gcGFpcl9oaXN0cy0+c3RhdHMudG90YWxfcGVyaW9kOwogCQlwZXJpb2Rfc3lzID0gc2VsZi0+cGFpciA/IHNlbGYtPnBhaXItPnBlcmlvZF9zeXMgOiAwOwogCQlwZXJpb2RfdXMgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kX3VzIDogMDsKQEAgLTYwMCw2ICs2MDIsNyBAQAogCQlwZXJpb2RfZ3Vlc3RfdXMgPSBzZWxmLT5wYWlyID8gc2VsZi0+cGFpci0+cGVyaW9kX2d1ZXN0X3VzIDogMDsKIAl9IGVsc2UgewogCQlwZXJpb2QgPSBzZWxmLT5wZXJpb2Q7CisJCW5yX2V2ZW50cyA9IHNlbGYtPm5yX2V2ZW50czsKIAkJdG90YWwgPSBzZXNzaW9uX3RvdGFsOwogCQlwZXJpb2Rfc3lzID0gc2VsZi0+cGVyaW9kX3N5czsKIAkJcGVyaW9kX3VzID0gc2VsZi0+cGVyaW9kX3VzOwpAQCAtNjM2LDEzICs2MzksMTMgQEAKIAkJCX0KIAkJfQogCX0gZWxzZQotCQlyZXQgPSBzbnByaW50ZihzLCBzaXplLCBzZXAgPyAiJWxsZCIgOiAiJTEybGxkICIsIHBlcmlvZCk7CisJCXJldCA9IHNucHJpbnRmKHMsIHNpemUsIHNlcCA/ICIlIiBQUkl1NjQgOiAiJTEyIiBQUkl1NjQgIiAiLCBwZXJpb2QpOwogCiAJaWYgKHN5bWJvbF9jb25mLnNob3dfbnJfc2FtcGxlcykgewogCQlpZiAoc2VwKQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyVsbGQiLCAqc2VwLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlYyUiIFBSSXU2NCwgKnNlcCwgbnJfZXZlbnRzKTsKIAkJZWxzZQotCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTFsbGQiLCBwZXJpb2QpOworCQkJcmV0ICs9IHNucHJpbnRmKHMgKyByZXQsIHNpemUgLSByZXQsICIlMTEiIFBSSXU2NCwgbnJfZXZlbnRzKTsKIAl9CiAKIAlpZiAocGFpcl9oaXN0cykgewpAQCAtOTcxLDcgKzk3NCw3IEBACiAJc3ltX3NpemUgPSBzeW0tPmVuZCAtIHN5bS0+c3RhcnQ7CiAJb2Zmc2V0ID0gaXAgLSBzeW0tPnN0YXJ0OwogCi0JcHJfZGVidWczKCIlczogaXA9JSNMeFxuIiwgX19mdW5jX18sIHNlbGYtPm1zLm1hcC0+dW5tYXBfaXAoc2VsZi0+bXMubWFwLCBpcCkpOworCXByX2RlYnVnMygiJXM6IGlwPSUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sIHNlbGYtPm1zLm1hcC0+dW5tYXBfaXAoc2VsZi0+bXMubWFwLCBpcCkpOwogCiAJaWYgKG9mZnNldCA+PSBzeW1fc2l6ZSkKIAkJcmV0dXJuIDA7CkBAIC05ODAsOCArOTgzLDkgQEAKIAloLT5zdW0rKzsKIAloLT5pcFtvZmZzZXRdKys7CiAKLQlwcl9kZWJ1ZzMoIiUjTHggJXM6IHBlcmlvZCsrIFtpcDogJSNMeCwgJSNMeF0gPT4gJUxkXG4iLCBzZWxmLT5tcy5zeW0tPnN0YXJ0LAotCQkgIHNlbGYtPm1zLnN5bS0+bmFtZSwgaXAsIGlwIC0gc2VsZi0+bXMuc3ltLT5zdGFydCwgaC0+aXBbb2Zmc2V0XSk7CisJcHJfZGVidWczKCIlIyIgUFJJeDY0ICIgJXM6IHBlcmlvZCsrIFtpcDogJSMiIFBSSXg2NCAiLCAlIyIgUFJJeDY0CisJCSAgIl0gPT4gJSIgUFJJdTY0ICJcbiIsIHNlbGYtPm1zLnN5bS0+c3RhcnQsIHNlbGYtPm1zLnN5bS0+bmFtZSwKKwkJICBpcCwgaXAgLSBzZWxmLT5tcy5zeW0tPnN0YXJ0LCBoLT5pcFtvZmZzZXRdKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEzMiw3ICsxMTM2LDcgQEAKIAkJZ290byBvdXRfZnJlZV9maWxlbmFtZTsKIAl9CiAKLQlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjTHgsIGVuZD0lI0x4XG4iLCBfX2Z1bmNfXywKKwlwcl9kZWJ1ZygiJXM6IGZpbGVuYW1lPSVzLCBzeW09JXMsIHN0YXJ0PSUjIiBQUkl4NjQgIiwgZW5kPSUjIiBQUkl4NjQgIlxuIiwgX19mdW5jX18sCiAJCSBmaWxlbmFtZSwgc3ltLT5uYW1lLCBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCksCiAJCSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5lbmQpKTsKIApAQCAtMTE0Miw3ICsxMTQ2LDcgQEAKIAkJIGRzbywgZHNvLT5sb25nX25hbWUsIHN5bSwgc3ltLT5uYW1lKTsKIAogCXNucHJpbnRmKGNvbW1hbmQsIHNpemVvZihjb21tYW5kKSwKLQkJICJvYmpkdW1wIC0tc3RhcnQtYWRkcmVzcz0weCUwMTZMeCAtLXN0b3AtYWRkcmVzcz0weCUwMTZMeCAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAorCQkgIm9iamR1bXAgLS1zdGFydC1hZGRyZXNzPTB4JTAxNiIgUFJJeDY0ICIgLS1zdG9wLWFkZHJlc3M9MHglMDE2IiBQUkl4NjQgIiAtZFMgLUMgJXN8Z3JlcCAtdiAlc3xleHBhbmQiLAogCQkgbWFwX19yaXBfMm9iamR1bXAobWFwLCBzeW0tPnN0YXJ0KSwKIAkJIG1hcF9fcmlwXzJvYmpkdW1wKG1hcCwgc3ltLT5lbmQpLAogCQkgc3ltZnNfZmlsZW5hbWUsIGZpbGVuYW1lKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKaW5kZXggOGJlMGI5Ni4uMzA1Yzg0OCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgvYml0b3BzLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9QRVJGX0xJTlVYX0JJVE9QU19IXwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vaHdlaWdodC5oPgogCiAjZGVmaW5lIEJJVFNfUEVSX0xPTkcgX19XT1JEU0laRQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL21hcC5jCmluZGV4IDNhN2ViNmUuLmExNmVjYWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvbWFwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAic3ltYm9sLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTk1LDcgKzE5Niw3IEBACiAKIHNpemVfdCBtYXBfX2ZwcmludGYoc3RydWN0IG1hcCAqc2VsZiwgRklMRSAqZnApCiB7Ci0JcmV0dXJuIGZwcmludGYoZnAsICIgJUx4LSVMeCAlTHggJXNcbiIsCisJcmV0dXJuIGZwcmludGYoZnAsICIgJSIgUFJJeDY0ICItJSIgUFJJeDY0ICIgJSIgUFJJeDY0ICIgJXNcbiIsCiAJCSAgICAgICBzZWxmLT5zdGFydCwgc2VsZi0+ZW5kLCBzZWxmLT5wZ29mZiwgc2VsZi0+ZHNvLT5uYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCmluZGV4IGJjMjczMmUuLjEzNWY2OWIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYworKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKQEAgLTI3OSw3ICsyNzksNyBAQAogCXN0YXRpYyBjaGFyIGJ1ZlszMl07CiAKIAlpZiAodHlwZSA9PSBQRVJGX1RZUEVfUkFXKSB7Ci0JCXNwcmludGYoYnVmLCAicmF3IDB4JWxseCIsIGNvbmZpZyk7CisJCXNwcmludGYoYnVmLCAicmF3IDB4JSIgUFJJeDY0LCBjb25maWcpOwogCQlyZXR1cm4gYnVmOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5oCmluZGV4IGI4MmNhZmIuLjQ1OGUzZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuaAorKysgYi90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmgKQEAgLTIzLDcgKzIzLDcgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgdHJhY2Vwb2ludF9wYXRoICp0cmFjZXBvaW50X2lkX3RvX3BhdGgodTY0IGNvbmZpZyk7Ci1leHRlcm4gYm9vbCBoYXZlX3RyYWNlcG9pbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmV2c2VsX2xpc3QpOworZXh0ZXJuIGJvb2wgaGF2ZV90cmFjZXBvaW50cyhzdHJ1Y3QgbGlzdF9oZWFkICpldmxpc3QpOwogCiBleHRlcm4gaW50CQkJbnJfY291bnRlcnM7CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1ldmVudC5jIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKaW5kZXggMTI4YWFhYi4uNmUyOWQ5YyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXN5bSA9IF9fZmluZF9rZXJuZWxfZnVuY3Rpb25fYnlfbmFtZSh0cC0+c3ltYm9sLCAmbWFwKTsKIAlpZiAoc3ltKSB7CiAJCWFkZHIgPSBtYXAtPnVubWFwX2lwKG1hcCwgc3ltLT5zdGFydCArIHRwLT5vZmZzZXQpOwotCQlwcl9kZWJ1ZygidHJ5IHRvIGZpbmQgJXMrJWxkQCVsbHhcbiIsIHRwLT5zeW1ib2wsCisJCXByX2RlYnVnKCJ0cnkgdG8gZmluZCAlcyslbGRAJSIgUFJJeDY0ICJcbiIsIHRwLT5zeW1ib2wsCiAJCQkgdHAtPm9mZnNldCwgYWRkcik7CiAJCXJldCA9IGZpbmRfcGVyZl9wcm9iZV9wb2ludCgodW5zaWduZWQgbG9uZylhZGRyLCBwcCk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKaW5kZXggMzEzZGFjMi4uMTA1ZjAwYiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYworKysgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCkBAIC02NTIsMTAgKzY1MiwxMSBAQAogewogCXVuc2lnbmVkIGludCBpOwogCi0JcHJpbnRmKCIuLi4gY2hhaW46IG5yOiVMdVxuIiwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yKTsKKwlwcmludGYoIi4uLiBjaGFpbjogbnI6JSIgUFJJdTY0ICJcbiIsIHNhbXBsZS0+Y2FsbGNoYWluLT5ucik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2FtcGxlLT5jYWxsY2hhaW4tPm5yOyBpKyspCi0JCXByaW50ZigiLi4uLi4gJTJkOiAlMDE2THhcbiIsIGksIHNhbXBsZS0+Y2FsbGNoYWluLT5pcHNbaV0pOworCQlwcmludGYoIi4uLi4uICUyZDogJTAxNiIgUFJJeDY0ICJcbiIsCisJCSAgICAgICBpLCBzYW1wbGUtPmNhbGxjaGFpbi0+aXBzW2ldKTsKIH0KIAogc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19wcmludF90c3RhbXAoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKQEAgLTY3Miw3ICs2NzMsNyBAQAogCQlwcmludGYoIiV1ICIsIHNhbXBsZS0+Y3B1KTsKIAogCWlmIChzZXNzaW9uLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX1RJTUUpCi0JCXByaW50ZigiJUx1ICIsIHNhbXBsZS0+dGltZSk7CisJCXByaW50ZigiJSIgUFJJdTY0ICIgIiwgc2FtcGxlLT50aW1lKTsKIH0KIAogc3RhdGljIHZvaWQgZHVtcF9ldmVudChzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLCBldmVudF90ICpldmVudCwKQEAgLTY4MSwxNiArNjgyLDE2IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlwcmludGYoIlxuJSNMeCBbJSN4XTogZXZlbnQ6ICVkXG4iLCBmaWxlX29mZnNldCwgZXZlbnQtPmhlYWRlci5zaXplLAotCSAgICAgICBldmVudC0+aGVhZGVyLnR5cGUpOworCXByaW50ZigiXG4lIyIgUFJJeDY0ICIgWyUjeF06IGV2ZW50OiAlZFxuIiwKKwkgICAgICAgZmlsZV9vZmZzZXQsIGV2ZW50LT5oZWFkZXIuc2l6ZSwgZXZlbnQtPmhlYWRlci50eXBlKTsKIAogCXRyYWNlX2V2ZW50KGV2ZW50KTsKIAogCWlmIChzYW1wbGUpCiAJCXBlcmZfc2Vzc2lvbl9fcHJpbnRfdHN0YW1wKHNlc3Npb24sIGV2ZW50LCBzYW1wbGUpOwogCi0JcHJpbnRmKCIlI0x4IFslI3hdOiBQRVJGX1JFQ09SRF8lcyIsIGZpbGVfb2Zmc2V0LCBldmVudC0+aGVhZGVyLnNpemUsCi0JICAgICAgIGV2ZW50X19nZXRfZXZlbnRfbmFtZShldmVudC0+aGVhZGVyLnR5cGUpKTsKKwlwcmludGYoIiUjIiBQUkl4NjQgIiBbJSN4XTogUEVSRl9SRUNPUkRfJXMiLCBmaWxlX29mZnNldCwKKwkgICAgICAgZXZlbnQtPmhlYWRlci5zaXplLCBldmVudF9fZ2V0X2V2ZW50X25hbWUoZXZlbnQtPmhlYWRlci50eXBlKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGR1bXBfc2FtcGxlKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sIGV2ZW50X3QgKmV2ZW50LApAQCAtNjk5LDggKzcwMCw5IEBACiAJaWYgKCFkdW1wX3RyYWNlKQogCQlyZXR1cm47CiAKLQlwcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSNMeCBwZXJpb2Q6ICVMZFxuIiwgZXZlbnQtPmhlYWRlci5taXNjLAotCSAgICAgICBzYW1wbGUtPnBpZCwgc2FtcGxlLT50aWQsIHNhbXBsZS0+aXAsIHNhbXBsZS0+cGVyaW9kKTsKKwlwcmludGYoIihJUCwgJWQpOiAlZC8lZDogJSMiIFBSSXg2NCAiIHBlcmlvZDogJSIgUFJJdTY0ICJcbiIsCisJICAgICAgIGV2ZW50LT5oZWFkZXIubWlzYywgc2FtcGxlLT5waWQsIHNhbXBsZS0+dGlkLCBzYW1wbGUtPmlwLAorCSAgICAgICBzYW1wbGUtPnBlcmlvZCk7CiAKIAlpZiAoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pCiAJCWNhbGxjaGFpbl9fcHJpbnRmKHNhbXBsZSk7CkBAIC04NDMsOCArODQ1LDggQEAKIHsKIAlpZiAob3BzLT5sb3N0ID09IGV2ZW50X19wcm9jZXNzX2xvc3QgJiYKIAkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfbG9zdCAhPSAwKSB7Ci0JCXVpX193YXJuaW5nKCJQcm9jZXNzZWQgJUx1IGV2ZW50cyBhbmQgTE9TVCAlTHUhXG5cbiIKLQkJCSAgICAiQ2hlY2sgSU8vQ1BVIG92ZXJsb2FkIVxuXG4iLAorCQl1aV9fd2FybmluZygiUHJvY2Vzc2VkICUiIFBSSXU2NCAiIGV2ZW50cyBhbmQgTE9TVCAlIiBQUkl1NjQKKwkJCSAgICAiIVxuXG5DaGVjayBJTy9DUFUgb3ZlcmxvYWQhXG5cbiIsCiAJCQkgICAgc2Vzc2lvbi0+aGlzdHMuc3RhdHMudG90YWxfcGVyaW9kLAogCQkJICAgIHNlc3Npb24tPmhpc3RzLnN0YXRzLnRvdGFsX2xvc3QpOwogCX0KQEAgLTkxOCw3ICs5MjAsNyBAQAogCiAJaWYgKHNpemUgPT0gMCB8fAogCSAgICAoc2tpcCA9IHBlcmZfc2Vzc2lvbl9fcHJvY2Vzc19ldmVudChzZWxmLCAmZXZlbnQsIG9wcywgaGVhZCkpIDwgMCkgewotCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGhlYWQsIGV2ZW50LmhlYWRlci5zaXplLCBldmVudC5oZWFkZXIudHlwZSk7CiAJCS8qCiAJCSAqIGFzc3VtZSB3ZSBsb3N0IHRyYWNrIG9mIHRoZSBzdHJlYW0sIGNoZWNrIGFsaWdubWVudCwgYW5kCkBAIC0xMDIzLDcgKzEwMjUsNyBAQAogCiAJaWYgKHNpemUgPT0gMCB8fAogCSAgICBwZXJmX3Nlc3Npb25fX3Byb2Nlc3NfZXZlbnQoc2Vzc2lvbiwgZXZlbnQsIG9wcywgZmlsZV9wb3MpIDwgMCkgewotCQlkdW1wX3ByaW50ZigiJSNMeCBbJSN4XTogc2tpcHBpbmcgdW5rbm93biBoZWFkZXIgdHlwZTogJWRcbiIsCisJCWR1bXBfcHJpbnRmKCIlIyIgUFJJeDY0ICIgWyUjeF06IHNraXBwaW5nIHVua25vd24gaGVhZGVyIHR5cGU6ICVkXG4iLAogCQkJICAgIGZpbGVfb2Zmc2V0ICsgaGVhZCwgZXZlbnQtPmhlYWRlci5zaXplLAogCQkJICAgIGV2ZW50LT5oZWFkZXIudHlwZSk7CiAJCS8qCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMgYi90b29scy9wZXJmL3V0aWwvc3ZnaGVscGVyLmMKaW5kZXggYjM2MzdkYi4uOTZjODY2MCAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N2Z2hlbHBlci5jCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zdmdoZWxwZXIuYwpAQCAtMTIsNiArMTIsNyBAQAogICogb2YgdGhlIExpY2Vuc2UuCiAgKi8KIAorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQzLDExICs0NCwxMSBAQAogCXJldHVybiBjcHUyc2xvdChjcHUpICogU0xPVF9NVUxUOwogfQogCi1zdGF0aWMgZG91YmxlIHRpbWUycGl4ZWxzKHU2NCB0aW1lKQorc3RhdGljIGRvdWJsZSB0aW1lMnBpeGVscyh1NjQgX190aW1lKQogewogCWRvdWJsZSBYOwogCi0JWCA9IDEuMCAqIHN2Z19wYWdlX3dpZHRoICogKHRpbWUgLSBmaXJzdF90aW1lKSAvIChsYXN0X3RpbWUgLSBmaXJzdF90aW1lKTsKKwlYID0gMS4wICogc3ZnX3BhZ2Vfd2lkdGggKiAoX190aW1lIC0gZmlyc3RfdGltZSkgLyAobGFzdF90aW1lIC0gZmlyc3RfdGltZSk7CiAJcmV0dXJuIFg7CiB9CiAKQEAgLTk0LDcgKzk1LDcgQEAKIAogCXRvdGFsX2hlaWdodCA9ICgxICsgcm93cyArIGNwdTJzbG90KGNwdXMpKSAqIFNMT1RfTVVMVDsKIAlmcHJpbnRmKHN2Z2ZpbGUsICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgc3RhbmRhbG9uZT1cIm5vXCI/PiBcbiIpOwotCWZwcmludGYoc3ZnZmlsZSwgIjxzdmcgd2lkdGg9XCIlaVwiIGhlaWdodD1cIiVsbHVcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIiwgc3ZnX3BhZ2Vfd2lkdGgsIHRvdGFsX2hlaWdodCk7CisJZnByaW50ZihzdmdmaWxlLCAiPHN2ZyB3aWR0aD1cIiVpXCIgaGVpZ2h0PVwiJSIgUFJJdTY0ICJcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuIiwgc3ZnX3BhZ2Vfd2lkdGgsIHRvdGFsX2hlaWdodCk7CiAKIAlmcHJpbnRmKHN2Z2ZpbGUsICI8ZGVmcz5cbiAgPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPlxuICAgIDwhW0NEQVRBW1xuIik7CiAKQEAgLTQ1NSw5ICs0NTYsOSBAQAogCQlyZXR1cm47CiAKIAlzdmdfbGVnZW5kYV9ib3goMCwJIlJ1bm5pbmciLCAic2FtcGxlIik7Ci0Jc3ZnX2xlZ2VuZGFfYm94KDEwMCwJIklkbGUiLCJyZWN0LmMxIik7Ci0Jc3ZnX2xlZ2VuZGFfYm94KDIwMCwJIkRlZXBlciBJZGxlIiwgInJlY3QuYzMiKTsKLQlzdmdfbGVnZW5kYV9ib3goMzUwLAkiRGVlcGVzdCBJZGxlIiwgInJlY3QuYzYiKTsKKwlzdmdfbGVnZW5kYV9ib3goMTAwLAkiSWRsZSIsImMxIik7CisJc3ZnX2xlZ2VuZGFfYm94KDIwMCwJIkRlZXBlciBJZGxlIiwgImMzIik7CisJc3ZnX2xlZ2VuZGFfYm94KDM1MCwJIkRlZXBlc3QgSWRsZSIsICJjNiIpOwogCXN2Z19sZWdlbmRhX2JveCg1NTAsCSJTbGVlcGluZyIsICJwcm9jZXNzMiIpOwogCXN2Z19sZWdlbmRhX2JveCg2NTAsCSJXYWl0aW5nIGZvciBjcHUiLCAid2FpdGluZyIpOwogCXN2Z19sZWdlbmRhX2JveCg4MDAsCSJCbG9ja2VkIG9uIElPIiwgImJsb2NrZWQiKTsKQEAgLTQ4Myw3ICs0ODQsNyBAQAogCQkJY29sb3IgPSAxMjg7CiAJCX0KIAotCQlmcHJpbnRmKHN2Z2ZpbGUsICI8bGluZSB4MT1cIiU0LjhmXCIgeTE9XCIlNC4yZlwiIHgyPVwiJTQuOGZcIiB5Mj1cIiVsbHVcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCisJCWZwcmludGYoc3ZnZmlsZSwgIjxsaW5lIHgxPVwiJTQuOGZcIiB5MT1cIiU0LjJmXCIgeDI9XCIlNC44ZlwiIHkyPVwiJSIgUFJJdTY0ICJcIiBzdHlsZT1cInN0cm9rZTpyZ2IoJWksJWksJWkpO3N0cm9rZS13aWR0aDolMS4zZlwiLz5cbiIsCiAJCQl0aW1lMnBpeGVscyhpKSwgU0xPVF9NVUxULzIsIHRpbWUycGl4ZWxzKGkpLCB0b3RhbF9oZWlnaHQsIGNvbG9yLCBjb2xvciwgY29sb3IsIHRoaWNrbmVzcyk7CiAKIAkJaSArPSAxMDAwMDAwMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYwppbmRleCAxNWNjZmJhLi43ODIxZDBlIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgImJ1aWxkLWlkLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJzeW1ib2wuaCIKQEAgLTE1Myw3ICsxNTQsNyBAQAogCXNlbGYtPmJpbmRpbmcgPSBiaW5kaW5nOwogCXNlbGYtPm5hbWVsZW4gPSBuYW1lbGVuIC0gMTsKIAotCXByX2RlYnVnNCgiJXM6ICVzICUjTHgtJSNMeFxuIiwgX19mdW5jX18sIG5hbWUsIHN0YXJ0LCBzZWxmLT5lbmQpOworCXByX2RlYnVnNCgiJXM6ICVzICUjIiBQUkl4NjQgIi0lIyIgUFJJeDY0ICJcbiIsIF9fZnVuY19fLCBuYW1lLCBzdGFydCwgc2VsZi0+ZW5kKTsKIAogCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIApAQCAtMTY3LDcgKzE2OCw3IEBACiAKIHN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQogewotCXJldHVybiBmcHJpbnRmKGZwLCAiICVsbHgtJWxseCAlYyAlc1xuIiwKKwlyZXR1cm4gZnByaW50ZihmcCwgIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlYyAlc1xuIiwKIAkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsCiAJCSAgICAgICBzZWxmLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgogCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLApAQCAtMTE2MSw2ICsxMTYyLDEzIEBACiAKIAkJc2VjdGlvbl9uYW1lID0gZWxmX3NlY19fbmFtZSgmc2hkciwgc2Vjc3Rycyk7CiAKKwkJLyogT24gQVJNLCBzeW1ib2xzIGZvciB0aHVtYiBmdW5jdGlvbnMgaGF2ZSAxIGFkZGVkIHRvCisJCSAqIHRoZSBzeW1ib2wgYWRkcmVzcyBhcyBhIGZsYWcgLSByZW1vdmUgaXQgKi8KKwkJaWYgKChlaGRyLmVfbWFjaGluZSA9PSBFTV9BUk0pICYmCisJCSAgICAobWFwLT50eXBlID09IE1BUF9fRlVOQ1RJT04pICYmCisJCSAgICAoc3ltLnN0X3ZhbHVlICYgMSkpCisJCQktLXN5bS5zdF92YWx1ZTsKKwogCQlpZiAoc2VsZi0+a2VybmVsICE9IERTT19UWVBFX1VTRVIgfHwga21vZHVsZSkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07CiAKQEAgLTEyMDgsOCArMTIxNiw4IEBACiAJCX0KIAogCQlpZiAoY3Vycl9kc28tPmFkanVzdF9zeW1ib2xzKSB7Ci0JCQlwcl9kZWJ1ZzQoIiVzOiBhZGp1c3Rpbmcgc3ltYm9sOiBzdF92YWx1ZTogJSNMeCAiCi0JCQkJICAic2hfYWRkcjogJSNMeCBzaF9vZmZzZXQ6ICUjTHhcbiIsIF9fZnVuY19fLAorCQkJcHJfZGVidWc0KCIlczogYWRqdXN0aW5nIHN5bWJvbDogc3RfdmFsdWU6ICUjIiBQUkl4NjQgIiAiCisJCQkJICAic2hfYWRkcjogJSMiIFBSSXg2NCAiIHNoX29mZnNldDogJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywKIAkJCQkgICh1NjQpc3ltLnN0X3ZhbHVlLCAodTY0KXNoZHIuc2hfYWRkciwKIAkJCQkgICh1NjQpc2hkci5zaF9vZmZzZXQpOwogCQkJc3ltLnN0X3ZhbHVlIC09IHNoZHIuc2hfYWRkciAtIHNoZHIuc2hfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3R5cGVzLmggYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaAppbmRleCA3ZDZiODMzLi41ZjM2ODlhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdHlwZXMuaAorKysgYi90b29scy9wZXJmL3V0aWwvdHlwZXMuaApAQCAtMSwxMiArMSwxNCBAQAogI2lmbmRlZiBfX1BFUkZfVFlQRVNfSAogI2RlZmluZSBfX1BFUkZfVFlQRVNfSAogCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKIC8qCi0gKiBXZSBkZWZpbmUgdTY0IGFzIHVuc2lnbmVkIGxvbmcgbG9uZyBmb3IgZXZlcnkgYXJjaGl0ZWN0dXJlCi0gKiBzbyB0aGF0IHdlIGNhbiBwcmludCBpdCB3aXRoICVMeCB3aXRob3V0IGdldHRpbmcgd2FybmluZ3MuCisgKiBXZSBkZWZpbmUgdTY0IGFzIHVpbnQ2NF90IGZvciBldmVyeSBhcmNoaXRlY3R1cmUKKyAqIHNvIHRoYXQgd2UgY2FuIHByaW50IGl0IHdpdGggIiUiUFJJeDY0IHdpdGhvdXQgZ2V0dGluZyB3YXJuaW5ncy4KICAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdTY0OwotdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgczY0OwordHlwZWRlZiB1aW50NjRfdAkgICB1NjQ7Cit0eXBlZGVmIGludDY0X3QJCSAgIHM2NDsKIHR5cGVkZWYgdW5zaWduZWQgaW50CSAgIHUzMjsKIHR5cGVkZWYgc2lnbmVkIGludAkgICBzMzI7CiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0CSAgIHUxNjsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggZWJkYThjMy4uNjBjNDYzYyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCWlmIChzZWxmLT5tcy5zeW0pCiAJCXJldHVybiBzZWxmLT5tcy5zeW0tPm5hbWU7CiAKLQlzbnByaW50ZihiZiwgYmZzaXplLCAiJSNMeCIsIHNlbGYtPmlwKTsKKwlzbnByaW50ZihiZiwgYmZzaXplLCAiJSMiIFBSSXg2NCwgc2VsZi0+aXApOwogCXJldHVybiBiZjsKIH0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL21hcC5jCmluZGV4IGUzNTQzN2QuLmU1MTU4MzYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9tYXAuYworKysgYi90b29scy9wZXJmL3V0aWwvdWkvYnJvd3NlcnMvbWFwLmMKQEAgLTEsNSArMSw2IEBACiAjaW5jbHVkZSAiLi4vbGlic2xhbmcuaCIKICNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHN5cy90dHlkZWZhdWx0cy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC01Nyw3ICs1OCw3IEBACiAJaW50IHdpZHRoOwogCiAJdWlfYnJvd3Nlcl9fc2V0X3BlcmNlbnRfY29sb3Ioc2VsZiwgMCwgY3VycmVudF9lbnRyeSk7Ci0Jc2xzbWdfcHJpbnRmKCIlKmxseCAlKmxseCAlYyAiLAorCXNsc21nX3ByaW50ZigiJSoiIFBSSXg2NCAiICUqIiBQUkl4NjQgIiAlYyAiLAogCQkgICAgIG1iLT5hZGRybGVuLCBzeW0tPnN0YXJ0LCBtYi0+YWRkcmxlbiwgc3ltLT5lbmQsCiAJCSAgICAgc3ltLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgogCQkgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnKTsKQEAgLTE1MCw2ICsxNTEsNiBAQAogCQkrK21iLmIubnJfZW50cmllczsKIAl9CiAKLQltYi5hZGRybGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVsbHgiLCBtYXhhZGRyKTsKKwltYi5hZGRybGVuID0gc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiUiIFBSSXg2NCwgbWF4YWRkcik7CiAJcmV0dXJuIG1hcF9icm93c2VyX19ydW4oJm1iKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYyBiL3Rvb2xzL3BlcmYvdXRpbC92YWx1ZXMuYwppbmRleCBjZmE1NWQ2Li5iZGQzMzQ3IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvdmFsdWVzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3ZhbHVlcy5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAkJaWYgKHdpZHRoID4gdGlkd2lkdGgpCiAJCQl0aWR3aWR0aCA9IHdpZHRoOwogCQlmb3IgKGogPSAwOyBqIDwgdmFsdWVzLT5jb3VudGVyczsgaisrKSB7Ci0JCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlTHUiLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKKwkJCXdpZHRoID0gc25wcmludGYoTlVMTCwgMCwgIiUiIFBSSXU2NCwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CiAJCQlpZiAod2lkdGggPiBjb3VudGVyd2lkdGhbal0pCiAJCQkJY291bnRlcndpZHRoW2pdID0gd2lkdGg7CiAJCX0KQEAgLTE2NSw3ICsxNjUsNyBAQAogCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCIsIHBpZHdpZHRoLCB2YWx1ZXMtPnBpZFtpXSwKIAkJCXRpZHdpZHRoLCB2YWx1ZXMtPnRpZFtpXSk7CiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCi0JCQlmcHJpbnRmKGZwLCAiICAlKkx1IiwKKwkJCWZwcmludGYoZnAsICIgICUqIiBQUkl1NjQsCiAJCQkJY291bnRlcndpZHRoW2pdLCB2YWx1ZXMtPnZhbHVlW2ldW2pdKTsKIAkJZnByaW50ZihmcCwgIlxuIik7CiAJfQpAQCAtMTk2LDEzICsxOTYsMTMgQEAKIAkJd2lkdGggPSBzdHJsZW4odmFsdWVzLT5jb3VudGVybmFtZVtqXSk7CiAJCWlmICh3aWR0aCA+IG5hbWV3aWR0aCkKIAkJCW5hbWV3aWR0aCA9IHdpZHRoOwotCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlbGx4IiwgdmFsdWVzLT5jb3VudGVycmF3aWRbal0pOworCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl4NjQsIHZhbHVlcy0+Y291bnRlcnJhd2lkW2pdKTsKIAkJaWYgKHdpZHRoID4gcmF3d2lkdGgpCiAJCQlyYXd3aWR0aCA9IHdpZHRoOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspIHsKIAkJZm9yIChqID0gMDsgaiA8IHZhbHVlcy0+Y291bnRlcnM7IGorKykgewotCQkJd2lkdGggPSBzbnByaW50ZihOVUxMLCAwLCAiJUx1IiwgdmFsdWVzLT52YWx1ZVtpXVtqXSk7CisJCQl3aWR0aCA9IHNucHJpbnRmKE5VTEwsIDAsICIlIiBQUkl1NjQsIHZhbHVlcy0+dmFsdWVbaV1bal0pOwogCQkJaWYgKHdpZHRoID4gY291bnR3aWR0aCkKIAkJCQljb3VudHdpZHRoID0gd2lkdGg7CiAJCX0KQEAgLTIxNCw3ICsyMTQsNyBAQAogCQljb3VudHdpZHRoLCAiQ291bnQiKTsKIAlmb3IgKGkgPSAwOyBpIDwgdmFsdWVzLT50aHJlYWRzOyBpKyspCiAJCWZvciAoaiA9IDA7IGogPCB2YWx1ZXMtPmNvdW50ZXJzOyBqKyspCi0JCQlmcHJpbnRmKGZwLCAiICAlKmQgICUqZCAgJSpzICAlKmxseCAgJSpMdVxuIiwKKwkJCWZwcmludGYoZnAsICIgICUqZCAgJSpkICAlKnMgICUqIiBQUkl4NjQgIiAgJSoiIFBSSXU2NCwKIAkJCQlwaWR3aWR0aCwgdmFsdWVzLT5waWRbaV0sCiAJCQkJdGlkd2lkdGgsIHZhbHVlcy0+dGlkW2ldLAogCQkJCW5hbWV3aWR0aCwgdmFsdWVzLT5jb3VudGVybmFtZVtqXSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMgYi90b29scy9wb3dlci94ODYvdHVyYm9zdGF0L3R1cmJvc3RhdC5jCmluZGV4IDRjNjk4M2QuLjM2MmEwY2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Bvd2VyL3g4Ni90dXJib3N0YXQvdHVyYm9zdGF0LmMKKysrIGIvdG9vbHMvcG93ZXIveDg2L3R1cmJvc3RhdC90dXJib3N0YXQuYwpAQCAtNzIsNyArNzIsNyBAQAogCiBpbnQgbnVtX2NwdXM7CiAKLXR5cGVkZWYgc3RydWN0IHBlcl9jcHVfY291bnRlcnMgeworc3RydWN0IGNvdW50ZXJzIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdHNjOwkJLyogcGVyIHRocmVhZCAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZjsJLyogcGVyIHRocmVhZCAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBtcGVyZjsJLyogcGVyIHRocmVhZCAqLwpAQCAtODgsMTMgKzg4LDEzIEBACiAJaW50IHBrZzsKIAlpbnQgY29yZTsKIAlpbnQgY3B1OwotCXN0cnVjdCBwZXJfY3B1X2NvdW50ZXJzICpuZXh0OwotfSBQQ0M7CisJc3RydWN0IGNvdW50ZXJzICpuZXh0OworfTsKIAotUENDICpwY2NfZXZlbjsKLVBDQyAqcGNjX29kZDsKLVBDQyAqcGNjX2RlbHRhOwotUENDICpwY2NfYXZlcmFnZTsKK3N0cnVjdCBjb3VudGVycyAqY250X2V2ZW47CitzdHJ1Y3QgY291bnRlcnMgKmNudF9vZGQ7CitzdHJ1Y3QgY291bnRlcnMgKmNudF9kZWx0YTsKK3N0cnVjdCBjb3VudGVycyAqY250X2F2ZXJhZ2U7CiBzdHJ1Y3QgdGltZXZhbCB0dl9ldmVuOwogc3RydWN0IHRpbWV2YWwgdHZfb2RkOwogc3RydWN0IHRpbWV2YWwgdHZfZGVsdGE7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAlyZXR1cm4gbXNyOwogfQogCi12b2lkIHByaW50X2hlYWRlcigpCit2b2lkIHByaW50X2hlYWRlcih2b2lkKQogewogCWlmIChzaG93X3BrZykKIAkJZnByaW50ZihzdGRlcnIsICJwa2cgIik7CkBAIC0xNjAsMzkgKzE2MCwzOSBAQAogCXB1dGMoJ1xuJywgc3RkZXJyKTsKIH0KIAotdm9pZCBkdW1wX3BjYyhQQ0MgKnBjYykKK3ZvaWQgZHVtcF9jbnQoc3RydWN0IGNvdW50ZXJzICpjbnQpCiB7Ci0JZnByaW50ZihzdGRlcnIsICJwYWNrYWdlOiAlZCAiLCBwY2MtPnBrZyk7Ci0JZnByaW50ZihzdGRlcnIsICJjb3JlOjogJWQgIiwgcGNjLT5jb3JlKTsKLQlmcHJpbnRmKHN0ZGVyciwgIkNQVTogJWQgIiwgcGNjLT5jcHUpOwotCWZwcmludGYoc3RkZXJyLCAiVFNDOiAlMDE2bGxYXG4iLCBwY2MtPnRzYyk7Ci0JZnByaW50ZihzdGRlcnIsICJjMzogJTAxNmxsWFxuIiwgcGNjLT5jMyk7Ci0JZnByaW50ZihzdGRlcnIsICJjNjogJTAxNmxsWFxuIiwgcGNjLT5jNik7Ci0JZnByaW50ZihzdGRlcnIsICJjNzogJTAxNmxsWFxuIiwgcGNjLT5jNyk7Ci0JZnByaW50ZihzdGRlcnIsICJhcGVyZjogJTAxNmxsWFxuIiwgcGNjLT5hcGVyZik7Ci0JZnByaW50ZihzdGRlcnIsICJwYzI6ICUwMTZsbFhcbiIsIHBjYy0+cGMyKTsKLQlmcHJpbnRmKHN0ZGVyciwgInBjMzogJTAxNmxsWFxuIiwgcGNjLT5wYzMpOwotCWZwcmludGYoc3RkZXJyLCAicGM2OiAlMDE2bGxYXG4iLCBwY2MtPnBjNik7Ci0JZnByaW50ZihzdGRlcnIsICJwYzc6ICUwMTZsbFhcbiIsIHBjYy0+cGM3KTsKLQlmcHJpbnRmKHN0ZGVyciwgIm1zcjB4JXg6ICUwMTZsbFhcbiIsIGV4dHJhX21zcl9vZmZzZXQsIHBjYy0+ZXh0cmFfbXNyKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBhY2thZ2U6ICVkICIsIGNudC0+cGtnKTsKKwlmcHJpbnRmKHN0ZGVyciwgImNvcmU6OiAlZCAiLCBjbnQtPmNvcmUpOworCWZwcmludGYoc3RkZXJyLCAiQ1BVOiAlZCAiLCBjbnQtPmNwdSk7CisJZnByaW50ZihzdGRlcnIsICJUU0M6ICUwMTZsbFhcbiIsIGNudC0+dHNjKTsKKwlmcHJpbnRmKHN0ZGVyciwgImMzOiAlMDE2bGxYXG4iLCBjbnQtPmMzKTsKKwlmcHJpbnRmKHN0ZGVyciwgImM2OiAlMDE2bGxYXG4iLCBjbnQtPmM2KTsKKwlmcHJpbnRmKHN0ZGVyciwgImM3OiAlMDE2bGxYXG4iLCBjbnQtPmM3KTsKKwlmcHJpbnRmKHN0ZGVyciwgImFwZXJmOiAlMDE2bGxYXG4iLCBjbnQtPmFwZXJmKTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjMjogJTAxNmxsWFxuIiwgY250LT5wYzIpOworCWZwcmludGYoc3RkZXJyLCAicGMzOiAlMDE2bGxYXG4iLCBjbnQtPnBjMyk7CisJZnByaW50ZihzdGRlcnIsICJwYzY6ICUwMTZsbFhcbiIsIGNudC0+cGM2KTsKKwlmcHJpbnRmKHN0ZGVyciwgInBjNzogJTAxNmxsWFxuIiwgY250LT5wYzcpOworCWZwcmludGYoc3RkZXJyLCAibXNyMHgleDogJTAxNmxsWFxuIiwgZXh0cmFfbXNyX29mZnNldCwgY250LT5leHRyYV9tc3IpOwogfQogCi12b2lkIGR1bXBfbGlzdChQQ0MgKnBjYykKK3ZvaWQgZHVtcF9saXN0KHN0cnVjdCBjb3VudGVycyAqY250KQogewotCXByaW50ZigiZHVtcF9saXN0IDB4JXBcbiIsIHBjYyk7CisJcHJpbnRmKCJkdW1wX2xpc3QgMHglcFxuIiwgY250KTsKIAotCWZvciAoOyBwY2M7IHBjYyA9IHBjYy0+bmV4dCkKLQkJZHVtcF9wY2MocGNjKTsKKwlmb3IgKDsgY250OyBjbnQgPSBjbnQtPm5leHQpCisJCWR1bXBfY250KGNudCk7CiB9CiAKLXZvaWQgcHJpbnRfcGNjKFBDQyAqcCkKK3ZvaWQgcHJpbnRfY250KHN0cnVjdCBjb3VudGVycyAqcCkKIHsKIAlkb3VibGUgaW50ZXJ2YWxfZmxvYXQ7CiAKIAlpbnRlcnZhbF9mbG9hdCA9IHR2X2RlbHRhLnR2X3NlYyArIHR2X2RlbHRhLnR2X3VzZWMvMTAwMDAwMC4wOwogCiAJLyogdG9wb2xvZ3kgY29sdW1ucywgcHJpbnQgYmxhbmtzIG9uIDFzdCAoYXZlcmFnZSkgbGluZSAqLwotCWlmIChwID09IHBjY19hdmVyYWdlKSB7CisJaWYgKHAgPT0gY250X2F2ZXJhZ2UpIHsKIAkJaWYgKHNob3dfcGtnKQogCQkJZnByaW50ZihzdGRlcnIsICIgICAgIik7CiAJCWlmIChzaG93X2NvcmUpCkBAIC0yNjIsMjQgKzI2MiwyNCBAQAogCXB1dGMoJ1xuJywgc3RkZXJyKTsKIH0KIAotdm9pZCBwcmludF9jb3VudGVycyhQQ0MgKmNudCkKK3ZvaWQgcHJpbnRfY291bnRlcnMoc3RydWN0IGNvdW50ZXJzICpjb3VudGVycykKIHsKLQlQQ0MgKnBjYzsKKwlzdHJ1Y3QgY291bnRlcnMgKmNudDsKIAogCXByaW50X2hlYWRlcigpOwogCiAJaWYgKG51bV9jcHVzID4gMSkKLQkJcHJpbnRfcGNjKHBjY19hdmVyYWdlKTsKKwkJcHJpbnRfY250KGNudF9hdmVyYWdlKTsKIAotCWZvciAocGNjID0gY250OyBwY2MgIT0gTlVMTDsgcGNjID0gcGNjLT5uZXh0KQotCQlwcmludF9wY2MocGNjKTsKKwlmb3IgKGNudCA9IGNvdW50ZXJzOyBjbnQgIT0gTlVMTDsgY250ID0gY250LT5uZXh0KQorCQlwcmludF9jbnQoY250KTsKIAogfQogCiAjZGVmaW5lIFNVQlRSQUNUX0NPVU5URVIoYWZ0ZXIsIGJlZm9yZSwgZGVsdGEpIChkZWx0YSA9IChhZnRlciAtIGJlZm9yZSksIChiZWZvcmUgPiBhZnRlcikpCiAKLQotaW50IGNvbXB1dGVfZGVsdGEoUENDICphZnRlciwgUENDICpiZWZvcmUsIFBDQyAqZGVsdGEpCitpbnQgY29tcHV0ZV9kZWx0YShzdHJ1Y3QgY291bnRlcnMgKmFmdGVyLAorCXN0cnVjdCBjb3VudGVycyAqYmVmb3JlLCBzdHJ1Y3QgY291bnRlcnMgKmRlbHRhKQogewogCWludCBlcnJvcnMgPSAwOwogCWludCBwZXJmX2VyciA9IDA7CkBAIC0zOTEsMjAgKzM5MSwyMCBAQAogCQlkZWx0YS0+ZXh0cmFfbXNyID0gYWZ0ZXItPmV4dHJhX21zcjsKIAkJaWYgKGVycm9ycykgewogCQkJZnByaW50ZihzdGRlcnIsICJFUlJPUiBjcHUlZCBiZWZvcmU6XG4iLCBiZWZvcmUtPmNwdSk7Ci0JCQlkdW1wX3BjYyhiZWZvcmUpOworCQkJZHVtcF9jbnQoYmVmb3JlKTsKIAkJCWZwcmludGYoc3RkZXJyLCAiRVJST1IgY3B1JWQgYWZ0ZXI6XG4iLCBiZWZvcmUtPmNwdSk7Ci0JCQlkdW1wX3BjYyhhZnRlcik7CisJCQlkdW1wX2NudChhZnRlcik7CiAJCQllcnJvcnMgPSAwOwogCQl9CiAJfQogCXJldHVybiAwOwogfQogCi12b2lkIGNvbXB1dGVfYXZlcmFnZShQQ0MgKmRlbHRhLCBQQ0MgKmF2ZykKK3ZvaWQgY29tcHV0ZV9hdmVyYWdlKHN0cnVjdCBjb3VudGVycyAqZGVsdGEsIHN0cnVjdCBjb3VudGVycyAqYXZnKQogewotCVBDQyAqc3VtOworCXN0cnVjdCBjb3VudGVycyAqc3VtOwogCi0Jc3VtID0gY2FsbG9jKDEsIHNpemVvZihQQ0MpKTsKKwlzdW0gPSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChzdW0gPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyBzdW0iKTsKIAkJZXhpdCgxKTsKQEAgLTQzOCwzNSArNDM4LDM0IEBACiAJZnJlZShzdW0pOwogfQogCi12b2lkIGdldF9jb3VudGVycyhQQ0MgKnBjYykKK3ZvaWQgZ2V0X2NvdW50ZXJzKHN0cnVjdCBjb3VudGVycyAqY250KQogewotCWZvciAoIDsgcGNjOyBwY2MgPSBwY2MtPm5leHQpIHsKLQkJcGNjLT50c2MgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfVFNDKTsKKwlmb3IgKCA7IGNudDsgY250ID0gY250LT5uZXh0KSB7CisJCWNudC0+dHNjID0gZ2V0X21zcihjbnQtPmNwdSwgTVNSX1RTQyk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+YzMgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DM19SRVNJREVOQ1kpOworCQkJY250LT5jMyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9DT1JFX0MzX1JFU0lERU5DWSk7CiAJCWlmIChkb19uaG1fY3N0YXRlcykKLQkJCXBjYy0+YzYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DNl9SRVNJREVOQ1kpOworCQkJY250LT5jNiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9DT1JFX0M2X1JFU0lERU5DWSk7CiAJCWlmIChkb19zbmJfY3N0YXRlcykKLQkJCXBjYy0+YzcgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfQ09SRV9DN19SRVNJREVOQ1kpOworCQkJY250LT5jNyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9DT1JFX0M3X1JFU0lERU5DWSk7CiAJCWlmIChoYXNfYXBlcmYpCi0JCQlwY2MtPmFwZXJmID0gZ2V0X21zcihwY2MtPmNwdSwgTVNSX0FQRVJGKTsKKwkJCWNudC0+YXBlcmYgPSBnZXRfbXNyKGNudC0+Y3B1LCBNU1JfQVBFUkYpOwogCQlpZiAoaGFzX2FwZXJmKQotCQkJcGNjLT5tcGVyZiA9IGdldF9tc3IocGNjLT5jcHUsIE1TUl9NUEVSRik7CisJCQljbnQtPm1wZXJmID0gZ2V0X21zcihjbnQtPmNwdSwgTVNSX01QRVJGKTsKIAkJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQkJcGNjLT5wYzIgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0MyX1JFU0lERU5DWSk7CisJCQljbnQtPnBjMiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzJfUkVTSURFTkNZKTsKIAkJaWYgKGRvX25obV9jc3RhdGVzKQotCQkJcGNjLT5wYzMgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0MzX1JFU0lERU5DWSk7CisJCQljbnQtPnBjMyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzNfUkVTSURFTkNZKTsKIAkJaWYgKGRvX25obV9jc3RhdGVzKQotCQkJcGNjLT5wYzYgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0M2X1JFU0lERU5DWSk7CisJCQljbnQtPnBjNiA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzZfUkVTSURFTkNZKTsKIAkJaWYgKGRvX3NuYl9jc3RhdGVzKQotCQkJcGNjLT5wYzcgPSBnZXRfbXNyKHBjYy0+Y3B1LCBNU1JfUEtHX0M3X1JFU0lERU5DWSk7CisJCQljbnQtPnBjNyA9IGdldF9tc3IoY250LT5jcHUsIE1TUl9QS0dfQzdfUkVTSURFTkNZKTsKIAkJaWYgKGV4dHJhX21zcl9vZmZzZXQpCi0JCQlwY2MtPmV4dHJhX21zciA9IGdldF9tc3IocGNjLT5jcHUsIGV4dHJhX21zcl9vZmZzZXQpOworCQkJY250LT5leHRyYV9tc3IgPSBnZXRfbXNyKGNudC0+Y3B1LCBleHRyYV9tc3Jfb2Zmc2V0KTsKIAl9CiB9CiAKLQotdm9pZCBwcmludF9uZWhhbGVtX2luZm8oKQordm9pZCBwcmludF9uZWhhbGVtX2luZm8odm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgbXNyOwogCXVuc2lnbmVkIGludCByYXRpbzsKQEAgLTUxNCwzOCArNTEzLDM4IEBACiAKIH0KIAotdm9pZCBmcmVlX2NvdW50ZXJfbGlzdChQQ0MgKmxpc3QpCit2b2lkIGZyZWVfY291bnRlcl9saXN0KHN0cnVjdCBjb3VudGVycyAqbGlzdCkKIHsKLQlQQ0MgKnA7CisJc3RydWN0IGNvdW50ZXJzICpwOwogCiAJZm9yIChwID0gbGlzdDsgcDsgKSB7Ci0JCVBDQyAqZnJlZV9tZTsKKwkJc3RydWN0IGNvdW50ZXJzICpmcmVlX21lOwogCiAJCWZyZWVfbWUgPSBwOwogCQlwID0gcC0+bmV4dDsKIAkJZnJlZShmcmVlX21lKTsKIAl9Ci0JcmV0dXJuOwogfQogCiB2b2lkIGZyZWVfYWxsX2NvdW50ZXJzKHZvaWQpCiB7Ci0JZnJlZV9jb3VudGVyX2xpc3QocGNjX2V2ZW4pOwotCXBjY19ldmVuID0gTlVMTDsKKwlmcmVlX2NvdW50ZXJfbGlzdChjbnRfZXZlbik7CisJY250X2V2ZW4gPSBOVUxMOwogCi0JZnJlZV9jb3VudGVyX2xpc3QocGNjX29kZCk7Ci0JcGNjX29kZCA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X29kZCk7CisJY250X29kZCA9IE5VTEw7CiAKLQlmcmVlX2NvdW50ZXJfbGlzdChwY2NfZGVsdGEpOwotCXBjY19kZWx0YSA9IE5VTEw7CisJZnJlZV9jb3VudGVyX2xpc3QoY250X2RlbHRhKTsKKwljbnRfZGVsdGEgPSBOVUxMOwogCi0JZnJlZV9jb3VudGVyX2xpc3QocGNjX2F2ZXJhZ2UpOwotCXBjY19hdmVyYWdlID0gTlVMTDsKKwlmcmVlX2NvdW50ZXJfbGlzdChjbnRfYXZlcmFnZSk7CisJY250X2F2ZXJhZ2UgPSBOVUxMOwogfQogCi12b2lkIGluc2VydF9jcHVfY291bnRlcnMoUENDICoqbGlzdCwgUENDICpuZXcpCit2b2lkIGluc2VydF9jb3VudGVycyhzdHJ1Y3QgY291bnRlcnMgKipsaXN0LAorCXN0cnVjdCBjb3VudGVycyAqbmV3KQogewotCVBDQyAqcHJldjsKKwlzdHJ1Y3QgY291bnRlcnMgKnByZXY7CiAKIAkvKgogCSAqIGxpc3Qgd2FzIGVtcHR5CkBAIC01OTQsMTggKzU5MywxNiBAQAogCSAqLwogCW5ldy0+bmV4dCA9IHByZXYtPm5leHQ7CiAJcHJldi0+bmV4dCA9IG5ldzsKLQotCXJldHVybjsKIH0KIAotdm9pZCBhbGxvY19uZXdfY3B1X2NvdW50ZXJzKGludCBwa2csIGludCBjb3JlLCBpbnQgY3B1KQordm9pZCBhbGxvY19uZXdfY291bnRlcnMoaW50IHBrZywgaW50IGNvcmUsIGludCBjcHUpCiB7Ci0JUENDICpuZXc7CisJc3RydWN0IGNvdW50ZXJzICpuZXc7CiAKIAlpZiAodmVyYm9zZSA+IDEpCiAJCXByaW50ZigicGtnJWQgY29yZSVkLCBjcHUlZFxuIiwgcGtnLCBjb3JlLCBjcHUpOwogCi0JbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJbmV3ID0gKHN0cnVjdCBjb3VudGVycyAqKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvdW50ZXJzKSk7CiAJaWYgKG5ldyA9PSBOVUxMKSB7CiAJCXBlcnJvcigiY2FsbG9jIik7CiAJCWV4aXQoMSk7CkBAIC02MTMsOSArNjEwLDEwIEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlpbnNlcnRfY3B1X2NvdW50ZXJzKCZwY2Nfb2RkLCBuZXcpOworCWluc2VydF9jb3VudGVycygmY250X29kZCwgbmV3KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwKKwkJc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjIzLDkgKzYyMSw5IEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlpbnNlcnRfY3B1X2NvdW50ZXJzKCZwY2NfZXZlbiwgbmV3KTsKKwlpbnNlcnRfY291bnRlcnMoJmNudF9ldmVuLCBuZXcpOwogCi0JbmV3ID0gKFBDQyAqKWNhbGxvYygxLCBzaXplb2YoUENDKSk7CisJbmV3ID0gKHN0cnVjdCBjb3VudGVycyAqKWNhbGxvYygxLCBzaXplb2Yoc3RydWN0IGNvdW50ZXJzKSk7CiAJaWYgKG5ldyA9PSBOVUxMKSB7CiAJCXBlcnJvcigiY2FsbG9jIik7CiAJCWV4aXQoMSk7CkBAIC02MzMsOSArNjMxLDkgQEAKIAluZXctPnBrZyA9IHBrZzsKIAluZXctPmNvcmUgPSBjb3JlOwogCW5ldy0+Y3B1ID0gY3B1OwotCWluc2VydF9jcHVfY291bnRlcnMoJnBjY19kZWx0YSwgbmV3KTsKKwlpbnNlcnRfY291bnRlcnMoJmNudF9kZWx0YSwgbmV3KTsKIAotCW5ldyA9IChQQ0MgKiljYWxsb2MoMSwgc2l6ZW9mKFBDQykpOworCW5ldyA9IChzdHJ1Y3QgY291bnRlcnMgKiljYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBjb3VudGVycykpOwogCWlmIChuZXcgPT0gTlVMTCkgewogCQlwZXJyb3IoImNhbGxvYyIpOwogCQlleGl0KDEpOwpAQCAtNjQzLDcgKzY0MSw3IEBACiAJbmV3LT5wa2cgPSBwa2c7CiAJbmV3LT5jb3JlID0gY29yZTsKIAluZXctPmNwdSA9IGNwdTsKLQlwY2NfYXZlcmFnZSA9IG5ldzsKKwljbnRfYXZlcmFnZSA9IG5ldzsKIH0KIAogaW50IGdldF9waHlzaWNhbF9wYWNrYWdlX2lkKGludCBjcHUpCkBAIC03MTksNyArNzE3LDcgQEAKIHsKIAlwcmludGYoInR1cmJvc3RhdDogdG9wb2xvZ3kgY2hhbmdlZCwgcmUtaW5pdGlhbGl6aW5nLlxuIik7CiAJZnJlZV9hbGxfY291bnRlcnMoKTsKLQludW1fY3B1cyA9IGZvcl9hbGxfY3B1cyhhbGxvY19uZXdfY3B1X2NvdW50ZXJzKTsKKwludW1fY3B1cyA9IGZvcl9hbGxfY3B1cyhhbGxvY19uZXdfY291bnRlcnMpOwogCW5lZWRfcmVpbml0aWFsaXplID0gMDsKIAlwcmludGYoIm51bV9jcHVzIGlzIG5vdyAlZFxuIiwgbnVtX2NwdXMpOwogfQpAQCAtNzI4LDcgKzcyNiw3IEBACiAvKgogICogY2hlY2sgdG8gc2VlIGlmIGEgY3B1IGNhbWUgb24tbGluZQogICovCi12b2lkIHZlcmlmeV9udW1fY3B1cygpCit2b2lkIHZlcmlmeV9udW1fY3B1cyh2b2lkKQogewogCWludCBuZXdfbnVtX2NwdXM7CiAKQEAgLTc0MCwxNCArNzM4LDEyIEBACiAJCQkJbnVtX2NwdXMsIG5ld19udW1fY3B1cyk7CiAJCW5lZWRfcmVpbml0aWFsaXplID0gMTsKIAl9Ci0KLQlyZXR1cm47CiB9CiAKIHZvaWQgdHVyYm9zdGF0X2xvb3AoKQogewogcmVzdGFydDoKLQlnZXRfY291bnRlcnMocGNjX2V2ZW4pOworCWdldF9jb3VudGVycyhjbnRfZXZlbik7CiAJZ2V0dGltZW9mZGF5KCZ0dl9ldmVuLCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CiAKIAl3aGlsZSAoMSkgewpAQCAtNzU3LDI0ICs3NTMsMjQgQEAKIAkJCWdvdG8gcmVzdGFydDsKIAkJfQogCQlzbGVlcChpbnRlcnZhbF9zZWMpOwotCQlnZXRfY291bnRlcnMocGNjX29kZCk7CisJCWdldF9jb3VudGVycyhjbnRfb2RkKTsKIAkJZ2V0dGltZW9mZGF5KCZ0dl9vZGQsIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKIAotCQljb21wdXRlX2RlbHRhKHBjY19vZGQsIHBjY19ldmVuLCBwY2NfZGVsdGEpOworCQljb21wdXRlX2RlbHRhKGNudF9vZGQsIGNudF9ldmVuLCBjbnRfZGVsdGEpOwogCQl0aW1lcnN1YigmdHZfb2RkLCAmdHZfZXZlbiwgJnR2X2RlbHRhKTsKLQkJY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOwotCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCQljb21wdXRlX2F2ZXJhZ2UoY250X2RlbHRhLCBjbnRfYXZlcmFnZSk7CisJCXByaW50X2NvdW50ZXJzKGNudF9kZWx0YSk7CiAJCWlmIChuZWVkX3JlaW5pdGlhbGl6ZSkgewogCQkJcmVfaW5pdGlhbGl6ZSgpOwogCQkJZ290byByZXN0YXJ0OwogCQl9CiAJCXNsZWVwKGludGVydmFsX3NlYyk7Ci0JCWdldF9jb3VudGVycyhwY2NfZXZlbik7CisJCWdldF9jb3VudGVycyhjbnRfZXZlbik7CiAJCWdldHRpbWVvZmRheSgmdHZfZXZlbiwgKHN0cnVjdCB0aW1lem9uZSAqKU5VTEwpOwotCQljb21wdXRlX2RlbHRhKHBjY19ldmVuLCBwY2Nfb2RkLCBwY2NfZGVsdGEpOworCQljb21wdXRlX2RlbHRhKGNudF9ldmVuLCBjbnRfb2RkLCBjbnRfZGVsdGEpOwogCQl0aW1lcnN1YigmdHZfZXZlbiwgJnR2X29kZCwgJnR2X2RlbHRhKTsKLQkJY29tcHV0ZV9hdmVyYWdlKHBjY19kZWx0YSwgcGNjX2F2ZXJhZ2UpOwotCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCQljb21wdXRlX2F2ZXJhZ2UoY250X2RlbHRhLCBjbnRfYXZlcmFnZSk7CisJCXByaW50X2NvdW50ZXJzKGNudF9kZWx0YSk7CiAJfQogfQogCkBAIC04OTIsNyArODg4LDcgQEAKIAkgKiB0aGlzIGNoZWNrIGlzIHZhbGlkIGZvciBib3RoIEludGVsIGFuZCBBTUQKIAkgKi8KIAlhc20oImNwdWlkIiA6ICI9YSIgKGVheCksICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDB4ODAwMDAwMDcpKTsKLQloYXNfaW52YXJpYW50X3RzYyA9IGVkeCAmJiAoMSA8PCA4KTsKKwloYXNfaW52YXJpYW50X3RzYyA9IGVkeCAmICgxIDw8IDgpOwogCiAJaWYgKCFoYXNfaW52YXJpYW50X3RzYykgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5vIGludmFyaWFudCBUU0NcbiIpOwpAQCAtOTA1LDcgKzkwMSw3IEBACiAJICovCiAKIAlhc20oImNwdWlkIiA6ICI9YSIgKGVheCksICI9YiIgKGVieCksICI9YyIgKGVjeCksICI9ZCIgKGVkeCkgOiAiYSIgKDB4NikpOwotCWhhc19hcGVyZiA9IGVjeCAmJiAoMSA8PCAwKTsKKwloYXNfYXBlcmYgPSBlY3ggJiAoMSA8PCAwKTsKIAlpZiAoIWhhc19hcGVyZikgewogCQlmcHJpbnRmKHN0ZGVyciwgIk5vIEFQRVJGIE1TUlxuIik7CiAJCWV4aXQoMSk7CkBAIC05NTIsNyArOTQ4LDcgQEAKIAljaGVja19kZXZfbXNyKCk7CiAJY2hlY2tfc3VwZXJfdXNlcigpOwogCi0JbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NwdV9jb3VudGVycyk7CisJbnVtX2NwdXMgPSBmb3JfYWxsX2NwdXMoYWxsb2NfbmV3X2NvdW50ZXJzKTsKIAogCWlmICh2ZXJib3NlKQogCQlwcmludF9uZWhhbGVtX2luZm8oKTsKQEAgLTk2Miw3ICs5NTgsNyBAQAogewogCWludCByZXR2YWw7CiAJcGlkX3QgY2hpbGRfcGlkOwotCWdldF9jb3VudGVycyhwY2NfZXZlbik7CisJZ2V0X2NvdW50ZXJzKGNudF9ldmVuKTsKIAlnZXR0aW1lb2ZkYXkoJnR2X2V2ZW4sIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKIAogCWNoaWxkX3BpZCA9IGZvcmsoKTsKQEAgLTk4NSwxNCArOTgxLDE0IEBACiAJCQlleGl0KDEpOwogCQl9CiAJfQotCWdldF9jb3VudGVycyhwY2Nfb2RkKTsKKwlnZXRfY291bnRlcnMoY250X29kZCk7CiAJZ2V0dGltZW9mZGF5KCZ0dl9vZGQsIChzdHJ1Y3QgdGltZXpvbmUgKilOVUxMKTsKLQlyZXR2YWwgPSBjb21wdXRlX2RlbHRhKHBjY19vZGQsIHBjY19ldmVuLCBwY2NfZGVsdGEpOworCXJldHZhbCA9IGNvbXB1dGVfZGVsdGEoY250X29kZCwgY250X2V2ZW4sIGNudF9kZWx0YSk7CiAKIAl0aW1lcnN1YigmdHZfb2RkLCAmdHZfZXZlbiwgJnR2X2RlbHRhKTsKLQljb21wdXRlX2F2ZXJhZ2UocGNjX2RlbHRhLCBwY2NfYXZlcmFnZSk7CisJY29tcHV0ZV9hdmVyYWdlKGNudF9kZWx0YSwgY250X2F2ZXJhZ2UpOwogCWlmICghcmV0dmFsKQotCQlwcmludF9jb3VudGVycyhwY2NfZGVsdGEpOworCQlwcmludF9jb3VudGVycyhjbnRfZGVsdGEpOwogCiAJZnByaW50ZihzdGRlcnIsICIlLjZmIHNlY1xuIiwgdHZfZGVsdGEudHZfc2VjICsgdHZfZGVsdGEudHZfdXNlYy8xMDAwMDAwLjApOzsKIAo=