ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggYzk3ZTkzZi4uMGQzOTg2YiAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsNSArMSw1IEBACiAKLUxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorTGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogCiBUaGlzIGlzIGEgcHVibGljIHJlbGVhc2Ugb2YgbGlicG5nLCBpbnRlbmRlZCBmb3IgdXNlIGluIHByb2R1Y3Rpb24gY29kZXMuCiAKQEAgLTksMTIgKzksMTAgQEAKICAgVXBkYXRlZCBtYWtlZmlsZS5jeWd3aW4gYW5kIGhhbmRsaW5nIG9mIEN5Z3dpbidzIEFMTF9TVEFUSUMgaW4gcG5nY29uZi5oCiAgIEFkZGVkIHNvbWUgbmV2ZXItdG8tYmUtZXhlY3V0ZWQgY29kZSBpbiBwbmdnY2NyZC5jIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzLgogICBCdW1wZWQgRExMTlVNIHRvIDIuCi0gIEFkZGVkIGEgY2hlY2sgZm9yIGF0dGVtcHRzIHRvIHJlYWQgb3Igd3JpdGUgUExURSBpbiBncmF5c2NhbGUgUE5HIGRhdGFzdHJlYW1zLgotICBFbGltaW5hdGVkIHRoZSBwbmdfZXJyb3IgYWJvdXQgYXBwcyB1c2luZyBwbmdfcmVhZHx3cml0ZV9pbml0KCkuICBJbnN0ZWFkLAotICAgIGxpYnBuZyB3aWxsIHJlYWxsb2NhdGUgdGhlIHBuZ19zdHJ1Y3QgYW5kIGluZm9fc3RydWN0IGlmIHRoZXkgYXJlIHRvbyBzbWFsbC4KLSAgICBUaGlzIGFjaGlldmVzIGZ1dHVyZSBiaW5hcnkgY29tcGF0aWJpbGl0eSBmb3Igb2xkIGFwcGxpY2F0aW9ucyB3cml0dGVuIGZvcgotICAgIGxpYnBuZy0wLjg4IGFuZCBlYXJsaWVyLgotICBNb2RpZmllZCBwbmdfY3JlYXRlX3N0cnVjdCBzbyBpdCBwYXNzZXMgdXNlciBtZW1fcHRyIHRvIHVzZXIgbWVtb3J5IGFsbG9jYXRvci4KKyAgRW5hYmxlZCBQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCBhbmQgZW5hYmxlZCBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECisgICAgYnkgZGVmYXVsdC4KKyAgQWRkZWQgcnVudGltZSBzZWxlY3Rpb24gb2YgTU1YIGZlYXR1cmVzLgorICBBZGRlZCBwbmdfc2V0X3N0cmlwX2Vycm9yX251bWJlcnMgZnVuY3Rpb24gYW5kIHJlbGF0ZWQgbWFjcm9zLgogCiBTZW5kIGNvbW1lbnRzL2NvcnJlY3Rpb25zL2NvbW1lbmRhdGlvbnMgdG8KIHBuZy1pbXBsZW1lbnRAY2NyYy53dXN0bC5lZHUgb3IgdG8gcmFuZGVnQGFsdW0ucnBpLmVkdQpkaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKaW5kZXggZTRiNzVmNC4uYzNjZjkyOSAxMDA2NDQKLS0tIGEvQ0hBTkdFUworKysgYi9DSEFOR0VTCkBAIC0xLDMgKzEsNCBAQAorCiBDSEFOR0VTIC0gY2hhbmdlcyBmb3IgbGlicG5nCiAKIHZlcnNpb24gMC4yCkBAIC05MzAsMTcgKzkzMSwxNSBAQAogICBBZGRlZCBtYWtlZmlsZS5uZXRic2QKIHZlcnNpb24gMS4wLjExIFtBcHJpbCAyNywgMjAwMV0KICAgUmV2aXNlZCBtYWtlZmlsZS5uZXRic2QKLXZlcnNpb24gMS4wLjEyYmV0YTEgW01heSAxNCwgMjAwMV0KK3ZlcnNpb24gMS4yLjBiZXRhMSBbTWF5IDYsIDIwMDFdCiAgIFRlc3QgZm9yIFdpbmRvd3MgcGxhdGZvcm0gaW4gcG5nY29uZi5oIHdoZW4gaW5jbHVkaW5nIG1hbGxvYy5oIChFbW1hbnVlbCBCbG90KQogICBVcGRhdGVkIG1ha2VmaWxlLmN5Z3dpbiBhbmQgaGFuZGxpbmcgb2YgQ3lnd2luJ3MgQUxMX1NUQVRJQyBpbiBwbmdjb25mLmgKICAgQWRkZWQgc29tZSBuZXZlci10by1iZS1leGVjdXRlZCBjb2RlIGluIHBuZ2djY3JkLmMgdG8gcXVpZXQgY29tcGlsZXIgd2FybmluZ3MuCiAgIEJ1bXBlZCBETExOVU0gdG8gMi4KLSAgQWRkZWQgYSBjaGVjayBmb3IgYXR0ZW1wdHMgdG8gcmVhZCBvciB3cml0ZSBQTFRFIGluIGdyYXlzY2FsZSBQTkcgZGF0YXN0cmVhbXMuCi0gIEVsaW1pbmF0ZWQgdGhlIHBuZ19lcnJvciBhYm91dCBhcHBzIHVzaW5nIHBuZ19yZWFkfHdyaXRlX2luaXQoKS4gIEluc3RlYWQsCi0gICAgbGlicG5nIHdpbGwgcmVhbGxvY2F0ZSB0aGUgcG5nX3N0cnVjdCBhbmQgaW5mb19zdHJ1Y3QgaWYgdGhleSBhcmUgdG9vIHNtYWxsLgotICAgIFRoaXMgYWNoaWV2ZXMgZnV0dXJlIGJpbmFyeSBjb21wYXRpYmlsaXR5IGZvciBvbGQgYXBwbGljYXRpb25zIHdyaXR0ZW4gZm9yCi0gICAgbGlicG5nLTAuODggYW5kIGVhcmxpZXIuCi0gIE1vZGlmaWVkIHBuZ19jcmVhdGVfc3RydWN0IHNvIGl0IHBhc3NlcyB1c2VyIG1lbV9wdHIgdG8gdXNlciBtZW1vcnkgYWxsb2NhdG9yLgorICBSZS1lbmFibGVkIFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEIGFuZCBlbmFibGVkIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQKKyAgICBieSBkZWZhdWx0LgorICBBZGRlZCBydW50aW1lIHNlbGVjdGlvbiBvZiBNTVggZmVhdHVyZXMuCisgIEFkZGVkIHBuZ19zZXRfc3RyaXBfZXJyb3JfbnVtYmVycyBmdW5jdGlvbiBhbmQgcmVsYXRlZCBtYWNyb3MuCiAKIFNlbmQgY29tbWVudHMvY29ycmVjdGlvbnMvY29tbWVuZGF0aW9ucyB0bwogcG5nLWltcGxlbWVudEBjY3JjLnd1c3RsLmVkdSBvciB0byByYW5kZWdAYWx1bS5ycGkuZWR1CmRpZmYgLS1naXQgYS9JTlNUQUxMIGIvSU5TVEFMTAppbmRleCA1ODExMWNkLi5kMmFkMjg2IDEwMDY0NAotLS0gYS9JTlNUQUxMCisrKyBiL0lOU1RBTEwKQEAgLTEsNSArMSw1IEBACiAKLUluc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEKK0luc3RhbGxpbmcgbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAKIEJlZm9yZSBpbnN0YWxsaW5nIGxpYnBuZywgeW91IG11c3QgZmlyc3QgaW5zdGFsbCB6bGliLiAgemxpYgogY2FuIHVzdWFsbHkgYmUgZm91bmQgd2hlcmV2ZXIgeW91IGdvdCBsaWJwbmcuICB6bGliIGNhbiBiZQpAQCAtMTAsNyArMTAsNyBAQAogdmVyc2lvbiBvZiB6bGliIHRoYXQncyBpbnN0YWxsZWQuCiAKIFlvdSBjYW4gcmVuYW1lIHRoZSBkaXJlY3RvcmllcyB0aGF0IHlvdSBkb3dubG9hZGVkICh0aGV5Ci1taWdodCBiZSBjYWxsZWQgImxpYnBuZy0xLjAuMTJiZXRhMSIgb3IgImxwbmcxMDkiIGFuZCAiemxpYi0xLjEuMyIKK21pZ2h0IGJlIGNhbGxlZCAibGlicG5nLTEuMi4wYmV0YTEiIG9yICJscG5nMTA5IiBhbmQgInpsaWItMS4xLjMiCiBvciAiemxpYjExMyIpIHNvIHRoYXQgeW91IGhhdmUgZGlyZWN0b3JpZXMgY2FsbGVkICJ6bGliIiBhbmQgImxpYnBuZyIuCiAKIFlvdXIgZGlyZWN0b3J5IHN0cnVjdHVyZSBzaG91bGQgbG9vayBsaWtlIHRoaXM6CkBAIC0yOCw3ICsyOCw2IEBACiAgICAgICAgICAgICAgcG5nc3VpdGUKICAgICAgICAgICAgICB2aXN1cG5nCiAgICAgICAgICAgcHJvamVjdHMKLSAgICAgICAgICAgICBiZW9zCiAgICAgICAgICAgICAgYm9ybGFuZAogICAgICAgICAgICAgIG1zdmMKICAgICAgICAgICAgICB3aW5jZQpAQCAtNjAsOCArNTksOCBAQAogaW5jbHVkZQogCiAgbWFrZWZpbGUuc3RkICAgICAgPT4gIEdlbmVyaWMgVU5JWCBtYWtlZmlsZSAoY2MsIGNyZWF0ZXMgc3RhdGljIGxpYnBuZy5hKQotIG1ha2VmaWxlLmxpbnV4ICAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTJiZXRhMSkKLSBtYWtlZmlsZS5nY21teCAgICA9PiAgTGludXgvRUxGIG1ha2VmaWxlIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4wLjEyYmV0YTEsCisgbWFrZWZpbGUubGludXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCisgbWFrZWZpbGUuZ2NtbXggICAgPT4gIExpbnV4L0VMRiBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgYXNzZW1ibGVyIGNvZGUgdHVuZWQgZm9yIEludGVsIE1NWCBwbGF0Zm9ybSkKICBtYWtlZmlsZS5nY2MgICAgICA9PiAgR2VuZXJpYyBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICBtYWtlZmlsZS5rbnIgICAgICA9PiAgQXJjaGFpYyBVTklYIE1ha2VmaWxlIHRoYXQgY29udmVydHMgZmlsZXMgd2l0aApAQCAtNzAsMTcgKzY5LDE1IEBACiAgbWFrZWZpbGUuYWl4ICAgICAgPT4gIEFJWCBtYWtlZmlsZQogIG1ha2VmaWxlLmN5Z3dpbiAgID0+ICBDeWd3aW4vZ2NjIG1ha2VmaWxlCiAgbWFrZWZpbGUuZGVjICAgICAgPT4gIERFQyBBbHBoYSBVTklYIG1ha2VmaWxlCi0gbWFrZWZpbGUuaHBnY2MgICAgPT4gIEhQVVggbWFrZWZpbGUgdXNpbmcgZ2NjCiAgbWFrZWZpbGUuaHB1eCAgICAgPT4gIEhQVVggKDEwLjIwIGFuZCAxMS4wMCkgbWFrZWZpbGUKICBtYWtlZmlsZS5pYm1jICAgICA9PiAgSUJNIEMvQysrIHZlcnNpb24gMy54IGZvciBXaW4zMiBhbmQgT1MvMiAoc3RhdGljKQogIG1ha2VmaWxlLmludGVsICAgID0+ICBJbnRlbCBDL0MrKyB2ZXJzaW9uIDQuMCBhbmQgbGF0ZXIKICBsaWJwbmcuaWNjICAgICAgICA9PiAgUHJvamVjdCBmaWxlIGZvciBJQk0gVmlzdWFsQWdlL0MrKyB2ZXJzaW9uIDQuMCBvciBsYXRlcgogIG1ha2VmaWxlLm1hY29zeCAgID0+ICBNQUNPUyBYIE1ha2VmaWxlCi0gbWFrZWZpbGUubmV0YnNkICAgPT4gIE5ldEJTRC9jYyBtYWtlZmlsZSwgdXNlcyBQTkdHQ0NSRAogIG1ha2VmaWxlLnNnaSAgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggbWFrZWZpbGUgKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCi0gbWFrZWZpbGUuc2dnY2MgICAgPT4gIFNpbGljb24gR3JhcGhpY3MgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTJiZXRhMSkKKyBtYWtlZmlsZS5zZ2djYyAgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCiAgbWFrZWZpbGUuc3Vub3MgICAgPT4gIFN1biBtYWtlZmlsZQotIG1ha2VmaWxlLnNvbGFyaXMgID0+ICBTb2xhcmlzIDIuWCBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMmJldGExKQorIG1ha2VmaWxlLnNvbGFyaXMgID0+ICBTb2xhcmlzIDIuWCBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCiAgbWFrZWZpbGUuc2NvICAgICAgPT4gIEZvciBTQ08gT1NyNSAgRUxGIGFuZCBVbml4d2FyZSA3IHdpdGggTmF0aXZlIGNjCiAgbWFrZWZpbGUubWlwcyAgICAgPT4gIE1JUFMgbWFrZWZpbGUKICBtYWtlZmlsZS5hY29ybiAgICA9PiAgQWNvcm4gbWFrZWZpbGUKZGlmZiAtLWdpdCBhL0tOT1dOQlVHIGIvS05PV05CVUcKaW5kZXggZDU5NmRlYi4uN2IwOTI4YyAxMDA2NDQKLS0tIGEvS05PV05CVUcKKysrIGIvS05PV05CVUcKQEAgLTEsNyArMSw4IEBACiAKLUtub3duIGJ1Z3MgaW4gbGlicG5nLTEuMC4xMQorS25vd24gYnVncyBpbiBsaWJwbmctMS4yLjAKIAogMS4gQXByaWwgMjIsIDIwMDE6IHBuZ2djY3JkLmMgaGFzIGJlZW4gcmVwb3J0ZWQgdG8gY3Jhc2ggb24gTmV0QlNEIHdoZW4KICAgIHJlYWRpbmcgaW50ZXJsYWNlZCBQTkcgZmlsZXMsIHdoZW4gYXNzZW1ibGVyIGNvZGUgaXMgZW5hYmxlZC4KIAogICAgU1RBVFVTOiBVbmRlciBpbnZlc3RpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9MSUNFTlNFIGIvTElDRU5TRQppbmRleCBlNWU5YjRhLi5hYWRmMThmIDEwMDY0NAotLS0gYS9MSUNFTlNFCisrKyBiL0xJQ0VOU0UKQEAgLTgsOCArOCw4IEBACiBJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCiB0aGlzIHNlbnRlbmNlLgogCi1saWJwbmcgdmVyc2lvbnMgMS4wLjcsIEp1bHkgMSwgMjAwMCwgdGhyb3VnaCAxLjAuMTJiZXRhMSwgTWF5IDE0LCAyMDAxLCBhcmUKLUNvcHlyaWdodCAoYykgMjAwMCwgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KK2xpYnBuZyB2ZXJzaW9ucyAxLjAuNywgSnVseSAxLCAyMDAwLCB0aHJvdWdoIDEuMi4wYmV0YTEsIE1heSA2LCAyMDAxLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwMCBHbGVubiBSYW5kZXJzLVBlaHJzb24KIGFuZCBhcmUgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42CiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKIApAQCAtNzMsMTEgKzczLDExIEBACiAKIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb3VyY2UgY29kZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZC4KIAotMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kCi0gICBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICBiZSBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgogCi0zLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbQotICAgYW55IHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCiAKIFRoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAogZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bwpAQCAtOTksNCArOTksNCBAQAogCiBHbGVubiBSYW5kZXJzLVBlaHJzb24KIHJhbmRlZ0BhbHVtLnJwaS5lZHUKLU1heSAxNCwgMjAwMQorTWF5IDYsIDIwMDEKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCA2YzgzZjMzLi40NGM3N2M4IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotUkVBRE1FIGZvciBsaWJwbmcgMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEgKHNoYXJlZCBsaWJyYXJ5IDIuMSkKK1JFQURNRSBmb3IgbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMSAoc2hhcmVkIGxpYnJhcnkgMi4xKQogU2VlIHRoZSBub3RlIGFib3V0IHZlcnNpb24gbnVtYmVycyBuZWFyIHRoZSB0b3Agb2YgcG5nLmgKIAogU2VlIElOU1RBTEwgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gaW5zdGFsbCBsaWJwbmcuCkBAIC0xNzIsNyArMTcyLDYgQEAKICAgICAgICBwbmdzdWl0ZSAgICAgPT4gIFRlc3QgaW1hZ2VzCiAgICAgICAgdmlzdXBuZyAgICAgID0+ICBDb250YWlucyBhIE1TVkMgd29ya3NwYWNlIGZvciBWaXN1YWxQbmcKICAgICAgIHByb2plY3RzICAgICAgPT4gIENvbnRhaW5zIHByb2plY3QgZmlsZXMgYW5kIHdvcmtzcGFjZXMgZm9yIGJ1aWxkaW5nIERMTAotICAgICAgIGJlb3MgICAgICAgICAgICAgPT4gIENvbnRhaW5zIGEgQmVvcyB3b3Jrc3BhY2UgZm9yIGJ1aWxkaW5nIGxpYnBuZwogICAgICAgIGJvcmxhbmQgICAgICAgICAgPT4gIENvbnRhaW5zIGEgQm9ybGFuZCB3b3Jrc3BhY2UgZm9yIGJ1aWxkaW5nIGxpYnBuZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB6bGliCiAgICAgICAgbXN2YyAgICAgICAgICAgICA9PiAgQ29udGFpbnMgYSBNaWNyb3NvZnQgVmlzdWFsIEMrKyAoTVNWQykgd29ya3NwYWNlCkBAIC0xODMsOSArMTgyLDkgQEAKICAgICAgICBkZXNjcmlwLm1tcyAgICAgID0+ICBWTVMgbWFrZWZpbGUgZm9yIE1NUyBvciBNTUsKICAgICAgICBtYWtlZmlsZS5zdGQgICAgID0+ICBHZW5lcmljIFVOSVggbWFrZWZpbGUgKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICAgICAgICBtYWtlZmlsZS5saW51eCAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMmJldGExKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2MsIGNyZWF0ZXMgbGlicG5nLnNvLjIuMS4yLjBiZXRhMSkKICAgICAgICBtYWtlZmlsZS5nY21teCAgID0+ICBMaW51eC9FTEYgbWFrZWZpbGUgKGdjYywgY3JlYXRlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnBuZy5zby4yLjEuMC4xMmJldGExLCB1c2VzIGFzc2VtYmxlciBjb2RlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicG5nLnNvLjIuMS4yLjBiZXRhMSwgdXNlcyBhc3NlbWJsZXIgY29kZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1bmVkIGZvciBJbnRlbCBNTVggcGxhdGZvcm0pCiAgICAgICAgbWFrZWZpbGUuZ2NjICAgICA9PiAgR2VuZXJpYyBtYWtlZmlsZSAoZ2NjLCBjcmVhdGVzIHN0YXRpYyBsaWJwbmcuYSkKICAgICAgICBtYWtlZmlsZS5rbnIgICAgID0+ICBBcmNoYWljIFVOSVggTWFrZWZpbGUgdGhhdCBjb252ZXJ0cyBmaWxlcyB3aXRoCkBAIC0xOTQsMTggKzE5MywxNiBAQAogICAgICAgIG1ha2VmaWxlLmFpeCAgICAgPT4gIEFJWCBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLmN5Z3dpbiAgPT4gIEN5Z3dpbi9nY2MgbWFrZWZpbGUKICAgICAgICBtYWtlZmlsZS5kZWMgICAgID0+ICBERUMgQWxwaGEgVU5JWCBtYWtlZmlsZQotICAgICAgIG1ha2VmaWxlLmhwZ2NjICAgPT4gIEhQVVggbWFrZWZpbGUgdXNpbmcgZ2NjCiAgICAgICAgbWFrZWZpbGUuaHB1eCAgICA9PiAgSFBVWCAoMTAuMjAgYW5kIDExLjAwKSBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLmlibWMgICAgPT4gIElCTSBDL0MrKyB2ZXJzaW9uIDMueCBmb3IgV2luMzIgYW5kIE9TLzIgKHN0YXRpYykKICAgICAgICBtYWtlZmlsZS5pbnRlbCAgID0+ICBJbnRlbCBDL0MrKyB2ZXJzaW9uIDQuMCBhbmQgbGF0ZXIKICAgICAgICBsaWJwbmcuaWNjICAgICAgID0+ICBQcm9qZWN0IGZpbGUsIElCTSBWaXN1YWxBZ2UvQysrIDQuMCBvciBsYXRlcgogICAgICAgIG1ha2VmaWxlLm1hY29zeCAgPT4gIE1BQ09TIFggTWFrZWZpbGUKLSAgICAgICBtYWtlZmlsZS5uZXRic2QgID0+ICBOZXRCU0QvY2MgbWFrZWZpbGUsIHVzZXMgUE5HR0NDUkQKICAgICAgICBtYWtlZmlsZS5zZ2kgICAgID0+ICBTaWxpY29uIEdyYXBoaWNzIElSSVggKGNjLCBjcmVhdGVzIHN0YXRpYyBsaWIpCi0gICAgICAgbWFrZWZpbGUuc2dnY2MgICA9PiAgU2lsaWNvbiBHcmFwaGljcyAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMC4xMmJldGExKQorICAgICAgIG1ha2VmaWxlLnNnZ2NjICAgPT4gIFNpbGljb24gR3JhcGhpY3MgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjIuMGJldGExKQogICAgICAgIG1ha2VmaWxlLnN1bm9zICAgPT4gIFN1biBtYWtlZmlsZQogICAgICAgIG1ha2VmaWxlLnNvbGFyaXMgPT4gIFNvbGFyaXMgMi5YIG1ha2VmaWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjYywgY3JlYXRlcyBsaWJwbmcuc28uMi4xLjAuMTJiZXRhMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NjLCBjcmVhdGVzIGxpYnBuZy5zby4yLjEuMi4wYmV0YTEpCiAgICAgICAgbWFrZWZpbGUuc2NvICAgICA9PiAgRm9yIFNDTyBPU3I1ICBFTEYgYW5kIFVuaXh3YXJlIDcgd2l0aCBOYXRpdmUgY2MKICAgICAgICBtYWtlZmlsZS5taXBzICAgID0+ICBNSVBTIG1ha2VmaWxlCiAgICAgICAgbWFrZWZpbGUuYWNvcm4gICA9PiAgQWNvcm4gbWFrZWZpbGUKZGlmZiAtLWdpdCBhL1kyS0lORk8gYi9ZMktJTkZPCmluZGV4IDg2YjcyMTMuLjE3NGM3MzAgMTAwNjQ0Ci0tLSBhL1kyS0lORk8KKysrIGIvWTJLSU5GTwpAQCAtMSwxMyArMSwxMyBAQAogICAgWTJLIGNvbXBsaWFuY2UgaW4gbGlicG5nOgogICAgPT09PT09PT09PT09PT09PT09PT09PT09PQogCi0gICAgICBNYXkgMTQsIDIwMDEKKyAgICAgIE1heSA2LCAyMDAxCiAKICAgICAgIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKICAgICAgIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiAgICAgICBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi0gICAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMTJiZXRhMSBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKKyAgICAgIHVwd2FyZCB0aHJvdWdoIDEuMi4wYmV0YTEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiAgICAgICB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KIAogICAgICAgTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCAxZDEyNWM2Li4xNTlmYmFkIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC0xLDUgKzEsNSBAQAogZWNobyAiCi0gIFRoZXJlIGlzIG5vIFwiY29uZmlndXJlXCIgc2NyaXB0IGZvciBMaWJwbmctMS4wLjEyYmV0YTEuICBJbnN0ZWFkLCBwbGVhc2UKKyAgVGhlcmUgaXMgbm8gXCJjb25maWd1cmVcIiBzY3JpcHQgZm9yIExpYnBuZy0xLjIuMGJldGExLiAgSW5zdGVhZCwgcGxlYXNlCiAgIGNvcHkgdGhlIGFwcHJvcHJpYXRlIG1ha2VmaWxlIGZvciB5b3VyIHN5c3RlbSBmcm9tIHRoZSBcInNjcmlwdHNcIgogICBkaXJlY3RvcnkuICBSZWFkIHRoZSBJTlNUQUxMIGZpbGUgZm9yIG1vcmUgZGV0YWlscy4KICIKZGlmZiAtLWdpdCBhL2NvbnRyaWIvZ3JlZ2Jvb2svcmVhZHBuZzIuYyBiL2NvbnRyaWIvZ3JlZ2Jvb2svcmVhZHBuZzIuYwppbmRleCA0OThkOTY3Li40MzQyMjlmIDEwMDY0NAotLS0gYS9jb250cmliL2dyZWdib29rL3JlYWRwbmcyLmMKKysrIGIvY29udHJpYi9ncmVnYm9vay9yZWFkcG5nMi5jCkBAIC00OSw4ICs0OSw3NyBAQAogCiB2b2lkIHJlYWRwbmcyX3ZlcnNpb25faW5mbyh2b2lkKQogeworI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkgJiYgXAorICAgIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpKSAmJiBcCisgICAgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQorICAgIC8qCisgICAgICogV0FSTklORzogIFRoaXMgcHJlcHJvY2Vzc29yIGFwcHJvYWNoIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlCisgICAgICogICAgICAgICAgIGNhbm5vdCBiZSB1c2VkIHdpdGggYSBsaWJwbmcgRExMIG9sZGVyIHRoYW4gMS4yLjAtLXRoZQorICAgICAqICAgICAgICAgICBjb21waWxlZC1pbiBzeW1ib2xzIGZvciB0aGUgbmV3IGZ1bmN0aW9ucyB3aWxsIG5vdCBleGlzdC4KKyAgICAgKiAgICAgICAgICAgKENvdWxkIHVzZSBkbG9wZW4oKSBhbmQgZGxzeW0oKSBvbiBVbml4IGFuZCBjb3JyZXNwb25kaW5nCisgICAgICogICAgICAgICAgIGNhbGxzIGZvciBXaW5kb3dzLCBidXQgbm90IHBvcnRhYmxlLi4uKQorICAgICAqLworICAgIHsKKyAgICAgICAgaW50IG1teHN1cHBvcnQgPSBwbmdfbW14X3N1cHBvcnQoKTsKKyAgICAgICAgaWYgKG1teHN1cHBvcnQgPCAwKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBDb21waWxlZCB3aXRoIGxpYnBuZyAlczsgdXNpbmcgbGlicG5nICVzICIKKyAgICAgICAgICAgICAgIndpdGhvdXQgTU1YIHN1cHBvcnQuXG4iLCBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIHBuZ19saWJwbmdfdmVyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgY29tcGlsZXJJRDsKKyAgICAgICAgICAgIHBuZ191aW50XzMyIG1teF9tYXNrID0gcG5nX2dldF9tbXhfZmxhZ21hc2soCisgICAgICAgICAgICAgIFBOR19TRUxFQ1RfUkVBRCB8IFBOR19TRUxFQ1RfV1JJVEUsICZjb21waWxlcklEKTsKKworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICBDb21waWxlZCB3aXRoIGxpYnBuZyAlczsgdXNpbmcgbGlicG5nICVzICIKKyAgICAgICAgICAgICAgIndpdGggTU1YIHN1cHBvcnRcbiAgICglcyB2ZXJzaW9uKS4iLCBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsCisgICAgICAgICAgICAgIHBuZ19saWJwbmdfdmVyLCBjb21waWxlcklEID09IDE/ICJNU1ZDKysiIDoKKyAgICAgICAgICAgICAgKGNvbXBpbGVySUQgPT0gMj8gIkdOVSBDIiA6ICJ1bmtub3duIikpOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIFByb2Nlc3NvciAlcyBNTVggaW5zdHJ1Y3Rpb25zLlxuIiwKKyAgICAgICAgICAgICAgbW14c3VwcG9ydD8gInN1cHBvcnRzIiA6ICJkb2VzIG5vdCBzdXBwb3J0Iik7CisgICAgICAgICAgICBpZiAobW14c3VwcG9ydCA+IDApIHsKKyAgICAgICAgICAgICAgICBpbnQgbnVtX29wdGltcyA9IDA7CisKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICIgICAgICBQb3RlbnRpYWwgTU1YIG9wdGltaXphdGlvbnMgc3VwcG9ydGVkIGJ5IGxpYnBuZzpcbiIpOworICAgICAgICAgICAgICAgIGlmIChtbXhfbWFzayAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCKQorICAgICAgICAgICAgICAgICAgICArK251bV9vcHRpbXM7CisgICAgICAgICAgICAgICAgaWYgKG1teF9tYXNrICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9VUCkKKyAgICAgICAgICAgICAgICAgICAgKytudW1fb3B0aW1zOworICAgICAgICAgICAgICAgIGlmIChtbXhfbWFzayAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKQorICAgICAgICAgICAgICAgICAgICArK251bV9vcHRpbXM7CisgICAgICAgICAgICAgICAgaWYgKG1teF9tYXNrICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkKKyAgICAgICAgICAgICAgICAgICAgKytudW1fb3B0aW1zOworICAgICAgICAgICAgICAgIGlmIChudW1fb3B0aW1zKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgZGVjb2RpbmcgJXMgcm93IGZpbHRlcnMgKHJlYWRpbmcpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIChudW1fb3B0aW1zID09IDQpPyAiYWxsIG5vbi10cml2aWFsIiA6ICJzb21lIik7CisgICAgICAgICAgICAgICAgaWYgKG1teF9tYXNrICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgY29tYmluaW5nIHJvd3MgKHJlYWRpbmcpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgKytudW1fb3B0aW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobW14X21hc2sgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICIgICAgICAgICBleHBhbmRpbmcgaW50ZXJsYWNpbmcgKHJlYWRpbmcpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgKytudW1fb3B0aW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtbXhfbWFzayAmPSB+KCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIICk7CisgICAgICAgICAgICAgICAgaWYgKG1teF9tYXNrKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICAgICAgb3RoZXIgKHVua25vd24pXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgKytudW1fb3B0aW1zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobnVtX29wdGltcyA9PSAwKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAgICAgIChub25lKVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisjZWxzZQogICAgIGZwcmludGYoc3RkZXJyLCAiICAgQ29tcGlsZWQgd2l0aCBsaWJwbmcgJXM7IHVzaW5nIGxpYnBuZyAlcy5cbiIsCiAgICAgICBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsIHBuZ19saWJwbmdfdmVyKTsKKyNlbmRpZgogCiAgICAgZnByaW50ZihzdGRlcnIsICIgICBDb21waWxlZCB3aXRoIHpsaWIgJXM7IHVzaW5nIHpsaWIgJXMuXG4iLAogICAgICAgWkxJQl9WRVJTSU9OLCB6bGliX3ZlcnNpb24pOwpAQCAtMTExLDYgKzE4MCw5NyBAQAogICAgIHBuZ19zZXRfcHJvZ3Jlc3NpdmVfcmVhZF9mbihwbmdfcHRyLCBtYWlucHJvZ19wdHIsCiAgICAgICByZWFkcG5nMl9pbmZvX2NhbGxiYWNrLCByZWFkcG5nMl9yb3dfY2FsbGJhY2ssIHJlYWRwbmcyX2VuZF9jYWxsYmFjayk7CiAKKworICAgIC8qCisgICAgICogbWF5IGFzIHdlbGwgZW5hYmxlIG9yIGRpc2FibGUgTU1YIHJvdXRpbmVzIGhlcmUsIGlmIHN1cHBvcnRlZDsKKyAgICAgKgorICAgICAqIHRvIGVuYWJsZSBhbGw6ICBtYXNrID0gcG5nX2dldF9tbXhfZmxhZ21hc2sgKAorICAgICAqICAgICAgICAgICAgICAgICAgIFBOR19TRUxFQ1RfUkVBRCB8IFBOR19TRUxFQ1RfV1JJVEUsICZjb21waWxlcklEKTsKKyAgICAgKiAgICAgICAgICAgICAgICAgZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyAocG5nX3B0cik7CisgICAgICogICAgICAgICAgICAgICAgIGZsYWdzIHw9IG1hc2s7CisgICAgICogICAgICAgICAgICAgICAgIHBuZ19zZXRfYXNtX2ZsYWdzIChwbmdfcHRyLCBmbGFncyk7CisgICAgICoKKyAgICAgKiB0byBkaXNhYmxlIGFsbDogIG1hc2sgPSBwbmdfZ2V0X21teF9mbGFnbWFzayAoCisgICAgICogICAgICAgICAgICAgICAgICAgUE5HX1NFTEVDVF9SRUFEIHwgUE5HX1NFTEVDVF9XUklURSwgJmNvbXBpbGVySUQpOworICAgICAqICAgICAgICAgICAgICAgICAgZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyAocG5nX3B0cik7CisgICAgICogICAgICAgICAgICAgICAgICBmbGFncyAmPSB+bWFzazsKKyAgICAgKiAgICAgICAgICAgICAgICAgIHBuZ19zZXRfYXNtX2ZsYWdzIChwbmdfcHRyLCBmbGFncyk7CisgICAgICovCisKKyNpZiAoZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfTV9JWDg2KSkgJiYgXAorICAgIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKKyAgICAvKgorICAgICAqIFdBUk5JTkc6ICBUaGlzIHByZXByb2Nlc3NvciBhcHByb2FjaCBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZQorICAgICAqICAgICAgICAgICBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgbGlicG5nIERMTCBvbGRlciB0aGFuIDEuMi4wLS10aGUKKyAgICAgKiAgICAgICAgICAgY29tcGlsZWQtaW4gc3ltYm9scyBmb3IgdGhlIG5ldyBmdW5jdGlvbnMgd2lsbCBub3QgZXhpc3QuCisgICAgICogICAgICAgICAgIChDb3VsZCB1c2UgZGxvcGVuKCkgYW5kIGRsc3ltKCkgb24gVW5peCBhbmQgY29ycmVzcG9uZGluZworICAgICAqICAgICAgICAgICBjYWxscyBmb3IgV2luZG93cywgYnV0IG5vdCBwb3J0YWJsZS4uLikKKyAgICAgKi8KKyAgICB7CisjaWZkZWYgUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRAorICAgICAgICBwbmdfdWludF8zMiBtbXhfZGlzYWJsZV9tYXNrID0gMDsKKyAgICAgICAgcG5nX3VpbnRfMzIgYXNtX2ZsYWdzLCBtbXhfbWFzazsKKyAgICAgICAgaW50IGNvbXBpbGVySUQ7CisKKyAgICAgICAgaWYgKG1haW5wcm9nX3B0ci0+bm9tbXhmaWx0ZXJzKQorICAgICAgICAgICAgbW14X2Rpc2FibGVfbWFzayB8PSAoIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEggKTsKKyAgICAgICAgaWYgKG1haW5wcm9nX3B0ci0+bm9tbXhjb21iaW5lKQorICAgICAgICAgICAgbW14X2Rpc2FibGVfbWFzayB8PSBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1c7CisgICAgICAgIGlmIChtYWlucHJvZ19wdHItPm5vbW14aW50ZXJsYWNlKQorICAgICAgICAgICAgbW14X2Rpc2FibGVfbWFzayB8PSBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFOworICAgICAgICBhc21fZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyhwbmdfcHRyKTsKKyAgICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgYXNtX2ZsYWdzICYgfm1teF9kaXNhYmxlX21hc2spOworCisKKyAgICAgICAgLyogTm93IHF1ZXJ5IGxpYnBuZydzIGFzbSBzZXR0aW5ncywganVzdCBmb3IgeXVrcy4gIE5vdGUgdGhhdCB0aGlzCisgICAgICAgICAqIGRpZmZlcnMgZnJvbSB0aGUgcXVlcnlpbmcgb2YgaXRzICpwb3RlbnRpYWwqIE1NWCBjYXBhYmlsaXRpZXMKKyAgICAgICAgICogaW4gcmVhZHBuZzJfdmVyc2lvbl9pbmZvKCk7IHRoaXMgaXMgdHJ1ZSBydW50aW1lIHZlcmlmaWNhdGlvbi4gKi8KKworICAgICAgICBhc21fZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyhwbmdfcHRyKTsKKyAgICAgICAgbW14X21hc2sgPSBwbmdfZ2V0X21teF9mbGFnbWFzayhQTkdfU0VMRUNUX1JFQUQgfCBQTkdfU0VMRUNUX1dSSVRFLAorICAgICAgICAgICZjb21waWxlcklEKTsKKyAgICAgICAgaWYgKGFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfU1VQUE9SVF9DT01QSUxFRCkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAiICBNTVggc3VwcG9ydCAoJXMgdmVyc2lvbikgaXMgY29tcGlsZWQgaW50byBsaWJwbmdcbiIsCisgICAgICAgICAgICAgIGNvbXBpbGVySUQgPT0gMT8gIk1TVkMrKyIgOgorICAgICAgICAgICAgICAoY29tcGlsZXJJRCA9PSAyPyAiR05VIEMiIDogInVua25vd24iKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICBNTVggc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW50byBsaWJwbmdcbiIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgTU1YIGluc3RydWN0aW9ucyBhcmUgJXNzdXBwb3J0ZWQgYnkgQ1BVXG4iLAorICAgICAgICAgIChhc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1NVUFBPUlRfSU5fQ1BVKT8gIiIgOiAibm90ICIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgTU1YIHJlYWQgc3VwcG9ydCBmb3IgY29tYmluaW5nIHJvd3MgaXMgJXNhYmxlZFxuIiwKKyAgICAgICAgICAoYXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKT8gImVuIiA6ICJkaXMiKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgIiAgTU1YIHJlYWQgc3VwcG9ydCBmb3IgZXhwYW5kaW5nIGludGVybGFjaW5nIGlzICVzYWJsZWRcbiIsCisgICAgICAgICAgKGFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UpPyAiZW4iIDogImRpcyIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgTU1YIHJlYWQgc3VwcG9ydCBmb3IgXCJzdWJcIiBmaWx0ZXIgaXMgJXNhYmxlZFxuIiwKKyAgICAgICAgICAoYXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIpPyAiZW4iIDogImRpcyIpOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgTU1YIHJlYWQgc3VwcG9ydCBmb3IgXCJ1cFwiIGZpbHRlciBpcyAlc2FibGVkXG4iLAorICAgICAgICAgIChhc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKT8gImVuIiA6ICJkaXMiKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIE1NWCByZWFkIHN1cHBvcnQgZm9yIFwiYXZnXCIgZmlsdGVyIGlzICVzYWJsZWRcbiIsCisgICAgICAgICAgKGFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKT8gImVuIiA6ICJkaXMiKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIE1NWCByZWFkIHN1cHBvcnQgZm9yIFwiUGFldGhcIiBmaWx0ZXIgaXMgJXNhYmxlZFxuIiwKKyAgICAgICAgICAoYXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCk/ICJlbiIgOiAiZGlzIik7CisgICAgICAgIGFzbV9mbGFncyAmPSAobW14X21hc2sgJiB+KCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCApKTsKKyAgICAgICAgaWYgKGFzbV9mbGFncykKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAiICBhZGRpdGlvbmFsIE1NWCBzdXBwb3J0IGlzIGFsc28gZW5hYmxlZCAoMHglMDJseClcbiIsCisgICAgICAgICAgICAgIGFzbV9mbGFncyk7CisjZWxzZSAgLyogIVBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQgKi8KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIgIE1NWCBxdWVyeWluZyBpcyBkaXNhYmxlZCBpbiBsaWJwbmcuXG4iKTsKKyNlbmRpZiAvKiA/UE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCAqLworICAgIH0KKyNlbmRpZgorCisKICAgICAvKiBtYWtlIHN1cmUgd2Ugc2F2ZSBvdXIgcG9pbnRlcnMgZm9yIHVzZSBpbiByZWFkcG5nMl9kZWNvZGVfZGF0YSgpICovCiAKICAgICBtYWlucHJvZ19wdHItPnBuZ19wdHIgPSBwbmdfcHRyOwpAQCAtMzcwLDYgKzUzMCw3IEBACiAKICAgICAoKm1haW5wcm9nX3B0ci0+bWFpbnByb2dfZmluaXNoX2Rpc3BsYXkpKCk7CiAKKyAgICBpbmZvX3B0ciA9IGluZm9fcHRyOyAvKiB3aXRob3V0IHRoaXMgdGhlIGNvbXBpbGVyIHdoaW5lcyBhYm91dCBpbmZvX3B0ciAqLwogCiAgICAgLyogYWxsIGRvbmUgKi8KIApkaWZmIC0tZ2l0IGEvY29udHJpYi92aXN1cG5nL1BuZ0ZpbGUuYyBiL2NvbnRyaWIvdmlzdXBuZy9QbmdGaWxlLmMKaW5kZXggYWY4ZDgxYy4uOTU5YWZlOSAxMDA2NDQKLS0tIGEvY29udHJpYi92aXN1cG5nL1BuZ0ZpbGUuYworKysgYi9jb250cmliL3Zpc3VwbmcvUG5nRmlsZS5jCkBAIC0zNzAsMTQgKzM3MCwxNCBAQAogICAgICAgICAKICAgICAgICAgLy8gY2xlYW4gdXAgYWZ0ZXIgdGhlIHdyaXRlLCBhbmQgZnJlZSBhbnkgbWVtb3J5IGFsbG9jYXRlZAogICAgICAgICAKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmdfcHRyLCAmaW5mb19wdHIpOworICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZ19wdHIsIChwbmdfaW5mb3BwKSBOVUxMKTsKICAgICAgICAgCiAgICAgICAgIC8vIHllcHAsIGRvbmUKICAgICB9CiAKICAgICBDYXRjaCAobXNnKQogICAgIHsKLSAgICAgICAgcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0KCZwbmdfcHRyLCAmaW5mb19wdHIpOworICAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJnBuZ19wdHIsIChwbmdfaW5mb3BwKSBOVUxMKTsKIAogICAgICAgICBpZihwcGJSb3dQb2ludGVycykKICAgICAgICAgICAgIGZyZWUgKHBwYlJvd1BvaW50ZXJzKTsKZGlmZiAtLWdpdCBhL2V4YW1wbGUuYyBiL2V4YW1wbGUuYwppbmRleCBmMGZlNjg4Li4xZTk1M2M4IDEwMDY0NAotLS0gYS9leGFtcGxlLmMKKysrIGIvZXhhbXBsZS5jCkBAIC0zMzgsOCArMzM4LDcgQEAKIAogICAgZm9yIChyb3cgPSAwOyByb3cgPCBoZWlnaHQ7IHJvdysrKQogICAgewotICAgICAgcm93X3BvaW50ZXJzW3Jvd10gPSBwbmdfbWFsbG9jKHBuZ19wdHIsIHBuZ19nZXRfcm93Ynl0ZXMocG5nX3B0ciwKLSAgICAgICAgIGluZm9fcHRyKSk7CisgICAgICByb3dfcG9pbnRlcnNbcm93XSA9IG1hbGxvYyhwbmdfZ2V0X3Jvd2J5dGVzKHBuZ19wdHIsIGluZm9fcHRyKSk7CiAgICB9CiAKICAgIC8qIE5vdyBpdCdzIHRpbWUgdG8gcmVhZCB0aGUgaW1hZ2UuICBPbmUgb2YgdGhlc2UgbWV0aG9kcyBpcyBSRVFVSVJFRCAqLwpAQCAtNDk1LDcgKzQ5NCw3IEBACiAgKiBwbmdfcHJvZ3Jlc3NpdmVfY29tYmluZV9yb3coKSBwYXNzaW5nIGluIHRoZSByb3cgYW5kIHRoZQogICogb2xkIHJvdy4gIFlvdSBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uIGZvciBOVUxMIHJvd3MgKGl0IHdpbGwKICAqIGp1c3QgcmV0dXJuKSBhbmQgZm9yIG5vbi1pbnRlcmxhY2VkIGltYWdlcyAoaXQganVzdCBkb2VzIHRoZQotICogcG5nX21lbWNweSBmb3IgeW91KSBpZiBpdCB3aWxsIG1ha2UgdGhlIGNvZGUgZWFzaWVyLiAgVGh1cywgeW91CisgKiBtZW1jcHkgZm9yIHlvdSkgaWYgaXQgd2lsbCBtYWtlIHRoZSBjb2RlIGVhc2llci4gIFRodXMsIHlvdQogICogY2FuIGp1c3QgZG8gdGhpcyBmb3IgYWxsIGNhc2VzOgogICovCiAKQEAgLTYwNCw4ICs2MDMsNyBAQAogICAgICAgUE5HX0lOVEVSTEFDRV8/Pz8/LCBQTkdfQ09NUFJFU1NJT05fVFlQRV9CQVNFLCBQTkdfRklMVEVSX1RZUEVfQkFTRSk7CiAKICAgIC8qIHNldCB0aGUgcGFsZXR0ZSBpZiB0aGVyZSBpcyBvbmUuICBSRVFVSVJFRCBmb3IgaW5kZXhlZC1jb2xvciBpbWFnZXMgKi8KLSAgIHBhbGV0dGUgPSAocG5nX2NvbG9ycClwbmdfbWFsbG9jKHBuZ19wdHIsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgKLSAgICAgICAgICAgICAqIHNpemVvZiAocG5nX2NvbG9yKSk7CisgICBwYWxldHRlID0gKHBuZ19jb2xvcnApcG5nX21hbGxvYyhwbmdfcHRyLCBQTkdfTUFYX1BBTEVUVEVfTEVOR1RIICogc2l6ZW9mIChwbmdfY29sb3IpKTsKICAgIC8qIC4uLiBzZXQgcGFsZXR0ZSBjb2xvcnMgLi4uICovCiAgICBwbmdfc2V0X1BMVEUocG5nX3B0ciwgaW5mb19wdHIsIHBhbGV0dGUsIFBOR19NQVhfUEFMRVRURV9MRU5HVEgpOwogICAgLyogWW91IG11c3Qgbm90IGZyZWUgcGFsZXR0ZSBoZXJlLCBiZWNhdXNlIHBuZ19zZXRfUExURSBvbmx5IG1ha2VzIGEgbGluayB0bwpkaWZmIC0tZ2l0IGEvbGlicG5nLjMgYi9saWJwbmcuMwppbmRleCBlMDk4MDlhLi44OGEzNzU4IDEwMDY0NAotLS0gYS9saWJwbmcuMworKysgYi9saWJwbmcuMwpAQCAtMSw2ICsxLDYgQEAKLS5USCBMSUJQTkcgMyAiTWF5IDE0LCAyMDAxIgorLlRIIExJQlBORyAzICJNYXkgNiwgMjAwMSIKIC5TSCBOQU1FCi1saWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjAuMTJiZXRhMQorbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4yLjBiZXRhMQogLlNIIFNZTk9QU0lTCiBcZklcZkIKIApAQCAtMTAwLDYgKzEwMCwxMCBAQAogCiBcZklcZkIKIAorXGZCcG5nX3VpbnRfMzIgcG5nX2dldF9hc21fZmxhZ3MgKHBuZ19zdHJ1Y3RwIFxmSXBuZ19wdHJcZlBcZkIpO1xmUAorCitcZklcZkIKKwogXGZCcG5nX2J5dGUgcG5nX2dldF9iaXRfZGVwdGggKHBuZ19zdHJ1Y3RwIFxmUFxmSXBuZ19wdHJcZlBcZkIsIHBuZ19pbmZvcCBcZklpbmZvX3B0clxmUFxmQik7XGZQCiAKIFxmSVxmQgpAQCAtMTkyLDYgKzE5NiwxOCBAQAogCiBcZklcZkIKIAorXGZCcG5nX2J5dGUgcG5nX2dldF9tbXhfYml0ZGVwdGhfdGhyZXNob2xkIChwbmdfc3RydWN0cCBcZklwbmdfcHRyXGZQXGZCKTtcZlAKKworXGZJXGZCCisKK1xmQnBuZ191aW50XzMyIHBuZ19nZXRfbW14X2ZsYWdtYXNrIChpbnQgXGZQXGZJZmxhZ19zZWxlY3RcZlBcZkIsIGludCBcZkkqY29tcGlsZXJJRFxmUFxmQik7XGZQCisKK1xmSVxmQgorCitcZkJwbmdfdWludF8zMiBwbmdfZ2V0X21teF9yb3dieXRlc190aHJlc2hvbGQgKHBuZ19zdHJ1Y3RwIFxmSXBuZ19wdHJcZlBcZkIpO1xmUAorCitcZklcZkIKKwogXGZCcG5nX3VpbnRfMzIgcG5nX2dldF9vRkZzIChwbmdfc3RydWN0cCBcZlBcZklwbmdfcHRyXGZQXGZCLCBwbmdfaW5mb3AgXGZQXGZJaW5mb19wdHJcZlBcZkIsIHBuZ191aW50XzMyIFxmUFxmSSpvZmZzZXRfeFxmUFxmQiwgcG5nX3VpbnRfMzIgXGZQXGZJKm9mZnNldF95XGZQXGZCLCBpbnQgXGZJKnVuaXRfdHlwZVxmUFxmQik7XGZQCiAKIFxmSVxmQgpAQCAtMzM0LDYgKzM1MCwxMCBAQAogCiBcZklcZkIKIAorXGZCaW50IHBuZ19tbXhfc3VwcG9ydCBcZkkodm9pZFxmUFxmQik7XGZQCisKK1xmSVxmQgorCiBcZkJ2b2lkIHBuZ19wZXJtaXRfZW1wdHlfcGx0ZSAocG5nX3N0cnVjdHAgXGZQXGZJcG5nX3B0clxmUFxmQiwgaW50IFxmSWVtcHR5X3BsdGVfcGVybWl0dGVkXGZQXGZCKTtcZlAKIAogXGZJXGZCCkBAIC0zODQsNiArNDA0LDEwIEBACiAKIFxmSVxmQgogCitcZkJwbmdfc2V0X2FzbV9mbGFncyAocG5nX3N0cnVjdHAgXGZQXGZJcG5nX3B0clxmUFxmQiwgcG5nX3VpbnRfMzIgXGZJYXNtX2ZsYWdzXGZQXGZCKTtcZlAKKworXGZJXGZCCisKIFxmQnZvaWQgcG5nX3NldF9iYWNrZ3JvdW5kIChwbmdfc3RydWN0cCBcZlBcZklwbmdfcHRyXGZQXGZCLCBwbmdfY29sb3JfMTZwIFxmUFxmSWJhY2tncm91bmRfY29sb3JcZlBcZkIsIGludCBcZlBcZkliYWNrZ3JvdW5kX2dhbW1hX2NvZGVcZlBcZkIsIGludCBcZlBcZkluZWVkX2V4cGFuZFxmUFxmQiwgZG91YmxlIFxmSWJhY2tncm91bmRfZ2FtbWFcZlBcZkIpO1xmUAogCiBcZklcZkIKQEAgLTUxMiw2ICs1MzYsMTAgQEAKIAogXGZJXGZCCiAKK1xmQnBuZ19zZXRfbW14X3RocmVzaG9sZHMgKHBuZ19zdHJ1Y3RwIFxmUFxmSXBuZ19wdHJcZlBcZkIsIHBuZ19ieXRlIFxmUFxmSW1teF9iaXRkZXB0aF90aHJlc2hvbGRcZlBcZkIsIHBuZ191aW50XzMyIFxmSW1teF9yb3dieXRlc190aHJlc2hvbGRcZlBcZkIpO1xmUAorCitcZklcZkIKKwogXGZCdm9pZCBwbmdfc2V0X29GRnMgKHBuZ19zdHJ1Y3RwIFxmUFxmSXBuZ19wdHJcZlBcZkIsIHBuZ19pbmZvcCBcZlBcZklpbmZvX3B0clxmUFxmQiwgcG5nX3VpbnRfMzIgXGZQXGZJb2Zmc2V0X3hcZlBcZkIsIHBuZ191aW50XzMyIFxmUFxmSW9mZnNldF95XGZQXGZCLCBpbnQgXGZJdW5pdF90eXBlXGZQXGZCKTtcZlAKIAogXGZJXGZCCkBAIC02MDQsNiArNjMyLDEyIEBACiAKIFxmSVxmQgogCitcZkJ2b2lkIHBuZ19zZXRfc3RyaXBfZXJyb3JfbnVtYmVycyAocG5nX3N0cnVjdHAgXGZJcG5nX3B0ciwKKworXGZCcG5nX3VpbnRfMzIgXGZJc3RyaXBfbW9kZVxmUFxmQik7XGZQCisKK1xmSVxmQgorCiBcZkJ2b2lkIHBuZ19zZXRfc3dhcCAocG5nX3N0cnVjdHAgXGZJcG5nX3B0clxmUFxmQik7XGZQCiAKIFxmSVxmQgpAQCAtNzQ3LDcgKzc4MSw3IEBACiAuU0ggTElCUE5HLlRYVAogbGlicG5nLnR4dCAtIEEgZGVzY3JpcHRpb24gb24gaG93IHRvIHVzZSBhbmQgbW9kaWZ5IGxpYnBuZwogCi0gbGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEKKyBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKICBVcGRhdGVkIGFuZCBkaXN0cmlidXRlZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICA8cmFuZGVnQGFsdW0ucnBpLmVkdT4KICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KQEAgLTIxNDMsNyArMjE3Nyw2IEBACiAKICAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGVhY2ggcm93IG9mIGltYWdlCiAgICAgZGF0YSBpcyBjb21wbGV0ZSAqLwotCiAgdm9pZAogIHJvd19jYWxsYmFjayhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgbmV3X3JvdywKICAgICBwbmdfdWludF8zMiByb3dfbnVtLCBpbnQgcGFzcykKQEAgLTMzOTIsOCArMzQyNSwxMDYgQEAKIGhhdmluZyBsZXZlbCA9IDAgd2lsbCBiZSBwcmludGVkLiAgVGhlcmUgYXJlbid0IGFueSBzdWNoIHN0YXRlbWVudHMgaW4KIHRoaXMgdmVyc2lvbiBvZiBsaWJwbmcsIGJ1dCBpZiB5b3UgaW5zZXJ0IHNvbWUgdGhleSB3aWxsIGJlIHByaW50ZWQuCiAKKy5TSCBWSS4gIFJ1bnRpbWUgb3B0aW1pemF0aW9uCiAKLS5TSCBWSS4gIE1ORyBzdXBwb3J0CitBIG5ldyBmZWF0dXJlIGluIGxpYnBuZyAxLjIuMCBpcyB0aGUgYWJpbGl0eSB0byBkeW5hbWljYWxseSBzd2l0Y2ggYmV0d2Vlbgorc3RhbmRhcmQgYW5kIG9wdGltaXplZCB2ZXJzaW9ucyBvZiBzb21lIHJvdXRpbmVzLiAgQ3VycmVudGx5IHRoZXNlIGFyZQorbGltaXRlZCB0byB0aHJlZSBjb21wdXRhdGlvbmFsbHkgaW50ZW5zaXZlIHRhc2tzIHdoZW4gcmVhZGluZyBQTkcgZmlsZXM6CitkZWNvZGluZyByb3cgZmlsdGVycywgZXhwYW5kaW5nIGludGVybGFjaW5nLCBhbmQgY29tYmluaW5nIGludGVybGFjZWQgb3IKK3RyYW5zcGFyZW50IHJvdyBkYXRhIHdpdGggcHJldmlvdXMgcm93IGRhdGEuICBDdXJyZW50bHkgdGhlIG9wdGltaXplZAordmVyc2lvbnMgYXJlIGF2YWlsYWJsZSBvbmx5IGZvciB4ODYgKEludGVsLCBBTUQsIGV0Yy4pIHBsYXRmb3JtcyB3aXRoCitNTVggc3VwcG9ydCwgdGhvdWdoIHRoaXMgbWF5IGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMuICAoRm9yIGV4YW1wbGUsCit0aGUgbm9uLU1NWCBhc3NlbWJsZXIgb3B0aW1pemF0aW9ucyBmb3IgemxpYiBtaWdodCBiZWNvbWUgc2ltaWxhcmx5CitydW50aW1lLXNlbGVjdGFibGUgaW4gZnV0dXJlIHJlbGVhc2VzLCBpbiB3aGljaCBjYXNlIGxpYnBuZyBjb3VsZCBiZQorZXh0ZW5kZWQgdG8gc3VwcG9ydCB0aGVtLiAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbXBpbGUtdGltZSBjaG9pY2Ugb2YKK2Zsb2F0aW5nLXBvaW50IHZlcnN1cyBpbnRlZ2VyIHJvdXRpbmVzIGZvciBnYW1tYSBjb3JyZWN0aW9uIG1pZ2h0IGJlY29tZQorcnVudGltZS1zZWxlY3RhYmxlLikKKworQmVjYXVzZSBzdWNoIG9wdGltaXphdGlvbnMgdGVuZCB0byBiZSB2ZXJ5IHBsYXRmb3JtLSBhbmQgY29tcGlsZXItZGVwZW5kZW50LAorYm90aCBpbiBob3cgdGhleSBhcmUgd3JpdHRlbiBhbmQgaW4gaG93IHRoZXkgcGVyZm9ybSwgdGhlIG5ldyBydW50aW1lIGNvZGUKK2luIGxpYnBuZyBoYXMgYmVlbiB3cml0dGVuIHRvIGFsbG93IHByb2dyYW1zIHRvIHF1ZXJ5LCBlbmFibGUsIGFuZCBkaXNhYmxlCitlaXRoZXIgc3BlY2lmaWMgb3B0aW1pemF0aW9ucyBvciBhbGwgc3VjaCBvcHRpbWl6YXRpb25zLiAgRm9yIGV4YW1wbGUsIHRvCitlbmFibGUgYWxsIHBvc3NpYmxlIG9wdGltaXphdGlvbnMgKGJlYXJpbmcgaW4gbWluZCB0aGF0IHNvbWUgIm9wdGltaXphdGlvbnMiCittYXkgYWN0dWFsbHkgcnVuIG1vcmUgc2xvd2x5IGluIHJhcmUgY2FzZXMpOgorCisgICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKKyAgICAgICBwbmdfdWludF8zMiBtYXNrLCBmbGFnczsKKworICAgICAgIGZsYWdzID0gcG5nX2dldF9hc21fZmxhZ3MocG5nX3B0cik7CisgICAgICAgbWFzayA9IHBuZ19nZXRfYXNtX2ZsYWdtYXNrKFBOR19TRUxFQ1RfUkVBRCB8IFBOR19TRUxFQ1RfV1JJVEUpOworICAgICAgIHBuZ19zZXRfYXNtX2ZsYWdzKHBuZ19wdHIsIGZsYWdzIHwgbWFzayk7CisgICAgI2VuZGlmCisKK1RvIGVuYWJsZSBvbmx5IG9wdGltaXphdGlvbnMgcmVsZXZhbnQgdG8gcmVhZGluZyBQTkdzLCB1c2UgUE5HX1NFTEVDVF9SRUFECitieSBpdHNlbGYgd2hlbiBjYWxsaW5nIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCk7IHNpbWlsYXJseSBmb3Igb3B0aW1pemluZworb25seSB3cml0aW5nLiAgVG8gZGlzYWJsZSBhbGwgb3B0aW1pemF0aW9uczoKKworICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApCisgICAgICAgZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyhwbmdfcHRyKTsKKyAgICAgICBtYXNrID0gcG5nX2dldF9hc21fZmxhZ21hc2soUE5HX1NFTEVDVF9SRUFEIHwgUE5HX1NFTEVDVF9XUklURSk7CisgICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgZmxhZ3MgJiB+bWFzayk7CisgICAgI2VuZGlmCisKK1RvIGVuYWJsZSBvciBkaXNhYmxlIG9ubHkgTU1YLXJlbGF0ZWQgZmVhdHVyZXMsIHVzZSBwbmdfZ2V0X21teF9mbGFnbWFzaygpCitpbiBwbGFjZSBvZiBwbmdfZ2V0X2FzbV9mbGFnbWFzaygpLiAgVGhlIG1teCB2ZXJzaW9uIHRha2VzIG9uZSBhZGRpdGlvbmFsCitwYXJhbWV0ZXI6CisKKyAgICAjaWYgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQorICAgICAgIGludCBzZWxlY3Rpb24gPSBQTkdfU0VMRUNUX1JFQUQgfCBQTkdfU0VMRUNUX1dSSVRFOworICAgICAgIGludCBjb21waWxlcklEOworCisgICAgICAgbWFzayA9IHBuZ19nZXRfbW14X2ZsYWdtYXNrKHNlbGVjdGlvbiwgJmNvbXBpbGVySUQpOworICAgICNlbmRpZgorCitPbiByZXR1cm4sIGNvbXBpbGVySUQgd2lsbCBpbmRpY2F0ZSB3aGljaCB2ZXJzaW9uIG9mIHRoZSBNTVggYXNzZW1ibGVyCitvcHRpbWl6YXRpb25zIHdhcyBjb21waWxlZC4gIEN1cnJlbnRseSB0d28gZmxhdm9ycyBleGlzdDogIE1pY3Jvc29mdAorVmlzdWFsIEMrKyAoY29tcGlsZXJJRCA9PSAxKSBhbmQgR05VIEMgKGEuay5hLiBnY2MvZ2FzLCBjb21waWxlcklEID09IDIpLgorT24gbm9uLXg4NiBwbGF0Zm9ybXMgb3Igb24gc3lzdGVtcyBjb21waWxlZCB3aXRob3V0IE1NWCBvcHRpbWl6YXRpb25zLCBhCit2YWx1ZSBvZiAtMSBpcyB1c2VkLgorCitOb3RlIHRoYXQgYm90aCBwbmdfZ2V0X2FzbV9mbGFnbWFzaygpIGFuZCBwbmdfZ2V0X21teF9mbGFnbWFzaygpIHJldHVybgorYWxsIHZhbGlkLCBzZXR0YWJsZSBvcHRpbWl6YXRpb24gYml0cyBmb3IgdGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgdGhhdCdzCitjdXJyZW50bHkgaW4gdXNlLiAgSW4gdGhlIGNhc2Ugb2Ygc2hhcmVkIChkeW5hbWljYWxseSBsaW5rZWQpIGxpYnJhcmllcywKK3RoaXMgbWF5IGluY2x1ZGUgb3B0aW1pemF0aW9ucyB0aGF0IGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgdGhlIGNvZGUgd2FzCit3cml0dGVuIGFuZCBjb21waWxlZC4gIEl0IGlzIGFsc28gcG9zc2libGUsIG9mIGNvdXJzZSwgdG8gZW5hYmxlIG9ubHkga25vd24sCitzcGVjaWZpYyBvcHRpbWl6YXRpb25zOyBmb3IgZXhhbXBsZToKKworICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApCisgICAgICAgZmxhZ3MgPSBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cgIFwKKyAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UgICAgXAorICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICBcCisgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQICAgIFwKKyAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHICAgXAorICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCA7CisgICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgZmxhZ3MpOworICAgICNlbmRpZgorCitUaGlzIG1ldGhvZCB3b3VsZCBlbmFibGUgb25seSB0aGUgTU1YIHJlYWQtb3B0aW1pemF0aW9ucyBhdmFpbGFibGUgYXQgdGhlCit0aW1lIG9mIGxpYnBuZyAxLjIuMCdzIHJlbGVhc2UsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBhIGxhdGVyIHZlcnNpb24gb2YKK3RoZSBETEwgd2VyZSBhY3R1YWxseSBiZWluZyB1c2VkLiAgKEFsc28gbm90ZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBkaWQgbm90CitleGlzdCBpbiB2ZXJzaW9ucyBvbGRlciB0aGFuIDEuMi4wLCBzbyBhbnkgYXR0ZW1wdCB0byBydW4gYSBkeW5hbWljYWxseQorbGlua2VkIGFwcCBvbiBzdWNoIGFuIG9sZGVyIHZlcnNpb24gd291bGQgZmFpbC4pCisKK1RvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwcm9jZXNzb3Igc3VwcG9ydHMgTU1YIGluc3RydWN0aW9ucyBhdCBhbGwsIHVzZQordGhlIHBuZ19tbXhfc3VwcG9ydCgpIGZ1bmN0aW9uOgorCisgICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKKyAgICAgICBtbXhzdXBwb3J0ID0gcG5nX21teF9zdXBwb3J0KCk7CisgICAgI2VuZGlmCisKK0l0IHJldHVybnMgLTEgaWYgTU1YIHN1cHBvcnQgaXMgbm90IGNvbXBpbGVkIGludG8gbGlicG5nLCAwIGlmIE1NWCBjb2RlCitpcyBjb21waWxlZCBidXQgTU1YIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHByb2Nlc3Nvciwgb3IgMSBpZiBNTVggc3VwcG9ydAoraXMgZnVsbHkgYXZhaWxhYmxlLiAgTm90ZSB0aGF0IHBuZ19tbXhfc3VwcG9ydCgpLCBwbmdfZ2V0X21teF9mbGFnbWFzaygpLAorYW5kIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCkgYWxsIG1heSBiZSBjYWxsZWQgd2l0aG91dCBhbGxvY2F0aW5nIGFuZCBpbmktCit0aWFsaXppbmcgYW55IFBORyBzdHJ1Y3R1cmVzIChmb3IgZXhhbXBsZSwgYXMgcGFydCBvZiBhIHVzYWdlIHNjcmVlbiBvcgorImFib3V0IiBib3gpLgorCitGb3IgbW9yZSBleHRlbnNpdmUgZXhhbXBsZXMgb2YgcnVudGltZSBxdWVyeWluZywgZW5hYmxpbmcgYW5kIGRpc2FibGluZworb2Ygb3B0aW1pemVkIGZlYXR1cmVzLCBzZWUgY29udHJpYi9ncmVnYm9vay9yZWFkcG5nMi5jIGluIHRoZSBsaWJwbmcKK3NvdXJjZS1jb2RlIGRpc3RyaWJ1dGlvbi4KKworCisuU0ggVklJLiAgTU5HIHN1cHBvcnQKIAogVGhlIE1ORyBzcGVjaWZpY2F0aW9uIChhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5saWJwbmcub3JnL3B1Yi9tbmcpIGFsbG93cwogY2VydGFpbiBleHRlbnNpb25zIHRvIFBORyBmb3IgUE5HIGltYWdlcyB0aGF0IGFyZSBlbWJlZGRlZCBpbiBNTkcgZGF0YXN0cmVhbXMuCkBAIC0zNDE4LDcgKzM1NDksNyBAQAogdGhlbS4gIFlvdSBtYXkgd2lzaCB0byBjb25zaWRlciB1c2luZyBsaWJtbmcgKGF2YWlsYWJsZSBhdAogaHR0cDovL3d3dy5saWJtbmcuY29tKSBpbnN0ZWFkLgogCi0uU0ggVklJLiAgQ2hhbmdlcyB0byBMaWJwbmcgZnJvbSB2ZXJzaW9uIDAuODgKKy5TSCBWSUlJLiAgQ2hhbmdlcyB0byBMaWJwbmcgZnJvbSB2ZXJzaW9uIDAuODgKIAogSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgdmVyc2lvbnMgb2YgbGlicG5nIGxhdGVyIHRoYW4gMC45NiBhcmUgbm90CiBkaXN0cmlidXRlZCBieSB0aGUgb3JpZ2luYWwgbGlicG5nIGF1dGhvciwgR3V5IFNjaGFsbmF0LCBub3IgYnkKQEAgLTM0MjgsNyArMzU1OSw3IEBACiBzdGlsbCBhbGl2ZSBhbmQgd2VsbCwgYnV0IHRoZXkgaGF2ZSBtb3ZlZCBvbiB0byBvdGhlciB0aGluZ3MuCiAKIFRoZSBvbGQgbGlicG5nIGZ1bmN0aW9ucyBwbmdfcmVhZF9pbml0KCksIHBuZ193cml0ZV9pbml0KCksCi1wbmdfaW5mb19pbml0KCksIHBuZ19yZWFkX2Rlc3Ryb3koKSwgYW5kIHBuZ193cml0ZV9kZXN0cm95KCkgaGF2ZSBiZWVuCitwbmdfaW5mb19pbml0KCksIHBuZ19yZWFkX2Rlc3Ryb3koKSwgYW5kIHBuZ193cml0ZV9kZXN0b3J5KCkgaGF2ZSBiZWVuCiBtb3ZlZCB0byBQTkdfSU5URVJOQUwgaW4gdmVyc2lvbiAwLjk1IHRvIGRpc2NvdXJhZ2UgdGhlaXIgdXNlLiAgVGhlc2UKIGZ1bmN0aW9ucyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBsaWJwbmcgdmVyc2lvbiAyLjAuMC4KIApAQCAtMzQ2NywxNSArMzU5OCwxNSBAQAogCiAgICBwbmdfdWludF8zMiBhcHBsaWNhdGlvbl92biA9IFBOR19MSUJQTkdfVkVSOwogCi0uU0ggVklJSS4gWTJLIENvbXBsaWFuY2UgaW4gbGlicG5nCisuU0ggSVguIFkySyBDb21wbGlhbmNlIGluIGxpYnBuZwogCi1NYXkgMTQsIDIwMDEKK01heSA2LCAyMDAxCiAKIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi11cHdhcmQgdGhyb3VnaCAxLjAuMTJiZXRhMSBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKK3Vwd2FyZCB0aHJvdWdoIDEuMi4wYmV0YTEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KIAogTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIgdGhhdApAQCAtMzU4Nyw3ICszNzE4LDggQEAKICAxLjAuMTFiZXRhMS0zICAgICAgICAxICAgIDEwMDExICAyLjEuMC4xMWJldGExLTMKICAxLjAuMTFyYzEgICAgICAgICAgICAxICAgIDEwMDExICAyLjEuMC4xMXJjMQogIDEuMC4xMSAgICAgICAgICAgICAgIDEgICAgMTAwMTEgIDIuMS4wLjExCi0gMS4wLjEyYmV0YTEgICAgICAgICAgMSAgICAxMDAxMiAgMi4xLjAuMTJiZXRhMQorIDEuMS4wYS1mICAgICAgICAgICAgIDEgICAgMTAxMDAgIDIuMS4xLjAgYWJhbmRvbmVkCisgMS4yLjBiZXRhMSAgICAgICAgICAgMiAgICAxMDIwMCAgMi4xLjIuMGJldGExCiAKIEhlbmNlZm9ydGggdGhlIHNvdXJjZSB2ZXJzaW9uIHdpbGwgbWF0Y2ggdGhlIHNoYXJlZC1saWJyYXJ5IG1pbm9yCiBhbmQgcGF0Y2ggbnVtYmVyczsgdGhlIHNoYXJlZC1saWJyYXJ5IG1ham9yIHZlcnNpb24gbnVtYmVyIHdpbGwgYmUKQEAgLTM2NDUsNyArMzc3Nyw3IEBACiAKIFRoYW5rcyB0byBGcmFuayBKLiBULiBXb2pjaWsgZm9yIGhlbHBpbmcgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbi4KIAotTGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDE6CitMaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDE6CiBJbml0aWFsbHkgY3JlYXRlZCBpbiAxOTk1IGJ5IEd1eSBFcmljIFNjaGFsbmF0LCB0aGVuIG9mIEdyb3VwIDQyLCBJbmMuCiBDdXJyZW50bHkgbWFpbnRhaW5lZCBieSBHbGVubiBSYW5kZXJzLVBlaHJzb24gKHJhbmRlZ0BhbHVtLnJwaS5lZHUpLgogCkBAIC0zNjYyLDcgKzM3OTQsNyBAQAogSWYgeW91IG1vZGlmeSBsaWJwbmcgeW91IG1heSBpbnNlcnQgYWRkaXRpb25hbCBub3RpY2VzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwogdGhpcyBzZW50ZW5jZS4KIAotbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMC4xMmJldGExLCBNYXkgMTQsIDIwMDEsIGFyZQorbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMi4wYmV0YTEsIE1heSA2LCAyMDAxLCBhcmUKIENvcHlyaWdodCAoYykgMjAwMC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQogZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMC42CiB3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbHMgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgQ29udHJpYnV0aW5nIEF1dGhvcnMKQEAgLTM3NTQsNyArMzg4Niw3IEBACiAKIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogcmFuZGVnQGFsdW0ucnBpLmVkdQotTWF5IDE0LCAyMDAxCitNYXkgNiwgMjAwMQogCiAuXCIgZW5kIG9mIG1hbiBwYWdlCiAKZGlmZiAtLWdpdCBhL2xpYnBuZy50eHQgYi9saWJwbmcudHh0CmluZGV4IGIyNzkxMTYuLjc3MTlhMjYgMTAwNjQ0Ci0tLSBhL2xpYnBuZy50eHQKKysrIGIvbGlicG5nLnR4dApAQCAtMSw2ICsxLDYgQEAKIGxpYnBuZy50eHQgLSBBIGRlc2NyaXB0aW9uIG9uIGhvdyB0byB1c2UgYW5kIG1vZGlmeSBsaWJwbmcKIAotIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgVXBkYXRlZCBhbmQgZGlzdHJpYnV0ZWQgYnkgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgPHJhbmRlZ0BhbHVtLnJwaS5lZHU+CiAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCkBAIC0xMzk2LDcgKzEzOTYsNiBAQAogCiAgLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBlYWNoIHJvdyBvZiBpbWFnZQogICAgIGRhdGEgaXMgY29tcGxldGUgKi8KLQogIHZvaWQKICByb3dfY2FsbGJhY2socG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGVwIG5ld19yb3csCiAgICAgcG5nX3VpbnRfMzIgcm93X251bSwgaW50IHBhc3MpCkBAIC0yNjQ1LDggKzI2NDQsMTA2IEBACiBoYXZpbmcgbGV2ZWwgPSAwIHdpbGwgYmUgcHJpbnRlZC4gIFRoZXJlIGFyZW4ndCBhbnkgc3VjaCBzdGF0ZW1lbnRzIGluCiB0aGlzIHZlcnNpb24gb2YgbGlicG5nLCBidXQgaWYgeW91IGluc2VydCBzb21lIHRoZXkgd2lsbCBiZSBwcmludGVkLgogCitWSS4gIFJ1bnRpbWUgb3B0aW1pemF0aW9uCiAKLVZJLiAgTU5HIHN1cHBvcnQKK0EgbmV3IGZlYXR1cmUgaW4gbGlicG5nIDEuMi4wIGlzIHRoZSBhYmlsaXR5IHRvIGR5bmFtaWNhbGx5IHN3aXRjaCBiZXR3ZWVuCitzdGFuZGFyZCBhbmQgb3B0aW1pemVkIHZlcnNpb25zIG9mIHNvbWUgcm91dGluZXMuICBDdXJyZW50bHkgdGhlc2UgYXJlCitsaW1pdGVkIHRvIHRocmVlIGNvbXB1dGF0aW9uYWxseSBpbnRlbnNpdmUgdGFza3Mgd2hlbiByZWFkaW5nIFBORyBmaWxlczoKK2RlY29kaW5nIHJvdyBmaWx0ZXJzLCBleHBhbmRpbmcgaW50ZXJsYWNpbmcsIGFuZCBjb21iaW5pbmcgaW50ZXJsYWNlZCBvcgordHJhbnNwYXJlbnQgcm93IGRhdGEgd2l0aCBwcmV2aW91cyByb3cgZGF0YS4gIEN1cnJlbnRseSB0aGUgb3B0aW1pemVkCit2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlIG9ubHkgZm9yIHg4NiAoSW50ZWwsIEFNRCwgZXRjLikgcGxhdGZvcm1zIHdpdGgKK01NWCBzdXBwb3J0LCB0aG91Z2ggdGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZSB2ZXJzaW9ucy4gIChGb3IgZXhhbXBsZSwKK3RoZSBub24tTU1YIGFzc2VtYmxlciBvcHRpbWl6YXRpb25zIGZvciB6bGliIG1pZ2h0IGJlY29tZSBzaW1pbGFybHkKK3J1bnRpbWUtc2VsZWN0YWJsZSBpbiBmdXR1cmUgcmVsZWFzZXMsIGluIHdoaWNoIGNhc2UgbGlicG5nIGNvdWxkIGJlCitleHRlbmRlZCB0byBzdXBwb3J0IHRoZW0uICBBbHRlcm5hdGl2ZWx5LCB0aGUgY29tcGlsZS10aW1lIGNob2ljZSBvZgorZmxvYXRpbmctcG9pbnQgdmVyc3VzIGludGVnZXIgcm91dGluZXMgZm9yIGdhbW1hIGNvcnJlY3Rpb24gbWlnaHQgYmVjb21lCitydW50aW1lLXNlbGVjdGFibGUuKQorCitCZWNhdXNlIHN1Y2ggb3B0aW1pemF0aW9ucyB0ZW5kIHRvIGJlIHZlcnkgcGxhdGZvcm0tIGFuZCBjb21waWxlci1kZXBlbmRlbnQsCitib3RoIGluIGhvdyB0aGV5IGFyZSB3cml0dGVuIGFuZCBpbiBob3cgdGhleSBwZXJmb3JtLCB0aGUgbmV3IHJ1bnRpbWUgY29kZQoraW4gbGlicG5nIGhhcyBiZWVuIHdyaXR0ZW4gdG8gYWxsb3cgcHJvZ3JhbXMgdG8gcXVlcnksIGVuYWJsZSwgYW5kIGRpc2FibGUKK2VpdGhlciBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIG9yIGFsbCBzdWNoIG9wdGltaXphdGlvbnMuICBGb3IgZXhhbXBsZSwgdG8KK2VuYWJsZSBhbGwgcG9zc2libGUgb3B0aW1pemF0aW9ucyAoYmVhcmluZyBpbiBtaW5kIHRoYXQgc29tZSAib3B0aW1pemF0aW9ucyIKK21heSBhY3R1YWxseSBydW4gbW9yZSBzbG93bHkgaW4gcmFyZSBjYXNlcyk6CisKKyAgICAjaWYgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQorICAgICAgIHBuZ191aW50XzMyIG1hc2ssIGZsYWdzOworCisgICAgICAgZmxhZ3MgPSBwbmdfZ2V0X2FzbV9mbGFncyhwbmdfcHRyKTsKKyAgICAgICBtYXNrID0gcG5nX2dldF9hc21fZmxhZ21hc2soUE5HX1NFTEVDVF9SRUFEIHwgUE5HX1NFTEVDVF9XUklURSk7CisgICAgICAgcG5nX3NldF9hc21fZmxhZ3MocG5nX3B0ciwgZmxhZ3MgfCBtYXNrKTsKKyAgICAjZW5kaWYKKworVG8gZW5hYmxlIG9ubHkgb3B0aW1pemF0aW9ucyByZWxldmFudCB0byByZWFkaW5nIFBOR3MsIHVzZSBQTkdfU0VMRUNUX1JFQUQKK2J5IGl0c2VsZiB3aGVuIGNhbGxpbmcgcG5nX2dldF9hc21fZmxhZ21hc2soKTsgc2ltaWxhcmx5IGZvciBvcHRpbWl6aW5nCitvbmx5IHdyaXRpbmcuICBUbyBkaXNhYmxlIGFsbCBvcHRpbWl6YXRpb25zOgorCisgICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKKyAgICAgICBmbGFncyA9IHBuZ19nZXRfYXNtX2ZsYWdzKHBuZ19wdHIpOworICAgICAgIG1hc2sgPSBwbmdfZ2V0X2FzbV9mbGFnbWFzayhQTkdfU0VMRUNUX1JFQUQgfCBQTkdfU0VMRUNUX1dSSVRFKTsKKyAgICAgICBwbmdfc2V0X2FzbV9mbGFncyhwbmdfcHRyLCBmbGFncyAmIH5tYXNrKTsKKyAgICAjZW5kaWYKKworVG8gZW5hYmxlIG9yIGRpc2FibGUgb25seSBNTVgtcmVsYXRlZCBmZWF0dXJlcywgdXNlIHBuZ19nZXRfbW14X2ZsYWdtYXNrKCkKK2luIHBsYWNlIG9mIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCkuICBUaGUgbW14IHZlcnNpb24gdGFrZXMgb25lIGFkZGl0aW9uYWwKK3BhcmFtZXRlcjoKKworICAgICNpZiBkZWZpbmVkKFBOR19MSUJQTkdfVkVSKSAmJiAoUE5HX0xJQlBOR19WRVIgPj0gMTAyMDApCisgICAgICAgaW50IHNlbGVjdGlvbiA9IFBOR19TRUxFQ1RfUkVBRCB8IFBOR19TRUxFQ1RfV1JJVEU7CisgICAgICAgaW50IGNvbXBpbGVySUQ7CisKKyAgICAgICBtYXNrID0gcG5nX2dldF9tbXhfZmxhZ21hc2soc2VsZWN0aW9uLCAmY29tcGlsZXJJRCk7CisgICAgI2VuZGlmCisKK09uIHJldHVybiwgY29tcGlsZXJJRCB3aWxsIGluZGljYXRlIHdoaWNoIHZlcnNpb24gb2YgdGhlIE1NWCBhc3NlbWJsZXIKK29wdGltaXphdGlvbnMgd2FzIGNvbXBpbGVkLiAgQ3VycmVudGx5IHR3byBmbGF2b3JzIGV4aXN0OiAgTWljcm9zb2Z0CitWaXN1YWwgQysrIChjb21waWxlcklEID09IDEpIGFuZCBHTlUgQyAoYS5rLmEuIGdjYy9nYXMsIGNvbXBpbGVySUQgPT0gMikuCitPbiBub24teDg2IHBsYXRmb3JtcyBvciBvbiBzeXN0ZW1zIGNvbXBpbGVkIHdpdGhvdXQgTU1YIG9wdGltaXphdGlvbnMsIGEKK3ZhbHVlIG9mIC0xIGlzIHVzZWQuCisKK05vdGUgdGhhdCBib3RoIHBuZ19nZXRfYXNtX2ZsYWdtYXNrKCkgYW5kIHBuZ19nZXRfbW14X2ZsYWdtYXNrKCkgcmV0dXJuCithbGwgdmFsaWQsIHNldHRhYmxlIG9wdGltaXphdGlvbiBiaXRzIGZvciB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSB0aGF0J3MKK2N1cnJlbnRseSBpbiB1c2UuICBJbiB0aGUgY2FzZSBvZiBzaGFyZWQgKGR5bmFtaWNhbGx5IGxpbmtlZCkgbGlicmFyaWVzLAordGhpcyBtYXkgaW5jbHVkZSBvcHRpbWl6YXRpb25zIHRoYXQgZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSB0aGUgY29kZSB3YXMKK3dyaXR0ZW4gYW5kIGNvbXBpbGVkLiAgSXQgaXMgYWxzbyBwb3NzaWJsZSwgb2YgY291cnNlLCB0byBlbmFibGUgb25seSBrbm93biwKK3NwZWNpZmljIG9wdGltaXphdGlvbnM7IGZvciBleGFtcGxlOgorCisgICAgI2lmIGRlZmluZWQoUE5HX0xJQlBOR19WRVIpICYmIChQTkdfTElCUE5HX1ZFUiA+PSAxMDIwMCkKKyAgICAgICBmbGFncyA9IFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVyAgXAorICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSAgICBcCisgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQiAgIFwKKyAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAgICAgXAorICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcgICBcCisgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIIDsKKyAgICAgICBwbmdfc2V0X2FzbV9mbGFncyhwbmdfcHRyLCBmbGFncyk7CisgICAgI2VuZGlmCisKK1RoaXMgbWV0aG9kIHdvdWxkIGVuYWJsZSBvbmx5IHRoZSBNTVggcmVhZC1vcHRpbWl6YXRpb25zIGF2YWlsYWJsZSBhdCB0aGUKK3RpbWUgb2YgbGlicG5nIDEuMi4wJ3MgcmVsZWFzZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgbGF0ZXIgdmVyc2lvbiBvZgordGhlIERMTCB3ZXJlIGFjdHVhbGx5IGJlaW5nIHVzZWQuICAoQWxzbyBub3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGRpZCBub3QKK2V4aXN0IGluIHZlcnNpb25zIG9sZGVyIHRoYW4gMS4yLjAsIHNvIGFueSBhdHRlbXB0IHRvIHJ1biBhIGR5bmFtaWNhbGx5CitsaW5rZWQgYXBwIG9uIHN1Y2ggYW4gb2xkZXIgdmVyc2lvbiB3b3VsZCBmYWlsLikKKworVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHByb2Nlc3NvciBzdXBwb3J0cyBNTVggaW5zdHJ1Y3Rpb25zIGF0IGFsbCwgdXNlCit0aGUgcG5nX21teF9zdXBwb3J0KCkgZnVuY3Rpb246CisKKyAgICAjaWYgZGVmaW5lZChQTkdfTElCUE5HX1ZFUikgJiYgKFBOR19MSUJQTkdfVkVSID49IDEwMjAwKQorICAgICAgIG1teHN1cHBvcnQgPSBwbmdfbW14X3N1cHBvcnQoKTsKKyAgICAjZW5kaWYKKworSXQgcmV0dXJucyAtMSBpZiBNTVggc3VwcG9ydCBpcyBub3QgY29tcGlsZWQgaW50byBsaWJwbmcsIDAgaWYgTU1YIGNvZGUKK2lzIGNvbXBpbGVkIGJ1dCBNTVggaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgcHJvY2Vzc29yLCBvciAxIGlmIE1NWCBzdXBwb3J0CitpcyBmdWxseSBhdmFpbGFibGUuICBOb3RlIHRoYXQgcG5nX21teF9zdXBwb3J0KCksIHBuZ19nZXRfbW14X2ZsYWdtYXNrKCksCithbmQgcG5nX2dldF9hc21fZmxhZ21hc2soKSBhbGwgbWF5IGJlIGNhbGxlZCB3aXRob3V0IGFsbG9jYXRpbmcgYW5kIGluaS0KK3RpYWxpemluZyBhbnkgUE5HIHN0cnVjdHVyZXMgKGZvciBleGFtcGxlLCBhcyBwYXJ0IG9mIGEgdXNhZ2Ugc2NyZWVuIG9yCisiYWJvdXQiIGJveCkuCisKK0ZvciBtb3JlIGV4dGVuc2l2ZSBleGFtcGxlcyBvZiBydW50aW1lIHF1ZXJ5aW5nLCBlbmFibGluZyBhbmQgZGlzYWJsaW5nCitvZiBvcHRpbWl6ZWQgZmVhdHVyZXMsIHNlZSBjb250cmliL2dyZWdib29rL3JlYWRwbmcyLmMgaW4gdGhlIGxpYnBuZworc291cmNlLWNvZGUgZGlzdHJpYnV0aW9uLgorCisKK1ZJSS4gIE1ORyBzdXBwb3J0CiAKIFRoZSBNTkcgc3BlY2lmaWNhdGlvbiAoYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cubGlicG5nLm9yZy9wdWIvbW5nKSBhbGxvd3MKIGNlcnRhaW4gZXh0ZW5zaW9ucyB0byBQTkcgZm9yIFBORyBpbWFnZXMgdGhhdCBhcmUgZW1iZWRkZWQgaW4gTU5HIGRhdGFzdHJlYW1zLgpAQCAtMjY3MSw3ICsyNzY4LDcgQEAKIHRoZW0uICBZb3UgbWF5IHdpc2ggdG8gY29uc2lkZXIgdXNpbmcgbGlibW5nIChhdmFpbGFibGUgYXQKIGh0dHA6Ly93d3cubGlibW5nLmNvbSkgaW5zdGVhZC4KIAotVklJLiAgQ2hhbmdlcyB0byBMaWJwbmcgZnJvbSB2ZXJzaW9uIDAuODgKK1ZJSUkuICBDaGFuZ2VzIHRvIExpYnBuZyBmcm9tIHZlcnNpb24gMC44OAogCiBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB2ZXJzaW9ucyBvZiBsaWJwbmcgbGF0ZXIgdGhhbiAwLjk2IGFyZSBub3QKIGRpc3RyaWJ1dGVkIGJ5IHRoZSBvcmlnaW5hbCBsaWJwbmcgYXV0aG9yLCBHdXkgU2NoYWxuYXQsIG5vciBieQpAQCAtMjY4MSw3ICsyNzc4LDcgQEAKIHN0aWxsIGFsaXZlIGFuZCB3ZWxsLCBidXQgdGhleSBoYXZlIG1vdmVkIG9uIHRvIG90aGVyIHRoaW5ncy4KIAogVGhlIG9sZCBsaWJwbmcgZnVuY3Rpb25zIHBuZ19yZWFkX2luaXQoKSwgcG5nX3dyaXRlX2luaXQoKSwKLXBuZ19pbmZvX2luaXQoKSwgcG5nX3JlYWRfZGVzdHJveSgpLCBhbmQgcG5nX3dyaXRlX2Rlc3Ryb3koKSBoYXZlIGJlZW4KK3BuZ19pbmZvX2luaXQoKSwgcG5nX3JlYWRfZGVzdHJveSgpLCBhbmQgcG5nX3dyaXRlX2Rlc3RvcnkoKSBoYXZlIGJlZW4KIG1vdmVkIHRvIFBOR19JTlRFUk5BTCBpbiB2ZXJzaW9uIDAuOTUgdG8gZGlzY291cmFnZSB0aGVpciB1c2UuICBUaGVzZQogZnVuY3Rpb25zIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIGxpYnBuZyB2ZXJzaW9uIDIuMC4wLgogCkBAIC0yNzIwLDE1ICsyODE3LDE1IEBACiAKICAgIHBuZ191aW50XzMyIGFwcGxpY2F0aW9uX3ZuID0gUE5HX0xJQlBOR19WRVI7CiAKLVZJSUkuIFkySyBDb21wbGlhbmNlIGluIGxpYnBuZworSVguIFkySyBDb21wbGlhbmNlIGluIGxpYnBuZwogCi1NYXkgMTQsIDIwMDEKK01heSA2LCAyMDAxCiAKIFNpbmNlIHRoZSBQTkcgRGV2ZWxvcG1lbnQgZ3JvdXAgaXMgYW4gYWQtaG9jIGJvZHksIHdlIGNhbid0IG1ha2UKIGFuIG9mZmljaWFsIGRlY2xhcmF0aW9uLgogCiBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi11cHdhcmQgdGhyb3VnaCAxLjAuMTJiZXRhMSBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKK3Vwd2FyZCB0aHJvdWdoIDEuMi4wYmV0YTEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KIAogTGlicG5nIG9ubHkgaGFzIHRocmVlIHllYXIgZmllbGRzLiAgT25lIGlzIGEgMi1ieXRlIHVuc2lnbmVkIGludGVnZXIgdGhhdApkaWZmIC0tZ2l0IGEvbGlicG5ncGYuMyBiL2xpYnBuZ3BmLjMKaW5kZXggZDYxMjQwMy4uNjdiZWIyNiAxMDA2NDQKLS0tIGEvbGlicG5ncGYuMworKysgYi9saWJwbmdwZi4zCkBAIC0xLDYgKzEsNiBAQAotLlRIIExJQlBOR1BGIDMgIk1heSAxNCwgMjAwMSIKKy5USCBMSUJQTkdQRiAzICJNYXkgNiwgMjAwMSIKIC5TSCBOQU1FCi1saWJwbmcgXC0gUG9ydGFibGUgTmV0d29yayBHcmFwaGljcyAoUE5HKSBSZWZlcmVuY2UgTGlicmFyeSAxLjAuMTJiZXRhMQorbGlicG5nIFwtIFBvcnRhYmxlIE5ldHdvcmsgR3JhcGhpY3MgKFBORykgUmVmZXJlbmNlIExpYnJhcnkgMS4yLjBiZXRhMQogKHByaXZhdGUgZnVuY3Rpb25zKQogLlNIIFNZTk9QU0lTCiBcZkIjaW5jbHVkZSA8cG5nLmg+XGZQCkBAIC0yODMsNiArMjgzLDEwIEBACiAKIFxmSVxmQgogCitcZkJ2b2lkIHBuZ19pbml0X21teF9mbGFncyAocG5nX3N0cnVjdHAgXGZJcG5nX3B0clxmUFxmQik7XGZQCisKK1xmSVxmQgorCiBcZkJ2b2lkIHBuZ19pbml0X3JlYWRfdHJhbnNmb3JtYXRpb25zIChwbmdfc3RydWN0cCBcZklwbmdfcHRyXGZQXGZCKTtcZlAKIAogXGZJXGZCCmRpZmYgLS1naXQgYS9wbmcuNSBiL3BuZy41CmluZGV4IDU4OGQ5NmQuLmExZmRhNjUgMTAwNjQ0Ci0tLSBhL3BuZy41CisrKyBiL3BuZy41CkBAIC0xLDQgKzEsNCBAQAotLlRIIFBORyA1ICJNYXkgMTQsIDIwMDEiCisuVEggUE5HIDUgIk1heSA2LCAyMDAxIgogLlNIIE5BTUUKIHBuZyBcLSBQb3J0YWJsZSBOZXR3b3JrIEdyYXBoaWNzIChQTkcpIGZvcm1hdAogLlNIIERFU0NSSVBUSU9OCmRpZmYgLS1naXQgYS9wbmcuYyBiL3BuZy5jCmluZGV4IDY5MTgwN2MuLjMwMTBmMjQgMTAwNjQ0Ci0tLSBhL3BuZy5jCisrKyBiL3BuZy5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmcuYyAtIGxvY2F0aW9uIGZvciBnZW5lcmFsIHB1cnBvc2UgbGlicG5nIGZ1bmN0aW9ucwogICoKLSAqIGxpYnBuZyB2ZXJzaW9uIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCiAgKiAoVmVyc2lvbiAwLjg4IENvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4pCkBAIC0xMywxNCArMTMsMTQgQEAKICNpbmNsdWRlICJwbmcuaCIKIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMF8xMmJldGExIFlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzEyYmV0YTE7Cit0eXBlZGVmIHZlcnNpb25fMV8yXzBiZXRhMSBZb3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMl8wYmV0YTE7CiAKIC8qIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yIEMgZmlsZXMuICBUaGlzIGhhZCBiZXR0ZXIgbWF0Y2ggdGhlIHZlcnNpb24KICAqIHN0cmluZyBkZWZpbmVkIGluIHBuZy5oLiAgKi8KIAogI2lmZGVmIFBOR19VU0VfR0xPQkFMX0FSUkFZUwogLyogcG5nX2xpYnBuZ192ZXIgd2FzIGNoYW5nZWQgdG8gYSBmdW5jdGlvbiBpbiB2ZXJzaW9uIDEuMC41YyAqLwotY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4wLjEyYmV0YTEiOworY29uc3QgY2hhciBwbmdfbGlicG5nX3ZlclsxOF0gPSAiMS4yLjBiZXRhMSI7CiAKIC8qIHBuZ19zaWcgd2FzIGNoYW5nZWQgdG8gYSBmdW5jdGlvbiBpbiB2ZXJzaW9uIDEuMC41YyAqLwogLyogUGxhY2UgdG8gaG9sZCB0aGUgc2lnbmF0dXJlIHN0cmluZyBmb3IgYSBQTkcgZmlsZS4gKi8KQEAgLTIxMywxMiArMjEzLDEyIEBACiAgICBpZihwbmdfcHRyID09IE5VTEwpIHJldHVybiAoTlVMTCk7CiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYgKChpbmZvX3B0ciA9IChwbmdfaW5mb3ApcG5nX2NyZWF0ZV9zdHJ1Y3RfMihQTkdfU1RSVUNUX0lORk8sCi0gICAgICBwbmdfcHRyLT5tYWxsb2NfZm4sIHBuZ19wdHItPm1lbV9wdHIpKSAhPSBOVUxMKQorICAgICAgcG5nX3B0ci0+bWFsbG9jX2ZuKSkgIT0gTlVMTCkKICNlbHNlCiAgICBpZiAoKGluZm9fcHRyID0gKHBuZ19pbmZvcClwbmdfY3JlYXRlX3N0cnVjdChQTkdfU1RSVUNUX0lORk8pKSAhPSBOVUxMKQogI2VuZGlmCiAgICB7Ci0gICAgICBwbmdfaW5mb19pbml0XzMoJmluZm9fcHRyLCBzaXplb2YocG5nX2luZm8pKTsKKyAgICAgIHBuZ19pbmZvX2luaXQoaW5mb19wdHIpOwogICAgfQogCiAgICByZXR1cm4gKGluZm9fcHRyKTsKQEAgLTI0Myw4ICsyNDMsNyBAQAogICAgICAgcG5nX2luZm9fZGVzdHJveShwbmdfcHRyLCBpbmZvX3B0cik7CiAKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECi0gICAgICBwbmdfZGVzdHJveV9zdHJ1Y3RfMigocG5nX3ZvaWRwKWluZm9fcHRyLCBwbmdfcHRyLT5mcmVlX2ZuLAotICAgICAgICAgIHBuZ19wdHItPm1lbV9wdHIpOworICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0XzIoKHBuZ192b2lkcClpbmZvX3B0ciwgcG5nX3B0ci0+ZnJlZV9mbik7CiAjZWxzZQogICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0KChwbmdfdm9pZHApaW5mb19wdHIpOwogI2VuZGlmCkBAIC0yNTYsMjggKzI1NSwxMCBAQAogICogYW5kIGFwcGxpY2F0aW9ucyB1c2luZyBpdCBhcmUgdXJnZWQgdG8gdXNlIHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QoKQogICogaW5zdGVhZC4KICAqLwotI3VuZGVmIHBuZ19pbmZvX2luaXQKLXZvaWQgUE5HQVBJCit2b2lkIC8qIFBSSVZBVEUgKi8KIHBuZ19pbmZvX2luaXQocG5nX2luZm9wIGluZm9fcHRyKQogewotICAgLyogV2Ugb25seSBjb21lIGhlcmUgdmlhIHByZS0xLjAuMTItY29tcGlsZWQgYXBwbGljYXRpb25zICovCi0gICBwbmdfaW5mb19pbml0XzMoJmluZm9fcHRyLCAwKTsKLX0KLQotdm9pZCBQTkdBUEkKLXBuZ19pbmZvX2luaXRfMyhwbmdfaW5mb3BwIHB0cl9wdHIsIHBuZ19zaXplX3QgcG5nX2luZm9fc3RydWN0X3NpemUpCi17Ci0gICBwbmdfaW5mb3AgaW5mb19wdHIgPSAqcHRyX3B0cjsKLQotICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfaW5mb19pbml0XzNcbiIpOwotCi0gICBpZihzaXplb2YocG5nX2luZm8pID4gcG5nX2luZm9fc3RydWN0X3NpemUpCi0gICAgIHsKLSAgICAgICBwbmdfZGVzdHJveV9zdHJ1Y3QoaW5mb19wdHIpOwotICAgICAgIGluZm9fcHRyID0gKHBuZ19pbmZvcClwbmdfY3JlYXRlX3N0cnVjdChQTkdfU1RSVUNUX0lORk8pOwotICAgICAgICpwdHJfcHRyID0gaW5mb19wdHI7Ci0gICAgIH0KLQorICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfaW5mb19pbml0XG4iKTsKICAgIC8qIHNldCBldmVyeXRoaW5nIHRvIDAgKi8KICAgIHBuZ19tZW1zZXQoaW5mb19wdHIsIDAsIHNpemVvZiAocG5nX2luZm8pKTsKIH0KQEAgLTU1Niw3ICs1MzcsNyBAQAogICAgfQogI2VuZGlmCiAKLSAgIHBuZ19pbmZvX2luaXRfMygmaW5mb19wdHIsIHNpemVvZihwbmdfaW5mbykpOworICAgcG5nX2luZm9faW5pdChpbmZvX3B0cik7CiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGlvX3B0ciBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIKQEAgLTY0Niw3ICs2MjcsNyBAQAogcG5nX2dldF9jb3B5cmlnaHQocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKICAgIGlmIChwbmdfcHRyICE9IE5VTEwgfHwgcG5nX3B0ciA9PSBOVUxMKSAgLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nICovCi0gICByZXR1cm4gKChwbmdfY2hhcnApICJcbiBsaWJwbmcgdmVyc2lvbiAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMVxuXAorICAgcmV0dXJuICgocG5nX2NoYXJwKSAiXG4gbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxXG5cCiAgICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb25cblwKICAgIENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlclxuXAogICAgQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLlxuIik7CkBAIC02NjQsOCArNjQ1LDggQEAKIHsKICAgIC8qIFZlcnNpb24gb2YgKi5jIGZpbGVzIHVzZWQgd2hlbiBidWlsZGluZyBsaWJwbmcgKi8KICAgIGlmKHBuZ19wdHIgIT0gTlVMTCkgLyogc2lsZW5jZSBjb21waWxlciB3YXJuaW5nIGFib3V0IHVudXNlZCBwbmdfcHRyICovCi0gICAgICByZXR1cm4oKHBuZ19jaGFycCkgIjEuMC4xMmJldGExIik7Ci0gICByZXR1cm4oKHBuZ19jaGFycCkgIjEuMC4xMmJldGExIik7CisgICAgICByZXR1cm4oKHBuZ19jaGFycCkgIjEuMi4wYmV0YTEiKTsKKyAgIHJldHVybigocG5nX2NoYXJwKSAiMS4yLjBiZXRhMSIpOwogfQogCiBwbmdfY2hhcnAgUE5HQVBJCkBAIC03MTUsOSArNjk2LDU4IEBACiBwbmdfYWNjZXNzX3ZlcnNpb25fbnVtYmVyKHZvaWQpCiB7CiAgICAvKiBWZXJzaW9uIG9mICouYyBmaWxlcyB1c2VkIHdoZW4gYnVpbGRpbmcgbGlicG5nICovCi0gICByZXR1cm4oKHBuZ191aW50XzMyKSAxMDAxMkwpOworICAgcmV0dXJuKChwbmdfdWludF8zMikgMTAyMDBMKTsKIH0KIAorCisjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQorICAgIC8qIEdSUjogIGNvdWxkIGFkZCB0aGlzOiAgICYmIGRlZmluZWQoUE5HX01NWF9DT0RFX1NVUFBPUlRFRCkgKi8KKy8qIHRoaXMgSU5URVJOQUwgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGxpYnBuZyAxLjIuMCAqLwordm9pZCAvKiBQUklWQVRFICovCitwbmdfaW5pdF9tbXhfZmxhZ3MgKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCit7CisgICAgcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCA9IDA7CisgICAgcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCA9IDA7CisKKyNpZiAoZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpIHx8IGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkpCisKKyAgICBwbmdfcHRyLT5hc21fZmxhZ3MgfD0gUE5HX0FTTV9GTEFHX01NWF9TVVBQT1JUX0NPTVBJTEVEOworCisgICAgaWYgKHBuZ19tbXhfc3VwcG9ydCgpKSB7CisgICAgICAgIHBuZ19wdHItPmFzbV9mbGFncyB8PSBQTkdfQVNNX0ZMQUdfTU1YX1NVUFBPUlRfSU5fQ1BVCisjaWZkZWYgUE5HX0hBVkVfQVNTRU1CTEVSX0NPTUJJTkVfUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVworI2VuZGlmCisjaWZkZWYgUE5HX0hBVkVfQVNTRU1CTEVSX1JFQURfSU5URVJMQUNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UKKyNlbmRpZgorI2lmbmRlZiBQTkdfSEFWRV9BU1NFTUJMRVJfUkVBRF9GSUxURVJfUk9XCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfUEFFVEggOworCisgICAgICAgIHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQgPSBQTkdfTU1YX1JPV0JZVEVTX1RIUkVTSE9MRF9ERUZBVUxUOworICAgICAgICBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkID0gUE5HX01NWF9CSVRERVBUSF9USFJFU0hPTERfREVGQVVMVDsKKyNlbmRpZgorICAgIH0gZWxzZSB7CisgICAgICAgIHBuZ19wdHItPmFzbV9mbGFncyAmPSB+KCBQTkdfQVNNX0ZMQUdfTU1YX1NVUFBPUlRfSU5fQ1BVCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfTU1YX1JFQURfRkxBR1MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19NTVhfV1JJVEVfRkxBR1MgKTsKKyAgICB9CisKKyNlbHNlIC8qICEoKFBOR1ZDUkQgfHwgUE5HR0NDUkQpICYmIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpKSAqLworCisgICAgLyogY2xlYXIgYWxsIE1NWCBmbGFnczsgbm8gc3VwcG9ydCBpcyBjb21waWxlZCBpbiAqLworICAgIHBuZ19wdHItPmFzbV9mbGFncyAmPSB+KCBQTkdfTU1YX0ZMQUdTICk7CisKKyNlbmRpZiAvKiA/KFBOR1ZDUkQgfHwgUE5HR0NDUkQpICovCit9CisKKyNlbmRpZiAvKiAhKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpICovCisKIC8qIHRoaXMgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGxpYnBuZyAxLjIuMCAqLwogI2lmICFkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpICYmIFwKICAgICAhKGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkgJiYgZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpKQpkaWZmIC0tZ2l0IGEvcG5nLmggYi9wbmcuaAppbmRleCAwM2EyYmMxLi45OTNlYzIwIDEwMDY0NAotLS0gYS9wbmcuaAorKysgYi9wbmcuaApAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nLmggLSBoZWFkZXIgZmlsZSBmb3IgUE5HIHJlZmVyZW5jZSBsaWJyYXJ5CiAgKgotICogbGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEKKyAqIGxpYnBuZyB2ZXJzaW9uIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKICAqIChWZXJzaW9uIDAuODggQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEd1eSBFcmljIFNjaGFsbmF0LCBHcm91cCA0MiwgSW5jLikKQEAgLTksNyArOSw3IEBACiAgKiBBdXRob3JzIGFuZCBtYWludGFpbmVyczoKICAqICBsaWJwbmcgdmVyc2lvbnMgMC43MSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2OiBHdXkgU2NoYWxuYXQKICAqICBsaWJwbmcgdmVyc2lvbnMgMC44OWMsIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NzogQW5kcmVhcyBEaWxnZXIKLSAqICBsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxOiBHbGVubgorICogIGxpYnBuZyB2ZXJzaW9ucyAwLjk3LCBKYW51YXJ5IDE5OTgsIHRocm91Z2ggMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxOiBHbGVubgogICogIFNlZSBhbHNvICJDb250cmlidXRpbmcgQXV0aG9ycyIsIGJlbG93LgogICoKICAqIE5vdGUgYWJvdXQgbGlicG5nIHZlcnNpb24gbnVtYmVyczoKQEAgLTcwLDEwICs3MCw4IEBACiAgKiAgICAxLjAuMTFiZXRhMS0zICAgICAgICAgICAgMSAgICAxMDAxMSAgMi4xLjAuMTFiZXRhMS0zCiAgKiAgICAxLjAuMTFyYzEgICAgICAgICAgICAgICAgMSAgICAxMDAxMSAgMi4xLjAuMTFyYzEKICAqICAgIDEuMC4xMSAgICAgICAgICAgICAgICAgICAxICAgIDEwMDExICAyLjEuMC4xMQotICogICAgMS4wLjEyYmV0YTEgICAgICAgICAgICAgIDIgICAgMTAwMTIgIDIuMS4wLjExYmV0YTEKLSAqICAgIDEuMS4wYS1mICAgICAgICAgICAgICAgICAxICAgIDEwMTAwICAyLjEuMS4wYS1mIChicmFuY2ggYWJhbmRvbmVkKQotICogICAgMS4yLjBiZXRhMS0yICAgICAgICAgICAgIDIgICAgMTAyMDAgIDIuMS4yLjBiZXRhMS0yCi0gKiAgICAxLjIuMGJldGEzICAgICAgICAgICAgICAgMyAgICAxMDIwMCAgMy4xLjIuMGJldGEzCisgKiAgICAxLjEuMGEtZiAgICAgICAgICAgICAgICAgMSAgICAxMDEwMCAgMi4xLjEuMCAoYnJhbmNoIGFiYW5kb25lZCkKKyAqICAgIDEuMi4wYmV0YTEgICAgICAgICAgICAgICAyICAgIDEwMjAwICAyLjEuMi4wYmV0YTEKICAqCiAgKiAgICBIZW5jZWZvcnRoIHRoZSBzb3VyY2UgdmVyc2lvbiB3aWxsIG1hdGNoIHRoZSBzaGFyZWQtbGlicmFyeSBtYWpvcgogICogICAgYW5kIG1pbm9yIG51bWJlcnM7IHRoZSBzaGFyZWQtbGlicmFyeSBtYWpvciB2ZXJzaW9uIG51bWJlciB3aWxsIGJlCkBAIC0xMDMsNyArMTAxLDcgQEAKICAqIElmIHlvdSBtb2RpZnkgbGlicG5nIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKICAqIHRoaXMgc2VudGVuY2UuCiAgKgotICogbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMC4xMmJldGExLCBNYXkgMTQsIDIwMDEsIGFyZQorICogbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggIDEuMi4wYmV0YTEsIE1heSA2LCAyMDAxLCBhcmUKICAqIENvcHlyaWdodCAoYykgMjAwMCwgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKICAqIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgogICogd2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzCkBAIC0yMDgsMTMgKzIwNiwxMyBAQAogICogWTJLIGNvbXBsaWFuY2UgaW4gbGlicG5nOgogICogPT09PT09PT09PT09PT09PT09PT09PT09PQogICoKLSAqICAgIE1heSAxNCwgMjAwMQorICogICAgTWF5IDYsIDIwMDEKICAqCiAgKiAgICBTaW5jZSB0aGUgUE5HIERldmVsb3BtZW50IGdyb3VwIGlzIGFuIGFkLWhvYyBib2R5LCB3ZSBjYW4ndCBtYWtlCiAgKiAgICBhbiBvZmZpY2lhbCBkZWNsYXJhdGlvbi4KICAqCiAgKiAgICBUaGlzIGlzIHlvdXIgdW5vZmZpY2lhbCBhc3N1cmFuY2UgdGhhdCBsaWJwbmcgZnJvbSB2ZXJzaW9uIDAuNzEgYW5kCi0gKiAgICB1cHdhcmQgdGhyb3VnaCAxLjAuMTJiZXRhMSBhcmUgWTJLIGNvbXBsaWFudC4gIEl0IGlzIG15IGJlbGllZiB0aGF0IGVhcmxpZXIKKyAqICAgIHVwd2FyZCB0aHJvdWdoIDEuMi4wYmV0YTEgYXJlIFkySyBjb21wbGlhbnQuICBJdCBpcyBteSBiZWxpZWYgdGhhdCBlYXJsaWVyCiAgKiAgICB2ZXJzaW9ucyB3ZXJlIGFsc28gWTJLIGNvbXBsaWFudC4KICAqCiAgKiAgICBMaWJwbmcgb25seSBoYXMgdGhyZWUgeWVhciBmaWVsZHMuICBPbmUgaXMgYSAyLWJ5dGUgdW5zaWduZWQgaW50ZWdlcgpAQCAtMjcwLDE1ICsyNjgsMTUgQEAKICAqLwogCiAvKiBWZXJzaW9uIGluZm9ybWF0aW9uIGZvciBwbmcuaCAtIHRoaXMgc2hvdWxkIG1hdGNoIHRoZSB2ZXJzaW9uIGluIHBuZy5jICovCi0jZGVmaW5lIFBOR19MSUJQTkdfVkVSX1NUUklORyAiMS4wLjEyYmV0YTEiCisjZGVmaW5lIFBOR19MSUJQTkdfVkVSX1NUUklORyAiMS4yLjBiZXRhMSIKIAogI2RlZmluZSBQTkdfTElCUE5HX1ZFUl9TT05VTSAgIDIKICNkZWZpbmUgUE5HX0xJQlBOR19WRVJfRExMTlVNICAlRExMTlVNJQogCiAvKiBUaGVzZSBzaG91bGQgbWF0Y2ggdGhlIGZpcnN0IDMgY29tcG9uZW50cyBvZiBQTkdfTElCUE5HX1ZFUl9TVFJJTkc6ICovCiAjZGVmaW5lIFBOR19MSUJQTkdfVkVSX01BSk9SICAgMQotI2RlZmluZSBQTkdfTElCUE5HX1ZFUl9NSU5PUiAgIDAKLSNkZWZpbmUgUE5HX0xJQlBOR19WRVJfUkVMRUFTRSAxMgorI2RlZmluZSBQTkdfTElCUE5HX1ZFUl9NSU5PUiAgIDIKKyNkZWZpbmUgUE5HX0xJQlBOR19WRVJfUkVMRUFTRSAwCiAvKiBUaGlzIHNob3VsZCBtYXRjaCB0aGUgbnVtZXJpYyBwYXJ0IG9mIHRoZSBmaW5hbCBjb21wb25lbnQgb2YKICAqIFBOR19MSUJQTkdfVkVSX1NUUklORywgb21pdHRpbmcgYW55IGxlYWRpbmcgemVybzogKi8KIApAQCAtMjk3LDcgKzI5NSw3IEBACiAgKiBWZXJzaW9ucyAwLjcgdGhyb3VnaCAxLjAuMCB3ZXJlIGluIHRoZSByYW5nZSAwIHRvIDEwMCBoZXJlIChvbmx5CiAgKiB2ZXJzaW9uIDEuMC4wIHdhcyBtaXMtbnVtYmVyZWQgMTAwIGluc3RlYWQgb2YgMTAwMDApLiAgRnJvbQogICogdmVyc2lvbiAxLjAuMSBpdCdzICAgIHh4eXl6eiwgd2hlcmUgeD1tYWpvciwgeT1taW5vciwgej1yZWxlYXNlICovCi0jZGVmaW5lIFBOR19MSUJQTkdfVkVSIDEwMDEyIC8qIDEuMC4xMiAqLworI2RlZmluZSBQTkdfTElCUE5HX1ZFUiAxMDIwMCAvKiAxLjIuMCAqLwogCiAjaWZuZGVmIFBOR19WRVJTSU9OX0lORk9fT05MWQogCkBAIC03MDMsNyArNzAxLDYgQEAKICAgIHBuZ19ieXRlIHBjYWxfbnBhcmFtczsgICAvKiBudW1iZXIgb2YgcGFyYW1ldGVycyBnaXZlbiBpbiBwY2FsX3BhcmFtcyAqLwogI2VuZGlmCiAKLS8qIE5ldyBtZW1iZXJzIGFkZGVkIGluIGxpYnBuZy0xLjAuNiAqLwogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRAogICAgcG5nX3VpbnRfMzIgZnJlZV9tZTsgICAgIC8qIGZsYWdzIGl0ZW1zIGxpYnBuZyBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZyAqLwogI2VuZGlmCkBAIC0xMTQ0LDYgKzExNDEsMTIgQEAKICAgIHBuZ19jaGFycCB0aW1lX2J1ZmZlcjsgICAgICAgICAgICAvKiBTdHJpbmcgdG8gaG9sZCBSRkMgMTEyMyB0aW1lIHRleHQgKi8KICNlbmRpZgogCisjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAorICAgcG5nX3ZvaWRwIG1lbV9wdHI7ICAgICAgICAgICAgICAgIC8qIHVzZXIgc3VwcGxpZWQgc3RydWN0IGZvciBtZW0gZnVuY3Rpb25zICovCisgICBwbmdfbWFsbG9jX3B0ciBtYWxsb2NfZm47ICAgICAgICAgLyogZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgbWVtb3J5ICovCisgICBwbmdfZnJlZV9wdHIgZnJlZV9mbjsgICAgICAgICAgICAgLyogZnVuY3Rpb24gZm9yIGZyZWVpbmcgbWVtb3J5ICovCisjZW5kaWYKKwogLyogTmV3IG1lbWJlcnMgYWRkZWQgaW4gbGlicG5nLTEuMC42ICovCiAKICNpZmRlZiBQTkdfRlJFRV9NRV9TVVBQT1JURUQKQEAgLTExNjAsNTkgKzExNjMsNDEgQEAKICAgIHBuZ19ieXRlcCBjaHVua19saXN0OwogI2VuZGlmCiAKLS8qIE5ldyBtZW1iZXJzIGFkZGVkIGluIGxpYnBuZy0xLjAuMyAqLwogI2lmIGRlZmluZWQoUE5HX1JFQURfUkdCX1RPX0dSQVlfU1VQUE9SVEVEKQogICAgcG5nX2J5dGUgcmdiX3RvX2dyYXlfc3RhdHVzOwotICAgLyogVGhlc2Ugd2VyZSBjaGFuZ2VkIGZyb20gcG5nX2J5dGUgaW4gbGlicG5nLTEuMC42ICovCiAgICBwbmdfdWludF8xNiByZ2JfdG9fZ3JheV9yZWRfY29lZmY7CiAgICBwbmdfdWludF8xNiByZ2JfdG9fZ3JheV9ncmVlbl9jb2VmZjsKICAgIHBuZ191aW50XzE2IHJnYl90b19ncmF5X2JsdWVfY29lZmY7CiAjZW5kaWYKIAotLyogTmV3IG1lbWJlciBhZGRlZCBpbiBsaWJwbmctMS4wLjQgKHJlbmFtZWQgaW4gMS4wLjkpICovCiAjaWYgZGVmaW5lZChQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCkgfHwgXAogICAgIGRlZmluZWQoUE5HX1JFQURfRU1QVFlfUExURV9TVVBQT1JURUQpIHx8IFwKICAgICBkZWZpbmVkKFBOR19XUklURV9FTVBUWV9QTFRFX1NVUFBPUlRFRCkKLS8qIGNoYW5nZWQgZnJvbSBwbmdfYnl0ZSB0byBwbmdfdWludF8zMiBhdCB2ZXJzaW9uIDEuMi4wICovCisvKiBOb3RlIHRvIG1haW50YWluZXI6IGNoYW5nZSB0aGlzIHRvIHBuZ191aW50XzMyIGF0IG5leHQgb3Bwb3J0dW5pdHkgKi8KICAgIHBuZ19ieXRlIG1uZ19mZWF0dXJlc19wZXJtaXR0ZWQ7CiAjZW5kaWYKIAotLyogTmV3IG1lbWJlciBhZGRlZCBpbiBsaWJwbmctMS4wLjcgKi8KICNpZiBkZWZpbmVkKFBOR19SRUFEX0dBTU1BX1NVUFBPUlRFRCkgfHwgZGVmaW5lZChQTkdfUkVBRF9CQUNLR1JPVU5EX1NVUFBPUlRFRCkKICAgIHBuZ19maXhlZF9wb2ludCBpbnRfZ2FtbWE7CiAjZW5kaWYKIAotLyogTmV3IG1lbWJlciBhZGRlZCBpbiBsaWJwbmctMS4wLjksIGlmZGVmJ2VkIG91dCBpbiAxLjAuMTIsIGVuYWJsZWQgaW4gMS4yLjAgKi8KLSNpZiBkZWZpbmVkKFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEKQogICAgcG5nX2J5dGUgZmlsdGVyX3R5cGU7Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX0RFQlVHKSAmJiBkZWZpbmVkKFBOR19VU0VfUE5HR0NDUkQpCi0vKiBOZXcgbWVtYmVyIGFkZGVkIGluIGxpYnBuZy0xLjAuMTAsIGlmZGVmJ2VkIG91dCBpbiAxLjIuMCAqLwotICAgcG5nX3VpbnRfMzIgcm93X2J1Zl9zaXplOwotI2VuZGlmCi0KLS8qIE5ldyBtZW1iZXJzIGFkZGVkIGluIGxpYnBuZy0xLjIuMCAqLwogI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkKICAgIHBuZ19ieXRlICAgICBtbXhfYml0ZGVwdGhfdGhyZXNob2xkOwogICAgcG5nX3VpbnRfMzIgIG1teF9yb3dieXRlc190aHJlc2hvbGQ7CiAgICBwbmdfdWludF8zMiAgYXNtX2ZsYWdzOwogI2VuZGlmCiAKLS8qIE5ldyBtZW1iZXJzIGFkZGVkIGluIGxpYnBuZy0xLjAuMiBidXQgZmlyc3QgZW5hYmxlZCBieSBkZWZhdWx0IGluIDEuMi4wICovCi0jaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAotICAgcG5nX3ZvaWRwIG1lbV9wdHI7ICAgICAgICAgICAgICAgIC8qIHVzZXIgc3VwcGxpZWQgc3RydWN0IGZvciBtZW0gZnVuY3Rpb25zICovCi0gICBwbmdfbWFsbG9jX3B0ciBtYWxsb2NfZm47ICAgICAgICAgLyogZnVuY3Rpb24gZm9yIGFsbG9jYXRpbmcgbWVtb3J5ICovCi0gICBwbmdfZnJlZV9wdHIgZnJlZV9mbjsgICAgICAgICAgICAgLyogZnVuY3Rpb24gZm9yIGZyZWVpbmcgbWVtb3J5ICovCi0jZW5kaWYKKyAgIHBuZ191aW50XzMyIHJvd19idWZfc2l6ZTsKIAogfTsKIAogCiAvKiBUaGlzIHByZXZlbnRzIGEgY29tcGlsZXIgZXJyb3IgaW4gcG5nX2dldF9jb3B5cmlnaHQoKSBpbiBwbmcuYyBpZiBwbmcuYwotICAgYW5kIHBuZy5oIGFyZSBib3RoIGF0IHZlcnNpb24gMS4wLjEyYmV0YTEKK2FuZCBwbmcuaCBhcmUgYm90aCBhdCAqIHZlcnNpb24gMS4yLjBiZXRhMQogICovCi10eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8wXzEyYmV0YTE7Cit0eXBlZGVmIHBuZ19zdHJ1Y3RwIHZlcnNpb25fMV8yXzBiZXRhMTsKIAogdHlwZWRlZiBwbmdfc3RydWN0IEZBUiAqIEZBUiAqIHBuZ19zdHJ1Y3RwcDsKIApAQCAtMTI2Myw3ICsxMjQ4LDYgQEAKIC8qIFJlc2V0IHRoZSBjb21wcmVzc2lvbiBzdHJlYW0gKi8KIGV4dGVybiBQTkdfRVhQT1JUKGludCxwbmdfcmVzZXRfenN0cmVhbSkgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyKSk7CiAKLS8qIE5ldyBmdW5jdGlvbnMgYWRkZWQgaW4gbGlicG5nLTEuMC4yIChub3QgZW5hYmxlZCBieSBkZWZhdWx0IHVudGlsIDEuMi4wKSAqLwogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKIGV4dGVybiBQTkdfRVhQT1JUKHBuZ19zdHJ1Y3RwLHBuZ19jcmVhdGVfcmVhZF9zdHJ1Y3RfMikKICAgIFBOR0FSRygocG5nX2NvbnN0X2NoYXJwIHVzZXJfcG5nX3ZlciwgcG5nX3ZvaWRwIGVycm9yX3B0ciwKQEAgLTEyOTQsMTEgKzEyNzgsOCBAQAogZXh0ZXJuIFBOR19FWFBPUlQocG5nX2luZm9wLHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QpCiAgICBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpKTsKIAotLyogSW5pdGlhbGl6ZSB0aGUgaW5mbyBzdHJ1Y3R1cmUgKG9sZCBpbnRlcmZhY2UgLSBERVBSRUNBVEVEKSAqLwotZXh0ZXJuIFBOR19FWFBPUlQodm9pZCxwbmdfaW5mb19pbml0KSBQTkdBUkcoKHBuZ19pbmZvcCBpbmZvX3B0cikpOwotI2RlZmluZSBwbmdfaW5mb19pbml0KGluZm9fcHRyKSBwbmdfaW5mb19pbml0XzMoJmluZm9fcHRyLCBzaXplb2YocG5nX2luZm8pKTsKLWV4dGVybiBQTkdfRVhQT1JUKHZvaWQscG5nX2luZm9faW5pdF8zKSBQTkdBUkcoKHBuZ19pbmZvcHAgaW5mb19wdHIsCi0gICAgcG5nX3NpemVfdCBwbmdfaW5mb19zdHJ1Y3Rfc2l6ZSkpOworLyogSW5pdGlhbGl6ZSB0aGUgaW5mbyBzdHJ1Y3R1cmUgKG9sZCBpbnRlcmZhY2UgLSBOT1QgRExMIEVYUE9SVEVEKSAqLworZXh0ZXJuIHZvaWQgcG5nX2luZm9faW5pdCBQTkdBUkcoKHBuZ19pbmZvcCBpbmZvX3B0cikpOwogCiAvKiBXcml0ZXMgYWxsIHRoZSBQTkcgaW5mb3JtYXRpb24gYmVmb3JlIHRoZSBpbWFnZS4gKi8KIGV4dGVybiBQTkdfRVhQT1JUKHZvaWQscG5nX3dyaXRlX2luZm9fYmVmb3JlX1BMVEUpIFBOR0FSRygocG5nX3N0cnVjdHAgcG5nX3B0ciwKQEAgLTIyNTYsMTEgKzIyMzcsNjggQEAKICAgIHBuZ19wdHIsIHBuZ191aW50XzMyIG1uZ19mZWF0dXJlc19wZXJtaXR0ZWQpKTsKICNlbmRpZgogCi0vKiBwbmdfbW14X3N1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCB1bmNvbmRpdGlvbmFsbHkgc3RhcnRpbmcgaW4gdmVyc2lvbiAxLjIuMCAqLwotI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkgfHwgZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKQorLyogQWRkZWQgdG8gdmVyc2lvbiAxLjIuMCAqLworI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkKKyNkZWZpbmUgUE5HX0FTTV9GTEFHX01NWF9TVVBQT1JUX0NPTVBJTEVEICAweDAxCQkvKiBub3QgdXNlci1zZXR0YWJsZSAqLworI2RlZmluZSBQTkdfQVNNX0ZMQUdfTU1YX1NVUFBPUlRfSU5fQ1BVICAgIDB4MDIJCS8qIG5vdCB1c2VyLXNldHRhYmxlICovCisjZGVmaW5lIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVyAgMHgwNAorI2RlZmluZSBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFICAgIDB4MDgKKyNkZWZpbmUgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICAweDEwCisjZGVmaW5lIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAgICAgMHgyMAorI2RlZmluZSBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRyAgIDB4NDAKKyNkZWZpbmUgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCAweDgwCisjZGVmaW5lIFBOR19BU01fRkxBR1NfSU5JVElBTElaRUQgICAgICAgICAgMHg4MDAwMDAwMAkvKiBub3QgdXNlci1zZXR0YWJsZSAqLworCisjZGVmaW5lIFBOR19NTVhfUkVBRF9GTEFHUyAoIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVyAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfSU5URVJMQUNFICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9TVUIgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX0FWRyAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCApCisjZGVmaW5lIFBOR19NTVhfV1JJVEVfRkxBR1MgKCAwICkKKworI2RlZmluZSBQTkdfTU1YX0ZMQUdTICggUE5HX0FTTV9GTEFHX01NWF9TVVBQT1JUX0NPTVBJTEVEIFwKKyAgICAgICAgICAgICAgICAgICAgICB8IFBOR19BU01fRkxBR19NTVhfU1VQUE9SVF9JTl9DUFUgICBcCisgICAgICAgICAgICAgICAgICAgICAgfCBQTkdfTU1YX1JFQURfRkxBR1MgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIHwgUE5HX01NWF9XUklURV9GTEFHUyApCisKKyNkZWZpbmUgUE5HX1NFTEVDVF9SRUFEICAgMQorI2RlZmluZSBQTkdfU0VMRUNUX1dSSVRFICAyCisKKworLyogcG5nZ2V0LmMgKi8KK2V4dGVybiBQTkdfRVhQT1JUKHBuZ191aW50XzMyLHBuZ19nZXRfbW14X2ZsYWdtYXNrKQorICAgUE5HQVJHKChpbnQgZmxhZ19zZWxlY3QsIGludCAqY29tcGlsZXJJRCkpOworCisvKiBwbmdnZXQuYyAqLworZXh0ZXJuIFBOR19FWFBPUlQocG5nX3VpbnRfMzIscG5nX2dldF9hc21fZmxhZ21hc2spCisgICBQTkdBUkcoKGludCBmbGFnX3NlbGVjdCkpOworCisvKiBwbmdnZXQuYyAqLworZXh0ZXJuIFBOR19FWFBPUlQocG5nX3VpbnRfMzIscG5nX2dldF9hc21fZmxhZ3MpCisgICBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpKTsKKworLyogcG5nZ2V0LmMgKi8KK2V4dGVybiBQTkdfRVhQT1JUKHBuZ19ieXRlLHBuZ19nZXRfbW14X2JpdGRlcHRoX3RocmVzaG9sZCkKKyAgIFBOR0FSRygocG5nX3N0cnVjdHAgcG5nX3B0cikpOworCisvKiBwbmdnZXQuYyAqLworZXh0ZXJuIFBOR19FWFBPUlQocG5nX3VpbnRfMzIscG5nX2dldF9tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKQorICAgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyKSk7CisKKy8qIHBuZ3NldC5jICovCitleHRlcm4gUE5HX0VYUE9SVCh2b2lkLHBuZ19zZXRfYXNtX2ZsYWdzKQorICAgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfdWludF8zMiBhc21fZmxhZ3MpKTsKKworLyogcG5nc2V0LmMgKi8KK2V4dGVybiBQTkdfRVhQT1JUKHZvaWQscG5nX3NldF9tbXhfdGhyZXNob2xkcykKKyAgIFBOR0FSRygocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2J5dGUgbW14X2JpdGRlcHRoX3RocmVzaG9sZCwKKyAgIHBuZ191aW50XzMyIG1teF9yb3dieXRlc190aHJlc2hvbGQpKTsKKworI2VuZGlmIC8qIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQgKi8KKwogLyogcG5nLmMsIHBuZ2djY3JkLmMsIG9yIHBuZ3ZjcmQuYyAqLwogZXh0ZXJuIFBOR19FWFBPUlQoaW50LHBuZ19tbXhfc3VwcG9ydCkgUE5HQVJHKCh2b2lkKSk7Ci0jZW5kaWYgLyogUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCAqLwogCiAvKiBTdHJpcCB0aGUgcHJlcGVuZGVkIGVycm9yIG51bWJlcnMgKCIjbm5uICIpIGZyb20gZXJyb3IgYW5kIHdhcm5pbmcKICAqIG1lc3NhZ2VzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGVycm9yIG9yIHdhcm5pbmcgaGFuZGxlci4gKi8KQEAgLTIyNzIsNyArMjMxMCw3IEBACiAvKiBNYWludGFpbmVyOiBQdXQgbmV3IHB1YmxpYyBwcm90b3R5cGVzIGhlcmUgXiwgaW4gbGlicG5nLjMsIGFuZCBwcm9qZWN0IGRlZnMgKi8KIAogI2RlZmluZSBQTkdfSEVBREVSX1ZFUlNJT05fU1RSSU5HIFwKLSAgICIgbGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEgKGhlYWRlcilcbiIKKyAgICIgbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxIChoZWFkZXIpXG4iCiAKICNpZmRlZiBQTkdfUkVBRF9DT01QT1NJVEVfTk9ESVZfU1VQUE9SVEVECiAvKiBXaXRoIHRoZXNlIHJvdXRpbmVzIHdlIGF2b2lkIGFuIGludGVnZXIgZGl2aWRlLCB3aGljaCB3aWxsIGJlIHNsb3dlciBvbgpAQCAtMjUwNSwxMCArMjU0Myw4IEBACiAgKiAob2xkIGludGVyZmFjZSAtIERFUFJFQ0FURUQgLSB1c2UgcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdCBpbnN0ZWFkKS4KICAqLwogZXh0ZXJuIFBOR19FWFBPUlQodm9pZCxwbmdfcmVhZF9pbml0KSBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpKTsKLSNkZWZpbmUgcG5nX3JlYWRfaW5pdChwbmdfcHRyKSBwbmdfcmVhZF9pbml0XzMoJnBuZ19wdHIsIFwKLSAgICBQTkdfTElCUE5HX1ZFUl9TVFJJTkcsICBzaXplb2YocG5nX3N0cnVjdCkpOwotZXh0ZXJuIFBOR19FWFBPUlQodm9pZCxwbmdfcmVhZF9pbml0XzMpIFBOR0FSRygocG5nX3N0cnVjdHBwIHB0cl9wdHIsCi0gICAgcG5nX2NvbnN0X2NoYXJwIHVzZXJfcG5nX3ZlciwgcG5nX3NpemVfdCBwbmdfc3RydWN0X3NpemUpKTsKKyNkZWZpbmUgcG5nX3JlYWRfaW5pdChwbmdfcHRyKSBwbmdfcmVhZF9pbml0XzIocG5nX3B0ciwgXAorICAgIFBOR19MSUJQTkdfVkVSX1NUUklORywgIHNpemVvZihwbmdfc3RydWN0KSwgc2l6ZW9mKHBuZ19pbmZvKSk7CiBleHRlcm4gUE5HX0VYUE9SVCh2b2lkLHBuZ19yZWFkX2luaXRfMikgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyLAogICAgIHBuZ19jb25zdF9jaGFycCB1c2VyX3BuZ192ZXIsIHBuZ19zaXplX3QgcG5nX3N0cnVjdF9zaXplLCBwbmdfc2l6ZV90CiAgICAgcG5nX2luZm9fc2l6ZSkpOwpAQCAtMjUxNywxMCArMjU1Myw4IEBACiAgKiAob2xkIGludGVyZmFjZSAtIERFUFJFQ0FURUQgLSB1c2UgcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3QgaW5zdGVhZCkuCiAgKi8KIGV4dGVybiBQTkdfRVhQT1JUKHZvaWQscG5nX3dyaXRlX2luaXQpIFBOR0FSRygocG5nX3N0cnVjdHAgcG5nX3B0cikpOwotI2RlZmluZSBwbmdfd3JpdGVfaW5pdChwbmdfcHRyKSBwbmdfd3JpdGVfaW5pdF8zKCZwbmdfcHRyLCBcCi0gICAgUE5HX0xJQlBOR19WRVJfU1RSSU5HLCBzaXplb2YocG5nX3N0cnVjdCkpOwotZXh0ZXJuIFBOR19FWFBPUlQodm9pZCxwbmdfd3JpdGVfaW5pdF8zKSBQTkdBUkcoKHBuZ19zdHJ1Y3RwcCBwdHJfcHRyLAotICAgIHBuZ19jb25zdF9jaGFycCB1c2VyX3BuZ192ZXIsIHBuZ19zaXplX3QgcG5nX3N0cnVjdF9zaXplKSk7CisjZGVmaW5lIHBuZ193cml0ZV9pbml0KHBuZ19wdHIpIHBuZ193cml0ZV9pbml0XzIocG5nX3B0ciwgXAorICAgIFBOR19MSUJQTkdfVkVSX1NUUklORywgc2l6ZW9mKHBuZ19zdHJ1Y3QpLCBzaXplb2YocG5nX2luZm8pKTsKIGV4dGVybiBQTkdfRVhQT1JUKHZvaWQscG5nX3dyaXRlX2luaXRfMikgUE5HQVJHKChwbmdfc3RydWN0cCBwbmdfcHRyLAogICAgIHBuZ19jb25zdF9jaGFycCB1c2VyX3BuZ192ZXIsIHBuZ19zaXplX3QgcG5nX3N0cnVjdF9zaXplLCBwbmdfc2l6ZV90CiAgICAgcG5nX2luZm9fc2l6ZSkpOwpAQCAtMjUzMiw5ICsyNTY2LDkgQEAKIFBOR19FWFRFUk4gdm9pZCBwbmdfZGVzdHJveV9zdHJ1Y3QgUE5HQVJHKChwbmdfdm9pZHAgc3RydWN0X3B0cikpOwogCiBQTkdfRVhURVJOIHBuZ192b2lkcCBwbmdfY3JlYXRlX3N0cnVjdF8yIFBOR0FSRygoaW50IHR5cGUsIHBuZ19tYWxsb2NfcHRyCi0gIG1hbGxvY19mbiwgcG5nX3ZvaWRwIG1lbV9wdHIpKTsKKyAgbWFsbG9jX2ZuKSk7CiBQTkdfRVhURVJOIHZvaWQgcG5nX2Rlc3Ryb3lfc3RydWN0XzIgUE5HQVJHKChwbmdfdm9pZHAgc3RydWN0X3B0ciwKLSAgIHBuZ19mcmVlX3B0ciBmcmVlX2ZuLCBwbmdfdm9pZHAgbWVtX3B0cikpOworICAgcG5nX2ZyZWVfcHRyIGZyZWVfZm4pKTsKIAogLyogRnJlZSBhbnkgbWVtb3J5IHRoYXQgaW5mb19wdHIgcG9pbnRzIHRvIGFuZCByZXNldCBzdHJ1Y3QuICovCiBQTkdfRVhURVJOIHZvaWQgcG5nX2luZm9fZGVzdHJveSBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsCkBAIC0zMDc4LDYgKzMxMTIsMTAgQEAKICAgIHBuZ19ieXRlcCByb3cpKTsKICNlbmRpZgogCisjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQorLyogcG5nLmMgKi8gLyogUFJJVkFURSAqLworUE5HX0VYVEVSTiB2b2lkIHBuZ19pbml0X21teF9mbGFncyBQTkdBUkcoKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpKTsKKyNlbmRpZgogLyogTWFpbnRhaW5lcjogUHV0IG5ldyBwcml2YXRlIHByb3RvdHlwZXMgaGVyZSBeIGFuZCBpbiBsaWJwbmdwZi4zICovCiAKICNlbmRpZiAvKiBQTkdfSU5URVJOQUwgKi8KZGlmZiAtLWdpdCBhL3BuZ2FzbXJkLmggYi9wbmdhc21yZC5oCmluZGV4IDcyOGZlYzkuLmRiMjU1MjQgMTAwNjQ0Ci0tLSBhL3BuZ2FzbXJkLmgKKysrIGIvcG5nYXNtcmQuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHBuZ2FzbXJkLmggLSBhc3NlbWJsZXIgdmVyc2lvbiBvZiB1dGlsaXRpZXMgdG8gcmVhZCBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqCmRpZmYgLS1naXQgYS9wbmdjb25mLmggYi9wbmdjb25mLmgKaW5kZXggMzUxNTA3OC4uOGMzMTE1OCAxMDA2NDQKLS0tIGEvcG5nY29uZi5oCisrKyBiL3BuZ2NvbmYuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHBuZ2NvbmYuaCAtIG1hY2hpbmUgY29uZmlndXJhYmxlIGZpbGUgZm9yIGxpYnBuZwogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtNDcsMTMgKzQ3LDExIEBACiAKIC8qIEVuYWJsZWQgYnkgZGVmYXVsdCBpbiAxLjIuMC4gIFlvdSBjYW4gZGlzYWJsZSB0aGlzIGlmIHlvdSBkb24ndCBuZWVkIHRvCiAgICBzdXBwb3J0IFBOR3MgdGhhdCBhcmUgZW1iZWRkZWQgaW4gTU5HIGRhdGFzdHJlYW1zICovCi0vKgogI2lmbmRlZiBQTkdfTk9fTU5HX0ZFQVRVUkVTCiAjICBpZm5kZWYgUE5HX01OR19GRUFUVVJFU19TVVBQT1JURUQKICMgICAgZGVmaW5lIFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVECiAjICBlbmRpZgogI2VuZGlmCi0qLwogCiAjaWZuZGVmIFBOR19OT19GTE9BVElOR19QT0lOVF9TVVBQT1JURUQKICMgIGlmbmRlZiBQTkdfRkxPQVRJTkdfUE9JTlRfU1VQUE9SVEVECkBAIC01OTAsMTIgKzU4OCw5IEBACiAjICBkZWZpbmUgUE5HX1dSSVRFX1dFSUdIVEVEX0ZJTFRFUl9TVVBQT1JURUQKICNlbmRpZgogCi0vKiBXaWxsIGJlIGVuYWJsZWQgaW4gbGlicG5nLTEuMi4wICovCi0vKgogI2lmbmRlZiBQTkdfTk9fRVJST1JfTlVNQkVSUwogI2RlZmluZSBQTkdfRVJST1JfTlVNQkVSU19TVVBQT1JURUQKICNlbmRpZgotKi8KIAogI2lmbmRlZiBQTkdfTk9fV1JJVEVfRkxVU0gKICMgIGRlZmluZSBQTkdfV1JJVEVfRkxVU0hfU1VQUE9SVEVECkBAIC02MjgsMTMgKzYyMywxMiBAQAogICogcG5nX2dldF94X29mZnNldF9taWNyb25zKCkKICAqIHBuZ19nZXRfeV9vZmZzZXRfbWljcm9ucygpCiAgKi8KLSNpZiAhZGVmaW5lZChQTkdfTk9fRUFTWV9BQ0NFU1MpICYmICFkZWZpbmVkKFBOR19FQVNZX0FDQ0VTU19TVVBQT1JURUQpCisjaWZuZGVmIFBOR19OT19FQVNZX0FDQ0VTUwogIyAgZGVmaW5lIFBOR19FQVNZX0FDQ0VTU19TVVBQT1JURUQKICNlbmRpZgogCiAvKiBQTkdfQVNTRU1CTEVSX0NPREUgd2FzIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB2ZXJzaW9uIDEuMi4wIAogICAgZXZlbiB3aGVuIFBOR19VU0VfUE5HVkNSRCBvciBQTkdfVVNFX1BOR0dDQ1JEIGlzIG5vdCBkZWZpbmVkICovCi0vKgogI2lmIGRlZmluZWQoUE5HX1JFQURfU1VQUE9SVEVEKSAmJiAhZGVmaW5lZChQTkdfTk9fQVNTRU1CTEVSX0NPREUpCiAjICBpZm5kZWYgUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRAogIyAgICBkZWZpbmUgUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRApAQCAtNjQzLDI0ICs2MzcsNiBAQAogIyAgICBkZWZpbmUgUE5HX01NWF9DT0RFX1NVUFBPUlRFRAogIyAgZW5kaWYKICNlbmRpZgotKi8KLSNpZiBkZWZpbmVkKFBOR19SRUFEX1NVUFBPUlRFRCkgJiYgIWRlZmluZWQoUE5HX05PX0FTU0VNQkxFUl9DT0RFKQotIyAgaWYgZGVmaW5lZChQTkdfVVNFX1BOR1ZDUkQpIHx8IGRlZmluZWQoUE5HX1VTRV9QTkdHQ0NSRCkKLSMgICAgaWZuZGVmIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQKLSMgICAgICBkZWZpbmUgUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRAotIyAgICBlbmRpZgotIyAgICBpZiAhZGVmaW5lZChQTkdfTU1YX0NPREVfU1VQUE9SVEVEKSAmJiAhZGVmaW5lZChQTkdfTk9fTU1YX0NPREUpCi0jICAgICAgZGVmaW5lIFBOR19NTVhfQ09ERV9TVVBQT1JURUQKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogVGhpcyB3aWxsIGJlIGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBsaWJwbmctMS4yLjAgKi8KLS8qCi0jaWYgIWRlZmluZWQoUE5HX05PX1VTRVJfTUVNKSAmJiAhZGVmaW5lZChQTkdfVVNFUl9NRU1fU1VQUE9SVEVEKQotIyAgZGVmaW5lIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLSNlbmRpZgotKi8KIAogLyogVGhlc2UgYXJlIGN1cnJlbnRseSBleHBlcmltZW50YWwgZmVhdHVyZXMsIGRlZmluZSB0aGVtIGlmIHlvdSB3YW50ICovCiAKQEAgLTY3MSw2ICs2NDcsOSBAQAogIyAgICBkZWZpbmUgUE5HX1JFQURfMTZfVE9fOF9BQ0NVUkFURV9TQ0FMRV9TVVBQT1JURUQKICMgIGVuZGlmCiAjZW5kaWYKKyNpZm5kZWYgUE5HX05PX1VTRVJfTUVNCisjICBkZWZpbmUgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAorI2VuZGlmCiAjaWZuZGVmIFBOR19OT19aQUxMT0NfWkVSTwogIyAgZGVmaW5lIFBOR19aQUxMT0NfWkVSTwogI2VuZGlmCmRpZmYgLS1naXQgYS9wbmdlcnJvci5jIGIvcG5nZXJyb3IuYwppbmRleCAxZTY2MDJjLi45OGY4YzdiIDEwMDY0NAotLS0gYS9wbmdlcnJvci5jCisrKyBiL3BuZ2Vycm9yLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ2Vycm9yLmMgLSBzdHViIGZ1bmN0aW9ucyBmb3IgaS9vIGFuZCBtZW1vcnkgYWxsb2NhdGlvbgogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTUyLDcgKzE1Miw3IEBACiB2b2lkIFBOR0FQSQogcG5nX2NodW5rX3dhcm5pbmcocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2NvbnN0X2NoYXJwIG1lc3NhZ2UpCiB7Ci0gICBjaGFyIG1zZ1sxOCs2NF07CisgICBjaGFyIG1zZ1sxNis2NF07CiAgICBwbmdfZm9ybWF0X2J1ZmZlcihwbmdfcHRyLCBtc2csIG1lc3NhZ2UpOwogICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgbXNnKTsKIH0KZGlmZiAtLWdpdCBhL3BuZ2djY3JkLmMgYi9wbmdnY2NyZC5jCmluZGV4IDU1N2E5NDMuLmUwY2EyMDMgMTAwNjQ0Ci0tLSBhL3BuZ2djY3JkLmMKKysrIGIvcG5nZ2NjcmQuYwpAQCAtNiw3ICs2LDcgQEAKICAqICAgICBhbmQgaHR0cDovL3d3dy5pbnRlbC5jb20vZHJnL3BlbnRpdW1JSS9hcHBub3Rlcy85MjMvOTIzLmh0bQogICogICAgIGZvciBJbnRlbCdzIHBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIHRoZSBNTVggdnMuIG5vbi1NTVggY29kZS4KICAqCi0gKiBsaWJwbmcgdmVyc2lvbiAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIHZlcnNpb24gMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogQ29weXJpZ2h0IChjKSAxOTk4LCBJbnRlbCBDb3Jwb3JhdGlvbgpAQCAtMjAzLDkgKzIwMywxNCBAQAogICogICAgIC0gIl9TaGlmdFJlbS51c2UgPSA0MDsiICAgICAgc2hvdWxkIGhhdmUgYmVlbiAgICJfU2hpZnRSZW0udXNlID0gNDg7IgogICogICAgIC0gInBzbGxxIF9TaGlmdFJlbSwgJSVtbTIiICAgc2hvdWxkIGhhdmUgYmVlbiAgICJwc3JscSBfU2hpZnRSZW0sICUlbW0yIgogICoKKyAqIDIwMDEwMTAxOgorICogIC0gYWRkZWQgbmV3IHBuZ19pbml0X21teF9mbGFncygpIGZ1bmN0aW9uIChoZXJlIG9ubHkgYmVjYXVzZSBpdCBuZWVkcyB0bworICogICAgIGNhbGwgbW14c3VwcG9ydCgpLCB3aGljaCBzaG91bGQgcHJvYmFibHkgYmVjb21lIGdsb2JhbCBwbmdfbW14c3VwcG9ydCgpKTsKKyAqICAgICBtb2RpZmllZCBvdGhlciBNTVggcm91dGluZXMgdG8gcnVuIGNvbmRpdGlvbmFsbHkgKHBuZ19wdHItPmFzbV9mbGFncykKKyAqCiAgKiAyMDAxMDEwMzoKICAqICAtIHJlbmFtZWQgbW14c3VwcG9ydCgpIHRvIHBuZ19tbXhfc3VwcG9ydCgpLCB3aXRoIGF1dG8tc2V0IG9mIG1teF9zdXBwb3J0ZWQsCi0gKiAgICAgYW5kIG1hZGUgaXQgcHVibGljCisgKiAgICAgYW5kIG1hZGUgaXQgcHVibGljOyBtb3ZlZCBwbmdfaW5pdF9tbXhfZmxhZ3MoKSB0byBwbmcuYyBhcyBpbnRlcm5hbCBmdW5jCiAgKgogICogMjAwMTAxMDQ6CiAgKiAgLSByZW1vdmVkIGRlcGVuZGVuY3kgb24gcG5nX3JlYWRfZmlsdGVyX3Jvd19jKCkgKEMgY29kZSBhbHJlYWR5IGR1cGxpY2F0ZWQKQEAgLTIyNiw3ICsyMzEsNyBAQAogICogICAgIHggcGljayBvbmUgdmVyc2lvbiBvZiBtbXhzdXBwb3J0KCkgYW5kIGdldCByaWQgb2YgdGhlIG90aGVyCiAgKiAgICAgLSBhZGQgZXJyb3IgbWVzc2FnZXMgdG8gYW55IHJlbWFpbmluZyBib2d1cyBkZWZhdWx0IGNhc2VzCiAgKiAgICAgLSBlbmFibGUgcGl4ZWxfZGVwdGggPT0gOCBjYXNlcyBpbiBwbmdfcmVhZF9maWx0ZXJfcm93KCk/ICh0ZXN0IHNwZWVkKQotICogICAgIC0gYWRkIHN1cHBvcnQgZm9yIHJ1bnRpbWUgZW5hYmxlL2Rpc2FibGUvcXVlcnkgb2YgdmFyaW91cyBNTVggcm91dGluZXMKKyAqICAgICB4IGFkZCBzdXBwb3J0IGZvciBydW50aW1lIGVuYWJsZS9kaXNhYmxlL3F1ZXJ5IG9mIHZhcmlvdXMgTU1YIHJvdXRpbmVzCiAgKi8KIAogLyoKQEAgLTMzMyw4ICszMzgsMzcgQEAKIHN0YXRpYyBpbnQgICAgICAgICAgX3BhdGVtcDsJLy8gdGVtcCB2YXJpYWJsZXMgZm9yIFBhZXRoIHJvdXRpbmUKIHN0YXRpYyBpbnQgICAgICAgICAgX3BidGVtcDsKIHN0YXRpYyBpbnQgICAgICAgICAgX3BjdGVtcDsKKworc3RhdGljIHZvaWQgLyogUFJJVkFURSAqLworcG5nX3NxdWVsY2hfd2FybmluZ3Modm9pZCkKK3sKKyAgIF9kaWYgPSBfZGlmOworICAgX3BhdGVtcCA9IF9wYXRlbXA7CisgICBfcGJ0ZW1wID0gX3BidGVtcDsKKyAgIF9wY3RlbXAgPSBfcGN0ZW1wOworICAgX2NvbnN0NCAgPSBfY29uc3Q0OworICAgX2NvbnN0NiAgPSBfY29uc3Q2OworICAgX01NWExlbmd0aCA9IF9NTVhMZW5ndGg7CisgICBfbWFzazhfMCAgPSBfbWFzazhfMDsKKyAgIF9tYXNrMTZfMSA9IF9tYXNrMTZfMTsKKyAgIF9tYXNrMTZfMCA9IF9tYXNrMTZfMDsKKyAgIF9tYXNrMjRfMiA9IF9tYXNrMjRfMjsKKyAgIF9tYXNrMjRfMSA9IF9tYXNrMjRfMTsKKyAgIF9tYXNrMjRfMCA9IF9tYXNrMjRfMDsKKyAgIF9tYXNrMzJfMyA9IF9tYXNrMzJfMzsKKyAgIF9tYXNrMzJfMiA9IF9tYXNrMzJfMjsKKyAgIF9tYXNrMzJfMSA9IF9tYXNrMzJfMTsKKyAgIF9tYXNrMzJfMCA9IF9tYXNrMzJfMDsKKyAgIF9tYXNrNDhfNSA9IF9tYXNrNDhfNTsKKyAgIF9tYXNrNDhfNCA9IF9tYXNrNDhfNDsKKyAgIF9tYXNrNDhfMyA9IF9tYXNrNDhfMzsKKyAgIF9tYXNrNDhfMiA9IF9tYXNrNDhfMjsKKyAgIF9tYXNrNDhfMSA9IF9tYXNrNDhfMTsKKyAgIF9tYXNrNDhfMCA9IF9tYXNrNDhfMDsKK30KICNlbmRpZiAvKiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICovCiAKKwogc3RhdGljIGludCBfbW14X3N1cHBvcnRlZCA9IDI7CiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KQEAgLTM3MCw5ICs0MDQsMTMgQEAKIHsKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NvbWJpbmVfcm93IChwbmdnY2NyZC5jKVxuIik7CiAKKyNpZiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpCiAgICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgeworICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLworICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJhc21fZmxhZ3MgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsKICAgICAgICBwbmdfbW14X3N1cHBvcnQoKTsKICAgIH0KKyNlbmRpZgogCiAgICBpZiAobWFzayA9PSAweGZmKQogICAgewpAQCAtNTU2LDcgKzU5NCw4IEBACiAgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwogCiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKCBfbW14X3N1cHBvcnRlZCAgKQorICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCisgICAgICAgICAgICAgICAgLyogJiYgX21teF9zdXBwb3J0ZWQgKi8gKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcG5nX3VpbnRfMzIgbGVuOwogICAgICAgICAgICAgICAgaW50IGRpZmY7CkBAIC02ODksNyArNzI4LDggQEAKICAgICAgICAgICAgIHBuZ19ieXRlcCBkc3RwdHI7CiAKICNpZiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpCi0gICAgICAgICAgICBpZiAoIF9tbXhfc3VwcG9ydGVkICkKKyAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQorICAgICAgICAgICAgICAgIC8qICYmIF9tbXhfc3VwcG9ydGVkICovICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBuZ191aW50XzMyIGxlbjsKICAgICAgICAgICAgICAgIGludCBkaWZmOwpAQCAtODM3LDcgKzg3Nyw4IEBACiAgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwogCiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKCBfbW14X3N1cHBvcnRlZCApCisgICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgICBpbnQgZGlmZjsKQEAgLTEwMDAsNyArMTA0MSw4IEBACiAgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwogCiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKCBfbW14X3N1cHBvcnRlZCApCisgICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgICBpbnQgZGlmZjsKQEAgLTExNzAsNyArMTIxMiw4IEBACiAgICAgICAgICAgICBwbmdfYnl0ZXAgZHN0cHRyOwogCiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKCBfbW14X3N1cHBvcnRlZCApCisgICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyAgICAgICAgICAgICAgICAvKiAmJiBfbW14X3N1cHBvcnRlZCAqLyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwbmdfdWludF8zMiBsZW47CiAgICAgICAgICAgICAgICBpbnQgZGlmZjsKQEAgLTE0MzYsOSArMTQ3OSwxMyBAQAogCiAgICBwbmdfZGVidWcoMSwgImluIHBuZ19kb19yZWFkX2ludGVybGFjZSAocG5nZ2NjcmQuYylcbiIpOwogCisjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQogICAgaWYgKF9tbXhfc3VwcG9ydGVkID09IDIpIHsKKyAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KKyAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiAgICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgICB9CisjZW5kaWYKIAogICAgaWYgKHJvdyAhPSBOVUxMICYmIHJvd19pbmZvICE9IE5VTEwpCiAgICB7CkBAIC0xNjQ0LDcgKzE2OTEsOCBAQAogICAgICAgICAgICAgLyogTmV3IGNvZGUgYnkgTmlyYXYgQ2hoYXRyYXBhdGkgLSBJbnRlbCBDb3Jwb3JhdGlvbiAqLwogCiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgICAgICAgaWYgKCBfbW14X3N1cHBvcnRlZCApCisgICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9JTlRFUkxBQ0UpCisgICAgICAgICAgICAgICAgLyogJiYgX21teF9zdXBwb3J0ZWQgKi8gKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID09IDMpCkBAIC0yNjY1LDcgKzI3MTMsNyBAQAogCiAKIAotCisjaWYgZGVmaW5lZChQTkdfSEFWRV9BU1NFTUJMRVJfUkVBRF9GSUxURVJfUk9XKQogI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkKIAogLy8gVGhlc2UgdmFyaWFibGVzIGFyZSB1dGlsaXplZCBpbiB0aGUgZnVuY3Rpb25zIGJlbG93LiAgVGhleSBhcmUgZGVjbGFyZWQKQEAgLTI2NzgsOCArMjcyNiw2IEBACiAgIF9IQkNsZWFyTWFzayA9IHsweDdmN2Y3ZjdmN2Y3ZjdmN2ZMTH0sCiAgIF9BY3RpdmVNYXNrLCBfQWN0aXZlTWFzazIsIF9BY3RpdmVNYXNrRW5kLCBfU2hpZnRCcHAsIF9TaGlmdFJlbTsKIAotCi0KIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly8KIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KIC8vICAgICAgICAgICBQIE4gRyBfIFIgRSBBIEQgXyBGIEkgTCBUIEUgUiBfIFIgTyBXIF8gTSBNIFggXyBBIFYgRyAgICAgICAgICAgLy8KQEAgLTQ4ODQsNyArNDkzMCw2IEBACiAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKLSNpZiBkZWZpbmVkKFBOR19IQVZFX0FTU0VNQkxFUl9SRUFEX0ZJTFRFUl9ST1cpCiAKIC8qIE9wdGltaXplZCBwbmdfcmVhZF9maWx0ZXJfcm93IHJvdXRpbmVzICovCiAKQEAgLTQ5MDQsNiArNDk0OSw4IEBACiAjZGVmaW5lIFVzZU1NWF9wYWV0aCAgMSAgIC8vIEdSUjogIGNvbnZlcnRlZCAyMDAwMDgyOAogCiAgICBpZiAoX21teF9zdXBwb3J0ZWQgPT0gMikgeworICAgICAgIC8qIHRoaXMgc2hvdWxkIGhhdmUgaGFwcGVuZWQgaW4gcG5nX2luaXRfbW14X2ZsYWdzKCkgYWxyZWFkeSAqLworICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJhc21fZmxhZ3MgbWF5IG5vdCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKTsKICAgICAgICBwbmdfbW14X3N1cHBvcnQoKTsKICAgIH0KICNlbmRpZiAvKiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEICovCkBAIC00OTE0LDEzICs0OTYxLDE3IEBACiAgICB7CiAgICAgICBjYXNlIDA6IHNwcmludGYoZmlsbm0sICJub25lIik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMTogc3ByaW50ZihmaWxubSwgInN1Yi0lcyIsICJNTVgiKTsKKyAgICAgIGNhc2UgMTogc3ByaW50ZihmaWxubSwgInN1Yi0lcyIsCisgICAgICAgIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQik/ICJNTVgiIDogIng4NiIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDI6IHNwcmludGYoZmlsbm0sICJ1cC0lcyIsICJNTVgiKTsKKyAgICAgIGNhc2UgMjogc3ByaW50ZihmaWxubSwgInVwLSVzIiwKKyAgICAgICAgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVApPyAiTU1YIiA6ICJ4ODYiKTsKICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOiBzcHJpbnRmKGZpbG5tLCAiYXZnLSVzIiwgIk1NWCIpOworICAgICAgY2FzZSAzOiBzcHJpbnRmKGZpbG5tLCAiYXZnLSVzIiwKKyAgICAgICAgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKT8gIk1NWCIgOiAieDg2Iik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNDogc3ByaW50ZihmaWxubSwgIlBhZXRoLSVzIiwgIk1NWCIpOworICAgICAgY2FzZSA0OiBzcHJpbnRmKGZpbG5tLCAiUGFldGgtJXMiLAorICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCk/ICJNTVgiOiJ4ODYiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogc3ByaW50ZihmaWxubSwgInVua253Iik7CiAgICAgICAgICBicmVhazsKQEAgLTQ5MzksOSArNDk5MCw5IEBACiAKICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6CiAjaWYgZGVmaW5lZChQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVEKQotICAgICAgICAgaWYgKCBfbW14X3N1cHBvcnRlZCAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gUE5HX01NWF9CSVRERVBUSF9USFJFU0hPTERfREVGQVVMVCkgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IFBOR19NTVhfUk9XQllURVNfVEhSRVNIT0xEX0RFRkFVTFQpKQorICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQikgJiYKKyAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCisgICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3N1Yihyb3dfaW5mbywgcm93KTsKICAgICAgICAgIH0KQEAgLTQ5NjQsOSArNTAxNSw5IEBACiAKICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9VUDoKICNpZiBkZWZpbmVkKFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQpCi0gICAgICAgICBpZiAoIF9tbXhfc3VwcG9ydGVkICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBQTkdfTU1YX0JJVERFUFRIX1RIUkVTSE9MRF9ERUZBVUxUKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gUE5HX01NWF9ST1dCWVRFU19USFJFU0hPTERfREVGQVVMVCkpCisgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVApICYmCisgICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgorICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF91cChyb3dfaW5mbywgcm93LCBwcmV2X3Jvdyk7CiAgICAgICAgICB9CkBAIC00OTg4LDkgKzUwMzksOSBAQAogCiAgICAgICBjYXNlIFBOR19GSUxURVJfVkFMVUVfQVZHOgogI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkKLSAgICAgICAgIGlmICggX21teF9zdXBwb3J0ZWQgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBQTkdfTU1YX1JPV0JZVEVTX1RIUkVTSE9MRF9ERUZBVUxUKSkKKyAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpICYmCisgICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgorICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICAgfQpAQCAtNTAyMiw5ICs1MDczLDkgQEAKIAogICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOgogI2lmIGRlZmluZWQoUE5HX0FTU0VNQkxFUl9DT0RFX1NVUFBPUlRFRCkKLSAgICAgICAgIGlmICggX21teF9zdXBwb3J0ZWQgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBQTkdfTU1YX1JPV0JZVEVTX1RIUkVTSE9MRF9ERUZBVUxUKSkKKyAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCkgJiYKKyAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IHBuZ19wdHItPm1teF9iaXRkZXB0aF90aHJlc2hvbGQpICYmCisgICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBwbmdfcHRyLT5tbXhfcm93Ynl0ZXNfdGhyZXNob2xkKSkKICAgICAgICAgIHsKICAgICAgICAgICAgIHBuZ19yZWFkX2ZpbHRlcl9yb3dfbW14X3BhZXRoKHJvd19pbmZvLCByb3csIHByZXZfcm93KTsKICAgICAgICAgIH0KQEAgLTUxNzcsNCArNTIyOCw1IEBACiAgICAgcmV0dXJuIF9tbXhfc3VwcG9ydGVkOwogfQogCisKICNlbmRpZiAvKiBQTkdfVVNFX1BOR0dDQ1JEICovCmRpZmYgLS1naXQgYS9wbmdnZXQuYyBiL3BuZ2dldC5jCmluZGV4IGM1YTY0NDQuLmRmMGQ2MzYgMTAwNjQ0Ci0tLSBhL3BuZ2dldC5jCisrKyBiL3BuZ2dldC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdnZXQuYyAtIHJldHJpZXZhbCBvZiB2YWx1ZXMgZnJvbSBpbmZvIHN0cnVjdAogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMTM3LDcgKzEzNyw3IEBACiAjaWYgZGVmaW5lZChQTkdfcEhZc19TVVBQT1JURUQpCiAgICBpZiAoaW5mb19wdHItPnZhbGlkICYgUE5HX0lORk9fcEhZcykKICAgIHsKLSAgICAgIHBuZ19kZWJ1ZzEoMSwgImluICVzIHJldHJpZXZhbCBmdW5jdGlvblxuIiwgInBuZ19nZXRfeV9waXhlbHNfcGVyX21ldGVyIik7CisgICAgICAgcG5nX2RlYnVnMSgxLCAiaW4gJXMgcmV0cmlldmFsIGZ1bmN0aW9uXG4iLCAicG5nX2dldF95X3BpeGVsc19wZXJfbWV0ZXIiKTsKICAgICAgIGlmKGluZm9fcHRyLT5waHlzX3VuaXRfdHlwZSAhPSBQTkdfUkVTT0xVVElPTl9NRVRFUikKICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgZWxzZSByZXR1cm4gKGluZm9fcHRyLT55X3BpeGVsc19wZXJfdW5pdCk7CkBAIC0yOTcsNyArMjk3LDcgQEAKICAgICAgKi4wMDAwMzkzNyk7CiB9CiAKLSNpZiBkZWZpbmVkKFBOR19wSFlzX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19SRUFEX3BIWXNfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3BIWXNfZHBpKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgIHBuZ191aW50XzMyICpyZXNfeCwgcG5nX3VpbnRfMzIgKnJlc195LCBpbnQgKnVuaXRfdHlwZSkKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgfQogICAgcmV0dXJuIChyZXR2YWwpOwogfQotI2VuZGlmIC8qIFBOR19wSFlzX1NVUFBPUlRFRCAqLworI2VuZGlmIC8qIFBOR19SRUFEX3BIWXNfU1VQUE9SVEVEICovCiAjZW5kaWYgIC8qIFBOR19JTkNIX0NPTlZFUlNJT05TICYmIFBOR19GTE9BVElOR19QT0lOVF9TVVBQT1JURUQgKi8KIAogLyogcG5nX2dldF9jaGFubmVscyByZWFsbHkgYmVsb25ncyBpbiBoZXJlLCB0b28sIGJ1dCBpdCdzIGJlZW4gYXJvdW5kIGxvbmdlciAqLwpAQCAtMzU1LDcgKzM1NSw3IEBACiAgICAgICByZXR1cm4gKE5VTEwpOwogfQogCi0jaWYgZGVmaW5lZChQTkdfYktHRF9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9iS0dEX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9iS0dEKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgIHBuZ19jb2xvcl8xNnAgKmJhY2tncm91bmQpCkBAIC0zNzEsNyArMzcxLDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfY0hSTV9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9jSFJNX1NVUFBPUlRFRCkKICNpZmRlZiBQTkdfRkxPQVRJTkdfUE9JTlRfU1VQUE9SVEVECiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfY0hSTShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCkBAIC00MzUsNyArNDM1LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19nQU1BX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19SRUFEX2dBTUFfU1VQUE9SVEVEKQogI2lmZGVmIFBOR19GTE9BVElOR19QT0lOVF9TVVBQT1JURUQKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9nQU1BKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgZG91YmxlICpmaWxlX2dhbW1hKQpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfc1JHQl9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9zUkdCX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9zUkdCKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgaW50ICpmaWxlX3NyZ2JfaW50ZW50KQogewpAQCAtNDgyLDcgKzQ4Miw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX2lDQ1BfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1JFQURfaUNDUF9TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfaUNDUChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCiAgICAgICAgICAgICAgcG5nX2NoYXJwcCBuYW1lLCBpbnQgKmNvbXByZXNzaW9uX3R5cGUsCkBAIC01MDQsNyArNTA0LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfc1BMVF9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9zUExUX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9zUExUKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgICAgICAgICAgICBwbmdfc1BMVF90cHAgc3BhbGV0dGVzKQpAQCAtNTE1LDcgKzUxNSw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX2hJU1RfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1JFQURfaElTVF9TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfaElTVChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzE2cCAqaGlzdCkKIHsKQEAgLTU3Niw3ICs1NzYsNyBAQAogICAgcmV0dXJuICgwKTsKIH0KIAotI2lmIGRlZmluZWQoUE5HX29GRnNfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1JFQURfb0ZGc19TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfb0ZGcyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCiAgICBwbmdfaW50XzMyICpvZmZzZXRfeCwgcG5nX2ludF8zMiAqb2Zmc2V0X3ksIGludCAqdW5pdF90eXBlKQpAQCAtNTk0LDcgKzU5NCw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX3BDQUxfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1JFQURfcENBTF9TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfcENBTChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCiAgICBwbmdfY2hhcnAgKnB1cnBvc2UsIHBuZ19pbnRfMzIgKlgwLCBwbmdfaW50XzMyICpYMSwgaW50ICp0eXBlLCBpbnQgKm5wYXJhbXMsCkBAIC02MTgsNyArNjE4LDcgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfc0NBTF9TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9zQ0FMX1NVUFBPUlRFRCkgfHwgZGVmaW5lZChQTkdfV1JJVEVfc0NBTF9TVVBQT1JURUQpCiAjaWZkZWYgUE5HX0ZMT0FUSU5HX1BPSU5UX1NVUFBPUlRFRAogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3NDQUwocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLApAQCAtNjU0LDcgKzY1NCw3IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQTkdfcEhZc19TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9wSFlzX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF9wSFlzKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwKICAgIHBuZ191aW50XzMyICpyZXNfeCwgcG5nX3VpbnRfMzIgKnJlc195LCBpbnQgKnVuaXRfdHlwZSkKQEAgLTcwMSw3ICs3MDEsNyBAQAogICAgcmV0dXJuICgwKTsKIH0KIAotI2lmIGRlZmluZWQoUE5HX3NCSVRfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1JFQURfc0JJVF9TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfc0JJVChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ19jb2xvcl84cCAqc2lnX2JpdCkKIHsKQEAgLTcxNiw3ICs3MTYsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19URVhUX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19SRUFEX1RFWFRfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3RleHQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdGV4dHAgKnRleHRfcHRyLAogICAgaW50ICpudW1fdGV4dCkKQEAgLTczOCw3ICs3MzgsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR190SU1FX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19SRUFEX3RJTUVfU1VQUE9SVEVEKQogcG5nX3VpbnRfMzIgUE5HQVBJCiBwbmdfZ2V0X3RJTUUocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdGltZXAgKm1vZF90aW1lKQogewpAQCAtNzUzLDcgKzc1Myw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX3RSTlNfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1JFQURfdFJOU19TVVBQT1JURUQpCiBwbmdfdWludF8zMiBQTkdBUEkKIHBuZ19nZXRfdFJOUyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCiAgICBwbmdfYnl0ZXAgKnRyYW5zLCBpbnQgKm51bV90cmFucywgcG5nX2NvbG9yXzE2cCAqdHJhbnNfdmFsdWVzKQpAQCAtNzkyLDcgKzc5Miw3IEBACiB9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUE5HX1VOS05PV05fQ0hVTktTX1NVUFBPUlRFRCkKKyNpZiBkZWZpbmVkKFBOR19SRUFEX1VOS05PV05fQ0hVTktTX1NVUFBPUlRFRCkKIHBuZ191aW50XzMyIFBOR0FQSQogcG5nX2dldF91bmtub3duX2NodW5rcyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsCiAgICAgICAgICAgICAgcG5nX3Vua25vd25fY2h1bmtwcCB1bmtub3ducykKQEAgLTgxMSw3ICs4MTEsNyBAQAogfQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBOR19VU0VSX0NIVU5LU19TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCiBwbmdfdm9pZHAgUE5HQVBJCiBwbmdfZ2V0X3VzZXJfY2h1bmtfcHRyKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CmRpZmYgLS1naXQgYS9wbmdtZW0uYyBiL3BuZ21lbS5jCmluZGV4IDNkMDg2YmEuLjE5MzY0YzMgMTAwNjQ0Ci0tLSBhL3BuZ21lbS5jCisrKyBiL3BuZ21lbS5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdtZW0uYyAtIHN0dWIgZnVuY3Rpb25zIGZvciBtZW1vcnkgYWxsb2NhdGlvbgogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMjcsMTIgKzI3LDEyIEBACiBwbmdfY3JlYXRlX3N0cnVjdChpbnQgdHlwZSkKIHsKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECi0gICByZXR1cm4gKHBuZ19jcmVhdGVfc3RydWN0XzIodHlwZSwgTlVMTCwgTlVMTCkpOworICAgcmV0dXJuIChwbmdfY3JlYXRlX3N0cnVjdF8yKHR5cGUsIE5VTEwpKTsKIH0KIAogLyogQWx0ZXJuYXRlIHZlcnNpb24gb2YgcG5nX2NyZWF0ZV9zdHJ1Y3QsIGZvciB1c2Ugd2l0aCB1c2VyLWRlZmluZWQgbWFsbG9jLiAqLwogcG5nX3ZvaWRwIC8qIFBSSVZBVEUgKi8KLXBuZ19jcmVhdGVfc3RydWN0XzIoaW50IHR5cGUsIHBuZ19tYWxsb2NfcHRyIG1hbGxvY19mbiwgcG5nX3ZvaWRwIG1lbV9wdHIpCitwbmdfY3JlYXRlX3N0cnVjdF8yKGludCB0eXBlLCBwbmdfbWFsbG9jX3B0ciBtYWxsb2NfZm4pCiB7CiAjZW5kaWYgLyogUE5HX1VTRVJfTUVNX1NVUFBPUlRFRCAqLwogICAgcG5nX3NpemVfdCBzaXplOwpAQCAtNDgsMTggKzQ4LDkgQEAKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECiAgICBpZihtYWxsb2NfZm4gIT0gTlVMTCkKICAgIHsKLSAgICAgIGlmIChtZW1fcHRyICE9IE5VTEwpCi0gICAgICB7Ci0gICAgICAgICBwbmdfc3RydWN0IGR1bW15X3N0cnVjdDsKLSAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZ19wdHIgPSAmZHVtbXlfc3RydWN0OwotICAgICAgICAgcG5nX3B0ci0+bWVtX3B0cj1tZW1fcHRyOwotICAgICAgICAgc3RydWN0X3B0ciA9ICgqKG1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpOwotICAgICAgfQotICAgICAgZWxzZQotICAgICAgICAgc3RydWN0X3B0ciA9ICgqKG1hbGxvY19mbikpKE5VTEwsIHNpemUpOwotICAgICAgaWYgKHN0cnVjdF9wdHIgIT0gTlVMTCkKKyAgICAgIGlmICgoc3RydWN0X3B0ciA9ICgqKG1hbGxvY19mbikpKE5VTEwsIHNpemUpKSAhPSBOVUxMKQogICAgICAgICAgcG5nX21lbXNldChzdHJ1Y3RfcHRyLCAwLCBzaXplKTsKLSAgICAgIHJldHVybiAoc3RydWN0X3B0cik7CisgICAgICAgICByZXR1cm4gKHN0cnVjdF9wdHIpOwogICAgfQogI2VuZGlmIC8qIFBOR19VU0VSX01FTV9TVVBQT1JURUQgKi8KICAgIGlmICgoc3RydWN0X3B0ciA9IChwbmdfdm9pZHApZmFybWFsbG9jKHNpemUpKSAhPSBOVUxMKQpAQCAtNzUsMTMgKzY2LDEyIEBACiBwbmdfZGVzdHJveV9zdHJ1Y3QocG5nX3ZvaWRwIHN0cnVjdF9wdHIpCiB7CiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAotICAgcG5nX2Rlc3Ryb3lfc3RydWN0XzIoc3RydWN0X3B0ciwgKHBuZ19mcmVlX3B0cilOVUxMLCAocG5nX3ZvaWRwKU5VTEwpOworICAgcG5nX2Rlc3Ryb3lfc3RydWN0XzIoc3RydWN0X3B0ciwgKHBuZ19mcmVlX3B0cilOVUxMKTsKIH0KIAogLyogRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgcG5nX2NyZWF0ZV9zdHJ1Y3QoKSBjYWxsICovCiB2b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19kZXN0cm95X3N0cnVjdF8yKHBuZ192b2lkcCBzdHJ1Y3RfcHRyLCBwbmdfZnJlZV9wdHIgZnJlZV9mbiwKLSAgICBwbmdfdm9pZHAgbWVtX3B0cikKK3BuZ19kZXN0cm95X3N0cnVjdF8yKHBuZ192b2lkcCBzdHJ1Y3RfcHRyLCBwbmdfZnJlZV9wdHIgZnJlZV9mbikKIHsKICNlbmRpZgogICAgaWYgKHN0cnVjdF9wdHIgIT0gTlVMTCkKQEAgLTkxLDcgKzgxLDYgQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19zdHJ1Y3QgZHVtbXlfc3RydWN0OwogICAgICAgICAgcG5nX3N0cnVjdHAgcG5nX3B0ciA9ICZkdW1teV9zdHJ1Y3Q7Ci0gICAgICAgICBwbmdfcHRyLT5tZW1fcHRyPW1lbV9wdHI7CiAgICAgICAgICAoKihmcmVlX2ZuKSkocG5nX3B0ciwgc3RydWN0X3B0cik7CiAgICAgICAgICByZXR1cm47CiAgICAgICB9CkBAIC0xMzAsMTIgKzExOSw3IEBACiAKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECiAgICBpZihwbmdfcHRyLT5tYWxsb2NfZm4gIT0gTlVMTCkKLSAgIHsKLSAgICAgICByZXQgPSAoKHBuZ192b2lkcCkoKihwbmdfcHRyLT5tYWxsb2NfZm4pKShwbmdfcHRyLCBzaXplKSk7Ci0gICAgICAgaWYgKHJldCA9PSBOVUxMKQotICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIG1lbW9yeSEiKTsKLSAgICAgICByZXR1cm4gKHJldCk7Ci0gICB9CisgICAgICAgcmV0dXJuICgocG5nX3ZvaWRwKSgqKHBuZ19wdHItPm1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpKTsKICAgIGVsc2UKICAgICAgICByZXR1cm4gcG5nX21hbGxvY19kZWZhdWx0KHBuZ19wdHIsIHNpemUpOwogfQpAQCAtMjk3LDE0ICsyODEsMTQgQEAKIHBuZ19jcmVhdGVfc3RydWN0KGludCB0eXBlKQogewogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLSAgIHJldHVybiAocG5nX2NyZWF0ZV9zdHJ1Y3RfMih0eXBlLCBOVUxMLCBOVUxMKSk7CisgICByZXR1cm4gKHBuZ19jcmVhdGVfc3RydWN0XzIodHlwZSwgTlVMTCkpOwogfQogCiAvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIGEgcG5nX3N0cnVjdCBvciBhIHBuZ19pbmZvLiAgVGhlIG1hbGxvYyBhbmQKICAgIG1lbXNldCBjYW4gYmUgcmVwbGFjZWQgYnkgYSBzaW5nbGUgY2FsbCB0byBjYWxsb2MoKSBpZiB0aGlzIGlzIHRob3VnaHQKICAgIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugbm90aWNhYmx5LiovCiBwbmdfdm9pZHAgLyogUFJJVkFURSAqLwotcG5nX2NyZWF0ZV9zdHJ1Y3RfMihpbnQgdHlwZSwgcG5nX21hbGxvY19wdHIgbWFsbG9jX2ZuLCBwbmdfdm9pZHAgbWVtX3B0cikKK3BuZ19jcmVhdGVfc3RydWN0XzIoaW50IHR5cGUsIHBuZ19tYWxsb2NfcHRyIG1hbGxvY19mbikKIHsKICNlbmRpZiAvKiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVEICovCiAgICBwbmdfc2l6ZV90IHNpemU7CkBAIC0zMjAsMTYgKzMwNCw3IEBACiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYobWFsbG9jX2ZuICE9IE5VTEwpCiAgICB7Ci0gICAgICBpZiAobWVtX3B0ciAhPSBOVUxMKQotICAgICAgewotICAgICAgICAgcG5nX3N0cnVjdCBkdW1teV9zdHJ1Y3Q7Ci0gICAgICAgICBwbmdfc3RydWN0cCBwbmdfcHRyID0gJmR1bW15X3N0cnVjdDsKLSAgICAgICAgIHBuZ19wdHItPm1lbV9wdHI9bWVtX3B0cjsKLSAgICAgICAgIHN0cnVjdF9wdHIgPSAoKihtYWxsb2NfZm4pKShwbmdfcHRyLCBzaXplKTsKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgIHN0cnVjdF9wdHIgPSAoKihtYWxsb2NfZm4pKShOVUxMLCBzaXplKTsKLSAgICAgIGlmIChzdHJ1Y3RfcHRyICE9IE5VTEwpCisgICAgICBpZiAoKHN0cnVjdF9wdHIgPSAoKihtYWxsb2NfZm4pKShOVUxMLCBzaXplKSkgIT0gTlVMTCkKICAgICAgICAgIHBuZ19tZW1zZXQoc3RydWN0X3B0ciwgMCwgc2l6ZSk7CiAgICAgICByZXR1cm4gKHN0cnVjdF9wdHIpOwogICAgfQpAQCAtMzU3LDEzICszMzIsMTIgQEAKIHBuZ19kZXN0cm95X3N0cnVjdChwbmdfdm9pZHAgc3RydWN0X3B0cikKIHsKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECi0gICBwbmdfZGVzdHJveV9zdHJ1Y3RfMihzdHJ1Y3RfcHRyLCAocG5nX2ZyZWVfcHRyKU5VTEwsIChwbmdfdm9pZHApTlVMTCk7CisgICBwbmdfZGVzdHJveV9zdHJ1Y3RfMihzdHJ1Y3RfcHRyLCAocG5nX2ZyZWVfcHRyKU5VTEwpOwogfQogCiAvKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgYSBwbmdfY3JlYXRlX3N0cnVjdCgpIGNhbGwgKi8KIHZvaWQgLyogUFJJVkFURSAqLwotcG5nX2Rlc3Ryb3lfc3RydWN0XzIocG5nX3ZvaWRwIHN0cnVjdF9wdHIsIHBuZ19mcmVlX3B0ciBmcmVlX2ZuLAotICAgIHBuZ192b2lkcCBtZW1fcHRyKQorcG5nX2Rlc3Ryb3lfc3RydWN0XzIocG5nX3ZvaWRwIHN0cnVjdF9wdHIsIHBuZ19mcmVlX3B0ciBmcmVlX2ZuKQogewogI2VuZGlmIC8qIFBOR19VU0VSX01FTV9TVVBQT1JURUQgKi8KICAgIGlmIChzdHJ1Y3RfcHRyICE9IE5VTEwpCkBAIC0zNzMsNyArMzQ3LDYgQEAKICAgICAgIHsKICAgICAgICAgIHBuZ19zdHJ1Y3QgZHVtbXlfc3RydWN0OwogICAgICAgICAgcG5nX3N0cnVjdHAgcG5nX3B0ciA9ICZkdW1teV9zdHJ1Y3Q7Ci0gICAgICAgICBwbmdfcHRyLT5tZW1fcHRyPW1lbV9wdHI7CiAgICAgICAgICAoKihmcmVlX2ZuKSkocG5nX3B0ciwgc3RydWN0X3B0cik7CiAgICAgICAgICByZXR1cm47CiAgICAgICB9CkBAIC00MDAsMTggKzM3MywxNSBAQAogcG5nX3ZvaWRwIFBOR0FQSQogcG5nX21hbGxvYyhwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfdWludF8zMiBzaXplKQogeworI2lmbmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECiAgICBwbmdfdm9pZHAgcmV0OworI2VuZGlmCiAgICBpZiAocG5nX3B0ciA9PSBOVUxMIHx8IHNpemUgPT0gMCkKICAgICAgIHJldHVybiAoKHBuZ192b2lkcClOVUxMKTsKIAogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKICAgIGlmKHBuZ19wdHItPm1hbGxvY19mbiAhPSBOVUxMKQotICAgewotICAgICAgIHJldCA9ICgocG5nX3ZvaWRwKSgqKHBuZ19wdHItPm1hbGxvY19mbikpKHBuZ19wdHIsIHNpemUpKTsKLSAgICAgICBpZiAocmV0ID09IE5VTEwpCi0gICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgTWVtb3J5ISIpOwotICAgICAgIHJldHVybiAocmV0KTsKLSAgIH0KKyAgICAgICByZXR1cm4gKChwbmdfdm9pZHApKCoocG5nX3B0ci0+bWFsbG9jX2ZuKSkocG5nX3B0ciwgc2l6ZSkpOwogICAgZWxzZQogICAgICAgIHJldHVybiAocG5nX21hbGxvY19kZWZhdWx0KHBuZ19wdHIsIHNpemUpKTsKIH0KQEAgLTQzNyw3ICs0MDcsOSBAQAogI2VuZGlmCiAKICAgIGlmIChyZXQgPT0gTlVMTCkKKyAgIHsKICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIE1lbW9yeSIpOworICAgfQogCiAgICByZXR1cm4gKHJldCk7CiB9CmRpZmYgLS1naXQgYS9wbmdwcmVhZC5jIGIvcG5ncHJlYWQuYwppbmRleCAzMDlmYzI4Li41MGI3NGNlIDEwMDY0NAotLS0gYS9wbmdwcmVhZC5jCisrKyBiL3BuZ3ByZWFkLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3ByZWFkLmMgLSByZWFkIGEgcG5nIGZpbGUgaW4gcHVzaCBtb2RlCiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC03OTYsMTkgKzc5Niw2IEBACiAgICAgICAgICAgICAgICAgICBwbmdfcmVhZF9wdXNoX2ZpbmlzaF9yb3cocG5nX3B0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0JICAgIGlmIChwbmdfcHRyLT5wYXNzID09IDQgJiYgcG5nX3B0ci0+aGVpZ2h0IDw9IDQpCi0JICAgIHsKLQkgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyICYmIHBuZ19wdHItPnBhc3MgPT0gNDsgaSsrKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICBwbmdfcHVzaF9oYXZlX3JvdyhwbmdfcHRyLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICBwbmdfcmVhZF9wdXNoX2ZpbmlzaF9yb3cocG5nX3B0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHBuZ19wdHItPnBhc3MgPT0gNiAmJiBwbmdfcHRyLT5oZWlnaHQgPD0gNCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwbmdfcHVzaF9oYXZlX3JvdyhwbmdfcHRyLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBwbmdfcmVhZF9wdXNoX2ZpbmlzaF9yb3cocG5nX3B0cik7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgMToKQEAgLTk5NSwyMCArOTgyLDE5IEBACiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX3RFWHRfU1VQUE9SVEVEKQogdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcHVzaF9oYW5kbGVfdEVYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyCi0gICBsZW5ndGgpCitwbmdfcHVzaF9oYW5kbGVfdEVYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIGxlbmd0aCkKIHsKICAgIGlmICghKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JSERSKSB8fCAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lFTkQpKQogICAgICAgewogICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgcGxhY2UgdEVYdCIpOwogICAgICAgICAgLyogdG8gcXVpZXQgc29tZSBjb21waWxlciB3YXJuaW5ncyAqLwotICAgICAgICAgaWYoaW5mb19wdHIgPT0gTlVMTCkgcmV0dXJuOworICAgICAgICAgaW5mb19wdHIgPSBpbmZvX3B0cjsKICAgICAgIH0KIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwogICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSAwOyAgLyogVGhpcyBtYXkgbm90IGJlIG5lY2Vzc2FyeSAqLwogCi0gICBpZiAobGVuZ3RoID4gKHBuZ191aW50XzMyKTY1NTM1TCkgLyogQ2FuJ3QgaG9sZCBlbnRpcmUgc3RyaW5nIGluIG1lbW9yeSAqLworICAgaWYgKGxlbmd0aCA+IChwbmdfdWludF8zMik2NTUzNUwpIC8qIENhbid0IGhvbGQgdGhlIGVudGlyZSBzdHJpbmcgaW4gbWVtb3J5ICovCiAgICB7CiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAidEVYdCBjaHVuayB0b28gbGFyZ2UgdG8gZml0IGluIG1lbW9yeSIpOwogICAgICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSBsZW5ndGggLSAocG5nX3VpbnRfMzIpNjU1MzVMOwpAQCAtMTA4NywxNCArMTA3MywxMyBAQAogCiAjaWYgZGVmaW5lZChQTkdfUkVBRF96VFh0X1NVUFBPUlRFRCkKIHZvaWQgLyogUFJJVkFURSAqLwotcG5nX3B1c2hfaGFuZGxlX3pUWHQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMgotICAgbGVuZ3RoKQorcG5nX3B1c2hfaGFuZGxlX3pUWHQocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfdWludF8zMiBsZW5ndGgpCiB7CiAgICBpZiAoIShwbmdfcHRyLT5tb2RlICYgUE5HX0hBVkVfSUhEUikgfHwgKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JRU5EKSkKICAgICAgIHsKICAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiT3V0IG9mIHBsYWNlIHpUWHQiKTsKICAgICAgICAgIC8qIHRvIHF1aWV0IHNvbWUgY29tcGlsZXIgd2FybmluZ3MgKi8KLSAgICAgICAgIGlmKGluZm9fcHRyID09IE5VTEwpIHJldHVybjsKKyAgICAgICAgIGluZm9fcHRyID0gaW5mb19wdHI7CiAgICAgICB9CiAKICNpZmRlZiBQTkdfTUFYX01BTExPQ182NEsKQEAgLTEyMDAsOCArMTE4NSw4IEBACiAgICAgICAgICAgICBpZiAodGV4dCA9PSBOVUxMKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGV4dCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLAotICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dAotICAgICAgICAgICAgICAgICAgICAgKyBrZXlfc2l6ZSArIDEpKTsKKyAgICAgICAgICAgICAgICAgIChwbmdfdWludF8zMikocG5nX3B0ci0+emJ1Zl9zaXplIC0gcG5nX3B0ci0+enN0cmVhbS5hdmFpbF9vdXQgKworICAgICAgICAgICAgICAgICAgICAga2V5X3NpemUgKyAxKSk7CiAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBrZXlfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKICAgICAgICAgICAgICAgICAgIHBuZ19wdHItPnpidWZfc2l6ZSAtIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0KTsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkodGV4dCwga2V5LCBrZXlfc2l6ZSk7CkBAIC0xMjcyLDIwICsxMjU3LDE5IEBACiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX2lUWHRfU1VQUE9SVEVEKQogdm9pZCAvKiBQUklWQVRFICovCi1wbmdfcHVzaF9oYW5kbGVfaVRYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyCi0gICBsZW5ndGgpCitwbmdfcHVzaF9oYW5kbGVfaVRYdChwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfaW5mb3AgaW5mb19wdHIsIHBuZ191aW50XzMyIGxlbmd0aCkKIHsKICAgIGlmICghKHBuZ19wdHItPm1vZGUgJiBQTkdfSEFWRV9JSERSKSB8fCAocG5nX3B0ci0+bW9kZSAmIFBOR19IQVZFX0lFTkQpKQogICAgICAgewogICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJPdXQgb2YgcGxhY2UgaVRYdCIpOwogICAgICAgICAgLyogdG8gcXVpZXQgc29tZSBjb21waWxlciB3YXJuaW5ncyAqLwotICAgICAgICAgaWYoaW5mb19wdHIgPT0gTlVMTCkgcmV0dXJuOworICAgICAgICAgaW5mb19wdHIgPSBpbmZvX3B0cjsKICAgICAgIH0KIAogI2lmZGVmIFBOR19NQVhfTUFMTE9DXzY0SwogICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSAwOyAgLyogVGhpcyBtYXkgbm90IGJlIG5lY2Vzc2FyeSAqLwogCi0gICBpZiAobGVuZ3RoID4gKHBuZ191aW50XzMyKTY1NTM1TCkgLyogQ2FuJ3QgaG9sZCBlbnRpcmUgc3RyaW5nIGluIG1lbW9yeSAqLworICAgaWYgKGxlbmd0aCA+IChwbmdfdWludF8zMik2NTUzNUwpIC8qIENhbid0IGhvbGQgdGhlIGVudGlyZSBzdHJpbmcgaW4gbWVtb3J5ICovCiAgICB7CiAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiaVRYdCBjaHVuayB0b28gbGFyZ2UgdG8gZml0IGluIG1lbW9yeSIpOwogICAgICAgcG5nX3B0ci0+c2tpcF9sZW5ndGggPSBsZW5ndGggLSAocG5nX3VpbnRfMzIpNjU1MzVMOwpAQCAtMTM4Myw4ICsxMzY3LDcgQEAKICAqIG5hbWUgb3IgYSBjcml0aWNhbCBjaHVuayksIHRoZSBjaHVuayBpcyAoY3VycmVudGx5KSBzaWxlbnRseSBpZ25vcmVkLgogICovCiB2b2lkIC8qIFBSSVZBVEUgKi8KLXBuZ19wdXNoX2hhbmRsZV91bmtub3duKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIKLSAgIGxlbmd0aCkKK3BuZ19wdXNoX2hhbmRsZV91bmtub3duKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3VpbnRfMzIgbGVuZ3RoKQogewogICAgcG5nX3VpbnRfMzIgc2tpcD0wOwogICAgcG5nX2NoZWNrX2NodW5rX25hbWUocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CkBAIC0xMzk1LDE1ICsxMzc4LDE0IEBACiAgICAgICBpZihwbmdfaGFuZGxlX2FzX3Vua25vd24ocG5nX3B0ciwgcG5nX3B0ci0+Y2h1bmtfbmFtZSkgIT0KICAgICAgICAgICAgSEFORExFX0NIVU5LX0FMV0FZUwogI2lmIGRlZmluZWQoUE5HX1JFQURfVVNFUl9DSFVOS1NfU1VQUE9SVEVEKQotICAgICAgICAgICAmJiBwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gPT0gTlVMTAorICAgICAgICAgICAmJiBwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gPT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMCiAjZW5kaWYKICAgICAgICAgICkKICNlbmRpZgogICAgICAgICAgcG5nX2NodW5rX2Vycm9yKHBuZ19wdHIsICJ1bmtub3duIGNyaXRpY2FsIGNodW5rIik7CiAKLSAgICAgIC8qIHRvIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVudXNlZCBpbmZvX3B0ciAqLwotICAgICAgaWYgKGluZm9fcHRyID09IE5VTEwpCi0gICAgICAgICByZXR1cm47CisgICAgICAgICAvKiB0byBxdWlldCBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1bnVzZWQgaW5mb19wdHIgKi8KKyAgICAgICAgIGluZm9fcHRyID0gaW5mb19wdHI7CiAgICB9CiAKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VOS05PV05fQ0hVTktTX1NVUFBPUlRFRCkKQEAgLTE0MjAsMTIgKzE0MDIsMTIgQEAKICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgIHBuZ19zdHJjcHkoKHBuZ19jaGFycCljaHVuay5uYW1lLCAocG5nX2NoYXJwKXBuZ19wdHItPmNodW5rX25hbWUpOworICAgICAgIHN0cmNweSgocG5nX2NoYXJwKWNodW5rLm5hbWUsIChwbmdfY2hhcnApcG5nX3B0ci0+Y2h1bmtfbmFtZSk7CiAgICAgICAgY2h1bmsuZGF0YSA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwogICAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCBjaHVuay5kYXRhLCBsZW5ndGgpOwogICAgICAgIGNodW5rLnNpemUgPSBsZW5ndGg7CiAjaWYgZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCi0gICAgICAgaWYocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuICE9IE5VTEwpCisgICAgICAgaWYocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuICE9IChwbmdfdXNlcl9jaHVua19wdHIpTlVMTCkKICAgICAgICB7CiAgICAgICAgICAgLyogY2FsbGJhY2sgdG8gdXNlciB1bmtub3duIGNodW5rIGhhbmRsZXIgKi8KICAgICAgICAgICBpZiAoKCoocG5nX3B0ci0+cmVhZF91c2VyX2NodW5rX2ZuKSkgKHBuZ19wdHIsICZjaHVuaykgPD0gMCkKZGlmZiAtLWdpdCBhL3BuZ3JlYWQuYyBiL3BuZ3JlYWQuYwppbmRleCBmNDU2N2M0Li4xNjM0NDk0IDEwMDY0NAotLS0gYS9wbmdyZWFkLmMKKysrIGIvcG5ncmVhZC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdyZWFkLmMgLSByZWFkIGEgUE5HIGZpbGUKICAqCi0gKiBsaWJwbmcgMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTQ2LDcgKzQ2LDcgQEAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdFxuIik7CiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgaWYgKChwbmdfcHRyID0gKHBuZ19zdHJ1Y3RwKXBuZ19jcmVhdGVfc3RydWN0XzIoUE5HX1NUUlVDVF9QTkcsCi0gICAgICAocG5nX21hbGxvY19wdHIpbWFsbG9jX2ZuLCAocG5nX3ZvaWRwKW1lbV9wdHIpKSA9PSBOVUxMKQorICAgICAgKHBuZ19tYWxsb2NfcHRyKW1hbGxvY19mbikpID09IE5VTEwpCiAjZWxzZQogICAgaWYgKChwbmdfcHRyID0gKHBuZ19zdHJ1Y3RwKXBuZ19jcmVhdGVfc3RydWN0KFBOR19TVFJVQ1RfUE5HKSkgPT0gTlVMTCkKICNlbmRpZgpAQCAtNTQsNiArNTQsMTAgQEAKICAgICAgIHJldHVybiAocG5nX3N0cnVjdHApTlVMTDsKICAgIH0KIAorI2lmZGVmIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQKKyAgIHBuZ19pbml0X21teF9mbGFncyhwbmdfcHRyKTsgICAvKiAxLjIuMCBhZGRpdGlvbiAqLworI2VuZGlmCisKICNpZmRlZiBQTkdfU0VUSk1QX1NVUFBPUlRFRAogI2lmZGVmIFVTRV9GQVJfS0VZV09SRAogICAgaWYgKHNldGptcChqbXBidWYpKQpAQCAtOTIsNyArOTYsNiBAQAogICAgICAgKiBvbmx5IGNoZWNrIHRoZSBmaXJzdCBkaWdpdC4KICAgICAgICovCiAgICAgIGlmICh1c2VyX3BuZ192ZXIgPT0gTlVMTCB8fCB1c2VyX3BuZ192ZXJbMF0gIT0gcG5nX2xpYnBuZ192ZXJbMF0gfHwKLSAgICAgICAgICh1c2VyX3BuZ192ZXJbMF0gPT0gJzEnICYmIHVzZXJfcG5nX3ZlclsyXSAhPSBwbmdfbGlicG5nX3ZlclsyXSkgfHwKICAgICAgICAgICh1c2VyX3BuZ192ZXJbMF0gPT0gJzAnICYmIHVzZXJfcG5nX3ZlclsyXSA8ICc5JykpCiAgICAgIHsKICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsCkBAIC0xMDAsMTcgKzEwMywxNSBAQAogICAgICB9CiAKICAgICAgLyogTGlicG5nIDEuMC42IHdhcyBub3QgYmluYXJ5IGNvbXBhdGlibGUsIGR1ZSB0byBpbnNlcnRpb24gb2YgdGhlCi0gICAgICAgIGluZm9fcHRyLT5mcmVlX21lIG1lbWJlci4gIExpYnBuZy0xLjAuMSBhbmQgZWFybGllciB3ZXJlIG5vdAotICAgICAgICBjb21wYXRpYmxlIGR1ZSB0byBpbnNlcnRpb24gb2YgdGhlIHVzZXIgdHJhbnNmb3JtIGZ1bmN0aW9uLiBOb3RlCi0gICAgICAgIHRvIG1haW50YWluZXI6IHRoaXMgdGVzdCBjYW4gYmUgcmVtb3ZlZCBmcm9tIHZlcnNpb24gMS4yLjAgYW5kCi0gICAgICAgIGJleW9uZCBiZWNhdXNlIHRoZSBwcmV2aW91cyB0ZXN0IHdvdWxkIGhhdmUgYWxyZWFkeSByZWplY3RlZCBpdC4gKi8KKyAgICAgICAgaW5mb19wdHItPmZyZWVfbWUgbWVtYmVyLiAgTm90ZSB0byBtYWludGFpbmVyOiB0aGlzIHRlc3QgY2FuIGJlCisgICAgICAgIHJlbW92ZWQgZnJvbSB2ZXJzaW9uIDIuMC4wIGFuZCBiZXlvbmQgYmVjYXVzZSB0aGUgcHJldmlvdXMgdGVzdAorICAgICAgICB3b3VsZCBoYXZlIGFscmVhZHkgcmVqZWN0ZWQgaXQuICovCiAKLSAgICAgaWYgKHVzZXJfcG5nX3ZlclswXSA9PSAnMScgJiYgdXNlcl9wbmdfdmVyWzJdID09ICcwJyAmJgotICAgICAgICAgKHVzZXJfcG5nX3Zlcls0XSA8ICAnMicgfHwgdXNlcl9wbmdfdmVyWzRdID09ICc2JykgJiYKLSAgICAgICAgIHVzZXJfcG5nX3Zlcls1XSA9PSAnXDAnKQorICAgICBpZiAodXNlcl9wbmdfdmVyWzRdID09ICc2JyAmJiB1c2VyX3BuZ192ZXJbMl0gPT0gJzAnICYmCisgICAgICAgICB1c2VyX3BuZ192ZXJbMF0gPT0gJzEnICYmIHVzZXJfcG5nX3Zlcls1XSA9PSAnXDAnKQogICAgICB7CiAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLAotICAgICAgICAiQXBwbGljYXRpb24gbXVzdCBiZSByZWNvbXBpbGVkOyB2ZXJzaW9ucyA8PSAxLjAuNiB3ZXJlIGluY29tcGF0aWJsZSIpOworICAgICAgICAgICAiQXBwbGljYXRpb24gbXVzdCBiZSByZWNvbXBpbGVkOyB2ZXJzaW9uIDEuMC42IHdhcyBpbmNvbXBhdGlibGUiKTsKICAgICAgfQogICAgfQogCkBAIC0xNDcsNDIgKzE0OCwxOCBAQAogcG5nX3JlYWRfaW5pdChwbmdfc3RydWN0cCBwbmdfcHRyKQogewogICAgLyogV2Ugb25seSBjb21lIGhlcmUgdmlhIHByZS0xLjAuNy1jb21waWxlZCBhcHBsaWNhdGlvbnMgKi8KLSAgIHBuZ19yZWFkX2luaXRfMihwbmdfcHRyLCAiMS4wLjAiLCAwLCAwKTsKKyAgIHBuZ19yZWFkX2luaXRfMihwbmdfcHRyLCAiMS4wLjAiLCAxMDAwMCwgMTAwMDApOwogfQogCi0jdW5kZWYgcG5nX3JlYWRfaW5pdF8yCiB2b2lkIFBOR0FQSQogcG5nX3JlYWRfaW5pdF8yKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19jb25zdF9jaGFycCB1c2VyX3BuZ192ZXIsCiAgICBwbmdfc2l6ZV90IHBuZ19zdHJ1Y3Rfc2l6ZSwgcG5nX3NpemVfdCBwbmdfaW5mb19zaXplKQogewotICAgLyogV2Ugb25seSBjb21lIGhlcmUgdmlhIHByZS0xLjAuMTItY29tcGlsZWQgYXBwbGljYXRpb25zICovCi0gICBpZihzaXplb2YocG5nX3N0cnVjdCkgPiBwbmdfc3RydWN0X3NpemUpCi0gICAgIHsKLSAgICAgICBwbmdfcHRyLT5lcnJvcl9mbj0ocG5nX2Vycm9yX3B0cilOVUxMOwotICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLAotICAgICAgICJUaGUgcG5nIHN0cnVjdCBhbGxvY2F0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIGZvciByZWFkaW5nIGlzIHRvbyBzbWFsbC4iKTsKLSAgICAgfQotICAgaWYoc2l6ZW9mKHBuZ19pbmZvKSA+IHBuZ19pbmZvX3NpemUpCi0gICAgIHsKLSAgICAgICBwbmdfcHRyLT5lcnJvcl9mbj0ocG5nX2Vycm9yX3B0cilOVUxMOwotICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLAotICAgICAgICAgIlRoZSBpbmZvIHN0cnVjdCBhbGxvY2F0ZWQgYnkgYXBwbGljYXRpb24gZm9yIHJlYWRpbmcgaXMgdG9vIHNtYWxsLiIpOwotICAgICB9Ci0gICBwbmdfcmVhZF9pbml0XzMoJnBuZ19wdHIsIHVzZXJfcG5nX3ZlciwgcG5nX3N0cnVjdF9zaXplKTsKLX0KLQotdm9pZCBQTkdBUEkKLXBuZ19yZWFkX2luaXRfMyhwbmdfc3RydWN0cHAgcHRyX3B0ciwgcG5nX2NvbnN0X2NoYXJwIHVzZXJfcG5nX3ZlciwKLSAgIHBuZ19zaXplX3QgcG5nX3N0cnVjdF9zaXplKQotewogI2lmZGVmIFBOR19TRVRKTVBfU1VQUE9SVEVECiAgICBqbXBfYnVmIHRtcF9qbXA7ICAvKiB0byBzYXZlIGN1cnJlbnQganVtcCBidWZmZXIgKi8KICNlbmRpZgogCiAgICBpbnQgaT0wOwotCi0gICBwbmdfc3RydWN0cCBwbmdfcHRyPSpwdHJfcHRyOwotCiAgICBkbwogICAgewogICAgICBpZih1c2VyX3BuZ192ZXJbaV0gIT0gcG5nX2xpYnBuZ192ZXJbaV0pCkBAIC0xOTAsMzEgKzE2NywzNSBAQAogI2lmZGVmIFBOR19MRUdBQ1lfU1VQUE9SVEVECiAgICAgICAgcG5nX3B0ci0+ZmxhZ3MgfD0gUE5HX0ZMQUdfTElCUkFSWV9NSVNNQVRDSDsKICNlbHNlCi0gICAgICAgcG5nX3B0ci0+d2FybmluZ19mbj0ocG5nX2Vycm9yX3B0cilOVUxMOwotICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCi0gICAgICAgICJBcHBsaWNhdGlvbiB1c2VzIGRlcHJlY2F0ZWQgcG5nX3JlYWRfaW5pdCgpIGFuZCBzaG91bGQgYmUgcmVjb21waWxlZC4iKTsKLSAgICAgICBicmVhazsKKyAgICAgICBwbmdfcHRyLT5lcnJvcl9mbj0ocG5nX2Vycm9yX3B0cilOVUxMOworICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLAorICAgICAgICAiQXBwbGljYXRpb24gdXNlcyBkZXByZWNhdGVkIHBuZ19yZWFkX2luaXQoKSBhbmQgbXVzdCBiZSByZWNvbXBpbGVkLiIpOwogI2VuZGlmCiAgICAgIH0KICAgIH0gd2hpbGUgKHBuZ19saWJwbmdfdmVyW2krK10pOwogCi0gICBwbmdfZGVidWcoMSwgImluIHBuZ19yZWFkX2luaXRfM1xuIik7CisgICBpZihzaXplb2YocG5nX3N0cnVjdCkgPiBwbmdfc3RydWN0X3NpemUgfHwKKyAgICAgIHNpemVvZihwbmdfaW5mbykgPiBwbmdfaW5mb19zaXplKQorICAgICB7CisgICAgICAgcG5nX3B0ci0+ZXJyb3JfZm49KHBuZ19lcnJvcl9wdHIpTlVMTDsKKyAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwKKyAgICAgICJBcHBsaWNhdGlvbiBhbmQgbGlicmFyeSBoYXZlIGRpZmZlcmVudCBzaXplZCBzdHJ1Y3RzLiBQbGVhc2UgcmVjb21waWxlLiIpOworICAgICB9CisKKyAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX3JlYWRfaW5pdF8yXG4iKTsKIAogI2lmZGVmIFBOR19TRVRKTVBfU1VQUE9SVEVECiAgICAvKiBzYXZlIGp1bXAgYnVmZmVyIGFuZCBlcnJvciBmdW5jdGlvbnMgKi8KICAgIHBuZ19tZW1jcHkodG1wX2ptcCwgcG5nX3B0ci0+am1wYnVmLCBzaXplb2YgKGptcF9idWYpKTsKICNlbmRpZgogCi0gICBpZihzaXplb2YocG5nX3N0cnVjdCkgPiBwbmdfc3RydWN0X3NpemUpCi0gICAgIHsKLSAgICAgICBwbmdfZGVzdHJveV9zdHJ1Y3QocG5nX3B0cik7Ci0gICAgICAgKnB0cl9wdHIgPSAocG5nX3N0cnVjdHApcG5nX2NyZWF0ZV9zdHJ1Y3QoUE5HX1NUUlVDVF9QTkcpOwotICAgICAgIHBuZ19wdHIgPSAqcHRyX3B0cjsKLSAgICAgfQotCiAgICAvKiByZXNldCBhbGwgdmFyaWFibGVzIHRvIDAgKi8KICAgIHBuZ19tZW1zZXQocG5nX3B0ciwgMCwgc2l6ZW9mIChwbmdfc3RydWN0KSk7CiAKKyNpZmRlZiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECisgICBwbmdfaW5pdF9tbXhfZmxhZ3MocG5nX3B0cik7ICAgLyogMS4yLjAgYWRkaXRpb24gKi8KKyNlbmRpZgorCiAjaWZkZWYgUE5HX1NFVEpNUF9TVVBQT1JURUQKICAgIC8qIHJlc3RvcmUganVtcCBidWZmZXIgKi8KICAgIHBuZ19tZW1jcHkocG5nX3B0ci0+am1wYnVmLCB0bXBfam1wLCBzaXplb2YgKGptcF9idWYpKTsKQEAgLTc0Miw3ICs3MjMsNyBAQAogICogbm90IGNhbGxlZCBwbmdfc2V0X2ludGVybGFjZV9oYW5kbGluZygpLCB0aGUgZGlzcGxheV9yb3cgYnVmZmVyIHdpbGwKICAqIGJlIGlnbm9yZWQsIHNvIHBhc3MgTlVMTCB0byBpdC4KICAqCi0gKiBbKl0gcG5nX2hhbmRsZV9hbHBoYSgpIGRvZXMgbm90IGV4aXN0IHlldCwgYXMgb2YgbGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEKKyAqIFsqXSBwbmdfaGFuZGxlX2FscGhhKCkgZG9lcyBub3QgZXhpc3QgeWV0LCBhcyBvZiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExCiAgKi8KIAogdm9pZCBQTkdBUEkKQEAgLTc5MSw3ICs3NzIsNyBAQAogICogb25seSBjYWxsIHRoaXMgZnVuY3Rpb24gb25jZS4gIElmIHlvdSBkZXNpcmUgdG8gaGF2ZSBhbiBpbWFnZSBmb3IKICAqIGVhY2ggcGFzcyBvZiBhIGludGVybGFjZWQgaW1hZ2UsIHVzZSBwbmdfcmVhZF9yb3dzKCkgaW5zdGVhZC4KICAqCi0gKiBbKl0gcG5nX2hhbmRsZV9hbHBoYSgpIGRvZXMgbm90IGV4aXN0IHlldCwgYXMgb2YgbGlicG5nIHZlcnNpb24gMS4wLjEyYmV0YTEKKyAqIFsqXSBwbmdfaGFuZGxlX2FscGhhKCkgZG9lcyBub3QgZXhpc3QgeWV0LCBhcyBvZiBsaWJwbmcgdmVyc2lvbiAxLjIuMGJldGExCiAgKi8KIHZvaWQgUE5HQVBJCiBwbmdfcmVhZF9pbWFnZShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXBwIGltYWdlKQpAQCAtMTAyMSw3ICsxMDAyLDYgQEAKICAgIHBuZ19pbmZvcCBpbmZvX3B0ciA9IE5VTEwsIGVuZF9pbmZvX3B0ciA9IE5VTEw7CiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgcG5nX2ZyZWVfcHRyIGZyZWVfZm4gPSBOVUxMOwotICAgcG5nX3ZvaWRwIG1lbV9wdHIgPSBOVUxMOwogI2VuZGlmCiAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2Rlc3Ryb3lfcmVhZF9zdHJ1Y3RcbiIpOwpAQCAtMTAzNyw3ICsxMDE3LDYgQEAKIAogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKICAgIGZyZWVfZm4gPSBwbmdfcHRyLT5mcmVlX2ZuOwotICAgbWVtX3B0ciA9IHBuZ19wdHItPm1lbV9wdHI7CiAjZW5kaWYKIAogICAgcG5nX3JlYWRfZGVzdHJveShwbmdfcHRyLCBpbmZvX3B0ciwgZW5kX2luZm9fcHRyKTsKQEAgLTEwNDksOCArMTAyOCw3IEBACiAjZW5kaWYKIAogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLSAgICAgIHBuZ19kZXN0cm95X3N0cnVjdF8yKChwbmdfdm9pZHApaW5mb19wdHIsIChwbmdfZnJlZV9wdHIpZnJlZV9mbiwKLSAgICAgICAgICAocG5nX3ZvaWRwKW1lbV9wdHIpOworICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0XzIoKHBuZ192b2lkcClpbmZvX3B0ciwgZnJlZV9mbik7CiAjZWxzZQogICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0KChwbmdfdm9pZHApaW5mb19wdHIpOwogI2VuZGlmCkBAIC0xMDYzLDggKzEwNDEsNyBAQAogICAgICAgcG5nX2ZyZWVfZGF0YShwbmdfcHRyLCBlbmRfaW5mb19wdHIsIFBOR19GUkVFX1RFWFQsIC0xKTsKICNlbmRpZgogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLSAgICAgIHBuZ19kZXN0cm95X3N0cnVjdF8yKChwbmdfdm9pZHApZW5kX2luZm9fcHRyLCAocG5nX2ZyZWVfcHRyKWZyZWVfZm4sCi0gICAgICAgICAocG5nX3ZvaWRwKW1lbV9wdHIpOworICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0XzIoKHBuZ192b2lkcCllbmRfaW5mb19wdHIsIGZyZWVfZm4pOwogI2Vsc2UKICAgICAgIHBuZ19kZXN0cm95X3N0cnVjdCgocG5nX3ZvaWRwKWVuZF9pbmZvX3B0cik7CiAjZW5kaWYKQEAgLTEwNzQsOCArMTA1MSw3IEBACiAgICBpZiAocG5nX3B0ciAhPSBOVUxMKQogICAgewogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLSAgICAgIHBuZ19kZXN0cm95X3N0cnVjdF8yKChwbmdfdm9pZHApcG5nX3B0ciwgKHBuZ19mcmVlX3B0cilmcmVlX2ZuLAotICAgICAgICAgIChwbmdfdm9pZHApbWVtX3B0cik7CisgICAgICBwbmdfZGVzdHJveV9zdHJ1Y3RfMigocG5nX3ZvaWRwKXBuZ19wdHIsIGZyZWVfZm4pOwogI2Vsc2UKICAgICAgIHBuZ19kZXN0cm95X3N0cnVjdCgocG5nX3ZvaWRwKXBuZ19wdHIpOwogI2VuZGlmCkBAIC0xMDg0LDcgKzEwNjAsNyBAQAogfQogCiAvKiBmcmVlIGFsbCBtZW1vcnkgdXNlZCBieSB0aGUgcmVhZCAob2xkIG1ldGhvZCkgKi8KLXZvaWQgLyogUFJJVkFURSAqLwordm9pZCBQTkdBUEkKIHBuZ19yZWFkX2Rlc3Ryb3kocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2luZm9wIGluZm9fcHRyLCBwbmdfaW5mb3AgZW5kX2luZm9fcHRyKQogewogI2lmZGVmIFBOR19TRVRKTVBfU1VQUE9SVEVECkBAIC0xMzM3LDcgKzEzMTMsNyBAQAogCiAgICAvKiBPcHRpb25hbCBjYWxsIHRvIGdhbW1hIGNvcnJlY3QgYW5kIGFkZCB0aGUgYmFja2dyb3VuZCB0byB0aGUgcGFsZXR0ZQogICAgICogYW5kIHVwZGF0ZSBpbmZvIHN0cnVjdHVyZS4gIFJFUVVJUkVEIGlmIHlvdSBhcmUgZXhwZWN0aW5nIGxpYnBuZyB0bwotICAgICogdXBkYXRlIHRoZSBwYWxldHRlIGZvciB5b3UgKGkuZS4sIHlvdSBzZWxlY3RlZCBzdWNoIGEgdHJhbnNmb3JtIGFib3ZlKS4KKyAgICAqIHVwZGF0ZSB0aGUgcGFsZXR0ZSBmb3IgeW91IChpZSB5b3Ugc2VsZWN0ZWQgc3VjaCBhIHRyYW5zZm9ybSBhYm92ZSkuCiAgICAgKi8KICAgIHBuZ19yZWFkX3VwZGF0ZV9pbmZvKHBuZ19wdHIsIGluZm9fcHRyKTsKIApAQCAtMTM0OSwxNSArMTMyNSwxMyBAQAogICAgaWYoaW5mb19wdHItPnJvd19wb2ludGVycyA9PSBOVUxMKQogICAgewogICAgICAgaW5mb19wdHItPnJvd19wb2ludGVycyA9IChwbmdfYnl0ZXBwKXBuZ19tYWxsb2MocG5nX3B0ciwKLSAgICAgICAgIGluZm9fcHRyLT5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9fcHRyLT5oZWlnaHQgKiBzaXplb2YocG5nX2J5dGVwKSk7CiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICAgICBpbmZvX3B0ci0+ZnJlZV9tZSB8PSBQTkdfRlJFRV9ST1dTOwogI2VuZGlmCiAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IChpbnQpaW5mb19wdHItPmhlaWdodDsgcm93KyspCi0gICAgICB7Ci0gICAgICAgICBpbmZvX3B0ci0+cm93X3BvaW50ZXJzW3Jvd10gPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKKyAgICAgICAgIGluZm9fcHRyLT5yb3dfcG9pbnRlcnNbcm93XSA9IHBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgICAgICAgIHBuZ19nZXRfcm93Ynl0ZXMocG5nX3B0ciwgaW5mb19wdHIpKTsKLSAgICAgIH0KICAgIH0KIAogICAgcG5nX3JlYWRfaW1hZ2UocG5nX3B0ciwgaW5mb19wdHItPnJvd19wb2ludGVycyk7CkBAIC0xMzY2LDcgKzEzNDAsNyBAQAogICAgLyogcmVhZCByZXN0IG9mIGZpbGUsIGFuZCBnZXQgYWRkaXRpb25hbCBjaHVua3MgaW4gaW5mb19wdHIgLSBSRVFVSVJFRCAqLwogICAgcG5nX3JlYWRfZW5kKHBuZ19wdHIsIGluZm9fcHRyKTsKIAotICAgaWYodHJhbnNmb3JtcyA9PSAwIHx8IHBhcmFtcyA9PSBOVUxMKQorICAgaWYodHJhbnNmb3JtcyA9PSAwIHx8IHBhcmFtcyA9PSAodm9pZHApTlVMTCkKICAgICAgIC8qIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmdzICovIHJldHVybjsKIAogfQpkaWZmIC0tZ2l0IGEvcG5ncmlvLmMgYi9wbmdyaW8uYwppbmRleCAwMDZkNzJlLi5kZDYyNTgwIDEwMDY0NAotLS0gYS9wbmdyaW8uYworKysgYi9wbmdyaW8uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5ncmlvLmMgLSBmdW5jdGlvbnMgZm9yIGRhdGEgaW5wdXQKICAqCi0gKiBsaWJwbmcgMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTI2LDcgKzI2LDcgQEAKIHZvaWQgLyogUFJJVkFURSAqLwogcG5nX3JlYWRfZGF0YShwbmdfc3RydWN0cCBwbmdfcHRyLCBwbmdfYnl0ZXAgZGF0YSwgcG5nX3NpemVfdCBsZW5ndGgpCiB7Ci0gICBwbmdfZGVidWcxKDQsInJlYWRpbmcgJWQgYnl0ZXNcbiIsIChpbnQpbGVuZ3RoKTsKKyAgIHBuZ19kZWJ1ZzEoNCwicmVhZGluZyAlZCBieXRlc1xuIiwgbGVuZ3RoKTsKICAgIGlmIChwbmdfcHRyLT5yZWFkX2RhdGFfZm4gIT0gTlVMTCkKICAgICAgICgqKHBuZ19wdHItPnJlYWRfZGF0YV9mbikpKHBuZ19wdHIsIGRhdGEsIGxlbmd0aCk7CiAgICBlbHNlCmRpZmYgLS1naXQgYS9wbmdydHJhbi5jIGIvcG5ncnRyYW4uYwppbmRleCBlMmQ0NmZmLi4yNzllODFjIDEwMDY0NAotLS0gYS9wbmdydHJhbi5jCisrKyBiL3BuZ3J0cmFuLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3J0cmFuLmMgLSB0cmFuc2Zvcm1zIHRoZSBkYXRhIGluIGEgcm93IGZvciBQTkcgcmVhZGVycwogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpkaWZmIC0tZ2l0IGEvcG5ncnV0aWwuYyBiL3BuZ3J1dGlsLmMKaW5kZXggMzExZjgxZS4uZGQwOGZmNiAxMDA2NDQKLS0tIGEvcG5ncnV0aWwuYworKysgYi9wbmdydXRpbC5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmdydXRpbC5jIC0gdXRpbGl0aWVzIHRvIHJlYWQgYSBQTkcgZmlsZQogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtMzAsNyArMzAsNyBAQAogICAgICAgTXVsdGlCeXRlVG9XaWRlQ2hhcihDUF9BQ1AsIDAsIG5wdHIsIC0xLCBzdHIsIGxlbik7CiAgICAgICByZXN1bHQgPSB3Y3N0b2Qoc3RyLCAmZW5kKTsKICAgICAgIGxlbiA9IFdpZGVDaGFyVG9NdWx0aUJ5dGUoQ1BfQUNQLCAwLCBlbmQsIC0xLCBOVUxMLCAwLCBOVUxMLCBOVUxMKTsKLSAgICAgICplbmRwdHIgPSAoY2hhciAqKW5wdHIgKyAocG5nX3N0cmxlbihucHRyKSAtIGxlbiArIDEpOworICAgICAgKmVuZHB0ciA9IChjaGFyICopbnB0ciArIChzdHJsZW4obnB0cikgLSBsZW4gKyAxKTsKICAgICAgIGZyZWUoc3RyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMjAsNyArMjIwLDcgQEAKICAgICAgICAgICAgICAgICAgICBwbmdfcHRyLT56YnVmX3NpemUgLSBwbmdfcHRyLT56c3RyZWFtLmF2YWlsX291dDsKICAgICAgICAgICAgICAgIHRleHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgdGV4dF9zaXplICsgMSk7CiAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQgKyBwcmVmaXhfc2l6ZSwgcG5nX3B0ci0+emJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgdGV4dF9zaXplIC0gcHJlZml4X3NpemUpOworICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0X3NpemUgLSBwcmVmaXhfc2l6ZSk7CiAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KHRleHQsIGNodW5rZGF0YSwgcHJlZml4X3NpemUpOwogICAgICAgICAgICAgICAgKih0ZXh0ICsgdGV4dF9zaXplKSA9IDB4MDA7CiAgICAgICAgICAgICB9CkBAIC0zMzIsNiArMzMyLDU5IEBACiAgICBmaWx0ZXJfdHlwZSA9IGJ1ZlsxMV07CiAgICBpbnRlcmxhY2VfdHlwZSA9IGJ1ZlsxMl07CiAKKyAgIC8qIGNoZWNrIGZvciB3aWR0aCBhbmQgaGVpZ2h0IHZhbGlkIHZhbHVlcyAqLworICAgaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBQTkdfTUFYX1VJTlQgfHwgaGVpZ2h0ID09IDAgfHwKKyAgICAgICAgaGVpZ2h0ID4gUE5HX01BWF9VSU5UKQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGltYWdlIHNpemUgaW4gSUhEUiIpOworCisgICAvKiBjaGVjayBvdGhlciB2YWx1ZXMgKi8KKyAgIGlmIChiaXRfZGVwdGggIT0gMSAmJiBiaXRfZGVwdGggIT0gMiAmJiBiaXRfZGVwdGggIT0gNCAmJgorICAgICAgYml0X2RlcHRoICE9IDggJiYgYml0X2RlcHRoICE9IDE2KQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGJpdCBkZXB0aCBpbiBJSERSIik7CisKKyAgIGlmIChjb2xvcl90eXBlIDwgMCB8fCBjb2xvcl90eXBlID09IDEgfHwKKyAgICAgIGNvbG9yX3R5cGUgPT0gNSB8fCBjb2xvcl90eXBlID4gNikKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiSW52YWxpZCBjb2xvciB0eXBlIGluIElIRFIiKTsKKworICAgaWYgKCgoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKSAmJiBiaXRfZGVwdGggPiA4KSB8fAorICAgICAgICgoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwKKyAgICAgICAgIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfR1JBWV9BTFBIQSB8fAorICAgICAgICAgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0JfQUxQSEEpICYmIGJpdF9kZXB0aCA8IDgpKQorICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGNvbG9yIHR5cGUvYml0IGRlcHRoIGNvbWJpbmF0aW9uIGluIElIRFIiKTsKKworICAgaWYgKGludGVybGFjZV90eXBlID49IFBOR19JTlRFUkxBQ0VfTEFTVCkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVW5rbm93biBpbnRlcmxhY2UgbWV0aG9kIGluIElIRFIiKTsKKworICAgaWYgKGNvbXByZXNzaW9uX3R5cGUgIT0gUE5HX0NPTVBSRVNTSU9OX1RZUEVfQkFTRSkKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gSUhEUiIpOworCisjaWYgZGVmaW5lZChQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCkKKyAgIC8qIEFjY2VwdCBmaWx0ZXJfbWV0aG9kIDY0IChpbnRyYXBpeGVsIGRpZmZlcmVuY2luZykgb25seSBpZgorICAgICogMS4gTGlicG5nIHdhcyBjb21waWxlZCB3aXRoIFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEIGFuZAorICAgICogMi4gTGlicG5nIGRpZCBub3QgcmVhZCBhIFBORyBzaWduYXR1cmUgKHRoaXMgZmlsdGVyX21ldGhvZCBpcyBvbmx5CisgICAgKiAgICB1c2VkIGluIFBORyBkYXRhc3RyZWFtcyB0aGF0IGFyZSBlbWJlZGRlZCBpbiBNTkcgZGF0YXN0cmVhbXMpIGFuZAorICAgICogMy4gVGhlIGFwcGxpY2F0aW9uIGNhbGxlZCBwbmdfcGVybWl0X21uZ19mZWF0dXJlcyB3aXRoIGEgbWFzayB0aGF0CisgICAgKiAgICBpbmNsdWRlZCBQTkdfRkxBR19NTkdfRklMVEVSXzY0IGFuZAorICAgICogNC4gVGhlIGZpbHRlcl9tZXRob2QgaXMgNjQgYW5kCisgICAgKiA1LiBUaGUgY29sb3JfdHlwZSBpcyBSR0Igb3IgUkdCQQorICAgICovCisgICBpZigocG5nX3B0ci0+bW9kZSZQTkdfSEFWRV9QTkdfU0lHTkFUVVJFKSYmcG5nX3B0ci0+bW5nX2ZlYXR1cmVzX3Blcm1pdHRlZCkKKyAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsIk1ORyBmZWF0dXJlcyBhcmUgbm90IGFsbG93ZWQgaW4gYSBQTkcgZGF0YXN0cmVhbVxuIik7CisgICBpZihmaWx0ZXJfdHlwZSAhPSBQTkdfRklMVEVSX1RZUEVfQkFTRSkKKyAgIHsKKyAgICAgaWYoISgocG5nX3B0ci0+bW5nX2ZlYXR1cmVzX3Blcm1pdHRlZCAmIFBOR19GTEFHX01OR19GSUxURVJfNjQpICYmCisgICAgICAgIChmaWx0ZXJfdHlwZSA9PSBQTkdfSU5UUkFQSVhFTF9ESUZGRVJFTkNJTkcpICYmCisgICAgICAgICgocG5nX3B0ci0+bW9kZSZQTkdfSEFWRV9QTkdfU0lHTkFUVVJFKSA9PSAwKSAmJgorICAgICAgICAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwgCisgICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSkpKQorICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlVua25vd24gZmlsdGVyIG1ldGhvZCBpbiBJSERSIik7CisgICAgIGlmKHBuZ19wdHItPm1vZGUmUE5HX0hBVkVfUE5HX1NJR05BVFVSRSkKKyAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIkludmFsaWQgZmlsdGVyIG1ldGhvZCBpbiBJSERSIik7CisgICB9CisjZWxzZQorICAgaWYoZmlsdGVyX3R5cGUgIT0gUE5HX0ZJTFRFUl9UWVBFX0JBU0UpCisgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIlVua25vd24gZmlsdGVyIG1ldGhvZCBpbiBJSERSIik7CisjZW5kaWYKIAogICAgLyogc2V0IGludGVybmFsIHZhcmlhYmxlcyAqLwogICAgcG5nX3B0ci0+d2lkdGggPSB3aWR0aDsKQEAgLTMzOSw5ICszOTIsNyBAQAogICAgcG5nX3B0ci0+Yml0X2RlcHRoID0gKHBuZ19ieXRlKWJpdF9kZXB0aDsKICAgIHBuZ19wdHItPmludGVybGFjZWQgPSAocG5nX2J5dGUpaW50ZXJsYWNlX3R5cGU7CiAgICBwbmdfcHRyLT5jb2xvcl90eXBlID0gKHBuZ19ieXRlKWNvbG9yX3R5cGU7Ci0jaWYgZGVmaW5lZChQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCkKICAgIHBuZ19wdHItPmZpbHRlcl90eXBlID0gKHBuZ19ieXRlKWZpbHRlcl90eXBlOwotI2VuZGlmCiAKICAgIC8qIGZpbmQgbnVtYmVyIG9mIGNoYW5uZWxzICovCiAgICBzd2l0Y2ggKHBuZ19wdHItPmNvbG9yX3R5cGUpCkBAIC0zOTgsMTMgKzQ0OSw2IEBACiAKICAgIHBuZ19wdHItPm1vZGUgfD0gUE5HX0hBVkVfUExURTsKIAotICAgaWYgKCEocG5nX3B0ci0+Y29sb3JfdHlwZSZQTkdfQ09MT1JfTUFTS19DT0xPUikpCi0gICB7Ci0gICAgICBwbmdfd2FybmluZyhwbmdfcHRyLAotICAgICAgICAiSWdub3JpbmcgUExURSBjaHVuayBpbiBncmF5c2NhbGUgUE5HIik7Ci0gICAgICBwbmdfY3JjX2ZpbmlzaChwbmdfcHRyLCBsZW5ndGgpOwotICAgICAgcmV0dXJuOwotICAgfQogI2lmICFkZWZpbmVkKFBOR19SRUFEX09QVF9QTFRFX1NVUFBPUlRFRCkKICAgIGlmIChwbmdfcHRyLT5jb2xvcl90eXBlICE9IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpCiAgICB7CkBAIC01ODIsMTEgKzYyNiw3IEBACiAgICBpZ2FtbWEgPSAocG5nX2ZpeGVkX3BvaW50KXBuZ19nZXRfdWludF8zMihidWYpOwogICAgLyogY2hlY2sgZm9yIHplcm8gZ2FtbWEgKi8KICAgIGlmIChpZ2FtbWEgPT0gMCkKLSAgICAgIHsKLSAgICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsCi0gICAgICAgICAgICJJZ25vcmluZyBnQU1BIGNodW5rIHdpdGggZ2FtbWE9MCIpOwotICAgICAgICAgcmV0dXJuOwotICAgICAgfQorICAgICAgcmV0dXJuOwogCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9zUkdCX1NVUFBPUlRFRCkKICAgIGlmIChpbmZvX3B0ci0+dmFsaWQgJiBQTkdfSU5GT19zUkdCKQpAQCAtMTA4Nyw3ICsxMTI3LDcgQEAKIAogICAgY2h1bmtkYXRhID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHBuZ19wdHIsIGxlbmd0aCArIDEpOwogICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKLSAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rZGF0YSwgc2xlbmd0aCk7CisgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgY2h1bmtkYXRhLCBzbGVuZ3RoKTsKIAogICAgaWYgKHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIHNraXApKQogICAgewpAQCAtMTExNyw4ICsxMTU3LDcgQEAKICAgIGlmIChkYXRhX2xlbmd0aCAlIGVudHJ5X3NpemUpCiAgICB7CiAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBjaHVua2RhdGEpOwotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgInNQTFQgY2h1bmsgaGFzIGJhZCBsZW5ndGgiKTsKLSAgICAgIHJldHVybjsKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAic1BMVCBjaHVuayBoYXMgYmFkIGxlbmd0aCIpOwogICAgfQogCiAgICBuZXdfcGFsZXR0ZS5uZW50cmllcyA9IGRhdGFfbGVuZ3RoIC8gZW50cnlfc2l6ZTsKQEAgLTE2NzUsOCArMTcxNCw4IEBACiAgICB9CiAjZWxzZQogI2lmZGVmIFBOR19GSVhFRF9QT0lOVF9TVVBQT1JURUQKLSAgIHN3aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBwbmdfc3RybGVuKGVwKSArIDEpOwotICAgcG5nX21lbWNweShzd2lkdGgsIGVwLCAocG5nX3NpemVfdClwbmdfc3RybGVuKGVwKSk7CisgICBzd2lkdGggPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgc3RybGVuKGVwKSArIDEpOworICAgcG5nX21lbWNweShzd2lkdGgsIGVwLCAocG5nX3NpemVfdClzdHJsZW4oZXApKTsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTE2OTMsOCArMTczMiw4IEBACiAgICB9CiAjZWxzZQogI2lmZGVmIFBOR19GSVhFRF9QT0lOVF9TVVBQT1JURUQKLSAgIHNoZWlnaHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX3N0cmxlbihlcCkgKyAxKTsKLSAgIHBuZ19tZW1jcHkoc2hlaWdodCwgZXAsIChwbmdfc2l6ZV90KXBuZ19zdHJsZW4oZXApKTsKKyAgIHNoZWlnaHQgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgc3RybGVuKGVwKSArIDEpOworICAgcG5nX21lbWNweShzaGVpZ2h0LCBlcCwgKHBuZ19zaXplX3Qpc3RybGVuKGVwKSk7CiAjZW5kaWYKICNlbmRpZgogCkBAIC0xODY3LDcgKzE5MDYsNyBAQAogI2VuZGlmCiAKICAgIGNodW5rZGF0YSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGggKyAxKTsKLSAgICAgc2xlbmd0aCA9IChwbmdfc2l6ZV90KWxlbmd0aDsKKyAgIHNsZW5ndGggPSAocG5nX3NpemVfdClsZW5ndGg7CiAgICBwbmdfY3JjX3JlYWQocG5nX3B0ciwgKHBuZ19ieXRlcCljaHVua2RhdGEsIHNsZW5ndGgpOwogICAgaWYgKHBuZ19jcmNfZmluaXNoKHBuZ19wdHIsIDApKQogICAgewpAQCAtMjA0MSw3ICsyMDgwLDcgQEAKICAgICAgIGlmKHBuZ19oYW5kbGVfYXNfdW5rbm93bihwbmdfcHRyLCBwbmdfcHRyLT5jaHVua19uYW1lKSAhPQogICAgICAgICAgICBIQU5ETEVfQ0hVTktfQUxXQVlTCiAjaWYgZGVmaW5lZChQTkdfUkVBRF9VU0VSX0NIVU5LU19TVVBQT1JURUQpCi0gICAgICAgICAgICYmIHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiA9PSBOVUxMCisgICAgICAgICAgICYmIHBuZ19wdHItPnJlYWRfdXNlcl9jaHVua19mbiA9PSAocG5nX3VzZXJfY2h1bmtfcHRyKU5VTEwKICNlbmRpZgogICAgICAgICApCiAjZW5kaWYKQEAgLTIwNjEsMTIgKzIxMDAsMTIgQEAKICAgICAgICAgICAgbGVuZ3RoID0gKHBuZ191aW50XzMyKTY1NTM1TDsKICAgICAgICB9CiAjZW5kaWYKLSAgICAgICBwbmdfc3RyY3B5KChwbmdfY2hhcnApY2h1bmsubmFtZSwgKHBuZ19jaGFycClwbmdfcHRyLT5jaHVua19uYW1lKTsKKyAgICAgICBzdHJjcHkoKHBuZ19jaGFycCljaHVuay5uYW1lLCAocG5nX2NoYXJwKXBuZ19wdHItPmNodW5rX25hbWUpOwogICAgICAgIGNodW5rLmRhdGEgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgbGVuZ3RoKTsKLSAgICAgICBjaHVuay5zaXplID0gKHBuZ19zaXplX3QpbGVuZ3RoOwotICAgICAgIHBuZ19jcmNfcmVhZChwbmdfcHRyLCAocG5nX2J5dGVwKWNodW5rLmRhdGEsIGxlbmd0aCk7CisgICAgICAgcG5nX2NyY19yZWFkKHBuZ19wdHIsIGNodW5rLmRhdGEsIGxlbmd0aCk7CisgICAgICAgY2h1bmsuc2l6ZSA9IGxlbmd0aDsKICNpZiBkZWZpbmVkKFBOR19SRUFEX1VTRVJfQ0hVTktTX1NVUFBPUlRFRCkKLSAgICAgICBpZihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gIT0gTlVMTCkKKyAgICAgICBpZihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4gIT0gKHBuZ191c2VyX2NodW5rX3B0cilOVUxMKQogICAgICAgIHsKICAgICAgICAgICAvKiBjYWxsYmFjayB0byB1c2VyIHVua25vd24gY2h1bmsgaGFuZGxlciAqLwogICAgICAgICAgIGlmICgoKihwbmdfcHRyLT5yZWFkX3VzZXJfY2h1bmtfZm4pKSAocG5nX3B0ciwgJmNodW5rKSA8PSAwKQpAQCAtMjMyOSwxMCArMjM2OCw2IEBACiAKICNpZmRlZiBQTkdfUkVBRF9JTlRFUkxBQ0lOR19TVVBQT1JURUQKICNpZm5kZWYgUE5HX0hBVkVfQVNTRU1CTEVSX1JFQURfSU5URVJMQUNFICAgLyogZWxzZSBpbiBwbmd2Y3JkLmMsIHBuZ2djY3JkLmMgKi8KLS8qIE9MRCBwcmUtMS4wLjkgaW50ZXJmYWNlOgotdm9pZCBwbmdfZG9fcmVhZF9pbnRlcmxhY2UocG5nX3Jvd19pbmZvcCByb3dfaW5mbywgcG5nX2J5dGVwIHJvdywgaW50IHBhc3MsCi0gICBwbmdfdWludF8zMiB0cmFuc2Zvcm1hdGlvbnMpCi0gKi8KIHZvaWQgLyogUFJJVkFURSAqLwogcG5nX2RvX3JlYWRfaW50ZXJsYWNlKHBuZ19zdHJ1Y3RwIHBuZ19wdHIpCiB7CkBAIC0yOTY4LDkgKzMwMDMsNiBAQAogICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJUaGlzIGltYWdlIHJlcXVpcmVzIGEgcm93IGdyZWF0ZXIgdGhhbiA2NEtCIik7CiAjZW5kaWYKICAgIHBuZ19wdHItPnJvd19idWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgcm93X2J5dGVzKTsKLSNpZiBkZWZpbmVkKFBOR19ERUJVRykgJiYgZGVmaW5lZChQTkdfVVNFX1BOR0dDQ1JEKQotICAgcG5nX3B0ci0+cm93X2J1Zl9zaXplID0gcm93X2J5dGVzOwotI2VuZGlmCiAKICNpZmRlZiBQTkdfTUFYX01BTExPQ182NEsKICAgIGlmICgocG5nX3VpbnRfMzIpcG5nX3B0ci0+cm93Ynl0ZXMgKyAxID4gKHBuZ191aW50XzMyKTY1NTM2TCkKZGlmZiAtLWdpdCBhL3BuZ3NldC5jIGIvcG5nc2V0LmMKaW5kZXggNGZiNmMwZS4uZjg1MWZhYyAxMDA2NDQKLS0tIGEvcG5nc2V0LmMKKysrIGIvcG5nc2V0LmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3NldC5jIC0gc3RvcmFnZSBvZiBpbWFnZSBpbmZvcm1hdGlvbiBpbnRvIGluZm8gc3RydWN0CiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xMDksMTAgKzEwOSw5IEBACiAgICBpbmZvX3B0ci0+aW50X2dhbW1hID0gKGludCkoZmlsZV9nYW1tYSoxMDAwMDAuKy41KTsKICNlbmRpZgogICAgaW5mb19wdHItPnZhbGlkIHw9IFBOR19JTkZPX2dBTUE7Ci0gICBpZihmaWxlX2dhbW1hID09IDAuMCkKLSAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJTZXR0aW5nIGdhbW1hPTAiKTsKIH0KICNlbmRpZgorI2VuZGlmCiB2b2lkIFBOR0FQSQogcG5nX3NldF9nQU1BX2ZpeGVkKHBuZ19zdHJ1Y3RwIHBuZ19wdHIsIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX2ZpeGVkX3BvaW50CiAgICBpbnRfZ2FtbWEpCkBAIC0xMjgsMTAgKzEyNyw3IEBACiAgICBpbmZvX3B0ci0+aW50X2dhbW1hID0gaW50X2dhbW1hOwogI2VuZGlmCiAgICBpbmZvX3B0ci0+dmFsaWQgfD0gUE5HX0lORk9fZ0FNQTsKLSAgIGlmKGludF9nYW1tYSA9PSAwKQotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgIlNldHRpbmcgZ2FtbWE9MCIpOwogfQotI2VuZGlmCiAKICNpZiBkZWZpbmVkKFBOR19oSVNUX1NVUFBPUlRFRCkKIHZvaWQgUE5HQVBJCkBAIC0xNDMsMTEgKzEzOSw4IEBACiAgICBpZiAocG5nX3B0ciA9PSBOVUxMIHx8IGluZm9fcHRyID09IE5VTEwpCiAgICAgICByZXR1cm47CiAgICBpZiAoaW5mb19wdHItPm51bV9wYWxldHRlID09IDApCi0gICB7CiAgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwKLSAgICAgICAgICAiUGFsZXR0ZSBzaXplIDAsIGhJU1QgYWxsb2NhdGlvbiBza2lwcGVkLiIpOwotICAgICAgIHJldHVybjsKLSAgIH0KKwkJICAgIlBhbGV0dGUgc2l6ZSAwLCBoSVNUIGFsbG9jYXRpb24gc2tpcHBlZC4iKTsKIAogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRAogICAgcG5nX2ZyZWVfZGF0YShwbmdfcHRyLCBpbmZvX3B0ciwgUE5HX0ZSRUVfSElTVCwgMCk7CkBAIC0xNzksNjEgKzE3Miw2IEBACiAgICBpZiAocG5nX3B0ciA9PSBOVUxMIHx8IGluZm9fcHRyID09IE5VTEwpCiAgICAgICByZXR1cm47CiAKLSAgIC8qIGNoZWNrIGZvciB3aWR0aCBhbmQgaGVpZ2h0IHZhbGlkIHZhbHVlcyAqLwotICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApCi0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkltYWdlIHdpZHRoIG9yIGhlaWdodCBpcyB6ZXJvIGluIElIRFIiKTsKLSAgIGlmICh3aWR0aCA+IFBOR19NQVhfVUlOVCB8fCBoZWlnaHQgPiBQTkdfTUFYX1VJTlQpCi0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkludmFsaWQgaW1hZ2Ugc2l6ZSBpbiBJSERSIik7Ci0KLSAgIC8qIGNoZWNrIG90aGVyIHZhbHVlcyAqLwotICAgaWYgKGJpdF9kZXB0aCAhPSAxICYmIGJpdF9kZXB0aCAhPSAyICYmIGJpdF9kZXB0aCAhPSA0ICYmCi0gICAgICBiaXRfZGVwdGggIT0gOCAmJiBiaXRfZGVwdGggIT0gMTYpCi0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkludmFsaWQgYml0IGRlcHRoIGluIElIRFIiKTsKLQotICAgaWYgKGNvbG9yX3R5cGUgPCAwIHx8IGNvbG9yX3R5cGUgPT0gMSB8fAotICAgICAgY29sb3JfdHlwZSA9PSA1IHx8IGNvbG9yX3R5cGUgPiA2KQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIGNvbG9yIHR5cGUgaW4gSUhEUiIpOwotCi0gICBpZiAoKChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpICYmIGJpdF9kZXB0aCA+IDgpIHx8Ci0gICAgICAgKChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fAotICAgICAgICAgY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBIHx8Ci0gICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSkgJiYgYml0X2RlcHRoIDwgOCkpCi0gICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkludmFsaWQgY29sb3IgdHlwZS9iaXQgZGVwdGggY29tYmluYXRpb24gaW4gSUhEUiIpOwotCi0gICBpZiAoaW50ZXJsYWNlX3R5cGUgPj0gUE5HX0lOVEVSTEFDRV9MQVNUKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJVbmtub3duIGludGVybGFjZSBtZXRob2QgaW4gSUhEUiIpOwotCi0gICBpZiAoY29tcHJlc3Npb25fdHlwZSAhPSBQTkdfQ09NUFJFU1NJT05fVFlQRV9CQVNFKQotICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBJSERSIik7Ci0KLSNpZiBkZWZpbmVkKFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEKQotICAgLyogQWNjZXB0IGZpbHRlcl9tZXRob2QgNjQgKGludHJhcGl4ZWwgZGlmZmVyZW5jaW5nKSBvbmx5IGlmCi0gICAgKiAxLiBMaWJwbmcgd2FzIGNvbXBpbGVkIHdpdGggUE5HX01OR19GRUFUVVJFU19TVVBQT1JURUQgYW5kCi0gICAgKiAyLiBMaWJwbmcgZGlkIG5vdCByZWFkIGEgUE5HIHNpZ25hdHVyZSAodGhpcyBmaWx0ZXJfbWV0aG9kIGlzIG9ubHkKLSAgICAqICAgIHVzZWQgaW4gUE5HIGRhdGFzdHJlYW1zIHRoYXQgYXJlIGVtYmVkZGVkIGluIE1ORyBkYXRhc3RyZWFtcykgYW5kCi0gICAgKiAzLiBUaGUgYXBwbGljYXRpb24gY2FsbGVkIHBuZ19wZXJtaXRfbW5nX2ZlYXR1cmVzIHdpdGggYSBtYXNrIHRoYXQKLSAgICAqICAgIGluY2x1ZGVkIFBOR19GTEFHX01OR19GSUxURVJfNjQgYW5kCi0gICAgKiA0LiBUaGUgZmlsdGVyX21ldGhvZCBpcyA2NCBhbmQKLSAgICAqIDUuIFRoZSBjb2xvcl90eXBlIGlzIFJHQiBvciBSR0JBCi0gICAgKi8KLSAgIGlmKChwbmdfcHRyLT5tb2RlJlBOR19IQVZFX1BOR19TSUdOQVRVUkUpJiZwbmdfcHRyLT5tbmdfZmVhdHVyZXNfcGVybWl0dGVkKQotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwiTU5HIGZlYXR1cmVzIGFyZSBub3QgYWxsb3dlZCBpbiBhIFBORyBkYXRhc3RyZWFtXG4iKTsKLSAgIGlmKGZpbHRlcl90eXBlICE9IFBOR19GSUxURVJfVFlQRV9CQVNFKQotICAgewotICAgICBpZighKChwbmdfcHRyLT5tbmdfZmVhdHVyZXNfcGVybWl0dGVkICYgUE5HX0ZMQUdfTU5HX0ZJTFRFUl82NCkgJiYKLSAgICAgICAgKGZpbHRlcl90eXBlID09IFBOR19JTlRSQVBJWEVMX0RJRkZFUkVOQ0lORykgJiYKLSAgICAgICAgKChwbmdfcHRyLT5tb2RlJlBOR19IQVZFX1BOR19TSUdOQVRVUkUpID09IDApICYmCi0gICAgICAgIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fCAKLSAgICAgICAgIGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUkdCX0FMUEhBKSkpCi0gICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVW5rbm93biBmaWx0ZXIgbWV0aG9kIGluIElIRFIiKTsKLSAgICAgaWYocG5nX3B0ci0+bW9kZSZQTkdfSEFWRV9QTkdfU0lHTkFUVVJFKQotICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiSW52YWxpZCBmaWx0ZXIgbWV0aG9kIGluIElIRFIiKTsKLSAgIH0KLSNlbHNlCi0gICBpZihmaWx0ZXJfdHlwZSAhPSBQTkdfRklMVEVSX1RZUEVfQkFTRSkKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiVW5rbm93biBmaWx0ZXIgbWV0aG9kIGluIElIRFIiKTsKLSNlbmRpZgotCiAgICBpbmZvX3B0ci0+d2lkdGggPSB3aWR0aDsKICAgIGluZm9fcHRyLT5oZWlnaHQgPSBoZWlnaHQ7CiAgICBpbmZvX3B0ci0+Yml0X2RlcHRoID0gKHBuZ19ieXRlKWJpdF9kZXB0aDsKQEAgLTMxMCw3ICsyNDgsNiBAQAogCiAgICBpbmZvX3B0ci0+cGNhbF9wYXJhbXMgPSAocG5nX2NoYXJwcClwbmdfbWFsbG9jKHBuZ19wdHIsCiAgICAgICAocG5nX3VpbnRfMzIpKChucGFyYW1zICsgMSkgKiBzaXplb2YocG5nX2NoYXJwKSkpOwotCiAgICBpbmZvX3B0ci0+cGNhbF9wYXJhbXNbbnBhcmFtc10gPSBOVUxMOwogCiAgICBmb3IgKGkgPSAwOyBpIDwgbnBhcmFtczsgaSsrKQpAQCAtMzY1LDcgKzMwMiw3IEBACiAKICAgIGxlbmd0aCA9IHBuZ19zdHJsZW4oc2hlaWdodCkgKyAxOwogICAgcG5nX2RlYnVnMSgzLCAiYWxsb2NhdGluZyB1bml0IGZvciBpbmZvICglZCBieXRlcylcbiIsIGxlbmd0aCk7Ci0gICBpbmZvX3B0ci0+c2NhbF9zX2hlaWdodCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOworICAgaW5mb19wdHItPnNjYWxfc193aWR0aCA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLCBsZW5ndGgpOwogICAgcG5nX21lbWNweShpbmZvX3B0ci0+c2NhbF9zX2hlaWdodCwgc2hlaWdodCwgKHBuZ19zaXplX3QpbGVuZ3RoKTsKIAogICAgaW5mb19wdHItPnZhbGlkIHw9IFBOR19JTkZPX3NDQUw7CkBAIC00MTIsNyArMzQ5LDcgQEAKICNlbmRpZgogICAgcG5nX3B0ci0+cGFsZXR0ZSA9IChwbmdfY29sb3JwKXBuZ196YWxsb2MocG5nX3B0ciwgKHVJbnQpbnVtX3BhbGV0dGUsCiAgICAgICBzaXplb2YgKHBuZ19jb2xvcikpOwotICAgcG5nX21lbWNweShwbmdfcHRyLT5wYWxldHRlLCBwYWxldHRlLCBudW1fcGFsZXR0ZSAqIHNpemVvZiAocG5nX2NvbG9yKSk7CisgICBtZW1jcHkocG5nX3B0ci0+cGFsZXR0ZSwgcGFsZXR0ZSwgbnVtX3BhbGV0dGUgKiBzaXplb2YgKHBuZ19jb2xvcikpOwogICAgaW5mb19wdHItPnBhbGV0dGUgPSBwbmdfcHRyLT5wYWxldHRlOwogICAgaW5mb19wdHItPm51bV9wYWxldHRlID0gcG5nX3B0ci0+bnVtX3BhbGV0dGUgPSAocG5nX3VpbnRfMTYpbnVtX3BhbGV0dGU7CiAKQEAgLTUzNSw5ICs0NzIsOSBAQAogICAgaWYgKHBuZ19wdHIgPT0gTlVMTCB8fCBpbmZvX3B0ciA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCB8fCBwcm9maWxlID09IE5VTEwpCiAgICAgICByZXR1cm47CiAKLSAgIG5ld19pY2NwX25hbWUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX3N0cmxlbihuYW1lKSsxKTsKLSAgIHBuZ19zdHJjcHkobmV3X2ljY3BfbmFtZSwgbmFtZSk7Ci0gICBuZXdfaWNjcF9wcm9maWxlID0gKHBuZ19jaGFycClwbmdfbWFsbG9jKHBuZ19wdHIsIHByb2ZsZW4pOworICAgbmV3X2ljY3BfbmFtZSA9IHBuZ19tYWxsb2MocG5nX3B0ciwgcG5nX3N0cmxlbihuYW1lKSsxKTsKKyAgIHN0cmNweShuZXdfaWNjcF9uYW1lLCBuYW1lKTsKKyAgIG5ld19pY2NwX3Byb2ZpbGUgPSBwbmdfbWFsbG9jKHBuZ19wdHIsIHByb2ZsZW4pOwogICAgcG5nX21lbWNweShuZXdfaWNjcF9wcm9maWxlLCBwcm9maWxlLCAocG5nX3NpemVfdClwcm9mbGVuKTsKIAogICAgcG5nX2ZyZWVfZGF0YShwbmdfcHRyLCBpbmZvX3B0ciwgUE5HX0ZSRUVfSUNDUCwgMCk7CkBAIC02MDYsNyArNTQzLDcgQEAKICAgICAgIHBuZ19zaXplX3QgbGFuZ19sZW4sbGFuZ19rZXlfbGVuOwogICAgICAgcG5nX3RleHRwIHRleHRwID0gJihpbmZvX3B0ci0+dGV4dFtpbmZvX3B0ci0+bnVtX3RleHRdKTsKIAotICAgICAgaWYgKHRleHRfcHRyW2ldLmtleSA9PSBOVUxMKQorICAgICAgaWYgKHRleHRfcHRyW2ldLmtleSA9PSAocG5nX2NoYXJwKU5VTEwpCiAgICAgICAgICAgY29udGludWU7CiAKICAgICAgIGtleV9sZW4gPSBwbmdfc3RybGVuKHRleHRfcHRyW2ldLmtleSk7CkBAIC02MjAsMTEgKzU1NywxMSBAQAogI2lmZGVmIFBOR19pVFh0X1NVUFBPUlRFRAogICAgICAgewogICAgICAgICAvKiBzZXQgaVRYdCBkYXRhICovCi0gICAgICAgIGlmICh0ZXh0X3B0cltpXS5rZXkgIT0gTlVMTCkKKyAgICAgICAgaWYgKHRleHRfcHRyW2ldLmtleSAhPSAocG5nX2NoYXJwKU5VTEwpCiAgICAgICAgICAgbGFuZ19sZW4gPSBwbmdfc3RybGVuKHRleHRfcHRyW2ldLmxhbmcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgbGFuZ19sZW4gPSAwOwotICAgICAgICBpZiAodGV4dF9wdHJbaV0ubGFuZ19rZXkgIT0gTlVMTCkKKyAgICAgICAgaWYgKHRleHRfcHRyW2ldLmxhbmdfa2V5ICE9IChwbmdfY2hhcnApTlVMTCkKICAgICAgICAgICBsYW5nX2tleV9sZW4gPSBwbmdfc3RybGVuKHRleHRfcHRyW2ldLmxhbmdfa2V5KTsKICAgICAgICAgZWxzZQogICAgICAgICAgIGxhbmdfa2V5X2xlbiA9IDA7CkBAIC02MzYsNyArNTczLDcgQEAKICAgICAgIH0KICNlbmRpZgogCi0gICAgICBpZiAodGV4dF9wdHJbaV0udGV4dCA9PSBOVUxMIHx8IHRleHRfcHRyW2ldLnRleHRbMF0gPT0gJ1wwJykKKyAgICAgIGlmICh0ZXh0X3B0cltpXS50ZXh0ID09IChwbmdfY2hhcnApTlVMTCB8fCB0ZXh0X3B0cltpXS50ZXh0WzBdID09ICdcMCcpCiAgICAgICB7CiAgICAgICAgICB0ZXh0X2xlbmd0aCA9IDA7CiAjaWZkZWYgUE5HX2lUWHRfU1VQUE9SVEVECkBAIC02NTQsOSArNTkxLDggQEAKIAogICAgICAgdGV4dHAtPmtleSA9IChwbmdfY2hhcnApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgKHBuZ191aW50XzMyKShrZXlfbGVuICsgdGV4dF9sZW5ndGggKyBsYW5nX2xlbiArIGxhbmdfa2V5X2xlbiArIDQpKTsKLSAgICAgIHBuZ19kZWJ1ZzIoMiwgIkFsbG9jYXRlZCAlbHUgYnl0ZXMgYXQgJXggaW4gcG5nX3NldF90ZXh0XG4iLAotICAgICAgICAgKHBuZ191aW50XzMyKShrZXlfbGVuICsgbGFuZ19sZW4gKyBsYW5nX2tleV9sZW4gKyB0ZXh0X2xlbmd0aCArIDQpLAotICAgICAgICAgKGludCl0ZXh0cC0+a2V5KTsKKyAgICAgIHBuZ19kZWJ1ZzIoMiwgIkFsbG9jYXRlZCAlZCBieXRlcyBhdCAleCBpbiBwbmdfc2V0X3RleHRcbiIsCisgICAgICAgICBrZXlfbGVuICsgbGFuZ19sZW4gKyBsYW5nX2tleV9sZW4gKyB0ZXh0X2xlbmd0aCArIDQsIChpbnQpdGV4dHAtPmtleSk7CiAKICAgICAgIHBuZ19tZW1jcHkodGV4dHAtPmtleSwgdGV4dF9wdHJbaV0ua2V5LAogICAgICAgICAgKHBuZ19zaXplX3QpKGtleV9sZW4pKTsKQEAgLTc0MCw5ICs2NzYsOCBAQAogI2lmZGVmIFBOR19GUkVFX01FX1NVUFBPUlRFRAogICAgICAgIHBuZ19mcmVlX2RhdGEocG5nX3B0ciwgaW5mb19wdHIsIFBOR19GUkVFX1RSTlMsIDApOwogI2VuZGlmCi0gICAgICAgcG5nX3B0ci0+dHJhbnMgPSBpbmZvX3B0ci0+dHJhbnMgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKLSAgICAgICAgICAgbnVtX3RyYW5zKTsKLSAgICAgICBwbmdfbWVtY3B5KGluZm9fcHRyLT50cmFucywgdHJhbnMsIG51bV90cmFucyk7CisgICAgICAgcG5nX3B0ci0+dHJhbnMgPSBpbmZvX3B0ci0+dHJhbnMgPSBwbmdfbWFsbG9jKHBuZ19wdHIsIG51bV90cmFucyk7CisgICAgICAgbWVtY3B5KGluZm9fcHRyLT50cmFucywgdHJhbnMsIG51bV90cmFucyk7CiAjaWZkZWYgUE5HX0ZSRUVfTUVfU1VQUE9SVEVECiAgICAgICAgaW5mb19wdHItPmZyZWVfbWUgfD0gUE5HX0ZSRUVfVFJOUzsKICNlbHNlCkBAIC03ODQsMTIgKzcxOSwxMiBAQAogICAgICAgICBwbmdfc1BMVF90cCBmcm9tID0gZW50cmllcyArIGk7CiAKICAgICAgICAgdG8tPm5hbWUgPSAocG5nX2NoYXJwKXBuZ19tYWxsb2MocG5nX3B0ciwKLSAgICAgICAgICAgIHBuZ19zdHJsZW4oZnJvbS0+bmFtZSkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbmdfc3RybGVuKGZyb20tPm5hbWUpICsgMSk7CiAgICAgICAgIHBuZ19zdHJjcHkodG8tPm5hbWUsIGZyb20tPm5hbWUpOwogICAgICAgICB0by0+ZW50cmllcyA9IChwbmdfc1BMVF9lbnRyeXApcG5nX21hbGxvYyhwbmdfcHRyLAotICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOwogICAgICAgICBwbmdfbWVtY3B5KHRvLT5lbnRyaWVzLCBmcm9tLT5lbnRyaWVzLAotICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOworICAgICAgICAgICAgICAgZnJvbS0+bmVudHJpZXMgKiBzaXplb2YocG5nX3NQTFRfdCkpOwogICAgICAgICB0by0+bmVudHJpZXMgPSBmcm9tLT5uZW50cmllczsKICAgICAgICAgdG8tPmRlcHRoID0gZnJvbS0+ZGVwdGg7CiAgICAgfQpAQCAtODAzLDcgKzczOCw3IEBACiB9CiAjZW5kaWYgLyogUE5HX3NQTFRfU1VQUE9SVEVEICovCiAKLSNpZiBkZWZpbmVkKFBOR19VTktOT1dOX0NIVU5LU19TVVBQT1JURUQpCisjaWYgZGVmaW5lZChQTkdfV1JJVEVfVU5LTk9XTl9DSFVOS1NfU1VQUE9SVEVEKQogdm9pZCBQTkdBUEkKIHBuZ19zZXRfdW5rbm93bl9jaHVua3MocG5nX3N0cnVjdHAgcG5nX3B0ciwKICAgIHBuZ19pbmZvcCBpbmZvX3B0ciwgcG5nX3Vua25vd25fY2h1bmtwIHVua25vd25zLCBpbnQgbnVtX3Vua25vd25zKQpAQCAtOTA1LDggKzg0MCw4IEBACiAgICAgaWYgKGNodW5rX2xpc3QgPT0gTlVMTCkKICAgICAgIHJldHVybjsKICAgICBvbGRfbnVtX2NodW5rcz1wbmdfcHRyLT5udW1fY2h1bmtfbGlzdDsKLSAgICBuZXdfbGlzdD0ocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciw1KihudW1fY2h1bmtzK29sZF9udW1fY2h1bmtzKSk7Ci0gICAgaWYocG5nX3B0ci0+Y2h1bmtfbGlzdCAhPSBOVUxMKQorICAgIG5ld19saXN0PXBuZ19tYWxsb2MocG5nX3B0ciw1KihudW1fY2h1bmtzK29sZF9udW1fY2h1bmtzKSk7CisgICAgaWYocG5nX3B0ci0+Y2h1bmtfbGlzdCAhPSAocG5nX2J5dGVwKU5VTEwpCiAgICAgewogICAgICAgIHBuZ19tZW1jcHkobmV3X2xpc3QsIHBuZ19wdHItPmNodW5rX2xpc3QsIDUqb2xkX251bV9jaHVua3MpOwogICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIHBuZ19wdHItPmNodW5rX2xpc3QpOwpAQCAtOTQ4LDYgKzg4Myw3IEBACiAgICBpbmZvX3B0ci0+cm93X3BvaW50ZXJzID0gcm93X3BvaW50ZXJzOwogICAgaWYocm93X3BvaW50ZXJzKQogICAgICAgaW5mb19wdHItPnZhbGlkIHw9IFBOR19JTkZPX0lEQVQ7CisKIH0KICNlbmRpZgogCkBAIC05NTgsNiArODk0LDggQEAKICAgICAgICBwbmdfZnJlZShwbmdfcHRyLCBwbmdfcHRyLT56YnVmKTsKICAgICBwbmdfcHRyLT56YnVmX3NpemUgPSAocG5nX3NpemVfdClzaXplOwogICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwgc2l6ZSk7CisgICAgaWYoIXBuZ19wdHItPnpidWYpCisgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsIlVuYWJsZSB0byBtYWxsb2MgemJ1ZiIpOwogICAgIHBuZ19wdHItPnpzdHJlYW0ubmV4dF9vdXQgPSBwbmdfcHRyLT56YnVmOwogICAgIHBuZ19wdHItPnpzdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpcG5nX3B0ci0+emJ1Zl9zaXplOwogfQpkaWZmIC0tZ2l0IGEvcG5ndGVzdC5jIGIvcG5ndGVzdC5jCmluZGV4IGRhYWE2YjguLjA5NTkwZmUgMTAwNjQ0Ci0tLSBhL3BuZ3Rlc3QuYworKysgYi9wbmd0ZXN0LmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3Rlc3QuYyAtIGEgc2ltcGxlIHRlc3QgcHJvZ3JhbSB0byB0ZXN0IGxpYnBuZwogICoKLSAqIGxpYnBuZyAxLjAuMTJiZXRhMSAtIE1heSAxNCwgMjAwMQorICogbGlicG5nIDEuMi4wYmV0YTEgLSBNYXkgNiwgMjAwMQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCiAgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMSBHbGVubiBSYW5kZXJzLVBlaHJzb24KICAqIChWZXJzaW9uIDAuOTYgQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3IEFuZHJlYXMgRGlsZ2VyKQpAQCAtNTEsMjAgKzUxLDE2IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoUE5HX05PX1NURElPKQotIyAgaWYgZGVmaW5lZChfV0lOMzJfV0NFKQotICAgICB0eXBlZGVmIEhBTkRMRSAgICAgICAgICAgICAgICBwbmdfRklMRV9wOwotIyAgZWxzZQotICAgICB0eXBlZGVmIEZJTEUgICAgICAgICAgICAgICAgKiBwbmdfRklMRV9wOwotIyAgZW5kaWYKKyNpZiBkZWZpbmVkKF9XSU4zMl9XQ0UpCit0eXBlZGVmIEhBTkRMRSAgICAgICAgICAgICAgICBwbmdfRklMRV9wOworI2Vsc2UKK3R5cGVkZWYgRklMRSAgICAgICAgICAgICAgICAqIHBuZ19GSUxFX3A7CisjZW5kaWYKICNlbmRpZgogCiAvKiBNYWtlcyBwbmd0ZXN0IHZlcmJvc2Ugc28gd2UgY2FuIGZpbmQgcHJvYmxlbXMgKG5lZWRzIHRvIGJlIGJlZm9yZSBwbmcuaCkgKi8KICNpZm5kZWYgUE5HX0RFQlVHCi0jICBkZWZpbmUgUE5HX0RFQlVHIDAKLSNlbmRpZgotCi0jaWYgIVBOR19ERUJVRwotIyAgZGVmaW5lIFNJTkdMRV9ST1dCVUZfQUxMT0MJLyogbWFrZXMgYnVmZmVyIG92ZXJydW5zIGVhc2llciB0byBuYWlsICovCisjZGVmaW5lIFBOR19ERUJVRyAwCiAjZW5kaWYKIAogLyogVHVybiBvbiBDUFUgdGltaW5nCkBAIC0yODMsNyArMjc5LDcgQEAKIAogICAgaWYgKGNoZWNrICE9IGxlbmd0aCkKICAgIHsKLSAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiUmVhZCBFcnJvciEiKTsKKyAgICAgIHBuZ19lcnJvcihwbmdfcHRyLCAiUmVhZCBFcnJvciIpOwogICAgfQogfQogI2Vsc2UKQEAgLTQ4OCwxNSArNDg0LDE0IEBACiAgICAvKiBUaGlzIGNhbGxzIHRoZSBsaWJyYXJ5IGFsbG9jYXRvciB0d2ljZSwgb25jZSB0byBnZXQgdGhlIHJlcXVlc3RlZAogICAgICAgYnVmZmVyIGFuZCBvbmNlIHRvIGdldCBhIG5ldyBmcmVlIGxpc3QgZW50cnkuICovCiAgICB7Ci0gICAgICBtZW1vcnlfaW5mb3AgcGluZm8gPSAobWVtb3J5X2luZm9wKXBuZ19tYWxsb2NfZGVmYXVsdChwbmdfcHRyLAotICAgICAgICAgc2l6ZW9mICpwaW5mbyk7CisgICAgICBtZW1vcnlfaW5mb3AgcGluZm8gPSBwbmdfbWFsbG9jX2RlZmF1bHQocG5nX3B0ciwgc2l6ZW9mICpwaW5mbyk7CiAgICAgICBwaW5mby0+c2l6ZSA9IHNpemU7CiAgICAgICBjdXJyZW50X2FsbG9jYXRpb24gKz0gc2l6ZTsKICAgICAgIHRvdGFsX2FsbG9jYXRpb24gKz0gc2l6ZTsKICAgICAgIG51bV9hbGxvY2F0aW9ucyArKzsKICAgICAgIGlmIChjdXJyZW50X2FsbG9jYXRpb24gPiBtYXhpbXVtX2FsbG9jYXRpb24pCiAgICAgICAgICBtYXhpbXVtX2FsbG9jYXRpb24gPSBjdXJyZW50X2FsbG9jYXRpb247Ci0gICAgICBwaW5mby0+cG9pbnRlciA9IChwbmdfdm9pZHApcG5nX21hbGxvY19kZWZhdWx0KHBuZ19wdHIsIHNpemUpOworICAgICAgcGluZm8tPnBvaW50ZXIgPSBwbmdfbWFsbG9jX2RlZmF1bHQocG5nX3B0ciwgc2l6ZSk7CiAgICAgICBwaW5mby0+bmV4dCA9IHBpbmZvcm1hdGlvbjsKICAgICAgIHBpbmZvcm1hdGlvbiA9IHBpbmZvOwogICAgICAgLyogTWFrZSBzdXJlIHRoZSBjYWxsZXIgaXNuJ3QgYXNzdW1pbmcgemVyb2VkIG1lbW9yeS4gKi8KQEAgLTUzOCw3ICs1MzMsNyBAQAogICAgICAgICAgICAgICAgZnByaW50ZihTVERFUlIsICJEdXBsaWNhdGUgZnJlZSBvZiBtZW1vcnlcbiIpOwogICAgICAgICAgICAgLyogV2UgbXVzdCBmcmVlIHRoZSBsaXN0IGVsZW1lbnQgdG9vLCBidXQgZmlyc3Qga2lsbAogICAgICAgICAgICAgICAgdGhlIG1lbW9yeSB0aGF0IGlzIHRvIGJlIGZyZWVkLiAqLwotICAgICAgICAgICAgcG5nX21lbXNldChwdHIsIDB4NTUsIHBpbmZvLT5zaXplKTsKKyAgICAgICAgICAgIG1lbXNldChwdHIsIDB4NTUsIHBpbmZvLT5zaXplKTsKICAgICAgICAgICAgIHBuZ19mcmVlX2RlZmF1bHQocG5nX3B0ciwgcGluZm8pOwogICAgICAgICAgICAgcGluZm89TlVMTDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTY5LDE3ICs1NjQsOCBAQAogewogICAgc3RhdGljIHBuZ19GSUxFX3AgZnBpbjsKICAgIHN0YXRpYyBwbmdfRklMRV9wIGZwb3V0OyAgLyogInN0YXRpYyIgcHJldmVudHMgc2V0am1wIGNvcnJ1cHRpb24gKi8KLSAgIHBuZ19zdHJ1Y3RwIHJlYWRfcHRyOwotICAgcG5nX2luZm9wIHJlYWRfaW5mb19wdHIsIGVuZF9pbmZvX3B0cjsKLSNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECi0gICBwbmdfc3RydWN0cCB3cml0ZV9wdHI7Ci0gICBwbmdfaW5mb3Agd3JpdGVfaW5mb19wdHI7Ci0gICBwbmdfaW5mb3Agd3JpdGVfZW5kX2luZm9fcHRyOwotI2Vsc2UKLSAgIHBuZ19zdHJ1Y3RwIHdyaXRlX3B0ciA9IE5VTEw7Ci0gICBwbmdfaW5mb3Agd3JpdGVfaW5mb19wdHIgPSBOVUxMOwotICAgcG5nX2luZm9wIHdyaXRlX2VuZF9pbmZvX3B0ciA9IE5VTEw7Ci0jZW5kaWYKKyAgIHBuZ19zdHJ1Y3RwIHJlYWRfcHRyLCB3cml0ZV9wdHI7CisgICBwbmdfaW5mb3AgcmVhZF9pbmZvX3B0ciwgd3JpdGVfaW5mb19wdHIsIGVuZF9pbmZvX3B0ciwgd3JpdGVfZW5kX2luZm9fcHRyOwogICAgcG5nX2J5dGVwIHJvd19idWY7CiAgICBwbmdfdWludF8zMiB5OwogICAgcG5nX3VpbnRfMzIgd2lkdGgsIGhlaWdodDsKQEAgLTYzNCw3ICs2MjAsNiBAQAogICAgcG5nX3NldF9lcnJvcl9mbihyZWFkX3B0ciwgKHBuZ192b2lkcClpbm5hbWUsIHBuZ3Rlc3RfZXJyb3IsCiAgICAgICAgcG5ndGVzdF93YXJuaW5nKTsKICNlbmRpZgotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECiAgICB3cml0ZV9wdHIgPSBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdF8yKFBOR19MSUJQTkdfVkVSX1NUUklORywgKHBuZ192b2lkcClOVUxMLAogICAgICAgKHBuZ19lcnJvcl9wdHIpTlVMTCwgKHBuZ19lcnJvcl9wdHIpTlVMTCwgKHBuZ192b2lkcClOVUxMLApAQCAtNjQ3LDEzICs2MzIsMTIgQEAKICAgIHBuZ19zZXRfZXJyb3JfZm4od3JpdGVfcHRyLCAocG5nX3ZvaWRwKWlubmFtZSwgcG5ndGVzdF9lcnJvciwKICAgICAgICBwbmd0ZXN0X3dhcm5pbmcpOwogI2VuZGlmCi0jZW5kaWYKICAgIHBuZ19kZWJ1ZygwLCAiQWxsb2NhdGluZyByZWFkX2luZm8sIHdyaXRlX2luZm8gYW5kIGVuZF9pbmZvIHN0cnVjdHVyZXNcbiIpOwogICAgcmVhZF9pbmZvX3B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3QocmVhZF9wdHIpOwotICAgZW5kX2luZm9fcHRyID0gcG5nX2NyZWF0ZV9pbmZvX3N0cnVjdChyZWFkX3B0cik7Ci0jaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgd3JpdGVfaW5mb19wdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHdyaXRlX3B0cik7CisgICBlbmRfaW5mb19wdHIgPSBwbmdfY3JlYXRlX2luZm9fc3RydWN0KHJlYWRfcHRyKTsKICAgIHdyaXRlX2VuZF9pbmZvX3B0ciA9IHBuZ19jcmVhdGVfaW5mb19zdHJ1Y3Qod3JpdGVfcHRyKTsKKyNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECiAjZW5kaWYKIAogI2lmZGVmIFBOR19TRVRKTVBfU1VQUE9SVEVECkBAIC02NjYsMTAgKzY1MCw4IEBACiAgICB7CiAgICAgICBmcHJpbnRmKFNUREVSUiwgIiVzIC0+ICVzOiBsaWJwbmcgcmVhZCBlcnJvclxuIiwgaW5uYW1lLCBvdXRuYW1lKTsKICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mb19wdHIsICZlbmRfaW5mb19wdHIpOwotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICAgICAgIHBuZ19kZXN0cm95X2luZm9fc3RydWN0KHdyaXRlX3B0ciwgJndyaXRlX2VuZF9pbmZvX3B0cik7CiAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm9fcHRyKTsKLSNlbmRpZgogICAgICAgRkNMT1NFKGZwaW4pOwogICAgICAgRkNMT1NFKGZwb3V0KTsKICAgICAgIHJldHVybiAoMSk7CkBAIC02NzgsNyArNjYwLDYgQEAKICAgIHBuZ19tZW1jcHkocG5nX2ptcGJ1ZihyZWFkX3B0ciksam1wYnVmLHNpemVvZihqbXBfYnVmKSk7CiAjZW5kaWYKIAotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICAgIHBuZ19kZWJ1ZygwLCAiU2V0dGluZyBqbXBidWYgZm9yIHdyaXRlIHN0cnVjdFxuIik7CiAjaWZkZWYgVVNFX0ZBUl9LRVlXT1JECiAgICBpZiAoc2V0am1wKGptcGJ1ZikpCkBAIC02ODksOSArNjcwLDcgQEAKICAgICAgIGZwcmludGYoU1RERVJSLCAiJXMgLT4gJXM6IGxpYnBuZyB3cml0ZSBlcnJvclxuIiwgaW5uYW1lLCBvdXRuYW1lKTsKICAgICAgIHBuZ19kZXN0cm95X3JlYWRfc3RydWN0KCZyZWFkX3B0ciwgJnJlYWRfaW5mb19wdHIsICZlbmRfaW5mb19wdHIpOwogICAgICAgcG5nX2Rlc3Ryb3lfaW5mb19zdHJ1Y3Qod3JpdGVfcHRyLCAmd3JpdGVfZW5kX2luZm9fcHRyKTsKLSNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm9fcHRyKTsKLSNlbmRpZgogICAgICAgRkNMT1NFKGZwaW4pOwogICAgICAgRkNMT1NFKGZwb3V0KTsKICAgICAgIHJldHVybiAoMSk7CkBAIC03MDAsMzcgKzY3OSwyOCBAQAogICAgcG5nX21lbWNweShwbmdfam1wYnVmKHdyaXRlX3B0ciksam1wYnVmLHNpemVvZihqbXBfYnVmKSk7CiAjZW5kaWYKICNlbmRpZgotI2VuZGlmCiAKICAgIHBuZ19kZWJ1ZygwLCAiSW5pdGlhbGl6aW5nIGlucHV0IGFuZCBvdXRwdXQgc3RyZWFtc1xuIik7CiAjaWYgIWRlZmluZWQoUE5HX05PX1NURElPKQogICAgcG5nX2luaXRfaW8ocmVhZF9wdHIsIGZwaW4pOwotIyAgaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgcG5nX2luaXRfaW8od3JpdGVfcHRyLCBmcG91dCk7Ci0jICBlbmRpZgogI2Vsc2UKICAgIHBuZ19zZXRfcmVhZF9mbihyZWFkX3B0ciwgKHBuZ192b2lkcClmcGluLCBwbmd0ZXN0X3JlYWRfZGF0YSk7Ci0jICBpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECiAgICBwbmdfc2V0X3dyaXRlX2ZuKHdyaXRlX3B0ciwgKHBuZ192b2lkcClmcG91dCwgIHBuZ3Rlc3Rfd3JpdGVfZGF0YSwKLSMgICAgaWYgZGVmaW5lZChQTkdfV1JJVEVfRkxVU0hfU1VQUE9SVEVEKQorI2lmIGRlZmluZWQoUE5HX1dSSVRFX0ZMVVNIX1NVUFBPUlRFRCkKICAgICAgIHBuZ3Rlc3RfZmx1c2gpOwotIyAgICBlbHNlCisjZWxzZQogICAgICAgTlVMTCk7Ci0jICAgIGVuZGlmCi0jICBlbmRpZgorI2VuZGlmCiAjZW5kaWYKICAgIGlmKHN0YXR1c19kb3RzX3JlcXVlc3RlZCA9PSAxKQogICAgewotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICAgICAgIHBuZ19zZXRfd3JpdGVfc3RhdHVzX2ZuKHdyaXRlX3B0ciwgd3JpdGVfcm93X2NhbGxiYWNrKTsKLSNlbmRpZgogICAgICAgcG5nX3NldF9yZWFkX3N0YXR1c19mbihyZWFkX3B0ciwgcmVhZF9yb3dfY2FsbGJhY2spOwogICAgfQogICAgZWxzZQogICAgewotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICAgICAgIHBuZ19zZXRfd3JpdGVfc3RhdHVzX2ZuKHdyaXRlX3B0ciwgTlVMTCk7Ci0jZW5kaWYKICAgICAgIHBuZ19zZXRfcmVhZF9zdGF0dXNfZm4ocmVhZF9wdHIsIE5VTEwpOwogICAgfQogCkBAIC0xMDE0LDI5ICs5ODQsMzIgQEAKICAgIH0KICNlbmRpZgogCi0jaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgcG5nX2RlYnVnKDAsICJcbldyaXRpbmcgaW5mbyBzdHJ1Y3RcbiIpOwogCiAvKiBJZiB3ZSB3YW50ZWQsIHdlIGNvdWxkIHdyaXRlIGluZm8gaW4gdHdvIHN0ZXBzOgogICAgcG5nX3dyaXRlX2luZm9fYmVmb3JlX1BMVEUod3JpdGVfcHRyLCB3cml0ZV9pbmZvX3B0cik7CiAgKi8KICAgIHBuZ193cml0ZV9pbmZvKHdyaXRlX3B0ciwgd3JpdGVfaW5mb19wdHIpOwotI2VuZGlmCiAKLSNpZmRlZiBTSU5HTEVfUk9XQlVGX0FMTE9DCi0gICBwbmdfZGVidWcoMCwgIlxuQWxsb2NhdGluZyByb3cgYnVmZmVyLi4uIik7CisgICBwbmdfZGVidWcoMCwgIlxuQWxsb2NhdGluZyByb3cgYnVmZmVyIFxuIik7CiAgICByb3dfYnVmID0gKHBuZ19ieXRlcClwbmdfbWFsbG9jKHJlYWRfcHRyLAogICAgICAgcG5nX2dldF9yb3dieXRlcyhyZWFkX3B0ciwgcmVhZF9pbmZvX3B0cikpOwotICAgcG5nX2RlYnVnMSgwLCAiMHglMDhseFxuXG4iLCAodW5zaWduZWQgbG9uZylyb3dfYnVmKTsKLSNlbmRpZiAvKiBTSU5HTEVfUk9XQlVGX0FMTE9DICovCisgICBpZiAocm93X2J1ZiA9PSBOVUxMKQorICAgeworICAgICAgZnByaW50ZihTVERFUlIsICJObyBtZW1vcnkgdG8gYWxsb2NhdGUgcm93IGJ1ZmZlclxuIik7CisgICAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmcmVhZF9wdHIsICZyZWFkX2luZm9fcHRyLCAocG5nX2luZm9wcClOVUxMKTsKKyAgICAgIHBuZ19kZXN0cm95X2luZm9fc3RydWN0KHdyaXRlX3B0ciwgJndyaXRlX2VuZF9pbmZvX3B0cik7CisgICAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm9fcHRyKTsKKyAgICAgIEZDTE9TRShmcGluKTsKKyAgICAgIEZDTE9TRShmcG91dCk7CisgICAgICByZXR1cm4gKDEpOworICAgfQogICAgcG5nX2RlYnVnKDAsICJXcml0aW5nIHJvdyBkYXRhXG4iKTsKIAogI2lmIGRlZmluZWQoUE5HX1JFQURfSU5URVJMQUNJTkdfU1VQUE9SVEVEKSB8fCBcCiAgIGRlZmluZWQoUE5HX1dSSVRFX0lOVEVSTEFDSU5HX1NVUFBPUlRFRCkKICAgIG51bV9wYXNzID0gcG5nX3NldF9pbnRlcmxhY2VfaGFuZGxpbmcocmVhZF9wdHIpOwotIyAgaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgcG5nX3NldF9pbnRlcmxhY2VfaGFuZGxpbmcod3JpdGVfcHRyKTsKLSMgIGVuZGlmCiAjZWxzZQogICAgbnVtX3Bhc3M9MTsKICNlbmRpZgpAQCAtMTA1MSwxNiArMTAyNCw3IEBACiAgICAgICBwbmdfZGVidWcxKDAsICJXcml0aW5nIHJvdyBkYXRhIGZvciBwYXNzICVkXG4iLHBhc3MpOwogICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgICAgewotI2lmbmRlZiBTSU5HTEVfUk9XQlVGX0FMTE9DCi0gICAgICAgICBwbmdfZGVidWcyKDAsICJcbkFsbG9jYXRpbmcgcm93IGJ1ZmZlciAocGFzcyAlZCwgeSA9ICVsZCkuLi4iLCBwYXNzLHkpOwotICAgICAgICAgcm93X2J1ZiA9IChwbmdfYnl0ZXApcG5nX21hbGxvYyhyZWFkX3B0ciwKLSAgICAgICAgICAgIHBuZ19nZXRfcm93Ynl0ZXMocmVhZF9wdHIsIHJlYWRfaW5mb19wdHIpKTsKLSAgICAgICAgIHBuZ19kZWJ1ZzIoMCwgIjB4JTA4bHggKCVsZCBieXRlcylcbiIsICh1bnNpZ25lZCBsb25nKXJvd19idWYsCi0gICAgICAgICAgICBwbmdfZ2V0X3Jvd2J5dGVzKHJlYWRfcHRyLCByZWFkX2luZm9fcHRyKSk7Ci0jZW5kaWYgLyogIVNJTkdMRV9ST1dCVUZfQUxMT0MgKi8KICAgICAgICAgIHBuZ19yZWFkX3Jvd3MocmVhZF9wdHIsIChwbmdfYnl0ZXBwKSZyb3dfYnVmLCAocG5nX2J5dGVwcClOVUxMLCAxKTsKLQotI2lmZGVmIFBOR19XUklURV9TVVBQT1JURUQKICNpZmRlZiBQTkdURVNUX1RJTUlORwogICAgICAgICAgdF9zdG9wID0gKGZsb2F0KWNsb2NrKCk7CiAgICAgICAgICB0X2RlY29kZSArPSAodF9zdG9wIC0gdF9zdGFydCk7CkBAIC0xMDcyLDEyICsxMDM2LDYgQEAKICAgICAgICAgIHRfZW5jb2RlICs9ICh0X3N0b3AgLSB0X3N0YXJ0KTsKICAgICAgICAgIHRfc3RhcnQgPSB0X3N0b3A7CiAjZW5kaWYKLSNlbmRpZiAvKiBQTkdfV1JJVEVfU1VQUE9SVEVEICovCi0KLSNpZm5kZWYgU0lOR0xFX1JPV0JVRl9BTExPQwotICAgICAgICAgcG5nX2RlYnVnMigwLCAiRnJlZWluZyByb3cgYnVmZmVyIChwYXNzICVkLCB5ID0gJWxkKVxuXG4iLCBwYXNzLCB5KTsKLSAgICAgICAgIHBuZ19mcmVlKHJlYWRfcHRyLCByb3dfYnVmKTsKLSNlbmRpZiAvKiAhU0lOR0xFX1JPV0JVRl9BTExPQyAqLwogICAgICAgfQogICAgfQogCkBAIC0xMTQwLDkgKzEwOTgsNyBAQAogICAgICAgfQogICAgfQogI2VuZGlmCi0jaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogICAgcG5nX3dyaXRlX2VuZCh3cml0ZV9wdHIsIHdyaXRlX2VuZF9pbmZvX3B0cik7Ci0jZW5kaWYKIAogI2lmZGVmIFBOR19FQVNZX0FDQ0VTU19TVVBQT1JURUQKICAgIGlmKHZlcmJvc2UpCkBAIC0xMTU2LDIwICsxMTEyLDExIEBACiAjZW5kaWYKIAogICAgcG5nX2RlYnVnKDAsICJEZXN0cm95aW5nIGRhdGEgc3RydWN0c1xuIik7Ci0jaWZkZWYgU0lOR0xFX1JPV0JVRl9BTExPQwotICAgcG5nX2RlYnVnKDEsICJkZXN0cm95aW5nIHJvd19idWYgZm9yIHJlYWRfcHRyXG4iKTsKICAgIHBuZ19mcmVlKHJlYWRfcHRyLCByb3dfYnVmKTsKICAgIHJvd19idWY9TlVMTDsKLSNlbmRpZiAvKiBTSU5HTEVfUk9XQlVGX0FMTE9DICovCi0gICBwbmdfZGVidWcoMSwgImRlc3Ryb3lpbmcgcmVhZF9wdHIsIHJlYWRfaW5mb19wdHIsIGVuZF9pbmZvX3B0clxuIik7CiAgICBwbmdfZGVzdHJveV9yZWFkX3N0cnVjdCgmcmVhZF9wdHIsICZyZWFkX2luZm9fcHRyLCAmZW5kX2luZm9fcHRyKTsKLSNpZmRlZiBQTkdfV1JJVEVfU1VQUE9SVEVECi0gICBwbmdfZGVidWcoMSwgImRlc3Ryb3lpbmcgd3JpdGVfZW5kX2luZm9fcHRyXG4iKTsKICAgIHBuZ19kZXN0cm95X2luZm9fc3RydWN0KHdyaXRlX3B0ciwgJndyaXRlX2VuZF9pbmZvX3B0cik7Ci0gICBwbmdfZGVidWcoMSwgImRlc3Ryb3lpbmcgd3JpdGVfcHRyLCB3cml0ZV9pbmZvX3B0clxuIik7CiAgICBwbmdfZGVzdHJveV93cml0ZV9zdHJ1Y3QoJndyaXRlX3B0ciwgJndyaXRlX2luZm9fcHRyKTsKLSNlbmRpZgotICAgcG5nX2RlYnVnKDAsICJEZXN0cnVjdGlvbiBjb21wbGV0ZS5cbiIpOwogCiAgICBGQ0xPU0UoZnBpbik7CiAgICBGQ0xPU0UoZnBvdXQpOwpAQCAtMTUxMSw0ICsxNDU4LDQgQEAKIH0KIAogLyogR2VuZXJhdGUgYSBjb21waWxlciBlcnJvciBpZiB0aGVyZSBpcyBhbiBvbGQgcG5nLmggaW4gdGhlIHNlYXJjaCBwYXRoLiAqLwotdHlwZWRlZiB2ZXJzaW9uXzFfMF8xMmJldGExIHlvdXJfcG5nX2hfaXNfbm90X3ZlcnNpb25fMV8wXzEyYmV0YTE7Cit0eXBlZGVmIHZlcnNpb25fMV8yXzBiZXRhMSB5b3VyX3BuZ19oX2lzX25vdF92ZXJzaW9uXzFfMl8wYmV0YTE7CmRpZmYgLS1naXQgYS9wbmd0cmFucy5jIGIvcG5ndHJhbnMuYwppbmRleCA4NWQyNzU1Li41YmM0YWQ1IDEwMDY0NAotLS0gYS9wbmd0cmFucy5jCisrKyBiL3BuZ3RyYW5zLmMKQEAgLTEsNyArMSw3IEBACiAKIC8qIHBuZ3RyYW5zLmMgLSB0cmFuc2Zvcm1zIHRoZSBkYXRhIGluIGEgcm93ICh1c2VkIGJ5IGJvdGggcmVhZGVycyBhbmQgd3JpdGVycykKICAqCi0gKiBsaWJwbmcgMS4wLjEyYmV0YTEgLSBNYXkgMTQsIDIwMDEKKyAqIGxpYnBuZyAxLjIuMGJldGExIC0gTWF5IDYsIDIwMDEKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBwbmcuaAogICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDEgR2xlbm4gUmFuZGVycy1QZWhyc29uCiAgKiAoVmVyc2lvbiAwLjk2IENvcHlyaWdodCAoYykgMTk5NiwgMTk5NyBBbmRyZWFzIERpbGdlcikKQEAgLTM5MiwxMiArMzkyLDExIEBACiAgICAgICAgICAgICAgICBzcCArPSA4OyBkcCArPSA2OwogICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHJvd193aWR0aDsgaSsrKQogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb3VsZCBiZSAoYWx0aG91Z2ggcG5nX21lbWNweSBpcyBwcm9iYWJseSBzbG93ZXIpOgorICAgICAgICAgICAgICAgICAgLyogVGhpcyBjb3VsZCBiZSAoYWx0aG91Z2ggbWVtY3B5IGlzIHByb2JhYmx5IHNsb3dlcik6CiAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRwLCBzcCwgNik7CiAgICAgICAgICAgICAgICAgICBzcCArPSA4OwogICAgICAgICAgICAgICAgICAgZHAgKz0gNjsKICAgICAgICAgICAgICAgICAgICovCi0KICAgICAgICAgICAgICAgICAgICpkcCsrID0gKnNwKys7CiAgICAgICAgICAgICAgICAgICAqZHArKyA9ICpzcCsrOwogICAgICAgICAgICAgICAgICAgKmRwKysgPSAqc3ArKzsKQEAgLTQxMiwxMiArNDExLDExIEBACiAgICAgICAgICAgICAgICAvKiBUaGlzIGNvbnZlcnRzIGZyb20gWFhSUkdHQkIgb3IgQUFSUkdHQkIgdG8gUlJHR0JCICovCiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93X3dpZHRoOyBpKyspCiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAvKiBUaGlzIGNvdWxkIGJlIChhbHRob3VnaCBwbmdfbWVtY3B5IGlzIHByb2JhYmx5IHNsb3dlcik6CisgICAgICAgICAgICAgICAgICAvKiBUaGlzIGNvdWxkIGJlIChhbHRob3VnaCBtZW1jcHkgaXMgcHJvYmFibHkgc2xvd2VyKToKICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHNwLCA2KTsKICAgICAgICAgICAgICAgICAgIHNwICs9IDg7CiAgICAgICAgICAgICAgICAgICBkcCArPSA2OwogICAgICAgICAgICAgICAgICAgKi8KLQogICAgICAgICAgICAgICAgICAgc3ArPTI7CiAgICAgICAgICAgICAgICAgICAqZHArKyA9ICpzcCsrOwogICAgICAgICAgICAgICAgICAgKmRwKysgPSAqc3ArKzsKZGlmZiAtLWdpdCBhL3BuZ3ZjcmQuYyBiL3BuZ3ZjcmQuYwppbmRleCA3NWNjOWI1Li4wNGMyMDI1IDEwMDY0NAotLS0gYS9wbmd2Y3JkLmMKKysrIGIvcG5ndmNyZC5jCkBAIC0yLDE0ICsyLDE0IEBACiAgKgogICogRm9yIEludGVsIHg4NiBDUFUgYW5kIE1pY3Jvc29mdCBWaXN1YWwgQysrIGNvbXBpbGVyCiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogQ29weXJpZ2h0IChjKSAxOTk4LCBJbnRlbCBDb3Jwb3JhdGlvbgogICoKICAqIENvbnRyaWJ1dGVkIGJ5IE5pcmF2IENoaGF0cmFwYXRpLCBJbnRlbCBDb3Jwb3JhdGlvbiwgMTk5OAogICogSW50ZXJmYWNlIHRvIGxpYnBuZyBjb250cmlidXRlZCBieSBHaWxsZXMgVm9sbGFudCwgMTk5OQotICogRGVidWdnaW5nIGFuZCBjbGVhbnVwIGJ5IEdyZWcgUm9lbG9mcywgMjAwMCwgMjAwMQorICoKICAqCiAgKiBJbiBwbmdfZG9fcmVhZF9pbnRlcmxhY2UoKSBpbiBsaWJwbmcgdmVyc2lvbnMgMS4wLjNhIHRocm91Z2ggMS4wLjRkLAogICogYSBzaWduIGVycm9yIGluIHRoZSBwb3N0LU1NWCBjbGVhbnVwIGNvZGUgZm9yIGVhY2ggcGl4ZWxfZGVwdGggcmVzdWx0ZWQKQEAgLTE5LDYgKzE5LDggQEAKICAqCiAgKiBbcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfYXZnKCkgYnBwID09IDIgYnVnZml4LCBHUlIgMjAwMDA5MTZdCiAgKgorICogW3J1bnRpbWUgTU1YIGNvbmZpZ3VyYXRpb24sIEdSUiAyMDAxMDEwMl0KKyAqCiAgKi8KIAogI2RlZmluZSBQTkdfSU5URVJOQUwKQEAgLTExMCw2ICsxMTIsOCBAQAogICAgcG5nX2RlYnVnKDEsImluIHBuZ19jb21iaW5lX3Jvd19hc21cbiIpOwogCiAgICBpZiAobW14X3N1cHBvcnRlZCA9PSAyKSB7CisgICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCisgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwogICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwogICAgfQogCkBAIC0zMDAsNyArMzA0LDggQEAKIAogICAgICAgICAgICAgX19pbnQ2NCBtYXNrMD0weDAxMDIwNDA4MTAyMDQwODA7CiAKLSAgICAgICAgICAgIGlmICggbW14X3N1cHBvcnRlZCApCisgICAgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9DT01CSU5FX1JPVykKKyAgICAgICAgICAgICAgICAvKiAmJiBtbXhfc3VwcG9ydGVkICovICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNyY3B0ciA9IHBuZ19wdHItPnJvd19idWYgKyAxOwogICAgICAgICAgICAgICAgZHN0cHRyID0gcm93OwpAQCAtMzgyLDggKzM4Nyw2IEBACiAgICAgICAgICAgICAgICBpbmNyMSA9IChkaXNwKSpwaXhlbF9ieXRlczsKICAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IGluY3IxKQogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID4gKHBuZ19zaXplX3QpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocG5nX3NpemVfdCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcGl4ZWxfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IGluY3IxOwogICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IGluY3IxOwpAQCAtNDAyLDcgKzQwNSw4IEBACiAgICAgICAgICAgICBfX2ludDY0IG1hc2sxPTB4MDEwMTAyMDIwNDA0MDgwOCwKICAgICAgICAgICAgICAgICAgICAgbWFzazA9MHgxMDEwMjAyMDQwNDA4MDgwOwogCi0gICAgICAgICAgICBpZiAoIG1teF9zdXBwb3J0ZWQgKQorICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCisgICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKQEAgLTQ5NSw4ICs0OTksNiBAQAogICAgICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA+IChwbmdfc2l6ZV90KShmaW5hbF92YWwtaSkpCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHBuZ19zaXplX3QpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBpbmNyMTsKICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBpbmNyMTsKQEAgLTUyNCw3ICs1MjYsOCBAQAogICAgICAgICAgICAgbGVuICAgICA9IChwbmdfcHRyLT53aWR0aCkmfjc7CiAgICAgICAgICAgICBkaWZmID0gKHBuZ19wdHItPndpZHRoKSY3OwogCi0gICAgICAgICAgICBpZiAoIG1teF9zdXBwb3J0ZWQgKQorICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCisgICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfYXNtCiAgICAgICAgICAgICAgICB7CkBAIC02MjcsOCArNjMwLDYgQEAKICAgICAgICAgICAgICAgIGluY3IxID0gKGRpc3ApKnBpeGVsX2J5dGVzOwogICAgICAgICAgICAgICAgZm9yIChpID0gaW5pdGlhbF92YWw7IGkgPCBmaW5hbF92YWw7IGkgKz0gaW5jcjEpCiAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBpZiAocGl4ZWxfYnl0ZXMgPiAocG5nX3NpemVfdCkoZmluYWxfdmFsLWkpKQotICAgICAgICAgICAgICAgICAgICBwaXhlbF9ieXRlcyA9IChwbmdfc2l6ZV90KShmaW5hbF92YWwtaSk7CiAgICAgICAgICAgICAgICAgICBwbmdfbWVtY3B5KGRzdHB0ciwgc3JjcHRyLCBwaXhlbF9ieXRlcyk7CiAgICAgICAgICAgICAgICAgICBzcmNwdHIgKz0gaW5jcjE7CiAgICAgICAgICAgICAgICAgICBkc3RwdHIgKz0gaW5jcjE7CkBAIC02NTcsNyArNjU4LDggQEAKICAgICAgICAgICAgIGxlbiAgICAgPSAocG5nX3B0ci0+d2lkdGgpJn43OwogICAgICAgICAgICAgZGlmZiA9IChwbmdfcHRyLT53aWR0aCkmNzsKIAotICAgICAgICAgICAgaWYgKCBtbXhfc3VwcG9ydGVkICkKKyAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0NPTUJJTkVfUk9XKQorICAgICAgICAgICAgICAgIC8qICYmIG1teF9zdXBwb3J0ZWQgKi8gKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX2FzbQogICAgICAgICAgICAgICAgewpAQCAtNzY4LDggKzc3MCw2IEBACiAgICAgICAgICAgICAgICBpbmNyMSA9IChkaXNwKSpwaXhlbF9ieXRlczsKICAgICAgICAgICAgICAgIGZvciAoaSA9IGluaXRpYWxfdmFsOyBpIDwgZmluYWxfdmFsOyBpICs9IGluY3IxKQogICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgaWYgKHBpeGVsX2J5dGVzID4gKHBuZ19zaXplX3QpKGZpbmFsX3ZhbC1pKSkKLSAgICAgICAgICAgICAgICAgICAgcGl4ZWxfYnl0ZXMgPSAocG5nX3NpemVfdCkoZmluYWxfdmFsLWkpOwogICAgICAgICAgICAgICAgICAgcG5nX21lbWNweShkc3RwdHIsIHNyY3B0ciwgcGl4ZWxfYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgc3JjcHRyICs9IGluY3IxOwogICAgICAgICAgICAgICAgICAgZHN0cHRyICs9IGluY3IxOwpAQCAtNzkzLDcgKzc5Myw4IEBACiAgICAgICAgICAgICAgICAgICAgIG1hc2sxPTB4MjAyMDIwMjA0MDQwNDA0MCwKICAgICAgICAgICAgICAgICAgICAgbWFzazA9MHg0MDQwODA4MDgwODA4MDgwOwogCi0gICAgICAgICAgICBpZiAoIG1teF9zdXBwb3J0ZWQgKQorICAgICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfQ09NQklORV9ST1cpCisgICAgICAgICAgICAgICAgLyogJiYgbW14X3N1cHBvcnRlZCAqLyApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzcmNwdHIgPSBwbmdfcHRyLT5yb3dfYnVmICsgMTsKICAgICAgICAgICAgICAgIGRzdHB0ciA9IHJvdzsKQEAgLTkyNyw4ICs5MjgsNiBAQAogICAgICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA+IChwbmdfc2l6ZV90KShmaW5hbF92YWwtaSkpCi0gICAgICAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHBuZ19zaXplX3QpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHN0cHRyLCBzcmNwdHIsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgICAgIHNyY3B0ciArPSBpbmNyMTsKICAgICAgICAgICAgICAgICAgIGRzdHB0ciArPSBpbmNyMTsKQEAgLTk1Nyw4ICs5NTYsNiBAQAogICAgICAgICAgICAgaW5jcjEgPSAoZGlzcCkqcGl4ZWxfYnl0ZXM7CiAgICAgICAgICAgICBmb3IgKGkgPSBpbml0aWFsX3ZhbDsgaSA8IGZpbmFsX3ZhbDsgaSArPSBpbmNyMSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA+IChwbmdfc2l6ZV90KShmaW5hbF92YWwtaSkpCi0gICAgICAgICAgICAgICAgIHBpeGVsX2J5dGVzID0gKHBuZ19zaXplX3QpKGZpbmFsX3ZhbC1pKTsKICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoZHAsIHNwdHIsIHBpeGVsX2J5dGVzKTsKICAgICAgICAgICAgICAgIHNwdHIgKz0gaW5jcjE7CiAgICAgICAgICAgICAgICBkcCArPSBpbmNyMTsKQEAgLTk4Nyw2ICs5ODQsOCBAQAogICAgcG5nX2RlYnVnKDEsImluIHBuZ19kb19yZWFkX2ludGVybGFjZVxuIik7CiAKICAgIGlmIChtbXhfc3VwcG9ydGVkID09IDIpIHsKKyAgICAgICAvKiB0aGlzIHNob3VsZCBoYXZlIGhhcHBlbmVkIGluIHBuZ19pbml0X21teF9mbGFncygpIGFscmVhZHkgKi8KKyAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiYXNtX2ZsYWdzIG1heSBub3QgaGF2ZSBiZWVuIGluaXRpYWxpemVkIik7CiAgICAgICAgcG5nX21teF9zdXBwb3J0KCk7CiAgICB9CiAKQEAgLTExODcsNyArMTE4Niw4IEBACiAgICAgICAgICAgICAvLyBOT1RFOiAgdGhlcmUgaXMgTk8gTU1YIGNvZGUgZm9yIDQ4LWJpdCBhbmQgNjQtYml0IGltYWdlcwogCiAgICAgICAgICAgICAvLyB1c2UgTU1YIHJvdXRpbmUgaWYgbWFjaGluZSBzdXBwb3J0cyBpdAotICAgICAgICAgICAgaWYgKCBtbXhfc3VwcG9ydGVkICkKKyAgICAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0lOVEVSTEFDRSkKKyAgICAgICAgICAgICAgICAvKiAmJiBtbXhfc3VwcG9ydGVkICovICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA9PSAzKQogICAgICAgICAgICAgICAgewpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAKICAgICAgICAgICAgIH0gLyogZW5kIG9mIG1teF9zdXBwb3J0ZWQgKi8KIAogICAgICAgICAgICAgZWxzZSAvKiBNTVggbm90IHN1cHBvcnRlZDogIHVzZSBtb2RpZmllZCBDIGNvZGUgLSB0YWtlcyBhZHZhbnRhZ2UKLSAgICAgICAgICAgICAgICAgICogb2YgaW5saW5pbmcgb2YgcG5nX21lbWNweSBmb3IgYSBjb25zdGFudCAqLworICAgICAgICAgICAgICAgICAgKiBvZiBpbmxpbmluZyBvZiBtZW1jcHkgZm9yIGEgY29uc3RhbnQgKi8KICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChwaXhlbF9ieXRlcyA9PSAxKQogICAgICAgICAgICAgICAgewpAQCAtMzY0OSw2ICszNjQ5LDggQEAKICNlbmRpZgogCiAgICBpZiAobW14X3N1cHBvcnRlZCA9PSAyKSB7CisgICAgICAgLyogdGhpcyBzaG91bGQgaGF2ZSBoYXBwZW5lZCBpbiBwbmdfaW5pdF9tbXhfZmxhZ3MoKSBhbHJlYWR5ICovCisgICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwgImFzbV9mbGFncyBtYXkgbm90IGhhdmUgYmVlbiBpbml0aWFsaXplZCIpOwogICAgICAgIHBuZ19tbXhfc3VwcG9ydCgpOwogICAgfQogCkBAIC0zNjU4LDEzICszNjYwLDE3IEBACiAgICB7CiAgICAgICBjYXNlIDA6IHNwcmludGYoZmlsbm0sICJub25lIik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgMTogc3ByaW50ZihmaWxubSwgInN1Yi0lcyIsICJNTVgiKTsKKyAgICAgIGNhc2UgMTogc3ByaW50ZihmaWxubSwgInN1Yi0lcyIsCisgICAgICAgIChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1NVQik/ICJNTVgiIDogIng4NiIpOwogICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIDI6IHNwcmludGYoZmlsbm0sICJ1cC0lcyIsICJNTVgiKTsKKyAgICAgIGNhc2UgMjogc3ByaW50ZihmaWxubSwgInVwLSVzIiwKKyAgICAgICAgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfVVApPyAiTU1YIiA6ICJ4ODYiKTsKICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSAzOiBzcHJpbnRmKGZpbG5tLCAiYXZnLSVzIiwgIk1NWCIpOworICAgICAgY2FzZSAzOiBzcHJpbnRmKGZpbG5tLCAiYXZnLSVzIiwKKyAgICAgICAgKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfQVZHKT8gIk1NWCIgOiAieDg2Iik7CiAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgNDogc3ByaW50ZihmaWxubSwgIlBhZXRoLSVzIiwgIk1NWCIpOworICAgICAgY2FzZSA0OiBzcHJpbnRmKGZpbG5tLCAiUGFldGgtJXMiLAorICAgICAgICAocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9QQUVUSCk/ICJNTVgiOiJ4ODYiKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogc3ByaW50ZihmaWxubSwgInVua253Iik7CiAgICAgICAgICBicmVhazsKQEAgLTM2ODIsOSArMzY4OCw5IEBACiAKICAgICAgIGNhc2UgUE5HX0ZJTFRFUl9WQUxVRV9TVUI6CiAgICAgICB7Ci0gICAgICAgICBpZiAoCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBQTkdfTU1YX0JJVERFUFRIX1RIUkVTSE9MRF9ERUZBVUxUKSAmJgotICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gUE5HX01NWF9ST1dCWVRFU19USFJFU0hPTERfREVGQVVMVCkpCisgICAgICAgICBpZiAoKHBuZ19wdHItPmFzbV9mbGFncyAmIFBOR19BU01fRkxBR19NTVhfUkVBRF9GSUxURVJfU1VCKSAmJgorICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKKyAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQogICAgICAgICAgewogICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfc3ViKHJvd19pbmZvLCByb3cpOwogICAgICAgICAgfQpAQCAtMzcwNyw5ICszNzEzLDkgQEAKIAogICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1VQOgogICAgICAgewotICAgICAgICAgaWYgKAotICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gUE5HX01NWF9CSVRERVBUSF9USFJFU0hPTERfREVGQVVMVCkgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IFBOR19NTVhfUk9XQllURVNfVEhSRVNIT0xEX0RFRkFVTFQpKQorICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1VQKSAmJgorICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKKyAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQogICAgICAgICAgewogICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfdXAocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICAgfQpAQCAtMzczMSw5ICszNzM3LDkgQEAKIAogICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX0FWRzoKICAgICAgIHsKLSAgICAgICAgIGlmICgKLSAgICAgICAgICAgICAocm93X2luZm8tPnBpeGVsX2RlcHRoID49IFBOR19NTVhfQklUREVQVEhfVEhSRVNIT0xEX0RFRkFVTFQpICYmCi0gICAgICAgICAgICAgKHJvd19pbmZvLT5yb3dieXRlcyA+PSBQTkdfTU1YX1JPV0JZVEVTX1RIUkVTSE9MRF9ERUZBVUxUKSkKKyAgICAgICAgIGlmICgocG5nX3B0ci0+YXNtX2ZsYWdzICYgUE5HX0FTTV9GTEFHX01NWF9SRUFEX0ZJTFRFUl9BVkcpICYmCisgICAgICAgICAgICAgKHJvd19pbmZvLT5waXhlbF9kZXB0aCA+PSBwbmdfcHRyLT5tbXhfYml0ZGVwdGhfdGhyZXNob2xkKSAmJgorICAgICAgICAgICAgIChyb3dfaW5mby0+cm93Ynl0ZXMgPj0gcG5nX3B0ci0+bW14X3Jvd2J5dGVzX3RocmVzaG9sZCkpCiAgICAgICAgICB7CiAgICAgICAgICAgICBwbmdfcmVhZF9maWx0ZXJfcm93X21teF9hdmcocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICAgfQpAQCAtMzc2NSw5ICszNzcxLDkgQEAKIAogICAgICAgY2FzZSBQTkdfRklMVEVSX1ZBTFVFX1BBRVRIOgogICAgICAgewotICAgICAgICAgaWYgKAotICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gUE5HX01NWF9CSVRERVBUSF9USFJFU0hPTERfREVGQVVMVCkgJiYKLSAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IFBOR19NTVhfUk9XQllURVNfVEhSRVNIT0xEX0RFRkFVTFQpKQorICAgICAgICAgaWYgKChwbmdfcHRyLT5hc21fZmxhZ3MgJiBQTkdfQVNNX0ZMQUdfTU1YX1JFQURfRklMVEVSX1BBRVRIKSAmJgorICAgICAgICAgICAgIChyb3dfaW5mby0+cGl4ZWxfZGVwdGggPj0gcG5nX3B0ci0+bW14X2JpdGRlcHRoX3RocmVzaG9sZCkgJiYKKyAgICAgICAgICAgICAocm93X2luZm8tPnJvd2J5dGVzID49IHBuZ19wdHItPm1teF9yb3dieXRlc190aHJlc2hvbGQpKQogICAgICAgICAgewogICAgICAgICAgICAgcG5nX3JlYWRfZmlsdGVyX3Jvd19tbXhfcGFldGgocm93X2luZm8sIHJvdywgcHJldl9yb3cpOwogICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcG5nd2lvLmMgYi9wbmd3aW8uYwppbmRleCAxYjRlMjY2Li5mZWJmMjE3IDEwMDY0NAotLS0gYS9wbmd3aW8uYworKysgYi9wbmd3aW8uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd2lvLmMgLSBmdW5jdGlvbnMgZm9yIGRhdGEgb3V0cHV0CiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xNyw3ICsxNyw2IEBACiAKICNkZWZpbmUgUE5HX0lOVEVSTkFMCiAjaW5jbHVkZSAicG5nLmgiCi0jaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogCiAvKiBXcml0ZSB0aGUgZGF0YSB0byB3aGF0ZXZlciBvdXRwdXQgeW91IGFyZSB1c2luZy4gIFRoZSBkZWZhdWx0IHJvdXRpbmUKICAgIHdyaXRlcyB0byBhIGZpbGUgcG9pbnRlci4gIE5vdGUgdGhhdCB0aGlzIHJvdXRpbmUgc29tZXRpbWVzIGdldHMgY2FsbGVkCkBAIC0yMjUsNCArMjI0LDMgQEAKIH0KICMgICBlbmRpZgogIyAgIGVuZGlmCi0jZW5kaWYgLyogUE5HX1dSSVRFX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvcG5nd3JpdGUuYyBiL3BuZ3dyaXRlLmMKaW5kZXggODY4MjljNC4uNjA2NzM2NyAxMDA2NDQKLS0tIGEvcG5nd3JpdGUuYworKysgYi9wbmd3cml0ZS5jCkBAIC0xLDcgKzEsNyBAQAogCiAvKiBwbmd3cml0ZS5jIC0gZ2VuZXJhbCByb3V0aW5lcyB0byB3cml0ZSBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC00NDQsNyArNDQ0LDcgQEAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3RcbiIpOwogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKICAgIGlmICgocG5nX3B0ciA9IChwbmdfc3RydWN0cClwbmdfY3JlYXRlX3N0cnVjdF8yKFBOR19TVFJVQ1RfUE5HLAotICAgICAgKHBuZ19tYWxsb2NfcHRyKW1hbGxvY19mbiwgKHBuZ192b2lkcCltZW1fcHRyKSkgPT0gTlVMTCkKKyAgICAgIChwbmdfbWFsbG9jX3B0ciltYWxsb2NfZm4pKSA9PSBOVUxMKQogI2Vsc2UKICAgIGlmICgocG5nX3B0ciA9IChwbmdfc3RydWN0cClwbmdfY3JlYXRlX3N0cnVjdChQTkdfU1RSVUNUX1BORykpID09IE5VTEwpCiAjZW5kaWYgLyogUE5HX1VTRVJfTUVNX1NVUFBPUlRFRCAqLwpAQCAtNDUyLDYgKzQ1MiwxMCBAQAogICAgICAgcmV0dXJuICgocG5nX3N0cnVjdHApTlVMTCk7CiAgICB9CiAKKyNpZmRlZiBQTkdfQVNTRU1CTEVSX0NPREVfU1VQUE9SVEVECisgICBwbmdfaW5pdF9tbXhfZmxhZ3MocG5nX3B0cik7ICAgLyogMS4yLjAgYWRkaXRpb24gKi8KKyNlbmRpZgorCiAjaWZkZWYgUE5HX1NFVEpNUF9TVVBQT1JURUQKICNpZmRlZiBVU0VfRkFSX0tFWVdPUkQKICAgIGlmIChzZXRqbXAoam1wYnVmKSkKQEAgLTQ4OSw3ICs0OTMsNiBAQAogICAgICAgKiBvbmx5IGNoZWNrIHRoZSBmaXJzdCBkaWdpdC4KICAgICAgICovCiAgICAgIGlmICh1c2VyX3BuZ192ZXIgPT0gTlVMTCB8fCB1c2VyX3BuZ192ZXJbMF0gIT0gcG5nX2xpYnBuZ192ZXJbMF0gfHwKLSAgICAgICAgICh1c2VyX3BuZ192ZXJbMF0gPT0gJzEnICYmIHVzZXJfcG5nX3ZlclsyXSAhPSBwbmdfbGlicG5nX3ZlclsyXSkgfHwKICAgICAgICAgICh1c2VyX3BuZ192ZXJbMF0gPT0gJzAnICYmIHVzZXJfcG5nX3ZlclsyXSA8ICc5JykpCiAgICAgIHsKICAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsCkBAIC00OTcsMTcgKzUwMCwxNSBAQAogICAgICB9CiAKICAgICAgLyogTGlicG5nIDEuMC42IHdhcyBub3QgYmluYXJ5IGNvbXBhdGlibGUsIGR1ZSB0byBpbnNlcnRpb24gb2YgdGhlCi0gICAgICAgIGluZm9fcHRyLT5mcmVlX21lIG1lbWJlci4gIExpYnBuZy0xLjAuMSBhbmQgZWFybGllciB3ZXJlIG5vdAotICAgICAgICBjb21wYXRpYmxlIGR1ZSB0byBpbnNlcnRpb24gb2YgdGhlIHVzZXIgdHJhbnNmb3JtIGZ1bmN0aW9uLiBOb3RlCi0gICAgICAgIHRvIG1haW50YWluZXI6IHRoaXMgdGVzdCBjYW4gYmUgcmVtb3ZlZCBmcm9tIHZlcnNpb24gMS4yLjAgYW5kCi0gICAgICAgIGJleW9uZCBiZWNhdXNlIHRoZSBwcmV2aW91cyB0ZXN0IHdvdWxkIGhhdmUgYWxyZWFkeSByZWplY3RlZCBpdC4gKi8KKyAgICAgICAgaW5mb19wdHItPmZyZWVfbWUgbWVtYmVyLiAgTm90ZSB0byBtYWludGFpbmVyOiB0aGlzIHRlc3QgY2FuIGJlCisgICAgICAgIHJlbW92ZWQgZnJvbSB2ZXJzaW9uIDIuMC4wIGFuZCBiZXlvbmQgYmVjYXVzZSB0aGUgcHJldmlvdXMgdGVzdAorICAgICAgICB3b3VsZCBoYXZlIGFscmVhZHkgcmVqZWN0ZWQgaXQuICovCiAKLSAgICAgaWYgKHVzZXJfcG5nX3ZlclswXSA9PSAnMScgJiYgdXNlcl9wbmdfdmVyWzJdID09ICcwJyAmJgotICAgICAgICAgKHVzZXJfcG5nX3Zlcls0XSA8ICAnMicgfHwgdXNlcl9wbmdfdmVyWzRdID09ICc2JykgJiYKLSAgICAgICAgIHVzZXJfcG5nX3Zlcls1XSA9PSAnXDAnKQorICAgICBpZiAodXNlcl9wbmdfdmVyWzRdID09ICc2JyAmJiB1c2VyX3BuZ192ZXJbMl0gPT0gJzAnICYmCisgICAgICAgICB1c2VyX3BuZ192ZXJbMF0gPT0gJzEnICYmIHVzZXJfcG5nX3Zlcls1XSA9PSAnXDAnKQogICAgICB7CiAgICAgICAgIHBuZ19lcnJvcihwbmdfcHRyLAotICAgICAgICAiQXBwbGljYXRpb24gbXVzdCBiZSByZWNvbXBpbGVkOyB2ZXJzaW9ucyA8PSAxLjAuNiB3ZXJlIGluY29tcGF0aWJsZSIpOworICAgICAgICAgICAiQXBwbGljYXRpb24gbXVzdCBiZSByZWNvbXBpbGVkOyB2ZXJzaW9uIDEuMC42IHdhcyBpbmNvbXBhdGlibGUiKTsKICAgICAgfQogICAgfQogCkBAIC01MzIsMzYgKzUzMywxMyBAQAogcG5nX3dyaXRlX2luaXQocG5nX3N0cnVjdHAgcG5nX3B0cikKIHsKICAgIC8qIFdlIG9ubHkgY29tZSBoZXJlIHZpYSBwcmUtMS4wLjctY29tcGlsZWQgYXBwbGljYXRpb25zICovCi0gICBwbmdfd3JpdGVfaW5pdF8yKHBuZ19wdHIsICIxLjAuMCIsIDAsIDApOworICAgcG5nX3dyaXRlX2luaXRfMihwbmdfcHRyLCAiMS4wLjAiLCAxMDAwMCwgMTAwMDApOwogfQogCi0jdW5kZWYgcG5nX3dyaXRlX2luaXRfMgogdm9pZCBQTkdBUEkKIHBuZ193cml0ZV9pbml0XzIocG5nX3N0cnVjdHAgcG5nX3B0ciwgcG5nX2NvbnN0X2NoYXJwIHVzZXJfcG5nX3ZlciwKICAgIHBuZ19zaXplX3QgcG5nX3N0cnVjdF9zaXplLCBwbmdfc2l6ZV90IHBuZ19pbmZvX3NpemUpCiB7Ci0gICAvKiBXZSBvbmx5IGNvbWUgaGVyZSB2aWEgcHJlLTEuMC4xMi1jb21waWxlZCBhcHBsaWNhdGlvbnMgKi8KLSAgIGlmKHNpemVvZihwbmdfc3RydWN0KSA+IHBuZ19zdHJ1Y3Rfc2l6ZSkKLSAgICAgewotICAgICAgIHBuZ19wdHItPmVycm9yX2ZuPShwbmdfZXJyb3JfcHRyKU5VTEw7Ci0gICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsCi0gICAgICAgICAiVGhlIHBuZyBzdHJ1Y3QgYWxsb2NhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpcyB0b28gc21hbGwuIik7Ci0gICAgIH0KLSAgIGlmKHNpemVvZihwbmdfaW5mbykgPiBwbmdfaW5mb19zaXplKQotICAgICB7Ci0gICAgICAgcG5nX3B0ci0+ZXJyb3JfZm49KHBuZ19lcnJvcl9wdHIpTlVMTDsKLSAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwKLSAgICAgICAgICJUaGUgaW5mbyBzdHJ1Y3QgYWxsb2NhdGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiBpcyB0b28gc21hbGwuIik7Ci0gICAgIH0KLSAgIHBuZ193cml0ZV9pbml0XzMoJnBuZ19wdHIsIHVzZXJfcG5nX3ZlciwgcG5nX3N0cnVjdF9zaXplKTsKLX0KLQotCi12b2lkIFBOR0FQSQotcG5nX3dyaXRlX2luaXRfMyhwbmdfc3RydWN0cHAgcHRyX3B0ciwgcG5nX2NvbnN0X2NoYXJwIHVzZXJfcG5nX3ZlciwKLSAgIHBuZ19zaXplX3QgcG5nX3N0cnVjdF9zaXplKQotewotICAgcG5nX3N0cnVjdHAgcG5nX3B0cj0qcHRyX3B0cjsKICNpZmRlZiBQTkdfU0VUSk1QX1NVUFBPUlRFRAogICAgam1wX2J1ZiB0bXBfam1wOyAvKiB0byBzYXZlIGN1cnJlbnQganVtcCBidWZmZXIgKi8KICNlbmRpZgpAQCAtNTczLDQyICs1NTEsNDUgQEAKICNpZmRlZiBQTkdfTEVHQUNZX1NVUFBPUlRFRAogICAgICAgIHBuZ19wdHItPmZsYWdzIHw9IFBOR19GTEFHX0xJQlJBUllfTUlTTUFUQ0g7CiAjZWxzZQotICAgICAgIHBuZ19wdHItPndhcm5pbmdfZm49KHBuZ19lcnJvcl9wdHIpTlVMTDsKLSAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLAotICAgICAiQXBwbGljYXRpb24gdXNlcyBkZXByZWNhdGVkIHBuZ193cml0ZV9pbml0KCkgYW5kIHNob3VsZCBiZSByZWNvbXBpbGVkLiIpOwotICAgICAgIGJyZWFrOworICAgICAgIHBuZ19wdHItPmVycm9yX2ZuPShwbmdfZXJyb3JfcHRyKU5VTEw7CisgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsCisgICAgICAgIkFwcGxpY2F0aW9uIHVzZXMgZGVwcmVjYXRlZCBwbmdfd3JpdGVfaW5pdCgpIGFuZCBtdXN0IGJlIHJlY29tcGlsZWQuIik7CiAjZW5kaWYKICAgICAgfQogICAgfSB3aGlsZSAocG5nX2xpYnBuZ192ZXJbaSsrXSk7CiAKLSAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX3dyaXRlX2luaXRfM1xuIik7CisgICBpZiAoc2l6ZW9mKHBuZ19zdHJ1Y3QpID4gcG5nX3N0cnVjdF9zaXplIHx8CisgICAgICBzaXplb2YocG5nX2luZm8pID4gcG5nX2luZm9fc2l6ZSkKKyAgICAgeworICAgICAgIHBuZ19wdHItPmVycm9yX2ZuPShwbmdfZXJyb3JfcHRyKU5VTEw7CisgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsCisgICAgICAiQXBwbGljYXRpb24gYW5kIGxpYnJhcnkgaGF2ZSBkaWZmZXJlbnQgc2l6ZWQgc3RydWN0cy4gUGxlYXNlIHJlY29tcGlsZS4iKTsKKyAgICAgfQorCisgICBwbmdfZGVidWcoMSwgImluIHBuZ193cml0ZV9pbml0XzJcbiIpOwogCiAjaWZkZWYgUE5HX1NFVEpNUF9TVVBQT1JURUQKICAgIC8qIHNhdmUganVtcCBidWZmZXIgYW5kIGVycm9yIGZ1bmN0aW9ucyAqLwogICAgcG5nX21lbWNweSh0bXBfam1wLCBwbmdfcHRyLT5qbXBidWYsIHNpemVvZiAoam1wX2J1ZikpOwogI2VuZGlmCiAKLSAgIGlmIChzaXplb2YocG5nX3N0cnVjdCkgPiBwbmdfc3RydWN0X3NpemUpCi0gICAgIHsKLSAgICAgICBwbmdfZGVzdHJveV9zdHJ1Y3QocG5nX3B0cik7Ci0gICAgICAgcG5nX3B0ciA9IChwbmdfc3RydWN0cClwbmdfY3JlYXRlX3N0cnVjdChQTkdfU1RSVUNUX1BORyk7Ci0gICAgICAgKnB0cl9wdHIgPSBwbmdfcHRyOwotICAgICB9Ci0KICAgIC8qIHJlc2V0IGFsbCB2YXJpYWJsZXMgdG8gMCAqLwogICAgcG5nX21lbXNldChwbmdfcHRyLCAwLCBzaXplb2YgKHBuZ19zdHJ1Y3QpKTsKIAorI2lmZGVmIFBOR19BU1NFTUJMRVJfQ09ERV9TVVBQT1JURUQKKyAgIHBuZ19pbml0X21teF9mbGFncyhwbmdfcHRyKTsgICAvKiAxLjIuMCBhZGRpdGlvbiAqLworI2VuZGlmCisKICNpZmRlZiBQTkdfU0VUSk1QX1NVUFBPUlRFRAogICAgLyogcmVzdG9yZSBqdW1wIGJ1ZmZlciAqLwogICAgcG5nX21lbWNweShwbmdfcHRyLT5qbXBidWYsIHRtcF9qbXAsIHNpemVvZiAoam1wX2J1ZikpOwogI2VuZGlmCiAKLSAgIHBuZ19zZXRfd3JpdGVfZm4ocG5nX3B0ciwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0KICAgIC8qIGluaXRpYWxpemUgemJ1ZiAtIGNvbXByZXNzaW9uIGJ1ZmZlciAqLwogICAgcG5nX3B0ci0+emJ1Zl9zaXplID0gUE5HX1pCVUZfU0laRTsKICAgIHBuZ19wdHItPnpidWYgPSAocG5nX2J5dGVwKXBuZ19tYWxsb2MocG5nX3B0ciwKICAgICAgIChwbmdfdWludF8zMilwbmdfcHRyLT56YnVmX3NpemUpOworICAgcG5nX3NldF93cml0ZV9mbihwbmdfcHRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKIAogI2lmIGRlZmluZWQoUE5HX1dSSVRFX1dFSUdIVEVEX0ZJTFRFUl9TVVBQT1JURUQpCiAgICBwbmdfc2V0X2ZpbHRlcl9oZXVyaXN0aWNzKHBuZ19wdHIsIFBOR19GSUxURVJfSEVVUklTVElDX0RFRkFVTFQsCkBAIC05MDMsNyArODg0LDYgQEAKICAgIHBuZ19pbmZvcCBpbmZvX3B0ciA9IE5VTEw7CiAjaWZkZWYgUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAogICAgcG5nX2ZyZWVfcHRyIGZyZWVfZm4gPSBOVUxMOwotICAgcG5nX3ZvaWRwIG1lbV9wdHIgPSBOVUxMOwogI2VuZGlmCiAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX2Rlc3Ryb3lfd3JpdGVfc3RydWN0XG4iKTsKQEAgLTkzMiw4ICs5MTIsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBQTkdfVVNFUl9NRU1fU1VQUE9SVEVECi0gICAgICBwbmdfZGVzdHJveV9zdHJ1Y3RfMigocG5nX3ZvaWRwKWluZm9fcHRyLCAocG5nX2ZyZWVfcHRyKWZyZWVfZm4sCi0gICAgICAgICAocG5nX3ZvaWRwKW1lbV9wdHIpOworICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0XzIoKHBuZ192b2lkcClpbmZvX3B0ciwgZnJlZV9mbik7CiAjZWxzZQogICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0KChwbmdfdm9pZHApaW5mb19wdHIpOwogI2VuZGlmCkBAIC05NDQsOCArOTIzLDcgQEAKICAgIHsKICAgICAgIHBuZ193cml0ZV9kZXN0cm95KHBuZ19wdHIpOwogI2lmZGVmIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLSAgICAgIHBuZ19kZXN0cm95X3N0cnVjdF8yKChwbmdfdm9pZHApcG5nX3B0ciwgKHBuZ19mcmVlX3B0cilmcmVlX2ZuLAotICAgICAgICAgKHBuZ192b2lkcCltZW1fcHRyKTsKKyAgICAgIHBuZ19kZXN0cm95X3N0cnVjdF8yKChwbmdfdm9pZHApcG5nX3B0ciwgZnJlZV9mbik7CiAjZWxzZQogICAgICAgcG5nX2Rlc3Ryb3lfc3RydWN0KChwbmdfdm9pZHApcG5nX3B0cik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3BuZ3d0cmFuLmMgYi9wbmd3dHJhbi5jCmluZGV4IDg3NDBiODMuLjA2NzFlYzUgMTAwNjQ0Ci0tLSBhL3BuZ3d0cmFuLmMKKysrIGIvcG5nd3RyYW4uYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3RyYW4uYyAtIHRyYW5zZm9ybXMgdGhlIGRhdGEgaW4gYSByb3cgZm9yIFBORyB3cml0ZXJzCiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xMCw3ICsxMCw2IEBACiAKICNkZWZpbmUgUE5HX0lOVEVSTkFMCiAjaW5jbHVkZSAicG5nLmgiCi0jaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogCiAvKiBUcmFuc2Zvcm0gdGhlIGRhdGEgYWNjb3JkaW5nIHRvIHRoZSB1c2VyJ3Mgd2lzaGVzLiAgVGhlIG9yZGVyIG9mCiAgKiB0cmFuc2Zvcm1hdGlvbnMgaXMgc2lnbmlmaWNhbnQuCkBAIC01NjAsNCArNTU5LDMgQEAKICAgIH0KIH0KICNlbmRpZiAvKiBQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCAqLwotI2VuZGlmIC8qIFBOR19XUklURV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL3BuZ3d1dGlsLmMgYi9wbmd3dXRpbC5jCmluZGV4IGVkOTY0Y2UuLjRiYmI3YWQgMTAwNjQ0Ci0tLSBhL3BuZ3d1dGlsLmMKKysrIGIvcG5nd3V0aWwuYwpAQCAtMSw3ICsxLDcgQEAKIAogLyogcG5nd3V0aWwuYyAtIHV0aWxpdGllcyB0byB3cml0ZSBhIFBORyBmaWxlCiAgKgotICogbGlicG5nIDEuMC4xMmJldGExIC0gTWF5IDE0LCAyMDAxCisgKiBsaWJwbmcgMS4yLjBiZXRhMSAtIE1heSA2LCAyMDAxCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gcG5nLmgKICAqIENvcHlyaWdodCAoYykgMTk5OC0yMDAxIEdsZW5uIFJhbmRlcnMtUGVocnNvbgogICogKFZlcnNpb24gMC45NiBDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIpCkBAIC0xMCw3ICsxMCw2IEBACiAKICNkZWZpbmUgUE5HX0lOVEVSTkFMCiAjaW5jbHVkZSAicG5nLmgiCi0jaWZkZWYgUE5HX1dSSVRFX1NVUFBPUlRFRAogCiAvKiBQbGFjZSBhIDMyLWJpdCBudW1iZXIgaW50byBhIGJ1ZmZlciBpbiBQTkcgYnl0ZSBvcmRlci4gIFdlIHdvcmsKICAqIHdpdGggdW5zaWduZWQgbnVtYmVycyBmb3IgY29udmVuaWVuY2UsIGFsdGhvdWdoIG9uZSBzdXBwb3J0ZWQKQEAgLTIzNSw4ICsyMzQsOCBAQAogICAgICAgICAgICAgICAgb2xkX3B0ciA9IGNvbXAtPm91dHB1dF9wdHI7CiAgICAgICAgICAgICAgICBjb21wLT5vdXRwdXRfcHRyID0gKHBuZ19jaGFycHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShjb21wLT5tYXhfb3V0cHV0X3B0ciAqIHNpemVvZiAocG5nX2NoYXJwcCkpKTsKLSAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0ciwgb2xkX3B0ciwgb2xkX21heAotICAgICAgICAgICAgICAgICAgKiBzaXplb2YgKHBuZ19jaGFycCkpOworICAgICAgICAgICAgICAgcG5nX21lbWNweShjb21wLT5vdXRwdXRfcHRyLCBvbGRfcHRyLAorICAgICAgICAgICBvbGRfbWF4ICogc2l6ZW9mIChwbmdfY2hhcnApKTsKICAgICAgICAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIG9sZF9wdHIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtMjg1LDcgKzI4NCw3IEBACiAgICAgICAgICAgICAgICAgICBjb21wLT5vdXRwdXRfcHRyID0gKHBuZ19jaGFycHApcG5nX21hbGxvYyhwbmdfcHRyLAogICAgICAgICAgICAgICAgICAgICAgKHBuZ191aW50XzMyKShjb21wLT5tYXhfb3V0cHV0X3B0ciAqIHNpemVvZiAocG5nX2NoYXJwcCkpKTsKICAgICAgICAgICAgICAgICAgIHBuZ19tZW1jcHkoY29tcC0+b3V0cHV0X3B0ciwgb2xkX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgIG9sZF9tYXggKiBzaXplb2YgKHBuZ19jaGFycCkpOworICAgICAgICAgICAgICBvbGRfbWF4ICogc2l6ZW9mIChwbmdfY2hhcnApKTsKICAgICAgICAgICAgICAgICAgIHBuZ19mcmVlKHBuZ19wdHIsIG9sZF9wdHIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZQpAQCAtNDM1LDcgKzQzNCw3IEBACiAjaWYgZGVmaW5lZChQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCkKICAgICAgICEoKHBuZ19wdHItPm1uZ19mZWF0dXJlc19wZXJtaXR0ZWQgJiBQTkdfRkxBR19NTkdfRklMVEVSXzY0KSAmJgogICAgICAgKChwbmdfcHRyLT5tb2RlJlBOR19IQVZFX1BOR19TSUdOQVRVUkUpID09IDApICYmCi0gICAgICAoY29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9SR0IgfHwKKyAgICAgIChjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQiB8fCAKICAgICAgICBjb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1JHQl9BTFBIQSkgJiYKICAgICAgIChmaWx0ZXJfdHlwZSA9PSBQTkdfSU5UUkFQSVhFTF9ESUZGRVJFTkNJTkcpKSAmJgogI2VuZGlmCkBAIC00NjAsOSArNDU5LDcgQEAKICAgIHBuZ19wdHItPmJpdF9kZXB0aCA9IChwbmdfYnl0ZSliaXRfZGVwdGg7CiAgICBwbmdfcHRyLT5jb2xvcl90eXBlID0gKHBuZ19ieXRlKWNvbG9yX3R5cGU7CiAgICBwbmdfcHRyLT5pbnRlcmxhY2VkID0gKHBuZ19ieXRlKWludGVybGFjZV90eXBlOwotI2lmIGRlZmluZWQoUE5HX01OR19GRUFUVVJFU19TVVBQT1JURUQpCiAgICBwbmdfcHRyLT5maWx0ZXJfdHlwZSA9IChwbmdfYnl0ZSlmaWx0ZXJfdHlwZTsKLSNlbmRpZgogICAgcG5nX3B0ci0+d2lkdGggPSB3aWR0aDsKICAgIHBuZ19wdHItPmhlaWdodCA9IGhlaWdodDsKIApAQCAtNTM3LDI4ICs1MzQsMjAgQEAKIAogICAgcG5nX2RlYnVnKDEsICJpbiBwbmdfd3JpdGVfUExURVxuIik7CiAgICBpZiAoKAotI2lmIGRlZmluZWQoUE5HX01OR19GRUFUVVJFU19TVVBQT1JURUQpIHx8IFwKLSAgICBkZWZpbmVkKFBOR19XUklURV9FTVBUWV9QTFRFX1BFUk1JVFRFRCkKKyNpZiBkZWZpbmVkKFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEKQogICAgICAgICAhKHBuZ19wdHItPm1uZ19mZWF0dXJlc19wZXJtaXR0ZWQgJiBQTkdfRkxBR19NTkdfRU1QVFlfUExURSkgJiYKICNlbmRpZgogICAgICAgICBudW1fcGFsID09IDApIHx8IG51bV9wYWwgPiAyNTYpCi0gICB7Ci0gICAgIGlmIChwbmdfcHRyLT5jb2xvcl90eXBlID09IFBOR19DT0xPUl9UWVBFX1BBTEVUVEUpCiAgICAgIHsKLSAgICAgICAgcG5nX2Vycm9yKHBuZ19wdHIsICJJbnZhbGlkIG51bWJlciBvZiBjb2xvcnMgaW4gcGFsZXR0ZSIpOwotICAgICB9Ci0gICAgIGVsc2UKLSAgICAgewotICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiSW52YWxpZCBudW1iZXIgb2YgY29sb3JzIGluIHBhbGV0dGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgICB9Ci0gICB9Ci0KLSAgIGlmICghKHBuZ19wdHItPmNvbG9yX3R5cGUmUE5HX0NPTE9SX01BU0tfQ09MT1IpKQotICAgewotICAgICAgcG5nX3dhcm5pbmcocG5nX3B0ciwKLSAgICAgICAgIklnbm9yaW5nIHJlcXVlc3QgdG8gd3JpdGUgYSBQTFRFIGNodW5rIGluIGdyYXlzY2FsZSBQTkciKTsKLSAgICAgIHJldHVybjsKKyAgICAgICBpZiAocG5nX3B0ci0+Y29sb3JfdHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9QQUxFVFRFKQorICAgICAgICAgeworICAgICAgICAgICBwbmdfZXJyb3IocG5nX3B0ciwgIkludmFsaWQgbnVtYmVyIG9mIGNvbG9ycyBpbiBwYWxldHRlIik7CisgICAgICAgICB9CisgICAgICAgZWxzZQorICAgICAgICAgeworICAgICAgICAgICBwbmdfd2FybmluZyhwbmdfcHRyLCAiSW52YWxpZCBudW1iZXIgb2YgY29sb3JzIGluIHBhbGV0dGUiKTsKKyAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgfQogICAgfQogCiAgICBwbmdfcHRyLT5udW1fcGFsZXR0ZSA9IChwbmdfdWludF8xNiludW1fcGFsOwpAQCAtNzM5LDcgKzcyOCw3IEBACiAgICB9CiAKICAgIC8qIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIHRoZSBOVUxMIGFmdGVyIHRoZSBuYW1lICovCi0gICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgKHBuZ19ieXRlcClwbmdfc1BMVCwKKyAgIHBuZ193cml0ZV9jaHVua19zdGFydChwbmdfcHRyLCAocG5nX2J5dGVwKSBwbmdfc1BMVCwKICAgICAgICAgICAocG5nX3VpbnRfMzIpKG5hbWVfbGVuICsgMiArIHBhbGV0dGVfc2l6ZSkpOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCluZXdfbmFtZSwgbmFtZV9sZW4gKyAxKTsKICAgIHBuZ193cml0ZV9jaHVua19kYXRhKHBuZ19wdHIsIChwbmdfYnl0ZXApJnNwYWxldHRlLT5kZXB0aCwgMSk7CkBAIC0xMDI4LDggKzEwMTcsNyBAQAogICAgaWYgKGNvbG9yX3R5cGUgPT0gUE5HX0NPTE9SX1RZUEVfUEFMRVRURSkKICAgIHsKICAgICAgIGlmICgKLSNpZiBkZWZpbmVkKFBOR19NTkdfRkVBVFVSRVNfU1VQUE9SVEVEKSB8fCBcCi0gICAgZGVmaW5lZChQTkdfV1JJVEVfRU1QVFlfUExURV9QRVJNSVRURUQpCisjaWYgZGVmaW5lZChQTkdfTU5HX0ZFQVRVUkVTX1NVUFBPUlRFRCkKICAgICAgICAgICAocG5nX3B0ci0+bnVtX3BhbGV0dGUgfHwKICAgICAgICAgICAoIShwbmdfcHRyLT5tbmdfZmVhdHVyZXNfcGVybWl0dGVkICYgUE5HX0ZMQUdfTU5HX0VNUFRZX1BMVEUpKSkgJiYKICNlbmRpZgpAQCAtMTQyNiw5ICsxNDE0LDkgQEAKICAgICAgIHBuZ193YXJuaW5nKHBuZ19wdHIsICJVbnJlY29nbml6ZWQgZXF1YXRpb24gdHlwZSBmb3IgcENBTCBjaHVuayIpOwogCiAgICBwdXJwb3NlX2xlbiA9IHBuZ19jaGVja19rZXl3b3JkKHBuZ19wdHIsIHB1cnBvc2UsICZuZXdfcHVycG9zZSkgKyAxOwotICAgcG5nX2RlYnVnMSgzLCAicENBTCBwdXJwb3NlIGxlbmd0aCA9ICVkXG4iLCAoaW50KXB1cnBvc2VfbGVuKTsKKyAgIHBuZ19kZWJ1ZzEoMywgInBDQUwgcHVycG9zZSBsZW5ndGggPSAlZFxuIiwgcHVycG9zZV9sZW4pOwogICAgdW5pdHNfbGVuID0gcG5nX3N0cmxlbih1bml0cykgKyAobnBhcmFtcyA9PSAwID8gMCA6IDEpOwotICAgcG5nX2RlYnVnMSgzLCAicENBTCB1bml0cyBsZW5ndGggPSAlZFxuIiwgKGludCl1bml0c19sZW4pOworICAgcG5nX2RlYnVnMSgzLCAicENBTCB1bml0cyBsZW5ndGggPSAlZFxuIiwgdW5pdHNfbGVuKTsKICAgIHRvdGFsX2xlbiA9IHB1cnBvc2VfbGVuICsgdW5pdHNfbGVuICsgMTA7CiAKICAgIHBhcmFtc19sZW4gPSAocG5nX3VpbnRfMzJwKXBuZ19tYWxsb2MocG5nX3B0ciwgKHBuZ191aW50XzMyKShucGFyYW1zCkBAIC0xNDQzLDcgKzE0MzEsNyBAQAogICAgICAgdG90YWxfbGVuICs9IChwbmdfc2l6ZV90KXBhcmFtc19sZW5baV07CiAgICB9CiAKLSAgIHBuZ19kZWJ1ZzEoMywgInBDQUwgdG90YWwgbGVuZ3RoID0gJWRcbiIsIChpbnQpdG90YWxfbGVuKTsKKyAgIHBuZ19kZWJ1ZzEoMywgInBDQUwgdG90YWwgbGVuZ3RoID0gJWRcbiIsIHRvdGFsX2xlbik7CiAgICBwbmdfd3JpdGVfY2h1bmtfc3RhcnQocG5nX3B0ciwgKHBuZ19ieXRlcClwbmdfcENBTCwgKHBuZ191aW50XzMyKXRvdGFsX2xlbik7CiAgICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKW5ld19wdXJwb3NlLCBwdXJwb3NlX2xlbik7CiAgICBwbmdfc2F2ZV9pbnRfMzIoYnVmLCBYMCk7CkBAIC0xNDk1LDExICsxNDgzLDExIEBACiAjZW5kaWYKICAgIHRvdGFsX2xlbiA9IDEgKyBwbmdfc3RybGVuKHdidWYpKzEgKyBwbmdfc3RybGVuKGhidWYpOwogCi0gICBwbmdfZGVidWcxKDMsICJzQ0FMIHRvdGFsIGxlbmd0aCA9ICVkXG4iLCAoaW50KXRvdGFsX2xlbik7CisgICBwbmdfZGVidWcxKDMsICJzQ0FMIHRvdGFsIGxlbmd0aCA9ICVkXG4iLCB0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIChwbmdfYnl0ZXApcG5nX3NDQUwsIChwbmdfdWludF8zMil0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCkmdW5pdCwgMSk7Ci0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKXdidWYsIHBuZ19zdHJsZW4od2J1ZikrMSk7Ci0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKWhidWYsIHBuZ19zdHJsZW4oaGJ1ZikpOworICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCl3YnVmLCBzdHJsZW4od2J1ZikrMSk7CisgICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKWhidWYsIHN0cmxlbihoYnVmKSk7CiAKICAgIHBuZ193cml0ZV9jaHVua19lbmQocG5nX3B0cik7CiB9CkBAIC0xNTE3LDE1ICsxNTA1LDE1IEBACiAKICAgIHBuZ19kZWJ1ZygxLCAiaW4gcG5nX3dyaXRlX3NDQUxfc1xuIik7CiAKLSAgIHBuZ19zdHJjcHkod2J1ZiwoY29uc3QgY2hhciAqKXdpZHRoKTsKLSAgIHBuZ19zdHJjcHkoaGJ1ZiwoY29uc3QgY2hhciAqKWhlaWdodCk7CisgICBzdHJjcHkod2J1ZiwoY29uc3QgY2hhciAqKXdpZHRoKTsKKyAgIHN0cmNweShoYnVmLChjb25zdCBjaGFyICopaGVpZ2h0KTsKICAgIHRvdGFsX2xlbiA9IDEgKyBwbmdfc3RybGVuKHdidWYpKzEgKyBwbmdfc3RybGVuKGhidWYpOwogCiAgICBwbmdfZGVidWcxKDMsICJzQ0FMIHRvdGFsIGxlbmd0aCA9ICVkXG4iLCB0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX3N0YXJ0KHBuZ19wdHIsIChwbmdfYnl0ZXApcG5nX3NDQUwsIChwbmdfdWludF8zMil0b3RhbF9sZW4pOwogICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCkmdW5pdCwgMSk7Ci0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKXdidWYsIHBuZ19zdHJsZW4od2J1ZikrMSk7Ci0gICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKWhidWYsIHBuZ19zdHJsZW4oaGJ1ZikpOworICAgcG5nX3dyaXRlX2NodW5rX2RhdGEocG5nX3B0ciwgKHBuZ19ieXRlcCl3YnVmLCBzdHJsZW4od2J1ZikrMSk7CisgICBwbmdfd3JpdGVfY2h1bmtfZGF0YShwbmdfcHRyLCAocG5nX2J5dGVwKWhidWYsIHN0cmxlbihoYnVmKSk7CiAKICAgIHBuZ193cml0ZV9jaHVua19lbmQocG5nX3B0cik7CiB9CkBAIC0yNjQzLDQgKzI2MzEsMyBAQAogICAgfQogI2VuZGlmCiB9Ci0jZW5kaWYgLyogUE5HX1dSSVRFX1NVUFBPUlRFRCAqLwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvbXN2Yy9SRUFETUUudHh0IGIvcHJvamVjdHMvbXN2Yy9SRUFETUUudHh0CmluZGV4IGIwOGRiN2QuLjlkZjUyM2QgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL21zdmMvUkVBRE1FLnR4dAorKysgYi9wcm9qZWN0cy9tc3ZjL1JFQURNRS50eHQKQEAgLTEsNSArMSw1IEBACiBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwIGZvcgotbGlicG5nIDEuMC4xMmJldGExIChNYXkgMTQsIDIwMDEpIGFuZCB6bGliCitsaWJwbmcgMS4yLjBiZXRhMSAoTWF5IDYsIDIwMDEpIGFuZCB6bGliCiAKIENvcHlyaWdodCAoQykgMjAwMCBTaW1vbi1QaWVycmUgQ2FkaWV1eAogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHBuZy5oCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9tc3ZjL3BuZzMybXMuZGVmIGIvcHJvamVjdHMvbXN2Yy9wbmczMm1zLmRlZgppbmRleCAzODhmZGFkLi44M2UyMjMxIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9tc3ZjL3BuZzMybXMuZGVmCisrKyBiL3Byb2plY3RzL21zdmMvcG5nMzJtcy5kZWYKQEAgLTYsNyArNiw3IEBACiBERVNDUklQVElPTiAiUE5HIGltYWdlIGNvbXByZXNzaW9uIGxpYnJhcnkgZm9yIFdpbmRvd3MiCiAKIEVYUE9SVFMKLTtWZXJzaW9uIDEuMC4xMmJldGExCis7VmVyc2lvbiAxLjIuMGJldGExCiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMKQEAgLTE3NSw3ICsxNzUsNiBAQAogICBwbmdfd3JpdGVfcG5nICAgIEAxNjMKICAgcG5nX3dyaXRlX3JvdyAgICBAMTY0CiAgIHBuZ193cml0ZV9yb3dzICAgIEAxNjUKLTsgcG5nX3JlYWRfaW5pdF8yIGFuZCBwbmdfd3JpdGVfaW5pdF8yIGFyZSBkZXByZWNhdGVkLgogICBwbmdfcmVhZF9pbml0XzIgICAgQDE2NgogICBwbmdfd3JpdGVfaW5pdF8yICAgIEAxNjcKICAgcG5nX2FjY2Vzc192ZXJzaW9uX251bWJlciAgQDE2OApAQCAtMTg0LDMwICsxODMsMTQgQEAKICAgcG5nX2luaXRfaW8gICAgQDE3MQogICBwbmdfY29udmVydF90b19yZmMxMTIzICAgICBAMTcyCiAgIHBuZ19zZXRfaW52YWxpZCAgQDE3MwotOyBBZGRlZCBhdCB2ZXJzaW9uIDEuMC4xMgotOyBGb3IgY29tcGF0aWJsaXR5IHdpdGggMS4wLjctMS4wLjExCi0gIHBuZ19pbmZvX2luaXQgQDE3NAotICBwbmdfcmVhZF9pbml0XzMgICAgQDE3NQotICBwbmdfd3JpdGVfaW5pdF8zICAgIEAxNzYKLSAgcG5nX2luZm9faW5pdF8zIEAxNzcKLSAgcG5nX2Rlc3Ryb3lfc3RydWN0ICBAMTc4Ci07IFRvIGJlIGFkZGVkIGF0IHZlcnNpb24gMS4yLjAKLTsgRm9yIHVzZSB3aXRoIFBOR19VU0VSX01FTV9TVVBQT1JURUQKLTsgcG5nX2Rlc3Ryb3lfc3RydWN0XzIgIEAxNzkKLTsgcG5nX2NyZWF0ZV9yZWFkX3N0cnVjdF8yIEAxODAKLTsgcG5nX2NyZWF0ZV93cml0ZV9zdHJ1Y3RfMiBAMTgxCi07IHBuZ19tYWxsb2NfZGVmYXVsdCBAMTgyCi07IHBuZ19mcmVlX2RlZmF1bHQgQDE4MwotOyBNTkcgZmVhdHVyZXMKLTsgcG5nX3Blcm1pdF9tbmdfZmVhdHVyZXMgIEAxODQKLTsgTU1YIHN1cHBvcnQKLTsgcG5nX21teF9zdXBwb3J0ICBAMTg1Ci07IHBuZ19nZXRfbW14X2ZsYWdtYXNrICBAMTg2Ci07IHBuZ19nZXRfYXNtX2ZsYWdtYXNrICBAMTg3Ci07IHBuZ19nZXRfYXNtX2ZsYWdzICBAMTg4Ci07IHBuZ19nZXRfbW14X2JpdGRlcHRoX3RocmVzaG9sZCAgQDE4OQotOyBwbmdfZ2V0X21teF9yb3dieXRlc190aHJlc2hvbGQgIEAxOTAKLTsgcG5nX3NldF9hc21fZmxhZ3MgIEAxOTEKLTsgcG5nX2luaXRfbW14X2ZsYWdzICBAMTkyCi07IFN0cmlwIGVycm9yIG51bWJlcnMKLTsgcG5nX3NldF9zdHJpcF9lcnJvcl9udW1iZXJzIEAxOTMKKzsgQWRkZWQgYXQgdmVyc2lvbiAxLjIuMAorICBwbmdfcGVybWl0X21uZ19mZWF0dXJlcyAgQDE3NAorICBwbmdfbW14X3N1cHBvcnQgIEAxNzUKKyAgcG5nX2dldF9tbXhfZmxhZ21hc2sgIEAxNzYKKyAgcG5nX2dldF9hc21fZmxhZ21hc2sgIEAxNzcKKyAgcG5nX2dldF9hc21fZmxhZ3MgIEAxNzgKKyAgcG5nX2dldF9tbXhfYml0ZGVwdGhfdGhyZXNob2xkICBAMTc5CisgIHBuZ19nZXRfbW14X3Jvd2J5dGVzX3RocmVzaG9sZCAgQDE4MAorICBwbmdfc2V0X2FzbV9mbGFncyAgQDE4MQorICBwbmdfaW5pdF9tbXhfZmxhZ3MgIEAxODIKKyAgcG5nX3NldF9zdHJpcF9lcnJvcl9udW1iZXJzIEAxODMKZGlmZiAtLWdpdCBhL3Byb2plY3RzL3dpbmNlL1JFQURNRUUuV0NFIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKaW5kZXggYzIxMWNmMS4uOWQxNTI3MyAxMDA2NDQKLS0tIGEvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKKysrIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FRS5XQ0UKQEAgLTgsOSArOCw5IEBACiAKIEludHJvZHVjdGlvbgogPT09PT09PT09PT09Ci1UaGlzIGlzIGxpYnBuZyAxLjAuMTJiZXRhMSBwb3J0ZWQgdG8gV2luZG93c0NFIDIuMCBhbmQgMi4xMS4KLWxpYnBuZyAxLjAuMTJiZXRhMSBpcyBhIFBORyByZWZlcmVuY2UgbGlicmFyeS4KLVNlZSBSRUFETUUsIGEgZG9jdW1lbnQgb2Ygb3JpZ2luYWwgbGlicG5nIDEuMC4xMmJldGExLgorVGhpcyBpcyBsaWJwbmcgMS4yLjBiZXRhMSBwb3J0ZWQgdG8gV2luZG93c0NFIDIuMCBhbmQgMi4xMS4KK2xpYnBuZyAxLjIuMGJldGExIGlzIGEgUE5HIHJlZmVyZW5jZSBsaWJyYXJ5LgorU2VlIFJFQURNRSwgYSBkb2N1bWVudCBvZiBvcmlnaW5hbCBsaWJwbmcgMS4yLjBiZXRhMS4KIAogemxpYiBmb3IgV2luZG93c0NFCiA9PT09PT09PT09PT09PT09PT0KQEAgLTIzLDcgKzIzLDcgQEAKIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUuCiAKLVNlZSBSRUFETUUgYW5kIExJQ0VOU0UsIGRvY3VtZW50cyBvZiBvcmlnaW5hbCBsaWJwbmcgMS4wLjEyYmV0YTEsIGZvciBjb25kaXRpb25zCitTZWUgUkVBRE1FIGFuZCBMSUNFTlNFLCBkb2N1bWVudHMgb2Ygb3JpZ2luYWwgbGlicG5nIDEuMi4wYmV0YTEsIGZvciBjb25kaXRpb25zCiBvZiB1c2UgYW5kIGRpc3RyaWJ1dGlvbi4KIAogRmlsZXMKZGlmZiAtLWdpdCBhL3Byb2plY3RzL3dpbmNlL1JFQURNRUouV0NFIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FSi5XQ0UKaW5kZXggNGEyZTJjMy4uYmRhN2NiMSAxMDA2NDQKLS0tIGEvcHJvamVjdHMvd2luY2UvUkVBRE1FSi5XQ0UKKysrIGIvcHJvamVjdHMvd2luY2UvUkVBRE1FSi5XQ0UKQEAgLTI0LDcgKzI0LDcgQEAKIILJgsiCwYK9gqKCqYLIgumU7YpRgsmCwoKigsSC4IFBjeyO0oFBlHqVeo7SgUGCu4LMkbyXmJdwjtKIyIpPgsyQbJWogUEKIJJjkcyCyZDTlEOC8ILGgumLYJaxgs2CyIKiguCCzILGgrWC3IK3gUIKIAotgruCzJG8gUGCsYLMg1yDdINng0WDRoNBgsyXmJdwj/CMj4LJgsKCooLEgs2BQYy0lMWCxYKggukgbGlicG5nIDEuMC4xMmJldGExgskKK4K7gsyRvIFBgrGCzINcg3SDZ4NFg0aDQYLMl5iXcI/wjI+CyYLCgqKCxILNgUGMtJTFgsWCoILpIGxpYnBuZyAxLjIuMGJldGExgskKII+Ai5KCt4LpguCCzILGgrWC3IK3gUKP2oK1gq2CzYFBlXSRroLMIFJFQURNRSxMSUNFTlNFIILwgqiTx4Ldgq2CvoKzgqKBQgogCiCO+5hek+CXZQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvd2luY2UvcG5nMzJjZS5kZWYgYi9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZgppbmRleCBmOTcwNjFmLi5kZGI4NzBmIDEwMDY0NAotLS0gYS9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZgorKysgYi9wcm9qZWN0cy93aW5jZS9wbmczMmNlLmRlZgpAQCAtNSw3ICs1LDcgQEAKIExJQlJBUlkgbHBuZ2NlCiAKIEVYUE9SVFMKLTtWZXJzaW9uIDEuMC4xMmJldGExCis7VmVyc2lvbiAxLjIuMGJldGExCiAgIHBuZ19idWlsZF9ncmF5c2NhbGVfcGFsZXR0ZSAgQDEKICAgcG5nX2NoZWNrX3NpZyAgICAgICAgQDIKICAgcG5nX2NodW5rX2Vycm9yICAgICAgQDMKQEAgLTc2LDcgKzc2LDYgQEAKICAgcG5nX21hbGxvYyAgICBANjgKICAgcG5nX21lbWNweV9jaGVjayAgICBANjkKICAgcG5nX21lbXNldF9jaGVjayAgICBANzAKLTsgcG5nX3Blcm1pdF9lbXB0eV9wbHRlIGlzIGRlcHJlY2F0ZWQKICAgcG5nX3Blcm1pdF9lbXB0eV9wbHRlICBANzEKICAgcG5nX3Byb2Nlc3NfZGF0YSAgICBANzIKICAgcG5nX3Byb2dyZXNzaXZlX2NvbWJpbmVfcm93ICBANzMKQEAgLTE3NCwzOSArMTczLDIyIEBACiAgIHBuZ193cml0ZV9wbmcgICAgQDE2MwogICBwbmdfd3JpdGVfcm93ICAgIEAxNjQKICAgcG5nX3dyaXRlX3Jvd3MgICAgQDE2NQotOyBwbmdfcmVhZF9pbml0XzIgYW5kIHBuZ193cml0ZV9pbml0XzIgYXJlIGRlcHJlY2F0ZWQuCiAgIHBuZ19yZWFkX2luaXRfMiAgICBAMTY2CiAgIHBuZ193cml0ZV9pbml0XzIgICAgQDE2NwogICBwbmdfYWNjZXNzX3ZlcnNpb25fbnVtYmVyICBAMTY4CiA7ICBwbmdfc2lnX2J5dGVzICAgIEAxNjkKLTsgIHBuZ19saWJwbmdfdmVyICAgIEAxNzAKKyAgcG5nX2xpYnBuZ192ZXIgICAgQDE3MAogICBwbmdfaW5pdF9pbyAgICBAMTcxCiAgIHBuZ19jb252ZXJ0X3RvX3JmYzExMjMgICAgIEAxNzIKICAgcG5nX3NldF9pbnZhbGlkICBAMTczCi07IEFkZGVkIGF0IHZlcnNpb24gMS4wLjEyCi07IEZvciBjb21wYXRpYmxpdHkgd2l0aCAxLjAuNy0xLjAuMTEKLSAgcG5nX2luZm9faW5pdCBAMTc0Ci0gIHBuZ19yZWFkX2luaXRfMyAgICBAMTc1Ci0gIHBuZ193cml0ZV9pbml0XzMgICAgQDE3NgotICBwbmdfaW5mb19pbml0XzMgQDE3NwotICBwbmdfZGVzdHJveV9zdHJ1Y3QgIEAxNzgKLTsgVG8gYmUgYWRkZWQgYXQgdmVyc2lvbiAxLjIuMAotOyBGb3IgdXNlIHdpdGggUE5HX1VTRVJfTUVNX1NVUFBPUlRFRAotOyBwbmdfZGVzdHJveV9zdHJ1Y3RfMiAgQDE3OQotOyBwbmdfY3JlYXRlX3JlYWRfc3RydWN0XzIgQDE4MAotOyBwbmdfY3JlYXRlX3dyaXRlX3N0cnVjdF8yIEAxODEKLTsgcG5nX21hbGxvY19kZWZhdWx0IEAxODIKLTsgcG5nX2ZyZWVfZGVmYXVsdCBAMTgzCi07IE1ORyBmZWF0dXJlcwotOyBwbmdfcGVybWl0X21uZ19mZWF0dXJlcyAgQDE4NAotOyBNTVggc3VwcG9ydAotOyBwbmdfbW14X3N1cHBvcnQgIEAxODUKLTsgcG5nX2dldF9tbXhfZmxhZ21hc2sgIEAxODYKLTsgcG5nX2dldF9hc21fZmxhZ21hc2sgIEAxODcKLTsgcG5nX2dldF9hc21fZmxhZ3MgIEAxODgKLTsgcG5nX2dldF9tbXhfYml0ZGVwdGhfdGhyZXNob2xkICBAMTg5Ci07IHBuZ19nZXRfbW14X3Jvd2J5dGVzX3RocmVzaG9sZCAgQDE5MAotOyBwbmdfc2V0X2FzbV9mbGFncyAgQDE5MQotOyBwbmdfaW5pdF9tbXhfZmxhZ3MgIEAxOTIKLTsgU3RyaXAgZXJyb3IgbnVtYmVycwotOyBwbmdfc2V0X3N0cmlwX2Vycm9yX251bWJlcnMgQDE5MworOyBBZGRlZCBhdCB2ZXJzaW9uIDEuMi4wCisgIHBuZ19wZXJtaXRfbW5nX2ZlYXR1cmVzICBAMTc0CisgIHBuZ19tbXhfc3VwcG9ydCAgQDE3NQorICBwbmdfZ2V0X21teF9mbGFnbWFzayAgQDE3NgorICBwbmdfZ2V0X2FzbV9mbGFnbWFzayAgQDE3NworICBwbmdfZ2V0X2FzbV9mbGFncyAgQDE3OAorICBwbmdfZ2V0X21teF9iaXRkZXB0aF90aHJlc2hvbGQgIEAxNzkKKyAgcG5nX2dldF9tbXhfcm93Ynl0ZXNfdGhyZXNob2xkICBAMTgwCisgIHBuZ19zZXRfYXNtX2ZsYWdzICBAMTgxCisgIHBuZ19pbml0X21teF9mbGFncyAgQDE4MgorICBwbmdfc2V0X3N0cmlwX2Vycm9yX251bWJlcnMgQDE4MwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5haXggYi9zY3JpcHRzL21ha2VmaWxlLmFpeAppbmRleCAzOGM0NGI1Li4zODE2OWQzIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmFpeAorKysgYi9zY3JpcHRzL21ha2VmaWxlLmFpeApAQCAtMTgsNyArMTgsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjEyYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogcHJlZml4PS91c3IvbG9jYWwKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuYmVvcyBiL3NjcmlwdHMvbWFrZWZpbGUuYmVvcwppbmRleCA4ODExYjU3Li4zY2NkYTczIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmJlb3MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5iZW9zCkBAIC0xMyw3ICsxMyw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTJiZXRhMQorUE5HTUlOID0gMS4yLjBiZXRhMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBBTElHTj0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuY3lnd2luIGIvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4KaW5kZXggYzg4Yzk4NC4uZGU5ZDIxOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4KKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5jeWd3aW4KQEAgLTM5LDkgKzM5LDkgQEAKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCiAjUE5HRExMID0gJDIjIG1zdmMKLVBOR0RMTCA9IDIjIGN5Z3dpbiAxLjAuMTJiZXRhMQotUE5HTUlOID0gMS4wLjEyYmV0YTEKLVBOR01JTl9CQVNFID0gMS4wLjEyCitQTkdETEwgPSAyIyBjeWd3aW4gMS4yLjBiZXRhMQorUE5HTUlOID0gMS4yLjBiZXRhMQorUE5HTUlOX0JBU0UgPSAxLjIuMAogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBTSEFSRURMSUI9Y3lncG5nJChQTkdETEwpLmRsbApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5kZWMgYi9zY3JpcHRzL21ha2VmaWxlLmRlYwppbmRleCAxOTg5M2NhLi4wMDBkN2Y2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLmRlYworKysgYi9zY3JpcHRzL21ha2VmaWxlLmRlYwpAQCAtMTcsNyArMTcsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjEyYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogQ0M9Y2MKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXggYi9zY3JpcHRzL21ha2VmaWxlLmdjbW14CmluZGV4IDNmZDc1NTkuLjRhNWE5ODYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuZ2NtbXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5nY21teApAQCAtNTEsNyArNTEsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjEyYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYyBiL3NjcmlwdHMvbWFrZWZpbGUuaHBnY2MKaW5kZXggMTAwMmFmZi4uN2M2OTMwYSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ocGdjYworKysgYi9zY3JpcHRzL21ha2VmaWxlLmhwZ2NjCkBAIC0zNCw3ICszNCw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTJiZXRhMQorUE5HTUlOID0gMS4yLjBiZXRhMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL21ha2VmaWxlLmhwdXggYi9zY3JpcHRzL21ha2VmaWxlLmhwdXgKaW5kZXggYmZkMjZjOC4uNjkyY2UxYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5ocHV4CisrKyBiL3NjcmlwdHMvbWFrZWZpbGUuaHB1eApAQCAtMTksNyArMTksNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjEyYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogIyB3aGVyZSBtYWtlIGluc3RhbGwgcHV0cyBsaWJwbmcuYSBhbmQgcG5nLmgKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUubGludXggYi9zY3JpcHRzL21ha2VmaWxlLmxpbnV4CmluZGV4IDVlOGJhNGMuLjBlYjY5NDYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUubGludXgKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5saW51eApAQCAtMzQsNyArMzQsNyBAQAogIyByZWFkIGxpYnBuZy50eHQgb3IgcG5nLmggdG8gc2VlIHdoeSBQTkdNQUogaXMgMi4gIFlvdSBzaG91bGQgbm90CiAjIGhhdmUgdG8gY2hhbmdlIGl0LgogUE5HTUFKID0gMgotUE5HTUlOID0gMS4wLjEyYmV0YTEKK1BOR01JTiA9IDEuMi4wYmV0YTEKIFBOR1ZFUiA9ICQoUE5HTUFKKS4kKFBOR01JTikKIAogSU5DUEFUSD0kKHByZWZpeCkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tYWtlZmlsZS5uZXRic2QgYi9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZAppbmRleCA3MTliYzcxLi4wNTZkNjYyIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZAorKysgYi9zY3JpcHRzL21ha2VmaWxlLm5ldGJzZApAQCAtMTEsNyArMTEsNyBAQAogCiBMSUI9cG5nCiBTSExJQl9NQUpPUj0gMgotU0hMSUJfTUlOT1I9IDEuMC4xMmJldGExCitTSExJQl9NSU5PUj0gMS4yLjBiZXRhMQogU1JDUz0JcG5nZ2NjcmQuYyBwbmcuYyBwbmdzZXQuYyBwbmdnZXQuYyBwbmdydXRpbC5jIHBuZ3RyYW5zLmMgcG5nd3V0aWwuYyBcCiAJcG5ncmVhZC5jIHBuZ3Jpby5jIHBuZ3dpby5jIHBuZ3dyaXRlLmMgcG5ncnRyYW4uYyBcCiAJcG5nd3RyYW4uYyBwbmdtZW0uYyBwbmdlcnJvci5jIHBuZ3ByZWFkLmMKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2NvIGIvc2NyaXB0cy9tYWtlZmlsZS5zY28KaW5kZXggZjMyZjE2NC4uMTViNGNhMiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zY28KKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zY28KQEAgLTI1LDcgKzI1LDcgQEAKICMgcmVhZCBsaWJwbmcudHh0IG9yIHBuZy5oIHRvIHNlZSB3aHkgUE5HTUFKIGlzIDIuICBZb3Ugc2hvdWxkIG5vdAogIyBoYXZlIHRvIGNoYW5nZSBpdC4KIFBOR01BSiA9IDIKLVBOR01JTiA9IDEuMC4xMmJldGExCitQTkdNSU4gPSAxLjIuMGJldGExCiBQTkdWRVIgPSAkKFBOR01BSikuJChQTkdNSU4pCiAKIElOQ1BBVEg9JChwcmVmaXgpL2luY2x1ZGUKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MgYi9zY3JpcHRzL21ha2VmaWxlLnNnZ2NjCmluZGV4IGJlYTA0NDkuLmVmYmZlNjcgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbWFrZWZpbGUuc2dnY2MKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2djYwpAQCAtMTksOCArMTksOCBAQAogTERGTEFHUz0tTC4gLUwkKFpMSUJMSUIpIC1scG5nIC1seiAtbG0KIExEU0hBUkVEPWdjYyAtc2hhcmVkCiAKLVZFUj0xLjAuMTJiZXRhMQotTElCUz1saWJwbmcuc28uMS4wLjEyYmV0YTEKK1ZFUj0xLjIuMGJldGExCitMSUJTPWxpYnBuZy5zby4xLjIuMGJldGExCiBTSEFSRURMSUI9bGlicG5nLnNvCiBsaWJkaXI9JChwcmVmaXgpL2xpYjMyCiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc2dpIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKaW5kZXggNDcyNmQ1ZC4uOWNlNjdjMSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zZ2kKQEAgLTI1LDcgKzI1LDcgQEAKIExERkxBR1M9LUwuIC1MJChaTElCTElCKSAtbHBuZyAtbHogLWxtCiBMRFNIQVJFRD1jYyAtc2hhcmVkCiAKLVZFUj0xLjAuMTJiZXRhMQorVkVSPTEuMi4wYmV0YTEKIFNPTlVNPTIKIFNIQVJFRExJQj1saWJwbmcuc28KIGxpYmRpcj0kKHByZWZpeCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcyBiL3NjcmlwdHMvbWFrZWZpbGUuc29sYXJpcwppbmRleCA5M2RhNDc3Li4yYWVjOThhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21ha2VmaWxlLnNvbGFyaXMKKysrIGIvc2NyaXB0cy9tYWtlZmlsZS5zb2xhcmlzCkBAIC0zMSw3ICszMSw3IEBACiAjIHJlYWQgbGlicG5nLnR4dCBvciBwbmcuaCB0byBzZWUgd2h5IFBOR01BSiBpcyAyLiAgWW91IHNob3VsZCBub3QKICMgaGF2ZSB0byBjaGFuZ2UgaXQuCiBQTkdNQUogPSAyCi1QTkdNSU4gPSAxLjAuMTJiZXRhMQorUE5HTUlOID0gMS4yLjBiZXRhMQogUE5HVkVSID0gJChQTkdNQUopLiQoUE5HTUlOKQogCiBJTkNQQVRIPSQocHJlZml4KS9pbmNsdWRlCmRpZmYgLS1naXQgYS9zY3JpcHRzL3BuZ2RlZi5wYXMgYi9zY3JpcHRzL3BuZ2RlZi5wYXMKaW5kZXggM2U4YzNiYy4uODhiZTgxYiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wbmdkZWYucGFzCisrKyBiL3NjcmlwdHMvcG5nZGVmLnBhcwpAQCAtNyw4ICs3LDggQEAKIGludGVyZmFjZQogCiBjb25zdAotICBQTkdfTElCUE5HX1ZFUl9TVFJJTkcgPSAnMS4wLjEyYmV0YTEnOwotICBQTkdfTElCUE5HX1ZFUiAgICAgICAgPSAgMTAwMTI7CisgIFBOR19MSUJQTkdfVkVSX1NUUklORyA9ICcxLjIuMGJldGExJzsKKyAgUE5HX0xJQlBOR19WRVIgICAgICAgID0gIDEwMjAwOwogCiB0eXBlCiAgIHBuZ191aW50XzMyID0gQ2FyZGluYWw7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3BuZ29zMi5kZWYgYi9zY3JpcHRzL3BuZ29zMi5kZWYKaW5kZXggZjA5NmZhZi4uODM5MjU4OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9wbmdvczIuZGVmCisrKyBiL3NjcmlwdHMvcG5nb3MyLmRlZgpAQCAtMiw3ICsyLDcgQEAKIDsgUE5HLkxJQiBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIGZvciBPUy8yCiA7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi07IFZlcnNpb24gMS4wLjEyYmV0YTEKKzsgVmVyc2lvbiAxLjIuMGJldGExCiAKIExJQlJBUlkJCVBORwogREVTQ1JJUFRJT04JIlBORyBpbWFnZSBjb21wcmVzc2lvbiBsaWJyYXJ5IGZvciBPUy8yIgpAQCAtMTg3LDggKzE4NywxNyBAQAogO1RvIGJlIGFkZGVkIGF0IHZlcnNpb24gMS4yLjAKIDsgcG5nX3Blcm1pdF9tbmdfZmVhdHVyZXMKIAotO1RvIGJlIGFkZGVkIGF0IHZlcnNpb24gMS4yLjAKLTsgcG5nX21teF9zdXBwb3J0Cis7IEFkZGVkIGF0IHZlcnNpb24gMS4yLjA6CisgIHBuZ19tbXhfc3VwcG9ydAorICBwbmdfcGVybWl0X2VtcHR5X3BsdGUKKyAgcG5nX3Blcm1pdF9tbmdfZmVhdHVyZXMKKyAgcG5nX2dldF9tbXhfZmxhZ21hc2sKKyAgcG5nX2dldF9hc21fZmxhZ21hc2sKKyAgcG5nX2dldF9hc21fZmxhZ3MKKyAgcG5nX2dldF9tbXhfYml0ZGVwdGhfdGhyZXNob2xkCisgIHBuZ19nZXRfbW14X3Jvd2J5dGVzX3RocmVzaG9sZAorICBwbmdfc2V0X2FzbV9mbGFncworICBwbmdfaW5pdF9tbXhfZmxhZ3MKIAogOyBUaGVzZSBhcmUgbm90IHByZXNlbnQgd2hlbiBsaWJwbmcgaXMgY29tcGlsZWQgd2l0aCBQTkdfTk9fR0xPQkFMX0FSUkFZUwogICBwbmdfbGlicG5nX3Zlcgo=