ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0FEQy1MSDctVG91Y2hzY3JlZW4gYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9BREMtTEg3LVRvdWNoc2NyZWVuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNmEyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9BREMtTEg3LVRvdWNoc2NyZWVuCkBAIC0wLDAgKzEsNjEgQEAKK1JFQURNRSBvbiB0aGUgQURDL1RvdWNoc2NyZWVuIENvbnRyb2xsZXIKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIExINzk1MjQgYW5kIExIN0E0MDQgaW5jbHVkZSBhIGJ1aWx0LWluIEFuYWxvZyB0byBEaWdpdGFsCitjb250cm9sbGVyIChBREMpIHRoYXQgaXMgdXNlZCB0byBwcm9jZXNzIGlucHV0IGZyb20gYSB0b3VjaHNjcmVlbi4KK1RoZSBkcml2ZXIgb25seSBpbXBsZW1lbnRzIGEgZm91ci13aXJlIHRvdWNoIHBhbmVsIHByb3RvY29sLgorCitUaGUgdG91Y2hzY3JlZW4gZHJpdmVyIGlzIG1haW50ZW5hbmNlIGZyZWUgZXhjZXB0IGZvciB0aGUgcGVuLWRvd24gb3IKK3RvdWNoIHRocmVzaG9sZC4gIFNvbWUgcmVzaXN0aXZlIGRpc3BsYXlzIGFuZCBib2FyZCBjb21iaW5hdGlvbnMgbWF5CityZXF1aXJlIHR1bmluZyBvZiB0aGlzIHRocmVzaG9sZC4gIFRoZSBkcml2ZXIgZXhwb3NlcyBzb21lIG9mIGl0J3MKK2ludGVybmFsIHN0YXRlIGluIHRoZSBzeXMgZmlsZXN5c3RlbS4gIElmIHRoZSBrZXJuZWwgaXMgY29uZmlndXJlZAord2l0aCBpdCwgQ09ORklHX1NZU0ZTLCBhbmQgc3lzZnMgaXMgbW91bnRlZCBhdCAvc3lzLCB0aGVyZSB3aWxsIGJlIGEKK2RpcmVjdG9yeQorCisgIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hZGMtbGg3LjAKKworY29udGFpbmluZyB0aGVzZSBmaWxlcy4KKworICAtci0tci0tci0tICAgIDEgcm9vdCAgICAgcm9vdCAgICAgICAgIDQwOTYgSmFuICAxIDAwOjAwIHNhbXBsZXMKKyAgLXJ3LXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA0MDk2IEphbiAgMSAwMDowMCB0aHJlc2hvbGQKKyAgLXItLXItLXItLSAgICAxIHJvb3QgICAgIHJvb3QgICAgICAgICA0MDk2IEphbiAgMSAwMDowMCB0aHJlc2hvbGRfcmFuZ2UKKworVGhlIHRocmVzaG9sZCBpcyB0aGUgY3VycmVudCB0b3VjaCB0aHJlc2hvbGQuICBJdCBkZWZhdWx0cyB0byA3NTAgb24KK21vc3QgdGFyZ2V0cy4KKworICAjIGNhdCB0aHJlc2hvbGQKKyA3NTAKKworVGhlIHRocmVzaG9sZF9yYW5nZSBjb250YWlucyB0aGUgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUKK3RocmVzaG9sZC4gIFZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2Ugd2lsbCBiZSBzaWxlbnRseSBpZ25vcmVkLgorCisgICMgY2F0IHRocmVzaG9sZF9yYW5nZQorICAwIDEwMjMKKworVG8gY2hhbmdlIHRoZSB0aHJlc2hvbGQsIHdyaXRlIGEgdmFsdWUgdG8gdGhlIHRocmVzaG9sZCBmaWxlLgorCisgICMgZWNobyA1MDAgPiB0aHJlc2hvbGQKKyAgIyBjYXQgdGhyZXNob2xkCisgIDUwMAorCitUaGUgc2FtcGxlcyBmaWxlIGNvbnRhaW5zIHRoZSBtb3N0IHJlY2VudGx5IHNhbXBsZWQgdmFsdWVzIGZyb20gdGhlCitBREMuICBUaGVyZSBhcmUgMTIuICBCZWxvdyBhcmUgdHlwaWNhbCBvZiB0aGUgbGFzdCBzYW1wbGVkIHZhbHVlcyB3aGVuCit0aGUgcGVuIGhhcyBiZWVuIHJlbGVhc2VkLiAgVGhlIGZpcnN0IHR3byBhbmQgbGFzdCB0d28gc2FtcGxlcyBhcmUgZm9yCitkZXRlY3Rpbmcgd2hldGhlciBvciBub3QgdGhlIHBlbiBpcyBkb3duLiAgVGhlIHRoaXJkIHRocm91Z2ggc2l4dGggYXJlCitYIGNvb3JkaW5hdGUgc2FtcGxlcy4gIFRoZSBzZXZlbnRoIHRocm91Z2ggdGVudGggYXJlIFkgY29vcmRpbmF0ZQorc2FtcGxlcy4KKworICAjIGNhdCBzYW1wbGVzCisgIDEwMjMgMTAyMyAwIDAgMCAwIDUzMCA1MjkgNTMwIDUyOSAxMDIzIDEwMjMKKworVG8gZGV0ZXJtaW5lIGEgcmVhc29uYWJsZSB0aHJlc2hvbGQsIHByZXNzIG9uIHRoZSB0b3VjaCBwYW5lbCB3aXRoIGFuCithcHByb3ByaWF0ZSBzdHlsdXMgYW5kIHJlYWQgdGhlIHZhbHVlcyBmcm9tIHNhbXBsZXMuCisKKyAgIyBjYXQgc2FtcGxlcworICAxMDIzIDY3NiA5MiAxMDMgMTAxIDEwMiA4NTUgOTE5IDkyMiA5MjIgMTAyMyA2NzkKKworVGhlIGZpcnN0IGFuZCBlbGV2ZW50aCBzYW1wbGVzIGFyZSBkaXNjYXJkZWQuICBUaHVzLCB0aGUgaW1wb3J0YW50Cit2YWx1ZXMgYXJlIHRoZSBzZWNvbmQgYW5kIHR3ZWxmdGggd2hpY2ggYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZQorcGVuIGlzIGRvd24uICBXaGVuIGJvdGggYXJlIGJlbG93IHRoZSB0aHJlc2hvbGQsIHRoZSBkcml2ZXIgcmVnaXN0ZXJzCit0aGF0IHRoZSBwZW4gaXMgZG93bi4gIFdoZW4gZWl0aGVyIGlzIGFib3ZlIHRoZSB0aHJlc2hvbGQsIGl0CityZWdpc3RlcnMgdGhlbiBwZW4gaXMgdXAuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MQ0RQYW5lbHMgYi9Eb2N1bWVudGF0aW9uL2FybS9TaGFycC1MSC9MQ0RQYW5lbHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmIxYjIxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0xDRFBhbmVscwpAQCAtMCwwICsxLDU5IEBACitSRUFETUUgb24gdGhlIExDRCBQYW5lbHMKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHNldmVyYWwgTENEIHBhbmVscywgYXZhaWxhYmxlIGZyb20gTG9naWMgUEQsCithcmUgaW5jbHVkZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UuICBUaGlzIFJFQURNRSB3aWxsIGhlbHAgeW91Cit1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRhdGEgYW5kIGdpdmUgeW91IHNvbWUgZ3VpZGFuY2UgZm9yCithZGRpbmcgc3VwcG9ydCBmb3Igb3RoZXIgcGFuZWxzIGlmIHlvdSB3aXNoLgorCisKK2xjZC1wYW5lbHMuaAorLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIG5vIHdheSwgYXQgcHJlc2VudCwgdG8gZGV0ZWN0IHdoaWNoIHBhbmVsIGlzIGF0dGFjaGVkIHRvIHRoZQorc3lzdGVtIGF0IHJ1bnRpbWUuICBUaHVzIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBpcyBzdGF0aWMuICBUaGUgZmlsZQorYXJjaC9hcm0vbWFjaC1sZDdhNDB4L2xjZC1wYW5lbHMuaCAob3Igc2ltaWxhcikgZGVmaW5lcyBhbGwgb2YgdGhlCitwYW5lbCBzcGVjaWZpYyBwYXJhbWV0ZXJzLgorCitJdCBzaG91bGQgYmUgcG9zc2libGUgZm9yIHRoaXMgZGF0YSB0byBiZSBzaGFyZWQgYW1vbmcgc2V2ZXJhbCBkZXZpY2UKK2ZhbWlsaWVzLiAgVGhlIGN1cnJlbnQgbGF5b3V0IG1heSBiZSBpbnN1ZmZpY2llbnRseSBnZW5lcmFsLCBidXQgaXQgaXMKK2FtZW5hYmxlIHRvIGltcHJvdmVtZW50LgorCisKK1BJWEVMX0NMT0NLCistLS0tLS0tLS0tLQorCitUaGUgcGFuZWwgZGF0YSBzaGVldHMgd2lsbCBnaXZlIGEgcmFuZ2Ugb2YgYWNjZXB0YWJsZSBwaXhlbCBjbG9ja3MuCitUaGUgZnVuZGFtZW50YWwgTENEQ0xLIGlucHV0IGZyZXF1ZW5jeSBpcyBkaXZpZGVkIGRvd24gYnkgYSBQQ0QKK2NvbnN0YW50IGluIGZpZWxkICcudGltMicuICBJdCBtYXkgaGFwcGVuIHRoYXQgaXQgaXMgaW1wb3NzaWJsZSB0byBzZXQKK3RoZSBwaXhlbCBjbG9jayB3aXRoaW4gdGhpcyByYW5nZS4gIEEgY2xvY2sgd2hpY2ggaXMgdG9vIHNsb3cgd2lsbAordGVuZCB0byBmbGlja2VyLiAgRm9yIHRoZSBoaWdoZXN0IHF1YWxpdHkgaW1hZ2UsIHNldCB0aGUgY2xvY2sgYXMgaGlnaAorYXMgcG9zc2libGUuCisKKworTUFSR0lOUworLS0tLS0tLQorCitUaGVzZSB2YWx1ZXMgbWF5IGJlIGRpZmZpY3VsdCB0byBnbGVhbiBmcm9tIHRoZSBwYW5lbCBkYXRhIHNoZWV0LiAgSW4KK3RoZSBjYXNlIG9mIHRoZSBTaGFycCBwYW5lbHMsIHRoZSB1cHBlciBtYXJnaW4gaXMgZXhwbGljaXRseSBjYWxsZWQKK291dCBhcyBhIHNwZWNpZmljIG51bWJlciBvZiBsaW5lcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZyYW1lLiAgVGhlCitvdGhlciB2YWx1ZXMgbWF5IG5vdCBtYXR0ZXIgYXMgbXVjaCBhcyB0aGUgcGFuZWxzIHRlbmQgdG8KK2F1dG9tYXRpY2FsbHkgY2VudGVyIHRoZSBpbWFnZS4KKworCitTeW5jIFNlbnNlCistLS0tLS0tLS0tCisKK1RoZSBzZW5zZSBvZiB0aGUgaHN5bmMgYW5kIHZzeW5jIHB1bHNlcyBtYXkgYmUgY2FsbGVkIG91dCBpbiB0aGUgZGF0YQorc2hlZXQuICBPbiBvbmUgcGFuZWwsIHRoZSBzZW5zZSBvZiB0aGVzZSBwdWxzZXMgZGV0ZXJtaW5lIHRoZSBoZWlnaHQKK29mIHRoZSB2aXNpYmxlIHJlZ2lvbiBvbiB0aGUgcGFuZWwuICBNb3N0IG9mIHRoZSBTaGFycCBwYW5lbHMgdXNlCituZWdhdGl2ZSBzZW5zZSBzeW5jIHB1bHNlcyBzZXQgYnkgdGhlIFRJTTJfSUhTIGFuZCBUSU0yX0lWUyBiaXRzIGluCisnLnRpbTInLgorCisKK1BlbCBMYXlvdXQKKy0tLS0tLS0tLS0KKworVGhlIFNoYXJwIGNvbG9yIFRGVCBwYW5lbHMgYXJlIGFsbCBjb25maWd1cmVkIGZvciAxNiBiaXQgZGlyZWN0IGNvbG9yCittb2Rlcy4gIFRoZSBhbWJhLWxjZCBkcml2ZXIgc2V0cyB0aGUgcGVsIG1vZGUgdG8gNTY1IGZvciA1IGJpdHMgb2YKK2VhY2ggcmVkIGFuZCBibHVlIGFuZCA2IGJpdHMgb2YgZ3JlZW4uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9pbm90aWZ5LnR4dAppbmRleCA2ZDUwMTkwLi41OWE5MTlmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKQEAgLTY5LDE3ICs2OSwxMzUgQEAKIAlpbnQgaW5vdGlmeV9ybV93YXRjaCAoaW50IGZkLCBfX3UzMiBtYXNrKTsKIAogCi0oaWlpKSBJbnRlcm5hbCBLZXJuZWwgSW1wbGVtZW50YXRpb24KKyhpaWkpIEtlcm5lbCBJbnRlcmZhY2UKIAotRWFjaCBpbm90aWZ5IGluc3RhbmNlIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm90aWZ5X2RldmljZSBzdHJ1Y3R1cmUuCitJbm90aWZ5J3Mga2VybmVsIEFQSSBjb25zaXN0cyBhIHNldCBvZiBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHdhdGNoZXMgYW5kIGFuCitldmVudCBjYWxsYmFjay4KKworVG8gdXNlIHRoZSBrZXJuZWwgQVBJLCB5b3UgbXVzdCBmaXJzdCBpbml0aWFsaXplIGFuIGlub3RpZnkgaW5zdGFuY2Ugd2l0aCBhIHNldAorb2YgaW5vdGlmeV9vcGVyYXRpb25zLiAgWW91IGFyZSBnaXZlbiBhbiBvcGFxdWUgaW5vdGlmeV9oYW5kbGUsIHdoaWNoIHlvdSB1c2UKK2ZvciBhbnkgZnVydGhlciBjYWxscyB0byBpbm90aWZ5LgorCisgICAgc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCA9IGlub3RpZnlfaW5pdChteV9ldmVudF9oYW5kbGVyKTsKKworWW91IG11c3QgcHJvdmlkZSBhIGZ1bmN0aW9uIGZvciBwcm9jZXNzaW5nIGV2ZW50cyBhbmQgYSBmdW5jdGlvbiBmb3IgZGVzdHJveWluZwordGhlIGlub3RpZnkgd2F0Y2guCisKKyAgICB2b2lkIGhhbmRsZV9ldmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsIHUzMiB3ZCwgdTMyIG1hc2ssCisgICAgCSAgICAgICAgICAgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IGlub2RlICppbm9kZSkKKworCXdhdGNoIC0gdGhlIHBvaW50ZXIgdG8gdGhlIGlub3RpZnlfd2F0Y2ggdGhhdCB0cmlnZ2VyZWQgdGhpcyBjYWxsCisJd2QgLSB0aGUgd2F0Y2ggZGVzY3JpcHRvcgorCW1hc2sgLSBkZXNjcmliZXMgdGhlIGV2ZW50IHRoYXQgb2NjdXJyZWQKKwljb29raWUgLSBhbiBpZGVudGlmaWVyIGZvciBzeW5jaHJvbml6aW5nIGV2ZW50cworCW5hbWUgLSB0aGUgZGVudHJ5IG5hbWUgZm9yIGFmZmVjdGVkIGZpbGVzIGluIGEgZGlyZWN0b3J5LWJhc2VkIGV2ZW50CisJaW5vZGUgLSB0aGUgYWZmZWN0ZWQgaW5vZGUgaW4gYSBkaXJlY3RvcnktYmFzZWQgZXZlbnQKKworICAgIHZvaWQgZGVzdHJveV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCisKK1lvdSBtYXkgYWRkIHdhdGNoZXMgYnkgcHJvdmlkaW5nIGEgcHJlLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgaW5vdGlmeV93YXRjaAorc3RydWN0dXJlIGFuZCBzcGVjaWZ5aW5nIHRoZSBpbm9kZSB0byB3YXRjaCBhbG9uZyB3aXRoIGFuIGlub3RpZnkgZXZlbnQgbWFzay4KK1lvdSBtdXN0IHBpbiB0aGUgaW5vZGUgZHVyaW5nIHRoZSBjYWxsLiAgWW91IHdpbGwgbGlrZWx5IHdpc2ggdG8gZW1iZWQgdGhlCitpbm90aWZ5X3dhdGNoIHN0cnVjdHVyZSBpbiBhIHN0cnVjdHVyZSBvZiB5b3VyIG93biB3aGljaCBjb250YWlucyBvdGhlcgoraW5mb3JtYXRpb24gYWJvdXQgdGhlIHdhdGNoLiAgT25jZSB5b3UgYWRkIGFuIGlub3RpZnkgd2F0Y2gsIGl0IGlzIGltbWVkaWF0ZWx5CitzdWJqZWN0IHRvIHJlbW92YWwgZGVwZW5kaW5nIG9uIGZpbGVzeXN0ZW0gZXZlbnRzLiAgWW91IG11c3QgZ3JhYiBhIHJlZmVyZW5jZSBpZgoreW91IGRlcGVuZCBvbiB0aGUgd2F0Y2ggaGFuZ2luZyBhcm91bmQgYWZ0ZXIgdGhlIGNhbGwuCisKKyAgICBpbm90aWZ5X2luaXRfd2F0Y2goJm15X3dhdGNoLT5pd2F0Y2gpOworICAgIGlub3RpZnlfZ2V0X3dhdGNoKCZteV93YXRjaC0+aXdhdGNoKTsJLy8gb3B0aW9uYWwKKyAgICBzMzIgd2QgPSBpbm90aWZ5X2FkZF93YXRjaChpaCwgJm15X3dhdGNoLT5pd2F0Y2gsIGlub2RlLCBtYXNrKTsKKyAgICBpbm90aWZ5X3B1dF93YXRjaCgmbXlfd2F0Y2gtPml3YXRjaCk7CS8vIG9wdGlvbmFsCisKK1lvdSBtYXkgdXNlIHRoZSB3YXRjaCBkZXNjcmlwdG9yICh3ZCkgb3IgdGhlIGFkZHJlc3Mgb2YgdGhlIGlub3RpZnlfd2F0Y2ggZm9yCitvdGhlciBpbm90aWZ5IG9wZXJhdGlvbnMuICBZb3UgbXVzdCBub3QgZGlyZWN0bHkgcmVhZCBvciBtYW5pcHVsYXRlIGRhdGEgaW4gdGhlCitpbm90aWZ5X3dhdGNoLiAgQWRkaXRpb25hbGx5LCB5b3UgbXVzdCBub3QgY2FsbCBpbm90aWZ5X2FkZF93YXRjaCgpIG1vcmUgdGhhbgorb25jZSBmb3IgYSBnaXZlbiBpbm90aWZ5X3dhdGNoIHN0cnVjdHVyZSwgdW5sZXNzIHlvdSBoYXZlIGZpcnN0IGNhbGxlZCBlaXRoZXIKK2lub3RpZnlfcm1fd2F0Y2goKSBvciBpbm90aWZ5X3JtX3dkKCkuCisKK1RvIGRldGVybWluZSBpZiB5b3UgaGF2ZSBhbHJlYWR5IHJlZ2lzdGVyZWQgYSB3YXRjaCBmb3IgYSBnaXZlbiBpbm9kZSwgeW91IG1heQorY2FsbCBpbm90aWZ5X2ZpbmRfd2F0Y2goKSwgd2hpY2ggZ2l2ZXMgeW91IGJvdGggdGhlIHdkIGFuZCB0aGUgd2F0Y2ggcG9pbnRlciBmb3IKK3RoZSBpbm90aWZ5X3dhdGNoLCBvciBhbiBlcnJvciBpZiB0aGUgd2F0Y2ggZG9lcyBub3QgZXhpc3QuCisKKyAgICB3ZCA9IGlub3RpZnlfZmluZF93YXRjaChpaCwgaW5vZGUsICZ3YXRjaHApOworCitZb3UgbWF5IHVzZSBjb250YWluZXJfb2YoKSBvbiB0aGUgd2F0Y2ggcG9pbnRlciB0byBhY2Nlc3MgeW91ciBvd24gZGF0YQorYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gd2F0Y2guICBXaGVuIGFuIGV4aXN0aW5nIHdhdGNoIGlzIGZvdW5kLAoraW5vdGlmeV9maW5kX3dhdGNoKCkgYnVtcHMgdGhlIHJlZmNvdW50IGJlZm9yZSByZWxlYXNpbmcgaXRzIGxvY2tzLiAgWW91IG11c3QKK3B1dCB0aGF0IHJlZmVyZW5jZSB3aXRoOgorCisgICAgcHV0X2lub3RpZnlfd2F0Y2god2F0Y2hwKTsKKworQ2FsbCBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKCkgdG8gdXBkYXRlIHRoZSBldmVudCBtYXNrIGZvciBhbiBleGlzdGluZyB3YXRjaC4KK2lub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goKSByZXR1cm5zIHRoZSB3ZCBvZiB0aGUgdXBkYXRlZCB3YXRjaCwgb3IgYW4gZXJyb3IgaWYKK3RoZSB3YXRjaCBkb2VzIG5vdCBleGlzdC4KKworICAgIHdkID0gaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChpaCwgaW5vZGUsIG1hc2spOworCitBbiBleGlzdGluZyB3YXRjaCBtYXkgYmUgcmVtb3ZlZCBieSBjYWxsaW5nIGVpdGhlciBpbm90aWZ5X3JtX3dhdGNoKCkgb3IKK2lub3RpZnlfcm1fd2QoKS4KKworICAgIGludCByZXQgPSBpbm90aWZ5X3JtX3dhdGNoKGloLCAmbXlfd2F0Y2gtPml3YXRjaCk7CisgICAgaW50IHJldCA9IGlub3RpZnlfcm1fd2QoaWgsIHdkKTsKKworQSB3YXRjaCBtYXkgYmUgcmVtb3ZlZCB3aGlsZSBleGVjdXRpbmcgeW91ciBldmVudCBoYW5kbGVyIHdpdGggdGhlIGZvbGxvd2luZzoKKworICAgIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChpaCwgaXdhdGNoKTsKKworQ2FsbCBpbm90aWZ5X2Rlc3Ryb3koKSB0byByZW1vdmUgYWxsIHdhdGNoZXMgZnJvbSB5b3VyIGlub3RpZnkgaW5zdGFuY2UgYW5kCityZWxlYXNlIGl0LiAgSWYgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMsIGlub3RpZnlfZGVzdHJveSgpIHdpbGwgY2FsbAoreW91ciBkZXN0cm95X3dhdGNoIG9wIGZvciBlYWNoIHdhdGNoLgorCisgICAgaW5vdGlmeV9kZXN0cm95KGloKTsKKworV2hlbiBpbm90aWZ5IHJlbW92ZXMgYSB3YXRjaCwgaXQgc2VuZHMgYW4gSU5fSUdOT1JFRCBldmVudCB0byB5b3VyIGNhbGxiYWNrLgorWW91IG1heSB1c2UgdGhpcyBldmVudCBhcyBhbiBpbmRpY2F0aW9uIHRvIGZyZWUgdGhlIHdhdGNoIG1lbW9yeS4gIE5vdGUgdGhhdAoraW5vdGlmeSBtYXkgcmVtb3ZlIGEgd2F0Y2ggZHVlIHRvIGZpbGVzeXN0ZW0gZXZlbnRzLCBhcyB3ZWxsIGFzIGJ5IHlvdXIgcmVxdWVzdC4KK0lmIHlvdSB1c2UgSU5fT05FU0hPVCwgaW5vdGlmeSB3aWxsIHJlbW92ZSB0aGUgd2F0Y2ggYWZ0ZXIgdGhlIGZpcnN0IGV2ZW50LCBhdAord2hpY2ggcG9pbnQgeW91IG1heSBjYWxsIHRoZSBmaW5hbCBpbm90aWZ5X3B1dF93YXRjaC4KKworKGl2KSBLZXJuZWwgSW50ZXJmYWNlIFByb3RvdHlwZXMKKworCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaW5vdGlmeV9pbml0KHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKm9wcyk7CisKKwlpbm90aWZ5X2luaXRfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKKworCXMzMiBpbm90aWZ5X2FkZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkgICAgICAgICAgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCwKKwkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBtYXNrKTsKKworCXMzMiBpbm90aWZ5X2ZpbmRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKndhdGNocCk7CisKKwlzMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBtYXNrKTsKKworCWludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIHUzMiB3ZCk7CisKKwlpbnQgaW5vdGlmeV9ybV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpOworCisJdm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkJIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCk7CisKKwl2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKTsKKworCXZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKTsKKwl2b2lkIHB1dF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCk7CisKKworKHYpIEludGVybmFsIEtlcm5lbCBJbXBsZW1lbnRhdGlvbgorCitFYWNoIGlub3RpZnkgaW5zdGFuY2UgaXMgcmVwcmVzZW50ZWQgYnkgYW4gaW5vdGlmeV9oYW5kbGUgc3RydWN0dXJlLgorSW5vdGlmeSdzIHVzZXJzcGFjZSBjb25zdW1lcnMgYWxzbyBoYXZlIGFuIGlub3RpZnlfZGV2aWNlIHdoaWNoIGlzCithc3NvY2lhdGVkIHdpdGggdGhlIGlub3RpZnlfaGFuZGxlLCBhbmQgb24gd2hpY2ggZXZlbnRzIGFyZSBxdWV1ZWQuCiAKIEVhY2ggd2F0Y2ggaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGlub3RpZnlfd2F0Y2ggc3RydWN0dXJlLiAgV2F0Y2hlcyBhcmUgY2hhaW5lZAotb2ZmIG9mIGVhY2ggYXNzb2NpYXRlZCBkZXZpY2UgYW5kIGVhY2ggYXNzb2NpYXRlZCBpbm9kZS4KK29mZiBvZiBlYWNoIGFzc29jaWF0ZWQgaW5vdGlmeV9oYW5kbGUgYW5kIGVhY2ggYXNzb2NpYXRlZCBpbm9kZS4KIAotU2VlIGZzL2lub3RpZnkuYyBmb3IgdGhlIGxvY2tpbmcgYW5kIGxpZmV0aW1lIHJ1bGVzLgorU2VlIGZzL2lub3RpZnkuYyBhbmQgZnMvaW5vdGlmeV91c2VyLmMgZm9yIHRoZSBsb2NraW5nIGFuZCBsaWZldGltZSBydWxlcy4KIAogCi0oaXYpIFJhdGlvbmFsZQorKHZpKSBSYXRpb25hbGUKIAogUTogV2hhdCBpcyB0aGUgZGVzaWduIGRlY2lzaW9uIGJlaGluZCBub3QgdHlpbmcgdGhlIHdhdGNoIHRvIHRoZSBvcGVuIGZkIG9mCiAgICB0aGUgd2F0Y2hlZCBvYmplY3Q/CkBAIC0xNDUsNyArMjYzLDcgQEAKICAgIGZpbGUgZGVzY3JpcHRvci1iYXNlZCBvbmUgdGhhdCBhbGxvd3MgYmFzaWMgZmlsZSBJL08gYW5kIHBvbGwvc2VsZWN0LgogICAgT2J0YWluaW5nIHRoZSBmZCBhbmQgbWFuYWdpbmcgdGhlIHdhdGNoZXMgY291bGQgaGF2ZSBiZWVuIGRvbmUgZWl0aGVyIHZpYSBhCiAgICBkZXZpY2UgZmlsZSBvciBhIGZhbWlseSBvZiBuZXcgc3lzdGVtIGNhbGxzLiAgV2UgZGVjaWRlZCB0byBpbXBsZW1lbnQgYQotICAgZmFtaWx5IG9mIHN5c3RlbSBjYWxscyBiZWNhdXNlIHRoYXQgaXMgdGhlIHByZWZmZXJlZCBhcHByb2FjaCBmb3IgbmV3IGtlcm5lbAorICAgZmFtaWx5IG9mIHN5c3RlbSBjYWxscyBiZWNhdXNlIHRoYXQgaXMgdGhlIHByZWZlcnJlZCBhcHByb2FjaCBmb3IgbmV3IGtlcm5lbAogICAgaW50ZXJmYWNlcy4gIFRoZSBvbmx5IHJlYWwgZGlmZmVyZW5jZSB3YXMgd2hldGhlciB3ZSB3YW50ZWQgdG8gdXNlIG9wZW4oMikKICAgIGFuZCBpb2N0bCgyKSBvciBhIGNvdXBsZSBvZiBuZXcgc3lzdGVtIGNhbGxzLiAgU3lzdGVtIGNhbGxzIGJlYXQgaW9jdGxzLgogCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDE0MjFmNzQuLmNlMzdjNGIgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xODQzLDEyICsxODQzLDEyIEBACiBXOiAgICAgaHR0cDovL21lZ2FyYWlkLmxzaWxvZ2ljLmNvbQogUzogICAgIE1haW50YWluZWQKIAotTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUworTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUyAoTVREKQogUDoJRGF2aWQgV29vZGhvdXNlCiBNOglkd213MkBpbmZyYWRlYWQub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLwogTDoJbGludXgtbXRkQGxpc3RzLmluZnJhZGVhZC5vcmcKLVQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdGdseC9tdGQtMi42LmdpdAorVDoJZ2l0IGdpdDovL2dpdC5pbmZyYWRlYWQub3JnL210ZC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiAKIE1JQ1JPVEVLIFg2IFNDQU5ORVIKQEAgLTE4OTUsNyArMTg5NSw3IEBACiBXOglodHRwOi8vd3d3LmF0bmYuY3Npcm8uYXUvfnJnb29jaC9saW51eC9rZXJuZWwtcGF0Y2hlcy5odG1sCiBTOglNYWludGFpbmVkCiAKLU1VTFRJTUVESUEgQ0FSRCBTVUJTWVNURU0KK01VTFRJTUVESUEgQ0FSRCAoTU1DKSBTVUJTWVNURU0KIFA6CVJ1c3NlbGwgS2luZwogTToJcm1rK21tY0Bhcm0ubGludXgub3JnLnVrCiBTOglNYWludGFpbmVkCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAwOGI3Y2M5Li5mNDdjZjlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTI3MCw2ICsyNzAsMTEgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gYW4gQXRtZWwKIAkgIEFUOTFSTTkyMDAtYmFzZWQgYm9hcmQuCiAKK2NvbmZpZyBBUkNIX1BOWDQwMDgKKwlib29sICJQaGlsaXBzIE5leHBlcmlhIFBOWDQwMDggTW9iaWxlIgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBQaGlsaXBzIFBOWDQwMDggbW9iaWxlIHBsYXRmb3JtLgorCiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWNscHM3MTF4L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDZmOGU4NGMuLjZjOTdhYTcwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTE2LDYgKzExNiw3IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX1JFQUxWSUVXKSAgIDo9IHJlYWx2aWV3CiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0FUOTFSTTkyMDApIDo9IGF0OTFybTkyMDAKICBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfRVA5M1hYKSAgICAgOj0gZXA5M3h4CisgbWFjaGluZS0kKENPTkZJR19BUkNIX1BOWDQwMDgpICAgIDo9IHBueDQwMDgKIAogaWZlcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQogIyBUaGlzIGlzIHdoYXQgaGFwcGVucyBpZiB5b3UgZm9yZ2V0IHRoZSBJT0NTMTYgbGluZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCmluZGV4IGI1NmY1ZTYuLjIzMDE2ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwpAQCAtNjA1LDggKzYwNSw4IEBACiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb2ZmCiAJCWIJX19hcm12NF9tbXVfY2FjaGVfZmx1c2gKIAotCQkud29yZAkweDAwMDcwMDAwCQlAIEFSTXY2Ci0JCS53b3JkCTB4MDAwZjAwMDAKKwkJLndvcmQJMHgwMDA3YjAwMAkJQCBBUk12NgorCQkud29yZAkweDAwMDdmMDAwCiAJCWIJX19hcm12NF9tbXVfY2FjaGVfb24KIAkJYglfX2FybXY0X21tdV9jYWNoZV9vZmYKIAkJYglfX2FybXY2X21tdV9jYWNoZV9mbHVzaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9scGQ3YTQwMF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwppbmRleCA2N2VhYTI2Li5iZjljZjljIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL2xwZDdhNDAwX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIE1vbiBNYXIgMjggMDA6MDY6MzMgMjAwNQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyCisjIFRodSBOb3YgIDMgMTQ6MTU6MzIgMjAwNQogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKQEAgLTE3LDYgKzE3LDcgQEAKIENPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19MT0NLX0tFUk5FTD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzYsNiArMzcsOCBAQAogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CiBDT05GSUdfQkFTRV9GVUxMPXkKIENPTkZJR19GVVRFWD15CiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CkBAIC03MSw2ICs3NCw3IEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xINzk1MlggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTEg3QTQwWD15CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldApAQCAtODQsNiArODgsNyBAQAogQ09ORklHX01BQ0hfTFBEN0E0MDA9eQogIyBDT05GSUdfTUFDSF9MUEQ3QTQwNCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9MSDdBNDAwPXkKK0NPTkZJR19MUEQ3QTQwWF9DUExEX1NTUD15CiAjIENPTkZJR19MSDdBNDBYX0NPTlRJR01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSDdBNDBYX09ORV9CQU5LX1BFUl9OT0RFIGlzIG5vdCBzZXQKIApAQCAtMTEwLDYgKzExNSw4IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCitDT05GSUdfQVJNX0FNQkE9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKIAogIwogIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CkBAIC0xMTksNiArMTI2LDcgQEAKICMKICMgS2VybmVsIEZlYXR1cmVzCiAjCisjIENPTkZJR19TTVAgaXMgbm90IHNldAogQ09ORklHX1BSRUVNUFQ9eQogQ09ORklHX0RJU0NPTlRJR01FTT15CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQpAQCAtMTc1LDcgKzE4Myw3IEBACiAjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQogIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CiAKICMKQEAgLTIxNyw3ICsyMjUsMTAgQEAKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAwMDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDQwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9NAogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKIApAQCAtMjU0LDcgKzI2NSw2IEBACiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKQEAgLTI4OCwxMyArMjk4LDE1IEBACiAjIENPTkZJR19CTEtfREVWX0lERUNEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QT0xMPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0FSTT15CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTMwMiw3ICszMTQsMzcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCisjIENPTkZJR19CTEtfREVWX1NEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorCisjCisjIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCkBAIC0zMzEsNyArMzczLDYgQEAKICMKIENPTkZJR19QQUNLRVQ9eQogIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAogQ09ORklHX1VOSVg9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CkBAIC00MzgsMTMgKzQ3OSwxMCBAQAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCiAjCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKICMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtNDUzLDcgKzQ5MSwxMyBAQAogIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDNfTEg3PXkKK0NPTkZJR19IQVNfVE9VQ0hTQ1JFRU5fQURTNzg0M19MSDc9eQogIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ2MSw3ICs1MDUsNiBAQAogIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNDc5LDYgKzUyMiw4IEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9BTUJBX1BMMDExIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfU0VSSUFMX0xIN0E0MFg9eQpAQCAtNTEwLDcgKzU1NSw2IEBACiAjCiAjIFRQTSBkZXZpY2VzCiAjCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtNTM0LDE4ICs1NzgsNzMgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CitDT05GSUdfRkJfU09GVF9DVVJTT1I9eQorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQVJNQ0xDRD15CitDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTAzNVE3REIwMl9IUlRGVD15CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDU3UTNEQzAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFE2NEQzNDMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTEwRDM2OCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTIxUzFERzQxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRSBpcyBub3Qgc2V0CisKKyMKKyMgTG9nbyBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19MT0dPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKICMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKK0NPTkZJR19TT1VORD15CisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorIyBDT05GSUdfU05EX1NFUVVFTkNFUiBpcyBub3Qgc2V0CitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTPXkKKyMgQ09ORklHX1NORF9SVENUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FDOTdfQ09ERUM9eQorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKK0NPTkZJR19TTkRfTEg3QTQwWF9BQzk3PXkKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2xwZDdhNDA0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCmluZGV4IDIwOGQ1OTEuLjNhNTdiZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbHBkN2E0MDRfZGVmY29uZmlnCkBAIC0xLDUyICsxLDU4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBNb24gTWFyIDI4IDAwOjE0OjA4IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNgorIyBUaHUgTWFyIDIzIDE3OjUwOjMxIDIwMDYKICMKIENPTkZJR19BUk09eQogQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogIyBDT05GSUdfU1dBUCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiAjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19FTUJFRERFRD15CiBDT05GSUdfS0FMTFNZTVM9eQogIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCiBDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKIENPTkZJR19DQ19BTElHTl9MT09QUz0wCiBDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT15CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTU0LDYgKzYwLDIzIEBACiAjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKIAogIworIyBCbG9jayBsYXllcgorIworCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisKKyMKICMgU3lzdGVtIFR5cGUKICMKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldApAQCAtNzEsMTEgKzk0LDE1IEBACiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xINzk1MlggaXMgbm90IHNldAogQ09ORklHX0FSQ0hfTEg3QTQwWD15CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxUk05MjAwIGlzIG5vdCBzZXQKIAogIwogIyBMSDdBNDBYIEltcGxlbWVudGF0aW9ucwpAQCAtMTEwLDYgKzEzNyw3IEBACiAjCiAjIEJ1cyBzdXBwb3J0CiAjCitDT05GSUdfQVJNX0FNQkE9eQogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTEyMCw3ICsxNDgsMTggQEAKICMgS2VybmVsIEZlYXR1cmVzCiAjCiBDT05GSUdfUFJFRU1QVD15CisjIENPTkZJR19OT19JRExFX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FFQUJJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEU9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorIyBDT05GSUdfRkxBVE1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUw9eQorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CiBDT05GSUdfRElTQ09OVElHTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUz15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CiBDT05GSUdfQUxJR05NRU5UX1RSQVA9eQogCiAjCkBAIC0xNTQsNiArMTkzLDg0IEBACiAjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwogIwogIyBDT05GSUdfUE0gaXMgbm90IHNldAorIyBDT05GSUdfQVBNIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0xNjgsNiArMjg1LDExIEBACiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAogCiAjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKICMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQogIwogQ09ORklHX01URD15CkBAIC0xNzUsNyArMjk3LDcgQEAKICMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAogQ09ORklHX01URF9QQVJUSVRJT05TPXkKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTg2LDYgKzMwOCw3IEBACiAjIENPTkZJR19GVEwgaXMgbm90IHNldAogIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKIAogIwogIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwpAQCAtMjExLDE1ICszMzQsMTggQEAKICMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKIAogIwogIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCiAjCiAjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwNDAwMDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD00CiAjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0VEQjczMTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAogCiAjCiAjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycwpAQCAtMjQzLDYgKzM2OSwxMSBAQAogIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAogCiAjCisjIE9uZU5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIwogIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKICMKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldApAQCAtMjU0LDcgKzM4NSw2IEBACiAjCiAjIEJsb2NrIGRldmljZXMKICMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKQEAgLTI2MiwxNiArMzkyLDcgQEAKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci0jIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfQ0ZRPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKQEAgLTI5MSwxMiArNDEyLDEzIEBACiAjIENPTkZJR19CTEtfREVWX0lERUZMT1BQWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorQ09ORklHX0lERV9QT0xMPXkKIAogIwogIyBJREUgY2hpcHNldCBzdXBwb3J0L2J1Z2ZpeGVzCiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQotIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CitDT05GSUdfSURFX0FSTT15CiAjIENPTkZJR19CTEtfREVWX0lERURNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JREVETUFfQVVUTyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKQEAgLTMwNCw2ICs0MjYsNyBAQAogIwogIyBTQ1NJIGRldmljZSBzdXBwb3J0CiAjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJPXkKICMgQ09ORklHX1NDU0lfUFJPQ19GUyBpcyBub3Qgc2V0CiAKQEAgLTMxNSw2ICs0MzgsNyBAQAogIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiAKICMKICMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCkBAIC0zMjksMTAgKzQ1MywxMiBAQAogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogCkBAIC0zNDQsNiArNDcwLDcgQEAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC0zNTQsNzAgKzQ4MSw4IEBACiAjCiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci0jIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci1DT05GSUdfSVBfUE5QX1JBUlA9eQotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9UQ1BESUFHIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNDI1LDExICs0OTAsMTcgQEAKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CiAKICMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQogIwogQ09ORklHX05FVF9FVEhFUk5FVD15CiBDT05GSUdfTUlJPXkKIENPTkZJR19TTUM5MVg9eQorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMCBNYml0KQpAQCAtNDU2LDYgKzUyNyw4IEBACiAjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTQ3MCwxMCArNTQzLDEzIEBACiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKICMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAogIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CiAjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTQ4Miw3ICs1NTgsMTMgQEAKICMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKK0NPTkZJR19UT1VDSFNDUkVFTl9BRENfTEg3PXkKK0NPTkZJR19IQVNfVE9VQ0hTQ1JFRU5fQURDX0xINz15CiAjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKIAogIwpAQCAtNDkwLDcgKzU3Miw2IEBACiAjCiAjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQogCiAjCiAjIENoYXJhY3RlciBkZXZpY2VzCkBAIC01MDgsNiArNTg5LDggQEAKICMKICMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAogIworIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX0FNQkFfUEwwMTEgaXMgbm90IHNldAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19TRVJJQUxfTEg3QTQwWD15CkBAIC01MzMsMTMgKzYxNiwxMyBAQAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKIAogIwogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTU0NywxMCArNjMwLDMzIEBACiAjIENPTkZJR19JMkMgaXMgbm90IHNldAogCiAjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldApAQCAtNTYzLDE4ICs2NjksODMgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9BUk1DTENEPXkKK0NPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUPXkKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTY0RDM0MyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTBEMzY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJNQ0xDRF9BVU9fQTA3MFZXMDFfV0lERSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUk1DTENEX0hJVEFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CiAKICMKICMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorIyBDT05GSUdfU05EX1JUQ1RJTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQST15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKK0NPTkZJR19TTkRfQUM5N19DT0RFQz15CitDT05GSUdfU05EX0FDOTdfQlVTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgQUxTQSBBUk0gZGV2aWNlcworIworIyBDT05GSUdfU05EX0FSTUFBQ0kgaXMgbm90IHNldAorQ09ORklHX1NORF9MSDdBNDBYX0FDOTc9eQorCisjCisjIFVTQiBkZXZpY2VzCisjCisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKworIworIyBPcGVuIFNvdW5kIFN5c3RlbQorIworIyBDT05GSUdfU09VTkRfUFJJTUUgaXMgbm90IHNldAogCiAjCiAjIFVTQiBzdXBwb3J0CkBAIC01OTUsNiArNzY2LDcgQEAKICMKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKQEAgLTYwMywxNiArNzc1LDE5IEBACiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwogIwotIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAorIyBDT05GSUdfT0JTT0xFVEVfT1NTX1VTQl9EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CiAKICMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCiAjCiBDT05GSUdfVVNCX1NUT1JBR0U9eQogQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHPXkKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1JXX0RFVEVDVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CiAjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CkBAIC02MjEsMjIgKzc5NiwzMiBAQAogIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW5wdXQgRGV2aWNlcwogIwogQ09ORklHX1VTQl9ISUQ9eQogQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgSW1hZ2luZyBkZXZpY2VzCkBAIC02ODYsMTYgKzg3MSwzMyBAQAogIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAogCiAjCi0jIFVTQiBBVE0vRFNMIGRyaXZlcnMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CiAjCiAKICMKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfTEg3PXkKK0NPTkZJR19VU0JfTEg3PXkKKyMgQ09ORklHX1VTQl9HQURHRVRfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1pFUk89eQorIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19TRVJJQUwgaXMgbm90IHNldAogCiAjCiAjIE1NQy9TRCBDYXJkIHN1cHBvcnQKQEAgLTcwNyw2ICs5MDksNyBAQAogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC03MTYsMTcgKzkxOSwxNyBAQAogQ09ORklHX0ZTX01CQ0FDSEU9eQogIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIworIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC03NDksMTIgKzk1MiwxMSBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03NjksOCArOTcxLDggQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpAQCAtNzg3LDEyICs5ODksMTQgQEAKICMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKICMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKQEAgLTgwMSw2ICsxMDA1LDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC04MjAsNiArMTAyNSw3IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTg3NSwxOSArMTA4MSwyNCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CiBDT05GSUdfREVCVUdfSU5GTz15CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQogIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0VSUk9SUz15CkBAIC05MTIsNiArMTEyMyw3IEBACiAjIExpYnJhcnkgcm91dGluZXMKICMKICMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGEwNzhkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKQEAgLTAsMCArMSwyMDcyIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCisjIFRodSBBcHIgIDYgMTc6MDU6NTggMjAwNgorIworQ09ORklHX0FSTT15CitDT05GSUdfTU1VPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfUE9TSVhfTVFVRVVFPXkKK0NPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQVVESVQ9eQorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKK0NPTkZJR19PQlNPTEVURV9JTlRFUk1PRFVMRT1tCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19NT0RWRVJTSU9OUz15CitDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKK0NPTkZJR19LTU9EPXkKKworIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorQ09ORklHX0RFRkFVTFRfQVM9eQorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorCisjCisjIFN5c3RlbSBUeXBlCisjCisjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUE5YNDAwOD15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzI9eQorQ09ORklHX0NQVV9BUk05MjZUPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VEo9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfQ09QWV9WNFdCPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4gaXMgbm90IHNldAorCisjCisjIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAorIworQ09ORklHX1BDQ0FSRD1tCisjIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BDTUNJQT1tCitDT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKK0NPTkZJR19QQ01DSUFfSU9DVEw9eQorCisjCisjIFBDLWNhcmQgYnJpZGdlcworIworCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1BSRUVNUFQ9eQorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfRlBFX05XRlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CitDT05GSUdfQklORk1UX0FPVVQ9bQorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorQ09ORklHX1BNX0xFR0FDWT15CisjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQVBNPW0KKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKKyMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUNLRVQ9bQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPW0KK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorQ09ORklHX05FVF9LRVk9bQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX0ZXTUFSSz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKKyMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAorQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQorIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorCisjCisjIElQOiBWaXJ0dWFsIFNlcnZlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfSVBfVlM9bQorIyBDT05GSUdfSVBfVlNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0lQX1ZTX1RBQl9CSVRTPTEyCisKKyMKKyMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydAorIworQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CitDT05GSUdfSVBfVlNfUFJPVE9fVURQPXkKK0NPTkZJR19JUF9WU19QUk9UT19FU1A9eQorQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKKworIworIyBJUFZTIHNjaGVkdWxlcgorIworQ09ORklHX0lQX1ZTX1JSPW0KK0NPTkZJR19JUF9WU19XUlI9bQorQ09ORklHX0lQX1ZTX0xDPW0KK0NPTkZJR19JUF9WU19XTEM9bQorQ09ORklHX0lQX1ZTX0xCTEM9bQorQ09ORklHX0lQX1ZTX0xCTENSPW0KK0NPTkZJR19JUF9WU19ESD1tCitDT05GSUdfSVBfVlNfU0g9bQorQ09ORklHX0lQX1ZTX1NFRD1tCitDT05GSUdfSVBfVlNfTlE9bQorCisjCisjIElQVlMgYXBwbGljYXRpb24gaGVscGVyCisjCitDT05GSUdfSVBfVlNfRlRQPW0KK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfQUg9bQorQ09ORklHX0lORVQ2X0VTUD1tCitDT05GSUdfSU5FVDZfSVBDT01QPW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUQUJMRVMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfQ1RfQUNDVD15CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUD1tCitDT05GSUdfSVBfTkZfRlRQPW0KK0NPTkZJR19JUF9ORl9JUkM9bQorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEZUUD1tCitDT05GSUdfSVBfTkZfQU1BTkRBPW0KKyMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KKworIworIyBERUNuZXQ6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfREVDTkVUX05GX0dSQUJVTEFUT1I9bQorCisjCisjIEJyaWRnZTogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19CUklER0VfTkZfRUJUQUJMRVM9bQorQ09ORklHX0JSSURHRV9FQlRfQlJPVVRFPW0KK0NPTkZJR19CUklER0VfRUJUX1RfRklMVEVSPW0KK0NPTkZJR19CUklER0VfRUJUX1RfTkFUPW0KK0NPTkZJR19CUklER0VfRUJUXzgwMl8zPW0KK0NPTkZJR19CUklER0VfRUJUX0FNT05HPW0KK0NPTkZJR19CUklER0VfRUJUX0FSUD1tCitDT05GSUdfQlJJREdFX0VCVF9JUD1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorIyBDT05GSUdfQlJJREdFX0VCVF9VTE9HIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworQ09ORklHX0lQX1NDVFA9bQorIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0CitDT05GSUdfU0NUUF9ITUFDX01ENT15CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09eQorQ09ORklHX0FUTV9DTElQPXkKKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19CUklER0U9bQorQ09ORklHX1ZMQU5fODAyMVE9bQorQ09ORklHX0RFQ05FVD1tCisjIENPTkZJR19ERUNORVRfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorQ09ORklHX0xMQzI9bQorQ09ORklHX0lQWD1tCisjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKK0NPTkZJR19BVEFMSz1tCitDT05GSUdfREVWX0FQUExFVEFMSz15CitDT05GSUdfSVBERFA9bQorQ09ORklHX0lQRERQX0VOQ0FQPXkKK0NPTkZJR19JUEREUF9ERUNBUD15CitDT05GSUdfWDI1PW0KK0NPTkZJR19MQVBCPW0KKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorQ09ORklHX0VDT05FVD1tCitDT05GSUdfRUNPTkVUX0FVTlVEUD15CitDT05GSUdfRUNPTkVUX05BVElWRT15CitDT05GSUdfV0FOX1JPVVRFUj1tCisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCitDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTPXkKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldAorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT1tCitDT05GSUdfTkVUX1NDSF9IVEI9bQorQ09ORklHX05FVF9TQ0hfSEZTQz1tCitDT05GSUdfTkVUX1NDSF9BVE09bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KK0NPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQorQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKK0NPTkZJR19ORVRfQ0xTX0ZXPW0KK0NPTkZJR19ORVRfQ0xTX1UzMj1tCisjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19QT0xJQ0U9eQorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9FU1RJTUFUT1I9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorQ09ORklHX0hBTVJBRElPPXkKKworIworIyBQYWNrZXQgUmFkaW8gcHJvdG9jb2xzCisjCitDT05GSUdfQVgyNT1tCisjIENPTkZJR19BWDI1X0RBTUFfU0xBVkUgaXMgbm90IHNldAorQ09ORklHX05FVFJPTT1tCitDT05GSUdfUk9TRT1tCisKKyMKKyMgQVguMjUgbmV0d29yayBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01LSVNTPW0KK0NPTkZJR182UEFDSz1tCitDT05GSUdfQlBRRVRIRVI9bQorQ09ORklHX0JBWUNPTV9TRVJfRkRYPW0KK0NPTkZJR19CQVlDT01fU0VSX0hEWD1tCitDT05GSUdfQkFZQ09NX1BBUj1tCitDT05GSUdfQkFZQ09NX0VQUD1tCitDT05GSUdfWUFNPW0KK0NPTkZJR19JUkRBPW0KKworIworIyBJckRBIHByb3RvY29scworIworQ09ORklHX0lSTEFOPW0KK0NPTkZJR19JUk5FVD1tCitDT05GSUdfSVJDT01NPW0KKyMgQ09ORklHX0lSREFfVUxUUkEgaXMgbm90IHNldAorCisjCisjIElyREEgb3B0aW9ucworIworQ09ORklHX0lSREFfQ0FDSEVfTEFTVF9MU0FQPXkKK0NPTkZJR19JUkRBX0ZBU1RfUlI9eQorQ09ORklHX0lSREFfREVCVUc9eQorCisjCisjIEluZnJhcmVkLXBvcnQgZGV2aWNlIGRyaXZlcnMKKyMKKworIworIyBTSVIgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19JUlRUWV9TSVI9bQorCisjCisjIERvbmdsZSBzdXBwb3J0CisjCitDT05GSUdfRE9OR0xFPXkKK0NPTkZJR19FU0lfRE9OR0xFPW0KK0NPTkZJR19BQ1RJU1lTX0RPTkdMRT1tCitDT05GSUdfVEVLUkFNX0RPTkdMRT1tCisjIENPTkZJR19UT0lNMzIzMl9ET05HTEUgaXMgbm90IHNldAorQ09ORklHX0xJVEVMSU5LX0RPTkdMRT1tCitDT05GSUdfTUE2MDBfRE9OR0xFPW0KK0NPTkZJR19HSVJCSUxfRE9OR0xFPW0KK0NPTkZJR19NQ1AyMTIwX0RPTkdMRT1tCitDT05GSUdfT0xEX0JFTEtJTl9ET05HTEU9bQorQ09ORklHX0FDVDIwMExfRE9OR0xFPW0KKworIworIyBPbGQgU0lSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfSVJQT1JUX1NJUj1tCisKKyMKKyMgT2xkIFNlcmlhbCBkb25nbGUgc3VwcG9ydAorIworIyBDT05GSUdfRE9OR0xFX09MRCBpcyBub3Qgc2V0CisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfVVNCX0lSREE9bQorQ09ORklHX1NJR01BVEVMX0ZJUj1tCitDT05GSUdfQlQ9bQorQ09ORklHX0JUX0wyQ0FQPW0KK0NPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX1JGQ09NTT1tCitDT05GSUdfQlRfUkZDT01NX1RUWT15CitDT05GSUdfQlRfQk5FUD1tCitDT05GSUdfQlRfQk5FUF9NQ19GSUxURVI9eQorQ09ORklHX0JUX0JORVBfUFJPVE9fRklMVEVSPXkKK0NPTkZJR19CVF9DTVRQPW0KK0NPTkZJR19CVF9ISURQPW0KKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19CVF9IQ0lVU0I9bQorQ09ORklHX0JUX0hDSVVTQl9TQ089eQorQ09ORklHX0JUX0hDSVVBUlQ9bQorQ09ORklHX0JUX0hDSVVBUlRfSDQ9eQorQ09ORklHX0JUX0hDSVVBUlRfQkNTUD15CitDT05GSUdfQlRfSENJQkNNMjAzWD1tCisjIENPTkZJR19CVF9IQ0lCUEExMFggaXMgbm90IHNldAorQ09ORklHX0JUX0hDSUJGVVNCPW0KK0NPTkZJR19CVF9IQ0lEVEwxPW0KK0NPTkZJR19CVF9IQ0lCVDNDPW0KK0NPTkZJR19CVF9IQ0lCTFVFQ0FSRD1tCitDT05GSUdfQlRfSENJQlRVQVJUPW0KK0NPTkZJR19CVF9IQ0lWSENJPW0KK0NPTkZJR19JRUVFODAyMTE9bQorIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVAgaXMgbm90IHNldAorQ09ORklHX0lFRUU4MDIxMV9DUllQVF9DQ01QPW0KK0NPTkZJR19JRUVFODAyMTFfQ1JZUFRfVEtJUD1tCisjIENPTkZJR19JRUVFODAyMTFfU09GVE1BQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9bQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPW0KK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX1JFREJPT1RfUEFSVFM9bQorQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFNfUkVBRE9OTFkgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj1tCitDT05GSUdfTVREX0JMT0NLPW0KK0NPTkZJR19NVERfQkxPQ0tfUk89bQorQ09ORklHX0ZUTD1tCitDT05GSUdfTkZUTD1tCitDT05GSUdfTkZUTF9SVz15CitDT05GSUdfSU5GVEw9bQorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPW0KK0NPTkZJR19NVERfSkVERUNQUk9CRT1tCitDT05GSUdfTVREX0dFTl9QUk9CRT1tCisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPW0KK0NPTkZJR19NVERfQ0ZJX0FNRFNURD1tCitDT05GSUdfTVREX0NGSV9TVEFBPW0KK0NPTkZJR19NVERfQ0ZJX1VUSUw9bQorQ09ORklHX01URF9SQU09bQorQ09ORklHX01URF9ST009bQorQ09ORklHX01URF9BQlNFTlQ9bQorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCitDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1M9eQorQ09ORklHX01URF9QSFlTTUFQPW0KK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDgwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHg0MDAwMDAwCitDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTIKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSU1QQTcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01URF9TTFJBTT1tCitDT05GSUdfTVREX1BIUkFNPW0KK0NPTkZJR19NVERfTVREUkFNPW0KK0NPTkZJR19NVERSQU1fVE9UQUxfU0laRT00MDk2CitDT05GSUdfTVREUkFNX0VSQVNFX1NJWkU9MTI4CitDT05GSUdfTVREX0JMS01URD1tCisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfRE9DMjAwMD1tCitDT05GSUdfTVREX0RPQzIwMDE9bQorQ09ORklHX01URF9ET0MyMDAxUExVUz1tCitDT05GSUdfTVREX0RPQ1BST0JFPW0KK0NPTkZJR19NVERfRE9DRUNDPW0KKyMgQ09ORklHX01URF9ET0NQUk9CRV9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0RPQ1BST0JFX0FERFJFU1M9MAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19NVERfTkFORD1tCisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz1tCitDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FERFJFU1M9MAorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfUEFSUE9SVD1tCitDT05GSUdfUEFSUE9SVF9QQz1tCitDT05GSUdfUEFSUE9SVF9QQ19GSUZPPXkKKyMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CitDT05GSUdfUEFSUE9SVF9QQ19QQ01DSUE9bQorQ09ORklHX1BBUlBPUlRfTk9UX1BDPXkKKyMgQ09ORklHX1BBUlBPUlRfQVJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUXzEyODQ9eQorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKK0NPTkZJR19QQVJJREU9bQorQ09ORklHX1BBUklERV9QQVJQT1JUPW0KKworIworIyBQYXJhbGxlbCBJREUgaGlnaC1sZXZlbCBkcml2ZXJzCisjCitDT05GSUdfUEFSSURFX1BEPW0KK0NPTkZJR19QQVJJREVfUENEPW0KK0NPTkZJR19QQVJJREVfUEY9bQorQ09ORklHX1BBUklERV9QVD1tCitDT05GSUdfUEFSSURFX1BHPW0KKworIworIyBQYXJhbGxlbCBJREUgcHJvdG9jb2wgbW9kdWxlcworIworQ09ORklHX1BBUklERV9BVEVOPW0KK0NPTkZJR19QQVJJREVfQlBDSz1tCitDT05GSUdfUEFSSURFX0JQQ0s2PW0KK0NPTkZJR19QQVJJREVfQ09NTT1tCitDT05GSUdfUEFSSURFX0RTVFI9bQorQ09ORklHX1BBUklERV9GSVQyPW0KK0NPTkZJR19QQVJJREVfRklUMz1tCitDT05GSUdfUEFSSURFX0VQQVQ9bQorIyBDT05GSUdfUEFSSURFX0VQQVRDOCBpcyBub3Qgc2V0CitDT05GSUdfUEFSSURFX0VQSUE9bQorQ09ORklHX1BBUklERV9GUklRPW0KK0NPTkZJR19QQVJJREVfRlJQVz1tCitDT05GSUdfUEFSSURFX0tCSUM9bQorQ09ORklHX1BBUklERV9LVFRJPW0KK0NPTkZJR19QQVJJREVfT04yMD1tCitDT05GSUdfUEFSSURFX09OMjY9bQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0NEUk9NX1BLVENEVkQ9bQorQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CisjIENPTkZJR19DRFJPTV9QS1RDRFZEX1dDQUNIRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9bQorQ09ORklHX0JMS19ERVZfSURFPW0KKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFQ1M9bQorQ09ORklHX0JMS19ERVZfSURFQ0Q9bQorQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCitDT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQorQ09ORklHX0JMS19ERVZfSURFU0NTST1tCisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPW0KKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAorIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST1tCitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9bQorQ09ORklHX0NIUl9ERVZfU1Q9bQorQ09ORklHX0NIUl9ERVZfT1NTVD1tCitDT05GSUdfQkxLX0RFVl9TUj1tCisjIENPTkZJR19CTEtfREVWX1NSX1ZFTkRPUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz1tCitDT05GSUdfQ0hSX0RFVl9TQ0g9bQorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKKworIworIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCisjCitDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorQ09ORklHX1NDU0lfRkNfQVRUUlM9bQorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycworIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NBVEE9bQorQ09ORklHX1NDU0lfUFBBPW0KK0NPTkZJR19TQ1NJX0lNTT1tCisjIENPTkZJR19TQ1NJX0laSVBfRVBQMTYgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JWklQX1NMT1dfQ1RSIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0RFQlVHPW0KKworIworIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfQUhBMTUyWD1tCitDT05GSUdfUENNQ0lBX0ZET01BSU49bQorQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJPW0KK0NPTkZJR19QQ01DSUFfUUxPR0lDPW0KK0NPTkZJR19QQ01DSUFfU1lNNTNDNTAwPW0KKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworQ09ORklHX01EPXkKK0NPTkZJR19CTEtfREVWX01EPW0KK0NPTkZJR19NRF9MSU5FQVI9bQorQ09ORklHX01EX1JBSUQwPW0KK0NPTkZJR19NRF9SQUlEMT1tCitDT05GSUdfTURfUkFJRDEwPW0KK0NPTkZJR19NRF9SQUlENT1tCisjIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKK0NPTkZJR19NRF9SQUlENj1tCitDT05GSUdfTURfTVVMVElQQVRIPW0KK0NPTkZJR19NRF9GQVVMVFk9bQorQ09ORklHX0JMS19ERVZfRE09bQorQ09ORklHX0RNX0NSWVBUPW0KK0NPTkZJR19ETV9TTkFQU0hPVD1tCitDT05GSUdfRE1fTUlSUk9SPW0KK0NPTkZJR19ETV9aRVJPPW0KKyMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KK0NPTkZJR19FUVVBTElaRVI9bQorQ09ORklHX1RVTj1tCisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPW0KKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QT0NLRVQ9eQorQ09ORklHX0RFNjAwPW0KK0NPTkZJR19ERTYyMD1tCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKworIworIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKKyMKKworIworIyBUb2tlbiBSaW5nIGRldmljZXMKKyMKKworIworIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKKyMKK0NPTkZJR19ORVRfUkFESU89eQorIyBDT05GSUdfTkVUX1dJUkVMRVNTX1JUTkVUTElOSyBpcyBub3Qgc2V0CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKK0NPTkZJR19TVFJJUD1tCitDT05GSUdfUENNQ0lBX1dBVkVMQU49bQorQ09ORklHX1BDTUNJQV9ORVRXQVZFPW0KKworIworIyBXaXJlbGVzcyA4MDIuMTEgRnJlcXVlbmN5IEhvcHBpbmcgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX1BDTUNJQV9SQVlDUz1tCisKKyMKKyMgV2lyZWxlc3MgODAyLjExYiBJU0EvUENJIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19IRVJNRVM9bQorQ09ORklHX0FUTUVMPW0KKworIworIyBXaXJlbGVzcyA4MDIuMTFiIFBjbWNpYS9DYXJkYnVzIGNhcmRzIHN1cHBvcnQKKyMKK0NPTkZJR19QQ01DSUFfSEVSTUVTPW0KKyMgQ09ORklHX1BDTUNJQV9TUEVDVFJVTSBpcyBub3Qgc2V0CitDT05GSUdfQUlST19DUz1tCitDT05GSUdfUENNQ0lBX0FUTUVMPW0KK0NPTkZJR19QQ01DSUFfV0wzNTAxPW0KKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1dJUkVMRVNTPXkKKworIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVF9QQ01DSUE9eQorQ09ORklHX1BDTUNJQV8zQzU4OT1tCitDT05GSUdfUENNQ0lBXzNDNTc0PW0KK0NPTkZJR19QQ01DSUFfRk1WSjE4WD1tCitDT05GSUdfUENNQ0lBX1BDTkVUPW0KK0NPTkZJR19QQ01DSUFfTk1DTEFOPW0KK0NPTkZJR19QQ01DSUFfU01DOTFDOTI9bQorQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KK0NPTkZJR19QQ01DSUFfQVhORVQ9bQorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCitDT05GSUdfV0FOPXkKK0NPTkZJR19TWU5DTElOS19TWU5DUFBQPW0KK0NPTkZJR19IRExDPW0KK0NPTkZJR19IRExDX1JBVz15CitDT05GSUdfSERMQ19SQVdfRVRIPXkKK0NPTkZJR19IRExDX0NJU0NPPXkKK0NPTkZJR19IRExDX0ZSPXkKK0NPTkZJR19IRExDX1BQUD15CitDT05GSUdfSERMQ19YMjU9eQorQ09ORklHX0RMQ0k9bQorQ09ORklHX0RMQ0lfQ09VTlQ9MjQKK0NPTkZJR19ETENJX01BWD04CitDT05GSUdfV0FOX1JPVVRFUl9EUklWRVJTPXkKK0NPTkZJR19MQVBCRVRIRVI9bQorQ09ORklHX1gyNV9BU1k9bQorCisjCisjIEFUTSBkcml2ZXJzCisjCisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorQ09ORklHX0FUTV9UQ1A9bQorQ09ORklHX1BMSVA9bQorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KK0NPTkZJR19QUFBPQVRNPW0KK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CitDT05GSUdfU0hBUEVSPW0KK0NPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworQ09ORklHX0lTRE49bQorCisjCisjIE9sZCBJU0RONExpbnV4CisjCitDT05GSUdfSVNETl9JNEw9bQorQ09ORklHX0lTRE5fUFBQPXkKK0NPTkZJR19JU0ROX1BQUF9WSj15CitDT05GSUdfSVNETl9NUFA9eQorQ09ORklHX0lQUFBfRklMVEVSPXkKK0NPTkZJR19JU0ROX1BQUF9CU0RDT01QPW0KK0NPTkZJR19JU0ROX0FVRElPPXkKK0NPTkZJR19JU0ROX1RUWV9GQVg9eQorQ09ORklHX0lTRE5fWDI1PXkKKworIworIyBJU0ROIGZlYXR1cmUgc3VibW9kdWxlcworIworQ09ORklHX0lTRE5fRFJWX0xPT1A9bQorQ09ORklHX0lTRE5fRElWRVJTSU9OPW0KKworIworIyBJU0RONExpbnV4IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBQYXNzaXZlIGNhcmRzCisjCitDT05GSUdfSVNETl9EUlZfSElTQVg9bQorCisjCisjIEQtY2hhbm5lbCBwcm90b2NvbCBmZWF0dXJlcworIworQ09ORklHX0hJU0FYX0VVUk89eQorQ09ORklHX0RFX0FPQz15CisjIENPTkZJR19ISVNBWF9OT19TRU5EQ09NUExFVEUgaXMgbm90IHNldAorIyBDT05GSUdfSElTQVhfTk9fTExDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJU0FYX05PX0tFWVBBRCBpcyBub3Qgc2V0CitDT05GSUdfSElTQVhfMVRSNj15CitDT05GSUdfSElTQVhfTkkxPXkKK0NPTkZJR19ISVNBWF9NQVhfQ0FSRFM9OAorCisjCisjIEhpU2F4IHN1cHBvcnRlZCBjYXJkcworIworQ09ORklHX0hJU0FYXzE2XzM9eQorQ09ORklHX0hJU0FYX1MwQk9YPXkKK0NPTkZJR19ISVNBWF9GUklUWlBDST15CitDT05GSUdfSElTQVhfQVZNX0ExX1BDTUNJQT15CitDT05GSUdfSElTQVhfRUxTQT15CitDT05GSUdfSElTQVhfRElFSExESVZBPXkKK0NPTkZJR19ISVNBWF9TRURMQkFVRVI9eQorQ09ORklHX0hJU0FYX05JQ0NZPXkKK0NPTkZJR19ISVNBWF9HQVpFTD15CitDT05GSUdfSElTQVhfSEZDX1NYPXkKKyMgQ09ORklHX0hJU0FYX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBIaVNheCBQQ01DSUEgY2FyZCBzZXJ2aWNlIG1vZHVsZXMKKyMKK0NPTkZJR19ISVNBWF9TRURMQkFVRVJfQ1M9bQorQ09ORklHX0hJU0FYX0VMU0FfQ1M9bQorQ09ORklHX0hJU0FYX0FWTV9BMV9DUz1tCitDT05GSUdfSElTQVhfVEVMRVNfQ1M9bQorCisjCisjIEhpU2F4IHN1YiBkcml2ZXIgbW9kdWxlcworIworQ09ORklHX0hJU0FYX1NUNTQ4MT1tCitDT05GSUdfSElTQVhfSEZDVVNCPW0KKyMgQ09ORklHX0hJU0FYX0hGQzRTOFMgaXMgbm90IHNldAorQ09ORklHX0hJU0FYX0hETEM9eQorCisjCisjIEFjdGl2ZSBjYXJkcworIworCisjCisjIFNpZW1lbnMgR2lnYXNldAorIworIyBDT05GSUdfSVNETl9EUlZfR0lHQVNFVCBpcyBub3Qgc2V0CisKKyMKKyMgQ0FQSSBzdWJzeXN0ZW0KKyMKK0NPTkZJR19JU0ROX0NBUEk9bQorQ09ORklHX0lTRE5fRFJWX0FWTUIxX1ZFUkJPU0VfUkVBU09OPXkKK0NPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRT15CitDT05GSUdfSVNETl9DQVBJX0NBUEkyMD1tCitDT05GSUdfSVNETl9DQVBJX0NBUElGU19CT09MPXkKK0NPTkZJR19JU0ROX0NBUElfQ0FQSUZTPW0KK0NPTkZJR19JU0ROX0NBUElfQ0FQSURSVj1tCisKKyMKKyMgQ0FQSSBoYXJkd2FyZSBkcml2ZXJzCisjCisKKyMKKyMgQWN0aXZlIEFWTSBjYXJkcworIworQ09ORklHX0NBUElfQVZNPXkKK0NPTkZJR19JU0ROX0RSVl9BVk1CMV9CMVBDTUNJQT1tCitDT05GSUdfSVNETl9EUlZfQVZNQjFfQVZNX0NTPW0KKworIworIyBBY3RpdmUgRWljb24gRElWQSBTZXJ2ZXIgY2FyZHMKKyMKK0NPTkZJR19DQVBJX0VJQ09OPXkKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9bQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CitDT05GSUdfSU5QVVRfSk9ZREVWPW0KK0NPTkZJR19JTlBVVF9UU0RFVj1tCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1g9MjQwCitDT05GSUdfSU5QVVRfVFNERVZfU0NSRUVOX1k9MzIwCitDT05GSUdfSU5QVVRfRVZERVY9bQorQ09ORklHX0lOUFVUX0VWQlVHPW0KKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CitDT05GSUdfS0VZQk9BUkRfU1VOS0JEPW0KK0NPTkZJR19LRVlCT0FSRF9MS0tCRD1tCitDT05GSUdfS0VZQk9BUkRfWFRLQkQ9bQorQ09ORklHX0tFWUJPQVJEX05FV1RPTj1tCitDT05GSUdfSU5QVVRfTU9VU0U9eQorQ09ORklHX01PVVNFX1BTMj1tCitDT05GSUdfTU9VU0VfU0VSSUFMPW0KK0NPTkZJR19NT1VTRV9WU1hYWEFBPW0KK0NPTkZJR19JTlBVVF9KT1lTVElDSz15CitDT05GSUdfSk9ZU1RJQ0tfQU5BTE9HPW0KK0NPTkZJR19KT1lTVElDS19BM0Q9bQorQ09ORklHX0pPWVNUSUNLX0FEST1tCitDT05GSUdfSk9ZU1RJQ0tfQ09CUkE9bQorQ09ORklHX0pPWVNUSUNLX0dGMks9bQorQ09ORklHX0pPWVNUSUNLX0dSSVA9bQorQ09ORklHX0pPWVNUSUNLX0dSSVBfTVA9bQorQ09ORklHX0pPWVNUSUNLX0dVSUxMRU1PVD1tCitDT05GSUdfSk9ZU1RJQ0tfSU5URVJBQ1Q9bQorQ09ORklHX0pPWVNUSUNLX1NJREVXSU5ERVI9bQorQ09ORklHX0pPWVNUSUNLX1RNREM9bQorQ09ORklHX0pPWVNUSUNLX0lGT1JDRT1tCitDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFX1VTQj15CitDT05GSUdfSk9ZU1RJQ0tfSUZPUkNFXzIzMj15CitDT05GSUdfSk9ZU1RJQ0tfV0FSUklPUj1tCitDT05GSUdfSk9ZU1RJQ0tfTUFHRUxMQU49bQorQ09ORklHX0pPWVNUSUNLX1NQQUNFT1JCPW0KK0NPTkZJR19KT1lTVElDS19TUEFDRUJBTEw9bQorQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQorIyBDT05GSUdfSk9ZU1RJQ0tfVFdJREpPWSBpcyBub3Qgc2V0CitDT05GSUdfSk9ZU1RJQ0tfREI5PW0KK0NPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KK0NPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYPW0KK0NPTkZJR19KT1lTVElDS19KT1lEVU1QPW0KK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CitDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkU9bQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CitDT05GSUdfSU5QVVRfVUlOUFVUPW0KKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCitDT05GSUdfU0VSSU9fUEFSS0JEPW0KK0NPTkZJR19TRVJJT19MSUJQUzI9eQorQ09ORklHX1NFUklPX1JBVz1tCitDT05GSUdfR0FNRVBPUlQ9bQorQ09ORklHX0dBTUVQT1JUX05TNTU4PW0KK0NPTkZJR19HQU1FUE9SVF9MND1tCisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKK0NPTkZJR19DT01QVVRPTkU9bQorQ09ORklHX1JPQ0tFVFBPUlQ9bQorQ09ORklHX0NZQ0xBREVTPW0KKyMgQ09ORklHX0NZWl9JTlRSIGlzIG5vdCBzZXQKK0NPTkZJR19ESUdJRVBDQT1tCitDT05GSUdfTU9YQV9JTlRFTExJTz1tCitDT05GSUdfTU9YQV9TTUFSVElPPW0KKyMgQ09ORklHX0lTSSBpcyBub3Qgc2V0CitDT05GSUdfU1lOQ0xJTktNUD1tCitDT05GSUdfTl9IRExDPW0KKyMgQ09ORklHX1JJU0NPTTggaXMgbm90IHNldAorIyBDT05GSUdfU1BFQ0lBTElYIGlzIG5vdCBzZXQKK0NPTkZJR19TWD1tCitDT05GSUdfUklPPW0KK0NPTkZJR19SSU9fT0xEUENJPXkKK0NPTkZJR19TVEFMRFJWPXkKK0NPTkZJR19TVEFMTElPTj1tCitDT05GSUdfSVNUQUxMSU9OPW0KKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DUz1tCitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19QUklOVEVSPW0KKyMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1BQREVWPW0KK0NPTkZJR19USVBBUj1tCisKKyMKKyMgSVBNSQorIworQ09ORklHX0lQTUlfSEFORExFUj1tCisjIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQorQ09ORklHX0lQTUlfU0k9bQorQ09ORklHX0lQTUlfV0FUQ0hET0c9bQorQ09ORklHX0lQTUlfUE9XRVJPRkY9bQorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCitDT05GSUdfU09GVF9XQVRDSERPRz1tCisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCitDT05GSUdfVVNCUENXQVRDSERPRz1tCitDT05GSUdfTlZSQU09bQorQ09ORklHX0RUTEs9bQorQ09ORklHX1IzOTY0PW0KKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKworIworIyBQQ01DSUEgY2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19TWU5DTElOS19DUz1tCisjIENPTkZJR19DQVJETUFOXzQwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ0FSRE1BTl80MDQwIGlzIG5vdCBzZXQKK0NPTkZJR19SQVdfRFJJVkVSPW0KK0NPTkZJR19NQVhfUkFXX0RFVlM9MjU2CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCitDT05GSUdfSTJDPW0KK0NPTkZJR19JMkNfQ0hBUkRFVj1tCisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCitDT05GSUdfSTJDX0FMR09QQ0Y9bQorQ09ORklHX0kyQ19BTEdPUENBPW0KKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKK0NPTkZJR19JMkNfSVNBPW0KK0NPTkZJR19JMkNfUEFSUE9SVD1tCitDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQ9bQorQ09ORklHX0kyQ19TVFVCPW0KK0NPTkZJR19JMkNfUENBX0lTQT1tCisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX0RTMTMzNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTM3NCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19FRVBST009bQorQ09ORklHX1NFTlNPUlNfUENGODU3ND1tCisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfUENGODU5MT1tCisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIworIyBEYWxsYXMncyAxLXdpcmUgYnVzCisjCitDT05GSUdfVzE9bQorCisjCisjIDEtd2lyZSBCdXMgTWFzdGVycworIworIyBDT05GSUdfVzFfTUFTVEVSX0RTOTQ5MCBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9NQVNURVJfRFMyNDgyIGlzIG5vdCBzZXQKKworIworIyAxLXdpcmUgU2xhdmVzCisjCisjIENPTkZJR19XMV9TTEFWRV9USEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9TTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX1NMQVZFX0RTMjQzMyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjCitDT05GSUdfSFdNT049eQorQ09ORklHX0hXTU9OX1ZJRD1tCitDT05GSUdfU0VOU09SU19BRE0xMDIxPW0KK0NPTkZJR19TRU5TT1JTX0FETTEwMjU9bQorQ09ORklHX1NFTlNPUlNfQURNMTAyNj1tCitDT05GSUdfU0VOU09SU19BRE0xMDMxPW0KKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BU0IxMDA9bQorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19EUzE2MjE9bQorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX0ZTQ0hFUj1tCisjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19HTDUxOFNNPW0KKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19JVDg3PW0KK0NPTkZJR19TRU5TT1JTX0xNNjM9bQorQ09ORklHX1NFTlNPUlNfTE03NT1tCitDT05GSUdfU0VOU09SU19MTTc3PW0KK0NPTkZJR19TRU5TT1JTX0xNNzg9bQorQ09ORklHX1NFTlNPUlNfTE04MD1tCitDT05GSUdfU0VOU09SU19MTTgzPW0KK0NPTkZJR19TRU5TT1JTX0xNODU9bQorQ09ORklHX1NFTlNPUlNfTE04Nz1tCitDT05GSUdfU0VOU09SU19MTTkwPW0KKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19NQVgxNjE5PW0KK0NPTkZJR19TRU5TT1JTX1BDODczNjA9bQorQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE9bQorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1c4Mzc4MUQ9bQorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1c4M0w3ODVUUz1tCitDT05GSUdfU0VOU09SU19XODM2MjdIRj1tCisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCitDT05GSUdfRFZCPXkKK0NPTkZJR19EVkJfQ09SRT1tCisKKyMKKyMgU3VwcG9ydGVkIFVTQiBBZGFwdGVycworIworIyBDT05GSUdfRFZCX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfRFZCX1RUVVNCX0JVREdFVD1tCitDT05GSUdfRFZCX1RUVVNCX0RFQz1tCitDT05GSUdfRFZCX0NJTkVSR1lUMj1tCitDT05GSUdfRFZCX0NJTkVSR1lUMl9UVU5JTkc9eQorQ09ORklHX0RWQl9DSU5FUkdZVDJfU1RSRUFNX1VSQl9DT1VOVD0zMgorQ09ORklHX0RWQl9DSU5FUkdZVDJfU1RSRUFNX0JVRl9TSVpFPTUxMgorQ09ORklHX0RWQl9DSU5FUkdZVDJfUVVFUllfSU5URVJWQUw9MjUwCitDT05GSUdfRFZCX0NJTkVSR1lUMl9FTkFCTEVfUkNfSU5QVVRfREVWSUNFPXkKK0NPTkZJR19EVkJfQ0lORVJHWVQyX1JDX1FVRVJZX0lOVEVSVkFMPTEwMAorCisjCisjIFN1cHBvcnRlZCBGbGV4Q29wSUkgKEIyQzIpIEFkYXB0ZXJzCisjCisjIENPTkZJR19EVkJfQjJDMl9GTEVYQ09QIGlzIG5vdCBzZXQKKworIworIyBTdXBwb3J0ZWQgRFZCIEZyb250ZW5kcworIworCisjCisjIEN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzCisjCisKKyMKKyMgRFZCLVMgKHNhdGVsbGl0ZSkgZnJvbnRlbmRzCisjCitDT05GSUdfRFZCX1NUVjAyOTk9bQorQ09ORklHX0RWQl9DWDI0MTEwPW0KKyMgQ09ORklHX0RWQl9DWDI0MTIzIGlzIG5vdCBzZXQKK0NPTkZJR19EVkJfVERBODA4Mz1tCitDT05GSUdfRFZCX01UMzEyPW0KK0NPTkZJR19EVkJfVkVTMVg5Mz1tCisjIENPTkZJR19EVkJfUzVIMTQyMCBpcyBub3Qgc2V0CisKKyMKKyMgRFZCLVQgKHRlcnJlc3RyaWFsKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfU1A4ODcwPW0KK0NPTkZJR19EVkJfU1A4ODdYPW0KK0NPTkZJR19EVkJfQ1gyMjcwMD1tCitDT05GSUdfRFZCX0NYMjI3MDI9bQorQ09ORklHX0RWQl9MNjQ3ODE9bQorQ09ORklHX0RWQl9UREExMDA0WD1tCitDT05GSUdfRFZCX05YVDYwMDA9bQorQ09ORklHX0RWQl9NVDM1Mj1tCisjIENPTkZJR19EVkJfWkwxMDM1MyBpcyBub3Qgc2V0CitDT05GSUdfRFZCX0RJQjMwMDBNQj1tCitDT05GSUdfRFZCX0RJQjMwMDBNQz1tCisKKyMKKyMgRFZCLUMgKGNhYmxlKSBmcm9udGVuZHMKKyMKK0NPTkZJR19EVkJfVkVTMTgyMD1tCitDT05GSUdfRFZCX1REQTEwMDIxPW0KK0NPTkZJR19EVkJfU1RWMDI5Nz1tCisKKyMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RlcmlhbCBEVFYpIGZyb250ZW5kcworIworIyBDT05GSUdfRFZCX05YVDIwMFggaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX09SNTExMzIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0JDTTM1MTAgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0xHRFQzMzBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPW0KKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9bQorQ09ORklHX1NORF9USU1FUj1tCitDT05GSUdfU05EX1BDTT1tCitDT05GSUdfU05EX0hXREVQPW0KK0NPTkZJR19TTkRfUkFXTUlEST1tCitDT05GSUdfU05EX1NFUVVFTkNFUj1tCitDT05GSUdfU05EX1NFUV9EVU1NWT1tCitDT05GSUdfU05EX09TU0VNVUw9eQorQ09ORklHX1NORF9NSVhFUl9PU1M9bQorQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKK0NPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKK0NPTkZJR19TTkRfTVBVNDAxX1VBUlQ9bQorQ09ORklHX1NORF9EVU1NWT1tCitDT05GSUdfU05EX1ZJUk1JREk9bQorQ09ORklHX1NORF9NVFBBVj1tCitDT05GSUdfU05EX1NFUklBTF9VMTY1NTA9bQorQ09ORklHX1NORF9NUFU0MDE9bQorCisjCisjIEFMU0EgQVJNIGRldmljZXMKKyMKKworIworIyBVU0IgZGV2aWNlcworIworQ09ORklHX1NORF9VU0JfQVVESU89bQorCisjCisjIFBDTUNJQSBkZXZpY2VzCisjCisKKyMKKyMgT3BlbiBTb3VuZCBTeXN0ZW0KKyMKK0NPTkZJR19TT1VORF9QUklNRT1tCisjIENPTkZJR19PQlNPTEVURV9PU1NfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAorQ09ORklHX1NPVU5EX1RWTUlYRVI9bQorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPW0KKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0JBTkRXSURUSD15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9TTDgxMV9IQ0Q9bQorIyBDT05GSUdfVVNCX1NMODExX0NTIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19VU0JfQUNNPW0KK0NPTkZJR19VU0JfUFJJTlRFUj1tCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JworIworCisjCisjIG1heSBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQj15CitDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTT15CitDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9EUENNPXkKK0NPTkZJR19VU0JfU1RPUkFHRV9VU0JBVD15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD1tCitDT05GSUdfVVNCX0hJRElOUFVUPXkKKyMgQ09ORklHX1VTQl9ISURJTlBVVF9QT1dFUkJPT0sgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBVU0IgSElEIEJvb3QgUHJvdG9jb2wgZHJpdmVycworIworQ09ORklHX1VTQl9LQkQ9bQorQ09ORklHX1VTQl9NT1VTRT1tCitDT05GSUdfVVNCX0FJUFRFSz1tCitDT05GSUdfVVNCX1dBQ09NPW0KKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9LQlRBQj1tCitDT05GSUdfVVNCX1BPV0VSTUFURT1tCitDT05GSUdfVVNCX01UT1VDSD1tCisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorQ09ORklHX1VTQl9FR0FMQVg9bQorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorQ09ORklHX1VTQl9YUEFEPW0KK0NPTkZJR19VU0JfQVRJX1JFTU9URT1tCisjIENPTkZJR19VU0JfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCitDT05GSUdfVVNCX01EQzgwMD1tCitDT05GSUdfVVNCX01JQ1JPVEVLPW0KKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworQ09ORklHX1VTQl9DQVRDPW0KK0NPTkZJR19VU0JfS0FXRVRIPW0KK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorQ09ORklHX1VTQl9VU0JORVQ9bQorQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCitDT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCisjIENPTkZJR19VU0JfTkVUX0dMNjIwQSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9ORVQxMDgwPW0KKyMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX05FVF9aQVVSVVM9bQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworQ09ORklHX1VTQl9VU1M3MjA9bQorCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KK0NPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUM9eQorIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FOWURBVEEgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOPW0KK0NPTkZJR19VU0JfU0VSSUFMX1dISVRFSEVBVD1tCitDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQ9bQorIyBDT05GSUdfVVNCX1NFUklBTF9DUDIxMDEgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCitDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCitDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCitDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCitDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KK0NPTkZJR19VU0JfU0VSSUFMX0lSPW0KK0NPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUPW0KK0NPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0lQVz1tCitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQT1tCitDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9NUFIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0EyOFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTI4WEIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0ExOFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1VTQTE5VyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBMTlRSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU5fVVNBNDlXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9VU0E0OVdMQyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9LTFNJPW0KK0NPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVD1tCitDT05GSUdfVVNCX1NFUklBTF9NQ1RfVTIzMj1tCisjIENPTkZJR19VU0JfU0VSSUFMX05BVk1BTiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NFUklBTF9QTDIzMDM9bQorIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFX1BBRERFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCitDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQorQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCitDT05GSUdfVVNCX0VaVVNCPXkKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVVFUlNXQUxEPW0KK0NPTkZJR19VU0JfUklPNTAwPW0KK0NPTkZJR19VU0JfTEVHT1RPV0VSPW0KK0NPTkZJR19VU0JfTENEPW0KK0NPTkZJR19VU0JfTEVEPW0KK0NPTkZJR19VU0JfQ1lUSEVSTT1tCitDT05GSUdfVVNCX1BISURHRVRLSVQ9bQorQ09ORklHX1VTQl9QSElER0VUU0VSVk89bQorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfVEVTVD1tCisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FUTT1tCitDT05GSUdfVVNCX1NQRUVEVE9VQ0g9bQorIyBDT05GSUdfVVNCX0NYQUNSVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUVBR0xFQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YVVNCQVRNIGlzIG5vdCBzZXQKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKK0NPTkZJR19VU0JfR0FER0VUPW0KKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRklMRVMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0Q9eQorQ09ORklHX1VTQl9EVU1NWV9IQ0Q9bQorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKK0NPTkZJR19VU0JfWkVSTz1tCitDT05GSUdfVVNCX0VUSD1tCitDT05GSUdfVVNCX0VUSF9STkRJUz15CitDT05GSUdfVVNCX0dBREdFVEZTPW0KK0NPTkZJR19VU0JfRklMRV9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0VfVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0dfU0VSSUFMPW0KKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCitDT05GSUdfTU1DPW0KKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTU1DX0JMT0NLPW0KKworIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9bQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KQkQ9bQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz1tCisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSPXkKK0NPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19KRlNfRlM9bQorQ09ORklHX0pGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSkZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkZTX1NUQVRJU1RJQ1M9eQorQ09ORklHX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX0ZTPW0KK0NPTkZJR19YRlNfRVhQT1JUPXkKK0NPTkZJR19YRlNfUVVPVEE9eQorQ09ORklHX1hGU19TRUNVUklUWT15CitDT05GSUdfWEZTX1BPU0lYX0FDTD15CitDT05GSUdfWEZTX1JUPXkKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz1tCitDT05GSUdfUk9NRlNfRlM9bQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX1FVT1RBPXkKK0NPTkZJR19RRk1UX1YxPW0KK0NPTkZJR19RRk1UX1YyPW0KK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfQVVUT0ZTX0ZTPW0KK0NPTkZJR19BVVRPRlM0X0ZTPW0KKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPW0KK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKK0NPTkZJR19OVEZTX0ZTPW0KKyMgQ09ORklHX05URlNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19SVyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19BREZTX0ZTPW0KKyMgQ09ORklHX0FERlNfRlNfUlcgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorQ09ORklHX0hGU19GUz1tCitDT05GSUdfSEZTUExVU19GUz1tCitDT05GSUdfQkVGU19GUz1tCisjIENPTkZJR19CRUZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19CRlNfRlM9bQorQ09ORklHX0VGU19GUz1tCitDT05GSUdfSkZGU19GUz1tCitDT05GSUdfSkZGU19GU19WRVJCT1NFPTAKK0NPTkZJR19KRkZTX1BST0NfRlM9eQorQ09ORklHX0pGRlMyX0ZTPW0KK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKK0NPTkZJR19WWEZTX0ZTPW0KK0NPTkZJR19IUEZTX0ZTPW0KK0NPTkZJR19RTlg0RlNfRlM9bQorQ09ORklHX1NZU1ZfRlM9bQorQ09ORklHX1VGU19GUz1tCisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9bQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNfVjQ9eQorQ09ORklHX05GU19ESVJFQ1RJTz15CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9WND15CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX0xPQ0tEPW0KK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfRVhQT1JURlM9bQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz1tCitDT05GSUdfU1VOUlBDX0dTUz1tCitDT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KK0NPTkZJR19SUENTRUNfR1NTX1NQS00zPW0KK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKK0NPTkZJR19DSUZTPW0KKyMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CitDT05GSUdfTkNQX0ZTPW0KK0NPTkZJR19OQ1BGU19QQUNLRVRfU0lHTklORz15CitDT05GSUdfTkNQRlNfSU9DVExfTE9DS0lORz15CitDT05GSUdfTkNQRlNfU1RST05HPXkKK0NPTkZJR19OQ1BGU19ORlNfTlM9eQorQ09ORklHX05DUEZTX09TMl9OUz15CisjIENPTkZJR19OQ1BGU19TTUFMTERPUyBpcyBub3Qgc2V0CitDT05GSUdfTkNQRlNfTkxTPXkKK0NPTkZJR19OQ1BGU19FWFRSQVM9eQorQ09ORklHX0NPREFfRlM9bQorIyBDT05GSUdfQ09EQV9GU19PTERfQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19BRlNfRlM9bQorQ09ORklHX1JYUlBDPW0KKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorQ09ORklHX0FDT1JOX1BBUlRJVElPTj15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fQ1VNQU5BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDT1JOX1BBUlRJVElPTl9FRVNPWCBpcyBub3Qgc2V0CitDT05GSUdfQUNPUk5fUEFSVElUSU9OX0lDUz15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fQURGUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ09STl9QQVJUSVRJT05fUE9XRVJURUMgaXMgbm90IHNldAorQ09ORklHX0FDT1JOX1BBUlRJVElPTl9SSVNDSVg9eQorQ09ORklHX09TRl9QQVJUSVRJT049eQorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CitDT05GSUdfQVRBUklfUEFSVElUSU9OPXkKK0NPTkZJR19NQUNfUEFSVElUSU9OPXkKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX0JTRF9ESVNLTEFCRUw9eQorQ09ORklHX01JTklYX1NVQlBBUlRJVElPTj15CitDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OPXkKK0NPTkZJR19VTklYV0FSRV9ESVNLTEFCRUw9eQorQ09ORklHX0xETV9QQVJUSVRJT049eQorIyBDT05GSUdfTERNX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TR0lfUEFSVElUSU9OPXkKK0NPTkZJR19VTFRSSVhfUEFSVElUSU9OPXkKK0NPTkZJR19TVU5fUEFSVElUSU9OPXkKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19QUk9GSUxJTkc9eQorQ09ORklHX09QUk9GSUxFPW0KKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKK0NPTkZJR19ERUJVR19LRVJORUw9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dBSVRRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWT15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19TRUNVUklUWV9DQVBBQklMSVRJRVM9bQorQ09ORklHX1NFQ1VSSVRZX1JPT1RQTFVHPW0KK0NPTkZJR19TRUNVUklUWV9TRUNMVkw9bQorCisjCisjIENyeXB0b2dyYXBoaWMgb3B0aW9ucworIworQ09ORklHX0NSWVBUTz15CitDT05GSUdfQ1JZUFRPX0hNQUM9eQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PXkKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9bQorQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX1RFQT1tCitDT05GSUdfQ1JZUFRPX0FSQzQ9bQorQ09ORklHX0NSWVBUT19LSEFaQUQ9bQorQ09ORklHX0NSWVBUT19BTlVCSVM9bQorQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19URVNUPW0KKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUkVFRF9TT0xPTU9OPW0KK0NPTkZJR19SRUVEX1NPTE9NT05fREVDMTY9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWNvbW1vbi5TCmluZGV4IGRiY2IxMWEuLmI1YmNlYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1jb21tb24uUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktY29tbW9uLlMKQEAgLTI3MSw3ICsyNzEsNyBAQAogQCByOCA9IHN5c2NhbGwgdGFibGUKIAkJLnR5cGUJc3lzX3N5c2NhbGwsICNmdW5jdGlvbgogc3lzX3N5c2NhbGw6Ci0JCWVvcglzY25vLCByMCwgI19fTlJfT0FCSV9TWVNDQUxMX0JBU0UKKwkJYmljCXNjbm8sIHIwLCAjX19OUl9PQUJJX1NZU0NBTExfQkFTRQogCQljbXAJc2NubywgI19fTlJfc3lzY2FsbCAtIF9fTlJfU1lTQ0FMTF9CQVNFCiAJCWNtcG5lCXNjbm8sICNOUl9zeXNjYWxscwlAIGNoZWNrIHJhbmdlCiAJCXN0bWxvaWEJc3AsIHtyNSwgcjZ9CQlAIHNodWZmbGUgYXJncwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2lycS5jIGIvYXJjaC9hcm0va2VybmVsL2lycS5jCmluZGV4IDJkNTg5NmIuLmJjYzE5ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTM0MiwxMCArMzQyLDEwIEBACiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgogCWlmICghKGFjdGlvbi0+ZmxhZ3MgJiBTQV9USU1FUikgJiYgc3lzdGVtX3RpbWVyLT5keW5fdGljayAhPSBOVUxMKSB7Ci0JCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOworCQlzcGluX2xvY2soJnN5c3RlbV90aW1lci0+ZHluX3RpY2stPmxvY2spOwogCQlpZiAoc3lzdGVtX3RpbWVyLT5keW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKQogCQkJc3lzdGVtX3RpbWVyLT5keW5fdGljay0+aGFuZGxlcihpcnEsIDAsIHJlZ3MpOwotCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOworCQlzcGluX3VubG9jaygmc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayk7CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCmluZGV4IGQ2YmQ0MzUuLjljMTJkNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpAQCAtMzc5LDcgKzM3OSw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAKIAlpZiAoZHluX3RpY2spIHsKLQkJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSAwOwogCQlpZiAoIShkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSkgewogCQkJcmV0ID0gZHluX3RpY2stPmVuYWJsZSgpOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCQlpZiAocmV0ID09IDApCiAJCQkJZHluX3RpY2stPnN0YXRlIHw9IERZTl9USUNLX0VOQUJMRUQ7CiAJCX0KLQkJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHluX3RpY2stPmxvY2ssIGZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJaW50IHJldCA9IC1FTk9ERVY7CiAKIAlpZiAoZHluX3RpY2spIHsKLQkJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCQlyZXQgPSAwOwogCQlpZiAoZHluX3RpY2stPnN0YXRlICYgRFlOX1RJQ0tfRU5BQkxFRCkgewogCQkJcmV0ID0gZHluX3RpY2stPmRpc2FibGUoKTsKQEAgLTQwOCw3ICs0MDgsNyBAQAogCQkJaWYgKHJldCA9PSAwKQogCQkJCWR5bl90aWNrLT5zdGF0ZSAmPSB+RFlOX1RJQ0tfRU5BQkxFRDsKIAkJfQotCQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC00MjIsMTUgKzQyMiwyMCBAQAogdm9pZCB0aW1lcl9keW5fcmVwcm9ncmFtKHZvaWQpCiB7CiAJc3RydWN0IGR5bl90aWNrX3RpbWVyICpkeW5fdGljayA9IHN5c3RlbV90aW1lci0+ZHluX3RpY2s7Ci0JdW5zaWduZWQgbG9uZyBuZXh0LCBzZXE7CisJdW5zaWduZWQgbG9uZyBuZXh0LCBzZXEsIGZsYWdzOwogCi0JaWYgKGR5bl90aWNrICYmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSkgeworCWlmICghZHluX3RpY2spCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOworCWlmIChkeW5fdGljay0+c3RhdGUgJiBEWU5fVElDS19FTkFCTEVEKSB7CiAJCW5leHQgPSBuZXh0X3RpbWVyX2ludGVycnVwdCgpOwogCQlkbyB7CiAJCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQkJCWR5bl90aWNrLT5yZXByb2dyYW0obmV4dF90aW1lcl9pbnRlcnJ1cHQoKSAtIGppZmZpZXMpOworCQkJZHluX3RpY2stPnJlcHJvZ3JhbShuZXh0IC0gamlmZmllcyk7CiAJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkeW5fdGljay0+bG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3NpemVfdCB0aW1lcl9zaG93X2R5bl90aWNrKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKQEAgLTQ5OSw1ICs1MDQsMTAgQEAKIAlpZiAoc3lzdGVtX3RpbWVyLT5vZmZzZXQgPT0gTlVMTCkKIAkJc3lzdGVtX3RpbWVyLT5vZmZzZXQgPSBkdW1teV9nZXR0aW1lb2Zmc2V0OwogCXN5c3RlbV90aW1lci0+aW5pdCgpOworCisjaWZkZWYgQ09ORklHX05PX0lETEVfSFoKKwlpZiAoc3lzdGVtX3RpbWVyLT5keW5fdGljaykKKwkJc3lzdGVtX3RpbWVyLT5keW5fdGljay0+bG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKyNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9LY29uZmlnCmluZGV4IDhhMTc4NjdhLi41NThhMzRmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvS2NvbmZpZwpAQCAtMTQsNiArMTQsNyBAQAogCWJvb2wgIkxQRDdBNDAwIENhcmQgRW5naW5lIgogCXNlbGVjdCBBUkNIX0xIN0E0MDAKICMJc2VsZWN0IElERV9QT0xMCisJc2VsZWN0IEhBU19UT1VDSFNDUkVFTl9BRFM3ODQzX0xINwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50J3MKIAkgIExQRDdBNDAwIENhcmRFbmdpbmUuICBGb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBMUEQ3QTQwMCBhbmQKQEAgLTIzLDYgKzI0LDcgQEAKIAlib29sICJMUEQ3QTQwNCBDYXJkIEVuZ2luZSIKIAlzZWxlY3QgQVJDSF9MSDdBNDA0CiAjCXNlbGVjdCBJREVfUE9MTAorCXNlbGVjdCBIQVNfVE9VQ0hTQ1JFRU5fQURDX0xINwogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50J3MKIAkgIExQRDdBNDA0IENhcmRFbmdpbmUuIEZvciB0aGUgdGltZSBiZWluZywgdGhlIExQRDdBNDAwIGFuZApAQCAtMzQsNiArMzYsOSBAQAogY29uZmlnIEFSQ0hfTEg3QTQwNAogCWJvb2wKIAorY29uZmlnIExQRDdBNDBYX0NQTERfU1NQCisJYm9vbAorCiBjb25maWcgTEg3QTQwWF9DT05USUdNRU0KIAlib29sICJEaXNhYmxlIE5VTUEgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSQ0hfTEg3QTQwWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L01ha2VmaWxlCmluZGV4IGU5MDUxMmQuLjk0Yjg2MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvTWFrZWZpbGUKQEAgLTQsMTEgKzQsMTQgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAotb2JqLXkJCQk6PSB0aW1lLm8KLW9iai0kKENPTkZJR19NQUNIX0tFVjdBNDAwKSArPSBhcmNoLWtldjdhNDAwLm8gaXJxLWxoN2E0MDAubwotb2JqLSQoQ09ORklHX01BQ0hfTFBEN0E0MDApICs9IGFyY2gtbHBkN2E0MHgubyBpcnEtbGg3YTQwMC5vCi1vYmotJChDT05GSUdfTUFDSF9MUEQ3QTQwNCkgKz0gYXJjaC1scGQ3YTQweC5vIGlycS1saDdhNDA0Lm8KK29iai15CQkJCTo9IHRpbWUubyBjbG9ja3Mubworb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CiAKLW9iai1tCQkJOj0KLW9iai1uCQkJOj0KLW9iai0JCQk6PQorb2JqLSQoQ09ORklHX01BQ0hfS0VWN0E0MDApCSs9IGFyY2gta2V2N2E0MDAubyBpcnEtbGg3YTQwMC5vCitvYmotJChDT05GSUdfTUFDSF9MUEQ3QTQwMCkJKz0gYXJjaC1scGQ3YTQweC5vIGlycS1saDdhNDAwLm8KK29iai0kKENPTkZJR19NQUNIX0xQRDdBNDA0KQkrPSBhcmNoLWxwZDdhNDB4Lm8gaXJxLWxoN2E0MDQubworb2JqLSQoQ09ORklHX0xQRDdBNDBYX0NQTERfU1NQKQkrPSBzc3AtY3BsZC5vCitvYmotJChDT05GSUdfRkJfQVJNQ0xDRCkJKz0gY2xjZC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jCmluZGV4IDEyZTIzMjcuLmMwZTY4NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYwpAQCAtMjMsNiArMjMsMjggQEAKIAogI2luY2x1ZGUgImNvbW1vbi5oIgogCisjZGVmaW5lIENQTERfSU5UX05FVEhFUk5FVAkoMTw8MCkKKyNkZWZpbmUgQ1BMRF9JTlRNQVNLX0VUSEVSTkVUCSgxPDwyKQorI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorIyBkZWZpbmUgQ1BMRF9JTlRfTlRPVUNICQkoMTw8MSkKKyMgZGVmaW5lIENQTERfSU5UTUFTS19UT1VDSAkoMTw8MykKKyMgZGVmaW5lIENQTERfSU5UX1BFTgkJKDE8PDQpCisjIGRlZmluZSBDUExEX0lOVE1BU0tfUEVOCSgxPDw0KQorIyBkZWZpbmUgQ1BMRF9JTlRfUElSUQkJKDE8PDQpCisjZW5kaWYKKyNkZWZpbmUgQ1BMRF9JTlRNQVNLX0NQTEQJKDE8PDcpCisjZGVmaW5lIENQTERfSU5UX0NQTEQJCSgxPDw2KQorCisjZGVmaW5lIENQTERfQ09OVFJPTF9TV0lOVAkJKDE8PDcpIC8qIERpc2FibGUgYWxsIENQTEQgSVJRcyAqLworI2RlZmluZSBDUExEX0NPTlRST0xfT0NNU0sJCSgxPDw2KSAvKiBNYXNrIFVTQjEgY29ubmVjdCBJUlEgKi8KKyNkZWZpbmUgQ1BMRF9DT05UUk9MX1BEUlYJCSgxPDw1KSAvKiBQQ0NfbkRSViBoaWdoICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9VU0IxQwkJKDE8PDQpIC8qIFVTQjEgY29ubmVjdCBJUlEgYWN0aXZlICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9VU0IxUAkJKDE8PDMpIC8qIFVTQjEgcG93ZXIgZGlzYWJsZSAqLworI2RlZmluZSBDUExEX0NPTlRST0xfQVdLUAkJKDE8PDIpIC8qIEF1dG8td2FrZXVwIGRpc2FibGVkICAqLworI2RlZmluZSBDUExEX0NPTlRST0xfTENEX0VOQUJMRQkJKDE8PDEpIC8qIExDRCBWZWUgZW5hYmxlICovCisjZGVmaW5lIENQTERfQ09OVFJPTF9XUkxBTl9ORU5BQkxFCSgxPDwwKSAvKiBTTUM5MXggcG93ZXIgZGlzYWJsZSAqLworCisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLnN0YXJ0CT0gQ1BMRDAwX1BIWVMsCkBAIC00OCwxMiArNzAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGg3YTQweF91c2JjbGllbnRfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewogCQkuc3RhcnQJPSBVU0JfUEhZUywKLQkJLmVuZAk9IChVU0JfUEhZUyArIDB4RkYpLAorCQkuZW5kCT0gKFVTQl9QSFlTICsgUEFHRV9TSVpFKSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9VU0JJTlRSLAotCQkuZW5kCT0gSVJRX1VTQklOVFIsCisJCS5zdGFydAk9IElSUV9VU0IsCisJCS5lbmQJPSBJUlFfVVNCLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTYxLDcgKzgzLDggQEAKIHN0YXRpYyB1NjQgbGg3YTQweF91c2JjbGllbnRfZG1hX21hc2sgPSAweGZmZmZmZmZmVUw7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxoN2E0MHhfdXNiY2xpZW50X2RldmljZSA9IHsKLQkubmFtZQkJPSAibGg3YTQweF91ZGMiLAorLy8JLm5hbWUJCT0gImxoN2E0MHhfdWRjIiwKKwkubmFtZQkJPSAibGg3LXVkYyIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzayA9ICZsaDdhNDB4X3VzYmNsaWVudF9kbWFfbWFzaywKQEAgLTEwMSw3ICsxMjQsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmxwZDdhNDB4X2RldnNbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGxwZDdhNDB4X2RldnNbXSBfX2luaXRkYXRhID0gewogCSZzbWM5MXhfZGV2aWNlLAogCSZsaDdhNDB4X3VzYmNsaWVudF9kZXZpY2UsCiAjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKQEAgLTExMywyOSArMTM2LDUyIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBscGQ3YTQweF9pbml0ICh2b2lkKQogewotCUNQTERfQ09OVFJPTCB8PSAgICAgKDE8PDYpOyAvKiBNYXNrIFVTQjEgY29ubmVjdGlvbiBJUlEgKi8KKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlDUExEX0NPTlRST0wgfD0gMAorCQl8IENQTERfQ09OVFJPTF9TV0lOVCAvKiBEaXNhYmxlIHNvZnR3YXJlIGludGVycnVwdCAqLworCQl8IENQTERfQ09OVFJPTF9PQ01TSzsgLyogTWFzayBVU0IxIGNvbm5lY3Rpb24gSVJRICovCiAJQ1BMRF9DT05UUk9MICY9IH4oMAotCQkJICB8ICgxPDwxKSAvKiBEaXNhYmxlIExDRCAqLwotCQkJICB8ICgxPDwwKSAvKiBFbmFibGUgV0xBTiAqLworCQkJICB8IENQTERfQ09OVFJPTF9MQ0RfRU5BQkxFCS8qIERpc2FibGUgTENEICovCisJCQkgIHwgQ1BMRF9DT05UUk9MX1dSTEFOX05FTkFCTEUJLyogRW5hYmxlIFNNQzkxeCAqLwogCQkpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwNCkKKwlDUExEX0NPTlRST0wgJj0gfigwCisJCQkgIHwgQ1BMRF9DT05UUk9MX1dSTEFOX05FTkFCTEUJLyogRW5hYmxlIFNNQzkxeCAqLworCQkpOworI2VuZGlmCiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyAobHBkN2E0MHhfZGV2cywgQVJSQVlfU0laRSAobHBkN2E0MHhfZGV2cykpOworI2lmIGRlZmluZWQgKENPTkZJR19GQl9BUk1DTENEKQorICAgICAgICBsaDdhNDB4X2NsY2RfaW5pdCAoKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBsaDdhNDB4X2Fja19jcGxkX2lycSAodTMyIGlycSkKIHsKLQkvKiBDUExEIGRvZXNuJ3QgaGF2ZSBhY2sgY2FwYWJpbGl0eSAqLworCS8qIENQTEQgZG9lc24ndCBoYXZlIGFjayBjYXBhYmlsaXR5LCBidXQgc29tZSBkZXZpY2VzIG1heSAqLworCisjaWYgZGVmaW5lZCAoQ1BMRF9JTlRNQVNLX1RPVUNIKQorCS8qIFRoZSB0b3VjaCBjb250cm9sICptdXN0KiBtYXNrIHRoZSB0aGUgaW50ZXJydXB0IGJlY2F1c2UgdGhlCisJICogaW50ZXJydXB0IGJpdCBpcyByZWFkIGJ5IHRoZSBkcml2ZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBwZW4KKwkgKiBpcyBzdGlsbCBkb3duLiAqLworCWlmIChpcnEgPT0gSVJRX1RPVUNIKQorCQlDUExEX0lOVEVSUlVQVFMgfD0gQ1BMRF9JTlRNQVNLX1RPVUNIOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIGxoN2E0MHhfbWFza19jcGxkX2lycSAodTMyIGlycSkKIHsKIAlzd2l0Y2ggKGlycSkgewogCWNhc2UgSVJRX0xQRDdBNDBYX0VUSF9JTlQ6Ci0JCUNQTERfSU5URVJSVVBUUyA9IENQTERfSU5URVJSVVBUUyB8IDB4NDsKKwkJQ1BMRF9JTlRFUlJVUFRTIHw9IENQTERfSU5UTUFTS19FVEhFUk5FVDsKIAkJYnJlYWs7Ci0JY2FzZSBJUlFfTFBEN0E0MDBfVFM6Ci0JCUNQTERfSU5URVJSVVBUUyA9IENQTERfSU5URVJSVVBUUyB8IDB4ODsKKyNpZiBkZWZpbmVkIChJUlFfVE9VQ0gpCisJY2FzZSBJUlFfVE9VQ0g6CisJCUNQTERfSU5URVJSVVBUUyB8PSBDUExEX0lOVE1BU0tfVE9VQ0g7CiAJCWJyZWFrOworI2VuZGlmCiAJfQogfQogCkBAIC0xNDMsMTEgKzE4OSwxMyBAQAogewogCXN3aXRjaCAoaXJxKSB7CiAJY2FzZSBJUlFfTFBEN0E0MFhfRVRIX0lOVDoKLQkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTICYgfiAweDQ7CisJCUNQTERfSU5URVJSVVBUUyAmPSB+Q1BMRF9JTlRNQVNLX0VUSEVSTkVUOwogCQlicmVhazsKLQljYXNlIElSUV9MUEQ3QTQwMF9UUzoKLQkJQ1BMRF9JTlRFUlJVUFRTID0gQ1BMRF9JTlRFUlJVUFRTICYgfiAweDg7CisjaWYgZGVmaW5lZCAoSVJRX1RPVUNIKQorCWNhc2UgSVJRX1RPVUNIOgorCQlDUExEX0lOVEVSUlVQVFMgJj0gfkNQTERfSU5UTUFTS19UT1VDSDsKIAkJYnJlYWs7CisjZW5kaWYKIAl9CiB9CiAKQEAgLTE2NCwxMSArMjEyLDEzIEBACiAKIAlkZXNjLT5jaGlwLT5hY2sgKGlycSk7CiAKLQlpZiAoKG1hc2sgJiAweDEpID09IDApCS8qIFdMQU4gKi8KKwlpZiAoKG1hc2sgJiAoMTw8MCkpID09IDApCS8qIFdMQU4gKi8KIAkJSVJRX0RJU1BBVENIIChJUlFfTFBEN0E0MFhfRVRIX0lOVCk7CiAKLQlpZiAoKG1hc2sgJiAweDIpID09IDApCS8qIFRvdWNoICovCi0JCUlSUV9ESVNQQVRDSCAoSVJRX0xQRDdBNDAwX1RTKTsKKyNpZiBkZWZpbmVkIChJUlFfVE9VQ0gpCisJaWYgKChtYXNrICYgKDE8PDEpKSA9PSAwKQkvKiBUb3VjaCAqLworCQlJUlFfRElTUEFUQ0ggKElSUV9UT1VDSCk7CisjZW5kaWYKIAogCWRlc2MtPmNoaXAtPnVubWFzayAoaXJxKTsgLyogTGV2ZWwtdHJpZ2dlcmVkIG5lZWQgdGhpcyAqLwogfQpAQCAtMjA0LDkgKzI1NCwyMSBAQAogCiAJCS8qIFRoZW4sIGNvbmZpZ3VyZSBDUExEIGludGVycnVwdCAqLwogCi0JQ1BMRF9JTlRFUlJVUFRTCT0gICAweDljOyAvKiBEaXNhYmxlIGFsbCBDUExEIGludGVycnVwdHMgKi8KKwkJCS8qIERpc2FibGUgYWxsIENQTEQgaW50ZXJydXB0cyAqLworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorCUNQTERfSU5URVJSVVBUUwk9IENQTERfSU5UTUFTS19UT1VDSCB8IENQTERfSU5UTUFTS19QRU4KKwkJfCBDUExEX0lOVE1BU0tfRVRIRVJORVQ7CisJLyogKioqIEZJWE1FOiBkb24ndCBrbm93IHdoeSB3ZSBuZWVkIDcgYW5kIDQuIDcgaXMgd2F5IHdyb25nCisgICAgICAgICAgICAgICBhbmQgNCBpcyB1bmNlZmluZWQuICovCisJLy8gKDE8PDcpfCgxPDw0KXwoMTw8Myl8KDE8PDIpOworI2VuZGlmCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJQ1BMRF9JTlRFUlJVUFRTCT0gQ1BMRF9JTlRNQVNLX0VUSEVSTkVUOworCS8qICoqKiBGSVhNRTogZG9uJ3Qga25vdyB3aHkgd2UgbmVlZCA2IGFuZCA1LCBuZWl0aGVyIGlzIGRlZmluZWQuICovCisJLy8gKDE8PDYpfCgxPDw1KXwoMTw8Myk7CisjZW5kaWYKIAlHUElPX1BGREQJJj0gfigxIDw8IHBpbkNQTEQpOyAvKiBNYWtlIGlucHV0ICovCi0JR1BJT19JTlRUWVBFMQl8PSAgKDEgPDwgcGluQ1BMRCk7IC8qIEVkZ2UgdHJpZ2dlcmVkICovCisJR1BJT19JTlRUWVBFMQkmPSB+KDEgPDwgcGluQ1BMRCk7IC8qIExldmVsIHRyaWdnZXJlZCAqLwogCUdQSU9fSU5UVFlQRTIJJj0gfigxIDw8IHBpbkNQTEQpOyAvKiBBY3RpdmUgbG93ICovCiAJYmFycmllciAoKTsKIAlHUElPX0dQSU9GSU5URU4gfD0gICgxIDw8IHBpbkNQTEQpOyAvKiBFbmFibGUgKi8KQEAgLTIxNiw3ICsyNzgsNyBAQAogCWZvciAoaXJxID0gSVJRX0JPQVJEX1NUQVJUOwogCSAgICAgaXJxIDwgSVJRX0JPQVJEX1NUQVJUICsgTlJfSVJRX0JPQVJEOyArK2lycSkgewogCQlzZXRfaXJxX2NoaXAgKGlycSwgJmxwZDdhNDB4X2NwbGRfY2hpcCk7Ci0JCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19lZGdlX0lSUSk7CisJCXNldF9pcnFfaGFuZGxlciAoaXJxLCBkb19sZXZlbF9JUlEpOwogCQlzZXRfaXJxX2ZsYWdzIChpcnEsIElSUUZfVkFMSUQpOwogCX0KIApAQCAtMjI2LDkxICsyODgsMTA5IEBACiAJCQkJIGxwZDdhNDB4X2NwbGRfaGFuZGxlcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbHBkN2E0MDBfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGxwZDdhNDB4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKLQkJLnZpcnR1YWwJPSAgICAgSU9fVklSVCwKKwkJLnZpcnR1YWwJPSBJT19WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU9fUEhZUyksCi0JCS5sZW5ndGgJCT0gCSAgICBJT19TSVpFLAorCQkubGVuZ3RoCQk9IElPX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsJLyogTWFwcGluZyBhZGRlZCB0byB3b3JrIGFyb3VuZCBjaGlwIHNlbGVjdCBwcm9ibGVtcyAqLworCX0sCisJewkvKiBNYXBwaW5nIGFkZGVkIHRvIHdvcmsgYXJvdW5kIGNoaXAgc2VsZWN0IHByb2JsZW1zICovCiAJCS52aXJ0dWFsCT0gSU9CQVJSSUVSX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT0JBUlJJRVJfUEhZUyksCiAJCS5sZW5ndGgJCT0gSU9CQVJSSUVSX1NJWkUsCiAJCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKKwl9LAorCXsKIAkJLnZpcnR1YWwJPSBDRl9WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ0ZfUEhZUyksCi0JCS5sZW5ndGgJCT0gCUNGX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMDJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwMl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDAyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMDZfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwNl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDA2X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMDhfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwOF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDA4X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMENfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwQ19QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDBDX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMEVfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwRV9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDBFX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTBfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDEwX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTJfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDEyX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTRfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxNF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDE0X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMTZfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxNl9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDE2X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMThfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxOF9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDE4X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sIHsKLQkJLnZpcnR1YWwJPSBDUExEMUFfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxQV9QSFlTKSwKLQkJLmxlbmd0aAkJPSAJQ1BMRDFBX1NJWkUsCisJCS5sZW5ndGgJCT0gQ0ZfU0laRSwKIAkJLnR5cGUJCT0gTVRfREVWSUNFCiAJfSwKLQkvKiBUaGlzIG1hcHBpbmcgaXMgcmVkdW5kYW50IHNpbmNlIHRoZSBzbWMgZHJpdmVyIHBlcmZvcm1zIGFub3RoZXIuICovCi0vKgl7IENQTEQwMF9WSVJULCAgQ1BMRDAwX1BIWVMsCUNQTEQwMF9TSVpFLAlNVF9ERVZJQ0UgfSwgKi8KKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDAyX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDJfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDAyX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQwNl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDA2X1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwNl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMDhfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwOF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMDhfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDA4X1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMDhfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDA4X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQwQV9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDBBX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQwQV9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMENfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQwQ19QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMENfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDBFX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMEVfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDBFX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQxMF9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDEwX1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQxMF9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMTJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxMl9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMTJfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDE0X1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMTRfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDE0X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCisJeworCQkudmlydHVhbAk9IENQTEQxNl9WSVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1BMRDE2X1BIWVMpLAorCQkubGVuZ3RoCQk9IENQTEQxNl9TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorCXsKKwkJLnZpcnR1YWwJPSBDUExEMThfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKENQTEQxOF9QSFlTKSwKKwkJLmxlbmd0aAkJPSBDUExEMThfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gQ1BMRDFBX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUExEMUFfUEhZUyksCisJCS5sZW5ndGgJCT0gQ1BMRDFBX1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCiB9OwogCiB2b2lkIF9faW5pdAotbHBkN2E0MDBfbWFwX2lvKHZvaWQpCitscGQ3YTQweF9tYXBfaW8odm9pZCkKIHsKLQlpb3RhYmxlX2luaXQgKGxwZDdhNDAwX2lvX2Rlc2MsIEFSUkFZX1NJWkUgKGxwZDdhNDAwX2lvX2Rlc2MpKTsKLQotCQkvKiBGaXh1cCAoaW1wcm92ZSkgU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIHNldHRpbmdzICovCi0JU01DX0JDUjAgPSAweDIwMDAzOWFmOwkvKiBCb290IEZsYXNoICovCi0JU01DX0JDUjYgPSAweDEwMDBmYmUwOwkvKiBDUExEICovCi0JU01DX0JDUjcgPSAweDEwMDBiMmMyOwkvKiBDb21wYWN0IEZsYXNoICovCisJaW90YWJsZV9pbml0IChscGQ3YTQweF9pb19kZXNjLCBBUlJBWV9TSVpFIChscGQ3YTQweF9pb19kZXNjKSk7CiB9CiAKICNpZmRlZiBDT05GSUdfTUFDSF9MUEQ3QTQwMApAQCAtMzIwLDcgKzQwMCw3IEBACiAJLnBoeXNfaW8JPSAweDgwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoaW9fcDJ2ICgweDgwMDAwMDAwKSk+PjE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAotCS5tYXBfaW8JCT0gbHBkN2E0MDBfbWFwX2lvLAorCS5tYXBfaW8JCT0gbHBkN2E0MHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGxoN2E0MDBfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZsaDdhNDB4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBscGQ3YTQweF9pbml0LApAQCAtMzM1LDcgKzQxNSw3IEBACiAJLnBoeXNfaW8JPSAweDgwMDAwMDAwLAogCS5pb19wZ19vZmZzdAk9ICgoaW9fcDJ2ICgweDgwMDAwMDAwKSk+PjE4KSAmIDB4ZmZmYywKIAkuYm9vdF9wYXJhbXMJPSAweGMwMDAwMTAwLAotCS5tYXBfaW8JCT0gbHBkN2E0MDBfbWFwX2lvLAorCS5tYXBfaW8JCT0gbHBkN2E0MHhfbWFwX2lvLAogCS5pbml0X2lycQk9IGxoN2E0MDRfaW5pdF9pcnEsCiAJLnRpbWVyCQk9ICZsaDdhNDB4X3RpbWVyLAogCS5pbml0X21hY2hpbmUJPSBscGQ3YTQweF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NsY2QuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbGNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3NTFmZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbGNkLmMKQEAgLTAsMCArMSwyNDEgQEAKKy8qCisgKiAgYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NsY2QuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFyYyBTaW5nZXIKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvLyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKy8vI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKy8vI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisvLyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CisjaW5jbHVkZSA8bGludXgvYW1iYS9jbGNkLmg+CisKKyNkZWZpbmUgSFJURlRDX0hSU0VUVVAJCV9fUkVHKEhSVEZUQ19QSFlTICsgMHgwMCkKKyNkZWZpbmUgSFJURlRDX0hSQ09OCQlfX1JFRyhIUlRGVENfUEhZUyArIDB4MDQpCisjZGVmaW5lIEhSVEZUQ19IUlRJTUlORzEJX19SRUcoSFJURlRDX1BIWVMgKyAweDA4KQorI2RlZmluZSBIUlRGVENfSFJUSU1JTkcyCV9fUkVHKEhSVEZUQ19QSFlTICsgMHgwYykKKworI2RlZmluZSBBTElfU0VUVVAJCV9fUkVHKEFMSV9QSFlTICsgMHgwMCkKKyNkZWZpbmUgQUxJX0NPTlRST0wJCV9fUkVHKEFMSV9QSFlTICsgMHgwNCkKKyNkZWZpbmUgQUxJX1RJTUlORzEJCV9fUkVHKEFMSV9QSFlTICsgMHgwOCkKKyNkZWZpbmUgQUxJX1RJTUlORzIJCV9fUkVHKEFMSV9QSFlTICsgMHgwYykKKworI2luY2x1ZGUgImxjZC1wYW5lbC5oIgorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2NsY2RfZGlzYWJsZSAoc3RydWN0IGNsY2RfZmIgKmZiKQoreworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorCUNQTERfQ09OVFJPTCAmPSB+KDE8PDEpOwkvKiBEaXNhYmxlIExDRCBWZWUgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJR1BJT19QQ0QgICY9IH4oMTw8Myk7CQkvKiBEaXNhYmxlIExDRCBWZWUgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKKwlIUlRGVENfSFJTRVRVUCAmPSB+KDE8PDEzKTsJLyogRGlzYWJsZSBIUlRGVCBjb250cm9sbGVyICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDQpCisJQUxJX1NFVFVQICY9IH4oMTw8MTMpOwkJLyogRGlzYWJsZSBBTEkgKi8KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2NsY2RfZW5hYmxlIChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJc3RydWN0IGNsY2RfcGFuZWxfZXh0cmEqIGV4dHJhCisJCT0gKHN0cnVjdCBjbGNkX3BhbmVsX2V4dHJhKikgZmItPmJvYXJkX2RhdGE7CisKKyNpZiBkZWZpbmVkIChDT05GSUdfTUFDSF9MUEQ3QTQwMCkKKwlDUExEX0NPTlRST0wgfD0gKDE8PDEpOwkJLyogRW5hYmxlIExDRCBWZWUgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDQpCisJR1BJT19QQ0REICY9IH4oMTw8Myk7CQkvKiBFbmFibGUgTENEIFZlZSAqLworCUdQSU9fUENEICB8PSAgKDE8PDMpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKQorCisJaWYgKGV4dHJhKSB7CisJCUhSVEZUQ19IUlNFVFVQCisJCQk9ICgxIDw8IDEzKQorCQkJfCAoKGZiLT5mYi52YXIueHJlcyAtIDEpIDw8IDQpCisJCQl8IDB4YworCQkJfCAoZXh0cmEtPmhybW9kZSA/IDEgOiAwKTsKKwkJSFJURlRDX0hSQ09OCisJCQk9ICgoZXh0cmEtPmNsc2VuID8gMSA6IDApIDw8IDEpCisJCQl8ICgoZXh0cmEtPnNwc2VuID8gMSA6IDApIDw8IDApOworCQlIUlRGVENfSFJUSU1JTkcxCisJCQk9IChleHRyYS0+cGNkZWwgPDwgOCkKKwkJCXwgKGV4dHJhLT5yZXZkZWwgPDwgNCkKKwkJCXwgKGV4dHJhLT5scGRlbCA8PCAwKTsKKwkJSFJURlRDX0hSVElNSU5HMgorCQkJPSAoZXh0cmEtPnNwbGRlbCA8PCA5KQorCQkJfCAoZXh0cmEtPnBjMmRlbCA8PCAwKTsKKwl9CisJZWxzZQorCQlIUlRGVENfSFJTRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgMHhjOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDA0KQorCisJaWYgKGV4dHJhKSB7CisJCUFMSV9TRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgKChmYi0+ZmIudmFyLnhyZXMgLSAxKSA8PCA0KQorCQkJfCAweGMKKwkJCXwgKGV4dHJhLT5ocm1vZGUgPyAxIDogMCk7CisJCUFMSV9DT05UUk9MCisJCQk9ICgoZXh0cmEtPmNsc2VuID8gMSA6IDApIDw8IDEpCisJCQl8ICgoZXh0cmEtPnNwc2VuID8gMSA6IDApIDw8IDApOworCQlBTElfVElNSU5HMQorCQkJPSAoZXh0cmEtPnBjZGVsIDw8IDgpCisJCQl8IChleHRyYS0+cmV2ZGVsIDw8IDQpCisJCQl8IChleHRyYS0+bHBkZWwgPDwgMCk7CisJCUFMSV9USU1JTkcyCisJCQk9IChleHRyYS0+c3BsZGVsIDw8IDkpCisJCQl8IChleHRyYS0+cGMyZGVsIDw8IDApOworCX0KKwllbHNlCisJCUFMSV9TRVRVUAorCQkJPSAoMSA8PCAxMykKKwkJCXwgMHhjOworI2VuZGlmCisKK30KKworI2RlZmluZSBGUkFNRVNJWkUocykgKCgocykgKyBQQUdFX1NJWkUgLSAxKSZQQUdFX01BU0spCisKK3N0YXRpYyBpbnQgbGg3YTQweF9jbGNkX3NldHVwIChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2FkZHJfdCBkbWE7CisJdTMyIGxlbiA9IEZSQU1FU0laRSAobGNkX3BhbmVsLm1vZGUueHJlcypsY2RfcGFuZWwubW9kZS55cmVzCisJCQkgICAgICoobGNkX3BhbmVsLmJwcC84KSk7CisKKwlmYi0+cGFuZWwgPSAmbGNkX3BhbmVsOworCisJCS8qIEVuZm9yY2UgdGhlIHN5bmMgcG9sYXJpdHkgZGVmYXVsdHMgKi8KKwlpZiAoIShmYi0+cGFuZWwtPnRpbTIgJiBUSU0yX0lIUykpCisJCWZiLT5mYi52YXIuc3luYyB8PSBGQl9TWU5DX0hPUl9ISUdIX0FDVDsKKwlpZiAoIShmYi0+cGFuZWwtPnRpbTIgJiBUSU0yX0lWUykpCisJCWZiLT5mYi52YXIuc3luYyB8PSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1Q7CisKKyNpZiBkZWZpbmVkIChIQVNfTENEX1BBTkVMX0VYVFJBKQorCWZiLT5ib2FyZF9kYXRhID0gJmxjZF9wYW5lbF9leHRyYTsKKyNlbmRpZgorCisJZmItPmZiLnNjcmVlbl9iYXNlCisJCT0gZG1hX2FsbG9jX3dyaXRlY29tYmluZSAoJmZiLT5kZXYtPmRldiwgbGVuLAorCQkJCQkgICZkbWEsIEdGUF9LRVJORUwpOworCXByaW50ayAoIkNMQ0Q6IExDRCBzZXR1cCBmYiB2aXJ0IDB4JXAgcGh5cyAweCVwIGwgJXggaW8gMHglcCBcbiIsCisJCWZiLT5mYi5zY3JlZW5fYmFzZSwgKHZvaWQqKSBkbWEsIGxlbiwKKwkJKHZvaWQqKSBpb19wMnYgKENMQ0RDX1BIWVMpKTsKKwlwcmludGsgKCJDTENEOiBwaXhjbG9jayAlZFxuIiwgbGNkX3BhbmVsLm1vZGUucGl4Y2xvY2spOworCisJaWYgKCFmYi0+ZmIuc2NyZWVuX2Jhc2UpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDTENEOiB1bmFibGUgdG8gbWFwIGZyYW1lYnVmZmVyXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisjaWYgZGVmaW5lZCAoVVNFX1JHQjU1NSkKKwlmYi0+ZmIudmFyLmdyZWVuLmxlbmd0aCA9IDU7IC8qIFBhbmVsIHVzZXMgUkdCIDU6NTo1ICovCisjZW5kaWYKKworCWZiLT5mYi5maXguc21lbV9zdGFydCA9IGRtYTsKKwlmYi0+ZmIuZml4LnNtZW1fbGVuID0gbGVuOworCisJCS8qIERyaXZlIFBFNCBoaWdoIHRvIHByZXZlbnQgQ1BMRCBjcmFzaCAqLworCUdQSU9fUEVERCB8PSAoMTw8NCk7CisJR1BJT19QRUQgIHw9ICgxPDw0KTsKKworCUdQSU9fUElOTVVYIHw9ICgxPDwxKSB8ICgxPDwwKTsgLyogTENEVkRbMTU6NF0gKi8KKworLy8JZmItPmZiLmZib3BzLT5mYl9jaGVja192YXIgKCZmYi0+ZmIudmFyLCAmZmItPmZiKTsKKy8vCWZiLT5mYi5mYm9wcy0+ZmJfc2V0X3BhciAoJmZiLT5mYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsaDdhNDB4X2NsY2RfbW1hcCAoc3RydWN0IGNsY2RfZmIgKmZiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gZG1hX21tYXBfd3JpdGVjb21iaW5lKCZmYi0+ZGV2LT5kZXYsIHZtYSwKKwkJCQkgICAgIGZiLT5mYi5zY3JlZW5fYmFzZSwKKwkJCQkgICAgIGZiLT5mYi5maXguc21lbV9zdGFydCwKKwkJCQkgICAgIGZiLT5mYi5maXguc21lbV9sZW4pOworfQorCitzdGF0aWMgdm9pZCBsaDdhNDB4X2NsY2RfcmVtb3ZlIChzdHJ1Y3QgY2xjZF9mYiAqZmIpCit7CisJZG1hX2ZyZWVfd3JpdGVjb21iaW5lICgmZmItPmRldi0+ZGV2LCBmYi0+ZmIuZml4LnNtZW1fbGVuLAorCQkJICAgICAgIGZiLT5mYi5zY3JlZW5fYmFzZSwgZmItPmZiLmZpeC5zbWVtX3N0YXJ0KTsKK30KKworc3RhdGljIHN0cnVjdCBjbGNkX2JvYXJkIGNsY2RfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZQkJPSAibGg3YTQweCBGQiIsCisJLmNoZWNrCQk9IGNsY2RmYl9jaGVjaywKKwkuZGVjb2RlCQk9IGNsY2RmYl9kZWNvZGUsCisJLmVuYWJsZQkJPSBsaDdhNDB4X2NsY2RfZW5hYmxlLAorCS5zZXR1cAkJPSBsaDdhNDB4X2NsY2Rfc2V0dXAsCisJLm1tYXAJCT0gbGg3YTQweF9jbGNkX21tYXAsCisJLnJlbW92ZQkJPSBsaDdhNDB4X2NsY2RfcmVtb3ZlLAorCS5kaXNhYmxlCT0gbGg3YTQweF9jbGNkX2Rpc2FibGUsCit9OworCisjZGVmaW5lIElSUV9DTENEQyAoSVJRX0xDRElOVFIpCisKKyNkZWZpbmUgQU1CQV9ERVZJQ0UobmFtZSxidXNpZCxiYXNlLHBsYXQscGlkKQkJCVwKK3N0YXRpYyBzdHJ1Y3QgYW1iYV9kZXZpY2UgbmFtZSMjX2RldmljZSA9IHsJCQlcCisJLmRldiA9IHsJCQkJCQlcCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IH4wLAkJCVwKKwkJLmJ1c19pZAk9IGJ1c2lkLAkJCQlcCisJCS5wbGF0Zm9ybV9kYXRhID0gcGxhdCwJCQkJXAorCQl9LAkJCQkJCVwKKwkucmVzID0gewkJCQkJCVwKKwkJLnN0YXJ0CT0gYmFzZSMjX1BIWVMsCQkJCVwKKwkJLmVuZAk9IChiYXNlIyNfUEhZUykgKyAoNCoxMDI0KSAtIDEsCQlcCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJCVwKKwkJfSwJCQkJCQlcCisJLmRtYV9tYXNrCT0gfjAsCQkJCQlcCisJLmlycQkJPSB7IElSUV8jI2Jhc2UsIH0sCQkJXAorCS8qIC5kbWEJCT0gYmFzZSMjX0RNQSwqLwkJCQlcCisJLnBlcmlwaGlkID0gcGlkLAkJCQkJXAorfQorCitBTUJBX0RFVklDRShjbGNkLCAgImNsZGMtbGg3YTQweCIsICBDTENEQywgICAgICZjbGNkX3BsYXRmb3JtX2RhdGEsIDB4NDExMTApOworCitzdGF0aWMgc3RydWN0IGFtYmFfZGV2aWNlICphbWJhX2RldnNbXSBfX2luaXRkYXRhID0geworCSZjbGNkX2RldmljZSwKK307CisKK3ZvaWQgX19pbml0IGxoN2E0MHhfY2xjZF9pbml0ICh2b2lkKQoreworCWludCBpOworCWludCByZXN1bHQ7CisJcHJpbnRrICgiQ0xDRDogcmVnaXN0ZXJpbmcgYW1iYSBkZXZpY2VzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhbWJhX2RldnMpOyBpKyspIHsKKwkJc3RydWN0IGFtYmFfZGV2aWNlICpkID0gYW1iYV9kZXZzW2ldOworCQlyZXN1bHQgPSBhbWJhX2RldmljZV9yZWdpc3RlcihkLCAmaW9tZW1fcmVzb3VyY2UpOworCQlwcmludGsgKCIgICVkIC0+ICVkXG4iLCBpICxyZXN1bHQpOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjkxYWZlOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jbG9ja3MuYwpAQCAtMCwwICsxLDE5OSBAQAorLyogYXJjaC9hcm0vbWFjaC1saDdhNDB4L2Nsb2Nrcy5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBNYXJjIFNpbmdlcgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvY2xvY2tzLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKK3N0cnVjdCBtb2R1bGU7CitzdHJ1Y3QgaWNzdDUyNV9wYXJhbXM7CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJc3RydWN0IG1vZHVsZSAqb3duZXI7CisJY29uc3QgY2hhciAqbmFtZTsKKy8vCXZvaWQgKmRhdGE7CisvLwljb25zdCBzdHJ1Y3QgaWNzdDUyNV9wYXJhbXMgKnBhcmFtczsKKy8vCXZvaWQgKCpzZXR2Y28pKHN0cnVjdCBjbGsgKiwgc3RydWN0IGljc3Q1MjVfdmNvIHZjbyk7Cit9OworCitpbnQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7Cit2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CisKKy8qIC0tLS0tICovCisKKyNkZWZpbmUgTUFJTkRJVjEoYykJKCgoYykgPj4gIDcpICYgMHgwZikKKyNkZWZpbmUgTUFJTkRJVjIoYykJKCgoYykgPj4gMTEpICYgMHgxZikKKyNkZWZpbmUgUFMoYykJCSgoKGMpID4+IDE4KSAmIDB4MDMpCisjZGVmaW5lIFBSRURJVihjKQkoKChjKSA+PiAgMikgJiAweDFmKQorI2RlZmluZSBIQ0xLRElWKGMpCSgoKGMpID4+ICAwKSAmIDB4MDIpCisjZGVmaW5lIFBDTEtESVYoYykJKCgoYykgPj4gMTYpICYgMHgwMykKKwordW5zaWduZWQgaW50IGNwdWZyZXFfZ2V0ICh1bnNpZ25lZCBpbnQgY3B1KSAvKiBpbiBrSHogKi8KK3sKKwlyZXR1cm4gZmNsa2ZyZXFfZ2V0ICgpLzEwMDA7Cit9CitFWFBPUlRfU1lNQk9MKGNwdWZyZXFfZ2V0KTsKKwordW5zaWduZWQgaW50IGZjbGtmcmVxX2dldCAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2xrc2V0ID0gQ1NDX0NMS1NFVDsKKwl1bnNpZ25lZCBpbnQgZ2NsaworCQk9IFhUQUxfSU4KKwkJLyAoMSA8PCBQUyhjbGtzZXQpKQorCQkqIChNQUlORElWMShjbGtzZXQpICsgMikKKwkJLyAoUFJFRElWKGNsa3NldCkgICArIDIpCisJCSogKE1BSU5ESVYyKGNsa3NldCkgKyAyKQorCQk7CisJcmV0dXJuIGdjbGs7Cit9CisKK3Vuc2lnbmVkIGludCBoY2xrZnJlcV9nZXQgKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNsa3NldCA9IENTQ19DTEtTRVQ7CisJdW5zaWduZWQgaW50IGhjbGsgPSBmY2xrZnJlcV9nZXQgKCkgLyAoSENMS0RJVihjbGtzZXQpICsgMSk7CisKKwlyZXR1cm4gaGNsazsKK30KKwordW5zaWduZWQgaW50IHBjbGtmcmVxX2dldCAodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY2xrc2V0ID0gQ1NDX0NMS1NFVDsKKwlpbnQgcGNsa2RpdiA9IFBDTEtESVYoY2xrc2V0KTsKKwl1bnNpZ25lZCBpbnQgcGNsazsKKwlpZiAocGNsa2RpdiA9PSAweDMpCisJCXBjbGtkaXYgPSAweDI7CisJcGNsayA9IGhjbGtmcmVxX2dldCAoKSAvICgxIDw8IHBjbGtkaXYpOworCisJcmV0dXJuIHBjbGs7Cit9CisKKy8qIC0tLS0tICovCisKK3N0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKK3N0YXRpYyBERUNMQVJFX01VVEVYKGNsb2Nrc19zZW0pOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0IChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkKQoreworCXN0cnVjdCBjbGsgKnA7CisJc3RydWN0IGNsayAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKKworCWRvd24gKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5IChwLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChzdHJjbXAgKGlkLCBwLT5uYW1lKSA9PSAwCisJCSAgICAmJiB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKKwkJCWNsayA9IHA7CisJCQlicmVhazsKKwkJfQorCX0KKwl1cCAoJmNsb2Nrc19zZW0pOworCisJcmV0dXJuIGNsazsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dCAoc3RydWN0IGNsayAqY2xrKQoreworCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCitpbnQgY2xrX2VuYWJsZSAoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZSAoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CisKK2ludCBjbGtfdXNlIChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa191c2UpOworCit2b2lkIGNsa191bnVzZSAoc3RydWN0IGNsayAqY2xrKQoreworfQorRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZSAoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGstPnJhdGU7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK2xvbmcgY2xrX3JvdW5kX3JhdGUgKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXJldHVybiByYXRlOworfQorRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7CisKK2ludCBjbGtfc2V0X3JhdGUgKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQgPSAtRUlPOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7CisKKyNpZiAwCisvKgorICogVGhlc2UgYXJlIGZpeGVkIGNsb2Nrcy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsga21pX2NsayA9IHsKKwkubmFtZQk9ICJLTUlSRUZDTEsiLAorCS5yYXRlCT0gMjQwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0X2NsayA9IHsKKwkubmFtZQk9ICJVQVJUQ0xLIiwKKwkucmF0ZQk9IDI0MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaV9jbGsgPSB7CisJLm5hbWUJPSAiTUNMSyIsCisJLnJhdGUJPSAzMzAwMDAwMCwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBjbGsgY2xjZF9jbGsgPSB7CisJLm5hbWUJPSAiQ0xDRENMSyIsCisJLnJhdGUJPSAwLAorfTsKKworaW50IGNsa19yZWdpc3RlciAoc3RydWN0IGNsayAqY2xrKQoreworCWRvd24gKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2FkZCAoJmNsay0+bm9kZSwgJmNsb2Nrcyk7CisJdXAgKCZjbG9ja3Nfc2VtKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3JlZ2lzdGVyKTsKKwordm9pZCBjbGtfdW5yZWdpc3RlciAoc3RydWN0IGNsayAqY2xrKQoreworCWRvd24gKCZjbG9ja3Nfc2VtKTsKKwlsaXN0X2RlbCAoJmNsay0+bm9kZSk7CisJdXAgKCZjbG9ja3Nfc2VtKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VucmVnaXN0ZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBjbGtfaW5pdCAodm9pZCkKK3sKKwljbGtfcmVnaXN0ZXIoJmNsY2RfY2xrKTsKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2NvbW1vbi5oCmluZGV4IGVhOGRlN2UuLjE4ZThiYjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9jb21tb24uaAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvY29tbW9uLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAogZXh0ZXJuIHZvaWQgbGg3YTQwMF9pbml0X2lycSAodm9pZCk7CiBleHRlcm4gdm9pZCBsaDdhNDA0X2luaXRfaXJxICh2b2lkKTsKK2V4dGVybiB2b2lkIGxoN2E0MHhfY2xjZF9pbml0ICh2b2lkKTsKIGV4dGVybiB2b2lkIGxoN2E0MHhfaW5pdF9ib2FyZF9pcnEgKHZvaWQpOwogCiAjZGVmaW5lIElSUV9ESVNQQVRDSChpcnEpIGRlc2NfaGFuZGxlX2lycSgoaXJxKSwoaXJxX2Rlc2MgKyBpcnEpLCByZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDA0LmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYwppbmRleCBlOTAyZTNkLi4yNjg1YTgxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYwpAQCAtMjgsMTMgKzI4LDE3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9wcmlfdmljMVtdID0gewogI2lmIGRlZmluZWQgKFVTRV9QUklPUklUSUVTKQotSVJRX0dQSU8zSU5UUiwKKwlJUlFfR1BJTzNJTlRSLAkJCS8qIENQTEQgKi8KKwlJUlFfRE1BTTJQNCwgSVJRX0RNQU0yUDUsCS8qIEFDOTcgKi8KICNlbmRpZgogfTsKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlycV9wcmlfdmljMltdID0gewogI2lmIGRlZmluZWQgKFVTRV9QUklPUklUSUVTKQotCUlSUV9UM1VJLCBJUlFfR1BJTzdJTlRSLAorCUlSUV9UM1VJLAkJCS8qIFRpbWVyICovCisJSVJRX0dQSU83SU5UUiwJCQkvKiBDUExEICovCiAJSVJRX1VBUlQxSU5UUiwgSVJRX1VBUlQySU5UUiwgSVJRX1VBUlQzSU5UUiwKKwlJUlFfTENESU5UUiwJCQkvKiBMQ0QgKi8KKwlJUlFfVFNDSU5UUiwJCQkvKiBBREMvVG91Y2hzY3JlZW4gKi8KICNlbmRpZgogfTsKIApAQCAtOTgsMTAgKzEwMiwxOSBAQAogCiAgIC8qIElSUSBpbml0aWFsaXphdGlvbiAqLwogCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKK2V4dGVybiB2b2lkKiBicmFuY2hfaXJxX2xoN2E0MDA7CisjZW5kaWYKKwogdm9pZCBfX2luaXQgbGg3YTQwNF9pbml0X2lycSAodm9pZCkKIHsKIAlpbnQgaXJxOwogCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKKyNkZWZpbmUgTk9QIDB4ZTFhMDAwMDAJCQkvKiBtb3YgcjAsIHIwICovCisJYnJhbmNoX2lycV9saDdhNDAwID0gTk9QOworI2VuZGlmCisKIAlWSUMxX0lOVEVOQ0xSID0gMHhmZmZmZmZmZjsKIAlWSUMyX0lOVEVOQ0xSID0gMHhmZmZmZmZmZjsKIAlWSUMxX0lOVFNFTCA9IDA7CQkvKiBBbGwgSVJRcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2xjZC1wYW5lbC5oIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2xjZC1wYW5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjJlZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvbGNkLXBhbmVsLmgKQEAgLTAsMCArMSwzNDYgQEAKKy8qIGxjZC1wYW5lbC5oCisgICAgICRJZCQKKworICAgd3JpdHRlbiBieSBNYXJjIFNpbmdlcgorICAgMTggSnVsIDIwMDUKKworICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmMgU2luZ2VyCisKKyAgIC0tLS0tLS0tLS0tCisgICBERVNDUklQVElPTgorICAgLS0tLS0tLS0tLS0KKworICAgT25seSBvbmUgcGFuZWwgbWF5IGJlIGRlZmluZWQgYXQgYSB0aW1lLgorCisgICBUaGUgcGl4ZWwgY2xvY2sgaXMgY2FsY3VsYXRlZCB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIHRhcmdldC4KKworICAgRWFjaCB0aW1pbmcgdmFsdWUgaXMgYWNjb21wYW5pZWQgYnkgYSBzcGVjaWZpY2F0aW9uIGNvbW1lbnQuCisKKyAgICAgVU5JVFMvTUlOL1RZUC9NQVgKKworICAgTW9zdCBvZiB0aGUgdW5pdHMgd2lsbCBiZSBpbiBjbG9ja3MuCisKKyAgIFVTRV9SR0I1NTUKKworICAgICBEZWZpbmUgdGhpcyBtYWNybyB0byBjb25maWd1cmUgdGhlIEFNQkEgTENEIGNvbnRyb2xsZXIgdG8gdXNlIGFuCisgICAgIFJHQjU1NSBlbmNvZGluZyBmb3IgdGhlIHBlbHMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIFJHQjU2NS4KKworICAgTFBEOTUyMCwgTFBENzk1MjQsIExQRDdBNDAwLCBMUEQ3QTQwNC0xMCwgTFBEN0E0MDQtMTEKKworICAgICBUaGVzZSBib2FyZHMgYXJlIGJlc3QgYXBwcm94aW1hdGVkIGJ5IDU1NSBmb3IgYWxsIHBhbmVscy4gIFNvbWUKKyAgICAgY2FuIHVzZSBhbiBleHRyYSBsb3ctb3JkZXIgYml0IG9mIGJsdWUgaW4gYml0IDE2IG9mIHRoZSBjb2xvcgorICAgICB2YWx1ZSwgYnV0IHdlIGRvbid0IGhhdmUgYSB3YXkgdG8gY29tbXVuaWNhdGUgdGhpcyBub24tbGluZWFyCisgICAgIG1hcHBpbmcgdG8gdGhlIGtlcm5lbC4KKworKi8KKworI2lmICFkZWZpbmVkIChfX0xDRF9QQU5FTF9IX18pCisjICAgIGRlZmluZSAgIF9fTENEX1BBTkVMX0hfXworCisjaWYgZGVmaW5lZCAoTUFDSF9MUEQ3OTUyMClcCisgfHwgZGVmaW5lZCAoTUFDSF9MUEQ3OTUyNClcCisgfHwgZGVmaW5lZCAoTUFDSF9MUEQ3QTQwMClcCisgfHwgZGVmaW5lZCAoTUFDSF9MUEQ3QTQwNCkKKyMgZGVmaW5lIFVTRV9SR0I1NTUKKyNlbmRpZgorCitzdHJ1Y3QgY2xjZF9wYW5lbF9leHRyYSB7CisJdW5zaWduZWQgaW50IGhybW9kZTsKKwl1bnNpZ25lZCBpbnQgY2xzZW47CisJdW5zaWduZWQgaW50IHNwc2VuOworCXVuc2lnbmVkIGludCBwY2RlbDsKKwl1bnNpZ25lZCBpbnQgcmV2ZGVsOworCXVuc2lnbmVkIGludCBscGRlbDsKKwl1bnNpZ25lZCBpbnQgc3BsZGVsOworCXVuc2lnbmVkIGludCBwYzJkZWw7Cit9OworCisjZGVmaW5lIE5TX1RPX0NMT0NLKG5zLGMpCSgoKChucykqKChjKS8xMDAwKSArICgxMDAwMDAwIC0gMSkpLzEwMDAwMDApKQorI2RlZmluZSBDTE9DS19UT19ESVYoZSxjKQkoKChjKSArIChlKSAtIDEpLyhlKSkKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFEwMzVRN0RCMDJfSFJURlQKKworCS8qIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQgTENEIDMuNSIgUVZHQSBIUlRGVCAtMTAgKi8KKwkvKiBTaGFycCBQTiBMUTAzNVE3REIwMiB3L0hSVEZUIGNvbnRyb2xsZXIgY2hpcCAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDY4MDAwMDApCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIjMuNWluIFFWR0EgKExRMDM1UTdEQjAyKSIsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDE2LAorCQkucmlnaHRfbWFyZ2luCT0gMjEsCisJCS51cHBlcl9tYXJnaW4JPSA4LAkJCS8vIGxpbmUvOC84LzgKKwkJLmxvd2VyX21hcmdpbgk9IDUsCisJCS5oc3luY19sZW4JPSA2MSwKKwkJLnZzeW5jX2xlbgk9IE5TX1RPX0NMT0NLICg2MCwgUElYX0NMT0NLKSwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lQQyB8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNkZWZpbmUgSEFTX0xDRF9QQU5FTF9FWFRSQQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWxfZXh0cmEgbGNkX3BhbmVsX2V4dHJhID0geworCS5ocm1vZGUgPSAxLAorCS5jbHNlbiA9IDEsCisJLnNwc2VuID0gMSwKKwkucGNkZWwgPSA4LAorCS5yZXZkZWwgPSA3LAorCS5scGRlbCA9IDEzLAorCS5zcGxkZWwgPSA3NywKKwkucGMyZGVsID0gMjA4LAorfTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMDU3UTNEQzAyCisKKwkvKiBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50IExDRCA1LjciIFFWR0EgLTEwICovCisJLyogU2hhcnAgUE4gTFEwNTdRM0RDMDIgKi8KKwkvKiBRVkdBIG1vZGUsIFYvUT1MT1cgKi8KKworLyogRnJvbSBTaGFycCBvbiAyMDA2LjEuMy4gIEkgYmVsaWV2ZSBzb21lIG9mIHRoZSB2YWx1ZXMgYXJlIGluY29ycmVjdAorICogYmFzZWQgb24gdGhlIGRhdGFzaGVldC4KKworICAgIFRpbWluZzAJVElNSU5HMQkJVElNSU5HMgkJQ09OVFJPTAorICAgIDB4MTQwQTBDNEMJMHgwODA1MDRFRgkweDAxM0YzODBECTB4MDAwMDA4MjkKKyAgICBIQlA9IDIwCVZCUD0gIDgJCUJDRD0gIDAKKyAgICBIRlA9IDEwCVZGUD0gIDUJCUNQTD0zMTkKKyAgICBIU1c9IDEyCVZTVz0gIDEJCUlPRT0gIDAKKyAgICBQUEw9IDE5CUxQUD0yMzkJCUlQQz0gIDEKKwkJCQlJSFM9ICAxCisJCQkJSVZTPSAgMQorCQkJCUFDQj0gIDAKKwkJCQlDU0VMPSAwCisJCQkJUENEPSAxMworCisgKi8KKworLyogVGhlIGZ1bGwgaG9yb3pvbnRhbCBjeWNsZSAoVGgpIGlzIGNsb2NrLzM2MC80MDAvNDUwLiAqLworLyogVGhlIGZ1bGwgdmVydGljYWwgICBjeWNsZSAoVHYpIGlzIGxpbmUvMjUxLzI2Mi8yODAuICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoNjMwMDAwMCkgLyogLS82LjMvNyBNSHogKi8KKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiNS43aW4gUVZHQSAoTFEwNTdRM0RDMDIpIiwKKwkJLnhyZXMJCT0gMzIwLAorCQkueXJlcwkJPSAyNDAsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gMTEsCisJCS5yaWdodF9tYXJnaW4JPSA0MDAtMTEtMzIwLTIsCisJCS51cHBlcl9tYXJnaW4JPSA3LAkJCS8vIGxpbmUvNy83LzcKKwkJLmxvd2VyX21hcmdpbgk9IDI2Mi03LTI0MC0yLAorCQkuaHN5bmNfbGVuCT0gMiwJCQkvLyBjbGsvMi85Ni8yMDAKKwkJLnZzeW5jX2xlbgk9IDIsCQkJLy8gbGluZS8yLy0vMzQKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lIUyB8IFRJTTJfSVZTCisJCQl8IChQSVhfQ0xPQ0tfRElWSURFUiAtIDIpLAorCS5jbnRsCQk9IENOVExfTENEVEZUIHwgQ05UTF9XQVRFUk1BUkssCisJLmJwcAkJPSAxNiwKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBDT05GSUdfRkJfQVJNQ0xDRF9TSEFSUF9MUTY0RDM0MworCisJLyogTG9naWMgUHJvZHVjdCBEZXZlbG9wbWVudCBMQ0QgNi40IiBWR0EgLTEwICovCisJLyogU2hhcnAgUE4gTFE2NEQzNDMgKi8KKworLyogVGhlIGZ1bGwgaG9yb3pvbnRhbCBjeWNsZSAoVGgpIGlzIGNsb2NrLzc1MC84MDAvOTAwLiAqLworLyogVGhlIGZ1bGwgdmVydGljYWwgICBjeWNsZSAoVHYpIGlzIGxpbmUvNTE1LzUyNS81NjAuICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoMjgzMzAwMDApCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIjYuNGluIFFWR0EgKExRNjREMzQzKSIsCisJCS54cmVzCQk9IDY0MCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDMyLAorCQkucmlnaHRfbWFyZ2luCT0gODAwLTMyLTY0MC05NiwKKwkJLnVwcGVyX21hcmdpbgk9IDMyLAkJCS8vIGxpbmUvMzQvMzQvMzQKKwkJLmxvd2VyX21hcmdpbgk9IDU0MC0zMi00ODAtMiwKKwkJLmhzeW5jX2xlbgk9IDk2LAkJCS8vIGNsay8yLzk2LzIwMAorCQkudnN5bmNfbGVuCT0gMiwJCQkvLyBsaW5lLzIvLS8zNAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwl9LAorCS53aWR0aAkJPSAtMSwKKwkuaGVpZ2h0CQk9IC0xLAorCS50aW0yCQk9IFRJTTJfSUhTIHwgVElNMl9JVlMKKwkJCXwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9BUk1DTENEX1NIQVJQX0xRMTBEMzY4CisKKwkvKiBMb2dpYyBQcm9kdWN0IERldmVsb3BtZW50IExDRCAxMC40IiBWR0EgLTEwICovCisJLyogU2hhcnAgUE4gTFExMEQzNjggKi8KKworI2RlZmluZSBQSVhfQ0xPQ0tfVEFSR0VUCSgyODMzMDAwMCkKKyNkZWZpbmUgUElYX0NMT0NLX0RJVklERVIJQ0xPQ0tfVE9fRElWIChQSVhfQ0xPQ0tfVEFSR0VULCBIQ0xLKQorI2RlZmluZSBQSVhfQ0xPQ0sJCShIQ0xLL1BJWF9DTE9DS19ESVZJREVSKQorCitzdGF0aWMgc3RydWN0IGNsY2RfcGFuZWwgbGNkX3BhbmVsID0geworCS5tb2RlCT0geworCQkubmFtZQkJPSAiMTAuNGluIFZHQSAoTFExMEQzNjgpIiwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gMjEsCisJCS5yaWdodF9tYXJnaW4JPSAxNSwKKwkJLnVwcGVyX21hcmdpbgk9IDM0LAorCQkubG93ZXJfbWFyZ2luCT0gNSwKKwkJLmhzeW5jX2xlbgk9IDk2LAorCQkudnN5bmNfbGVuCT0gMTYsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JSFMgfCBUSU0yX0lWUworCQkJfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEKKworCS8qIExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQgTENEIDEyLjEiIFNWR0EgLTEwICovCisJLyogU2hhcnAgUE4gTFExMjFTMURHNDEsIHdhcyBMUTEyMVMxREczMSAqLworCisvKiBOb3RlIHRoYXQgd2l0aCBhIDk5OTkzOTAwIEh6IEhDTEssIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoaXQgdGhlCisgKiB0YXJnZXQgY2xvY2sgZnJlcXVlbmN5IHJhbmdlIG9mIDM1TUh6IHRvIDQyTUh6LiAqLworCisvKiBJZiB0aGUgdGFyZ2V0IHBpeGVsIGNsb2NrIGlzIHN1YnN0YW50aWFsbHkgbG93ZXIgdGhhbiB0aGUgcGFuZWwKKyAqIHNwZWMsIHRoaXMgaXMgZG9uZSB0byBwcmV2ZW50IHRoZSBMQ0QgZGlzcGxheSBmcm9tIGdsaXRjaGluZyB3aGVuCisgKiB0aGUgQ1BVIGlzIHVuZGVyIGxvYWQuICBBIHBpeGVsIGNsb2NrIGhpZ2hlciB0aGFuIDI1TUh6CisgKiAoZW1waXJpY2FsbHkgZGV0ZXJtaW5lZCkgd2lsbCBjb21wZXRlIHdpdGggdGhlIENQVSBmb3IgYnVzIGN5Y2xlcworICogZm9yIHRoZSBFdGhlcm5ldCBjaGlwLiAgSG93ZXZlciwgZXZlbiBhIHBpeGVsIGNsb2NrIG9mIDEwTUh6CisgKiBjb21wZXRlcyB3aXRoIENvbXBhY3QgRmxhc2ggaW50ZXJmYWNlIGR1cmluZyBzb21lIG9wZXJhdGlvbnMKKyAqIChmZGlzaywgZTJmc2NrKS4gIEFuZCwgYXQgdGhhdCBzcGVlZCB0aGUgZGlzcGxheSBtYXkgaGF2ZSBhIHZpc2libGUKKyAqIGZsaWNrZXIuICovCisKKy8qIFRoZSBmdWxsIGhvcm96b250YWwgY3ljbGUgKFRoKSBpcyBjbG9jay84MzIvMTA1Ni8xMzk1LiAqLworCisjZGVmaW5lIFBJWF9DTE9DS19UQVJHRVQJKDIwMDAwMDAwKQorI2RlZmluZSBQSVhfQ0xPQ0tfRElWSURFUglDTE9DS19UT19ESVYgKFBJWF9DTE9DS19UQVJHRVQsIEhDTEspCisjZGVmaW5lIFBJWF9DTE9DSwkJKEhDTEsvUElYX0NMT0NLX0RJVklERVIpCisKK3N0YXRpYyBzdHJ1Y3QgY2xjZF9wYW5lbCBsY2RfcGFuZWwgPSB7CisJLm1vZGUJPSB7CisJCS5uYW1lCQk9ICIxMi4xaW4gU1ZHQSAoTFExMjFTMURHNDEpIiwKKwkJLnhyZXMJCT0gODAwLAorCQkueXJlcwkJPSA2MDAsCisJCS5waXhjbG9jawk9IFBJWF9DTE9DSywKKwkJLmxlZnRfbWFyZ2luCT0gODksCQkvLyBucy81Ly0vKDEvUElYX0NMT0NLKS0xMAorCQkucmlnaHRfbWFyZ2luCT0gMTA1Ni04MDAtODktMTI4LAorCQkudXBwZXJfbWFyZ2luCT0gMjMsCQkvLyBsaW5lLzIzLzIzLzIzCisJCS5sb3dlcl9tYXJnaW4JPSA0NCwKKwkJLmhzeW5jX2xlbgk9IDEyOCwJCS8vIGNsay8yLzEyOC8yMDAKKwkJLnZzeW5jX2xlbgk9IDQsCQkvLyBsaW5lLzIvNC82CisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCX0sCisJLndpZHRoCQk9IC0xLAorCS5oZWlnaHQJCT0gLTEsCisJLnRpbTIJCT0gVElNMl9JSFMgfCBUSU0yX0lWUworCQkJfCAoUElYX0NMT0NLX0RJVklERVIgLSAyKSwKKwkuY250bAkJPSBDTlRMX0xDRFRGVCB8IENOVExfV0FURVJNQVJLLAorCS5icHAJCT0gMTYsCit9OworCisjZW5kaWYKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfSElUQUNISQorCisJLyogSGl0YWNoaSovCisJLyogU3VibWl0dGVkIGJ5IE1pY2hlbGUgRGEgUm9sZCA8bWljaGVsZS5kYXJvbGRAZWNzcHJvamVjdC5jb20+ICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoNDkwMDAwMDApCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIkhpdGFjaGkgODAweDQ4MCIsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNDgwLAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDg4LAorCQkucmlnaHRfbWFyZ2luCT0gNDAsCisJCS51cHBlcl9tYXJnaW4JPSAzMiwKKwkJLmxvd2VyX21hcmdpbgk9IDExLAorCQkuaHN5bmNfbGVuCT0gMTI4LAorCQkudnN5bmNfbGVuCT0gMiwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lQQyB8IFRJTTJfSUhTIHwgVElNMl9JVlMKKwkJCXwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2VuZGlmCisKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX0FSTUNMQ0RfQVVPX0EwNzBWVzAxX1dJREUKKworCS8qIEFVIE9wdG90cm9uaWNzICBBMDcwVlcwMSA3LjAgV2lkZSBTY3JlZW4gY29sb3IgRGlzcGxheSovCisJLyogU3VibWl0dGVkIGJ5IE1pY2hlbGUgRGEgUm9sZCA8bWljaGVsZS5kYXJvbGRAZWNzcHJvamVjdC5jb20+ICovCisKKyNkZWZpbmUgUElYX0NMT0NLX1RBUkdFVAkoMTAwMDAwMDApCisjZGVmaW5lIFBJWF9DTE9DS19ESVZJREVSCUNMT0NLX1RPX0RJViAoUElYX0NMT0NLX1RBUkdFVCwgSENMSykKKyNkZWZpbmUgUElYX0NMT0NLCQkoSENMSy9QSVhfQ0xPQ0tfRElWSURFUikKKworc3RhdGljIHN0cnVjdCBjbGNkX3BhbmVsIGxjZF9wYW5lbCA9IHsKKwkubW9kZQk9IHsKKwkJLm5hbWUJCT0gIjcuMGluIFdpZGUgKEEwNzBWVzAxKSIsCisJCS54cmVzCQk9IDQ4MCwKKwkJLnlyZXMJCT0gMjM0LAorCQkucGl4Y2xvY2sJPSBQSVhfQ0xPQ0ssCisJCS5sZWZ0X21hcmdpbgk9IDMwLAorCQkucmlnaHRfbWFyZ2luCT0gMjUsCisJCS51cHBlcl9tYXJnaW4JPSAxNCwKKwkJLmxvd2VyX21hcmdpbgk9IDEyLAorCQkuaHN5bmNfbGVuCT0gMTAwLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJfSwKKwkud2lkdGgJCT0gLTEsCisJLmhlaWdodAkJPSAtMSwKKwkudGltMgkJPSBUSU0yX0lQQyB8IFRJTTJfSUhTIHwgVElNMl9JVlMKKwkJCXwgKFBJWF9DTE9DS19ESVZJREVSIC0gMiksCisJLmNudGwJCT0gQ05UTF9MQ0RURlQgfCBDTlRMX1dBVEVSTUFSSywKKwkuYnBwCQk9IDE2LAorfTsKKworI2VuZGlmCisKKyN1bmRlZiBOU19UT19DTE9DSworI3VuZGVmIENMT0NLX1RPX0RJVgorCisjZW5kaWYgIC8qIF9fTENEX1BBTkVMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3NzcC1jcGxkLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvc3NwLWNwbGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTA4MzAxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3NzcC1jcGxkLmMKQEAgLTAsMCArMSwzNDMgQEAKKy8qIGFyY2gvYXJtL21hY2gtbGg3YTQweC9zc3AtY3BsZC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwyMDA1IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTU1AvU1BJIGRyaXZlciBmb3IgdGhlIENhcmRFbmdpbmUgQ1BMRC4KKyAqCisgKi8KKworLyogTk9URVMKKyAgIC0tLS0tCisKKyAgIG8gKioqIFRoaXMgZHJpdmVyIGlzIGNyaWJiZWQgZnJvbSB0aGUgNzk1MnggaW1wbGVtZW50YXRpb24uCisJIFNvbWUgY29tbWVudHMgbWF5IG5vdCBhcHBseS4KKworICAgbyBUaGlzIGRyaXZlciBjb250YWlucyBzdWZmaWNpZW50IGxvZ2ljIHRvIGNvbnRyb2wgZWl0aGVyIHRoZQorICAgICBzZXJpYWwgRUVQUk9NcyBvciB0aGUgYXVkaW8gY29kZWMuICBJdCBpcyBpbmNsdWRlZCBpbiB0aGUga2VybmVsCisgICAgIHRvIHN1cHBvcnQgdGhlIGNvZGVjLiAgVGhlIEVFUFJPTXMgYXJlIHJlYWxseSB0aGUgcmVzcG9uc2liaWxpdHkKKyAgICAgb2YgdGhlIGJvb3QgbG9hZGVyIGFuZCBzaG91bGQgcHJvYmFibHkgYmUgbGVmdCBhbG9uZS4KKworICAgbyBUaGUgY29kZSBtdXN0IGJlIGF1Z21lbnRlZCB0byBjb3BlIHdpdGggbXVsdGlwbGUsIHNpbXVsdGFuZW91cworICAgICBjbGllbnRzLgorICAgICBvIFRoZSBhdWRpbyBjb2RlYyB3cml0ZXMgdG8gdGhlIGNvZGVjIGNoaXAgd2hlbmV2ZXIgcGxheWJhY2sKKyAgICAgICBzdGFydHMuCisgICAgIG8gVGhlIHRvdWNoc2NyZWVuIGRyaXZlciB3cml0ZXMgdG8gdGhlIGFkcyBjaGlwIGV2ZXJ5IHRpbWUgaXQKKyAgICAgICBzYW1wbGVzLgorICAgICBvIFRoZSBhdWRpbyBjb2RlYyBtdXN0IHdyaXRlIDE2IGJpdHMsIGJ1dCB0aGUgdG91Y2ggY2hpcCB3cml0ZXMKKyAgICAgICBhcmUgOCBiaXRzIGxvbmcuCisgICAgIG8gV2UgbmVlZCB0byBiZSBhYmxlIHRvIGtlZXAgdGhlc2UgY29uZmlndXJhdGlvbnMgc2VwYXJhdGUgd2hpbGUKKyAgICAgICBzaW11bHRhbmVvdXNseSBhY3RpdmUuCisKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisvLyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisvLyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvc3NwLmg+CisKKy8vI2RlZmluZSBUQUxLCisKKyNpZiBkZWZpbmVkIChUQUxLKQorI2RlZmluZSBQUklOVEsoZi4uLikJCXByaW50ayAoZikKKyNlbHNlCisjZGVmaW5lIFBSSU5USyhmLi4uKQkJZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2lmIGRlZmluZWQgKENPTkZJR19BUkNIX0xIN0E0MDApCisjIGRlZmluZSBDUExEX1NQSUQJCV9fUkVHUDE2KENQTEQwNl9WSVJUKSAvKiBTUEkgZGF0YSAqLworIyBkZWZpbmUgQ1BMRF9TUElDCQlfX1JFR1AxNihDUExEMDhfVklSVCkgLyogU1BJIGNvbnRyb2wgKi8KKyMgZGVmaW5lIENQTERfU1BJQ19DU19DT0RFQwkoMTw8MCkKKyMgZGVmaW5lIENQTERfU1BJQ19DU19UT1VDSAkoMTw8MSkKKyMgZGVmaW5lIENQTERfU1BJQ19XUklURQkoMDw8MikKKyMgZGVmaW5lIENQTERfU1BJQ19SRUFECQkoMTw8MikKKyMgZGVmaW5lIENQTERfU1BJQ19ET05FCQkoMTw8MykgLyogci9vICovCisjIGRlZmluZSBDUExEX1NQSUNfTE9BRAkJKDE8PDQpCisjIGRlZmluZSBDUExEX1NQSUNfU1RBUlQJKDE8PDQpCisjIGRlZmluZSBDUExEX1NQSUNfTE9BREVECSgxPDw1KSAvKiByL28gKi8KKyNlbmRpZgorCisjZGVmaW5lIENQTERfU1BJCQlfX1JFR1AxNihDUExEMEFfVklSVCkgLyogU1BJIG9wZXJhdGlvbiAqLworI2RlZmluZSBDUExEX1NQSV9DU19FRVBST00JKDE8PDMpCisjZGVmaW5lIENQTERfU1BJX1NDTEsJCSgxPDwyKQorI2RlZmluZSBDUExEX1NQSV9UWF9TSElGVAkoMSkKKyNkZWZpbmUgQ1BMRF9TUElfVFgJCSgxPDxDUExEX1NQSV9UWF9TSElGVCkKKyNkZWZpbmUgQ1BMRF9TUElfUlhfU0hJRlQJKDApCisjZGVmaW5lIENQTERfU1BJX1JYCQkoMTw8Q1BMRF9TUElfUlhfU0hJRlQpCisKKy8qICoqKiBGSVhNRTogdGhlc2UgdGltaW5nIHZhbHVlcyBhcmUgc3Vic3RhbnRpYWxseSBsYXJnZXIgdGhhbiB0aGUKKyAgICoqKiBjaGlwIHJlcXVpcmVzLiBXZSBtYXkgaW1wbGVtZW50IGFuIG5zbGVlcCAoKSBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgVF9TS0gJMQkJLyogQ2xvY2sgdGltZSBoaWdoICh1cykgKi8KKyNkZWZpbmUgVF9TS0wJMQkJLyogQ2xvY2sgdGltZSBsb3cgKHVzKSAqLworI2RlZmluZSBUX0NTCTEJCS8qIE1pbmltdW0gY2hpcCBzZWxlY3QgbG93IHRpbWUgKHVzKSAgKi8KKyNkZWZpbmUgVF9DU1MJMQkJLyogTWluaW11bSBjaGlwIHNlbGVjdCBzZXR1cCB0aW1lICh1cykgICovCisjZGVmaW5lIFRfRElTCTEJCS8qIERhdGEgc2V0dXAgdGltZSAodXMpICovCisKKwkgLyogRUVQUk9NIFNQSSBiaXRzICovCisjZGVmaW5lIFBfU1RBUlQJCSgxPDw5KQorI2RlZmluZSBQX1dSSVRFCQkoMTw8NykKKyNkZWZpbmUgUF9SRUFECQkoMjw8NykKKyNkZWZpbmUgUF9FUkFTRQkJKDM8PDcpCisjZGVmaW5lIFBfRVdEUwkJKDA8PDcpCisjZGVmaW5lIFBfV1JBTAkJKDA8PDcpCisjZGVmaW5lIFBfRVJBTAkJKDA8PDcpCisjZGVmaW5lIFBfRVdFTgkJKDA8PDcpCisjZGVmaW5lIFBfQV9FV0RTCSgwPDw1KQorI2RlZmluZSBQX0FfV1JBTAkoMTw8NSkKKyNkZWZpbmUgUF9BX0VSQUwJKDI8PDUpCisjZGVmaW5lIFBfQV9FV0VOCSgzPDw1KQorCitzdHJ1Y3Qgc3NwX2NvbmZpZ3VyYXRpb24geworCWludCBkZXZpY2U7CisJaW50IG1vZGU7CisJaW50IHNwZWVkOworCWludCBmcmFtZV9zaXplX3dyaXRlOworCWludCBmcmFtZV9zaXplX3JlYWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHNzcF9jb25maWd1cmF0aW9uIHNzcF9jb25maWd1cmF0aW9uOworc3RhdGljIHNwaW5sb2NrX3Qgc3NwX2xvY2s7CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9jcyAodm9pZCkKK3sKKwlzd2l0Y2ggKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSkgeworCWNhc2UgREVWSUNFX0VFUFJPTToKKwkJQ1BMRF9TUEkgfD0gQ1BMRF9TUElfQ1NfRUVQUk9NOworCQlicmVhazsKKwl9CisJdWRlbGF5IChUX0NTUyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfY3MgKHZvaWQpCit7CisJc3dpdGNoIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UpIHsKKwljYXNlIERFVklDRV9FRVBST006CisJCUNQTERfU1BJICY9IH5DUExEX1NQSV9DU19FRVBST007CisJCWJyZWFrOworCX0KKwl1ZGVsYXkgKFRfQ1MpOworfQorCitzdGF0aWMgdm9pZCBwdWxzZV9jbG9jayAodm9pZCkKK3sKKwlDUExEX1NQSSB8PSAgQ1BMRF9TUElfU0NMSzsKKwl1ZGVsYXkgKFRfU0tIKTsKKwlDUExEX1NQSSAmPSB+Q1BMRF9TUElfU0NMSzsKKwl1ZGVsYXkgKFRfU0tMKTsKK30KKworCisvKiBleGVjdXRlX3NwaV9jb21tYW5kCisKKyAgIHNlbmRzIGFuIHNwaSBjb21tYW5kIHRvIGEgZGV2aWNlLiAgSXQgZmlyc3Qgc2VuZHMgY3dyaXRlIGJpdHMgZnJvbQorICAgdi4gIElmIGNyZWFkIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvIGl0IHdpbGwgcmVhZCBjcmVhZCBiaXRzCisgICAoZGlzY2FyZGluZyB0aGUgbGVhZGluZyAwIGJpdCkgYW5kIHJldHVybiB0aGVtLiAgSWYgY3JlYWQgaXMgbGVzcworICAgdGhhbiB6ZXJvIGl0IHdpbGwgY2hlY2sgZm9yIGNvbXBsZXRldGlvbiBzdGF0dXMgYW5kIHJldHVybiAwIG9uCisgICBzdWNjZXNzIG9yIC0xIG9uIHRpbWVvdXQuICBJZiBjcmVhZCBpcyB6ZXJvIGl0IGRvZXMgbm90aGluZyBvdGhlcgorICAgdGhhbiBzZW5kaW5nIHRoZSBjb21tYW5kLgorCisgICBPbiB0aGUgTFBEN0E0MDAsIHdlIGNhbiBvbmx5IHJlYWQgb3Igd3JpdGUgbXVsdGlwbGVzIG9mIDggYml0cyBvbgorICAgdGhlIGNvZGVjIGFuZCB0aGUgdG91Y2ggc2NyZWVuIGRldmljZS4gIEhlcmUsIHdlIHJvdW5kIHVwLgorCisqLworCitzdGF0aWMgaW50IGV4ZWN1dGVfc3BpX2NvbW1hbmQgKGludCB2LCBpbnQgY3dyaXRlLCBpbnQgY3JlYWQpCit7CisJdW5zaWduZWQgbG9uZyBsID0gMDsKKworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorCS8qIFRoZSBjb2RlYyBhbmQgdG91Y2ggZGV2aWNlcyBjYW5ub3QgYmUgYml0LWJhbmdlZC4gIEluc3RlYWQsCisJICogdGhlIENQTEQgcHJvdmlkZXMgYW4gZWlnaHQtYml0IHNoaWZ0IHJlZ2lzdGVyIGFuZCBhIGNydWRlCisJICogaW50ZXJmYWNlLiAgKi8KKwlpZiAoICAgc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9DT0RFQworCSAgICB8fCBzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX1RPVUNIKSB7CisJCWludCBzZWxlY3QgPSAwOworCisJCVBSSU5USyAoInNwaSglZCAlZC4lZCkgMHglMDR4IiwKKwkJCXNzcF9jb25maWd1cmF0aW9uLmRldmljZSwgY3dyaXRlLCBjcmVhZCwKKwkJCXYpOworI2lmIGRlZmluZWQgKFRBTEspCisJCWlmIChzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UgPT0gREVWSUNFX0NPREVDKQorCQkJUFJJTlRLICgiIDB4JTAzeCAtPiAlMmQiLCB2ICYgMHgxZmYsICh2ID4+IDkpICYgMHg3Zik7CisjZW5kaWYKKwkJUFJJTlRLICgiXG4iKTsKKworCQlpZiAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9DT0RFQykKKwkJCXNlbGVjdCA9IENQTERfU1BJQ19DU19DT0RFQzsKKwkJaWYgKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfVE9VQ0gpCisJCQlzZWxlY3QgPSBDUExEX1NQSUNfQ1NfVE9VQ0g7CisJCWlmIChjd3JpdGUpIHsKKwkJCWZvciAoY3dyaXRlID0gKGN3cml0ZSArIDcpLzg7IGN3cml0ZS0tID4gMDsgKSB7CisJCQkJQ1BMRF9TUElEID0gKHYgPj4gKDgqY3dyaXRlKSkgJiAweGZmOworCQkJCUNQTERfU1BJQyA9IHNlbGVjdCB8IENQTERfU1BJQ19MT0FEOworCQkJCXdoaWxlICghKENQTERfU1BJQyAmIENQTERfU1BJQ19MT0FERUQpKQorCQkJCQk7CisJCQkJQ1BMRF9TUElDID0gc2VsZWN0OworCQkJCXdoaWxlICghKENQTERfU1BJQyAmIENQTERfU1BJQ19ET05FKSkKKwkJCQkJOworCQkJfQorCQkJdiA9IDA7CisJCX0KKwkJaWYgKGNyZWFkKSB7CisJCQltZGVsYXkgKDIpOwkvKiAqKiogRklYTUU6IHJlcXVpcmVkIGJ5IGFkczc4NDM/ICovCisJCQl2ID0gMDsKKwkJCWZvciAoY3JlYWQgPSAoY3JlYWQgKyA3KS84OyBjcmVhZC0tID4gMDspIHsKKwkJCQlDUExEX1NQSUQgPSAwOworCQkJCUNQTERfU1BJQyA9IHNlbGVjdCB8IENQTERfU1BJQ19SRUFECisJCQkJCXwgQ1BMRF9TUElDX1NUQVJUOworCQkJCXdoaWxlICghKENQTERfU1BJQyAmIENQTERfU1BJQ19MT0FERUQpKQorCQkJCQk7CisJCQkJQ1BMRF9TUElDID0gc2VsZWN0IHwgQ1BMRF9TUElDX1JFQUQ7CisJCQkJd2hpbGUgKCEoQ1BMRF9TUElDICYgQ1BMRF9TUElDX0RPTkUpKQorCQkJCQk7CisJCQkJdiA9ICh2IDw8IDgpIHwgQ1BMRF9TUElEOworCQkJfQorCQl9CisJCXJldHVybiB2OworCX0KKyNlbmRpZgorCisJUFJJTlRLICgic3BpKCVkKSAweCUwNHggLT4gMHgleFxyXG4iLCBzc3BfY29uZmlndXJhdGlvbi5kZXZpY2UsCisJCXYgJiAweDFmZiwgKHYgPj4gOSkgJiAweDdmKTsKKworCWVuYWJsZV9jcyAoKTsKKworCXYgPDw9IENQTERfU1BJX1RYX1NISUZUOyAvKiBDb3JyZWN0aW9uIGZvciBwb3NpdGlvbiBvZiBTUElfVFggYml0ICovCisJd2hpbGUgKGN3cml0ZS0tKSB7CisJCUNQTERfU1BJCisJCQk9IChDUExEX1NQSSAmIH5DUExEX1NQSV9UWCkKKwkJCXwgKCh2ID4+IGN3cml0ZSkgJiBDUExEX1NQSV9UWCk7CisJCXVkZWxheSAoVF9ESVMpOworCQlwdWxzZV9jbG9jayAoKTsKKwl9CisKKwlpZiAoY3JlYWQgPCAwKSB7CisJCWludCBkZWxheSA9IDEwOworCQlkaXNhYmxlX2NzICgpOworCQl1ZGVsYXkgKDEpOworCQllbmFibGVfY3MgKCk7CisKKwkJbCA9IC0xOworCQlkbyB7CisJCQlpZiAoQ1BMRF9TUEkgJiBDUExEX1NQSV9SWCkgeworCQkJCWwgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9IHdoaWxlICh1ZGVsYXkgKDEpLCAtLWRlbGF5KTsKKwl9CisJZWxzZQorCS8qIFdlIHB1bHNlIHRoZSBjbG9jayBiZWZvcmUgdGhlIGRhdGEgdG8gc2tpcCB0aGUgbGVhZGluZyB6ZXJvLiAqLworCQl3aGlsZSAoY3JlYWQtLSA+IDApIHsKKwkJCXB1bHNlX2Nsb2NrICgpOworCQkJbCA9IChsPDwxKQorCQkJCXwgKCgoQ1BMRF9TUEkgJiBDUExEX1NQSV9SWCkKKwkJCQkgICAgPj4gQ1BMRF9TUElfUlhfU0hJRlQpICYgMHgxKTsKKwkJfQorCisJZGlzYWJsZV9jcyAoKTsKKwlyZXR1cm4gbDsKK30KKworc3RhdGljIGludCBzc3BfaW5pdCAodm9pZCkKK3sKKwlzcGluX2xvY2tfaW5pdCAoJnNzcF9sb2NrKTsKKwltZW1zZXQgKCZzc3BfY29uZmlndXJhdGlvbiwgMCwgc2l6ZW9mIChzc3BfY29uZmlndXJhdGlvbikpOworCXJldHVybiAwOworfQorCisKKy8qIHNzcF9jaGlwX3NlbGVjdAorCisgICBkcm9wcyB0aGUgY2hpcCBzZWxlY3QgbGluZSBmb3IgdGhlIENQTEQgc2hpZnQtcmVnaXN0ZXIgY29udHJvbGxlZAorICAgZGV2aWNlcy4gIEl0IGRvZXNuJ3QgZW5hYmxlIGNoaXAKKworKi8KKworc3RhdGljIHZvaWQgc3NwX2NoaXBfc2VsZWN0IChpbnQgZW5hYmxlKQoreworI2lmIGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDAwKQorCWludCBzZWxlY3Q7CisKKwlpZiAoc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlID09IERFVklDRV9DT0RFQykKKwkJc2VsZWN0ID0gQ1BMRF9TUElDX0NTX0NPREVDOworCWVsc2UgaWYgKHNzcF9jb25maWd1cmF0aW9uLmRldmljZSA9PSBERVZJQ0VfVE9VQ0gpCisJCXNlbGVjdCA9IENQTERfU1BJQ19DU19UT1VDSDsKKwllbHNlCisJCXJldHVybjsKKworCWlmIChlbmFibGUpCisJCUNQTERfU1BJQyA9IHNlbGVjdDsKKwllbHNlCisJCUNQTERfU1BJQyA9IDA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc3NwX2FjcXVpcmUgKHZvaWQpCit7CisJc3Bpbl9sb2NrICgmc3NwX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBzc3BfcmVsZWFzZSAodm9pZCkKK3sKKwlzc3BfY2hpcF9zZWxlY3QgKDApOwkvKiBqdXN0IGluIGNhc2UgKi8KKwlzcGluX3VubG9jayAoJnNzcF9sb2NrKTsKK30KKworc3RhdGljIGludCBzc3BfY29uZmlndXJlIChpbnQgZGV2aWNlLCBpbnQgbW9kZSwgaW50IHNwZWVkLAorCQkJICAgaW50IGZyYW1lX3NpemVfd3JpdGUsIGludCBmcmFtZV9zaXplX3JlYWQpCit7CisJc3NwX2NvbmZpZ3VyYXRpb24uZGV2aWNlCQk9IGRldmljZTsKKwlzc3BfY29uZmlndXJhdGlvbi5tb2RlCQkJPSBtb2RlOworCXNzcF9jb25maWd1cmF0aW9uLnNwZWVkCQkJPSBzcGVlZDsKKwlzc3BfY29uZmlndXJhdGlvbi5mcmFtZV9zaXplX3dyaXRlCT0gZnJhbWVfc2l6ZV93cml0ZTsKKwlzc3BfY29uZmlndXJhdGlvbi5mcmFtZV9zaXplX3JlYWQJPSBmcmFtZV9zaXplX3JlYWQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzc3BfcmVhZCAodm9pZCkKK3sKKwlyZXR1cm4gZXhlY3V0ZV9zcGlfY29tbWFuZCAoMCwgMCwgc3NwX2NvbmZpZ3VyYXRpb24uZnJhbWVfc2l6ZV9yZWFkKTsKK30KKworc3RhdGljIGludCBzc3Bfd3JpdGUgKHUxNiBkYXRhKQoreworCWV4ZWN1dGVfc3BpX2NvbW1hbmQgKGRhdGEsIHNzcF9jb25maWd1cmF0aW9uLmZyYW1lX3NpemVfd3JpdGUsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzcF93cml0ZV9yZWFkICh1MTYgZGF0YSkKK3sKKwlyZXR1cm4gZXhlY3V0ZV9zcGlfY29tbWFuZCAoZGF0YSwgc3NwX2NvbmZpZ3VyYXRpb24uZnJhbWVfc2l6ZV93cml0ZSwKKwkJCQkgICAgc3NwX2NvbmZpZ3VyYXRpb24uZnJhbWVfc2l6ZV9yZWFkKTsKK30KKworc3RydWN0IHNzcF9kcml2ZXIgbGg3YTQweF9jcGxkX3NzcF9kcml2ZXIgPSB7CisJLmluaXQJCT0gc3NwX2luaXQsCisJLmFjcXVpcmUJPSBzc3BfYWNxdWlyZSwKKwkucmVsZWFzZQk9IHNzcF9yZWxlYXNlLAorCS5jb25maWd1cmUJPSBzc3BfY29uZmlndXJlLAorCS5jaGlwX3NlbGVjdAk9IHNzcF9jaGlwX3NlbGVjdCwKKwkucmVhZAkJPSBzc3BfcmVhZCwKKwkud3JpdGUJCT0gc3NwX3dyaXRlLAorCS53cml0ZV9yZWFkCT0gc3NwX3dyaXRlX3JlYWQsCit9OworCisKK01PRFVMRV9BVVRIT1IoIk1hcmMgU2luZ2VyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxQRDdBNDBYIENQTEQgU1BJIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKaW5kZXggYmUzNzdlMy4uZWY5YWYzNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L3RpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvdGltZS5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogIGFyY2gvYXJtL21hY2gtbGg3YTQweC90aW1lLmMKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IExvZ2ljIFByb2R1Y3QgRGV2ZWxvcG1lbnQKQEAgLTU3LDcgKzU3LDcgQEAKIAkuaGFuZGxlcgk9IGxoN2E0MHhfdGltZXJfaW50ZXJydXB0LAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGxoN2E0MHhfdGltZXJfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGxoN2E0MHhfdGltZXJfaW5pdCAodm9pZCkKIHsKIAkJCQkvKiBTdG9wL2Rpc2FibGUgYWxsIHRpbWVycyAqLwogCVRJTUVSX0NPTlRST0wxID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDU3Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTIgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKK29iai15CQkJOj0gY29yZS5vIGlycS5vIHRpbWUubyBjbG9jay5vIGdwaW8ubyBzZXJpYWwubyBkbWEubworb2JqLW0JCQk6PQorb2JqLW4JCQk6PQorb2JqLQkJCTo9CisKKyMgUG93ZXIgTWFuYWdlbWVudAorb2JqLSQoQ09ORklHX1BNKSArPSBwbS5vIHNsZWVwLm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGM3MTE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSw0IEBACisgICB6cmVsYWRkci15CQk6PSAweDgwMDA4MDAwCitwYXJhbXNfcGh5cy15CQk6PSAweDgwMDAwMTAwCitpbml0cmRfcGh5cy15CQk6PSAweDgwODAwMDAwCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjg1YjIyZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jCkBAIC0wLDAgKzEsMTAxMCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5jCisgKgorICogQ2xvY2sgY29udHJvbCBkcml2ZXIgZm9yIFBOWDQwMDgKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqIEdlbmVyaWMgY2xvY2sgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHBhcnRpYWxseSBiYXNlZCBvbjoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAvY2xvY2suYworICoKKyAqIDIwMDUtMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+CisjaW5jbHVkZSAiY2xvY2suaCIKKworLypmb3J3YXJkIGRlY2xhcmF0aW9uKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhjbGtfY2s7CitzdGF0aWMgc3RydWN0IGNsayBja18xTUh6Oworc3RhdGljIHN0cnVjdCBjbGsgY2tfMTNNSHo7CitzdGF0aWMgc3RydWN0IGNsayBja19wbGwxOworc3RhdGljIGludCBsb2NhbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsb2NrX2xvY2sodm9pZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xvY2tfdW5sb2NrKHZvaWQpCit7CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCitzdGF0aWMgdm9pZCBwcm9wYWdhdGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJc3RydWN0IGNsayAqdG1wX2NsazsKKworCXRtcF9jbGsgPSBjbGs7CisJd2hpbGUgKHRtcF9jbGstPnByb3BhZ2F0ZV9uZXh0KSB7CisJCXRtcF9jbGsgPSB0bXBfY2xrLT5wcm9wYWdhdGVfbmV4dDsKKwkJbG9jYWxfc2V0X3JhdGUodG1wX2NsaywgdG1wX2Nsay0+dXNlcl9yYXRlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPmVuYWJsZV9yZWcpCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpICYKKwkJCSAgICAgfigxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KSwgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5lbmFibGVfcmVnKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKSB8CisJCQkgICAgICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KSwgY2xrLT5lbmFibGVfcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsa19yZWdfZGlzYWJsZTEoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPmVuYWJsZV9yZWcxKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnMSkgJgorCQkJICAgICB+KDEgPDwgY2xrLT5lbmFibGVfc2hpZnQxKSwgY2xrLT5lbmFibGVfcmVnMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGtfcmVnX2VuYWJsZTEoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPmVuYWJsZV9yZWcxKQorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnMSkgfAorCQkJICAgICAoMSA8PCBjbGstPmVuYWJsZV9zaGlmdDEpLCBjbGstPmVuYWJsZV9yZWcxKTsKK30KKworc3RhdGljIGludCBjbGtfd2FpdF9mb3JfcGxsX2xvY2soc3RydWN0IGNsayAqY2xrKQoreworCWludCBpOworCWkgPSAwOworCXdoaWxlIChpKysgPCAweEZGRiAmJiAhKF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKSAmIDEpKSA7CS8qd2FpdCBmb3IgUExMIHRvIGxvY2sgKi8KKworCWlmICghKF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKSAmIDEpKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzIEVSUk9SOiBmYWlsZWQgdG8gbG9jaywgc2NhbGUgcmVnIGRhdGE6ICV4XG4iLAorCQkgICAgICAgY2xrLT5uYW1lLCBfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZykpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN3aXRjaF90b19kaXJ0eV8xM21oeihzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGk7CisJaW50IHJldDsKKwl1MzIgdG1wX3JlZzsKKworCXJldCA9IDA7CisKKwlpZiAoIWNsay0+cmF0ZSkKKwkJY2xrX3JlZ19lbmFibGUxKGNsayk7CisKKwl0bXBfcmVnID0gX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZyk7CisJLyppZiAxM01oeiBjbG9jayBzZWxlY3RlZCwgc2VsZWN0IDEzJ01IeiAoZGlydHkpIHNvdXJjZSBmcm9tIE9TQyAqLworCWlmICghKHRtcF9yZWcgJiAxKSkgeworCQl0bXBfcmVnIHw9ICgxIDw8IDEpOwkvKiBUcmlnZ2VyIHN3aXRjaCB0byAxMydNSHogKGRpcnR5KSBjbG9jayAqLworCQlfX3Jhd193cml0ZWwodG1wX3JlZywgY2xrLT5wYXJlbnRfc3dpdGNoX3JlZyk7CisJCWkgPSAwOworCQl3aGlsZSAoaSsrIDwgMHhGRkYgJiYgIShfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKSAmIDEpKSA7CS8qd2FpdCBmb3IgMTMnTUh6IHNlbGVjdGlvbiBzdGF0dXMgKi8KKworCQlpZiAoIShfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKSAmIDEpKSB7CisJCQlwcmludGsoS0VSTl9FUlIKKwkJCSAgICAgICAiJXMgRVJST1I6IGZhaWxlZCB0byBzZWxlY3QgMTMnTUh6LCBwYXJlbnQgc3cgcmVnIGRhdGE6ICV4XG4iLAorCQkJICAgICAgIGNsay0+bmFtZSwgX19yYXdfcmVhZGwoY2xrLT5wYXJlbnRfc3dpdGNoX3JlZykpOworCQkJcmV0ID0gLTE7CisJCX0KKwl9CisKKwlpZiAoIWNsay0+cmF0ZSkKKwkJY2xrX3JlZ19kaXNhYmxlMShjbGspOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzd2l0Y2hfdG9fY2xlYW5fMTNtaHooc3RydWN0IGNsayAqY2xrKQoreworCWludCBpOworCWludCByZXQ7CisJdTMyIHRtcF9yZWc7CisKKwlyZXQgPSAwOworCisJaWYgKCFjbGstPnJhdGUpCisJCWNsa19yZWdfZW5hYmxlMShjbGspOworCisJdG1wX3JlZyA9IF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpOworCS8qaWYgMTMnTWh6IGNsb2NrIHNlbGVjdGVkLCBzZWxlY3QgMTNNSHogKGNsZWFuKSBzb3VyY2UgZnJvbSBPU0MgKi8KKwlpZiAodG1wX3JlZyAmIDEpIHsKKwkJdG1wX3JlZyAmPSB+KDEgPDwgMSk7CS8qIFRyaWdnZXIgc3dpdGNoIHRvIDEzTUh6IChjbGVhbikgY2xvY2sgKi8KKwkJX19yYXdfd3JpdGVsKHRtcF9yZWcsIGNsay0+cGFyZW50X3N3aXRjaF9yZWcpOworCQlpID0gMDsKKwkJd2hpbGUgKGkrKyA8IDB4RkZGICYmIChfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKSAmIDEpKSA7CS8qd2FpdCBmb3IgMTNNSHogc2VsZWN0aW9uIHN0YXR1cyAqLworCisJCWlmIChfX3Jhd19yZWFkbChjbGstPnBhcmVudF9zd2l0Y2hfcmVnKSAmIDEpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlcyBFUlJPUjogZmFpbGVkIHRvIHNlbGVjdCAxM01IeiwgcGFyZW50IHN3IHJlZyBkYXRhOiAleFxuIiwKKwkJCSAgICAgICBjbGstPm5hbWUsIF9fcmF3X3JlYWRsKGNsay0+cGFyZW50X3N3aXRjaF9yZWcpKTsKKwkJCXJldCA9IC0xOworCQl9CisJfQorCisJaWYgKCFjbGstPnJhdGUpCisJCWNsa19yZWdfZGlzYWJsZTEoY2xrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0XzEzTUh6X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWlmIChwYXJlbnQgPT0gJmNrXzEzTUh6KQorCQlyZXQgPSBzd2l0Y2hfdG9fY2xlYW5fMTNtaHooY2xrKTsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNrX3BsbDEpCisJCXJldCA9IHN3aXRjaF90b19kaXJ0eV8xM21oeihjbGspOworCisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBQTEwxNjBfTUlOX0ZDQ08gMTU2MDAwCisjZGVmaW5lIFBMTDE2MF9NQVhfRkNDTyAzMjAwMDAKKworLyoKKyAqIENhbGN1bGF0ZSBwbGwxNjAgc2V0dGluZ3MuCisgKiBQb3NzaWJsZSBpbnB1dDogdXAgdG8gMzIwTUh6IHdpdGggc3RlcCBvZiBjbGstPnBhcmVudC0+cmF0ZS4KKyAqIEluIFBOWDQwMDggcGFyZW50IHJhdGUgZm9yIHBsbDE2MHMgbWF5IGJlIGVpdGhlciAxIG9yIDEzTUh6LgorICogSWdub3JlZCBwYXRoczogImZlZWRiYWNrIiAoYml0IDEzIHNldCksICJkaXYtYnktTiIuCisgKiBTZXR0aW5nIEFSTSBQTEw0IHJhdGUgdG8gMCB3aWxsIHB1dCBDUFUgaW50byBkaXJlY3QgcnVuIG1vZGUuCisgKiBTZXR0aW5nIFBMTDUgYW5kIFBMTDMgcmF0ZSB0byAwIHdpbGwgZGlzYWJsZSBVU0IgYW5kIERTUCBjbG9jayBpbnB1dC4KKyAqIFBsZWFzZSByZWZlciB0byBQTlg0MDA4IElDIG1hbnVhbCBmb3IgZGV0YWlscy4KKyAqLworCitzdGF0aWMgaW50IHBsbDE2MF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXUzMiB0bXBfcmVnLCB0bXBfbSwgdG1wXzJwLCBpOworCXUzMiBwYXJlbnRfcmF0ZTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXBhcmVudF9yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CisKKwlpZiAoIXBhcmVudF9yYXRlKQorCQlnb3RvIG91dDsKKworCS8qIHNldCBkaXJlY3QgcnVuIGZvciBBUk0gb3IgZGlzYWJsZSBvdXRwdXQgZm9yIG90aGVycyAgKi8KKwljbGtfcmVnX2Rpc2FibGUoY2xrKTsKKworCS8qIGRpc2FibGUgc291cmNlIGlucHV0IGFzIHdlbGwgKGlnbm9yZWQgZm9yIEFSTSkgKi8KKwljbGtfcmVnX2Rpc2FibGUxKGNsayk7CisKKwl0bXBfcmVnID0gX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpOworCXRtcF9yZWcgJj0gfjB4MWZmZmY7CS8qY2xlYXIgYWxsIHNldHRpbmdzLCBwb3dlciBkb3duICovCisJX19yYXdfd3JpdGVsKHRtcF9yZWcsIGNsay0+c2NhbGVfcmVnKTsKKworCXJhdGUgLT0gcmF0ZSAlIHBhcmVudF9yYXRlOwkvKnJvdW5kIGRvd24gdGhlIGlucHV0ICovCisKKwlpZiAocmF0ZSA+IFBMTDE2MF9NQVhfRkNDTykKKwkJcmF0ZSA9IFBMTDE2MF9NQVhfRkNDTzsKKworCWlmICghcmF0ZSkgeworCQljbGstPnJhdGUgPSAwOworCQlyZXQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwljbGtfcmVnX2VuYWJsZTEoY2xrKTsKKwl0bXBfcmVnID0gX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpOworCisJaWYgKHJhdGUgPT0gcGFyZW50X3JhdGUpIHsKKwkJLyplbnRlciBkaXJlY3QgYnlwYXNzIG1vZGUgKi8KKwkJdG1wX3JlZyB8PSAoKDEgPDwgMTQpIHwgKDEgPDwgMTUpKTsKKwkJX19yYXdfd3JpdGVsKHRtcF9yZWcsIGNsay0+c2NhbGVfcmVnKTsKKwkJY2xrLT5yYXRlID0gcGFyZW50X3JhdGU7CisJCWNsa19yZWdfZW5hYmxlKGNsayk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCWkgPSAwOworCWZvciAodG1wXzJwID0gMTsgdG1wXzJwIDwgMTY7IHRtcF8ycCA8PD0gMSkgeworCQlpZiAocmF0ZSAqIHRtcF8ycCA+PSBQTEwxNjBfTUlOX0ZDQ08pCisJCQlicmVhazsKKwkJaSsrOworCX0KKworCWlmICh0bXBfMnAgPiAxKQorCQl0bXBfcmVnIHw9ICgoaSAtIDEpIDw8IDExKTsKKwllbHNlCisJCXRtcF9yZWcgfD0gKDEgPDwgMTQpOwkvKmRpcmVjdCBtb2RlLCBubyBkaXZpZGUgKi8KKworCXRtcF9tID0gcmF0ZSAqIHRtcF8ycDsKKwl0bXBfbSAvPSBwYXJlbnRfcmF0ZTsKKworCXRtcF9yZWcgfD0gKHRtcF9tIC0gMSkgPDwgMTsJLypjYWxjdWxhdGUgTSAqLworCXRtcF9yZWcgfD0gKDEgPDwgMTYpOwkvKnBvd2VyIHVwIFBMTCAqLworCV9fcmF3X3dyaXRlbCh0bXBfcmVnLCBjbGstPnNjYWxlX3JlZyk7CisKKwlpZiAoY2xrX3dhaXRfZm9yX3BsbF9sb2NrKGNsaykgPCAwKSB7CisJCWNsa19yZWdfZGlzYWJsZShjbGspOworCQljbGtfcmVnX2Rpc2FibGUxKGNsayk7CisKKwkJdG1wX3JlZyA9IF9fcmF3X3JlYWRsKGNsay0+c2NhbGVfcmVnKTsKKwkJdG1wX3JlZyAmPSB+MHgxZmZmZjsJLypjbGVhciBhbGwgc2V0dGluZ3MsIHBvd2VyIGRvd24gKi8KKwkJX19yYXdfd3JpdGVsKHRtcF9yZWcsIGNsay0+c2NhbGVfcmVnKTsKKwkJY2xrLT5yYXRlID0gMDsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBvdXQ7CisJfQorCisJY2xrLT5yYXRlID0gKHRtcF9tICogcGFyZW50X3JhdGUpIC8gdG1wXzJwOworCisJaWYgKGNsay0+ZmxhZ3MgJiBSQVRFX1BST1BBR0FURVMpCisJCXByb3BhZ2F0ZV9yYXRlKGNsayk7CisKKwljbGtfcmVnX2VuYWJsZShjbGspOworCXJldCA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKmNvbmZpZ3VyZSBQRVJfQ0xLKi8KK3N0YXRpYyBpbnQgcGVyX2Nsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXUzMiB0bXA7CisKKwl0bXAgPSBfX3Jhd19yZWFkbChjbGstPnNjYWxlX3JlZyk7CisJdG1wICY9IH4oMHgxZiA8PCAyKTsKKwl0bXAgfD0gKChjbGstPnBhcmVudC0+cmF0ZSAvIGNsay0+cmF0ZSkgLSAxKSA8PCAyOworCV9fcmF3X3dyaXRlbCh0bXAsIGNsay0+c2NhbGVfcmVnKTsKKwljbGstPnJhdGUgPSByYXRlOworCXJldHVybiAwOworfQorCisvKmNvbmZpZ3VyZSBIQ0xLKi8KK3N0YXRpYyBpbnQgaGNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCXUzMiB0bXA7CisJdG1wID0gX19yYXdfcmVhZGwoY2xrLT5zY2FsZV9yZWcpOworCXRtcCA9IHRtcCAmIH4weDM7CisJc3dpdGNoIChyYXRlKSB7CisJY2FzZSAxOgorCQlicmVhazsKKwljYXNlIDI6CisJCXRtcCB8PSAxOworCQlicmVhazsKKwljYXNlIDQ6CisJCXRtcCB8PSAyOworCQlicmVhazsKKwl9CisKKwlfX3Jhd193cml0ZWwodG1wLCBjbGstPnNjYWxlX3JlZyk7CisJY2xrLT5yYXRlID0gcmF0ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBoY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlzd2l0Y2ggKHJhdGUpIHsKKwljYXNlIDE6CisJY2FzZSA0OgorCQlyZXR1cm4gcmF0ZTsKKwl9CisJcmV0dXJuIDI7Cit9CisKK3N0YXRpYyB1MzIgcGVyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJcmV0dXJuIENMS19SQVRFXzEzTUhaOworfQorCitzdGF0aWMgaW50IG9uX29mZl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCWlmIChyYXRlKSB7CisJCWNsa19yZWdfZW5hYmxlKGNsayk7CisJCWNsay0+cmF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJY2xrX3JlZ19kaXNhYmxlKGNsayk7CisJCWNsay0+cmF0ZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9uX29mZl9pbnZfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlpZiAocmF0ZSkgeworCQljbGtfcmVnX2Rpc2FibGUoY2xrKTsJLyplbmFibGUgYml0IGlzIGludmVydGVkICovCisJCWNsay0+cmF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwkJY2xrLT5yYXRlID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgb25fb2ZmX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlyZXR1cm4gKHJhdGUgPyAxIDogMCk7Cit9CisKK3N0YXRpYyB1MzIgcGxsNF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJaWYgKHJhdGUgPiBDTEtfUkFURV8yMDhNSFopCisJCXJhdGUgPSBDTEtfUkFURV8yMDhNSFo7CisJaWYgKHJhdGUgPT0gQ0xLX1JBVEVfMjA4TUhaICYmIGhjbGtfY2sudXNlcl9yYXRlID09IDEpCisJCXJhdGUgPSBDTEtfUkFURV8yMDhNSFogLSBDTEtfUkFURV8xM01IWjsKKwlyZXR1cm4gKHJhdGUgLSAocmF0ZSAlIChoY2xrX2NrLnVzZXJfcmF0ZSAqIENMS19SQVRFXzEzTUhaKSkpOworfQorCitzdGF0aWMgdTMyIHBsbDNfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCWlmIChyYXRlID4gQ0xLX1JBVEVfMjA4TUhaKQorCQlyYXRlID0gQ0xLX1JBVEVfMjA4TUhaOworCXJldHVybiAocmF0ZSAtIHJhdGUgJSBDTEtfUkFURV8xM01IWik7Cit9CisKK3N0YXRpYyB1MzIgcGxsNV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJcmV0dXJuIChyYXRlID8gQ0xLX1JBVEVfNDhNSFogOiAwKTsKK30KKworc3RhdGljIHUzMiBja18xM01Iel9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdTMyIHJhdGUpCit7CisJcmV0dXJuIChyYXRlID8gQ0xLX1JBVEVfMTNNSFogOiAwKTsKK30KKworc3RhdGljIGludCBja18xM01Iel9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHUzMiByYXRlKQoreworCWlmIChyYXRlKSB7CisJCWNsa19yZWdfZGlzYWJsZShjbGspOwkvKmVuYWJsZSBiaXQgaXMgaW52ZXJ0ZWQgKi8KKwkJdWRlbGF5KDUwMCk7CisJCWNsay0+cmF0ZSA9IENMS19SQVRFXzEzTUhaOworCQlja18xTUh6LnJhdGUgPSBDTEtfUkFURV8xTUhaOworCX0gZWxzZSB7CisJCWNsa19yZWdfZW5hYmxlKGNsayk7CisJCWNsay0+cmF0ZSA9IDA7CisJCWNrXzFNSHoucmF0ZSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBsbDFfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKyNpZiAwIC8qIGRvZXNuJ3Qgd29yayBvbiBzb21lIGJvYXJkcywgcHJvYmFibHkgYSBIVyBCVUcgKi8KKwlpZiAocmF0ZSkgeworCQljbGtfcmVnX2Rpc2FibGUoY2xrKTsJLyplbmFibGUgYml0IGlzIGludmVydGVkICovCisJCWlmICghY2xrX3dhaXRfZm9yX3BsbF9sb2NrKGNsaykpIHsKKwkJCWNsay0+cmF0ZSA9IENMS19SQVRFXzEzTUhaOworCQl9IGVsc2UgeworCQkJY2xrX3JlZ19lbmFibGUoY2xrKTsKKwkJCWNsay0+cmF0ZSA9IDA7CisJCX0KKworCX0gZWxzZSB7CisJCWNsa19yZWdfZW5hYmxlKGNsayk7CisJCWNsay0+cmF0ZSA9IDA7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKy8qIENsb2NrIHNvdXJjZXMgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgb3NjXzEzTUh6ID0geworCS5uYW1lID0gIm9zY18xM01IeiIsCisJLmZsYWdzID0gRklYRURfUkFURSwKKwkucmF0ZSA9IENMS19SQVRFXzEzTUhaLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2tfMTNNSHogPSB7CisJLm5hbWUgPSAiY2tfMTNNSHoiLAorCS5wYXJlbnQgPSAmb3NjXzEzTUh6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJmNrXzEzTUh6X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJmNrXzEzTUh6X3NldF9yYXRlLAorCS5lbmFibGVfcmVnID0gT1NDMTNDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkucmF0ZSA9IENMS19SQVRFXzEzTUhaLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb3NjXzMyS0h6ID0geworCS5uYW1lID0gIm9zY18zMktIeiIsCisJLmZsYWdzID0gRklYRURfUkFURSwKKwkucmF0ZSA9IENMS19SQVRFXzMyS0haLAorfTsKKworLyphdHRhY2hlZCB0byBQTEw1Ki8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrXzFNSHogPSB7CisJLm5hbWUgPSAiY2tfMU1IeiIsCisJLmZsYWdzID0gRklYRURfUkFURSB8IFBBUkVOVF9TRVRfUkFURSwKKwkucGFyZW50ID0gJmNrXzEzTUh6LAorfTsKKworLyogUExMMSAoMzk3KSAtIHByb3ZpZGVzIDEzJyBNSHogY2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX3BsbDEgPSB7CisJLm5hbWUgPSAiY2tfcGxsMSIsCisJLnBhcmVudCA9ICZvc2NfMzJLSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmY2tfMTNNSHpfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmcGxsMV9zZXRfcmF0ZSwKKwkuZW5hYmxlX3JlZyA9IFBMTENUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQgPSAxLAorCS5zY2FsZV9yZWcgPSBQTExDVFJMX1JFRywKKwkucmF0ZSA9IENMS19SQVRFXzEzTUhaLAorfTsKKworLyogQ1BVL0J1cyBQTEwgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNrX3BsbDQgPSB7CisJLm5hbWUgPSAiY2tfcGxsNCIsCisJLnBhcmVudCA9ICZja19wbGwxLAorCS5mbGFncyA9IFJBVEVfUFJPUEFHQVRFUyB8IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5wcm9wYWdhdGVfbmV4dCA9ICZwZXJfY2ssCisJLnJvdW5kX3JhdGUgPSAmcGxsNF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZwbGwxNjBfc2V0X3JhdGUsCisJLnJhdGUgPSBDTEtfUkFURV8yMDhNSFosCisJLnNjYWxlX3JlZyA9IEhDTEtQTExDVFJMX1JFRywKKwkuZW5hYmxlX3JlZyA9IFBXUkNUUkxfUkVHLAorCS5lbmFibGVfc2hpZnQgPSAyLAorCS5wYXJlbnRfc3dpdGNoX3JlZyA9IFNZU0NMS0NUUkxfUkVHLAorCS5zZXRfcGFyZW50ID0gJnNldF8xM01Iel9wYXJlbnQsCit9OworCisvKiBVU0IgUExMICovCitzdGF0aWMgc3RydWN0IGNsayBja19wbGw1ID0geworCS5uYW1lID0gImNrX3BsbDUiLAorCS5wYXJlbnQgPSAmY2tfMU1IeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZwbGw1X3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJnBsbDE2MF9zZXRfcmF0ZSwKKwkuc2NhbGVfcmVnID0gVVNCQ1RSTF9SRUcsCisJLmVuYWJsZV9yZWcgPSBVU0JDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gMTgsCisJLmVuYWJsZV9yZWcxID0gVVNCQ1RSTF9SRUcsCisJLmVuYWJsZV9zaGlmdDEgPSAxNywKK307CisKKy8qIFhQRVJUVGVhayBEU1AgUExMICovCitzdGF0aWMgc3RydWN0IGNsayBja19wbGwzID0geworCS5uYW1lID0gImNrX3BsbDMiLAorCS5wYXJlbnQgPSAmY2tfcGxsMSwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZwbGwzX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJnBsbDE2MF9zZXRfcmF0ZSwKKwkuc2NhbGVfcmVnID0gRFNQUExMQ1RSTF9SRUcsCisJLmVuYWJsZV9yZWcgPSBEU1BDTEtDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0ID0gMywKKwkuZW5hYmxlX3JlZzEgPSBEU1BDTEtDVFJMX1JFRywKKwkuZW5hYmxlX3NoaWZ0MSA9IDIsCisJLnBhcmVudF9zd2l0Y2hfcmVnID0gRFNQQ0xLQ1RSTF9SRUcsCisJLnNldF9wYXJlbnQgPSAmc2V0XzEzTUh6X3BhcmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhjbGtfY2sgPSB7CisJLm5hbWUgPSAiaGNsa19jayIsCisJLnBhcmVudCA9ICZja19wbGw0LAorCS5mbGFncyA9IFBBUkVOVF9TRVRfUkFURSwKKwkuc2V0X3JhdGUgPSAmaGNsa19zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9ICZoY2xrX3JvdW5kX3JhdGUsCisJLnNjYWxlX3JlZyA9IEhDTEtESVZDVFJMX1JFRywKKwkucmF0ZSA9IDIsCisJLnVzZXJfcmF0ZSA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfY2sgPSB7CisJLm5hbWUgPSAicGVyX2NrIiwKKwkucGFyZW50ID0gJmNrX3BsbDQsCisJLmZsYWdzID0gRklYRURfUkFURSwKKwkucHJvcGFnYXRlX25leHQgPSAmaGNsa19jaywKKwkuc2V0X3JhdGUgPSAmcGVyX2Nsa19zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZSA9ICZwZXJfY2xrX3JvdW5kX3JhdGUsCisJLnNjYWxlX3JlZyA9IEhDTEtESVZDVFJMX1JFRywKKwkucmF0ZSA9IENMS19SQVRFXzEzTUhaLAorCS51c2VyX3JhdGUgPSBDTEtfUkFURV8xM01IWiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG0yaGNsa19jayA9IHsKKwkubmFtZSA9ICJtMmhjbGtfY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX2ludl9zZXRfcmF0ZSwKKwkucmF0ZSA9IDEsCisJLmVuYWJsZV9zaGlmdCA9IDYsCisJLmVuYWJsZV9yZWcgPSBQV1JDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZmcDlfY2sgPSB7CisJLm5hbWUgPSAidmZwOV9jayIsCisJLnBhcmVudCA9ICZja19wbGw0LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLnJhdGUgPSAxLAorCS5lbmFibGVfc2hpZnQgPSA0LAorCS5lbmFibGVfcmVnID0gVkZQOUNMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsga2V5c2Nhbl9jayA9IHsKKwkubmFtZSA9ICJrZXlzY2FuX2NrIiwKKwkucGFyZW50ID0gJm9zY18zMktIeiwKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gS0VZQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB0b3VjaF9jayA9IHsKKwkubmFtZSA9ICJ0b3VjaF9jayIsCisJLnBhcmVudCA9ICZvc2NfMzJLSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IFRTQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwd20xX2NrID0geworCS5uYW1lID0gInB3bTFfY2siLAorCS5wYXJlbnQgPSAmb3NjXzMyS0h6LAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBQV01DTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHB3bTJfY2sgPSB7CisJLm5hbWUgPSAicHdtMl9jayIsCisJLnBhcmVudCA9ICZvc2NfMzJLSHosCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMiwKKwkuZW5hYmxlX3JlZyA9IFBXTUNMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsganBlZ19jayA9IHsKKwkubmFtZSA9ICJqcGVnX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IEpQRUdDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zX2NrID0geworCS5uYW1lID0gIm1zX2NrIiwKKwkucGFyZW50ID0gJmNrX3BsbDQsCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gNSwKKwkuZW5hYmxlX3JlZyA9IE1TQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkdW1fY2sgPSB7CisJLm5hbWUgPSAiZHVtX2NrIiwKKwkucGFyZW50ID0gJmhjbGtfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMCwKKwkuZW5hYmxlX3JlZyA9IERVTUNMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmxhc2hfY2sgPSB7CisJLm5hbWUgPSAiZmxhc2hfY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAxLAkvKiBPbmx5IE1MQyBjbG9jayBzdXBwb3J0ZWQgKi8KKwkuZW5hYmxlX3JlZyA9IEZMQVNIQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMwX2NrID0geworCS5uYW1lID0gImkyYzBfY2siLAorCS5wYXJlbnQgPSAmcGVyX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBJMkNDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfY2sgPSB7CisJLm5hbWUgPSAiaTJjMV9jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMSwKKwkuZW5hYmxlX3JlZyA9IEkyQ0NMS0NUUkxfUkVHLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9jayA9IHsKKwkubmFtZSA9ICJpMmMyX2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAyLAorCS5lbmFibGVfcmVnID0gVVNCX09UR19DTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTBfY2sgPSB7CisJLm5hbWUgPSAic3BpMF9jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBTUElDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaTFfY2sgPSB7CisJLm5hbWUgPSAic3BpMV9jayIsCisJLnBhcmVudCA9ICZoY2xrX2NrLAorCS5mbGFncyA9IE5FRURTX0lOSVRJQUxJWkFUSU9OLAorCS5yb3VuZF9yYXRlID0gJm9uX29mZl9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZSA9ICZvbl9vZmZfc2V0X3JhdGUsCisJLmVuYWJsZV9zaGlmdCA9IDQsCisJLmVuYWJsZV9yZWcgPSBTUElDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRtYV9jayA9IHsKKwkubmFtZSA9ICJkbWFfY2siLAorCS5wYXJlbnQgPSAmaGNsa19jaywKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAwLAorCS5lbmFibGVfcmVnID0gRE1BQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19jayA9IHsKKwkubmFtZSA9ICJ1YXJ0M19jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkucmF0ZSA9IDEsCisJLmVuYWJsZV9zaGlmdCA9IDAsCisJLmVuYWJsZV9yZWcgPSBVQVJUQ0xLQ1RSTF9SRUcsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0NF9jayA9IHsKKwkubmFtZSA9ICJ1YXJ0NF9jayIsCisJLnBhcmVudCA9ICZwZXJfY2ssCisJLmZsYWdzID0gTkVFRFNfSU5JVElBTElaQVRJT04sCisJLnJvdW5kX3JhdGUgPSAmb25fb2ZmX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlID0gJm9uX29mZl9zZXRfcmF0ZSwKKwkuZW5hYmxlX3NoaWZ0ID0gMSwKKwkuZW5hYmxlX3JlZyA9IFVBUlRDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ1X2NrID0geworCS5uYW1lID0gInVhcnQ1X2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5yYXRlID0gMSwKKwkuZW5hYmxlX3NoaWZ0ID0gMiwKKwkuZW5hYmxlX3JlZyA9IFVBUlRDTEtDVFJMX1JFRywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ2X2NrID0geworCS5uYW1lID0gInVhcnQ2X2NrIiwKKwkucGFyZW50ID0gJnBlcl9jaywKKwkuZmxhZ3MgPSBORUVEU19JTklUSUFMSVpBVElPTiwKKwkucm91bmRfcmF0ZSA9ICZvbl9vZmZfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUgPSAmb25fb2ZmX3NldF9yYXRlLAorCS5lbmFibGVfc2hpZnQgPSAzLAorCS5lbmFibGVfcmVnID0gVUFSVENMS0NUUkxfUkVHLAorfTsKKworLyogVGhlc2UgY2xvY2tzIGFyZSB2aXNpYmxlIG91dHNpZGUgdGhpcyBtb2R1bGUKKyAqIGFuZCBjYW4gYmUgaW5pdGlhbGl6ZWQKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgKm9uY2hpcF9jbGtzW10gPSB7CisJJmNrXzEzTUh6LAorCSZja19wbGwxLAorCSZja19wbGw0LAorCSZja19wbGw1LAorCSZja19wbGwzLAorCSZ2ZnA5X2NrLAorCSZtMmhjbGtfY2ssCisJJmhjbGtfY2ssCisJJmRtYV9jaywKKwkmZmxhc2hfY2ssCisJJmR1bV9jaywKKwkma2V5c2Nhbl9jaywKKwkmcHdtMV9jaywKKwkmcHdtMl9jaywKKwkmanBlZ19jaywKKwkmbXNfY2ssCisJJnRvdWNoX2NrLAorCSZpMmMwX2NrLAorCSZpMmMxX2NrLAorCSZpMmMyX2NrLAorCSZzcGkwX2NrLAorCSZzcGkxX2NrLAorCSZ1YXJ0M19jaywKKwkmdWFydDRfY2ssCisJJnVhcnQ1X2NrLAorCSZ1YXJ0Nl9jaywKK307CisKK3N0YXRpYyBpbnQgbG9jYWxfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1MzIgcmF0ZSkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpZiAoY2xrLT5zZXRfcmF0ZSkgeworCisJCWlmIChjbGstPnVzZXJfcmF0ZSA9PSBjbGstPnJhdGUgJiYgY2xrLT5wYXJlbnQtPnJhdGUpIHsKKwkJCS8qIGlmIGNsb2NrIGVuYWJsZWQgb3IgcmF0ZSBub3Qgc2V0ICovCisJCQljbGstPnVzZXJfcmF0ZSA9IGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCQkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIGNsay0+dXNlcl9yYXRlKTsKKwkJfSBlbHNlCisJCQljbGstPnVzZXJfcmF0ZSA9IGNsay0+cm91bmRfcmF0ZShjbGssIHJhdGUpOworCQlyZXQgPSAwOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgY2xrX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJaWYgKGNsay0+ZmxhZ3MgJiBGSVhFRF9SQVRFKQorCQlnb3RvIG91dDsKKworCWNsb2NrX2xvY2soKTsKKwlpZiAoKGNsay0+ZmxhZ3MgJiBQQVJFTlRfU0VUX1JBVEUpICYmIGNsay0+cGFyZW50KSB7CisKKwkJY2xrLT51c2VyX3JhdGUgPSBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwkJLyogcGFyZW50IGNsb2NrIG5lZWRzIHRvIGJlIHJlZnJlc2hlZAorCQkgICBmb3IgdGhlIHNldHRpbmcgdG8gdGFrZSBlZmZlY3QgKi8KKwl9IGVsc2UgeworCQlyZXQgPSBsb2NhbF9zZXRfcmF0ZShjbGssIHJhdGUpOworCX0KKwlyZXQgPSAwOworCWNsb2NrX3VubG9jaygpOworCitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfc2V0X3JhdGUpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCit7CisJc3RydWN0IGNsayAqY2xrID0gRVJSX1BUUigtRU5PRU5UKTsKKwlzdHJ1Y3QgY2xrICoqY2xrcDsKKworCWNsb2NrX2xvY2soKTsKKwlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7CisJICAgICBjbGtwKyspIHsKKwkJaWYgKHN0cmNtcChpZCwgKCpjbGtwKS0+bmFtZSkgPT0gMAorCQkgICAgJiYgdHJ5X21vZHVsZV9nZXQoKCpjbGtwKS0+b3duZXIpKSB7CisJCQljbGsgPSAoKmNsa3ApOworCQkJYnJlYWs7CisJCX0KKwl9CisJY2xvY2tfdW5sb2NrKCk7CisKKwlyZXR1cm4gY2xrOworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKKwordm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljbG9ja19sb2NrKCk7CisJaWYgKGNsayAmJiAhSVNfRVJSKGNsaykpCisJCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7CisJY2xvY2tfdW5sb2NrKCk7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19wdXQpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByZXQ7CisJY2xvY2tfbG9jaygpOworCXJldCA9IGNsay0+cmF0ZTsKKwljbG9ja191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOworCitzdGF0aWMgaW50IGxvY2FsX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWludCByZXQgPSAwOworCisJaWYgKCEoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpICYmICFjbGstPnJhdGUgJiYgY2xrLT5zZXRfcmF0ZQorCSAgICAmJiBjbGstPnVzZXJfcmF0ZSkKKwkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIGNsay0+dXNlcl9yYXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBsb2NhbF9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKCEoY2xrLT5mbGFncyAmIEZJWEVEX1JBVEUpICYmIGNsay0+cmF0ZSAmJiBjbGstPnNldF9yYXRlKQorCQljbGstPnNldF9yYXRlKGNsaywgMCk7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWNsb2NrX2xvY2soKTsKKwlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsayk7CisJY2xvY2tfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKKwordm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJY2xvY2tfbG9jaygpOworCWxvY2FsX2Nsa19kaXNhYmxlKGNsayk7CisJY2xvY2tfdW5sb2NrKCk7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCitzdGF0aWMgdm9pZCBsb2NhbF9jbGtfdW51c2Uoc3RydWN0IGNsayAqY2xrKQoreworCWlmIChjbGstPnVzZWNvdW50ID4gMCAmJiAhKC0tY2xrLT51c2Vjb3VudCkpIHsKKwkJbG9jYWxfY2xrX2Rpc2FibGUoY2xrKTsKKwkJaWYgKGNsay0+cGFyZW50KQorCQkJbG9jYWxfY2xrX3VudXNlKGNsay0+cGFyZW50KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgbG9jYWxfY2xrX3VzZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHJldCA9IDA7CisJaWYgKGNsay0+dXNlY291bnQrKyA9PSAwKSB7CisJCWlmIChjbGstPnBhcmVudCkKKwkJCXJldCA9IGxvY2FsX2Nsa191c2UoY2xrLT5wYXJlbnQpOworCisJCWlmIChyZXQgIT0gMCkgeworCQkJY2xrLT51c2Vjb3VudC0tOworCQkJZ290byBvdXQ7CisJCX0KKworCQlyZXQgPSBsb2NhbF9jbGtfZW5hYmxlKGNsayk7CisKKwkJaWYgKHJldCAhPSAwICYmIGNsay0+cGFyZW50KSB7CisJCQlsb2NhbF9jbGtfdW51c2UoY2xrLT5wYXJlbnQpOworCQkJY2xrLT51c2Vjb3VudC0tOworCQl9CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKKy8qIFRoZSBtYWluIHB1cnBvc2Ugb2YgY2xrX3VzZSBhbnMgY2xrX3VudXNlIGZ1bmN0aW9ucworICogaXMgdG8gY29udHJvbCBzd2l0Y2hpbmcgMTNNSHogb3NjaWxsYXRvciBhbmQgUExMMSAoMTMnTUh6KSwKKyAqIHNvIHRoYXQgdGhleSBhcmUgZGlzYWJsZWQgd2hlbmV2ZXIgbm9uZSBvZiBQTEwyLTUgaXMgdXNpbmcgdGhlbS4KKyAqIEFsdGhvdWdoIGluIHRoZW9yeSB0aGVzZSBmdW5jdGlvbnMgc2hvdWxkIHdvcmsgd2l0aCBhbnkgY2xvY2ssCisgKiBwbGVhc2UgdXNlIHRoZW0gb25seSBvbiBQTEwyIC0gUExMNSB0byBhdm9pZCBjb25mdXNpb24uCisgKi8KK2ludCBjbGtfdXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCWNsb2NrX2xvY2soKTsKKwlyZXQgPSBsb2NhbF9jbGtfdXNlKGNsayk7CisJY2xvY2tfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woY2xrX3VzZSk7CisKK3ZvaWQgY2xrX3VudXNlKHN0cnVjdCBjbGsgKmNsaykKK3sKKworCWNsb2NrX2xvY2soKTsKKwlsb2NhbF9jbGtfdW51c2UoY2xrKTsKKwljbG9ja191bmxvY2soKTsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfdW51c2UpOworCitsb25nIGNsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWxvbmcgcmV0OworCWNsb2NrX2xvY2soKTsKKwlpZiAoY2xrLT5yb3VuZF9yYXRlKQorCQlyZXQgPSBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwllbHNlCisJCXJldCA9IGNsay0+cmF0ZTsKKwljbG9ja191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKKworaW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCWludCByZXQgPSAtRU5PREVWOworCWlmICghY2xrLT5zZXRfcGFyZW50KQorCQlnb3RvIG91dDsKKworCWNsb2NrX2xvY2soKTsKKwlyZXQgPSBjbGstPnNldF9wYXJlbnQoY2xrLCBwYXJlbnQpOworCWlmICghcmV0KQorCQljbGstPnBhcmVudCA9IHBhcmVudDsKKwljbG9ja191bmxvY2soKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOworCitzdGF0aWMgaW50IF9faW5pdCBjbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbGsgKipjbGtwOworCisJLyogRGlzYWJsZSBhdXRvY2xvY2tpbmcsIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrICovCisJX19yYXdfd3JpdGVsKDB4ZmYsIEFVVE9DTEtfQ1RSTCk7CisKKwlmb3IgKGNsa3AgPSBvbmNoaXBfY2xrczsgY2xrcCA8IG9uY2hpcF9jbGtzICsgQVJSQVlfU0laRShvbmNoaXBfY2xrcyk7CisJICAgICBjbGtwKyspIHsKKwkJaWYgKCgoKmNsa3ApLT5mbGFncyAmIE5FRURTX0lOSVRJQUxJWkFUSU9OKQorCQkgICAgJiYgKCgqY2xrcCktPnNldF9yYXRlKSkgeworCQkJKCpjbGtwKS0+dXNlcl9yYXRlID0gKCpjbGtwKS0+cmF0ZTsKKwkJCWxvY2FsX3NldF9yYXRlKCgqY2xrcCksICgqY2xrcCktPnVzZXJfcmF0ZSk7CisJCQlpZiAoKCpjbGtwKS0+c2V0X3BhcmVudCkKKwkJCQkoKmNsa3ApLT5zZXRfcGFyZW50KCgqY2xrcCksICgqY2xrcCktPnBhcmVudCk7CisJCX0KKwkJcHJfZGVidWcoIiVzOiBjbG9jayAlcywgcmF0ZSAlbGRcbiIsCisJCQlfX0ZVTkNUSU9OX18sICgqY2xrcCktPm5hbWUsICgqY2xrcCktPnJhdGUpOworCX0KKworCWNsa191c2UoJmNrX3BsbDQpOworCisJLyogaWYgY2tfMTNNSHogaXMgbm90IHVzZWQsIGRpc2FibGUgaXQuICovCisJaWYgKGNrXzEzTUh6LnVzZWNvdW50ID09IDApCisJCWxvY2FsX2Nsa19kaXNhYmxlKCZja18xM01Ieik7CisKKwkvKiBEaXNhYmxlIGF1dG9jbG9ja2luZyAqLworCV9fcmF3X3dyaXRlYigweGZmLCBBVVRPQ0xLX0NUUkwpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDU4ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2Nsb2NrLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9jbG9jay5oCisgKgorICogQ2xvY2sgY29udHJvbCBkcml2ZXIgZm9yIFBOWDQwMDggLSBpbnRlcm5hbCBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogVml0YWx5IFdvb2wgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9QTlg0MDA4X0NMT0NLX0hfXworI2RlZmluZSBfX0FSQ0hfQVJNX1BOWDQwMDhfQ0xPQ0tfSF9fCisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlzdHJ1Y3QgY2xrICpwcm9wYWdhdGVfbmV4dDsKKwl1MzIgcmF0ZTsKKwl1MzIgdXNlcl9yYXRlOworCXM4IHVzZWNvdW50OworCXUzMiBmbGFnczsKKwl1MzIgc2NhbGVfcmVnOworCXU4IGVuYWJsZV9zaGlmdDsKKwl1MzIgZW5hYmxlX3JlZzsKKwl1OCBlbmFibGVfc2hpZnQxOworCXUzMiBlbmFibGVfcmVnMTsKKwl1MzIgcGFyZW50X3N3aXRjaF9yZWc7CisJIHUzMigqcm91bmRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdTMyKTsKKwlpbnQgKCpzZXRfcmF0ZSkgKHN0cnVjdCBjbGsgKiwgdTMyKTsKKwlpbnQgKCpzZXRfcGFyZW50KSAoc3RydWN0IGNsayAqIGNsaywgc3RydWN0IGNsayAqIHBhcmVudCk7Cit9OworCisvKiBGbGFncyAqLworI2RlZmluZSBSQVRFX1BST1BBR0FURVMgICAgICAoMTw8MCkKKyNkZWZpbmUgTkVFRFNfSU5JVElBTElaQVRJT04gKDE8PDEpCisjZGVmaW5lIFBBUkVOVF9TRVRfUkFURSAgICAgICgxPDwyKQorI2RlZmluZSBGSVhFRF9SQVRFICAgICAgICAgICAoMTw8MykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvY29yZS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTkxZGFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2NvcmUuYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC9jb3JlLmMKKyAqCisgKiBQTlg0MDA4IGNvcmUgc3RhcnR1cCBjb2RlCisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiwKKyAqIEdyaWdvcnkgVG9sc3RvbHl0a2luLCBEbWl0cnkgUGVydnVzaGluIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiByZWZlcmVuY2UgY29kZSByZWNlaXZlZCBmcm9tIFBoaWxpcHM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2RtYS5oPgorCitzdHJ1Y3QgcmVzb3VyY2Ugc3BpcG54XzBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQgPSBQTlg0MDA4X1NQSTFfQkFTRSwKKwkJLmVuZCA9IFBOWDQwMDhfU1BJMV9CQVNFICsgU1pfNEssCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gUEVSX1NQSTFfUkVDX1hNSVQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sIHsKKwkJLnN0YXJ0ID0gU1BJMV9JTlQsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9LAorfTsKKworc3RydWN0IHJlc291cmNlIHNwaXBueF8xX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0ID0gUE5YNDAwOF9TUEkyX0JBU0UsCisJCS5lbmQgPSBQTlg0MDA4X1NQSTJfQkFTRSArIFNaXzRLLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCA9IFBFUl9TUEkyX1JFQ19YTUlULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LCB7CisJCS5zdGFydCA9IFNQSTJfSU5ULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LCB7CisJCS5mbGFncyA9IDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMJPSAibTI1cDgwIiwKKwkJLm1heF9zcGVlZF9oegk9IDEwMDAwMDAsCisJCS5idXNfbnVtCT0gMSwKKwkJLmNoaXBfc2VsZWN0CT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpcG54XzEgPSB7CisJLm5hbWUgPSAic3BpcG54IiwKKwkuaWQgPSAxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzcGlwbnhfMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IHNwaXBueF8wX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweEZGRkZGRkZGLAorCQl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3BpcG54XzIgPSB7CisJLm5hbWUgPSAic3BpcG54IiwKKwkuaWQgPSAyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzcGlwbnhfMV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IHNwaXBueF8xX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweEZGRkZGRkZGLAorCQl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBwbGF0Zm9ybV9zZXJpYWxfcG9ydHNbXSA9IHsKKwl7CisJCS5tZW1iYXNlID0gKHZvaWQgKilfX2lvbWVtKElPX0FERFJFU1MoUE5YNDAwOF9VQVJUNV9CQVNFKSksCisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpUE5YNDAwOF9VQVJUNV9CQVNFLAorCQkuaXJxID0gSUlSNV9JTlQsCisJCS51YXJ0Y2xrID0gUE5YNDAwOF9VQVJUX0NMSywKKwkJLnJlZ3NoaWZ0ID0gMiwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9CVUdHWV9VQVJUIHwgVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsKKwkJLm1lbWJhc2UgPSAodm9pZCAqKV9faW9tZW0oSU9fQUREUkVTUyhQTlg0MDA4X1VBUlQzX0JBU0UpKSwKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZylQTlg0MDA4X1VBUlQzX0JBU0UsCisJCS5pcnEgPSBJSVIzX0lOVCwKKwkJLnVhcnRjbGsgPSBQTlg0MDA4X1VBUlRfQ0xLLAorCQkucmVnc2hpZnQgPSAyLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX0JVR0dZX1VBUlQgfCBVUEZfU0tJUF9URVNULAorCSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lID0gInNlcmlhbDgyNTAiLAorCS5pZCA9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZwbGF0Zm9ybV9zZXJpYWxfcG9ydHMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc3BpcG54XzEsCisJJnNwaXBueF8yLAorCSZzZXJpYWxfZGV2aWNlLAorfTsKKworCitleHRlcm4gdm9pZCBwbng0MDA4X3VhcnRfaW5pdCh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IHBueDQwMDhfaW5pdCh2b2lkKQoreworCS8qZGlzYWJsZSBhbGwgU1RBUlQgaW50ZXJydXB0IHNvdXJjZXMsCisJICAgYW5kIGNsZWFyIGFsbCBTVEFSVCBpbnRlcnJ1cHQgZmxhZ3MgKi8KKwlfX3Jhd193cml0ZWwoMCwgU1RBUlRfSU5UX0VSX1JFRyhTRV9QSU5fQkFTRV9JTlQpKTsKKwlfX3Jhd193cml0ZWwoMCwgU1RBUlRfSU5UX0VSX1JFRyhTRV9JTlRfQkFTRV9JTlQpKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgU1RBUlRfSU5UX1JTUl9SRUcoU0VfUElOX0JBU0VfSU5UKSk7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIFNUQVJUX0lOVF9SU1JfUkVHKFNFX0lOVF9CQVNFX0lOVCkpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oc3BpX2JvYXJkX2luZm8sIEFSUkFZX1NJWkUoc3BpX2JvYXJkX2luZm8pKTsKKwkvKiBTd2l0Y2ggb24gdGhlIFVBUlQgY2xvY2tzICovCisJcG54NDAwOF91YXJ0X2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBwbng0MDA4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwgCT0gSU9fQUREUkVTUyhQTlg0MDA4X0lSQU1fQkFTRSksCisJCS5wZm4gCQk9IF9fcGh5c190b19wZm4oUE5YNDAwOF9JUkFNX0JBU0UpLAorCQkubGVuZ3RoCQk9IFNaXzY0SywKKwkJLnR5cGUgCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsIAk9IElPX0FERFJFU1MoUE5YNDAwOF9OREZfRkxBU0hfQkFTRSksCisJCS5wZm4gCQk9IF9fcGh5c190b19wZm4oUE5YNDAwOF9OREZfRkxBU0hfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfMU0gLSBTWl8xMjhLLAorCQkudHlwZSAJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwgCT0gSU9fQUREUkVTUyhQTlg0MDA4X0pQRUdfQ09ORklHX0JBU0UpLAorCQkucGZuIAkJPSBfX3BoeXNfdG9fcGZuKFBOWDQwMDhfSlBFR19DT05GSUdfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfMTI4SyAqIDMsCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbCAJPSBJT19BRERSRVNTKFBOWDQwMDhfRE1BX0NPTkZJR19CQVNFKSwKKwkJLnBmbiAJCT0gX19waHlzX3RvX3BmbihQTlg0MDA4X0RNQV9DT05GSUdfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfMU0sCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbCAJPSBJT19BRERSRVNTKFBOWDQwMDhfQUhCMkZBQl9CQVNFKSwKKwkJLnBmbiAJCT0gX19waHlzX3RvX3BmbihQTlg0MDA4X0FIQjJGQUJfQkFTRSksCisJCS5sZW5ndGgJCT0gU1pfMU0sCisJCS50eXBlIAkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IHBueDQwMDhfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHBueDQwMDhfaW9fZGVzYywgQVJSQVlfU0laRShwbng0MDA4X2lvX2Rlc2MpKTsKK30KKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcG54NDAwOF90aW1lcjsKKworTUFDSElORV9TVEFSVChQTlg0MDA4LCAiUGhpbGlwcyBQTlg0MDA4IikKKwkvKiBNYWludGFpbmVyOiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKi8KKwkucGh5c19pbyAJCT0gMHg0MDA5MDAwMCwKKwkuaW9fcGdfb2Zmc3QgCQk9ICgweGY0MDkwMDAwID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJCT0gMHg4MDAwMDEwMCwKKwkubWFwX2lvIAkJPSBwbng0MDA4X21hcF9pbywKKwkuaW5pdF9pcnEgCQk9IHBueDQwMDhfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAJCT0gcG54NDAwOF9pbml0LAorCS50aW1lciAJCQk9ICZwbng0MDA4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODFhYTlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2RtYS5jCkBAIC0wLDAgKzEsMTEwOSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLXBueDQwMDgvZG1hLmMKKyAqCisgKiAgUE5YNDAwOCBETUEgcmVnaXN0cmF0aW9uIGFuZCBJUlEgZGlzcGF0Y2hpbmcKKyAqCisgKiAgQXV0aG9yOglWaXRhbHkgV29vbAorICogIENvcHlyaWdodDoJTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuIChjKSAyMDA1CisgKgorICogIEJhc2VkIG9uIHRoZSBjb2RlIGZyb20gTmljb2xhcyBQaXRyZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorCitzdGF0aWMgc3RydWN0IGRtYV9jaGFubmVsIHsKKwljaGFyICpuYW1lOworCXZvaWQgKCppcnFfaGFuZGxlcikgKGludCwgaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworCXZvaWQgKmRhdGE7CisJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbDsKKwl1MzIgbGxfZG1hOworCXZvaWQgKnRhcmdldF9hZGRyOworCWludCB0YXJnZXRfaWQ7Cit9IGRtYV9jaGFubmVsc1tNQVhfRE1BX0NIQU5ORUxTXTsKKworc3RhdGljIHN0cnVjdCBsbF9wb29sIHsKKwl2b2lkICp2YWRkcjsKKwl2b2lkICpjdXI7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlpbnQgY291bnQ7Cit9IGxsX3Bvb2w7CisKK3N0YXRpYyBzcGlubG9ja190IGxsX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0cnVjdCBwbng0MDA4X2RtYV9sbCAqcG54NDAwOF9hbGxvY19sbF9lbnRyeShkbWFfYWRkcl90ICogbGxfZG1hKQoreworCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqbGwgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbGxfbG9jaywgZmxhZ3MpOworCWlmIChsbF9wb29sLmNvdW50ID4gNCkgeyAvKiBjYW4gZ2l2ZSBvbmUgbW9yZSAqLworCQlsbCA9ICooc3RydWN0IHBueDQwMDhfZG1hX2xsICoqKSBsbF9wb29sLmN1cjsKKwkJKmxsX2RtYSA9IGxsX3Bvb2wuZG1hX2FkZHIgKyAoKHZvaWQgKilsbCAtIGxsX3Bvb2wudmFkZHIpOworCQkqKHZvaWQgKiopbGxfcG9vbC5jdXIgPSAqKih2b2lkICoqKilsbF9wb29sLmN1cjsKKwkJbWVtc2V0KGxsLCAwLCBzaXplb2YoKmxsKSk7CisJCWxsX3Bvb2wuY291bnQtLTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGxsOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2FsbG9jX2xsX2VudHJ5KTsKKwordm9pZCBwbng0MDA4X2ZyZWVfbGxfZW50cnkoc3RydWN0IHBueDQwMDhfZG1hX2xsICogbGwsIGRtYV9hZGRyX3QgbGxfZG1hKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobGwpIHsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKSgobG9uZylsbCAtIChsb25nKWxsX3Bvb2wudmFkZHIpID4gMHg0MDAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlRyeWluZyB0byBmcmVlIGVudHJ5IG5vdCBhbGxvY2F0ZWQgYnkgRE1BXG4iKTsKKwkJCUJVRygpOworCQl9CisKKwkJaWYgKGxsLT5mbGFncyAmIERNQV9CVUZGRVJfQUxMT0NBVEVEKQorCQkJbGwtPmZyZWUobGwtPmFsbG9jX2RhdGEpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZsbF9sb2NrLCBmbGFncyk7CisJCSoobG9uZyAqKWxsID0gKihsb25nICopbGxfcG9vbC5jdXI7CisJCSoobG9uZyAqKWxsX3Bvb2wuY3VyID0gKGxvbmcpbGw7CisJCWxsX3Bvb2wuY291bnQrKzsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGxfbG9jaywgZmxhZ3MpOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9mcmVlX2xsX2VudHJ5KTsKKwordm9pZCBwbng0MDA4X2ZyZWVfbGwodTMyIGxsX2RtYSwgc3RydWN0IHBueDQwMDhfZG1hX2xsICogbGwpCit7CisJc3RydWN0IHBueDQwMDhfZG1hX2xsICpwdHI7CisJdTMyIGRtYTsKKworCXdoaWxlIChsbCkgeworCQlkbWEgPSBsbC0+bmV4dF9kbWE7CisJCXB0ciA9IGxsLT5uZXh0OworCQlwbng0MDA4X2ZyZWVfbGxfZW50cnkobGwsIGxsX2RtYSk7CisKKwkJbGxfZG1hID0gZG1hOworCQlsbCA9IHB0cjsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZnJlZV9sbCk7CisKK3N0YXRpYyBpbnQgZG1hX2NoYW5uZWxzX3JlcXVlc3RlZCA9IDA7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfaW5jcmVtZW50X3VzYWdlKHZvaWQpCit7CisJaWYgKCFkbWFfY2hhbm5lbHNfcmVxdWVzdGVkKyspIHsKKwkJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldCgwLCAiZG1hX2NrIik7CisJCWlmICghSVNfRVJSKGNsaykpIHsKKwkJCWNsa19zZXRfcmF0ZShjbGssIDEpOworCQkJY2xrX3B1dChjbGspOworCQl9CisJCXBueDQwMDhfY29uZmlnX2RtYSgtMSwgLTEsIDEpOworCX0KK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGVjcmVtZW50X3VzYWdlKHZvaWQpCit7CisJaWYgKCEtLWRtYV9jaGFubmVsc19yZXF1ZXN0ZWQpIHsKKwkJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldCgwLCAiZG1hX2NrIik7CisJCWlmICghSVNfRVJSKGNsaykpIHsKKwkJCWNsa19zZXRfcmF0ZShjbGssIDApOworCQkJY2xrX3B1dChjbGspOworCQl9CisJCXBueDQwMDhfY29uZmlnX2RtYSgtMSwgLTEsIDApOworCisJfQorfQorCitzdGF0aWMgc3BpbmxvY2tfdCBkbWFfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKKworc3RhdGljIGlubGluZSB2b2lkIHBueDQwMDhfZG1hX2xvY2sodm9pZCkKK3sKKwlzcGluX2xvY2tfaXJxKCZkbWFfbG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbng0MDA4X2RtYV91bmxvY2sodm9pZCkKK3sKKwlzcGluX3VubG9ja19pcnEoJmRtYV9sb2NrKTsKK30KKworI2RlZmluZSBWQUxJRF9DSEFOTkVMKGMpCSgoKGMpID49IDApICYmICgoYykgPCBNQVhfRE1BX0NIQU5ORUxTKSkKKworaW50IHBueDQwMDhfcmVxdWVzdF9jaGFubmVsKGNoYXIgKm5hbWUsIGludCBjaCwKKwkJCSAgICB2b2lkICgqaXJxX2hhbmRsZXIpIChpbnQsIGludCwgdm9pZCAqLAorCQkJCQkJIHN0cnVjdCBwdF9yZWdzICopLCB2b2lkICpkYXRhKQoreworCWludCBpLCBmb3VuZCA9IDA7CisKKwkvKiBiYXNpYyBzYW5pdHkgY2hlY2tzICovCisJaWYgKCFuYW1lIHx8IChjaCAhPSAtMSAmJiAhVkFMSURfQ0hBTk5FTChjaCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBueDQwMDhfZG1hX2xvY2soKTsKKworCS8qIHRyeSBncmFiYmluZyBhIERNQSBjaGFubmVsIHdpdGggdGhlIHJlcXVlc3RlZCBwcmlvcml0eSAqLworCWZvciAoaSA9IE1BWF9ETUFfQ0hBTk5FTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoIWRtYV9jaGFubmVsc1tpXS5uYW1lICYmIChjaCA9PSAtMSB8fCBjaCA9PSBpKSkgeworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZm91bmQpIHsKKwkJZG1hX2luY3JlbWVudF91c2FnZSgpOworCQlkbWFfY2hhbm5lbHNbaV0ubmFtZSA9IG5hbWU7CisJCWRtYV9jaGFubmVsc1tpXS5pcnFfaGFuZGxlciA9IGlycV9oYW5kbGVyOworCQlkbWFfY2hhbm5lbHNbaV0uZGF0YSA9IGRhdGE7CisJCWRtYV9jaGFubmVsc1tpXS5sbCA9IE5VTEw7CisJCWRtYV9jaGFubmVsc1tpXS5sbF9kbWEgPSAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIG1vcmUgYXZhaWxhYmxlIERNQSBjaGFubmVscyBmb3IgJXNcbiIsCisJCSAgICAgICBuYW1lKTsKKwkJaSA9IC1FTk9ERVY7CisJfQorCisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisJcmV0dXJuIGk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfcmVxdWVzdF9jaGFubmVsKTsKKwordm9pZCBwbng0MDA4X2ZyZWVfY2hhbm5lbChpbnQgY2gpCit7CisJaWYgKCFkbWFfY2hhbm5lbHNbY2hdLm5hbWUpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVAorCQkgICAgICAgIiVzOiB0cnlpbmcgdG8gZnJlZSBjaGFubmVsICVkIHdoaWNoIGlzIGFscmVhZHkgZnJlZWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNoKTsKKwkJcmV0dXJuOworCX0KKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwlwbng0MDA4X2ZyZWVfbGwoZG1hX2NoYW5uZWxzW2NoXS5sbF9kbWEsIGRtYV9jaGFubmVsc1tjaF0ubGwpOworCWRtYV9jaGFubmVsc1tjaF0ubGwgPSBOVUxMOworCWRtYV9kZWNyZW1lbnRfdXNhZ2UoKTsKKworCWRtYV9jaGFubmVsc1tjaF0ubmFtZSA9IE5VTEw7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZnJlZV9jaGFubmVsKTsKKworaW50IHBueDQwMDhfY29uZmlnX2RtYShpbnQgYWhiX20xX2JlLCBpbnQgYWhiX20yX2JlLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZG1hX2NmZyA9IF9fcmF3X3JlYWRsKERNQUNfQ09ORklHKTsKKworCXN3aXRjaCAoYWhiX20xX2JlKSB7CisJY2FzZSAwOgorCQlkbWFfY2ZnICY9IH4oMSA8PCAxKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkbWFfY2ZnIHw9ICgxIDw8IDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKGFoYl9tMl9iZSkgeworCWNhc2UgMDoKKwkJZG1hX2NmZyAmPSB+KDEgPDwgMik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZG1hX2NmZyB8PSAoMSA8PCAyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChlbmFibGUpIHsKKwljYXNlIDA6CisJCWRtYV9jZmcgJj0gfigxIDw8IDApOworCQlicmVhazsKKwljYXNlIDE6CisJCWRtYV9jZmcgfD0gKDEgPDwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwlfX3Jhd193cml0ZWwoZG1hX2NmZywgRE1BQ19DT05GSUcpOworCXBueDQwMDhfZG1hX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfY29uZmlnX2RtYSk7CisKK2ludCBwbng0MDA4X2RtYV9wYWNrX2NvbnRyb2woY29uc3Qgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKiBjaF9jdHJsLAorCQkJICAgICB1bnNpZ25lZCBsb25nICpjdHJsKQoreworCWludCBpID0gMCwgZGJzaXplLCBzYnNpemUsIGVyciA9IDA7CisKKwlpZiAoIWN0cmwgfHwgIWNoX2N0cmwpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJKmN0cmwgPSAwOworCisJc3dpdGNoIChjaF9jdHJsLT50Y19tYXNrKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDMxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKGNoX2N0cmwtPmNhY2hlYWJsZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAzMCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+YnVmZmVyYWJsZSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAyOSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+cHJpdl9tb2RlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjdHJsIHw9ICgxIDw8IDI4KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5kaSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAyNyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+c2kpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMjYpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPmRlc3RfYWhiMSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY3RybCB8PSAoMSA8PCAyNSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCXN3aXRjaCAoY2hfY3RybC0+c3JjX2FoYjEpIHsKKwljYXNlIDA6CisJCWJyZWFrOworCWNhc2UgMToKKwkJKmN0cmwgfD0gKDEgPDwgMjQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2N0cmwtPmR3aWR0aCkgeworCWNhc2UgV0lEVEhfQllURToKKwkJKmN0cmwgJj0gfig3IDw8IDIxKTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9IV09SRDoKKwkJKmN0cmwgJj0gfig3IDw8IDIxKTsKKwkJKmN0cmwgfD0gKDEgPDwgMjEpOworCQlicmVhazsKKwljYXNlIFdJRFRIX1dPUkQ6CisJCSpjdHJsICY9IH4oNyA8PCAyMSk7CisJCSpjdHJsIHw9ICgyIDw8IDIxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jdHJsLT5zd2lkdGgpIHsKKwljYXNlIFdJRFRIX0JZVEU6CisJCSpjdHJsICY9IH4oNyA8PCAxOCk7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfSFdPUkQ6CisJCSpjdHJsICY9IH4oNyA8PCAxOCk7CisJCSpjdHJsIHw9ICgxIDw8IDE4KTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9XT1JEOgorCQkqY3RybCAmPSB+KDcgPDwgMTgpOworCQkqY3RybCB8PSAoMiA8PCAxOCk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWRic2l6ZSA9IGNoX2N0cmwtPmRic2l6ZTsKKwl3aGlsZSAoIShkYnNpemUgJiAxKSkgeworCQlpKys7CisJCWRic2l6ZSA+Pj0gMTsKKwl9CisJaWYgKGNoX2N0cmwtPmRic2l6ZSAhPSAxIHx8IGkgPiA4IHx8IGkgPT0gMSkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9IGVsc2UgaWYgKGkgPiAxKQorCQlpLS07CisJKmN0cmwgJj0gfig3IDw8IDE1KTsKKwkqY3RybCB8PSAoaSA8PCAxNSk7CisKKwlzYnNpemUgPSBjaF9jdHJsLT5zYnNpemU7CisJd2hpbGUgKCEoc2JzaXplICYgMSkpIHsKKwkJaSsrOworCQlzYnNpemUgPj49IDE7CisJfQorCWlmIChjaF9jdHJsLT5zYnNpemUgIT0gMSB8fCBpID4gOCB8fCBpID09IDEpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChpID4gMSkKKwkJaS0tOworCSpjdHJsICY9IH4oNyA8PCAxMik7CisJKmN0cmwgfD0gKGkgPDwgMTIpOworCisJaWYgKGNoX2N0cmwtPnRyX3NpemUgPiAweDdmZikgeworCQllcnIgPSAtRTJCSUc7CisJCWdvdG8gb3V0OworCX0KKwkqY3RybCAmPSB+MHg3ZmY7CisJKmN0cmwgfD0gY2hfY3RybC0+dHJfc2l6ZSAmIDB4N2ZmOworCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfcGFja19jb250cm9sKTsKKworaW50IHBueDQwMDhfZG1hX3BhcnNlX2NvbnRyb2wodW5zaWduZWQgbG9uZyBjdHJsLAorCQkJICAgICAgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKiBjaF9jdHJsKQoreworCWludCBlcnIgPSAwOworCisJaWYgKCFjaF9jdHJsKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWNoX2N0cmwtPnRyX3NpemUgPSBjdHJsICYgMHg3ZmY7CisJY3RybCA+Pj0gMTI7CisKKwljaF9jdHJsLT5zYnNpemUgPSAxIDw8IChjdHJsICYgNyk7CisJaWYgKGNoX2N0cmwtPnNic2l6ZSA+IDEpCisJCWNoX2N0cmwtPnNic2l6ZSA8PD0gMTsKKwljdHJsID4+PSAzOworCisJY2hfY3RybC0+ZGJzaXplID0gMSA8PCAoY3RybCAmIDcpOworCWlmIChjaF9jdHJsLT5kYnNpemUgPiAxKQorCQljaF9jdHJsLT5kYnNpemUgPDw9IDE7CisJY3RybCA+Pj0gMzsKKworCXN3aXRjaCAoY3RybCAmIDcpIHsKKwljYXNlIDA6CisJCWNoX2N0cmwtPnN3aWR0aCA9IFdJRFRIX0JZVEU7CisJCWJyZWFrOworCWNhc2UgMToKKwkJY2hfY3RybC0+c3dpZHRoID0gV0lEVEhfSFdPUkQ7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2hfY3RybC0+c3dpZHRoID0gV0lEVEhfV09SRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCWN0cmwgPj49IDM7CisKKwlzd2l0Y2ggKGN0cmwgJiA3KSB7CisJY2FzZSAwOgorCQljaF9jdHJsLT5kd2lkdGggPSBXSURUSF9CWVRFOworCQlicmVhazsKKwljYXNlIDE6CisJCWNoX2N0cmwtPmR3aWR0aCA9IFdJRFRIX0hXT1JEOworCQlicmVhazsKKwljYXNlIDI6CisJCWNoX2N0cmwtPmR3aWR0aCA9IFdJRFRIX1dPUkQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwljdHJsID4+PSAzOworCisJY2hfY3RybC0+c3JjX2FoYjEgPSBjdHJsICYgMTsKKwljdHJsID4+PSAxOworCisJY2hfY3RybC0+ZGVzdF9haGIxID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPnNpID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPmRpID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPnByaXZfbW9kZSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT5idWZmZXJhYmxlID0gY3RybCAmIDE7CisJY3RybCA+Pj0gMTsKKworCWNoX2N0cmwtPmNhY2hlYWJsZSA9IGN0cmwgJiAxOworCWN0cmwgPj49IDE7CisKKwljaF9jdHJsLT50Y19tYXNrID0gY3RybCAmIDE7CisKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9wYXJzZV9jb250cm9sKTsKKworaW50IHBueDQwMDhfZG1hX3BhY2tfY29uZmlnKGNvbnN0IHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jb25maWcgKiBjaF9jZmcsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqY2ZnKQoreworCWludCBlcnIgPSAwOworCisJaWYgKCFjZmcgfHwgIWNoX2NmZykgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkqY2ZnID0gMDsKKworCXN3aXRjaCAoY2hfY2ZnLT5oYWx0KSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjZmcgfD0gKDEgPDwgMTgpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2NmZy0+YWN0aXZlKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjZmcgfD0gKDEgPDwgMTcpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2NmZy0+bG9jaykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY2ZnIHw9ICgxIDw8IDE2KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jZmctPml0YykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQkqY2ZnIHw9ICgxIDw8IDE1KTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJc3dpdGNoIChjaF9jZmctPmllKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCSpjZmcgfD0gKDEgPDwgMTQpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlzd2l0Y2ggKGNoX2NmZy0+Zmxvd19jbnRybCkgeworCWNhc2UgRkNfTUVNMk1FTV9ETUE6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19NRU0yUEVSX0RNQToKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQkqY2ZnIHw9ICgxIDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19QRVIyTUVNX0RNQToKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQkqY2ZnIHw9ICgyIDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19QRVIyUEVSX0RNQToKKwkJKmNmZyAmPSB+KDcgPDwgMTEpOworCQkqY2ZnIHw9ICgzIDw8IDExKTsKKwkJYnJlYWs7CisJY2FzZSBGQ19QRVIyUEVSX0RQRVI6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJKmNmZyB8PSAoNCA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfTUVNMlBFUl9QRVI6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJKmNmZyB8PSAoNSA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfUEVSMk1FTV9QRVI6CisJCSpjZmcgJj0gfig3IDw8IDExKTsKKwkJKmNmZyB8PSAoNiA8PCAxMSk7CisJCWJyZWFrOworCWNhc2UgRkNfUEVSMlBFUl9TUEVSOgorCQkqY2ZnIHw9ICg3IDw8IDExKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJKmNmZyAmPSB+KDB4MWYgPDwgNik7CisJKmNmZyB8PSAoKGNoX2NmZy0+ZGVzdF9wZXIgJiAweDFmKSA8PCA2KTsKKworCSpjZmcgJj0gfigweDFmIDw8IDEpOworCSpjZmcgfD0gKChjaF9jZmctPnNyY19wZXIgJiAweDFmKSA8PCAxKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX3BhY2tfY29uZmlnKTsKKworaW50IHBueDQwMDhfZG1hX3BhcnNlX2NvbmZpZyh1bnNpZ25lZCBsb25nIGNmZywKKwkJCSAgICAgc3RydWN0IHBueDQwMDhfZG1hX2NoX2NvbmZpZyAqIGNoX2NmZykKK3sKKwlpbnQgZXJyID0gMDsKKworCWlmICghY2hfY2ZnKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCWNmZyA+Pj0gMTsKKworCWNoX2NmZy0+c3JjX3BlciA9IGNmZyAmIDB4MWY7CisJY2ZnID4+PSA1OworCisJY2hfY2ZnLT5kZXN0X3BlciA9IGNmZyAmIDB4MWY7CisJY2ZnID4+PSA1OworCisJc3dpdGNoIChjZmcgJiA3KSB7CisJY2FzZSAwOgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19NRU0yTUVNX0RNQTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19NRU0yUEVSX0RNQTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19QRVIyTUVNX0RNQTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19QRVIyUEVSX0RNQTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQljaF9jZmctPmZsb3dfY250cmwgPSBGQ19QRVIyUEVSX0RQRVI7CisJCWJyZWFrOworCWNhc2UgNToKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfTUVNMlBFUl9QRVI7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfUEVSMk1FTV9QRVI7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJY2hfY2ZnLT5mbG93X2NudHJsID0gRkNfUEVSMlBFUl9TUEVSOworCX0KKwljZmcgPj49IDM7CisKKwljaF9jZmctPmllID0gY2ZnICYgMTsKKwljZmcgPj49IDE7CisKKwljaF9jZmctPml0YyA9IGNmZyAmIDE7CisJY2ZnID4+PSAxOworCisJY2hfY2ZnLT5sb2NrID0gY2ZnICYgMTsKKwljZmcgPj49IDE7CisKKwljaF9jZmctPmFjdGl2ZSA9IGNmZyAmIDE7CisJY2ZnID4+PSAxOworCisJY2hfY2ZnLT5oYWx0ID0gY2ZnICYgMTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX3BhcnNlX2NvbmZpZyk7CisKK3ZvaWQgcG54NDAwOF9kbWFfc3BsaXRfaGVhZF9lbnRyeShzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnICogY29uZmlnLAorCQkJCSAgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKiBjdHJsKQoreworCWludCBuZXdfbGVuID0gY3RybC0+dHJfc2l6ZSwgbnVtX2VudHJpZXMgPSAwOworCWludCBvbGRfbGVuID0gbmV3X2xlbjsKKwlpbnQgc3JjX3dpZHRoLCBkZXN0X3dpZHRoLCBjb3VudCA9IDE7CisKKwlzd2l0Y2ggKGN0cmwtPnN3aWR0aCkgeworCWNhc2UgV0lEVEhfQllURToKKwkJc3JjX3dpZHRoID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9IV09SRDoKKwkJc3JjX3dpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9XT1JEOgorCQlzcmNfd2lkdGggPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChjdHJsLT5kd2lkdGgpIHsKKwljYXNlIFdJRFRIX0JZVEU6CisJCWRlc3Rfd2lkdGggPSAxOworCQlicmVhazsKKwljYXNlIFdJRFRIX0hXT1JEOgorCQlkZXN0X3dpZHRoID0gMjsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9XT1JEOgorCQlkZXN0X3dpZHRoID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXdoaWxlIChuZXdfbGVuID4gMHg3RkYpIHsKKwkJbnVtX2VudHJpZXMrKzsKKwkJbmV3X2xlbiA9IChjdHJsLT50cl9zaXplICsgbnVtX2VudHJpZXMpIC8gKG51bV9lbnRyaWVzICsgMSk7CisJfQorCWlmIChudW1fZW50cmllcyAhPSAwKSB7CisJCXN0cnVjdCBwbng0MDA4X2RtYV9sbCAqbGwgPSBOVUxMOworCQljb25maWctPmNoX2N0cmwgJj0gfjB4N2ZmOworCQljb25maWctPmNoX2N0cmwgfD0gbmV3X2xlbjsKKwkJaWYgKCFjb25maWctPmlzX2xsKSB7CisJCQljb25maWctPmlzX2xsID0gMTsKKwkJCXdoaWxlIChudW1fZW50cmllcykgeworCQkJCWlmICghbGwpIHsKKwkJCQkJY29uZmlnLT5sbCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZjb25maWctPgorCQkJCQkJCQkgICBsbF9kbWEpOworCQkJCQlsbCA9IGNvbmZpZy0+bGw7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGwtPm5leHQgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmbGwtPgorCQkJCQkJCQkgICBuZXh0X2RtYSk7CisJCQkJCWxsID0gbGwtPm5leHQ7CisJCQkJfQorCisJCQkJaWYgKGN0cmwtPnNpKQorCQkJCQlsbC0+c3JjX2FkZHIgPQorCQkJCQkgICAgY29uZmlnLT5zcmNfYWRkciArCisJCQkJCSAgICBzcmNfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+c3JjX2FkZHIgPSBjb25maWctPnNyY19hZGRyOworCQkJCWlmIChjdHJsLT5kaSkKKwkJCQkJbGwtPmRlc3RfYWRkciA9CisJCQkJCSAgICBjb25maWctPmRlc3RfYWRkciArCisJCQkJCSAgICBkZXN0X3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPmRlc3RfYWRkciA9IGNvbmZpZy0+ZGVzdF9hZGRyOworCQkJCWxsLT5jaF9jdHJsID0gY29uZmlnLT5jaF9jdHJsICYgMHg3ZmZmZmZmZjsKKwkJCQlsbC0+bmV4dF9kbWEgPSAwOworCQkJCWxsLT5uZXh0ID0gTlVMTDsKKwkJCQludW1fZW50cmllcy0tOworCQkJCWNvdW50Kys7CisJCQl9CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKmxsX29sZCA9IGNvbmZpZy0+bGw7CisJCQl1bnNpZ25lZCBsb25nIGxsX2RtYV9vbGQgPSBjb25maWctPmxsX2RtYTsKKwkJCXdoaWxlIChudW1fZW50cmllcykgeworCQkJCWlmICghbGwpIHsKKwkJCQkJY29uZmlnLT5sbCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZjb25maWctPgorCQkJCQkJCQkgICBsbF9kbWEpOworCQkJCQlsbCA9IGNvbmZpZy0+bGw7CisJCQkJfSBlbHNlIHsKKwkJCQkJbGwtPm5leHQgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmbGwtPgorCQkJCQkJCQkgICBuZXh0X2RtYSk7CisJCQkJCWxsID0gbGwtPm5leHQ7CisJCQkJfQorCisJCQkJaWYgKGN0cmwtPnNpKQorCQkJCQlsbC0+c3JjX2FkZHIgPQorCQkJCQkgICAgY29uZmlnLT5zcmNfYWRkciArCisJCQkJCSAgICBzcmNfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+c3JjX2FkZHIgPSBjb25maWctPnNyY19hZGRyOworCQkJCWlmIChjdHJsLT5kaSkKKwkJCQkJbGwtPmRlc3RfYWRkciA9CisJCQkJCSAgICBjb25maWctPmRlc3RfYWRkciArCisJCQkJCSAgICBkZXN0X3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPmRlc3RfYWRkciA9IGNvbmZpZy0+ZGVzdF9hZGRyOworCQkJCWxsLT5jaF9jdHJsID0gY29uZmlnLT5jaF9jdHJsICYgMHg3ZmZmZmZmZjsKKwkJCQlsbC0+bmV4dF9kbWEgPSAwOworCQkJCWxsLT5uZXh0ID0gTlVMTDsKKwkJCQludW1fZW50cmllcy0tOworCQkJCWNvdW50Kys7CisJCQl9CisJCQlsbC0+bmV4dF9kbWEgPSBsbF9kbWFfb2xkOworCQkJbGwtPm5leHQgPSBsbF9vbGQ7CisJCX0KKwkJLyogYWRqdXN0IGxhc3QgbGVuZ3RoL3RjICovCisJCWxsLT5jaF9jdHJsID0gY29uZmlnLT5jaF9jdHJsICYgKH4weDdmZik7CisJCWxsLT5jaF9jdHJsIHw9IG9sZF9sZW4gLSBuZXdfbGVuICogKGNvdW50IC0gMSk7CisJCWNvbmZpZy0+Y2hfY3RybCAmPSAweDdmZmZmZmZmOworCX0KK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9kbWFfc3BsaXRfaGVhZF9lbnRyeSk7CisKK3ZvaWQgcG54NDAwOF9kbWFfc3BsaXRfbGxfZW50cnkoc3RydWN0IHBueDQwMDhfZG1hX2xsICogY3VyX2xsLAorCQkJCXN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICogY3RybCkKK3sKKwlpbnQgbmV3X2xlbiA9IGN0cmwtPnRyX3NpemUsIG51bV9lbnRyaWVzID0gMDsKKwlpbnQgb2xkX2xlbiA9IG5ld19sZW47CisJaW50IHNyY193aWR0aCwgZGVzdF93aWR0aCwgY291bnQgPSAxOworCisJc3dpdGNoIChjdHJsLT5zd2lkdGgpIHsKKwljYXNlIFdJRFRIX0JZVEU6CisJCXNyY193aWR0aCA9IDE7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfSFdPUkQ6CisJCXNyY193aWR0aCA9IDI7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfV09SRDoKKwkJc3JjX3dpZHRoID0gNDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAoY3RybC0+ZHdpZHRoKSB7CisJY2FzZSBXSURUSF9CWVRFOgorCQlkZXN0X3dpZHRoID0gMTsKKwkJYnJlYWs7CisJY2FzZSBXSURUSF9IV09SRDoKKwkJZGVzdF93aWR0aCA9IDI7CisJCWJyZWFrOworCWNhc2UgV0lEVEhfV09SRDoKKwkJZGVzdF93aWR0aCA9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwl3aGlsZSAobmV3X2xlbiA+IDB4N0ZGKSB7CisJCW51bV9lbnRyaWVzKys7CisJCW5ld19sZW4gPSAoY3RybC0+dHJfc2l6ZSArIG51bV9lbnRyaWVzKSAvIChudW1fZW50cmllcyArIDEpOworCX0KKwlpZiAobnVtX2VudHJpZXMgIT0gMCkgeworCQlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKmxsID0gTlVMTDsKKwkJY3VyX2xsLT5jaF9jdHJsICY9IH4weDdmZjsKKwkJY3VyX2xsLT5jaF9jdHJsIHw9IG5ld19sZW47CisJCWlmICghY3VyX2xsLT5uZXh0KSB7CisJCQl3aGlsZSAobnVtX2VudHJpZXMpIHsKKwkJCQlpZiAoIWxsKSB7CisJCQkJCWN1cl9sbC0+bmV4dCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZjdXJfbGwtPgorCQkJCQkJCQkgICBuZXh0X2RtYSk7CisJCQkJCWxsID0gY3VyX2xsLT5uZXh0OworCQkJCX0gZWxzZSB7CisJCQkJCWxsLT5uZXh0ID0KKwkJCQkJICAgIHBueDQwMDhfYWxsb2NfbGxfZW50cnkoJmxsLT4KKwkJCQkJCQkJICAgbmV4dF9kbWEpOworCQkJCQlsbCA9IGxsLT5uZXh0OworCQkJCX0KKworCQkJCWlmIChjdHJsLT5zaSkKKwkJCQkJbGwtPnNyY19hZGRyID0KKwkJCQkJICAgIGN1cl9sbC0+c3JjX2FkZHIgKworCQkJCQkgICAgc3JjX3dpZHRoICogbmV3X2xlbiAqIGNvdW50OworCQkJCWVsc2UKKwkJCQkJbGwtPnNyY19hZGRyID0gY3VyX2xsLT5zcmNfYWRkcjsKKwkJCQlpZiAoY3RybC0+ZGkpCisJCQkJCWxsLT5kZXN0X2FkZHIgPQorCQkJCQkgICAgY3VyX2xsLT5kZXN0X2FkZHIgKworCQkJCQkgICAgZGVzdF93aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5kZXN0X2FkZHIgPSBjdXJfbGwtPmRlc3RfYWRkcjsKKwkJCQlsbC0+Y2hfY3RybCA9IGN1cl9sbC0+Y2hfY3RybCAmIDB4N2ZmZmZmZmY7CisJCQkJbGwtPm5leHRfZG1hID0gMDsKKwkJCQlsbC0+bmV4dCA9IE5VTEw7CisJCQkJbnVtX2VudHJpZXMtLTsKKwkJCQljb3VudCsrOworCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbF9vbGQgPSBjdXJfbGwtPm5leHQ7CisJCQl1bnNpZ25lZCBsb25nIGxsX2RtYV9vbGQgPSBjdXJfbGwtPm5leHRfZG1hOworCQkJd2hpbGUgKG51bV9lbnRyaWVzKSB7CisJCQkJaWYgKCFsbCkgeworCQkJCQljdXJfbGwtPm5leHQgPQorCQkJCQkgICAgcG54NDAwOF9hbGxvY19sbF9lbnRyeSgmY3VyX2xsLT4KKwkJCQkJCQkJICAgbmV4dF9kbWEpOworCQkJCQlsbCA9IGN1cl9sbC0+bmV4dDsKKwkJCQl9IGVsc2UgeworCQkJCQlsbC0+bmV4dCA9CisJCQkJCSAgICBwbng0MDA4X2FsbG9jX2xsX2VudHJ5KCZsbC0+CisJCQkJCQkJCSAgIG5leHRfZG1hKTsKKwkJCQkJbGwgPSBsbC0+bmV4dDsKKwkJCQl9CisKKwkJCQlpZiAoY3RybC0+c2kpCisJCQkJCWxsLT5zcmNfYWRkciA9CisJCQkJCSAgICBjdXJfbGwtPnNyY19hZGRyICsKKwkJCQkJICAgIHNyY193aWR0aCAqIG5ld19sZW4gKiBjb3VudDsKKwkJCQllbHNlCisJCQkJCWxsLT5zcmNfYWRkciA9IGN1cl9sbC0+c3JjX2FkZHI7CisJCQkJaWYgKGN0cmwtPmRpKQorCQkJCQlsbC0+ZGVzdF9hZGRyID0KKwkJCQkJICAgIGN1cl9sbC0+ZGVzdF9hZGRyICsKKwkJCQkJICAgIGRlc3Rfd2lkdGggKiBuZXdfbGVuICogY291bnQ7CisJCQkJZWxzZQorCQkJCQlsbC0+ZGVzdF9hZGRyID0gY3VyX2xsLT5kZXN0X2FkZHI7CisJCQkJbGwtPmNoX2N0cmwgPSBjdXJfbGwtPmNoX2N0cmwgJiAweDdmZmZmZmZmOworCQkJCWxsLT5uZXh0X2RtYSA9IDA7CisJCQkJbGwtPm5leHQgPSBOVUxMOworCQkJCW51bV9lbnRyaWVzLS07CisJCQkJY291bnQrKzsKKwkJCX0KKworCQkJbGwtPm5leHRfZG1hID0gbGxfZG1hX29sZDsKKwkJCWxsLT5uZXh0ID0gbGxfb2xkOworCQl9CisJCS8qIGFkanVzdCBsYXN0IGxlbmd0aC90YyAqLworCQlsbC0+Y2hfY3RybCA9IGN1cl9sbC0+Y2hfY3RybCAmICh+MHg3ZmYpOworCQlsbC0+Y2hfY3RybCB8PSBvbGRfbGVuIC0gbmV3X2xlbiAqIChjb3VudCAtIDEpOworCQljdXJfbGwtPmNoX2N0cmwgJj0gMHg3ZmZmZmZmZjsKKwl9Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX3NwbGl0X2xsX2VudHJ5KTsKKworaW50IHBueDQwMDhfY29uZmlnX2NoYW5uZWwoaW50IGNoLCBzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnICogY29uZmlnKQoreworCWlmICghVkFMSURfQ0hBTk5FTChjaCkgfHwgIWRtYV9jaGFubmVsc1tjaF0ubmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJX19yYXdfd3JpdGVsKGNvbmZpZy0+c3JjX2FkZHIsIERNQUNfQ3hfU1JDX0FERFIoY2gpKTsKKwlfX3Jhd193cml0ZWwoY29uZmlnLT5kZXN0X2FkZHIsIERNQUNfQ3hfREVTVF9BRERSKGNoKSk7CisKKwlpZiAoY29uZmlnLT5pc19sbCkKKwkJX19yYXdfd3JpdGVsKGNvbmZpZy0+bGxfZG1hLCBETUFDX0N4X0xMSShjaCkpOworCWVsc2UKKwkJX19yYXdfd3JpdGVsKDAsIERNQUNfQ3hfTExJKGNoKSk7CisKKwlfX3Jhd193cml0ZWwoY29uZmlnLT5jaF9jdHJsLCBETUFDX0N4X0NPTlRST0woY2gpKTsKKwlfX3Jhd193cml0ZWwoY29uZmlnLT5jaF9jZmcsIERNQUNfQ3hfQ09ORklHKGNoKSk7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKKworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2NvbmZpZ19jaGFubmVsKTsKKworaW50IHBueDQwMDhfY2hhbm5lbF9nZXRfY29uZmlnKGludCBjaCwgc3RydWN0IHBueDQwMDhfZG1hX2NvbmZpZyAqIGNvbmZpZykKK3sKKwlpZiAoIVZBTElEX0NIQU5ORUwoY2gpIHx8ICFkbWFfY2hhbm5lbHNbY2hdLm5hbWUgfHwgIWNvbmZpZykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJY29uZmlnLT5jaF9jZmcgPSBfX3Jhd19yZWFkbChETUFDX0N4X0NPTkZJRyhjaCkpOworCWNvbmZpZy0+Y2hfY3RybCA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfQ09OVFJPTChjaCkpOworCisJY29uZmlnLT5sbF9kbWEgPSBfX3Jhd19yZWFkbChETUFDX0N4X0xMSShjaCkpOworCWNvbmZpZy0+aXNfbGwgPSBjb25maWctPmxsX2RtYSA/IDEgOiAwOworCisJY29uZmlnLT5zcmNfYWRkciA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfU1JDX0FERFIoY2gpKTsKKwljb25maWctPmRlc3RfYWRkciA9IF9fcmF3X3JlYWRsKERNQUNfQ3hfREVTVF9BRERSKGNoKSk7CisJcG54NDAwOF9kbWFfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocG54NDAwOF9jaGFubmVsX2dldF9jb25maWcpOworCitpbnQgcG54NDAwOF9kbWFfY2hfZW5hYmxlKGludCBjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGNoX2NmZzsKKworCWlmICghVkFMSURfQ0hBTk5FTChjaCkgfHwgIWRtYV9jaGFubmVsc1tjaF0ubmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJY2hfY2ZnID0gX19yYXdfcmVhZGwoRE1BQ19DeF9DT05GSUcoY2gpKTsKKwljaF9jZmcgfD0gMTsKKwlfX3Jhd193cml0ZWwoY2hfY2ZnLCBETUFDX0N4X0NPTkZJRyhjaCkpOworCXBueDQwMDhfZG1hX3VubG9jaygpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX2NoX2VuYWJsZSk7CisKK2ludCBwbng0MDA4X2RtYV9jaF9kaXNhYmxlKGludCBjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGNoX2NmZzsKKworCWlmICghVkFMSURfQ0hBTk5FTChjaCkgfHwgIWRtYV9jaGFubmVsc1tjaF0ubmFtZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwbng0MDA4X2RtYV9sb2NrKCk7CisJY2hfY2ZnID0gX19yYXdfcmVhZGwoRE1BQ19DeF9DT05GSUcoY2gpKTsKKwljaF9jZmcgJj0gfjE7CisJX19yYXdfd3JpdGVsKGNoX2NmZywgRE1BQ19DeF9DT05GSUcoY2gpKTsKKwlwbng0MDA4X2RtYV91bmxvY2soKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChwbng0MDA4X2RtYV9jaF9kaXNhYmxlKTsKKworaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZWQoaW50IGNoKQoreworCXVuc2lnbmVkIGxvbmcgY2hfY2ZnOworCisJaWYgKCFWQUxJRF9DSEFOTkVMKGNoKSB8fCAhZG1hX2NoYW5uZWxzW2NoXS5uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBueDQwMDhfZG1hX2xvY2soKTsKKwljaF9jZmcgPSBfX3Jhd19yZWFkbChETUFDX0N4X0NPTkZJRyhjaCkpOworCXBueDQwMDhfZG1hX3VubG9jaygpOworCisJcmV0dXJuIGNoX2NmZyAmIDE7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBueDQwMDhfZG1hX2NoX2VuYWJsZWQpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgZG1hX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBkaW50ID0gX19yYXdfcmVhZGwoRE1BQ19JTlRfU1RBVCk7CisJdW5zaWduZWQgbG9uZyB0Y2ludCA9IF9fcmF3X3JlYWRsKERNQUNfSU5UX1RDX1NUQVQpOworCXVuc2lnbmVkIGxvbmcgZWludCA9IF9fcmF3X3JlYWRsKERNQUNfSU5UX0VSUl9TVEFUKTsKKwl1bnNpZ25lZCBsb25nIGlfYml0OworCisJZm9yIChpID0gTUFYX0RNQV9DSEFOTkVMUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlfYml0ID0gMSA8PCBpOworCQlpZiAoZGludCAmIGlfYml0KSB7CisJCQlzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW5uZWwgPSAmZG1hX2NoYW5uZWxzW2ldOworCisJCQlpZiAoY2hhbm5lbC0+bmFtZSAmJiBjaGFubmVsLT5pcnFfaGFuZGxlcikgeworCQkJCWludCBjYXVzZSA9IDA7CisKKwkJCQlpZiAoZWludCAmIGlfYml0KQorCQkJCQljYXVzZSB8PSBETUFfRVJSX0lOVDsKKwkJCQlpZiAodGNpbnQgJiBpX2JpdCkKKwkJCQkJY2F1c2UgfD0gRE1BX1RDX0lOVDsKKwkJCQljaGFubmVsLT5pcnFfaGFuZGxlcihpLCBjYXVzZSwgY2hhbm5lbC0+ZGF0YSwKKwkJCQkJCSAgICAgcmVncyk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogSVJRIGZvciBhbiB1bnJlZ2lzdGVyZWQgRE1BIGNoYW5uZWwKKwkJCQkgKi8KKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJICAgICAgICJzcHVyaW91cyBJUlEgZm9yIERNQSBjaGFubmVsICVkXG4iLCBpKTsKKwkJCX0KKwkJCWlmICh0Y2ludCAmIGlfYml0KQorCQkJCV9fcmF3X3dyaXRlbChpX2JpdCwgRE1BQ19JTlRfVENfQ0xFQVIpOworCQkJaWYgKGVpbnQgJiBpX2JpdCkKKwkJCQlfX3Jhd193cml0ZWwoaV9iaXQsIERNQUNfSU5UX0VSUl9DTEVBUik7CisJCX0KKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwbng0MDA4X2RtYV9pbml0KHZvaWQpCit7CisJaW50IHJldCwgaTsKKworCXJldCA9IHJlcXVlc3RfaXJxKERNQV9JTlQsIGRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsIE5VTEwpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgSVJRIGZvciBETUFcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlsbF9wb29sLmNvdW50ID0gMHg0MDAwIC8gc2l6ZW9mKHN0cnVjdCBwbng0MDA4X2RtYV9sbCk7CisJbGxfcG9vbC5jdXIgPSBsbF9wb29sLnZhZGRyID0KKwkgICAgZG1hX2FsbG9jX2NvaGVyZW50KE5VTEwsIGxsX3Bvb2wuY291bnQgKiBzaXplb2Yoc3RydWN0IHBueDQwMDhfZG1hX2xsKSwKKwkJCSAgICAgICAmbGxfcG9vbC5kbWFfYWRkciwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWxsX3Bvb2wudmFkZHIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZnJlZV9pcnEoRE1BX0lOVCwgTlVMTCk7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9IDA7IGkgPCBsbF9wb29sLmNvdW50IC0gMTsgaSsrKSB7CisJCXZvaWQgKiphZGRyID0gbGxfcG9vbC52YWRkciArIGkgKiBzaXplb2Yoc3RydWN0IHBueDQwMDhfZG1hX2xsKTsKKwkJKmFkZHIgPSAodm9pZCAqKWFkZHIgKyBzaXplb2Yoc3RydWN0IHBueDQwMDhfZG1hX2xsKTsKKwl9CisJKihsb25nICopKGxsX3Bvb2wudmFkZHIgKworCQkgIChsbF9wb29sLmNvdW50IC0gMSkgKiBzaXplb2Yoc3RydWN0IHBueDQwMDhfZG1hX2xsKSkgPQorCSAgICAobG9uZylsbF9wb29sLnZhZGRyOworCisJX19yYXdfd3JpdGVsKDEsIERNQUNfQ09ORklHKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CithcmNoX2luaXRjYWxsKHBueDQwMDhfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFjZTA1MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9ncGlvLmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvZ3Bpby5jCisgKgorICogUE5YNDAwOCBHUElPIGRyaXZlcgorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiByZWZlcmVuY2UgY29kZSBieSBJd28gTWVyZ2xlciBhbmQgWi5UYWJhYWxvdXRlIGZyb20gUGhpbGlwczoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9uaWNzIE4uVi4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKworLyogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgUElPX1ZBX0JBU0UJSU9fQUREUkVTUyhQTlg0MDA4X1BJT19CQVNFKQorCisjZGVmaW5lIFBJT19JTlBfU1RBVEUJKDB4MDBVKQorI2RlZmluZSBQSU9fT1VUUF9TRVQJKDB4MDRVKQorI2RlZmluZSBQSU9fT1VUUF9DTFIJKDB4MDhVKQorI2RlZmluZSBQSU9fT1VUUF9TVEFURQkoMHgwQ1UpCisjZGVmaW5lIFBJT19EUlZfU0VUCSgweDEwVSkKKyNkZWZpbmUgUElPX0RSVl9DTFIJKDB4MTRVKQorI2RlZmluZSBQSU9fRFJWX1NUQVRFCSgweDE4VSkKKyNkZWZpbmUgUElPX1NESU5QX1NUQVRFCSgweDFDVSkKKyNkZWZpbmUgUElPX1NET1VUUF9TRVQJKDB4MjBVKQorI2RlZmluZSBQSU9fU0RPVVRQX0NMUgkoMHgyNFUpCisjZGVmaW5lIFBJT19NVVhfU0VUCSgweDI4VSkKKyNkZWZpbmUgUElPX01VWF9DTFIJKDB4MkNVKQorI2RlZmluZSBQSU9fTVVYX1NUQVRFCSgweDMwVSkKKworc3RhdGljIGlubGluZSB2b2lkIGdwaW9fbG9jayh2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncGlvX3VubG9jayh2b2lkKQoreworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworLyogSW5saW5lIGZ1bmN0aW9ucyAqLworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZWFkX2JpdCh1MzIgcmVnLCBpbnQgZ3BpbykKK3sKKwl1MzIgYml0LCB2YWw7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlpZiAoZ3BpbyA8IDApCisJCWdvdG8gb3V0OworCisJYml0ID0gR1BJT19CSVQoZ3Bpbyk7CisJaWYgKGJpdCkgeworCQl2YWwgPSBfX3Jhd19yZWFkbChQSU9fVkFfQkFTRSArIHJlZyk7CisJCXJldCA9ICh2YWwgJiBiaXQpID8gMSA6IDA7CisJfQorb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fc2V0X2JpdCh1MzIgcmVnLCBpbnQgZ3BpbykKK3sKKwl1MzIgYml0LCB2YWw7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlpZiAoZ3BpbyA8IDApCisJCWdvdG8gb3V0OworCisJYml0ID0gR1BJT19CSVQoZ3Bpbyk7CisJaWYgKGJpdCkgeworCQl2YWwgPSBfX3Jhd19yZWFkbChQSU9fVkFfQkFTRSArIHJlZyk7CisJCXZhbCB8PSBiaXQ7CisJCV9fcmF3X3dyaXRlbCh2YWwsIFBJT19WQV9CQVNFICsgcmVnKTsKKwkJcmV0ID0gMDsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworLyogVmVyeSBzaW1wbGUgYWNjZXNzIGNvbnRyb2wsIGJpdG1hcCBmb3IgYWxsb2NhdGVkL2ZyZWUgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFjY2Vzc19tYXBbNF07CisjZGVmaW5lIElOUF9JTkRFWAkwCisjZGVmaW5lIE9VVFBfSU5ERVgJMQorI2RlZmluZSBHUElPX0lOREVYCTIKKyNkZWZpbmUgTVVYX0lOREVYCTMKKworLypHUElPIHRvIElucHV0IE1hcHBpbmcgKi8KK3N0YXRpYyBzaG9ydCBncGlvX3RvX2lucF9tYXBbMzJdID0geworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDI0LCAtMQorfTsKKworLypHUElPIHRvIE11eCBNYXBwaW5nICovCitzdGF0aWMgc2hvcnQgZ3Bpb190b19tdXhfbWFwWzMyXSA9IHsKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAwLCAxLCA0LCA1LCAtMQorfTsKKworLypPdXRwdXQgdG8gTXV4IE1hcHBpbmcgKi8KK3N0YXRpYyBzaG9ydCBvdXRwX3RvX211eF9tYXBbMzJdID0geworCS0xLCAtMSwgLTEsIDYsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIDIsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEKK307CisKK2ludCBwbng0MDA4X2dwaW9fcmVnaXN0ZXJfcGluKHVuc2lnbmVkIHNob3J0IHBpbikKK3sKKwl1bnNpZ25lZCBsb25nIGJpdCA9IEdQSU9fQklUKHBpbik7CisJaW50IHJldCA9IC1FQlVTWTsJLyogQWxyZWFkeSBpbiB1c2UgKi8KKworCWdwaW9fbG9jaygpOworCisJaWYgKEdQSU9fSVNCSUQocGluKSkgeworCQlpZiAoYWNjZXNzX21hcFtHUElPX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW0dQSU9fSU5ERVhdIHw9IGJpdDsKKworCX0gZWxzZSBpZiAoR1BJT19JU1JBTShwaW4pKSB7CisJCWlmIChhY2Nlc3NfbWFwW0dQSU9fSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbR1BJT19JTkRFWF0gfD0gYml0OworCisJfSBlbHNlIGlmIChHUElPX0lTTVVYKHBpbikpIHsKKwkJaWYgKGFjY2Vzc19tYXBbTVVYX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW01VWF9JTkRFWF0gfD0gYml0OworCisJfSBlbHNlIGlmIChHUElPX0lTT1VUKHBpbikpIHsKKwkJaWYgKGFjY2Vzc19tYXBbT1VUUF9JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtPVVRQX0lOREVYXSB8PSBiaXQ7CisKKwl9IGVsc2UgaWYgKEdQSU9fSVNJTihwaW4pKSB7CisJCWlmIChhY2Nlc3NfbWFwW0lOUF9JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtJTlBfSU5ERVhdIHw9IGJpdDsKKwl9IGVsc2UKKwkJZ290byBvdXQ7CisJcmV0ID0gMDsKKworb3V0OgorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fcmVnaXN0ZXJfcGluKTsKKworaW50IHBueDQwMDhfZ3Bpb191bnJlZ2lzdGVyX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pCit7CisJdW5zaWduZWQgbG9uZyBiaXQgPSBHUElPX0JJVChwaW4pOworCWludCByZXQgPSAtRUZBVUxUOwkvKiBOb3QgcmVnaXN0ZXJlZCAqLworCisJZ3Bpb19sb2NrKCk7CisKKwlpZiAoR1BJT19JU0JJRChwaW4pKSB7CisJCWlmICh+YWNjZXNzX21hcFtHUElPX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW0dQSU9fSU5ERVhdICY9IH5iaXQ7CisJfSBlbHNlIGlmIChHUElPX0lTUkFNKHBpbikpIHsKKwkJaWYgKH5hY2Nlc3NfbWFwW0dQSU9fSU5ERVhdICYgYml0KQorCQkJZ290byBvdXQ7CisJCWFjY2Vzc19tYXBbR1BJT19JTkRFWF0gJj0gfmJpdDsKKwl9IGVsc2UgaWYgKEdQSU9fSVNNVVgocGluKSkgeworCQlpZiAofmFjY2Vzc19tYXBbTVVYX0lOREVYXSAmIGJpdCkKKwkJCWdvdG8gb3V0OworCQlhY2Nlc3NfbWFwW01VWF9JTkRFWF0gJj0gfmJpdDsKKwl9IGVsc2UgaWYgKEdQSU9fSVNPVVQocGluKSkgeworCQlpZiAofmFjY2Vzc19tYXBbT1VUUF9JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtPVVRQX0lOREVYXSAmPSB+Yml0OworCX0gZWxzZSBpZiAoR1BJT19JU0lOKHBpbikpIHsKKwkJaWYgKH5hY2Nlc3NfbWFwW0lOUF9JTkRFWF0gJiBiaXQpCisJCQlnb3RvIG91dDsKKwkJYWNjZXNzX21hcFtJTlBfSU5ERVhdICY9IH5iaXQ7CisJfSBlbHNlCisJCWdvdG8gb3V0OworCXJldCA9IDA7CisKK291dDoKKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3VucmVnaXN0ZXJfcGluKTsKKwordW5zaWduZWQgbG9uZyBwbng0MDA4X2dwaW9fcmVhZF9waW4odW5zaWduZWQgc2hvcnQgcGluKQoreworCXVuc2lnbmVkIGxvbmcgcmV0ID0gLUVGQVVMVDsKKwlpbnQgZ3BpbyA9IEdQSU9fQklUX01BU0socGluKTsKKwlncGlvX2xvY2soKTsKKwlpZiAoR1BJT19JU09VVChwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX09VVFBfU1RBVEUsIGdwaW8pOworCX0gZWxzZSBpZiAoR1BJT19JU1JBTShwaW4pKSB7CisJCWlmIChncGlvX3JlYWRfYml0KFBJT19EUlZfU1RBVEUsIGdwaW8pID09IDApIHsKKwkJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX1NESU5QX1NUQVRFLCBncGlvKTsKKwkJfQorCX0gZWxzZSBpZiAoR1BJT19JU0JJRChwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX0RSVl9TVEFURSwgZ3Bpbyk7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fT1VUUF9TVEFURSwgZ3Bpbyk7CisJCWVsc2UgaWYgKHJldCA9PSAwKQorCQkJcmV0ID0KKwkJCSAgICBncGlvX3JlYWRfYml0KFBJT19JTlBfU1RBVEUsIGdwaW9fdG9faW5wX21hcFtncGlvXSk7CisJfSBlbHNlIGlmIChHUElPX0lTSU4ocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19JTlBfU1RBVEUsIGdwaW8pOworCX0KKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3JlYWRfcGluKTsKKworLyogV3JpdGUgVmFsdWUgdG8gb3V0cHV0ICovCitpbnQgcG54NDAwOF9ncGlvX3dyaXRlX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpCit7CisJaW50IGdwaW8gPSBHUElPX0JJVF9NQVNLKHBpbik7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlncGlvX2xvY2soKTsKKwlpZiAoR1BJT19JU09VVChwaW4pKSB7CisJCXByaW50ayggIndyaXRpbmcgJyV4JyB0byAnJXgnXG4iLAorCQkJCWdwaW8sIG91dHB1dCA/IFBJT19PVVRQX1NFVCA6IFBJT19PVVRQX0NMUiApOworCQlyZXQgPSBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX09VVFBfU0VUIDogUElPX09VVFBfQ0xSLCBncGlvKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNSQU0ocGluKSkgeworCQlpZiAoZ3Bpb19yZWFkX2JpdChQSU9fRFJWX1NUQVRFLCBncGlvKSA+IDApCisJCQlyZXQgPSBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX1NET1VUUF9TRVQgOgorCQkJCQkgICBQSU9fU0RPVVRQX0NMUiwgZ3Bpbyk7CisJfSBlbHNlIGlmIChHUElPX0lTQklEKHBpbikpIHsKKwkJaWYgKGdwaW9fcmVhZF9iaXQoUElPX0RSVl9TVEFURSwgZ3BpbykgPiAwKQorCQkJcmV0ID0gZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19PVVRQX1NFVCA6CisJCQkJCSAgIFBJT19PVVRQX0NMUiwgZ3Bpbyk7CisJfQorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fd3JpdGVfcGluKTsKKworLyogVmFsdWUgPSAxIDogU2V0IEdQSU8gcGluIGFzIG91dHB1dCAqLworLyogVmFsdWUgPSAwIDogU2V0IEdQSU8gcGluIGFzIGlucHV0ICovCitpbnQgcG54NDAwOF9ncGlvX3NldF9waW5fZGlyZWN0aW9uKHVuc2lnbmVkIHNob3J0IHBpbiwgaW50IG91dHB1dCkKK3sKKwlpbnQgZ3BpbyA9IEdQSU9fQklUX01BU0socGluKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWdwaW9fbG9jaygpOworCWlmIChHUElPX0lTQklEKHBpbikgfHwgR1BJT19JU1JBTShwaW4pKSB7CisJCXJldCA9IGdwaW9fc2V0X2JpdChvdXRwdXQgPyBQSU9fRFJWX1NFVCA6IFBJT19EUlZfQ0xSLCBncGlvKTsKKwl9CisJZ3Bpb191bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHBueDQwMDhfZ3Bpb19zZXRfcGluX2RpcmVjdGlvbik7CisKKy8qIFJlYWQgR1BJTyBwaW4gZGlyZWN0aW9uOiAwPSBwaW4gdXNlZCBhcyBpbnB1dCwgMT0gcGluIHVzZWQgYXMgb3V0cHV0Ki8KK2ludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fZGlyZWN0aW9uKHVuc2lnbmVkIHNob3J0IHBpbikKK3sKKwlpbnQgZ3BpbyA9IEdQSU9fQklUX01BU0socGluKTsKKwlpbnQgcmV0ID0gLUVGQVVMVDsKKworCWdwaW9fbG9jaygpOworCWlmIChHUElPX0lTQklEKHBpbikgfHwgR1BJT19JU1JBTShwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX0RSVl9TVEFURSwgZ3Bpbyk7CisJfQorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fcmVhZF9waW5fZGlyZWN0aW9uKTsKKworLyogVmFsdWUgPSAxIDogU2V0IHBpbiB0byBtdXhlZCBmdW5jdGlvbiAgKi8KKy8qIFZhbHVlID0gMCA6IFNldCBwaW4gYXMgR1BJTyAqLworaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX211eCh1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpCit7CisJaW50IGdwaW8gPSBHUElPX0JJVF9NQVNLKHBpbik7CisJaW50IHJldCA9IC1FRkFVTFQ7CisKKwlncGlvX2xvY2soKTsKKwlpZiAoR1BJT19JU0JJRChwaW4pKSB7CisJCXJldCA9CisJCSAgICBncGlvX3NldF9iaXQob3V0cHV0ID8gUElPX01VWF9TRVQgOiBQSU9fTVVYX0NMUiwKKwkJCQkgZ3Bpb190b19tdXhfbWFwW2dwaW9dKTsKKwl9IGVsc2UgaWYgKEdQSU9fSVNPVVQocGluKSkgeworCQlyZXQgPQorCQkgICAgZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19NVVhfU0VUIDogUElPX01VWF9DTFIsCisJCQkJIG91dHBfdG9fbXV4X21hcFtncGlvXSk7CisJfSBlbHNlIGlmIChHUElPX0lTTVVYKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19zZXRfYml0KG91dHB1dCA/IFBJT19NVVhfU0VUIDogUElPX01VWF9DTFIsIGdwaW8pOworCX0KKwlncGlvX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKK0VYUE9SVF9TWU1CT0wocG54NDAwOF9ncGlvX3NldF9waW5fbXV4KTsKKworLyogUmVhZCBwaW4gbXV4IGZ1bmN0aW9uOiAwPSBwaW4gdXNlZCBhcyBHUElPLCAxPSBwaW4gdXNlZCBmb3IgbXV4ZWQgZnVuY3Rpb24qLworaW50IHBueDQwMDhfZ3Bpb19yZWFkX3Bpbl9tdXgodW5zaWduZWQgc2hvcnQgcGluKQoreworCWludCBncGlvID0gR1BJT19CSVRfTUFTSyhwaW4pOworCWludCByZXQgPSAtRUZBVUxUOworCisJZ3Bpb19sb2NrKCk7CisJaWYgKEdQSU9fSVNCSUQocGluKSkgeworCQlyZXQgPSBncGlvX3JlYWRfYml0KFBJT19NVVhfU1RBVEUsIGdwaW9fdG9fbXV4X21hcFtncGlvXSk7CisJfSBlbHNlIGlmIChHUElPX0lTT1VUKHBpbikpIHsKKwkJcmV0ID0gZ3Bpb19yZWFkX2JpdChQSU9fTVVYX1NUQVRFLCBvdXRwX3RvX211eF9tYXBbZ3Bpb10pOworCX0gZWxzZSBpZiAoR1BJT19JU01VWChwaW4pKSB7CisJCXJldCA9IGdwaW9fcmVhZF9iaXQoUElPX01VWF9TVEFURSwgZ3Bpbyk7CisJfQorCWdwaW9fdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChwbng0MDA4X2dwaW9fcmVhZF9waW5fbXV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBhOGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L2lycS5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1wbng0MDA4L2lycS5jCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIKKyAqCisgKiBBdXRob3I6IERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogQmFzZWQgb24gcmVmZXJlbmNlIGNvZGUgcmVjZWl2ZWQgZnJvbSBQaGlsaXBzOgorICogQ29weXJpZ2h0IChDKSAyMDAzIFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnEuaD4KKworc3RhdGljIHU4IHBueDQwMDhfaXJxX3R5cGVbTlJfSVJRU10gPSBQTlg0MDA4X0lSUV9UWVBFUzsKKworc3RhdGljIHZvaWQgcG54NDAwOF9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0VSKGlycSkpICYgfklOVENfQklUKGlycSksIElOVENfRVIoaXJxKSk7CS8qIG1hc2sgaW50ZXJydXB0ICovCit9CisKK3N0YXRpYyB2b2lkIHBueDQwMDhfdW5tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0VSKGlycSkpIHwgSU5UQ19CSVQoaXJxKSwgSU5UQ19FUihpcnEpKTsJLyogdW5tYXNrIGludGVycnVwdCAqLworfQorCitzdGF0aWMgdm9pZCBwbng0MDA4X21hc2tfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0VSKGlycSkpICYgfklOVENfQklUKGlycSksIElOVENfRVIoaXJxKSk7CS8qIG1hc2sgaW50ZXJydXB0ICovCisJX19yYXdfd3JpdGVsKElOVENfQklUKGlycSksIElOVENfU1IoaXJxKSk7CS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KK30KKworc3RhdGljIGludCBwbng0MDA4X3NldF9pcnFfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIElSUVRfUklTSU5HOgorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BVFIoaXJxKSkgfCBJTlRDX0JJVChpcnEpLCBJTlRDX0FUUihpcnEpKTsJLyplZGdlIHNlbnNpdGl2ZSAqLworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BUFIoaXJxKSkgfCBJTlRDX0JJVChpcnEpLCBJTlRDX0FQUihpcnEpKTsJLypyaXNpbmcgZWRnZSAqLworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBkb19lZGdlX0lSUSk7CisJCWJyZWFrOworCWNhc2UgSVJRVF9GQUxMSU5HOgorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BVFIoaXJxKSkgfCBJTlRDX0JJVChpcnEpLCBJTlRDX0FUUihpcnEpKTsJLyplZGdlIHNlbnNpdGl2ZSAqLworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BUFIoaXJxKSkgJiB+SU5UQ19CSVQoaXJxKSwgSU5UQ19BUFIoaXJxKSk7CS8qZmFsbGluZyBlZGdlICovCisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2VkZ2VfSVJRKTsKKwkJYnJlYWs7CisJY2FzZSBJUlFUX0xPVzoKKwkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKElOVENfQVRSKGlycSkpICYgfklOVENfQklUKGlycSksIElOVENfQVRSKGlycSkpOwkvKmxldmVsIHNlbnNpdGl2ZSAqLworCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BUFIoaXJxKSkgJiB+SU5UQ19CSVQoaXJxKSwgSU5UQ19BUFIoaXJxKSk7CS8qbG93IGxldmVsICovCisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCWJyZWFrOworCWNhc2UgSVJRVF9ISUdIOgorCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoSU5UQ19BVFIoaXJxKSkgJiB+SU5UQ19CSVQoaXJxKSwgSU5UQ19BVFIoaXJxKSk7CS8qbGV2ZWwgc2Vuc2l0aXZlICovCisJCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChJTlRDX0FQUihpcnEpKSB8IElOVENfQklUKGlycSksIElOVENfQVBSKGlycSkpOwkvKiBoaWdoIGxldmVsICovCisJCXNldF9pcnFfaGFuZGxlcihpcnEsIGRvX2xldmVsX0lSUSk7CisJCWJyZWFrOworCisJLyogSVJRVF9CT1RIRURHRSBpcyBub3Qgc3VwcG9ydGVkICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJQTlg0MDA4IElSUTogVW5zdXBwb3J0ZWQgaXJxIHR5cGUgJWRcbiIsIHR5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgcG54NDAwOF9pcnFfY2hpcCA9IHsKKwkuYWNrID0gcG54NDAwOF9tYXNrX2Fja19pcnEsCisJLm1hc2sgPSBwbng0MDA4X21hc2tfaXJxLAorCS51bm1hc2sgPSBwbng0MDA4X3VubWFza19pcnEsCisJLnNldF90eXBlID0gcG54NDAwOF9zZXRfaXJxX3R5cGUsCit9OworCit2b2lkIF9faW5pdCBwbng0MDA4X2luaXRfaXJxKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwkvKiBjb25maWd1cmUgYW5kIGVuYWJsZSBJUlEgMCwxLDMwLDMxIChjYXNjYWRlIGludGVycnVwdHMpIG1hc2sgYWxsIG90aGVycyAqLworCXBueDQwMDhfc2V0X2lycV90eXBlKFNVQjFfSVJRX04sIHBueDQwMDhfaXJxX3R5cGVbU1VCMV9JUlFfTl0pOworCXBueDQwMDhfc2V0X2lycV90eXBlKFNVQjJfSVJRX04sIHBueDQwMDhfaXJxX3R5cGVbU1VCMl9JUlFfTl0pOworCXBueDQwMDhfc2V0X2lycV90eXBlKFNVQjFfRklRX04sIHBueDQwMDhfaXJxX3R5cGVbU1VCMV9GSVFfTl0pOworCXBueDQwMDhfc2V0X2lycV90eXBlKFNVQjJfRklRX04sIHBueDQwMDhfaXJxX3R5cGVbU1VCMl9GSVFfTl0pOworCisJX19yYXdfd3JpdGVsKCgxIDw8IFNVQjJfRklRX04pIHwgKDEgPDwgU1VCMV9GSVFfTikgfAorCQkJKDEgPDwgU1VCMl9JUlFfTikgfCAoMSA8PCBTVUIxX0lSUV9OKSwKKwkJSU5UQ19FUihNQUlOX0JBU0VfSU5UKSk7CisJX19yYXdfd3JpdGVsKDAsIElOVENfRVIoU0lDMV9CQVNFX0lOVCkpOworCV9fcmF3X3dyaXRlbCgwLCBJTlRDX0VSKFNJQzJfQkFTRV9JTlQpKTsKKworCS8qIGNvbmZpZ3VyZSBhbGwgb3RoZXIgSVJRJ3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJCWlmIChpID09IFNVQjJfRklRX04gfHwgaSA9PSBTVUIxX0ZJUV9OIHx8CisJCQlpID09IFNVQjJfSVJRX04gfHwgaSA9PSBTVUIxX0lSUV9OKQorCQkJY29udGludWU7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJCXNldF9pcnFfY2hpcChpLCAmcG54NDAwOF9pcnFfY2hpcCk7CisJCXBueDQwMDhfc2V0X2lycV90eXBlKGksIHBueDQwMDhfaXJxX3R5cGVbaV0pOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjQ5Y2QzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYworICoKKyAqIFBvd2VyIE1hbmFnZW1lbnQgZHJpdmVyIGZvciBQTlg0MDA4CisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorCisjZGVmaW5lIFNSQU1fVkEgSU9fQUREUkVTUyhQTlg0MDA4X0lSQU1fQkFTRSkKKworc3RhdGljIHZvaWQgKnNhdmVkX3NyYW07CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpwbGw0X2NsazsKKworc3RhdGljIGlubGluZSB2b2lkIHBueDQwMDhfc3RhbmRieSh2b2lkKQoreworCXZvaWQgKCpwbng0MDA4X2NwdV9zdGFuZGJ5X3B0cikgKHZvaWQpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9maXFfZGlzYWJsZSgpOworCisJY2xrX2Rpc2FibGUocGxsNF9jbGspOworCisJLypzYXZpbmcgcG9ydGlvbiBvZiBTUkFNIHRvIGJlIHVzZWQgYnkgc3VzcGVuZCBmdW5jdGlvbi4gKi8KKwltZW1jcHkoc2F2ZWRfc3JhbSwgKHZvaWQgKilTUkFNX1ZBLCBwbng0MDA4X2NwdV9zdGFuZGJ5X3N6KTsKKworCS8qbWFrZSBzdXJlIFNSQU0gY29weSBnZXRzIHBoeXNpY2FsbHkgd3JpdHRlbiBpbnRvIFNEUkFNLgorCSAgIFNEUkFNIHdpbGwgYmUgcGxhY2VkIGludG8gc2VsZi1yZWZyZXNoIGR1cmluZyBwb3dlciBkb3duICovCisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwkvKmNvcHkgc3VzcGVuZCBmdW5jdGlvbiBpbnRvIFNSQU0gKi8KKwltZW1jcHkoKHZvaWQgKilTUkFNX1ZBLCBwbng0MDA4X2NwdV9zdGFuZGJ5LCBwbng0MDA4X2NwdV9zdGFuZGJ5X3N6KTsKKworCS8qZG8gc3VzcGVuZCAqLworCXBueDQwMDhfY3B1X3N0YW5kYnlfcHRyID0gKHZvaWQgKilTUkFNX1ZBOworCXBueDQwMDhfY3B1X3N0YW5kYnlfcHRyKCk7CisKKwkvKnJlc3RvcmluZyBwb3J0aW9uIG9mIFNSQU0gdGhhdCB3YXMgdXNlZCBieSBzdXNwZW5kIGZ1bmN0aW9uICovCisJbWVtY3B5KCh2b2lkICopU1JBTV9WQSwgc2F2ZWRfc3JhbSwgcG54NDAwOF9jcHVfc3RhbmRieV9zeik7CisKKwljbGtfZW5hYmxlKHBsbDRfY2xrKTsKKworCWxvY2FsX2ZpcV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbng0MDA4X3N1c3BlbmQodm9pZCkKK3sKKwl2b2lkICgqcG54NDAwOF9jcHVfc3VzcGVuZF9wdHIpICh2b2lkKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfZmlxX2Rpc2FibGUoKTsKKworCWNsa19kaXNhYmxlKHBsbDRfY2xrKTsKKworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBTVEFSVF9JTlRfUlNSX1JFRyhTRV9QSU5fQkFTRV9JTlQpKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgU1RBUlRfSU5UX1JTUl9SRUcoU0VfSU5UX0JBU0VfSU5UKSk7CisKKwkvKnNhdmluZyBwb3J0aW9uIG9mIFNSQU0gdG8gYmUgdXNlZCBieSBzdXNwZW5kIGZ1bmN0aW9uLiAqLworCW1lbWNweShzYXZlZF9zcmFtLCAodm9pZCAqKVNSQU1fVkEsIHBueDQwMDhfY3B1X3N1c3BlbmRfc3opOworCisJLyptYWtlIHN1cmUgU1JBTSBjb3B5IGdldHMgcGh5c2ljYWxseSB3cml0dGVuIGludG8gU0RSQU0uCisJICAgU0RSQU0gd2lsbCBiZSBwbGFjZWQgaW50byBzZWxmLXJlZnJlc2ggZHVyaW5nIHBvd2VyIGRvd24gKi8KKwlmbHVzaF9jYWNoZV9hbGwoKTsKKworCS8qY29weSBzdXNwZW5kIGZ1bmN0aW9uIGludG8gU1JBTSAqLworCW1lbWNweSgodm9pZCAqKVNSQU1fVkEsIHBueDQwMDhfY3B1X3N1c3BlbmQsIHBueDQwMDhfY3B1X3N1c3BlbmRfc3opOworCisJLypkbyBzdXNwZW5kICovCisJcG54NDAwOF9jcHVfc3VzcGVuZF9wdHIgPSAodm9pZCAqKVNSQU1fVkE7CisJcG54NDAwOF9jcHVfc3VzcGVuZF9wdHIoKTsKKworCS8qcmVzdG9yaW5nIHBvcnRpb24gb2YgU1JBTSB0aGF0IHdhcyB1c2VkIGJ5IHN1c3BlbmQgZnVuY3Rpb24gKi8KKwltZW1jcHkoKHZvaWQgKilTUkFNX1ZBLCBzYXZlZF9zcmFtLCBwbng0MDA4X2NwdV9zdXNwZW5kX3N6KTsKKworCWNsa19lbmFibGUocGxsNF9jbGspOworCisJbG9jYWxfZmlxX2VuYWJsZSgpOworCWxvY2FsX2lycV9lbmFibGUoKTsKK30KKworc3RhdGljIGludCBwbng0MDA4X3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6CisJCXBueDQwMDhfc3RhbmRieSgpOworCQlicmVhazsKKwljYXNlIFBNX1NVU1BFTkRfTUVNOgorCQlwbng0MDA4X3N1c3BlbmQoKTsKKwkJYnJlYWs7CisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVkIGFmdGVyIHByb2Nlc3NlcyBhcmUgZnJvemVuLCBidXQgYmVmb3JlIHdlIHNodXQgZG93biBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IHBueDQwMDhfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgorCWNhc2UgUE1fU1VTUEVORF9NRU06CisJCWJyZWFrOworCisJY2FzZSBQTV9TVVNQRU5EX0RJU0s6CisJCXJldHVybiAtRU5PVFNVUFA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBkZXZpY2VzIGFyZSByZS1zZXR1cCwgYnV0IGJlZm9yZSBwcm9jZXNzZXMgYXJlIHRoYXdlZC4KKyAqLworc3RhdGljIGludCBwbng0MDA4X3BtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdG8gUE1fRElTS19GSVJNV0FSRSBzbyB3ZSBjYW4gcXVpY2tseSB2ZXRvIHN1c3BlbmQtdG8tZGlzay4KKyAqLworc3RhdGljIHN0cnVjdCBwbV9vcHMgcG54NDAwOF9wbV9vcHMgPSB7CisJLnByZXBhcmUgPSBwbng0MDA4X3BtX3ByZXBhcmUsCisJLmVudGVyID0gcG54NDAwOF9wbV9lbnRlciwKKwkuZmluaXNoID0gcG54NDAwOF9wbV9maW5pc2gsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbng0MDA4X3BtX2luaXQodm9pZCkKK3sKKwl1MzIgc3JhbV9zaXplX3RvX2FsbG9jYXRlOworCisJcGxsNF9jbGsgPSBjbGtfZ2V0KDAsICJja19wbGw0Iik7CisJaWYgKElTX0VSUihwbGw0X2NsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiUE0gU3VzcGVuZCBjYW5ub3QgYWNxdWlyZSBBUk0oUExMNCkgY2xvY2sgY29udHJvbFxuIik7CisJCXJldHVybiBQVFJfRVJSKHBsbDRfY2xrKTsKKwl9CisKKwlpZiAocG54NDAwOF9jcHVfc3RhbmRieV9zeiA+IHBueDQwMDhfY3B1X3N1c3BlbmRfc3opCisJCXNyYW1fc2l6ZV90b19hbGxvY2F0ZSA9IHBueDQwMDhfY3B1X3N0YW5kYnlfc3o7CisJZWxzZQorCQlzcmFtX3NpemVfdG9fYWxsb2NhdGUgPSBwbng0MDA4X2NwdV9zdXNwZW5kX3N6OworCisJc2F2ZWRfc3JhbSA9IGttYWxsb2Moc3JhbV9zaXplX3RvX2FsbG9jYXRlLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNhdmVkX3NyYW0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiUE0gU3VzcGVuZDogY2Fubm90IGFsbG9jYXRlIG1lbW9yeSB0byBzYXZlIHBvcnRpb24gb2YgU1JBTVxuIik7CisJCWNsa19wdXQocGxsNF9jbGspOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwbV9zZXRfb3BzKCZwbng0MDA4X3BtX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwocG54NDAwOF9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFlMDRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NlcmlhbC5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NlcmlhbC5jCisgKgorICogIFBOWDQwMDggVUFSVCBpbml0aWFsaXphdGlvbgorICoKKyAqICBDb3B5cmlnaHQ6CU1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLiAoYykgMjAwNQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BtLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9jbG9jay5oPgorCisjZGVmaW5lIFVBUlRfMwkJMAorI2RlZmluZSBVQVJUXzQJCTEKKyNkZWZpbmUgVUFSVF81CQkyCisjZGVmaW5lIFVBUlRfNgkJMworI2RlZmluZSBVQVJUX1VOS05PV04JKC0xKQorCisjZGVmaW5lIFVBUlQzX0JBU0VfVkEJSU9fQUREUkVTUyhQTlg0MDA4X1VBUlQzX0JBU0UpCisjZGVmaW5lIFVBUlQ0X0JBU0VfVkEJSU9fQUREUkVTUyhQTlg0MDA4X1VBUlQ0X0JBU0UpCisjZGVmaW5lIFVBUlQ1X0JBU0VfVkEJSU9fQUREUkVTUyhQTlg0MDA4X1VBUlQ1X0JBU0UpCisjZGVmaW5lIFVBUlQ2X0JBU0VfVkEJSU9fQUREUkVTUyhQTlg0MDA4X1VBUlQ2X0JBU0UpCisKKyNkZWZpbmUgVUFSVF9GQ1JfT0ZGU0VUCQk4CisjZGVmaW5lIFVBUlRfRklGT19TSVpFCQk2NAorCit2b2lkIHBueDQwMDhfdWFydF9pbml0KHZvaWQpCit7CisJdTMyIHRtcDsKKwlpbnQgaSA9IFVBUlRfRklGT19TSVpFOworCisJX19yYXdfd3JpdGVsKDB4QzEsIFVBUlQ1X0JBU0VfVkEgKyBVQVJUX0ZDUl9PRkZTRVQpOworCV9fcmF3X3dyaXRlbCgweEMxLCBVQVJUM19CQVNFX1ZBICsgVUFSVF9GQ1JfT0ZGU0VUKTsKKworCS8qIFNlbmQgYSBOVUxMIHRvIGZpeCB0aGUgVUFSVCBIVyBidWcgKi8KKwlfX3Jhd193cml0ZWwoMHgwMCwgVUFSVDVfQkFTRV9WQSk7CisJX19yYXdfd3JpdGVsKDB4MDAsIFVBUlQzX0JBU0VfVkEpOworCisJd2hpbGUgKGktLSkgeworCQl0bXAgPSBfX3Jhd19yZWFkbChVQVJUNV9CQVNFX1ZBKTsKKwkJdG1wID0gX19yYXdfcmVhZGwoVUFSVDNfQkFTRV9WQSk7CisJfQorCV9fcmF3X3dyaXRlbCgwLCBVQVJUNV9CQVNFX1ZBICsgVUFSVF9GQ1JfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwoMCwgVUFSVDNfQkFTRV9WQSArIFVBUlRfRkNSX09GRlNFVCk7CisKKwkvKiBzZXR1cCB3YWtldXAgaW50ZXJydXB0ICovCisJc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZShTRV9VM19SWF9JTlQpOworCXN0YXJ0X2ludF9hY2soU0VfVTNfUlhfSU5UKTsKKwlzdGFydF9pbnRfdW1hc2soU0VfVTNfUlhfSU5UKTsKKworCXN0YXJ0X2ludF9zZXRfcmlzaW5nX2VkZ2UoU0VfVTVfUlhfSU5UKTsKKwlzdGFydF9pbnRfYWNrKFNFX1U1X1JYX0lOVCk7CisJc3RhcnRfaW50X3VtYXNrKFNFX1U1X1JYX0lOVCk7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcG54NDAwOC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjODAyYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcG54NDAwOC9zbGVlcC5TCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3NsZWVwLlMKKyAqCisgKiBQTlg0MDA4IHN1cHBvcnQgZm9yIFNUT1AgbW9kZSBhbmQgU0RSQU0gc2VsZi1yZWZyZXNoCisgKgorICogQXV0aG9yczogRG1pdHJ5IENoaWdpcmV2LCBWaXRhbHkgV29vbCA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2RlZmluZSBQV1JNQU5fVkFfQkFTRSBJT19BRERSRVNTKFBOWDQwMDhfUFdSTUFOX0JBU0UpCisjZGVmaW5lIFBXUl9DVFJMX1JFR19PRkZTIDB4NDQKKworI2RlZmluZSBTRFJBTV9DRkdfVkFfQkFTRSBJT19BRERSRVNTKFBOWDQwMDhfU0RSQU1fQ0ZHX0JBU0UpCisjZGVmaW5lIE1QTUNfU1RBVFVTX1JFR19PRkZTIDB4NAorCisJCS50ZXh0CisKK0VOVFJZKHBueDQwMDhfY3B1X3N1c3BlbmQpCisJQHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGVudGVyZWQgaW4gRGlyZWN0IHJ1biBtb2RlLgorCisJQCBzYXZlIHJlZ2lzdGVycyBvbiBzdGFjaworCXN0bWZkCXNwISwge3IwIC0gcjYsIGxyfQorCisJQCBzZXR1cCBQb3dlciBNYW5hZ2VyIGJhc2UgYWRkcmVzcyBpbiByNAorCUAgYW5kIHB1dCBpdCdzIHZhbHVlIGluIHI1CisJbW92CXI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHhmZjAwMDAwMCkKKwlvcnIJcjQsIHI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHgwMGZmMDAwMCkKKwlvcnIJcjQsIHI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHgwMDAwZmYwMCkKKwlvcnIJcjQsIHI0LCAjKFBXUk1BTl9WQV9CQVNFICYgMHgwMDAwMDBmZikKKwlsZHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBzZXR1cCBTRFJBTSBjb250cm9sbGVyIGJhc2UgYWRkcmVzcyBpbiByMgorCUAgYW5kIHB1dCBpdCdzIHZhbHVlIGluIHIzCisJbW92CXIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHhmZjAwMDAwMCkKKwlvcnIJcjIsIHIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHgwMGZmMDAwMCkKKwlvcnIJcjIsIHIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHgwMDAwZmYwMCkKKwlvcnIJcjIsIHIyLCAjKFNEUkFNX0NGR19WQV9CQVNFICYgMHgwMDAwMDBmZikKKwlsZHIJcjMsIFtyMiwgI01QTUNfU1RBVFVTX1JFR19PRkZTXSBAZXh0cmEgcmVhZCAtIEhXIGJ1ZyB3b3JrYXJvdW5kCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA4KSkKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA5KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBkbyBzYXZlIGN1cnJlbnQgYml0IHNldHRpbmdzIGluIHIxCisJbW92CXIxLCByNQorCisJQCBzZXQgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdAorCW9ycglyNSwgcjUsICMoMSA8PCA5KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHNldCBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJb3JyCXI1LCByNSwgIygxIDw8IDgpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCWFuZAlyNSwgcjUsICMofigxIDw8IDgpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA5KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCB3YWl0IGZvciBTRFJBTSB0byBnZXQgaW50byBzZWxmLXJlZnJlc2ggbW9kZQorMjoJbGRyCXIzLCBbcjIsICNNUE1DX1NUQVRVU19SRUdfT0ZGU10KKwl0c3QJcjMsICMoMSA8PCAyKQorCWJlcQkyYgorCisJQCB0byBwcmVwYXJlIFNEUkFNIHRvIGdldCBvdXQgb2Ygc2VsZi1yZWZyZXNoIG1vZGUgYWZ0ZXIgd2FrZXVwCisJb3JyCXI1LCByNSwgIygxIDw8IDcpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgZG8gZW50ZXIgc3RvcCBtb2RlCisJb3JyCXI1LCByNSwgIygxIDw8IDApCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKwlub3AKKworCUAgc2xlZXBpbmcgbm93Li4uCisKKwlAIGNvbWluZyBvdXQgb2YgU1RPUCBtb2RlIGludG8gRGlyZWN0IFJ1biBtb2RlCisJQCBjbGVhciBTVE9QIG1vZGUgYW5kIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXRzCisJc3RyCXIxLCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgd2FpdCBmb3IgU0RSQU0gdG8gZ2V0IG91dCBzZWxmLXJlZnJlc2ggbW9kZQorMzoJbGRyCXIzLCBbcjIsICNNUE1DX1NUQVRVU19SRUdfT0ZGU10KKwl0c3QJcjMsICM1CisJYm5lCTNiCisKKwlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCisJbGRtZmQgICBzcCEsIHtyMCAtIHI2LCBwY30KKworRU5UUlkocG54NDAwOF9jcHVfc3VzcGVuZF9zeikKKwkud29yZAkuIC0gcG54NDAwOF9jcHVfc3VzcGVuZAorCitFTlRSWShwbng0MDA4X2NwdV9zdGFuZGJ5KQorCUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwlzdG1mZAlzcCEsIHtyMCAtIHI2LCBscn0KKworCUAgc2V0dXAgUG93ZXIgTWFuYWdlciBiYXNlIGFkZHJlc3MgaW4gcjQKKwlAIGFuZCBwdXQgaXQncyB2YWx1ZSBpbiByNQorCW1vdglyNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4ZmYwMDAwMDApCisJb3JyCXI0LCByNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4MDBmZjAwMDApCisJb3JyCXI0LCByNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4MDAwMGZmMDApCisJb3JyCXI0LCByNCwgIyhQV1JNQU5fVkFfQkFTRSAmIDB4MDAwMDAwZmYpCisJbGRyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgc2V0dXAgU0RSQU0gY29udHJvbGxlciBiYXNlIGFkZHJlc3MgaW4gcjIKKwlAIGFuZCBwdXQgaXQncyB2YWx1ZSBpbiByMworCW1vdglyMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4ZmYwMDAwMDApCisJb3JyCXIyLCByMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4MDBmZjAwMDApCisJb3JyCXIyLCByMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4MDAwMGZmMDApCisJb3JyCXIyLCByMiwgIyhTRFJBTV9DRkdfVkFfQkFTRSAmIDB4MDAwMDAwZmYpCisJbGRyCXIzLCBbcjIsICNNUE1DX1NUQVRVU19SRUdfT0ZGU10gQGV4dHJhIHJlYWQgLSBIVyBidWcgd29ya2Fyb3VuZAorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOCkpCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0CisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOSkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgZG8gc2F2ZSBjdXJyZW50IGJpdCBzZXR0aW5ncyBpbiByMQorCW1vdglyMSwgcjUKKworCUAgc2V0IFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQKKwlvcnIJcjUsIHI1LCAjKDEgPDwgOSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBzZXQgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCW9ycglyNSwgcjUsICMoMSA8PCA4KQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIGNsZWFyIFNEUkFNIHNlbGYtcmVmcmVzaCBiaXQgbGF0Y2gKKwlhbmQJcjUsIHI1LCAjKH4oMSA8PCA4KSkKKwlzdHIJcjUsIFtyNCwgI1BXUl9DVFJMX1JFR19PRkZTXQorCisJQCBjbGVhciBTRFJBTSBzZWxmLXJlZnJlc2ggYml0CisJYW5kCXI1LCByNSwgIyh+KDEgPDwgOSkpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgd2FpdCBmb3IgU0RSQU0gdG8gZ2V0IGludG8gc2VsZi1yZWZyZXNoIG1vZGUKKzI6CWxkcglyMywgW3IyLCAjTVBNQ19TVEFUVVNfUkVHX09GRlNdCisJdHN0CXIzLCAjKDEgPDwgMikKKwliZXEJMmIKKworCUAgc2V0ICdnZXQgb3V0IG9mIHNlbGYtcmVmcmVzaCBtb2RlIGFmdGVyIHdha2V1cCcgYml0CisJb3JyCXI1LCByNSwgIygxIDw8IDcpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCW1jciAgICAgcDE1LCAwLCByMCwgYzcsIGMwLCA0CUAga2luZGEgc2xlZXBpbmcgbm93Li4uCisKKwlAIHNldCBTRFJBTSBzZWxmLXJlZnJlc2ggYml0IGxhdGNoCisJb3JyCXI1LCByNSwgIygxIDw8IDgpCisJc3RyCXI1LCBbcjQsICNQV1JfQ1RSTF9SRUdfT0ZGU10KKworCUAgY2xlYXIgU0RSQU0gc2VsZi1yZWZyZXNoIGJpdCBsYXRjaAorCWFuZAlyNSwgcjUsICMofigxIDw8IDgpKQorCXN0cglyNSwgW3I0LCAjUFdSX0NUUkxfUkVHX09GRlNdCisKKwlAIHdhaXQgZm9yIFNEUkFNIHRvIGdldCBvdXQgc2VsZi1yZWZyZXNoIG1vZGUKKzM6CWxkcglyMywgW3IyLCAjTVBNQ19TVEFUVVNfUkVHX09GRlNdCisJdHN0CXIzLCAjNQorCWJuZQkzYgorCisJQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorCWxkbWZkICAgc3AhLCB7cjAgLSByNiwgcGN9CisKK0VOVFJZKHBueDQwMDhfY3B1X3N0YW5kYnlfc3opCisJLndvcmQJLiAtIHBueDQwMDhfY3B1X3N0YW5kYnkKKworRU5UUlkocG54NDAwOF9jYWNoZV9jbGVhbl9pbnZhbGlkYXRlKQorCXN0bWZkCXNwISwge3IwIC0gcjYsIGxyfQorI2lmZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzYsIDAJCUAgaW52YWxpZGF0ZSBEIGNhY2hlCisjZWxzZQorMToJbXJjCXAxNSwgMCwgcjE1LCBjNywgYzE0LCAzCQlAIHRlc3QsY2xlYW4saW52YWxpZGF0ZQorCWJuZSAgICAgMWIKKyNlbmRpZgorCWxkbWZkICAgc3AhLCB7cjAgLSByNiwgcGN9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2U2ODA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3RpbWUuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcG54NDAwOC90aW1lLmMKKyAqCisgKiBQTlg0MDA4IFRpbWVycworICoKKyAqIEF1dGhvcnM6IFZpdGFseSBXb29sLCBEbWl0cnkgQ2hpZ2lyZXYsIEdyaWdvcnkgVG9sc3RvbHl0a2luIDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbGVkcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworLyohIE5vdGU6IGFsbCB0aW1lcnMgYXJlIFVQQ09VTlRJTkcgKi8KKworLyohCisgKiBSZXR1cm5zIG51bWJlciBvZiB1cyBzaW5jZSBsYXN0IGNsb2NrIGludGVycnVwdC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzCisgKiB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBieSBkb19nZXR0aW1lb2Zmc2V0KCkKKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcG54NDAwOF9nZXR0aW1lb2Zmc2V0KHZvaWQpCit7CisJdTMyIHRpY2tzX3RvX21hdGNoID0KKwkgICAgX19yYXdfcmVhZGwoSFNUSU1fTUFUQ0gwKSAtIF9fcmF3X3JlYWRsKEhTVElNX0NPVU5URVIpOworCXUzMiBlbGFwc2VkID0gTEFUQ0ggLSB0aWNrc190b19tYXRjaDsKKwlyZXR1cm4gKGVsYXBzZWQgKiAodGlja19uc2VjIC8gMTAwMCkpIC8gTEFUQ0g7Cit9CisKKy8qIQorICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcG54NDAwOF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLAorCQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlpZiAoX19yYXdfcmVhZGwoSFNUSU1fSU5UKSAmIE1BVENIMF9JTlQpIHsKKworCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKKworCQlkbyB7CisJCQl0aW1lcl90aWNrKHJlZ3MpOworCisJCQkvKgorCQkJICogdGhpcyBhbGdvcml0aG0gdGFrZXMgY2FyZSBvZiBwb3NzaWJsZSBkZWxheQorCQkJICogZm9yIHRoaXMgaW50ZXJydXB0IGhhbmRsaW5nIGxvbmdlciB0aGFuIGEgbm9ybWFsCisJCQkgKiB0aW1lciBwZXJpb2QKKwkJCSAqLworCQkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKEhTVElNX01BVENIMCkgKyBMQVRDSCwKKwkJCQkgICAgIEhTVElNX01BVENIMCk7CisJCQlfX3Jhd193cml0ZWwoTUFUQ0gwX0lOVCwgSFNUSU1fSU5UKTsJLyogY2xlYXIgaW50ZXJydXB0ICovCisKKwkJCS8qCisJCQkgKiBUaGUgZ29hbCBpcyB0byBrZWVwIGluY3JlbWVudGluZyBIU1RJTV9NQVRDSDAKKwkJCSAqIHJlZ2lzdGVyIHVudGlsIEhTVElNX01BVENIMCBpbmRpY2F0ZXMgdGltZSBhZnRlcgorCQkJICogd2hhdCBIU1RJTV9DT1VOVEVSIGluZGljYXRlcy4KKwkJCSAqLworCQl9IHdoaWxlICgoc2lnbmVkKQorCQkJIChfX3Jhd19yZWFkbChIU1RJTV9NQVRDSDApIC0KKwkJCSAgX19yYXdfcmVhZGwoSFNUSU1fQ09VTlRFUikpIDwgMCk7CisKKwkJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHBueDQwMDhfdGltZXJfaXJxID0geworCS5uYW1lID0gIlBOWDQwMDggVGljayBUaW1lciIsCisJLmZsYWdzID0gU0FfSU5URVJSVVBUIHwgU0FfVElNRVIsCisJLmhhbmRsZXIgPSBwbng0MDA4X3RpbWVyX2ludGVycnVwdAorfTsKKworLyohCisgKiBTZXQgdXAgdGltZXIgYW5kIHRpbWVyIGludGVycnVwdC4KKyAqLworc3RhdGljIF9faW5pdCB2b2lkIHBueDQwMDhfc2V0dXBfdGltZXIodm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoUkVTRVRfQ09VTlQsIE1TVElNX0NUUkwpOworCXdoaWxlIChfX3Jhd19yZWFkbChNU1RJTV9DT1VOVEVSKSkgOwkvKiB3YWl0IGZvciByZXNldCB0byBjb21wbGV0ZS4gMTAwJSBndWFyYW50ZWUgZXZlbnQgKi8KKwlfX3Jhd193cml0ZWwoMCwgTVNUSU1fQ1RSTCk7CS8qIHN0b3AgdGhlIHRpbWVyICovCisJX19yYXdfd3JpdGVsKDAsIE1TVElNX01DVFJMKTsKKworCV9fcmF3X3dyaXRlbChSRVNFVF9DT1VOVCwgSFNUSU1fQ1RSTCk7CisJd2hpbGUgKF9fcmF3X3JlYWRsKEhTVElNX0NPVU5URVIpKSA7CS8qIHdhaXQgZm9yIHJlc2V0IHRvIGNvbXBsZXRlLiAxMDAlIGd1YXJhbnRlZSBldmVudCAqLworCV9fcmF3X3dyaXRlbCgwLCBIU1RJTV9DVFJMKTsKKwlfX3Jhd193cml0ZWwoMCwgSFNUSU1fTUNUUkwpOworCV9fcmF3X3dyaXRlbCgwLCBIU1RJTV9DQ1IpOworCV9fcmF3X3dyaXRlbCgxMiwgSFNUSU1fUE1BVENIKTsJLyogc2NhbGUgZG93biB0byAxIE1IWiAqLworCV9fcmF3X3dyaXRlbChMQVRDSCwgSFNUSU1fTUFUQ0gwKTsKKwlfX3Jhd193cml0ZWwoTVIwX0lOVCwgSFNUSU1fTUNUUkwpOworCisJc2V0dXBfaXJxKEhTVElNRVJfSU5ULCAmcG54NDAwOF90aW1lcl9pcnEpOworCisJX19yYXdfd3JpdGVsKENPVU5UX0VOQUIgfCBERUJVR19FTiwgSFNUSU1fQ1RSTCk7CS8qc3RhcnQgdGltZXIsIHN0b3Agd2hlbiBKVEFHIGFjdGl2ZSAqLworfQorCisvKiBUaW1lciBDbG9jayBDb250cm9sIGluIFBNIHJlZ2lzdGVyICovCisjZGVmaW5lIFRJTUNMS19DVFJMX1JFRyAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4QkMpKQorI2RlZmluZSBXQVRDSERPR19DTEtfRU4gICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBUSU1FUl9DTEtfRU4gICAgICAgICAgICAgICAgICAgICAgMgkvKiBIUyBhbmQgTVMgdGltZXJzPyAqLworCitzdGF0aWMgdTMyIHRpbWNsa19jdHJsX3JlZ19zYXZlOworCit2b2lkIHBueDQwMDhfdGltZXJfc3VzcGVuZCh2b2lkKQoreworCXRpbWNsa19jdHJsX3JlZ19zYXZlID0gX19yYXdfcmVhZGwoVElNQ0xLX0NUUkxfUkVHKTsKKwlfX3Jhd193cml0ZWwoMCwgVElNQ0xLX0NUUkxfUkVHKTsJLyogZGlzYWJsZSB0aW1lcnMgKi8KK30KKwordm9pZCBwbng0MDA4X3RpbWVyX3Jlc3VtZSh2b2lkKQoreworCV9fcmF3X3dyaXRlbCh0aW1jbGtfY3RybF9yZWdfc2F2ZSwgVElNQ0xLX0NUUkxfUkVHKTsJLyogZW5hYmxlIHRpbWVycyAqLworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHBueDQwMDhfdGltZXIgPSB7CisJLmluaXQgPSBwbng0MDA4X3NldHVwX3RpbWVyLAorCS5vZmZzZXQgPSBwbng0MDA4X2dldHRpbWVvZmZzZXQsCisJLnN1c3BlbmQgPSBwbng0MDA4X3RpbWVyX3N1c3BlbmQsCisJLnJlc3VtZSA9IHBueDQwMDhfdGltZXJfcmVzdW1lLAorfTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCmluZGV4IDNlMjZkN2MuLjFhYjI2YzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKQEAgLTIyLDYgKzIyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9weGEyeHhfc3BpLmg+CisKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTE5Niw2ICsyMDAsNzggQEAKIAl9LAogfTsKIAorLyogQURTNzg0NiBpcyBjb25uZWN0ZWQgdGhyb3VnaCBTU1AgLi4uIGFuZCBpZiB5b3VyIGJvYXJkIGhhcyBKNSBwb3B1bGF0ZWQsCisgKiB5b3UgY2FuIHNlbGVjdCBpdCB0byByZXBsYWNlIHRoZSB1Y2IxNDAwIGJ5IHN3aXRjaGluZyB0aGUgdG91Y2hzY3JlZW4gY2FibGUKKyAqICh0byBKNSkgYW5kIHBva2luZyBib2FyZCByZWdpc3RlcnMgKGFzIGRvbmUgYmVsb3cpLiAgRWxzZSBpdCdzIG9ubHkgdXNlZnVsCisgKiBmb3IgdGhlIHRlbXBlcmF0dXJlIHNlbnNvcnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcHhhX3NzcF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IF9fUFJFRyhTU0NSMF9QKDEpKSwKKwkJLmVuZAk9IF9fUFJFRyhTU0NSMF9QKDEpKSArIDB4MTQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfU1NQLAorCQkuZW5kCT0gSVJRX1NTUCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhMnh4X3NwaV9tYXN0ZXIgcHhhX3NzcF9tYXN0ZXJfaW5mbyA9IHsKKwkuc3NwX3R5cGUJPSBQWEEyNXhfU1NQLAorCS5jbG9ja19lbmFibGUJPSBDS0VOM19TU1AsCisJLm51bV9jaGlwc2VsZWN0CT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9zc3AgPSB7CisJLm5hbWUJCT0gInB4YTJ4eC1zcGkiLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHB4YV9zc3BfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShweGFfc3NwX3Jlc291cmNlcyksCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcHhhX3NzcF9tYXN0ZXJfaW5mbywKKwl9LAorfTsKKworc3RhdGljIGludCBsdWJib2NrX2Fkczc4NDZfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCS8qIFRTX0JVU1kgaXMgYml0IDggaW4gTFVCX01JU0NfUkQsIGJ1dCBwZW5kb3duIGlzIGlycS1vbmx5ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYWRzNzg0Nl9wbGF0Zm9ybV9kYXRhIGFkc19pbmZvID0geworCS5tb2RlbAkJCT0gNzg0NiwKKwkudnJlZl9kZWxheV91c2Vjcwk9IDEwMCwJCS8qIGludGVybmFsLCBubyBjYXAgKi8KKwkuZ2V0X3BlbmRvd25fc3RhdGUJPSBsdWJib2NrX2Fkczc4NDZfcGVuZG93bl9zdGF0ZSwKKwkvLyAueF9wbGF0ZV9vaG1zCQk9IDUwMCwJLyogR1VFU1MhICovCisJLy8gLnlfcGxhdGVfb2htcwkJPSA1MDAsCS8qIEdVRVNTISAqLworfTsKKworc3RhdGljIHZvaWQgYWRzNzg0Nl9jcyh1MzIgY29tbWFuZCkKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQJVFNfbkNTID0gMSA8PCAxMTsKKwlsdWJib2NrX3NldF9taXNjX3dyKFRTX25DUywgKGNvbW1hbmQgPT0gUFhBMlhYX0NTX0FTU0VSVCkgPyAwIDogVFNfbkNTKTsKK30KKworc3RhdGljIHN0cnVjdCBweGEyeHhfc3BpX2NoaXAgYWRzX2h3ID0geworCS50eF90aHJlc2hvbGQJCT0gMSwKKwkucnhfdGhyZXNob2xkCQk9IDIsCisJLmNzX2NvbnRyb2wJCT0gYWRzNzg0Nl9jcywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geyB7CisJLm1vZGFsaWFzCT0gImFkczc4NDYiLAorCS5wbGF0Zm9ybV9kYXRhCT0gJmFkc19pbmZvLAorCS5jb250cm9sbGVyX2RhdGEgPSAmYWRzX2h3LAorCS5pcnEJCT0gTFVCQk9DS19CQl9JUlEsCisJLm1heF9zcGVlZF9oegk9IDEyMDAwMCAvKiBtYXggc2FtcGxlIHJhdGUgYXQgM1YgKi8KKwkJCQkqIDI2IC8qIGNvbW1hbmQgKyBkYXRhICsgb3ZlcmhlYWQgKi8sCisJLmJ1c19udW0JPSAxLAorCS5jaGlwX3NlbGVjdAk9IDAsCit9LAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21jOTF4X2RldmljZSA9IHsKIAkubmFtZQkJPSAic21jOTF4IiwKIAkuaWQJCT0gLTEsCkBAIC0yNzIsNiArMzQ4LDcgQEAKIAkmc21jOTF4X2RldmljZSwKIAkmbHViYm9ja19mbGFzaF9kZXZpY2VbMF0sCiAJJmx1YmJvY2tfZmxhc2hfZGV2aWNlWzFdLAorCSZweGFfc3NwLAogfTsKIAogc3RhdGljIHN0cnVjdCBweGFmYl9tYWNoX2luZm8gc2hhcnBfbG04djMxIF9faW5pdGRhdGEgPSB7CkBAIC00MDAsNiArNDc3LDggQEAKIAlsdWJib2NrX2ZsYXNoX2RhdGFbZmxhc2hib290XjFdLm5hbWUgPSAiYXBwbGljYXRpb24tZmxhc2giOwogCWx1YmJvY2tfZmxhc2hfZGF0YVtmbGFzaGJvb3RdLm5hbWUgPSAiYm9vdC1yb20iOwogCSh2b2lkKSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHNwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHNwaV9ib2FyZF9pbmZvKSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbHViYm9ja19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKQEAgLTQxNiw2ICs0OTUsMTEgQEAKIAlweGFfbWFwX2lvKCk7CiAJaW90YWJsZV9pbml0KGx1YmJvY2tfaW9fZGVzYywgQVJSQVlfU0laRShsdWJib2NrX2lvX2Rlc2MpKTsKIAorCS8qIFNTUCBkYXRhIHBpbnMgKi8KKwlweGFfZ3Bpb19tb2RlKEdQSU8yM19TQ0xLX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8yNV9TVFhEX01EKTsKKwlweGFfZ3Bpb19tb2RlKEdQSU8yNl9TUlhEX01EKTsKKwogCS8qIFRoaXMgZW5hYmxlcyB0aGUgQlRVQVJUICovCiAJcHhhX2dwaW9fbW9kZShHUElPNDJfQlRSWERfTUQpOwogCXB4YV9ncGlvX21vZGUoR1BJTzQzX0JUVFhEX01EKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggOTcwZjk4ZC4uMGMzMzQxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTcwLDYgKzcwLDE4IEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTTURLMjQ0MC4KIAorY29uZmlnIFNNREsyNDQwX0NQVTI0NDAKKwlib29sICJTTURLMjQ0MCB3aXRoIFMzQzI0NDAgY3B1IG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAorCWRlZmF1bHQgeSBpZiBBUkNIX1MzQzI0NDAKKwlzZWxlY3QgQ1BVX1MzQzI0NDAKKworY29uZmlnIFNNREsyNDQwX0NQVTI0NDIKKwlib29sICJTTURNMjQ0MCB3aXRoIFMzQzI0NDIgY3B1IG1vZHVsZSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAorCXNlbGVjdCBDUFVfUzNDMjQ0MgorCisKIGNvbmZpZyBNQUNIX1ZSMTAwMAogCWJvb2wgIlRob3Jjb20gVlIxMDAwIgogCXNlbGVjdCBDUFVfUzNDMjQxMApAQCAtMTA5LDEyICsxMjEsMjYgQEAKIAkgIFN1cHBvcnQgZm9yIFMzQzI0MTAgYW5kIFMzQzI0MTBBIGZhbWlseSBmcm9tIHRoZSBTM0MyNFhYIGxpbmUKIAkgIG9mIFNhbXN1bmcgTW9iaWxlIENQVXMuCiAKK2NvbmZpZyBDUFVfUzNDMjQ0WAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KKwogY29uZmlnIENQVV9TM0MyNDQwCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IENQVV9TM0MyNDRYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KIAorY29uZmlnIENQVV9TM0MyNDQyCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDIwCisJc2VsZWN0IENQVV9TM0MyNDRYCisJaGVscAorCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MiBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KKwogY29tbWVudCAiUzNDMjQxMCBCb290IgogCiBjb25maWcgUzNDMjQxMF9CT09UX1dBVENIRE9HCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggM2U1NzEyZC4uNWUwOTM1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtMjQsNiArMjQsMTEgQEAKIG9iai0kKENPTkZJR19QTSkJICAgKz0gcG0ubyBzbGVlcC5vCiBvYmotJChDT05GSUdfUE1fU0lNVEVDKQkgICArPSBwbS1zaW10ZWMubwogCisjIFMzQzI0NFggc3VwcG9ydAorCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpICArPSBzM2MyNDR4Lm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkgICs9IHMzYzI0NHgtaXJxLm8KKwogIyBTM0MyNDQwIHN1cHBvcnQKIAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQ0MC5vIHMzYzI0NDAtZHNjLm8KQEAgLTMxLDYgKzM2LDExIEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApICArPSBzM2MyNDQwLWNsb2NrLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkgICs9IHMzYzI0MTAtZ3Bpby5vCiAKKyMgUzNDMjQ0MiBzdXBwb3J0CisKK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MikgICs9IHMzYzI0NDIubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQyKSAgKz0gczNjMjQ0Mi1jbG9jay5vCisKICMgYmFzdCBleHRyYXMKIAogb2JqLSQoQ09ORklHX0JBU1RfUEMxMDRfSVJRKQkrPSBiYXN0LWlycS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCmluZGV4IDZkZTcxM2EuLjk5ZDE3NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jCkBAIC03MCw3ICs3MCw3IEBACiAJCWNsa2NvbiAmPSB+Y2xvY2tzOwogCiAJLyogZW5zdXJlIG5vbmUgb2YgdGhlIHNwZWNpYWwgZnVuY3Rpb24gYml0cyBzZXQgKi8KLQljbGtjb24gJj0gfihTM0MyNDEwX0NMS0NPTl9JRExFfFMzQzI0MTBfQ0xLQ09OX1BPV0VSKTsKKwljbGtjb24gJj0gfihTM0MyNDEwX0NMS0NPTl9JRExFfFMzQzI0MTBfQ0xLQ09OX1BPV0VSIHwgMyk7CiAKIAlfX3Jhd193cml0ZWwoY2xrY29uLCBTM0MyNDEwX0NMS0NPTik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY29tbW9uLXNtZGsuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCmluZGV4IGM5NDA4OTAuLmE0MGVhYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jb21tb24tc21kay5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbGVkcy1ncGlvLmg+CiAKICNpbmNsdWRlIDxhc20vYXJjaC9uYW5kLmg+CiAKQEAgLTQxLDYgKzQyLDY2IEBACiAjaW5jbHVkZSAiZGV2cy5oIgogI2luY2x1ZGUgInBtLmgiCiAKKy8qIExFRCBkZXZpY2VzICovCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgc21ka19wZGF0YV9sZWQ0ID0geworCS5ncGlvCQk9IFMzQzI0MTBfR1BGNCwKKwkuZmxhZ3MJCT0gUzNDMjRYWF9MRURGX0FDVExPVyB8IFMzQzI0WFhfTEVERl9UUklTVEFURSwKKwkubmFtZQkJPSAibGVkNCIsCisJLmRlZl90cmlnZ2VyCT0gInRpbWVyIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgc21ka19wZGF0YV9sZWQ1ID0geworCS5ncGlvCQk9IFMzQzI0MTBfR1BGNSwKKwkuZmxhZ3MJCT0gUzNDMjRYWF9MRURGX0FDVExPVyB8IFMzQzI0WFhfTEVERl9UUklTVEFURSwKKwkubmFtZQkJPSAibGVkNSIsCisJLmRlZl90cmlnZ2VyCT0gIm5hbmQtZGlzayIsCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfbGVkX3BsYXRkYXRhIHNtZGtfcGRhdGFfbGVkNiA9IHsKKwkuZ3BpbwkJPSBTM0MyNDEwX0dQRjYsCisJLmZsYWdzCQk9IFMzQzI0WFhfTEVERl9BQ1RMT1cgfCBTM0MyNFhYX0xFREZfVFJJU1RBVEUsCisJLm5hbWUJCT0gImxlZDYiLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2xlZF9wbGF0ZGF0YSBzbWRrX3BkYXRhX2xlZDcgPSB7CisJLmdwaW8JCT0gUzNDMjQxMF9HUEY3LAorCS5mbGFncwkJPSBTM0MyNFhYX0xFREZfQUNUTE9XIHwgUzNDMjRYWF9MRURGX1RSSVNUQVRFLAorCS5uYW1lCQk9ICJsZWQ3IiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGtfbGVkNCA9IHsKKwkubmFtZQkJPSAiczNjMjR4eF9sZWQiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWRrX3BkYXRhX2xlZDQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGtfbGVkNSA9IHsKKwkubmFtZQkJPSAiczNjMjR4eF9sZWQiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWRrX3BkYXRhX2xlZDUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGtfbGVkNiA9IHsKKwkubmFtZQkJPSAiczNjMjR4eF9sZWQiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWRrX3BkYXRhX2xlZDYsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGtfbGVkNyA9IHsKKwkubmFtZQkJPSAiczNjMjR4eF9sZWQiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbWRrX3BkYXRhX2xlZDcsCisJfSwKK307CisKIC8qIE5BTkQgcGFyaXRpdG9uIGZyb20gMi40LjE4LXN3bDUgKi8KIAogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNtZGtfZGVmYXVsdF9uYW5kX3BhcnRbXSA9IHsKQEAgLTExMSw2ICsxNzIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgX19pbml0ZGF0YSAqc21ka19kZXZzW10gPSB7CiAJJnMzY19kZXZpY2VfbmFuZCwKKwkmc21ka19sZWQ0LAorCSZzbWRrX2xlZDUsCisJJnNtZGtfbGVkNiwKKwkmc21ka19sZWQ3LAogfTsKIAogdm9pZCBfX2luaXQgc21ka19tYWNoaW5lX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYwppbmRleCA3MGMzNGZjLi41Mjg0MmU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCkBAIC0zNywxMiArMzcsMTYgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAKICNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJkZXZzLmgiCiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJzM2MyNDAwLmgiCiAjaW5jbHVkZSAiczNjMjQxMC5oIgorI2luY2x1ZGUgInMzYzI0NHguaCIKICNpbmNsdWRlICJzM2MyNDQwLmgiCisjaW5jbHVkZSAiczNjMjQ0Mi5oIgogCiBzdHJ1Y3QgY3B1X3RhYmxlIHsKIAl1bnNpZ25lZCBsb25nCWlkY29kZTsKQEAgLTU5LDYgKzYzLDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQwMFtdICA9ICJTM0MyNDAwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQxMFtdICA9ICJTM0MyNDEwIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MFtdICA9ICJTM0MyNDQwIjsKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQ0MltdICA9ICJTM0MyNDQyIjsKIHN0YXRpYyBjb25zdCBjaGFyIG5hbWVfczNjMjQxMGFbXSA9ICJTM0MyNDEwQSI7CiBzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzI0NDBhW10gPSAiUzNDMjQ0MEEiOwogCkBAIC04NCwyMiArODksMzEgQEAKIAl7CiAJCS5pZGNvZGUJCT0gMHgzMjQ0MDAwMCwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAotCQkubWFwX2lvCQk9IHMzYzI0NDBfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDQwX2luaXRfY2xvY2tzLAotCQkuaW5pdF91YXJ0cwk9IHMzYzI0NDBfaW5pdF91YXJ0cywKKwkJLm1hcF9pbwkJPSBzM2MyNDR4X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0eF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDR4X2luaXRfdWFydHMsCiAJCS5pbml0CQk9IHMzYzI0NDBfaW5pdCwKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDQwCiAJfSwKIAl7CiAJCS5pZGNvZGUJCT0gMHgzMjQ0MDAwMSwKIAkJLmlkbWFzawkJPSAweGZmZmZmZmZmLAotCQkubWFwX2lvCQk9IHMzYzI0NDBfbWFwX2lvLAotCQkuaW5pdF9jbG9ja3MJPSBzM2MyNDQwX2luaXRfY2xvY2tzLAotCQkuaW5pdF91YXJ0cwk9IHMzYzI0NDBfaW5pdF91YXJ0cywKKwkJLm1hcF9pbwkJPSBzM2MyNDR4X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0eF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDR4X2luaXRfdWFydHMsCiAJCS5pbml0CQk9IHMzYzI0NDBfaW5pdCwKIAkJLm5hbWUJCT0gbmFtZV9zM2MyNDQwYQogCX0sCiAJeworCQkuaWRjb2RlCQk9IDB4MzI0NDBhYWEsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKKwkJLm1hcF9pbwkJPSBzM2MyNDR4X21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjMjQ0eF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2MyNDR4X2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzI0NDJfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2MyNDQyCisJfSwKKwl7CiAJCS5pZGNvZGUJCT0gMHgwLCAgIC8qIFMzQzI0MDAgZG9lc24ndCBoYXZlIGFuIGlkY29kZSAqLwogCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCiAJCS5tYXBfaW8JCT0gczNjMjQwMF9tYXBfaW8sCkBAIC0xNzUsMTMgKzE4OSwxMyBAQAogCQlwYW5pYygiVW5rbm93biBTM0MyNFhYIENQVSIpOwogCX0KIAorCXByaW50aygiQ1BVICVzIChpZCAweCUwOGx4KVxuIiwgY3B1LT5uYW1lLCBpZGNvZGUpOworCiAJaWYgKGNwdS0+bWFwX2lvID09IE5VTEwgfHwgY3B1LT5pbml0ID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJDUFUgJXMgc3VwcG9ydCBub3QgZW5hYmxlZFxuIiwgY3B1LT5uYW1lKTsKIAkJcGFuaWMoIlVuc3VwcG9ydGVkIFMzQzI0WFggQ1BVIik7CiAJfQogCi0JcHJpbnRrKCJDUFUgJXMgKGlkIDB4JTA4bHgpXG4iLCBjcHUtPm5hbWUsIGlkY29kZSk7Ci0KIAkoY3B1LT5tYXBfaW8pKG1hY2hfZGVzYywgc2l6ZSk7CiB9CiAKQEAgLTIwOCw2ICsyMjIsNDkgQEAKIAkJKGNwdS0+aW5pdF9jbG9ja3MpKHh0YWwpOwogfQogCisvKiB1YXJ0IG1hbmFnZW1lbnQgKi8KKworc3RhdGljIGludCBucl91YXJ0cyBfX2luaXRkYXRhID0gMDsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgdWFydF9jZmdzWzNdOworCisvKiBzM2MyNHh4X2luaXRfdWFydGRldnMKKyAqCisgKiBjb3B5IHRoZSBzcGVjaWZpZWQgcGxhdGZvcm0gZGF0YSBhbmQgY29uZmlndXJhdGlvbiBpbnRvIG91ciBjZW50cmFsCisgKiBzZXQgb2YgZGV2aWNlcywgYmVmb3JlIHRoZSBkYXRhIGlzIHRocm93biBhd2F5IGFmdGVyIHRoZSBpbml0IHByb2Nlc3MuCisgKgorICogVGhpcyBhbHNvIGZpbGxzIGluIHRoZSBhcnJheSBwYXNzZWQgdG8gdGhlIHNlcmlhbCBkcml2ZXIgZm9yIHRoZQorICogZWFybHkgaW5pdGlhbGlzYXRpb24gb2YgdGhlIGNvbnNvbGUuCisqLworCit2b2lkIF9faW5pdCBzM2MyNHh4X2luaXRfdWFydGRldnMoY2hhciAqbmFtZSwKKwkJCQkgIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzICpyZXMsCisJCQkJICBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2OworCXN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZ3B0ciA9IHVhcnRfY2ZnczsKKwlzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyAqcmVzcDsKKwlpbnQgdWFydDsKKworCW1lbWNweShjZmdwdHIsIGNmZywgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcpICogbm8pOworCisJZm9yICh1YXJ0ID0gMDsgdWFydCA8IG5vOyB1YXJ0KyssIGNmZysrLCBjZmdwdHIrKykgeworCQlwbGF0ZGV2ID0gczNjMjR4eF91YXJ0X3NyY1tjZmdwdHItPmh3cG9ydF07CisKKwkJcmVzcCA9IHJlcyArIGNmZ3B0ci0+aHdwb3J0OworCisJCXMzYzI0eHhfdWFydF9kZXZzW3VhcnRdID0gcGxhdGRldjsKKworCQlwbGF0ZGV2LT5uYW1lID0gbmFtZTsKKwkJcGxhdGRldi0+cmVzb3VyY2UgPSByZXNwLT5yZXNvdXJjZXM7CisJCXBsYXRkZXYtPm51bV9yZXNvdXJjZXMgPSByZXNwLT5ucl9yZXNvdXJjZXM7CisKKwkJcGxhdGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBjZmdwdHI7CisJfQorCisJbnJfdWFydHMgPSBubzsKK30KKwogdm9pZCBfX2luaXQgczNjMjR4eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKQogewogCWlmIChjcHUgPT0gTlVMTCkKQEAgLTIzMiw2ICsyODksMTAgQEAKIAlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzM2MyNHh4X3VhcnRfZGV2cywgbnJfdWFydHMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwogCWlmIChib2FyZCAhPSBOVUxMKSB7CiAJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKipwdHIgPSBib2FyZC0+ZGV2aWNlczsKIAkJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmgKaW5kZXggZmMxMDY3Ny4uNDA4NjI4OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuaApAQCAtMzEsNiArMzEsOCBAQAogI2RlZmluZSBwcmludF9taHoobSkgKChtKSAvIE1IWiksICgobSAvIDEwMDApICUgMTAwMCkKIAogLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXM7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwogc3RydWN0IHMzYzI0MTBfdWFydGNmZzsKIHN0cnVjdCBtYXBfZGVzYzsKIApAQCAtNDQsNiArNDYsMTAgQEAKIAogZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CiAKK2V4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF91YXJ0ZGV2cyhjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgKnJlcywKKwkJCQkgIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKwogLyogdGhlIGJvYXJkIHN0cnVjdHVyZSBpcyB1c2VkIGF0IGZpcnN0IGluaXRpYWxzYXRpb24gdGltZQogICogdG8gZ2V0IGluZm8gc3VjaCBhcyB0aGUgZGV2aWNlcyB0byByZWdpc3RlciBmb3IgdGhpcwogICogYm9hcmQuIFRoaXMgaXMgZG9uZSBiZWNhdXNlIHBsYXRmcm9tX2FkZF9kZXZpY2VzKCkgY2Fubm90CkBAIC02OCwzICs3NCw0IEBACiAvKiBzeXN0ZW0gZGV2aWNlIGNsYXNzZXMgKi8KIAogZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzczsKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDJfc3lzY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYwppbmRleCBjYTA5YmE1Li5hZDM4NDVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMKQEAgLTM4LDEwICszOCw4NiBAQAogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CiAKICNpbmNsdWRlICJkZXZzLmgiCisjaW5jbHVkZSAiY3B1LmgiCiAKIC8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbM107CitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzI0MTBfdWFydDBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDAsCisJCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDAgKyAweDNmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDAsCisJCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjMjQxMF91YXJ0MV9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDMjQxMF9QQV9VQVJUMSwKKwkJLmVuZCAgID0gUzNDMjQxMF9QQV9VQVJUMSArIDB4M2ZmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9TM0NVQVJUX1JYMSwKKwkJLmVuZCAgID0gSVJRX1MzQ1VBUlRfRVJSMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2MyNDEwX3VhcnQyX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VBUlQyLAorCQkuZW5kICAgPSBTM0MyNDEwX1BBX1VBUlQyICsgMHgzZmZmLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgyLAorCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyBzM2MyNDEwX3VhcnRfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5yZXNvdXJjZXMJPSBzM2MyNDEwX3VhcnQwX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2MyNDEwX3VhcnQwX3Jlc291cmNlKSwKKwl9LAorCVsxXSA9IHsKKwkJLnJlc291cmNlcwk9IHMzYzI0MTBfdWFydDFfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzYzI0MTBfdWFydDFfcmVzb3VyY2UpLAorCX0sCisJWzJdID0geworCQkucmVzb3VyY2VzCT0gczNjMjQxMF91YXJ0Ml9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjMjQxMF91YXJ0Ml9yZXNvdXJjZSksCisJfSwKK307CisKKy8qIHlhcnQgZGV2aWNlcyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMCA9IHsKKwkuaWQJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UxID0geworCS5pZAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTIgPSB7CisJLmlkCQk9IDIsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfc3JjWzNdID0geworCSZzM2MyNHh4X3VhcnRfZGV2aWNlMCwKKwkmczNjMjR4eF91YXJ0X2RldmljZTEsCisJJnMzYzI0eHhfdWFydF9kZXZpY2UyLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbM10gPSB7Cit9OwogCiAvKiBVU0IgSG9zdCBDb250cm9sbGVyICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCmluZGV4IDUyYzRiYWIuLmZhMTI0ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuaApAQCAtMTcsNyArMTcsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAorc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgeworCXN0cnVjdCByZXNvdXJjZQkJKnJlc291cmNlczsKKwl1bnNpZ25lZCBsb25nCQkgbnJfcmVzb3VyY2VzOworfTsKKworZXh0ZXJuIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHMzYzI0MTBfdWFydF9yZXNvdXJjZXNbXTsKKwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzW107CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X3NyY1tdOwogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYjsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbGNkOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwppbmRleCBjYzk3ZmJmLi41MmJmNzE4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGFudWJpc191YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgYW51YmlzX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwppbmRleCA5OTViYjhhLi45NDcyMzRkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgYmFzdF91YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgYmFzdF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewogCQkuaHdwb3J0CSAgICAgPSAwLAogCQkuZmxhZ3MJICAgICA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCA2NDZhM2E1Li5hZWM0MzFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTcyLDcgKzcyLDcgQEAKICNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgogI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGgxOTQwX3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBoMTk0MF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0gewogCQkuaHdwb3J0CSAgICAgPSAwLAogCQkuZmxhZ3MJICAgICA9IDAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbmV4Y29kZXIuYwppbmRleCAwN2QwOTUwLi4wNjVhMWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uZXhjb2Rlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW5leGNvZGVyLmMKQEAgLTUxLDcgKzUxLDcgQEAKICNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgogI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzEyIHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBuZXhjb2Rlcl91YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgbmV4Y29kZXJfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwppbmRleCBhZTA3ODc1Li44NThmZDAzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwpAQCAtOTUsOCArOTUsNyBAQAogCX0KIH07CiAKLQotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgb3NpcmlzX3VhcnRjZmdzW10gPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBvc2lyaXNfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewogCVswXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMCwKIAkJLmZsYWdzCSAgICAgPSAwLApAQCAtMTA3LDcgKzEwNiw3IEBACiAJCS5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUob3NpcmlzX3NlcmlhbF9jbG9ja3MpCiAJfSwKIAlbMV0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDIsCisJCS5od3BvcnQJICAgICA9IDEsCiAJCS5mbGFncwkgICAgID0gMCwKIAkJLnVjb24JICAgICA9IFVDT04sCiAJCS51bGNvbgkgICAgID0gVUxDT04sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKaW5kZXggYjM5ZGFlZC4uYzcxNjczZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwpAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCiAjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHMTIgfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIG90b20xMV91YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgb3RvbTExX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IDJkYjkzMmQuLjI1ZjdlOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtNjUsNyArNjUsNyBAQAogI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCiAjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgc21kazI0MTBfdWFydGNmZ3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGsyNDEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCmluZGV4IDVmZmZkMWQuLmQ2NjFjNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYwpAQCAtODYsNyArODYsNyBAQAogI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCiAjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKIAotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgc21kazI0NDBfdWFydGNmZ3NbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGsyNDQwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZyMTAwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKaW5kZXggNzg1ZmM5Yy4uZDE4ZWZiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMKQEAgLTE2Niw3ICsxNjYsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHZyMTAwMF91YXJ0Y2Znc1tdID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgdnIxMDAwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKIAlbMF0gPSB7CiAJCS5od3BvcnQJICAgICA9IDAsCiAJCS5mbGFncwkgICAgID0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKaW5kZXggZmU1N2Q5Ni4uNDNlOWE1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMKQEAgLTU4LDcgKzU4LDExIEBACiAKIC8qIGNhY2hlIGZ1bmN0aW9ucyBmcm9tIGFyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgKi8KIAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKIGV4dGVybiB2b2lkIGFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgdm9pZCBhcm05MjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwodm9pZCkgeyB9CisjZW5kaWYKIAogI2RlZmluZSBQRlggInMzYzI0eHgtcG06ICIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKaW5kZXggMGEyMDEzYS4uMDg1MmU4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCkBAIC00Miw2ICs0Miw3IEBACiAKICNpbmNsdWRlICJzM2MyNDEwLmgiCiAjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiZGV2cy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKIC8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KQEAgLTU1LDkzICs1NiwxMyBAQAogCUlPREVTQ19FTlQoV0FUQ0hET0cpLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDBfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDAsCi0JCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDAgKyAweDNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDAsCi0JCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDFfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDEsCi0JCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDEgKyAweDNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDEsCi0JCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3VhcnQyX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VBUlQyLAotCQkuZW5kICAgPSBTM0MyNDEwX1BBX1VBUlQyICsgMHgzZmZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgyLAotCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIyLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCiAvKiBvdXIgdWFydCBkZXZpY2VzICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY191YXJ0MCA9IHsKLQkubmFtZQkJICA9ICJzM2MyNDEwLXVhcnQiLAotCS5pZAkJICA9IDAsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3VhcnQwX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY191YXJ0MF9yZXNvdXJjZSwKLX07Ci0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQxID0gewotCS5uYW1lCQkgID0gInMzYzI0MTAtdWFydCIsCi0JLmlkCQkgID0gMSwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDFfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VhcnQxX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX3VhcnQyID0gewotCS5uYW1lCQkgID0gInMzYzI0MTAtdWFydCIsCi0JLmlkCQkgID0gMiwKLQkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdWFydDJfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VhcnQyX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnVhcnRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY191YXJ0MCwKLQkmczNjX3VhcnQxLAotCSZzM2NfdWFydDIKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF91YXJ0X2NvdW50ID0gMDsKLQogLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLwogCiB2b2lkIF9faW5pdCBzM2MyNDEwX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCiB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGRldjsKLQlpbnQgdWFydDsKLQotCWZvciAodWFydCA9IDA7IHVhcnQgPCBubzsgdWFydCsrLCBjZmcrKykgewotCQlwbGF0ZGV2ID0gdWFydF9kZXZpY2VzW2NmZy0+aHdwb3J0XTsKLQotCQlzM2MyNHh4X3VhcnRfZGV2c1t1YXJ0XSA9IHBsYXRkZXY7Ci0JCXBsYXRkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gY2ZnOwotCX0KLQotCXMzYzI0MTBfdWFydF9jb3VudCA9IHVhcnQ7CisJczNjMjR4eF9pbml0X3VhcnRkZXZzKCJzM2MyNDEwLXVhcnQiLCBzM2MyNDEwX3VhcnRfcmVzb3VyY2VzLCBjZmcsIG5vKTsKIH0KIAogLyogczNjMjQxMF9tYXBfaW8KQEAgLTE5Myw1ICsxMTQsNSBAQAogewogCXByaW50aygiUzNDMjQxMDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7CiAKLQlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoczNjMjR4eF91YXJ0X2RldnMsIHMzYzI0MTBfdWFydF9jb3VudCk7CisJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCmluZGV4IDI3OGQwMDQuLmFjZmUzODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCkBAIC0xMDAsNzMgKzEwMCwxMiBAQAogCS5hY2sJICAgID0gczNjX2lycV93ZHRhYzk3X2FjaywKIH07CiAKLS8qIGNhbWVyYSBpcnEgKi8KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF9jYW0odW5zaWduZWQgaW50IGlycSwKLQkJCSAgICAgIHN0cnVjdCBpcnFkZXNjICpkZXNjLAotCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgaW50IHN1YnNyYywgc3VibXNrOwotCXN0cnVjdCBpcnFkZXNjICpteWRlc2M7Ci0KLQkvKiByZWFkIHRoZSBjdXJyZW50IHBlbmRpbmcgaW50ZXJydXB0cywgYW5kIHRoZSBtYXNrCi0JICogZm9yIHdoYXQgaXQgaXMgYXZhaWxhYmxlICovCi0KLQlzdWJzcmMgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1NVQlNSQ1BORCk7Ci0Jc3VibXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRTVUJNU0spOwotCi0Jc3Vic3JjICY9IH5zdWJtc2s7Ci0Jc3Vic3JjID4+PSAxMTsKLQlzdWJzcmMgJj0gMzsKLQotCWlmIChzdWJzcmMgIT0gMCkgewotCQlpZiAoc3Vic3JjICYgMSkgewotCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfUzNDMjQ0MF9DQU1fQzsKLQkJCWRlc2NfaGFuZGxlX2lycShJUlFfUzNDMjQ0MF9DQU1fQywgbXlkZXNjLCByZWdzKTsKLQkJfQotCQlpZiAoc3Vic3JjICYgMikgewotCQkJbXlkZXNjID0gaXJxX2Rlc2MgKyBJUlFfUzNDMjQ0MF9DQU1fUDsKLQkJCWRlc2NfaGFuZGxlX2lycShJUlFfUzNDMjQ0MF9DQU1fUCwgbXlkZXNjLCByZWdzKTsKLQkJfQotCX0KLX0KLQotI2RlZmluZSBJTlRNU0tfQ0FNICgxVUwgPDwgKElSUV9DQU0gLSBJUlFfRUlOVDApKQotCi1zdGF0aWMgdm9pZAotczNjX2lycV9jYW1fbWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCi17Ci0JczNjX2lycXN1Yl9tYXNrKGlycW5vLCBJTlRNU0tfQ0FNLCAzPDwxMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zM2NfaXJxX2NhbV91bm1hc2sodW5zaWduZWQgaW50IGlycW5vKQotewotCXMzY19pcnFzdWJfdW5tYXNrKGlycW5vLCBJTlRNU0tfQ0FNKTsKLX0KLQotc3RhdGljIHZvaWQKLXMzY19pcnFfY2FtX2Fjayh1bnNpZ25lZCBpbnQgaXJxbm8pCi17Ci0JczNjX2lycXN1Yl9tYXNrYWNrKGlycW5vLCBJTlRNU0tfQ0FNLCAzPDwxMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX2NhbSA9IHsKLQkubWFzawkgICAgPSBzM2NfaXJxX2NhbV9tYXNrLAotCS51bm1hc2sJICAgID0gczNjX2lycV9jYW1fdW5tYXNrLAotCS5hY2sJICAgID0gczNjX2lycV9jYW1fYWNrLAotfTsKLQogc3RhdGljIGludCBzM2MyNDQwX2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKIHsKIAl1bnNpZ25lZCBpbnQgaXJxbm87CiAKIAlwcmludGsoIlMzQzI0NDA6IElSUSBTdXBwb3J0XG4iKTsKIAotCXNldF9pcnFfY2hpcChJUlFfTkZDT04sICZzM2NfaXJxX2xldmVsX2NoaXApOwotCXNldF9pcnFfaGFuZGxlcihJUlFfTkZDT04sIGRvX2xldmVsX0lSUSk7Ci0Jc2V0X2lycV9mbGFncyhJUlFfTkZDT04sIElSUUZfVkFMSUQpOwotCiAJLyogYWRkIG5ldyBjaGFpbmVkIGhhbmRsZXIgZm9yIHdkdCwgYWM3ICovCiAKIAlzZXRfaXJxX2NoaXAoSVJRX1dEVCwgJnMzY19pcnFfbGV2ZWxfY2hpcCk7CkBAIC0xNzksMTggKzExOCw2IEBACiAJCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwogCX0KIAotCS8qIGFkZCBjaGFpbmVkIGhhbmRsZXIgZm9yIGNhbWVyYSAqLwotCi0Jc2V0X2lycV9jaGlwKElSUV9DQU0sICZzM2NfaXJxX2xldmVsX2NoaXApOwotCXNldF9pcnFfaGFuZGxlcihJUlFfQ0FNLCBkb19sZXZlbF9JUlEpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9DQU0sIHMzY19pcnFfZGVtdXhfY2FtKTsKLQotCWZvciAoaXJxbm8gPSBJUlFfUzNDMjQ0MF9DQU1fQzsgaXJxbm8gPD0gSVJRX1MzQzI0NDBfQ0FNX1A7IGlycW5vKyspIHsKLQkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjX2lycV9jYW0pOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxbm8sIGRvX2xldmVsX0lSUSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxbm8sIElSUUZfVkFMSUQpOwotCX0KLQogCXJldHVybiAwOwogfQogCkBAIC0xOTgsMTAgKzEyNSwxMCBAQAogCS5hZGQJPSBzM2MyNDQwX2lycV9hZGQsCiB9OwogCi1zdGF0aWMgaW50IHMzYzI0eHhfaXJxX2RyaXZlcih2b2lkKQorc3RhdGljIGludCBzM2MyNDQwX2lycV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsICZzM2MyNDQwX2lycV9kcml2ZXIpOwogfQogCi1hcmNoX2luaXRjYWxsKHMzYzI0eHhfaXJxX2RyaXZlcik7CithcmNoX2luaXRjYWxsKHMzYzI0NDBfaXJxX2luaXQpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAuYwppbmRleCBiN2ZlNmQ5Li4wYWI1MGY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLmMKQEAgLTEsNiArMSw2IEBACiAvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFNhbXN1bmcgUzNDMjQ0MCBNb2JpbGUgQ1BVIHN1cHBvcnQKQEAgLTgsMTYgKzgsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICoJMjQtQXVnLTIwMDQgQkpEICBTdGFydCBvZiBzM2MyNDQwIHN1cHBvcnQKLSAqCTEyLU9jdC0yMDA0IEJKRAkgTW92ZWQgY2xvY2sgaW5mbyBvdXQgdG8gY2xvY2suYwotICoJMDEtTm92LTIwMDQgQkpEICBGaXhlZCBjbG9jayBidWlsZCBjb2RlCi0gKgkwOS1Ob3YtMjAwNCBCSkQgIEFkZGVkIHN5c2RldiBmb3IgcG93ZXIgbWFuYWdlbWVudAotICoJMDQtTm92LTIwMDQgQkpEICBOZXcgc2VyaWFsIHJlZ2lzdHJhdGlvbgotICoJMTUtTm92LTIwMDQgQkpEICBSZW5hbWUgdGhlIGkyYyBkZXZpY2UgZm9yIHRoZSBzM2MyNDQwCi0gKgkxNC1KYW4tMjAwNSBCSkQgIE1vdmVkIGNsb2NrIGluaXQgY29kZSBpbnRvIHNlcGVyYXRlIGZ1bmN0aW9uCi0gKgkxNC1KYW4tMjAwNSBCSkQgIFJlbW92ZWQgdW4tdXNlZCBjbG9jayBiaXRzCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MCwyMzQgKzQwLDIwIEBACiAjaW5jbHVkZSAiY3B1LmgiCiAjaW5jbHVkZSAicG0uaCIKIAotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NDBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQlJT0RFU0NfRU5UKFVTQkhPU1QpLAotCUlPREVTQ19FTlQoQ0xLUFdSKSwKLQlJT0RFU0NfRU5UKExDRCksCi0JSU9ERVNDX0VOVChUSU1FUiksCi0JSU9ERVNDX0VOVChBREMpLAotCUlPREVTQ19FTlQoV0FUQ0hET0cpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDBfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDAsCi0JCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDAgKyAweDNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDAsCi0JCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdWFydDFfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzI0MTBfUEFfVUFSVDEsCi0JCS5lbmQgICA9IFMzQzI0MTBfUEFfVUFSVDEgKyAweDNmZmYsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfUzNDVUFSVF9SWDEsCi0JCS5lbmQgICA9IElSUV9TM0NVQVJUX0VSUjEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3VhcnQyX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBTM0MyNDEwX1BBX1VBUlQyLAotCQkuZW5kICAgPSBTM0MyNDEwX1BBX1VBUlQyICsgMHgzZmZmLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX1MzQ1VBUlRfUlgyLAotCQkuZW5kICAgPSBJUlFfUzNDVUFSVF9FUlIyLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKLQl9Ci19OwotCi0vKiBvdXIgdWFydCBkZXZpY2VzICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY191YXJ0MCA9IHsKLQkubmFtZQkJICA9ICJzM2MyNDQwLXVhcnQiLAotCS5pZAkJICA9IDAsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3VhcnQwX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY191YXJ0MF9yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY191YXJ0MSA9IHsKLQkubmFtZQkJICA9ICJzM2MyNDQwLXVhcnQiLAotCS5pZAkJICA9IDEsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3VhcnQxX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY191YXJ0MV9yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY191YXJ0MiA9IHsKLQkubmFtZQkJICA9ICJzM2MyNDQwLXVhcnQiLAotCS5pZAkJICA9IDIsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3VhcnQyX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzY191YXJ0Ml9yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp1YXJ0X2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzM2NfdWFydDAsCi0JJnMzY191YXJ0MSwKLQkmczNjX3VhcnQyCi19OwotCi0vKiB1YXJ0IGluaXRpYWxpc2F0aW9uICovCi0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBzM2MyNDQwX3VhcnRfY291bnQ7Ci0KLXZvaWQgX19pbml0IHMzYzI0NDBfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKLXsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0ZGV2OwotCWludCB1YXJ0OwotCi0JZm9yICh1YXJ0ID0gMDsgdWFydCA8IG5vOyB1YXJ0KyssIGNmZysrKSB7Ci0JCXBsYXRkZXYgPSB1YXJ0X2RldmljZXNbY2ZnLT5od3BvcnRdOwotCi0JCXMzYzI0eHhfdWFydF9kZXZzW3VhcnRdID0gcGxhdGRldjsKLQkJcGxhdGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBjZmc7Ci0JfQotCi0JczNjMjQ0MF91YXJ0X2NvdW50ID0gdWFydDsKLX0KLQotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBzM2MyNDQwX3NsZWVwW10gPSB7Ci0JU0FWRV9JVEVNKFMzQzI0NDBfRFNDMCksCi0JU0FWRV9JVEVNKFMzQzI0NDBfRFNDMSksCi0JU0FWRV9JVEVNKFMzQzI0NDBfR1BKREFUKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9HUEpDT04pLAotCVNBVkVfSVRFTShTM0MyNDQwX0dQSlVQKQotfTsKLQotc3RhdGljIGludCBzM2MyNDQwX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXMzYzI0MTBfcG1fZG9fc2F2ZShzM2MyNDQwX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NDBfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDQwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShzM2MyNDQwX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NDBfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgczNjMjQ0MF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjQ0MF9yZXN1bWUgIE5VTEwKLSNlbmRpZgotCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDBfc3lzY2xhc3MgPSB7Ci0Jc2V0X2tzZXRfbmFtZSgiczNjMjQ0MC1jb3JlIiksCi0JLnN1c3BlbmQJPSBzM2MyNDQwX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNDQwX3Jlc3VtZQotfTsKLQogc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHMzYzI0NDBfc3lzZGV2ID0gewogCS5jbHMJCT0gJnMzYzI0NDBfc3lzY2xhc3MsCiB9OwogCi12b2lkIF9faW5pdCBzM2MyNDQwX21hcF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpCitpbnQgX19pbml0IHMzYzI0NDBfaW5pdCh2b2lkKQogewotCS8qIHJlZ2lzdGVyIG91ciBpby10YWJsZXMgKi8KLQotCWlvdGFibGVfaW5pdChzM2MyNDQwX2lvZGVzYywgQVJSQVlfU0laRShzM2MyNDQwX2lvZGVzYykpOwotCWlvdGFibGVfaW5pdChtYWNoX2Rlc2MsIHNpemUpOwotCi0JLyogcmVuYW1lIGFueSBwZXJpcGhlcmFscyB1c2VkIGRpZmZlcmluZyBmcm9tIHRoZSBzM2MyNDEwICovCi0KLQlzM2NfZGV2aWNlX2kyYy5uYW1lICA9ICJzM2MyNDQwLWkyYyI7Ci0JczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQ0MC1uYW5kIjsKKwlwcmludGsoIlMzQzI0NDA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwogCiAJLyogY2hhbmdlIGlycSBmb3Igd2F0Y2hkb2cgKi8KIAogCXMzY19kZXZpY2Vfd2R0LnJlc291cmNlWzFdLnN0YXJ0ID0gSVJRX1MzQzI0NDBfV0RUOwogCXMzY19kZXZpY2Vfd2R0LnJlc291cmNlWzFdLmVuZCAgID0gSVJRX1MzQzI0NDBfV0RUOwotfQogCi12b2lkIF9faW5pdCBzM2MyNDQwX2luaXRfY2xvY2tzKGludCB4dGFsKQotewotCXVuc2lnbmVkIGxvbmcgY2xrZGl2OwotCXVuc2lnbmVkIGxvbmcgY2FtZGl2OwotCXVuc2lnbmVkIGxvbmcgaGNsaywgZmNsaywgcGNsazsKLQlpbnQgaGRpdiA9IDE7CisJLyogcmVnaXN0ZXIgb3VyIHN5c3RlbSBkZXZpY2UgZm9yIGV2ZXJ5dGhpbmcgZWxzZSAqLwogCi0JLyogbm93IHdlJ3ZlIGdvdCBvdXIgbWFjaGluZSBiaXRzIGluaXRpYWxpc2VkLCB3b3JrIG91dCB3aGF0Ci0JICogY2xvY2tzIHdlJ3ZlIGdvdCAqLwotCi0JZmNsayA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKSAqIDI7Ci0KLQljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOwotCWNhbWRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0KLQkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLwotCi0Jc3dpdGNoIChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fSERJVk5fTUFTSykgewotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzE6Ci0JCWhkaXYgPSAxOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzI6Ci0JCWhkaXYgPSAyOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzRfODoKLQkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRikgPyA4IDogNDsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzY6Ci0JCWhkaXYgPSAoY2FtZGl2ICYgUzNDMjQ0MF9DQU1ESVZOX0hDTEszX0hBTEYpID8gNiA6IDM7Ci0JCWJyZWFrOwotCX0KLQotCWhjbGsgPSBmY2xrIC8gaGRpdjsKLQlwY2xrID0gaGNsayAvICgoY2xrZGl2ICYgUzNDMjQ0MF9DTEtESVZOX1BESVZOKT8gMjoxKTsKLQotCS8qIHByaW50IGJyaWVmIHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KLQotCXByaW50aygiUzNDMjQ0MDogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAotCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKLQotCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKLQkgKiBjb25zb2xlIHRvIHVzZSB0aGVtLCBhbmQgdG8gYWRkIG5ldyBvbmVzIGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbgotCSAqLwotCi0JczNjMjR4eF9zZXR1cF9jbG9ja3MoeHRhbCwgZmNsaywgaGNsaywgcGNsayk7Ci19Ci0KLS8qIG5lZWQgdG8gcmVnaXN0ZXIgY2xhc3MgYmVmb3JlIHdlIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBkZXZpY2UsIGFuZAotICogd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpc2VkIGJlZm9yZSBhbnkgb2YgdGhlCi0gKiBkcml2ZXJzIGV2ZW4gdHJ5IHRvIHVzZSBpdCAoZXZlbiBpZiBub3Qgb24gYW4gczNjMjQ0MCBiYXNlZCBzeXN0ZW0pCi0gKiBhcyBhIGRyaXZlciB3aGljaCBtYXkgc3VwcG9ydCBib3RoIDI0MTAgYW5kIDI0NDAgbWF5IHRyeSBhbmQgdXNlIGl0LgotKi8KLQotc3RhdGljIGludCBfX2luaXQgczNjMjQ0MF9jb3JlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzKTsKLX0KLQotY29yZV9pbml0Y2FsbChzM2MyNDQwX2NvcmVfaW5pdCk7Ci0KLWludCBfX2luaXQgczNjMjQ0MF9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXByaW50aygiUzNDMjQ0MDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7Ci0KLQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzZGV2KTsKLQlpZiAocmV0ICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHN5c2RldiBmb3IgczNjMjQ0MFxuIik7Ci0JZWxzZQotCQlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzM2MyNHh4X3VhcnRfZGV2cywgczNjMjQ0MF91YXJ0X2NvdW50KTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0MF9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDItY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLWNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI3YjMwMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLWNsb2NrLmMKQEAgLTAsMCArMSwxNzEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLWNsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQ0MiBDbG9jayBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY3B1LmgiCisKKy8qIFMzQzI0NDIgZXh0ZW5kZWQgY2xvY2sgc3VwcG9ydCAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJaW50IGRpdjsKKworCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCisJCXJldHVybiBwYXJlbnRfcmF0ZTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXYgPT0gMykKKwkJcmV0dXJuIHBhcmVudF9yYXRlIC8gMzsKKworCS8qIG5vdGUsIHdlIHJlbW92ZSB0aGUgKy8tIDEgY2FsY3VsYXRpb25zIGZvciB0aGUgZGl2aXNvciAqLworCisJZGl2IC89IDI7CisKKwlpZiAoZGl2IDwgMSkKKwkJZGl2ID0gMTsKKwllbHNlIGlmIChkaXYgPiAxNikKKwkJZGl2ID0gMTY7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICogMik7Cit9CisKK3N0YXRpYyBpbnQgczNjMjQ0Ml9jYW1pZl91cGxsX3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjYW1kaXZuID0gIF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisKKwlyYXRlID0gczNjMjQ0Ml9jYW1pZl91cGxsX3JvdW5kKGNsaywgcmF0ZSk7CisKKwljYW1kaXZuICY9IH5TM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjM7CisKKwlpZiAocmF0ZSA9PSBwYXJlbnRfcmF0ZSkgeworCQljYW1kaXZuICY9IH5TM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTDsKKwl9IGVsc2UgaWYgKChwYXJlbnRfcmF0ZSAvIHJhdGUpID09IDMpIHsKKwkJY2FtZGl2biB8PSBTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTDsKKwkJY2FtZGl2biB8PSBTM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjM7CisJfSBlbHNlIHsKKwkJY2FtZGl2biAmPSB+UzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19NQVNLOworCQljYW1kaXZuIHw9IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOworCQljYW1kaXZuIHw9ICgoKHBhcmVudF9yYXRlIC8gcmF0ZSkgLyAyKSAtIDEpOworCX0KKworCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDQwX0NBTURJVk4pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEV4dHJhIFMzQzI0NDIgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDJfY2xrX2NhbSA9IHsKKwkubmFtZQkJPSAiY2FtaWYiLAorCS5pZAkJPSAtMSwKKwkuZW5hYmxlCQk9IHMzYzI0eHhfY2xrY29uX2VuYWJsZSwKKwkuY3RybGJpdAk9IFMzQzI0NDBfQ0xLQ09OX0NBTUVSQSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDJfY2xrX2NhbV91cGxsID0geworCS5uYW1lCQk9ICJjYW1pZi11cGxsIiwKKwkuaWQJCT0gLTEsCisJLnNldF9yYXRlCT0gczNjMjQ0Ml9jYW1pZl91cGxsX3NldHJhdGUsCisJLnJvdW5kX3JhdGUJPSBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDJfY2xrX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXVuc2lnbmVkIGxvbmcgY2FtZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisJdW5zaWduZWQgbG9uZyBjbGtkaXZuOworCXN0cnVjdCBjbGsgKmNsa19oOworCXN0cnVjdCBjbGsgKmNsa19wOworCXN0cnVjdCBjbGsgKmNsa191cGxsOworCisJcHJpbnRrKCJTM0MyNDQyOiBDbG9jayBTdXBwb3J0LCBEVlMgJXNcbiIsCisJICAgICAgIChjYW1kaXZuICYgUzNDMjQ0MF9DQU1ESVZOX0RWU0VOKSA/ICJvbiIgOiAib2ZmIik7CisKKwljbGtfcCA9IGNsa19nZXQoTlVMTCwgInBjbGsiKTsKKwljbGtfaCA9IGNsa19nZXQoTlVMTCwgImhjbGsiKTsKKwljbGtfdXBsbCA9IGNsa19nZXQoTlVMTCwgInVwbGwiKTsKKworCWlmIChJU19FUlIoY2xrX3ApIHx8IElTX0VSUihjbGtfaCkgfHwgSVNfRVJSKGNsa191cGxsKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlMzQzI0NDI6IEZhaWxlZCB0byBnZXQgcGFyZW50IGNsb2Nrc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIHJhdGUgb2YgVVBMTCwgYW5kIGlmIGl0IGlzIG5lYXIgOTZNSHosIHRoZW4gY2hhbmdlCisJICogdG8gdXNpbmcgaGFsZiB0aGUgVVBMTCByYXRlIGZvciB0aGUgc3lzdGVtICovCisKKwlpZiAoY2xrX2dldF9yYXRlKGNsa191cGxsKSA+ICg5NCAqIE1IWikpIHsKKwkJY2xrX3VzYl9idXMucmF0ZSA9IGNsa19nZXRfcmF0ZShjbGtfdXBsbCkgLyAyOworCisJCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7CisKKwkJY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CisJCWNsa2Rpdm4gfD0gUzNDMjQ0MF9DTEtESVZOX1VDTEs7CisJCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDEwX0NMS0RJVk4pOworCisJCW11dGV4X3VubG9jaygmY2xvY2tzX211dGV4KTsKKwl9CisKKwlzM2MyNDQyX2Nsa19jYW0ucGFyZW50ID0gY2xrX2g7CisJczNjMjQ0Ml9jbGtfY2FtX3VwbGwucGFyZW50ID0gY2xrX3VwbGw7CisKKwlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDQyX2Nsa19jYW0pOworCXMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJnMzYzI0NDJfY2xrX2NhbV91cGxsKTsKKworCWNsa19kaXNhYmxlKCZzM2MyNDQyX2Nsa19jYW0pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQyX2Nsa19kcml2ZXIgPSB7CisJLmFkZAk9IHMzYzI0NDJfY2xrX2FkZCwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IHMzYzI0NDJfY2xrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfY2xrX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9jbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZWJhZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDIuYwpAQCAtMCwwICsxLDUyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogU2Ftc3VuZyBTM0MyNDQyIE1vYmlsZSBDUFUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW9qLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1kc2MuaD4KKworI2luY2x1ZGUgInMzYzI0NDIuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjMjQ0Ml9zeXNkZXYgPSB7CisJLmNscwkJPSAmczNjMjQ0Ml9zeXNjbGFzcywKK307CisKK2ludCBfX2luaXQgczNjMjQ0Ml9pbml0KHZvaWQpCit7CisJcHJpbnRrKCJTM0MyNDQyOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKKworCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzZGV2KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZTM3ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0Mi5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQyLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIHMzYzI0NDIgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MgorZXh0ZXJuICBpbnQgczNjMjQ0Ml9pbml0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgczNjMjQ0Ml9pbml0IE5VTEwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHgtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC1pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWFkY2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHgtaXJxLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENoYW5nZWxvZzoKKyAqCTI1LUp1bC0yMDA1IEJKRAkJU3BsaXQgZnJvbSBpcnEuYworICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorI2luY2x1ZGUgImlycS5oIgorCisvKiBjYW1lcmEgaXJxICovCisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfY2FtKHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgICBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBzdWJzcmMsIHN1Ym1zazsKKwlzdHJ1Y3QgaXJxZGVzYyAqbXlkZXNjOworCisJLyogcmVhZCB0aGUgY3VycmVudCBwZW5kaW5nIGludGVycnVwdHMsIGFuZCB0aGUgbWFzaworCSAqIGZvciB3aGF0IGl0IGlzIGF2YWlsYWJsZSAqLworCisJc3Vic3JjID0gX19yYXdfcmVhZGwoUzNDMjQxMF9TVUJTUkNQTkQpOworCXN1Ym1zayA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UU1VCTVNLKTsKKworCXN1YnNyYyAmPSB+c3VibXNrOworCXN1YnNyYyA+Pj0gMTE7CisJc3Vic3JjICY9IDM7CisKKwlpZiAoc3Vic3JjICE9IDApIHsKKwkJaWYgKHN1YnNyYyAmIDEpIHsKKwkJCW15ZGVzYyA9IGlycV9kZXNjICsgSVJRX1MzQzI0NDBfQ0FNX0M7CisJCQlkZXNjX2hhbmRsZV9pcnEoSVJRX1MzQzI0NDBfQ0FNX0MsIG15ZGVzYywgcmVncyk7CisJCX0KKwkJaWYgKHN1YnNyYyAmIDIpIHsKKwkJCW15ZGVzYyA9IGlycV9kZXNjICsgSVJRX1MzQzI0NDBfQ0FNX1A7CisJCQlkZXNjX2hhbmRsZV9pcnEoSVJRX1MzQzI0NDBfQ0FNX1AsIG15ZGVzYywgcmVncyk7CisJCX0KKwl9Cit9CisKKyNkZWZpbmUgSU5UTVNLX0NBTSAoMVVMIDw8IChJUlFfQ0FNIC0gSVJRX0VJTlQwKSkKKworc3RhdGljIHZvaWQKK3MzY19pcnFfY2FtX21hc2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFzayhpcnFubywgSU5UTVNLX0NBTSwgMzw8MTEpOworfQorCitzdGF0aWMgdm9pZAorczNjX2lycV9jYW1fdW5tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwlzM2NfaXJxc3ViX3VubWFzayhpcnFubywgSU5UTVNLX0NBTSk7Cit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2NhbV9hY2sodW5zaWduZWQgaW50IGlycW5vKQoreworCXMzY19pcnFzdWJfbWFza2FjayhpcnFubywgSU5UTVNLX0NBTSwgMzw8MTEpOworfQorCitzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV9jYW0gPSB7CisJLm1hc2sJICAgID0gczNjX2lycV9jYW1fbWFzaywKKwkudW5tYXNrCSAgICA9IHMzY19pcnFfY2FtX3VubWFzaywKKwkuYWNrCSAgICA9IHMzY19pcnFfY2FtX2FjaywKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0eF9pcnFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJdW5zaWduZWQgaW50IGlycW5vOworCisJc2V0X2lycV9jaGlwKElSUV9ORkNPTiwgJnMzY19pcnFfbGV2ZWxfY2hpcCk7CisJc2V0X2lycV9oYW5kbGVyKElSUV9ORkNPTiwgZG9fbGV2ZWxfSVJRKTsKKwlzZXRfaXJxX2ZsYWdzKElSUV9ORkNPTiwgSVJRRl9WQUxJRCk7CisKKwkvKiBhZGQgY2hhaW5lZCBoYW5kbGVyIGZvciBjYW1lcmEgKi8KKworCXNldF9pcnFfY2hpcChJUlFfQ0FNLCAmczNjX2lycV9sZXZlbF9jaGlwKTsKKwlzZXRfaXJxX2hhbmRsZXIoSVJRX0NBTSwgZG9fbGV2ZWxfSVJRKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfQ0FNLCBzM2NfaXJxX2RlbXV4X2NhbSk7CisKKwlmb3IgKGlycW5vID0gSVJRX1MzQzI0NDBfQ0FNX0M7IGlycW5vIDw9IElSUV9TM0MyNDQwX0NBTV9QOyBpcnFubysrKSB7CisJCXNldF9pcnFfY2hpcChpcnFubywgJnMzY19pcnFfY2FtKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycW5vLCBkb19sZXZlbF9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NHhfaXJxX2RyaXZlciA9IHsKKwkuYWRkCT0gczNjMjQ0eF9pcnFfYWRkLAorfTsKKworc3RhdGljIGludCBzM2MyNDQwX2lycV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsICZzM2MyNDR4X2lycV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDBfaXJxX2luaXQpOworCisKK3N0YXRpYyBpbnQgczNjMjQ0Ml9pcnFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLCAmczNjMjQ0eF9pcnFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQyX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODUyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jCkBAIC0wLDAgKzEsMTgyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTYW1zdW5nIFMzQzI0NDAgYW5kIFMzQzI0NDIgTW9iaWxlIENQVSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpb2ouaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWRzYy5oPgorCisjaW5jbHVkZSAiczNjMjQ0MC5oIgorI2luY2x1ZGUgInMzYzI0NHguaCIKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NHhfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwlJT0RFU0NfRU5UKENMS1BXUiksCisJSU9ERVNDX0VOVChUSU1FUiksCisJSU9ERVNDX0VOVChXQVRDSERPRyksCisJSU9ERVNDX0VOVChMQ0QpLAorCUlPREVTQ19FTlQoQURDKSwKKwlJT0RFU0NfRU5UKFVTQkhPU1QpLAorfTsKKworLyogdWFydCBpbml0aWFsaXNhdGlvbiAqLworCit2b2lkIF9faW5pdCBzM2MyNDR4X2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJczNjMjR4eF9pbml0X3VhcnRkZXZzKCJzM2MyNDQwLXVhcnQiLCBzM2MyNDEwX3VhcnRfcmVzb3VyY2VzLCBjZmcsIG5vKTsKK30KKwordm9pZCBfX2luaXQgczNjMjQ0eF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKQoreworCS8qIHJlZ2lzdGVyIG91ciBpby10YWJsZXMgKi8KKworCWlvdGFibGVfaW5pdChzM2MyNDR4X2lvZGVzYywgQVJSQVlfU0laRShzM2MyNDR4X2lvZGVzYykpOworCWlvdGFibGVfaW5pdChtYWNoX2Rlc2MsIHNpemUpOworCisJLyogcmVuYW1lIGFueSBwZXJpcGhlcmFscyB1c2VkIGRpZmZlcmluZyBmcm9tIHRoZSBzM2MyNDEwICovCisKKwlzM2NfZGV2aWNlX2kyYy5uYW1lICA9ICJzM2MyNDQwLWkyYyI7CisJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQ0MC1uYW5kIjsKK30KKwordm9pZCBfX2luaXQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGNsa2RpdjsKKwl1bnNpZ25lZCBsb25nIGNhbWRpdjsKKwl1bnNpZ25lZCBsb25nIGhjbGssIGZjbGssIHBjbGs7CisJaW50IGhkaXYgPSAxOworCisJLyogbm93IHdlJ3ZlIGdvdCBvdXIgbWFjaGluZSBiaXRzIGluaXRpYWxpc2VkLCB3b3JrIG91dCB3aGF0CisJICogY2xvY2tzIHdlJ3ZlIGdvdCAqLworCisJZmNsayA9IHMzYzI0MTBfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKSAqIDI7CisKKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOworCWNhbWRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisKKwkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLworCisJc3dpdGNoIChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fSERJVk5fTUFTSykgeworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzE6CisJCWhkaXYgPSAxOworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzI6CisJCWhkaXYgPSAyOworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzRfODoKKwkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRikgPyA4IDogNDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzY6CisJCWhkaXYgPSAoY2FtZGl2ICYgUzNDMjQ0MF9DQU1ESVZOX0hDTEszX0hBTEYpID8gNiA6IDM7CisJCWJyZWFrOworCX0KKworCWhjbGsgPSBmY2xrIC8gaGRpdjsKKwlwY2xrID0gaGNsayAvICgoY2xrZGl2ICYgUzNDMjQ0MF9DTEtESVZOX1BESVZOKT8gMjoxKTsKKworCS8qIHByaW50IGJyaWVmIHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KKworCXByaW50aygiUzNDMjQ0WDogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAorCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKKworCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKKwkgKiBjb25zb2xlIHRvIHVzZSB0aGVtLCBhbmQgdG8gYWRkIG5ldyBvbmVzIGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbgorCSAqLworCisJczNjMjR4eF9zZXR1cF9jbG9ja3MoeHRhbCwgZmNsaywgaGNsaywgcGNsayk7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHMzYzI0NHhfc2xlZXBbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQ0MF9EU0MwKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9EU0MxKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9HUEpEQVQpLAorCVNBVkVfSVRFTShTM0MyNDQwX0dQSkNPTiksCisJU0FWRV9JVEVNKFMzQzI0NDBfR1BKVVApCit9OworCitzdGF0aWMgaW50IHMzYzI0NHhfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJczNjMjQxMF9wbV9kb19zYXZlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0NHhfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJczNjMjQxMF9wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzM2MyNDR4X3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNDR4X3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKKy8qIFNpbmNlIHRoZSBTM0MyNDQyIGFuZCBTM0MyNDQwIHNoYXJlICBpdGVtcywgcHV0IGJvdGggc3lzY2xhc3NlcyBoZXJlICovCisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzcyA9IHsKKwlzZXRfa3NldF9uYW1lKCJzM2MyNDQwLWNvcmUiKSwKKwkuc3VzcGVuZAk9IHMzYzI0NHhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0NHhfcmVzdW1lCit9OworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDJfc3lzY2xhc3MgPSB7CisJc2V0X2tzZXRfbmFtZSgiczNjMjQ0Mi1jb3JlIiksCisJLnN1c3BlbmQJPSBzM2MyNDR4X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNDR4X3Jlc3VtZQorfTsKKworLyogbmVlZCB0byByZWdpc3RlciBjbGFzcyBiZWZvcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXIgdGhlIGRldmljZSwgYW5kCisgKiB3ZSBhbHNvIG5lZWQgdG8gZW5zdXJlIHRoYXQgaXQgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYmVmb3JlIGFueSBvZiB0aGUKKyAqIGRyaXZlcnMgZXZlbiB0cnkgdG8gdXNlIGl0IChldmVuIGlmIG5vdCBvbiBhbiBzM2MyNDQwIGJhc2VkIHN5c3RlbSkKKyAqIGFzIGEgZHJpdmVyIHdoaWNoIG1heSBzdXBwb3J0IGJvdGggMjQxMCBhbmQgMjQ0MCBtYXkgdHJ5IGFuZCB1c2UgaXQuCisqLworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX2NvcmVfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MpOworfQorCitjb3JlX2luaXRjYWxsKHMzYzI0NDBfY29yZV9pbml0KTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9jb3JlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzKTsKK30KKworY29yZV9pbml0Y2FsbChzM2MyNDQyX2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTdmNWY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NHguaApAQCAtMCwwICsxLDI1IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIFMzQzI0NDAgYW5kIFMzQzI0NDIgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9tYXBfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfaW5pdF9jbG9ja3MgTlVMTAorI2RlZmluZSBzM2MyNDR4X2luaXRfdWFydHMgTlVMTAorI2RlZmluZSBzM2MyNDR4X21hcF9pbyBOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zbGVlcC5TIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKaW5kZXggNzNkZTJlYS4uNWY2NzYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMKQEAgLTY2LDcgKzY2LDkgQEAKIAlAQCBmbHVzaCB0aGUgY2FjaGVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJhY2sgb3V0IHRvCiAJQEAgU0RSQU0gYmVmb3JlIHRoZSBjb3JlIHBvd2VycyBkb3duCiAKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICiAJYmwJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisjZW5kaWYKIAogCUBAIHByZXBhcmUgY3B1IHRvIHNsZWVwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL0tjb25maWcgYi9hcmNoL2FybS9tbS9LY29uZmlnCmluZGV4IGM1NWI3MzllLi4xZmYyZjA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21tL0tjb25maWcKQEAgLTEyMSw4ICsxMjEsOCBAQAogIyBBUk05MjZUCiBjb25maWcgQ1BVX0FSTTkyNlQKIAlib29sICJTdXBwb3J0IEFSTTkyNlQgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gQVJDSF9JTlRFR1JBVE9SIHx8IEFSQ0hfVkVSU0FUSUxFX1BCIHx8IE1BQ0hfVkVSU0FUSUxFX0FCIHx8IEFSQ0hfT01BUDczMCB8fCBBUkNIX09NQVAxNlhYIHx8IE1BQ0hfUkVBTFZJRVdfRUIKLQlkZWZhdWx0IHkgaWYgQVJDSF9WRVJTQVRJTEVfUEIgfHwgTUFDSF9WRVJTQVRJTEVfQUIgfHwgQVJDSF9PTUFQNzMwIHx8IEFSQ0hfT01BUDE2WFgKKwlkZXBlbmRzIG9uIEFSQ0hfSU5URUdSQVRPUiB8fCBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBNQUNIX1JFQUxWSUVXX0VCIHx8IEFSQ0hfUE5YNDAwOAorCWRlZmF1bHQgeSBpZiBBUkNIX1ZFUlNBVElMRV9QQiB8fCBNQUNIX1ZFUlNBVElMRV9BQiB8fCBBUkNIX09NQVA3MzAgfHwgQVJDSF9PTUFQMTZYWCB8fCBBUkNIX1BOWDQwMDgKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VEoKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYyBiL2FyY2gvdW0va2VybmVsL3BoeXNtZW0uYwppbmRleCBmYzBmMGIwLi4xNjZjYjA5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9waHlzbWVtLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcGh5c21lbS5jCkBAIC02OSw3ICs2OSw3IEBACiAJCXBhbmljKCJQaHlzaWNhbCByZW1hcHBpbmcgZm9yICVwIGFscmVhZHkgcHJlc2VudCIsCiAJCSAgICAgIGRlc2MtPnZpcnQpOwogCi0JcmJfbGlua19ub2RlKCZkZXNjLT5yYiwgKCpuKS0+cmJfcGFyZW50LCBuKTsKKwlyYl9saW5rX25vZGUoJmRlc2MtPnJiLCByYl9wYXJlbnQoKm4pLCBuKTsKIAlyYl9pbnNlcnRfY29sb3IoJmRlc2MtPnJiLCAmcGh5c19tYXBwaW5ncyk7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2FzLWlvc2NoZWQuYyBiL2Jsb2NrL2FzLWlvc2NoZWQuYwppbmRleCBhN2NhZjM1Li4wYzc1MDM5IDEwMDY0NAotLS0gYS9ibG9jay9hcy1pb3NjaGVkLmMKKysrIGIvYmxvY2svYXMtaW9zY2hlZC5jCkBAIC0zNTMsMTAgKzM1Myw5IEBACiAvKgogICogcmIgdHJlZSBzdXBwb3J0IGZ1bmN0aW9ucwogICovCi0jZGVmaW5lIFJCX05PTkUJCSgyKQogI2RlZmluZSBSQl9FTVBUWShyb290KQkoKHJvb3QpLT5yYl9ub2RlID09IE5VTEwpCi0jZGVmaW5lIE9OX1JCKG5vZGUpCSgobm9kZSktPnJiX2NvbG9yICE9IFJCX05PTkUpCi0jZGVmaW5lIFJCX0NMRUFSKG5vZGUpCSgobm9kZSktPnJiX2NvbG9yID0gUkJfTk9ORSkKKyNkZWZpbmUgT05fUkIobm9kZSkJKHJiX3BhcmVudChub2RlKSAhPSBub2RlKQorI2RlZmluZSBSQl9DTEVBUihub2RlKQkocmJfc2V0X3BhcmVudChub2RlLCBub2RlKSkKICNkZWZpbmUgcmJfZW50cnlfYXJxKG5vZGUpCXJiX2VudHJ5KChub2RlKSwgc3RydWN0IGFzX3JxLCByYl9ub2RlKQogI2RlZmluZSBBUlFfUkJfUk9PVChhZCwgYXJxKQkoJihhZCktPnNvcnRfbGlzdFsoYXJxKS0+aXNfc3luY10pCiAjZGVmaW5lIHJxX3JiX2tleShycSkJCShycSktPnNlY3RvcgpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggMDUyYjE3NC4uNjIwMGQ5YiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC02MCwxNCArNjAsOSBAQAogLyoKICAqIHJiLXRyZWUgZGVmaW5lcwogICovCi0jZGVmaW5lIFJCX05PTkUJCQkoMikKICNkZWZpbmUgUkJfRU1QVFkobm9kZSkJCSgobm9kZSktPnJiX25vZGUgPT0gTlVMTCkKLSNkZWZpbmUgUkJfQ0xFQVJfQ09MT1Iobm9kZSkJKG5vZGUpLT5yYl9jb2xvciA9IFJCX05PTkUKICNkZWZpbmUgUkJfQ0xFQVIobm9kZSkJCWRvIHsJXAotCShub2RlKS0+cmJfcGFyZW50ID0gTlVMTDsJXAotCVJCX0NMRUFSX0NPTE9SKChub2RlKSk7CQlcCi0JKG5vZGUpLT5yYl9yaWdodCA9IE5VTEw7CVwKLQkobm9kZSktPnJiX2xlZnQgPSBOVUxMOwkJXAorCQltZW1zZXQobm9kZSwgMCwgc2l6ZW9mKCpub2RlKSk7IFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIFJCX0NMRUFSX1JPT1Qocm9vdCkJKChyb290KS0+cmJfbm9kZSA9IE5VTEwpCiAjZGVmaW5lIHJiX2VudHJ5X2NycShub2RlKQlyYl9lbnRyeSgobm9kZSksIHN0cnVjdCBjZnFfcnEsIHJiX25vZGUpCkBAIC01NjcsNyArNTYyLDYgQEAKIAljZnFfdXBkYXRlX25leHRfY3JxKGNycSk7CiAKIAlyYl9lcmFzZSgmY3JxLT5yYl9ub2RlLCAmY2ZxcS0+c29ydF9saXN0KTsKLQlSQl9DTEVBUl9DT0xPUigmY3JxLT5yYl9ub2RlKTsKIAogCWlmIChjZnFfY2ZxcV9vbl9ycihjZnFxKSAmJiBSQl9FTVBUWSgmY2ZxcS0+c29ydF9saXN0KSkKIAkJY2ZxX2RlbF9jZnFxX3JyKGNmcWQsIGNmcXEpOwpkaWZmIC0tZ2l0IGEvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jIGIvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCmluZGV4IDNiZDA0MTUuLmM5NGRlOGUgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYworKysgYi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKQEAgLTE2NSwxMCArMTY1LDkgQEAKIC8qCiAgKiByYiB0cmVlIHN1cHBvcnQgZnVuY3Rpb25zCiAgKi8KLSNkZWZpbmUgUkJfTk9ORQkJKDIpCiAjZGVmaW5lIFJCX0VNUFRZKHJvb3QpCSgocm9vdCktPnJiX25vZGUgPT0gTlVMTCkKLSNkZWZpbmUgT05fUkIobm9kZSkJKChub2RlKS0+cmJfY29sb3IgIT0gUkJfTk9ORSkKLSNkZWZpbmUgUkJfQ0xFQVIobm9kZSkJKChub2RlKS0+cmJfY29sb3IgPSBSQl9OT05FKQorI2RlZmluZSBPTl9SQihub2RlKQkocmJfcGFyZW50KG5vZGUpICE9IG5vZGUpCisjZGVmaW5lIFJCX0NMRUFSKG5vZGUpCShyYl9zZXRfcGFyZW50KG5vZGUsIG5vZGUpKQogI2RlZmluZSByYl9lbnRyeV9kcnEobm9kZSkJcmJfZW50cnkoKG5vZGUpLCBzdHJ1Y3QgZGVhZGxpbmVfcnEsIHJiX25vZGUpCiAjZGVmaW5lIERSUV9SQl9ST09UKGRkLCBkcnEpCSgmKGRkKS0+c29ydF9saXN0W3JxX2RhdGFfZGlyKChkcnEpLT5yZXF1ZXN0KV0pCiAjZGVmaW5lIHJxX3JiX2tleShycSkJCShycSktPnNlY3RvcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9kYWVtb24uaCBiL2RyaXZlcnMvY2hhci9yaW8vZGFlbW9uLmgKaW5kZXggNTgxOGE4YS4uNmU2M2Y4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9kYWVtb24uaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2RhZW1vbi5oCkBAIC01MSw3ICs1MSw3IEBACiB9OwogCiBzdHJ1Y3QgRG93bkxvYWQgewotCWNoYXIgKkRhdGFQOworCWNoYXIgX191c2VyICpEYXRhUDsKIAl1bnNpZ25lZCBpbnQgQ291bnQ7CiAJdW5zaWduZWQgaW50IFByb2R1Y3RDb2RlOwogfTsKQEAgLTgzLDE4ICs4MywxOCBAQAogc3RydWN0IExwYlJlcSB7CiAJdW5zaWduZWQgaW50IEhvc3Q7CiAJdW5zaWduZWQgaW50IExpbms7Ci0Jc3RydWN0IExQQiAqTHBiUDsKKwlzdHJ1Y3QgTFBCIF9fdXNlciAqTHBiUDsKIH07CiAKIHN0cnVjdCBSdXBSZXEgewogCXVuc2lnbmVkIGludCBIb3N0TnVtOwogCXVuc2lnbmVkIGludCBSdXBOdW07Ci0Jc3RydWN0IFJVUCAqUnVwUDsKKwlzdHJ1Y3QgUlVQIF9fdXNlciAqUnVwUDsKIH07CiAKIHN0cnVjdCBQb3J0UmVxIHsKIAl1bnNpZ25lZCBpbnQgU3lzUG9ydDsKLQlzdHJ1Y3QgUG9ydCAqUG9ydFA7CisJc3RydWN0IFBvcnQgX191c2VyICpQb3J0UDsKIH07CiAKIHN0cnVjdCBTdHJlYW1JbmZvIHsKQEAgLTEwNSwxMiArMTA1LDEyIEBACiAKIHN0cnVjdCBIb3N0UmVxIHsKIAl1bnNpZ25lZCBpbnQgSG9zdE51bTsKLQlzdHJ1Y3QgSG9zdCAqSG9zdFA7CisJc3RydWN0IEhvc3QgX191c2VyICpIb3N0UDsKIH07CiAKIHN0cnVjdCBIb3N0RHBSYW0gewogCXVuc2lnbmVkIGludCBIb3N0TnVtOwotCXN0cnVjdCBEcFJhbSAqRHBSYW1QOworCXN0cnVjdCBEcFJhbSBfX3VzZXIgKkRwUmFtUDsKIH07CiAKIHN0cnVjdCBEZWJ1Z0N0cmwgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9mdW5jLmggYi9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaAppbmRleCBlNjRmZTk5Li42YjAzOTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2Z1bmMuaApAQCAtNDYsNyArNDYsNyBAQAogaW50IFJJT0Jvb3RDb2RlSE9TVChzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IERvd25Mb2FkICopOwogaW50IFJJT0Jvb3RDb2RlVU5LTk9XTihzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IERvd25Mb2FkICopOwogdm9pZCBtc2VjX3RpbWVvdXQoc3RydWN0IEhvc3QgKik7Ci1pbnQgUklPQm9vdFJ1cChzdHJ1Y3QgcmlvX2luZm8gKiwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgSG9zdCAqLCBzdHJ1Y3QgUEtUICopOworaW50IFJJT0Jvb3RSdXAoc3RydWN0IHJpb19pbmZvICosIHVuc2lnbmVkIGludCwgc3RydWN0IEhvc3QgKiwgc3RydWN0IFBLVCBfX2lvbWVtICopOwogaW50IFJJT0Jvb3RPayhzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgbG9uZyk7CiBpbnQgUklPUnRhQm91bmQoc3RydWN0IHJpb19pbmZvICosIHVuc2lnbmVkIGludCk7CiB2b2lkIHJpb19maWxsX2hvc3Rfc2xvdChpbnQsIGludCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgSG9zdCAqKTsKQEAgLTU1LDggKzU1LDggQEAKIGludCBSSU9Gb2FkUnRhKHN0cnVjdCBIb3N0ICosIHN0cnVjdCBNYXAgKik7CiBpbnQgUklPWm9tYmllUnRhKHN0cnVjdCBIb3N0ICosIHN0cnVjdCBNYXAgKik7CiBpbnQgUklPQ29tbWFuZFJ0YShzdHJ1Y3QgcmlvX2luZm8gKiwgdW5zaWduZWQgbG9uZywgaW50ICgqZnVuYykgKHN0cnVjdCBIb3N0ICosIHN0cnVjdCBNYXAgKikpOwotaW50IFJJT0lkZW50aWZ5UnRhKHN0cnVjdCByaW9faW5mbyAqLCB2b2lkICopOwotaW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICosIHZvaWQgKik7CitpbnQgUklPSWRlbnRpZnlSdGEoc3RydWN0IHJpb19pbmZvICosIHZvaWQgX191c2VyICopOworaW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICosIHZvaWQgX191c2VyICopOwogaW50IFJJT1N1c3BlbmRCb290UnRhKHN0cnVjdCBIb3N0ICosIGludCwgaW50KTsKIGludCBSSU9Gb2FkV2FrZXVwKHN0cnVjdCByaW9faW5mbyAqKTsKIHN0cnVjdCBDbWRCbGsgKlJJT0dldENtZEJsayh2b2lkKTsKQEAgLTY4LDcgKzY4LDggQEAKIGludCBSSU9VblVzZSh1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgQ21kQmxrICopOwogCiAvKiByaW9jdHJsLmMgKi8KLWludCByaW9jb250cm9sKHN0cnVjdCByaW9faW5mbyAqLCBkZXZfdCwgaW50LCBjYWRkcl90LCBpbnQpOworaW50IHJpb2NvbnRyb2woc3RydWN0IHJpb19pbmZvICosIGRldl90LCBpbnQsIHVuc2lnbmVkIGxvbmcsIGludCk7CisKIGludCBSSU9QcmVlbXB0aXZlQ21kKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgUG9ydCAqLCB1bnNpZ25lZCBjaGFyKTsKIAogLyogcmlvaW5pdC5jICovCkBAIC03NywxMyArNzgsMTMgQEAKIHZvaWQgUklPSVNBaW5pdChzdHJ1Y3QgcmlvX2luZm8gKiwgaW50KTsKIGludCBSSU9Eb0FUKHN0cnVjdCByaW9faW5mbyAqLCBpbnQsIGludCk7CiBjYWRkcl90IFJJT0NoZWNrRm9yQVRDYXJkKGludCk7Ci1pbnQgUklPQXNzaWduQVQoc3RydWN0IHJpb19pbmZvICosIGludCwgY2FkZHJfdCwgaW50KTsKLWludCBSSU9Cb2FyZFRlc3QodW5zaWduZWQgbG9uZywgY2FkZHJfdCwgdW5zaWduZWQgY2hhciwgaW50KTsKK2ludCBSSU9Bc3NpZ25BVChzdHJ1Y3QgcmlvX2luZm8gKiwgaW50LCB2b2lkIF9faW9tZW0gKiwgaW50KTsKK2ludCBSSU9Cb2FyZFRlc3QodW5zaWduZWQgbG9uZywgdm9pZCBfX2lvbWVtICosIHVuc2lnbmVkIGNoYXIsIGludCk7CiB2b2lkIFJJT0FsbG9jRGF0YVN0cnVjdHMoc3RydWN0IHJpb19pbmZvICopOwogdm9pZCBSSU9TZXR1cERhdGFTdHJ1Y3RzKHN0cnVjdCByaW9faW5mbyAqKTsKIGludCBSSU9EZWZhdWx0TmFtZShzdHJ1Y3QgcmlvX2luZm8gKiwgc3RydWN0IEhvc3QgKiwgdW5zaWduZWQgaW50KTsKIHN0cnVjdCByaW9WZXJzaW9uICpSSU9WZXJzaWQodm9pZCk7Ci12b2lkIFJJT0hvc3RSZXNldCh1bnNpZ25lZCBpbnQsIHN0cnVjdCBEcFJhbSAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBSSU9Ib3N0UmVzZXQodW5zaWduZWQgaW50LCBzdHJ1Y3QgRHBSYW0gX19pb21lbSAqLCB1bnNpZ25lZCBpbnQpOwogCiAvKiByaW9pbnRyLmMgKi8KIHZvaWQgUklPVHhFbmFibGUoY2hhciAqKTsKQEAgLTk1LDE0ICs5NiwxNCBAQAogaW50IFJJT0RlbGF5KHN0cnVjdCBQb3J0ICpQb3J0UCwgaW50KTsKIGludCBSSU9EZWxheV9uaShzdHJ1Y3QgUG9ydCAqUG9ydFAsIGludCk7CiB2b2lkIG1zX3RpbWVvdXQoc3RydWN0IFBvcnQgKik7Ci1pbnQgY2FuX2FkZF90cmFuc21pdChzdHJ1Y3QgUEtUICoqLCBzdHJ1Y3QgUG9ydCAqKTsKK2ludCBjYW5fYWRkX3RyYW5zbWl0KHN0cnVjdCBQS1QgX19pb21lbSAqKiwgc3RydWN0IFBvcnQgKik7CiB2b2lkIGFkZF90cmFuc21pdChzdHJ1Y3QgUG9ydCAqKTsKLXZvaWQgcHV0X2ZyZWVfZW5kKHN0cnVjdCBIb3N0ICosIHN0cnVjdCBQS1QgKik7Ci1pbnQgY2FuX3JlbW92ZV9yZWNlaXZlKHN0cnVjdCBQS1QgKiosIHN0cnVjdCBQb3J0ICopOwordm9pZCBwdXRfZnJlZV9lbmQoc3RydWN0IEhvc3QgKiwgc3RydWN0IFBLVCBfX2lvbWVtICopOworaW50IGNhbl9yZW1vdmVfcmVjZWl2ZShzdHJ1Y3QgUEtUIF9faW9tZW0gKiosIHN0cnVjdCBQb3J0ICopOwogdm9pZCByZW1vdmVfcmVjZWl2ZShzdHJ1Y3QgUG9ydCAqKTsKIAogLyogcmlvcm91dGUuYyAqLwotaW50IFJJT1JvdXRlUnVwKHN0cnVjdCByaW9faW5mbyAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBIb3N0ICosIHN0cnVjdCBQS1QgKik7CitpbnQgUklPUm91dGVSdXAoc3RydWN0IHJpb19pbmZvICosIHVuc2lnbmVkIGludCwgc3RydWN0IEhvc3QgKiwgc3RydWN0IFBLVCBfX2lvbWVtICopOwogdm9pZCBSSU9GaXhQaGJzKHN0cnVjdCByaW9faW5mbyAqLCBzdHJ1Y3QgSG9zdCAqLCB1bnNpZ25lZCBpbnQpOwogdW5zaWduZWQgaW50IEdldFVuaXRUeXBlKHVuc2lnbmVkIGludCk7CiBpbnQgUklPU2V0Q2hhbmdlKHN0cnVjdCByaW9faW5mbyAqKTsKQEAgLTEzOSw3ICsxNDAsNyBAQAogc3RydWN0IHJpb19pbmZvICpyaW9faW5mb19zdG9yZShpbnQgY21kLCBzdHJ1Y3QgcmlvX2luZm8gKnApOwogI2VuZGlmCiAKLWV4dGVybiB2b2lkIHJpb19jb3B5X3RvX2NhcmQodm9pZCAqdG8sIHZvaWQgKmZyb20sIGludCBsZW4pOworZXh0ZXJuIHZvaWQgcmlvX2NvcHlfdG9fY2FyZCh2b2lkICpmcm9tLCB2b2lkIF9faW9tZW0gKnRvLCBpbnQgbGVuKTsKIGV4dGVybiBpbnQgcmlvX21pbm9yKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIGludCByaW9faXNtb2RlbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9ob3N0LmggYi9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaAppbmRleCAxNzljZGJlLi5lZTJkZGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL2hvc3QuaApAQCAtNDgsOCArNDgsOCBAQAogCXVuc2lnbmVkIGNoYXIgSXZlYzsJCS8qIFBPTExFRCBvciBpdmVjIG51bWJlciAqLwogCXVuc2lnbmVkIGNoYXIgTW9kZTsJCS8qIENvbnRyb2wgc3R1ZmYgKi8KIAl1bnNpZ25lZCBjaGFyIFNsb3Q7CQkvKiBTbG90ICovCi0JY2FkZHJfdCBDYWRkcjsJCQkvKiBLViBhZGRyZXNzIG9mIERQUkFNICovCi0Jc3RydWN0IERwUmFtICpDYXJkUDsJCS8qIEtWIGFkZHJlc3Mgb2YgRFBSQU0sIHdpdGggb3ZlcmxheSAqLworCXZvaWQgIF9faW9tZW0gKkNhZGRyOwkJLyogS1YgYWRkcmVzcyBvZiBEUFJBTSAqLworCXN0cnVjdCBEcFJhbSBfX2lvbWVtICpDYXJkUDsJLyogS1YgYWRkcmVzcyBvZiBEUFJBTSwgd2l0aCBvdmVybGF5ICovCiAJdW5zaWduZWQgbG9uZyBQYWRkclA7CQkvKiBQaHlzLiBhZGRyZXNzIG9mIERQUkFNICovCiAJY2hhciBOYW1lW01BWF9OQU1FX0xFTl07CS8qIFRoZSBuYW1lIG9mIHRoZSBob3N0ICovCiAJdW5zaWduZWQgaW50IFVuaXF1ZU51bTsJCS8qIGhvc3QgdW5pcXVlIG51bWJlciAqLwpAQCAtNTcsNyArNTcsNyBAQAogCXVuc2lnbmVkIGludCBXb3JrVG9CZURvbmU7CS8qIHNldCB0byB0cnVlIGVhY2ggaW50ZXJydXB0ICovCiAJdW5zaWduZWQgaW50IEluSW50cjsJCS8qIEJlaW5nIHNlcnZpY2VkPyAqLwogCXVuc2lnbmVkIGludCBJbnRTcnZEb25lOwkvKiBob3N0J3MgaW50ZXJydXB0IGhhcyBiZWVuIHNlcnZpY2VkICovCi0Jdm9pZCAoKkNvcHkpICh2b2lkICosIHZvaWQgKiwgaW50KTsJLyogY29weSBmdW5jICovCisJdm9pZCAoKkNvcHkpICh2b2lkICosIHZvaWQgX19pb21lbSAqLCBpbnQpOwkvKiBjb3B5IGZ1bmMgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAkvKgogCSAqKiAgICAgICAgICAgICAgIEkgTSBQIE8gUiBUIEEgTiBUICEKQEAgLTgzLDExICs4MywxMSBAQAogCiAJc3RydWN0IFRvcCBUb3BvbG9neVtMSU5LU19QRVJfVU5JVF07CS8qIG9uZSBwZXIgbGluayAqLwogCXN0cnVjdCBNYXAgTWFwcGluZ1tNQVhfUlVQXTsJCS8qIE1hcHBpbmdzIGZvciBob3N0ICovCi0Jc3RydWN0IFBIQiAqUGhiUDsJCQkvKiBQb2ludGVyIHRvIHRoZSBQSEIgYXJyYXkgKi8KLQl1bnNpZ25lZCBzaG9ydCAqUGhiTnVtUDsJCS8qIFB0ciB0byBOdW1iZXIgb2YgUEhCJ3MgKi8KLQlzdHJ1Y3QgTFBCICpMaW5rU3RyUDsJCQkvKiBMaW5rIFN0cnVjdHVyZSBBcnJheSAqLwotCXN0cnVjdCBSVVAgKlJ1cFA7CQkJLyogU2l4dGVlbiByZWFsIHJ1cHMgaGVyZSAqLwotCXN0cnVjdCBQQVJNX01BUCAqUGFybU1hcFA7CQkvKiBwb2ludHMgdG8gdGhlIHBhcm1tYXAgKi8KKwlzdHJ1Y3QgUEhCIF9faW9tZW0gKlBoYlA7CQkvKiBQb2ludGVyIHRvIHRoZSBQSEIgYXJyYXkgKi8KKwl1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICpQaGJOdW1QOwkvKiBQdHIgdG8gTnVtYmVyIG9mIFBIQidzICovCisJc3RydWN0IExQQiBfX2lvbWVtICpMaW5rU3RyUDsJCS8qIExpbmsgU3RydWN0dXJlIEFycmF5ICovCisJc3RydWN0IFJVUCBfX2lvbWVtICpSdXBQOwkJLyogU2l4dGVlbiByZWFsIHJ1cHMgaGVyZSAqLworCXN0cnVjdCBQQVJNX01BUCBfX2lvbWVtICpQYXJtTWFwUDsJLyogcG9pbnRzIHRvIHRoZSBwYXJtbWFwICovCiAJdW5zaWduZWQgaW50IEV4dHJhVW5pdHNbTUFYX0VYVFJBX1VOSVRTXTsJLyogdW5rbm93biB0aGluZ3MgKi8KIAl1bnNpZ25lZCBpbnQgTnVtRXh0cmFCb290ZWQ7CQkvKiBob3cgbWFueSBvZiB0aGUgYWJvdmUgKi8KIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9wb3J0LmggYi9kcml2ZXJzL2NoYXIvcmlvL3BvcnQuaAppbmRleCA5YjVmYTNlLi40OWNmNmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3BvcnQuaAorKysgYi9kcml2ZXJzL2NoYXIvcmlvL3BvcnQuaApAQCAtNDAsNyArNDAsNyBAQAogCXN0cnVjdCBnc19wb3J0IGdzOwogCWludCBQb3J0TnVtOwkJCS8qIFJJTyBwb3J0IG5vLiwgMC01MTEgKi8KIAlzdHJ1Y3QgSG9zdCAqSG9zdFA7Ci0JY2FkZHJfdCBDYWRkcjsKKwl2b2lkIF9faW9tZW0gKkNhZGRyOwogCXVuc2lnbmVkIHNob3J0IEhvc3RQb3J0OwkvKiBQb3J0IG51bWJlciBvbiBob3N0IGNhcmQgKi8KIAl1bnNpZ25lZCBjaGFyIFJ1cE51bTsJCS8qIE51bWJlciBvZiBSVVAgZm9yIHBvcnQgKi8KIAl1bnNpZ25lZCBjaGFyIElEMjsJCS8qIFNlY29uZCBJRCBvZiBSVEEgZm9yIHBvcnQgKi8KQEAgLTkyLDEzICs5MiwxMyBAQAogI2RlZmluZSBSSU9fUlRTRkxPVwkweDA0MDAJCS8qIFJJTydzIG93biBSVFNGTE9XIGZsYWcgKi8KIAogCi0Jc3RydWN0IFBIQiAqUGhiUDsJCS8qIHBvaW50ZXIgdG8gUEhCIGZvciBwb3J0ICovCi0JdTE2ICpUeEFkZDsJCQkvKiBBZGQgcGFja2V0cyBoZXJlICovCi0JdTE2ICpUeFN0YXJ0OwkJCS8qIFN0YXJ0IG9mIGFkZCBhcnJheSAqLwotCXUxNiAqVHhFbmQ7CQkJLyogRW5kIG9mIGFkZCBhcnJheSAqLwotCXUxNiAqUnhSZW1vdmU7CQkJLyogUmVtb3ZlIHBhY2tldHMgaGVyZSAqLwotCXUxNiAqUnhTdGFydDsJCQkvKiBTdGFydCBvZiByZW1vdmUgYXJyYXkgKi8KLQl1MTYgKlJ4RW5kOwkJCS8qIEVuZCBvZiByZW1vdmUgYXJyYXkgKi8KKwlzdHJ1Y3QgUEhCIF9faW9tZW0gKlBoYlA7CS8qIHBvaW50ZXIgdG8gUEhCIGZvciBwb3J0ICovCisJdTE2IF9faW9tZW0gKlR4QWRkOwkJLyogQWRkIHBhY2tldHMgaGVyZSAqLworCXUxNiBfX2lvbWVtICpUeFN0YXJ0OwkJLyogU3RhcnQgb2YgYWRkIGFycmF5ICovCisJdTE2IF9faW9tZW0gKlR4RW5kOwkJLyogRW5kIG9mIGFkZCBhcnJheSAqLworCXUxNiBfX2lvbWVtICpSeFJlbW92ZTsJCS8qIFJlbW92ZSBwYWNrZXRzIGhlcmUgKi8KKwl1MTYgX19pb21lbSAqUnhTdGFydDsJCS8qIFN0YXJ0IG9mIHJlbW92ZSBhcnJheSAqLworCXUxNiBfX2lvbWVtICpSeEVuZDsJCS8qIEVuZCBvZiByZW1vdmUgYXJyYXkgKi8KIAl1bnNpZ25lZCBpbnQgUnRhVW5pcXVlTnVtOwkvKiBVbmlxdWUgbnVtYmVyIG9mIFJUQSAqLwogCXVuc2lnbmVkIHNob3J0IFBvcnRTdGF0ZTsJLyogc3RhdHVzIG9mIHBvcnQgKi8KIAl1bnNpZ25lZCBzaG9ydCBNb2RlbVN0YXRlOwkvKiBzdGF0dXMgb2YgbW9kZW0gbGluZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvLmggYi9kcml2ZXJzL2NoYXIvcmlvL3Jpby5oCmluZGV4IGI0YzkxODcuLjFiZjM2MjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvLmgKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW8uaApAQCAtMTI5LDggKzEyOSw4IEBACiAqKglSSU9fT0JKIHRha2VzIGhvc3RwLT5DYWRkciBhbmQgYSBVTklYIHBvaW50ZXIgdG8gYW4gb2JqZWN0IGFuZAogKioJcmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIERQIFJBTSBhcmVhLgogKi8KLSNkZWZpbmUJUklPX1BUUihDLE8pICgoKHVuc2lnbmVkIGNoYXIgKikoQykpKygweEZGRkYmKE8pKSkKLSNkZWZpbmUJUklPX09GRihDLE8pICgobG9uZykoTyktKGxvbmcpKEMpKQorI2RlZmluZQlSSU9fUFRSKEMsTykgKCgodW5zaWduZWQgY2hhciBfX2lvbWVtICopKEMpKSsoMHhGRkZGJihPKSkpCisjZGVmaW5lCVJJT19PRkYoQyxPKSAoKHVuc2lnbmVkIGNoYXIgX19pb21lbSAqKShPKS0odW5zaWduZWQgY2hhciBfX2lvbWVtICopKEMpKQogCiAvKgogKioJSG93IHRvIGNvbnZlcnQgZnJvbSB2YXJpb3VzIGRpZmZlcmVudCBkZXZpY2UgbnVtYmVyIGZvcm1hdHM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguYwppbmRleCA3OGRkODU2Li5hYTQzNDM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmMKQEAgLTMzMyw5ICszMzMsOSBAQAogCXJldHVybiAhUklPX0ZBSUw7CiB9CiAKLXZvaWQgcmlvX2NvcHlfdG9fY2FyZCh2b2lkICp0bywgdm9pZCAqZnJvbSwgaW50IGxlbikKK3ZvaWQgcmlvX2NvcHlfdG9fY2FyZCh2b2lkICpmcm9tLCB2b2lkIF9faW9tZW0gKnRvLCBpbnQgbGVuKQogewotCXJpb19tZW1jcHlfdG9pbyhOVUxMLCB0bywgZnJvbSwgbGVuKTsKKwlyaW9fY29weV90b2lvKHRvLCBmcm9tLCBsZW4pOwogfQogCiBpbnQgcmlvX21pbm9yKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC01NzMsNyArNTczLDcgQEAKIAlmdW5jX2VudGVyKCk7CiAKIAkvKiBUaGUgImRldiIgYXJndW1lbnQgaXNuJ3QgdXNlZC4gKi8KLQlyYyA9IHJpb2NvbnRyb2wocCwgMCwgY21kLCAodm9pZCAqKSBhcmcsIGNhcGFibGUoQ0FQX1NZU19BRE1JTikpOworCXJjID0gcmlvY29udHJvbChwLCAwLCBjbWQsIGFyZywgY2FwYWJsZShDQVBfU1lTX0FETUlOKSk7CiAKIAlmdW5jX2V4aXQoKTsKIAlyZXR1cm4gcmM7CkBAIC01ODMsNiArNTgzLDcgQEAKIAogc3RhdGljIGludCByaW9faW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogeworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCByYzsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CiAJaW50IGl2YWw7CkBAIC01OTQsMTQgKzU5NSwxNCBAQAogCXJjID0gMDsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVElPQ1NTT0ZUQ0FSOgotCQlpZiAoKHJjID0gZ2V0X3VzZXIoaXZhbCwgKHVuc2lnbmVkIGludCAqKSBhcmcpKSA9PSAwKSB7CisJCWlmICgocmMgPSBnZXRfdXNlcihpdmFsLCAodW5zaWduZWQgX191c2VyICopIGFyZ3ApKSA9PSAwKSB7CiAJCQl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgfkNMT0NBTCkgfCAoaXZhbCA/IENMT0NBTCA6IDApOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgVElPQ0dTRVJJQUw6CiAJCXJjID0gLUVGQVVMVDsKLQkJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsICh2b2lkICopIGFyZywgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCi0JCQlyYyA9IGdzX2dldHNlcmlhbCgmUG9ydFAtPmdzLCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKikgYXJnKTsKKwkJaWYgKGFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGFyZ3AsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCkpKQorCQkJcmMgPSBnc19nZXRzZXJpYWwoJlBvcnRQLT5ncywgYXJncCk7CiAJCWJyZWFrOwogCWNhc2UgVENTQlJLOgogCQlpZiAoUG9ydFAtPlN0YXRlICYgUklPX0RFTEVURUQpIHsKQEAgLTYzMSw4ICs2MzIsOCBAQAogCQlicmVhazsKIAljYXNlIFRJT0NTU0VSSUFMOgogCQlyYyA9IC1FRkFVTFQ7Ci0JCWlmIChhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsICh2b2lkICopIGFyZywgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCi0JCQlyYyA9IGdzX3NldHNlcmlhbCgmUG9ydFAtPmdzLCAoc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKikgYXJnKTsKKwkJaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfc3RydWN0KSkpCisJCQlyYyA9IGdzX3NldHNlcmlhbCgmUG9ydFAtPmdzLCBhcmdwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PSU9DVExDTUQ7CkBAIC05MTksNyArOTIwLDcgQEAKIHN0YXRpYyB2b2lkIGZpeF9yaW9fcGNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXVuc2lnbmVkIGxvbmcgaHdiYXNlOwotCXVuc2lnbmVkIGNoYXIgKnJlYmFzZTsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnJlYmFzZTsKIAl1bnNpZ25lZCBpbnQgdDsKIAogI2RlZmluZSBDTlRSTF9SRUdfT0ZGU0VUICAgICAgICAweDUwCkBAIC05OTksNyArMTAwMCw3IEBACiAJCWlmICgoKDEgPDwgaHAtPkl2ZWMpICYgcmlvX2lycW1hc2spID09IDApCiAJCQlocC0+SXZlYyA9IDA7CiAJCWhwLT5DYWRkciA9IGlvcmVtYXAocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLlBhZGRyUCwgUklPX1dJTkRPV19MRU4pOwotCQlocC0+Q2FyZFAgPSAoc3RydWN0IERwUmFtICopIGhwLT5DYWRkcjsKKwkJaHAtPkNhcmRQID0gKHN0cnVjdCBEcFJhbSBfX2lvbWVtICopIGhwLT5DYWRkcjsKIAkJaHAtPlR5cGUgPSBSSU9fUENJOwogCQlocC0+Q29weSA9IHJpb19jb3B5X3RvX2NhcmQ7CiAJCWhwLT5Nb2RlID0gUklPX1BDSV9CT09UX0ZST01fUkFNOwpAQCAtMTAyMSw3ICsxMDIyLDcgQEAKIAkJCXAtPlJJT051bUhvc3RzKys7CiAJCQlmb3VuZCsrOwogCQl9IGVsc2UgewotCQkJaW91bm1hcCgoY2hhciAqKSAocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhZGRyKSk7CisJCQlpb3VubWFwKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkcik7CiAJCX0KIAl9CiAKQEAgLTEwNDcsNyArMTA0OCw3IEBACiAJCQlocC0+SXZlYyA9IDA7CiAJCWhwLT5JdmVjIHw9IDB4ODAwMDsJLyogTWFyayBhcyBub24tc2hhcmFibGUgKi8KIAkJaHAtPkNhZGRyID0gaW9yZW1hcChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uUGFkZHJQLCBSSU9fV0lORE9XX0xFTik7Ci0JCWhwLT5DYXJkUCA9IChzdHJ1Y3QgRHBSYW0gKikgaHAtPkNhZGRyOworCQlocC0+Q2FyZFAgPSAoc3RydWN0IERwUmFtIF9faW9tZW0gKikgaHAtPkNhZGRyOwogCQlocC0+VHlwZSA9IFJJT19QQ0k7CiAJCWhwLT5Db3B5ID0gcmlvX2NvcHlfdG9fY2FyZDsKIAkJaHAtPk1vZGUgPSBSSU9fUENJX0JPT1RfRlJPTV9SQU07CkBAIC0xMDcwLDcgKzEwNzEsNyBAQAogCQkJcC0+UklPTnVtSG9zdHMrKzsKIAkJCWZvdW5kKys7CiAJCX0gZWxzZSB7Ci0JCQlpb3VubWFwKChjaGFyICopIChwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ2FkZHIpKTsKKwkJCWlvdW5tYXAocC0+UklPSG9zdHNbcC0+UklPTnVtSG9zdHNdLkNhZGRyKTsKIAkJfQogI2Vsc2UKIAkJcHJpbnRrKEtFUk5fRVJSICJGb3VuZCBhbiBvbGRlciBSSU8gUENJIGNhcmQsIGJ1dCB0aGUgZHJpdmVyIGlzIG5vdCAiICJjb21waWxlZCB0byBzdXBwb3J0IGl0LlxuIik7CkBAIC0xMDg1LDcgKzEwODYsNyBAQAogCQkvKiBUaGVyZSB3YXMgc29tZXRoaW5nIGFib3V0IHRoZSBJUlFzIG9mIHRoZXNlIGNhcmRzLiAnRm9yZ2V0IHdoYXQuLS1SRVcgKi8KIAkJaHAtPkl2ZWMgPSAwOwogCQlocC0+Q2FkZHIgPSBpb3JlbWFwKHAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5QYWRkclAsIFJJT19XSU5ET1dfTEVOKTsKLQkJaHAtPkNhcmRQID0gKHN0cnVjdCBEcFJhbSAqKSBocC0+Q2FkZHI7CisJCWhwLT5DYXJkUCA9IChzdHJ1Y3QgRHBSYW0gX19pb21lbSAqKSBocC0+Q2FkZHI7CiAJCWhwLT5UeXBlID0gUklPX0FUOwogCQlocC0+Q29weSA9IHJpb19jb3B5X3RvX2NhcmQ7CS8qIEFUIGNhcmQgUENJPz8/PyAtIFBWREwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLSBZRVMhIHRoaXMgaXMgbm93IGEgbm9ybWFsIGNvcHkuIE9ubHkgdGhlCkBAIC0xMTExLDcgKzExMTIsNyBAQAogCQkJfQogCiAJCQlpZiAoIW9rYm9hcmQpCi0JCQkJaW91bm1hcCgoY2hhciAqKSAoaHAtPkNhZGRyKSk7CisJCQkJaW91bm1hcChocC0+Q2FkZHIpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5oIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9fbGludXguaAppbmRleCA0Y2U3N2ZiLi41NWI5Yzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb19saW51eC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvX2xpbnV4LmgKQEAgLTEzMSw5ICsxMzEsOSBAQAogCiAKICNpZmRlZiBDT05GSUdfUklPX09MRFBDSQotc3RhdGljIGlubGluZSB2b2lkICpyaW9fbWVtY3B5X3RvaW8odm9pZCAqZHVtbXksIHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgaW50IG4pCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcmlvX21lbWNweV90b2lvKHZvaWQgX19pb21lbSAqZHVtbXksIHZvaWQgX19pb21lbSAqZGVzdCwgdm9pZCAqc291cmNlLCBpbnQgbikKIHsKLQljaGFyICpkc3QgPSBkZXN0OworCWNoYXIgX19pb21lbSAqZHN0ID0gZGVzdDsKIAljaGFyICpzcmMgPSBzb3VyY2U7CiAKIAl3aGlsZSAobi0tKSB7CkBAIC0xNDQsMTEgKzE0NCwyMiBAQAogCXJldHVybiBkZXN0OwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqcmlvX2NvcHlfdG9pbyh2b2lkIF9faW9tZW0gKmRlc3QsIHZvaWQgKnNvdXJjZSwgaW50IG4pCit7CisJY2hhciBfX2lvbWVtICpkc3QgPSBkZXN0OworCWNoYXIgKnNyYyA9IHNvdXJjZTsKIAotc3RhdGljIGlubGluZSB2b2lkICpyaW9fbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCB2b2lkICpzb3VyY2UsIGludCBuKQorCXdoaWxlIChuLS0pCisJCXdyaXRlYigqc3JjKyssIGRzdCsrKTsKKworCXJldHVybiBkZXN0OworfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqcmlvX21lbWNweV9mcm9taW8odm9pZCAqZGVzdCwgdm9pZCBfX2lvbWVtICpzb3VyY2UsIGludCBuKQogewogCWNoYXIgKmRzdCA9IGRlc3Q7Ci0JY2hhciAqc3JjID0gc291cmNlOworCWNoYXIgX19pb21lbSAqc3JjID0gc291cmNlOwogCiAJd2hpbGUgKG4tLSkKIAkJKmRzdCsrID0gcmVhZGIoc3JjKyspOwpAQCAtMTU4LDYgKzE2OSw3IEBACiAKICNlbHNlCiAjZGVmaW5lIHJpb19tZW1jcHlfdG9pbyhkdW1teSxkZXN0LHNvdXJjZSxuKSAgIG1lbWNweV90b2lvKGRlc3QsIHNvdXJjZSwgbikKKyNkZWZpbmUgcmlvX2NvcHlfdG9pbyAgIAkJICAgICAgIG1lbWNweV90b2lvCiAjZGVmaW5lIHJpb19tZW1jcHlfZnJvbWlvICAgICAgICAgICAgICAgICAgICAgIG1lbWNweV9mcm9taW8KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2Jvb3QuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCmluZGV4IDI5MDE0M2EuLmVjYTJiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvYm9vdC5jCkBAIC03MSw3ICs3MSw3IEBACiAjaW5jbHVkZSAiY21kYmxrLmgiCiAjaW5jbHVkZSAicm91dGUuaCIKIAotc3RhdGljIGludCBSSU9Cb290Q29tcGxldGUoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBQa3RDbWQgKlBrdENtZFApOworc3RhdGljIGludCBSSU9Cb290Q29tcGxldGUoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBQa3RDbWQgX19pb21lbSAqUGt0Q21kUCk7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFJJT0F0VmVjMkN0cmxbXSA9IHsKIAkvKiAwICovIElOVEVSUlVQVF9ESVNBQkxFLApAQCAtMjA0LDEzICsyMDQsMTMgQEAKIGludCBSSU9Cb290Q29kZUhPU1Qoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgRG93bkxvYWQgKnJicCkKIHsKIAlzdHJ1Y3QgSG9zdCAqSG9zdFA7Ci0JdTggKkNhZDsKLQlQQVJNX01BUCAqUGFybU1hcFA7CisJdTggX19pb21lbSAqQ2FkOworCVBBUk1fTUFQIF9faW9tZW0gKlBhcm1NYXBQOwogCWludCBSdXBOOwogCWludCBQb3J0TjsKIAl1bnNpZ25lZCBpbnQgaG9zdDsKLQl1OCAqU3RhcnRQOwotCXU4ICpEZXN0UDsKKwl1OCBfX2lvbWVtICpTdGFydFA7CisJdTggX19pb21lbSAqRGVzdFA7CiAJaW50IHdhaXRfY291bnQ7CiAJdTE2IE9sZFBhcm1NYXA7CiAJdTE2IG9mZnNldDsJCS8qIEl0IGlzIHZlcnkgaW1wb3J0YW50IHRoYXQgdGhpcyBpcyBhIHUxNiAqLwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJCSAqKiBFbnN1cmUgdGhhdCB0aGUgaG9zdCByZWFsbHkgaXMgc3RvcHBlZC4KIAkJICoqIERpc2FibGUgaXQncyBleHRlcm5hbCBidXMgJiB0d2FuZyBpdHMgcmVzZXQgbGluZS4KIAkJICovCi0JCVJJT0hvc3RSZXNldChIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKSBIb3N0UC0+Q2FyZFAsIEhvc3RQLT5TbG90KTsKKwkJUklPSG9zdFJlc2V0KEhvc3RQLT5UeXBlLCBIb3N0UC0+Q2FyZFAsIEhvc3RQLT5TbG90KTsKIAogCQkvKgogCQkgKiogQ29weSB0aGUgZGF0YSBkaXJlY3RseSBmcm9tIHVzZXIgc3BhY2UgdG8gdGhlIFNSQU0uCkBAIC0yODAsNyArMjgwLDcgQEAKIAkJCWZ1bmNfZXhpdCgpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKHJicC0+RGF0YVAsIERvd25Db2RlLCByYnAtPkNvdW50KSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoRG93bkNvZGUsIHJicC0+RGF0YVAsIHJicC0+Q291bnQpKSB7CiAJCQlrZnJlZShEb3duQ29kZSk7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlmdW5jX2V4aXQoKTsKQEAgLTM2Niw3ICszNjYsNyBAQAogCQkgKiogYSBzaG9ydCBicmFuY2ggdG8gMHg3RkY4LCB3aGVyZSBhIGxvbmcgYnJhbmNoIGlzIGNvZGVkLgogCQkgKi8KIAotCQlEZXN0UCA9ICh1OCAqKSAmQ2FkWzB4N0ZGOF07CS8qIDw8PC0tLS0gUkVBRCBUSEUgQUJPVkUgQ09NTUVOVFMgKi8KKwkJRGVzdFAgPSAmQ2FkWzB4N0ZGOF07CS8qIDw8PC0tLS0gUkVBRCBUSEUgQUJPVkUgQ09NTUVOVFMgKi8KIAogI2RlZmluZQlORklYKE4pCSgweDYwIHwgKE4pKQkvKiAuTyAgPSAofiguTyArIE4pKTw8NCAqLwogI2RlZmluZQlQRklYKE4pCSgweDIwIHwgKE4pKQkvKiAuTyAgPSAgICguTyArIE4pPDw0ICAqLwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlJJTyBNZXNnIFJ1biBGYWlsXG4iKTsKIAkJCUhvc3RQLT5GbGFncyAmPSB+UlVOX1NUQVRFOwogCQkJSG9zdFAtPkZsYWdzIHw9IFJDX1NUVUZGRUQ7Ci0JCQlSSU9Ib3N0UmVzZXQoIEhvc3RQLT5UeXBlLCAoc3RydWN0IERwUmFtICopSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCApOworCQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCApOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNDUzLDkgKzQ1Myw5IEBACiAJCS8qCiAJCSAqKiBHcmFiIGEgMzIgYml0IHBvaW50ZXIgdG8gdGhlIHBhcm1tYXAgc3RydWN0dXJlCiAJCSAqLwotCQlQYXJtTWFwUCA9IChQQVJNX01BUCAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJkhvc3RQLT5fX1Bhcm1NYXBSKSk7CisJCVBhcm1NYXBQID0gKFBBUk1fTUFQIF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZIb3N0UC0+X19QYXJtTWFwUikpOwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlBhcm1NYXBQIDogJXBcbiIsIFBhcm1NYXBQKTsKLQkJUGFybU1hcFAgPSAoUEFSTV9NQVAgKikgKCh1bnNpZ25lZCBsb25nKSBDYWQgKyByZWFkdygmSG9zdFAtPl9fUGFybU1hcFIpKTsKKwkJUGFybU1hcFAgPSAoUEFSTV9NQVAgX19pb21lbSAqKShDYWQgKyByZWFkdygmSG9zdFAtPl9fUGFybU1hcFIpKTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJQYXJtTWFwUCA6ICVwXG4iLCBQYXJtTWFwUCk7CiAKIAkJLyoKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0JPT1QsICJMaW5rcyA9IDB4JXhcbiIsIHJlYWR3KCZQYXJtTWFwUC0+bGlua3MpKTsKIAkJCUhvc3RQLT5GbGFncyAmPSB+UlVOX1NUQVRFOwogCQkJSG9zdFAtPkZsYWdzIHw9IFJDX1NUVUZGRUQ7Ci0JCQlSSU9Ib3N0UmVzZXQoIEhvc3RQLT5UeXBlLCAoc3RydWN0IERwUmFtICopSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCApOworCQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgSG9zdFAtPkNhcmRQLCBIb3N0UC0+U2xvdCApOwogCQkJY29udGludWU7CiAJCX0KIApAQCAtNDkxLDcgKzQ5MSw3IEBACiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQk9PVCwgIlRpbWVkb3V0IHdhaXRpbmcgZm9yIGluaXRfZG9uZVxuIik7CiAJCQlIb3N0UC0+RmxhZ3MgJj0gflJVTl9TVEFURTsKIAkJCUhvc3RQLT5GbGFncyB8PSBSQ19TVFVGRkVEOwotCQkJUklPSG9zdFJlc2V0KCBIb3N0UC0+VHlwZSwgKHN0cnVjdCBEcFJhbSAqKUhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKKwkJCVJJT0hvc3RSZXNldCggSG9zdFAtPlR5cGUsIEhvc3RQLT5DYXJkUCwgSG9zdFAtPlNsb3QgKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTUxMiwxMCArNTEyLDEwIEBACiAJCSAqKiAzMiBiaXQgcG9pbnRlcnMgZm9yIHRoZSBkcml2ZXIgaW4gaW9yZW1hcCBzcGFjZS4KIAkJICovCiAJCUhvc3RQLT5QYXJtTWFwUCA9IFBhcm1NYXBQOwotCQlIb3N0UC0+UGhiUCA9IChzdHJ1Y3QgUEhCICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPnBoYl9wdHIpKTsKLQkJSG9zdFAtPlJ1cFAgPSAoc3RydWN0IFJVUCAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBhcm1NYXBQLT5ydXBzKSk7Ci0JCUhvc3RQLT5QaGJOdW1QID0gKHVuc2lnbmVkIHNob3J0ICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPnBoYl9udW1fcHRyKSk7Ci0JCUhvc3RQLT5MaW5rU3RyUCA9IChzdHJ1Y3QgTFBCICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPmxpbmtfc3RyX3B0cikpOworCQlIb3N0UC0+UGhiUCA9IChzdHJ1Y3QgUEhCIF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQYXJtTWFwUC0+cGhiX3B0cikpOworCQlIb3N0UC0+UnVwUCA9IChzdHJ1Y3QgUlVQIF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQYXJtTWFwUC0+cnVwcykpOworCQlIb3N0UC0+UGhiTnVtUCA9ICh1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGFybU1hcFAtPnBoYl9udW1fcHRyKSk7CisJCUhvc3RQLT5MaW5rU3RyUCA9IChzdHJ1Y3QgTFBCIF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQYXJtTWFwUC0+bGlua19zdHJfcHRyKSk7CiAKIAkJLyoKIAkJICoqIHBvaW50IHRoZSBVbml4UnVwcyBhdCB0aGUgcmVhbCBSdXBzCkBAIC01NDAsNyArNTQwLDcgQEAKIAkJZm9yIChQb3J0TiA9IHAtPlJJT0ZpcnN0UG9ydHNNYXBwZWQ7IFBvcnROIDwgcC0+UklPTGFzdFBvcnRzTWFwcGVkICsgUE9SVFNfUEVSX1JUQTsgUG9ydE4rKykgewogCQkJaWYgKHAtPlJJT1BvcnRwW1BvcnROXS0+SG9zdFAgPT0gSG9zdFApIHsKIAkJCQlzdHJ1Y3QgUG9ydCAqUG9ydFAgPSBwLT5SSU9Qb3J0cFtQb3J0Tl07Ci0JCQkJc3RydWN0IFBIQiAqUGhiUDsKKwkJCQlzdHJ1Y3QgUEhCIF9faW9tZW0gKlBoYlA7CiAJCQkJLyogaW50IG9sZHNwbDsgKi8KIAogCQkJCWlmICghUG9ydFAtPk1hcHBlZCkKQEAgLTU1MSwxMiArNTUxLDEyIEBACiAKIAkJCQlQb3J0UC0+UGhiUCA9IFBoYlA7CiAKLQkJCQlQb3J0UC0+VHhBZGQgPSAodTE2ICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+dHhfYWRkKSk7Ci0JCQkJUG9ydFAtPlR4U3RhcnQgPSAodTE2ICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+dHhfc3RhcnQpKTsKLQkJCQlQb3J0UC0+VHhFbmQgPSAodTE2ICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+dHhfZW5kKSk7Ci0JCQkJUG9ydFAtPlJ4UmVtb3ZlID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnJ4X3JlbW92ZSkpOwotCQkJCVBvcnRQLT5SeFN0YXJ0ID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnJ4X3N0YXJ0KSk7Ci0JCQkJUG9ydFAtPlJ4RW5kID0gKHUxNiAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnJ4X2VuZCkpOworCQkJCVBvcnRQLT5UeEFkZCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnR4X2FkZCkpOworCQkJCVBvcnRQLT5UeFN0YXJ0ID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+dHhfc3RhcnQpKTsKKwkJCQlQb3J0UC0+VHhFbmQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT50eF9lbmQpKTsKKwkJCQlQb3J0UC0+UnhSZW1vdmUgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihDYWQsIHJlYWR3KCZQaGJQLT5yeF9yZW1vdmUpKTsKKwkJCQlQb3J0UC0+UnhTdGFydCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKENhZCwgcmVhZHcoJlBoYlAtPnJ4X3N0YXJ0KSk7CisJCQkJUG9ydFAtPlJ4RW5kID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoQ2FkLCByZWFkdygmUGhiUC0+cnhfZW5kKSk7CiAKIAkJCQlyaW9fc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmUG9ydFAtPnBvcnRTZW0sIGZsYWdzKTsKIAkJCQkvKgpAQCAtNjAxLDkgKzYwMSw5IEBACiAgKglyZXR1cm4gMS4gSWYgd2UgaGF2ZW50LCB0aGVuIHJldHVybiAwLgogICovCiAKLWludCBSSU9Cb290UnVwKHN0cnVjdCByaW9faW5mbyAqcCwgdW5zaWduZWQgaW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICpQYWNrZXRQKQoraW50IFJJT0Jvb3RSdXAoc3RydWN0IHJpb19pbmZvICpwLCB1bnNpZ25lZCBpbnQgUnVwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHN0cnVjdCBQS1QgX19pb21lbSAqUGFja2V0UCkKIHsKLQlzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgKikgUGFja2V0UC0+ZGF0YTsKKwlzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKlBrdENtZFAgPSAoc3RydWN0IFBrdENtZCBfX2lvbWVtICopIFBhY2tldFAtPmRhdGE7CiAJc3RydWN0IFBrdENtZF9NICpQa3RSZXBseVA7CiAJc3RydWN0IENtZEJsayAqQ21kQmxrUDsKIAl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CkBAIC03MjIsNyArNzIyLDcgQEAKICAqCVJ0YVVuaXEgaXMgdGhlIGJvb3RlZCBSVEEuCiAgKi8KIAotc3RhdGljIGludCBSSU9Cb290Q29tcGxldGUoc3RydWN0IHJpb19pbmZvICpwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBQa3RDbWQgKlBrdENtZFApCitzdGF0aWMgaW50IFJJT0Jvb3RDb21wbGV0ZShzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgdW5zaWduZWQgaW50IFJ1cCwgc3RydWN0IFBrdENtZCBfX2lvbWVtICpQa3RDbWRQKQogewogCXN0cnVjdCBNYXAgKk1hcFAgPSBOVUxMOwogCXN0cnVjdCBNYXAgKk1hcFAyID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCmluZGV4IGU2ZDJiMTRiLi40ZGY2YWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2NtZC5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvY21kLmMKQEAgLTE4MCw3ICsxODAsNyBAQAogfQogCiAKLWludCBSSU9JZGVudGlmeVJ0YShzdHJ1Y3QgcmlvX2luZm8gKnAsIHZvaWQgKiBhcmcpCitpbnQgUklPSWRlbnRpZnlSdGEoc3RydWN0IHJpb19pbmZvICpwLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAl1bnNpZ25lZCBpbnQgSG9zdDsKIApAQCAtMjQ1LDcgKzI0NSw3IEBACiB9CiAKIAotaW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICpwLCB2b2lkICogYXJnKQoraW50IFJJT0tpbGxOZWlnaGJvdXIoc3RydWN0IHJpb19pbmZvICpwLCB2b2lkIF9fdXNlciAqIGFyZykKIHsKIAl1aW50IEhvc3Q7CiAJdWludCBJRDsKQEAgLTM3MCw5ICszNzAsOSBAQAogLyoKICoqIEluY29taW5nIGNvbW1hbmQgb24gdGhlIENPTU1BTkRfUlVQIHRvIGJlIHByb2Nlc3NlZC4KICovCi1zdGF0aWMgaW50IFJJT0NvbW1hbmRSdXAoc3RydWN0IHJpb19pbmZvICpwLCB1aW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICogUGFja2V0UCkKK3N0YXRpYyBpbnQgUklPQ29tbWFuZFJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVpbnQgUnVwLCBzdHJ1Y3QgSG9zdCAqSG9zdFAsIHN0cnVjdCBQS1QgX19pb21lbSAqUGFja2V0UCkKIHsKLQlzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgKikgUGFja2V0UC0+ZGF0YTsKKwlzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKlBrdENtZFAgPSAoc3RydWN0IFBrdENtZCBfX2lvbWVtICopUGFja2V0UC0+ZGF0YTsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CiAJc3RydWN0IFVuaXhSdXAgKlVuaXhSdXBQOwogCXVuc2lnbmVkIHNob3J0IFN5c1BvcnQ7CkBAIC00MDcsMTIgKzQwNywxMiBAQAogCQl9IGVsc2UKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDT05UUk9MIGluZm9ybWF0aW9uOiBUaGlzIGlzIHRoZSBSVVAgZm9yIGxpbmsgYGAlYycnIG9mIGhvc3QgYGAlcycnXG4iLCAoJ0EnICsgUnVwIC0gTUFYX1JVUCksIEhvc3RQLT5OYW1lKTsKIAotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBEZXN0aW5hdGlvbiAweCV4OjB4JXhcbiIsIFBhY2tldFAtPmRlc3RfdW5pdCwgUGFja2V0UC0+ZGVzdF9wb3J0KTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogU291cmNlCSAgMHgleDoweCV4XG4iLCBQYWNrZXRQLT5zcmNfdW5pdCwgUGFja2V0UC0+c3JjX3BvcnQpOwotCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBMZW5ndGgJICAweCV4ICglZClcbiIsIFBhY2tldFAtPmxlbiwgUGFja2V0UC0+bGVuKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogQ29udHJvbAkgMHgleCAoJWQpXG4iLCBQYWNrZXRQLT5jb250cm9sLCBQYWNrZXRQLT5jb250cm9sKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogQ2hlY2sJICAgMHgleCAoJWQpXG4iLCBQYWNrZXRQLT5jc3VtLCBQYWNrZXRQLT5jc3VtKTsKLQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIkNPTU1BTkQgaW5mb3JtYXRpb246IEhvc3QgUG9ydCBOdW1iZXIgMHgleCwgIiAiQ29tbWFuZCBDb2RlIDB4JXhcbiIsIFBrdENtZFAtPlBoYk51bSwgUGt0Q21kUC0+Q29tbWFuZCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJQQUNLRVQgaW5mb3JtYXRpb246IERlc3RpbmF0aW9uIDB4JXg6MHgleFxuIiwgcmVhZGIoJlBhY2tldFAtPmRlc3RfdW5pdCksIHJlYWRiKCZQYWNrZXRQLT5kZXN0X3BvcnQpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogU291cmNlCSAgMHgleDoweCV4XG4iLCByZWFkYigmUGFja2V0UC0+c3JjX3VuaXQpLCByZWFkYigmUGFja2V0UC0+c3JjX3BvcnQpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogTGVuZ3RoCSAgMHgleCAoJWQpXG4iLCByZWFkYigmUGFja2V0UC0+bGVuKSwgcmVhZGIoJlBhY2tldFAtPmxlbikpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiUEFDS0VUIGluZm9ybWF0aW9uOiBDb250cm9sCSAweCV4ICglZClcbiIsIHJlYWRiKCZQYWNrZXRQLT5jb250cm9sKSwgcmVhZGIoJlBhY2tldFAtPmNvbnRyb2wpKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NNRCwgIlBBQ0tFVCBpbmZvcm1hdGlvbjogQ2hlY2sJICAgMHgleCAoJWQpXG4iLCByZWFkdygmUGFja2V0UC0+Y3N1bSksIHJlYWR3KCZQYWNrZXRQLT5jc3VtKSk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJDT01NQU5EIGluZm9ybWF0aW9uOiBIb3N0IFBvcnQgTnVtYmVyIDB4JXgsICIgIkNvbW1hbmQgQ29kZSAweCV4XG4iLCByZWFkYigmUGt0Q21kUC0+UGhiTnVtKSwgcmVhZGIoJlBrdENtZFAtPkNvbW1hbmQpKTsKIAkJcmV0dXJuIDE7CiAJfQogCVBvcnRQID0gcC0+UklPUG9ydHBbU3lzUG9ydF07CkBAIC02MDEsNyArNjAxLDcgQEAKIAkJLyoKIAkJICoqIFdoYW1teSEgYmxhdCB0aGF0IHBhY2shCiAJCSAqLwotCQlIb3N0UC0+Q29weSgoY2FkZHJfdCkgJiBDbWRCbGtQLT5QYWNrZXQsIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBVbml4UnVwUC0+UnVwUC0+dHhwa3QpLCBzaXplb2Yoc3RydWN0IFBLVCkpOworCQlIb3N0UC0+Q29weSgmQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT50eHBrdCkpLCBzaXplb2Yoc3RydWN0IFBLVCkpOwogCiAJCS8qCiAJCSAqKiBwbGFjZSBjb21tYW5kIHBhY2tldCBvbiB0aGUgcGVuZGluZyBwb3NpdGlvbi4KQEAgLTY1NSw3ICs2NTUsNyBAQAogewogCXN0cnVjdCBDbWRCbGsgKkNtZEJsa1A7CiAJc3RydWN0IFVuaXhSdXAgKlVuaXhSdXBQOwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCXVuc2lnbmVkIHNob3J0IFJ1cDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC02NzYsNyArNjc2LDcgQEAKIAkJaWYgKHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+cnhjb250cm9sKSAhPSBSWF9SVVBfSU5BQ1RJVkUpIHsKIAkJCWludCBGcmVlTWU7CiAKLQkJCVBhY2tldFAgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT5yeHBrdCkpOworCQkJUGFja2V0UCA9IChzdHJ1Y3QgUEtUIF9faW9tZW0gKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZVbml4UnVwUC0+UnVwUC0+cnhwa3QpKTsKIAogCQkJc3dpdGNoIChyZWFkYigmUGFja2V0UC0+ZGVzdF9wb3J0KSkgewogCQkJY2FzZSBCT09UX1JVUDoKQEAgLTY5NCw5ICs2OTQsOSBAQAogCQkJCSAqLwogCQkJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZVbml4UnVwUC0+UnVwTG9jaywgZmxhZ3MpOwogCQkJCUZyZWVNZSA9IFJJT0NvbW1hbmRSdXAocCwgUnVwLCBIb3N0UCwgUGFja2V0UCk7Ci0JCQkJaWYgKFBhY2tldFAtPmRhdGFbNV0gPT0gTUVNRFVNUCkgewotCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ01ELCAiTWVtZHVtcCBmcm9tIDB4JXggY29tcGxldGVcbiIsICoodW5zaWduZWQgc2hvcnQgKikgJiAoUGFja2V0UC0+ZGF0YVs2XSkpOwotCQkJCQlIb3N0UC0+Q29weSgoY2FkZHJfdCkgJiAoUGFja2V0UC0+ZGF0YVs4XSksIChjYWRkcl90KSBwLT5SSU9NZW1EdW1wLCAzMik7CisJCQkJaWYgKHJlYWRiKCZQYWNrZXRQLT5kYXRhWzVdKSA9PSBNRU1EVU1QKSB7CisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DTUQsICJNZW1kdW1wIGZyb20gMHgleCBjb21wbGV0ZVxuIiwgcmVhZHcoJihQYWNrZXRQLT5kYXRhWzZdKSkpOworCQkJCQlyaW9fbWVtY3B5X2Zyb21pbyhwLT5SSU9NZW1EdW1wLCAmKFBhY2tldFAtPmRhdGFbOF0pLCAzMik7CiAJCQkJfQogCQkJCXJpb19zcGluX2xvY2tfaXJxc2F2ZSgmVW5peFJ1cFAtPlJ1cExvY2ssIGZsYWdzKTsKIAkJCQlicmVhazsKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkJCS8qCiAJCQkJICoqIFdoYW1teSEgYmxhdCB0aGF0IHBhY2shCiAJCQkJICovCi0JCQkJSG9zdFAtPkNvcHkoKGNhZGRyX3QpICYgQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgVW5peFJ1cFAtPlJ1cFAtPnR4cGt0KSwgc2l6ZW9mKHN0cnVjdCBQS1QpKTsKKwkJCQlIb3N0UC0+Q29weSgmQ21kQmxrUC0+UGFja2V0LCBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlVuaXhSdXBQLT5SdXBQLT50eHBrdCkpLCBzaXplb2Yoc3RydWN0IFBLVCkpOwogCiAJCQkJLyoKIAkJCQkgKiogcmVtb3ZlIHRoZSBjb21tYW5kIGZyb20gdGhlIHJ1cCBjb21tYW5kIHF1ZXVlLi4uCkBAIC04MjQsNyArODI0LDcgQEAKIGludCBSSU9SRmx1c2hFbmFibGUodW5zaWduZWQgbG9uZyBpUG9ydFAsIHN0cnVjdCBDbWRCbGsgKkNtZEJsa1ApCiB7CiAJc3RydWN0IFBvcnQgKlBvcnRQID0gKHN0cnVjdCBQb3J0ICopIGlQb3J0UDsKLQlzdHJ1Y3QgUEtUICpQYWNrZXRQOworCXN0cnVjdCBQS1QgX19pb21lbSAqUGFja2V0UDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmlvX3NwaW5fbG9ja19pcnFzYXZlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9jdHJsLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwppbmRleCA3NWIyNTU3Li4wNTJlODEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2N0cmwuYwpAQCAtODAsNyArODAsNyBAQAogc3RhdGljIHN0cnVjdCBMcGJSZXEgTHBiUmVxOwogc3RhdGljIHN0cnVjdCBSdXBSZXEgUnVwUmVxOwogc3RhdGljIHN0cnVjdCBQb3J0UmVxIFBvcnRSZXE7Ci1zdGF0aWMgc3RydWN0IEhvc3RSZXEgSG9zdFJlcTsKK3N0YXRpYyBzdHJ1Y3QgSG9zdFJlcSBIb3N0UmVxOwkvKiBvaCByZWFsbHk/ICBnbG9iYWw/ICBhbmQgbm8gbG9ja2luZz8gKi8KIHN0YXRpYyBzdHJ1Y3QgSG9zdERwUmFtIEhvc3REcFJhbTsKIHN0YXRpYyBzdHJ1Y3QgRGVidWdDdHJsIERlYnVnQ3RybDsKIHN0YXRpYyBzdHJ1Y3QgTWFwIE1hcEVudDsKQEAgLTEyNiwxMiArMTI2LDE5IEBACiAKICNkZWZpbmUgZHJ2X21ha2VkZXYobWFqLCBtaW4pICgoKCh1aW50KSBtYWogJiAweGZmKSA8PCA4KSB8ICgodWludCkgbWluICYgMHhmZikpCiAKLWludCByaW9jb250cm9sKHAsIGRldiwgY21kLCBhcmcsIHN1KQotc3RydWN0IHJpb19pbmZvICpwOwotZGV2X3QgZGV2OwotaW50IGNtZDsKLWNhZGRyX3QgYXJnOwotaW50IHN1Oworc3RhdGljIGludCBjb3B5X2Zyb21faW8odm9pZCBfX3VzZXIgKnRvLCB2b2lkIF9faW9tZW0gKmZyb20sIHNpemVfdCBzaXplKQoreworCXZvaWQgKmJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaW50IHJlcyA9IC1FTk9NRU07CisJaWYgKGJ1ZikgeworCQlyaW9fbWVtY3B5X2Zyb21pbyhidWYsIGZyb20sIHNpemUpOworCQlyZXMgPSBjb3B5X3RvX3VzZXIodG8sIGJ1Ziwgc2l6ZSk7CisJCWtmcmVlKGJ1Zik7CisJfQorCXJldHVybiByZXM7Cit9CisKK2ludCByaW9jb250cm9sKHN0cnVjdCByaW9faW5mbyAqcCwgZGV2X3QgZGV2LCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZywgaW50IHN1KQogewogCXVpbnQgSG9zdDsJCS8qIGxlYXZlIG1lIHVuc2lnbmVkISAqLwogCXVpbnQgcG9ydDsJCS8qIGFuZCBtZSEgKi8KQEAgLTEzOSw5ICsxNDYsMTAgQEAKIAl1c2hvcnQgbG9vcDsKIAlpbnQgRW50cnk7CiAJc3RydWN0IFBvcnQgKlBvcnRQOwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCWludCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAlmdW5jX2VudGVyKCk7CiAKQEAgLTE0OSw3ICsxNTcsNyBAQAogCUhvc3QgPSAwOwogCVBvcnRQID0gTlVMTDsKIAotCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiY29udHJvbCBpb2N0bCBjbWQ6IDB4JXggYXJnOiAlcFxuIiwgY21kLCBhcmcpOworCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiY29udHJvbCBpb2N0bCBjbWQ6IDB4JXggYXJnOiAlcFxuIiwgY21kLCBhcmdwKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJCS8qCkBAIC0xNjAsMTEgKzE2OCwxMSBAQAogCQkgKiogb3RoZXJ3aXNlIGp1c3QgdGhlIHNwZWNpZmllZCBob3N0IGNhcmQgd2lsbCBiZSBjaGFuZ2VkLgogCQkgKi8KIAljYXNlIFJJT19TRVRfVElNRVI6Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVF9USU1FUiB0byAlbGRtc1xuIiwgKHVuc2lnbmVkIGxvbmcpYXJnKTsKKwkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fU0VUX1RJTUVSIHRvICVsZG1zXG4iLCBhcmcpOwogCQl7CiAJCQlpbnQgaG9zdCwgdmFsdWU7Ci0JCQlob3N0ID0gKCh1bnNpZ25lZCBsb25nKSBhcmcgPj4gMTYpICYgMHgwMDAwRkZGRjsKLQkJCXZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIGFyZyAmIDB4MDAwMGZmZmY7CisJCQlob3N0ID0gKGFyZyA+PiAxNikgJiAweDAwMDBGRkZGOworCQkJdmFsdWUgPSBhcmcgJiAweDAwMDBmZmZmOwogCQkJaWYgKGhvc3QgPT0gLTEpIHsKIAkJCQlmb3IgKGhvc3QgPSAwOyBob3N0IDwgcC0+UklPTnVtSG9zdHM7IGhvc3QrKykgewogCQkJCQlpZiAocC0+UklPSG9zdHNbaG9zdF0uRmxhZ3MgPT0gUkNfUlVOTklORykgewpAQCAtMTgzLDI2ICsxOTEsMjYgQEAKIAogCWNhc2UgUklPX0ZPQURfUlRBOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19GT0FEX1JUQVxuIik7Ci0JCXJldHVybiBSSU9Db21tYW5kUnRhKHAsICh1bnNpZ25lZCBsb25nKWFyZywgUklPRm9hZFJ0YSk7CisJCXJldHVybiBSSU9Db21tYW5kUnRhKHAsIGFyZywgUklPRm9hZFJ0YSk7CiAKIAljYXNlIFJJT19aT01CSUVfUlRBOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19aT01CSUVfUlRBXG4iKTsKLQkJcmV0dXJuIFJJT0NvbW1hbmRSdGEocCwgKHVuc2lnbmVkIGxvbmcpYXJnLCBSSU9ab21iaWVSdGEpOworCQlyZXR1cm4gUklPQ29tbWFuZFJ0YShwLCBhcmcsIFJJT1pvbWJpZVJ0YSk7CiAKIAljYXNlIFJJT19JREVOVElGWV9SVEE6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0lERU5USUZZX1JUQVxuIik7Ci0JCXJldHVybiBSSU9JZGVudGlmeVJ0YShwLCBhcmcpOworCQlyZXR1cm4gUklPSWRlbnRpZnlSdGEocCwgYXJncCk7CiAKIAljYXNlIFJJT19LSUxMX05FSUdIQk9VUjoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fS0lMTF9ORUlHSEJPVVJcbiIpOwotCQlyZXR1cm4gUklPS2lsbE5laWdoYm91cihwLCBhcmcpOworCQlyZXR1cm4gUklPS2lsbE5laWdoYm91cihwLCBhcmdwKTsKIAogCWNhc2UgU1BFQ0lBTF9SVVBfQ01EOgogCQl7CiAJCQlzdHJ1Y3QgQ21kQmxrICpDbWRCbGtQOwogCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNQRUNJQUxfUlVQX0NNRFxuIik7Ci0JCQlpZiAoY29weV9mcm9tX3VzZXIoJlNwZWNpYWxSdXBDbWQsIGFyZywgc2l6ZW9mKFNwZWNpYWxSdXBDbWQpKSkgeworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZTcGVjaWFsUnVwQ21kLCBhcmdwLCBzaXplb2YoU3BlY2lhbFJ1cENtZCkpKSB7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJTUEVDSUFMX1JVUF9DTUQgY29weSBmYWlsZWRcbiIpOwogCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTIzOSw3ICsyNDcsNyBAQAogCQlpZiAoKHJldHZhbCA9IFJJT0FwZWwocCkpICE9IDApCiAJCQlyZXR1cm4gcmV0dmFsOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwLT5SSU9Db25uZWN0VGFibGUsIFRPVEFMX01BUF9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBNYXApKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsIHAtPlJJT0Nvbm5lY3RUYWJsZSwgVE9UQUxfTUFQX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IE1hcCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19HRVRfVEFCTEUgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMjg0LDcgKzI5Miw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIoJnAtPlJJT0Nvbm5lY3RUYWJsZVswXSwgYXJnLCBUT1RBTF9NQVBfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgTWFwKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9Db25uZWN0VGFibGVbMF0sIGFyZ3AsIFRPVEFMX01BUF9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBNYXApKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUFVUX1RBQkxFIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzMwLDcgKzMzOCw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weV90b191c2VyKGFyZywgcC0+UklPQmluZFRhYiwgKHNpemVvZih1bG9uZykgKiBNQVhfUlRBX0JJTkRJTkdTKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCBwLT5SSU9CaW5kVGFiLCAoc2l6ZW9mKHVsb25nKSAqIE1BWF9SVEFfQklORElOR1MpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUX0JJTkRJTkdTIGNvcHkgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM0OSw3ICszNTcsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9CaW5kVGFiWzBdLCBhcmcsIChzaXplb2YodWxvbmcpICogTUFYX1JUQV9CSU5ESU5HUykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcC0+UklPQmluZFRhYlswXSwgYXJncCwgKHNpemVvZih1bG9uZykgKiBNQVhfUlRBX0JJTkRJTkdTKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1BVVF9CSU5ESU5HUyBjb3B5IGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTM3MywxMiArMzgxLDEyIEBACiAJCQlmb3IgKEVudHJ5ID0gMDsgRW50cnkgPCBNQVhfUlRBX0JJTkRJTkdTOyBFbnRyeSsrKSB7CiAJCQkJaWYgKChFbXB0eVNsb3QgPT0gLTEpICYmIChwLT5SSU9CaW5kVGFiW0VudHJ5XSA9PSAwTCkpCiAJCQkJCUVtcHR5U2xvdCA9IEVudHJ5OwotCQkJCWVsc2UgaWYgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IChsb25nKWFyZykgeworCQkJCWVsc2UgaWYgKHAtPlJJT0JpbmRUYWJbRW50cnldID09IGFyZykgewogCQkJCQkvKgogCQkJCQkgKiogQWxyZWFkeSBleGlzdHMgLSBkZWxldGUKIAkJCQkJICovCiAJCQkJCXAtPlJJT0JpbmRUYWJbRW50cnldID0gMEw7Ci0JCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmVtb3ZpbmcgUnRhICVsZCBmcm9tIHAtPlJJT0JpbmRUYWJcbiIsICh1bnNpZ25lZCBsb25nKWFyZyk7CisJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUmVtb3ZpbmcgUnRhICVsZCBmcm9tIHAtPlJJT0JpbmRUYWJcbiIsIGFyZyk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KQEAgLTM4NiwxMCArMzk0LDEwIEBACiAJCQkgKiogRG9zZW4ndCBleGlzdCAtIGFkZAogCQkJICovCiAJCQlpZiAoRW1wdHlTbG90ICE9IC0xKSB7Ci0JCQkJcC0+UklPQmluZFRhYltFbXB0eVNsb3RdID0gKHVuc2lnbmVkIGxvbmcpYXJnOwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQWRkaW5nIFJ0YSAlbHggdG8gcC0+UklPQmluZFRhYlxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7CisJCQkJcC0+UklPQmluZFRhYltFbXB0eVNsb3RdID0gYXJnOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQWRkaW5nIFJ0YSAlbHggdG8gcC0+UklPQmluZFRhYlxuIiwgYXJnKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJwLT5SSU9CaW5kVGFiIGZ1bGwhIC0gUnRhICVseCBub3QgYWRkZWRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAicC0+UklPQmluZFRhYiBmdWxsISAtIFJ0YSAlbHggbm90IGFkZGVkXG4iLCBhcmcpOwogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJfQogCQkJcmV0dXJuIDA7CkBAIC0zOTcsNyArNDA1LDcgQEAKIAogCWNhc2UgUklPX1JFU1VNRToKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVTVU1FXG4iKTsKLQkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CisJCXBvcnQgPSBhcmc7CiAJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gNTExKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVTVU1FOiBCYWQgcG9ydCBudW1iZXIgJWRcbiIsIHBvcnQpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CkBAIC00MzMsNyArNDQxLDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmTWFwRW50LCBhcmcsIHNpemVvZihNYXBFbnQpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJk1hcEVudCwgYXJncCwgc2l6ZW9mKE1hcEVudCkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNvcHkgZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTQ0Nyw3ICs0NTUsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZNYXBFbnQsIGFyZywgc2l6ZW9mKE1hcEVudCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmTWFwRW50LCBhcmdwLCBzaXplb2YoTWFwRW50KSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ29weSBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNDYxLDcgKzQ2OSw3IEBACiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IE5PVF9TVVBFUl9VU0VSOwogCQkJcmV0dXJuIC1FUEVSTTsKIAkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIoJk1hcEVudCwgYXJnLCBzaXplb2YoTWFwRW50KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZNYXBFbnQsIGFyZ3AsIHNpemVvZihNYXBFbnQpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJDb3B5IGZyb20gZGF0YSBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC00NjksMTQgKzQ3NywxNCBAQAogCQlyZXR1cm4gUklPRGVsZXRlUnRhKHAsICZNYXBFbnQpOwogCiAJY2FzZSBSSU9fUVVJQ0tfQ0hFQ0s6Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPUnRhRGlzQ29ucywgc2l6ZW9mKHVuc2lnbmVkIGludCkpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT1J0YURpc0NvbnMsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CiAJCXJldHVybiAwOwogCiAJY2FzZSBSSU9fTEFTVF9FUlJPUjoKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZwLT5SSU9FcnJvciwgc2l6ZW9mKHN0cnVjdCBFcnJvcikpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwLT5SSU9FcnJvciwgc2l6ZW9mKHN0cnVjdCBFcnJvcikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCkBAIC00ODUsNyArNDkzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAljYXNlIFJJT19HRVRfTU9EVFlQRToKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwb3J0LCBhcmcsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnQsIGFyZ3AsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTUwNSw3ICs1MTMsNyBAQAogCQkgKiogUmV0dXJuIG1vZHVsZSB0eXBlIG9mIHBvcnQKIAkJICovCiAJCXBvcnQgPSBQb3J0UC0+SG9zdFAtPlVuaXhSdXBzW1BvcnRQLT5SdXBOdW1dLk1vZFR5cGVzOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnBvcnQsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwb3J0LCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNTIxLDcgKzUyOSw3IEBACiAKIAljYXNlIFJJT19TRVRVUF9QT1JUUzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJTZXR1cCBwb3J0c1xuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFNldHVwLCBhcmcsIHNpemVvZihQb3J0U2V0dXApKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlBvcnRTZXR1cCwgYXJncCwgc2l6ZW9mKFBvcnRTZXR1cCkpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkVGQVVMVCIpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC01NTEsNyArNTU5LDcgQEAKIAogCWNhc2UgUklPX0dFVF9QT1JUX1NFVFVQOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkdldCBwb3J0IHNldHVwXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0U2V0dXAsIGFyZywgc2l6ZW9mKFBvcnRTZXR1cCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFNldHVwLCBhcmdwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC01NzIsNyArNTgwLDcgQEAKIAkJUG9ydFNldHVwLlhwT25bTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwogCQlQb3J0U2V0dXAuWHBPZmZbTUFYX1hQX0NUUkxfTEVOIC0gMV0gPSAnXDAnOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFNldHVwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmUG9ydFNldHVwLCBzaXplb2YoUG9ydFNldHVwKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNTgwLDcgKzU4OCw3IEBACiAKIAljYXNlIFJJT19HRVRfUE9SVF9QQVJBTVM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiR2V0IHBvcnQgcGFyYW1zXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0UGFyYW1zLCBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFBhcmFtcykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJncCwgc2l6ZW9mKHN0cnVjdCBQb3J0UGFyYW1zKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC01OTMsNyArNjAxLDcgQEAKIAkJUG9ydFBhcmFtcy5TdGF0ZSA9IFBvcnRQLT5TdGF0ZTsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJQb3J0ICVkXG4iLCBQb3J0UGFyYW1zLlBvcnQpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFBhcmFtcywgc2l6ZW9mKHN0cnVjdCBQb3J0UGFyYW1zKSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmUG9ydFBhcmFtcywgc2l6ZW9mKHN0cnVjdCBQb3J0UGFyYW1zKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNjAxLDcgKzYwOSw3IEBACiAKIAljYXNlIFJJT19HRVRfUE9SVF9UVFk6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiR2V0IHBvcnQgdHR5XG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0VHR5LCBhcmcsIHNpemVvZihzdHJ1Y3QgUG9ydFR0eSkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFR0eSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC02MTIsMTQgKzYyMCwxNCBAQAogCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUG9ydCAlZFxuIiwgUG9ydFR0eS5wb3J0KTsKIAkJUG9ydFAgPSAocC0+UklPUG9ydHBbUG9ydFR0eS5wb3J0XSk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmUG9ydFR0eSwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmUG9ydFR0eSwgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fU0VUX1BPUlRfVFRZOgotCQlpZiAoY29weV9mcm9tX3VzZXIoJlBvcnRUdHksIGFyZywgc2l6ZW9mKHN0cnVjdCBQb3J0VHR5KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZQb3J0VHR5LCBhcmdwLCBzaXplb2Yoc3RydWN0IFBvcnRUdHkpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTYzNCw3ICs2NDIsNyBAQAogCiAJY2FzZSBSSU9fU0VUX1BPUlRfUEFSQU1TOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlNldCBwb3J0IHBhcmFtc1xuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJnLCBzaXplb2YoUG9ydFBhcmFtcykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFBhcmFtcywgYXJncCwgc2l6ZW9mKFBvcnRQYXJhbXMpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTY1MCw3ICs2NTgsNyBAQAogCiAJY2FzZSBSSU9fR0VUX1BPUlRfU1RBVFM6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0dFVF9QT1JUX1NUQVRTXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwb3J0U3RhdHMsIGFyZywgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnRTdGF0cywgYXJncCwgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTY2NSwxNCArNjczLDE0IEBACiAJCXBvcnRTdGF0cy5vcGVucyA9IFBvcnRQLT5vcGVuczsKIAkJcG9ydFN0YXRzLmNsb3NlcyA9IFBvcnRQLT5jbG9zZXM7CiAJCXBvcnRTdGF0cy5pb2N0bHMgPSBQb3J0UC0+aW9jdGxzOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnBvcnRTdGF0cywgc2l6ZW9mKHN0cnVjdCBwb3J0U3RhdHMpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwb3J0U3RhdHMsIHNpemVvZihzdHJ1Y3QgcG9ydFN0YXRzKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBSSU9fUkVTRVRfUE9SVF9TVEFUUzoKLQkJcG9ydCA9ICh1bnNpZ25lZCBsb25nKSBhcmc7CisJCXBvcnQgPSBhcmc7CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1JFU0VUX1BPUlRfU1RBVFNcbiIpOwogCQlpZiAocG9ydCA+PSBSSU9fUE9SVFMpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gUE9SVF9OVU1CRVJfT1VUX09GX1JBTkdFOwpAQCAtNjkwLDcgKzY5OCw3IEBACiAKIAljYXNlIFJJT19HQVRIRVJfUE9SVF9TVEFUUzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0FUSEVSX1BPUlRfU1RBVFNcbiIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJnBvcnRTdGF0cywgYXJnLCBzaXplb2Yoc3RydWN0IHBvcnRTdGF0cykpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcG9ydFN0YXRzLCBhcmdwLCBzaXplb2Yoc3RydWN0IHBvcnRTdGF0cykpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQpAQCAtNzA2LDcgKzcxNCw3IEBACiAKIAljYXNlIFJJT19SRUFEX0NPTkZJRzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUkVBRF9DT05GSUdcbiIpOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPlJJT0NvbmYsIHNpemVvZihzdHJ1Y3QgQ29uZikpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT0NvbmYsIHNpemVvZihzdHJ1Y3QgQ29uZikpKSB7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTcxOCw3ICs3MjYsNyBAQAogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBOT1RfU1VQRVJfVVNFUjsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZwLT5SSU9Db25mLCBhcmcsIHNpemVvZihzdHJ1Y3QgQ29uZikpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcC0+UklPQ29uZiwgYXJncCwgc2l6ZW9mKHN0cnVjdCBDb25mKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC03NDYsNyArNzU0LDcgQEAKIAljYXNlIFJJT19TRVRERUJVRzoKIAljYXNlIFJJT19HRVRERUJVRzoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fU0VUREVCVUcvUklPX0dFVERFQlVHXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZEZWJ1Z0N0cmwsIGFyZywgc2l6ZW9mKERlYnVnQ3RybCkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmRGVidWdDdHJsLCBhcmdwLCBzaXplb2YoRGVidWdDdHJsKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC03NjMsNyArNzcxLDcgQEAKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkdldCBnbG9iYWwgZGVidWcgMHgleCB3YWl0IDB4JXhcbiIsIHAtPnJpb19kZWJ1ZywgcC0+UklPRGVidWdXYWl0KTsKIAkJCQlEZWJ1Z0N0cmwuRGVidWcgPSBwLT5yaW9fZGVidWc7CiAJCQkJRGVidWdDdHJsLldhaXQgPSBwLT5SSU9EZWJ1Z1dhaXQ7Ci0JCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZEZWJ1Z0N0cmwsIHNpemVvZihEZWJ1Z0N0cmwpKSkgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJkRlYnVnQ3RybCwgc2l6ZW9mKERlYnVnQ3RybCkpKSB7CiAJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVC9HRVQgREVCVUc6IGJhZCBwb3J0IG51bWJlciAlZFxuIiwgRGVidWdDdHJsLlN5c1BvcnQpOwogCQkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc4NSw3ICs3OTMsNyBAQAogCQl9IGVsc2UgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fR0VUREVCVUcgMHgleFxuIiwgcC0+UklPUG9ydHBbRGVidWdDdHJsLlN5c1BvcnRdLT5EZWJ1Zyk7CiAJCQlEZWJ1Z0N0cmwuRGVidWcgPSBwLT5SSU9Qb3J0cFtEZWJ1Z0N0cmwuU3lzUG9ydF0tPkRlYnVnOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZEZWJ1Z0N0cmwsIHNpemVvZihEZWJ1Z0N0cmwpKSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmRGVidWdDdHJsLCBzaXplb2YoRGVidWdDdHJsKSkpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19HRVRERUJVRzogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CiAJCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgwMCw3ICs4MDgsNyBAQAogCQkgKiogdGV4dHVhbCBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nLgogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fVkVSU0lEXG4iKTsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsIFJJT1ZlcnNpZCgpLCBzaXplb2Yoc3RydWN0IHJpb1ZlcnNpb24pKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsIFJJT1ZlcnNpZCgpLCBzaXplb2Yoc3RydWN0IHJpb1ZlcnNpb24pKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fVkVSU0lEOiBCYWQgY29weSB0byB1c2VyIHNwYWNlIChob3N0PSVkKVxuIiwgSG9zdCk7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlPVVRfRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04MTMsNyArODIxLDcgQEAKIAkJICoqIGF0IGluaXQgdGltZS4KIAkJICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX05VTV9IT1NUU1xuIik7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPTnVtSG9zdHMsIHNpemVvZihwLT5SSU9OdW1Ib3N0cykpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT051bUhvc3RzLCBzaXplb2YocC0+UklPTnVtSG9zdHMpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fTlVNX0hPU1RTOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTgyNCw3ICs4MzIsNyBAQAogCQkvKgogCQkgKiogS2lsbCBob3N0LiBUaGlzIG1heSBub3QgYmUgaW4gdGhlIGZpbmFsIHZlcnNpb24uLi4KIAkJICovCi0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRk9BRCAlbGRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0ZPQUQgJWxkXG4iLCBhcmcpOwogCQlpZiAoIXN1KSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0ZPQUQ6IE5vdCBzdXBlciB1c2VyXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CkBAIC04NTgsNyArODY2LDcgQEAKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gTk9UX1NVUEVSX1VTRVI7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmRG93bkxvYWQsIGFyZywgc2l6ZW9mKERvd25Mb2FkKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZEb3duTG9hZCwgYXJncCwgc2l6ZW9mKERvd25Mb2FkKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0RPV05MT0FEOiBDb3B5IGluIGZyb20gdXNlciBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04ODgsNyArODk2LDcgQEAKIAkJewogCQkJdW5zaWduZWQgaW50IGhvc3Q7CiAKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmaG9zdCwgYXJnLCBzaXplb2YoaG9zdCkpKSB7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJmhvc3QsIGFyZ3AsIHNpemVvZihob3N0KSkpIHsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JFUTogQ29weSBpbiBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC04OTcsNyArOTA1LDcgQEAKIAkJCSAqKiBGZXRjaCB0aGUgcGFybW1hcAogCQkJICovCiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19QQVJNU1xuIik7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywgcC0+UklPSG9zdHNbaG9zdF0uUGFybU1hcFAsIHNpemVvZihQQVJNX01BUCkpKSB7CisJCQlpZiAoY29weV9mcm9tX2lvKGFyZ3AsIHAtPlJJT0hvc3RzW2hvc3RdLlBhcm1NYXBQLCBzaXplb2YoUEFSTV9NQVApKSkgewogCQkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fUEFSTVM6IENvcHkgb3V0IHRvIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTkwNyw3ICs5MTUsNyBAQAogCiAJY2FzZSBSSU9fSE9TVF9SRVE6CiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfUkVRXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZIb3N0UmVxLCBhcmcsIHNpemVvZihIb3N0UmVxKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZIb3N0UmVxLCBhcmdwLCBzaXplb2YoSG9zdFJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JFUTogQ29weSBpbiBmcm9tIHVzZXIgc3BhY2UgZmFpbGVkXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtOTI4LDcgKzkzNiw3IEBACiAKIAljYXNlIFJJT19IT1NUX0RQUkFNOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlcXVlc3QgZm9yIERQUkFNXG4iKTsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZIb3N0RHBSYW0sIGFyZywgc2l6ZW9mKEhvc3REcFJhbSkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmSG9zdERwUmFtLCBhcmdwLCBzaXplb2YoSG9zdERwUmFtKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfRFBSQU06IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTk0NSwxMyArOTUzLDEzIEBACiAJCQkvKiBJdCdzIGhhcmR3YXJlIGxpa2UgdGhpcyB0aGF0IHJlYWxseSBnZXRzIG9uIG15IHRpdHMuICovCiAJCQlzdGF0aWMgdW5zaWduZWQgY2hhciBjb3B5W3NpemVvZihzdHJ1Y3QgRHBSYW0pXTsKIAkJCWZvciAob2ZmID0gMDsgb2ZmIDwgc2l6ZW9mKHN0cnVjdCBEcFJhbSk7IG9mZisrKQotCQkJCWNvcHlbb2ZmXSA9IHJlYWRiKCZwLT5SSU9Ib3N0c1tIb3N0RHBSYW0uSG9zdE51bV0uQ2FkZHJbb2ZmXSk7CisJCQkJY29weVtvZmZdID0gcmVhZGIocC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyICsgb2ZmKTsKIAkJCWlmIChjb3B5X3RvX3VzZXIoSG9zdERwUmFtLkRwUmFtUCwgY29weSwgc2l6ZW9mKHN0cnVjdCBEcFJhbSkpKSB7CiAJCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0RQUkFNOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KLQkJfSBlbHNlIGlmIChjb3B5X3RvX3VzZXIoSG9zdERwUmFtLkRwUmFtUCwgcC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyLCBzaXplb2Yoc3RydWN0IERwUmFtKSkpIHsKKwkJfSBlbHNlIGlmIChjb3B5X2Zyb21faW8oSG9zdERwUmFtLkRwUmFtUCwgcC0+UklPSG9zdHNbSG9zdERwUmFtLkhvc3ROdW1dLkNhZGRyLCBzaXplb2Yoc3RydWN0IERwUmFtKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0RQUkFNOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtOTYwLDEzICs5NjgsMTMgQEAKIAogCWNhc2UgUklPX1NFVF9CVVNZOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRVRfQlVTWVxuIik7Ci0JCWlmICgodW5zaWduZWQgbG9uZykgYXJnID4gNTExKSB7Ci0JCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRVRfQlVTWTogQmFkIHBvcnQgbnVtYmVyICVsZFxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7CisJCWlmIChhcmcgPiA1MTEpIHsKKwkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFVF9CVVNZOiBCYWQgcG9ydCBudW1iZXIgJWxkXG4iLCBhcmcpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBQT1JUX05VTUJFUl9PVVRfT0ZfUkFOR0U7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlyaW9fc3Bpbl9sb2NrX2lycXNhdmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCXAtPlJJT1BvcnRwWyh1bnNpZ25lZCBsb25nKSBhcmddLT5TdGF0ZSB8PSBSSU9fQlVTWTsKKwkJcC0+UklPUG9ydHBbYXJnXS0+U3RhdGUgfD0gUklPX0JVU1k7CiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwogCQlyZXR1cm4gcmV0dmFsOwogCkBAIC05NzYsNyArOTg0LDcgQEAKIAkJICoqIChwcm9iYWJseSBmb3IgZGVidWcgcmVhc29ucykKIAkJICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfUE9SVFxuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFJlcSwgYXJnLCBzaXplb2YoUG9ydFJlcSkpKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmUG9ydFJlcSwgYXJncCwgc2l6ZW9mKFBvcnRSZXEpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9QT1JUOiBDb3B5IGluIGZyb20gdXNlciBzcGFjZSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMDAxLDcgKzEwMDksNyBAQAogCQkgKiogKHByb2JhYmx5IGZvciBkZWJ1ZyByZWFzb25zKQogCQkgKi8KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SVVBcbiIpOwotCQlpZiAoY29weV9mcm9tX3VzZXIoJlJ1cFJlcSwgYXJnLCBzaXplb2YoUnVwUmVxKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZSdXBSZXEsIGFyZ3AsIHNpemVvZihSdXBSZXEpKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fSE9TVF9SVVA6IENvcHkgaW4gZnJvbSB1c2VyIHNwYWNlIGZhaWxlZFxuIik7CiAJCQlwLT5SSU9FcnJvci5FcnJvciA9IENPUFlJTl9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwMjUsNyArMTAzMyw3IEBACiAJCX0KIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSZXF1ZXN0IGZvciBydXAgJWQgZnJvbSBob3N0ICVkXG4iLCBSdXBSZXEuUnVwTnVtLCBSdXBSZXEuSG9zdE51bSk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihIb3N0UC0+VW5peFJ1cHNbUnVwUmVxLlJ1cE51bV0uUnVwUCwgUnVwUmVxLlJ1cFAsIHNpemVvZihzdHJ1Y3QgUlVQKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV9pbyhSdXBSZXEuUnVwUCwgSG9zdFAtPlVuaXhSdXBzW1J1cFJlcS5SdXBOdW1dLlJ1cFAsIHNpemVvZihzdHJ1Y3QgUlVQKSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX1JVUDogQmFkIGNvcHkgdG8gdXNlciBzcGFjZVxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTEwMzgsNyArMTA0Niw3IEBACiAJCSAqKiAocHJvYmFibHkgZm9yIGRlYnVnIHJlYXNvbnMpCiAJCSAqLwogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0xQQlxuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmTHBiUmVxLCBhcmcsIHNpemVvZihMcGJSZXEpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJkxwYlJlcSwgYXJncCwgc2l6ZW9mKExwYlJlcSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19IT1NUX0xQQjogQmFkIGNvcHkgZnJvbSB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA2Miw3ICsxMDcwLDcgQEAKIAkJfQogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJlcXVlc3QgZm9yIGxwYiAlZCBmcm9tIGhvc3QgJWRcbiIsIExwYlJlcS5MaW5rLCBMcGJSZXEuSG9zdCk7CiAKLQkJaWYgKGNvcHlfdG9fdXNlcihMcGJSZXEuTHBiUCwgJkhvc3RQLT5MaW5rU3RyUFtMcGJSZXEuTGlua10sIHNpemVvZihzdHJ1Y3QgTFBCKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV9pbyhMcGJSZXEuTHBiUCwgJkhvc3RQLT5MaW5rU3RyUFtMcGJSZXEuTGlua10sIHNpemVvZihzdHJ1Y3QgTFBCKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX0hPU1RfTFBCOiBCYWQgY29weSB0byB1c2VyIHNwYWNlXG4iKTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTExMzYsNyArMTE0NCw3IEBACiAJY2FzZSBSSU9fTUFQX0IxMTBfVE9fMTEwOgogCWNhc2UgUklPX01BUF9CMTEwX1RPXzExNTIwMDoKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJCYXVkIHJhdGUgbWFwcGluZ1xuIik7Ci0JCXBvcnQgPSAodW5zaWduZWQgbG9uZykgYXJnOworCQlwb3J0ID0gYXJnOwogCQlpZiAocG9ydCA8IDAgfHwgcG9ydCA+IDUxMSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJCYXVkIHJhdGUgbWFwcGluZzogQmFkIHBvcnQgbnVtYmVyICVkXG4iLCBwb3J0KTsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gUE9SVF9OVU1CRVJfT1VUX09GX1JBTkdFOwpAQCAtMTE2Niw3ICsxMTc0LDcgQEAKIAogCWNhc2UgUklPX1NFTkRfUEFDS0VUOgogCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19TRU5EX1BBQ0tFVFxuIik7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmU2VuZFBhY2ssIGFyZywgc2l6ZW9mKFNlbmRQYWNrKSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZTZW5kUGFjaywgYXJncCwgc2l6ZW9mKFNlbmRQYWNrKSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1NFTkRfUEFDS0VUOiBCYWQgY29weSBmcm9tIHVzZXIgc3BhY2VcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMjEwLDcgKzEyMTgsNyBAQAogCQlyZXR1cm4gc3UgPyAwIDogLUVQRVJNOwogCiAJY2FzZSBSSU9fV0hBVF9NRVNHOgotCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPlJJT05vTWVzc2FnZSwgc2l6ZW9mKHAtPlJJT05vTWVzc2FnZSkpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnAtPlJJT05vTWVzc2FnZSwgc2l6ZW9mKHAtPlJJT05vTWVzc2FnZSkpKSB7CiAJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIlJJT19XSEFUX01FU0c6IEJhZCBjb3B5IHRvIHVzZXIgc3BhY2VcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTIxOCw3ICsxMjI2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljYXNlIFJJT19NRU1fRFVNUDoKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZTdWJDbWQsIGFyZywgc2l6ZW9mKHN0cnVjdCBTdWJDbWRTdHJ1Y3QpKSkgeworCQlpZiAoY29weV9mcm9tX3VzZXIoJlN1YkNtZCwgYXJncCwgc2l6ZW9mKHN0cnVjdCBTdWJDbWRTdHJ1Y3QpKSkgewogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZSU5fRkFJTEVEOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KQEAgLTEyNDgsNyArMTI1Niw3IEBACiAJCQlQb3J0UC0+U3RhdGUgfD0gUklPX0JVU1k7CiAKIAkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBmbGFncyk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCBwLT5SSU9NZW1EdW1wLCBNRU1EVU1QX1NJWkUpKSB7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgcC0+UklPTWVtRHVtcCwgTUVNRFVNUF9TSVpFKSkgewogCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0NUUkwsICJSSU9fTUVNX0RVTVAgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTI1NiwzMCArMTI2NCwzMCBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1RJQ0s6Ci0JCWlmICgodW5zaWduZWQgbG9uZykgYXJnID49IHAtPlJJT051bUhvc3RzKQorCQlpZiAoYXJnID49IHAtPlJJT051bUhvc3RzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiU2V0IGludGVycnVwdCBmb3IgaG9zdCAlbGRcbiIsICh1bnNpZ25lZCBsb25nKSBhcmcpOwotCQl3cml0ZWIoMHhGRiwgJnAtPlJJT0hvc3RzWyh1bnNpZ25lZCBsb25nKSBhcmddLlNldEludCk7CisJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiU2V0IGludGVycnVwdCBmb3IgaG9zdCAlbGRcbiIsIGFyZyk7CisJCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbYXJnXS5TZXRJbnQpOwogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1RPQ0s6Ci0JCWlmICgodW5zaWduZWQgbG9uZykgYXJnID49IHAtPlJJT051bUhvc3RzKQorCQlpZiAoYXJnID49IHAtPlJJT051bUhvc3RzKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiQ2xlYXIgaW50ZXJydXB0IGZvciBob3N0ICVsZFxuIiwgKHVuc2lnbmVkIGxvbmcpIGFyZyk7Ci0JCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbKHVuc2lnbmVkIGxvbmcpIGFyZ10uUmVzZXRJbnQpOworCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIkNsZWFyIGludGVycnVwdCBmb3IgaG9zdCAlbGRcbiIsIGFyZyk7CisJCXdyaXRlYigweEZGLCAmcC0+UklPSG9zdHNbYXJnXS5SZXNldEludCk7CiAJCXJldHVybiAwOwogCiAJY2FzZSBSSU9fUkVBRF9DSEVDSzoKIAkJLyogQ2hlY2sgcmVhZHMgZm9yIHBrdHMgd2l0aCBkYXRhWzBdIHRoZSBzYW1lICovCiAJCXAtPlJJT1JlYWRDaGVjayA9ICFwLT5SSU9SZWFkQ2hlY2s7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmcC0+UklPUmVhZENoZWNrLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKKwkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmcC0+UklPUmVhZENoZWNrLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWU9VVF9GQUlMRUQ7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQlyZXR1cm4gMDsKIAogCWNhc2UgUklPX1JFQURfUkVHSVNURVI6Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmU3ViQ21kLCBhcmcsIHNpemVvZihzdHJ1Y3QgU3ViQ21kU3RydWN0KSkpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZTdWJDbWQsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgU3ViQ21kU3RydWN0KSkpIHsKIAkJCXAtPlJJT0Vycm9yLkVycm9yID0gQ09QWUlOX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwogCQl9CkBAIC0xMzE0LDcgKzEzMjIsNyBAQAogCQkJUG9ydFAtPlN0YXRlIHw9IFJJT19CVVNZOwogCiAJCXJpb19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZQb3J0UC0+cG9ydFNlbSwgZmxhZ3MpOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJnAtPkNkUmVnaXN0ZXIsIHNpemVvZih1bnNpZ25lZCBpbnQpKSkgeworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZwLT5DZFJlZ2lzdGVyLCBzaXplb2YodW5zaWduZWQgaW50KSkpIHsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19DVFJMLCAiUklPX1JFQURfUkVHSVNURVIgY29weSBmYWlsZWRcbiIpOwogCQkJcC0+UklPRXJyb3IuRXJyb3IgPSBDT1BZT1VUX0ZBSUxFRDsKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMTMyNywxMCArMTMzNSwxMCBAQAogCQkgKi8KIAljYXNlIFJJT19NQUtFX0RFVjoKIAkJewotCQkJdW5zaWduZWQgaW50IHBvcnQgPSAodW5zaWduZWQgbG9uZykgYXJnICYgUklPX01PREVNX01BU0s7CisJCQl1bnNpZ25lZCBpbnQgcG9ydCA9IGFyZyAmIFJJT19NT0RFTV9NQVNLOwogCQkJdW5zaWduZWQgaW50IHJldDsKIAotCQkJc3dpdGNoICgodW5zaWduZWQgbG9uZykgYXJnICYgUklPX0RFVl9NQVNLKSB7CisJCQlzd2l0Y2ggKGFyZyAmIFJJT19ERVZfTUFTSykgewogCQkJY2FzZSBSSU9fREVWX0RJUkVDVDoKIAkJCQlyZXQgPSBkcnZfbWFrZWRldihNQUpPUihkZXYpLCBwb3J0KTsKIAkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfQ1RSTCwgIk1ha2VkZXYgZGlyZWN0IDB4JXggaXMgMHgleFxuIiwgcG9ydCwgcmV0KTsKQEAgLTEzNTgsNyArMTM2Niw3IEBACiAJCQlpbnQgbWlubzsKIAkJCXVuc2lnbmVkIGxvbmcgcmV0OwogCi0JCQlkdiA9IChkZXZfdCkgKCh1bnNpZ25lZCBsb25nKSBhcmcpOworCQkJZHYgPSAoZGV2X3QpIChhcmcpOwogCQkJbWlubyA9IFJJT19VTk1PREVNKGR2KTsKIAogCQkJaWYgKFJJT19JU01PREVNKGR2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbml0LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwppbmRleCAyNGQyOTkyLi4xMmUzNGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYworKysgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb2luaXQuYwpAQCAtNzksNyArNzksNyBAQAogCiBpbnQgUklPUENJaW5pdChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludCBNb2RlKTsKIAotc3RhdGljIGludCBSSU9TY3J1YihpbnQsIHU4ICosIGludCk7CitzdGF0aWMgaW50IFJJT1NjcnViKGludCwgdTggX19pb21lbSAqLCBpbnQpOwogCiAKIC8qKgpAQCAtOTIsMTAgKzkyLDEwIEBACiAqKiBiaXRzID4gMCBpbmRpY2F0ZXMgMTYgYml0IG9wZXJhdGlvbi4KICovCiAKLWludCBSSU9Bc3NpZ25BVChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludAlCYXNlLCBjYWRkcl90CXZpcnRBZGRyLCBpbnQgbW9kZSkKK2ludCBSSU9Bc3NpZ25BVChzdHJ1Y3QgcmlvX2luZm8gKnAsIGludAlCYXNlLCB2b2lkIF9faW9tZW0gKnZpcnRBZGRyLCBpbnQgbW9kZSkKIHsKIAlpbnQJCWJpdHM7Ci0Jc3RydWN0IERwUmFtICpjYXJkcCA9IChzdHJ1Y3QgRHBSYW0gKil2aXJ0QWRkcjsKKwlzdHJ1Y3QgRHBSYW0gX19pb21lbSAqY2FyZHAgPSAoc3RydWN0IERwUmFtIF9faW9tZW0gKil2aXJ0QWRkcjsKIAogCWlmICgoQmFzZSA8IE9ORV9NRUcpIHx8IChtb2RlICYgQllURV9BQ0NFU1NfTU9ERSkpCiAJCWJpdHMgPSBCWVRFX09QRVJBVElPTjsKQEAgLTEwNyw3ICsxMDcsNyBAQAogCSoqIHRyYW5zaWVudCBzdHVmZi4KIAkqLwogCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYWRkcgk9IHZpcnRBZGRyOwotCXAtPlJJT0hvc3RzW3AtPlJJT051bUhvc3RzXS5DYXJkUAk9IChzdHJ1Y3QgRHBSYW0gKil2aXJ0QWRkcjsKKwlwLT5SSU9Ib3N0c1twLT5SSU9OdW1Ib3N0c10uQ2FyZFAJPSB2aXJ0QWRkcjsKIAogCS8qCiAJKiogUmV2aXNpb24gMDEgQVQgaG9zdCBjYXJkcyBkb24ndCBzdXBwb3J0IFdPUkQgb3BlcmF0aW9ucywKQEAgLTE1MSwxMCArMTUxLDEwIEBACiAqKiBSQU0gdGVzdCBhIGJvYXJkLiAKICoqIE5vdGhpbmcgdG9vIGNvbXBsaWNhdGVkLCBqdXN0IGVub3VnaCB0byBjaGVjayBpdCBvdXQuCiAqLwotaW50IFJJT0JvYXJkVGVzdCh1bnNpZ25lZCBsb25nIHBhZGRyLCBjYWRkcl90CWNhZGRyLCB1bnNpZ25lZCBjaGFyIHR5cGUsIGludCBzbG90KQoraW50IFJJT0JvYXJkVGVzdCh1bnNpZ25lZCBsb25nIHBhZGRyLCB2b2lkIF9faW9tZW0gKmNhZGRyLCB1bnNpZ25lZCBjaGFyIHR5cGUsIGludCBzbG90KQogewotCXN0cnVjdCBEcFJhbSAqRHBSYW0gPSAoc3RydWN0IERwUmFtICopY2FkZHI7Ci0JY2hhciAqcmFtWzRdOworCXN0cnVjdCBEcFJhbSBfX2lvbWVtICpEcFJhbSA9IGNhZGRyOworCXZvaWQgX19pb21lbSAqcmFtWzRdOwogCWludCAgc2l6ZVs0XTsKIAlpbnQgIG9wLCBiYW5rOwogCWludCAgbmJhbmtzOwpAQCAtMTc5LDEyICsxNzksMTIgQEAKIAlzaXplWzJdID0gRFBfU1JBTTNfU0laRTsKIAlzaXplWzNdID0gRFBfU0NSQVRDSF9TSVpFOwogCi0JcmFtWzBdID0gKGNoYXIgKikmRHBSYW0tPkRwU3JhbTFbMF07Ci0JcmFtWzFdID0gKGNoYXIgKikmRHBSYW0tPkRwU3JhbTJbMF07Ci0JcmFtWzJdID0gKGNoYXIgKikmRHBSYW0tPkRwU3JhbTNbMF07CisJcmFtWzBdID0gRHBSYW0tPkRwU3JhbTE7CisJcmFtWzFdID0gRHBSYW0tPkRwU3JhbTI7CisJcmFtWzJdID0gRHBSYW0tPkRwU3JhbTM7CiAJbmJhbmtzID0gKHR5cGUgPT0gUklPX1BDSSkgPyAzIDogNDsKIAlpZiAobmJhbmtzID09IDQpCi0JCXJhbVszXSA9IChjaGFyICopJkRwUmFtLT5EcFNjcmF0Y2hbMF07CisJCXJhbVszXSA9IERwUmFtLT5EcFNjcmF0Y2g7CiAKIAogCWlmIChuYmFua3MgPT0gMykgewpAQCAtMjAyLDcgKzIwMiw3IEBACiAJKi8KIAlmb3IgKG9wPTA7IG9wPFRFU1RfRU5EOyBvcCsrKSB7CiAJCWZvciAoYmFuaz0wOyBiYW5rPG5iYW5rczsgYmFuaysrKSB7Ci0JCQlpZiAoUklPU2NydWIob3AsICh1OCAqKXJhbVtiYW5rXSwgc2l6ZVtiYW5rXSkgPT0gUklPX0ZBSUwpIHsKKwkJCWlmIChSSU9TY3J1YihvcCwgcmFtW2JhbmtdLCBzaXplW2JhbmtdKSA9PSBSSU9fRkFJTCkgewogCQkJCXJpb19kcHJpbnRrIChSSU9fREVCVUdfSU5JVCwgIlJJTy1pbml0OiBSSU9TY3J1YiBiYW5kICVkLCBvcCAlZCBmYWlsZWRcbiIsIAogCQkJCQkJCWJhbmssIG9wKTsKIAkJCQlyZXR1cm4gUklPX0ZBSUw7CkBAIC0yMjcsNyArMjI3LDcgQEAKICoqIHRvIGNoZWNrIHRoYXQgdGhlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgcGhhc2Ugd2FzIHJldGFpbmVkLgogKi8KIAotc3RhdGljIGludCBSSU9TY3J1YihpbnQgb3AsIHU4ICpyYW0sIGludCBzaXplKQorc3RhdGljIGludCBSSU9TY3J1YihpbnQgb3AsIHU4IF9faW9tZW0gKnJhbSwgaW50IHNpemUpCiB7CiAJaW50IG9mZjsKIAl1bnNpZ25lZCBjaGFyCW9sZGJ5dGU7CkBAIC0zOTMsNyArMzkzLDcgQEAKICAgICByZXR1cm4gJnN0VmVyc2lvbjsKIH0KIAotdm9pZCBSSU9Ib3N0UmVzZXQodW5zaWduZWQgaW50IFR5cGUsIHN0cnVjdCBEcFJhbSAqRHBSYW1QLCB1bnNpZ25lZCBpbnQgU2xvdCkKK3ZvaWQgUklPSG9zdFJlc2V0KHVuc2lnbmVkIGludCBUeXBlLCBzdHJ1Y3QgRHBSYW0gX19pb21lbSAqRHBSYW1QLCB1bnNpZ25lZCBpbnQgU2xvdCkKIHsKIAkvKgogCSoqIFJlc2V0IHRoZSBUcHUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvaW50ci5jIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbnRyLmMKaW5kZXggOTdmMGZhNS4uZWVjMWZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW9pbnRyLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9pbnRyLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCXN0cnVjdCByaW9faW5mbyAqcDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBjOwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlQb3J0UCA9IChzdHJ1Y3QgUG9ydCAqKSBlbjsKQEAgLTE0NCw3ICsxNDQsNyBAQAogCQlpZiAoYyA9PSAwKQogCQkJYnJlYWs7CiAKLQkJcmlvX21lbWNweV90b2lvKFBvcnRQLT5Ib3N0UC0+Q2FkZHIsIChjYWRkcl90KSBQYWNrZXRQLT5kYXRhLCBQb3J0UC0+Z3MueG1pdF9idWYgKyBQb3J0UC0+Z3MueG1pdF90YWlsLCBjKTsKKwkJcmlvX21lbWNweV90b2lvKFBvcnRQLT5Ib3N0UC0+Q2FkZHIsIFBhY2tldFAtPmRhdGEsIFBvcnRQLT5ncy54bWl0X2J1ZiArIFBvcnRQLT5ncy54bWl0X3RhaWwsIGMpOwogCQkvKiAgICB1ZGVsYXkgKDEpOyAqLwogCiAJCXdyaXRlYihjLCAmKFBhY2tldFAtPmxlbikpOwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCWZvciAocG9ydCA9IHAtPlJJT0ZpcnN0UG9ydHNCb290ZWQ7IHBvcnQgPCBwLT5SSU9MYXN0UG9ydHNCb290ZWQgKyBQT1JUU19QRVJfUlRBOyBwb3J0KyspIHsKIAkJCXN0cnVjdCBQb3J0ICpQb3J0UCA9IHAtPlJJT1BvcnRwW3BvcnRdOwogCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eVA7Ci0JCQlzdHJ1Y3QgUEtUICpQYWNrZXRQOworCQkJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCiAJCQkvKgogCQkJICoqIG5vdCBtYXBwZWQgaW4gLSBtb3N0IG9mIHRoZSBSSU9Qb3J0cFtdIGluZm9ybWF0aW9uCkBAIC0yOTgsNyArMjk4LDcgQEAKIAkJZm9yIChwb3J0ID0gcC0+UklPRmlyc3RQb3J0c0Jvb3RlZDsgcG9ydCA8IHAtPlJJT0xhc3RQb3J0c0Jvb3RlZCArIFBPUlRTX1BFUl9SVEE7IHBvcnQrKykgewogCQkJc3RydWN0IFBvcnQgKlBvcnRQID0gcC0+UklPUG9ydHBbcG9ydF07CiAJCQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5UDsKLQkJCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJCQlzdHJ1Y3QgUEtUIF9faW9tZW0gKlBhY2tldFA7CiAKIAkJCS8qCiAJCQkgKiogbm90IG1hcHBlZCBpbiAtIG1vc3Qgb2YgdGhlIFJJT1BvcnRwW10gaW5mb3JtYXRpb24KQEAgLTQyNywxMyArNDI3LDEzIEBACiAKIAkJCQl3aGlsZSAoUG9ydFAtPldmbHVzaEZsYWcgJiYgY2FuX2FkZF90cmFuc21pdCgmUGFja2V0UCwgUG9ydFApICYmIChQb3J0UC0+SW5Vc2UgPT0gTk9UX0lOVVNFKSkgewogCQkJCQlpbnQgcDsKLQkJCQkJc3RydWN0IFBrdENtZCAqUGt0Q21kUDsKKwkJCQkJc3RydWN0IFBrdENtZCBfX2lvbWVtICpQa3RDbWRQOwogCiAJCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiQWRkIFdGTFVTSCBtYXJrZXIgdG8gZGF0YSBxdWV1ZVxuIik7CiAJCQkJCS8qCiAJCQkJCSAqKiBtYWtlIGl0IGxvb2sganVzdCBsaWtlIGEgV0ZMVVNIIGNvbW1hbmQKIAkJCQkJICovCi0JCQkJCVBrdENtZFAgPSAoc3RydWN0IFBrdENtZCAqKSAmUGFja2V0UC0+ZGF0YVswXTsKKwkJCQkJUGt0Q21kUCA9IChzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKikgJlBhY2tldFAtPmRhdGFbMF07CiAKIAkJCQkJd3JpdGViKFdGTFVTSCwgJlBrdENtZFAtPkNvbW1hbmQpOwogCkBAIC01MjUsOSArNTI1LDkgQEAKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqVHR5UDsKIAl1bnNpZ25lZCBzaG9ydCB0cmFuc0NvdW50OwotCXN0cnVjdCBQS1QgKlBhY2tldFA7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGludCBEYXRhQ250OwotCXVuc2lnbmVkIGNoYXIgKnB0cjsKKwl1bnNpZ25lZCBjaGFyIF9faW9tZW0gKnB0cjsKIAl1bnNpZ25lZCBjaGFyICpidWY7CiAJaW50IGNvcGllZCA9IDA7CiAKQEAgLTU4NSwxOSArNTg1LDE5IEBACiAJCQkvKgogCQkJICoqIGNoZWNrIHRoYXQgaXQgaXMgbm90IGEgY29tbWFuZCEKIAkJCSAqLwotCQkJaWYgKFBhY2tldFAtPmxlbiAmIFBLVF9DTURfQklUKSB7CisJCQlpZiAocmVhZGIoJlBhY2tldFAtPmxlbikgJiBQS1RfQ01EX0JJVCkgewogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiUklPOiB1bmV4cGVjdGVkIGNvbW1hbmQgcGFja2V0IHJlY2VpdmVkIG9uIFBIQlxuIik7CiAJCQkJLyogICAgICByaW9fZHByaW50KFJJT19ERUJVR19JTlRSLCAoIiBzeXNwb3J0ICAgPSAlZFxuIiwgcC0+UklPUG9ydHAtPlBvcnROdW0pKTsgKi8KLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBkZXN0X3VuaXQgPSAlZFxuIiwgUGFja2V0UC0+ZGVzdF91bml0KTsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBkZXN0X3BvcnQgPSAlZFxuIiwgUGFja2V0UC0+ZGVzdF9wb3J0KTsKLQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBzcmNfdW5pdCAgPSAlZFxuIiwgUGFja2V0UC0+c3JjX3VuaXQpOwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiIHNyY19wb3J0ICA9ICVkXG4iLCBQYWNrZXRQLT5zcmNfcG9ydCk7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgbGVuCSAgID0gJWRcbiIsIFBhY2tldFAtPmxlbik7Ci0JCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgY29udHJvbCAgID0gJWRcbiIsIFBhY2tldFAtPmNvbnRyb2wpOwotCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiIGNzdW0JICAgPSAlZFxuIiwgUGFja2V0UC0+Y3N1bSk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgZGVzdF91bml0ID0gJWRcbiIsIHJlYWRiKCZQYWNrZXRQLT5kZXN0X3VuaXQpKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBkZXN0X3BvcnQgPSAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPmRlc3RfcG9ydCkpOworCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiIHNyY191bml0ICA9ICVkXG4iLCByZWFkYigmUGFja2V0UC0+c3JjX3VuaXQpKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBzcmNfcG9ydCAgPSAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPnNyY19wb3J0KSk7CisJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIgbGVuCSAgID0gJWRcbiIsIHJlYWRiKCZQYWNrZXRQLT5sZW4pKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBjb250cm9sICAgPSAlZFxuIiwgcmVhZGIoJlBhY2tldFAtPmNvbnRyb2wpKTsKKwkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiBjc3VtCSAgID0gJWRcbiIsIHJlYWR3KCZQYWNrZXRQLT5jc3VtKSk7CiAJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX0lOVFIsICIJIGRhdGEgYnl0ZXM6ICIpOwogCQkJCWZvciAoRGF0YUNudCA9IDA7IERhdGFDbnQgPCBQS1RfTUFYX0RBVEFfTEVOOyBEYXRhQ250KyspCi0JCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19JTlRSLCAiJWRcbiIsIFBhY2tldFAtPmRhdGFbRGF0YUNudF0pOworCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfSU5UUiwgIiVkXG4iLCByZWFkYigmUGFja2V0UC0+ZGF0YVtEYXRhQ250XSkpOwogCQkJCXJlbW92ZV9yZWNlaXZlKFBvcnRQKTsKIAkJCQlwdXRfZnJlZV9lbmQoUG9ydFAtPkhvc3RQLCBQYWNrZXRQKTsKIAkJCQljb250aW51ZTsJLyogd2l0aCBuZXh0IHBhY2tldCAqLwpAQCAtNjE4LDI0ICs2MTgsMjQgQEAKIAkJCSAqKiBhbmQgYXZhaWxhYmxlIHNwYWNlLgogCQkJICovCiAKLQkJCXRyYW5zQ291bnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbShUdHlQLCBQYWNrZXRQLT5sZW4gJiBQS1RfTEVOX01BU0spOworCQkJdHJhbnNDb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKFR0eVAsIHJlYWRiKCZQYWNrZXRQLT5sZW4pICYgUEtUX0xFTl9NQVNLKTsKIAkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19SRUMsICJwb3J0ICVkOiBDb3B5ICVkIGJ5dGVzXG4iLCBQb3J0UC0+UG9ydE51bSwgdHJhbnNDb3VudCk7CiAJCQkvKgogCQkJICoqIFRvIHVzZSB0aGUgZm9sbG93aW5nICdra3ByaW50ZnMnIGZvciBkZWJ1Z2dpbmcgLSBjaGFuZ2UgdGhlICcjdW5kZWYnCiAJCQkgKiogdG8gJyNkZWZpbmUnLCAodGhpcyBpcyB0aGUgb25seSBwbGFjZSBfX19ERUJVR19JVF9fXyBvY2N1cnMgaW4gdGhlCiAJCQkgKiogZHJpdmVyKS4KIAkJCSAqLwotCQkJcHRyID0gKHVuc2lnbmVkIGNoYXIgKikgUGFja2V0UC0+ZGF0YSArIFBvcnRQLT5SeERhdGFTdGFydDsKKwkJCXB0ciA9ICh1bnNpZ25lZCBjaGFyIF9faW9tZW0gKikgUGFja2V0UC0+ZGF0YSArIFBvcnRQLT5SeERhdGFTdGFydDsKIAogCQkJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoVHR5UCwgJmJ1ZiwgdHJhbnNDb3VudCk7CiAJCQlyaW9fbWVtY3B5X2Zyb21pbyhidWYsIHB0ciwgdHJhbnNDb3VudCk7CiAJCQlQb3J0UC0+UnhEYXRhU3RhcnQgKz0gdHJhbnNDb3VudDsKLQkJCVBhY2tldFAtPmxlbiAtPSB0cmFuc0NvdW50OworCQkJd3JpdGViKHJlYWRiKCZQYWNrZXRQLT5sZW4pLXRyYW5zQ291bnQsICZQYWNrZXRQLT5sZW4pOwogCQkJY29waWVkICs9IHRyYW5zQ291bnQ7CiAKIAogCi0JCQlpZiAoUGFja2V0UC0+bGVuID09IDApIHsKKwkJCWlmIChyZWFkYigmUGFja2V0UC0+bGVuKSA9PSAwKSB7CiAJCQkJLyoKIAkJCQkgKiogSWYgd2UgaGF2ZSBlbXB0aWVkIHRoZSBwYWNrZXQsIHRoZW4gd2UgY2FuCiAJCQkJICoqIGZyZWUgaXQsIGFuZCByZXNldCB0aGUgc3RhcnQgcG9pbnRlciBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcGFyYW0uYwppbmRleCBkMmU4MDkyLi4xMDY2ZDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3BhcmFtLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9wYXJhbS5jCkBAIC0xNTQsOCArMTU0LDggQEAKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqVHR5UDsKIAlpbnQgcmV0dmFsOwotCXN0cnVjdCBwaGJfcGFyYW0gKnBoYl9wYXJhbV9wdHI7Ci0Jc3RydWN0IFBLVCAqUGFja2V0UDsKKwlzdHJ1Y3QgcGhiX3BhcmFtIF9faW9tZW0gKnBoYl9wYXJhbV9wdHI7CisJc3RydWN0IFBLVCBfX2lvbWVtICpQYWNrZXRQOwogCWludCByZXM7CiAJdTggQ29yMSA9IDAsIENvcjIgPSAwLCBDb3I0ID0gMCwgQ29yNSA9IDA7CiAJdTggVHhYb24gPSAwLCBUeFhvZmYgPSAwLCBSeFhvbiA9IDAsIFJ4WG9mZiA9IDA7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJjYW5fYWRkX3RyYW5zbWl0KCkgcmV0dXJucyAleFxuIiwgcmVzKTsKIAlyaW9fZHByaW50ayhSSU9fREVCVUdfUEFSQU0sICJQYWNrZXQgaXMgJXBcbiIsIFBhY2tldFApOwogCi0JcGhiX3BhcmFtX3B0ciA9IChzdHJ1Y3QgcGhiX3BhcmFtICopIFBhY2tldFAtPmRhdGE7CisJcGhiX3BhcmFtX3B0ciA9IChzdHJ1Y3QgcGhiX3BhcmFtIF9faW9tZW0gKikgUGFja2V0UC0+ZGF0YTsKIAogCiAJc3dpdGNoIChUdHlQLT50ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpIHsKQEAgLTU4MCwxMSArNTgwLDExIEBACiAqKiBXZSBjYW4gYWRkIGFub3RoZXIgcGFja2V0IHRvIGEgdHJhbnNtaXQgcXVldWUgaWYgdGhlIHBhY2tldCBwb2ludGVyIHBvaW50ZWQKICoqIHRvIGJ5IHRoZSBUeEFkZCBwb2ludGVyIGhhcyBQS1RfSU5fVVNFIGNsZWFyIGluIGl0cyBhZGRyZXNzLgogKi8KLWludCBjYW5fYWRkX3RyYW5zbWl0KHN0cnVjdCBQS1QgKipQa3RQLCBzdHJ1Y3QgUG9ydCAqUG9ydFApCitpbnQgY2FuX2FkZF90cmFuc21pdChzdHJ1Y3QgUEtUIF9faW9tZW0gKipQa3RQLCBzdHJ1Y3QgUG9ydCAqUG9ydFApCiB7Ci0Jc3RydWN0IFBLVCAqdHA7CisJc3RydWN0IFBLVCBfX2lvbWVtICp0cDsKIAotCSpQa3RQID0gdHAgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKFBvcnRQLT5DYWRkciwgcmVhZHcoUG9ydFAtPlR4QWRkKSk7CisJKlBrdFAgPSB0cCA9IChzdHJ1Y3QgUEtUIF9faW9tZW0gKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIHJlYWR3KFBvcnRQLT5UeEFkZCkpOwogCiAJcmV0dXJuICEoKHVuc2lnbmVkIGxvbmcpIHRwICYgUEtUX0lOX1VTRSk7CiB9CkBAIC02MDgsOSArNjA4LDkgQEAKICAqIFB1dCBhIHBhY2tldCBvbnRvIHRoZSBlbmQgb2YgdGhlCiAgKiBmcmVlIGxpc3QKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBwdXRfZnJlZV9lbmQoc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICpQa3RQKQordm9pZCBwdXRfZnJlZV9lbmQoc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUIF9faW9tZW0gKlBrdFApCiB7Ci0Jc3RydWN0IHJpb19mcmVlX2xpc3QgKnRtcF9wb2ludGVyOworCXN0cnVjdCByaW9fZnJlZV9saXN0IF9faW9tZW0gKnRtcF9wb2ludGVyOwogCXVuc2lnbmVkIHNob3J0IG9sZF9lbmQsIG5ld19lbmQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNjI1LDE1ICs2MjUsMTUgQEAKIAogCWlmICgob2xkX2VuZCA9IHJlYWR3KCZIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQpKSAhPSBUUE5VTEwpIHsKIAkJbmV3X2VuZCA9IFJJT19PRkYoSG9zdFAtPkNhZGRyLCBQa3RQKTsKLQkJdG1wX3BvaW50ZXIgPSAoc3RydWN0IHJpb19mcmVlX2xpc3QgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIG9sZF9lbmQpOworCQl0bXBfcG9pbnRlciA9IChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCBvbGRfZW5kKTsKIAkJd3JpdGV3KG5ld19lbmQsICZ0bXBfcG9pbnRlci0+bmV4dCk7Ci0JCXdyaXRldyhvbGRfZW5kLCAmKChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCAqKSBQa3RQKS0+cHJldik7Ci0JCXdyaXRldyhUUE5VTEwsICYoKHN0cnVjdCByaW9fZnJlZV9saXN0ICopIFBrdFApLT5uZXh0KTsKKwkJd3JpdGV3KG9sZF9lbmQsICYoKHN0cnVjdCByaW9fZnJlZV9saXN0IF9faW9tZW0gKikgUGt0UCktPnByZXYpOworCQl3cml0ZXcoVFBOVUxMLCAmKChzdHJ1Y3QgcmlvX2ZyZWVfbGlzdCBfX2lvbWVtICopIFBrdFApLT5uZXh0KTsKIAkJd3JpdGV3KG5ld19lbmQsICZIb3N0UC0+UGFybU1hcFAtPmZyZWVfbGlzdF9lbmQpOwogCX0gZWxzZSB7CQkvKiBGaXJzdCBwYWNrZXQgb24gdGhlIGZyZWUgbGlzdCB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4hICovCiAJCXJpb19kcHJpbnRrKFJJT19ERUJVR19QRkUsICJwdXRfZnJlZV9lbmQoKTogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuXG4iKTsKIAkJd3JpdGV3KFJJT19PRkYoSG9zdFAtPkNhZGRyLCBQa3RQKSwgJkhvc3RQLT5QYXJtTWFwUC0+ZnJlZV9saXN0X2VuZCk7Ci0JCXRtcF9wb2ludGVyID0gKHN0cnVjdCByaW9fZnJlZV9saXN0ICopIFBrdFA7CisJCXRtcF9wb2ludGVyID0gKHN0cnVjdCByaW9fZnJlZV9saXN0IF9faW9tZW0gKikgUGt0UDsKIAkJd3JpdGV3KFRQTlVMTCwgJnRtcF9wb2ludGVyLT5wcmV2KTsKIAkJd3JpdGV3KFRQTlVMTCwgJnRtcF9wb2ludGVyLT5uZXh0KTsKIAl9CkBAIC02NDcsMTAgKzY0NywxMCBAQAogKiogcmVsZXZhbnQgcGFja2V0LCBbaGF2aW5nIGNsZWFyZWQgdGhlIFBLVF9JTl9VU0UgYml0XS4gSWYgUEtUX0lOX1VTRSBpcyBjbGVhciwKICoqIHRoZW4gY2FuX3JlbW92ZV9yZWNlaXZlKCkgcmV0dXJucyAwLgogKi8KLWludCBjYW5fcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBLVCAqKlBrdFAsIHN0cnVjdCBQb3J0ICpQb3J0UCkKK2ludCBjYW5fcmVtb3ZlX3JlY2VpdmUoc3RydWN0IFBLVCBfX2lvbWVtICoqUGt0UCwgc3RydWN0IFBvcnQgKlBvcnRQKQogewogCWlmIChyZWFkdyhQb3J0UC0+UnhSZW1vdmUpICYgUEtUX0lOX1VTRSkgewotCQkqUGt0UCA9IChzdHJ1Y3QgUEtUICopIFJJT19QVFIoUG9ydFAtPkNhZGRyLCByZWFkdyhQb3J0UC0+UnhSZW1vdmUpICYgflBLVF9JTl9VU0UpOworCQkqUGt0UCA9IChzdHJ1Y3QgUEtUIF9faW9tZW0gKikgUklPX1BUUihQb3J0UC0+Q2FkZHIsIHJlYWR3KFBvcnRQLT5SeFJlbW92ZSkgJiB+UEtUX0lOX1VTRSk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvcm91dGUuYwppbmRleCAzNTcwODUzLi5hOTlmM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3JvdXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW9yb3V0ZS5jCkBAIC04Niw5ICs4Niw5IEBACiAqKiBJbmNvbWluZyBvbiB0aGUgUk9VVEVfUlVQCiAqKiBJIHdyb3RlIHRoaXMgd2hpbGUgSSB3YXMgdGlyZWQuIEZvcmdpdmUgbWUuCiAqLwotaW50IFJJT1JvdXRlUnVwKHN0cnVjdCByaW9faW5mbyAqcCwgdW5zaWduZWQgaW50IFJ1cCwgc3RydWN0IEhvc3QgKkhvc3RQLCBzdHJ1Y3QgUEtUICogUGFja2V0UCkKK2ludCBSSU9Sb3V0ZVJ1cChzdHJ1Y3QgcmlvX2luZm8gKnAsIHVuc2lnbmVkIGludCBSdXAsIHN0cnVjdCBIb3N0ICpIb3N0UCwgc3RydWN0IFBLVCBfX2lvbWVtICogUGFja2V0UCkKIHsKLQlzdHJ1Y3QgUGt0Q21kICpQa3RDbWRQID0gKHN0cnVjdCBQa3RDbWQgKikgUGFja2V0UC0+ZGF0YTsKKwlzdHJ1Y3QgUGt0Q21kIF9faW9tZW0gKlBrdENtZFAgPSAoc3RydWN0IFBrdENtZCBfX2lvbWVtICopIFBhY2tldFAtPmRhdGE7CiAJc3RydWN0IFBrdENtZF9NICpQa3RSZXBseVA7CiAJc3RydWN0IENtZEJsayAqQ21kQmxrUDsKIAlzdHJ1Y3QgUG9ydCAqUG9ydFA7CkBAIC0zMDcsNyArMzA3LDcgQEAKIAlpZiAoIVJJT0Jvb3RPayhwLCBIb3N0UCwgUnRhVW5pcSkpIHsKIAkJcmlvX2RwcmludGsoUklPX0RFQlVHX1JPVVRFLCAiUlRBICV4IHRyaWVkIHRvIGdldCBhbiBJRCwgYnV0IGRvZXMgbm90IGJlbG9uZyAtIEZPQUQgaXQhXG4iLCBSdGFVbmlxKTsKIAkJUGt0UmVwbHlQLT5Db21tYW5kID0gUk9VVEVfRk9BRDsKLQkJSG9zdFAtPkNvcHkoIlJUX0ZPQUQiLCBQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCA3KTsKKwkJbWVtY3B5KFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsICJSVF9GT0FEIiwgNyk7CiAJCVJJT1F1ZXVlQ21kQmxrKEhvc3RQLCBSdXAsIENtZEJsa1ApOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0zNDEsNyArMzQxLDcgQEAKIAkJCQkJSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLkZsYWdzIHw9IE1TR19ET05FOwogCQkJCX0KIAkJCQlQa3RSZXBseVAtPkNvbW1hbmQgPSBST1VURV9GT0FEOwotCQkJCUhvc3RQLT5Db3B5KCJSVF9GT0FEIiwgUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgNyk7CisJCQkJbWVtY3B5KFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsICJSVF9GT0FEIiwgNyk7CiAJCQkJUklPUXVldWVDbWRCbGsoSG9zdFAsIFJ1cCwgQ21kQmxrUCk7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CkBAIC0zNjcsNyArMzY3LDcgQEAKIAkJCQlQa3RSZXBseVAtPklETnVtMiA9IFJPVVRFX05PX0lEOwogCQkJCXJpb19kcHJpbnRrKFJJT19ERUJVR19ST1VURSwgIlJUQSAnJXMnIGhhcyBiZWVuIGFsbG9jYXRlZCBJRCAlZFxuIiwgSG9zdFAtPk1hcHBpbmdbVGhpc1VuaXRdLk5hbWUsIFBrdFJlcGx5UC0+SUROdW0pOwogCQkJfQotCQkJSG9zdFAtPkNvcHkoIlJUX0FMTE9DQVQiLCBQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCAxMCk7CisJCQltZW1jcHkoUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgIlJUX0FMTE9DQVQiLCAxMCk7CiAKIAkJCVJJT1F1ZXVlQ21kQmxrKEhvc3RQLCBSdXAsIENtZEJsa1ApOwogCkBAIC00NjksNyArNDY5LDcgQEAKIAkJfQogCiAJCVBrdFJlcGx5UC0+Q29tbWFuZCA9IFJPVVRFX0ZPQUQ7Ci0JCUhvc3RQLT5Db3B5KCJSVF9GT0FEIiwgUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgNyk7CisJCW1lbWNweShQa3RSZXBseVAtPkNvbW1hbmRUZXh0LCAiUlRfRk9BRCIsIDcpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqKiB3ZSBkaWQgYm9vdCBpdCAoYXMgYW4gZXh0cmEpLCBhbmQgdGhlcmUgbWF5IG5vdyBiZSBhIHRhYmxlCkBAIC00ODksNyArNDg5LDcgQEAKIAkJCX0KIAkJfQogCQlQa3RSZXBseVAtPkNvbW1hbmQgPSBST1VURV9VU0VEOwotCQlIb3N0UC0+Q29weSgiUlRfVVNFRCIsIFBrdFJlcGx5UC0+Q29tbWFuZFRleHQsIDcpOworCQltZW1jcHkoUGt0UmVwbHlQLT5Db21tYW5kVGV4dCwgIlJUX1VTRUQiLCA3KTsKIAl9CiAJUklPUXVldWVDbWRCbGsoSG9zdFAsIFJ1cCwgQ21kQmxrUCk7CiAJcmV0dXJuIDE7CkBAIC01MTcsOCArNTE3LDggQEAKIAogCQlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgUE9SVFNfUEVSX1JUQTsgcG9ydCsrLCBQb3J0TisrKSB7CiAJCQl1bnNpZ25lZCBzaG9ydCBkZXN0X3BvcnQgPSBwb3J0ICsgODsKLQkJCXUxNiAqVHhQa3RQOwotCQkJc3RydWN0IFBLVCAqUGt0OworCQkJdTE2IF9faW9tZW0gKlR4UGt0UDsKKwkJCXN0cnVjdCBQS1QgX19pb21lbSAqUGt0OwogCiAJCQlQb3J0UCA9IHAtPlJJT1BvcnRwW1BvcnROXTsKIApAQCAtNTU1LDEyICs1NTUsMTIgQEAKIAkJCQkgKiogY2FyZC4gVGhpcyBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIGludG8gYSAzMiBiaXQgcG9pbnRlcgogCQkJCSAqKiBzbyBpdCBjYW4gYmUgYWNjZXNzZWQgZnJvbSB0aGUgZHJpdmVyLgogCQkJCSAqLwotCQkJCVBrdCA9IChzdHJ1Y3QgUEtUICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdyhUeFBrdFApKTsKKwkJCQlQa3QgPSAoc3RydWN0IFBLVCBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdyhUeFBrdFApKTsKIAogCQkJCS8qCiAJCQkJICoqIElmIHRoZSBwYWNrZXQgaXMgdXNlZCwgcmVzZXQgaXQuCiAJCQkJICovCi0JCQkJUGt0ID0gKHN0cnVjdCBQS1QgKikgKCh1bnNpZ25lZCBsb25nKSBQa3QgJiB+UEtUX0lOX1VTRSk7CisJCQkJUGt0ID0gKHN0cnVjdCBQS1QgX19pb21lbSAqKSAoKHVuc2lnbmVkIGxvbmcpIFBrdCAmIH5QS1RfSU5fVVNFKTsKIAkJCQl3cml0ZWIoZGVzdF91bml0LCAmUGt0LT5kZXN0X3VuaXQpOwogCQkJCXdyaXRlYihkZXN0X3BvcnQsICZQa3QtPmRlc3RfcG9ydCk7CiAJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3RhYmxlLmMKaW5kZXggZDNhYmUwZC4uN2U5ODgzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpby9yaW90YWJsZS5jCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vcmlvdGFibGUuYwpAQCAtNTM0LDggKzUzNCw4IEBACiAJCQkJCQlpZiAoUG9ydFAtPlNlY29uZEJsb2NrKSB7CiAJCQkJCQkJdTE2IGRlc3RfdW5pdCA9IEhvc3RNYXBQLT5JRDsKIAkJCQkJCQl1MTYgZGVzdF9wb3J0ID0gcG9ydCAtIFN5c1BvcnQ7Ci0JCQkJCQkJdTE2ICpUeFBrdFA7Ci0JCQkJCQkJc3RydWN0IFBLVCAqUGt0OworCQkJCQkJCXUxNiBfX2lvbWVtICpUeFBrdFA7CisJCQkJCQkJc3RydWN0IFBLVCBfX2lvbWVtICpQa3Q7CiAKIAkJCQkJCQlmb3IgKFR4UGt0UCA9IFBvcnRQLT5UeFN0YXJ0OyBUeFBrdFAgPD0gUG9ydFAtPlR4RW5kOyBUeFBrdFArKykgewogCQkJCQkJCQkvKgpAQCAtNTQ1LDEyICs1NDUsMTIgQEAKIAkJCQkJCQkJICoqIGEgMzIgYml0IHBvaW50ZXIgc28gaXQgY2FuIGJlCiAJCQkJCQkJCSAqKiBhY2Nlc3NlZCBmcm9tIHRoZSBkcml2ZXIuCiAJCQkJCQkJCSAqLwotCQkJCQkJCQlQa3QgPSAoc3RydWN0IFBLVCAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJipUeFBrdFApKTsKLQkJCQkJCQkJcmlvX2RwcmludGsoUklPX0RFQlVHX1RBQkxFLCAiVHggcGFja2V0ICgleCkgZGVzdGluYXRpb246IE9sZCAleDoleCBOZXcgJXg6JXhcbiIsICpUeFBrdFAsIFBrdC0+ZGVzdF91bml0LCBQa3QtPmRlc3RfcG9ydCwgZGVzdF91bml0LCBkZXN0X3BvcnQpOworCQkJCQkJCQlQa3QgPSAoc3RydWN0IFBLVCBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmKlR4UGt0UCkpOworCQkJCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJUeCBwYWNrZXQgKCV4KSBkZXN0aW5hdGlvbjogT2xkICV4OiV4IE5ldyAleDoleFxuIiwgcmVhZHcoVHhQa3RQKSwgcmVhZGIoJlBrdC0+ZGVzdF91bml0KSwgcmVhZGIoJlBrdC0+ZGVzdF9wb3J0KSwgZGVzdF91bml0LCBkZXN0X3BvcnQpOwogCQkJCQkJCQl3cml0ZXcoZGVzdF91bml0LCAmUGt0LT5kZXN0X3VuaXQpOwogCQkJCQkJCQl3cml0ZXcoZGVzdF9wb3J0LCAmUGt0LT5kZXN0X3BvcnQpOwogCQkJCQkJCX0KLQkJCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJQb3J0ICVkIHBoYiBkZXN0aW5hdGlvbjogT2xkICV4OiV4IE5ldyAleDoleFxuIiwgcG9ydCwgUG9ydFAtPlBoYlAtPmRlc3RpbmF0aW9uICYgMHhmZiwgKFBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbiA+PiA4KSAmIDB4ZmYsIGRlc3RfdW5pdCwgZGVzdF9wb3J0KTsKKwkJCQkJCQlyaW9fZHByaW50ayhSSU9fREVCVUdfVEFCTEUsICJQb3J0ICVkIHBoYiBkZXN0aW5hdGlvbjogT2xkICV4OiV4IE5ldyAleDoleFxuIiwgcG9ydCwgcmVhZGIoJlBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbikgJiAweGZmLCAocmVhZGIoJlBvcnRQLT5QaGJQLT5kZXN0aW5hdGlvbikgPj4gOCkgJiAweGZmLCBkZXN0X3VuaXQsIGRlc3RfcG9ydCk7CiAJCQkJCQkJd3JpdGV3KGRlc3RfdW5pdCArIChkZXN0X3BvcnQgPDwgOCksICZQb3J0UC0+UGhiUC0+ZGVzdGluYXRpb24pOwogCQkJCQkJfQogCQkJCQkJcmlvX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJlBvcnRQLT5wb3J0U2VtLCBzZW1fZmxhZ3MpOwpAQCAtNzgxLDEzICs3ODEsMTMgQEAKIAkJICoqIHVubGVzcyB0aGUgaG9zdCBoYXMgYmVlbiBib290ZWQKIAkJICovCiAJCWlmICgoSG9zdFAtPkZsYWdzICYgUlVOX1NUQVRFKSA9PSBSQ19SVU5OSU5HKSB7Ci0JCQlzdHJ1Y3QgUEhCICpQaGJQID0gUG9ydFAtPlBoYlAgPSAmSG9zdFAtPlBoYlBbSG9zdFBvcnRdOwotCQkJUG9ydFAtPlR4QWRkID0gKHUxNiAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnR4X2FkZCkpOwotCQkJUG9ydFAtPlR4U3RhcnQgPSAodTE2ICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+dHhfc3RhcnQpKTsKLQkJCVBvcnRQLT5UeEVuZCA9ICh1MTYgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT50eF9lbmQpKTsKLQkJCVBvcnRQLT5SeFJlbW92ZSA9ICh1MTYgKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT5yeF9yZW1vdmUpKTsKLQkJCVBvcnRQLT5SeFN0YXJ0ID0gKHUxNiAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnJ4X3N0YXJ0KSk7Ci0JCQlQb3J0UC0+UnhFbmQgPSAodTE2ICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+cnhfZW5kKSk7CisJCQlzdHJ1Y3QgUEhCIF9faW9tZW0gKlBoYlAgPSBQb3J0UC0+UGhiUCA9ICZIb3N0UC0+UGhiUFtIb3N0UG9ydF07CisJCQlQb3J0UC0+VHhBZGQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT50eF9hZGQpKTsKKwkJCVBvcnRQLT5UeFN0YXJ0ID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+dHhfc3RhcnQpKTsKKwkJCVBvcnRQLT5UeEVuZCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnR4X2VuZCkpOworCQkJUG9ydFAtPlJ4UmVtb3ZlID0gKHUxNiBfX2lvbWVtICopIFJJT19QVFIoSG9zdFAtPkNhZGRyLCByZWFkdygmUGhiUC0+cnhfcmVtb3ZlKSk7CisJCQlQb3J0UC0+UnhTdGFydCA9ICh1MTYgX19pb21lbSAqKSBSSU9fUFRSKEhvc3RQLT5DYWRkciwgcmVhZHcoJlBoYlAtPnJ4X3N0YXJ0KSk7CisJCQlQb3J0UC0+UnhFbmQgPSAodTE2IF9faW9tZW0gKikgUklPX1BUUihIb3N0UC0+Q2FkZHIsIHJlYWR3KCZQaGJQLT5yeF9lbmQpKTsKIAkJfSBlbHNlCiAJCQlQb3J0UC0+UGhiUCA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMgYi9kcml2ZXJzL2NoYXIvcmlvL3Jpb3R0eS5jCmluZGV4IDIwNDI2NzYuLmE0ZjBiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vcmlvdHR5LmMKKysrIGIvZHJpdmVycy9jaGFyL3Jpby9yaW90dHkuYwpAQCAtNTc2LDcgKzU3Niw3IEBACiAqLwogaW50IFJJT1Nob3J0Q29tbWFuZChzdHJ1Y3QgcmlvX2luZm8gKnAsIHN0cnVjdCBQb3J0ICpQb3J0UCwgaW50IGNvbW1hbmQsIGludCBsZW4sIGludCBhcmcpCiB7Ci0Jc3RydWN0IFBLVCAqUGFja2V0UDsKKwlzdHJ1Y3QgUEtUIF9faW9tZW0gKlBhY2tldFA7CiAJaW50IHJldHJpZXMgPSAyMDsJLyogYXQgMTAgcGVyIHNlY29uZCAtPiAyIHNlY29uZHMgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmlvL3VuaXhydXAuaCBiL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCmluZGV4IDQzMDZlMDEuLjQ2YmQ1MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCisrKyBiL2RyaXZlcnMvY2hhci9yaW8vdW5peHJ1cC5oCkBAIC00NCw3ICs0NCw3IEBACiBzdHJ1Y3QgVW5peFJ1cCB7CiAJc3RydWN0IENtZEJsayAqQ21kc1dhaXRpbmdQOwkvKiBDb21tYW5kcyB3YWl0aW5nIHRvIGJlIGRvbmUgKi8KIAlzdHJ1Y3QgQ21kQmxrICpDbWRQZW5kaW5nUDsJLyogVGhlIGNvbW1hbmQgY3VycmVudGx5IGJlaW5nIHNlbnQgKi8KLQlzdHJ1Y3QgUlVQICpSdXBQOwkvKiB0aGUgUnVwIHRvIHNlbmQgaXQgdG8gKi8KKwlzdHJ1Y3QgUlVQIF9faW9tZW0gKlJ1cFA7CS8qIHRoZSBSdXAgdG8gc2VuZCBpdCB0byAqLwogCXVuc2lnbmVkIGludCBJZDsJCS8qIElkIG51bWJlciAqLwogCXVuc2lnbmVkIGludCBCYXNlU3lzUG9ydDsJLyogU3lzUG9ydCBvZiBmaXJzdCB0dHkgb24gdGhpcyBSVEEgKi8KIAl1bnNpZ25lZCBpbnQgTW9kVHlwZXM7CQkvKiBNb2R1bGVzIG9uIHRoaXMgUlRBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9zZGhjaS5jIGIvZHJpdmVycy9tbWMvc2RoY2kuYwppbmRleCBiMDA1MzI4Li42YmZjZGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9zZGhjaS5jCisrKyBiL2RyaXZlcnMvbW1jL3NkaGNpLmMKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJdGFza2xldF9pbml0KCZob3N0LT5maW5pc2hfdGFza2xldCwKIAkJc2RoY2lfdGFza2xldF9maW5pc2gsICh1bnNpZ25lZCBsb25nKWhvc3QpOwogCi0Jc2V0dXBfdGltZXIoJmhvc3QtPnRpbWVyLCBzZGhjaV90aW1lb3V0X3RpbWVyLCAoaW50KWhvc3QpOworCXNldHVwX3RpbWVyKCZob3N0LT50aW1lciwgc2RoY2lfdGltZW91dF90aW1lciwgKGxvbmcpaG9zdCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHNkaGNpX2lycSwgU0FfU0hJUlEsCiAJCWhvc3QtPnNsb3RfZGVzY3IsIGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL0tjb25maWcKaW5kZXggZjZiNzc1ZS4uNWFjMjY1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9LY29uZmlnCkBAIC03OCw3ICs3OCw3IEBACiAJICBvcHRpb24uCiAKIAkgIFRoZSBvcHRpb24gc3BlY2lmaWVzIHdoaWNoIEZsYXNoIHNlY3RvcnMgaG9sZHMgdGhlIFJlZEJvb3QKLQkgIHBhcnRpdGlvbiB0YWJsZS4gIEEgemVybyBvciBwb3NpdGl2ZSB2YWx1ZSBnaXZlcyBhbiBhYnNvbGV0ZQorCSAgcGFydGl0aW9uIHRhYmxlLiAgQSB6ZXJvIG9yIHBvc2l0aXZlIHZhbHVlIGdpdmVzIGFuIGFic29sdXRlCiAJICBlcmFzZSBibG9jayBudW1iZXIuIEEgbmVnYXRpdmUgdmFsdWUgc3BlY2lmaWVzIGEgbnVtYmVyIG9mCiAJICBzZWN0b3JzIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSBkZXZpY2UuCiAKQEAgLTEwMyw3ICsxMDMsNyBAQAogCWJvb2wgIkNvbW1hbmQgbGluZSBwYXJ0aXRpb24gdGFibGUgcGFyc2luZyIKIAlkZXBlbmRzIG9uIE1URF9QQVJUSVRJT05TID0gInkiCiAJLS0taGVscC0tLQotCSAgQWxsb3cgZ2VuZXJpYyBjb25maWd1cmF0aW9uIG9mIHRoZSBNVEQgcGFyaXRpdGlvbiB0YWJsZXMgdmlhIHRoZSBrZXJuZWwKKwkgIEFsbG93IGdlbmVyaWMgY29uZmlndXJhdGlvbiBvZiB0aGUgTVREIHBhcnRpdGlvbiB0YWJsZXMgdmlhIHRoZSBrZXJuZWwKIAkgIGNvbW1hbmQgbGluZS4gTXVsdGlwbGUgZmxhc2ggcmVzb3VyY2VzIGFyZSBzdXBwb3J0ZWQgZm9yIGhhcmR3YXJlIHdoZXJlCiAJICBkaWZmZXJlbnQga2luZHMgb2YgZmxhc2ggbWVtb3J5IGFyZSBhdmFpbGFibGUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9jaGlwcy9LY29uZmlnCmluZGV4IGE3ZWM1OTUuLjZkOGYzMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvS2NvbmZpZwpAQCAtMzAsNyArMzAsNiBAQAogCiBjb25maWcgTVREX0dFTl9QUk9CRQogCXRyaXN0YXRlCi0Jc2VsZWN0IE9CU09MRVRFX0lOVEVSTU9EVUxFCiAKIGNvbmZpZyBNVERfQ0ZJX0FEVl9PUFRJT05TCiAJYm9vbCAiRmxhc2ggY2hpcCBkcml2ZXIgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQppbmRleCA4YWZlMzA5Li43NWJjMWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9jaGlwcy9NYWtlZmlsZQpAQCAtMywxMyArMyw2IEBACiAjCiAjICRJZDogTWFrZWZpbGUuY29tbW9uLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjIgZ2xlaXhuZXIgRXhwICQKIAotIyAgICAgICAgICAgICAgICAgICAgICAgKioqIEJJRyBVR0xZIE5PVEUgKioqCi0jCi0jIFRoZSByZW1vdmFsIG9mIGdldF9tb2R1bGVfc3ltYm9sKCkgYW5kIHJlcGxhY2VtZW50IHdpdGgKLSMgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKCkgZXQgYWwgaGFzIGludHJvZHVjZWQgYSBsaW5rIG9yZGVyIGRlcGVuZGVuY3kKLSMgaGVyZSB3aGVyZSBwcmV2aW91c2x5IHRoZXJlIHdhcyBub25lLiAgV2Ugbm93IGhhdmUgdG8gZW5zdXJlIHRoYXQKLSMgdGhlIENGSSBjb21tYW5kIHNldCBkcml2ZXJzIGFyZSBsaW5rZWQgYmVmb3JlIGdlbl9wcm9iZS5vCi0KIG9iai0kKENPTkZJR19NVEQpCQkrPSBjaGlwcmVnLm8KIG9iai0kKENPTkZJR19NVERfQU1EU1REKQkrPSBhbWRfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9DRkkpCQkrPSBjZmlfcHJvYmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvYW1kX2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwppbmRleCA1NzExNTYxLi4xNmVhY2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9hbWRfZmxhc2guYwpAQCAtOTcsNyArOTcsNiBAQAogCWludCBpbnRlcmxlYXZlOwogCWludCBudW1jaGlwczsKIAl1bnNpZ25lZCBsb25nIGNoaXBzaGlmdDsKLS8vCWNvbnN0IGNoYXIgKmltX25hbWU7CiAJc3RydWN0IGZsY2hpcCBjaGlwc1swXTsKIH07CiAKQEAgLTEzMSwxMiArMTMwLDYgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUKIH07CiAKLQotCi1zdGF0aWMgY29uc3QgY2hhciBpbV9uYW1lW10gPSAiYW1kX2ZsYXNoIjsKLQotCi0KIHN0YXRpYyBpbmxpbmUgX191MzIgd2lkZV9yZWFkKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBfX3UzMiBhZGRyKQogewogCWlmIChtYXAtPmJ1c3dpZHRoID09IDEpIHsKQEAgLTczNyw2ICs3MzAsNyBAQAogCQlvZmZzZXQgKz0gZGV2X3NpemU7CiAJfQogCW10ZC0+dHlwZSA9IE1URF9OT1JGTEFTSDsKKwltdGQtPndyaXRlc2l6ZSA9IDE7CiAJbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7CiAJbXRkLT5uYW1lID0gbWFwLT5uYW1lOwogCW10ZC0+ZXJhc2UgPSBhbWRfZmxhc2hfZXJhc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDEuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCmluZGV4IDFjMDc0ZDYuLjBkNDM1ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jCkBAIC0zMzEsMTMgKzMzMSw2IEBACiAJcmV0dXJuIGV4dHA7CiB9CiAKLS8qIFRoaXMgcm91dGluZSBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBtdGQgY29kZSB2aWEKLSAqIGludGVyX21vZHVsZV9yZWdpc3Rlci4gIEl0IG11c3Qgb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAgVGhlCi0gKiBhZGRyZXNzZXMgcGFzc2VkIGJhY2sgaW4gY2ZpIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSB1c2UgY291bnQgb2YKLSAqIHRoaXMgbW9kdWxlIGlzIG5vbi16ZXJvLCBpLmUuIGJldHdlZW4gaW50ZXJfbW9kdWxlX2dldCBhbmQKLSAqIGludGVyX21vZHVsZV9wdXQuICBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiAyOSBPY3QgMjAwMC4KLSAqLwogc3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAwMDEoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwpAQCAtNDA2LDcgKzM5OSw3IEBACiAJZm9yIChpPTA7IGk8IGNmaS0+bnVtY2hpcHM7IGkrKykgewogCQljZmktPmNoaXBzW2ldLndvcmRfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+V29yZFdyaXRlVGltZW91dFR5cDsKIAkJY2ZpLT5jaGlwc1tpXS5idWZmZXJfd3JpdGVfdGltZSA9IDE8PGNmaS0+Y2ZpcS0+QnVmV3JpdGVUaW1lb3V0VHlwOwotCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAxPDxjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwOworCQljZmktPmNoaXBzW2ldLmVyYXNlX3RpbWUgPSAxMDAwPDxjZmktPmNmaXEtPkJsb2NrRXJhc2VUaW1lb3V0VHlwOwogCQljZmktPmNoaXBzW2ldLnJlZl9wb2ludF9jb3VudGVyID0gMDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmKGNmaS0+Y2hpcHNbaV0ud3EpKTsKIAl9CkBAIC00MTUsNiArNDA4LDExIEBACiAKIAlyZXR1cm4gY2ZpX2ludGVsZXh0X3NldHVwKG10ZCk7CiB9CitzdHJ1Y3QgbXRkX2luZm8gKmNmaV9jbWRzZXRfMDAwMyhzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IHByaW1hcnkpIF9fYXR0cmlidXRlX18oKGFsaWFzKCJjZmlfY21kc2V0XzAwMDEiKSkpOworc3RydWN0IG10ZF9pbmZvICpjZmlfY21kc2V0XzAyMDAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBwcmltYXJ5KSBfX2F0dHJpYnV0ZV9fKChhbGlhcygiY2ZpX2NtZHNldF8wMDAxIikpKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNmaV9jbWRzZXRfMDAwMSk7CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAwMDMpOworRVhQT1JUX1NZTUJPTF9HUEwoY2ZpX2NtZHNldF8wMjAwKTsKIAogc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqY2ZpX2ludGVsZXh0X3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpAQCAtNTQ3LDEyICs1NDUsMTIgQEAKIAkJaWYgKGV4dHAtPk1pbm9yVmVyc2lvbiA+PSAnNCcpIHsKIAkJCXN0cnVjdCBjZmlfaW50ZWxleHRfcHJvZ3JhbW1pbmdfcmVnaW9uaW5mbyAqcHJpbmZvOwogCQkJcHJpbmZvID0gKHN0cnVjdCBjZmlfaW50ZWxleHRfcHJvZ3JhbW1pbmdfcmVnaW9uaW5mbyAqKSZleHRwLT5leHRyYVtvZmZzXTsKLQkJCU1URF9QUk9HUkVHSU9OX1NJWkUobXRkKSA9IGNmaS0+aW50ZXJsZWF2ZSA8PCBwcmluZm8tPlByb2dSZWdTaGlmdDsKKwkJCW10ZC0+d3JpdGVzaXplID0gY2ZpLT5pbnRlcmxlYXZlIDw8IHByaW5mby0+UHJvZ1JlZ1NoaWZ0OwogCQkJTVREX1BST0dSRUdJT05fQ1RSTE1PREVfVkFMSUQobXRkKSA9IGNmaS0+aW50ZXJsZWF2ZSAqIHByaW5mby0+Q29udHJvbFZhbGlkOwogCQkJTVREX1BST0dSRUdJT05fQ1RSTE1PREVfSU5WQUxJRChtdGQpID0gY2ZpLT5pbnRlcmxlYXZlICogcHJpbmZvLT5Db250cm9sSW52YWxpZDsKLQkJCW10ZC0+ZmxhZ3MgfD0gTVREX1BST0dSQU1fUkVHSU9OUzsKKwkJCW10ZC0+ZmxhZ3MgJj0gfk1URF9CSVRfV1JJVEVBQkxFOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwcm9ncmFtIHJlZ2lvbiBzaXplL2N0cmxfdmFsaWQvY3RybF9pbnZhbCA9ICVkLyVkLyVkXG4iLAotCQkJICAgICAgIG1hcC0+bmFtZSwgTVREX1BST0dSRUdJT05fU0laRShtdGQpLAorCQkJICAgICAgIG1hcC0+bmFtZSwgbXRkLT53cml0ZXNpemUsCiAJCQkgICAgICAgTVREX1BST0dSRUdJT05fQ1RSTE1PREVfVkFMSUQobXRkKSwKIAkJCSAgICAgICBNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9JTlZBTElEKG10ZCkpOwogCQl9CkBAIC04OTYsMjYgKzg5NCwzMyBAQAogCiAvKgogICogV2hlbiBhIGRlbGF5IGlzIHJlcXVpcmVkIGZvciB0aGUgZmxhc2ggb3BlcmF0aW9uIHRvIGNvbXBsZXRlLCB0aGUKLSAqIHhpcF91ZGVsYXkoKSBmdW5jdGlvbiBpcyBwb2xsaW5nIGZvciBib3RoIHRoZSBnaXZlbiB0aW1lb3V0IGFuZCBwZW5kaW5nCi0gKiAoYnV0IHN0aWxsIG1hc2tlZCkgaGFyZHdhcmUgaW50ZXJydXB0cy4gIFdoZW5ldmVyIHRoZXJlIGlzIGFuIGludGVycnVwdAotICogcGVuZGluZyB0aGVuIHRoZSBmbGFzaCBlcmFzZSBvciB3cml0ZSBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLCBhcnJheSBtb2RlCi0gKiByZXN0b3JlZCBhbmQgaW50ZXJydXB0cyB1bm1hc2tlZC4gIFRhc2sgc2NoZWR1bGluZyBtaWdodCBhbHNvIGhhcHBlbiBhdCB0aGF0Ci0gKiBwb2ludC4gIFRoZSBDUFUgZXZlbnR1YWxseSByZXR1cm5zIGZyb20gdGhlIGludGVycnVwdCBvciB0aGUgY2FsbCB0bwotICogc2NoZWR1bGUoKSBhbmQgdGhlIHN1c3BlbmRlZCBmbGFzaCBvcGVyYXRpb24gaXMgcmVzdW1lZCBmb3IgdGhlIHJlbWFpbmluZwotICogb2YgdGhlIGRlbGF5IHBlcmlvZC4KKyAqIHhpcF93YWl0X2Zvcl9vcGVyYXRpb24oKSBmdW5jdGlvbiBpcyBwb2xsaW5nIGZvciBib3RoIHRoZSBnaXZlbiB0aW1lb3V0CisgKiBhbmQgcGVuZGluZyAoYnV0IHN0aWxsIG1hc2tlZCkgaGFyZHdhcmUgaW50ZXJydXB0cy4gIFdoZW5ldmVyIHRoZXJlIGlzIGFuCisgKiBpbnRlcnJ1cHQgcGVuZGluZyB0aGVuIHRoZSBmbGFzaCBlcmFzZSBvciB3cml0ZSBvcGVyYXRpb24gaXMgc3VzcGVuZGVkLAorICogYXJyYXkgbW9kZSByZXN0b3JlZCBhbmQgaW50ZXJydXB0cyB1bm1hc2tlZC4gIFRhc2sgc2NoZWR1bGluZyBtaWdodCBhbHNvCisgKiBoYXBwZW4gYXQgdGhhdCBwb2ludC4gIFRoZSBDUFUgZXZlbnR1YWxseSByZXR1cm5zIGZyb20gdGhlIGludGVycnVwdCBvcgorICogdGhlIGNhbGwgdG8gc2NoZWR1bGUoKSBhbmQgdGhlIHN1c3BlbmRlZCBmbGFzaCBvcGVyYXRpb24gaXMgcmVzdW1lZCBmb3IKKyAqIHRoZSByZW1haW5pbmcgb2YgdGhlIGRlbGF5IHBlcmlvZC4KICAqCiAgKiBXYXJuaW5nOiB0aGlzIGZ1bmN0aW9uIF93aWxsXyBmb29sIGludGVycnVwdCBsYXRlbmN5IHRyYWNpbmcgdG9vbHMuCiAgKi8KIAotc3RhdGljIHZvaWQgX194aXByYW0geGlwX3VkZWxheShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKLQkJCQl1bnNpZ25lZCBsb25nIGFkciwgaW50IHVzZWMpCitzdGF0aWMgaW50IF9feGlwcmFtIHhpcF93YWl0X2Zvcl9vcGVyYXRpb24oCisJCXN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAorCQl1bnNpZ25lZCBsb25nIGFkciwgaW50ICpjaGlwX29wX3RpbWUgKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCXN0cnVjdCBjZmlfcHJpX2ludGVsZXh0ICpjZmlwID0gY2ZpLT5jbWRzZXRfcHJpdjsKIAltYXBfd29yZCBzdGF0dXMsIE9LID0gQ01EKDB4ODApOwotCXVuc2lnbmVkIGxvbmcgc3VzcGVuZGVkLCBzdGFydCA9IHhpcF9jdXJydGltZSgpOworCXVuc2lnbmVkIGxvbmcgdXNlYywgc3VzcGVuZGVkLCBzdGFydCwgZG9uZTsKIAlmbHN0YXRlX3Qgb2xkc3RhdGUsIG5ld3N0YXRlOwogCisgICAgICAgCXN0YXJ0ID0geGlwX2N1cnJ0aW1lKCk7CisJdXNlYyA9ICpjaGlwX29wX3RpbWUgKiA4OworCWlmICh1c2VjID09IDApCisJCXVzZWMgPSA1MDAwMDA7CisJZG9uZSA9IDA7CisKIAlkbyB7CiAJCWNwdV9yZWxheCgpOwogCQlpZiAoeGlwX2lycXBlbmRpbmcoKSAmJiBjZmlwICYmCkBAIC05MzIsOSArOTM3LDkgQEAKIAkJCSAqIHdlIHJlc3VtZSB0aGUgd2hvbGUgdGhpbmcgYXQgb25jZSkuICBZZXMsIGl0CiAJCQkgKiBjYW4gaGFwcGVuIQogCQkJICovCisJCQl1c2VjIC09IGRvbmU7CiAJCQltYXBfd3JpdGUobWFwLCBDTUQoMHhiMCksIGFkcik7CiAJCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7Ci0JCQl1c2VjIC09IHhpcF9lbGFwc2VkX3NpbmNlKHN0YXJ0KTsKIAkJCXN1c3BlbmRlZCA9IHhpcF9jdXJydGltZSgpOwogCQkJZG8gewogCQkJCWlmICh4aXBfZWxhcHNlZF9zaW5jZShzdXNwZW5kZWQpID4gMTAwMDAwKSB7CkBAIC05NDQsNyArOTQ5LDcgQEAKIAkJCQkJICogVGhpcyBpcyBhIGNyaXRpY2FsIGVycm9yIGJ1dCB0aGVyZQogCQkJCQkgKiBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gaGVyZS4KIAkJCQkJICovCi0JCQkJCXJldHVybjsKKwkJCQkJcmV0dXJuIC1FSU87CiAJCQkJfQogCQkJCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgYWRyKTsKIAkJCX0gd2hpbGUgKCFtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgT0ssIE9LKSk7CkBAIC0xMDA0LDY1ICsxMDA5LDEwNyBAQAogCQkJeGlwX2NwdV9pZGxlKCk7CiAJCX0KIAkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOworCQlkb25lID0geGlwX2VsYXBzZWRfc2luY2Uoc3RhcnQpOwogCX0gd2hpbGUgKCFtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgT0ssIE9LKQotCQkgJiYgeGlwX2VsYXBzZWRfc2luY2Uoc3RhcnQpIDwgdXNlYyk7Ci19CisJCSAmJiBkb25lIDwgdXNlYyk7CiAKLSNkZWZpbmUgVURFTEFZKG1hcCwgY2hpcCwgYWRyLCB1c2VjKSAgeGlwX3VkZWxheShtYXAsIGNoaXAsIGFkciwgdXNlYykKKwlyZXR1cm4gKGRvbmUgPj0gdXNlYykgPyAtRVRJTUUgOiAwOworfQogCiAvKgogICogVGhlIElOVkFMSURBVEVfQ0FDSEVEX1JBTkdFKCkgbWFjcm8gaXMgbm9ybWFsbHkgdXNlZCBpbiBwYXJhbGxlbCB3aGlsZQogICogdGhlIGZsYXNoIGlzIGFjdGl2ZWx5IHByb2dyYW1taW5nIG9yIGVyYXNpbmcgc2luY2Ugd2UgaGF2ZSB0byBwb2xsIGZvcgogICogdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZSBhbnl3YXkuICBXZSBjYW4ndCBkbyB0aGF0IGluIGEgZ2VuZXJpYyB3YXkgd2l0aAogICogYSBYSVAgc2V0dXAgc28gZG8gaXQgYmVmb3JlIHRoZSBhY3R1YWwgZmxhc2ggb3BlcmF0aW9uIGluIHRoaXMgY2FzZQotICogYW5kIHN0dWIgaXQgb3V0IGZyb20gSU5WQUxJREFURV9DQUNIRV9VREVMQVkuCisgKiBhbmQgc3R1YiBpdCBvdXQgZnJvbSBJTlZBTF9DQUNIRV9BTkRfV0FJVC4KICAqLwogI2RlZmluZSBYSVBfSU5WQUxfQ0FDSEVEX1JBTkdFKG1hcCwgZnJvbSwgc2l6ZSkgIFwKIAlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpCiAKLSNkZWZpbmUgSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBjbWRfYWRyLCBhZHIsIGxlbiwgdXNlYykgIFwKLQlVREVMQVkobWFwLCBjaGlwLCBjbWRfYWRyLCB1c2VjKQotCi0vKgotICogRXh0cmEgbm90ZXM6Ci0gKgotICogQWN0aXZhdGluZyB0aGlzIFhJUCBzdXBwb3J0IGNoYW5nZXMgdGhlIHdheSB0aGUgY29kZSB3b3JrcyBhIGJpdC4gIEZvcgotICogZXhhbXBsZSB0aGUgY29kZSB0byBzdXNwZW5kIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2hlbiBjb25jdXJyZW50IGFjY2VzcwotICogaGFwcGVucyBpcyBuZXZlciBleGVjdXRlZCBiZWNhdXNlIHhpcF91ZGVsYXkoKSB3aWxsIGFsd2F5cyByZXR1cm4gd2l0aCB0aGUKLSAqIHNhbWUgY2hpcCBzdGF0ZSBhcyBpdCB3YXMgZW50ZXJlZCB3aXRoLiAgVGhpcyBpcyB3aHkgdGhlcmUgaXMgbm8gY2FyZSBmb3IKLSAqIHRoZSBwcmVzZW5jZSBvZiBhZGRfd2FpdF9xdWV1ZSgpIG9yIHNjaGVkdWxlKCkgY2FsbHMgZnJvbSB3aXRoaW4gYSBjb3VwbGUKLSAqIHhpcF9kaXNhYmxlKCknZCAgYXJlYXMgb2YgY29kZSwgbGlrZSBpbiBkb19lcmFzZV9vbmVibG9jayBmb3IgZXhhbXBsZS4KLSAqIFRoZSBxdWV1ZWluZyBhbmQgc2NoZWR1bGluZyBhcmUgYWx3YXlzIGhhcHBlbmluZyB3aXRoaW4geGlwX3VkZWxheSgpLgotICoKLSAqIFNpbWlsYXJseSwgZ2V0X2NoaXAoKSBhbmQgcHV0X2NoaXAoKSBqdXN0IGhhcHBlbiB0byBhbHdheXMgYmUgZXhlY3V0ZWQKLSAqIHdpdGggY2hpcC0+c3RhdGUgc2V0IHRvIEZMX1JFQURZIChvciBGTF9YSVBfV0hJTEVfKikgd2hlcmUgZmxhc2ggc3RhdGUKLSAqIGlzIGluIGFycmF5IG1vZGUsIHRoZXJlZm9yZSBuZXZlciBleGVjdXRpbmcgbWFueSBjYXNlcyB0aGVyZWluIGFuZCBub3QKLSAqIGNhdXNpbmcgYW55IHByb2JsZW0gd2l0aCBYSVAuCi0gKi8KKyNkZWZpbmUgSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBjbWRfYWRyLCBpbnZhbF9hZHIsIGludmFsX2xlbiwgcF91c2VjKSBcCisJeGlwX3dhaXRfZm9yX29wZXJhdGlvbihtYXAsIGNoaXAsIGNtZF9hZHIsIHBfdXNlYykKIAogI2Vsc2UKIAogI2RlZmluZSB4aXBfZGlzYWJsZShtYXAsIGNoaXAsIGFkcikKICNkZWZpbmUgeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcikKICNkZWZpbmUgWElQX0lOVkFMX0NBQ0hFRF9SQU5HRSh4Li4uKQorI2RlZmluZSBJTlZBTF9DQUNIRV9BTkRfV0FJVCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uCiAKLSNkZWZpbmUgVURFTEFZKG1hcCwgY2hpcCwgYWRyLCB1c2VjKSAgXAotZG8geyAgXAotCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsgIFwKLQljZmlfdWRlbGF5KHVzZWMpOyAgXAotCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7ICBcCi19IHdoaWxlICgwKQorc3RhdGljIGludCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uKAorCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKKwkJdW5zaWduZWQgbG9uZyBjbWRfYWRyLCB1bnNpZ25lZCBsb25nIGludmFsX2FkciwgaW50IGludmFsX2xlbiwKKwkJaW50ICpjaGlwX29wX3RpbWUgKQoreworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OworCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LID0gQ01EKDB4ODApOworCWludCB6LCBjaGlwX3N0YXRlID0gY2hpcC0+c3RhdGU7CisJdW5zaWduZWQgbG9uZyB0aW1lbzsKIAotI2RlZmluZSBJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIGFkciwgbGVuLCB1c2VjKSAgXAotZG8geyAgXAotCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsgIFwKLQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGFkciwgbGVuKTsgIFwKLQljZmlfdWRlbGF5KHVzZWMpOyAgXAotCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7ICBcCi19IHdoaWxlICgwKQorCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKKwlpZiAoaW52YWxfbGVuKQorCQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGludmFsX2FkciwgaW52YWxfbGVuKTsKKwlpZiAoKmNoaXBfb3BfdGltZSkKKwkJY2ZpX3VkZWxheSgqY2hpcF9vcF90aW1lKTsKKwlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCisJdGltZW8gPSAqY2hpcF9vcF90aW1lICogOCAqIEhaIC8gMTAwMDAwMDsKKwlpZiAodGltZW8gPCBIWi8yKQorCQl0aW1lbyA9IEhaLzI7CisJdGltZW8gKz0gamlmZmllczsKKworCXogPSAwOworCWZvciAoOzspIHsKKwkJaWYgKGNoaXAtPnN0YXRlICE9IGNoaXBfc3RhdGUpIHsKKwkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIG9wZXJhdGlvbjogc2xlZXAgKi8KKwkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKKwkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKKwkJCXNjaGVkdWxlKCk7CisJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKKwkJCXRpbWVvID0gamlmZmllcyArIChIWiAvIDIpOyAvKiBGSVhNRSAqLworCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKKwkJaWYgKG1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBzdGF0dXNfT0ssIHN0YXR1c19PSykpCisJCQlicmVhazsKKworCQkvKiBPSyBTdGlsbCB3YWl0aW5nICovCisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgeworCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOworCQkJcmV0dXJuIC1FVElNRTsKKwkJfQorCisJCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCisJCXorKzsKKwkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOworCQljZmlfdWRlbGF5KDEpOworCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCX0KKworCWlmICgheikgeworCQlpZiAoIS0tKCpjaGlwX29wX3RpbWUpKQorCQkJKmNoaXBfb3BfdGltZSA9IDE7CisJfSBlbHNlIGlmICh6ID4gMSkKKwkJKysoKmNoaXBfb3BfdGltZSk7CisKKwkvKiBEb25lIGFuZCBoYXBweS4gKi8KKyAJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJcmV0dXJuIDA7Cit9CiAKICNlbmRpZgogCisjZGVmaW5lIFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGFkciwgdWRlbGF5KSBcCisJKHsgaW50IF9fdWRlbGF5ID0gKHVkZWxheSk7IFwKKwkgICBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwgMCwgMCwgJl9fdWRlbGF5KTsgfSkKKworCiBzdGF0aWMgaW50IGRvX3BvaW50X29uZWNoaXAgKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLCBsb2ZmX3QgYWRyLCBzaXplX3QgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgY21kX2FkZHI7CkBAIC0xMjUyLDE0ICsxMjk5LDExIEBACiAJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkciwgbWFwX3dvcmQgZGF0dW0sIGludCBtb2RlKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwotCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LLCB3cml0ZV9jbWQ7Ci0JdW5zaWduZWQgbG9uZyB0aW1lbzsKLQlpbnQgeiwgcmV0PTA7CisJbWFwX3dvcmQgc3RhdHVzLCB3cml0ZV9jbWQ7CisJaW50IHJldD0wOwogCiAJYWRyICs9IGNoaXAtPnN0YXJ0OwogCi0JLyogTGV0J3MgZGV0ZXJtaW5lIHRob3NlIGFjY29yZGluZyB0byB0aGUgaW50ZXJsZWF2ZSBvbmx5IG9uY2UgKi8KLQlzdGF0dXNfT0sgPSBDTUQoMHg4MCk7CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBGTF9XUklUSU5HOgogCQl3cml0ZV9jbWQgPSAoY2ZpLT5jZmlxLT5QX0lEICE9IDB4MDIwMCkgPyBDTUQoMHg0MCkgOiBDTUQoMHg0MSk7CkBAIC0xMjg1LDU3ICsxMzI5LDE3IEBACiAJbWFwX3dyaXRlKG1hcCwgZGF0dW0sIGFkcik7CiAJY2hpcC0+c3RhdGUgPSBtb2RlOwogCi0JSU5WQUxJREFURV9DQUNIRV9VREVMQVkobWFwLCBjaGlwLCBhZHIsCi0JCQkJYWRyLCBtYXBfYmFua3dpZHRoKG1hcCksCi0JCQkJY2hpcC0+d29yZF93cml0ZV90aW1lKTsKLQotCXRpbWVvID0gamlmZmllcyArIChIWi8yKTsKLQl6ID0gMDsKLQlmb3IgKDs7KSB7Ci0JCWlmIChjaGlwLT5zdGF0ZSAhPSBtb2RlKSB7Ci0JCQkvKiBTb21lb25lJ3Mgc3VzcGVuZGVkIHRoZSB3cml0ZS4gU2xlZXAgKi8KLQkJCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwotCi0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXRpbWVvID0gamlmZmllcyArIChIWiAvIDIpOyAvKiBGSVhNRSAqLwotCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOwotCQlpZiAobWFwX3dvcmRfYW5kZXF1YWwobWFwLCBzdGF0dXMsIHN0YXR1c19PSywgc3RhdHVzX09LKSkKLQkJCWJyZWFrOwotCi0JCS8qIE9LIFN0aWxsIHdhaXRpbmcgKi8KLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW8pKSB7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7Ci0JCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKLQkJCXhpcF9lbmFibGUobWFwLCBjaGlwLCBhZHIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogd29yZCB3cml0ZSBlcnJvciAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOwotCQkJcmV0ID0gLUVJTzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJLyogTGF0ZW5jeSBpc3N1ZXMuIERyb3AgdGhlIGxvY2ssIHdhaXQgYSB3aGlsZSBhbmQgcmV0cnkgKi8KLQkJeisrOwotCQlVREVMQVkobWFwLCBjaGlwLCBhZHIsIDEpOworCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgYWRyLAorCQkJCSAgIGFkciwgbWFwX2Jhbmt3aWR0aChtYXApLAorCQkJCSAgICZjaGlwLT53b3JkX3dyaXRlX3RpbWUpOworCWlmIChyZXQpIHsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdvcmQgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQotCWlmICgheikgewotCQljaGlwLT53b3JkX3dyaXRlX3RpbWUtLTsKLQkJaWYgKCFjaGlwLT53b3JkX3dyaXRlX3RpbWUpCi0JCQljaGlwLT53b3JkX3dyaXRlX3RpbWUgPSAxOwotCX0KLQlpZiAoeiA+IDEpCi0JCWNoaXAtPndvcmRfd3JpdGVfdGltZSsrOwotCi0JLyogRG9uZSBhbmQgaGFwcHkuICovCi0JY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CiAKIAkvKiBjaGVjayBmb3IgZXJyb3JzICovCisJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBhZHIpOwogCWlmIChtYXBfd29yZF9iaXRzc2V0KG1hcCwgc3RhdHVzLCBDTUQoMHgxYSkpKSB7CiAJCXVuc2lnbmVkIGxvbmcgY2hpcHN0YXR1cyA9IE1FUkdFU1RBVFVTKHN0YXR1cyk7CiAKQEAgLTE0NTIsOSArMTQ1Niw5IEBACiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgKnB2ZWNfc2VlaywgaW50IGxlbikKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQltYXBfd29yZCBzdGF0dXMsIHN0YXR1c19PSywgd3JpdGVfY21kLCBkYXR1bTsKLQl1bnNpZ25lZCBsb25nIGNtZF9hZHIsIHRpbWVvOwotCWludCB3YnVmc2l6ZSwgeiwgcmV0PTAsIHdvcmRfZ2FwLCB3b3JkczsKKwltYXBfd29yZCBzdGF0dXMsIHdyaXRlX2NtZCwgZGF0dW07CisJdW5zaWduZWQgbG9uZyBjbWRfYWRyOworCWludCByZXQsIHdidWZzaXplLCB3b3JkX2dhcCwgd29yZHM7CiAJY29uc3Qgc3RydWN0IGt2ZWMgKnZlYzsKIAl1bnNpZ25lZCBsb25nIHZlY19zZWVrOwogCkBAIC0xNDYzLDcgKzE0NjcsNiBAQAogCWNtZF9hZHIgPSBhZHIgJiB+KHdidWZzaXplLTEpOwogCiAJLyogTGV0J3MgZGV0ZXJtaW5lIHRoaXMgYWNjb3JkaW5nIHRvIHRoZSBpbnRlcmxlYXZlIG9ubHkgb25jZSAqLwotCXN0YXR1c19PSyA9IENNRCgweDgwKTsKIAl3cml0ZV9jbWQgPSAoY2ZpLT5jZmlxLT5QX0lEICE9IDB4MDIwMCkgPyBDTUQoMHhlOCkgOiBDTUQoMHhlOSk7CiAKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwpAQCAtMTQ3NywxMiArMTQ4MCwxNCBAQAogCUVOQUJMRV9WUFAobWFwKTsKIAl4aXBfZGlzYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwogCi0JLyogpzQuOCBvZiB0aGUgMjhGeHh4SjNBIGRhdGFzaGVldCBzYXlzICJBbnkgdGltZSBTUi40IGFuZC9vciBTUi41IGlzIHNldAorCS8qIMKnNC44IG9mIHRoZSAyOEZ4eHhKM0EgZGF0YXNoZWV0IHNheXMgIkFueSB0aW1lIFNSLjQgYW5kL29yIFNSLjUgaXMgc2V0CiAJICAgWy4uLl0sIHRoZSBkZXZpY2Ugd2lsbCBub3QgYWNjZXB0IGFueSBtb3JlIFdyaXRlIHRvIEJ1ZmZlciBjb21tYW5kcyIuCiAJICAgU28gd2UgbXVzdCBjaGVjayBoZXJlIGFuZCByZXNldCB0aG9zZSBiaXRzIGlmIHRoZXkncmUgc2V0LiBPdGhlcndpc2UKIAkgICB3ZSdyZSBqdXN0IHBpc3NpbmcgaW4gdGhlIHdpbmQgKi8KLQlpZiAoY2hpcC0+c3RhdGUgIT0gRkxfU1RBVFVTKQorCWlmIChjaGlwLT5zdGF0ZSAhPSBGTF9TVEFUVVMpIHsKIAkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJfQogCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CiAJaWYgKG1hcF93b3JkX2JpdHNzZXQobWFwLCBzdGF0dXMsIENNRCgweDMwKSkpIHsKIAkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwpAQCAtMTQ5MywzMiArMTQ5OCwyMCBAQAogCX0KIAogCWNoaXAtPnN0YXRlID0gRkxfV1JJVElOR19UT19CVUZGRVI7Ci0KLQl6ID0gMDsKLQlmb3IgKDs7KSB7Ci0JCW1hcF93cml0ZShtYXAsIHdyaXRlX2NtZCwgY21kX2Fkcik7Ci0KKwltYXBfd3JpdGUobWFwLCB3cml0ZV9jbWQsIGNtZF9hZHIpOworCXJldCA9IFdBSVRfVElNRU9VVChtYXAsIGNoaXAsIGNtZF9hZHIsIDApOworCWlmIChyZXQpIHsKKwkJLyogQXJnaC4gTm90IHJlYWR5IGZvciB3cml0ZSB0byBidWZmZXIgKi8KKwkJbWFwX3dvcmQgWHN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CisJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgY21kX2Fkcik7CisJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwogCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGNtZF9hZHIpOwotCQlpZiAobWFwX3dvcmRfYW5kZXF1YWwobWFwLCBzdGF0dXMsIHN0YXR1c19PSywgc3RhdHVzX09LKSkKLQkJCWJyZWFrOwotCi0JCVVERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIDEpOwotCi0JCWlmICgrK3ogPiAyMCkgewotCQkJLyogQXJnaC4gTm90IHJlYWR5IGZvciB3cml0ZSB0byBidWZmZXIgKi8KLQkJCW1hcF93b3JkIFhzdGF0dXM7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwotCQkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7Ci0JCQlYc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKLQkJCS8qIE9kZC4gQ2xlYXIgc3RhdHVzIGJpdHMgKi8KLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDUwKSwgY21kX2Fkcik7Ci0JCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2hpcCBub3QgcmVhZHkgZm9yIGJ1ZmZlciB3cml0ZS4gc3RhdHVzID0gJWx4LCBYc3RhdHVzID0gJWx4XG4iLAotCQkJICAgICAgIG1hcC0+bmFtZSwgc3RhdHVzLnhbMF0sIFhzdGF0dXMueFswXSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NTApLCBjbWRfYWRyKTsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDaGlwIG5vdCByZWFkeSBmb3IgYnVmZmVyIHdyaXRlLiBYc3RhdHVzID0gJWx4LCBzdGF0dXMgPSAlbHhcbiIsCisJCQkJbWFwLT5uYW1lLCBYc3RhdHVzLnhbMF0sIHN0YXR1cy54WzBdKTsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogRmlndXJlIG91dCB0aGUgbnVtYmVyIG9mIHdvcmRzIHRvIHdyaXRlICovCkBAIC0xNTczLDU2ICsxNTY2LDE5IEBACiAJbWFwX3dyaXRlKG1hcCwgQ01EKDB4ZDApLCBjbWRfYWRyKTsKIAljaGlwLT5zdGF0ZSA9IEZMX1dSSVRJTkc7CiAKLQlJTlZBTElEQVRFX0NBQ0hFX1VERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsCi0JCQkJYWRyLCBsZW4sCi0JCQkJY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUpOwotCi0JdGltZW8gPSBqaWZmaWVzICsgKEhaLzIpOwotCXogPSAwOwotCWZvciAoOzspIHsKLQkJaWYgKGNoaXAtPnN0YXRlICE9IEZMX1dSSVRJTkcpIHsKLQkJCS8qIFNvbWVvbmUncyBzdXNwZW5kZWQgdGhlIHdyaXRlLiBTbGVlcCAqLwotCQkJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlhZGRfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKLQkJCXRpbWVvID0gamlmZmllcyArIChIWiAvIDIpOyAvKiBGSVhNRSAqLwotCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3RhdHVzID0gbWFwX3JlYWQobWFwLCBjbWRfYWRyKTsKLQkJaWYgKG1hcF93b3JkX2FuZGVxdWFsKG1hcCwgc3RhdHVzLCBzdGF0dXNfT0ssIHN0YXR1c19PSykpCi0JCQlicmVhazsKLQotCQkvKiBPSyBTdGlsbCB3YWl0aW5nICovCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvKSkgewotCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGNtZF9hZHIpOwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVmZmVyIHdyaXRlIGVycm9yIChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7Ci0JCQlyZXQgPSAtRUlPOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBMYXRlbmN5IGlzc3Vlcy4gRHJvcCB0aGUgbG9jaywgd2FpdCBhIHdoaWxlIGFuZCByZXRyeSAqLwotCQl6Kys7Ci0JCVVERUxBWShtYXAsIGNoaXAsIGNtZF9hZHIsIDEpOworCXJldCA9IElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwKKwkJCQkgICBhZHIsIGxlbiwKKwkJCQkgICAmY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUpOworCWlmIChyZXQpIHsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKKwkJY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CisJCXhpcF9lbmFibGUobWFwLCBjaGlwLCBjbWRfYWRyKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYnVmZmVyIHdyaXRlIGVycm9yIChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KLQlpZiAoIXopIHsKLQkJY2hpcC0+YnVmZmVyX3dyaXRlX3RpbWUtLTsKLQkJaWYgKCFjaGlwLT5idWZmZXJfd3JpdGVfdGltZSkKLQkJCWNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lID0gMTsKLQl9Ci0JaWYgKHogPiAxKQotCQljaGlwLT5idWZmZXJfd3JpdGVfdGltZSsrOwotCi0JLyogRG9uZSBhbmQgaGFwcHkuICovCi0gCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwogCiAJLyogY2hlY2sgZm9yIGVycm9ycyAqLworCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CiAJaWYgKG1hcF93b3JkX2JpdHNzZXQobWFwLCBzdGF0dXMsIENNRCgweDFhKSkpIHsKIAkJdW5zaWduZWQgbG9uZyBjaGlwc3RhdHVzID0gTUVSR0VTVEFUVVMoc3RhdHVzKTsKIApAQCAtMTY5Myw2ICsxNjQ5LDExIEBACiAJCQlpZiAoY2hpcG51bSA9PSBjZmktPm51bWNoaXBzKQogCQkJCXJldHVybiAwOwogCQl9CisKKwkJLyogQmUgbmljZSBhbmQgcmVzY2hlZHVsZSB3aXRoIHRoZSBjaGlwIGluIGEgdXNhYmxlIHN0YXRlIGZvciBvdGhlcgorCQkgICBwcm9jZXNzZXMuICovCisJCWNvbmRfcmVzY2hlZCgpOworCiAJfSB3aGlsZSAobGVuKTsKIAogCXJldHVybiAwOwpAQCAtMTcxMywxNyArMTY3NCwxMiBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRyLCBpbnQgbGVuLCB2b2lkICp0aHVuaykKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKLQltYXBfd29yZCBzdGF0dXMsIHN0YXR1c19PSzsKLQl1bnNpZ25lZCBsb25nIHRpbWVvOworCW1hcF93b3JkIHN0YXR1czsKIAlpbnQgcmV0cmllcyA9IDM7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAogCWFkciArPSBjaGlwLT5zdGFydDsKIAotCS8qIExldCdzIGRldGVybWluZSB0aGlzIGFjY29yZGluZyB0byB0aGUgaW50ZXJsZWF2ZSBvbmx5IG9uY2UgKi8KLQlzdGF0dXNfT0sgPSBDTUQoMHg4MCk7Ci0KICByZXRyeToKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCXJldCA9IGdldF9jaGlwKG1hcCwgY2hpcCwgYWRyLCBGTF9FUkFTSU5HKTsKQEAgLTE3NDUsNDggKzE3MDEsMTUgQEAKIAljaGlwLT5zdGF0ZSA9IEZMX0VSQVNJTkc7CiAJY2hpcC0+ZXJhc2Vfc3VzcGVuZGVkID0gMDsKIAotCUlOVkFMSURBVEVfQ0FDSEVfVURFTEFZKG1hcCwgY2hpcCwgYWRyLAotCQkJCWFkciwgbGVuLAotCQkJCWNoaXAtPmVyYXNlX3RpbWUqMTAwMC8yKTsKLQotCS8qIEZJWE1FLiBVc2UgYSB0aW1lciB0byBjaGVjayB0aGlzLCBhbmQgcmV0dXJuIGltbWVkaWF0ZWx5LiAqLwotCS8qIE9uY2UgdGhlIHN0YXRlIG1hY2hpbmUncyBrbm93biB0byBiZSB3b3JraW5nIEknbGwgZG8gdGhhdCAqLwotCi0JdGltZW8gPSBqaWZmaWVzICsgKEhaKjIwKTsKLQlmb3IgKDs7KSB7Ci0JCWlmIChjaGlwLT5zdGF0ZSAhPSBGTF9FUkFTSU5HKSB7Ci0JCQkvKiBTb21lb25lJ3Mgc3VzcGVuZGVkIHRoZSBlcmFzZS4gU2xlZXAgKi8KLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCQkJc2NoZWR1bGUoKTsKLQkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChjaGlwLT5lcmFzZV9zdXNwZW5kZWQpIHsKLQkJCS8qIFRoaXMgZXJhc2Ugd2FzIHN1c3BlbmRlZCBhbmQgcmVzdW1lZC4KLQkJCSAgIEFkanVzdCB0aGUgdGltZW91dCAqLwotCQkJdGltZW8gPSBqaWZmaWVzICsgKEhaKjIwKTsgLyogRklYTUUgKi8KLQkJCWNoaXAtPmVyYXNlX3N1c3BlbmRlZCA9IDA7Ci0JCX0KLQotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQotCQkJYnJlYWs7Ci0KLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBibG9jayBlcmFzZSBlcnJvcjogKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKLQkJCXJldCA9IC1FSU87Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCi0JCVVERUxBWShtYXAsIGNoaXAsIGFkciwgMTAwMDAwMC9IWik7CisJcmV0ID0gSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsCisJCQkJICAgYWRyLCBsZW4sCisJCQkJICAgJmNoaXAtPmVyYXNlX3RpbWUpOworCWlmIChyZXQpIHsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOworCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJsb2NrIGVyYXNlIGVycm9yOiAoc3RhdHVzIHRpbWVvdXQpXG4iLCBtYXAtPm5hbWUpOworCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBXZSd2ZSBicm9rZW4gdGhpcyBiZWZvcmUuIEl0IGRvZXNuJ3QgaHVydCB0byBiZSBzYWZlICovCkBAIC0xODE1LDcgKzE3MzgsNiBAQAogCQkJcmV0ID0gLUVJTzsKIAkJfSBlbHNlIGlmIChjaGlwc3RhdHVzICYgMHgyMCAmJiByZXRyaWVzLS0pIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJibG9jayBlcmFzZSBmYWlsZWQgYXQgMHglMDhseDogc3RhdHVzIDB4JWx4LiBSZXRyeWluZy4uLlxuIiwgYWRyLCBjaGlwc3RhdHVzKTsKLQkJCXRpbWVvID0gamlmZmllcyArIEhaOwogCQkJcHV0X2NoaXAobWFwLCBjaGlwLCBhZHIpOwogCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwogCQkJZ290byByZXRyeTsKQEAgLTE5MjEsMTUgKzE4NDMsMTEgQEAKIHsKIAlzdHJ1Y3QgY2ZpX3ByaXZhdGUgKmNmaSA9IG1hcC0+ZmxkcnZfcHJpdjsKIAlzdHJ1Y3QgY2ZpX3ByaV9pbnRlbGV4dCAqZXh0cCA9IGNmaS0+Y21kc2V0X3ByaXY7Ci0JbWFwX3dvcmQgc3RhdHVzLCBzdGF0dXNfT0s7Ci0JdW5zaWduZWQgbG9uZyB0aW1lbyA9IGppZmZpZXMgKyBIWjsKKwlpbnQgdWRlbGF5OwogCWludCByZXQ7CiAKIAlhZHIgKz0gY2hpcC0+c3RhcnQ7CiAKLQkvKiBMZXQncyBkZXRlcm1pbmUgdGhpcyBhY2NvcmRpbmcgdG8gdGhlIGludGVybGVhdmUgb25seSBvbmNlICovCi0Jc3RhdHVzX09LID0gQ01EKDB4ODApOwotCiAJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKIAlyZXQgPSBnZXRfY2hpcChtYXAsIGNoaXAsIGFkciwgRkxfTE9DS0lORyk7CiAJaWYgKHJldCkgewpAQCAtMTk1NCw0MSArMTg3MiwyMSBAQAogCSAqIElmIEluc3RhbnQgSW5kaXZpZHVhbCBCbG9jayBMb2NraW5nIHN1cHBvcnRlZCB0aGVuIG5vIG5lZWQKIAkgKiB0byBkZWxheS4KIAkgKi8KKwl1ZGVsYXkgPSAoIWV4dHAgfHwgIShleHRwLT5GZWF0dXJlU3VwcG9ydCAmICgxIDw8IDUpKSkgPyAxMDAwMDAwL0haIDogMDsKIAotCWlmICghZXh0cCB8fCAhKGV4dHAtPkZlYXR1cmVTdXBwb3J0ICYgKDEgPDwgNSkpKQotCQlVREVMQVkobWFwLCBjaGlwLCBhZHIsIDEwMDAwMDAvSFopOwotCi0JLyogRklYTUUuIFVzZSBhIHRpbWVyIHRvIGNoZWNrIHRoaXMsIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkuICovCi0JLyogT25jZSB0aGUgc3RhdGUgbWFjaGluZSdzIGtub3duIHRvIGJlIHdvcmtpbmcgSSdsbCBkbyB0aGF0ICovCi0KLQl0aW1lbyA9IGppZmZpZXMgKyAoSFoqMjApOwotCWZvciAoOzspIHsKLQotCQlzdGF0dXMgPSBtYXBfcmVhZChtYXAsIGFkcik7Ci0JCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQotCQkJYnJlYWs7Ci0KLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKLQkJCW1hcF93cml0ZShtYXAsIENNRCgweDcwKSwgYWRyKTsKLQkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwotCQkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBibG9jayB1bmxvY2sgZXJyb3I6IChzdGF0dXMgdGltZW91dClcbiIsIG1hcC0+bmFtZSk7Ci0JCQlwdXRfY2hpcChtYXAsIGNoaXAsIGFkcik7Ci0JCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCi0JCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCi0JCVVERUxBWShtYXAsIGNoaXAsIGFkciwgMSk7CisJcmV0ID0gV0FJVF9USU1FT1VUKG1hcCwgY2hpcCwgYWRyLCB1ZGVsYXkpOworCWlmIChyZXQpIHsKKwkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOworCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKKwkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJsb2NrIHVubG9jayBlcnJvcjogKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JLyogRG9uZSBhbmQgaGFwcHkuICovCi0JY2hpcC0+c3RhdGUgPSBGTF9TVEFUVVM7CiAJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7Ci0JcHV0X2NoaXAobWFwLCBjaGlwLCBhZHIpOworb3V0OglwdXRfY2hpcChtYXAsIGNoaXAsIGFkcik7CiAJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY2ZpX2ludGVsZXh0X2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pCkBAIC0yNDQ1LDI4ICsyMzQzLDggQEAKIAlrZnJlZShtdGQtPmVyYXNlcmVnaW9ucyk7CiB9CiAKLXN0YXRpYyBjaGFyIGltX25hbWVfMDAwMVtdID0gImNmaV9jbWRzZXRfMDAwMSI7Ci1zdGF0aWMgY2hhciBpbV9uYW1lXzAwMDNbXSA9ICJjZmlfY21kc2V0XzAwMDMiOwotc3RhdGljIGNoYXIgaW1fbmFtZV8wMjAwW10gPSAiY2ZpX2NtZHNldF8wMjAwIjsKLQotc3RhdGljIGludCBfX2luaXQgY2ZpX2ludGVsZXh0X2luaXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZV8wMDAxLCBUSElTX01PRFVMRSwgJmNmaV9jbWRzZXRfMDAwMSk7Ci0JaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGltX25hbWVfMDAwMywgVEhJU19NT0RVTEUsICZjZmlfY21kc2V0XzAwMDEpOwotCWludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lXzAyMDAsIFRISVNfTU9EVUxFLCAmY2ZpX2NtZHNldF8wMDAxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGNmaV9pbnRlbGV4dF9leGl0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZV8wMDAxKTsKLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lXzAwMDMpOwotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWVfMDIwMCk7Ci19Ci0KLW1vZHVsZV9pbml0KGNmaV9pbnRlbGV4dF9pbml0KTsKLW1vZHVsZV9leGl0KGNmaV9pbnRlbGV4dF9leGl0KTsKLQogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPiBldCBhbC4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIGNoaXAgZHJpdmVyIGZvciBJbnRlbC9TaGFycCBmbGFzaCBjaGlwcyIpOworTU9EVUxFX0FMSUFTKCJjZmlfY21kc2V0XzAwMDMiKTsKK01PRFVMRV9BTElBUygiY2ZpX2NtZHNldF8wMjAwIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCmluZGV4IGFlZDEwYmQuLjFlMDFhZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMi5jCkBAIC0yMzYsNiArMjM2LDcgQEAKIAltdGQtPnJlc3VtZSAgPSBjZmlfYW1kc3RkX3Jlc3VtZTsKIAltdGQtPmZsYWdzICAgPSBNVERfQ0FQX05PUkZMQVNIOwogCW10ZC0+bmFtZSAgICA9IG1hcC0+bmFtZTsKKwltdGQtPndyaXRlc2l6ZSA9IDE7CiAKIAlpZiAoY2ZpLT5jZmlfbW9kZT09Q0ZJX01PREVfQ0ZJKXsKIAkJdW5zaWduZWQgY2hhciBib290bG9jOwpAQCAtMzI2LDcgKzMyNyw3IEBACiAKIAlyZXR1cm4gY2ZpX2FtZHN0ZF9zZXR1cChtdGQpOwogfQotCitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAwMDIpOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjZmlfYW1kc3RkX3NldHVwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpAQCAtMTc1OCwyNSArMTc1OSw2IEBACiAJa2ZyZWUobXRkLT5lcmFzZXJlZ2lvbnMpOwogfQogCi1zdGF0aWMgY2hhciBpbV9uYW1lW109ImNmaV9jbWRzZXRfMDAwMiI7Ci0KLQotc3RhdGljIGludCBfX2luaXQgY2ZpX2FtZHN0ZF9pbml0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGltX25hbWUsIFRISVNfTU9EVUxFLCAmY2ZpX2NtZHNldF8wMDAyKTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZpX2FtZHN0ZF9leGl0KHZvaWQpCi17Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZSk7Ci19Ci0KLQotbW9kdWxlX2luaXQoY2ZpX2FtZHN0ZF9pbml0KTsKLW1vZHVsZV9leGl0KGNmaV9hbWRzdGRfZXhpdCk7Ci0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkNyb3NzbmV0IENvLiA8aW5mb0Bjcm9zc25ldC5jby5qcD4gZXQgYWwuIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBjaGlwIGRyaXZlciBmb3IgQU1EL0Z1aml0c3UgZmxhc2ggY2hpcHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAyMC5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMKaW5kZXggMDgwN2MxYy4uZmFlNzBhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDIwLmMKQEAgLTE2Miw2ICsxNjIsNyBAQAogCiAJcmV0dXJuIGNmaV9zdGFhX3NldHVwKG1hcCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjZmlfY21kc2V0XzAwMjApOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjZmlfc3RhYV9zZXR1cChzdHJ1Y3QgbWFwX2luZm8gKm1hcCkKIHsKQEAgLTIzNyw5ICsyMzgsOCBAQAogCW10ZC0+dW5sb2NrID0gY2ZpX3N0YWFfdW5sb2NrOwogCW10ZC0+c3VzcGVuZCA9IGNmaV9zdGFhX3N1c3BlbmQ7CiAJbXRkLT5yZXN1bWUgPSBjZmlfc3RhYV9yZXN1bWU7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0g7Ci0JbXRkLT5mbGFncyB8PSBNVERfRUNDOyAvKiBGSVhNRTogTm90IGFsbCBTVE1pY3JvIGZsYXNoZXMgaGF2ZSB0aGlzICovCi0JbXRkLT5lY2NzaXplID0gODsgLyogRklYTUU6IFNob3VsZCBiZSAwIGZvciBTVE1pY3JvIGZsYXNoZXMgdy9vdXQgRUNDICovCisJbXRkLT5mbGFncyA9IE1URF9DQVBfTk9SRkxBU0ggJiB+TVREX0JJVF9XUklURUFCTEU7CisJbXRkLT53cml0ZXNpemUgPSA4OyAvKiBGSVhNRTogU2hvdWxkIGJlIDAgZm9yIFNUTWljcm8gZmxhc2hlcyB3L291dCBFQ0MgKi8KIAltYXAtPmZsZHJ2ID0gJmNmaV9zdGFhX2NoaXBkcnY7CiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CkBAIC0xNDEwLDIwICsxNDEwLDQgQEAKIAlrZnJlZShjZmkpOwogfQogCi1zdGF0aWMgY2hhciBpbV9uYW1lW109ImNmaV9jbWRzZXRfMDAyMCI7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNmaV9zdGFhX2luaXQodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZjZmlfY21kc2V0XzAwMjApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2ZpX3N0YWFfZXhpdCh2b2lkKQotewotCWludGVyX21vZHVsZV91bnJlZ2lzdGVyKGltX25hbWUpOwotfQotCi1tb2R1bGVfaW5pdChjZmlfc3RhYV9pbml0KTsKLW1vZHVsZV9leGl0KGNmaV9zdGFhX2V4aXQpOwotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCmluZGV4IGU2MzZhYTguLjRiZjlmOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCisrKyBiL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9wcm9iZS5jCkBAIC0zNDksMTIgKzM0OSwxMiBAQAogCWVsc2UKIAkJcHJpbnRrKCJObyBWcHAgbGluZVxuIik7CiAKLQlwcmludGsoIlR5cGljYWwgYnl0ZS93b3JkIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAxPDxjZmlwLT5Xb3JkV3JpdGVUaW1lb3V0VHlwKTsKLQlwcmludGsoIk1heGltdW0gYnl0ZS93b3JkIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAoMTw8Y2ZpcC0+V29yZFdyaXRlVGltZW91dE1heCkgKiAoMTw8Y2ZpcC0+V29yZFdyaXRlVGltZW91dFR5cCkpOworCXByaW50aygiVHlwaWNhbCBieXRlL3dvcmQgd3JpdGUgdGltZW91dDogJWQgwrVzXG4iLCAxPDxjZmlwLT5Xb3JkV3JpdGVUaW1lb3V0VHlwKTsKKwlwcmludGsoIk1heGltdW0gYnl0ZS93b3JkIHdyaXRlIHRpbWVvdXQ6ICVkIMK1c1xuIiwgKDE8PGNmaXAtPldvcmRXcml0ZVRpbWVvdXRNYXgpICogKDE8PGNmaXAtPldvcmRXcml0ZVRpbWVvdXRUeXApKTsKIAogCWlmIChjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXAgfHwgY2ZpcC0+QnVmV3JpdGVUaW1lb3V0TWF4KSB7Ci0JCXByaW50aygiVHlwaWNhbCBmdWxsIGJ1ZmZlciB3cml0ZSB0aW1lb3V0OiAlZCC1c1xuIiwgMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0VHlwKTsKLQkJcHJpbnRrKCJNYXhpbXVtIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkILVzXG4iLCAoMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0TWF4KSAqICgxPDxjZmlwLT5CdWZXcml0ZVRpbWVvdXRUeXApKTsKKwkJcHJpbnRrKCJUeXBpY2FsIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkIMK1c1xuIiwgMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0VHlwKTsKKwkJcHJpbnRrKCJNYXhpbXVtIGZ1bGwgYnVmZmVyIHdyaXRlIHRpbWVvdXQ6ICVkIMK1c1xuIiwgKDE8PGNmaXAtPkJ1ZldyaXRlVGltZW91dE1heCkgKiAoMTw8Y2ZpcC0+QnVmV3JpdGVUaW1lb3V0VHlwKSk7CiAJfQogCWVsc2UKIAkJcHJpbnRrKCJGdWxsIGJ1ZmZlciB3cml0ZSBub3Qgc3VwcG9ydGVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2dlbl9wcm9iZS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKaW5kZXggNDFiZDU5ZC4uY2RiMGY1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvZ2VuX3Byb2JlLmMKQEAgLTM3LDggKzM3LDE1IEBACiAJaWYgKCFtdGQpCiAJCW10ZCA9IGNoZWNrX2NtZF9zZXQobWFwLCAwKTsgLyogVGhlbiB0aGUgc2Vjb25kYXJ5ICovCiAKLQlpZiAobXRkKQorCWlmIChtdGQpIHsKKwkJaWYgKG10ZC0+c2l6ZSA+IG1hcC0+c2l6ZSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVkdWNpbmcgdmlzaWJpbGl0eSBvZiAlbGRLaUIgY2hpcCB0byAlbGRLaUJcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpbXRkLT5zaXplID4+IDEwLCAKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyltYXAtPnNpemUgPj4gMTApOworCQkJbXRkLT5zaXplID0gbWFwLT5zaXplOworCQl9CiAJCXJldHVybiBtdGQ7CisJfQogCiAJcHJpbnRrKEtFUk5fV0FSTklORyJnZW5fcHJvYmU6IE5vIHN1cHBvcnRlZCBWZW5kb3IgQ29tbWFuZCBTZXQgZm91bmRcbiIpOwogCkBAIC0xMDAsNyArMTA3LDEyIEBACiAJICogQWxpZ24gYml0bWFwIHN0b3JhZ2Ugc2l6ZSB0byBmdWxsIGJ5dGUuCiAJICovCiAJbWF4X2NoaXBzID0gbWFwLT5zaXplID4+IGNmaS5jaGlwc2hpZnQ7Ci0JbWFwc2l6ZSA9IChtYXhfY2hpcHMgLyA4KSArICgobWF4X2NoaXBzICUgOCkgPyAxIDogMCk7CisJaWYgKCFtYXhfY2hpcHMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTk9SIGNoaXAgdG9vIGxhcmdlIHRvIGZpdCBpbiBtYXBwaW5nLiBBdHRlbXB0aW5nIHRvIGNvcGUuLi5cbiIpOworCQltYXhfY2hpcHMgPSAxOworCX0KKworCW1hcHNpemUgPSAobWF4X2NoaXBzICsgQklUU19QRVJfTE9ORy0xKSAvIEJJVFNfUEVSX0xPTkc7CiAJY2hpcF9tYXAgPSBrbWFsbG9jKG1hcHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcF9tYXApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGttYWxsb2MgZmFpbGVkIGZvciBDRkkgY2hpcCBtYXBcbiIsIG1hcC0+bmFtZSk7CkBAIC0xOTQsMjUgKzIwNiwyOCBAQAogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCV9fdTE2IHR5cGUgPSBwcmltYXJ5P2NmaS0+Y2ZpcS0+UF9JRDpjZmktPmNmaXEtPkFfSUQ7Ci0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFUykgJiYgZGVmaW5lZChIQVZFX0lOVEVSX01PRFVMRSkKLQljaGFyIHByb2JlbmFtZVszMl07CisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwljaGFyIHByb2JlbmFtZVsxNitzaXplb2YoTU9EVUxFX1NZTUJPTF9QUkVGSVgpXTsKIAljZmlfY21kc2V0X2ZuX3QgKnByb2JlX2Z1bmN0aW9uOwogCi0Jc3ByaW50Zihwcm9iZW5hbWUsICJjZmlfY21kc2V0XyU0LjRYIiwgdHlwZSk7CisJc3ByaW50Zihwcm9iZW5hbWUsIE1PRFVMRV9TWU1CT0xfUFJFRklYICJjZmlfY21kc2V0XyU0LjRYIiwgdHlwZSk7CiAKLQlwcm9iZV9mdW5jdGlvbiA9IGludGVyX21vZHVsZV9nZXRfcmVxdWVzdChwcm9iZW5hbWUsIHByb2JlbmFtZSk7CisJcHJvYmVfZnVuY3Rpb24gPSBfX3N5bWJvbF9nZXQocHJvYmVuYW1lKTsKKwlpZiAoIXByb2JlX2Z1bmN0aW9uKSB7CisJCXJlcXVlc3RfbW9kdWxlKHByb2JlbmFtZSArIHNpemVvZihNT0RVTEVfU1lNQk9MX1BSRUZJWCkgLSAxKTsKKwkJcHJvYmVfZnVuY3Rpb24gPSBfX3N5bWJvbF9nZXQocHJvYmVuYW1lKTsKKwl9CiAKIAlpZiAocHJvYmVfZnVuY3Rpb24pIHsKIAkJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAKIAkJbXRkID0gKCpwcm9iZV9mdW5jdGlvbikobWFwLCBwcmltYXJ5KTsKIAkJLyogSWYgaXQgd2FzIGhhcHB5LCBpdCdsbCBoYXZlIGluY3JlYXNlZCBpdHMgb3duIHVzZSBjb3VudCAqLwotCQlpbnRlcl9tb2R1bGVfcHV0KHByb2JlbmFtZSk7CisJCXN5bWJvbF9wdXRfYWRkcihwcm9iZV9mdW5jdGlvbik7CiAJCXJldHVybiBtdGQ7CiAJfQogI2VuZGlmCi0JcHJpbnRrKEtFUk5fTk9USUNFICJTdXBwb3J0IGZvciBjb21tYW5kIHNldCAlMDRYIG5vdCBwcmVzZW50XG4iLAotCSAgICAgICB0eXBlKTsKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlN1cHBvcnQgZm9yIGNvbW1hbmQgc2V0ICUwNFggbm90IHByZXNlbnRcbiIsIHR5cGUpOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0yMjYsMTIgKzI0MSw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJc3dpdGNoKHR5cGUpewotCQkvKiBVcmdoLiBJZmRlZnMuIFRoZSB2ZXJzaW9uIHdpdGggd2VhayBzeW1ib2xzIHdhcwotCQkgKiBfbXVjaF8gbmljZXIuIFNoYW1lIGl0IGRpZG4ndCBzZWVtIHRvIHdvcmsgb24KLQkJICogYW55dGhpbmcgYnV0IHg4NiwgcmVhbGx5LgotCQkgKiBCdXQgd2UgY2FuJ3QgcmVseSBpbiBpbnRlcl9tb2R1bGVfZ2V0KCkgYmVjYXVzZQotCQkgKiB0aGF0J2QgbWVhbiB3ZSBkZXBlbmQgb24gbGluayBvcmRlci4KLQkJICovCisJCS8qIFdlIG5lZWQgdGhlc2UgZm9yIHRoZSAhQ09ORklHX01PRFVMRVMgY2FzZSwKKwkJICAgYmVjYXVzZSBzeW1ib2xfZ2V0KCkgZG9lc24ndCB3b3JrIHRoZXJlICovCiAjaWZkZWYgQ09ORklHX01URF9DRklfSU5URUxFWFQKIAljYXNlIDB4MDAwMToKIAljYXNlIDB4MDAwMzoKQEAgLTI0Niw5ICsyNTcsOSBAQAogICAgICAgICBjYXNlIDB4MDAyMDoKIAkJcmV0dXJuIGNmaV9jbWRzZXRfMDAyMChtYXAsIHByaW1hcnkpOwogI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIGNmaV9jbWRzZXRfdW5rbm93bihtYXAsIHByaW1hcnkpOwogCX0KLQotCXJldHVybiBjZmlfY21kc2V0X3Vua25vd24obWFwLCBwcmltYXJ5KTsKIH0KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JhbS5jCmluZGV4IGJkMmU4NzYuLjc2MzkyNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yYW0uYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcmFtLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAltdGQtPnJlYWQgPSBtYXByYW1fcmVhZDsKIAltdGQtPndyaXRlID0gbWFwcmFtX3dyaXRlOwogCW10ZC0+c3luYyA9IG1hcHJhbV9ub3A7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfUkFNIHwgTVREX1ZPTEFUSUxFOworCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKIAogCW10ZC0+ZXJhc2VzaXplID0gUEFHRV9TSVpFOwogIAl3aGlsZShtdGQtPnNpemUgJiAobXRkLT5lcmFzZXNpemUgLSAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYyBiL2RyaXZlcnMvbXRkL2NoaXBzL21hcF9yb20uYwppbmRleCA2MjRjMTJjLi5iYzZlZTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9tYXBfcm9tLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvbWFwX3JvbS5jCkBAIC00Niw5ICs0Niw3IEBACiAJbXRkLT53cml0ZSA9IG1hcHJvbV93cml0ZTsKIAltdGQtPnN5bmMgPSBtYXByb21fbm9wOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JPTTsKLQltdGQtPmVyYXNlc2l6ZSA9IDEzMTA3MjsKLSAJd2hpbGUobXRkLT5zaXplICYgKG10ZC0+ZXJhc2VzaXplIC0gMSkpCi0JCW10ZC0+ZXJhc2VzaXplID4+PSAxOworCW10ZC0+ZXJhc2VzaXplID0gbWFwLT5zaXplOwogCiAJX19tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKTsKIAlyZXR1cm4gbXRkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL3NoYXJwLmMKaW5kZXggM2NjMGIyMy4uOTY3YWJiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvc2hhcnAuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9zaGFycC5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIAltdGQtPnN1c3BlbmQgPSBzaGFycF9zdXNwZW5kOwogCW10ZC0+cmVzdW1lID0gc2hhcnBfcmVzdW1lOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05PUkZMQVNIOworCW10ZC0+d3JpdGVzaXplID0gMTsKIAltdGQtPm5hbWUgPSBtYXAtPm5hbWU7CiAKIAltZW1zZXQoc2hhcnAsIDAsIHNpemVvZigqc2hhcnApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZwppbmRleCA3ZmFjNDM4Li4xNmMwMmI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCkBAIC00Nyw2ICs0NywxMSBAQAogCSAgYWNjZWxlcmF0b3IuICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgREVDc3RhdGlvbiA1MDAwLzJ4MCBvciBhCiAJICBERUNzeXN0ZW0gNTkwMCBlcXVpcHBlZCB3aXRoIHN1Y2ggYSBtb2R1bGUuCiAKKwkgIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUgKCA9IGNvZGUgd2hpY2ggY2FuIGJlCisJICBpbnNlcnRlZCBpbiBhbmQgcmVtb3ZlZCBmcm9tIHRoZSBydW5uaW5nIGtlcm5lbCB3aGVuZXZlciB5b3Ugd2FudCksCisJICBzYXkgTSBoZXJlIGFuZCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZSB3aWxsCisJICBiZSBjYWxsZWQgbXMwMi1udi5vLgorCiBjb25maWcgTVREX0RBVEFGTEFTSAogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBBVDQ1eHh4IERhdGFGbGFzaCIKIAlkZXBlbmRzIG9uIE1URCAmJiBTUElfTUFTVEVSICYmIEVYUEVSSU1FTlRBTApAQCAtMjA5LDcgKzIxNCw2IEBACiBjb25maWcgTVREX0RPQ1BST0JFCiAJdHJpc3RhdGUKIAlzZWxlY3QgTVREX0RPQ0VDQwotCXNlbGVjdCBPQlNPTEVURV9JTlRFUk1PRFVMRQogCiBjb25maWcgTVREX0RPQ0VDQwogCXRyaXN0YXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9NYWtlZmlsZQppbmRleCBiNjU3MzY3Li4wZjc4OGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvTWFrZWZpbGUKQEAgLTMsMTMgKzMsNiBAQAogIwogIyAkSWQ6IE1ha2VmaWxlLmNvbW1vbix2IDEuNyAyMDA0LzEyLzIyIDE3OjUxOjE1IGpvZXJuIEV4cCAkCiAKLSMgICAgICAgICAgICAgICAgICAgICAgICoqKiBCSUcgVUdMWSBOT1RFICoqKgotIwotIyBUaGUgcmVtb3ZhbCBvZiBnZXRfbW9kdWxlX3N5bWJvbCgpIGFuZCByZXBsYWNlbWVudCB3aXRoCi0jIGludGVyX21vZHVsZV9yZWdpc3RlcigpIGV0IGFsIGhhcyBpbnRyb2R1Y2VkIGEgbGluayBvcmRlciBkZXBlbmRlbmN5Ci0jIGhlcmUgd2hlcmUgcHJldmlvdXNseSB0aGVyZSB3YXMgbm9uZS4gIFdlIG5vdyBoYXZlIHRvIGVuc3VyZSB0aGF0Ci0jIGRvYzIwMFswMV0ubyBhcmUgbGlua2VkIGJlZm9yZSBkb2Nwcm9iZS5vCi0KIG9iai0kKENPTkZJR19NVERfRE9DMjAwMCkJKz0gZG9jMjAwMC5vCiBvYmotJChDT05GSUdfTVREX0RPQzIwMDEpCSs9IGRvYzIwMDEubwogb2JqLSQoQ09ORklHX01URF9ET0MyMDAxUExVUykJKz0gZG9jMjAwMXBsdXMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKaW5kZXggNDE2MGI4My4uMGQ5OGMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCkBAIC00LDcgKzQsNyBAQAogICogYmxvY2sybXRkLmMgLSBjcmVhdGUgYW4gbXRkIGZyb20gYSBibG9jayBkZXZpY2UKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMglTaW1vbiBFdmFucyA8c3BzZUBzZWNyZXQub3JnLnVrPgotICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUJSvZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNglKw7ZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CiAgKgogICogTGljZW5jZTogR1BMCiAgKi8KQEAgLTMzMSw3ICszMzEsNiBAQAogCWRldi0+bXRkLndyaXRldiA9IGRlZmF1bHRfbXRkX3dyaXRldjsKIAlkZXYtPm10ZC5zeW5jID0gYmxvY2sybXRkX3N5bmM7CiAJZGV2LT5tdGQucmVhZCA9IGJsb2NrMm10ZF9yZWFkOwotCWRldi0+bXRkLnJlYWR2ID0gZGVmYXVsdF9tdGRfcmVhZHY7CiAJZGV2LT5tdGQucHJpdiA9IGRldjsKIAlkZXYtPm10ZC5vd25lciA9IFRISVNfTU9EVUxFOwogCkBAIC0zNTEsNiArMzUwLDEyIEBACiB9CiAKIAorLyogVGhpcyBmdW5jdGlvbiB3b3JrcyBzaW1pbGFyIHRvIHJlZ3VsZXIgc3RydG91bC4gIEluIGFkZGl0aW9uLCBpdAorICogYWxsb3dzIHNvbWUgc3VmZml4ZXMgZm9yIGEgbW9yZSBodW1hbi1yZWFkYWJsZSBudW1iZXIgZm9ybWF0OgorICoga2ksIEtpLCBraUIsIEtpQgktIG11bHRpcGx5IHJlc3VsdCB3aXRoIDEwMjQKKyAqIE1pLCBNaUIJCS0gbXVsdGlwbHkgcmVzdWx0IHdpdGggMTAyNF4yCisgKiBHaSwgR2lCCQktIG11bHRpcGx5IHJlc3VsdCB3aXRoIDEwMjReMworICovCiBzdGF0aWMgaW50IHVzdHJ0b3VsKGNvbnN0IGNoYXIgKmNwLCBjaGFyICoqZW5kcCwgdW5zaWduZWQgaW50IGJhc2UpCiB7CiAJdW5zaWduZWQgbG9uZyByZXN1bHQgPSBzaW1wbGVfc3RydG91bChjcCwgZW5kcCwgYmFzZSk7CkBAIC0zNTksMTEgKzM2NCwxNiBAQAogCQlyZXN1bHQgKj0gMTAyNDsKIAljYXNlICdNJzoKIAkJcmVzdWx0ICo9IDEwMjQ7CisJY2FzZSAnSyc6CiAJY2FzZSAnayc6CiAJCXJlc3VsdCAqPSAxMDI0OwogCS8qIEJ5IGR3bXcyIGVkaXRvcmlhbCBkZWNyZWUsICJraSIsICJNaSIgb3IgIkdpIiBhcmUgdG8gYmUgdXNlZC4gKi8KLQkJaWYgKCgqZW5kcClbMV0gPT0gJ2knKQotCQkJKCplbmRwKSArPSAyOworCQlpZiAoKCplbmRwKVsxXSA9PSAnaScpIHsKKwkJCWlmICgoKmVuZHApWzJdID09ICdCJykKKwkJCQkoKmVuZHApICs9IDM7CisJCQllbHNlCisJCQkJKCplbmRwKSArPSAyOworCQl9CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CkBAIC00MTgsNyArNDI4LDggQEAKIAogc3RhdGljIGludCBibG9jazJtdGRfc2V0dXAoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKLQljaGFyIGJ1Zls4MCsxMl0sICpzdHI9YnVmOyAvKiA4MCBmb3IgZGV2aWNlLCAxMiBmb3IgZXJhc2Ugc2l6ZSAqLworCWNoYXIgYnVmWzgwKzEyXTsgLyogODAgZm9yIGRldmljZSwgMTIgZm9yIGVyYXNlIHNpemUgKi8KKwljaGFyICpzdHIgPSBidWY7CiAJY2hhciAqdG9rZW5bMl07CiAJY2hhciAqbmFtZTsKIAlzaXplX3QgZXJhc2Vfc2l6ZSA9IFBBR0VfU0laRTsKQEAgLTQzMCw3ICs0NDEsNyBAQAogCXN0cmNweShzdHIsIHZhbCk7CiAJa2lsbF9maW5hbF9uZXdsaW5lKHN0cik7CiAKLQlmb3IgKGk9MDsgaTwyOyBpKyspCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKIAkJdG9rZW5baV0gPSBzdHJzZXAoJnN0ciwgIiwiKTsKIAogCWlmIChzdHIpCkBAIC00NDksOCArNDYwLDEwIEBACiAKIAlpZiAodG9rZW5bMV0pIHsKIAkJcmV0ID0gcGFyc2VfbnVtKCZlcmFzZV9zaXplLCB0b2tlblsxXSk7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCWtmcmVlKG5hbWUpOwogCQkJcGFyc2VfZXJyKCJpbGxlZ2FsIGVyYXNlIHNpemUiKTsKKwkJfQogCX0KIAogCWFkZF9kZXZpY2UobmFtZSwgZXJhc2Vfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCmluZGV4IDIzZTdhNWMuLmM1NGU0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMC5jCkBAIC01OSwxMyArNTksMTAgQEAKIAkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CiBzdGF0aWMgaW50IGRvY193cml0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKIAkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYsIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBkb2Nfd3JpdGV2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4sCi0JCQkgIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CitzdGF0aWMgaW50IGRvY19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCXN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKK3N0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiBzdGF0aWMgaW50IGRvY193cml0ZV9vb2Jfbm9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAogCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CiBzdGF0aWMgaW50IGRvY19lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cik7CkBAIC01MTcsMTYgKzUxNCw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgaW1fbmFtZVtdID0gIkRvQzJrX2luaXQiOwotCi0vKiBUaGlzIHJvdXRpbmUgaXMgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbXRkIGNvZGUgdmlhCi0gKiBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIuICBJdCBtdXN0IG9ubHkgYmUgYWNjZXNzZWQgdGhyb3VnaAotICogaW50ZXJfbW9kdWxlX2dldCB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gIFRoZQotICogYWRkcmVzc2VzIHBhc3NlZCBiYWNrIGluIG10ZCBhcmUgdmFsaWQgYXMgbG9uZyBhcyB0aGUgdXNlIGNvdW50IG9mCi0gKiB0aGlzIG1vZHVsZSBpcyBub24temVybywgaS5lLiBiZXR3ZWVuIGludGVyX21vZHVsZV9nZXQgYW5kCi0gKiBpbnRlcl9tb2R1bGVfcHV0LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gMjkgT2N0IDIwMDAuCi0gKi8KLXN0YXRpYyB2b2lkIERvQzJrX2luaXQoc3RydWN0IG10ZF9pbmZvICptdGQpCisvKiBUaGlzIHJvdXRpbmUgaXMgZm91bmQgZnJvbSB0aGUgZG9jcHJvYmUgY29kZSBieSBzeW1ib2xfZ2V0KCksCisgKiB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gKi8KK3ZvaWQgRG9DMmtfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqb2xkID0gTlVMTDsKQEAgLTU4Niw3ICs1NzYsNyBAQAogCW10ZC0+ZWNjdHlwZSA9IE1URF9FQ0NfUlNfRGlza09uQ2hpcDsKIAltdGQtPnNpemUgPSAwOwogCW10ZC0+ZXJhc2VzaXplID0gMDsKLQltdGQtPm9vYmJsb2NrID0gNTEyOworCW10ZC0+d3JpdGVzaXplID0gNTEyOwogCW10ZC0+b29ic2l6ZSA9IDE2OwogCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAltdGQtPmVyYXNlID0gZG9jX2VyYXNlOwpAQCAtNTk0LDkgKzU4NCw2IEBACiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBkb2NfcmVhZDsKIAltdGQtPndyaXRlID0gZG9jX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBkb2NfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBkb2Nfd3JpdGVfZWNjOwotCW10ZC0+d3JpdGV2X2VjYyA9IGRvY193cml0ZXZfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBkb2NfcmVhZF9vb2I7CiAJbXRkLT53cml0ZV9vb2IgPSBkb2Nfd3JpdGVfb29iOwogCW10ZC0+c3luYyA9IE5VTEw7CkBAIC02MjMsNiArNjEwLDcgQEAKIAkJcmV0dXJuOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKERvQzJrX2luaXQpOwogCiBzdGF0aWMgaW50IGRvY19yZWFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKIAkJICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQpAQCAtOTcxLDcyICs5NTksMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkb2Nfd3JpdGV2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQkgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCB0bywgc2l6ZV90ICpyZXRsZW4sCi0JCQkgIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RhdGljIGNoYXIgc3RhdGljX2J1Zls1MTJdOwotCXN0YXRpYyBERUZJTkVfTVVURVgod3JpdGV2X2J1Zl9tdXRleCk7Ci0KLQlzaXplX3QgdG90cmV0bGVuID0gMDsKLQlzaXplX3QgdGhpc3ZlY29mcyA9IDA7Ci0JaW50IHJldD0gMDsKLQotCW11dGV4X2xvY2soJndyaXRldl9idWZfbXV0ZXgpOwotCi0Jd2hpbGUoY291bnQpIHsKLQkJc2l6ZV90IHRoaXNsZW4sIHRoaXNyZXRsZW47Ci0JCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKLQotCQlidWYgPSB2ZWNzLT5pb3ZfYmFzZSArIHRoaXN2ZWNvZnM7Ci0JCXRoaXNsZW4gPSB2ZWNzLT5pb3ZfbGVuIC0gdGhpc3ZlY29mczsKLQotCi0JCWlmICh0aGlzbGVuID49IDUxMikgewotCQkJdGhpc2xlbiA9IHRoaXNsZW4gJiB+KDUxMi0xKTsKLQkJCXRoaXN2ZWNvZnMgKz0gdGhpc2xlbjsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vdCBlbm91Z2ggdG8gZmlsbCBhIHBhZ2UuIENvcHkgaW50byBidWYgKi8KLQkJCW1lbWNweShzdGF0aWNfYnVmLCBidWYsIHRoaXNsZW4pOwotCQkJYnVmID0gJnN0YXRpY19idWZbdGhpc2xlbl07Ci0KLQkJCXdoaWxlKGNvdW50ICYmIHRoaXNsZW4gPCA1MTIpIHsKLQkJCQl2ZWNzKys7Ci0JCQkJY291bnQtLTsKLQkJCQl0aGlzdmVjb2ZzID0gbWluKCg1MTItdGhpc2xlbiksIHZlY3MtPmlvdl9sZW4pOwotCQkJCW1lbWNweShidWYsIHZlY3MtPmlvdl9iYXNlLCB0aGlzdmVjb2ZzKTsKLQkJCQl0aGlzbGVuICs9IHRoaXN2ZWNvZnM7Ci0JCQkJYnVmICs9IHRoaXN2ZWNvZnM7Ci0JCQl9Ci0JCQlidWYgPSBzdGF0aWNfYnVmOwotCQl9Ci0JCWlmIChjb3VudCAmJiB0aGlzdmVjb2ZzID09IHZlY3MtPmlvdl9sZW4pIHsKLQkJCXRoaXN2ZWNvZnMgPSAwOwotCQkJdmVjcysrOwotCQkJY291bnQtLTsKLQkJfQotCQlyZXQgPSBkb2Nfd3JpdGVfZWNjKG10ZCwgdG8sIHRoaXNsZW4sICZ0aGlzcmV0bGVuLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLQotCQl0b3RyZXRsZW4gKz0gdGhpc3JldGxlbjsKLQotCQlpZiAocmV0IHx8IHRoaXNyZXRsZW4gIT0gdGhpc2xlbikKLQkJCWJyZWFrOwotCi0JCXRvICs9IHRoaXNsZW47Ci0JfQotCi0JbXV0ZXhfdW5sb2NrKCZ3cml0ZXZfYnVmX211dGV4KTsKLQkqcmV0bGVuID0gdG90cmV0bGVuOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZikKK3N0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGxlbjI1NiA9IDAsIHJldDsKIAlzdHJ1Y3QgTmFuZCAqbXljaGlwOworCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOworCXNpemVfdCBsZW4gPSBvcHMtPmxlbjsKKworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CisKKwlvZnMgKz0gb3BzLT5vb2JvZmZzOwogCiAJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7CiAKQEAgLTEwNzcsNyArMTAxMSw3IEBACiAKIAlEb0NfUmVhZEJ1Zih0aGlzLCAmYnVmW2xlbjI1Nl0sIGxlbiAtIGxlbjI1Nik7CiAKLQkqcmV0bGVuID0gbGVuOworCW9wcy0+cmV0bGVuID0gbGVuOwogCS8qIFJlYWRpbmcgdGhlIGZ1bGwgT09CIGRhdGEgZHJvcHMgdXMgb2ZmIG9mIHRoZSBlbmQgb2YgdGhlIHBhZ2UsCiAgICAgICAgICAqIGNhdXNpbmcgdGhlIGZsYXNoIGRldmljZSB0byBnbyBpbnRvIGJ1c3kgbW9kZSwgc28gd2UgbmVlZAogICAgICAgICAgKiB0byB3YWl0IHVudGlsIHJlYWR5IDExLjQuMSBhbmQgVG9zaGliYSBUQzU4MjU2RlQgZG9jcyAqLwpAQCAtMTE5MiwxNyArMTEyNiwyMCBAQAogCiB9CiAKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLSAJCQkgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0gCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwotIAlpbnQgcmV0OworCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCByZXQ7CiAKLSAJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7Ci0gCXJldCA9IGRvY193cml0ZV9vb2Jfbm9sb2NrKG10ZCwgb2ZzLCBsZW4sIHJldGxlbiwgYnVmKTsKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOwogCi0gCW11dGV4X3VubG9jaygmdGhpcy0+bG9jayk7Ci0gCXJldHVybiByZXQ7CisJbXV0ZXhfbG9jaygmdGhpcy0+bG9jayk7CisJcmV0ID0gZG9jX3dyaXRlX29vYl9ub2xvY2sobXRkLCBvZnMgKyBvcHMtPm9vYm9mZnMsIG9wcy0+bGVuLAorCQkJCSAgICZvcHMtPnJldGxlbiwgb3BzLT5vb2JidWYpOworCisJbXV0ZXhfdW5sb2NrKCZ0aGlzLT5sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGRvY19lcmFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKQpAQCAtMTI3NywxMiArMTIxNCw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZG9jMjAwMCh2b2lkKQotewotICAgICAgIGludGVyX21vZHVsZV9yZWdpc3RlcihpbV9uYW1lLCBUSElTX01PRFVMRSwgJkRvQzJrX2luaXQpOwotICAgICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9kb2MyMDAwKHZvaWQpCiB7CiAJc3RydWN0IG10ZF9pbmZvICptdGQ7CkBAIC0xMjk4LDExICsxMjI5LDkgQEAKIAkJa2ZyZWUodGhpcy0+Y2hpcHMpOwogCQlrZnJlZShtdGQpOwogCX0KLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lKTsKIH0KIAogbW9kdWxlX2V4aXQoY2xlYW51cF9kb2MyMDAwKTsKLW1vZHVsZV9pbml0KGluaXRfZG9jMjAwMCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDEuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jCmluZGV4IDY4MWE5YzcuLjBjZjAyMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMS5jCkBAIC00MywxMCArNDMsMTAgQEAKIHN0YXRpYyBpbnQgZG9jX3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAogCQkJIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsCiAJCQkgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOworc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOwogc3RhdGljIGludCBkb2NfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpkb2NtaWxsaXN0ID0gTlVMTDsKQEAgLTMyNCwxNiArMzI0LDkgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBpbV9uYW1lW10gPSAiRG9DTWlsX2luaXQiOwotCi0vKiBUaGlzIHJvdXRpbmUgaXMgbWFkZSBhdmFpbGFibGUgdG8gb3RoZXIgbXRkIGNvZGUgdmlhCi0gKiBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIuICBJdCBtdXN0IG9ubHkgYmUgYWNjZXNzZWQgdGhyb3VnaAotICogaW50ZXJfbW9kdWxlX2dldCB3aGljaCB3aWxsIGJ1bXAgdGhlIHVzZSBjb3VudCBvZiB0aGlzIG1vZHVsZS4gIFRoZQotICogYWRkcmVzc2VzIHBhc3NlZCBiYWNrIGluIG10ZCBhcmUgdmFsaWQgYXMgbG9uZyBhcyB0aGUgdXNlIGNvdW50IG9mCi0gKiB0aGlzIG1vZHVsZSBpcyBub24temVybywgaS5lLiBiZXR3ZWVuIGludGVyX21vZHVsZV9nZXQgYW5kCi0gKiBpbnRlcl9tb2R1bGVfcHV0LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gMjkgT2N0IDIwMDAuCi0gKi8KLXN0YXRpYyB2b2lkIERvQ01pbF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorLyogVGhpcyByb3V0aW5lIGlzIGZvdW5kIGZyb20gdGhlIGRvY3Byb2JlIGNvZGUgYnkgc3ltYm9sX2dldCgpLAorICogd2hpY2ggd2lsbCBidW1wIHRoZSB1c2UgY291bnQgb2YgdGhpcyBtb2R1bGUuICovCit2b2lkIERvQ01pbF9pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBEaXNrT25DaGlwICpvbGQgPSBOVUxMOwpAQCAtMzY4LDcgKzM2MSw3IEBACiAJLyogRklYTUU6IGVyYXNlIHNpemUgaXMgbm90IGFsd2F5cyA4S2lCICovCiAJbXRkLT5lcmFzZXNpemUgPSAweDIwMDA7CiAKLQltdGQtPm9vYmJsb2NrID0gNTEyOworCW10ZC0+d3JpdGVzaXplID0gNTEyOwogCW10ZC0+b29ic2l6ZSA9IDE2OwogCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAltdGQtPmVyYXNlID0gZG9jX2VyYXNlOwpAQCAtMzc2LDggKzM2OSw2IEBACiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBkb2NfcmVhZDsKIAltdGQtPndyaXRlID0gZG9jX3dyaXRlOwotCW10ZC0+cmVhZF9lY2MgPSBkb2NfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBkb2Nfd3JpdGVfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBkb2NfcmVhZF9vb2I7CiAJbXRkLT53cml0ZV9vb2IgPSBkb2Nfd3JpdGVfb29iOwogCW10ZC0+c3luYyA9IE5VTEw7CkBAIC00MDEsNiArMzkyLDcgQEAKIAkJcmV0dXJuOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKERvQ01pbF9pbml0KTsKIAogc3RhdGljIGludCBkb2NfcmVhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAogCQkgICAgIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKQEAgLTY3MCw4ICs2NjIsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKICNpZm5kZWYgVVNFX01FTUNQWQogCWludCBpOwpAQCAtNjgwLDYgKzY3MiwxMiBAQAogCXN0cnVjdCBEaXNrT25DaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXZvaWQgX19pb21lbSAqZG9jcHRyID0gdGhpcy0+dmlydGFkcjsKIAlzdHJ1Y3QgTmFuZCAqbXljaGlwID0gJnRoaXMtPmNoaXBzW29mcyA+PiB0aGlzLT5jaGlwc2hpZnRdOworCXVpbnQ4X3QgKmJ1ZiA9IG9wcy0+b29iYnVmOworCXNpemVfdCBsZW4gPSBvcHMtPmxlbjsKKworCUJVR19PTihvcHMtPm1vZGUgIT0gTVREX09PQl9QTEFDRSk7CisKKwlvZnMgKz0gb3BzLT5vb2JvZmZzOwogCiAJLyogRmluZCB0aGUgY2hpcCB3aGljaCBpcyB0byBiZSB1c2VkIGFuZCBzZWxlY3QgaXQgKi8KIAlpZiAodGhpcy0+Y3VyZmxvb3IgIT0gbXljaGlwLT5mbG9vcikgewpAQCAtNzE2LDEzICs3MTQsMTMgQEAKICNlbmRpZgogCWJ1ZltsZW4gLSAxXSA9IFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogCi0JKnJldGxlbiA9IGxlbjsKKwlvcHMtPnJldGxlbiA9IGxlbjsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCi0JCQkgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQorc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLAorCQkJIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewogI2lmbmRlZiBVU0VfTUVNQ1BZCiAJaW50IGk7CkBAIC03MzIsNiArNzMwLDEyIEBACiAJc3RydWN0IERpc2tPbkNoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSB0aGlzLT52aXJ0YWRyOwogCXN0cnVjdCBOYW5kICpteWNoaXAgPSAmdGhpcy0+Y2hpcHNbb2ZzID4+IHRoaXMtPmNoaXBzaGlmdF07CisJdWludDhfdCAqYnVmID0gb3BzLT5vb2JidWY7CisJc2l6ZV90IGxlbiA9IG9wcy0+bGVuOworCisJQlVHX09OKG9wcy0+bW9kZSAhPSBNVERfT09CX1BMQUNFKTsKKworCW9mcyArPSBvcHMtPm9vYm9mZnM7CiAKIAkvKiBGaW5kIHRoZSBjaGlwIHdoaWNoIGlzIHRvIGJlIHVzZWQgYW5kIHNlbGVjdCBpdCAqLwogCWlmICh0aGlzLT5jdXJmbG9vciAhPSBteWNoaXAtPmZsb29yKSB7CkBAIC03ODMsMTIgKzc4NywxMiBAQAogCWlmIChSZWFkRE9DKGRvY3B0ciwgTWlsX0NEU05fSU8pICYgMSkgewogCQlwcmludGsoIkVycm9yIHByb2dyYW1taW5nIG9vYiBkYXRhXG4iKTsKIAkJLyogRklYTUU6IGltcGxlbWVudCBCYWQgQmxvY2sgUmVwbGFjZW1lbnQgKGluIG5mdGwuYyA/PykgKi8KLQkJKnJldGxlbiA9IDA7CisJCW9wcy0+cmV0bGVuID0gMDsKIAkJcmV0ID0gLUVJTzsKIAl9CiAJZHVtbXkgPSBSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODU2LDEyICs4NjAsNiBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X2RvYzIwMDEodm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZEb0NNaWxfaW5pdCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2RvYzIwMDEodm9pZCkKIHsKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKQEAgLTg3NywxMSArODc1LDkgQEAKIAkJa2ZyZWUodGhpcy0+Y2hpcHMpOwogCQlrZnJlZShtdGQpOwogCX0KLQlpbnRlcl9tb2R1bGVfdW5yZWdpc3RlcihpbV9uYW1lKTsKIH0KIAogbW9kdWxlX2V4aXQoY2xlYW51cF9kb2MyMDAxKTsKLW1vZHVsZV9pbml0KGluaXRfZG9jMjAwMSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4gZXQgYWwuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvYzIwMDFwbHVzLmMKaW5kZXggNWY1N2YyOS4uNjZjYjFlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2MyMDAxcGx1cy5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jMjAwMXBsdXMuYwpAQCAtNDcsMTAgKzQ3LDEwIEBACiBzdGF0aWMgaW50IGRvY193cml0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKIAkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1ZiwKIAkJc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotc3RhdGljIGludCBkb2Nfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOworc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOwogc3RhdGljIGludCBkb2NfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpOwogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpkb2NtaWxwbHVzbGlzdCA9IE5VTEw7CkBAIC00NDcsMTYgKzQ0Nyw5IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgaW1fbmFtZVtdID0gIkRvQ01pbFBsdXNfaW5pdCI7Ci0KLS8qIFRoaXMgcm91dGluZSBpcyBtYWRlIGF2YWlsYWJsZSB0byBvdGhlciBtdGQgY29kZSB2aWEKLSAqIGludGVyX21vZHVsZV9yZWdpc3Rlci4gIEl0IG11c3Qgb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IHdoaWNoIHdpbGwgYnVtcCB0aGUgdXNlIGNvdW50IG9mIHRoaXMgbW9kdWxlLiAgVGhlCi0gKiBhZGRyZXNzZXMgcGFzc2VkIGJhY2sgaW4gbXRkIGFyZSB2YWxpZCBhcyBsb25nIGFzIHRoZSB1c2UgY291bnQgb2YKLSAqIHRoaXMgbW9kdWxlIGlzIG5vbi16ZXJvLCBpLmUuIGJldHdlZW4gaW50ZXJfbW9kdWxlX2dldCBhbmQKLSAqIGludGVyX21vZHVsZV9wdXQuICBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiAyOSBPY3QgMjAwMC4KLSAqLwotc3RhdGljIHZvaWQgRG9DTWlsUGx1c19pbml0KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorLyogVGhpcyByb3V0aW5lIGlzIGZvdW5kIGZyb20gdGhlIGRvY3Byb2JlIGNvZGUgYnkgc3ltYm9sX2dldCgpLAorICogd2hpY2ggd2lsbCBidW1wIHRoZSB1c2UgY291bnQgb2YgdGhpcyBtb2R1bGUuICovCit2b2lkIERvQ01pbFBsdXNfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqb2xkID0gTlVMTDsKQEAgLTQ5MCw3ICs0ODMsNyBAQAogCW10ZC0+c2l6ZSA9IDA7CiAKIAltdGQtPmVyYXNlc2l6ZSA9IDA7Ci0JbXRkLT5vb2JibG9jayA9IDUxMjsKKwltdGQtPndyaXRlc2l6ZSA9IDUxMjsKIAltdGQtPm9vYnNpemUgPSAxNjsKIAltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJbXRkLT5lcmFzZSA9IGRvY19lcmFzZTsKQEAgLTQ5OCw4ICs0OTEsNiBAQAogCW10ZC0+dW5wb2ludCA9IE5VTEw7CiAJbXRkLT5yZWFkID0gZG9jX3JlYWQ7CiAJbXRkLT53cml0ZSA9IGRvY193cml0ZTsKLQltdGQtPnJlYWRfZWNjID0gZG9jX3JlYWRfZWNjOwotCW10ZC0+d3JpdGVfZWNjID0gZG9jX3dyaXRlX2VjYzsKIAltdGQtPnJlYWRfb29iID0gZG9jX3JlYWRfb29iOwogCW10ZC0+d3JpdGVfb29iID0gZG9jX3dyaXRlX29vYjsKIAltdGQtPnN5bmMgPSBOVUxMOwpAQCAtNTI0LDYgKzUxNSw3IEBACiAJCXJldHVybjsKIAl9CiB9CitFWFBPUlRfU1lNQk9MX0dQTChEb0NNaWxQbHVzX2luaXQpOwogCiAjaWYgMAogc3RhdGljIGludCBkb2NfZHVtcGJsayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20pCkBAIC04NzYsMTQgKzg2OCwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQorc3RhdGljIGludCBkb2NfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlsb2ZmX3QgZm9mcywgYmFzZTsKIAlzdHJ1Y3QgRGlza09uQ2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl2b2lkIF9faW9tZW0gKiBkb2NwdHIgPSB0aGlzLT52aXJ0YWRyOwogCXN0cnVjdCBOYW5kICpteWNoaXAgPSAmdGhpcy0+Y2hpcHNbb2ZzID4+IHRoaXMtPmNoaXBzaGlmdF07CiAJc2l6ZV90IGksIHNpemUsIGdvdCwgd2FudDsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKKwlzaXplX3QgbGVuID0gb3BzLT5sZW47CisKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOworCisJb2ZzICs9IG9wcy0+b29ib2ZmczsKIAogCURvQ19DaGVja0FTSUMoZG9jcHRyKTsKIApAQCAtOTQ5LDEyICs5NDcsMTIgQEAKIAkvKiBEaXNhYmxlIGZsYXNoIGludGVybmFsbHkgKi8KIAlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX0ZsYXNoU2VsZWN0KTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZG9jX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwKLQkJCSBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCitzdGF0aWMgaW50IGRvY193cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJdm9sYXRpbGUgY2hhciBkdW1teTsKIAlsb2ZmX3QgZm9mcywgYmFzZTsKQEAgLTk2Myw2ICs5NjEsMTIgQEAKIAlzdHJ1Y3QgTmFuZCAqbXljaGlwID0gJnRoaXMtPmNoaXBzW29mcyA+PiB0aGlzLT5jaGlwc2hpZnRdOwogCXNpemVfdCBpLCBzaXplLCBnb3QsIHdhbnQ7CiAJaW50IHJldCA9IDA7CisJdWludDhfdCAqYnVmID0gb3BzLT5vb2JidWY7CisJc2l6ZV90IGxlbiA9IG9wcy0+bGVuOworCisJQlVHX09OKG9wcy0+bW9kZSAhPSBNVERfT09CX1BMQUNFKTsKKworCW9mcyArPSBvcHMtPm9vYm9mZnM7CiAKIAlEb0NfQ2hlY2tBU0lDKGRvY3B0cik7CiAKQEAgLTEwMzgsNyArMTA0Miw3IEBACiAJCQlwcmludGsoIk1URDogRXJyb3IgMHgleCBwcm9ncmFtbWluZyBvb2IgYXQgMHgleFxuIiwKIAkJCQlkdW1teSwgKGludClvZnMpOwogCQkJLyogRklYTUU6IGltcGxlbWVudCBCYWQgQmxvY2sgUmVwbGFjZW1lbnQgKi8KLQkJCSpyZXRsZW4gPSAwOworCQkJb3BzLT5yZXRsZW4gPSAwOwogCQkJcmV0ID0gLUVJTzsKIAkJfQogCQlkdW1teSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwpAQCAtMTA1MSw3ICsxMDU1LDcgQEAKIAkvKiBEaXNhYmxlIGZsYXNoIGludGVybmFsbHkgKi8KIAlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX0ZsYXNoU2VsZWN0KTsKIAotCSpyZXRsZW4gPSBsZW47CisJb3BzLT5yZXRsZW4gPSBsZW47CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTEyMiwxMiArMTEyNiw2IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZG9jMjAwMXBsdXModm9pZCkKLXsKLQlpbnRlcl9tb2R1bGVfcmVnaXN0ZXIoaW1fbmFtZSwgVEhJU19NT0RVTEUsICZEb0NNaWxQbHVzX2luaXQpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9kb2MyMDAxcGx1cyh2b2lkKQogewogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOwpAQCAtMTE0MywxMSArMTE0MSw5IEBACiAJCWtmcmVlKHRoaXMtPmNoaXBzKTsKIAkJa2ZyZWUobXRkKTsKIAl9Ci0JaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoaW1fbmFtZSk7CiB9CiAKIG1vZHVsZV9leGl0KGNsZWFudXBfZG9jMjAwMXBsdXMpOwotbW9kdWxlX2luaXQoaW5pdF9kb2MyMDAxcGx1cyk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+IGV0IGFsLiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9kb2Nwcm9iZS5jCmluZGV4IDEzMTc4YjkuLjU5M2JiMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvZG9jcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL2RvY3Byb2JlLmMKQEAgLTIzMSw2ICsyMzEsMTAgQEAKIAogc3RhdGljIGludCBkb2Nmb3VuZDsKIAorZXh0ZXJuIHZvaWQgRG9DMmtfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CitleHRlcm4gdm9pZCBEb0NNaWxfaW5pdChzdHJ1Y3QgbXRkX2luZm8gKik7CitleHRlcm4gdm9pZCBEb0NNaWxQbHVzX2luaXQoc3RydWN0IG10ZF9pbmZvICopOworCiBzdGF0aWMgdm9pZCBfX2luaXQgRG9DX1Byb2JlKHVuc2lnbmVkIGxvbmcgcGh5c2FkcikKIHsKIAl2b2lkIF9faW9tZW0gKmRvY3B0cjsKQEAgLTIzOSw4ICsyNDMsNiBAQAogCWludCBDaGlwSUQ7CiAJY2hhciBuYW1lYnVmWzE1XTsKIAljaGFyICpuYW1lID0gbmFtZWJ1ZjsKLQljaGFyICppbV9mdW5jbmFtZSA9IE5VTEw7Ci0JY2hhciAqaW1fbW9kbmFtZSA9IE5VTEw7CiAJdm9pZCAoKmluaXRyb3V0aW5lKShzdHJ1Y3QgbXRkX2luZm8gKikgPSBOVUxMOwogCiAJZG9jcHRyID0gaW9yZW1hcChwaHlzYWRyLCBET0NfSU9SRU1BUF9MRU4pOwpAQCAtMjc4LDQxICsyODAsMzMgQEAKIAkJc3dpdGNoKENoaXBJRCkgewogCQljYXNlIERPQ19DaGlwSURfRG9jMmtUU09QOgogCQkJbmFtZT0iMjAwMCBUU09QIjsKLQkJCWltX2Z1bmNuYW1lID0gIkRvQzJrX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAwIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DMmtfaW5pdCk7CiAJCQlicmVhazsKIAogCQljYXNlIERPQ19DaGlwSURfRG9jMms6CiAJCQluYW1lPSIyMDAwIjsKLQkJCWltX2Z1bmNuYW1lID0gIkRvQzJrX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAwIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DMmtfaW5pdCk7CiAJCQlicmVhazsKIAogCQljYXNlIERPQ19DaGlwSURfRG9jTWlsOgogCQkJbmFtZT0iTWlsbGVubml1bSI7CiAjaWZkZWYgRE9DX1NJTkdMRV9EUklWRVIKLQkJCWltX2Z1bmNuYW1lID0gIkRvQzJrX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAwIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DMmtfaW5pdCk7CiAjZWxzZQotCQkJaW1fZnVuY25hbWUgPSAiRG9DTWlsX2luaXQiOwotCQkJaW1fbW9kbmFtZSA9ICJkb2MyMDAxIjsKKwkJCWluaXRyb3V0aW5lID0gc3ltYm9sX3JlcXVlc3QoRG9DTWlsX2luaXQpOwogI2VuZGlmIC8qIERPQ19TSU5HTEVfRFJJVkVSICovCiAJCQlicmVhazsKIAogCQljYXNlIERPQ19DaGlwSURfRG9jTWlsUGx1czE2OgogCQljYXNlIERPQ19DaGlwSURfRG9jTWlsUGx1czMyOgogCQkJbmFtZT0iTWlsbGVubml1bVBsdXMiOwotCQkJaW1fZnVuY25hbWUgPSAiRG9DTWlsUGx1c19pbml0IjsKLQkJCWltX21vZG5hbWUgPSAiZG9jMjAwMXBsdXMiOworCQkJaW5pdHJvdXRpbmUgPSBzeW1ib2xfcmVxdWVzdChEb0NNaWxQbHVzX2luaXQpOwogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoaW1fZnVuY25hbWUpCi0JCQlpbml0cm91dGluZSA9IGludGVyX21vZHVsZV9nZXRfcmVxdWVzdChpbV9mdW5jbmFtZSwgaW1fbW9kbmFtZSk7Ci0KIAkJaWYgKGluaXRyb3V0aW5lKSB7CiAJCQkoKmluaXRyb3V0aW5lKShtdGQpOwotCQkJaW50ZXJfbW9kdWxlX3B1dChpbV9mdW5jbmFtZSk7CisJCQlzeW1ib2xfcHV0X2FkZHIoaW5pdHJvdXRpbmUpOwogCQkJcmV0dXJuOwogCQl9CiAJCXByaW50ayhLRVJOX05PVElDRSAiQ2Fubm90IGZpbmQgZHJpdmVyIGZvciBEaXNrT25DaGlwICVzIGF0IDB4JWxYXG4iLCBuYW1lLCBwaHlzYWRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2RldmljZXMvbGFydC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKaW5kZXggMjliMGRkYS4uNGVhNTBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKKysrIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9sYXJ0LmMKQEAgLTYzNSw2ICs2MzUsNyBAQAogICAgcHJpbnRrICgiJXM6IFRoaXMgbG9va3MgbGlrZSBhIExBUlQgYm9hcmQgdG8gbWUuXG4iLG1vZHVsZV9uYW1lKTsKICAgIG10ZC5uYW1lID0gbW9kdWxlX25hbWU7CiAgICBtdGQudHlwZSA9IE1URF9OT1JGTEFTSDsKKyAgIG10ZC53cml0ZXNpemUgPSAxOwogICAgbXRkLmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKICAgIG10ZC5zaXplID0gRkxBU0hfQkxPQ0tTSVpFX1BBUkFNICogRkxBU0hfTlVNQkxPQ0tTXzE2bV9QQVJBTSArIEZMQVNIX0JMT0NLU0laRV9NQUlOICogRkxBU0hfTlVNQkxPQ0tTXzE2bV9NQUlOOwogICAgbXRkLmVyYXNlc2l6ZSA9IEZMQVNIX0JMT0NLU0laRV9NQUlOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKaW5kZXggMDRlNjVkNS4uYTg0NjYxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCkBAIC00NjUsNiArNDY1LDcgQEAKIAkJZmxhc2gtPm10ZC5uYW1lID0gc3BpLT5kZXYuYnVzX2lkOwogCiAJZmxhc2gtPm10ZC50eXBlID0gTVREX05PUkZMQVNIOworCWZsYXNoLT5tdGQud3JpdGVzaXplID0gMTsKIAlmbGFzaC0+bXRkLmZsYWdzID0gTVREX0NBUF9OT1JGTEFTSDsKIAlmbGFzaC0+bXRkLnNpemUgPSBpbmZvLT5zZWN0b3Jfc2l6ZSAqIGluZm8tPm5fc2VjdG9yczsKIAlmbGFzaC0+bXRkLmVyYXNlc2l6ZSA9IGluZm8tPnNlY3Rvcl9zaXplOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tczAyLW52LmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYwppbmRleCA0ODVmNjYzLi40YWI3NjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL21zMDItbnYuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJbXAtPnVhZGRyID0gcGh5c190b192aXJ0KGZpeGFkZHIpOwogCiAJbXRkLT50eXBlID0gTVREX1JBTTsKLQltdGQtPmZsYWdzID0gTVREX0NBUF9SQU0gfCBNVERfWElQOworCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKIAltdGQtPnNpemUgPSBmaXhzaXplOwogCW10ZC0+bmFtZSA9IChjaGFyICopbXMwMm52X25hbWU7CiAJbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbXRkcmFtLmMKaW5kZXggMTQ0MzExNy4uYjQ0MzhlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tdGRyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL210ZHJhbS5jCkBAIC0xMDYsNiArMTA2LDcgQEAKIAltdGQtPnR5cGUgPSBNVERfUkFNOwogCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX1JBTTsKIAltdGQtPnNpemUgPSBzaXplOworCW10ZC0+d3JpdGVzaXplID0gMTsKIAltdGQtPmVyYXNlc2l6ZSA9IE1URFJBTV9FUkFTRV9TSVpFOwogCW10ZC0+cHJpdiA9IG1hcHBlZF9hZGRyZXNzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3BocmFtLmMKaW5kZXggZTg2ODVlZS4uZTA5ZTQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9waHJhbS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcGhyYW0uYwpAQCAtMSw4ICsxLDggQEAKIC8qKgogICogJElkOiBwaHJhbS5jLHYgMS4xNiAyMDA1LzExLzA3IDExOjE0OjI1IGdsZWl4bmVyIEV4cCAkCiAgKgotICogQ29weXJpZ2h0IChjKSA/Pz8/CQlKb2NoZW4gU2No5HVibGUgPHBzaW9uaWNAcHNpb25pYy5kZT4KLSAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA0CUr2cm4gRW5nZWwgPGpvZXJuQHdoLmZoLXdlZGVsLmRlPgorICogQ29weXJpZ2h0IChjKSA/Pz8/CQlKb2NoZW4gU2Now6R1YmxlIDxwc2lvbmljQHBzaW9uaWMuZGU+CisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNAlKw7ZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+CiAgKgogICogVXNhZ2U6CiAgKgpAQCAtMTQyLDcgKzE0Miw3IEBACiAKIAluZXctPm10ZC5uYW1lID0gbmFtZTsKIAluZXctPm10ZC5zaXplID0gbGVuOwotCW5ldy0+bXRkLmZsYWdzID0gTVREX0NBUF9SQU0gfCBNVERfRVJBU0VBQkxFIHwgTVREX1ZPTEFUSUxFOworCW5ldy0+bXRkLmZsYWdzID0gTVREX0NBUF9SQU07CiAgICAgICAgIG5ldy0+bXRkLmVyYXNlID0gcGhyYW1fZXJhc2U7CiAJbmV3LT5tdGQucG9pbnQgPSBwaHJhbV9wb2ludDsKIAluZXctPm10ZC51bnBvaW50ID0gcGhyYW1fdW5wb2ludDsKQEAgLTI2NiwxMiArMjY2LDE2IEBACiAJCXJldHVybiAwOwogCiAJcmV0ID0gcGFyc2VfbnVtMzIoJnN0YXJ0LCB0b2tlblsxXSk7Ci0JaWYgKHJldCkKKwlpZiAocmV0KSB7CisJCWtmcmVlKG5hbWUpOwogCQlwYXJzZV9lcnIoImlsbGVnYWwgc3RhcnQgYWRkcmVzc1xuIik7CisJfQogCiAJcmV0ID0gcGFyc2VfbnVtMzIoJmxlbiwgdG9rZW5bMl0pOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlrZnJlZShuYW1lKTsKIAkJcGFyc2VfZXJyKCJpbGxlZ2FsIGRldmljZSBsZW5ndGhcbiIpOworCX0KIAogCXJlZ2lzdGVyX2RldmljZShuYW1lLCBzdGFydCwgbGVuKTsKIApAQCAtMjk2LDUgKzMwMCw1IEBACiBtb2R1bGVfZXhpdChjbGVhbnVwX3BocmFtKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiSvZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+Iik7CitNT0RVTEVfQVVUSE9SKCJKw7ZybiBFbmdlbCA8am9lcm5Ad2guZmgtd2VkZWwuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIk1URCBkcml2ZXIgZm9yIHBoeXNpY2FsIFJBTSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9zbHJhbS5jCmluZGV4IDZmYWVlNmMuLmIzZjY2NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvc2xyYW0uYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL3NscmFtLmMKQEAgLTIwMCw4ICsyMDAsNyBAQAogCiAJKCpjdXJtdGQpLT5tdGRpbmZvLT5uYW1lID0gbmFtZTsKIAkoKmN1cm10ZCktPm10ZGluZm8tPnNpemUgPSBsZW5ndGg7Ci0JKCpjdXJtdGQpLT5tdGRpbmZvLT5mbGFncyA9IE1URF9DTEVBUl9CSVRTIHwgTVREX1NFVF9CSVRTIHwKLQkJCQkJTVREX1dSSVRFQl9XUklURUFCTEUgfCBNVERfVk9MQVRJTEUgfCBNVERfQ0FQX1JBTTsKKwkoKmN1cm10ZCktPm10ZGluZm8tPmZsYWdzID0gTVREX0NBUF9SQU07CiAgICAgICAgICgqY3VybXRkKS0+bXRkaW5mby0+ZXJhc2UgPSBzbHJhbV9lcmFzZTsKIAkoKmN1cm10ZCktPm10ZGluZm8tPnBvaW50ID0gc2xyYW1fcG9pbnQ7CiAJKCpjdXJtdGQpLT5tdGRpbmZvLT51bnBvaW50ID0gc2xyYW1fdW5wb2ludDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKaW5kZXggYTNiOTI0Ny4uMWUyMWEyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvaW5mdGxjb3JlLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25mdGwuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvaW5mdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC03OSwxNCArODAsMTIgQEAKIAlpbmZ0bC0+bWJkLmRldm51bSA9IC0xOwogCWluZnRsLT5tYmQuYmxrc2l6ZSA9IDUxMjsKIAlpbmZ0bC0+bWJkLnRyID0gdHI7Ci0JbWVtY3B5KCZpbmZ0bC0+b29iaW5mbywgJm10ZC0+b29iaW5mbywgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKTsKLQlpbmZ0bC0+b29iaW5mby51c2VlY2MgPSBNVERfTkFOREVDQ19QTEFDRU9OTFk7CiAKLSAgICAgICAgaWYgKElORlRMX21vdW50KGluZnRsKSA8IDApIHsKKwlpZiAoSU5GVExfbW91bnQoaW5mdGwpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogY291bGQgbm90IG1vdW50IGRldmljZVxuIik7CiAJCWtmcmVlKGluZnRsKTsKIAkJcmV0dXJuOwotICAgICAgICB9CisJfQogCiAJLyogT0ssIGl0J3MgYSBuZXcgb25lLiBTZXQgdXAgYWxsIHRoZSBkYXRhIHN0cnVjdHVyZXMuICovCiAKQEAgLTE1Miw2ICsxNTEsNjkgQEAKICAqLwogCiAvKgorICogUmVhZCBvb2IgZGF0YSBmcm9tIGZsYXNoCisgKi8KK2ludCBpbmZ0bF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCSAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOworCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBXcml0ZSBvb2IgZGF0YSB0byBmbGFzaAorICovCitpbnQgaW5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJICAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKKwkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogV3JpdGUgZGF0YSBhbmQgb29iIHRvIGZsYXNoCisgKi8KK3N0YXRpYyBpbnQgaW5mdGxfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICAgICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb29iKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IHJlczsKKworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKwlvcHMub29ib2ZmcyA9IG9mZnM7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29iYnVmID0gb29iOworCW9wcy5kYXRidWYgPSBidWY7CisJb3BzLmxlbiA9IGxlbjsKKworCXJlcyA9IG10ZC0+d3JpdGVfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7CisJKnJldGxlbiA9IG9wcy5yZXRsZW47CisJcmV0dXJuIHJlczsKK30KKworLyoKICAqIElORlRMX2ZpbmRmcmVlYmxvY2s6IEZpbmQgYSBmcmVlIEVyYXNlIFVuaXQgb24gdGhlIElORlRMIHBhcnRpdGlvbi4KICAqCVRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIHRoZSBnaXZlIFZpcnR1YWwgVW5pdCBDaGFpbi4KICAqLwpAQCAtMTk4LDEwICsyNjAsMTEgQEAKIAl1MTYgQmxvY2tNYXBbTUFYX1NFQ1RPUlNfUEVSX1VOSVRdOwogCXVuc2lnbmVkIGNoYXIgQmxvY2tEZWxldGVkW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiwgcHJldkVVTiwgc3RhdHVzOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJaW50IGJsb2NrLCBzaWxseTsKIAl1bnNpZ25lZCBpbnQgdGFyZ2V0RVVOOwogCXN0cnVjdCBpbmZ0bF9vb2Igb29iOwotICAgICAgICBzaXplX3QgcmV0bGVuOworCXNpemVfdCByZXRsZW47CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiSU5GVEw6IElORlRMX2ZvbGRjaGFpbihpbmZ0bD0lcCx0aGlzVlVDPSVkLCIKIAkJInBlbmRpbmc9JWQpXG4iLCBpbmZ0bCwgdGhpc1ZVQywgcGVuZGluZ2Jsb2NrKTsKQEAgLTIyMSwxOCArMjg0LDE4IEBACiAJICogU2NhbiB0byBmaW5kIHRoZSBFcmFzZSBVbml0IHdoaWNoIGhvbGRzIHRoZSBhY3R1YWwgZGF0YSBmb3IgZWFjaAogCSAqIDUxMi1ieXRlIGJsb2NrIHdpdGhpbiB0aGUgQ2hhaW4uCiAJICovCi0gICAgICAgIHNpbGx5ID0gTUFYX0xPT1BTOworCXNpbGx5ID0gTUFYX0xPT1BTOwogCXdoaWxlICh0aGlzRVVOIDwgaW5mdGwtPm5iX2Jsb2NrcykgewogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBpbmZ0bC0+RXJhc2VTaXplL1NFQ1RPUlNJWkU7IGJsb2NrICsrKSB7CiAJCQlpZiAoKEJsb2NrTWFwW2Jsb2NrXSAhPSAweGZmZmYpIHx8IEJsb2NrRGVsZXRlZFtibG9ja10pCiAJCQkJY29udGludWU7CiAKLQkJCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKQotCQkJICAgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCAxNiAsICZyZXRsZW4sCi0JCQkgICAgIChjaGFyICopJm9vYikgPCAwKQorCQkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKQorCQkJCQkgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCAxNiwgJnJldGxlbiwKKwkJCQkJICAgKGNoYXIgKikmb29iKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIAlzdGF0dXMgPSBvb2IuYi5TdGF0dXMgfCBvb2IuYi5TdGF0dXMxOworCQkJCXN0YXR1cyA9IG9vYi5iLlN0YXR1cyB8IG9vYi5iLlN0YXR1czE7CiAKIAkJCXN3aXRjaChzdGF0dXMpIHsKIAkJCWNhc2UgU0VDVE9SX0ZSRUU6CkBAIC0yODIsMjkgKzM0NSwzMSBAQAogCQkJY29udGludWU7CiAJCX0KIAotICAgICAgICAgICAgICAgIC8qCisJCS8qCiAJCSAqIENvcHkgb25seSBpbiBub24gZnJlZSBibG9jayAoZnJlZSBibG9ja3MgY2FuIG9ubHkKICAgICAgICAgICAgICAgICAgKiBoYXBwZW4gaW4gY2FzZSBvZiBtZWRpYSBlcnJvcnMgb3IgZGVsZXRlZCBibG9ja3MpLgogCQkgKi8KLSAgICAgICAgICAgICAgICBpZiAoQmxvY2tNYXBbYmxvY2tdID09IEJMT0NLX05JTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCQlpZiAoQmxvY2tNYXBbYmxvY2tdID09IEJMT0NLX05JTCkKKwkJCWNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgcmV0ID0gTVREX1JFQUQoaW5mdGwtPm1iZC5tdGQsIChpbmZ0bC0+RXJhc2VTaXplICoKLQkJCUJsb2NrTWFwW2Jsb2NrXSkgKyAoYmxvY2sgKiBTRUNUT1JTSVpFKSwgU0VDVE9SU0laRSwKLQkJCSZyZXRsZW4sIG1vdmVidWYpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Ci0JCQlyZXQgPSBNVERfUkVBRChpbmZ0bC0+bWJkLm10ZCwgKGluZnRsLT5FcmFzZVNpemUgKgotCQkJCUJsb2NrTWFwW2Jsb2NrXSkgKyAoYmxvY2sgKiBTRUNUT1JTSVpFKSwKLQkJCQlTRUNUT1JTSVpFLCAmcmV0bGVuLCBtb3ZlYnVmKTsKKwkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgKGluZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pICsKKwkJCQkoYmxvY2sgKiBTRUNUT1JTSVpFKSwgU0VDVE9SU0laRSwgJnJldGxlbiwKKwkJCQltb3ZlYnVmKTsKKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FVUNMRUFOKSB7CisJCQlyZXQgPSBtdGQtPnJlYWQobXRkLAorCQkJCQkoaW5mdGwtPkVyYXNlU2l6ZSAqIEJsb2NrTWFwW2Jsb2NrXSkgKworCQkJCQkoYmxvY2sgKiBTRUNUT1JTSVpFKSwgU0VDVE9SU0laRSwKKwkJCQkJJnJldGxlbiwgbW92ZWJ1Zik7CiAJCQlpZiAocmV0ICE9IC1FSU8pCi0gICAgICAgICAgICAgICAgICAgICAgICAJREVCVUcoTVREX0RFQlVHX0xFVkVMMSwgIklORlRMOiBlcnJvciB3ZW50ICIKLQkJCQkJImF3YXkgb24gcmV0cnk/XG4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KCZvb2IsIDB4ZmYsIHNpemVvZihzdHJ1Y3QgaW5mdGxfb29iKSk7Ci0gICAgICAgICAgICAgICAgb29iLmIuU3RhdHVzID0gb29iLmIuU3RhdHVzMSA9IFNFQ1RPUl9VU0VEOwotICAgICAgICAgICAgICAgIE1URF9XUklURUVDQyhpbmZ0bC0+bWJkLm10ZCwgKGluZnRsLT5FcmFzZVNpemUgKiB0YXJnZXRFVU4pICsKLQkJCShibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLCAmcmV0bGVuLAotCQkJbW92ZWJ1ZiwgKGNoYXIgKikmb29iLCAmaW5mdGwtPm9vYmluZm8pOworCQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJJTkZUTDogZXJyb3Igd2VudCAiCisJCQkJICAgICAgImF3YXkgb24gcmV0cnk/XG4iKTsKKwkJfQorCQltZW1zZXQoJm9vYiwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBpbmZ0bF9vb2IpKTsKKwkJb29iLmIuU3RhdHVzID0gb29iLmIuU3RhdHVzMSA9IFNFQ1RPUl9VU0VEOworCisJCWluZnRsX3dyaXRlKGluZnRsLT5tYmQubXRkLCAoaW5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKworCQkJICAgIChibG9jayAqIFNFQ1RPUlNJWkUpLCBTRUNUT1JTSVpFLCAmcmV0bGVuLAorCQkJICAgIG1vdmVidWYsIChjaGFyICopJm9vYik7CiAJfQogCiAJLyoKQEAgLTMyOSwxNyArMzk0LDE3IEBACiAJCWlmICh0aGlzRVVOID09IHRhcmdldEVVTikKIAkJCWJyZWFrOwogCi0gICAgICAgICAgICAgICAgaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKKwkJaWYgKElORlRMX2Zvcm1hdGJsb2NrKGluZnRsLCB0aGlzRVVOKSA8IDApIHsKIAkJCS8qCiAJCQkgKiBDb3VsZCBub3QgZXJhc2UgOiBtYXJrIGJsb2NrIGFzIHJlc2VydmVkLgogCQkJICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX1JFU0VSVkVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBDb3JyZWN0bHkgZXJhc2VkIDogbWFyayBpdCBhcyBmcmVlICovCiAJCQlpbmZ0bC0+UFV0YWJsZVt0aGlzRVVOXSA9IEJMT0NLX0ZSRUU7CiAJCQlpbmZ0bC0+UFV0YWJsZVtwcmV2RVVOXSA9IEJMT0NLX05JTDsKIAkJCWluZnRsLT5udW1mcmVlRVVOcysrOwotICAgICAgICAgICAgICAgIH0KKwkJfQogCX0KIAogCXJldHVybiB0YXJnZXRFVU47CkBAIC00MTUsNiArNDgwLDcgQEAKIAl1bnNpZ25lZCBpbnQgdGhpc1ZVQyA9IGJsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKTsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiwgd3JpdGVFVU4sIHByZXZfYmxvY2ssIHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogU0VDVE9SU0laRSkgJiAoaW5mdGwtPkVyYXNlU2l6ZSAtMSk7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlzdHJ1Y3QgaW5mdGxfb29iIG9vYjsKIAlzdHJ1Y3QgaW5mdGxfYmNpIGJjaTsKIAl1bnNpZ25lZCBjaGFyIGFuYWMsIG5hY3MsIHBhcml0eTsKQEAgLTQzNCwxMCArNTAwLDEwIEBACiAJCXNpbGx5ID0gTUFYX0xPT1BTOwogCiAJCXdoaWxlICh0aGlzRVVOIDw9IGluZnRsLT5sYXN0RVVOKSB7Ci0JCQlNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCi0JCQkJYmxvY2tvZnMsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSk7CisJCQlpbmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKworCQkJCSAgICAgICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOworCQkJc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOwogCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBzdGF0dXMgb2YgYmxvY2sgJWQgaW4gIgogCQkJCSJFVU4gJWQgaXMgJXhcbiIsIGJsb2NrICwgd3JpdGVFVU4sIHN0YXR1cyk7CiAKQEAgLTUyMiw4ICs1ODgsOCBAQAogCQluYWNzID0gMDsKIAkJdGhpc0VVTiA9IGluZnRsLT5WVXRhYmxlW3RoaXNWVUNdOwogCQlpZiAodGhpc0VVTiAhPSBCTE9DS19OSUwpIHsKLQkJCU1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCB0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZQotCQkJCSsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQkJaW5mdGxfcmVhZF9vb2IobXRkLCB0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZQorCQkJCSAgICAgICArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAkJCWFuYWMgPSBvb2IudS5hLkFOQUMgKyAxOwogCQkJbmFjcyA9IG9vYi51LmEuTkFDcyArIDE7CiAJCX0KQEAgLTU0NCw4ICs2MTAsOCBAQAogCQlvb2IudS5hLnBhcml0eVBlckZpZWxkID0gcGFyaXR5OwogCQlvb2IudS5hLmRpc2NhcmRlZCA9IDB4YWE7CiAKLQkJTVREX1dSSVRFT09CKGluZnRsLT5tYmQubXRkLCB3cml0ZUVVTiAqIGluZnRsLT5FcmFzZVNpemUgKyA4LCA4LAotCQkJJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQlpbmZ0bF93cml0ZV9vb2IobXRkLCB3cml0ZUVVTiAqIGluZnRsLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJCSZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAogCQkvKiBBbHNvIGJhY2sgdXAgaGVhZGVyLi4uICovCiAJCW9vYi51LmIudmlydHVhbFVuaXRObyA9IGNwdV90b19sZTE2KHRoaXNWVUMpOwpAQCAtNTU1LDggKzYyMSw4IEBACiAJCW9vYi51LmIucGFyaXR5UGVyRmllbGQgPSBwYXJpdHk7CiAJCW9vYi51LmIuZGlzY2FyZGVkID0gMHhhYTsKIAotCQlNVERfV1JJVEVPT0IoaW5mdGwtPm1iZC5tdGQsIHdyaXRlRVVOICogaW5mdGwtPkVyYXNlU2l6ZSArCi0JCQlTRUNUT1JTSVpFICogNCArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKKwkJaW5mdGxfd3JpdGVfb29iKG10ZCwgd3JpdGVFVU4gKiBpbmZ0bC0+RXJhc2VTaXplICsKKwkJCQlTRUNUT1JTSVpFICogNCArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAogCQlpbmZ0bC0+UFV0YWJsZVt3cml0ZUVVTl0gPSBpbmZ0bC0+VlV0YWJsZVt0aGlzVlVDXTsKIAkJaW5mdGwtPlZVdGFibGVbdGhpc1ZVQ10gPSB3cml0ZUVVTjsKQEAgLTU3Niw2ICs2NDIsNyBAQAogICovCiBzdGF0aWMgdm9pZCBJTkZUTF90cnlkZWxldGVjaGFpbihzdHJ1Y3QgSU5GVExyZWNvcmQgKmluZnRsLCB1bnNpZ25lZCB0aGlzVlVDKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJdW5zaWduZWQgY2hhciBCbG9ja1VzZWRbTUFYX1NFQ1RPUlNfUEVSX1VOSVRdOwogCXVuc2lnbmVkIGNoYXIgQmxvY2tEZWxldGVkW01BWF9TRUNUT1JTX1BFUl9VTklUXTsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiwgc3RhdHVzOwpAQCAtNjA2LDkgKzY3Myw5IEBACiAJCQlpZiAoQmxvY2tVc2VkW2Jsb2NrXSB8fCBCbG9ja0RlbGV0ZWRbYmxvY2tdKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkKLQkJCSAgICArIChibG9jayAqIFNFQ1RPUlNJWkUpLCA4ICwgJnJldGxlbiwKLQkJCSAgICAoY2hhciAqKSZiY2kpIDwgMCkKKwkJCWlmIChpbmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkKKwkJCQkJICAgKyAoYmxvY2sgKiBTRUNUT1JTSVpFKSwgOCAsICZyZXRsZW4sCisJCQkJCSAgKGNoYXIgKikmYmNpKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC02NzAsMTIgKzczNywxMiBAQAogCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiRGVsZXRpbmcgRVVOICVkIGZyb20gVlVDICVkXG4iLAogCQkgICAgICB0aGlzRVVOLCB0aGlzVlVDKTsKIAotICAgICAgICAgICAgICAgIGlmIChJTkZUTF9mb3JtYXRibG9jayhpbmZ0bCwgdGhpc0VVTikgPCAwKSB7CisJCWlmIChJTkZUTF9mb3JtYXRibG9jayhpbmZ0bCwgdGhpc0VVTikgPCAwKSB7CiAJCQkvKgogCQkJICogQ291bGQgbm90IGVyYXNlIDogbWFyayBibG9jayBhcyByZXNlcnZlZC4KIAkJCSAqLwogCQkJaW5mdGwtPlBVdGFibGVbdGhpc0VVTl0gPSBCTE9DS19SRVNFUlZFRDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworCQl9IGVsc2UgewogCQkJLyogQ29ycmVjdGx5IGVyYXNlZCA6IG1hcmsgaXQgYXMgZnJlZSAqLwogCQkJaW5mdGwtPlBVdGFibGVbdGhpc0VVTl0gPSBCTE9DS19GUkVFOwogCQkJaW5mdGwtPm51bWZyZWVFVU5zKys7CkBAIC02OTcsNiArNzY0LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiA9IGluZnRsLT5WVXRhYmxlW2Jsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKV07CiAJdW5zaWduZWQgbG9uZyBibG9ja29mcyA9IChibG9jayAqIFNFQ1RPUlNJWkUpICYgKGluZnRsLT5FcmFzZVNpemUgLSAxKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGluZnRsLT5tYmQubXRkOwogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJaW50IHNpbGx5ID0gTUFYX0xPT1BTOwogCXNpemVfdCByZXRsZW47CkBAIC03MDYsOCArNzc0LDggQEAKIAkJImJsb2NrPSVkKVxuIiwgaW5mdGwsIGJsb2NrKTsKIAogCXdoaWxlICh0aGlzRVVOIDwgaW5mdGwtPm5iX2Jsb2NrcykgewotCQlpZiAoTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKwotCQkgICAgYmxvY2tvZnMsIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQlpZiAoaW5mdGxfcmVhZF9vb2IobXRkLCAodGhpc0VVTiAqIGluZnRsLT5FcmFzZVNpemUpICsKKwkJCQkgICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQllbHNlCiAJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC03NDEsMTAgKzgwOSwxMCBAQAogCWlmICh0aGlzRVVOICE9IEJMT0NLX05JTCkgewogCQlsb2ZmX3QgcHRyID0gKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzOwogCi0JCWlmIChNVERfUkVBRE9PQihpbmZ0bC0+bWJkLm10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCQliY2kuU3RhdHVzID0gYmNpLlN0YXR1czEgPSBTRUNUT1JfREVMRVRFRDsKLQkJaWYgKE1URF9XUklURU9PQihpbmZ0bC0+bWJkLm10ZCwgcHRyLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJaWYgKGluZnRsX3dyaXRlX29vYihtdGQsIHB0ciwgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQlyZXR1cm4gLUVJTzsKIAkJSU5GVExfdHJ5ZGVsZXRlY2hhaW4oaW5mdGwsIGJsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKSk7CiAJfQpAQCAtNzg0LDkgKzg1MiwxMCBAQAogCiAJCW1lbXNldCgmb29iLCAweGZmLCBzaXplb2Yoc3RydWN0IGluZnRsX29vYikpOwogCQlvb2IuYi5TdGF0dXMgPSBvb2IuYi5TdGF0dXMxID0gU0VDVE9SX1VTRUQ7Ci0JCU1URF9XUklURUVDQyhpbmZ0bC0+bWJkLm10ZCwgKHdyaXRlRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKwotCQkJYmxvY2tvZnMsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIChjaGFyICopYnVmZmVyLAotCQkJKGNoYXIgKikmb29iLCAmaW5mdGwtPm9vYmluZm8pOworCisJCWluZnRsX3dyaXRlKGluZnRsLT5tYmQubXRkLCAod3JpdGVFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCisJCQkgICAgYmxvY2tvZnMsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIChjaGFyICopYnVmZmVyLAorCQkJICAgIChjaGFyICopJm9vYik7CiAJCS8qCiAJCSAqIG5lZWQgdG8gd3JpdGUgU0VDVE9SX1VTRUQgZmxhZ3Mgc2luY2UgdGhleSBhcmUgbm90IHdyaXR0ZW4KIAkJICogaW4gbXRkX3dyaXRlZWNjCkBAIC04MDQsMTcgKzg3MywxOCBAQAogCXN0cnVjdCBJTkZUTHJlY29yZCAqaW5mdGwgPSAodm9pZCAqKW1iZDsKIAl1bnNpZ25lZCBpbnQgdGhpc0VVTiA9IGluZnRsLT5WVXRhYmxlW2Jsb2NrIC8gKGluZnRsLT5FcmFzZVNpemUgLyBTRUNUT1JTSVpFKV07CiAJdW5zaWduZWQgbG9uZyBibG9ja29mcyA9IChibG9jayAqIFNFQ1RPUlNJWkUpICYgKGluZnRsLT5FcmFzZVNpemUgLSAxKTsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1czsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGluZnRsLT5tYmQubXRkOworCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJaW50IHNpbGx5ID0gTUFYX0xPT1BTOwotICAgICAgICBzdHJ1Y3QgaW5mdGxfYmNpIGJjaTsKKwlzdHJ1Y3QgaW5mdGxfYmNpIGJjaTsKIAlzaXplX3QgcmV0bGVuOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBpbmZ0bF9yZWFkYmxvY2soaW5mdGw9JXAsYmxvY2s9JWxkLCIKIAkJImJ1ZmZlcj0lcClcbiIsIGluZnRsLCBibG9jaywgYnVmZmVyKTsKIAogCXdoaWxlICh0aGlzRVVOIDwgaW5mdGwtPm5iX2Jsb2NrcykgewotCQlpZiAoTVREX1JFQURPT0IoaW5mdGwtPm1iZC5tdGQsICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKwotCQkgICAgIGJsb2Nrb2ZzLCA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpIDwgMCkKKwkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBpbmZ0bC0+RXJhc2VTaXplKSArCisJCQkJICBibG9ja29mcywgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQlzdGF0dXMgPSBTRUNUT1JfSUdOT1JFOwogCQllbHNlCiAJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC04NTAsMTAgKzkyMCwxMiBAQAogCQkvKiBUaGUgcmVxdWVzdGVkIGJsb2NrIGlzIG5vdCBvbiB0aGUgbWVkaWEsIHJldHVybiBhbGwgMHgwMCAqLwogCQltZW1zZXQoYnVmZmVyLCAwLCBTRUNUT1JTSVpFKTsKIAl9IGVsc2UgewotICAgICAgICAJc2l6ZV90IHJldGxlbjsKKwkJc2l6ZV90IHJldGxlbjsKIAkJbG9mZl90IHB0ciA9ICh0aGlzRVVOICogaW5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mczsKLQkJaWYgKE1URF9SRUFEKGluZnRsLT5tYmQubXRkLCBwdHIsIFNFQ1RPUlNJWkUsICZyZXRsZW4sCi0JCSAgICBidWZmZXIpKQorCQlpbnQgcmV0ID0gbXRkLT5yZWFkKG10ZCwgcHRyLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWZmZXIpOworCisJCS8qIEhhbmRsZSBjb3JyZWN0ZWQgYml0IGZsaXBzIGdyYWNlZnVsbHkgKi8KKwkJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FVUNMRUFOKQogCQkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jIGIvZHJpdmVycy9tdGQvaW5mdGxtb3VudC5jCmluZGV4IDQzZmRjOTQuLjhmNjAwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2luZnRsbW91bnQuYworKysgYi9kcml2ZXJzL210ZC9pbmZ0bG1vdW50LmMKQEAgLTQzLDYgKzQzLDExIEBACiAKIGNoYXIgaW5mdGxtb3VudHJldltdPSIkUmV2aXNpb246IDEuMTggJCI7CiAKK2V4dGVybiBpbnQgaW5mdGxfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkJICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKTsKK2V4dGVybiBpbnQgaW5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSAgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpOworCiAvKgogICogZmluZF9ib290X3JlY29yZDogRmluZCB0aGUgSU5GVEwgTWVkaWEgSGVhZGVyIGFuZCBpdHMgU3BhcmUgY29weSB3aGljaAogICoJY29udGFpbnMgdGhlIHZhcmlvdXMgZGV2aWNlIGluZm9ybWF0aW9uIG9mIHRoZSBJTkZUTCBwYXJ0aXRpb24gYW5kCkBAIC01Nyw2ICs2Miw3IEBACiAJdW5zaWduZWQgaW50IGksIGJsb2NrOwogCXU4IGJ1ZltTRUNUT1JTSVpFXTsKIAlzdHJ1Y3QgSU5GVExNZWRpYUhlYWRlciAqbWggPSAmaW5mdGwtPk1lZGlhSGRyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJc3RydWN0IElORlRMUGFydGl0aW9uICppcDsKIAlzaXplX3QgcmV0bGVuOwogCkBAIC04MCw4ICs4Niw4IEBACiAJCSAqIENoZWNrIGZvciBCTkFORCBoZWFkZXIgZmlyc3QuIFRoZW4gd2hpbmdlIGlmIGl0J3MgZm91bmQKIAkJICogYnV0IGxhdGVyIGNoZWNrcyBmYWlsLgogCQkgKi8KLQkJcmV0ID0gTVREX1JFQUQoaW5mdGwtPm1iZC5tdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSwKLQkJICAgIFNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1Zik7CisJCXJldCA9IG10ZC0+cmVhZChtdGQsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSwKKwkJCQlTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpOwogCQkvKiBXZSBpZ25vcmUgcmV0IGluIGNhc2UgdGhlIEVDQyBvZiB0aGUgTWVkaWFIZWFkZXIgaXMgaW52YWxpZAogCQkgICAod2hpY2ggaXMgYXBwYXJlbnRseSBhY2NlcHRhYmxlKSAqLwogCQlpZiAocmV0bGVuICE9IFNFQ1RPUlNJWkUpIHsKQEAgLTEwNiw4ICsxMTIsOSBAQAogCQl9CiAKIAkJLyogVG8gYmUgc2FmZXIgd2l0aCBCSU9TLCBhbHNvIHVzZSBlcmFzZSBtYXJrIGFzIGRpc2NyaW1pbmFudCAqLwotCQlpZiAoKHJldCA9IE1URF9SRUFET09CKGluZnRsLT5tYmQubXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKwotCQkgICAgU0VDVE9SU0laRSArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApKSB7CisJCWlmICgocmV0ID0gaW5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKworCQkJCQkgIFNFQ1RPUlNJWkUgKyA4LCA4LCAmcmV0bGVuLAorCQkJCQkgIChjaGFyICopJmgxKSA8IDApKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogQU5BTkQgaGVhZGVyIGZvdW5kIGF0ICIKIAkJCQkiMHgleCBpbiBtdGQlZCwgYnV0IE9PQiBkYXRhIHJlYWQgZmFpbGVkICIKIAkJCQkiKGVyciAlZClcbiIsIGJsb2NrICogaW5mdGwtPkVyYXNlU2l6ZSwKQEAgLTEyMyw4ICsxMzAsOCBAQAogCQltZW1jcHkobWgsIGJ1Ziwgc2l6ZW9mKHN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyKSk7CiAKIAkJLyogUmVhZCB0aGUgc3BhcmUgbWVkaWEgaGVhZGVyIGF0IG9mZnNldCA0MDk2ICovCi0JCU1URF9SRUFEKGluZnRsLT5tYmQubXRkLCBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKyA0MDk2LAotCQkgICAgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKTsKKwkJbXRkLT5yZWFkKG10ZCwgYmxvY2sgKiBpbmZ0bC0+RXJhc2VTaXplICsgNDA5NiwKKwkJCSAgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKTsKIAkJaWYgKHJldGxlbiAhPSBTRUNUT1JTSVpFKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJJTkZUTDogVW5hYmxlIHRvIHJlYWQgc3BhcmUgIgogCQkJICAgICAgICJNZWRpYSBIZWFkZXJcbiIpOwpAQCAtMjMzLDcgKzI0MCw3IEBACiAJCQkJICovCiAJCQkJaW5zdHItPmFkZHIgPSBpcC0+UmVzZXJ2ZWQwICogaW5mdGwtPkVyYXNlU2l6ZTsKIAkJCQlpbnN0ci0+bGVuID0gaW5mdGwtPkVyYXNlU2l6ZTsKLQkJCQlNVERfRVJBU0UoaW5mdGwtPm1iZC5tdGQsIGluc3RyKTsKKwkJCQltdGQtPmVyYXNlKG10ZCwgaW5zdHIpOwogCQkJfQogCQkJaWYgKChpcC0+bGFzdFVuaXQgLSBpcC0+Zmlyc3RVbml0ICsgMSkgPCBpcC0+dmlydHVhbFVuaXRzKSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU5GVEw6IE1lZGlhIEhlYWRlciAiCkBAIC0zNTAsMjEgKzM1NywyMSBAQAogCWludCBsZW4sIGludCBjaGVja19vb2IpCiB7CiAJdTggYnVmW1NFQ1RPUlNJWkUgKyBpbmZ0bC0+bWJkLm10ZC0+b29ic2l6ZV07CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBpbmZ0bC0+bWJkLm10ZDsKIAlzaXplX3QgcmV0bGVuOwogCWludCBpOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIklORlRMOiBjaGVja19mcmVlX3NlY3RvcnMoaW5mdGw9JXAsIgotCQkiYWRkcmVzcz0weCV4LGxlbj0lZCxjaGVja19vb2I9JWQpXG4iLCBpbmZ0bCwKLQkJYWRkcmVzcywgbGVuLCBjaGVja19vb2IpOwotCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSBTRUNUT1JTSVpFKSB7Ci0JCWlmIChNVERfUkVBREVDQyhpbmZ0bC0+bWJkLm10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmLCAmYnVmW1NFQ1RPUlNJWkVdLCAmaW5mdGwtPm9vYmluZm8pIDwgMCkKKwkJaWYgKG10ZC0+cmVhZChtdGQsIGFkZHJlc3MsIFNFQ1RPUlNJWkUsICZyZXRsZW4sIGJ1ZikpCiAJCQlyZXR1cm4gLTE7CiAJCWlmIChtZW1jbXBiKGJ1ZiwgMHhmZiwgU0VDVE9SU0laRSkgIT0gMCkKIAkJCXJldHVybiAtMTsKIAogCQlpZiAoY2hlY2tfb29iKSB7Ci0JCQlpZiAobWVtY21wYihidWYgKyBTRUNUT1JTSVpFLCAweGZmLCBpbmZ0bC0+bWJkLm10ZC0+b29ic2l6ZSkgIT0gMCkKKwkJCWlmKGluZnRsX3JlYWRfb29iKG10ZCwgYWRkcmVzcywgbXRkLT5vb2JzaXplLAorCQkJCQkgICZyZXRsZW4sICZidWZbU0VDVE9SU0laRV0pIDwgMCkKKwkJCQlyZXR1cm4gLTE7CisJCQlpZiAobWVtY21wYihidWYgKyBTRUNUT1JTSVpFLCAweGZmLCBtdGQtPm9vYnNpemUpICE9IDApCiAJCQkJcmV0dXJuIC0xOwogCQl9CiAJCWFkZHJlc3MgKz0gU0VDVE9SU0laRTsKQEAgLTM4Nyw2ICszOTQsNyBAQAogCXNpemVfdCByZXRsZW47CiAJc3RydWN0IGluZnRsX3VuaXR0YWlsIHVjaTsKIAlzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIgPSAmaW5mdGwtPmluc3RyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gaW5mdGwtPm1iZC5tdGQ7CiAJaW50IHBoeXNibG9jazsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJJTkZUTDogSU5GVExfZm9ybWF0YmxvY2soaW5mdGw9JXAsIgpAQCAtNDA0LDggKzQxMiw5IEBACiAJLyogRXJhc2Ugb25lIHBoeXNpY2FsIGVyYXNlYmxvY2sgYXQgYSB0aW1lLCBldmVuIHRob3VnaCB0aGUgTkFORCBhcGkKIAkgICBhbGxvd3MgdXMgdG8gZ3JvdXAgdGhlbS4gIFRoaXMgd2F5IHdlIGlmIHdlIGhhdmUgYSBmYWlsdXJlLCB3ZSBjYW4KIAkgICBtYXJrIG9ubHkgdGhlIGZhaWxlZCBibG9jayBpbiB0aGUgYmJ0LiAqLwotCWZvciAocGh5c2Jsb2NrID0gMDsgcGh5c2Jsb2NrIDwgaW5mdGwtPkVyYXNlU2l6ZTsgcGh5c2Jsb2NrICs9IGluc3RyLT5sZW4sIGluc3RyLT5hZGRyICs9IGluc3RyLT5sZW4pIHsKLQkJTVREX0VSQVNFKGluZnRsLT5tYmQubXRkLCBpbnN0cik7CisJZm9yIChwaHlzYmxvY2sgPSAwOyBwaHlzYmxvY2sgPCBpbmZ0bC0+RXJhc2VTaXplOworCSAgICAgcGh5c2Jsb2NrICs9IGluc3RyLT5sZW4sIGluc3RyLT5hZGRyICs9IGluc3RyLT5sZW4pIHsKKwkJbXRkLT5lcmFzZShpbmZ0bC0+bWJkLm10ZCwgaW5zdHIpOwogCiAJCWlmIChpbnN0ci0+c3RhdGUgPT0gTVREX0VSQVNFX0ZBSUxFRCkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU5GVEw6IGVycm9yIHdoaWxlIGZvcm1hdHRpbmcgYmxvY2sgJWRcbiIsCkBAIC00MTQsMTAgKzQyMywxMCBAQAogCQl9CiAKIAkJLyoKLQkgCSogQ2hlY2sgdGhlICJmcmVlbmVzcyIgb2YgRXJhc2UgVW5pdCBiZWZvcmUgdXBkYXRpbmcgbWV0YWRhdGEuCi0JIAkqIEZpeE1lOiBpcyB0aGlzIGNoZWNrIHJlYWxseSBuZWNlc3Nhcnk/IFNpbmNlIHdlIGhhdmUgY2hlY2sgdGhlCi0JIAkqICAgICAgICByZXR1cm4gY29kZSBhZnRlciB0aGUgZXJhc2Ugb3BlcmF0aW9uLgotCSAJKi8KKwkJICogQ2hlY2sgdGhlICJmcmVlbmVzcyIgb2YgRXJhc2UgVW5pdCBiZWZvcmUgdXBkYXRpbmcgbWV0YWRhdGEuCisJCSAqIEZpeE1lOiBpcyB0aGlzIGNoZWNrIHJlYWxseSBuZWNlc3Nhcnk/IFNpbmNlIHdlIGhhdmUgY2hlY2sKKwkJICogdGhlIHJldHVybiBjb2RlIGFmdGVyIHRoZSBlcmFzZSBvcGVyYXRpb24uCisJCSAqLwogCQlpZiAoY2hlY2tfZnJlZV9zZWN0b3JzKGluZnRsLCBpbnN0ci0+YWRkciwgaW5zdHItPmxlbiwgMSkgIT0gMCkKIAkJCWdvdG8gZmFpbDsKIAl9CkBAIC00MjksOCArNDM4LDcgQEAKIAl1Y2kuUmVzZXJ2ZWRbMl0gPSAwOwogCXVjaS5SZXNlcnZlZFszXSA9IDA7CiAJaW5zdHItPmFkZHIgPSBibG9jayAqIGluZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICogMjsKLQlpZiAoTVREX1dSSVRFT09CKGluZnRsLT5tYmQubXRkLCBpbnN0ci0+YWRkciArCi0JICAgIDgsIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCWlmIChpbmZ0bF93cml0ZV9vb2IobXRkLCBpbnN0ci0+YWRkciArIDgsIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQogCQlnb3RvIGZhaWw7CiAJcmV0dXJuIDA7CiBmYWlsOgpAQCAtNTQ5LDYgKzU1Nyw3IEBACiAKIGludCBJTkZUTF9tb3VudChzdHJ1Y3QgSU5GVExyZWNvcmQgKnMpCiB7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBzLT5tYmQubXRkOwogCXVuc2lnbmVkIGludCBibG9jaywgZmlyc3RfYmxvY2ssIHByZXZfYmxvY2ssIGxhc3RfYmxvY2s7CiAJdW5zaWduZWQgaW50IGZpcnN0X2xvZ2ljYWxfYmxvY2ssIGxvZ2ljYWxfYmxvY2ssIGVyYXNlX21hcms7CiAJaW50IGNoYWluX2xlbmd0aCwgZG9fZm9ybWF0X2NoYWluOwpAQCAtNjA3LDEwICs2MTYsMTEgQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJaWYgKE1URF9SRUFET09CKHMtPm1iZC5tdGQsIGJsb2NrICogcy0+RXJhc2VTaXplICsgOCwKLQkJCSAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZoMCkgPCAwIHx8Ci0JCQkgICAgTVREX1JFQURPT0Iocy0+bWJkLm10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKwotCQkJICAgIDIgKiBTRUNUT1JTSVpFICsgOCwgOCwgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkgeworCQkJaWYgKGluZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyA4LAorCQkJCQkgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZoMCkgPCAwIHx8CisJCQkgICAgaW5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIHMtPkVyYXNlU2l6ZSArCisJCQkJCSAgIDIgKiBTRUNUT1JTSVpFICsgOCwgOCwgJnJldGxlbiwKKwkJCQkJICAgKGNoYXIgKikmaDEpIDwgMCkgewogCQkJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4/ICovCiAJCQkJZG9fZm9ybWF0X2NoYWluKys7CiAJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKaW5kZXggN2FiZDdmZS4uNmJkYWFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwpAQCAtMzcsNyArMzcsNyBAQAogY29uZmlnIE1URF9QSFlTTUFQX0xFTgogCWhleCAiUGh5c2ljYWwgbGVuZ3RoIG9mIGZsYXNoIG1hcHBpbmciCiAJZGVwZW5kcyBvbiBNVERfUEhZU01BUAotCWRlZmF1bHQgIjB4NDAwMDAwMCIKKwlkZWZhdWx0ICIwIgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHRvdGFsIGxlbmd0aCBvZiB0aGUgbWFwcGluZyBvZiB0aGUgZmxhc2ggY2hpcHMgb24KIAkgIHlvdXIgcGFydGljdWxhciBib2FyZC4gSWYgdGhlcmUgaXMgc3BhY2UsIG9yIGFsaWFzZXMsIGluIHRoZQpAQCAtNzgsNyArNzgsNyBAQAogCiBjb25maWcgTVREX1NDNTIwQ0RQCiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIEFNRCBTQzUyMCBDRFAiCi0JZGVwZW5kcyBvbiBYODYgJiYgTVREX0NGSQorCWRlcGVuZHMgb24gWDg2ICYmIE1URF9DRkkgJiYgTVREX0NPTkNBVAogCWhlbHAKIAkgIFRoZSBTQzUyMCBDRFAgYm9hcmQgaGFzIHR3byBiYW5rcyBvZiBDRkktY29tcGxpYW50IGNoaXBzIGFuZCBvbmUKIAkgIER1YWwtaW4tbGluZSBKRURFQyBjaGlwLiBUaGlzICdtYXBwaW5nJyBkcml2ZXIgc3VwcG9ydHMgdGhhdApAQCAtMTA5LDcgKzEwOSw3IEBACiAJICBtdGQxIGFsbG93cyB5b3UgdG8gcmVwcm9ncmFtIHlvdXIgQklPUy4gQkUgVkVSWSBDQVJFRlVMLgogCiAJICBOb3RlIHRoYXQganVtcGVyIDMgKCJXcml0ZSBFbmFibGUgRHJpdmUgQSIpIG11c3QgYmUgc2V0Ci0JICBvdGhlcndpc2UgZGV0ZWN0aW9uIHdvbid0IHN1Y2NlZWVkLgorCSAgb3RoZXJ3aXNlIGRldGVjdGlvbiB3b24ndCBzdWNjZWVkLgogCiBjb25maWcgTVREX1NCQ19HWFgKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gQXJjb20gU0JDLUdYeCBib2FyZHMiCkBAIC0yMDAsOCArMjAwLDggQEAKIAkgIFN1cHBvcnQgZm9yIHRoZSBmbGFzaCBjaGlwIG9uIFRzdW5hbWkgVElHIGJ1cy4KIAogY29uZmlnIE1URF9MQVNBVAotCXRyaXN0YXRlICJGbGFzaCBjaGlwcyBvbiBMQVNBVCBib2FyZCIKLQlkZXBlbmRzIG9uIExBU0FUCisJdHJpc3RhdGUgIkxBU0FUIGZsYXNoIGRldmljZSIKKwlkZXBlbmRzIG9uIExBU0FUICYmIE1URF9DRkkKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIExhc2F0IDEwMCBhbmQgMjAwIGJvYXJkcy4KIApAQCAtNTYxLDcgKzU2MSw2IEBACiBjb25maWcgTVREX1BDTUNJQV9BTk9OWU1PVVMKIAlib29sICJVc2UgUENNQ0lBIE1URCBkcml2ZXJzIGZvciBhbm9ueW1vdXMgUENNQ0lBIGNhcmRzIgogCWRlcGVuZHMgb24gTVREX1BDTUNJQQotCWRlZmF1bHQgTgogCWhlbHAKIAkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQsIFBDTUNJQSBjYXJkcyB3aGljaCBkbyBub3QgcmVwb3J0CiAJICBhbnl0aGluZyBhYm91dCB0aGVtc2VsdmVzIGFyZSBhc3N1bWVkIHRvIGJlIE1URCBjYXJkcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYyBiL2RyaXZlcnMvbXRkL21hcHMvY2ZpX2ZsYWdhZG0uYwppbmRleCBmZDBmMGQzLi45MmI1ZDg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2NmaV9mbGFnYWRtLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9jZmlfZmxhZ2FkbS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgqSAyMDAxIEZsYWdhIGhmLiBNZWRpY2FsIERldmljZXMsIEvhcmkgRGF27fBzc29uIDxrZEBmbGFnYS5pcz4KKyAqICBDb3B5cmlnaHQgwqkgMjAwMSBGbGFnYSBoZi4gTWVkaWNhbCBEZXZpY2VzLCBLw6FyaSBEYXbDrcOwc3NvbiA8a2RAZmxhZ2EuaXM+CiAgKgogICogICRJZDogY2ZpX2ZsYWdhZG0uYyx2IDEuMTUgMjAwNS8xMS8wNyAxMToxNDoyNiBnbGVpeG5lciBFeHAgJAogICoKQEAgLTEzNSw1ICsxMzUsNSBAQAogCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IoIkvhcmkgRGF27fBzc29uIDxrZEBmbGFnYS5pcz4iKTsKK01PRFVMRV9BVVRIT1IoIkvDoXJpIERhdsOtw7Bzc29uIDxrZEBmbGFnYS5pcz4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIEZsYWdhIGRpZ2l0YWwgbW9kdWxlIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL2Rib3gyLWZsYXNoLmMKaW5kZXggNjUyODEzYy4uODVjMmE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9kYm94Mi1mbGFzaC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvZGJveDItZmxhc2guYwpAQCAtMTIyLDUgKzEyMiw1IEBACiAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiS+FyaSBEYXbt8HNzb24gPGtkQGZsYWdhLmlzPiwgQmFzdGlhbiBCbGFuayA8d2FsZGlAdHV4Ym94Lm9yZz4sIEFsZXhhbmRlciBXaWxkIDx3aWxkQHRlLWVsZWt0cm9uaWsuY29tPiIpOworTU9EVUxFX0FVVEhPUigiS8OhcmkgRGF2w63DsHNzb24gPGtkQGZsYWdhLmlzPiwgQmFzdGlhbiBCbGFuayA8d2FsZGlAdHV4Ym94Lm9yZz4sIEFsZXhhbmRlciBXaWxkIDx3aWxkQHRlLWVsZWt0cm9uaWsuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNVEQgbWFwIGRyaXZlciBmb3IgRC1Cb3ggMiBib2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9tdHgtMV9mbGFzaC5jCmluZGV4IGQxZTY2ZTEuLjVjMjVkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbXR4LTFfZmxhc2guYworKysgYi9kcml2ZXJzL210ZC9tYXBzL210eC0xX2ZsYXNoLmMKQEAgLTQsNyArNCw3IEBACiAgKiAkSWQ6IG10eC0xX2ZsYXNoLmMsdiAxLjIgMjAwNS8xMS8wNyAxMToxNDoyNyBnbGVpeG5lciBFeHAgJAogICoKICAqIChDKSAyMDA1IEJydW5vIFJhbmRvbGYgPGJydW5vLnJhbmRvbGZANGctc3lzdGVtcy5iaXo+Ci0gKiAoQykgMjAwNSBK9nJuIEVuZ2VsIDxqb2VybkB3b2huaGVpbS5maC13ZWRlbC5kZT4KKyAqIChDKSAyMDA1IErDtnJuIEVuZ2VsIDxqb2VybkB3b2huaGVpbS5maC13ZWRlbC5kZT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYyBiL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKaW5kZXggNTRhMzEwMi4uMDk5NGI1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xODgsNyArMTkwLDcgQEAKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJYWRkX3dhaXRfcXVldWUoJndhaXRfcSwgJndhaXQpOwogCi0JCXJldCA9IE1URF9FUkFTRShtdGQsICZuZXR0ZWxfZXJhc2UpOworCQlyZXQgPSBtdGQtPmVyYXNlKG10ZCwgJm5ldHRlbF9lcmFzZSk7CiAJCWlmIChyZXQpIHsKIAkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jIGIvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYwppbmRleCBkMjdmNDEyLi5jODYxMTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKQEAgLTcxMyw2ICs3MTMsNyBAQAogCiAJaWYoZGV2LT5tdGRfaW5mbykgewogCQlkZWxfbXRkX2RldmljZShkZXYtPm10ZF9pbmZvKTsKKwkJbWFwX2Rlc3Ryb3koZGV2LT5tdGRfaW5mbyk7CiAJCWluZm8oIm10ZCVkOiBSZW1vdmVkIiwgZGV2LT5tdGRfaW5mby0+aW5kZXgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwLmMgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwppbmRleCBmNDllYmMzLi40MzNjM2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYwpAQCAtMTQsMTEzICsxNCwyMzAgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKLQotc3RydWN0IG1hcF9pbmZvIHBoeXNtYXBfbWFwID0gewotCS5uYW1lID0gInBoeXNfbWFwcGVkX2ZsYXNoIiwKLQkucGh5cyA9IENPTkZJR19NVERfUEhZU01BUF9TVEFSVCwKLQkuc2l6ZSA9IENPTkZJR19NVERfUEhZU01BUF9MRU4sCi0JLmJhbmt3aWR0aCA9IENPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEgsCitzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvIHsKKwlzdHJ1Y3QgbXRkX2luZm8JCSptdGQ7CisJc3RydWN0IG1hcF9pbmZvCQltYXA7CisJc3RydWN0IHJlc291cmNlCQkqcmVzOworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWludAkJCW5yX3BhcnRzOworCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKyNlbmRpZgogfTsKIAotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICptdGRfcGFydHM7Ci1zdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgIG10ZF9wYXJ0c19uYjsKIAotc3RhdGljIGludCBudW1fcGh5c21hcF9wYXJ0aXRpb25zOwotc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uICpwaHlzbWFwX3BhcnRpdGlvbnM7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdIF9faW5pdGRhdGEgPSB7ImNtZGxpbmVwYXJ0IiwgIlJlZEJvb3QiLCBOVUxMfTsKLQotdm9pZCBwaHlzbWFwX3NldF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG51bV9wYXJ0cykKK3N0YXRpYyBpbnQgcGh5c21hcF9mbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCXBoeXNtYXBfcGFydGl0aW9ucz1wYXJ0czsKLQludW1fcGh5c21hcF9wYXJ0aXRpb25zPW51bV9wYXJ0czsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTVREX1BBUlRJVElPTlMgKi8KKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvICppbmZvOworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgKnBoeXNtYXBfZGF0YTsKIAotc3RhdGljIGludCBfX2luaXQgaW5pdF9waHlzbWFwKHZvaWQpCi17Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKnJvbV9wcm9iZV90eXBlc1tdID0geyAiY2ZpX3Byb2JlIiwgImplZGVjX3Byb2JlIiwgIm1hcF9yb20iLCBOVUxMIH07Ci0JY29uc3QgY2hhciAqKnR5cGU7CisJaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaWYgKGluZm8gPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAotICAgICAgIAlwcmludGsoS0VSTl9OT1RJQ0UgInBoeXNtYXAgZmxhc2ggZGV2aWNlOiAlbHggYXQgJWx4XG4iLCBwaHlzbWFwX21hcC5zaXplLCBwaHlzbWFwX21hcC5waHlzKTsKLQlwaHlzbWFwX21hcC52aXJ0ID0gaW9yZW1hcChwaHlzbWFwX21hcC5waHlzLCBwaHlzbWFwX21hcC5zaXplKTsKKwlwaHlzbWFwX2RhdGEgPSBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JaWYgKCFwaHlzbWFwX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQlzaW1wbGVfbWFwX2luaXQoJnBoeXNtYXBfbWFwKTsKLQotCW15bXRkID0gTlVMTDsKLQl0eXBlID0gcm9tX3Byb2JlX3R5cGVzOwotCWZvcig7ICFteW10ZCAmJiAqdHlwZTsgdHlwZSsrKSB7Ci0JCW15bXRkID0gZG9fbWFwX3Byb2JlKCp0eXBlLCAmcGh5c21hcF9tYXApOwotCX0KLQlpZiAobXltdGQpIHsKLQkJbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KKwlpZiAoaW5mby0+bXRkICE9IE5VTEwpIHsKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKLQkJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRfcHJvYmVzLAotCQkJCQkJICAgICZtdGRfcGFydHMsIDApOwotCi0JCWlmIChtdGRfcGFydHNfbmIgPiAwKQotCQl7Ci0JCQlhZGRfbXRkX3BhcnRpdGlvbnMgKG15bXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7Ci0JCQlyZXR1cm4gMDsKKwkJaWYgKGluZm8tPm5yX3BhcnRzKSB7CisJCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkKTsKKwkJCWtmcmVlKGluZm8tPnBhcnRzKTsKKwkJfSBlbHNlIGlmIChwaHlzbWFwX2RhdGEtPm5yX3BhcnRzKSB7CisJCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkKTsKKwkJfSBlbHNlIHsKKwkJCWRlbF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7CiAJCX0KLQotCQlpZiAobnVtX3BoeXNtYXBfcGFydGl0aW9ucyAhPSAwKQotCQl7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UKLQkJCSAgICAgICAiVXNpbmcgcGh5c21hcCBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIik7Ci0JCQlhZGRfbXRkX3BhcnRpdGlvbnMgKG15bXRkLCBwaHlzbWFwX3BhcnRpdGlvbnMsIG51bV9waHlzbWFwX3BhcnRpdGlvbnMpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQorI2Vsc2UKKwkJZGVsX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKICNlbmRpZgotCQlhZGRfbXRkX2RldmljZShteW10ZCk7CisJCW1hcF9kZXN0cm95KGluZm8tPm10ZCk7CisJfQogCisJaWYgKGluZm8tPm1hcC52aXJ0ICE9IE5VTEwpCisJCWlvdW5tYXAoKHZvaWQgKilpbmZvLT5tYXAudmlydCk7CisKKwlpZiAoaW5mby0+cmVzICE9IE5VTEwpIHsKKwkJcmVsZWFzZV9yZXNvdXJjZShpbmZvLT5yZXMpOworCQlrZnJlZShpbmZvLT5yZXMpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqcm9tX3Byb2JlX3R5cGVzW10gPSB7ICJjZmlfcHJvYmUiLCAiamVkZWNfcHJvYmUiLCAibWFwX3JvbSIsIE5VTEwgfTsKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2JlX3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsICJSZWRCb290IiwgTlVMTCB9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgcGh5c21hcF9mbGFzaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSAqcGh5c21hcF9kYXRhOworCXN0cnVjdCBwaHlzbWFwX2ZsYXNoX2luZm8gKmluZm87CisJY29uc3QgY2hhciAqKnByb2JlX3R5cGU7CisJaW50IGVycjsKKworCXBoeXNtYXBfZGF0YSA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKHBoeXNtYXBfZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworICAgICAgIAlwcmludGsoS0VSTl9OT1RJQ0UgInBoeXNtYXAgcGxhdGZvcm0gZmxhc2ggZGV2aWNlOiAlLjhsbHggYXQgJS44bGx4XG4iLAorCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWRldi0+cmVzb3VyY2UtPmVuZCAtIGRldi0+cmVzb3VyY2UtPnN0YXJ0ICsgMSwKKwkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylkZXYtPnJlc291cmNlLT5zdGFydCk7CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyksIEdGUF9LRVJORUwpOworCWlmIChpbmZvID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKCppbmZvKSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJaW5mby0+cmVzID0gcmVxdWVzdF9tZW1fcmVnaW9uKGRldi0+cmVzb3VyY2UtPnN0YXJ0LAorCQkJZGV2LT5yZXNvdXJjZS0+ZW5kIC0gZGV2LT5yZXNvdXJjZS0+c3RhcnQgKyAxLAorCQkJZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoaW5mby0+cmVzID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWluZm8tPm1hcC5uYW1lID0gZGV2LT5kZXYuYnVzX2lkOworCWluZm8tPm1hcC5waHlzID0gZGV2LT5yZXNvdXJjZS0+c3RhcnQ7CisJaW5mby0+bWFwLnNpemUgPSBkZXYtPnJlc291cmNlLT5lbmQgLSBkZXYtPnJlc291cmNlLT5zdGFydCArIDE7CisJaW5mby0+bWFwLmJhbmt3aWR0aCA9IHBoeXNtYXBfZGF0YS0+d2lkdGg7CisJaW5mby0+bWFwLnNldF92cHAgPSBwaHlzbWFwX2RhdGEtPnNldF92cHA7CisKKwlpbmZvLT5tYXAudmlydCA9IGlvcmVtYXAoaW5mby0+bWFwLnBoeXMsIGluZm8tPm1hcC5zaXplKTsKKwlpZiAoaW5mby0+bWFwLnZpcnQgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoIHJlZ2lvblxuIik7CisJCWVyciA9IEVJTzsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXNpbXBsZV9tYXBfaW5pdCgmaW5mby0+bWFwKTsKKworCXByb2JlX3R5cGUgPSByb21fcHJvYmVfdHlwZXM7CisJZm9yICg7IGluZm8tPm10ZCA9PSBOVUxMICYmICpwcm9iZV90eXBlICE9IE5VTEw7IHByb2JlX3R5cGUrKykKKwkJaW5mby0+bXRkID0gZG9fbWFwX3Byb2JlKCpwcm9iZV90eXBlLCAmaW5mby0+bWFwKTsKKwlpZiAoaW5mby0+bXRkID09IE5VTEwpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJtYXBfcHJvYmUgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWluZm8tPm10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUworCWVyciA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgcGFydF9wcm9iZV90eXBlcywgJmluZm8tPnBhcnRzLCAwKTsKKwlpZiAoZXJyID4gMCkgeworCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBpbmZvLT5wYXJ0cywgZXJyKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaW91bm1hcChwaHlzbWFwX21hcC52aXJ0KTsKLQlyZXR1cm4gLUVOWElPOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9waHlzbWFwKHZvaWQpCi17Ci0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JaWYgKG10ZF9wYXJ0c19uYikgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMobXltdGQpOwotCQlrZnJlZShtdGRfcGFydHMpOwotCX0gZWxzZSBpZiAobnVtX3BoeXNtYXBfcGFydGl0aW9ucykgewotCQlkZWxfbXRkX3BhcnRpdGlvbnMobXltdGQpOwotCX0gZWxzZSB7Ci0JCWRlbF9tdGRfZGV2aWNlKG15bXRkKTsKKwlpZiAocGh5c21hcF9kYXRhLT5ucl9wYXJ0cykgeworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nIHBoeXNtYXAgcGFydGl0aW9uIGluZm9ybWF0aW9uXG4iKTsKKwkJYWRkX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgcGh5c21hcF9kYXRhLT5wYXJ0cywKKwkJCQkJCXBoeXNtYXBfZGF0YS0+bnJfcGFydHMpOworCQlyZXR1cm4gMDsKIAl9Ci0jZWxzZQotCWRlbF9tdGRfZGV2aWNlKG15bXRkKTsKICNlbmRpZgotCW1hcF9kZXN0cm95KG15bXRkKTsKIAotCWlvdW5tYXAocGh5c21hcF9tYXAudmlydCk7Ci0JcGh5c21hcF9tYXAudmlydCA9IE5VTEw7CisJYWRkX210ZF9kZXZpY2UoaW5mby0+bXRkKTsKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlwaHlzbWFwX2ZsYXNoX3JlbW92ZShkZXYpOworCXJldHVybiBlcnI7CiB9CiAKLW1vZHVsZV9pbml0KGluaXRfcGh5c21hcCk7Ci1tb2R1bGVfZXhpdChjbGVhbnVwX3BoeXNtYXApOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcGh5c21hcF9mbGFzaF9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHBoeXNtYXBfZmxhc2hfcHJvYmUsCisJLnJlbW92ZQkJPSBwaHlzbWFwX2ZsYXNoX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJfSwKK307CiAKIAorI2lmZGVmIENPTkZJR19NVERfUEhZU01BUF9MRU4KKyNpZiBDT05GSUdfTVREX1BIWVNNQVBfTEVOICE9IDAKKyN3YXJuaW5nIHVzaW5nIFBIWVNNQVAgY29tcGF0IGNvZGUKKyNkZWZpbmUgUEhZU01BUF9DT01QQVQKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBQSFlTTUFQX0NPTVBBVAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGh5c21hcF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSBDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRILAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwaHlzbWFwX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSBDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQsCisJLmVuZAkJPSBDT05GSUdfTVREX1BIWVNNQVBfU1RBUlQgKyBDT05GSUdfTVREX1BIWVNNQVBfTEVOLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBoeXNtYXBfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZwaHlzbWFwX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnBoeXNtYXBfZmxhc2hfcmVzb3VyY2UsCit9OworCit2b2lkIHBoeXNtYXBfY29uZmlndXJlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAorCQlpbnQgYmFua3dpZHRoLCB2b2lkICgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCkpCit7CisJcGh5c21hcF9mbGFzaF9yZXNvdXJjZS5zdGFydCA9IGFkZHI7CisJcGh5c21hcF9mbGFzaF9yZXNvdXJjZS5lbmQgPSBhZGRyICsgc2l6ZSAtIDE7CisJcGh5c21hcF9mbGFzaF9kYXRhLndpZHRoID0gYmFua3dpZHRoOworCXBoeXNtYXBfZmxhc2hfZGF0YS5zZXRfdnBwID0gc2V0X3ZwcDsKK30KKworI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwordm9pZCBwaHlzbWFwX3NldF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG51bV9wYXJ0cykKK3sKKwlwaHlzbWFwX2ZsYXNoX2RhdGEubnJfcGFydHMgPSBudW1fcGFydHM7CisJcGh5c21hcF9mbGFzaF9kYXRhLnBhcnRzID0gcGFydHM7Cit9CisjZW5kaWYKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBwaHlzbWFwX2luaXQodm9pZCkKK3sKKwlpbnQgZXJyOworCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoX2RyaXZlcik7CisjaWZkZWYgUEhZU01BUF9DT01QQVQKKwlpZiAoZXJyID09IDApCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGh5c21hcF9mbGFzaCk7CisjZW5kaWYKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwaHlzbWFwX2V4aXQodm9pZCkKK3sKKyNpZmRlZiBQSFlTTUFQX0NPTVBBVAorCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoKTsKKyNlbmRpZgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwaHlzbWFwX2ZsYXNoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBoeXNtYXBfaW5pdCk7Cittb2R1bGVfZXhpdChwaHlzbWFwX2V4aXQpOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBXb29kaG91c2UgPGR3bXcyQGluZnJhZGVhZC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgY29uZmlndXJhYmxlIE1URCBtYXAgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9jay5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2suYwppbmRleCAyY2VmMjgwLi5lNWM3ODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9jay5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCWFkZF93YWl0X3F1ZXVlKCZ3YWl0X3EsICZ3YWl0KTsKIAotCXJldCA9IE1URF9FUkFTRShtdGQsICZlcmFzZSk7CisJcmV0ID0gbXRkLT5lcmFzZShtdGQsICZlcmFzZSk7CiAJaWYgKHJldCkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CkBAIC04OCw3ICs4OCw3IEBACiAJICogTmV4dCwgd3JpdGhlIGRhdGEgdG8gZmxhc2guCiAJICovCiAKLQlyZXQgPSBNVERfV1JJVEUgKG10ZCwgcG9zLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisJcmV0ID0gbXRkLT53cml0ZShtdGQsIHBvcywgbGVuLCAmcmV0bGVuLCBidWYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAJaWYgKHJldGxlbiAhPSBsZW4pCkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJbXRkLT5uYW1lLCBwb3MsIGxlbik7CiAKIAlpZiAoIXNlY3Rfc2l6ZSkKLQkJcmV0dXJuIE1URF9XUklURSAobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKKwkJcmV0dXJuIG10ZC0+d3JpdGUobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2VjdF9zdGFydCA9IChwb3Mvc2VjdF9zaXplKSpzZWN0X3NpemU7CkBAIC0xNzAsNyArMTcwLDggQEAKIAkJCSAgICBtdGRibGstPmNhY2hlX29mZnNldCAhPSBzZWN0X3N0YXJ0KSB7CiAJCQkJLyogZmlsbCB0aGUgY2FjaGUgd2l0aCB0aGUgY3VycmVudCBzZWN0b3IgKi8KIAkJCQltdGRibGstPmNhY2hlX3N0YXRlID0gU1RBVEVfRU1QVFk7Ci0JCQkJcmV0ID0gTVREX1JFQUQobXRkLCBzZWN0X3N0YXJ0LCBzZWN0X3NpemUsICZyZXRsZW4sIG10ZGJsay0+Y2FjaGVfZGF0YSk7CisJCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgc2VjdF9zdGFydCwgc2VjdF9zaXplLAorCQkJCQkJJnJldGxlbiwgbXRkYmxrLT5jYWNoZV9kYXRhKTsKIAkJCQlpZiAocmV0KQogCQkJCQlyZXR1cm4gcmV0OwogCQkJCWlmIChyZXRsZW4gIT0gc2VjdF9zaXplKQpAQCAtMjA3LDcgKzIwOCw3IEBACiAJCQltdGQtPm5hbWUsIHBvcywgbGVuKTsKIAogCWlmICghc2VjdF9zaXplKQotCQlyZXR1cm4gTVREX1JFQUQgKG10ZCwgcG9zLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisJCXJldHVybiBtdGQtPnJlYWQobXRkLCBwb3MsIGxlbiwgJnJldGxlbiwgYnVmKTsKIAogCXdoaWxlIChsZW4gPiAwKSB7CiAJCXVuc2lnbmVkIGxvbmcgc2VjdF9zdGFydCA9IChwb3Mvc2VjdF9zaXplKSpzZWN0X3NpemU7CkBAIC0yMjYsNyArMjI3LDcgQEAKIAkJICAgIG10ZGJsay0+Y2FjaGVfb2Zmc2V0ID09IHNlY3Rfc3RhcnQpIHsKIAkJCW1lbWNweSAoYnVmLCBtdGRibGstPmNhY2hlX2RhdGEgKyBvZmZzZXQsIHNpemUpOwogCQl9IGVsc2UgewotCQkJcmV0ID0gTVREX1JFQUQgKG10ZCwgcG9zLCBzaXplLCAmcmV0bGVuLCBidWYpOworCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgcG9zLCBzaXplLCAmcmV0bGVuLCBidWYpOwogCQkJaWYgKHJldCkKIAkJCQlyZXR1cm4gcmV0OwogCQkJaWYgKHJldGxlbiAhPSBzaXplKQpAQCAtMjg4LDggKzI4OSw3IEBACiAKIAltdXRleF9pbml0KCZtdGRibGstPmNhY2hlX211dGV4KTsKIAltdGRibGstPmNhY2hlX3N0YXRlID0gU1RBVEVfRU1QVFk7Ci0JaWYgKChtdGRibGstPm10ZC0+ZmxhZ3MgJiBNVERfQ0FQX1JBTSkgIT0gTVREX0NBUF9SQU0gJiYKLQkgICAgbXRkYmxrLT5tdGQtPmVyYXNlc2l6ZSkgeworCWlmICggIShtdGRibGstPm10ZC0+ZmxhZ3MgJiBNVERfTk9fRVJBU0UpICYmIG10ZGJsay0+bXRkLT5lcmFzZXNpemUpIHsKIAkJbXRkYmxrLT5jYWNoZV9zaXplID0gbXRkYmxrLT5tdGQtPmVyYXNlc2l6ZTsKIAkJbXRkYmxrLT5jYWNoZV9kYXRhID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jIGIvZHJpdmVycy9tdGQvbXRkYmxvY2tfcm8uYwppbmRleCAwYzgzMGJhLi4yOTU2M2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRibG9ja19yby5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGJsb2NrX3JvLmMKQEAgLTQ1LDkgKzQ1LDcgQEAKIAlkZXYtPmJsa3NpemUgPSA1MTI7CiAJZGV2LT5zaXplID0gbXRkLT5zaXplID4+IDk7CiAJZGV2LT50ciA9IHRyOwotCWlmICgobXRkLT5mbGFncyAmIChNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQUJMRSkpICE9Ci0JICAgIChNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQUJMRSkpCi0JCWRldi0+cmVhZG9ubHkgPSAxOworCWRldi0+cmVhZG9ubHkgPSAxOwogCiAJYWRkX210ZF9ibGt0cmFuc19kZXYoZGV2KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNoYXIuYyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwppbmRleCA2ZjA0NDU4Li5hYTE4ZDQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY2hhci5jCkBAIC00OSwyNCArNDksMTggQEAKIH07CiAKIC8qCi0gKiBXZSB1c2UgZmlsZS0+cHJpdmF0ZV9kYXRhIHRvIHN0b3JlIGEgcG9pbnRlciB0byB0aGUgTVREZGV2aWNlLgotICogU2luY2UgYWxpZ2htZW50IGlzIGF0IGxlYXN0IDMyIGJpdHMsIHdlIGhhdmUgMiBiaXRzIGZyZWUgZm9yIE9UUAotICogbW9kZXMgYXMgd2VsbC4KKyAqIERhdGEgc3RydWN0dXJlIHRvIGhvbGQgdGhlIHBvaW50ZXIgdG8gdGhlIG10ZCBkZXZpY2UgYXMgd2VsbAorICogYXMgbW9kZSBpbmZvcm1hdGlvbiBvZnIgdmFyaW91cyB1c2UgY2FzZXMuCiAgKi8KLQotI2RlZmluZSBUT19NVEQoZmlsZSkgKHN0cnVjdCBtdGRfaW5mbyAqKSgobG9uZykoKGZpbGUpLT5wcml2YXRlX2RhdGEpICYgfjNMKQotCi0jZGVmaW5lIE1URF9NT0RFX09UUF9GQUNUCTEKLSNkZWZpbmUgTVREX01PREVfT1RQX1VTRVIJMgotI2RlZmluZSBNVERfTU9ERShmaWxlKQkJKChsb25nKSgoZmlsZSktPnByaXZhdGVfZGF0YSkgJiAzKQotCi0jZGVmaW5lIFNFVF9NVERfTU9ERShmaWxlLCBtb2RlKSBcCi0JZG8geyBsb25nIF9fcCA9IChsb25nKSgoZmlsZSktPnByaXZhdGVfZGF0YSk7IFwKLQkgICAgIChmaWxlKS0+cHJpdmF0ZV9kYXRhID0gKHZvaWQgKikoKF9fcCAmIH4zTCkgfCBtb2RlKTsgfSB3aGlsZSAoMCkKK3N0cnVjdCBtdGRfZmlsZV9pbmZvIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwllbnVtIG10ZF9maWxlX21vZGVzIG1vZGU7Cit9OwogCiBzdGF0aWMgbG9mZl90IG10ZF9sc2VlayAoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gVE9fTVREKGZpbGUpOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAogCXN3aXRjaCAob3JpZykgewogCWNhc2UgMDoKQEAgLTk3LDYgKzkxLDcgQEAKIAlpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwogCWludCBkZXZudW0gPSBtaW5vciA+PiAxOwogCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmk7CiAKIAlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAiTVREX29wZW5cbiIpOwogCkBAIC0xMTcsMTQgKzExMiwyMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBtdGQ7Ci0KIAkvKiBZb3UgY2FuJ3Qgb3BlbiBpdCBSVyBpZiBpdCdzIG5vdCBhIHdyaXRlYWJsZSBkZXZpY2UgKi8KIAlpZiAoKGZpbGUtPmZfbW9kZSAmIDIpICYmICEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKSB7CiAJCXB1dF9tdGRfZGV2aWNlKG10ZCk7CiAJCXJldHVybiAtRUFDQ0VTOwogCX0KIAorCW1maSA9IGt6YWxsb2Moc2l6ZW9mKCptZmkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1maSkgeworCQlwdXRfbXRkX2RldmljZShtdGQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWZpLT5tdGQgPSBtdGQ7CisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gbWZpOworCiAJcmV0dXJuIDA7CiB9IC8qIG10ZF9vcGVuICovCiAKQEAgLTEzMiwxNiArMTMzLDE3IEBACiAKIHN0YXRpYyBpbnQgbXRkX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJNVERfY2xvc2VcbiIpOwogCi0JbXRkID0gVE9fTVREKGZpbGUpOwotCiAJaWYgKG10ZC0+c3luYykKIAkJbXRkLT5zeW5jKG10ZCk7CiAKIAlwdXRfbXRkX2RldmljZShtdGQpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJa2ZyZWUobWZpKTsKIAogCXJldHVybiAwOwogfSAvKiBtdGRfY2xvc2UgKi8KQEAgLTE1Myw3ICsxNTUsOCBAQAogCiBzdGF0aWMgc3NpemVfdCBtdGRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IFRPX01URChmaWxlKTsKKwlzdHJ1Y3QgbXRkX2ZpbGVfaW5mbyAqbWZpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbWZpLT5tdGQ7CiAJc2l6ZV90IHJldGxlbj0wOwogCXNpemVfdCB0b3RhbF9yZXRsZW49MDsKIAlpbnQgcmV0PTA7CkBAIC0xNzAsMzYgKzE3Myw1OCBAQAogCiAJLyogRklYTUU6IFVzZSBraW92ZWMgaW4gMi41IHRvIGxvY2sgZG93biB0aGUgdXNlcidzIGJ1ZmZlcnMKIAkgICBhbmQgcGFzcyB0aGVtIGRpcmVjdGx5IHRvIHRoZSBNVEQgZnVuY3Rpb25zICovCisKKwlpZiAoY291bnQgPiBNQVhfS01BTExPQ19TSVpFKQorCQlrYnVmPWttYWxsb2MoTUFYX0tNQUxMT0NfU0laRSwgR0ZQX0tFUk5FTCk7CisJZWxzZQorCQlrYnVmPWttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCisJaWYgKCFrYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXdoaWxlIChjb3VudCkgeworCiAJCWlmIChjb3VudCA+IE1BWF9LTUFMTE9DX1NJWkUpCiAJCQlsZW4gPSBNQVhfS01BTExPQ19TSVpFOwogCQllbHNlCiAJCQlsZW4gPSBjb3VudDsKIAotCQlrYnVmPWttYWxsb2MobGVuLEdGUF9LRVJORUwpOwotCQlpZiAoIWtidWYpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlzd2l0Y2ggKE1URF9NT0RFKGZpbGUpKSB7Ci0JCWNhc2UgTVREX01PREVfT1RQX0ZBQ1Q6CisJCXN3aXRjaCAobWZpLT5tb2RlKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CiAJCQlyZXQgPSBtdGQtPnJlYWRfZmFjdF9wcm90X3JlZyhtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQkJYnJlYWs7CiAJCWNhc2UgTVREX01PREVfT1RQX1VTRVI6CiAJCQlyZXQgPSBtdGQtPnJlYWRfdXNlcl9wcm90X3JlZyhtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQkJYnJlYWs7CisJCWNhc2UgTVREX01PREVfUkFXOgorCQl7CisJCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisJCQlvcHMubW9kZSA9IE1URF9PT0JfUkFXOworCQkJb3BzLmRhdGJ1ZiA9IGtidWY7CisJCQlvcHMub29iYnVmID0gTlVMTDsKKwkJCW9wcy5sZW4gPSBsZW47CisKKwkJCXJldCA9IG10ZC0+cmVhZF9vb2IobXRkLCAqcHBvcywgJm9wcyk7CisJCQlyZXRsZW4gPSBvcHMucmV0bGVuOworCQkJYnJlYWs7CisJCX0KIAkJZGVmYXVsdDoKLQkJCXJldCA9IE1URF9SRUFEKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CisJCQlyZXQgPSBtdGQtPnJlYWQobXRkLCAqcHBvcywgbGVuLCAmcmV0bGVuLCBrYnVmKTsKIAkJfQogCQkvKiBOYW5kIHJldHVybnMgLUVCQURNU0cgb24gZWNjIGVycm9ycywgYnV0IGl0IHJldHVybnMKIAkJICogdGhlIGRhdGEuIEZvciBvdXIgdXNlcnNwYWNlIHRvb2xzIGl0IGlzIGltcG9ydGFudAogCQkgKiB0byBkdW1wIGFyZWFzIHdpdGggZWNjIGVycm9ycyAhCisJCSAqIEZvciBrZXJuZWwgaW50ZXJuYWwgdXNhZ2UgaXQgYWxzbyBtaWdodCByZXR1cm4gLUVVQ0xFQU4KKwkJICogdG8gc2lnbmFsIHRoZSBjYWxsZXIgdGhhdCBhIGJpdGZsaXAgaGFzIG9jY3VyZWQgYW5kIGhhcworCQkgKiBiZWVuIGNvcnJlY3RlZCBieSB0aGUgRUNDIGFsZ29yaXRobS4KIAkJICogVXNlcnNwYWNlIHNvZnR3YXJlIHdoaWNoIGFjY2Vzc2VzIE5BTkQgdGhpcyB3YXkKIAkJICogbXVzdCBiZSBhd2FyZSBvZiB0aGUgZmFjdCB0aGF0IGl0IGRlYWxzIHdpdGggTkFORAogCQkgKi8KLQkJaWYgKCFyZXQgfHwgKHJldCA9PSAtRUJBRE1TRykpIHsKKwkJaWYgKCFyZXQgfHwgKHJldCA9PSAtRVVDTEVBTikgfHwgKHJldCA9PSAtRUJBRE1TRykpIHsKIAkJCSpwcG9zICs9IHJldGxlbjsKIAkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBrYnVmLCByZXRsZW4pKSB7Ci0JCQkgICAgICAgIGtmcmVlKGtidWYpOworCQkJCWtmcmVlKGtidWYpOwogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQkJZWxzZQpAQCAtMjE1LDE1ICsyNDAsMTYgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAotCQlrZnJlZShrYnVmKTsKIAl9CiAKKwlrZnJlZShrYnVmKTsKIAlyZXR1cm4gdG90YWxfcmV0bGVuOwogfSAvKiBtdGRfcmVhZCAqLwogCiBzdGF0aWMgc3NpemVfdCBtdGRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCxsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IG10ZF9pbmZvICptdGQgPSBUT19NVEQoZmlsZSk7CisJc3RydWN0IG10ZF9maWxlX2luZm8gKm1maSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG1maS0+bXRkOwogCWNoYXIgKmtidWY7CiAJc2l6ZV90IHJldGxlbjsKIAlzaXplX3QgdG90YWxfcmV0bGVuPTA7CkBAIC0yNDEsMjUgKzI2NywyOCBAQAogCWlmICghY291bnQpCiAJCXJldHVybiAwOwogCisJaWYgKGNvdW50ID4gTUFYX0tNQUxMT0NfU0laRSkKKwkJa2J1Zj1rbWFsbG9jKE1BWF9LTUFMTE9DX1NJWkUsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJa2J1Zj1rbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKworCWlmICgha2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAl3aGlsZSAoY291bnQpIHsKKwogCQlpZiAoY291bnQgPiBNQVhfS01BTExPQ19TSVpFKQogCQkJbGVuID0gTUFYX0tNQUxMT0NfU0laRTsKIAkJZWxzZQogCQkJbGVuID0gY291bnQ7CiAKLQkJa2J1Zj1rbWFsbG9jKGxlbixHRlBfS0VSTkVMKTsKLQkJaWYgKCFrYnVmKSB7Ci0JCQlwcmludGsoImttYWxsb2MgaXMgbnVsbFxuIik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCiAJCWlmIChjb3B5X2Zyb21fdXNlcihrYnVmLCBidWYsIGxlbikpIHsKIAkJCWtmcmVlKGtidWYpOwogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KIAotCQlzd2l0Y2ggKE1URF9NT0RFKGZpbGUpKSB7Ci0JCWNhc2UgTVREX01PREVfT1RQX0ZBQ1Q6CisJCXN3aXRjaCAobWZpLT5tb2RlKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CiAJCQlyZXQgPSAtRVJPRlM7CiAJCQlicmVhazsKIAkJY2FzZSBNVERfTU9ERV9PVFBfVVNFUjoKQEAgLTI2OSw2ICsyOTgsMjEgQEAKIAkJCX0KIAkJCXJldCA9IG10ZC0+d3JpdGVfdXNlcl9wcm90X3JlZyhtdGQsICpwcG9zLCBsZW4sICZyZXRsZW4sIGtidWYpOwogCQkJYnJlYWs7CisKKwkJY2FzZSBNVERfTU9ERV9SQVc6CisJCXsKKwkJCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwkJCW9wcy5tb2RlID0gTVREX09PQl9SQVc7CisJCQlvcHMuZGF0YnVmID0ga2J1ZjsKKwkJCW9wcy5vb2JidWYgPSBOVUxMOworCQkJb3BzLmxlbiA9IGxlbjsKKworCQkJcmV0ID0gbXRkLT53cml0ZV9vb2IobXRkLCAqcHBvcywgJm9wcyk7CisJCQlyZXRsZW4gPSBvcHMucmV0bGVuOworCQkJYnJlYWs7CisJCX0KKwogCQlkZWZhdWx0OgogCQkJcmV0ID0gKCoobXRkLT53cml0ZSkpKG10ZCwgKnBwb3MsIGxlbiwgJnJldGxlbiwga2J1Zik7CiAJCX0KQEAgLTI4MiwxMCArMzI2LDkgQEAKIAkJCWtmcmVlKGtidWYpOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCi0JCWtmcmVlKGtidWYpOwogCX0KIAorCWtmcmVlKGtidWYpOwogCXJldHVybiB0b3RhbF9yZXRsZW47CiB9IC8qIG10ZF93cml0ZSAqLwogCkBAIC0yOTksMTMgKzM0Miw0NSBAQAogCXdha2VfdXAoKHdhaXRfcXVldWVfaGVhZF90ICopaW5zdHItPnByaXYpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfTVREX09UUCkgfHwgZGVmaW5lZChDT05GSUdfTVREX09ORU5BTkRfT1RQKQorc3RhdGljIGludCBvdHBfc2VsZWN0X2ZpbGVtb2RlKHN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmksIGludCBtb2RlKQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbWZpLT5tdGQ7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIE1URF9PVFBfRkFDVE9SWToKKwkJaWYgKCFtdGQtPnJlYWRfZmFjdF9wcm90X3JlZykKKwkJCXJldCA9IC1FT1BOT1RTVVBQOworCQllbHNlCisJCQltZmktPm1vZGUgPSBNVERfTU9ERV9PVFBfRkFDVE9SWTsKKwkJYnJlYWs7CisJY2FzZSBNVERfT1RQX1VTRVI6CisJCWlmICghbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcpCisJCQlyZXQgPSAtRU9QTk9UU1VQUDsKKwkJZWxzZQorCQkJbWZpLT5tb2RlID0gTVREX01PREVfT1RQX1VTRVI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJY2FzZSBNVERfT1RQX09GRjoKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisjZWxzZQorIyBkZWZpbmUgb3RwX3NlbGVjdF9maWxlbW9kZShmLG0pCS1FT1BOT1RTVVBQCisjZW5kaWYKKwogc3RhdGljIGludCBtdGRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgdV9pbnQgY21kLCB1X2xvbmcgYXJnKQogewotCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gVE9fTVREKGZpbGUpOworCXN0cnVjdCBtdGRfZmlsZV9pbmZvICptZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgcmV0ID0gMDsKIAl1X2xvbmcgc2l6ZTsKKwlzdHJ1Y3QgbXRkX2luZm9fdXNlciBpbmZvOwogCiAJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIk1URF9pb2N0bFxuIik7CiAKQEAgLTM0MSw3ICs0MTYsMTUgQEAKIAl9CiAKIAljYXNlIE1FTUdFVElORk86Ci0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgbXRkLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvX3VzZXIpKSkKKwkJaW5mby50eXBlCT0gbXRkLT50eXBlOworCQlpbmZvLmZsYWdzCT0gbXRkLT5mbGFnczsKKwkJaW5mby5zaXplCT0gbXRkLT5zaXplOworCQlpbmZvLmVyYXNlc2l6ZQk9IG10ZC0+ZXJhc2VzaXplOworCQlpbmZvLndyaXRlc2l6ZQk9IG10ZC0+d3JpdGVzaXplOworCQlpbmZvLm9vYnNpemUJPSBtdGQtPm9vYnNpemU7CisJCWluZm8uZWNjdHlwZQk9IG10ZC0+ZWNjdHlwZTsKKwkJaW5mby5lY2NzaXplCT0gbXRkLT5lY2NzaXplOworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZpbmZvLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvX3VzZXIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIApAQCAtNDAwLDggKzQ4Myw3IEBACiAJY2FzZSBNRU1XUklURU9PQjoKIAl7CiAJCXN0cnVjdCBtdGRfb29iX2J1ZiBidWY7Ci0JCXZvaWQgKmRhdGFidWY7Ci0JCXNzaXplX3QgcmV0bGVuOworCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCiAJCWlmKCEoZmlsZS0+Zl9tb2RlICYgMikpCiAJCQlyZXR1cm4gLUVQRVJNOwpAQCAtNDA5LDcgKzQ5MSw3IEBACiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCBhcmdwLCBzaXplb2Yoc3RydWN0IG10ZF9vb2JfYnVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoYnVmLmxlbmd0aCA+IDB4NDA5NikKKwkJaWYgKGJ1Zi5sZW5ndGggPiA0MDk2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCFtdGQtPndyaXRlX29vYikKQEAgLTQyMSwyMSArNTAzLDMyIEBACiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCi0JCWRhdGFidWYgPSBrbWFsbG9jKGJ1Zi5sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIWRhdGFidWYpCisJCW9wcy5sZW4gPSBidWYubGVuZ3RoOworCQlvcHMub29ibGVuID0gYnVmLmxlbmd0aDsKKwkJb3BzLm9vYm9mZnMgPSBidWYuc3RhcnQgJiAobXRkLT5vb2JzaXplIC0gMSk7CisJCW9wcy5kYXRidWYgPSBOVUxMOworCQlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwkJaWYgKG9wcy5vb2JvZmZzICYmIG9wcy5sZW4gPiAobXRkLT5vb2JzaXplIC0gb3BzLm9vYm9mZnMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb3BzLm9vYmJ1ZiA9IGttYWxsb2MoYnVmLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CisJCWlmICghb3BzLm9vYmJ1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhYnVmLCBidWYucHRyLCBidWYubGVuZ3RoKSkgewotCQkJa2ZyZWUoZGF0YWJ1Zik7CisJCWlmIChjb3B5X2Zyb21fdXNlcihvcHMub29iYnVmLCBidWYucHRyLCBidWYubGVuZ3RoKSkgeworCQkJa2ZyZWUob3BzLm9vYmJ1Zik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCi0JCXJldCA9IChtdGQtPndyaXRlX29vYikobXRkLCBidWYuc3RhcnQsIGJ1Zi5sZW5ndGgsICZyZXRsZW4sIGRhdGFidWYpOworCQlidWYuc3RhcnQgJj0gfihtdGQtPm9vYnNpemUgLSAxKTsKKwkJcmV0ID0gbXRkLT53cml0ZV9vb2IobXRkLCBidWYuc3RhcnQsICZvcHMpOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCArIHNpemVvZih1aW50MzJfdCksICZyZXRsZW4sIHNpemVvZih1aW50MzJfdCkpKQorCQlpZiAoY29weV90b191c2VyKGFyZ3AgKyBzaXplb2YodWludDMyX3QpLCAmb3BzLnJldGxlbiwKKwkJCQkgc2l6ZW9mKHVpbnQzMl90KSkpCiAJCQlyZXQgPSAtRUZBVUxUOwogCi0JCWtmcmVlKGRhdGFidWYpOworCQlrZnJlZShvcHMub29iYnVmKTsKIAkJYnJlYWs7CiAKIAl9CkBAIC00NDMsMTMgKzUzNiwxMiBAQAogCWNhc2UgTUVNUkVBRE9PQjoKIAl7CiAJCXN0cnVjdCBtdGRfb29iX2J1ZiBidWY7Ci0JCXZvaWQgKmRhdGFidWY7Ci0JCXNzaXplX3QgcmV0bGVuOworCQlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOwogCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCBhcmdwLCBzaXplb2Yoc3RydWN0IG10ZF9vb2JfYnVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAotCQlpZiAoYnVmLmxlbmd0aCA+IDB4NDA5NikKKwkJaWYgKGJ1Zi5sZW5ndGggPiA0MDk2KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJaWYgKCFtdGQtPnJlYWRfb29iKQpAQCAtNDU3LDIyICs1NDksMzIgQEAKIAkJZWxzZQogCQkJcmV0ID0gYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLnB0ciwKIAkJCQkJYnVmLmxlbmd0aCkgPyAwIDogLUVGQVVMVDsKLQogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAotCQlkYXRhYnVmID0ga21hbGxvYyhidWYubGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkYXRhYnVmKQorCQlvcHMubGVuID0gYnVmLmxlbmd0aDsKKwkJb3BzLm9vYmxlbiA9IGJ1Zi5sZW5ndGg7CisJCW9wcy5vb2JvZmZzID0gYnVmLnN0YXJ0ICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCQlvcHMuZGF0YnVmID0gTlVMTDsKKwkJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCisJCWlmIChvcHMub29ib2ZmcyAmJiBvcHMubGVuID4gKG10ZC0+b29ic2l6ZSAtIG9wcy5vb2JvZmZzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW9wcy5vb2JidWYgPSBrbWFsbG9jKGJ1Zi5sZW5ndGgsIEdGUF9LRVJORUwpOworCQlpZiAoIW9wcy5vb2JidWYpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAotCQlyZXQgPSAobXRkLT5yZWFkX29vYikobXRkLCBidWYuc3RhcnQsIGJ1Zi5sZW5ndGgsICZyZXRsZW4sIGRhdGFidWYpOworCQlidWYuc3RhcnQgJj0gfihtdGQtPm9vYnNpemUgLSAxKTsKKwkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGJ1Zi5zdGFydCwgJm9wcyk7CiAKLQkJaWYgKHB1dF91c2VyKHJldGxlbiwgKHVpbnQzMl90IF9fdXNlciAqKWFyZ3ApKQorCQlpZiAocHV0X3VzZXIob3BzLnJldGxlbiwgKHVpbnQzMl90IF9fdXNlciAqKWFyZ3ApKQogCQkJcmV0ID0gLUVGQVVMVDsKLQkJZWxzZSBpZiAocmV0bGVuICYmIGNvcHlfdG9fdXNlcihidWYucHRyLCBkYXRhYnVmLCByZXRsZW4pKQorCQllbHNlIGlmIChvcHMucmV0bGVuICYmIGNvcHlfdG9fdXNlcihidWYucHRyLCBvcHMub29iYnVmLAorCQkJCQkJICAgIG9wcy5yZXRsZW4pKQogCQkJcmV0ID0gLUVGQVVMVDsKIAotCQlrZnJlZShkYXRhYnVmKTsKKwkJa2ZyZWUob3BzLm9vYmJ1Zik7CiAJCWJyZWFrOwogCX0KIApAQCAtNTA0LDE2ICs2MDYsMjIgQEAKIAkJYnJlYWs7CiAJfQogCi0JY2FzZSBNRU1TRVRPT0JTRUw6Ci0JewotCQlpZiAoY29weV9mcm9tX3VzZXIoJm10ZC0+b29iaW5mbywgYXJncCwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlicmVhazsKLQl9Ci0KKwkvKiBMZWdhY3kgaW50ZXJmYWNlICovCiAJY2FzZSBNRU1HRVRPT0JTRUw6CiAJewotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICYobXRkLT5vb2JpbmZvKSwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKKwkJc3RydWN0IG5hbmRfb29iaW5mbyBvaTsKKworCQlpZiAoIW10ZC0+ZWNjbGF5b3V0KQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQlpZiAobXRkLT5lY2NsYXlvdXQtPmVjY2J5dGVzID4gQVJSQVlfU0laRShvaS5lY2Nwb3MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJb2kudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFOworCQltZW1jcHkoJm9pLmVjY3BvcywgbXRkLT5lY2NsYXlvdXQtPmVjY3Bvcywgc2l6ZW9mKG9pLmVjY3BvcykpOworCQltZW1jcHkoJm9pLm9vYmZyZWUsIG10ZC0+ZWNjbGF5b3V0LT5vb2JmcmVlLAorCQkgICAgICAgc2l6ZW9mKG9pLm9vYmZyZWUpKTsKKworCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZvaSwgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKIAl9CkBAIC01NDQsMzEgKzY1MiwxNyBAQAogCQlicmVhazsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTVREX09UUAorI2lmIGRlZmluZWQoQ09ORklHX01URF9PVFApIHx8IGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09UUCkKIAljYXNlIE9UUFNFTEVDVDoKIAl7CiAJCWludCBtb2RlOwogCQlpZiAoY29weV9mcm9tX3VzZXIoJm1vZGUsIGFyZ3AsIHNpemVvZihpbnQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwotCQlTRVRfTVREX01PREUoZmlsZSwgMCk7Ci0JCXN3aXRjaCAobW9kZSkgewotCQljYXNlIE1URF9PVFBfRkFDVE9SWToKLQkJCWlmICghbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcpCi0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQllbHNlCi0JCQkJU0VUX01URF9NT0RFKGZpbGUsIE1URF9NT0RFX09UUF9GQUNUKTsKLQkJCWJyZWFrOwotCQljYXNlIE1URF9PVFBfVVNFUjoKLQkJCWlmICghbXRkLT5yZWFkX2ZhY3RfcHJvdF9yZWcpCi0JCQkJcmV0ID0gLUVPUE5PVFNVUFA7Ci0JCQllbHNlCi0JCQkJU0VUX01URF9NT0RFKGZpbGUsIE1URF9NT0RFX09UUF9VU0VSKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVJTlZBTDsKLQkJY2FzZSBNVERfT1RQX09GRjoKLQkJCWJyZWFrOwotCQl9CisKKwkJbWZpLT5tb2RlID0gTVREX01PREVfTk9STUFMOworCisJCXJldCA9IG90cF9zZWxlY3RfZmlsZW1vZGUobWZpLCBtb2RlKTsKKwogCQlmaWxlLT5mX3BvcyA9IDA7CiAJCWJyZWFrOwogCX0KQEAgLTU4MCw4ICs2NzQsOCBAQAogCQlpZiAoIWJ1ZikKIAkJCXJldHVybiAtRU5PTUVNOwogCQlyZXQgPSAtRU9QTk9UU1VQUDsKLQkJc3dpdGNoIChNVERfTU9ERShmaWxlKSkgewotCQljYXNlIE1URF9NT0RFX09UUF9GQUNUOgorCQlzd2l0Y2ggKG1maS0+bW9kZSkgeworCQljYXNlIE1URF9NT0RFX09UUF9GQUNUT1JZOgogCQkJaWYgKG10ZC0+Z2V0X2ZhY3RfcHJvdF9pbmZvKQogCQkJCXJldCA9IG10ZC0+Z2V0X2ZhY3RfcHJvdF9pbmZvKG10ZCwgYnVmLCA0MDk2KTsKIAkJCWJyZWFrOwpAQCAtNTg5LDYgKzY4Myw4IEBACiAJCQlpZiAobXRkLT5nZXRfdXNlcl9wcm90X2luZm8pCiAJCQkJcmV0ID0gbXRkLT5nZXRfdXNlcl9wcm90X2luZm8obXRkLCBidWYsIDQwOTYpOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKIAkJfQogCQlpZiAocmV0ID49IDApIHsKIAkJCWlmIChjbWQgPT0gT1RQR0VUUkVHSU9OQ09VTlQpIHsKQEAgLTYwNyw3ICs3MDMsNyBAQAogCXsKIAkJc3RydWN0IG90cF9pbmZvIGluZm87CiAKLQkJaWYgKE1URF9NT0RFKGZpbGUpICE9IE1URF9NT0RFX09UUF9VU0VSKQorCQlpZiAobWZpLT5tb2RlICE9IE1URF9NT0RFX09UUF9VU0VSKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgYXJncCwgc2l6ZW9mKGluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtNjE4LDYgKzcxNCw0OSBAQAogCX0KICNlbmRpZgogCisJY2FzZSBFQ0NHRVRMQVlPVVQ6CisJeworCQlpZiAoIW10ZC0+ZWNjbGF5b3V0KQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm10ZC0+ZWNjbGF5b3V0LAorCQkJCSBzaXplb2Yoc3RydWN0IG5hbmRfZWNjbGF5b3V0KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCisJY2FzZSBFQ0NHRVRTVEFUUzoKKwl7CisJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJm10ZC0+ZWNjX3N0YXRzLAorCQkJCSBzaXplb2Yoc3RydWN0IG10ZF9lY2Nfc3RhdHMpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlicmVhazsKKwl9CisKKwljYXNlIE1UREZJTEVNT0RFOgorCXsKKwkJbWZpLT5tb2RlID0gMDsKKworCQlzd2l0Y2goYXJnKSB7CisJCWNhc2UgTVREX01PREVfT1RQX0ZBQ1RPUlk6CisJCWNhc2UgTVREX01PREVfT1RQX1VTRVI6CisJCQlyZXQgPSBvdHBfc2VsZWN0X2ZpbGVtb2RlKG1maSwgYXJnKTsKKwkJCWJyZWFrOworCisJCWNhc2UgTVREX01PREVfUkFXOgorCQkJaWYgKCFtdGQtPnJlYWRfb29iIHx8ICFtdGQtPndyaXRlX29vYikKKwkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCQltZmktPm1vZGUgPSBhcmc7CisKKwkJY2FzZSBNVERfTU9ERV9OT1JNQUw6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJZmlsZS0+Zl9wb3MgPSAwOworCQlicmVhazsKKwl9CisKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PVFRZOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvbmNhdC5jIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKaW5kZXggOWFmODQwMy4uMWZlYTYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29uY2F0LmMKQEAgLTE5LDYgKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbmNhdC5oPgogCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKIC8qCiAgKiBPdXIgc3RvcmFnZSBzdHJ1Y3R1cmU6CiAgKiBTdWJkZXYgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHN0cnVjdCBtdGRfaW5mbyBvYmplY3RzCkBAIC01NCw3ICs1Niw3IEBACiAJICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQogewogCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKLQlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgcmV0ID0gMCwgZXJyOwogCWludCBpOwogCiAJKnJldGxlbiA9IDA7CkBAIC03OCwxOSArODAsMjkgQEAKIAogCQllcnIgPSBzdWJkZXYtPnJlYWQoc3ViZGV2LCBmcm9tLCBzaXplLCAmcmV0c2l6ZSwgYnVmKTsKIAotCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJCS8qIFNhdmUgaW5mb3JtYXRpb24gYWJvdXQgYml0ZmxpcHMhICovCisJCWlmICh1bmxpa2VseShlcnIpKSB7CisJCQlpZiAoZXJyID09IC1FQkFETVNHKSB7CisJCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCQkJcmV0ID0gZXJyOworCQkJfSBlbHNlIGlmIChlcnIgPT0gLUVVQ0xFQU4pIHsKKwkJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQrKzsKKwkJCQkvKiBEbyBub3Qgb3ZlcndyaXRlIC1FQkFETVNHICEhICovCisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IGVycjsKKwkJCX0gZWxzZQorCQkJCXJldHVybiBlcnI7CisJCX0KIAogCQkqcmV0bGVuICs9IHJldHNpemU7CiAJCWxlbiAtPSBzaXplOwogCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKKwkJCXJldHVybiByZXQ7CiAKLQkJZXJyID0gLUVJTlZBTDsKIAkJYnVmICs9IHNpemU7CiAJCWZyb20gPSAwOwogCX0KLQlyZXR1cm4gZXJyOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDEsMjExICsxNTMsMTg1IEBACiB9CiAKIHN0YXRpYyBpbnQKLWNvbmNhdF9yZWFkX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsCi0JCXN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK2NvbmNhdF93cml0ZXYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAorCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbikKIHsKIAlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7Ci0JaW50IGVyciA9IC1FSU5WQUw7CisJc3RydWN0IGt2ZWMgKnZlY3NfY29weTsKKwl1bnNpZ25lZCBsb25nIGVudHJ5X2xvdywgZW50cnlfaGlnaDsKKwlzaXplX3QgdG90YWxfbGVuID0gMDsKIAlpbnQgaTsKLQotCSpyZXRsZW4gPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGNvbmNhdC0+bnVtX3N1YmRldjsgaSsrKSB7Ci0JCXN0cnVjdCBtdGRfaW5mbyAqc3ViZGV2ID0gY29uY2F0LT5zdWJkZXZbaV07Ci0JCXNpemVfdCBzaXplLCByZXRzaXplOwotCi0JCWlmIChmcm9tID49IHN1YmRldi0+c2l6ZSkgewotCQkJLyogTm90IGRlc3RpbmVkIGZvciB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IDA7Ci0JCQlmcm9tIC09IHN1YmRldi0+c2l6ZTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGZyb20gKyBsZW4gPiBzdWJkZXYtPnNpemUpCi0JCQkvKiBGaXJzdCBwYXJ0IGdvZXMgaW50byB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IHN1YmRldi0+c2l6ZSAtIGZyb207Ci0JCWVsc2UKLQkJCS8qIEVudGlyZSB0cmFuc2FjdGlvbiBnb2VzIGludG8gdGhpcyBzdWJkZXYgKi8KLQkJCXNpemUgPSBsZW47Ci0KLQkJaWYgKHN1YmRldi0+cmVhZF9lY2MpCi0JCQllcnIgPSBzdWJkZXYtPnJlYWRfZWNjKHN1YmRldiwgZnJvbSwgc2l6ZSwKLQkJCQkJICAgICAgICZyZXRzaXplLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLQkJZWxzZQotCQkJZXJyID0gLUVJTlZBTDsKLQotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0KLQkJKnJldGxlbiArPSByZXRzaXplOwotCQlsZW4gLT0gc2l6ZTsKLQkJaWYgKGxlbiA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQkJYnVmICs9IHNpemU7Ci0JCWlmIChlY2NidWYpIHsKLQkJCWVjY2J1ZiArPSBzdWJkZXYtPm9vYnNpemU7Ci0JCQkvKiBpbiBuYW5kLmMgYXQgbGVhc3QsIGVjY2J1ZnMgYXJlCi0JCQkgICB0YWdnZWQgd2l0aCAyIChpbnQpZWNjc3RhdHVzJzsgd2UKLQkJCSAgIG11c3QgYWNjb3VudCBmb3IgdGhlc2UgKi8KLQkJCWVjY2J1ZiArPSAyICogKHNpemVvZiAoaW50KSk7Ci0JCX0KLQkJZnJvbSA9IDA7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLWNvbmNhdF93cml0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsCi0JCSBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOwogCWludCBlcnIgPSAtRUlOVkFMOwotCWludCBpOwogCiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwogCiAJKnJldGxlbiA9IDA7CiAKKwkvKiBDYWxjdWxhdGUgdG90YWwgbGVuZ3RoIG9mIGRhdGEgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKwkJdG90YWxfbGVuICs9IHZlY3NbaV0uaW92X2xlbjsKKworCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KKwlpZiAoKHRvICsgdG90YWxfbGVuKSA+IG10ZC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBDaGVjayBhbGlnbm1lbnQgKi8KKwlpZiAobXRkLT53cml0ZXNpemUgPiAxKSB7CisJCWxvZmZfdCBfX3RvID0gdG87CisJCWlmIChkb19kaXYoX190bywgbXRkLT53cml0ZXNpemUpIHx8ICh0b3RhbF9sZW4gJSBtdGQtPndyaXRlc2l6ZSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBtYWtlIGEgY29weSBvZiB2ZWNzICovCisJdmVjc19jb3B5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGt2ZWMpICogY291bnQsIEdGUF9LRVJORUwpOworCWlmICghdmVjc19jb3B5KQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkodmVjc19jb3B5LCB2ZWNzLCBzaXplb2Yoc3RydWN0IGt2ZWMpICogY291bnQpOworCisJZW50cnlfbG93ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKIAkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKLQkJc2l6ZV90IHNpemUsIHJldHNpemU7CisJCXNpemVfdCBzaXplLCB3c2l6ZSwgcmV0c2l6ZSwgb2xkX2lvdl9sZW47CiAKIAkJaWYgKHRvID49IHN1YmRldi0+c2l6ZSkgewotCQkJc2l6ZSA9IDA7CiAJCQl0byAtPSBzdWJkZXYtPnNpemU7CiAJCQljb250aW51ZTsKIAkJfQotCQlpZiAodG8gKyBsZW4gPiBzdWJkZXYtPnNpemUpCi0JCQlzaXplID0gc3ViZGV2LT5zaXplIC0gdG87Ci0JCWVsc2UKLQkJCXNpemUgPSBsZW47CisKKwkJc2l6ZSA9IG1pbih0b3RhbF9sZW4sIChzaXplX3QpKHN1YmRldi0+c2l6ZSAtIHRvKSk7CisJCXdzaXplID0gc2l6ZTsgLyogc3RvcmUgZm9yIGZ1dHVyZSB1c2UgKi8KKworCQllbnRyeV9oaWdoID0gZW50cnlfbG93OworCQl3aGlsZSAoZW50cnlfaGlnaCA8IGNvdW50KSB7CisJCQlpZiAoc2l6ZSA8PSB2ZWNzX2NvcHlbZW50cnlfaGlnaF0uaW92X2xlbikKKwkJCQlicmVhazsKKwkJCXNpemUgLT0gdmVjc19jb3B5W2VudHJ5X2hpZ2grK10uaW92X2xlbjsKKwkJfQorCisJCW9sZF9pb3ZfbGVuID0gdmVjc19jb3B5W2VudHJ5X2hpZ2hdLmlvdl9sZW47CisJCXZlY3NfY29weVtlbnRyeV9oaWdoXS5pb3ZfbGVuID0gc2l6ZTsKIAogCQlpZiAoIShzdWJkZXYtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCiAJCQllcnIgPSAtRVJPRlM7Ci0JCWVsc2UgaWYgKHN1YmRldi0+d3JpdGVfZWNjKQotCQkJZXJyID0gc3ViZGV2LT53cml0ZV9lY2Moc3ViZGV2LCB0bywgc2l6ZSwKLQkJCQkJCSZyZXRzaXplLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKIAkJZWxzZQotCQkJZXJyID0gLUVJTlZBTDsKKwkJCWVyciA9IHN1YmRldi0+d3JpdGV2KHN1YmRldiwgJnZlY3NfY29weVtlbnRyeV9sb3ddLAorCQkJCWVudHJ5X2hpZ2ggLSBlbnRyeV9sb3cgKyAxLCB0bywgJnJldHNpemUpOworCisJCXZlY3NfY29weVtlbnRyeV9oaWdoXS5pb3ZfbGVuID0gb2xkX2lvdl9sZW4gLSBzaXplOworCQl2ZWNzX2NvcHlbZW50cnlfaGlnaF0uaW92X2Jhc2UgKz0gc2l6ZTsKKworCQllbnRyeV9sb3cgPSBlbnRyeV9oaWdoOwogCiAJCWlmIChlcnIpCiAJCQlicmVhazsKIAogCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCisJCXRvdGFsX2xlbiAtPSB3c2l6ZTsKKworCQlpZiAodG90YWxfbGVuID09IDApCiAJCQlicmVhazsKIAogCQllcnIgPSAtRUlOVkFMOwotCQlidWYgKz0gc2l6ZTsKLQkJaWYgKGVjY2J1ZikKLQkJCWVjY2J1ZiArPSBzdWJkZXYtPm9vYnNpemU7CiAJCXRvID0gMDsKIAl9CisKKwlrZnJlZSh2ZWNzX2NvcHkpOwogCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyBpbnQKLWNvbmNhdF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0JCXNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmKQorY29uY2F0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOwotCWludCBlcnIgPSAtRUlOVkFMOwotCWludCBpOworCXN0cnVjdCBtdGRfb29iX29wcyBkZXZvcHMgPSAqb3BzOworCWludCBpLCBlcnIsIHJldCA9IDA7CiAKLQkqcmV0bGVuID0gMDsKKwlvcHMtPnJldGxlbiA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKIAkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKLQkJc2l6ZV90IHNpemUsIHJldHNpemU7CiAKIAkJaWYgKGZyb20gPj0gc3ViZGV2LT5zaXplKSB7Ci0JCQkvKiBOb3QgZGVzdGluZWQgZm9yIHRoaXMgc3ViZGV2ICovCi0JCQlzaXplID0gMDsKIAkJCWZyb20gLT0gc3ViZGV2LT5zaXplOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKGZyb20gKyBsZW4gPiBzdWJkZXYtPnNpemUpCi0JCQkvKiBGaXJzdCBwYXJ0IGdvZXMgaW50byB0aGlzIHN1YmRldiAqLwotCQkJc2l6ZSA9IHN1YmRldi0+c2l6ZSAtIGZyb207Ci0JCWVsc2UKLQkJCS8qIEVudGlyZSB0cmFuc2FjdGlvbiBnb2VzIGludG8gdGhpcyBzdWJkZXYgKi8KLQkJCXNpemUgPSBsZW47CiAKLQkJaWYgKHN1YmRldi0+cmVhZF9vb2IpCi0JCQllcnIgPSBzdWJkZXYtPnJlYWRfb29iKHN1YmRldiwgZnJvbSwgc2l6ZSwKLQkJCQkJICAgICAgICZyZXRzaXplLCBidWYpOwotCQllbHNlCi0JCQllcnIgPSAtRUlOVkFMOworCQkvKiBwYXJ0aWFsIHJlYWQgPyAqLworCQlpZiAoZnJvbSArIGRldm9wcy5sZW4gPiBzdWJkZXYtPnNpemUpCisJCQlkZXZvcHMubGVuID0gc3ViZGV2LT5zaXplIC0gZnJvbTsKIAotCQlpZiAoZXJyKQotCQkJYnJlYWs7CisJCWVyciA9IHN1YmRldi0+cmVhZF9vb2Ioc3ViZGV2LCBmcm9tLCAmZGV2b3BzKTsKKwkJb3BzLT5yZXRsZW4gKz0gZGV2b3BzLnJldGxlbjsKIAotCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKKwkJLyogU2F2ZSBpbmZvcm1hdGlvbiBhYm91dCBiaXRmbGlwcyEgKi8KKwkJaWYgKHVubGlrZWx5KGVycikpIHsKKwkJCWlmIChlcnIgPT0gLUVCQURNU0cpIHsKKwkJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJCQlyZXQgPSBlcnI7CisJCQl9IGVsc2UgaWYgKGVyciA9PSAtRVVDTEVBTikgeworCQkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQkJCS8qIERvIG5vdCBvdmVyd3JpdGUgLUVCQURNU0cgISEgKi8KKwkJCQlpZiAoIXJldCkKKwkJCQkJcmV0ID0gZXJyOworCQkJfSBlbHNlCisJCQkJcmV0dXJuIGVycjsKKwkJfQogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWJ1ZiArPSBzaXplOworCQlkZXZvcHMubGVuID0gb3BzLT5sZW4gLSBvcHMtPnJldGxlbjsKKwkJaWYgKCFkZXZvcHMubGVuKQorCQkJcmV0dXJuIHJldDsKKworCQlpZiAoZGV2b3BzLmRhdGJ1ZikKKwkJCWRldm9wcy5kYXRidWYgKz0gZGV2b3BzLnJldGxlbjsKKwkJaWYgKGRldm9wcy5vb2JidWYpCisJCQlkZXZvcHMub29iYnVmICs9IGRldm9wcy5vb2JsZW47CisKIAkJZnJvbSA9IDA7CiAJfQotCXJldHVybiBlcnI7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQKLWNvbmNhdF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKQorY29uY2F0X3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgbXRkX2NvbmNhdCAqY29uY2F0ID0gQ09OQ0FUKG10ZCk7Ci0JaW50IGVyciA9IC1FSU5WQUw7Ci0JaW50IGk7CisJc3RydWN0IG10ZF9vb2Jfb3BzIGRldm9wcyA9ICpvcHM7CisJaW50IGksIGVycjsKIAogCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAotCSpyZXRsZW4gPSAwOworCW9wcy0+cmV0bGVuID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgewogCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOwotCQlzaXplX3Qgc2l6ZSwgcmV0c2l6ZTsKIAogCQlpZiAodG8gPj0gc3ViZGV2LT5zaXplKSB7Ci0JCQlzaXplID0gMDsKIAkJCXRvIC09IHN1YmRldi0+c2l6ZTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICh0byArIGxlbiA+IHN1YmRldi0+c2l6ZSkKLQkJCXNpemUgPSBzdWJkZXYtPnNpemUgLSB0bzsKLQkJZWxzZQotCQkJc2l6ZSA9IGxlbjsKIAotCQlpZiAoIShzdWJkZXYtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCi0JCQllcnIgPSAtRVJPRlM7Ci0JCWVsc2UgaWYgKHN1YmRldi0+d3JpdGVfb29iKQotCQkJZXJyID0gc3ViZGV2LT53cml0ZV9vb2Ioc3ViZGV2LCB0bywgc2l6ZSwgJnJldHNpemUsCi0JCQkJCQlidWYpOwotCQllbHNlCi0JCQllcnIgPSAtRUlOVkFMOworCQkvKiBwYXJ0aWFsIHdyaXRlID8gKi8KKwkJaWYgKHRvICsgZGV2b3BzLmxlbiA+IHN1YmRldi0+c2l6ZSkKKwkJCWRldm9wcy5sZW4gPSBzdWJkZXYtPnNpemUgLSB0bzsKIAorCQllcnIgPSBzdWJkZXYtPndyaXRlX29vYihzdWJkZXYsIHRvLCAmZGV2b3BzKTsKKwkJb3BzLT5yZXRsZW4gKz0gZGV2b3BzLnJldGxlbjsKIAkJaWYgKGVycikKLQkJCWJyZWFrOworCQkJcmV0dXJuIGVycjsKIAotCQkqcmV0bGVuICs9IHJldHNpemU7Ci0JCWxlbiAtPSBzaXplOwotCQlpZiAobGVuID09IDApCi0JCQlicmVhazsKKwkJZGV2b3BzLmxlbiA9IG9wcy0+bGVuIC0gb3BzLT5yZXRsZW47CisJCWlmICghZGV2b3BzLmxlbikKKwkJCXJldHVybiAwOwogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWJ1ZiArPSBzaXplOworCQlpZiAoZGV2b3BzLmRhdGJ1ZikKKwkJCWRldm9wcy5kYXRidWYgKz0gZGV2b3BzLnJldGxlbjsKKwkJaWYgKGRldm9wcy5vb2JidWYpCisJCQlkZXZvcHMub29iYnVmICs9IGRldm9wcy5vb2JsZW47CiAJCXRvID0gMDsKIAl9Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHZvaWQgY29uY2F0X2VyYXNlX2NhbGxiYWNrKHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKQEAgLTYzNiw2ICs2MjIsNjAgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgY29uY2F0X2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQoreworCXN0cnVjdCBtdGRfY29uY2F0ICpjb25jYXQgPSBDT05DQVQobXRkKTsKKwlpbnQgaSwgcmVzID0gMDsKKworCWlmICghY29uY2F0LT5zdWJkZXZbMF0tPmJsb2NrX2lzYmFkKQorCQlyZXR1cm4gcmVzOworCisJaWYgKG9mcyA+IG10ZC0+c2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgY29uY2F0LT5udW1fc3ViZGV2OyBpKyspIHsKKwkJc3RydWN0IG10ZF9pbmZvICpzdWJkZXYgPSBjb25jYXQtPnN1YmRldltpXTsKKworCQlpZiAob2ZzID49IHN1YmRldi0+c2l6ZSkgeworCQkJb2ZzIC09IHN1YmRldi0+c2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmVzID0gc3ViZGV2LT5ibG9ja19pc2JhZChzdWJkZXYsIG9mcyk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgY29uY2F0X2Jsb2NrX21hcmtiYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCit7CisJc3RydWN0IG10ZF9jb25jYXQgKmNvbmNhdCA9IENPTkNBVChtdGQpOworCWludCBpLCBlcnIgPSAtRUlOVkFMOworCisJaWYgKCFjb25jYXQtPnN1YmRldlswXS0+YmxvY2tfbWFya2JhZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZzID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBjb25jYXQtPm51bV9zdWJkZXY7IGkrKykgeworCQlzdHJ1Y3QgbXRkX2luZm8gKnN1YmRldiA9IGNvbmNhdC0+c3ViZGV2W2ldOworCisJCWlmIChvZnMgPj0gc3ViZGV2LT5zaXplKSB7CisJCQlvZnMgLT0gc3ViZGV2LT5zaXplOworCQkJY29udGludWU7CisJCX0KKworCQllcnIgPSBzdWJkZXYtPmJsb2NrX21hcmtiYWQoc3ViZGV2LCBvZnMpOworCQlpZiAoIWVycikKKwkJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBjb25zdHJ1Y3RzIGEgdmlydHVhbCBNVEQgZGV2aWNlIGJ5IGNvbmNhdGVuYXRpbmcKICAqIG51bV9kZXZzIE1URCBkZXZpY2VzLiBBIHBvaW50ZXIgdG8gdGhlIG5ldyBkZXZpY2Ugb2JqZWN0IGlzCkBAIC02NzcsMTggKzcxNywyMiBAQAogCWNvbmNhdC0+bXRkLmZsYWdzID0gc3ViZGV2WzBdLT5mbGFnczsKIAljb25jYXQtPm10ZC5zaXplID0gc3ViZGV2WzBdLT5zaXplOwogCWNvbmNhdC0+bXRkLmVyYXNlc2l6ZSA9IHN1YmRldlswXS0+ZXJhc2VzaXplOwotCWNvbmNhdC0+bXRkLm9vYmJsb2NrID0gc3ViZGV2WzBdLT5vb2JibG9jazsKKwljb25jYXQtPm10ZC53cml0ZXNpemUgPSBzdWJkZXZbMF0tPndyaXRlc2l6ZTsKIAljb25jYXQtPm10ZC5vb2JzaXplID0gc3ViZGV2WzBdLT5vb2JzaXplOwogCWNvbmNhdC0+bXRkLmVjY3R5cGUgPSBzdWJkZXZbMF0tPmVjY3R5cGU7CiAJY29uY2F0LT5tdGQuZWNjc2l6ZSA9IHN1YmRldlswXS0+ZWNjc2l6ZTsKLQlpZiAoc3ViZGV2WzBdLT5yZWFkX2VjYykKLQkJY29uY2F0LT5tdGQucmVhZF9lY2MgPSBjb25jYXRfcmVhZF9lY2M7Ci0JaWYgKHN1YmRldlswXS0+d3JpdGVfZWNjKQotCQljb25jYXQtPm10ZC53cml0ZV9lY2MgPSBjb25jYXRfd3JpdGVfZWNjOworCWlmIChzdWJkZXZbMF0tPndyaXRldikKKwkJY29uY2F0LT5tdGQud3JpdGV2ID0gY29uY2F0X3dyaXRldjsKIAlpZiAoc3ViZGV2WzBdLT5yZWFkX29vYikKIAkJY29uY2F0LT5tdGQucmVhZF9vb2IgPSBjb25jYXRfcmVhZF9vb2I7CiAJaWYgKHN1YmRldlswXS0+d3JpdGVfb29iKQogCQljb25jYXQtPm10ZC53cml0ZV9vb2IgPSBjb25jYXRfd3JpdGVfb29iOworCWlmIChzdWJkZXZbMF0tPmJsb2NrX2lzYmFkKQorCQljb25jYXQtPm10ZC5ibG9ja19pc2JhZCA9IGNvbmNhdF9ibG9ja19pc2JhZDsKKwlpZiAoc3ViZGV2WzBdLT5ibG9ja19tYXJrYmFkKQorCQljb25jYXQtPm10ZC5ibG9ja19tYXJrYmFkID0gY29uY2F0X2Jsb2NrX21hcmtiYWQ7CisKKwljb25jYXQtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzID0gc3ViZGV2WzBdLT5lY2Nfc3RhdHMuYmFkYmxvY2tzOwogCiAJY29uY2F0LT5zdWJkZXZbMF0gPSBzdWJkZXZbMF07CiAKQEAgLTcxNywxMiArNzYxLDEyIEBACiAJCQkJICAgIHN1YmRldltpXS0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFOwogCQl9CiAJCWNvbmNhdC0+bXRkLnNpemUgKz0gc3ViZGV2W2ldLT5zaXplOwotCQlpZiAoY29uY2F0LT5tdGQub29iYmxvY2sgICAhPSAgc3ViZGV2W2ldLT5vb2JibG9jayB8fAorCQljb25jYXQtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzICs9CisJCQlzdWJkZXZbaV0tPmVjY19zdGF0cy5iYWRibG9ja3M7CisJCWlmIChjb25jYXQtPm10ZC53cml0ZXNpemUgICAhPSAgc3ViZGV2W2ldLT53cml0ZXNpemUgfHwKIAkJICAgIGNvbmNhdC0+bXRkLm9vYnNpemUgICAgIT0gIHN1YmRldltpXS0+b29ic2l6ZSB8fAogCQkgICAgY29uY2F0LT5tdGQuZWNjdHlwZSAgICAhPSAgc3ViZGV2W2ldLT5lY2N0eXBlIHx8CiAJCSAgICBjb25jYXQtPm10ZC5lY2NzaXplICAgICE9ICBzdWJkZXZbaV0tPmVjY3NpemUgfHwKLQkJICAgICFjb25jYXQtPm10ZC5yZWFkX2VjYyAgIT0gIXN1YmRldltpXS0+cmVhZF9lY2MgfHwKLQkJICAgICFjb25jYXQtPm10ZC53cml0ZV9lY2MgIT0gIXN1YmRldltpXS0+d3JpdGVfZWNjIHx8CiAJCSAgICAhY29uY2F0LT5tdGQucmVhZF9vb2IgICE9ICFzdWJkZXZbaV0tPnJlYWRfb29iIHx8CiAJCSAgICAhY29uY2F0LT5tdGQud3JpdGVfb29iICE9ICFzdWJkZXZbaV0tPndyaXRlX29vYikgewogCQkJa2ZyZWUoY29uY2F0KTsKQEAgLTczNCwxNCArNzc4LDExIEBACiAKIAl9CiAKKwljb25jYXQtPm10ZC5lY2NsYXlvdXQgPSBzdWJkZXZbMF0tPmVjY2xheW91dDsKKwogCWNvbmNhdC0+bnVtX3N1YmRldiA9IG51bV9kZXZzOwogCWNvbmNhdC0+bXRkLm5hbWUgPSBuYW1lOwogCi0JLyoKLQkgKiBOT1RFOiBmb3Igbm93LCB3ZSBkbyBub3QgcHJvdmlkZSBhbnkgcmVhZHYoKS93cml0ZXYoKSBtZXRob2RzCi0JICogICAgICAgYmVjYXVzZSB0aGV5IGFyZSBtZXNzeSB0byBpbXBsZW1lbnQgYW5kIHRoZXkgYXJlIG5vdAotCSAqICAgICAgIHVzZWQgdG8gYSBncmVhdCBleHRlbnQgYW55d2F5LgotCSAqLwogCWNvbmNhdC0+bXRkLmVyYXNlID0gY29uY2F0X2VyYXNlOwogCWNvbmNhdC0+bXRkLnJlYWQgPSBjb25jYXRfcmVhZDsKIAljb25jYXQtPm10ZC53cml0ZSA9IGNvbmNhdF93cml0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwppbmRleCA5OTA1ODcwLi4xNmE5NTJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY29yZS5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwpAQCAtNDcsNiArNDcsNyBAQAogewogCWludCBpOwogCisJQlVHX09OKG10ZC0+d3JpdGVzaXplID09IDApOwogCW11dGV4X2xvY2soJm10ZF90YWJsZV9tdXRleCk7CiAKIAlmb3IgKGk9MDsgaSA8IE1BWF9NVERfREVWSUNFUzsgaSsrKQpAQCAtMjU0LDM3ICsyNTUsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLQotLyogZGVmYXVsdF9tdGRfcmVhZHYgLSBkZWZhdWx0IG10ZCByZWFkdiBtZXRob2QgZm9yIE1URCBkZXZpY2VzIHRoYXQgZG9udAotICoJCSAgICAgICBpbXBsZW1lbnQgdGhlaXIgb3duCi0gKi8KLQotaW50IGRlZmF1bHRfbXRkX3JlYWR2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IGZyb20sIHNpemVfdCAqcmV0bGVuKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQlzaXplX3QgdG90bGVuID0gMCwgdGhpc2xlbjsKLQlpbnQgcmV0ID0gMDsKLQotCWlmKCFtdGQtPnJlYWQpIHsKLQkJcmV0ID0gLUVJTzsKLQl9IGVsc2UgewotCQlmb3IgKGk9MDsgaTxjb3VudDsgaSsrKSB7Ci0JCQlpZiAoIXZlY3NbaV0uaW92X2xlbikKLQkJCQljb250aW51ZTsKLQkJCXJldCA9IG10ZC0+cmVhZChtdGQsIGZyb20sIHZlY3NbaV0uaW92X2xlbiwgJnRoaXNsZW4sIHZlY3NbaV0uaW92X2Jhc2UpOwotCQkJdG90bGVuICs9IHRoaXNsZW47Ci0JCQlpZiAocmV0IHx8IHRoaXNsZW4gIT0gdmVjc1tpXS5pb3ZfbGVuKQotCQkJCWJyZWFrOwotCQkJZnJvbSArPSB2ZWNzW2ldLmlvdl9sZW47Ci0JCX0KLQl9Ci0JaWYgKHJldGxlbikKLQkJKnJldGxlbiA9IHRvdGxlbjsKLQlyZXR1cm4gcmV0OwotfQotCi0KIEVYUE9SVF9TWU1CT0woYWRkX210ZF9kZXZpY2UpOwogRVhQT1JUX1NZTUJPTChkZWxfbXRkX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKGdldF9tdGRfZGV2aWNlKTsKQEAgLTI5Miw3ICsyNjIsNiBAQAogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9tdGRfdXNlcik7CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfbXRkX3VzZXIpOwogRVhQT1JUX1NZTUJPTChkZWZhdWx0X210ZF93cml0ZXYpOwotRVhQT1JUX1NZTUJPTChkZWZhdWx0X210ZF9yZWFkdik7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRwYXJ0LmMgYi9kcml2ZXJzL210ZC9tdGRwYXJ0LmMKaW5kZXggOTkzOTU5MS4uNzdhNzEyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkcGFydC5jCisrKyBiL2RyaXZlcnMvbXRkL210ZHBhcnQuYwpAQCAtNTEsMTYgKzUxLDIxIEBACiAJCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCiB7CiAJc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOworCWludCByZXM7CisKIAlpZiAoZnJvbSA+PSBtdGQtPnNpemUpCiAJCWxlbiA9IDA7CiAJZWxzZSBpZiAoZnJvbSArIGxlbiA+IG10ZC0+c2l6ZSkKIAkJbGVuID0gbXRkLT5zaXplIC0gZnJvbTsKLQlpZiAocGFydC0+bWFzdGVyLT5yZWFkX2VjYyA9PSBOVUxMKQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkIChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYpOwotCWVsc2UKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZF9lY2MgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1ZiwgTlVMTCwgJm10ZC0+b29iaW5mbyk7CisJcmVzID0gcGFydC0+bWFzdGVyLT5yZWFkIChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCisJCQkJICAgbGVuLCByZXRsZW4sIGJ1Zik7CisJaWYgKHVubGlrZWx5KHJlcykpIHsKKwkJaWYgKHJlcyA9PSAtRVVDTEVBTikKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQlpZiAocmVzID09IC1FQkFETVNHKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJfQorCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgcGFydF9wb2ludCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLApAQCAtNzQsNiArNzksNyBAQAogCXJldHVybiBwYXJ0LT5tYXN0ZXItPnBvaW50IChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCiAJCQkJICAgIGxlbiwgcmV0bGVuLCBidWYpOwogfQorCiBzdGF0aWMgdm9pZCBwYXJ0X3VucG9pbnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmFkZHIsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKQEAgLTgxLDMxICs4NywyNSBAQAogCXBhcnQtPm1hc3Rlci0+dW5wb2ludCAocGFydC0+bWFzdGVyLCBhZGRyLCBmcm9tICsgcGFydC0+b2Zmc2V0LCBsZW4pOwogfQogCi0KLXN0YXRpYyBpbnQgcGFydF9yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBwYXJ0X3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7Ci0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCWlmIChmcm9tID49IG10ZC0+c2l6ZSkKLQkJbGVuID0gMDsKLQllbHNlIGlmIChmcm9tICsgbGVuID4gbXRkLT5zaXplKQotCQlsZW4gPSBtdGQtPnNpemUgLSBmcm9tOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPnJlYWRfZWNjIChwYXJ0LT5tYXN0ZXIsIGZyb20gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYsIGVjY2J1Ziwgb29ic2VsKTsKLX0KKwlpbnQgcmVzOwogCi1zdGF0aWMgaW50IHBhcnRfcmVhZF9vb2IgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CiAJaWYgKGZyb20gPj0gbXRkLT5zaXplKQotCQlsZW4gPSAwOwotCWVsc2UgaWYgKGZyb20gKyBsZW4gPiBtdGQtPnNpemUpCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIGZyb207Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZF9vb2IgKHBhcnQtPm1hc3RlciwgZnJvbSArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7CisJCXJldHVybiAtRUlOVkFMOworCWlmIChmcm9tICsgb3BzLT5sZW4gPiBtdGQtPnNpemUpCisJCXJldHVybiAtRUlOVkFMOworCXJlcyA9IHBhcnQtPm1hc3Rlci0+cmVhZF9vb2IocGFydC0+bWFzdGVyLCBmcm9tICsgcGFydC0+b2Zmc2V0LCBvcHMpOworCisJaWYgKHVubGlrZWx5KHJlcykpIHsKKwkJaWYgKHJlcyA9PSAtRVVDTEVBTikKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCsrOworCQlpZiAocmVzID09IC1FQkFETVNHKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJfQorCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgcGFydF9yZWFkX3VzZXJfcHJvdF9yZWcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKQEAgLTE0OCw0NCArMTQ4LDIzIEBACiAJCWxlbiA9IDA7CiAJZWxzZSBpZiAodG8gKyBsZW4gPiBtdGQtPnNpemUpCiAJCWxlbiA9IG10ZC0+c2l6ZSAtIHRvOwotCWlmIChwYXJ0LT5tYXN0ZXItPndyaXRlX2VjYyA9PSBOVUxMKQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZSAocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7Ci0JZWxzZQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZV9lY2MgKHBhcnQtPm1hc3RlciwgdG8gKyBwYXJ0LT5vZmZzZXQsCi0JCQkJCWxlbiwgcmV0bGVuLCBidWYsIE5VTEwsICZtdGQtPm9vYmluZm8pOwotCisJcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGUgKHBhcnQtPm1hc3RlciwgdG8gKyBwYXJ0LT5vZmZzZXQsCisJCQkJICAgIGxlbiwgcmV0bGVuLCBidWYpOwogfQogCi1zdGF0aWMgaW50IHBhcnRfd3JpdGVfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCQkJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLAotCQkJIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCitzdGF0aWMgaW50IHBhcnRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7CiAJc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwotCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKLQkJcmV0dXJuIC1FUk9GUzsKLQlpZiAob29ic2VsID09IE5VTEwpCi0JCW9vYnNlbCA9ICZtdGQtPm9vYmluZm87Ci0JaWYgKHRvID49IG10ZC0+c2l6ZSkKLQkJbGVuID0gMDsKLQllbHNlIGlmICh0byArIGxlbiA+IG10ZC0+c2l6ZSkKLQkJbGVuID0gbXRkLT5zaXplIC0gdG87Ci0JcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGVfZWNjIChwYXJ0LT5tYXN0ZXIsIHRvICsgcGFydC0+b2Zmc2V0LAotCQkJCQlsZW4sIHJldGxlbiwgYnVmLCBlY2NidWYsIG9vYnNlbCk7Ci19CiAKLXN0YXRpYyBpbnQgcGFydF93cml0ZV9vb2IgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwogCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJcmV0dXJuIC1FUk9GUzsKKwogCWlmICh0byA+PSBtdGQtPnNpemUpCi0JCWxlbiA9IDA7Ci0JZWxzZSBpZiAodG8gKyBsZW4gPiBtdGQtPnNpemUpCi0JCWxlbiA9IG10ZC0+c2l6ZSAtIHRvOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRlX29vYiAocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwKLQkJCQkJbGVuLCByZXRsZW4sIGJ1Zik7CisJCXJldHVybiAtRUlOVkFMOworCWlmICh0byArIG9wcy0+bGVuID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZV9vb2IocGFydC0+bWFzdGVyLCB0byArIHBhcnQtPm9mZnNldCwgb3BzKTsKIH0KIAogc3RhdGljIGludCBwYXJ0X3dyaXRlX3VzZXJfcHJvdF9yZWcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKQEAgLTIwOCw1MiArMTg3LDggQEAKIAlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7CiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwotCWlmIChwYXJ0LT5tYXN0ZXItPndyaXRldl9lY2MgPT0gTlVMTCkKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+d3JpdGV2IChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAorCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRldiAocGFydC0+bWFzdGVyLCB2ZWNzLCBjb3VudCwKIAkJCQkJdG8gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbik7Ci0JZWxzZQotCQlyZXR1cm4gcGFydC0+bWFzdGVyLT53cml0ZXZfZWNjIChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAotCQkJCQl0byArIHBhcnQtPm9mZnNldCwgcmV0bGVuLAotCQkJCQlOVUxMLCAmbXRkLT5vb2JpbmZvKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3JlYWR2IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgIHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbikKLXsKLQlzdHJ1Y3QgbXRkX3BhcnQgKnBhcnQgPSBQQVJUKG10ZCk7Ci0JaWYgKHBhcnQtPm1hc3Rlci0+cmVhZHZfZWNjID09IE5VTEwpCi0JCXJldHVybiBwYXJ0LT5tYXN0ZXItPnJlYWR2IChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAotCQkJCQlmcm9tICsgcGFydC0+b2Zmc2V0LCByZXRsZW4pOwotCWVsc2UKLQkJcmV0dXJuIHBhcnQtPm1hc3Rlci0+cmVhZHZfZWNjIChwYXJ0LT5tYXN0ZXIsIHZlY3MsIGNvdW50LAotCQkJCQlmcm9tICsgcGFydC0+b2Zmc2V0LCByZXRsZW4sCi0JCQkJCU5VTEwsICZtdGQtPm9vYmluZm8pOwotfQotCi1zdGF0aWMgaW50IHBhcnRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsICBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuLAotCQkJIHVfY2hhciAqZWNjYnVmLCAgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQotewotCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKLQlpZiAoIShtdGQtPmZsYWdzICYgTVREX1dSSVRFQUJMRSkpCi0JCXJldHVybiAtRVJPRlM7Ci0JaWYgKG9vYnNlbCA9PSBOVUxMKQotCQlvb2JzZWwgPSAmbXRkLT5vb2JpbmZvOwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPndyaXRldl9lY2MgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCXRvICsgcGFydC0+b2Zmc2V0LCByZXRsZW4sCi0JCQkJCWVjY2J1Ziwgb29ic2VsKTsKLX0KLQotc3RhdGljIGludCBwYXJ0X3JlYWR2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsICBzdHJ1Y3Qga3ZlYyAqdmVjcywKLQkJCSB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgZnJvbSwgc2l6ZV90ICpyZXRsZW4sCi0JCQkgdV9jaGFyICplY2NidWYsICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0ICpwYXJ0ID0gUEFSVChtdGQpOwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQlyZXR1cm4gcGFydC0+bWFzdGVyLT5yZWFkdl9lY2MgKHBhcnQtPm1hc3RlciwgdmVjcywgY291bnQsCi0JCQkJCWZyb20gKyBwYXJ0LT5vZmZzZXQsIHJldGxlbiwKLQkJCQkJZWNjYnVmLCBvb2JzZWwpOwogfQogCiBzdGF0aWMgaW50IHBhcnRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCkBAIC0zMjksMTIgKzI2NCwxNyBAQAogc3RhdGljIGludCBwYXJ0X2Jsb2NrX21hcmtiYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQogewogCXN0cnVjdCBtdGRfcGFydCAqcGFydCA9IFBBUlQobXRkKTsKKwlpbnQgcmVzOworCiAJaWYgKCEobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpKQogCQlyZXR1cm4gLUVST0ZTOwogCWlmIChvZnMgPj0gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlvZnMgKz0gcGFydC0+b2Zmc2V0OwotCXJldHVybiBwYXJ0LT5tYXN0ZXItPmJsb2NrX21hcmtiYWQocGFydC0+bWFzdGVyLCBvZnMpOworCXJlcyA9IHBhcnQtPm1hc3Rlci0+YmxvY2tfbWFya2JhZChwYXJ0LT5tYXN0ZXIsIG9mcyk7CisJaWYgKCFyZXMpCisJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOworCXJldHVybiByZXM7CiB9CiAKIC8qCkBAIC0zOTgsNyArMzM4LDcgQEAKIAkJc2xhdmUtPm10ZC50eXBlID0gbWFzdGVyLT50eXBlOwogCQlzbGF2ZS0+bXRkLmZsYWdzID0gbWFzdGVyLT5mbGFncyAmIH5wYXJ0c1tpXS5tYXNrX2ZsYWdzOwogCQlzbGF2ZS0+bXRkLnNpemUgPSBwYXJ0c1tpXS5zaXplOwotCQlzbGF2ZS0+bXRkLm9vYmJsb2NrID0gbWFzdGVyLT5vb2JibG9jazsKKwkJc2xhdmUtPm10ZC53cml0ZXNpemUgPSBtYXN0ZXItPndyaXRlc2l6ZTsKIAkJc2xhdmUtPm10ZC5vb2JzaXplID0gbWFzdGVyLT5vb2JzaXplOwogCQlzbGF2ZS0+bXRkLmVjY3R5cGUgPSBtYXN0ZXItPmVjY3R5cGU7CiAJCXNsYXZlLT5tdGQuZWNjc2l6ZSA9IG1hc3Rlci0+ZWNjc2l6ZTsKQEAgLTQxNSwxMCArMzU1LDYgQEAKIAkJCXNsYXZlLT5tdGQudW5wb2ludCA9IHBhcnRfdW5wb2ludDsKIAkJfQogCi0JCWlmIChtYXN0ZXItPnJlYWRfZWNjKQotCQkJc2xhdmUtPm10ZC5yZWFkX2VjYyA9IHBhcnRfcmVhZF9lY2M7Ci0JCWlmIChtYXN0ZXItPndyaXRlX2VjYykKLQkJCXNsYXZlLT5tdGQud3JpdGVfZWNjID0gcGFydF93cml0ZV9lY2M7CiAJCWlmIChtYXN0ZXItPnJlYWRfb29iKQogCQkJc2xhdmUtPm10ZC5yZWFkX29vYiA9IHBhcnRfcmVhZF9vb2I7CiAJCWlmIChtYXN0ZXItPndyaXRlX29vYikKQEAgLTQ0MywxMiArMzc5LDYgQEAKIAkJfQogCQlpZiAobWFzdGVyLT53cml0ZXYpCiAJCQlzbGF2ZS0+bXRkLndyaXRldiA9IHBhcnRfd3JpdGV2OwotCQlpZiAobWFzdGVyLT5yZWFkdikKLQkJCXNsYXZlLT5tdGQucmVhZHYgPSBwYXJ0X3JlYWR2OwotCQlpZiAobWFzdGVyLT53cml0ZXZfZWNjKQotCQkJc2xhdmUtPm10ZC53cml0ZXZfZWNjID0gcGFydF93cml0ZXZfZWNjOwotCQlpZiAobWFzdGVyLT5yZWFkdl9lY2MpCi0JCQlzbGF2ZS0+bXRkLnJlYWR2X2VjYyA9IHBhcnRfcmVhZHZfZWNjOwogCQlpZiAobWFzdGVyLT5sb2NrKQogCQkJc2xhdmUtPm10ZC5sb2NrID0gcGFydF9sb2NrOwogCQlpZiAobWFzdGVyLT51bmxvY2spCkBAIC01MjgsOCArNDU4LDE3IEBACiAJCQkJcGFydHNbaV0ubmFtZSk7CiAJCX0KIAotCQkvKiBjb3B5IG9vYmluZm8gZnJvbSBtYXN0ZXIgKi8KLQkJbWVtY3B5KCZzbGF2ZS0+bXRkLm9vYmluZm8sICZtYXN0ZXItPm9vYmluZm8sIHNpemVvZihzbGF2ZS0+bXRkLm9vYmluZm8pKTsKKwkJc2xhdmUtPm10ZC5lY2NsYXlvdXQgPSBtYXN0ZXItPmVjY2xheW91dDsKKwkJaWYgKG1hc3Rlci0+YmxvY2tfaXNiYWQpIHsKKwkJCXVpbnQzMl90IG9mZnMgPSAwOworCisJCQl3aGlsZShvZmZzIDwgc2xhdmUtPm10ZC5zaXplKSB7CisJCQkJaWYgKG1hc3Rlci0+YmxvY2tfaXNiYWQobWFzdGVyLAorCQkJCQkJCW9mZnMgKyBzbGF2ZS0+b2Zmc2V0KSkKKwkJCQkJc2xhdmUtPm10ZC5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CisJCQkJb2ZmcyArPSBzbGF2ZS0+bXRkLmVyYXNlc2l6ZTsKKwkJCX0KKwkJfQogCiAJCWlmKHBhcnRzW2ldLm10ZHApCiAJCXsJLyogc3RvcmUgdGhlIG9iamVjdCBwb2ludGVyIChjYWxsZXIgbWF5IG9yIG1heSBub3QgcmVnaXN0ZXIgaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBjZmUyODhhLi4zZGI3N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0yMyw2ICsyMywxNCBAQAogCSAgZGV2aWNlIHRoaW5rcyB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwsIGEgYml0IGNvdWxkIGhhdmUgYmVlbgogCSAgZmxpcHBlZCBhY2NpZGVudGFseSBkdWUgdG8gZGV2aWNlIHdlYXIgb3Igc29tZXRoaW5nIGVsc2UuCiAKK2NvbmZpZyBNVERfTkFORF9FQ0NfU01DCisJYm9vbCAiTkFORCBFQ0MgU21hcnQgTWVkaWEgYnl0ZSBvcmRlciIKKwlkZXBlbmRzIG9uIE1URF9OQU5ECisJZGVmYXVsdCBuCisJaGVscAorCSAgU29mdHdhcmUgRUNDIGFjY29yZGluZyB0byB0aGUgU21hcnQgTWVkaWEgU3BlY2lmaWNhdGlvbi4KKwkgIFRoZSBvcmlnaW5hbCBMaW51eCBpbXBsZW1lbnRhdGlvbiBoYWQgYnl0ZSAwIGFuZCAxIHN3YXBwZWQuCisKIGNvbmZpZyBNVERfTkFORF9BVVRDUFUxMgogCXRyaXN0YXRlICJTbWFydE1lZGlhQ2FyZCBvbiBhdXRyb25peCBhdXRjcHUxMiBib2FyZCIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEFSQ0hfQVVUQ1BVMTIKQEAgLTQ5LDEyICs1NywyNCBAQAogCWhlbHAKIAkgIElmIHlvdSBoYWQgdG8gYXNrLCB5b3UgZG9uJ3QgaGF2ZSBvbmUuIFNheSAnTicuCiAKK2NvbmZpZyBNVERfTkFORF9BTVNfREVMVEEKKwl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gQW1zdHJhZCBFMyIKKwlkZXBlbmRzIG9uIE1BQ0hfQU1TX0RFTFRBICYmIE1URF9OQU5ECisJaGVscAorCSAgU3VwcG9ydCBmb3IgTkFORCBmbGFzaCBvbiBBbXN0cmFkIEUzIChEZWx0YSkuCisKIGNvbmZpZyBNVERfTkFORF9UT1RPCiAJdHJpc3RhdGUgIk5BTkQgRmxhc2ggZGV2aWNlIG9uIFRPVE8gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAgJiYgTVREX05BTkQKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUCAmJiBNVERfTkFORCAmJiBCUk9LRU4KIAloZWxwCiAJICBTdXBwb3J0IGZvciBOQU5EIGZsYXNoIG9uIFRleGFzIEluc3RydW1lbnRzIFRvdG8gcGxhdGZvcm0uCiAKK2NvbmZpZyBNVERfTkFORF9UUzcyNTAKKwl0cmlzdGF0ZSAiTkFORCBGbGFzaCBkZXZpY2Ugb24gVFMtNzI1MCBib2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfVFM3MlhYICYmIE1URF9OQU5ECisJaGVscAorCSAgU3VwcG9ydCBmb3IgTkFORCBmbGFzaCBvbiBUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyNTAgcGxhdGZvcm0uCisKIGNvbmZpZyBNVERfTkFORF9JRFMKIAl0cmlzdGF0ZQogCkBAIC03Niw3ICs5Niw3IEBACiAKIGNvbmZpZyBNVERfTkFORF9QUENIQU1FTEVPTkVWQgogCXRyaXN0YXRlICJOQU5EIEZsYXNoIGRldmljZSBvbiBQUENoYW1lbGVvbkVWQiBib2FyZCIKLQlkZXBlbmRzIG9uIFBQQ0hBTUVMRU9ORVZCICYmIE1URF9OQU5ECisJZGVwZW5kcyBvbiBQUENIQU1FTEVPTkVWQiAmJiBNVERfTkFORCAmJiBCUk9LRU4KIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgdGhlIE5BTkQgZmxhc2ggZHJpdmVyIG9uIHRoZSBQUENoYW1lbGVvbiBFVkIgQm9hcmQuCiAKQEAgLTg3LDcgKzEwNyw3IEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIE5BTkQgZmxhc2ggY29udHJvbGxlciBvbiB0aGUgUzNDMjQxMCBhbmQgUzNDMjQ0MAogCSAgU29DcwogCi0JICBObyBib2FyZCBzcGVjZmljIHN1cHBvcnQgaXMgZG9uZSBieSB0aGlzIGRyaXZlciwgZWFjaCBib2FyZAorCSAgTm8gYm9hcmQgc3BlY2lmaWMgc3VwcG9ydCBpcyBkb25lIGJ5IHRoaXMgZHJpdmVyLCBlYWNoIGJvYXJkCiAJICBtdXN0IGFkdmVydGlzZSBhIHBsYXRmb3JtX2RldmljZSBmb3IgdGhlIGRyaXZlciB0byBhdHRhY2guCiAKIGNvbmZpZyBNVERfTkFORF9TM0MyNDEwX0RFQlVHCkBAIC0xMDksNiArMTI5LDIyIEBACiAJICBjdXJyZW50bHkgbm90IGJlIGFibGUgdG8gc3dpdGNoIHRvIHNvZnR3YXJlLCBhcyB0aGVyZSBpcyBubwogCSAgaW1wbGVtZW50YXRpb24gZm9yIEVDQyBtZXRob2QgdXNlZCBieSB0aGUgUzNDMjQxMAogCitjb25maWcgTVREX05BTkRfTkRGQworCXRyaXN0YXRlICJOREZDIE5hbkQgRmxhc2ggQ29udHJvbGxlciIKKwlkZXBlbmRzIG9uIE1URF9OQU5EICYmIDQ0eAorCWhlbHAKKwkgTkRGQyBOYW5kIEZsYXNoIENvbnRyb2xsZXJzIGFyZSBpbnRlZ3JhdGVkIGluIEVQNDR4IFNvQ3MKKworY29uZmlnIE1URF9OQU5EX1MzQzI0MTBfQ0xLU1RPUAorCWJvb2wgIlMzQzI0MTAgTkFORCBJRExFIGNsb2NrIHN0b3AiCisJZGVwZW5kcyBvbiBNVERfTkFORF9TM0MyNDEwCisJZGVmYXVsdCBuCisJaGVscAorCSAgU3RvcCB0aGUgY2xvY2sgdG8gdGhlIE5BTkQgY29udHJvbGxlciB3aGVuIHRoZXJlIGlzIG5vIGNoaXAKKwkgIHNlbGVjdGVkIHRvIHNhdmUgcG93ZXIuIFRoaXMgd2lsbCBtZWFuIHRoZXJlIGlzIGEgc21hbGwgZGVsYXkKKwkgIHdoZW4gdGhlIGlzIE5BTkQgY2hpcCBzZWxlY3RlZCBvciByZWxlYXNlZCwgYnV0IHdpbGwgc2F2ZQorCSAgYXBwcm94aW1hdGVseSA1bUEgb2YgcG93ZXIgd2hlbiB0aGVyZSBpcyBub3RoaW5nIGhhcHBlbmluZy4KKwogY29uZmlnIE1URF9OQU5EX0RJU0tPTkNISVAKIAl0cmlzdGF0ZSAiRGlza09uQ2hpcCAyMDAwLCBNaWxsZW5uaXVtIGFuZCBNaWxsZW5uaXVtIFBsdXMgKE5BTkQgcmVpbXBsZW1lbnRhdGlvbikgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBNVERfTkFORCAmJiBFWFBFUklNRU5UQUwKQEAgLTE4MywxMSArMjE5LDI0IEBACiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggb24gU2hhcnAgU0wgU2VyaWVzIChDN3h4ICsgb3RoZXJzKSIKIAlkZXBlbmRzIG9uIE1URF9OQU5EICYmIEFSQ0hfUFhBCiAKK2NvbmZpZyBNVERfTkFORF9DUzU1M1gKKwl0cmlzdGF0ZSAiTkFORCBzdXBwb3J0IGZvciBDUzU1MzUvQ1M1NTM2IChBTUQgR2VvZGUgY29tcGFuaW9uIGNoaXApIgorCWRlcGVuZHMgb24gTVREX05BTkQgJiYgWDg2XzMyICYmIChYODZfUEMgfHwgWDg2X0dFTkVSSUNBUkNIKQorCWhlbHAKKwkgIFRoZSBDUzU1M3ggY29tcGFuaW9uIGNoaXBzIGZvciB0aGUgQU1EIEdlb2RlIHByb2Nlc3NvcgorCSAgaW5jbHVkZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXJzIHdpdGggYnVpbHQtaW4gaGFyZHdhcmUgRUNDCisJICBjYXBhYmlsaXRpZXM7IGVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgeW91IHRvIHVzZQorCSAgdGhlc2UuIFRoZSBkcml2ZXIgd2lsbCBjaGVjayB0aGUgTVNScyB0byB2ZXJpZnkgdGhhdCB0aGUKKwkgIGNvbnRyb2xsZXIgaXMgZW5hYmxlZCBmb3IgTkFORCwgYW5kIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0CisJICB0aGUgY29udHJvbGxlciBiZSBpbiBNTUlPIG1vZGUuCisKKwkgIElmIHlvdSBzYXkgIm0iLCB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkICJjczU1M3hfbmFuZC5rbyIuCisKIGNvbmZpZyBNVERfTkFORF9OQU5EU0lNCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIE5BTkQgRmxhc2ggU2ltdWxhdG9yIgogCWRlcGVuZHMgb24gTVREX05BTkQgJiYgTVREX1BBUlRJVElPTlMKIAloZWxwCi0JICBUaGUgc2ltdWxhdG9yIG1heSBzaW11bGF0ZSB2ZXJpb3VzIE5BTkQgZmxhc2ggY2hpcHMgZm9yIHRoZQorCSAgVGhlIHNpbXVsYXRvciBtYXkgc2ltdWxhdGUgdmFyaW91cyBOQU5EIGZsYXNoIGNoaXBzIGZvciB0aGUKIAkgIE1URCBuYW5kIGxheWVyLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlIGIvZHJpdmVycy9tdGQvbmFuZC9NYWtlZmlsZQppbmRleCA0MTc0MjAyLi5mNzQ3NTkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvTWFrZWZpbGUKQEAgLTcsNiArNyw3IEBACiBvYmotJChDT05GSUdfTVREX05BTkRfSURTKQkJKz0gbmFuZF9pZHMubwogCiBvYmotJChDT05GSUdfTVREX05BTkRfU1BJQSkJCSs9IHNwaWEubworb2JqLSQoQ09ORklHX01URF9OQU5EX0FNU19ERUxUQSkJKz0gYW1zLWRlbHRhLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9UT1RPKQkJKz0gdG90by5vCiBvYmotJChDT05GSUdfTVREX05BTkRfQVVUQ1BVMTIpCQkrPSBhdXRjcHUxMi5vCiBvYmotJChDT05GSUdfTVREX05BTkRfRURCNzMxMikJCSs9IGVkYjczMTIubwpAQCAtMTcsNiArMTgsOSBAQAogb2JqLSQoQ09ORklHX01URF9OQU5EX0gxOTAwKQkJKz0gaDE5MTAubwogb2JqLSQoQ09ORklHX01URF9OQU5EX1JUQ19GUk9NNCkJKz0gcnRjX2Zyb200Lm8KIG9iai0kKENPTkZJR19NVERfTkFORF9TSEFSUFNMKQkJKz0gc2hhcnBzbC5vCitvYmotJChDT05GSUdfTVREX05BTkRfVFM3MjUwKQkJKz0gdHM3MjUwLm8KIG9iai0kKENPTkZJR19NVERfTkFORF9OQU5EU0lNKQkJKz0gbmFuZHNpbS5vCitvYmotJChDT05GSUdfTVREX05BTkRfQ1M1NTNYKQkJKz0gY3M1NTN4X25hbmQubworb2JqLSQoQ09ORklHX01URF9OQU5EX05ERkMpCQkrPSBuZGZjLm8KIAogbmFuZC1vYmpzID0gbmFuZF9iYXNlLm8gbmFuZF9iYnQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4OTdkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiAgZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+CisgKgorICogIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC90b3RvLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBPdmVydmlldzoKKyAqICAgVGhpcyBpcyBhIGRldmljZSBkcml2ZXIgZm9yIHRoZSBOQU5EIGZsYXNoIGRldmljZSBmb3VuZCBvbiB0aGUKKyAqICAgQW1zdHJhZCBFMyAoRGVsdGEpLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC1hbXMtZGVsdGEuaD4KKworLyoKKyAqIE1URCBzdHJ1Y3R1cmUgZm9yIEUzIChEZWx0YSkKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqYW1zX2RlbHRhX210ZCA9IE5VTEw7CisKKyNkZWZpbmUgTkFORF9NQVNLIChBTVNfREVMVEFfTEFUQ0gyX05BTkRfTlJFIHwgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XRSB8IEFNU19ERUxUQV9MQVRDSDJfTkFORF9DTEUgfCBBTVNfREVMVEFfTEFUQ0gyX05BTkRfQUxFIHwgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05DRSB8IEFNU19ERUxUQV9MQVRDSDJfTkFORF9OV1ApCisKKy8qCisgKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0geworCXsgLm5hbWUJCT0gIktlcm5lbCIsCisJICAub2Zmc2V0CT0gMCwKKwkgIC5zaXplCQk9IDMgKiBTWl8xTSArIFNaXzUxMksgfSwKKwl7IC5uYW1lCQk9ICJ1LWJvb3QiLAorCSAgLm9mZnNldAk9IDMgKiBTWl8xTSArIFNaXzUxMkssCisJICAuc2l6ZQkJPSBTWl8yNTZLIH0sCisJeyAubmFtZQkJPSAidS1ib290IHBhcmFtcyIsCisJICAub2Zmc2V0CT0gMyAqIFNaXzFNICsgU1pfNTEySyArIFNaXzI1NkssCisJICAuc2l6ZQkJPSBTWl8yNTZLIH0sCisJeyAubmFtZQkJPSAiQW1zdHJhZCBMRFIiLAorCSAgLm9mZnNldAk9IDQgKiBTWl8xTSwKKwkgIC5zaXplCQk9IFNaXzI1NksgfSwKKwl7IC5uYW1lCQk9ICJGaWxlIHN5c3RlbSIsCisJICAub2Zmc2V0CT0gNCAqIFNaXzFNICsgMSAqIFNaXzI1NkssCisJICAuc2l6ZQkJPSAyNyAqIFNaXzFNIH0sCisJeyAubmFtZQkJPSAiUEJMIHJlc2VydmVkIiwKKwkgIC5vZmZzZXQJPSAzMiAqIFNaXzFNIC0gMyAqIFNaXzI1NkssCisJICAuc2l6ZQkJPSAgMyAqIFNaXzI1NksgfSwKK307CisKK3N0YXRpYyB2b2lkIGFtc19kZWx0YV93cml0ZV9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgYnl0ZSkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJb21hcF93cml0ZXcoMCwgKE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fSU9fQ05UTCkpOworCW9tYXBfd3JpdGV3KGJ5dGUsIHRoaXMtPklPX0FERFJfVyk7CisJYW1zX2RlbHRhX2xhdGNoMl93cml0ZShBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFLCAwKTsKKwluZGVsYXkoNDApOworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XRSwKKwkJCSAgICAgICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFKTsKK30KKworc3RhdGljIHVfY2hhciBhbXNfZGVsdGFfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXVfY2hhciByZXM7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9OQU5EX05SRSwgMCk7CisJbmRlbGF5KDQwKTsKKwlvbWFwX3dyaXRldyh+MCwgKE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fSU9fQ05UTCkpOworCXJlcyA9IG9tYXBfcmVhZHcodGhpcy0+SU9fQUREUl9SKTsKKwlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTkFORF9OUkUsCisJCQkgICAgICAgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05SRSk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBhbXNfZGVsdGFfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwKKwkJCQlpbnQgbGVuKQoreworCWludCBpOworCisJZm9yIChpPTA7IGk8bGVuOyBpKyspCisJCWFtc19kZWx0YV93cml0ZV9ieXRlKG10ZCwgYnVmW2ldKTsKK30KKworc3RhdGljIHZvaWQgYW1zX2RlbHRhX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpPGxlbjsgaSsrKQorCQlidWZbaV0gPSBhbXNfZGVsdGFfcmVhZF9ieXRlKG10ZCk7Cit9CisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLAorCQkJCWludCBsZW4pCit7CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTxsZW47IGkrKykKKwkJaWYgKGJ1ZltpXSAhPSBhbXNfZGVsdGFfcmVhZF9ieXRlKG10ZCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAwOworfQorCisvKgorICogQ29tbWFuZCBjb250cm9sIGZ1bmN0aW9uCisgKgorICogY3RybDoKKyAqIE5BTkRfTkNFOiBiaXQgMCAtPiBiaXQgMgorICogTkFORF9DTEU6IGJpdCAxIC0+IGJpdCA3CisgKiBOQU5EX0FMRTogYml0IDIgLT4gYml0IDYKKyAqLworc3RhdGljIHZvaWQgYW1zX2RlbHRhX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBpbnQgY3RybCkKK3sKKworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBsb25nIGJpdHM7CisKKwkJYml0cyA9ICh+Y3RybCAmIE5BTkRfTkNFKSA8PCAyOworCQliaXRzIHw9IChjdHJsICYgTkFORF9DTEUpIDw8IDc7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0FMRSkgPDwgNjsKKworCQlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKDB4QzIsIGJpdHMpOworCX0KKworCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJYW1zX2RlbHRhX3dyaXRlX2J5dGUobXRkLCBjbWQpOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9uYW5kX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBvbWFwX2dldF9ncGlvX2RhdGFpbihBTVNfREVMVEFfR1BJT19QSU5fTkFORF9SQik7Cit9CisKKy8qCisgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKKyAqLworc3RhdGljIGludCBfX2luaXQgYW1zX2RlbHRhX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOworCWludCBlcnIgPSAwOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJYW1zX2RlbHRhX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKworCQkJCXNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbXNfZGVsdGFfbXRkKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgRTMgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhbXNfZGVsdGFfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmYW1zX2RlbHRhX210ZFsxXSk7CisKKwkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KKwltZW1zZXQoYW1zX2RlbHRhX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCisJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KKwlhbXNfZGVsdGFfbXRkLT5wcml2ID0gdGhpczsKKworCS8qIFNldCBhZGRyZXNzIG9mIE5BTkQgSU8gbGluZXMgKi8KKwl0aGlzLT5JT19BRERSX1IgPSAoT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19JTlBVVF9MQVRDSCk7CisJdGhpcy0+SU9fQUREUl9XID0gKE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fT1VUUFVUKTsKKwl0aGlzLT5yZWFkX2J5dGUgPSBhbXNfZGVsdGFfcmVhZF9ieXRlOworCXRoaXMtPndyaXRlX2J1ZiA9IGFtc19kZWx0YV93cml0ZV9idWY7CisJdGhpcy0+cmVhZF9idWYgPSBhbXNfZGVsdGFfcmVhZF9idWY7CisJdGhpcy0+dmVyaWZ5X2J1ZiA9IGFtc19kZWx0YV92ZXJpZnlfYnVmOworCXRoaXMtPmNtZF9jdHJsID0gYW1zX2RlbHRhX2h3Y29udHJvbDsKKwlpZiAoIW9tYXBfcmVxdWVzdF9ncGlvKEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCKSkgeworCQl0aGlzLT5kZXZfcmVhZHkgPSBhbXNfZGVsdGFfbmFuZF9yZWFkeTsKKwl9IGVsc2UgeworCQl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNvdWxkbid0IHJlcXVlc3QgZ3BpbyBmb3IgRGVsdGEgTkFORCByZWFkeS5cbiIpOworCX0KKwkvKiAyNSB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KKwl0aGlzLT5jaGlwX2RlbGF5ID0gMzA7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOworCisJLyogU2V0IGNoaXAgZW5hYmxlZCwgYnV0ICAqLworCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoTkFORF9NQVNLLCBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTlJFIHwKKwkJCQkJICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldFIHwKKwkJCQkJICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTkNFIHwKKwkJCQkJICBBTVNfREVMVEFfTEFUQ0gyX05BTkRfTldQKTsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4oYW1zX2RlbHRhX210ZCwgMSkpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9tdGQ7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKwlhZGRfbXRkX3BhcnRpdGlvbnMoYW1zX2RlbHRhX210ZCwgcGFydGl0aW9uX2luZm8sCisJCQkgICBBUlJBWV9TSVpFKHBhcnRpdGlvbl9pbmZvKSk7CisKKwlnb3RvIG91dDsKKworIG91dF9tdGQ6CisJa2ZyZWUoYW1zX2RlbHRhX210ZCk7Cisgb3V0OgorCXJldHVybiBlcnI7Cit9CisKK21vZHVsZV9pbml0KGFtc19kZWx0YV9pbml0KTsKKworLyoKKyAqIENsZWFuIHVwIHJvdXRpbmUKKyAqLworc3RhdGljIHZvaWQgX19leGl0IGFtc19kZWx0YV9jbGVhbnVwKHZvaWQpCit7CisJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCisJbmFuZF9yZWxlYXNlKGFtc19kZWx0YV9tdGQpOworCisJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KKwlrZnJlZShhbXNfZGVsdGFfbXRkKTsKK30KK21vZHVsZV9leGl0KGFtc19kZWx0YV9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSm9uYXRoYW4gTWNEb3dlbGwgPG5vb2RsZXNAZWFydGgubGk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdsdWUgbGF5ZXIgZm9yIE5BTkQgZmxhc2ggb24gQW1zdHJhZCBFMyAoRGVsdGEpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKaW5kZXggYmRlMzU1MC4uMzEyMjgzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KQEAgLTM4LDIyICszOSwyMSBAQAogICovCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICphdTE1NTBfbXRkID0gTlVMTDsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnBfbmFuZDsKLXN0YXRpYyBpbnQgbmFuZF93aWR0aCA9IDE7IC8qIGRlZmF1bHQgeDgqLworc3RhdGljIGludCBuYW5kX3dpZHRoID0gMTsJLyogZGVmYXVsdCB4OCAqLworc3RhdGljIHZvaWQgKCphdTE1NTBfd3JpdGVfYnl0ZSkoc3RydWN0IG10ZF9pbmZvICosIHVfY2hhcik7CiAKIC8qCiAgKiBEZWZpbmUgcGFydGl0aW9ucyBmb3IgZmxhc2ggZGV2aWNlCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewogCXsKLQkJLm5hbWUgCT0gIk5BTkQgRlMgMCIsCi0JICAJLm9mZnNldCA9IDAsCi0JICAJLnNpemUgCT0gOCoxMDI0KjEwMjQKLQl9LAorCSAubmFtZSA9ICJOQU5EIEZTIDAiLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSA4ICogMTAyNCAqIDEwMjR9LAogCXsKLQkJLm5hbWUgCT0gIk5BTkQgRlMgMSIsCi0JCS5vZmZzZXQgPSAgTVREUEFSVF9PRlNfQVBQRU5ELAotIAkJLnNpemUgCT0gICAgTVREUEFSVF9TSVpfRlVMTAotCX0KKwkgLm5hbWUgPSAiTkFORCBGUyAxIiwKKwkgLm9mZnNldCA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkgLnNpemUgPSBNVERQQVJUX1NJWl9GVUxMfQogfTsKIAogLyoqCkBAIC0xMzAsMjEgKzEzMCw2IEBACiB9CiAKIC8qKgotICogYXVfd3JpdGVfd29yZCAtICB3cml0ZSBvbmUgd29yZCB0byB0aGUgY2hpcAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB3b3JkOglkYXRhIHdvcmQgdG8gd3JpdGUKLSAqCi0gKiAgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGggd2l0aG91dAotICogZW5kaWFuZXNzIGNvbnZlcnNpb24KLSAqLwotc3RhdGljIHZvaWQgYXVfd3JpdGVfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdTE2IHdvcmQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZXcod29yZCwgdGhpcy0+SU9fQUREUl9XKTsKLQlhdV9zeW5jKCk7Ci19Ci0KLS8qKgogICogYXVfd3JpdGVfYnVmIC0gIHdyaXRlIGJ1ZmZlciB0byBjaGlwCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGJ1ZjoJZGF0YSBidWZmZXIKQEAgLTE1Nyw3ICsxNDIsNyBAQAogCWludCBpOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQl3cml0ZWIoYnVmW2ldLCB0aGlzLT5JT19BRERSX1cpOwogCQlhdV9zeW5jKCk7CiAJfQpAQCAtMTc2LDcgKzE2MSw3IEBACiAJaW50IGk7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWJ1ZltpXSA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7CiAJCWF1X3N5bmMoKTsKIAl9CkBAIC0xOTUsNyArMTgwLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJaWYgKGJ1ZltpXSAhPSByZWFkYih0aGlzLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWF1X3N5bmMoKTsKQEAgLTIxOSw3ICsyMDQsNyBAQAogCXUxNiAqcCA9ICh1MTYgKikgYnVmOwogCWxlbiA+Pj0gMTsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCXdyaXRldyhwW2ldLCB0aGlzLT5JT19BRERSX1cpOwogCQlhdV9zeW5jKCk7CiAJfQpAQCAtMjQxLDcgKzIyNiw3IEBACiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJcFtpXSA9IHJlYWR3KHRoaXMtPklPX0FERFJfUik7CiAJCWF1X3N5bmMoKTsKIAl9CkBAIC0yNjIsNyArMjQ3LDcgQEAKIAl1MTYgKnAgPSAodTE2ICopIGJ1ZjsKIAlsZW4gPj49IDE7CiAKLQlmb3IgKGk9MDsgaTxsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAocFtpXSAhPSByZWFkdyh0aGlzLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWF1X3N5bmMoKTsKQEAgLTI3MCwzMiArMjU1LDUyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIFNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUTkNFCQkxCisvKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCisjZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgorLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KKyNkZWZpbmUgTkFORF9DVExfU0VUQ0xFCQkzCisvKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBsb3cgKi8KKyNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFCQk0CisvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gaGlnaCAqLworI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUJCTUKKy8qIERlc2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGxvdyAqLworI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUJCTYKIAogc3RhdGljIHZvaWQgYXUxNTUwX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0Jc3dpdGNoKGNtZCl7CisJc3dpdGNoIChjbWQpIHsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOiB0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0NNRDsgYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6IHRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfREFUQTsgYnJlYWs7CisJY2FzZSBOQU5EX0NUTF9TRVRDTEU6CisJCXRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfQ01EOworCQlicmVhazsKIAotCWNhc2UgTkFORF9DVExfU0VUQUxFOiB0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0FERFI7IGJyZWFrOworCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgorCQl0aGlzLT5JT19BRERSX1cgPSBwX25hbmQgKyBNRU1fU1ROQU5EX0RBVEE7CisJCWJyZWFrOworCisJY2FzZSBOQU5EX0NUTF9TRVRBTEU6CisJCXRoaXMtPklPX0FERFJfVyA9IHBfbmFuZCArIE1FTV9TVE5BTkRfQUREUjsKKwkJYnJlYWs7CisKIAljYXNlIE5BTkRfQ1RMX0NMUkFMRToKIAkJdGhpcy0+SU9fQUREUl9XID0gcF9uYW5kICsgTUVNX1NUTkFORF9EQVRBOwotCQkvKiBGSVhNRTogTm9ib2R5IGtub3dzIHdoeSB0aGlzIGlzIG5lY2NlY2FyeSwKKwkJLyogRklYTUU6IE5vYm9keSBrbm93cyB3aHkgdGhpcyBpcyBuZWNlc3NhcnksCiAJCSAqIGJ1dCBpdCB3b3JrcyBvbmx5IHRoYXQgd2F5ICovCiAJCXVkZWxheSgxKTsKIAkJYnJlYWs7CiAKIAljYXNlIE5BTkRfQ1RMX1NFVE5DRToKIAkJLyogYXNzZXJ0IChmb3JjZSBhc3NlcnQpIGNoaXAgZW5hYmxlICovCi0JCWF1X3dyaXRlbCgoMTw8KDQrTkFORF9DUykpICwgTUVNX1NUTkRDVEwpOyBicmVhazsKKwkJYXVfd3JpdGVsKCgxIDw8ICg0ICsgTkFORF9DUykpLCBNRU1fU1RORENUTCk7CiAJCWJyZWFrOwogCiAJY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0gCQkvKiBkZWFzc2VydCBjaGlwIGVuYWJsZSAqLwotCQlhdV93cml0ZWwoMCwgTUVNX1NUTkRDVEwpOyBicmVhazsKKwkJLyogZGVhc3NlcnQgY2hpcCBlbmFibGUgKi8KKwkJYXVfd3JpdGVsKDAsIE1FTV9TVE5EQ1RMKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zMTIsNjkgKzMxNywyMDAgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGF1MTU1MF9zZWxlY3RfY2hpcCAtIGNvbnRyb2wgLUNFIGxpbmUKKyAqCUZvcmJpZCBkcml2aW5nIC1DRSBtYW51YWxseSBwZXJtaXR0aW5nIHRoZSBOQU5EIGNvbnRyb2xsZXIgdG8gZG8gdGhpcy4KKyAqCUtlZXBpbmcgLUNFIGFzc2VydGVkIGR1cmluZyB0aGUgd2hvbGUgc2VjdG9yIHJlYWRzIGludGVyZmVyZXMgd2l0aCB0aGUKKyAqCU5PUiBmbGFzaCBhbmQgUENNQ0lBIGRyaXZlcnMgYXMgaXQgY2F1c2VzIGNvbnRlbnRpb24gb24gdGhlIHN0YXRpYyBidXMuCisgKglXZSBvbmx5IGhhdmUgdG8gaG9sZCAtQ0UgbG93IGZvciB0aGUgTkFORCByZWFkIGNvbW1hbmRzIHNpbmNlIHRoZSBmbGFzaAorICoJY2hpcCBuZWVkcyBpdCB0byBiZSBhc3NlcnRlZCBkdXJpbmcgY2hpcCBub3QgcmVhZHkgdGltZSBidXQgdGhlIE5BTkQKKyAqCWNvbnRyb2xsZXIga2VlcHMgaXQgcmVsZWFzZWQuCisgKgorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgljaGlwbnVtYmVyIHRvIHNlbGVjdCwgLTEgZm9yIGRlc2VsZWN0CisgKi8KK3N0YXRpYyB2b2lkIGF1MTU1MF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCit7Cit9CisKKy8qKgorICogYXUxNTUwX2NvbW1hbmQgLSBTZW5kIGNvbW1hbmQgdG8gTkFORCBkZXZpY2UKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAY29tbWFuZDoJdGhlIGNvbW1hbmQgdG8gYmUgc2VudAorICogQGNvbHVtbjoJdGhlIGNvbHVtbiBhZGRyZXNzIGZvciB0aGlzIGNvbW1hbmQsIC0xIGlmIG5vbmUKKyAqIEBwYWdlX2FkZHI6CXRoZSBwYWdlIGFkZHJlc3MgZm9yIHRoaXMgY29tbWFuZCwgLTEgaWYgbm9uZQorICovCitzdGF0aWMgdm9pZCBhdTE1NTBfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3sKKwlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBjZV9vdmVycmlkZSA9IDAsIGk7CisJdWxvbmcgZmxhZ3M7CisKKwkvKiBCZWdpbiBjb21tYW5kIGxhdGNoIGN5Y2xlICovCisJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7CisJLyoKKwkgKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4KKwkgKi8KKwlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9TRVFJTikgeworCQlpbnQgcmVhZGNtZDsKKworCQlpZiAoY29sdW1uID49IG10ZC0+d3JpdGVzaXplKSB7CisJCQkvKiBPT0IgYXJlYSAqLworCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOworCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQURPT0I7CisJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CisJCQkvKiBGaXJzdCAyNTYgYnl0ZXMgLS0+IFJFQUQwICovCisJCQlyZWFkY21kID0gTkFORF9DTURfUkVBRDA7CisJCX0gZWxzZSB7CisJCQljb2x1bW4gLT0gMjU2OworCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQUQxOworCQl9CisJCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgcmVhZGNtZCk7CisJfQorCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgY29tbWFuZCk7CisKKwkvKiBTZXQgQUxFIGFuZCBjbGVhciBDTEUgdG8gc3RhcnQgYWRkcmVzcyBjeWNsZSAqLworCWF1MTU1MF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOworCisJaWYgKGNvbHVtbiAhPSAtMSB8fCBwYWdlX2FkZHIgIT0gLTEpIHsKKwkJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7CisKKwkJLyogU2VyaWFsbHkgaW5wdXQgYWRkcmVzcyAqLworCQlpZiAoY29sdW1uICE9IC0xKSB7CisJCQkvKiBBZGp1c3QgY29sdW1ucyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCisJCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpCisJCQkJY29sdW1uID4+PSAxOworCQkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCBjb2x1bW4pOworCQl9CisJCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgKHU4KShwYWdlX2FkZHIgJiAweGZmKSk7CisKKwkJCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwIHx8CisJCQkgICAgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMSB8fAorCQkJICAgIGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQikgeworCQkJCS8qCisJCQkJICogTkFORCBjb250cm9sbGVyIHdpbGwgcmVsZWFzZSAtQ0UgYWZ0ZXIKKwkJCQkgKiB0aGUgbGFzdCBhZGRyZXNzIGJ5dGUgaXMgd3JpdHRlbiwgc28gd2UnbGwKKwkJCQkgKiBoYXZlIHRvIGZvcmNpYmx5IGFzc2VydCBpdC4gTm8gaW50ZXJydXB0cworCQkJCSAqIGFyZSBhbGxvd2VkIHdoaWxlIHdlIGRvIHRoaXMgYXMgd2UgZG9uJ3QKKwkJCQkgKiB3YW50IHRoZSBOT1IgZmxhc2ggb3IgUENNQ0lBIGRyaXZlcnMgdG8KKwkJCQkgKiBzdGVhbCBvdXIgcHJlY2lvdXMgYnl0ZXMgb2YgZGF0YS4uLgorCQkJCSAqLworCQkJCWNlX292ZXJyaWRlID0gMTsKKwkJCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCQkJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVE5DRSk7CisJCQl9CisKKwkJCWF1MTU1MF93cml0ZV9ieXRlKG10ZCwgKHU4KShwYWdlX2FkZHIgPj4gOCkpOworCisJCQkvKiBPbmUgbW9yZSBhZGRyZXNzIGN5Y2xlIGZvciBkZXZpY2VzID4gMzJNaUIgKi8KKwkJCWlmICh0aGlzLT5jaGlwc2l6ZSA+ICgzMiA8PCAyMCkpCisJCQkJYXUxNTUwX3dyaXRlX2J5dGUobXRkLCAodTgpKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZikpOworCQl9CisJCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KKwkJYXUxNTUwX2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisJfQorCisJLyoKKwkgKiBQcm9ncmFtIGFuZCBlcmFzZSBoYXZlIHRoZWlyIG93biBidXN5IGhhbmRsZXJzLgorCSAqIFN0YXR1cyBhbmQgc2VxdWVudGlhbCBpbiBuZWVkIG5vIGRlbGF5LgorCSAqLworCXN3aXRjaCAoY29tbWFuZCkgeworCisJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKKwljYXNlIE5BTkRfQ01EX0VSQVNFMToKKwljYXNlIE5BTkRfQ01EX0VSQVNFMjoKKwljYXNlIE5BTkRfQ01EX1NFUUlOOgorCWNhc2UgTkFORF9DTURfU1RBVFVTOgorCQlyZXR1cm47CisKKwljYXNlIE5BTkRfQ01EX1JFU0VUOgorCQlicmVhazsKKworCWNhc2UgTkFORF9DTURfUkVBRDA6CisJY2FzZSBOQU5EX0NNRF9SRUFEMToKKwljYXNlIE5BTkRfQ01EX1JFQURPT0I6CisJCS8qIENoZWNrIGlmIHdlJ3JlIHJlYWxseSBkcml2aW5nIC1DRSBsb3cgKGp1c3QgaW4gY2FzZSkgKi8KKwkJaWYgKHVubGlrZWx5KCFjZV9vdmVycmlkZSkpCisJCQlicmVhazsKKworCQkvKiBBcHBseSBhIHNob3J0IGRlbGF5IGFsd2F5cyB0byBlbnN1cmUgdGhhdCB3ZSBkbyB3YWl0IHRXQi4gKi8KKwkJbmRlbGF5KDEwMCk7CisJCS8qIFdhaXQgZm9yIGEgY2hpcCB0byBiZWNvbWUgcmVhZHkuLi4gKi8KKwkJZm9yIChpID0gdGhpcy0+Y2hpcF9kZWxheTsgIXRoaXMtPmRldl9yZWFkeShtdGQpICYmIGkgPiAwOyAtLWkpCisJCQl1ZGVsYXkoMSk7CisKKwkJLyogUmVsZWFzZSAtQ0UgYW5kIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLiAqLworCQlhdTE1NTBfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSTkNFKTsKKwkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyZXR1cm47CisJfQorCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCLiAqLworCW5kZWxheSgxMDApOworCisJd2hpbGUoIXRoaXMtPmRldl9yZWFkeShtdGQpKTsKK30KKworCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgYXUxeHh4X25hbmRfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF1MXh4eF9uYW5kX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCXUxNiBib290X3N3YXBib290ID0gMDsgLyogZGVmYXVsdCB2YWx1ZSAqLworCXUxNiBib290X3N3YXBib290ID0gMDsJLyogZGVmYXVsdCB2YWx1ZSAqLwogCWludCByZXR2YWw7CiAJdTMyIG1lbV9zdGFkZHI7CiAJdTMyIG5hbmRfcGh5czsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCWF1MTU1MF9tdGQgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JCQlzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlhdTE1NTBfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhdTE1NTBfbXRkKSB7Ci0JCXByaW50ayAoIlVuYWJsZSB0byBhbGxvY2F0ZSBOQU5EIE1URCBkZXYgc3RydWN0dXJlLlxuIik7CisJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIE5BTkQgTVREIGRldiBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmYXUxNTUwX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZhdTE1NTBfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBhdTE1NTBfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGF1MTU1MF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJYXUxNTUwX210ZC0+cHJpdiA9IHRoaXM7CisJYXUxNTUwX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JYXVfd3JpdGVsKGF1X3JlYWRsKE1FTV9TVE5EQ1RMKSAmIH4oMTw8OCksIE1FTV9TVE5EQ1RMKTsKLQotCS8qIGRpc2FibGUgTkFORCBib290ICovCi0JYXVfd3JpdGVsKGF1X3JlYWRsKE1FTV9TVE5EQ1RMKSAmIH4oMTw8MCksIE1FTV9TVE5EQ1RMKTsKKwkvKiBNRU1fU1RORENUTDogZGlzYWJsZSBpbnRzLCBkaXNhYmxlIG5hbmQgYm9vdCAqLworCWF1X3dyaXRlbCgwLCBNRU1fU1RORENUTCk7CiAKICNpZmRlZiBDT05GSUdfTUlQU19QQjE1NTAKIAkvKiBzZXQgZ3BpbzIwNiBoaWdoICovCi0JYXVfd3JpdGVsKGF1X3JlYWRsKEdQSU8yX0RJUikgJiB+KDE8PDYpLCBHUElPMl9ESVIpOworCWF1X3dyaXRlbChhdV9yZWFkbChHUElPMl9ESVIpICYgfigxIDw8IDYpLCBHUElPMl9ESVIpOwogCi0JYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDc8PDEpKSB8Ci0JCSgoYmNzci0+c3RhdHVzID4+IDYpICAmIDB4MSk7CisJYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyLT5zdGF0dXMgPj4gNikgJiAweDEpOwogCXN3aXRjaCAoYm9vdF9zd2FwYm9vdCkgewotCQljYXNlIDA6Ci0JCWNhc2UgMjoKLQkJY2FzZSA4OgotCQljYXNlIDB4QzoKLQkJY2FzZSAweEQ6Ci0JCQkvKiB4MTYgTkFORCBGbGFzaCAqLwotCQkJbmFuZF93aWR0aCA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQljYXNlIDk6Ci0JCWNhc2UgMzoKLQkJY2FzZSAweEU6Ci0JCWNhc2UgMHhGOgotCQkJLyogeDggTkFORCBGbGFzaCAqLwotCQkJbmFuZF93aWR0aCA9IDE7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiUGIxNTUwIE5BTkQ6IGJhZCBib290OnN3YXBcbiIpOwotCQkJcmV0dmFsID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0bWVtOworCWNhc2UgMDoKKwljYXNlIDI6CisJY2FzZSA4OgorCWNhc2UgMHhDOgorCWNhc2UgMHhEOgorCQkvKiB4MTYgTkFORCBGbGFzaCAqLworCQluYW5kX3dpZHRoID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgOToKKwljYXNlIDM6CisJY2FzZSAweEU6CisJY2FzZSAweEY6CisJCS8qIHg4IE5BTkQgRmxhc2ggKi8KKwkJbmFuZF93aWR0aCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50aygiUGIxNTUwIE5BTkQ6IGJhZCBib290OnN3YXBcbiIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIG91dG1lbTsKIAl9CiAjZW5kaWYKIApAQCAtNDI0LDIxICs1NjAsMjIgQEAKIAogCS8qIG1ha2UgY29udHJvbGxlciBhbmQgTVREIGFncmVlICovCiAJaWYgKE5BTkRfQ1MgPT0gMCkKLQkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzApICYgKDE8PDIyKTsKKwkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzApICYgKDEgPDwgMjIpOwogCWlmIChOQU5EX0NTID09IDEpCi0JCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkcxKSAmICgxPDwyMik7CisJCW5hbmRfd2lkdGggPSBhdV9yZWFkbChNRU1fU1RDRkcxKSAmICgxIDw8IDIyKTsKIAlpZiAoTkFORF9DUyA9PSAyKQotCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMikgJiAoMTw8MjIpOworCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMikgJiAoMSA8PCAyMik7CiAJaWYgKE5BTkRfQ1MgPT0gMykKLQkJbmFuZF93aWR0aCA9IGF1X3JlYWRsKE1FTV9TVENGRzMpICYgKDE8PDIyKTsKLQorCQluYW5kX3dpZHRoID0gYXVfcmVhZGwoTUVNX1NUQ0ZHMykgJiAoMSA8PCAyMik7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCi0JdGhpcy0+aHdjb250cm9sID0gYXUxNTUwX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBhdTE1NTBfZGV2aWNlX3JlYWR5OworCXRoaXMtPnNlbGVjdF9jaGlwID0gYXUxNTUwX3NlbGVjdF9jaGlwOworCXRoaXMtPmNtZGZ1bmMgPSBhdTE1NTBfY29tbWFuZDsKKwogCS8qIDMwIHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAzMDsKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAKIAl0aGlzLT5vcHRpb25zID0gTkFORF9OT19BVVRPSU5DUjsKIApAQCAtNDQ2LDE1ICs1ODMsMTQgQEAKIAkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX0JVU1dJRFRIXzE2OwogCiAJdGhpcy0+cmVhZF9ieXRlID0gKCFuYW5kX3dpZHRoKSA/IGF1X3JlYWRfYnl0ZTE2IDogYXVfcmVhZF9ieXRlOwotCXRoaXMtPndyaXRlX2J5dGUgPSAoIW5hbmRfd2lkdGgpID8gYXVfd3JpdGVfYnl0ZTE2IDogYXVfd3JpdGVfYnl0ZTsKLQl0aGlzLT53cml0ZV93b3JkID0gYXVfd3JpdGVfd29yZDsKKwlhdTE1NTBfd3JpdGVfYnl0ZSA9ICghbmFuZF93aWR0aCkgPyBhdV93cml0ZV9ieXRlMTYgOiBhdV93cml0ZV9ieXRlOwogCXRoaXMtPnJlYWRfd29yZCA9IGF1X3JlYWRfd29yZDsKIAl0aGlzLT53cml0ZV9idWYgPSAoIW5hbmRfd2lkdGgpID8gYXVfd3JpdGVfYnVmMTYgOiBhdV93cml0ZV9idWY7CiAJdGhpcy0+cmVhZF9idWYgPSAoIW5hbmRfd2lkdGgpID8gYXVfcmVhZF9idWYxNiA6IGF1X3JlYWRfYnVmOwogCXRoaXMtPnZlcmlmeV9idWYgPSAoIW5hbmRfd2lkdGgpID8gYXVfdmVyaWZ5X2J1ZjE2IDogYXVfdmVyaWZ5X2J1ZjsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKGF1MTU1MF9tdGQsIDEpKSB7CisJaWYgKG5hbmRfc2NhbihhdTE1NTBfbXRkLCAxKSkgewogCQlyZXR2YWwgPSAtRU5YSU87CiAJCWdvdG8gb3V0aW87CiAJfQpAQCAtNDY1LDEwICs2MDEsMTAgQEAKIAlyZXR1cm4gMDsKIAogIG91dGlvOgotCWlvdW5tYXAgKCh2b2lkICopcF9uYW5kKTsKKwlpb3VubWFwKCh2b2lkICopcF9uYW5kKTsKIAogIG91dG1lbToKLQlrZnJlZSAoYXUxNTUwX210ZCk7CisJa2ZyZWUoYXUxNTUwX210ZCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNDc3LDIyICs2MTMsMjEgQEAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB2b2lkIF9fZXhpdCBhdTE1NTBfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhdTE1NTBfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmYXUxNTUwX210ZFsxXTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikmYXUxNTUwX210ZFsxXTsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoYXUxNTUwX210ZCk7CisJbmFuZF9yZWxlYXNlKGF1MTU1MF9tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAoYXUxNTUwX210ZCk7CisJa2ZyZWUoYXUxNTUwX210ZCk7CiAKIAkvKiBVbm1hcCAqLwotCWlvdW5tYXAgKCh2b2lkICopcF9uYW5kKTsKKwlpb3VubWFwKCh2b2lkICopcF9uYW5kKTsKIH0KKwogbW9kdWxlX2V4aXQoYXUxNTUwX2NsZWFudXApOwotI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkVtYmVkZGVkIEVkZ2UsIExMQyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCmluZGV4IGEzYzdmZWEuLmZlOTRhZTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9hdXRjcHUxMi5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoYykgMjAwMiBUaG9tYXMgR2xlaXhuZXIgPHRneGxAbGludXRyb25peC5kZT4KICAqCiAgKiAgRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL3NwaWEuYwotICogCSBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCisgKgkgQ29weXJpZ2h0IChDKSAyMDAwIFN0ZXZlbiBKLiBIaWxsIChzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tKQogICoKICAqICRJZDogYXV0Y3B1MTIuYyx2IDEuMjMgMjAwNS8xMS8wNyAxMToxNDozMCBnbGVpeG5lciBFeHAgJAogICoKQEAgLTQyLDEyICs0Miw3IEBACiAgKiBNVEQgc3RydWN0dXJlIGZvciBBVVRDUFUxMiBib2FyZAogICovCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICphdXRjcHUxMl9tdGQgPSBOVUxMOwotCi1zdGF0aWMgaW50IGF1dGNwdTEyX2lvX2Jhc2UgPSBDUzg5NzEyX1ZJUlRfQkFTRTsKLXN0YXRpYyBpbnQgYXV0Y3B1MTJfZmlvX3BiYXNlID0gQVVUQ1BVMTJfUEhZU19TTUM7Ci1zdGF0aWMgaW50IGF1dGNwdTEyX2Zpb19jdHJsID0gQVVUQ1BVMTJfU01DX1NFTEVDVF9PRkZTRVQ7Ci1zdGF0aWMgaW50IGF1dGNwdTEyX3BlZHIgPSBBVVRDUFUxMl9TTUNfUE9SVF9PRkZTRVQ7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICogYXV0Y3B1MTJfZmlvX2Jhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICphdXRjcHUxMl9maW9fYmFzZTsKIAogLyoKICAqIERlZmluZSBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2VzCkBAIC05NCwxMDggKzg5LDEzMSBAQAogI2RlZmluZSBOVU1fUEFSVElUSU9OUzEyOEsgMgogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCi0qLwotc3RhdGljIHZvaWQgYXV0Y3B1MTJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorICoKKyAqCUFMRSBiaXQgNCBhdXRjcHUxMl9wZWRyCisgKglDTEUgYml0IDUgYXV0Y3B1MTJfcGVkcgorICoJTkNFIGJpdCAwIGZpb19jdHJsCisgKgorICovCitzdGF0aWMgdm9pZCBhdXRjcHUxMl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXN3aXRjaChjbWQpeworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl2b2lkIF9faW9tZW0gKmFkZHIKKwkJdW5zaWduZWQgY2hhciBiaXRzOwogCi0JCWNhc2UgTkFORF9DVExfU0VUQ0xFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9pb19iYXNlICsgYXV0Y3B1MTJfcGVkcikpIHw9ICBBVVRDUFUxMl9TTUNfQ0xFOyBicmVhazsKLQkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKGF1dGNwdTEyX2lvX2Jhc2UgKyBhdXRjcHUxMl9wZWRyKSkgJj0gfkFVVENQVTEyX1NNQ19DTEU7IGJyZWFrOworCQlhZGRyID0gQ1M4OTcxMl9WSVJUX0JBU0UgKyBBVVRDUFUxMl9TTUNfUE9SVF9PRkZTRVQ7CisJCWJpdHMgPSAoY3RybCAmIE5BTkRfQ0xFKSA8PCA0OworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpIDw8IDI7CisJCXdyaXRlYigocmVhZGIoYWRkcikgJiB+MHgzMCkgfCBiaXRzLCBhZGRyKTsKIAotCQljYXNlIE5BTkRfQ1RMX1NFVEFMRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfaW9fYmFzZSArIGF1dGNwdTEyX3BlZHIpKSB8PSAgQVVUQ1BVMTJfU01DX0FMRTsgYnJlYWs7Ci0JCWNhc2UgTkFORF9DVExfQ0xSQUxFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9pb19iYXNlICsgYXV0Y3B1MTJfcGVkcikpICY9IH5BVVRDUFUxMl9TTUNfQUxFOyBicmVhazsKLQotCQljYXNlIE5BTkRfQ1RMX1NFVE5DRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfZmlvX2Jhc2UgKyBhdXRjcHUxMl9maW9fY3RybCkpID0gMHgwMTsgYnJlYWs7Ci0JCWNhc2UgTkFORF9DVExfQ0xSTkNFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChhdXRjcHUxMl9maW9fYmFzZSArIGF1dGNwdTEyX2Zpb19jdHJsKSkgPSAweDAwOyBicmVhazsKKwkJYWRkciA9IGF1dGNwdTEyX2Zpb19iYXNlICsgQVVUQ1BVMTJfU01DX1NFTEVDVF9PRkZTRVQ7CisJCXdyaXRlYigocmVhZGIoYWRkcikgJiB+MHgxKSB8IChjdHJsICYgTkFORF9OQ0UpLCBhZGRyKTsKIAl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKIC8qCi0qCXJlYWQgZGV2aWNlIHJlYWR5IHBpbgotKi8KKyAqCXJlYWQgZGV2aWNlIHJlYWR5IHBpbgorICovCiBpbnQgYXV0Y3B1MTJfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogeworCXZvaWQgX19pb21lbSAqYWRkciA9IENTODk3MTJfVklSVF9CQVNFICsgQVVUQ1BVMTJfU01DX1BPUlRfT0ZGU0VUOwogCi0JcmV0dXJuICggKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoYXV0Y3B1MTJfaW9fYmFzZSArIGF1dGNwdTEyX3BlZHIpKSAmIEFVVENQVTEyX1NNQ19SRFkpID8gMSA6IDA7Ci0KKwlyZXR1cm4gcmVhZGIoYWRkcikgJiBBVVRDUFUxMl9TTUNfUkRZOwogfQogCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgYXV0Y3B1MTJfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGF1dGNwdTEyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWludCBlcnIgPSAwOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JYXV0Y3B1MTJfbXRkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCWF1dGNwdTEyX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCisJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhdXRjcHUxMl9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIEFVVENQVTEyIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgQVVUQ1BVMTIgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCi0JYXV0Y3B1MTJfZmlvX2Jhc2UgPSBpb3JlbWFwKGF1dGNwdTEyX2Zpb19wYmFzZSxTWl8xSyk7Ci0JaWYoIWF1dGNwdTEyX2Zpb19iYXNlKXsKKwlhdXRjcHUxMl9maW9fYmFzZSA9IGlvcmVtYXAoQVVUQ1BVMTJfUEhZU19TTUMsIFNaXzFLKTsKKwlpZiAoIWF1dGNwdTEyX2Zpb19iYXNlKSB7CiAJCXByaW50aygiSW9yZW1hcCBhdXRjcHUxMiBTbWFydE1lZGlhIENhcmQgZmFpbGVkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXRfbXRkOwogCX0KIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoJmF1dGNwdTEyX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZhdXRjcHUxMl9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIGF1dGNwdTEyX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCgoY2hhciAqKSB0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCW1lbXNldChhdXRjcHUxMl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJYXV0Y3B1MTJfbXRkLT5wcml2ID0gdGhpczsKKwlhdXRjcHUxMl9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCiAJdGhpcy0+SU9fQUREUl9SID0gYXV0Y3B1MTJfZmlvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gYXV0Y3B1MTJfZmlvX2Jhc2U7Ci0JdGhpcy0+aHdjb250cm9sID0gYXV0Y3B1MTJfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gYXV0Y3B1MTJfaHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IGF1dGNwdTEyX2RldmljZV9yZWFkeTsKIAkvKiAyMCB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMjA7Ci0JdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19TT0ZUOwogCiAJLyogRW5hYmxlIHRoZSBmb2xsb3dpbmcgZm9yIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlICovCiAJLyoKLQl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOwotCSovCisJICAgdGhpcy0+b3B0aW9ucyA9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKKwkgKi8KIAl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUOwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAoYXV0Y3B1MTJfbXRkLCAxKSkgeworCWlmIChuYW5kX3NjYW4oYXV0Y3B1MTJfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2lvcjsKIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaChhdXRjcHUxMl9tdGQtPnNpemUpewotCQljYXNlIFNaXzE2TTogYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm8xNmssIE5VTV9QQVJUSVRJT05TMTZLKTsgYnJlYWs7Ci0JCWNhc2UgU1pfMzJNOiBhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzMyaywgTlVNX1BBUlRJVElPTlMzMkspOyBicmVhazsKLQkJY2FzZSBTWl82NE06IGFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvNjRrLCBOVU1fUEFSVElUSU9OUzY0Syk7IGJyZWFrOwotCQljYXNlIFNaXzEyOE06IGFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMTI4aywgTlVNX1BBUlRJVElPTlMxMjhLKTsgYnJlYWs7Ci0JCWRlZmF1bHQ6IHsKLQkJCXByaW50ayAoIlVuc3VwcG9ydGVkIFNtYXJ0TWVkaWEgZGV2aWNlXG4iKTsKKwlzd2l0Y2ggKGF1dGNwdTEyX210ZC0+c2l6ZSkgeworCQljYXNlIFNaXzE2TToKKwkJCWFkZF9tdGRfcGFydGl0aW9ucyhhdXRjcHUxMl9tdGQsIHBhcnRpdGlvbl9pbmZvMTZrLAorCQkJCQkgICBOVU1fUEFSVElUSU9OUzE2Syk7CisJCQlicmVhazsKKwkJY2FzZSBTWl8zMk06CisJCQlhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzMyaywKKwkJCQkJICAgTlVNX1BBUlRJVElPTlMzMkspOworCQkJYnJlYWs7CisJCWNhc2UgU1pfNjRNOgorCQkJYWRkX210ZF9wYXJ0aXRpb25zKGF1dGNwdTEyX210ZCwgcGFydGl0aW9uX2luZm82NGssCisJCQkJCSAgIE5VTV9QQVJUSVRJT05TNjRLKTsKKwkJCWJyZWFrOworCQljYXNlIFNaXzEyOE06CisJCQlhZGRfbXRkX3BhcnRpdGlvbnMoYXV0Y3B1MTJfbXRkLCBwYXJ0aXRpb25faW5mbzEyOGssCisJCQkJCSAgIE5VTV9QQVJUSVRJT05TMTI4Syk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50aygiVW5zdXBwb3J0ZWQgU21hcnRNZWRpYSBkZXZpY2VcbiIpOwogCQkJZXJyID0gLUVOWElPOwogCQkJZ290byBvdXRfaW9yOwotCQl9CiAJfQogCWdvdG8gb3V0OwogCi1vdXRfaW9yOgotCWlvdW5tYXAoKHZvaWQgKilhdXRjcHUxMl9maW9fYmFzZSk7Ci1vdXRfbXRkOgotCWtmcmVlIChhdXRjcHUxMl9tdGQpOwotb3V0OgorIG91dF9pb3I6CisJaW91bm1hcChhdXRjcHUxMl9maW9fYmFzZSk7Cisgb3V0X210ZDoKKwlrZnJlZShhdXRjcHUxMl9tdGQpOworIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMDQsMjAgKzIyMiwxOSBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgX19leGl0IGF1dGNwdTEyX2NsZWFudXAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgYXV0Y3B1MTJfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoYXV0Y3B1MTJfbXRkKTsKKwluYW5kX3JlbGVhc2UoYXV0Y3B1MTJfbXRkKTsKIAogCS8qIHVubWFwIHBoeXNpY2FsIGFkcmVzcyAqLwotCWlvdW5tYXAoKHZvaWQgKilhdXRjcHUxMl9maW9fYmFzZSk7CisJaW91bm1hcChhdXRjcHUxMl9maW9fYmFzZSk7CiAKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwotCWtmcmVlIChhdXRjcHUxMl9tdGQpOworCWtmcmVlKGF1dGNwdTEyX210ZCk7CiB9CisKIG1vZHVsZV9leGl0KGF1dGNwdTEyX2NsZWFudXApOwotI2VuZGlmCiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9jczU1M3hfbmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwYTFkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKQEAgLTAsMCArMSwzNTMgQEAKKy8qCisgKiBkcml2ZXJzL210ZC9uYW5kL2NzNTUzeF9uYW5kLmMKKyAqCisgKiAoQykgMjAwNSwgMjAwNiBSZWQgSGF0IEluYy4KKyAqCisgKiBBdXRob3I6IERhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4KKyAqCSAgIFRvbSBTeWxsYSA8dG9tLnN5bGxhQGFtZC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgT3ZlcnZpZXc6CisgKiAgIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIGZvdW5kIG9uIAorICogICB0aGUgQU1EIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXBzZXRzIGZvciB0aGUgR2VvZGUgcHJvY2Vzc29yLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kX2VjYy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisKKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgTlJfQ1M1NTNYX0NPTlRST0xMRVJTCTQKKworI2RlZmluZSBNU1JfRElWSUxfR0xEX0NBUAkweDUxNDAwMDAwCS8qIERJVklMIGNhcGFiaWxpdGlpZXMgKi8KKyNkZWZpbmUgQ0FQX0NTNTUzNQkJMHgyZGYwMDBVTEwKKyNkZWZpbmUgQ0FQX0NTNTUzNgkJMHg1ZGY1MDBVTEwKKworLyogTkFORCBUaW1pbmcgTVNScyAqLworI2RlZmluZSBNU1JfTkFOREZfREFUQQkJMHg1MTQwMDAxYgkvKiBOQU5EIEZsYXNoIERhdGEgVGltaW5nIE1TUiAqLworI2RlZmluZSBNU1JfTkFOREZfQ1RMCQkweDUxNDAwMDFjCS8qIE5BTkQgRmxhc2ggQ29udHJvbCBUaW1pbmcgKi8KKyNkZWZpbmUgTVNSX05BTkRGX1JTVkQJCTB4NTE0MDAwMWQJLyogUmVzZXJ2ZWQgKi8KKworLyogTkFORCBCQVIgTVNScyAqLworI2RlZmluZSBNU1JfRElWSUxfTEJBUl9GTFNIMAkweDUxNDAwMDEwCS8qIEZsYXNoIENoaXAgU2VsZWN0IDAgKi8KKyNkZWZpbmUgTVNSX0RJVklMX0xCQVJfRkxTSDEJMHg1MTQwMDAxMQkvKiBGbGFzaCBDaGlwIFNlbGVjdCAxICovCisjZGVmaW5lIE1TUl9ESVZJTF9MQkFSX0ZMU0gyCTB4NTE0MDAwMTIJLyogRmxhc2ggQ2hpcCBTZWxlY3QgMiAqLworI2RlZmluZSBNU1JfRElWSUxfTEJBUl9GTFNIMwkweDUxNDAwMDEzCS8qIEZsYXNoIENoaXAgU2VsZWN0IDMgKi8KKwkvKiBFYWNoIG1hZGUgdXAgb2YuLi4gKi8KKyNkZWZpbmUgRkxTSF9MQkFSX0VOCQkoMVVMTDw8MzIpCisjZGVmaW5lIEZMU0hfTk9SX05BTkQJCSgxVUxMPDwzMykJLyogMSBmb3IgTkFORCAqLworI2RlZmluZSBGTFNIX01FTV9JTwkJKDFVTEw8PDM0KQkvKiAxIGZvciBNTUlPICovCisJLyogSS9PIEJBUnMgaGF2ZSBCQVNFX0FERFIgaW4gYml0cyAxNTo0LCBJT19NQVNLIGluIDQ3OjM2ICovCisJLyogTU1JTyBCQVJzIGhhdmUgQkFTRV9BRERSIGluIGJpdHMgMzE6MTIsIE1FTV9NQVNLIGluIDYzOjQ0ICovCisKKy8qIFBpbiBmdW5jdGlvbiBzZWxlY3Rpb24gTVNSIChJREUgdnMuIGZsYXNoIG9uIHRoZSBJREUgcGlucykgKi8KKyNkZWZpbmUgTVNSX0RJVklMX0JBTExfT1BUUwkweDUxNDAwMDE1CisjZGVmaW5lIFBJTl9PUFRfSURFCQkoMTw8MCkJLyogMCBmb3IgZmxhc2gsIDEgZm9yIElERSAqLworCisvKiBSZWdpc3RlcnMgd2l0aGluIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgQkFSIC0tIG1lbW9yeSBtYXBwZWQgKi8KKyNkZWZpbmUgTU1fTkFORF9EQVRBCQkweDAwCS8qIDAgdG8gMHg3ZmYsIGluIGZhY3QgKi8KKyNkZWZpbmUgTU1fTkFORF9DVEwJCTB4ODAwCS8qIEFueSBldmVuIGFkZHJlc3MgMHg4MDAtMHg4MGUgKi8KKyNkZWZpbmUgTU1fTkFORF9JTwkJMHg4MDEJLyogQW55IG9kZCBhZGRyZXNzIDB4ODAxLTB4ODBmICovCisjZGVmaW5lIE1NX05BTkRfU1RTCQkweDgxMAorI2RlZmluZSBNTV9OQU5EX0VDQ19MU0IJCTB4ODExCisjZGVmaW5lIE1NX05BTkRfRUNDX01TQgkJMHg4MTIKKyNkZWZpbmUgTU1fTkFORF9FQ0NfQ09MCQkweDgxMworI2RlZmluZSBNTV9OQU5EX0xBQwkJMHg4MTQKKyNkZWZpbmUgTU1fTkFORF9FQ0NfQ1RMCQkweDgxNQorCisvKiBSZWdpc3RlcnMgd2l0aGluIHRoZSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgQkFSIC0tIEkvTyBtYXBwZWQgKi8KKyNkZWZpbmUgSU9fTkFORF9EQVRBCQkweDAwCS8qIDAgdG8gMywgaW4gZmFjdCAqLworI2RlZmluZSBJT19OQU5EX0NUTAkJMHgwNAorI2RlZmluZSBJT19OQU5EX0lPCQkweDA1CisjZGVmaW5lIElPX05BTkRfU1RTCQkweDA2CisjZGVmaW5lIElPX05BTkRfRUNDX0NUTAkJMHgwOAorI2RlZmluZSBJT19OQU5EX0VDQ19MU0IJCTB4MDkKKyNkZWZpbmUgSU9fTkFORF9FQ0NfTVNCCQkweDBhCisjZGVmaW5lIElPX05BTkRfRUNDX0NPTAkJMHgwYgorI2RlZmluZSBJT19OQU5EX0xBQwkJMHgwYworCisjZGVmaW5lIENTX05BTkRfQ1RMX0RJU1RfRU4JKDE8PDQpCS8qIEVuYWJsZSBOQU5EIERpc3RyYWN0IGludGVycnVwdCAqLworI2RlZmluZSBDU19OQU5EX0NUTF9SRFlfSU5UX01BU0sJKDE8PDMpCS8qIEVuYWJsZSBSRFkvQlVTWSMgaW50ZXJydXB0ICovCisjZGVmaW5lIENTX05BTkRfQ1RMX0FMRQkJKDE8PDIpCisjZGVmaW5lIENTX05BTkRfQ1RMX0NMRQkJKDE8PDEpCisjZGVmaW5lIENTX05BTkRfQ1RMX0NFCQkoMTw8MCkJLyogS2VlcCBsb3c7IDEgdG8gcmVzZXQgKi8KKworI2RlZmluZSBDU19OQU5EX1NUU19GTEFTSF9SRFkJKDE8PDMpCisjZGVmaW5lIENTX05BTkRfQ1RMUl9CVVNZCSgxPDwyKQorI2RlZmluZSBDU19OQU5EX0NNRF9DT01QCSgxPDwxKQorI2RlZmluZSBDU19OQU5EX0RJU1RfU1QJCSgxPDwwKQorCisjZGVmaW5lIENTX05BTkRfRUNDX1BBUklUWQkoMTw8MikKKyNkZWZpbmUgQ1NfTkFORF9FQ0NfQ0xSRUNDCSgxPDwxKQorI2RlZmluZSBDU19OQU5EX0VDQ19FTkVDQwkoMTw8MCkKKworc3RhdGljIHZvaWQgY3M1NTN4X3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd2hpbGUgKHVubGlrZWx5KGxlbiA+IDB4ODAwKSkgeworCQltZW1jcHlfZnJvbWlvKGJ1ZiwgdGhpcy0+SU9fQUREUl9SLCAweDgwMCk7CisJCWJ1ZiArPSAweDgwMDsKKwkJbGVuIC09IDB4ODAwOworCX0KKwltZW1jcHlfZnJvbWlvKGJ1ZiwgdGhpcy0+SU9fQUREUl9SLCBsZW4pOworfQorCitzdGF0aWMgdm9pZCBjczU1M3hfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCisJd2hpbGUgKHVubGlrZWx5KGxlbiA+IDB4ODAwKSkgeworCQltZW1jcHlfdG9pbyh0aGlzLT5JT19BRERSX1IsIGJ1ZiwgMHg4MDApOworCQlidWYgKz0gMHg4MDA7CisJCWxlbiAtPSAweDgwMDsKKwl9CisJbWVtY3B5X3RvaW8odGhpcy0+SU9fQUREUl9SLCBidWYsIGxlbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGNzNTUzeF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlyZXR1cm4gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKK30KKworc3RhdGljIHZvaWQgY3M1NTN4X3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJaW50IGkgPSAxMDAwMDA7CisKKwl3aGlsZSAoaSAmJiByZWFkYih0aGlzLT5JT19BRERSX1IgKyBNTV9OQU5EX1NUUykgJiBDU19OQU5EX0NUTFJfQlVTWSkgeworCQl1ZGVsYXkoMSk7CisJCWktLTsKKwl9CisJd3JpdGViKGJ5dGUsIHRoaXMtPklPX0FERFJfVyArIDB4ODAxKTsKK30KKworc3RhdGljIHZvaWQgY3M1NTN4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGN0cmwpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJdW5zaWduZWQgY2hhciBjdGwgPSAoY3RybCAmIH5OQU5EX0NUUkxfQ0hBTkdFICkgXiAweDAxOworCQl3cml0ZWIoY3RsLCBtbWlvX2Jhc2UgKyBNTV9OQU5EX0NUTCk7CisJfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJY3M1NTN4X3dyaXRlX2J5dGUobXRkLCBjbWQpOworfQorCitzdGF0aWMgaW50IGNzNTUzeF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwl2b2lkIF9faW9tZW0gKm1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKwl1bnNpZ25lZCBjaGFyIGZvbyA9IHJlYWRiKG1taW9fYmFzZSArIE1NX05BTkRfU1RTKTsKKworCXJldHVybiAoZm9vICYgQ1NfTkFORF9TVFNfRkxBU0hfUkRZKSAmJiAhKGZvbyAmIENTX05BTkRfQ1RMUl9CVVNZKTsKK30KKworc3RhdGljIHZvaWQgY3NfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXZvaWQgX19pb21lbSAqbW1pb19iYXNlID0gdGhpcy0+SU9fQUREUl9SOworCisJd3JpdGViKDB4MDcsIG1taW9fYmFzZSArIE1NX05BTkRfRUNDX0NUTCk7Cit9CisKK3N0YXRpYyBpbnQgY3NfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCit7CisJdWludDMyX3QgZWNjOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdm9pZCBfX2lvbWVtICptbWlvX2Jhc2UgPSB0aGlzLT5JT19BRERSX1I7CisKKwllY2MgPSByZWFkbChtbWlvX2Jhc2UgKyBNTV9OQU5EX1NUUyk7CisKKwllY2NfY29kZVsxXSA9IGVjYyA+PiA4OworCWVjY19jb2RlWzBdID0gZWNjID4+IDE2OworCWVjY19jb2RlWzJdID0gZWNjID4+IDI0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpjczU1M3hfbXRkWzRdOworCitzdGF0aWMgaW50IF9faW5pdCBjczU1M3hfaW5pdF9vbmUoaW50IGNzLCBpbnQgbW1pbywgdW5zaWduZWQgbG9uZyBhZHIpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm5ld19tdGQ7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIlByb2JpbmcgQ1M1NTN4IE5BTkQgY29udHJvbGxlciBDUyMlZCBhdCAlc0lPIDB4JTA4bHhcbiIsIGNzLCBtbWlvPyJNTSI6IlAiLCBhZHIpOworCisJaWYgKCFtbWlvKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiUElPIG1vZGUgbm90IHlldCBpbXBsZW1lbnRlZCBmb3IgQ1M1NTNYIE5BTkQgY29udHJvbGxlclxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCisJbmV3X210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOworCWlmICghbmV3X210ZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgQ1M1NTNYIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZuZXdfbXRkWzFdKTsKKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCW1lbXNldChuZXdfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCW5ld19tdGQtPnByaXYgPSB0aGlzOworCW5ld19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqLworCXRoaXMtPklPX0FERFJfUiA9IHRoaXMtPklPX0FERFJfVyA9IGlvcmVtYXAoYWRyLCA0MDk2KTsKKwlpZiAoIXRoaXMtPklPX0FERFJfUikgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJpb3JlbWFwIGNzNTUzeCBOQU5EIEAweCUwOGx4IGZhaWxlZFxuIiwgYWRyKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBvdXRfbXRkOworCX0KKworCXRoaXMtPmNtZF9jdHJsID0gY3M1NTN4X2h3Y29udHJvbDsKKwl0aGlzLT5kZXZfcmVhZHkgPSBjczU1M3hfZGV2aWNlX3JlYWR5OworCXRoaXMtPnJlYWRfYnl0ZSA9IGNzNTUzeF9yZWFkX2J5dGU7CisJdGhpcy0+cmVhZF9idWYgPSBjczU1M3hfcmVhZF9idWY7CisJdGhpcy0+d3JpdGVfYnVmID0gY3M1NTN4X3dyaXRlX2J1ZjsKKworCXRoaXMtPmNoaXBfZGVsYXkgPSAwOworCisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwl0aGlzLT5lY2Muc2l6ZSA9IDI1NjsKKwl0aGlzLT5lY2MuYnl0ZXMgPSAzOworCXRoaXMtPmVjYy5od2N0bCAgPSBjc19lbmFibGVfaHdlY2M7CisJdGhpcy0+ZWNjLmNhbGN1bGF0ZSA9IGNzX2NhbGN1bGF0ZV9lY2M7CisJdGhpcy0+ZWNjLmNvcnJlY3QgID0gbmFuZF9jb3JyZWN0X2RhdGE7CisKKwkvKiBFbmFibGUgdGhlIGZvbGxvd2luZyBmb3IgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgKi8KKwl0aGlzLT5vcHRpb25zID0gTkFORF9VU0VfRkxBU0hfQkJUIHwgTkFORF9OT19BVVRPSU5DUjsKKworCS8qIFNjYW4gdG8gZmluZCBleGlzdGFuY2Ugb2YgdGhlIGRldmljZSAqLworCWlmIChuYW5kX3NjYW4obmV3X210ZCwgMSkpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIG91dF9pb3I7CisJfQorCisJY3M1NTN4X210ZFtjc10gPSBuZXdfbXRkOworCWdvdG8gb3V0OworCitvdXRfaW9yOgorCWlvdW5tYXAoKHZvaWQgKil0aGlzLT5JT19BRERSX1IpOworb3V0X210ZDoKKwlrZnJlZShuZXdfbXRkKTsKK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGlzX2dlb2RlKHZvaWQpCit7CisJLyogVGhlc2UgYXJlIHRoZSBDUFVzIHdoaWNoIHdpbGwgaGF2ZSBhIENTNTUzWzU2XSBjb21wYW5pb24gY2hpcCAqLworCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODYgPT0gNSAmJgorCSAgICBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAxMCkKKwkJcmV0dXJuIDE7IC8qIEdlb2RlIExYICovCisKKwlpZiAoKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX05TQyB8fAorCSAgICAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQ1lSSVgpICYmCisJICAgIGJvb3RfY3B1X2RhdGEueDg2ID09IDUgJiYKKwkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPT0gNSkKKwkJcmV0dXJuIDE7IC8qIEdlb2RlIEdYIChuw6llIEdYMikgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjczU1M3hfaW5pdCh2b2lkKQoreworCWludCBlcnIgPSAtRU5YSU87CisJaW50IGk7CisJdWludDY0X3QgdmFsOworCisJLyogSWYgdGhlIENQVSBpc24ndCBhIEdlb2RlIEdYIG9yIExYLCBhYm9ydCAqLworCWlmICghaXNfZ2VvZGUoKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIElmIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgQ1M1NTNbNTZdLCBhYm9ydCAqLworCXJkbXNybChNU1JfRElWSUxfR0xEX0NBUCwgdmFsKTsKKwl2YWwgJj0gfjB4RkZVTEw7CisJaWYgKHZhbCAhPSBDQVBfQ1M1NTM1ICYmIHZhbCAhPSBDQVBfQ1M1NTM2KQorCQlyZXR1cm4gLUVOWElPOworCisJLyogSWYgaXQgZG9lc24ndCBoYXZlIHRoZSBOQU5EIGNvbnRyb2xsZXIgZW5hYmxlZCwgYWJvcnQgKi8KKwlyZG1zcmwoTVNSX0RJVklMX0JBTExfT1BUUywgdmFsKTsKKwlpZiAodmFsICYgMSkgeworCQlwcmludGsoS0VSTl9JTkZPICJDUzU1M3ggTkFORCBjb250cm9sbGVyOiBGbGFzaCBJL08gbm90IGVuYWJsZWQgaW4gTVNSX0RJVklMX0JBTExfT1BUUy5cbiIpOworCQlyZXR1cm4gLUVOWElPOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUzU1M1hfQ09OVFJPTExFUlM7IGkrKykgeworCQlyZG1zcmwoTVNSX0RJVklMX0xCQVJfRkxTSDAgKyBpLCB2YWwpOworCisJCWlmICgodmFsICYgKEZMU0hfTEJBUl9FTnxGTFNIX05PUl9OQU5EKSkgPT0gKEZMU0hfTEJBUl9FTnxGTFNIX05PUl9OQU5EKSkKKwkJCWVyciA9IGNzNTUzeF9pbml0X29uZShpLCAhISh2YWwgJiBGTFNIX01FTV9JTyksIHZhbCAmIDB4RkZGRkZGRkYpOworCX0KKworCS8qIFJlZ2lzdGVyIGFsbCBkZXZpY2VzIHRvZ2V0aGVyIGhlcmUuIFRoaXMgbWVhbnMgd2UgY2FuIGVhc2lseSBoYWNrIGl0IHRvIAorCSAgIGRvIG10ZGNvbmNhdCBldGMuIGlmIHdlIHdhbnQgdG8uICovCisJZm9yIChpID0gMDsgaSA8IE5SX0NTNTUzWF9DT05UUk9MTEVSUzsgaSsrKSB7CisJCWlmIChjczU1M3hfbXRkW2ldKSB7CisJCQlhZGRfbXRkX2RldmljZShjczU1M3hfbXRkW2ldKTsKKworCQkJLyogSWYgYW55IGRldmljZXMgcmVnaXN0ZXJlZCwgcmV0dXJuIHN1Y2Nlc3MuIEVsc2UgdGhlIGxhc3QgZXJyb3IuICovCisJCQllcnIgPSAwOworCQl9CisJfQorCisJcmV0dXJuIGVycjsKK30KKworbW9kdWxlX2luaXQoY3M1NTN4X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY3M1NTN4X2NsZWFudXAodm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9DUzU1M1hfQ09OVFJPTExFUlM7IGkrKykgeworCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGNzNTUzeF9tdGRbaV07CisJCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJCXZvaWQgX19pb21lbSAqbW1pb19iYXNlOworCisJCWlmICghbXRkKQorCQkJYnJlYWs7CisKKwkJdGhpcyA9IGNzNTUzeF9tdGRbaV0tPnByaXY7CisJCW1taW9fYmFzZSA9IHRoaXMtPklPX0FERFJfUjsKKworCQkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KKwkJbmFuZF9yZWxlYXNlKGNzNTUzeF9tdGRbaV0pOworCQljczU1M3hfbXRkW2ldID0gTlVMTDsKKworCQkvKiB1bm1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KKwkJaW91bm1hcChtbWlvX2Jhc2UpOworCisJCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCisJCWtmcmVlKG10ZCk7CisJfQorfQorCittb2R1bGVfZXhpdChjczU1M3hfY2xlYW51cCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkRhdmlkIFdvb2Rob3VzZSA8ZHdtdzJAaW5mcmFkZWFkLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTkFORCBjb250cm9sbGVyIGRyaXZlciBmb3IgQU1EIENTNTUzNS9DUzU1MzYgY29tcGFuaW9uIGNoaXAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZGlza29uY2hpcC5jIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKaW5kZXggZWM1ZTQ1ZS4uNjEwN2Y1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMKQEAgLTU4LDEwICs1OCwxMCBAQAogCTB4ZTQwMDAwMDAsCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX09DRUxPVCkKIAkweDJmMDAwMDAwLAotICAgICAgICAweGZmMDAwMDAwLAorCTB4ZmYwMDAwMDAsCiAjZWxpZiBkZWZpbmVkKENPTkZJR19NT01FTkNPX09DRUxPVF9HKSB8fCBkZWZpbmVkIChDT05GSUdfTU9NRU5DT19PQ0VMT1RfQykKLSAgICAgICAgMHhmZjAwMDAwMCwKLSMjZWxzZQorCTB4ZmYwMDAwMDAsCisjZWxzZQogI3dhcm5pbmcgVW5rbm93biBhcmNoaXRlY3R1cmUgZm9yIERpc2tPbkNoaXAuIE5vIGRlZmF1bHQgcHJvYmUgbG9jYXRpb25zIGRlZmluZWQKICNlbmRpZgogCTB4ZmZmZmZmZmYgfTsKQEAgLTczLDcgKzczLDcgQEAKIAl1bnNpZ25lZCBsb25nIHBoeXNhZHI7CiAJdV9jaGFyIENoaXBJRDsKIAl1X2NoYXIgQ0RTTkNvbnRyb2w7Ci0JaW50IGNoaXBzX3Blcl9mbG9vcjsgLyogVGhlIG51bWJlciBvZiBjaGlwcyBkZXRlY3RlZCBvbiBlYWNoIGZsb29yICovCisJaW50IGNoaXBzX3Blcl9mbG9vcjsJLyogVGhlIG51bWJlciBvZiBjaGlwcyBkZXRlY3RlZCBvbiBlYWNoIGZsb29yICovCiAJaW50IGN1cmZsb29yOwogCWludCBjdXJjaGlwOwogCWludCBtaDBfcGFnZTsKQEAgLTg0LDYgKzg0LDcgQEAKIC8qIFRoaXMgaXMgdGhlIHN5bmRyb21lIGNvbXB1dGVkIGJ5IHRoZSBIVyBlY2MgZ2VuZXJhdG9yIHVwb24gcmVhZGluZyBhbiBlbXB0eQogICAgcGFnZSwgb25lIHdpdGggYWxsIDB4ZmYgZm9yIGRhdGEgYW5kIHN0b3JlZCBlY2MgY29kZS4gKi8KIHN0YXRpYyB1X2NoYXIgZW1wdHlfcmVhZF9zeW5kcm9tZVs2XSA9IHsgMHgyNiwgMHhmZiwgMHg2ZCwgMHg0NywgMHg3MywgMHg3YSB9OworCiAvKiBUaGlzIGlzIHRoZSBlY2MgdmFsdWUgY29tcHV0ZWQgYnkgdGhlIEhXIGVjYyBnZW5lcmF0b3IgdXBvbiB3cml0aW5nIGFuIGVtcHR5CiAgICBwYWdlLCBvbmUgd2l0aCBhbGwgMHhmZiBmb3IgZGF0YS4gKi8KIHN0YXRpYyB1X2NoYXIgZW1wdHlfd3JpdGVfZWNjWzZdID0geyAweDRiLCAweDAwLCAweGUyLCAweDBlLCAweDkzLCAweGY3IH07CkBAIC05NCwyOCArOTUsMjkgQEAKICNkZWZpbmUgRG9DX2lzX01pbGxlbm5pdW0oZG9jKSAoKGRvYyktPkNoaXBJRCA9PSBET0NfQ2hpcElEX0RvY01pbCkKICNkZWZpbmUgRG9DX2lzXzIwMDAoZG9jKSAoKGRvYyktPkNoaXBJRCA9PSBET0NfQ2hpcElEX0RvYzJrKQogCi1zdGF0aWMgdm9pZCBkb2MyMDB4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CitzdGF0aWMgdm9pZCBkb2MyMDB4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBiaXRtYXNrKTsKIHN0YXRpYyB2b2lkIGRvYzIwMHhfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKIAotc3RhdGljIGludCBkZWJ1Zz0wOworc3RhdGljIGludCBkZWJ1ZyA9IDA7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiAKLXN0YXRpYyBpbnQgdHJ5X2R3b3JkPTE7CitzdGF0aWMgaW50IHRyeV9kd29yZCA9IDE7CiBtb2R1bGVfcGFyYW0odHJ5X2R3b3JkLCBpbnQsIDApOwogCi1zdGF0aWMgaW50IG5vX2VjY19mYWlsdXJlcz0wOworc3RhdGljIGludCBub19lY2NfZmFpbHVyZXMgPSAwOwogbW9kdWxlX3BhcmFtKG5vX2VjY19mYWlsdXJlcywgaW50LCAwKTsKIAotc3RhdGljIGludCBub19hdXRvcGFydD0wOworc3RhdGljIGludCBub19hdXRvcGFydCA9IDA7CiBtb2R1bGVfcGFyYW0obm9fYXV0b3BhcnQsIGludCwgMCk7CiAKLXN0YXRpYyBpbnQgc2hvd19maXJtd2FyZV9wYXJ0aXRpb249MDsKK3N0YXRpYyBpbnQgc2hvd19maXJtd2FyZV9wYXJ0aXRpb24gPSAwOwogbW9kdWxlX3BhcmFtKHNob3dfZmlybXdhcmVfcGFydGl0aW9uLCBpbnQsIDApOwogCiAjaWZkZWYgTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURQotc3RhdGljIGludCBpbmZ0bF9iYnRfd3JpdGU9MTsKK3N0YXRpYyBpbnQgaW5mdGxfYmJ0X3dyaXRlID0gMTsKICNlbHNlCi1zdGF0aWMgaW50IGluZnRsX2JidF93cml0ZT0wOworc3RhdGljIGludCBpbmZ0bF9iYnRfd3JpdGUgPSAwOwogI2VuZGlmCiBtb2R1bGVfcGFyYW0oaW5mdGxfYmJ0X3dyaXRlLCBpbnQsIDApOwogCkBAIC0xMjMsNyArMTI1LDYgQEAKIG1vZHVsZV9wYXJhbShkb2NfY29uZmlnX2xvY2F0aW9uLCB1bG9uZywgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRvY19jb25maWdfbG9jYXRpb24sICJQaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyBhdCB3aGljaCB0byBwcm9iZSBmb3IgRGlza09uQ2hpcCIpOwogCi0KIC8qIFNlY3RvciBzaXplIGZvciBIVyBFQ0MgKi8KICNkZWZpbmUgU0VDVE9SX1NJWkUgNTEyCiAvKiBUaGUgc2VjdG9yIGJ5dGVzIGFyZSBwYWNrZWQgaW50byBOQl9EQVRBIDEwIGJpdCB3b3JkcyAqLwpAQCAtMTQ3LDcgKzE0OCw3IEBACiAgKiBzb21lIGNvbW1lbnRzLCBpbXByb3ZlZCBhIG1pbm9yIGJpdCBhbmQgY29udmVydGVkIGl0IHRvIG1ha2UgdXNlCiAgKiBvZiB0aGUgZ2VuZXJpYyBSZWVkLVNvbG9tb24gbGliYXJ5LiB0Z2x4CiAgKi8KLXN0YXRpYyBpbnQgZG9jX2VjY19kZWNvZGUgKHN0cnVjdCByc19jb250cm9sICpycywgdWludDhfdCAqZGF0YSwgdWludDhfdCAqZWNjKQorc3RhdGljIGludCBkb2NfZWNjX2RlY29kZShzdHJ1Y3QgcnNfY29udHJvbCAqcnMsIHVpbnQ4X3QgKmRhdGEsIHVpbnQ4X3QgKmVjYykKIHsKIAlpbnQgaSwgaiwgbmVyciwgZXJycG9zWzhdOwogCXVpbnQ4X3QgcGFyaXR5OwpAQCAtMTY4LDE4ICsxNjksMTggQEAKIAkgKiAgc1tpXSA9IGRzWzNdeF4zICsgZHNbMl14XjIgKyBkc1sxXXheMSArIGRzWzBdCiAJICogIHdoZXJlIHggPSBhbHBoYV4oRkNSICsgaSkKIAkgKi8KLQlmb3IoaiA9IDE7IGogPCBOUk9PVFM7IGorKykgewotCQlpZihkc1tqXSA9PSAwKQorCWZvciAoaiA9IDE7IGogPCBOUk9PVFM7IGorKykgeworCQlpZiAoZHNbal0gPT0gMCkKIAkJCWNvbnRpbnVlOwogCQl0bXAgPSBycy0+aW5kZXhfb2ZbZHNbal1dOwotCQlmb3IoaSA9IDA7IGkgPCBOUk9PVFM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IE5ST09UUzsgaSsrKQogCQkJc1tpXSBePSBycy0+YWxwaGFfdG9bcnNfbW9kbm4ocnMsIHRtcCArIChGQ1IgKyBpKSAqIGopXTsKIAl9CiAKIAkvKiBDYWxjIHNbaV0gPSBzW2ldIC8gYWxwaGFeKHYgKyBpKSAqLwogCWZvciAoaSA9IDA7IGkgPCBOUk9PVFM7IGkrKykgewogCQlpZiAoc3luW2ldKQotIAkJCXN5bltpXSA9IHJzX21vZG5uKHJzLCBycy0+aW5kZXhfb2Zbc1tpXV0gKyAoTk4gLSBGQ1IgLSBpKSk7CisJCQlzeW5baV0gPSByc19tb2RubihycywgcnMtPmluZGV4X29mW3NbaV1dICsgKE5OIC0gRkNSIC0gaSkpOwogCX0KIAkvKiBDYWxsIHRoZSBkZWNvZGVyIGxpYnJhcnkgKi8KIAluZXJyID0gZGVjb2RlX3JzMTYocnMsIE5VTEwsIE5VTEwsIDEwMTksIHN5biwgMCwgZXJycG9zLCAwLCBlcnJ2YWwpOwpAQCAtMTkzLDcgKzE5NCw3IEBACiAJICogYnV0IHRoZXkgYXJlIGdpdmVuIGJ5IHRoZSBkZXNpZ24gb2YgdGhlIGRlL2VuY29kZXIgY2lyY3VpdAogCSAqIGluIHRoZSBEb0MgQVNJQydzLgogCSAqLwotCWZvcihpID0gMDtpIDwgbmVycjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG5lcnI7IGkrKykgewogCQlpbnQgaW5kZXgsIGJpdHBvcywgcG9zID0gMTAxNSAtIGVycnBvc1tpXTsKIAkJdWludDhfdCB2YWw7CiAJCWlmIChwb3MgPj0gTkJfREFUQSAmJiBwb3MgPCAxMDE5KQpAQCAtMjA1LDggKzIwNiw3IEBACiAJCQkgICBjYW4gYmUgbW9kaWZpZWQgc2luY2UgcG9zIGlzIGV2ZW4gKi8KIAkJCWluZGV4ID0gKHBvcyA+PiAzKSBeIDE7CiAJCQliaXRwb3MgPSBwb3MgJiA3OwotCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8Ci0JCQkgICAgaW5kZXggPT0gKFNFQ1RPUl9TSVpFICsgMSkpIHsKKwkJCWlmICgoaW5kZXggPj0gMCAmJiBpbmRleCA8IFNFQ1RPUl9TSVpFKSB8fCBpbmRleCA9PSAoU0VDVE9SX1NJWkUgKyAxKSkgewogCQkJCXZhbCA9ICh1aW50OF90KSAoZXJydmFsW2ldID4+ICgyICsgYml0cG9zKSk7CiAJCQkJcGFyaXR5IF49IHZhbDsKIAkJCQlpZiAoaW5kZXggPCBTRUNUT1JfU0laRSkKQEAgLTIxNiw5ICsyMTYsOCBAQAogCQkJYml0cG9zID0gKGJpdHBvcyArIDEwKSAmIDc7CiAJCQlpZiAoYml0cG9zID09IDApCiAJCQkJYml0cG9zID0gODsKLQkJCWlmICgoaW5kZXggPj0gMCAmJiBpbmRleCA8IFNFQ1RPUl9TSVpFKSB8fAotCQkJICAgIGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7Ci0JCQkJdmFsID0gKHVpbnQ4X3QpKGVycnZhbFtpXSA8PCAoOCAtIGJpdHBvcykpOworCQkJaWYgKChpbmRleCA+PSAwICYmIGluZGV4IDwgU0VDVE9SX1NJWkUpIHx8IGluZGV4ID09IChTRUNUT1JfU0laRSArIDEpKSB7CisJCQkJdmFsID0gKHVpbnQ4X3QpIChlcnJ2YWxbaV0gPDwgKDggLSBiaXRwb3MpKTsKIAkJCQlwYXJpdHkgXj0gdmFsOwogCQkJCWlmIChpbmRleCA8IFNFQ1RPUl9TSVpFKQogCQkJCQlkYXRhW2luZGV4XSBePSB2YWw7CkBAIC0yNTAsMTAgKzI0OSwxMSBAQAogLyogRE9DX1dhaXRSZWFkeTogV2FpdCBmb3IgUkRZIGxpbmUgdG8gYmUgYXNzZXJ0ZWQgYnkgdGhlIGZsYXNoIGNoaXAgKi8KIHN0YXRpYyBpbnQgX0RvQ19XYWl0UmVhZHkoc3RydWN0IGRvY19wcml2ICpkb2MpCiB7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCXVuc2lnbmVkIGxvbmcgdGltZW8gPSBqaWZmaWVzICsgKEhaICogMTApOwogCi0JaWYoZGVidWcpIHByaW50aygiX0RvQ19XYWl0UmVhZHkuLi5cbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJfRG9DX1dhaXRSZWFkeS4uLlxuIik7CiAJLyogT3V0LW9mLWxpbmUgcm91dGluZSB0byB3YWl0IGZvciBjaGlwIHJlc3BvbnNlICovCiAJaWYgKERvQ19pc19NaWxsZW5uaXVtUGx1cyhkb2MpKSB7CiAJCXdoaWxlICgoUmVhZERPQyhkb2NwdHIsIE1wbHVzX0ZsYXNoQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQl9NQVNLKSAhPSBDRFNOX0NUUkxfRlJfQl9NQVNLKSB7CkBAIC0yODAsNyArMjgwLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgRG9DX1dhaXRSZWFkeShzdHJ1Y3QgZG9jX3ByaXYgKmRvYykKIHsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IHJldCA9IDA7CiAKIAlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKQEAgLTI5OCw3ICsyOTgsOCBAQAogCQlEb0NfRGVsYXkoZG9jLCAyKTsKIAl9CiAKLQlpZihkZWJ1ZykgcHJpbnRrKCJEb0NfV2FpdFJlYWR5IE9LXG4iKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygiRG9DX1dhaXRSZWFkeSBPS1xuIik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzA2LDkgKzMwNywxMCBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAotCWlmKGRlYnVnKXByaW50aygid3JpdGVfYnl0ZSAlMDJ4XG4iLCBkYXR1bSk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIndyaXRlX2J5dGUgJTAyeFxuIiwgZGF0dW0pOwogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIENEU05TbG93SU8pOwogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIDJrX0NEU05fSU8pOwogfQpAQCAtMzE3LDc3ICszMTksNzggQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJdV9jaGFyIHJldDsKIAogCVJlYWRET0MoZG9jcHRyLCBDRFNOU2xvd0lPKTsKIAlEb0NfRGVsYXkoZG9jLCAyKTsKIAlyZXQgPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyk7Ci0JaWYgKGRlYnVnKSBwcmludGsoInJlYWRfYnl0ZSByZXR1cm5zICUwMnhcbiIsIHJldCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInJlYWRfYnl0ZSByZXR1cm5zICUwMnhcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMF93cml0ZWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICAgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkb2MyMDAwX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7Ci0JaWYgKGRlYnVnKXByaW50aygid3JpdGVidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7Ci0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJ3cml0ZWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJV3JpdGVET0NfKGJ1ZltpXSwgZG9jcHRyLCBEb0NfMmtfQ0RTTl9JTyArIGkpOwogCQlpZiAoZGVidWcgJiYgaSA8IDE2KQogCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7CiAJfQotCWlmIChkZWJ1ZykgcHJpbnRrKCJcbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkgICAgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBkb2MyMDAwX3JlYWRidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKLSAJaW50IGk7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJyZWFkYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOwogCi0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlidWZbaV0gPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyArIGkpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZG9jMjAwMF9yZWFkYnVmX2R3b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgIHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMF9yZWFkYnVmX2R3b3JkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7Ci0gCWludCBpOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCWludCBpOwogCi0JaWYgKGRlYnVnKSBwcmludGsoInJlYWRidWZfZHdvcmQgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInJlYWRidWZfZHdvcmQgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CiAKLQlpZiAodW5saWtlbHkoKCgodW5zaWduZWQgbG9uZylidWYpfGxlbikgJiAzKSkgewotCQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7Ci0JCQkqKHVpbnQ4X3QgKikoJmJ1ZltpXSkgPSBSZWFkRE9DKGRvY3B0ciwgMmtfQ0RTTl9JTyArIGkpOworCWlmICh1bmxpa2VseSgoKCh1bnNpZ25lZCBsb25nKWJ1ZikgfCBsZW4pICYgMykpIHsKKwkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkqKHVpbnQ4X3QgKikgKCZidWZbaV0pID0gUmVhZERPQyhkb2NwdHIsIDJrX0NEU05fSU8gKyBpKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWZvciAoaT0wOyBpIDwgbGVuOyBpKz00KSB7Ci0JCQkqKHVpbnQzMl90KikoJmJ1ZltpXSkgPSByZWFkbChkb2NwdHIgKyBEb0NfMmtfQ0RTTl9JTyArIGkpOworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHsKKwkJCSoodWludDMyX3QgKikgKCZidWZbaV0pID0gcmVhZGwoZG9jcHRyICsgRG9DXzJrX0NEU05fSU8gKyBpKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBkb2MyMDAwX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIGludCBkb2MyMDAwX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCi0JZm9yIChpPTA7IGkgPCBsZW47IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAJCWlmIChidWZbaV0gIT0gUmVhZERPQyhkb2NwdHIsIDJrX0NEU05fSU8pKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CkBAIC00MDAsMTIgKzQwMywxMCBAQAogCXVpbnQxNl90IHJldDsKIAogCWRvYzIwMHhfc2VsZWN0X2NoaXAobXRkLCBucik7Ci0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCXRoaXMtPndyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9SRUFESUQpOwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7Ci0JdGhpcy0+d3JpdGVfYnl0ZShtdGQsIDApOwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX1JFQURJRCwKKwkJCSAgTkFORF9DVFJMX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgMCwgTkFORF9DVFJMX0FMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCS8qIFdlIGNhbnQnIHVzZSBkZXZfcmVhZHkgaGVyZSwgYnV0IGF0IGxlYXN0IHdlIHdhaXQgZm9yIHRoZQogCSAqIGNvbW1hbmQgdG8gY29tcGxldGUKQEAgLTQyMywxMiArNDI0LDExIEBACiAJCX0gaWRlbnQ7CiAJCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCi0JCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKLQkJZG9jMjAwMF93cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfUkVBRElEKTsKLQkJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVEFMRSk7Ci0JCWRvYzIwMDBfd3JpdGVfYnl0ZShtdGQsIDApOwotCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkFMRSk7CisJCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfUkVBRElELAorCQkJCSAgTkFORF9DVFJMX0NMRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQlkb2MyMDB4X2h3Y29udHJvbChtdGQsIDAsIE5BTkRfQ1RSTF9BTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJCSAgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCQl1ZGVsYXkoNTApOwogCkBAIC00NjQsNyArNDY0LDcgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiRGV0ZWN0ZWQgJWQgY2hpcHMgcGVyIGZsb29yLlxuIiwgaSk7CiB9CiAKLXN0YXRpYyBpbnQgZG9jMjAweF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUpCitzdGF0aWMgaW50IGRvYzIwMHhfd2FpdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcykKIHsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7CiAKQEAgLTQ4Miw3ICs0ODIsNyBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIENEU05TbG93SU8pOwogCVdyaXRlRE9DKGRhdHVtLCBkb2NwdHIsIE1pbF9DRFNOX0lPKTsKQEAgLTQ5Myw3ICs0OTMsNyBAQAogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAogCS8vUmVhZERPQyhkb2NwdHIsIENEU05TbG93SU8pOwogCS8qIDExLjQuNSAtLSBkZWxheSB0d2ljZSB0byBhbGxvdyBleHRlbmRlZCBsZW5ndGggY3ljbGUgKi8KQEAgLTUwMyw1MCArNTAzLDQ3IEBACiAJcmV0dXJuIFJlYWRET0MoZG9jcHRyLCBMYXN0RGF0YVJlYWQpOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAxX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDFfd3JpdGVidWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKIAlpbnQgaTsKIAotCWZvciAoaT0wOyBpIDwgbGVuOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQogCQlXcml0ZURPQ18oYnVmW2ldLCBkb2NwdHIsIERvQ19NaWxfQ0RTTl9JTyArIGkpOwogCS8qIFRlcm1pbmF0ZSB3cml0ZSBwaXBlbGluZSAqLwogCVdyaXRlRE9DKDB4MDAsIGRvY3B0ciwgV3JpdGVQaXBlVGVybSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDFfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCiAJLyogU3RhcnQgcmVhZCBwaXBlbGluZSAqLwogCVJlYWRET0MoZG9jcHRyLCBSZWFkUGlwZUluaXQpOwogCi0JZm9yIChpPTA7IGkgPCBsZW4tMTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAxOyBpKyspCiAJCWJ1ZltpXSA9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTyArIChpICYgMHhmZikpOwogCiAJLyogVGVybWluYXRlIHJlYWQgcGlwZWxpbmUgKi8KIAlidWZbaV0gPSBSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKIH0KIAotc3RhdGljIGludCBkb2MyMDAxX3ZlcmlmeWJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCSAgICAgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IGRvYzIwMDFfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKIAkvKiBTdGFydCByZWFkIHBpcGVsaW5lICovCiAJUmVhZERPQyhkb2NwdHIsIFJlYWRQaXBlSW5pdCk7CiAKLQlmb3IgKGk9MDsgaSA8IGxlbi0xOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykKIAkJaWYgKGJ1ZltpXSAhPSBSZWFkRE9DKGRvY3B0ciwgTWlsX0NEU05fSU8pKSB7CiAJCQlSZWFkRE9DKGRvY3B0ciwgTGFzdERhdGFSZWFkKTsKIAkJCXJldHVybiBpOwpAQCAtNTYwLDg3ICs1NTcsOTAgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJdV9jaGFyIHJldDsKIAotICAgICAgICBSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKLSAgICAgICAgUmVhZERPQyhkb2NwdHIsIE1wbHVzX1JlYWRQaXBlSW5pdCk7Ci0gICAgICAgIHJldCA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwotCWlmIChkZWJ1ZykgcHJpbnRrKCJyZWFkX2J5dGUgcmV0dXJucyAlMDJ4XG4iLCByZXQpOworCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOworCVJlYWRET0MoZG9jcHRyLCBNcGx1c19SZWFkUGlwZUluaXQpOworCXJldCA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJyZWFkX2J5dGUgcmV0dXJucyAlMDJ4XG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX3dyaXRlYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJ3cml0ZWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKLQlmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIndyaXRlYnVmIG9mICVkIGJ5dGVzOiAiLCBsZW4pOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlXcml0ZURPQ18oYnVmW2ldLCBkb2NwdHIsIERvQ19NaWxfQ0RTTl9JTyArIGkpOwogCQlpZiAoZGVidWcgJiYgaSA8IDE2KQogCQkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltpXSk7CiAJfQotCWlmIChkZWJ1ZykgcHJpbnRrKCJcbiIpOworCWlmIChkZWJ1ZykKKwkJcHJpbnRrKCJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDAxcGx1c19yZWFkYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgIHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfcmVhZGJ1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCi0JaWYgKGRlYnVnKXByaW50aygicmVhZGJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKKwlpZiAoZGVidWcpCisJCXByaW50aygicmVhZGJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKIAogCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAotCWZvciAoaT0wOyBpIDwgbGVuLTI7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBsZW4gLSAyOyBpKyspIHsKIAkJYnVmW2ldID0gUmVhZERPQyhkb2NwdHIsIE1pbF9DRFNOX0lPKTsKIAkJaWYgKGRlYnVnICYmIGkgPCAxNikKIAkJCXByaW50aygiJTAyeCAiLCBidWZbaV0pOwogCX0KIAogCS8qIFRlcm1pbmF0ZSByZWFkIHBpcGVsaW5lICovCi0JYnVmW2xlbi0yXSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOworCWJ1ZltsZW4gLSAyXSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwogCWlmIChkZWJ1ZyAmJiBpIDwgMTYpCi0JCXByaW50aygiJTAyeCAiLCBidWZbbGVuLTJdKTsKLQlidWZbbGVuLTFdID0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CisJCXByaW50aygiJTAyeCAiLCBidWZbbGVuIC0gMl0pOworCWJ1ZltsZW4gLSAxXSA9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwogCWlmIChkZWJ1ZyAmJiBpIDwgMTYpCi0JCXByaW50aygiJTAyeCAiLCBidWZbbGVuLTFdKTsKLQlpZiAoZGVidWcpIHByaW50aygiXG4iKTsKKwkJcHJpbnRrKCIlMDJ4ICIsIGJ1ZltsZW4gLSAxXSk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoIlxuIik7CiB9CiAKLXN0YXRpYyBpbnQgZG9jMjAwMXBsdXNfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJICAgICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgZG9jMjAwMXBsdXNfdmVyaWZ5YnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGk7CiAKLQlpZiAoZGVidWcpcHJpbnRrKCJ2ZXJpZnlidWYgb2YgJWQgYnl0ZXM6ICIsIGxlbik7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInZlcmlmeWJ1ZiBvZiAlZCBieXRlczogIiwgbGVuKTsKIAogCS8qIFN0YXJ0IHJlYWQgcGlwZWxpbmUgKi8KIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAlSZWFkRE9DKGRvY3B0ciwgTXBsdXNfUmVhZFBpcGVJbml0KTsKIAotCWZvciAoaT0wOyBpIDwgbGVuLTI7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgbGVuIC0gMjsgaSsrKQogCQlpZiAoYnVmW2ldICE9IFJlYWRET0MoZG9jcHRyLCBNaWxfQ0RTTl9JTykpIHsKIAkJCVJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpOwogCQkJUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCk7CiAJCQlyZXR1cm4gaTsKIAkJfQotCWlmIChidWZbbGVuLTJdICE9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpKQotCQlyZXR1cm4gbGVuLTI7Ci0JaWYgKGJ1ZltsZW4tMV0gIT0gUmVhZERPQyhkb2NwdHIsIE1wbHVzX0xhc3REYXRhUmVhZCkpCi0JCXJldHVybiBsZW4tMTsKKwlpZiAoYnVmW2xlbiAtIDJdICE9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpKQorCQlyZXR1cm4gbGVuIC0gMjsKKwlpZiAoYnVmW2xlbiAtIDFdICE9IFJlYWRET0MoZG9jcHRyLCBNcGx1c19MYXN0RGF0YVJlYWQpKQorCQlyZXR1cm4gbGVuIC0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjQ4LDEwICs2NDgsMTEgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGZsb29yID0gMDsKIAotCWlmKGRlYnVnKXByaW50aygic2VsZWN0IGNoaXAgKCVkKVxuIiwgY2hpcCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInNlbGVjdCBjaGlwICglZClcbiIsIGNoaXApOwogCiAJaWYgKGNoaXAgPT0gLTEpIHsKIAkJLyogRGlzYWJsZSBmbGFzaCBpbnRlcm5hbGx5ICovCkBAIC02NjAsNyArNjYxLDcgQEAKIAl9CiAKIAlmbG9vciA9IGNoaXAgLyBkb2MtPmNoaXBzX3Blcl9mbG9vcjsKLQljaGlwIC09IChmbG9vciAqICBkb2MtPmNoaXBzX3Blcl9mbG9vcik7CisJY2hpcCAtPSAoZmxvb3IgKiBkb2MtPmNoaXBzX3Blcl9mbG9vcik7CiAKIAkvKiBBc3NlcnQgQ2hpcEVuYWJsZSBhbmQgZGVhc3NlcnQgV3JpdGVQcm90ZWN0ICovCiAJV3JpdGVET0MoKERPQ19GTEFTSF9DRSksIGRvY3B0ciwgTXBsdXNfRmxhc2hTZWxlY3QpOwpAQCAtNjc0LDcyICs2NzUsNjEgQEAKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAJaW50IGZsb29yID0gMDsKIAotCWlmKGRlYnVnKXByaW50aygic2VsZWN0IGNoaXAgKCVkKVxuIiwgY2hpcCk7CisJaWYgKGRlYnVnKQorCQlwcmludGsoInNlbGVjdCBjaGlwICglZClcbiIsIGNoaXApOwogCiAJaWYgKGNoaXAgPT0gLTEpCiAJCXJldHVybjsKIAogCWZsb29yID0gY2hpcCAvIGRvYy0+Y2hpcHNfcGVyX2Zsb29yOwotCWNoaXAgLT0gKGZsb29yICogIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKKwljaGlwIC09IChmbG9vciAqIGRvYy0+Y2hpcHNfcGVyX2Zsb29yKTsKIAogCS8qIDExLjQuNCAtLSBkZWFzc2VydCBDRSBiZWZvcmUgY2hhbmdpbmcgY2hpcCAqLwotCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSTkNFKTsKKwlkb2MyMDB4X2h3Y29udHJvbChtdGQsIE5BTkRfQ01EX05PTkUsIDAgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCVdyaXRlRE9DKGZsb29yLCBkb2NwdHIsIEZsb29yU2VsZWN0KTsKIAlXcml0ZURPQyhjaGlwLCBkb2NwdHIsIENEU05EZXZpY2VTZWxlY3QpOwogCi0JZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVROQ0UpOworCWRvYzIwMHhfaHdjb250cm9sKG10ZCwgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCWRvYy0+Y3VyY2hpcCA9IGNoaXA7CiAJZG9jLT5jdXJmbG9vciA9IGZsb29yOwogfQogCi1zdGF0aWMgdm9pZCBkb2MyMDB4X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKKyNkZWZpbmUgQ0RTTl9DVFJMX01TSyAoQ0RTTl9DVFJMX0NFIHwgQ0RTTl9DVFJMX0NMRSB8IENEU05fQ1RSTF9BTEUpCisKK3N0YXRpYyB2b2lkIGRvYzIwMHhfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJICAgICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCi0Jc3dpdGNoKGNtZCkgewotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCQlkb2MtPkNEU05Db250cm9sIHw9IENEU05fQ1RSTF9DRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgJj0gfkNEU05fQ1RSTF9DRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgfD0gQ0RTTl9DVFJMX0NMRTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCWRvYy0+Q0RTTkNvbnRyb2wgJj0gfkNEU05fQ1RSTF9DTEU7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQlkb2MtPkNEU05Db250cm9sIHw9IENEU05fQ1RSTF9BTEU7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQlkb2MtPkNEU05Db250cm9sICY9IH5DRFNOX0NUUkxfQUxFOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVFdQOgotCQlkb2MtPkNEU05Db250cm9sIHw9IENEU05fQ1RSTF9XUDsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJXUDoKLQkJZG9jLT5DRFNOQ29udHJvbCAmPSB+Q0RTTl9DVFJMX1dQOwotCQlicmVhazsKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKwkJZG9jLT5DRFNOQ29udHJvbCAmPSB+Q0RTTl9DVFJMX01TSzsKKwkJZG9jLT5DRFNOQ29udHJvbCB8PSBjdHJsICYgQ0RTTl9DVFJMX01TSzsKKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKCJod2NvbnRyb2woJWQpOiAlMDJ4XG4iLCBjbWQsIGRvYy0+Q0RTTkNvbnRyb2wpOworCQlXcml0ZURPQyhkb2MtPkNEU05Db250cm9sLCBkb2NwdHIsIENEU05Db250cm9sKTsKKwkJLyogMTEuNC4zIC0tIDQgTk9QcyBhZnRlciBDU0ROQ29udHJvbCB3cml0ZSAqLworCQlEb0NfRGVsYXkoZG9jLCA0KTsKIAl9Ci0JaWYgKGRlYnVnKXByaW50aygiaHdjb250cm9sKCVkKTogJTAyeFxuIiwgY21kLCBkb2MtPkNEU05Db250cm9sKTsKLQlXcml0ZURPQyhkb2MtPkNEU05Db250cm9sLCBkb2NwdHIsIENEU05Db250cm9sKTsKLQkvKiAxMS40LjMgLS0gNCBOT1BzIGFmdGVyIENTRE5Db250cm9sIHdyaXRlICovCi0JRG9DX0RlbGF5KGRvYywgNCk7CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKSB7CisJCWlmIChEb0NfaXNfMjAwMChkb2MpKQorCQkJZG9jMjAwMF93cml0ZV9ieXRlKG10ZCwgY21kKTsKKwkJZWxzZQorCQkJZG9jMjAwMV93cml0ZV9ieXRlKG10ZCwgY21kKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGRvYzIwMDFwbHVzX2NvbW1hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgZG9jMjAwMXBsdXNfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKIAkvKgogCSAqIE11c3QgdGVybWluYXRlIHdyaXRlIHBpcGVsaW5lIGJlZm9yZSBzZW5kaW5nIGFueSBjb21tYW5kcwpAQCAtNzU2LDkgKzc0Niw5IEBACiAJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfU0VRSU4pIHsKIAkJaW50IHJlYWRjbWQ7CiAKLQkJaWYgKGNvbHVtbiA+PSBtdGQtPm9vYmJsb2NrKSB7CisJCWlmIChjb2x1bW4gPj0gbXRkLT53cml0ZXNpemUpIHsKIAkJCS8qIE9PQiBhcmVhICovCi0JCQljb2x1bW4gLT0gbXRkLT5vb2JibG9jazsKKwkJCWNvbHVtbiAtPSBtdGQtPndyaXRlc2l6ZTsKIAkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFET09COwogCQl9IGVsc2UgaWYgKGNvbHVtbiA8IDI1NikgewogCQkJLyogRmlyc3QgMjU2IGJ5dGVzIC0tPiBSRUFEMCAqLwpAQCAtNzgyLDI1ICs3NzIsMjYgQEAKIAkJCVdyaXRlRE9DKGNvbHVtbiwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOwogCQl9CiAJCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKLQkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSAocGFnZV9hZGRyICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKLQkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpLCBkb2NwdHIsIE1wbHVzX0ZsYXNoQWRkcmVzcyk7CisJCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikocGFnZV9hZGRyICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKKwkJCVdyaXRlRE9DKCh1bnNpZ25lZCBjaGFyKSgocGFnZV9hZGRyID4+IDgpICYgMHhmZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKIAkJCS8qIE9uZSBtb3JlIGFkZHJlc3MgY3ljbGUgZm9yIGhpZ2hlciBkZW5zaXR5IGRldmljZXMgKi8KIAkJCWlmICh0aGlzLT5jaGlwc2l6ZSAmIDB4MGMwMDAwMDApIHsKLQkJCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikgKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZiksIGRvY3B0ciwgTXBsdXNfRmxhc2hBZGRyZXNzKTsKKwkJCQlXcml0ZURPQygodW5zaWduZWQgY2hhcikoKHBhZ2VfYWRkciA+PiAxNikgJiAweDBmKSwgZG9jcHRyLCBNcGx1c19GbGFzaEFkZHJlc3MpOwogCQkJCXByaW50aygiaGlnaCBkZW5zaXR5XG4iKTsKIAkJCX0KIAkJfQogCQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwogCQlXcml0ZURPQygwLCBkb2NwdHIsIE1wbHVzX1dyaXRlUGlwZVRlcm0pOwogCQkvKiBkZWFzc2VydCBBTEUgKi8KLQkJaWYgKGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDAgfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFEMSB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQURPT0IgfHwgY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFESUQpCisJCWlmIChjb21tYW5kID09IE5BTkRfQ01EX1JFQUQwIHx8IGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRDEgfHwKKwkJICAgIGNvbW1hbmQgPT0gTkFORF9DTURfUkVBRE9PQiB8fCBjb21tYW5kID09IE5BTkRfQ01EX1JFQURJRCkKIAkJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfRmxhc2hDb250cm9sKTsKIAl9CiAKIAkvKgogCSAqIHByb2dyYW0gYW5kIGVyYXNlIGhhdmUgdGhlaXIgb3duIGJ1c3kgaGFuZGxlcnMKIAkgKiBzdGF0dXMgYW5kIHNlcXVlbnRpYWwgaW4gbmVlZHMgbm8gZGVsYXkKLQkqLworCSAqLwogCXN3aXRjaCAoY29tbWFuZCkgewogCiAJY2FzZSBOQU5EX0NNRF9QQUdFUFJPRzoKQEAgLTgxNyw1NSArODA4LDU3IEBACiAJCVdyaXRlRE9DKE5BTkRfQ01EX1NUQVRVUywgZG9jcHRyLCBNcGx1c19GbGFzaENtZCk7CiAJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7CiAJCVdyaXRlRE9DKDAsIGRvY3B0ciwgTXBsdXNfV3JpdGVQaXBlVGVybSk7Ci0JCXdoaWxlICggISh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIDB4NDApKTsKKwkJd2hpbGUgKCEodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiAweDQwKSkgOwogCQlyZXR1cm47CiAKLQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLworCQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBidXN5IHBpbiwgd2UgYXBwbHkgdGhlIGdpdmVuCiAJCSAqIGNvbW1hbmQgZGVsYXkKLQkJKi8KKwkJICovCiAJCWlmICghdGhpcy0+ZGV2X3JlYWR5KSB7Ci0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOworCQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAJLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCAqLwotCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOworCXdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpIDsKIH0KIAogc3RhdGljIGludCBkb2MyMDB4X2Rldl9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKLSAgICAgICAgdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CisJdm9pZCBfX2lvbWVtICpkb2NwdHIgPSBkb2MtPnZpcnRhZHI7CiAKIAlpZiAoRG9DX2lzX01pbGxlbm5pdW1QbHVzKGRvYykpIHsKIAkJLyogMTEuNC4yIC0tIG11c3QgTk9QIGZvdXIgdGltZXMgYmVmb3JlIGNoZWNraW5nIEZSL0IjICovCiAJCURvQ19EZWxheShkb2MsIDQpOwogCQlpZiAoKFJlYWRET0MoZG9jcHRyLCBNcGx1c19GbGFzaENvbnRyb2wpICYgQ0RTTl9DVFJMX0ZSX0JfTUFTSykgIT0gQ0RTTl9DVFJMX0ZSX0JfTUFTSykgewotCQkJaWYoZGVidWcpCisJCQlpZiAoZGVidWcpCiAJCQkJcHJpbnRrKCJub3QgcmVhZHlcbiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJaWYgKGRlYnVnKXByaW50aygid2FzIHJlYWR5XG4iKTsKKwkJaWYgKGRlYnVnKQorCQkJcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewogCQkvKiAxMS40LjIgLS0gbXVzdCBOT1AgZm91ciB0aW1lcyBiZWZvcmUgY2hlY2tpbmcgRlIvQiMgKi8KIAkJRG9DX0RlbGF5KGRvYywgNCk7CiAJCWlmICghKFJlYWRET0MoZG9jcHRyLCBDRFNOQ29udHJvbCkgJiBDRFNOX0NUUkxfRlJfQikpIHsKLQkJCWlmKGRlYnVnKQorCQkJaWYgKGRlYnVnKQogCQkJCXByaW50aygibm90IHJlYWR5XG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qIDExLjQuMiAtLSBNdXN0IE5PUCB0d2ljZSBpZiBpdCdzIHJlYWR5ICovCiAJCURvQ19EZWxheShkb2MsIDIpOwotCQlpZiAoZGVidWcpcHJpbnRrKCJ3YXMgcmVhZHlcbiIpOworCQlpZiAoZGVidWcpCisJCQlwcmludGsoIndhcyByZWFkeVxuIik7CiAJCXJldHVybiAxOwogCX0KIH0KQEAgLTg4MSwxMCArODc0LDEwIEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCiAJLyogUHJpbWUgdGhlIEVDQyBlbmdpbmUgKi8KLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgTkFORF9FQ0NfUkVBRDoKIAkJV3JpdGVET0MoRE9DX0VDQ19SRVNFVCwgZG9jcHRyLCBFQ0NDb25mKTsKIAkJV3JpdGVET0MoRE9DX0VDQ19FTiwgZG9jcHRyLCBFQ0NDb25mKTsKQEAgLTkwMCwxMCArODkzLDEwIEBACiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCiAJLyogUHJpbWUgdGhlIEVDQyBlbmdpbmUgKi8KLQlzd2l0Y2gobW9kZSkgeworCXN3aXRjaCAobW9kZSkgewogCWNhc2UgTkFORF9FQ0NfUkVBRDoKIAkJV3JpdGVET0MoRE9DX0VDQ19SRVNFVCwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKIAkJV3JpdGVET0MoRE9DX0VDQ19FTiwgZG9jcHRyLCBNcGx1c19FQ0NDb25mKTsKQEAgLTkxNiwxMiArOTA5LDExIEBACiB9CiAKIC8qIFRoaXMgY29kZSBpcyBvbmx5IGNhbGxlZCBvbiB3cml0ZSAqLwotc3RhdGljIGludCBkb2MyMDB4X2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAotCQkJCSB1bnNpZ25lZCBjaGFyICplY2NfY29kZSkKK3N0YXRpYyBpbnQgZG9jMjAweF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdW5zaWduZWQgY2hhciAqZWNjX2NvZGUpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7Ci0gICAgICAgIHZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOworCXZvaWQgX19pb21lbSAqZG9jcHRyID0gZG9jLT52aXJ0YWRyOwogCWludCBpOwogCWludCBlbXB0eW1hdGNoID0gMTsKIApAQCAtOTYxLDcgKzk1Myw4IEBACiAJCSAgIG9mdGVuLiAgSXQgY291bGQgYmUgb3B0aW1pemVkIGF3YXkgYnkgZXhhbWluaW5nIHRoZSBkYXRhIGluCiAJCSAgIHRoZSB3cml0ZWJ1ZiByb3V0aW5lLCBhbmQgcmVtZW1iZXJpbmcgdGhlIHJlc3VsdC4gKi8KIAkJZm9yIChpID0gMDsgaSA8IDUxMjsgaSsrKSB7Ci0JCQlpZiAoZGF0W2ldID09IDB4ZmYpIGNvbnRpbnVlOworCQkJaWYgKGRhdFtpXSA9PSAweGZmKQorCQkJCWNvbnRpbnVlOwogCQkJZW1wdHltYXRjaCA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtOTY5LDE3ICs5NjIsMjAgQEAKIAkvKiBJZiBlbXB0eW1hdGNoIHN0aWxsID0xLCB3ZSBkbyBoYXZlIGFuIGFsbC0weGZmIGRhdGEgYnVmZmVyLgogCSAgIFJldHVybiBhbGwtMHhmZiBlY2MgdmFsdWUgaW5zdGVhZCBvZiB0aGUgY29tcHV0ZWQgb25lLCBzbwogCSAgIGl0J2xsIGxvb2sganVzdCBsaWtlIGEgZnJlc2hseS1lcmFzZWQgcGFnZS4gKi8KLQlpZiAoZW1wdHltYXRjaCkgbWVtc2V0KGVjY19jb2RlLCAweGZmLCA2KTsKKwlpZiAoZW1wdHltYXRjaCkKKwkJbWVtc2V0KGVjY19jb2RlLCAweGZmLCA2KTsKICNlbmRpZgogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRvYzIwMHhfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK3N0YXRpYyBpbnQgZG9jMjAweF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAorCQkJCXVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqaXNudWxsKQogewogCWludCBpLCByZXQgPSAwOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwotICAgICAgICB2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl2b2lkIF9faW9tZW0gKmRvY3B0ciA9IGRvYy0+dmlydGFkcjsKKwl1aW50OF90IGNhbGNfZWNjWzZdOwogCXZvbGF0aWxlIHVfY2hhciBkdW1teTsKIAlpbnQgZW1wdHltYXRjaCA9IDE7CiAKQEAgLTEwMTIsMTggKzEwMDgsMjAgQEAKIAkJICAgYWxsLTB4ZmYgZGF0YSBhbmQgc3RvcmVkIGVjYyBibG9jay4gIENoZWNrIHRoZSBzdG9yZWQgZWNjLiAqLwogCQlpZiAoZW1wdHltYXRjaCkgewogCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQkJCWlmIChyZWFkX2VjY1tpXSA9PSAweGZmKSBjb250aW51ZTsKKwkJCQlpZiAocmVhZF9lY2NbaV0gPT0gMHhmZikKKwkJCQkJY29udGludWU7CiAJCQkJZW1wdHltYXRjaCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAkJLyogSWYgZW1wdHltYXRjaCBzdGlsbCA9MSwgY2hlY2sgdGhlIGRhdGEgYmxvY2suICovCiAJCWlmIChlbXB0eW1hdGNoKSB7Ci0JCS8qIE5vdGU6IHRoaXMgc29tZXdoYXQgZXhwZW5zaXZlIHRlc3Qgc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQKLQkJICAgb2Z0ZW4uICBJdCBjb3VsZCBiZSBvcHRpbWl6ZWQgYXdheSBieSBleGFtaW5pbmcgdGhlIGRhdGEgaW4KLQkJICAgdGhlIHJlYWRidWYgcm91dGluZSwgYW5kIHJlbWVtYmVyaW5nIHRoZSByZXN1bHQuICovCisJCQkvKiBOb3RlOiB0aGlzIHNvbWV3aGF0IGV4cGVuc2l2ZSB0ZXN0IHNob3VsZCBub3QgYmUgdHJpZ2dlcmVkCisJCQkgICBvZnRlbi4gIEl0IGNvdWxkIGJlIG9wdGltaXplZCBhd2F5IGJ5IGV4YW1pbmluZyB0aGUgZGF0YSBpbgorCQkJICAgdGhlIHJlYWRidWYgcm91dGluZSwgYW5kIHJlbWVtYmVyaW5nIHRoZSByZXN1bHQuICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgNTEyOyBpKyspIHsKLQkJCQlpZiAoZGF0W2ldID09IDB4ZmYpIGNvbnRpbnVlOworCQkJCWlmIChkYXRbaV0gPT0gMHhmZikKKwkJCQkJY29udGludWU7CiAJCQkJZW1wdHltYXRjaCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xMDMyLDcgKzEwMzAsOCBAQAogCQkgICBlcmFzZWQgYmxvY2ssIGluIHdoaWNoIGNhc2UgdGhlIEVDQyB3aWxsIG5vdCBjb21lIG91dCByaWdodC4KIAkJICAgV2UnbGwgc3VwcHJlc3MgdGhlIGVycm9yIGFuZCB0ZWxsIHRoZSBjYWxsZXIgZXZlcnl0aGluZydzCiAJCSAgIE9LLiAgQmVjYXVzZSBpdCBpcy4gKi8KLQkJaWYgKCFlbXB0eW1hdGNoKSByZXQgPSBkb2NfZWNjX2RlY29kZSAocnNfZGVjb2RlciwgZGF0LCBjYWxjX2VjYyk7CisJCWlmICghZW1wdHltYXRjaCkKKwkJCXJldCA9IGRvY19lY2NfZGVjb2RlKHJzX2RlY29kZXIsIGRhdCwgY2FsY19lY2MpOwogCQlpZiAocmV0ID4gMCkKIAkJCXByaW50ayhLRVJOX0VSUiAiZG9jMjAweF9jb3JyZWN0X2RhdGEgY29ycmVjdGVkICVkIGVycm9yc1xuIiwgcmV0KTsKIAl9CkBAIC0xMDU5LDExICsxMDU4LDEwIEBACiAgKiBzYWZlci4gIFRoZSBvbmx5IHByb2JsZW0gd2l0aCBpdCBpcyB0aGF0IGFueSBjb2RlIHRoYXQgcGFyc2VzIG9vYmZyZWUgbXVzdAogICogYmUgYWJsZSB0byBoYW5kbGUgb3V0LW9mLW9yZGVyIHNlZ21lbnRzLgogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBkb2MyMDB4X29vYmluZm8gPSB7Ci0gICAgICAgIC51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCi0gICAgICAgIC5lY2NieXRlcyA9IDYsCi0gICAgICAgIC5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNCwgNX0sCi0gICAgICAgIC5vb2JmcmVlID0geyB7OCwgOH0sIHs2LCAyfSB9CitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGRvYzIwMHhfb29iaW5mbyA9IHsKKwkuZWNjYnl0ZXMgPSA2LAorCS5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNCwgNX0sCisJLm9vYmZyZWUgPSB7ezgsIDh9LCB7NiwgMn19CiB9OwogCiAvKiBGaW5kIHRoZSAoSSlORlRMIE1lZGlhIEhlYWRlciwgYW5kIG9wdGlvbmFsbHkgYWxzbyB0aGUgbWlycm9yIG1lZGlhIGhlYWRlci4KQEAgLTEwNzIsOCArMTA3MCw3IEBACiAgICBlaXRoZXIgIkFOQU5EIiBvciAiQk5BTkQiLiAgSWYgZmluZG1pcnJvcj0xLCBhbHNvIGxvb2sgZm9yIHRoZSBtaXJyb3IgbWVkaWEKICAgIGhlYWRlci4gIFRoZSBwYWdlICNzIG9mIHRoZSBmb3VuZCBtZWRpYSBoZWFkZXJzIGFyZSBwbGFjZWQgaW4gbWgwX3BhZ2UgYW5kCiAgICBtaDFfcGFnZSBpbiB0aGUgRE9DIHByaXZhdGUgc3RydWN0dXJlLiAqLwotc3RhdGljIGludCBfX2luaXQgZmluZF9tZWRpYV9oZWFkZXJzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKmlkLCBpbnQgZmluZG1pcnJvcikKK3N0YXRpYyBpbnQgX19pbml0IGZpbmRfbWVkaWFfaGVhZGVycyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGNvbnN0IGNoYXIgKmlkLCBpbnQgZmluZG1pcnJvcikKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKQEAgLTEwODIsMTcgKzEwNzksMTkgQEAKIAlzaXplX3QgcmV0bGVuOwogCiAJZm9yIChvZmZzID0gMDsgb2ZmcyA8IG10ZC0+c2l6ZTsgb2ZmcyArPSBtdGQtPmVyYXNlc2l6ZSkgewotCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZmZzLCBtdGQtPm9vYmJsb2NrLCAmcmV0bGVuLCBidWYpOwotCQlpZiAocmV0bGVuICE9IG10ZC0+b29iYmxvY2spIGNvbnRpbnVlOworCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSwgJnJldGxlbiwgYnVmKTsKKwkJaWYgKHJldGxlbiAhPSBtdGQtPndyaXRlc2l6ZSkKKwkJCWNvbnRpbnVlOwogCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJFQ0MgZXJyb3Igc2Nhbm5pbmcgRE9DIGF0IDB4JXhcbiIsCi0JCQkJb2Zmcyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFQ0MgZXJyb3Igc2Nhbm5pbmcgRE9DIGF0IDB4JXhcbiIsIG9mZnMpOwogCQl9Ci0JCWlmIChtZW1jbXAoYnVmLCBpZCwgNikpIGNvbnRpbnVlOworCQlpZiAobWVtY21wKGJ1ZiwgaWQsIDYpKQorCQkJY29udGludWU7CiAJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIERpc2tPbkNoaXAgJXMgTWVkaWEgSGVhZGVyIGF0IDB4JXhcbiIsIGlkLCBvZmZzKTsKIAkJaWYgKGRvYy0+bWgwX3BhZ2UgPT0gLTEpIHsKIAkJCWRvYy0+bWgwX3BhZ2UgPSBvZmZzID4+IHRoaXMtPnBhZ2Vfc2hpZnQ7Ci0JCQlpZiAoIWZpbmRtaXJyb3IpIHJldHVybiAxOworCQkJaWYgKCFmaW5kbWlycm9yKQorCQkJCXJldHVybiAxOwogCQkJY29udGludWU7CiAJCX0KIAkJZG9jLT5taDFfcGFnZSA9IG9mZnMgPj4gdGhpcy0+cGFnZV9zaGlmdDsKQEAgLTExMDUsOCArMTEwNCw4IEBACiAJLyogT25seSBvbmUgbWVkaWFoZWFkZXIgd2FzIGZvdW5kLiAgV2Ugd2FudCBidWYgdG8gY29udGFpbiBhCiAJICAgbWVkaWFoZWFkZXIgb24gcmV0dXJuLCBzbyB3ZSdsbCBoYXZlIHRvIHJlLXJlYWQgdGhlIG9uZSB3ZSBmb3VuZC4gKi8KIAlvZmZzID0gZG9jLT5taDBfcGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwotCXJldCA9IG10ZC0+cmVhZChtdGQsIG9mZnMsIG10ZC0+b29iYmxvY2ssICZyZXRsZW4sIGJ1Zik7Ci0JaWYgKHJldGxlbiAhPSBtdGQtPm9vYmJsb2NrKSB7CisJcmV0ID0gbXRkLT5yZWFkKG10ZCwgb2ZmcywgbXRkLT53cml0ZXNpemUsICZyZXRsZW4sIGJ1Zik7CisJaWYgKHJldGxlbiAhPSBtdGQtPndyaXRlc2l6ZSkgewogCQkvKiBJbnNhbml0eS4gIEdpdmUgdXAuICovCiAJCXByaW50ayhLRVJOX0VSUiAiUmVhZCBEaXNrT25DaGlwIE1lZGlhIEhlYWRlciBvbmNlLCBidXQgY2FuJ3QgcmVyZWFkIGl0Pz8/XG4iKTsKIAkJcmV0dXJuIDA7CkBAIC0xMTE0LDggKzExMTMsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQgbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwpAQCAtMTEyNywxMyArMTEyNSwxNCBAQAogCXVuc2lnbmVkIGJsb2NrcywgbWF4YmxvY2tzOwogCWludCBvZmZzLCBudW1oZWFkZXJzOwogCi0JYnVmID0ga21hbGxvYyhtdGQtPm9vYmJsb2NrLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKG10ZC0+d3JpdGVzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAgbWVkaWFoZWFkZXIga21hbGxvYyBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICghKG51bWhlYWRlcnM9ZmluZF9tZWRpYV9oZWFkZXJzKG10ZCwgYnVmLCAiQU5BTkQiLCAxKSkpIGdvdG8gb3V0OwotCW1oID0gKHN0cnVjdCBORlRMTWVkaWFIZWFkZXIgKikgYnVmOworCWlmICghKG51bWhlYWRlcnMgPSBmaW5kX21lZGlhX2hlYWRlcnMobXRkLCBidWYsICJBTkFORCIsIDEpKSkKKwkJZ290byBvdXQ7CisJbWggPSAoc3RydWN0IE5GVExNZWRpYUhlYWRlciAqKWJ1ZjsKIAogCW1oLT5OdW1FcmFzZVVuaXRzID0gbGUxNl90b19jcHUobWgtPk51bUVyYXNlVW5pdHMpOwogCW1oLT5GaXJzdFBoeXNpY2FsRVVOID0gbGUxNl90b19jcHUobWgtPkZpcnN0UGh5c2ljYWxFVU4pOwpAQCAtMTE1NSw4ICsxMTU0LDggQEAKIAkJLyogQXV0by1kZXRlcm1pbmUgVW5pdFNpemVGYWN0b3IuICBUaGUgY29uc3RyYWludHMgYXJlOgogCQkgICAtIFRoZXJlIGNhbiBiZSBhdCBtb3N0IDMyNzY4IHZpcnR1YWwgYmxvY2tzLgogCQkgICAtIFRoZXJlIGNhbiBiZSBhdCBtb3N0ICh2aXJ0dWFsIGJsb2NrIHNpemUgLSBwYWdlIHNpemUpCi0JCSAgICAgdmlydHVhbCBibG9ja3MgKGJlY2F1c2UgTWVkaWFIZWFkZXIrQkJUIG11c3QgZml0IGluIDEpLgotCQkqLworCQkgICB2aXJ0dWFsIGJsb2NrcyAoYmVjYXVzZSBNZWRpYUhlYWRlcitCQlQgbXVzdCBmaXQgaW4gMSkuCisJCSAqLwogCQltaC0+VW5pdFNpemVGYWN0b3IgPSAweGZmOwogCQl3aGlsZSAoYmxvY2tzID4gbWF4YmxvY2tzKSB7CiAJCQlibG9ja3MgPj49IDE7CkBAIC0xMjExLDE0ICsxMjEwLDEzIEBACiAJfQogCiAJcmV0ID0gbnVtcGFydHM7Ci1vdXQ6Cisgb3V0OgogCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJldDsKIH0KIAogLyogVGhpcyBpcyBhIHN0cmlwcGVkLWRvd24gY29weSBvZiB0aGUgY29kZSBpbiBpbmZ0bG1vdW50LmMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBpbmZ0bF9wYXJ0c2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKLQkJCQkgc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzKQorc3RhdGljIGlubGluZSBpbnQgX19pbml0IGluZnRsX3BhcnRzY2FuKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydHMpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlzdHJ1Y3QgZG9jX3ByaXYgKmRvYyA9IHRoaXMtPnByaXY7CkBAIC0xMjM1LDE1ICsxMjMzLDE2IEBACiAJaWYgKGluZnRsX2JidF93cml0ZSkKIAkJZW5kIC09IChJTkZUTF9CQlRfUkVTRVJWRURfQkxPQ0tTIDw8IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQpOwogCi0JYnVmID0ga21hbGxvYyhtdGQtPm9vYmJsb2NrLCBHRlBfS0VSTkVMKTsKKwlidWYgPSBrbWFsbG9jKG10ZC0+d3JpdGVzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlwcmludGsoS0VSTl9FUlIgIkRpc2tPbkNoaXAgbWVkaWFoZWFkZXIga21hbGxvYyBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFmaW5kX21lZGlhX2hlYWRlcnMobXRkLCBidWYsICJCTkFORCIsIDApKSBnb3RvIG91dDsKKwlpZiAoIWZpbmRfbWVkaWFfaGVhZGVycyhtdGQsIGJ1ZiwgIkJOQU5EIiwgMCkpCisJCWdvdG8gb3V0OwogCWRvYy0+bWgxX3BhZ2UgPSBkb2MtPm1oMF9wYWdlICsgKDQwOTYgPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JbWggPSAoc3RydWN0IElORlRMTWVkaWFIZWFkZXIgKikgYnVmOworCW1oID0gKHN0cnVjdCBJTkZUTE1lZGlhSGVhZGVyICopYnVmOwogCiAJbWgtPk5vT2ZCb290SW1hZ2VCbG9ja3MgPSBsZTMyX3RvX2NwdShtaC0+Tm9PZkJvb3RJbWFnZUJsb2Nrcyk7CiAJbWgtPk5vT2ZCaW5hcnlQYXJ0aXRpb25zID0gbGUzMl90b19jcHUobWgtPk5vT2ZCaW5hcnlQYXJ0aXRpb25zKTsKQEAgLTEzMTksOCArMTMxOCwxMCBAQAogCQlwYXJ0c1tudW1wYXJ0c10ub2Zmc2V0ID0gaXAtPmZpcnN0VW5pdCA8PCB2c2hpZnQ7CiAJCXBhcnRzW251bXBhcnRzXS5zaXplID0gKDEgKyBpcC0+bGFzdFVuaXQgLSBpcC0+Zmlyc3RVbml0KSA8PCB2c2hpZnQ7CiAJCW51bXBhcnRzKys7Ci0JCWlmIChpcC0+bGFzdFVuaXQgPiBsYXN0dnVuaXQpIGxhc3R2dW5pdCA9IGlwLT5sYXN0VW5pdDsKLQkJaWYgKGlwLT5mbGFncyAmIElORlRMX0xBU1QpIGJyZWFrOworCQlpZiAoaXAtPmxhc3RVbml0ID4gbGFzdHZ1bml0KQorCQkJbGFzdHZ1bml0ID0gaXAtPmxhc3RVbml0OworCQlpZiAoaXAtPmZsYWdzICYgSU5GVExfTEFTVCkKKwkJCWJyZWFrOwogCX0KIAlsYXN0dnVuaXQrKzsKIAlpZiAoKGxhc3R2dW5pdCA8PCB2c2hpZnQpIDwgZW5kKSB7CkBAIC0xMzMwLDcgKzEzMzEsNyBAQAogCQludW1wYXJ0cysrOwogCX0KIAlyZXQgPSBudW1wYXJ0czsKLW91dDoKKyBvdXQ6CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM0MiwxMSArMTM0MywxMiBAQAogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIAlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0c1syXTsKIAotCW1lbXNldCgoY2hhciAqKSBwYXJ0cywgMCwgc2l6ZW9mKHBhcnRzKSk7CisJbWVtc2V0KChjaGFyICopcGFydHMsIDAsIHNpemVvZihwYXJ0cykpOwogCS8qIE9uIE5GVEwsIHdlIGhhdmUgdG8gZmluZCB0aGUgbWVkaWEgaGVhZGVycyBiZWZvcmUgd2UgY2FuIHJlYWQgdGhlCiAJICAgQkJUcywgc2luY2UgdGhleSdyZSBzdG9yZWQgaW4gdGhlIG1lZGlhIGhlYWRlciBlcmFzZWJsb2Nrcy4gKi8KIAludW1wYXJ0cyA9IG5mdGxfcGFydHNjYW4obXRkLCBwYXJ0cyk7Ci0JaWYgKCFudW1wYXJ0cykgcmV0dXJuIC1FSU87CisJaWYgKCFudW1wYXJ0cykKKwkJcmV0dXJuIC1FSU87CiAJdGhpcy0+YmJ0X3RkLT5vcHRpb25zID0gTkFORF9CQlRfQUJTUEFHRSB8IE5BTkRfQkJUXzhCSVQgfAogCQkJCU5BTkRfQkJUX1NBVkVDT05URU5UIHwgTkFORF9CQlRfV1JJVEUgfAogCQkJCU5BTkRfQkJUX1ZFUlNJT047CkBAIC0xMzkzLDggKzEzOTUsNyBAQAogCQl0aGlzLT5iYnRfdGQtPnBhZ2VzWzBdID0gMjsKIAkJdGhpcy0+YmJ0X21kID0gTlVMTDsKIAl9IGVsc2UgewotCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF84QklUIHwKLQkJCQkJTkFORF9CQlRfVkVSU0lPTjsKKwkJdGhpcy0+YmJ0X3RkLT5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfOEJJVCB8IE5BTkRfQkJUX1ZFUlNJT047CiAJCWlmIChpbmZ0bF9iYnRfd3JpdGUpCiAJCQl0aGlzLT5iYnRfdGQtPm9wdGlvbnMgfD0gTkFORF9CQlRfV1JJVEU7CiAJCXRoaXMtPmJidF90ZC0+b2ZmcyA9IDg7CkBAIC0xNDA0LDggKzE0MDUsNyBAQAogCQl0aGlzLT5iYnRfdGQtPnJlc2VydmVkX2Jsb2NrX2NvZGUgPSAweDAxOwogCQl0aGlzLT5iYnRfdGQtPnBhdHRlcm4gPSAiTVNZU19CQlQiOwogCi0JCXRoaXMtPmJidF9tZC0+b3B0aW9ucyA9IE5BTkRfQkJUX0xBU1RCTE9DSyB8IE5BTkRfQkJUXzhCSVQgfAotCQkJCQlOQU5EX0JCVF9WRVJTSU9OOworCQl0aGlzLT5iYnRfbWQtPm9wdGlvbnMgPSBOQU5EX0JCVF9MQVNUQkxPQ0sgfCBOQU5EX0JCVF84QklUIHwgTkFORF9CQlRfVkVSU0lPTjsKIAkJaWYgKGluZnRsX2JidF93cml0ZSkKIAkJCXRoaXMtPmJidF9tZC0+b3B0aW9ucyB8PSBOQU5EX0JCVF9XUklURTsKIAkJdGhpcy0+YmJ0X21kLT5vZmZzID0gODsKQEAgLTE0MjAsMTIgKzE0MjAsMTMgQEAKIAkgICBBdCBsZWFzdCBhcyBuYW5kX2JidC5jIGlzIGN1cnJlbnRseSB3cml0dGVuLiAqLwogCWlmICgocmV0ID0gbmFuZF9zY2FuX2JidChtdGQsIE5VTEwpKSkKIAkJcmV0dXJuIHJldDsKLQltZW1zZXQoKGNoYXIgKikgcGFydHMsIDAsIHNpemVvZihwYXJ0cykpOworCW1lbXNldCgoY2hhciAqKXBhcnRzLCAwLCBzaXplb2YocGFydHMpKTsKIAludW1wYXJ0cyA9IGluZnRsX3BhcnRzY2FuKG10ZCwgcGFydHMpOwogCS8qIEF0IGxlYXN0IGZvciBub3csIHJlcXVpcmUgdGhlIElORlRMIE1lZGlhIEhlYWRlci4gIFdlIGNvdWxkIHByb2JhYmx5CiAJICAgZG8gd2l0aG91dCBpdCBmb3Igbm9uLUlORlRMIHVzZSwgc2luY2UgYWxsIGl0IGdpdmVzIHVzIGlzCiAJICAgYXV0b3BhcnRpdGlvbmluZywgYnV0IEkgd2FudCB0byBnaXZlIGl0IG1vcmUgdGhvdWdodC4gKi8KLQlpZiAoIW51bXBhcnRzKSByZXR1cm4gLUVJTzsKKwlpZiAoIW51bXBhcnRzKQorCQlyZXR1cm4gLUVJTzsKIAlhZGRfbXRkX2RldmljZShtdGQpOwogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogCWlmICghbm9fYXV0b3BhcnQpCkBAIC0xNDM5LDcgKzE0NDAsNiBAQAogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJc3RydWN0IGRvY19wcml2ICpkb2MgPSB0aGlzLT5wcml2OwogCi0JdGhpcy0+d3JpdGVfYnl0ZSA9IGRvYzIwMDBfd3JpdGVfYnl0ZTsKIAl0aGlzLT5yZWFkX2J5dGUgPSBkb2MyMDAwX3JlYWRfYnl0ZTsKIAl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAwX3dyaXRlYnVmOwogCXRoaXMtPnJlYWRfYnVmID0gZG9jMjAwMF9yZWFkYnVmOwpAQCAtMTQ1Nyw3ICsxNDU3LDYgQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIAotCXRoaXMtPndyaXRlX2J5dGUgPSBkb2MyMDAxX3dyaXRlX2J5dGU7CiAJdGhpcy0+cmVhZF9ieXRlID0gZG9jMjAwMV9yZWFkX2J5dGU7CiAJdGhpcy0+d3JpdGVfYnVmID0gZG9jMjAwMV93cml0ZWJ1ZjsKIAl0aGlzLT5yZWFkX2J1ZiA9IGRvYzIwMDFfcmVhZGJ1ZjsKQEAgLTE0ODksMTYgKzE0ODgsMTUgQEAKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jID0gdGhpcy0+cHJpdjsKIAotCXRoaXMtPndyaXRlX2J5dGUgPSBOVUxMOwogCXRoaXMtPnJlYWRfYnl0ZSA9IGRvYzIwMDFwbHVzX3JlYWRfYnl0ZTsKIAl0aGlzLT53cml0ZV9idWYgPSBkb2MyMDAxcGx1c193cml0ZWJ1ZjsKIAl0aGlzLT5yZWFkX2J1ZiA9IGRvYzIwMDFwbHVzX3JlYWRidWY7CiAJdGhpcy0+dmVyaWZ5X2J1ZiA9IGRvYzIwMDFwbHVzX3ZlcmlmeWJ1ZjsKIAl0aGlzLT5zY2FuX2JidCA9IGluZnRsX3NjYW5fYmJ0OwotCXRoaXMtPmh3Y29udHJvbCA9IE5VTEw7CisJdGhpcy0+Y21kX2N0cmwgPSBOVUxMOwogCXRoaXMtPnNlbGVjdF9jaGlwID0gZG9jMjAwMXBsdXNfc2VsZWN0X2NoaXA7CiAJdGhpcy0+Y21kZnVuYyA9IGRvYzIwMDFwbHVzX2NvbW1hbmQ7Ci0JdGhpcy0+ZW5hYmxlX2h3ZWNjID0gZG9jMjAwMXBsdXNfZW5hYmxlX2h3ZWNjOworCXRoaXMtPmVjYy5od2N0bCA9IGRvYzIwMDFwbHVzX2VuYWJsZV9od2VjYzsKIAogCWRvYy0+Y2hpcHNfcGVyX2Zsb29yID0gMTsKIAltdGQtPm5hbWUgPSAiRGlza09uQ2hpcCBNaWxsZW5uaXVtIFBsdXMiOwpAQCAtMTUzNSwyMCArMTUzMywxNiBAQAogCXNhdmVfY29udHJvbCA9IFJlYWRET0ModmlydGFkciwgRE9DQ29udHJvbCk7CiAKIAkvKiBSZXNldCB0aGUgRGlza09uQ2hpcCBBU0lDICovCi0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7Ci0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7CisJV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JFU0VULCB2aXJ0YWRyLCBET0NDb250cm9sKTsKKwlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUkVTRVQsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOwogCiAJLyogRW5hYmxlIHRoZSBEaXNrT25DaGlwIEFTSUMgKi8KLQlXcml0ZURPQyhET0NfTU9ERV9DTFJfRVJSIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfTk9STUFMLAotCQkgdmlydGFkciwgRE9DQ29udHJvbCk7Ci0JV3JpdGVET0MoRE9DX01PREVfQ0xSX0VSUiB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX05PUk1BTCwKLQkJIHZpcnRhZHIsIERPQ0NvbnRyb2wpOworCVdyaXRlRE9DKERPQ19NT0RFX0NMUl9FUlIgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9OT1JNQUwsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOworCVdyaXRlRE9DKERPQ19NT0RFX0NMUl9FUlIgfCBET0NfTU9ERV9NRFdSRU4gfCBET0NfTU9ERV9OT1JNQUwsIHZpcnRhZHIsIERPQ0NvbnRyb2wpOwogCiAJQ2hpcElEID0gUmVhZERPQyh2aXJ0YWRyLCBDaGlwSUQpOwogCi0Jc3dpdGNoKENoaXBJRCkgeworCXN3aXRjaCAoQ2hpcElEKSB7CiAJY2FzZSBET0NfQ2hpcElEX0RvYzJrOgogCQlyZWcgPSBEb0NfMmtfRUNDU3RhdHVzOwogCQlicmVhazsKQEAgLTE1NjQsMTUgKzE1NTgsMTMgQEAKIAkJCVJlYWRET0ModmlydGFkciwgTXBsdXNfUG93ZXIpOwogCiAJCS8qIFJlc2V0IHRoZSBNaWxsZW5uaXVtIFBsdXMgQVNJQyAqLwotCQl0bXAgPSBET0NfTU9ERV9SRVNFVCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfAotCQkJRE9DX01PREVfQkRFQ1Q7CisJCXRtcCA9IERPQ19NT0RFX1JFU0VUIHwgRE9DX01PREVfTURXUkVOIHwgRE9DX01PREVfUlNUX0xBVCB8IERPQ19NT0RFX0JERUNUOwogCQlXcml0ZURPQyh0bXAsIHZpcnRhZHIsIE1wbHVzX0RPQ0NvbnRyb2wpOwogCQlXcml0ZURPQyh+dG1wLCB2aXJ0YWRyLCBNcGx1c19DdHJsQ29uZmlybSk7CiAKIAkJbWRlbGF5KDEpOwogCQkvKiBFbmFibGUgdGhlIE1pbGxlbm5pdW0gUGx1cyBBU0lDICovCi0JCXRtcCA9IERPQ19NT0RFX05PUk1BTCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfAotCQkJRE9DX01PREVfQkRFQ1Q7CisJCXRtcCA9IERPQ19NT0RFX05PUk1BTCB8IERPQ19NT0RFX01EV1JFTiB8IERPQ19NT0RFX1JTVF9MQVQgfCBET0NfTU9ERV9CREVDVDsKIAkJV3JpdGVET0ModG1wLCB2aXJ0YWRyLCBNcGx1c19ET0NDb250cm9sKTsKIAkJV3JpdGVET0MofnRtcCwgdmlydGFkciwgTXBsdXNfQ3RybENvbmZpcm0pOwogCQltZGVsYXkoMSk7CkBAIC0xNTk2LDcgKzE1ODgsNyBAQAogCQlnb3RvIG5vdGZvdW5kOwogCX0KIAkvKiBDaGVjayB0aGUgVE9HR0xFIGJpdCBpbiB0aGUgRUNDIHJlZ2lzdGVyICovCi0JdG1wICA9IFJlYWRET0NfKHZpcnRhZHIsIHJlZykgJiBET0NfVE9HR0xFX0JJVDsKKwl0bXAgPSBSZWFkRE9DXyh2aXJ0YWRyLCByZWcpICYgRE9DX1RPR0dMRV9CSVQ7CiAJdG1wYiA9IFJlYWRET0NfKHZpcnRhZHIsIHJlZykgJiBET0NfVE9HR0xFX0JJVDsKIAl0bXBjID0gUmVhZERPQ18odmlydGFkciwgcmVnKSAmIERPQ19UT0dHTEVfQklUOwogCWlmICgodG1wID09IHRtcGIpIHx8ICh0bXAgIT0gdG1wYykpIHsKQEAgLTE2MjYsMTEgKzE2MTgsMTEgQEAKIAkJaWYgKENoaXBJRCA9PSBET0NfQ2hpcElEX0RvY01pbFBsdXMxNikgewogCQkJV3JpdGVET0Mofm5ld3ZhbCwgdmlydGFkciwgTXBsdXNfQWxpYXNSZXNvbHV0aW9uKTsKIAkJCW9sZHZhbCA9IFJlYWRET0MoZG9jLT52aXJ0YWRyLCBNcGx1c19BbGlhc1Jlc29sdXRpb24pOwotCQkJV3JpdGVET0MobmV3dmFsLCB2aXJ0YWRyLCBNcGx1c19BbGlhc1Jlc29sdXRpb24pOyAvLyByZXN0b3JlIGl0CisJCQlXcml0ZURPQyhuZXd2YWwsIHZpcnRhZHIsIE1wbHVzX0FsaWFzUmVzb2x1dGlvbik7CS8vIHJlc3RvcmUgaXQKIAkJfSBlbHNlIHsKIAkJCVdyaXRlRE9DKH5uZXd2YWwsIHZpcnRhZHIsIEFsaWFzUmVzb2x1dGlvbik7CiAJCQlvbGR2YWwgPSBSZWFkRE9DKGRvYy0+dmlydGFkciwgQWxpYXNSZXNvbHV0aW9uKTsKLQkJCVdyaXRlRE9DKG5ld3ZhbCwgdmlydGFkciwgQWxpYXNSZXNvbHV0aW9uKTsgLy8gcmVzdG9yZSBpdAorCQkJV3JpdGVET0MobmV3dmFsLCB2aXJ0YWRyLCBBbGlhc1Jlc29sdXRpb24pOwkvLyByZXN0b3JlIGl0CiAJCX0KIAkJbmV3dmFsID0gfm5ld3ZhbDsKIAkJaWYgKG9sZHZhbCA9PSBuZXd2YWwpIHsKQEAgLTE2NDIsMTAgKzE2MzQsOCBAQAogCXByaW50ayhLRVJOX05PVElDRSAiRGlza09uQ2hpcCBmb3VuZCBhdCAweCVseFxuIiwgcGh5c2Fkcik7CiAKIAlsZW4gPSBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArCi0JICAgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApICsKLQkgICAgICBzaXplb2Yoc3RydWN0IGRvY19wcml2KSArCi0JICAgICAgKDIgKiBzaXplb2Yoc3RydWN0IG5hbmRfYmJ0X2Rlc2NyKSk7Ci0JbXRkID0gIGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwkgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApICsgc2l6ZW9mKHN0cnVjdCBkb2NfcHJpdikgKyAoMiAqIHNpemVvZihzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IpKTsKKwltdGQgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtdGQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJEaXNrT25DaGlwIGttYWxsb2MgKCVkIGJ5dGVzKSBmYWlsZWQhXG4iLCBsZW4pOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTY2MywxNyArMTY1MywxOSBAQAogCiAJbmFuZC0+cHJpdgkJPSBkb2M7CiAJbmFuZC0+c2VsZWN0X2NoaXAJPSBkb2MyMDB4X3NlbGVjdF9jaGlwOwotCW5hbmQtPmh3Y29udHJvbAkJPSBkb2MyMDB4X2h3Y29udHJvbDsKKwluYW5kLT5jbWRfY3RybAkJPSBkb2MyMDB4X2h3Y29udHJvbDsKIAluYW5kLT5kZXZfcmVhZHkJCT0gZG9jMjAweF9kZXZfcmVhZHk7CiAJbmFuZC0+d2FpdGZ1bmMJCT0gZG9jMjAweF93YWl0OwogCW5hbmQtPmJsb2NrX2JhZAkJPSBkb2MyMDB4X2Jsb2NrX2JhZDsKLQluYW5kLT5lbmFibGVfaHdlY2MJPSBkb2MyMDB4X2VuYWJsZV9od2VjYzsKLQluYW5kLT5jYWxjdWxhdGVfZWNjCT0gZG9jMjAweF9jYWxjdWxhdGVfZWNjOwotCW5hbmQtPmNvcnJlY3RfZGF0YQk9IGRvYzIwMHhfY29ycmVjdF9kYXRhOworCW5hbmQtPmVjYy5od2N0bAkJPSBkb2MyMDB4X2VuYWJsZV9od2VjYzsKKwluYW5kLT5lY2MuY2FsY3VsYXRlCT0gZG9jMjAweF9jYWxjdWxhdGVfZWNjOworCW5hbmQtPmVjYy5jb3JyZWN0CT0gZG9jMjAweF9jb3JyZWN0X2RhdGE7CiAKLQluYW5kLT5hdXRvb29iCQk9ICZkb2MyMDB4X29vYmluZm87Ci0JbmFuZC0+ZWNjbW9kZQkJPSBOQU5EX0VDQ19IVzZfNTEyOwotCW5hbmQtPm9wdGlvbnMJCT0gTkFORF9VU0VfRkxBU0hfQkJUIHwgTkFORF9IV0VDQ19TWU5EUk9NRTsKKwluYW5kLT5lY2MubGF5b3V0CT0gJmRvYzIwMHhfb29iaW5mbzsKKwluYW5kLT5lY2MubW9kZQkJPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwluYW5kLT5lY2Muc2l6ZQkJPSA1MTI7CisJbmFuZC0+ZWNjLmJ5dGVzCQk9IDY7CisJbmFuZC0+b3B0aW9ucwkJPSBOQU5EX1VTRV9GTEFTSF9CQlQ7CiAKIAlkb2MtPnBoeXNhZHIJCT0gcGh5c2FkcjsKIAlkb2MtPnZpcnRhZHIJCT0gdmlydGFkcjsKQEAgLTE3MDcsMTggKzE2OTksMTggQEAKIAlkb2NsaXN0ID0gbXRkOwogCXJldHVybiAwOwogCi1ub3Rmb3VuZDoKKyBub3Rmb3VuZDoKIAkvKiBQdXQgYmFjayB0aGUgY29udGVudHMgb2YgdGhlIERPQ0NvbnRyb2wgcmVnaXN0ZXIsIGluIGNhc2UgaXQncyBub3QKIAkgICBhY3R1YWxseSBhIERpc2tPbkNoaXAuICAqLwogCVdyaXRlRE9DKHNhdmVfY29udHJvbCwgdmlydGFkciwgRE9DQ29udHJvbCk7Ci1mYWlsOgorIGZhaWw6CiAJaW91bm1hcCh2aXJ0YWRyKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCByZWxlYXNlX25hbmRkb2Modm9pZCkKIHsKLSAJc3RydWN0IG10ZF9pbmZvICptdGQsICpuZXh0bXRkOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkLCAqbmV4dG10ZDsKIAlzdHJ1Y3QgbmFuZF9jaGlwICpuYW5kOwogCXN0cnVjdCBkb2NfcHJpdiAqZG9jOwogCkBAIC0xNzQ3LDggKzE3MzksOCBAQAogCSAqIGdlbmVyYXRvciBwb2xpbm9taWFsIGRlZ3JlZSA9IDQKIAkgKi8KIAlyc19kZWNvZGVyID0gaW5pdF9ycygxMCwgMHg0MDksIEZDUiwgMSwgTlJPT1RTKTsKLSAJaWYgKCFyc19kZWNvZGVyKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIkRpc2tPbkNoaXA6IENvdWxkIG5vdCBjcmVhdGUgYSBSUyBkZWNvZGVyXG4iKTsKKwlpZiAoIXJzX2RlY29kZXIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJEaXNrT25DaGlwOiBDb3VsZCBub3QgY3JlYXRlIGEgUlMgZGVjb2RlclxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTc1OCw3ICsxNzUwLDcgQEAKIAkJaWYgKHJldCA8IDApCiAJCQlnb3RvIG91dGVycjsKIAl9IGVsc2UgewotCQlmb3IgKGk9MDsgKGRvY19sb2NhdGlvbnNbaV0gIT0gMHhmZmZmZmZmZik7IGkrKykgeworCQlmb3IgKGkgPSAwOyAoZG9jX2xvY2F0aW9uc1tpXSAhPSAweGZmZmZmZmZmKTsgaSsrKSB7CiAJCQlkb2NfcHJvYmUoZG9jX2xvY2F0aW9uc1tpXSk7CiAJCX0KIAl9CkBAIC0xNzcwLDcgKzE3NjIsNyBAQAogCQlnb3RvIG91dGVycjsKIAl9CiAJcmV0dXJuIDA7Ci1vdXRlcnI6Cisgb3V0ZXJyOgogCWZyZWVfcnMocnNfZGVjb2Rlcik7CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKaW5kZXggOWIxZmQyZi4uNTE2YzBlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIGRyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMiBNYXJpdXMgR3L2Z2VyIChtYWdAc3lzZ28uZGUpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcml1cyBHcsO2Z2VyIChtYWdAc3lzZ28uZGUpCiAgKgogICogIERlcml2ZWQgZnJvbSBkcml2ZXJzL210ZC9uYW5kL2F1dGNwdTEyLmMKICAqICAgICAgIENvcHlyaWdodCAoYykgMjAwMSBUaG9tYXMgR2xlaXhuZXIgKGdsZWl4bmVyQGF1dHJvbml4LmRlKQpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPiAvKiBmb3IgQ0xQUzcxMTFfVklSVF9CQVNFICovCisjaW5jbHVkZSA8YXNtL2FyY2gvaGFyZHdhcmUuaD4JLyogZm9yIENMUFM3MTExX1ZJUlRfQkFTRSAqLwogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbHBzNzExMS5oPgogCkBAIC01NCw1MSArNTQsNDUgQEAKICAqLwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcDczMTJfZmlvX3BiYXNlID0gRVA3MzEyX0ZJT19QQkFTRTsKLXN0YXRpYyB2b2lkIF9faW9tZW0gKiBlcDczMTJfcHhkciA9ICh2b2lkIF9faW9tZW0gKikgRVA3MzEyX1BYRFI7Ci1zdGF0aWMgdm9pZCBfX2lvbWVtICogZXA3MzEyX3B4ZGRyID0gKHZvaWQgX19pb21lbSAqKSBFUDczMTJfUFhERFI7CitzdGF0aWMgdm9pZCBfX2lvbWVtICplcDczMTJfcHhkciA9ICh2b2lkIF9faW9tZW0gKilFUDczMTJfUFhEUjsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmVwNzMxMl9weGRkciA9ICh2b2lkIF9faW9tZW0gKilFUDczMTJfUFhERFI7CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIC8qCiAgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQogICovCiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm9bXSA9IHsKLQl7IC5uYW1lID0gIkVQNzMxMiBOYW5kIEZsYXNoIiwKLQkJICAub2Zmc2V0ID0gMCwKLQkJICAuc2l6ZSA9IDgqMTAyNCoxMDI0IH0KKwl7Lm5hbWUgPSAiRVA3MzEyIE5hbmQgRmxhc2giLAorCSAub2Zmc2V0ID0gMCwKKwkgLnNpemUgPSA4ICogMTAyNCAqIDEwMjR9CiB9OworCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAogI2VuZGlmCiAKLQogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgorICoJTkFORF9OQ0U6IGJpdCAwIC0+IGJpdCA3CisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDQKKyAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgNQogICovCi1zdGF0aWMgdm9pZCBlcDczMTJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorc3RhdGljIHZvaWQgZXA3MzEyX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3dpdGNoKGNtZCkgeworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJY2xwc193cml0ZWIoY2xwc19yZWFkYihlcDczMTJfcHhkcikgfCAweDEwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQljbHBzX3dyaXRlYihjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSAmIH4weDEwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBjaGFyIGJpdHM7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJY2xwc193cml0ZWIoY2xwc19yZWFkYihlcDczMTJfcHhkcikgfCAweDIwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQljbHBzX3dyaXRlYihjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSAmIH4weDIwLCBlcDczMTJfcHhkcik7Ci0JCWJyZWFrOworCQliaXRzID0gKGN0cmwgJiAoTkFORF9DTEUgfCBOQU5EX0FMRSkpIDw8IDM7CisJCWJpdHMgPSAoY3RybCAmIE5BTkRfTkNFKSA8PCA3OwogCi0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JCWNscHNfd3JpdGViKChjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSB8IDB4ODApICYgfjB4NDAsIGVwNzMxMl9weGRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWNscHNfd3JpdGViKChjbHBzX3JlYWRiKGVwNzMxMl9weGRyKSB8IDB4ODApIHwgMHg0MCwgZXA3MzEyX3B4ZHIpOwotCQlicmVhazsKKwkJY2xwc193cml0ZWIoKGNscHNfcmVhZGIoZXA3MzEyX3B4ZHIpICAmIDB4QjApIHwgMHgxMCwKKwkJCSAgICBlcDczMTJfcHhkcik7CiAJfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAogLyoKQEAgLTEwOCw2ICsxMDIsNyBAQAogewogCXJldHVybiAxOwogfQorCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CiAjZW5kaWYKQEAgLTExNSwxOCArMTEwLDE2IEBACiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGVwNzMxMl9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgZXA3MzEyX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwogCWNvbnN0IGNoYXIgKnBhcnRfdHlwZSA9IDA7CiAJaW50IG10ZF9wYXJ0c19uYiA9IDA7CiAJc3RydWN0IG10ZF9wYXJ0aXRpb24gKm10ZF9wYXJ0cyA9IDA7Ci0Jdm9pZCBfX2lvbWVtICogZXA3MzEyX2Zpb19iYXNlOworCXZvaWQgX19pb21lbSAqZXA3MzEyX2Zpb19iYXNlOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JZXA3MzEyX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJICAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkgICAgIEdGUF9LRVJORUwpOworCWVwNzMxMl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWVwNzMxMl9tdGQpIHsKIAkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgRURCNzMxMiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTM0LDIxICsxMjcsMjIgQEAKIAogCS8qIG1hcCBwaHlzaWNhbCBhZHJlc3MgKi8KIAllcDczMTJfZmlvX2Jhc2UgPSBpb3JlbWFwKGVwNzMxMl9maW9fcGJhc2UsIFNaXzFLKTsKLQlpZighZXA3MzEyX2Zpb19iYXNlKSB7CisJaWYgKCFlcDczMTJfZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIEVEQjczMTIgTkFORCBmbGFzaCBmYWlsZWRcbiIpOwogCQlrZnJlZShlcDczMTJfbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmZXA3MzEyX210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZlcDczMTJfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBlcDczMTJfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGVwNzMxMl9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJZXA3MzEyX210ZC0+cHJpdiA9IHRoaXM7CisJZXA3MzEyX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogU2V0IEdQSU8gUG9ydCBCIGNvbnRyb2wgcmVnaXN0ZXIgc28gdGhhdCB0aGUgcGlucyBhcmUgY29uZmlndXJlZApAQCAtMTU5LDIyICsxNTMsMjAgQEAKIAkvKiBpbnNlcnQgY2FsbGJhY2tzICovCiAJdGhpcy0+SU9fQUREUl9SID0gZXA3MzEyX2Zpb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IGVwNzMxMl9maW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSBlcDczMTJfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gZXA3MzEyX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBlcDczMTJfZGV2aWNlX3JlYWR5OwogCS8qIDE1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSAxNTsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKGVwNzMxMl9tdGQsIDEpKSB7CisJaWYgKG5hbmRfc2NhbihlcDczMTJfbXRkLCAxKSkgewogCQlpb3VubWFwKCh2b2lkICopZXA3MzEyX2Zpb19iYXNlKTsKLQkJa2ZyZWUgKGVwNzMxMl9tdGQpOworCQlrZnJlZShlcDczMTJfbXRkKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0KICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAllcDczMTJfbXRkLT5uYW1lID0gImVkYjczMTItbmFuZCI7Ci0JbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoZXA3MzEyX210ZCwgcGFydF9wcm9iZXMsCi0JCQkJCSAgICAmbXRkX3BhcnRzLCAwKTsKKwltdGRfcGFydHNfbmIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhlcDczMTJfbXRkLCBwYXJ0X3Byb2JlcywgJm10ZF9wYXJ0cywgMCk7CiAJaWYgKG10ZF9wYXJ0c19uYiA+IDApCiAJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOwogCWVsc2UKQEAgLTE5MywyNCArMTg1LDIzIEBACiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiB9CisKIG1vZHVsZV9pbml0KGVwNzMxMl9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgX19leGl0IGVwNzMxMl9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGVwNzMxMl9jbGVhbnVwKHZvaWQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICZlcDczMTJfbXRkWzFdOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSZlcDczMTJfbXRkWzFdOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlIChhcDczMTJfbXRkKTsKLQotCS8qIEZyZWUgaW50ZXJuYWwgZGF0YSBidWZmZXIgKi8KLQlrZnJlZSAodGhpcy0+ZGF0YV9idWYpOworCW5hbmRfcmVsZWFzZShhcDczMTJfbXRkKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKGVwNzMxMl9tdGQpOworCWtmcmVlKGVwNzMxMl9tdGQpOwogfQorCiBtb2R1bGVfZXhpdChlcDczMTJfY2xlYW51cCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvaDE5MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvaDE5MTAuYwppbmRleCBmNjhmN2E5Li4yZDU4NWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2gxOTEwLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9oMTkxMC5jCkBAIC00LDcgKzQsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwMyBKb3NodWEgV2lzZSAoam9zaHVhQGpvc2h1YXdpc2UuY29tKQogICoKICAqICBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKLSAqICAgICAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJpdXMgR3L2Z2VyIChtYWdAc3lzZ28uZGUpCisgKiAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFyaXVzIEdyw7ZnZXIgKG1hZ0BzeXNnby5kZSkKICAqICAgICAgIENvcHlyaWdodCAoYykgMjAwMSBUaG9tYXMgR2xlaXhuZXIgKGdsZWl4bmVyQGF1dHJvbml4LmRlKQogICoKICAqICRJZDogaDE5MTAuYyx2IDEuNiAyMDA1LzExLzA3IDExOjE0OjMwIGdsZWl4bmVyIEV4cCAkCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2hhcmR3YXJlLmg+IC8qIGZvciBDTFBTNzExMV9WSVJUX0JBU0UgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgkvKiBmb3IgQ0xQUzcxMTFfVklSVF9CQVNFICovCiAjaW5jbHVkZSA8YXNtL3NpemVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvaDE5MDAtZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lwYXEuaD4KQEAgLTQ1LDQ3ICs0NSwyOSBAQAogICogRGVmaW5lIHN0YXRpYyBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2UKICAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvW10gPSB7Ci0JeyBuYW1lOiAiaDE5MTAgTkFORCBGbGFzaCIsCi0JCSAgb2Zmc2V0OiAwLAotCQkgIHNpemU6IDE2KjEwMjQqMTAyNCB9CisgICAgICB7bmFtZToiaDE5MTAgTkFORCBGbGFzaCIsCisJICAgICAgb2Zmc2V0OjAsCisgICAgICBzaXplOjE2ICogMTAyNCAqIDEwMjR9CiB9OworCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAogI2VuZGlmCiAKLQogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCisgKgorICoJTkFORF9OQ0U6IGJpdCAwIC0gZG9uJ3QgY2FyZQorICoJTkFORF9DTEU6IGJpdCAxIC0gYWRkcmVzcyBiaXQgMgorICoJTkFORF9BTEU6IGJpdCAyIC0gYWRkcmVzcyBiaXQgMwogICovCi1zdGF0aWMgdm9pZCBoMTkxMF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCitzdGF0aWMgdm9pZCBoMTkxMF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkgICAgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCogdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopIChtdGQtPnByaXYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlzd2l0Y2goY21kKSB7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJdGhpcy0+SU9fQUREUl9SIHw9ICgxIDw8IDIpOwotCQl0aGlzLT5JT19BRERSX1cgfD0gKDEgPDwgMik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQl0aGlzLT5JT19BRERSX1IgJj0gfigxIDw8IDIpOwotCQl0aGlzLT5JT19BRERSX1cgJj0gfigxIDw8IDIpOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQl0aGlzLT5JT19BRERSX1IgfD0gKDEgPDwgMyk7Ci0JCXRoaXMtPklPX0FERFJfVyB8PSAoMSA8PCAzKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJBTEU6Ci0JCXRoaXMtPklPX0FERFJfUiAmPSB+KDEgPDwgMyk7Ci0JCXRoaXMtPklPX0FERFJfVyAmPSB+KDEgPDwgMyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSTkNFOgotCQlicmVhazsKLQl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cgfCAoKGN0cmwgJiAweDYpIDw8IDEpKTsKIH0KIAogLyoKQEAgLTEwMSw3ICs4Myw3IEBACiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IGgxOTEwX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBoMTkxMF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSAwOwpAQCAtMTE5LDI0ICsxMDEsMjMgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQloMTkxMF9uYW5kX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJICAgICBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksCi0JCQkgICAgIEdGUF9LRVJORUwpOworCWgxOTEwX25hbmRfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFoMTkxMF9uYW5kX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBoMTkxMCBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7Ci0JCWlvdW5tYXAgKCh2b2lkICopIG5hbmRhZGRyKTsKKwkJaW91bm1hcCgodm9pZCAqKW5hbmRhZGRyKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmaDE5MTBfbmFuZF9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmaDE5MTBfbmFuZF9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIGgxOTEwX25hbmRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KGgxOTEwX25hbmRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCWgxOTEwX25hbmRfbXRkLT5wcml2ID0gdGhpczsKKwloMTkxMF9uYW5kX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogRW5hYmxlIFZQRU4KQEAgLTE0NiwzMSArMTI3LDI4IEBACiAJLyogaW5zZXJ0IGNhbGxiYWNrcyAqLwogCXRoaXMtPklPX0FERFJfUiA9IG5hbmRhZGRyOwogCXRoaXMtPklPX0FERFJfVyA9IG5hbmRhZGRyOwotCXRoaXMtPmh3Y29udHJvbCA9IGgxOTEwX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IGgxOTEwX2h3Y29udHJvbDsKIAl0aGlzLT5kZXZfcmVhZHkgPSBOVUxMOwkvKiB1bmtub3duIHdoZXRoZXIgdGhhdCB3YXMgY29ycmVjdCBvciBub3Qgc28gd2Ugd2lsbCBqdXN0IGRvIGl0IGxpa2UgdGhpcyAqLwogCS8qIDE1IHVzIGNvbW1hbmQgZGVsYXkgdGltZSAqLwogCXRoaXMtPmNoaXBfZGVsYXkgPSA1MDsKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAJdGhpcy0+b3B0aW9ucyA9IE5BTkRfTk9fQVVUT0lOQ1I7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuIChoMTkxMF9uYW5kX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKGgxOTEwX25hbmRfbXRkLCAxKSkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vIE5BTkQgZGV2aWNlIC0gcmV0dXJuaW5nIC1FTlhJT1xuIik7Ci0JCWtmcmVlIChoMTkxMF9uYW5kX210ZCk7Ci0JCWlvdW5tYXAgKCh2b2lkICopIG5hbmRhZGRyKTsKKwkJa2ZyZWUoaDE5MTBfbmFuZF9tdGQpOworCQlpb3VubWFwKCh2b2lkICopbmFuZGFkZHIpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KLQogI2lmZGVmIENPTkZJR19NVERfQ01ETElORV9QQVJUUwotCW10ZF9wYXJ0c19uYiA9IHBhcnNlX2NtZGxpbmVfcGFydGl0aW9ucyhoMTkxMF9uYW5kX210ZCwgJm10ZF9wYXJ0cywKLQkJCQkJCSJoMTkxMC1uYW5kIik7CisJbXRkX3BhcnRzX25iID0gcGFyc2VfY21kbGluZV9wYXJ0aXRpb25zKGgxOTEwX25hbmRfbXRkLCAmbXRkX3BhcnRzLCAiaDE5MTAtbmFuZCIpOwogCWlmIChtdGRfcGFydHNfbmIgPiAwKQotCSAgcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CisJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOwogCWVsc2UKLQkgIG10ZF9wYXJ0c19uYiA9IDA7CisJCW10ZF9wYXJ0c19uYiA9IDA7CiAjZW5kaWYKLQlpZiAobXRkX3BhcnRzX25iID09IDApCi0JeworCWlmIChtdGRfcGFydHNfbmIgPT0gMCkgewogCQltdGRfcGFydHMgPSBwYXJ0aXRpb25faW5mbzsKIAkJbXRkX3BhcnRzX25iID0gTlVNX1BBUlRJVElPTlM7CiAJCXBhcnRfdHlwZSA9ICJzdGF0aWMiOwpAQCAtMTgzLDI0ICsxNjEsMjYgQEAKIAkvKiBSZXR1cm4gaGFwcHkgKi8KIAlyZXR1cm4gMDsKIH0KKwogbW9kdWxlX2luaXQoaDE5MTBfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLXN0YXRpYyB2b2lkIF9fZXhpdCBoMTkxMF9jbGVhbnVwICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGgxOTEwX2NsZWFudXAodm9pZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikgJmgxOTEwX25hbmRfbXRkWzFdOworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSZoMTkxMF9uYW5kX210ZFsxXTsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwotCW5hbmRfcmVsZWFzZSAoaDE5MTBfbmFuZF9tdGQpOworCW5hbmRfcmVsZWFzZShoMTkxMF9uYW5kX210ZCk7CiAKIAkvKiBSZWxlYXNlIGlvIHJlc291cmNlICovCi0JaW91bm1hcCAoKHZvaWQgKikgdGhpcy0+SU9fQUREUl9XKTsKKwlpb3VubWFwKCh2b2lkICopdGhpcy0+SU9fQUREUl9XKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKGgxOTEwX25hbmRfbXRkKTsKKwlrZnJlZShoMTkxMF9uYW5kX210ZCk7CiB9CisKIG1vZHVsZV9leGl0KGgxOTEwX2NsZWFudXApOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYwppbmRleCA5NWU5NmZhLi4yNzA4M2VkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKQEAgLTEwLDY3ICsxMCwzMSBAQAogICoJaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy90ZWNoL25hbmQuaHRtbAogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgU3RldmVuIEouIEhpbGwgKHNqaGlsbEByZWFsaXR5ZGlsdXRlZC5jb20pCi0gKiAJCSAgMjAwMiBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKKyAqCQkgIDIwMDItMjAwNiBUaG9tYXMgR2xlaXhuZXIgKHRnbHhAbGludXRyb25peC5kZSkKICAqCi0gKiAgMDItMDgtMjAwNCAgdGdseDogc3VwcG9ydCBmb3Igc3RyYW5nZSBjaGlwcywgd2hpY2ggY2Fubm90IGF1dG8gaW5jcmVtZW50Ci0gKgkJcGFnZXMgb24gcmVhZCAvIHJlYWRfb29iCi0gKgotICogIDAzLTE3LTIwMDQgIHRnbHg6IENoZWNrIHJlYWR5IGJlZm9yZSBhdXRvIGluY3JlbWVudCBjaGVjay4gU2ltb24gQmF5ZXMKLSAqCQlwb2ludGVkIHRoaXMgb3V0LCBhcyBoZSBtYXJrZWQgYW4gYXV0byBpbmNyZW1lbnQgY2FwYWJsZSBjaGlwCi0gKgkJYXMgTk9BVVRPSU5DUiBpbiB0aGUgYm9hcmQgZHJpdmVyLgotICoJCU1ha2UgcmVhZHMgb3ZlciBibG9jayBib3VuZGFyaWVzIHdvcmsgdG9vCi0gKgotICogIDA0LTE0LTIwMDQJdGdseDogZmlyc3Qgd29ya2luZyB2ZXJzaW9uIGZvciAyayBwYWdlIHNpemUgY2hpcHMKLSAqCi0gKiAgMDUtMTktMjAwNCAgdGdseDogQmFzaWMgc3VwcG9ydCBmb3IgUmVuZXNhcyBBRy1BTkQgY2hpcHMKLSAqCi0gKiAgMDktMjQtMjAwNCAgdGdseDogYWRkIHN1cHBvcnQgZm9yIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChlLmcuIEVDQykgc2hhcmVkCi0gKgkJYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcy4gU3VnZ2VzdGlvbnMgYW5kIGluaXRpYWwgcGF0Y2gKLSAqCQlmcm9tIEJlbiBEb29rcyA8YmVuLW10ZEBmbHVmZi5vcmc+Ci0gKgotICogIDEyLTA1LTIwMDQJZG1hcmxpbjogYWRkIHdvcmthcm91bmQgZm9yIFJlbmVzYXMgQUctQU5EIGNoaXBzICJkaXN0dXJiIiBpc3N1ZS4KLSAqCQlCYXNpY2FsbHksIGFueSBibG9jayBub3QgcmV3cml0dGVuIG1heSBsb3NlIGRhdGEgd2hlbiBzdXJyb3VuZGluZyBibG9ja3MKLSAqCQlhcmUgcmV3cml0dGVuIG1hbnkgdGltZXMuICBKRkZTMiBlbnN1cmVzIHRoaXMgZG9lc24ndCBoYXBwZW4gZm9yIGJsb2NrcwotICoJCWl0IHVzZXMsIGJ1dCB0aGUgQmFkIEJsb2NrIFRhYmxlKHMpIG1heSBub3QgYmUgcmV3cml0dGVuLiAgVG8gZW5zdXJlIHRoZXkKLSAqCQlkbyBub3QgbG9zZSBkYXRhLCBmb3JjZSB0aGVtIHRvIGJlIHJld3JpdHRlbiB3aGVuIHNvbWUgb2YgdGhlIHN1cnJvdW5kaW5nCi0gKgkJYmxvY2tzIGFyZSBlcmFzZWQuICBSYXRoZXIgdGhhbiB0cmFja2luZyBhIHNwZWNpZmljIG5lYXJieSBibG9jayAod2hpY2gKLSAqCQljb3VsZCBpdHNlbGYgZ28gYmFkKSwgdXNlIGEgcGFnZSBhZGRyZXNzICdtYXNrJyB0byBzZWxlY3Qgc2V2ZXJhbCBibG9ja3MKLSAqCQlpbiB0aGUgc2FtZSBhcmVhLCBhbmQgcmV3cml0ZSB0aGUgQkJUIHdoZW4gYW55IG9mIHRoZW0gYXJlIGVyYXNlZC4KLSAqCi0gKiAgMDEtMDMtMjAwNQlkbWFybGluOiBhZGRlZCBzdXBwb3J0IGZvciB0aGUgZGV2aWNlIHJlY292ZXJ5IGNvbW1hbmQgc2VxdWVuY2UgZm9yIFJlbmVzYXMKLSAqCQlBRy1BTkQgY2hpcHMuICBJZiB0aGVyZSB3YXMgYSBzdWRkZW4gbG9zcyBvZiBwb3dlciBkdXJpbmcgYW4gZXJhc2Ugb3BlcmF0aW9uLAotICogCQlhICJkZXZpY2UgcmVjb3ZlcnkiIG9wZXJhdGlvbiBtdXN0IGJlIHBlcmZvcm1lZCB3aGVuIHBvd2VyIGlzIHJlc3RvcmVkCi0gKiAJCXRvIGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbi4KLSAqCi0gKiAgMDEtMjAtMjAwNQlkbWFybGluOiBhZGRlZCBzdXBwb3J0IGZvciBvcHRpb25hbCBoYXJkd2FyZSBzcGVjaWZpYyBjYWxsYmFjayByb3V0aW5lIHRvCi0gKgkJcGVyZm9ybSBleHRyYSBlcnJvciBzdGF0dXMgY2hlY2tzIG9uIGVyYXNlIGFuZCB3cml0ZSBmYWlsdXJlcy4gIFRoaXMgcmVxdWlyZWQKLSAqCQlhZGRpbmcgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBuYW5kX3JlYWRfZWNjLgotICoKLSAqIDA4LTIwLTIwMDUJdndvb2w6IHN1c3BlbmQvcmVzdW1lIGFkZGVkCi0gKgotICogQ3JlZGl0czoKKyAqICBDcmVkaXRzOgogICoJRGF2aWQgV29vZGhvdXNlIGZvciBhZGRpbmcgbXVsdGljaGlwIHN1cHBvcnQKICAqCiAgKglBbGVwaCBPbmUgTHRkLiBhbmQgVG9ieSBDaHVyY2hpbGwgTHRkLiBmb3Igc3VwcG9ydGluZyB0aGUKICAqCXJld29yayBmb3IgMksgcGFnZSBzaXplIGNoaXBzCiAgKgotICogVE9ETzoKKyAqICBUT0RPOgogICoJRW5hYmxlIGNhY2hlZCBwcm9ncmFtbWluZyBmb3IgMmsgcGFnZSBzaXplIGNoaXBzCiAgKglDaGVjaywgaWYgbXRkLT5lY2N0eXBlIHNob3VsZCBiZSBzZXQgdG8gTVREX0VDQ19IVwogICoJaWYgd2UgaGF2ZSBIVyBlY2Mgc3VwcG9ydC4KICAqCVRoZSBBRy1BTkQgY2hpcHMgaGF2ZSBuaWNlIGZlYXR1cmVzIGZvciBzcGVlZCBpbXByb3ZlbWVudCwKICAqCXdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gUmVhZCAvIHByb2dyYW0gNCBwYWdlcyBpbiBvbmUgZ28uCiAgKgotICogJElkOiBuYW5kX2Jhc2UuYyx2IDEuMTUwIDIwMDUvMDkvMTUgMTM6NTg6NDggdndvb2wgRXhwICQKLSAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC04OCw3NSArNTIsNDYgQEAKICNlbmRpZgogCiAvKiBEZWZpbmUgZGVmYXVsdCBvb2IgcGxhY2VtZW50IHNjaGVtZXMgZm9yIGxhcmdlIGFuZCBzbWFsbCBwYWdlIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iXzggPSB7Ci0JLnVzZWVjYyA9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9vb2JfOCA9IHsKIAkuZWNjYnl0ZXMgPSAzLAogCS5lY2Nwb3MgPSB7MCwgMSwgMn0sCi0JLm9vYmZyZWUgPSB7IHszLCAyfSwgezYsIDJ9IH0KKwkub29iZnJlZSA9IHsKKwkJey5vZmZzZXQgPSAzLAorCQkgLmxlbmd0aCA9IDJ9LAorCQl7Lm9mZnNldCA9IDYsCisJCSAubGVuZ3RoID0gMn19CiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYl8xNiA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX29vYl8xNiA9IHsKIAkuZWNjYnl0ZXMgPSA2LAogCS5lY2Nwb3MgPSB7MCwgMSwgMiwgMywgNiwgN30sCi0JLm9vYmZyZWUgPSB7IHs4LCA4fSB9CisJLm9vYmZyZWUgPSB7CisJCXsub2Zmc2V0ID0gOCwKKwkJIC4gbGVuZ3RoID0gOH19CiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBuYW5kX29vYl82NCA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX29vYl82NCA9IHsKIAkuZWNjYnl0ZXMgPSAyNCwKIAkuZWNjcG9zID0gewotCQk0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsCi0JCTQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwKLQkJNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzfSwKLQkub29iZnJlZSA9IHsgezIsIDM4fSB9CisJCSAgIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKKwkJICAgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1LAorCQkgICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjN9LAorCS5vb2JmcmVlID0geworCQl7Lm9mZnNldCA9IDIsCisJCSAubGVuZ3RoID0gMzh9fQogfTsKIAotLyogVGhpcyBpcyB1c2VkIGZvciBwYWRkaW5nIHB1cnBvc2VzIGluIG5hbmRfd3JpdGVfb29iICovCi1zdGF0aWMgdV9jaGFyIGZmY2hhcnNbXSA9IHsKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0JMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLQkweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi19Oworc3RhdGljIGludCBuYW5kX2dldF9kZXZpY2Uoc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwgc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkgICBpbnQgbmV3X3N0YXRlKTsKKworc3RhdGljIGludCBuYW5kX2RvX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcyk7CiAKIC8qCi0gKiBOQU5EIGxvdy1sZXZlbCBNVEQgaW50ZXJmYWNlIGZ1bmN0aW9ucworICogRm9yIGRldmljZXMgd2hpY2ggZGlzcGxheSBldmVyeSBmYXJ0IGluIHRoZSBzeXN0ZW0gb24gYSBzZXBlcmF0ZSBMRUQuIElzCisgKiBjb21waWxlZCBhd2F5IHdoZW4gTEVEIHN1cHBvcnQgaXMgZGlzYWJsZWQuCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci1zdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOwotCi1zdGF0aWMgaW50IG5hbmRfcmVhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfcmVhZF9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKLQkJCSAgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYsIHVfY2hhciAqIGVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLXN0YXRpYyBpbnQgbmFuZF9yZWFkX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKTsKLXN0YXRpYyBpbnQgbmFuZF93cml0ZV9lY2MgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0JCQkgICBzaXplX3QgKiByZXRsZW4sIGNvbnN0IHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBuYW5kX3dyaXRlX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGV2IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JCQl1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbik7Ci1zdGF0aWMgaW50IG5hbmRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLAotCQkJdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwotc3RhdGljIGludCBuYW5kX2VyYXNlIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKLXN0YXRpYyB2b2lkIG5hbmRfc3luYyAoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCi0vKiBTb21lIGludGVybmFsIGZ1bmN0aW9ucyAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgcGFnZSwgdV9jaGFyICpvb2JfYnVmLAotCQlzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBtb2RlKTsKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X3BhZ2VzIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHBhZ2UsIGludCBudW1wYWdlcywKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNoaXBuciwgaW50IG9vYm1vZGUpOwotI2Vsc2UKLSNkZWZpbmUgbmFuZF92ZXJpZnlfcGFnZXMoLi4uKSAoMCkKLSNlbmRpZgotCi1zdGF0aWMgaW50IG5hbmRfZ2V0X2RldmljZSAoc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBuZXdfc3RhdGUpOworREVGSU5FX0xFRF9UUklHR0VSKG5hbmRfbGVkX3RyaWdnZXIpOwogCiAvKioKICAqIG5hbmRfcmVsZWFzZV9kZXZpY2UgLSBbR0VORVJJQ10gcmVsZWFzZSBjaGlwCkBAIC0xNjQsMjcgKzk5LDE5IEBACiAgKgogICogRGVzZWxlY3QsIHJlbGVhc2UgY2hpcCBsb2NrIGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UKICAqLwotc3RhdGljIHZvaWQgbmFuZF9yZWxlYXNlX2RldmljZSAoc3RydWN0IG10ZF9pbmZvICptdGQpCitzdGF0aWMgdm9pZCBuYW5kX3JlbGVhc2VfZGV2aWNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAogCS8qIERlLXNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKIAotCWlmICh0aGlzLT5jb250cm9sbGVyKSB7Ci0JCS8qIFJlbGVhc2UgdGhlIGNvbnRyb2xsZXIgYW5kIHRoZSBjaGlwICovCi0JCXNwaW5fbG9jaygmdGhpcy0+Y29udHJvbGxlci0+bG9jayk7Ci0JCXRoaXMtPmNvbnRyb2xsZXItPmFjdGl2ZSA9IE5VTEw7Ci0JCXRoaXMtPnN0YXRlID0gRkxfUkVBRFk7Ci0JCXdha2VfdXAoJnRoaXMtPmNvbnRyb2xsZXItPndxKTsKLQkJc3Bpbl91bmxvY2soJnRoaXMtPmNvbnRyb2xsZXItPmxvY2spOwotCX0gZWxzZSB7Ci0JCS8qIFJlbGVhc2UgdGhlIGNoaXAgKi8KLQkJc3Bpbl9sb2NrKCZ0aGlzLT5jaGlwX2xvY2spOwotCQl0aGlzLT5zdGF0ZSA9IEZMX1JFQURZOwotCQl3YWtlX3VwKCZ0aGlzLT53cSk7Ci0JCXNwaW5fdW5sb2NrKCZ0aGlzLT5jaGlwX2xvY2spOwotCX0KKwkvKiBSZWxlYXNlIHRoZSBjb250cm9sbGVyIGFuZCB0aGUgY2hpcCAqLworCXNwaW5fbG9jaygmY2hpcC0+Y29udHJvbGxlci0+bG9jayk7CisJY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlID0gTlVMTDsKKwljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOworCXdha2VfdXAoJmNoaXAtPmNvbnRyb2xsZXItPndxKTsKKwlzcGluX3VubG9jaygmY2hpcC0+Y29udHJvbGxlci0+bG9jayk7CiB9CiAKIC8qKgpAQCAtMTkzLDIzICsxMjAsMTAgQEAKICAqCiAgKiBEZWZhdWx0IHJlYWQgZnVuY3Rpb24gZm9yIDhiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgdV9jaGFyIG5hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIHVpbnQ4X3QgbmFuZF9yZWFkX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlyZXR1cm4gcmVhZGIodGhpcy0+SU9fQUREUl9SKTsKLX0KLQotLyoqCi0gKiBuYW5kX3dyaXRlX2J5dGUgLSBbREVGQVVMVF0gd3JpdGUgb25lIGJ5dGUgdG8gdGhlIGNoaXAKLSAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAYnl0ZToJcG9pbnRlciB0byBkYXRhIGJ5dGUgdG8gd3JpdGUKLSAqCi0gKiBEZWZhdWx0IHdyaXRlIGZ1bmN0aW9uIGZvciA4aXQgYnVzd2l0aAotICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J5dGUoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciBieXRlKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0Jd3JpdGViKGJ5dGUsIHRoaXMtPklPX0FERFJfVyk7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlyZXR1cm4gcmVhZGIoY2hpcC0+SU9fQUREUl9SKTsKIH0KIAogLyoqCkBAIC0yMTksMjQgKzEzMywxMCBAQAogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoIHdpdGgKICAqIGVuZGlhbmVzcyBjb252ZXJzaW9uCiAgKi8KLXN0YXRpYyB1X2NoYXIgbmFuZF9yZWFkX2J5dGUxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3N0YXRpYyB1aW50OF90IG5hbmRfcmVhZF9ieXRlMTYoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlyZXR1cm4gKHVfY2hhcikgY3B1X3RvX2xlMTYocmVhZHcodGhpcy0+SU9fQUREUl9SKSk7Ci19Ci0KLS8qKgotICogbmFuZF93cml0ZV9ieXRlMTYgLSBbREVGQVVMVF0gd3JpdGUgb25lIGJ5dGUgZW5kaWFuZXNzIGF3YXJlIHRvIHRoZSBjaGlwCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGJ5dGU6CXBvaW50ZXIgdG8gZGF0YSBieXRlIHRvIHdyaXRlCi0gKgotICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aCB3aXRoCi0gKiBlbmRpYW5lc3MgY29udmVyc2lvbgotICovCi1zdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J5dGUxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZXcobGUxNl90b19jcHUoKHUxNikgYnl0ZSksIHRoaXMtPklPX0FERFJfVyk7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlyZXR1cm4gKHVpbnQ4X3QpIGNwdV90b19sZTE2KHJlYWR3KGNoaXAtPklPX0FERFJfUikpOwogfQogCiAvKioKQEAgLTI0OCwyMiArMTQ4LDggQEAKICAqLwogc3RhdGljIHUxNiBuYW5kX3JlYWRfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXJldHVybiByZWFkdyh0aGlzLT5JT19BRERSX1IpOwotfQotCi0vKioKLSAqIG5hbmRfd3JpdGVfd29yZCAtIFtERUZBVUxUXSB3cml0ZSBvbmUgd29yZCB0byB0aGUgY2hpcAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB3b3JkOglkYXRhIHdvcmQgdG8gd3JpdGUKLSAqCi0gKiBEZWZhdWx0IHdyaXRlIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoIHdpdGhvdXQKLSAqIGVuZGlhbmVzcyBjb252ZXJzaW9uCi0gKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdTE2IHdvcmQpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl3cml0ZXcod29yZCwgdGhpcy0+SU9fQUREUl9XKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXJldHVybiByZWFkdyhjaGlwLT5JT19BRERSX1IpOwogfQogCiAvKioKQEAgLTI3MywxNSArMTU5LDE1IEBACiAgKgogICogRGVmYXVsdCBzZWxlY3QgZnVuY3Rpb24gZm9yIDEgY2hpcCBkZXZpY2VzLgogICovCi1zdGF0aWMgdm9pZCBuYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3N0YXRpYyB2b2lkIG5hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwbnIpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlzd2l0Y2goY2hpcCkgeworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CisKKwlzd2l0Y2ggKGNoaXBucikgewogCWNhc2UgLTE6Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUk5DRSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfTk9ORSwgMCB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCQlicmVhazsKIAljYXNlIDA6Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVE5DRSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTI5NywxMyArMTgzLDEzIEBACiAgKgogICogRGVmYXVsdCB3cml0ZSBmdW5jdGlvbiBmb3IgOGJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyB2b2lkIG5hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXdyaXRlYihidWZbaV0sIHRoaXMtPklPX0FERFJfVyk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQl3cml0ZWIoYnVmW2ldLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKioKQEAgLTMxNCwxMyArMjAwLDEzIEBACiAgKgogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciA4Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF9yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWJ1ZltpXSA9IHJlYWRiKHRoaXMtPklPX0FERFJfUik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlidWZbaV0gPSByZWFkYihjaGlwLT5JT19BRERSX1IpOwogfQogCiAvKioKQEAgLTMzMSwxNSArMjE3LDE0IEBACiAgKgogICogRGVmYXVsdCB2ZXJpZnkgZnVuY3Rpb24gZm9yIDhiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQlpZiAoYnVmW2ldICE9IHJlYWRiKHRoaXMtPklPX0FERFJfUikpCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAoYnVmW2ldICE9IHJlYWRiKGNoaXAtPklPX0FERFJfUikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQogCXJldHVybiAwOwogfQogCkBAIC0zNTEsMTUgKzIzNiwxNSBAQAogICoKICAqIERlZmF1bHQgd3JpdGUgZnVuY3Rpb24gZm9yIDE2Yml0IGJ1c3dpdGgKICAqLwotc3RhdGljIHZvaWQgbmFuZF93cml0ZV9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCiB7CiAJaW50IGk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCXUxNiAqcCA9ICh1MTYgKikgYnVmOwogCWxlbiA+Pj0gMTsKIAotCWZvciAoaT0wOyBpPGxlbjsgaSsrKQotCQl3cml0ZXcocFtpXSwgdGhpcy0+SU9fQUREUl9XKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXdyaXRldyhwW2ldLCBjaGlwLT5JT19BRERSX1cpOwogCiB9CiAKQEAgLTM3MSwxNSArMjU2LDE1IEBACiAgKgogICogRGVmYXVsdCByZWFkIGZ1bmN0aW9uIGZvciAxNmJpdCBidXN3aXRoCiAgKi8KLXN0YXRpYyB2b2lkIG5hbmRfcmVhZF9idWYxNihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpidWYsIGludCBsZW4pCitzdGF0aWMgdm9pZCBuYW5kX3JlYWRfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCXBbaV0gPSByZWFkdyh0aGlzLT5JT19BRERSX1IpOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJcFtpXSA9IHJlYWR3KGNoaXAtPklPX0FERFJfUik7CiB9CiAKIC8qKgpAQCAtMzkwLDE1ICsyNzUsMTUgQEAKICAqCiAgKiBEZWZhdWx0IHZlcmlmeSBmdW5jdGlvbiBmb3IgMTZiaXQgYnVzd2l0aAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X2J1ZjE2KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKK3N0YXRpYyBpbnQgbmFuZF92ZXJpZnlfYnVmMTYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJdTE2ICpwID0gKHUxNiAqKSBidWY7CiAJbGVuID4+PSAxOwogCi0JZm9yIChpPTA7IGk8bGVuOyBpKyspCi0JCWlmIChwW2ldICE9IHJlYWR3KHRoaXMtPklPX0FERFJfUikpCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlpZiAocFtpXSAhPSByZWFkdyhjaGlwLT5JT19BRERSX1IpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gMDsKQEAgLTQxNSwzOCArMzAwLDM3IEBACiBzdGF0aWMgaW50IG5hbmRfYmxvY2tfYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCkKIHsKIAlpbnQgcGFnZSwgY2hpcG5yLCByZXMgPSAwOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAl1MTYgYmFkOwogCiAJaWYgKGdldGNoaXApIHsKLQkJcGFnZSA9IChpbnQpKG9mcyA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkJY2hpcG5yID0gKGludCkob2ZzID4+IHRoaXMtPmNoaXBfc2hpZnQpOworCQlwYWdlID0gKGludCkob2ZzID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCQljaGlwbnIgPSAoaW50KShvZnMgPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CiAKLQkJLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9SRUFESU5HKTsKKwkJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfUkVBRElORyk7CiAKIAkJLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKIAl9IGVsc2UKLQkJcGFnZSA9IChpbnQpIG9mczsKKwkJcGFnZSA9IChpbnQpb2ZzOwogCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MgJiAweEZFLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQliYWQgPSBjcHVfdG9fbGUxNih0aGlzLT5yZWFkX3dvcmQobXRkKSk7Ci0JCWlmICh0aGlzLT5iYWRibG9ja3BvcyAmIDB4MSkKKwlpZiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYpIHsKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNoaXAtPmJhZGJsb2NrcG9zICYgMHhGRSwKKwkJCSAgICAgIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CisJCWJhZCA9IGNwdV90b19sZTE2KGNoaXAtPnJlYWRfd29yZChtdGQpKTsKKwkJaWYgKGNoaXAtPmJhZGJsb2NrcG9zICYgMHgxKQogCQkJYmFkID4+PSA4OwogCQlpZiAoKGJhZCAmIDB4RkYpICE9IDB4ZmYpCiAJCQlyZXMgPSAxOwogCX0gZWxzZSB7Ci0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgdGhpcy0+YmFkYmxvY2twb3MsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCWlmICh0aGlzLT5yZWFkX2J5dGUobXRkKSAhPSAweGZmKQorCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgY2hpcC0+YmFkYmxvY2twb3MsCisJCQkgICAgICBwYWdlICYgY2hpcC0+cGFnZW1hc2spOworCQlpZiAoY2hpcC0+cmVhZF9ieXRlKG10ZCkgIT0gMHhmZikKIAkJCXJlcyA9IDE7CiAJfQogCi0JaWYgKGdldGNoaXApIHsKLQkJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCWlmIChnZXRjaGlwKQogCQluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7Ci0JfQogCiAJcmV0dXJuIHJlczsKIH0KQEAgLTQ2MSwyMyArMzQ1LDMzIEBACiAqLwogc3RhdGljIGludCBuYW5kX2RlZmF1bHRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVfY2hhciBidWZbMl0gPSB7MCwgMH07Ci0Jc2l6ZV90CXJldGxlbjsKLQlpbnQgYmxvY2s7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwl1aW50OF90IGJ1ZlsyXSA9IHsgMCwgMCB9OworCWludCBibG9jaywgcmV0OwogCiAJLyogR2V0IGJsb2NrIG51bWJlciAqLwotCWJsb2NrID0gKChpbnQpIG9mcykgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OwotCWlmICh0aGlzLT5iYnQpCi0JCXRoaXMtPmJidFtibG9jayA+PiAyXSB8PSAweDAxIDw8ICgoYmxvY2sgJiAweDAzKSA8PCAxKTsKKwlibG9jayA9ICgoaW50KW9mcykgPj4gY2hpcC0+YmJ0X2VyYXNlX3NoaWZ0OworCWlmIChjaGlwLT5iYnQpCisJCWNoaXAtPmJidFtibG9jayA+PiAyXSB8PSAweDAxIDw8ICgoYmxvY2sgJiAweDAzKSA8PCAxKTsKIAogCS8qIERvIHdlIGhhdmUgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUgPyAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9VU0VfRkxBU0hfQkJUKQotCQlyZXR1cm4gbmFuZF91cGRhdGVfYmJ0IChtdGQsIG9mcyk7CisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlQpCisJCXJldCA9IG5hbmRfdXBkYXRlX2JidChtdGQsIG9mcyk7CisJZWxzZSB7CisJCS8qIFdlIHdyaXRlIHR3byBieXRlcywgc28gd2UgZG9udCBoYXZlIHRvIG1lc3Mgd2l0aCAxNiBiaXQKKwkJICogYWNjZXNzCisJCSAqLworCQlvZnMgKz0gbXRkLT5vb2JzaXplOworCQljaGlwLT5vcHMubGVuID0gMjsKKwkJY2hpcC0+b3BzLmRhdGJ1ZiA9IE5VTEw7CisJCWNoaXAtPm9wcy5vb2JidWYgPSBidWY7CisJCWNoaXAtPm9wcy5vb2JvZmZzID0gY2hpcC0+YmFkYmxvY2twb3MgJiB+MHgwMTsKIAotCS8qIFdlIHdyaXRlIHR3byBieXRlcywgc28gd2UgZG9udCBoYXZlIHRvIG1lc3Mgd2l0aCAxNiBiaXQgYWNjZXNzICovCi0Jb2ZzICs9IG10ZC0+b29ic2l6ZSArICh0aGlzLT5iYWRibG9ja3BvcyAmIH4weDAxKTsKLQlyZXR1cm4gbmFuZF93cml0ZV9vb2IgKG10ZCwgb2ZzICwgMiwgJnJldGxlbiwgYnVmKTsKKwkJcmV0ID0gbmFuZF9kb193cml0ZV9vb2IobXRkLCBvZnMsICZjaGlwLT5vcHMpOworCX0KKwlpZiAoIXJldCkKKwkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC00ODcsMTIgKzM4MSwxMiBAQAogICoKICAqIFRoZSBmdW5jdGlvbiBleHBlY3RzLCB0aGF0IHRoZSBkZXZpY2UgaXMgYWxyZWFkeSBzZWxlY3RlZAogICovCi1zdGF0aWMgaW50IG5hbmRfY2hlY2tfd3AgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIGludCBuYW5kX2NoZWNrX3dwKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAkvKiBDaGVjayB0aGUgV1AgYml0ICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7Ci0JcmV0dXJuICh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1dQKSA/IDAgOiAxOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVMsIC0xLCAtMSk7CisJcmV0dXJuIChjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1dQKSA/IDAgOiAxOwogfQogCiAvKioKQEAgLTUwNSwzMiArMzk5LDMxIEBACiAgKiBDaGVjaywgaWYgdGhlIGJsb2NrIGlzIGJhZC4gRWl0aGVyIGJ5IHJlYWRpbmcgdGhlIGJhZCBibG9jayB0YWJsZSBvcgogICogY2FsbGluZyBvZiB0aGUgc2NhbiBmdW5jdGlvbi4KICAqLwotc3RhdGljIGludCBuYW5kX2Jsb2NrX2NoZWNrYmFkIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXAsIGludCBhbGxvd2JidCkKK3N0YXRpYyBpbnQgbmFuZF9ibG9ja19jaGVja2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgaW50IGdldGNoaXAsCisJCQkgICAgICAgaW50IGFsbG93YmJ0KQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWlmICghdGhpcy0+YmJ0KQotCQlyZXR1cm4gdGhpcy0+YmxvY2tfYmFkKG10ZCwgb2ZzLCBnZXRjaGlwKTsKKwlpZiAoIWNoaXAtPmJidCkKKwkJcmV0dXJuIGNoaXAtPmJsb2NrX2JhZChtdGQsIG9mcywgZ2V0Y2hpcCk7CiAKIAkvKiBSZXR1cm4gaW5mbyBmcm9tIHRoZSB0YWJsZSAqLwotCXJldHVybiBuYW5kX2lzYmFkX2JidCAobXRkLCBvZnMsIGFsbG93YmJ0KTsKKwlyZXR1cm4gbmFuZF9pc2JhZF9iYnQobXRkLCBvZnMsIGFsbG93YmJ0KTsKIH0KIAotREVGSU5FX0xFRF9UUklHR0VSKG5hbmRfbGVkX3RyaWdnZXIpOwotCiAvKgogICogV2FpdCBmb3IgdGhlIHJlYWR5IHBpbiwgYWZ0ZXIgYSBjb21tYW5kCiAgKiBUaGUgdGltZW91dCBpcyBjYXRjaGVkIGxhdGVyLgogICovCiBzdGF0aWMgdm9pZCBuYW5kX3dhaXRfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl1bnNpZ25lZCBsb25nCXRpbWVvID0gamlmZmllcyArIDI7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllcyArIDI7CiAKIAlsZWRfdHJpZ2dlcl9ldmVudChuYW5kX2xlZF90cmlnZ2VyLCBMRURfRlVMTCk7CiAJLyogd2FpdCB1bnRpbCBjb21tYW5kIGlzIHByb2Nlc3NlZCBvciB0aW1lb3V0IG9jY3VyZXMgKi8KIAlkbyB7Ci0JCWlmICh0aGlzLT5kZXZfcmVhZHkobXRkKSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeShtdGQpKQogCQkJYnJlYWs7CiAJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lbykpOwpAQCAtNTQ3LDIxICs0NDAsMjEgQEAKICAqIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZS4gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBzbWFsbCBwYWdlCiAgKiBkZXZpY2VzICgyNTYvNTEyIEJ5dGVzIHBlciBwYWdlKQogICovCi1zdGF0aWMgdm9pZCBuYW5kX2NvbW1hbmQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBjb21tYW5kLCBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQorc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1bnNpZ25lZCBpbnQgY29tbWFuZCwKKwkJCSBpbnQgY29sdW1uLCBpbnQgcGFnZV9hZGRyKQogewotCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJcmVnaXN0ZXIgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgY3RybCA9IE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFOwogCi0JLyogQmVnaW4gY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7CiAJLyoKIAkgKiBXcml0ZSBvdXQgdGhlIGNvbW1hbmQgdG8gdGhlIGRldmljZS4KIAkgKi8KIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9TRVFJTikgewogCQlpbnQgcmVhZGNtZDsKIAotCQlpZiAoY29sdW1uID49IG10ZC0+b29iYmxvY2spIHsKKwkJaWYgKGNvbHVtbiA+PSBtdGQtPndyaXRlc2l6ZSkgewogCQkJLyogT09CIGFyZWEgKi8KLQkJCWNvbHVtbiAtPSBtdGQtPm9vYmJsb2NrOworCQkJY29sdW1uIC09IG10ZC0+d3JpdGVzaXplOwogCQkJcmVhZGNtZCA9IE5BTkRfQ01EX1JFQURPT0I7CiAJCX0gZWxzZSBpZiAoY29sdW1uIDwgMjU2KSB7CiAJCQkvKiBGaXJzdCAyNTYgYnl0ZXMgLS0+IFJFQUQwICovCkBAIC01NzAsMzggKzQ2MywzNyBAQAogCQkJY29sdW1uIC09IDI1NjsKIAkJCXJlYWRjbWQgPSBOQU5EX0NNRF9SRUFEMTsKIAkJfQotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgcmVhZGNtZCk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcmVhZGNtZCwgY3RybCk7CisJCWN0cmwgJj0gfk5BTkRfQ1RSTF9DSEFOR0U7CiAJfQotCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb21tYW5kKTsKKwljaGlwLT5jbWRfY3RybChtdGQsIGNvbW1hbmQsIGN0cmwpOwogCi0JLyogU2V0IEFMRSBhbmQgY2xlYXIgQ0xFIHRvIHN0YXJ0IGFkZHJlc3MgY3ljbGUgKi8KLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCi0JaWYgKGNvbHVtbiAhPSAtMSB8fCBwYWdlX2FkZHIgIT0gLTEpIHsKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQUxFKTsKLQotCQkvKiBTZXJpYWxseSBpbnB1dCBhZGRyZXNzICovCi0JCWlmIChjb2x1bW4gIT0gLTEpIHsKLQkJCS8qIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzd2lkdGggKi8KLQkJCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikKLQkJCQljb2x1bW4gPj49IDE7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgY29sdW1uKTsKLQkJfQotCQlpZiAocGFnZV9hZGRyICE9IC0xKSB7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpIChwYWdlX2FkZHIgJiAweGZmKSk7Ci0JCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgKHVuc2lnbmVkIGNoYXIpICgocGFnZV9hZGRyID4+IDgpICYgMHhmZikpOwotCQkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDMyTWlCICovCi0JCQlpZiAodGhpcy0+Y2hpcHNpemUgPiAoMzIgPDwgMjApKQotCQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCAodW5zaWduZWQgY2hhcikgKChwYWdlX2FkZHIgPj4gMTYpICYgMHgwZikpOwotCQl9Ci0JCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKKwkvKgorCSAqIEFkZHJlc3MgY3ljbGUsIHdoZW4gbmVjZXNzYXJ5CisJICovCisJY3RybCA9IE5BTkRfQ1RSTF9BTEUgfCBOQU5EX0NUUkxfQ0hBTkdFOworCS8qIFNlcmlhbGx5IGlucHV0IGFkZHJlc3MgKi8KKwlpZiAoY29sdW1uICE9IC0xKSB7CisJCS8qIEFkanVzdCBjb2x1bW5zIGZvciAxNiBiaXQgYnVzd2lkdGggKi8KKwkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJY29sdW1uID4+PSAxOworCQljaGlwLT5jbWRfY3RybChtdGQsIGNvbHVtbiwgY3RybCk7CisJCWN0cmwgJj0gfk5BTkRfQ1RSTF9DSEFOR0U7CiAJfQorCWlmIChwYWdlX2FkZHIgIT0gLTEpIHsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBwYWdlX2FkZHIsIGN0cmwpOworCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOworCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiA4LCBjdHJsKTsKKwkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDMyTWlCICovCisJCWlmIChjaGlwLT5jaGlwc2l6ZSA+ICgzMiA8PCAyMCkpCisJCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiAxNiwgY3RybCk7CisJfQorCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfTk9ORSwgTkFORF9OQ0UgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKIAogCS8qCiAJICogcHJvZ3JhbSBhbmQgZXJhc2UgaGF2ZSB0aGVpciBvd24gYnVzeSBoYW5kbGVycwogCSAqIHN0YXR1cyBhbmQgc2VxdWVudGlhbCBpbiBuZWVkcyBubyBkZWxheQotCSovCisJICovCiAJc3dpdGNoIChjb21tYW5kKSB7CiAKIAljYXNlIE5BTkRfQ01EX1BBR0VQUk9HOgpAQCAtNjEyLDI5ICs1MDQsMzAgQEAKIAkJcmV0dXJuOwogCiAJY2FzZSBOQU5EX0NNRF9SRVNFVDoKLQkJaWYgKHRoaXMtPmRldl9yZWFkeSkKKwkJaWYgKGNoaXAtPmRldl9yZWFkeSkKIAkJCWJyZWFrOwotCQl1ZGVsYXkodGhpcy0+Y2hpcF9kZWxheSk7Ci0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX1NFVENMRSk7Ci0JCXRoaXMtPndyaXRlX2J5dGUobXRkLCBOQU5EX0NNRF9TVEFUVVMpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9DTFJDTEUpOwotCQl3aGlsZSAoICEodGhpcy0+cmVhZF9ieXRlKG10ZCkgJiBOQU5EX1NUQVRVU19SRUFEWSkpOworCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfU1RBVFVTLAorCQkJICAgICAgIE5BTkRfQ1RSTF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLAorCQkJICAgICAgIE5BTkRfQ01EX05PTkUsIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCXdoaWxlICghKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpKSA7CiAJCXJldHVybjsKIAotCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCisJCS8qIFRoaXMgYXBwbGllcyB0byByZWFkIGNvbW1hbmRzICovCiAJZGVmYXVsdDoKIAkJLyoKIAkJICogSWYgd2UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGJ1c3kgcGluLCB3ZSBhcHBseSB0aGUgZ2l2ZW4KIAkJICogY29tbWFuZCBkZWxheQotCQkqLwotCQlpZiAoIXRoaXMtPmRldl9yZWFkeSkgewotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKKwkJICovCisJCWlmICghY2hpcC0+ZGV2X3JlYWR5KSB7CisJCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAKIAluYW5kX3dhaXRfcmVhZHkobXRkKTsKIH0KQEAgLTY0Niw1MCArNTM5LDQ5IEBACiAgKiBAY29sdW1uOgl0aGUgY29sdW1uIGFkZHJlc3MgZm9yIHRoaXMgY29tbWFuZCwgLTEgaWYgbm9uZQogICogQHBhZ2VfYWRkcjoJdGhlIHBhZ2UgYWRkcmVzcyBmb3IgdGhpcyBjb21tYW5kLCAtMSBpZiBub25lCiAgKgotICogU2VuZCBjb21tYW5kIHRvIE5BTkQgZGV2aWNlLiBUaGlzIGlzIHRoZSB2ZXJzaW9uIGZvciB0aGUgbmV3IGxhcmdlIHBhZ2UgZGV2aWNlcwotICogV2UgZG9udCBoYXZlIHRoZSBzZXBlcmF0ZSByZWdpb25zIGFzIHdlIGhhdmUgaW4gdGhlIHNtYWxsIHBhZ2UgZGV2aWNlcy4KLSAqIFdlIG11c3QgZW11bGF0ZSBOQU5EX0NNRF9SRUFET09CIHRvIGtlZXAgdGhlIGNvZGUgY29tcGF0aWJsZS4KKyAqIFNlbmQgY29tbWFuZCB0byBOQU5EIGRldmljZS4gVGhpcyBpcyB0aGUgdmVyc2lvbiBmb3IgdGhlIG5ldyBsYXJnZSBwYWdlCisgKiBkZXZpY2VzIFdlIGRvbnQgaGF2ZSB0aGUgc2VwYXJhdGUgcmVnaW9ucyBhcyB3ZSBoYXZlIGluIHRoZSBzbWFsbCBwYWdlCisgKiBkZXZpY2VzLiAgV2UgbXVzdCBlbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgdG8ga2VlcCB0aGUgY29kZSBjb21wYXRpYmxlLgogICoKICAqLwotc3RhdGljIHZvaWQgbmFuZF9jb21tYW5kX2xwIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKK3N0YXRpYyB2b2lkIG5hbmRfY29tbWFuZF9scChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgaW50IGNvbW1hbmQsCisJCQkgICAgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcikKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXJlZ2lzdGVyIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKIAkvKiBFbXVsYXRlIE5BTkRfQ01EX1JFQURPT0IgKi8KIAlpZiAoY29tbWFuZCA9PSBOQU5EX0NNRF9SRUFET09CKSB7Ci0JCWNvbHVtbiArPSBtdGQtPm9vYmJsb2NrOworCQljb2x1bW4gKz0gbXRkLT53cml0ZXNpemU7CiAJCWNvbW1hbmQgPSBOQU5EX0NNRF9SRUFEMDsKIAl9CiAKLQotCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCS8qIFdyaXRlIG91dCB0aGUgY29tbWFuZCB0byB0aGUgZGV2aWNlLiAqLwotCXRoaXMtPndyaXRlX2J5dGUobXRkLCAoY29tbWFuZCAmIDB4ZmYpKTsKLQkvKiBFbmQgY29tbWFuZCBsYXRjaCBjeWNsZSAqLwotCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7CisJLyogQ29tbWFuZCBsYXRjaCBjeWNsZSAqLworCWNoaXAtPmNtZF9jdHJsKG10ZCwgY29tbWFuZCAmIDB4ZmYsCisJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKIAlpZiAoY29sdW1uICE9IC0xIHx8IHBhZ2VfYWRkciAhPSAtMSkgewotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRBTEUpOworCQlpbnQgY3RybCA9IE5BTkRfQ1RSTF9DSEFOR0UgfCBOQU5EX05DRSB8IE5BTkRfQUxFOwogCiAJCS8qIFNlcmlhbGx5IGlucHV0IGFkZHJlc3MgKi8KIAkJaWYgKGNvbHVtbiAhPSAtMSkgewogCQkJLyogQWRqdXN0IGNvbHVtbnMgZm9yIDE2IGJpdCBidXN3aWR0aCAqLwotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQorCQkJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KQogCQkJCWNvbHVtbiA+Pj0gMTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4gJiAweGZmKTsKLQkJCXRoaXMtPndyaXRlX2J5dGUobXRkLCBjb2x1bW4gPj4gOCk7CisJCQljaGlwLT5jbWRfY3RybChtdGQsIGNvbHVtbiwgY3RybCk7CisJCQljdHJsICY9IH5OQU5EX0NUUkxfQ0hBTkdFOworCQkJY2hpcC0+Y21kX2N0cmwobXRkLCBjb2x1bW4gPj4gOCwgY3RybCk7CiAJCX0KIAkJaWYgKHBhZ2VfYWRkciAhPSAtMSkgewotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAocGFnZV9hZGRyICYgMHhmZikpOwotCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiA4KSAmIDB4ZmYpKTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyLCBjdHJsKTsKKwkJCWNoaXAtPmNtZF9jdHJsKG10ZCwgcGFnZV9hZGRyID4+IDgsCisJCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9BTEUpOwogCQkJLyogT25lIG1vcmUgYWRkcmVzcyBjeWNsZSBmb3IgZGV2aWNlcyA+IDEyOE1pQiAqLwotCQkJaWYgKHRoaXMtPmNoaXBzaXplID4gKDEyOCA8PCAyMCkpCi0JCQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsICh1bnNpZ25lZCBjaGFyKSAoKHBhZ2VfYWRkciA+PiAxNikgJiAweGZmKSk7CisJCQlpZiAoY2hpcC0+Y2hpcHNpemUgPiAoMTI4IDw8IDIwKSkKKwkJCQljaGlwLT5jbWRfY3RybChtdGQsIHBhZ2VfYWRkciA+PiAxNiwKKwkJCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9BTEUpOwogCQl9Ci0JCS8qIExhdGNoIGluIGFkZHJlc3MgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQUxFKTsKIAl9CisJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCiAJLyoKIAkgKiBwcm9ncmFtIGFuZCBlcmFzZSBoYXZlIHRoZWlyIG93biBidXN5IGhhbmRsZXJzCkBAIC03MDIsNTUgKzU5NCw2MiBAQAogCWNhc2UgTkFORF9DTURfRVJBU0UxOgogCWNhc2UgTkFORF9DTURfRVJBU0UyOgogCWNhc2UgTkFORF9DTURfU0VRSU46CisJY2FzZSBOQU5EX0NNRF9STkRJTjoKIAljYXNlIE5BTkRfQ01EX1NUQVRVUzoKIAljYXNlIE5BTkRfQ01EX0RFUExFVEUxOgogCQlyZXR1cm47CiAKLQkvKgotCSAqIHJlYWQgZXJyb3Igc3RhdHVzIGNvbW1hbmRzIHJlcXVpcmUgb25seSBhIHNob3J0IGRlbGF5Ci0JICovCisJCS8qCisJCSAqIHJlYWQgZXJyb3Igc3RhdHVzIGNvbW1hbmRzIHJlcXVpcmUgb25seSBhIHNob3J0IGRlbGF5CisJCSAqLwogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SOgogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMDoKIAljYXNlIE5BTkRfQ01EX1NUQVRVU19FUlJPUjE6CiAJY2FzZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IyOgogCWNhc2UgTkFORF9DTURfU1RBVFVTX0VSUk9SMzoKLQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOworCQl1ZGVsYXkoY2hpcC0+Y2hpcF9kZWxheSk7CiAJCXJldHVybjsKIAogCWNhc2UgTkFORF9DTURfUkVTRVQ6Ci0JCWlmICh0aGlzLT5kZXZfcmVhZHkpCisJCWlmIChjaGlwLT5kZXZfcmVhZHkpCiAJCQlicmVhazsKLQkJdWRlbGF5KHRoaXMtPmNoaXBfZGVsYXkpOwotCQl0aGlzLT5od2NvbnRyb2wobXRkLCBOQU5EX0NUTF9TRVRDTEUpOwotCQl0aGlzLT53cml0ZV9ieXRlKG10ZCwgTkFORF9DTURfU1RBVFVTKTsKLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfQ0xSQ0xFKTsKLQkJd2hpbGUgKCAhKHRoaXMtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpKTsKKwkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX1NUQVRVUywKKwkJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ0xFIHwgTkFORF9DVFJMX0NIQU5HRSk7CisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfTk9ORSwKKwkJCSAgICAgICBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOworCQl3aGlsZSAoIShjaGlwLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKSkgOworCQlyZXR1cm47CisKKwljYXNlIE5BTkRfQ01EX1JORE9VVDoKKwkJLyogTm8gcmVhZHkgLyBidXN5IGNoZWNrIG5lY2Vzc2FyeSAqLworCQljaGlwLT5jbWRfY3RybChtdGQsIE5BTkRfQ01EX1JORE9VVFNUQVJULAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAJCXJldHVybjsKIAogCWNhc2UgTkFORF9DTURfUkVBRDA6Ci0JCS8qIEJlZ2luIGNvbW1hbmQgbGF0Y2ggY3ljbGUgKi8KLQkJdGhpcy0+aHdjb250cm9sKG10ZCwgTkFORF9DVExfU0VUQ0xFKTsKLQkJLyogV3JpdGUgb3V0IHRoZSBzdGFydCByZWFkIGNvbW1hbmQgKi8KLQkJdGhpcy0+d3JpdGVfYnl0ZShtdGQsIE5BTkRfQ01EX1JFQURTVEFSVCk7Ci0JCS8qIEVuZCBjb21tYW5kIGxhdGNoIGN5Y2xlICovCi0JCXRoaXMtPmh3Y29udHJvbChtdGQsIE5BTkRfQ1RMX0NMUkNMRSk7Ci0JCS8qIEZhbGwgdGhyb3VnaCBpbnRvIHJlYWR5IGNoZWNrICovCisJCWNoaXAtPmNtZF9jdHJsKG10ZCwgTkFORF9DTURfUkVBRFNUQVJULAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DTEUgfCBOQU5EX0NUUkxfQ0hBTkdFKTsKKwkJY2hpcC0+Y21kX2N0cmwobXRkLCBOQU5EX0NNRF9OT05FLAorCQkJICAgICAgIE5BTkRfTkNFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAKLQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLworCQkvKiBUaGlzIGFwcGxpZXMgdG8gcmVhZCBjb21tYW5kcyAqLwogCWRlZmF1bHQ6CiAJCS8qCiAJCSAqIElmIHdlIGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBidXN5IHBpbiwgd2UgYXBwbHkgdGhlIGdpdmVuCiAJCSAqIGNvbW1hbmQgZGVsYXkKLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpIHsKLQkJCXVkZWxheSAodGhpcy0+Y2hpcF9kZWxheSk7CisJCSAqLworCQlpZiAoIWNoaXAtPmRldl9yZWFkeSkgeworCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJLyogQXBwbHkgdGhpcyBzaG9ydCBkZWxheSBhbHdheXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gd2FpdCB0V0IgaW4KIAkgKiBhbnkgY2FzZSBvbiBhbnkgbWFjaGluZS4gKi8KLQluZGVsYXkgKDEwMCk7CisJbmRlbGF5KDEwMCk7CiAKIAluYW5kX3dhaXRfcmVhZHkobXRkKTsKIH0KQEAgLTc2MywzNCArNjYyLDI4IEBACiAgKgogICogR2V0IHRoZSBkZXZpY2UgYW5kIGxvY2sgaXQgZm9yIGV4Y2x1c2l2ZSBhY2Nlc3MKICAqLwotc3RhdGljIGludCBuYW5kX2dldF9kZXZpY2UgKHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbmV3X3N0YXRlKQorc3RhdGljIGludAorbmFuZF9nZXRfZGV2aWNlKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbmV3X3N0YXRlKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKmFjdGl2ZTsKLQlzcGlubG9ja190ICpsb2NrOwotCXdhaXRfcXVldWVfaGVhZF90ICp3cTsKLQlERUNMQVJFX1dBSVRRVUVVRSAod2FpdCwgY3VycmVudCk7Ci0KLQlsb2NrID0gKHRoaXMtPmNvbnRyb2xsZXIpID8gJnRoaXMtPmNvbnRyb2xsZXItPmxvY2sgOiAmdGhpcy0+Y2hpcF9sb2NrOwotCXdxID0gKHRoaXMtPmNvbnRyb2xsZXIpID8gJnRoaXMtPmNvbnRyb2xsZXItPndxIDogJnRoaXMtPndxOwotcmV0cnk6Ci0JYWN0aXZlID0gdGhpczsKKwlzcGlubG9ja190ICpsb2NrID0gJmNoaXAtPmNvbnRyb2xsZXItPmxvY2s7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxID0gJmNoaXAtPmNvbnRyb2xsZXItPndxOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworIHJldHJ5OgogCXNwaW5fbG9jayhsb2NrKTsKIAogCS8qIEhhcmR3YXJlIGNvbnRyb2xsZXIgc2hhcmVkIGFtb25nIGluZGVwZW5kZW5kIGRldmljZXMgKi8KLQlpZiAodGhpcy0+Y29udHJvbGxlcikgewotCQlpZiAodGhpcy0+Y29udHJvbGxlci0+YWN0aXZlKQotCQkJYWN0aXZlID0gdGhpcy0+Y29udHJvbGxlci0+YWN0aXZlOwotCQllbHNlCi0JCQl0aGlzLT5jb250cm9sbGVyLT5hY3RpdmUgPSB0aGlzOwotCX0KLQlpZiAoYWN0aXZlID09IHRoaXMgJiYgdGhpcy0+c3RhdGUgPT0gRkxfUkVBRFkpIHsKLQkJdGhpcy0+c3RhdGUgPSBuZXdfc3RhdGU7CisJLyogSGFyZHdhcmUgY29udHJvbGxlciBzaGFyZWQgYW1vbmcgaW5kZXBlbmRlbmQgZGV2aWNlcyAqLworCWlmICghY2hpcC0+Y29udHJvbGxlci0+YWN0aXZlKQorCQljaGlwLT5jb250cm9sbGVyLT5hY3RpdmUgPSBjaGlwOworCisJaWYgKGNoaXAtPmNvbnRyb2xsZXItPmFjdGl2ZSA9PSBjaGlwICYmIGNoaXAtPnN0YXRlID09IEZMX1JFQURZKSB7CisJCWNoaXAtPnN0YXRlID0gbmV3X3N0YXRlOwogCQlzcGluX3VubG9jayhsb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChuZXdfc3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKSB7CiAJCXNwaW5fdW5sb2NrKGxvY2spOwotCQlyZXR1cm4gKHRoaXMtPnN0YXRlID09IEZMX1BNX1NVU1BFTkRFRCkgPyAwIDogLUVBR0FJTjsKKwkJcmV0dXJuIChjaGlwLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpID8gMCA6IC1FQUdBSU47CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlhZGRfd2FpdF9xdWV1ZSh3cSwgJndhaXQpOwpAQCAtODA0LDI2NSArNjk3LDM3MSBAQAogICogbmFuZF93YWl0IC0gW0RFRkFVTFRdICB3YWl0IHVudGlsIHRoZSBjb21tYW5kIGlzIGRvbmUKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAdGhpczoJTkFORCBjaGlwIHN0cnVjdHVyZQotICogQHN0YXRlOglzdGF0ZSB0byBzZWxlY3QgdGhlIG1heC4gdGltZW91dCB2YWx1ZQogICoKICAqIFdhaXQgZm9yIGNvbW1hbmQgZG9uZS4gVGhpcyBhcHBsaWVzIHRvIGVyYXNlIGFuZCBwcm9ncmFtIG9ubHkKICAqIEVyYXNlIGNhbiB0YWtlIHVwIHRvIDQwMG1zIGFuZCBwcm9ncmFtIHVwIHRvIDIwbXMgYWNjb3JkaW5nIHRvCiAgKiBnZW5lcmFsIE5BTkQgYW5kIFNtYXJ0TWVkaWEgc3BlY3MKICAqCiAqLwotc3RhdGljIGludCBuYW5kX3dhaXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSkKK3N0YXRpYyBpbnQgbmFuZF93YWl0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwKQogewogCi0JdW5zaWduZWQgbG9uZwl0aW1lbyA9IGppZmZpZXM7Ci0JaW50CXN0YXR1czsKKwl1bnNpZ25lZCBsb25nIHRpbWVvID0gamlmZmllczsKKwlpbnQgc3RhdHVzLCBzdGF0ZSA9IGNoaXAtPnN0YXRlOwogCiAJaWYgKHN0YXRlID09IEZMX0VSQVNJTkcpCi0JCSB0aW1lbyArPSAoSFogKiA0MDApIC8gMTAwMDsKKwkJdGltZW8gKz0gKEhaICogNDAwKSAvIDEwMDA7CiAJZWxzZQotCQkgdGltZW8gKz0gKEhaICogMjApIC8gMTAwMDsKKwkJdGltZW8gKz0gKEhaICogMjApIC8gMTAwMDsKIAogCWxlZF90cmlnZ2VyX2V2ZW50KG5hbmRfbGVkX3RyaWdnZXIsIExFRF9GVUxMKTsKIAogCS8qIEFwcGx5IHRoaXMgc2hvcnQgZGVsYXkgYWx3YXlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIHdhaXQgdFdCIGluCiAJICogYW55IGNhc2Ugb24gYW55IG1hY2hpbmUuICovCi0JbmRlbGF5ICgxMDApOworCW5kZWxheSgxMDApOwogCi0JaWYgKChzdGF0ZSA9PSBGTF9FUkFTSU5HKSAmJiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSkKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfTVVMVEksIC0xLCAtMSk7CisJaWYgKChzdGF0ZSA9PSBGTF9FUkFTSU5HKSAmJiAoY2hpcC0+b3B0aW9ucyAmIE5BTkRfSVNfQU5EKSkKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVU19NVUxUSSwgLTEsIC0xKTsKIAllbHNlCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU1RBVFVTLCAtMSwgLTEpOworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTLCAtMSwgLTEpOwogCiAJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvKSkgewotCQkvKiBDaGVjaywgaWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCAqLwotCQlpZiAodGhpcy0+c3RhdGUgIT0gc3RhdGUpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAodGhpcy0+ZGV2X3JlYWR5KSB7Ci0JCQlpZiAodGhpcy0+ZGV2X3JlYWR5KG10ZCkpCisJCWlmIChjaGlwLT5kZXZfcmVhZHkpIHsKKwkJCWlmIChjaGlwLT5kZXZfcmVhZHkobXRkKSkKIAkJCQlicmVhazsKIAkJfSBlbHNlIHsKLQkJCWlmICh0aGlzLT5yZWFkX2J5dGUobXRkKSAmIE5BTkRfU1RBVFVTX1JFQURZKQorCQkJaWYgKGNoaXAtPnJlYWRfYnl0ZShtdGQpICYgTkFORF9TVEFUVVNfUkVBRFkpCiAJCQkJYnJlYWs7CiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJfQogCWxlZF90cmlnZ2VyX2V2ZW50KG5hbmRfbGVkX3RyaWdnZXIsIExFRF9PRkYpOwogCi0Jc3RhdHVzID0gKGludCkgdGhpcy0+cmVhZF9ieXRlKG10ZCk7CisJc3RhdHVzID0gKGludCljaGlwLT5yZWFkX2J5dGUobXRkKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCiAvKioKLSAqIG5hbmRfd3JpdGVfcGFnZSAtIFtHRU5FUklDXSB3cml0ZSBvbmUgcGFnZQotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB0aGlzOglOQU5EIGNoaXAgc3RydWN0dXJlCi0gKiBAcGFnZTogCXN0YXJ0cGFnZSBpbnNpZGUgdGhlIGNoaXAsIG11c3QgYmUgY2FsbGVkIHdpdGggKHBhZ2UgJiB0aGlzLT5wYWdlbWFzaykKLSAqIEBvb2JfYnVmOglvdXQgb2YgYmFuZCBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb3V0IG9mIGJhbmQgc2VsZWN0dGlvbiBzdHJ1Y3RyZQotICogQGNhY2hlZDoJMSA9IGVuYWJsZSBjYWNoZWQgcHJvZ3JhbW1pbmcgaWYgc3VwcG9ydGVkIGJ5IGNoaXAKLSAqCi0gKiBOYW5kX3BhZ2VfcHJvZ3JhbSBmdW5jdGlvbiBpcyB1c2VkIGZvciB3cml0ZSBhbmQgd3JpdGV2ICEKLSAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcHJvZ3JhbSBhIGZ1bGwgcGFnZSBvZiBkYXRhCi0gKiBJZiB5b3UgY2FsbCBpdCB3aXRoIGEgbm9uIHBhZ2UgYWxpZ25lZCBidWZmZXIsIHlvdSdyZSBsb3N0IDopCi0gKgotICogQ2FjaGVkIHByb2dyYW1taW5nIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICogbmFuZF9yZWFkX3BhZ2VfcmF3IC0gW0ludGVybl0gcmVhZCByYXcgcGFnZSBkYXRhIHdpdGhvdXQgZWNjCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKICAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgcGFnZSwKLQl1X2NoYXIgKm9vYl9idWYsICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBjYWNoZWQpCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3JhdyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgICAgIHVpbnQ4X3QgKmJ1ZikKIHsKLQlpbnQgCWksIHN0YXR1czsKLQl1X2NoYXIJZWNjX2NvZGVbMzJdOwotCWludAllY2Ntb2RlID0gb29ic2VsLT51c2VlY2MgPyB0aGlzLT5lY2Ntb2RlIDogTkFORF9FQ0NfTk9ORTsKLQlpbnQgIAkqb29iX2NvbmZpZyA9IG9vYnNlbC0+ZWNjcG9zOwotCWludAlkYXRpZHggPSAwLCBlY2NpZHggPSAwLCBlY2NzdGVwcyA9IHRoaXMtPmVjY3N0ZXBzOwotCWludAllY2NieXRlcyA9IDA7CisJY2hpcC0+cmVhZF9idWYobXRkLCBidWYsIG10ZC0+d3JpdGVzaXplKTsKKwljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CisJcmV0dXJuIDA7Cit9CiAKLQkvKiBGSVhNRTogRW5hYmxlIGNhY2hlZCBwcm9ncmFtbWluZyAqLwotCWNhY2hlZCA9IDA7CisvKioKKyAqIG5hbmRfcmVhZF9wYWdlX3N3ZWNjIC0ge1JFUExBQ0FCTEVdIHNvZnR3YXJlIGVjYyBiYXNlZCBwYWdlIHJlYWQgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJYnVmZmVyIHRvIHN0b3JlIHJlYWQgZGF0YQorICovCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCXVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwl1aW50OF90ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZlcnMuZWNjY29kZTsKKwlpbnQgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKIAotCS8qIFNlbmQgY29tbWFuZCB0byBiZWdpbiBhdXRvIHBhZ2UgcHJvZ3JhbW1pbmcgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NFUUlOLCAweDAwLCBwYWdlKTsKKwluYW5kX3JlYWRfcGFnZV9yYXcobXRkLCBjaGlwLCBidWYpOwogCi0JLyogV3JpdGUgb3V0IGNvbXBsZXRlIHBhZ2Ugb2YgZGF0YSwgdGFrZSBjYXJlIG9mIGVjY21vZGUgKi8KLQlzd2l0Y2ggKGVjY21vZGUpIHsKLQkvKiBObyBlY2MsIHdyaXRlIGFsbCAqLwotCWNhc2UgTkFORF9FQ0NfTk9ORToKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIldyaXRpbmcgZGF0YSB3aXRob3V0IEVDQyB0byBOQU5ELUZMQVNIIGlzIG5vdCByZWNvbW1lbmRlZFxuIik7Ci0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIHRoaXMtPmRhdGFfcG9pLCBtdGQtPm9vYmJsb2NrKTsKLQkJYnJlYWs7CisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsICZlY2NfY2FsY1tpXSk7CiAKLQkvKiBTb2Z0d2FyZSBlY2MgMy8yNTYsIHdyaXRlIGFsbCAqLwotCWNhc2UgTkFORF9FQ0NfU09GVDoKLQkJZm9yICg7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tKSB7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIGVjY19jb2RlKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyssIGVjY2lkeCsrKQotCQkJCW9vYl9idWZbb29iX2NvbmZpZ1tlY2NpZHhdXSA9IGVjY19jb2RlW2ldOwotCQkJZGF0aWR4ICs9IHRoaXMtPmVjY3NpemU7Ci0JCX0KLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgdGhpcy0+ZGF0YV9wb2ksIG10ZC0+b29iYmxvY2spOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllY2NieXRlcyA9IHRoaXMtPmVjY2J5dGVzOwotCQlmb3IgKDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0pIHsKLQkJCS8qIGVuYWJsZSBoYXJkd2FyZSBlY2MgbG9naWMgZm9yIHdyaXRlICovCi0JCQl0aGlzLT5lbmFibGVfaHdlY2MobXRkLCBOQU5EX0VDQ19XUklURSk7Ci0JCQl0aGlzLT53cml0ZV9idWYobXRkLCAmdGhpcy0+ZGF0YV9wb2lbZGF0aWR4XSwgdGhpcy0+ZWNjc2l6ZSk7Ci0JCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIGVjY19jb2RlKTsKLQkJCWZvciAoaSA9IDA7IGkgPCBlY2NieXRlczsgaSsrLCBlY2NpZHgrKykKLQkJCQlvb2JfYnVmW29vYl9jb25maWdbZWNjaWR4XV0gPSBlY2NfY29kZVtpXTsKLQkJCS8qIElmIHRoZSBoYXJkd2FyZSBlY2MgcHJvdmlkZXMgc3luZHJvbWVzIHRoZW4KLQkJCSAqIHRoZSBlY2MgY29kZSBtdXN0IGJlIHdyaXR0ZW4gaW1taWRpYXRlbHkgYWZ0ZXIKLQkJCSAqIHRoZSBkYXRhIGJ5dGVzICh3b3JkcykgKi8KLQkJCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkKLQkJCQl0aGlzLT53cml0ZV9idWYobXRkLCBlY2NfY29kZSwgZWNjYnl0ZXMpOwotCQkJZGF0aWR4ICs9IHRoaXMtPmVjY3NpemU7Ci0JCX0KLQkJYnJlYWs7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2MudG90YWw7IGkrKykKKwkJZWNjX2NvZGVbaV0gPSBjaGlwLT5vb2JfcG9pW2VjY3Bvc1tpXV07CiAKLQkvKiBXcml0ZSBvdXQgT09CIGRhdGEgKi8KLQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSFdFQ0NfU1lORFJPTUUpCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsICZvb2JfYnVmW29vYnNlbC0+ZWNjYnl0ZXNdLCBtdGQtPm9vYnNpemUgLSBvb2JzZWwtPmVjY2J5dGVzKTsKLQllbHNlCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIG9vYl9idWYsIG10ZC0+b29ic2l6ZSk7CisJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJcCA9IGJ1ZjsKIAotCS8qIFNlbmQgY29tbWFuZCB0byBhY3R1YWxseSBwcm9ncmFtIHRoZSBkYXRhICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBjYWNoZWQgPyBOQU5EX0NNRF9DQUNIRURQUk9HIDogTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisJZm9yIChpID0gMCA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJaW50IHN0YXQ7CiAKLQlpZiAoIWNhY2hlZCkgewotCQkvKiBjYWxsIHdhaXQgcmVhZHkgZnVuY3Rpb24gKi8KLQkJc3RhdHVzID0gdGhpcy0+d2FpdGZ1bmMgKG10ZCwgdGhpcywgRkxfV1JJVElORyk7Ci0KLQkJLyogU2VlIGlmIG9wZXJhdGlvbiBmYWlsZWQgYW5kIGFkZGl0aW9uYWwgc3RhdHVzIGNoZWNrcyBhcmUgYXZhaWxhYmxlICovCi0JCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKHRoaXMtPmVycnN0YXQpKSB7Ci0JCQlzdGF0dXMgPSB0aGlzLT5lcnJzdGF0KG10ZCwgdGhpcywgRkxfV1JJVElORywgc3RhdHVzLCBwYWdlKTsKLQkJfQotCi0JCS8qIFNlZSBpZiBkZXZpY2UgdGhpbmtzIGl0IHN1Y2NlZWRlZCAqLwotCQlpZiAoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgewotCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICIlczogIiAiRmFpbGVkIHdyaXRlLCBwYWdlIDB4JTA4eCwgIiwgX19GVU5DVElPTl9fLCBwYWdlKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogRklYTUU6IEltcGxlbWVudCBjYWNoZWQgcHJvZ3JhbW1pbmcgISAqLwotCQkvKiB3YWl0IHVudGlsIGNhY2hlIGlzIHJlYWR5Ki8KLQkJLy8gc3RhdHVzID0gdGhpcy0+d2FpdGZ1bmMgKG10ZCwgdGhpcywgRkxfQ0FDSEVEUlBHKTsKKwkJc3RhdCA9IGNoaXAtPmVjYy5jb3JyZWN0KG10ZCwgcCwgJmVjY19jb2RlW2ldLCAmZWNjX2NhbGNbaV0pOworCQlpZiAoc3RhdCA9PSAtMSkKKwkJCW10ZC0+ZWNjX3N0YXRzLmZhaWxlZCsrOworCQllbHNlCisJCQltdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgKz0gc3RhdDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFCiAvKioKLSAqIG5hbmRfdmVyaWZ5X3BhZ2VzIC0gW0dFTkVSSUNdIHZlcmlmeSB0aGUgY2hpcCBjb250ZW50cyBhZnRlciBhIHdyaXRlCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRoaXM6CU5BTkQgY2hpcCBzdHJ1Y3R1cmUKLSAqIEBwYWdlOiAJc3RhcnRwYWdlIGluc2lkZSB0aGUgY2hpcCwgbXVzdCBiZSBjYWxsZWQgd2l0aCAocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKQotICogQG51bXBhZ2VzOgludW1iZXIgb2YgcGFnZXMgdG8gdmVyaWZ5Ci0gKiBAb29iX2J1ZjoJb3V0IG9mIGJhbmQgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW91dCBvZiBiYW5kIHNlbGVjdHRpb24gc3RydWN0cmUKLSAqIEBjaGlwbnI6CW51bWJlciBvZiB0aGUgY3VycmVudCBjaGlwCi0gKiBAb29ibW9kZToJMSA9IGZ1bGwgYnVmZmVyIHZlcmlmeSwgMCA9IGVjYyBvbmx5CisgKiBuYW5kX3JlYWRfcGFnZV9od2VjYyAtIHtSRVBMQUNBQkxFXSBoYXJkd2FyZSBlY2MgYmFzZWQgcGFnZSByZWFkIGZ1bmN0aW9uCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBidWY6CWJ1ZmZlciB0byBzdG9yZSByZWFkIGRhdGEKICAqCi0gKiBUaGUgTkFORCBkZXZpY2UgYXNzdW1lcyB0aGF0IGl0IGlzIGFsd2F5cyB3cml0aW5nIHRvIGEgY2xlYW5seSBlcmFzZWQgcGFnZS4KLSAqIEhlbmNlLCBpdCBwZXJmb3JtcyBpdHMgaW50ZXJuYWwgd3JpdGUgdmVyaWZpY2F0aW9uIG9ubHkgb24gYml0cyB0aGF0Ci0gKiB0cmFuc2l0aW9uZWQgZnJvbSAxIHRvIDAuIFRoZSBkZXZpY2UgZG9lcyBOT1QgdmVyaWZ5IHRoZSB3aG9sZSBwYWdlIG9uIGEKLSAqIGJ5dGUgYnkgYnl0ZSBiYXNpcy4gSXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcGFnZSB3YXMgbm90IGNvbXBsZXRlbHkgZXJhc2VkCi0gKiBvciB0aGUgcGFnZSBpcyBiZWNvbWluZyB1bnVzYWJsZSBkdWUgdG8gd2Vhci4gVGhlIHJlYWQgd2l0aCBFQ0Mgd291bGQgY2F0Y2gKLSAqIHRoZSBlcnJvciBsYXRlciB3aGVuIHRoZSBFQ0MgcGFnZSBjaGVjayBmYWlscywgYnV0IHdlIHdvdWxkIHJhdGhlciBjYXRjaAotICogaXQgZWFybHkgaW4gdGhlIHBhZ2Ugd3JpdGUgc3RhZ2UuIEJldHRlciB0byB3cml0ZSBubyBkYXRhIHRoYW4gaW52YWxpZCBkYXRhLgorICogTm90IGZvciBzeW5kcm9tZSBjYWxjdWxhdGluZyBlY2MgY29udHJvbGxlcnMgd2hpY2ggbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dAogICovCi1zdGF0aWMgaW50IG5hbmRfdmVyaWZ5X3BhZ2VzIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHBhZ2UsIGludCBudW1wYWdlcywKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCwgaW50IGNoaXBuciwgaW50IG9vYm1vZGUpCitzdGF0aWMgaW50IG5hbmRfcmVhZF9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCXVpbnQ4X3QgKmJ1ZikKIHsKLQlpbnQgCWksIGosIGRhdGlkeCA9IDAsIG9vYm9mcyA9IDAsIHJlcyA9IC1FSU87Ci0JaW50CWVjY3N0ZXBzID0gdGhpcy0+ZWNjc3RlcHM7Ci0JaW50CWh3ZWNjYnl0ZXM7Ci0JdV9jaGFyIAlvb2JkYXRhWzY0XTsKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwl1aW50OF90ICplY2NfY29kZSA9IGNoaXAtPmJ1ZmZlcnMuZWNjY29kZTsKKwlpbnQgKmVjY3BvcyA9IGNoaXAtPmVjYy5sYXlvdXQtPmVjY3BvczsKIAotCWh3ZWNjYnl0ZXMgPSAodGhpcy0+b3B0aW9ucyAmIE5BTkRfSFdFQ0NfU1lORFJPTUUpID8gKG9vYnNlbC0+ZWNjYnl0ZXMgLyBlY2NzdGVwcykgOiAwOworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfUkVBRCk7CisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgcCwgZWNjc2l6ZSk7CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUobXRkLCBwLCAmZWNjX2NhbGNbaV0pOworCX0KKwljaGlwLT5yZWFkX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7CiAKLQkvKiBTZW5kIGNvbW1hbmQgdG8gcmVhZCBiYWNrIHRoZSBmaXJzdCBwYWdlICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFEMCwgMCwgcGFnZSk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQllY2NfY29kZVtpXSA9IGNoaXAtPm9vYl9wb2lbZWNjcG9zW2ldXTsKIAotCWZvcig7OykgewotCQlmb3IgKGogPSAwOyBqIDwgZWNjc3RlcHM7IGorKykgewotCQkJLyogTG9vcCB0aHJvdWdoIGFuZCB2ZXJpZnkgdGhlIGRhdGEgKi8KLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJnRoaXMtPmRhdGFfcG9pW2RhdGlkeF0sIG10ZC0+ZWNjc2l6ZSkpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUgdmVyaWZ5LCBwYWdlIDB4JTA4eCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJZGF0aWR4ICs9IG10ZC0+ZWNjc2l6ZTsKLQkJCS8qIEhhdmUgd2UgYSBodyBnZW5lcmF0b3IgbGF5b3V0ID8gKi8KLQkJCWlmICghaHdlY2NieXRlcykKLQkJCQljb250aW51ZTsKLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJnRoaXMtPm9vYl9idWZbb29ib2ZzXSwgaHdlY2NieXRlcykpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIiVzOiAiICJGYWlsZWQgd3JpdGUgdmVyaWZ5LCBwYWdlIDB4JTA4eCAiLCBfX0ZVTkNUSU9OX18sIHBhZ2UpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJb29ib2ZzICs9IGh3ZWNjYnl0ZXM7CisJZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJcCA9IGJ1ZjsKKworCWZvciAoaSA9IDAgOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWludCBzdGF0OworCisJCXN0YXQgPSBjaGlwLT5lY2MuY29ycmVjdChtdGQsIHAsICZlY2NfY29kZVtpXSwgJmVjY19jYWxjW2ldKTsKKwkJaWYgKHN0YXQgPT0gLTEpCisJCQltdGQtPmVjY19zdGF0cy5mYWlsZWQrKzsKKwkJZWxzZQorCQkJbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkICs9IHN0YXQ7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIG5hbmRfcmVhZF9wYWdlX3N5bmRyb21lIC0ge1JFUExBQ0FCTEVdIGhhcmR3YXJlIGVjYyBzeW5kcm9tIGJhc2VkIHBhZ2UgcmVhZAorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglidWZmZXIgdG8gc3RvcmUgcmVhZCBkYXRhCisgKgorICogVGhlIGh3IGdlbmVyYXRvciBjYWxjdWxhdGVzIHRoZSBlcnJvciBzeW5kcm9tZSBhdXRvbWF0aWNhbGx5LiBUaGVyZWZvcgorICogd2UgbmVlZCBhIHNwZWNpYWwgb29iIGxheW91dCBhbmQgaGFuZGxpbmcuCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9yZWFkX3BhZ2Vfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJICAgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICpwID0gYnVmOworCXVpbnQ4X3QgKm9vYiA9IGNoaXAtPm9vYl9wb2k7CisKKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKSB7CisJCWludCBzdGF0OworCisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1JFQUQpOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIHAsIGVjY3NpemUpOworCisJCWlmIChjaGlwLT5lY2MucHJlcGFkKSB7CisJCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgY2hpcC0+ZWNjLnByZXBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnByZXBhZDsKIAkJfQogCi0JCS8qIGNoZWNrLCBpZiB3ZSBtdXN0IGNvbXBhcmUgYWxsIGRhdGEgb3IgaWYgd2UganVzdCBoYXZlIHRvCi0JCSAqIGNvbXBhcmUgdGhlIGVjYyBieXRlcwotCQkgKi8KLQkJaWYgKG9vYm1vZGUpIHsKLQkJCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgJm9vYl9idWZbb29ib2ZzXSwgbXRkLT5vb2JzaXplIC0gaHdlY2NieXRlcyAqIGVjY3N0ZXBzKSkgewotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAiJXM6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4ICIsIF9fRlVOQ1RJT05fXywgcGFnZSk7Ci0JCQkJZ290byBvdXQ7CisJCWNoaXAtPmVjYy5od2N0bChtdGQsIE5BTkRfRUNDX1JFQURTWU4pOworCQljaGlwLT5yZWFkX2J1ZihtdGQsIG9vYiwgZWNjYnl0ZXMpOworCQlzdGF0ID0gY2hpcC0+ZWNjLmNvcnJlY3QobXRkLCBwLCBvb2IsIE5VTEwpOworCisJCWlmIChzdGF0ID09IC0xKQorCQkJbXRkLT5lY2Nfc3RhdHMuZmFpbGVkKys7CisJCWVsc2UKKwkJCW10ZC0+ZWNjX3N0YXRzLmNvcnJlY3RlZCArPSBzdGF0OworCisJCW9vYiArPSBlY2NieXRlczsKKworCQlpZiAoY2hpcC0+ZWNjLnBvc3RwYWQpIHsKKwkJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucG9zdHBhZCk7CisJCQlvb2IgKz0gY2hpcC0+ZWNjLnBvc3RwYWQ7CisJCX0KKwl9CisKKwkvKiBDYWxjdWxhdGUgcmVtYWluaW5nIG9vYiBieXRlcyAqLworCWkgPSBtdGQtPm9vYnNpemUgLSAob29iIC0gY2hpcC0+b29iX3BvaSk7CisJaWYgKGkpCisJCWNoaXAtPnJlYWRfYnVmKG10ZCwgb29iLCBpKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5hbmRfdHJhbnNmZXJfb29iIC0gW0ludGVybmFsXSBUcmFuc2ZlciBvb2IgdG8gY2xpZW50IGJ1ZmZlcgorICogQGNoaXA6CW5hbmQgY2hpcCBzdHJ1Y3R1cmUKKyAqIEBvcHM6CW9vYiBvcHMgc3RydWN0dXJlCisgKi8KK3N0YXRpYyB1aW50OF90ICpuYW5kX3RyYW5zZmVyX29vYihzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLCB1aW50OF90ICpvb2IsCisJCQkJICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlzaXplX3QgbGVuID0gb3BzLT5vb2JsZW47CisKKwlzd2l0Y2gob3BzLT5tb2RlKSB7CisKKwljYXNlIE1URF9PT0JfUExBQ0U6CisJY2FzZSBNVERfT09CX1JBVzoKKwkJbWVtY3B5KG9vYiwgY2hpcC0+b29iX3BvaSArIG9wcy0+b29ib2ZmcywgbGVuKTsKKwkJcmV0dXJuIG9vYiArIGxlbjsKKworCWNhc2UgTVREX09PQl9BVVRPOiB7CisJCXN0cnVjdCBuYW5kX29vYmZyZWUgKmZyZWUgPSBjaGlwLT5lY2MubGF5b3V0LT5vb2JmcmVlOworCQl1aW50MzJfdCBib2ZmcyA9IDAsIHJvZmZzID0gb3BzLT5vb2JvZmZzOworCQlzaXplX3QgYnl0ZXMgPSAwOworCisJCWZvcig7IGZyZWUtPmxlbmd0aCAmJiBsZW47IGZyZWUrKywgbGVuIC09IGJ5dGVzKSB7CisJCQkvKiBSZWFkIHJlcXVlc3Qgbm90IGZyb20gb2Zmc2V0IDAgPyAqLworCQkJaWYgKHVubGlrZWx5KHJvZmZzKSkgeworCQkJCWlmIChyb2ZmcyA+PSBmcmVlLT5sZW5ndGgpIHsKKwkJCQkJcm9mZnMgLT0gZnJlZS0+bGVuZ3RoOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQgKyByb2ZmczsKKwkJCQlieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLAorCQkJCQkgICAgICAoZnJlZS0+bGVuZ3RoIC0gcm9mZnMpKTsKKwkJCQlyb2ZmcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sIGZyZWUtPmxlbmd0aCk7CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQ7CisJCQl9CisJCQltZW1jcHkob29iLCBjaGlwLT5vb2JfcG9pICsgYm9mZnMsIGJ5dGVzKTsKKwkJCW9vYiArPSBieXRlczsKKwkJfQorCQlyZXR1cm4gb29iOworCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogbmFuZF9kb19yZWFkX29wcyAtIFtJbnRlcm5hbF0gUmVhZCBkYXRhIHdpdGggRUNDCisgKgorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKgorICogSW50ZXJuYWwgZnVuY3Rpb24uIENhbGxlZCB3aXRoIGNoaXAgaGVsZC4KKyAqLworc3RhdGljIGludCBuYW5kX2RvX3JlYWRfb3BzKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlpbnQgY2hpcG5yLCBwYWdlLCByZWFscGFnZSwgY29sLCBieXRlcywgYWxpZ25lZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBtdGRfZWNjX3N0YXRzIHN0YXRzOworCWludCBibGtjaGVjayA9ICgxIDw8IChjaGlwLT5waHlzX2VyYXNlX3NoaWZ0IC0gY2hpcC0+cGFnZV9zaGlmdCkpIC0gMTsKKwlpbnQgc25kY21kID0gMTsKKwlpbnQgcmV0ID0gMDsKKwl1aW50MzJfdCByZWFkbGVuID0gb3BzLT5sZW47CisJdWludDhfdCAqYnVmcG9pLCAqb29iLCAqYnVmOworCisJc3RhdHMgPSBtdGQtPmVjY19zdGF0czsKKworCWNoaXBuciA9IChpbnQpKGZyb20gPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCisJcmVhbHBhZ2UgPSAoaW50KShmcm9tID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOworCisJY29sID0gKGludCkoZnJvbSAmIChtdGQtPndyaXRlc2l6ZSAtIDEpKTsKKwljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy5vb2JyYnVmOworCisJYnVmID0gb3BzLT5kYXRidWY7CisJb29iID0gb3BzLT5vb2JidWY7CisKKwl3aGlsZSgxKSB7CisJCWJ5dGVzID0gbWluKG10ZC0+d3JpdGVzaXplIC0gY29sLCByZWFkbGVuKTsKKwkJYWxpZ25lZCA9IChieXRlcyA9PSBtdGQtPndyaXRlc2l6ZSk7CisKKwkJLyogSXMgdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgYnVmZmVyID8gKi8KKwkJaWYgKHJlYWxwYWdlICE9IGNoaXAtPnBhZ2VidWYgfHwgb29iKSB7CisJCQlidWZwb2kgPSBhbGlnbmVkID8gYnVmIDogY2hpcC0+YnVmZmVycy5kYXRhYnVmOworCisJCQlpZiAobGlrZWx5KHNuZGNtZCkpIHsKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIDB4MDAsIHBhZ2UpOworCQkJCXNuZGNtZCA9IDA7CisJCQl9CisKKwkJCS8qIE5vdyByZWFkIHRoZSBwYWdlIGludG8gdGhlIGJ1ZmZlciAqLworCQkJcmV0ID0gY2hpcC0+ZWNjLnJlYWRfcGFnZShtdGQsIGNoaXAsIGJ1ZnBvaSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlicmVhazsKKworCQkJLyogVHJhbnNmZXIgbm90IGFsaWduZWQgZGF0YSAqLworCQkJaWYgKCFhbGlnbmVkKSB7CisJCQkJY2hpcC0+cGFnZWJ1ZiA9IHJlYWxwYWdlOworCQkJCW1lbWNweShidWYsIGNoaXAtPmJ1ZmZlcnMuZGF0YWJ1ZiArIGNvbCwgYnl0ZXMpOworCQkJfQorCisJCQlidWYgKz0gYnl0ZXM7CisKKwkJCWlmICh1bmxpa2VseShvb2IpKSB7CisJCQkJLyogUmF3IG1vZGUgZG9lcyBkYXRhOm9vYjpkYXRhOm9vYiAqLworCQkJCWlmIChvcHMtPm1vZGUgIT0gTVREX09PQl9SQVcpCisJCQkJCW9vYiA9IG5hbmRfdHJhbnNmZXJfb29iKGNoaXAsIG9vYiwgb3BzKTsKKwkJCQllbHNlCisJCQkJCWJ1ZiA9IG5hbmRfdHJhbnNmZXJfb29iKGNoaXAsIGJ1Ziwgb3BzKTsKKwkJCX0KKworCQkJaWYgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fUkVBRFJEWSkpIHsKKwkJCQkvKgorCQkJCSAqIEFwcGx5IGRlbGF5IG9yIHdhaXQgZm9yIHJlYWR5L2J1c3kgcGluLiBEbworCQkJCSAqIHRoaXMgYmVmb3JlIHRoZSBBVVRPSU5DUiBjaGVjaywgc28gbm8KKwkJCQkgKiBwcm9ibGVtcyBhcmlzZSBpZiBhIGNoaXAgd2hpY2ggZG9lcyBhdXRvCisJCQkJICogaW5jcmVtZW50IGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZQorCQkJCSAqIGJvYXJkIGRyaXZlci4KKwkJCQkgKi8KKwkJCQlpZiAoIWNoaXAtPmRldl9yZWFkeSkKKwkJCQkJdWRlbGF5KGNoaXAtPmNoaXBfZGVsYXkpOworCQkJCWVsc2UKKwkJCQkJbmFuZF93YWl0X3JlYWR5KG10ZCk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQkvKiBSZWFkIGFsd2F5cywgZWxzZSBhdXRvaW5jcmVtZW50IGZhaWxzICovCi0JCQl0aGlzLT5yZWFkX2J1ZihtdGQsIG9vYmRhdGEsIG10ZC0+b29ic2l6ZSAtIGh3ZWNjYnl0ZXMgKiBlY2NzdGVwcyk7Ci0KLQkJCWlmIChvb2JzZWwtPnVzZWVjYyAhPSBNVERfTkFOREVDQ19PRkYgJiYgIWh3ZWNjYnl0ZXMpIHsKLQkJCQlpbnQgZWNjY250ID0gb29ic2VsLT5lY2NieXRlczsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBlY2NjbnQ7IGkrKykgewotCQkJCQlpbnQgaWR4ID0gb29ic2VsLT5lY2Nwb3NbaV07Ci0JCQkJCWlmIChvb2JkYXRhW2lkeF0gIT0gb29iX2J1Zltvb2JvZnMgKyBpZHhdICkgewotCQkJCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsCi0JCQkJCSAgICAgICAJIiVzOiBGYWlsZWQgRUNDIHdyaXRlICIKLQkJCQkJCSJ2ZXJpZnksIHBhZ2UgMHglMDh4LCAiICIlNmkgYnl0ZXMgd2VyZSBzdWNjZXNmdWxcbiIsIF9fRlVOQ1RJT05fXywgcGFnZSwgaSk7Ci0JCQkJCQlnb3RvIG91dDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KKwkJCW1lbWNweShidWYsIGNoaXAtPmJ1ZmZlcnMuZGF0YWJ1ZiArIGNvbCwgYnl0ZXMpOworCQkJYnVmICs9IGJ5dGVzOwogCQl9Ci0JCW9vYm9mcyArPSBtdGQtPm9vYnNpemUgLSBod2VjY2J5dGVzICogZWNjc3RlcHM7Ci0JCXBhZ2UrKzsKLQkJbnVtcGFnZXMtLTsKIAotCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkgKiBEbyB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zCi0JCSAqIGFyaXNlIGlmIGEgY2hpcCB3aGljaCBkb2VzIGF1dG8gaW5jcmVtZW50Ci0JCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCi0JCSAqIERvIHRoaXMgYWxzbyBiZWZvcmUgcmV0dXJuaW5nLCBzbyB0aGUgY2hpcCBpcwotCQkgKiByZWFkeSBmb3IgdGhlIG5leHQgY29tbWFuZC4KLQkJKi8KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOwotCQllbHNlCi0JCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKKwkJcmVhZGxlbiAtPSBieXRlczsKIAotCQkvKiBBbGwgZG9uZSwgcmV0dXJuIGhhcHB5ICovCi0JCWlmICghbnVtcGFnZXMpCi0JCQlyZXR1cm4gMDsKKwkJaWYgKCFyZWFkbGVuKQorCQkJYnJlYWs7CiAKKwkJLyogRm9yIHN1YnNlcXVlbnQgcmVhZHMgYWxpZ24gdG8gcGFnZSBib3VuZGFyeS4gKi8KKwkJY29sID0gMDsKKwkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyAqLworCQlyZWFscGFnZSsrOwogCi0JCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50ICovCi0JCWlmICghTkFORF9DQU5BVVRPSU5DUih0aGlzKSkKLQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRDAsIDB4MDAsIHBhZ2UpOworCQlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLworCQlpZiAoIXBhZ2UpIHsKKwkJCWNoaXBucisrOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCX0KKworCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAorCQkgKiBvciBpZiB3ZSBoYXZlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5LgorCQkgKi8KKwkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKGNoaXApIHx8ICEocGFnZSAmIGJsa2NoZWNrKSkKKwkJCXNuZGNtZCA9IDE7CiAJfQotCS8qCi0JICogVGVybWluYXRlIHRoZSByZWFkIGNvbW1hbmQuIFdlIGNvbWUgaGVyZSBpbiBjYXNlIG9mIGFuIGVycm9yCi0JICogU28gd2UgbXVzdCBpc3N1ZSBhIHJlc2V0IGNvbW1hbmQuCi0JICovCi1vdXQ6Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKLQlyZXR1cm4gcmVzOworCisJb3BzLT5yZXRsZW4gPSBvcHMtPmxlbiAtIChzaXplX3QpIHJlYWRsZW47CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG10ZC0+ZWNjX3N0YXRzLmZhaWxlZCAtIHN0YXRzLmZhaWxlZCkKKwkJcmV0dXJuIC1FQkFETVNHOworCisJcmV0dXJuICBtdGQtPmVjY19zdGF0cy5jb3JyZWN0ZWQgLSBzdGF0cy5jb3JyZWN0ZWQgPyAtRVVDTEVBTiA6IDA7CiB9Ci0jZW5kaWYKIAogLyoqCiAgKiBuYW5kX3JlYWQgLSBbTVREIEludGVyZmFjZV0gTVREIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX2RvX3JlYWRfZWNjCkBAIC0xMDcyLDk3NCArMTA3MSw3NDEgQEAKICAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCiAgKiBAYnVmOgl0aGUgZGF0YWJ1ZmZlciB0byBwdXQgZGF0YQogICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG5hbmRfZG9fcmVhZF9lY2Mgd2l0aCBvb2IgYnVmZmVyIGFuZCBvb2JzZWwgPSBOVUxMCi0gKiBhbmQgZmxhZ3MgPSAweGZmCisgKiBHZXQgaG9sZCBvZiB0aGUgY2hpcCBhbmQgY2FsbCBuYW5kX2RvX3JlYWQKICAqLwotc3RhdGljIGludCBuYW5kX3JlYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpCitzdGF0aWMgaW50IG5hbmRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCSAgICAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1ZikKIHsKLQlyZXR1cm4gbmFuZF9kb19yZWFkX2VjYyAobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCAmbXRkLT5vb2JpbmZvLCAweGZmKTsKLX0KLQotCi0vKioKLSAqIG5hbmRfcmVhZF9lY2MgLSBbTVREIEludGVyZmFjZV0gTVREIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBuYW5kX2RvX3JlYWRfZWNjCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2YgcmVhZCBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGFidWZmZXIgdG8gcHV0IGRhdGEKLSAqIEBvb2JfYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNpbXBseSBjYWxscyBuYW5kX2RvX3JlYWRfZWNjIHdpdGggZmxhZ3MgPSAweGZmCi0gKi8KLXN0YXRpYyBpbnQgbmFuZF9yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJICBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogb29iX2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQotewotCS8qIHVzZSB1c2Vyc3BhY2Ugc3VwcGxpZWQgb29iaW5mbywgaWYgemVybyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQlyZXR1cm4gbmFuZF9kb19yZWFkX2VjYyhtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYsIG9vYl9idWYsIG9vYnNlbCwgMHhmZik7Ci19Ci0KLQotLyoqCi0gKiBuYW5kX2RvX3JlYWRfZWNjIC0gW01URCBJbnRlcmZhY2VdIFJlYWQgZGF0YSB3aXRoIEVDQwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCi0gKiBAb29iX2J1ZjoJZmlsZXN5c3RlbSBzdXBwbGllZCBvb2IgZGF0YSBidWZmZXIgKGNhbiBiZSBOVUxMKQotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqIEBmbGFnczoJZmxhZyB0byBpbmRpY2F0ZSBpZiBuYW5kX2dldF9kZXZpY2UvbmFuZF9yZWxlYXNlX2RldmljZSBzaG91bGQgYmUgcHJlZm9ybWVkCi0gKgkJYW5kIGhvdyBtYW55IGNvcnJlY3RlZCBlcnJvciBiaXRzIGFyZSBhY2NlcHRhYmxlOgotICoJCSAgYml0cyAwLi43IC0gbnVtYmVyIG9mIHRvbGVyYWJsZSBlcnJvcnMKLSAqCQkgIGJpdCAgOCAgICAtIDAgPT0gZG8gbm90IGdldC9yZWxlYXNlIGNoaXAsIDEgPT0gZ2V0L3JlbGVhc2UgY2hpcAotICoKLSAqIE5BTkQgcmVhZCB3aXRoIEVDQwotICovCi1pbnQgbmFuZF9kb19yZWFkX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCQkJICAgICBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZiwgdV9jaGFyICogb29iX2J1ZiwKLQkJCSAgICAgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLCBpbnQgZmxhZ3MpCi17Ci0KLQlpbnQgaSwgaiwgY29sLCByZWFscGFnZSwgcGFnZSwgZW5kLCBlY2MsIGNoaXBuciwgc25kY21kID0gMTsKLQlpbnQgcmVhZCA9IDAsIG9vYiA9IDAsIGVjY19zdGF0dXMgPSAwLCBlY2NfZmFpbGVkID0gMDsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVfY2hhciAqZGF0YV9wb2ksICpvb2JfZGF0YSA9IG9vYl9idWY7Ci0JdV9jaGFyIGVjY19jYWxjWzMyXTsKLQl1X2NoYXIgZWNjX2NvZGVbMzJdOwotICAgICAgICBpbnQgZWNjbW9kZSwgZWNjc3RlcHM7Ci0JaW50CSpvb2JfY29uZmlnLCBkYXRpZHg7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7Ci0JaW50CWVjY2J5dGVzOwotCWludAljb21wYXJlZWNjID0gMTsKLQlpbnQJb29icmVhZGxlbjsKLQotCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3JlYWRfZWNjOiBmcm9tID0gMHglMDh4LCBsZW4gPSAlaVxuIiwgKHVuc2lnbmVkIGludCkgZnJvbSwgKGludCkgbGVuKTsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQ7CiAKIAkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9lY2M6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7Ci0JCSpyZXRsZW4gPSAwOworCWlmICgoZnJvbSArIGxlbikgPiBtdGQtPnNpemUpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQlpZiAoZmxhZ3MgJiBOQU5EX0dFVF9ERVZJQ0UpCi0JCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9SRUFESU5HKTsKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9SRUFESU5HKTsKIAotCS8qIEF1dG9wbGFjZSBvZiBvb2IgZGF0YSA/IFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lICovCi0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkKLQkJb29ic2VsID0gdGhpcy0+YXV0b29vYjsKKwljaGlwLT5vcHMubGVuID0gbGVuOworCWNoaXAtPm9wcy5kYXRidWYgPSBidWY7CisJY2hpcC0+b3BzLm9vYmJ1ZiA9IE5VTEw7CiAKLQllY2Ntb2RlID0gb29ic2VsLT51c2VlY2MgPyB0aGlzLT5lY2Ntb2RlIDogTkFORF9FQ0NfTk9ORTsKLQlvb2JfY29uZmlnID0gb29ic2VsLT5lY2Nwb3M7CisJcmV0ID0gbmFuZF9kb19yZWFkX29wcyhtdGQsIGZyb20sICZjaGlwLT5vcHMpOwogCi0JLyogU2VsZWN0IHRoZSBOQU5EIGRldmljZSAqLwotCWNoaXBuciA9IChpbnQpKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7Ci0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAotCS8qIEZpcnN0IHdlIGNhbGN1bGF0ZSB0aGUgc3RhcnRpbmcgcGFnZSAqLwotCXJlYWxwYWdlID0gKGludCkgKGZyb20gPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JcGFnZSA9IHJlYWxwYWdlICYgdGhpcy0+cGFnZW1hc2s7Ci0KLQkvKiBHZXQgcmF3IHN0YXJ0aW5nIGNvbHVtbiAqLwotCWNvbCA9IGZyb20gJiAobXRkLT5vb2JibG9jayAtIDEpOwotCi0JZW5kID0gbXRkLT5vb2JibG9jazsKLQllY2MgPSB0aGlzLT5lY2NzaXplOwotCWVjY2J5dGVzID0gdGhpcy0+ZWNjYnl0ZXM7Ci0KLQlpZiAoKGVjY21vZGUgPT0gTkFORF9FQ0NfTk9ORSkgfHwgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0hXRUNDX1NZTkRST01FKSkKLQkJY29tcGFyZWVjYyA9IDA7Ci0KLQlvb2JyZWFkbGVuID0gbXRkLT5vb2JzaXplOwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9IV0VDQ19TWU5EUk9NRSkKLQkJb29icmVhZGxlbiAtPSBvb2JzZWwtPmVjY2J5dGVzOwotCi0JLyogTG9vcCB1bnRpbCBhbGwgZGF0YSByZWFkICovCi0Jd2hpbGUgKHJlYWQgPCBsZW4pIHsKLQotCQlpbnQgYWxpZ25lZCA9ICghY29sICYmIChsZW4gLSByZWFkKSA+PSBlbmQpOwotCQkvKgotCQkgKiBJZiB0aGUgcmVhZCBpcyBub3QgcGFnZSBhbGlnbmVkLCB3ZSBoYXZlIHRvIHJlYWQgaW50byBkYXRhIGJ1ZmZlcgotCQkgKiBkdWUgdG8gZWNjLCBlbHNlIHdlIHJlYWQgaW50byByZXR1cm4gYnVmZmVyIGRpcmVjdAotCQkgKi8KLQkJaWYgKGFsaWduZWQpCi0JCQlkYXRhX3BvaSA9ICZidWZbcmVhZF07Ci0JCWVsc2UKLQkJCWRhdGFfcG9pID0gdGhpcy0+ZGF0YV9idWY7Ci0KLQkJLyogQ2hlY2ssIGlmIHdlIGhhdmUgdGhpcyBwYWdlIGluIHRoZSBidWZmZXIKLQkJICoKLQkJICogRklYTUU6IE1ha2UgaXQgd29yayB3aGVuIHdlIG11c3QgcHJvdmlkZSBvb2IgZGF0YSB0b28sCi0JCSAqIGNoZWNrIHRoZSB1c2FnZSBvZiBkYXRhX2J1ZiBvb2IgZmllbGQKLQkJICovCi0JCWlmIChyZWFscGFnZSA9PSB0aGlzLT5wYWdlYnVmICYmICFvb2JfYnVmKSB7Ci0JCQkvKiBhbGlnbmVkIHJlYWQgPyAqLwotCQkJaWYgKGFsaWduZWQpCi0JCQkJbWVtY3B5IChkYXRhX3BvaSwgdGhpcy0+ZGF0YV9idWYsIGVuZCk7Ci0JCQlnb3RvIHJlYWRkYXRhOwotCQl9Ci0KLQkJLyogQ2hlY2ssIGlmIHdlIG11c3Qgc2VuZCB0aGUgcmVhZCBjb21tYW5kICovCi0JCWlmIChzbmRjbWQpIHsKLQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUkVBRDAsIDB4MDAsIHBhZ2UpOwotCQkJc25kY21kID0gMDsKLQkJfQotCi0JCS8qIGdldCBvb2IgYXJlYSwgaWYgd2UgaGF2ZSBubyBvb2IgYnVmZmVyIGZyb20gZnMtZHJpdmVyICovCi0JCWlmICghb29iX2J1ZiB8fCBvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UgfHwKLQkJCW9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTF9VU1IpCi0JCQlvb2JfZGF0YSA9ICZ0aGlzLT5kYXRhX2J1ZltlbmRdOwotCi0JCWVjY3N0ZXBzID0gdGhpcy0+ZWNjc3RlcHM7Ci0KLQkJc3dpdGNoIChlY2Ntb2RlKSB7Ci0JCWNhc2UgTkFORF9FQ0NfTk9ORTogewkvKiBObyBFQ0MsIFJlYWQgaW4gYSBwYWdlICovCi0JCQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0d2hpbmdlID0gMDsKLQkJCWlmICgobGFzdHdoaW5nZSAvIEhaKSAhPSAoamlmZmllcyAvIEhaKSkgewotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJSZWFkaW5nIGRhdGEgZnJvbSBOQU5EIEZMQVNIIHdpdGhvdXQgRUNDIGlzIG5vdCByZWNvbW1lbmRlZFxuIik7Ci0JCQkJbGFzdHdoaW5nZSA9IGppZmZpZXM7Ci0JCQl9Ci0JCQl0aGlzLT5yZWFkX2J1ZihtdGQsIGRhdGFfcG9pLCBlbmQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYXNlIE5BTkRfRUNDX1NPRlQ6CS8qIFNvZnR3YXJlIEVDQyAzLzI1NjogUmVhZCBpbiBhIHBhZ2UgKyBvb2IgZGF0YSAqLwotCQkJdGhpcy0+cmVhZF9idWYobXRkLCBkYXRhX3BvaSwgZW5kKTsKLQkJCWZvciAoaSA9IDAsIGRhdGlkeCA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpKz0zLCBkYXRpZHggKz0gZWNjKQotCQkJCXRoaXMtPmNhbGN1bGF0ZV9lY2MobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJmVjY19jYWxjW2ldKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlmb3IgKGkgPSAwLCBkYXRpZHggPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSs9ZWNjYnl0ZXMsIGRhdGlkeCArPSBlY2MpIHsKLQkJCQl0aGlzLT5lbmFibGVfaHdlY2MobXRkLCBOQU5EX0VDQ19SRUFEKTsKLQkJCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZkYXRhX3BvaVtkYXRpZHhdLCBlY2MpOwotCi0JCQkJLyogSFcgZWNjIHdpdGggc3luZHJvbWUgY2FsY3VsYXRpb24gbXVzdCByZWFkIHRoZQotCQkJCSAqIHN5bmRyb21lIGZyb20gZmxhc2ggaW1taWRpYXRlbHkgYWZ0ZXIgdGhlIGRhdGEgKi8KLQkJCQlpZiAoIWNvbXBhcmVlY2MpIHsKLQkJCQkJLyogU29tZSBodyBlY2MgZ2VuZXJhdG9ycyBuZWVkIHRvIGtub3cgd2hlbiB0aGUKLQkJCQkJICogc3luZHJvbWUgaXMgcmVhZCBmcm9tIGZsYXNoICovCi0JCQkJCXRoaXMtPmVuYWJsZV9od2VjYyhtdGQsIE5BTkRfRUNDX1JFQURTWU4pOwotCQkJCQl0aGlzLT5yZWFkX2J1ZihtdGQsICZvb2JfZGF0YVtpXSwgZWNjYnl0ZXMpOwotCQkJCQkvKiBXZSBjYWxjIGVycm9yIGNvcnJlY3Rpb24gZGlyZWN0bHksIGl0IGNoZWNrcyB0aGUgaHcKLQkJCQkJICogZ2VuZXJhdG9yIGZvciBhbiBlcnJvciwgcmVhZHMgYmFjayB0aGUgc3luZHJvbWUgYW5kCi0JCQkJCSAqIGRvZXMgdGhlIGVycm9yIGNvcnJlY3Rpb24gb24gdGhlIGZseSAqLwotCQkJCQllY2Nfc3RhdHVzID0gdGhpcy0+Y29ycmVjdF9kYXRhKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sICZvb2JfZGF0YVtpXSwgJmVjY19jb2RlW2ldKTsKLQkJCQkJaWYgKChlY2Nfc3RhdHVzID09IC0xKSB8fCAoZWNjX3N0YXR1cyA+IChmbGFncyAmJiAweGZmKSkpIHsKLQkJCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9yZWFkX2VjYzogIgotCQkJCQkJCSJGYWlsZWQgRUNDIHJlYWQsIHBhZ2UgMHglMDh4IG9uIGNoaXAgJWRcbiIsIHBhZ2UsIGNoaXBucik7Ci0JCQkJCQllY2NfZmFpbGVkKys7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQl0aGlzLT5jYWxjdWxhdGVfZWNjKG10ZCwgJmRhdGFfcG9pW2RhdGlkeF0sICZlY2NfY2FsY1tpXSk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiByZWFkIG9vYmRhdGEgKi8KLQkJdGhpcy0+cmVhZF9idWYobXRkLCAmb29iX2RhdGFbbXRkLT5vb2JzaXplIC0gb29icmVhZGxlbl0sIG9vYnJlYWRsZW4pOwotCi0JCS8qIFNraXAgRUNDIGNoZWNrLCBpZiBub3QgcmVxdWVzdGVkIChFQ0NfTk9ORSBvciBIV19FQ0Mgd2l0aCBzeW5kcm9tZXMpICovCi0JCWlmICghY29tcGFyZWVjYykKLQkJCWdvdG8gcmVhZG9vYjsKLQotCQkvKiBQaWNrIHRoZSBFQ0MgYnl0ZXMgb3V0IG9mIHRoZSBvb2IgZGF0YSAqLwotCQlmb3IgKGogPSAwOyBqIDwgb29ic2VsLT5lY2NieXRlczsgaisrKQotCQkJZWNjX2NvZGVbal0gPSBvb2JfZGF0YVtvb2JfY29uZmlnW2pdXTsKLQotCQkvKiBjb3JyZWN0IGRhdGEsIGlmIG5lY2NlY2FyeSAqLwotCQlmb3IgKGkgPSAwLCBqID0gMCwgZGF0aWR4ID0gMDsgaSA8IHRoaXMtPmVjY3N0ZXBzOyBpKyssIGRhdGlkeCArPSBlY2MpIHsKLQkJCWVjY19zdGF0dXMgPSB0aGlzLT5jb3JyZWN0X2RhdGEobXRkLCAmZGF0YV9wb2lbZGF0aWR4XSwgJmVjY19jb2RlW2pdLCAmZWNjX2NhbGNbal0pOwotCi0JCQkvKiBHZXQgbmV4dCBjaHVuayBvZiBlY2MgYnl0ZXMgKi8KLQkJCWogKz0gZWNjYnl0ZXM7Ci0KLQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIGEgZnMgc3VwcGxpZWQgb29iLWJ1ZmZlciwKLQkJCSAqIFRoaXMgaXMgdGhlIGxlZ2FjeSBtb2RlLiBVc2VkIGJ5IFlBRkZTMQotCQkJICogU2hvdWxkIGdvIGF3YXkgc29tZSBkYXkKLQkJCSAqLwotCQkJaWYgKG9vYl9idWYgJiYgb29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfUExBQ0UpIHsKLQkJCQlpbnQgKnAgPSAoaW50ICopKCZvb2JfZGF0YVttdGQtPm9vYnNpemVdKTsKLQkJCQlwW2ldID0gZWNjX3N0YXR1czsKLQkJCX0KLQotCQkJaWYgKChlY2Nfc3RhdHVzID09IC0xKSB8fCAoZWNjX3N0YXR1cyA+IChmbGFncyAmJiAweGZmKSkpIHsKLQkJCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9lY2M6ICIgIkZhaWxlZCBFQ0MgcmVhZCwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQkJCWVjY19mYWlsZWQrKzsKLQkJCX0KLQkJfQotCi0JcmVhZG9vYjoKLQkJLyogY2hlY2ssIGlmIHdlIGhhdmUgYSBmcyBzdXBwbGllZCBvb2ItYnVmZmVyICovCi0JCWlmIChvb2JfYnVmKSB7Ci0JCQkvKiB3aXRob3V0IGF1dG9wbGFjZS4gTGVnYWN5IG1vZGUgdXNlZCBieSBZQUZGUzEgKi8KLQkJCXN3aXRjaChvb2JzZWwtPnVzZWVjYykgewotCQkJY2FzZSBNVERfTkFOREVDQ19BVVRPUExBQ0U6Ci0JCQljYXNlIE1URF9OQU5ERUNDX0FVVE9QTF9VU1I6Ci0JCQkJLyogV2FsayB0aHJvdWdoIHRoZSBhdXRvcGxhY2UgY2h1bmtzICovCi0JCQkJZm9yIChpID0gMDsgb29ic2VsLT5vb2JmcmVlW2ldWzFdOyBpKyspIHsKLQkJCQkJaW50IGZyb20gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMF07Ci0JCQkJCWludCBudW0gPSBvb2JzZWwtPm9vYmZyZWVbaV1bMV07Ci0JCQkJCW1lbWNweSgmb29iX2J1Zltvb2JdLCAmb29iX2RhdGFbZnJvbV0sIG51bSk7Ci0JCQkJCW9vYiArPSBudW07Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBNVERfTkFOREVDQ19QTEFDRToKLQkJCQkvKiBZQUZGUzEgbGVnYWN5IG1vZGUgKi8KLQkJCQlvb2JfZGF0YSArPSB0aGlzLT5lY2NzdGVwcyAqIHNpemVvZiAoaW50KTsKLQkJCWRlZmF1bHQ6Ci0JCQkJb29iX2RhdGEgKz0gbXRkLT5vb2JzaXplOwotCQkJfQotCQl9Ci0JcmVhZGRhdGE6Ci0JCS8qIFBhcnRpYWwgcGFnZSByZWFkLCB0cmFuc2ZlciBkYXRhIGludG8gZnMgYnVmZmVyICovCi0JCWlmICghYWxpZ25lZCkgewotCQkJZm9yIChqID0gY29sOyBqIDwgZW5kICYmIHJlYWQgPCBsZW47IGorKykKLQkJCQlidWZbcmVhZCsrXSA9IGRhdGFfcG9pW2pdOwotCQkJdGhpcy0+cGFnZWJ1ZiA9IHJlYWxwYWdlOwotCQl9IGVsc2UKLQkJCXJlYWQgKz0gbXRkLT5vb2JibG9jazsKLQotCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkgKiBEbyB0aGlzIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zCi0JCSAqIGFyaXNlIGlmIGEgY2hpcCB3aGljaCBkb2VzIGF1dG8gaW5jcmVtZW50Ci0JCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCi0JCSovCi0JCWlmICghdGhpcy0+ZGV2X3JlYWR5KQotCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKLQkJZWxzZQotCQkJbmFuZF93YWl0X3JlYWR5KG10ZCk7Ci0KLQkJaWYgKHJlYWQgPT0gbGVuKQotCQkJYnJlYWs7Ci0KLQkJLyogRm9yIHN1YnNlcXVlbnQgcmVhZHMgYWxpZ24gdG8gcGFnZSBib3VuZGFyeS4gKi8KLQkJY29sID0gMDsKLQkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyAqLwotCQlyZWFscGFnZSsrOwotCi0JCXBhZ2UgPSByZWFscGFnZSAmIHRoaXMtPnBhZ2VtYXNrOwotCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCWlmICghcGFnZSkgewotCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKLQkJfQotCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudAotCQkgKiBvciBpZiB3ZSBoYXZlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5LgotCQkqLwotCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpCi0JCQlzbmRjbWQgPSAxOwotCX0KLQotCS8qIERlc2VsZWN0IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nIG9uIHRoZSBkZXZpY2UgKi8KLQlpZiAoZmxhZ3MgJiBOQU5EX0dFVF9ERVZJQ0UpCi0JCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKLQotCS8qCi0JICogUmV0dXJuIHN1Y2Nlc3MsIGlmIG5vIEVDQyBmYWlsdXJlcywgZWxzZSAtRUJBRE1TRwotCSAqIGZzIGRyaXZlciB3aWxsIHRha2UgY2FyZSBvZiB0aGF0LCBiZWNhdXNlCi0JICogcmV0bGVuID09IGRlc2lyZWQgbGVuIGFuZCByZXN1bHQgPT0gLUVCQURNU0cKLQkgKi8KLQkqcmV0bGVuID0gcmVhZDsKLQlyZXR1cm4gZWNjX2ZhaWxlZCA/IC1FQkFETVNHIDogMDsKKwkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKLSAqIG5hbmRfcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCByZWFkIG91dC1vZi1iYW5kCisgKiBuYW5kX3JlYWRfb29iX3N0ZCAtIFtSRVBMQUNBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgcmVhZCBmdW5jdGlvbgorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICogQHNuZGNtZDoJZmxhZyB3aGV0aGVyIHRvIGlzc3VlIHJlYWQgY29tbWFuZCBvciBub3QKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfb29iX3N0ZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSAgICAgaW50IHBhZ2UsIGludCBzbmRjbWQpCit7CisJaWYgKHNuZGNtZCkgeworCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRE9PQiwgMCwgcGFnZSk7CisJCXNuZGNtZCA9IDA7CisJfQorCWNoaXAtPnJlYWRfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKKwlyZXR1cm4gc25kY21kOworfQorCisvKioKKyAqIG5hbmRfcmVhZF9vb2Jfc3luZHJvbWUgLSBbUkVQTEFDQUJMRV0gT09CIGRhdGEgcmVhZCBmdW5jdGlvbiBmb3IgSFcgRUNDCisgKgkJCSAgICB3aXRoIHN5bmRyb21lcworICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAcGFnZToJcGFnZSBudW1iZXIgdG8gcmVhZAorICogQHNuZGNtZDoJZmxhZyB3aGV0aGVyIHRvIGlzc3VlIHJlYWQgY29tbWFuZCBvciBub3QKKyAqLworc3RhdGljIGludCBuYW5kX3JlYWRfb29iX3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgaW50IHBhZ2UsIGludCBzbmRjbWQpCit7CisJdWludDhfdCAqYnVmID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgbGVuZ3RoID0gbXRkLT5vb2JzaXplOworCWludCBjaHVuayA9IGNoaXAtPmVjYy5ieXRlcyArIGNoaXAtPmVjYy5wcmVwYWQgKyBjaGlwLT5lY2MucG9zdHBhZDsKKwlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCXVpbnQ4X3QgKmJ1ZnBvaSA9IGJ1ZjsKKwlpbnQgaSwgdG9yZWFkLCBzbmRybmQgPSAwLCBwb3M7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIGNoaXAtPmVjYy5zaXplLCBwYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+ZWNjLnN0ZXBzOyBpKyspIHsKKwkJaWYgKHNuZHJuZCkgeworCQkJcG9zID0gZWNjc2l6ZSArIGkgKiAoZWNjc2l6ZSArIGNodW5rKTsKKwkJCWlmIChtdGQtPndyaXRlc2l6ZSA+IDUxMikKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUk5ET1VULCBwb3MsIC0xKTsKKwkJCWVsc2UKKwkJCQljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRDAsIHBvcywgcGFnZSk7CisJCX0gZWxzZQorCQkJc25kcm5kID0gMTsKKwkJdG9yZWFkID0gbWluX3QoaW50LCBsZW5ndGgsIGNodW5rKTsKKwkJY2hpcC0+cmVhZF9idWYobXRkLCBidWZwb2ksIHRvcmVhZCk7CisJCWJ1ZnBvaSArPSB0b3JlYWQ7CisJCWxlbmd0aCAtPSB0b3JlYWQ7CisJfQorCWlmIChsZW5ndGggPiAwKQorCQljaGlwLT5yZWFkX2J1ZihtdGQsIGJ1ZnBvaSwgbGVuZ3RoKTsKKworCXJldHVybiAxOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iX3N0ZCAtIFtSRVBMQUNBQkxFXSB0aGUgbW9zdCBjb21tb24gT09CIGRhdGEgd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHdyaXRlCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2Jfc3RkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICAgICAgaW50IHBhZ2UpCit7CisJaW50IHN0YXR1cyA9IDA7CisJY29uc3QgdWludDhfdCAqYnVmID0gY2hpcC0+b29iX3BvaTsKKwlpbnQgbGVuZ3RoID0gbXRkLT5vb2JzaXplOworCisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPndyaXRlc2l6ZSwgcGFnZSk7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgYnVmLCBsZW5ndGgpOworCS8qIFNlbmQgY29tbWFuZCB0byBwcm9ncmFtIHRoZSBPT0IgZGF0YSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9QQUdFUFJPRywgLTEsIC0xKTsKKworCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIG5hbmRfd3JpdGVfb29iX3N5bmRyb21lIC0gW1JFUExBQ0FCTEVdIE9PQiBkYXRhIHdyaXRlIGZ1bmN0aW9uIGZvciBIVyBFQ0MKKyAqCQkJICAgICB3aXRoIHN5bmRyb21lIC0gb25seSBmb3IgbGFyZ2UgcGFnZSBmbGFzaCAhCisgKiBAbXRkOgltdGQgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBjaGlwOgluYW5kIGNoaXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEBwYWdlOglwYWdlIG51bWJlciB0byB3cml0ZQorICovCitzdGF0aWMgaW50IG5hbmRfd3JpdGVfb29iX3N5bmRyb21lKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCSAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBwYWdlKQoreworCWludCBjaHVuayA9IGNoaXAtPmVjYy5ieXRlcyArIGNoaXAtPmVjYy5wcmVwYWQgKyBjaGlwLT5lY2MucG9zdHBhZDsKKwlpbnQgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplLCBsZW5ndGggPSBtdGQtPm9vYnNpemU7CisJaW50IGksIGxlbiwgcG9zLCBzdGF0dXMgPSAwLCBzbmRjbWQgPSAwLCBzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwljb25zdCB1aW50OF90ICpidWZwb2kgPSBjaGlwLT5vb2JfcG9pOworCisJLyoKKwkgKiBkYXRhLWVjYy1kYXRhLWVjYyAuLi4gZWNjLW9vYgorCSAqIG9yCisJICogZGF0YS1wYWQtZWNjLXBhZC1kYXRhLXBhZCAuLi4uIGVjYy1wYWQtb29iCisJICovCisJaWYgKCFjaGlwLT5lY2MucHJlcGFkICYmICFjaGlwLT5lY2MucG9zdHBhZCkgeworCQlwb3MgPSBzdGVwcyAqIChlY2NzaXplICsgY2h1bmspOworCQlzdGVwcyA9IDA7CisJfSBlbHNlCisJCXBvcyA9IGVjY3NpemUgKyBjaHVuazsKKworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TRVFJTiwgcG9zLCBwYWdlKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3RlcHM7IGkrKykgeworCQlpZiAoc25kY21kKSB7CisJCQlpZiAobXRkLT53cml0ZXNpemUgPD0gNTEyKSB7CisJCQkJdWludDMyX3QgZmlsbCA9IDB4RkZGRkZGRkY7CisKKwkJCQlsZW4gPSBlY2NzaXplOworCQkJCXdoaWxlIChsZW4gPiAwKSB7CisJCQkJCWludCBudW0gPSBtaW5fdChpbnQsIGxlbiwgNCk7CisJCQkJCWNoaXAtPndyaXRlX2J1ZihtdGQsICh1aW50OF90ICopJmZpbGwsCisJCQkJCQkJbnVtKTsKKwkJCQkJbGVuIC09IG51bTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXBvcyA9IGVjY3NpemUgKyBpICogKGVjY3NpemUgKyBjaHVuayk7CisJCQkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JORElOLCBwb3MsIC0xKTsKKwkJCX0KKwkJfSBlbHNlCisJCQlzbmRjbWQgPSAxOworCQlsZW4gPSBtaW5fdChpbnQsIGxlbmd0aCwgY2h1bmspOworCQljaGlwLT53cml0ZV9idWYobXRkLCBidWZwb2ksIGxlbik7CisJCWJ1ZnBvaSArPSBsZW47CisJCWxlbmd0aCAtPSBsZW47CisJfQorCWlmIChsZW5ndGggPiAwKQorCQljaGlwLT53cml0ZV9idWYobXRkLCBidWZwb2ksIGxlbmd0aCk7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7CisJc3RhdHVzID0gY2hpcC0+d2FpdGZ1bmMobXRkLCBjaGlwKTsKKworCXJldHVybiBzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMID8gLUVJTyA6IDA7Cit9CisKKy8qKgorICogbmFuZF9kb19yZWFkX29vYiAtIFtJbnRlcm5dIE5BTkQgcmVhZCBvdXQtb2YtYmFuZAogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQHJldGxlbjoJcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKLSAqIEBidWY6CXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCisgKiBAb3BzOglvb2Igb3BlcmF0aW9ucyBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKICAqCiAgKiBOQU5EIHJlYWQgb3V0LW9mLWJhbmQgZGF0YSBmcm9tIHRoZSBzcGFyZSBhcmVhCiAgKi8KLXN0YXRpYyBpbnQgbmFuZF9yZWFkX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKiByZXRsZW4sIHVfY2hhciAqIGJ1ZikKK3N0YXRpYyBpbnQgbmFuZF9kb19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0JaW50IGksIGNvbCwgcGFnZSwgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7CisJaW50IHBhZ2UsIHJlYWxwYWdlLCBjaGlwbnIsIHNuZGNtZCA9IDE7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgYmxrY2hlY2sgPSAoMSA8PCAoY2hpcC0+cGh5c19lcmFzZV9zaGlmdCAtIGNoaXAtPnBhZ2Vfc2hpZnQpKSAtIDE7CisJaW50IHJlYWRsZW4gPSBvcHMtPmxlbjsKKwl1aW50OF90ICpidWYgPSBvcHMtPm9vYmJ1ZjsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF9yZWFkX29vYjogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfcmVhZF9vb2I6IGZyb20gPSAweCUwOEx4LCBsZW4gPSAlaVxuIiwKKwkgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZyb20sIHJlYWRsZW4pOworCisJY2hpcG5yID0gKGludCkoZnJvbSA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKIAkvKiBTaGlmdCB0byBnZXQgcGFnZSAqLwotCXBhZ2UgPSAoaW50KShmcm9tID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWNoaXBuciA9IChpbnQpKGZyb20gPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJcmVhbHBhZ2UgPSAoaW50KShmcm9tID4+IGNoaXAtPnBhZ2Vfc2hpZnQpOworCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOwogCi0JLyogTWFzayB0byBnZXQgY29sdW1uICovCi0JY29sID0gZnJvbSAmIChtdGQtPm9vYnNpemUgLSAxKTsKKwljaGlwLT5vb2JfcG9pID0gY2hpcC0+YnVmZmVycy5vb2JyYnVmOwogCi0JLyogSW5pdGlhbGl6ZSByZXR1cm4gbGVuZ3RoIHZhbHVlICovCi0JKnJldGxlbiA9IDA7CisJd2hpbGUoMSkgeworCQlzbmRjbWQgPSBjaGlwLT5lY2MucmVhZF9vb2IobXRkLCBjaGlwLCBwYWdlLCBzbmRjbWQpOworCQlidWYgPSBuYW5kX3RyYW5zZmVyX29vYihjaGlwLCBidWYsIG9wcyk7CiAKLQkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7Ci0JCSpyZXRsZW4gPSAwOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJCXJlYWRsZW4gLT0gb3BzLT5vb2JsZW47CisJCWlmICghcmVhZGxlbikKKwkJCWJyZWFrOwogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQgLCBGTF9SRUFESU5HKTsKLQotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0KLQkvKiBTZW5kIHRoZSByZWFkIGNvbW1hbmQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURPT0IsIGNvbCwgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkvKgotCSAqIFJlYWQgdGhlIGRhdGEsIGlmIHdlIHJlYWQgbW9yZSB0aGFuIG9uZSBwYWdlCi0JICogb29iIGRhdGEsIGxldCB0aGUgZGV2aWNlIHRyYW5zZmVyIHRoZSBkYXRhICEKLQkgKi8KLQlpID0gMDsKLQl3aGlsZSAoaSA8IGxlbikgewotCQlpbnQgdGhpc2xlbiA9IG10ZC0+b29ic2l6ZSAtIGNvbDsKLQkJdGhpc2xlbiA9IG1pbl90KGludCwgdGhpc2xlbiwgbGVuKTsKLQkJdGhpcy0+cmVhZF9idWYobXRkLCAmYnVmW2ldLCB0aGlzbGVuKTsKLQkJaSArPSB0aGlzbGVuOwotCi0JCS8qIFJlYWQgbW9yZSA/ICovCi0JCWlmIChpIDwgbGVuKSB7Ci0JCQlwYWdlKys7Ci0JCQljb2wgPSAwOwotCi0JCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCQlpZiAoIShwYWdlICYgdGhpcy0+cGFnZW1hc2spKSB7Ci0JCQkJY2hpcG5yKys7Ci0JCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwotCQkJfQotCi0JCQkvKiBBcHBseSBkZWxheSBvciB3YWl0IGZvciByZWFkeS9idXN5IHBpbgotCQkJICogRG8gdGhpcyBiZWZvcmUgdGhlIEFVVE9JTkNSIGNoZWNrLCBzbyBubyBwcm9ibGVtcwotCQkJICogYXJpc2UgaWYgYSBjaGlwIHdoaWNoIGRvZXMgYXV0byBpbmNyZW1lbnQKLQkJCSAqIGlzIG1hcmtlZCBhcyBOT0FVVE9JTkNSIGJ5IHRoZSBib2FyZCBkcml2ZXIuCisJCWlmICghKGNoaXAtPm9wdGlvbnMgJiBOQU5EX05PX1JFQURSRFkpKSB7CisJCQkvKgorCQkJICogQXBwbHkgZGVsYXkgb3Igd2FpdCBmb3IgcmVhZHkvYnVzeSBwaW4uIERvIHRoaXMKKwkJCSAqIGJlZm9yZSB0aGUgQVVUT0lOQ1IgY2hlY2ssIHNvIG5vIHByb2JsZW1zIGFyaXNlIGlmIGEKKwkJCSAqIGNoaXAgd2hpY2ggZG9lcyBhdXRvIGluY3JlbWVudCBpcyBtYXJrZWQgYXMKKwkJCSAqIE5PQVVUT0lOQ1IgYnkgdGhlIGJvYXJkIGRyaXZlci4KIAkJCSAqLwotCQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQkJdWRlbGF5ICh0aGlzLT5jaGlwX2RlbGF5KTsKKwkJCWlmICghY2hpcC0+ZGV2X3JlYWR5KQorCQkJCXVkZWxheShjaGlwLT5jaGlwX2RlbGF5KTsKIAkJCWVsc2UKIAkJCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKLQotCQkJLyogQ2hlY2ssIGlmIHRoZSBjaGlwIHN1cHBvcnRzIGF1dG8gcGFnZSBpbmNyZW1lbnQKLQkJCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCi0JCQkqLwotCQkJaWYgKCFOQU5EX0NBTkFVVE9JTkNSKHRoaXMpIHx8ICEocGFnZSAmIGJsb2NrY2hlY2spKSB7Ci0JCQkJLyogRm9yIHN1YnNlcXVlbnQgcGFnZSByZWFkcyBzZXQgb2Zmc2V0IHRvIDAgKi8KLQkJCSAgICAgICAgdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFET09CLCAweDAsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7Ci0JCQl9CiAJCX0KLQl9CiAKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOworCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCisJCXJlYWxwYWdlKys7CiAKLQkvKiBSZXR1cm4gaGFwcHkgKi8KLQkqcmV0bGVuID0gbGVuOwotCXJldHVybiAwOwotfQorCQlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLworCQlpZiAoIXBhZ2UpIHsKKwkJCWNoaXBucisrOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJCX0KIAotLyoqCi0gKiBuYW5kX3JlYWRfcmF3IC0gW0dFTkVSSUNdIFJlYWQgcmF3IGRhdGEgaW5jbHVkaW5nIG9vYiBpbnRvIGJ1ZmZlcgotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBidWY6CXRlbXBvcmFyeSBidWZmZXIKLSAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAotICogQG9vYmxlbjoJbnVtYmVyIG9mIG9vYiBkYXRhIGJ5dGVzIHRvIHJlYWQKLSAqCi0gKiBSZWFkIHJhdyBkYXRhIGluY2x1ZGluZyBvb2IgaW50byBidWZmZXIKLSAqLwotaW50IG5hbmRfcmVhZF9yYXcgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3Qgb29ibGVuKQotewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IHBhZ2UgPSAoaW50KSAoZnJvbSA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQlpbnQgY2hpcCA9IChpbnQpIChmcm9tID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCWludCBzbmRjbWQgPSAxOwotCWludCBjbnQgPSAwOwotCWludCBwYWdlc2l6ZSA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JaW50CWJsb2NrY2hlY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKSAtIDE7Ci0KLQkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCi0JaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9yYXc6IEF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIEdyYWIgdGhlIGxvY2sgYW5kIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGF2YWlsYWJsZSAqLwotCW5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkICwgRkxfUkVBRElORyk7Ci0KLQl0aGlzLT5zZWxlY3RfY2hpcCAobXRkLCBjaGlwKTsKLQotCS8qIEFkZCByZXF1ZXN0ZWQgb29iIGxlbmd0aCAqLwotCWxlbiArPSBvb2JsZW47Ci0KLQl3aGlsZSAobGVuKSB7Ci0JCWlmIChzbmRjbWQpCi0JCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQlzbmRjbWQgPSAwOwotCi0JCXRoaXMtPnJlYWRfYnVmIChtdGQsICZidWZbY250XSwgcGFnZXNpemUpOwotCi0JCWxlbiAtPSBwYWdlc2l6ZTsKLQkJY250ICs9IHBhZ2VzaXplOwotCQlwYWdlKys7Ci0KLQkJaWYgKCF0aGlzLT5kZXZfcmVhZHkpCi0JCQl1ZGVsYXkgKHRoaXMtPmNoaXBfZGVsYXkpOwotCQllbHNlCi0JCQluYW5kX3dhaXRfcmVhZHkobXRkKTsKLQotCQkvKiBDaGVjaywgaWYgdGhlIGNoaXAgc3VwcG9ydHMgYXV0byBwYWdlIGluY3JlbWVudCAqLwotCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IodGhpcykgfHwgIShwYWdlICYgYmxvY2tjaGVjaykpCisJCS8qIENoZWNrLCBpZiB0aGUgY2hpcCBzdXBwb3J0cyBhdXRvIHBhZ2UgaW5jcmVtZW50CisJCSAqIG9yIGlmIHdlIGhhdmUgaGl0IGEgYmxvY2sgYm91bmRhcnkuCisJCSAqLworCQlpZiAoIU5BTkRfQ0FOQVVUT0lOQ1IoY2hpcCkgfHwgIShwYWdlICYgYmxrY2hlY2spKQogCQkJc25kY21kID0gMTsKIAl9CiAKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOworCW9wcy0+cmV0bGVuID0gb3BzLT5sZW47CiAJcmV0dXJuIDA7CiB9CiAKLQogLyoqCi0gKiBuYW5kX3ByZXBhcmVfb29iYnVmIC0gW0dFTkVSSUNdIFByZXBhcmUgdGhlIG91dCBvZiBiYW5kIGJ1ZmZlcgorICogbmFuZF9yZWFkX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHJlYWQgZGF0YSBhbmQvb3Igb3V0LW9mLWJhbmQKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAZnNidWY6CWJ1ZmZlciBnaXZlbiBieSBmcyBkcml2ZXIKLSAqIEBvb2JzZWw6CW91dCBvZiBiYW5kIHNlbGVjdGlvbiBzdHJ1Y3RyZQotICogQGF1dG9wbGFjZToJMSA9IHBsYWNlIGdpdmVuIGJ1ZmZlciBpbnRvIHRoZSBvb2IgYnl0ZXMKLSAqIEBudW1wYWdlczoJbnVtYmVyIG9mIHBhZ2VzIHRvIHByZXBhcmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQogICoKLSAqIFJldHVybjoKLSAqIDEuIEZpbGVzeXN0ZW0gYnVmZmVyIGF2YWlsYWJsZSBhbmQgYXV0b3BsYWNlbWVudCBpcyBvZmYsCi0gKiAgICByZXR1cm4gZmlsZXN5c3RlbSBidWZmZXIKLSAqIDIuIE5vIGZpbGVzeXN0ZW0gYnVmZmVyIG9yIGF1dG9wbGFjZSBpcyBvZmYsIHJldHVybiBpbnRlcm5hbAotICogICAgYnVmZmVyCi0gKiAzLiBGaWxlc3lzdGVtIGJ1ZmZlciBpcyBnaXZlbiBhbmQgYXV0b3BsYWNlIHNlbGVjdGVkCi0gKiAgICBwdXQgZGF0YSBmcm9tIGZzIGJ1ZmZlciBpbnRvIGludGVybmFsIGJ1ZmZlciBhbmQKLSAqICAgIHJldHJ1biBpbnRlcm5hbCBidWZmZXIKLSAqCi0gKiBOb3RlOiBUaGUgaW50ZXJuYWwgYnVmZmVyIGlzIGZpbGxlZCB3aXRoIDB4ZmYuIFRoaXMgbXVzdAotICogYmUgZG9uZSBvbmx5IG9uY2UsIHdoZW4gbm8gYXV0b3BsYWNlbWVudCBoYXBwZW5zCi0gKiBBdXRvcGxhY2VtZW50IHNldHMgdGhlIGJ1ZmZlciBkaXJ0eSBmbGFnLCB3aGljaAotICogZm9yY2VzIHRoZSAweGZmIGZpbGwgYmVmb3JlIHVzaW5nIHRoZSBidWZmZXIgYWdhaW4uCi0gKgotKi8KLXN0YXRpYyB1X2NoYXIgKiBuYW5kX3ByZXBhcmVfb29iYnVmIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpmc2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsLAotCQlpbnQgYXV0b3BsYWNlLCBpbnQgbnVtcGFnZXMpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgaSwgbGVuLCBvZnM7Ci0KLQkvKiBaZXJvIGNvcHkgZnMgc3VwcGxpZWQgYnVmZmVyICovCi0JaWYgKGZzYnVmICYmICFhdXRvcGxhY2UpCi0JCXJldHVybiBmc2J1ZjsKLQotCS8qIENoZWNrLCBpZiB0aGUgYnVmZmVyIG11c3QgYmUgZmlsbGVkIHdpdGggZmYgYWdhaW4gKi8KLQlpZiAodGhpcy0+b29iZGlydHkpIHsKLQkJbWVtc2V0ICh0aGlzLT5vb2JfYnVmLCAweGZmLAotCQkJbXRkLT5vb2JzaXplIDw8ICh0aGlzLT5waHlzX2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCkpOwotCQl0aGlzLT5vb2JkaXJ0eSA9IDA7Ci0JfQotCi0JLyogSWYgd2UgaGF2ZSBubyBhdXRvcGxhY2VtZW50IG9yIG5vIGZzIGJ1ZmZlciB1c2UgdGhlIGludGVybmFsIG9uZSAqLwotCWlmICghYXV0b3BsYWNlIHx8ICFmc2J1ZikKLQkJcmV0dXJuIHRoaXMtPm9vYl9idWY7Ci0KLQkvKiBXYWxrIHRocm91Z2ggdGhlIHBhZ2VzIGFuZCBwbGFjZSB0aGUgZGF0YSAqLwotCXRoaXMtPm9vYmRpcnR5ID0gMTsKLQlvZnMgPSAwOwotCXdoaWxlIChudW1wYWdlcy0tKSB7Ci0JCWZvciAoaSA9IDAsIGxlbiA9IDA7IGxlbiA8IG10ZC0+b29iYXZhaWw7IGkrKykgewotCQkJaW50IHRvID0gb2ZzICsgb29ic2VsLT5vb2JmcmVlW2ldWzBdOwotCQkJaW50IG51bSA9IG9vYnNlbC0+b29iZnJlZVtpXVsxXTsKLQkJCW1lbWNweSAoJnRoaXMtPm9vYl9idWZbdG9dLCBmc2J1ZiwgbnVtKTsKLQkJCWxlbiArPSBudW07Ci0JCQlmc2J1ZiArPSBudW07Ci0JCX0KLQkJb2ZzICs9IG10ZC0+b29iYXZhaWw7Ci0JfQotCXJldHVybiB0aGlzLT5vb2JfYnVmOwotfQotCi0jZGVmaW5lIE5PVEFMSUdORUQoeCkgKHggJiAobXRkLT5vb2JibG9jay0xKSkgIT0gMAotCi0vKioKLSAqIG5hbmRfd3JpdGUgLSBbTVREIEludGVyZmFjZV0gY29tcGFiaWxpdHkgZnVuY3Rpb24gZm9yIG5hbmRfd3JpdGVfZWNjCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG5hbmRfd3JpdGVfZWNjIHdpdGggb29iIGJ1ZmZlciBhbmQgb29ic2VsID0gTlVMTAotICoKLSovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKQotewotCXJldHVybiAobmFuZF93cml0ZV9lY2MgKG10ZCwgdG8sIGxlbiwgcmV0bGVuLCBidWYsIE5VTEwsIE5VTEwpKTsKLX0KLQotLyoqCi0gKiBuYW5kX3dyaXRlX2VjYyAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIHdpdGggRUNDCi0gKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCi0gKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQotICogQGVjY2J1ZjoJZmlsZXN5c3RlbSBzdXBwbGllZCBvb2IgZGF0YSBidWZmZXIKLSAqIEBvb2JzZWw6CW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCi0gKgotICogTkFORCB3cml0ZSB3aXRoIEVDQworICogTkFORCByZWFkIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kIGRhdGEKICAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKLQkJCSAgIHNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBlY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK3N0YXRpYyBpbnQgbmFuZF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCiB7Ci0JaW50IHN0YXJ0cGFnZSwgcGFnZSwgcmV0ID0gLUVJTywgb29iID0gMCwgd3JpdHRlbiA9IDAsIGNoaXBucjsKLQlpbnQgYXV0b3BsYWNlID0gMCwgbnVtcGFnZXMsIHRvdGFscGFnZXM7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQl1X2NoYXIgKm9vYmJ1ZiwgKmJ1ZnN0YXJ0OwotCWludAlwcGJsb2NrID0gKDEgPDwgKHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KSk7CisJaW50ICgqcmVhZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCSB1aW50OF90ICpidWYpID0gTlVMTDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQgPSAtRU5PVFNVUFA7CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfZWNjOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworCW9wcy0+cmV0bGVuID0gMDsKIAotCS8qIEluaXRpYWxpemUgcmV0bGVuLCBpbiBjYXNlIG9mIGVhcmx5IGV4aXQgKi8KLQkqcmV0bGVuID0gMDsKLQotCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KLQlpZiAoKHRvICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfZWNjOiBBdHRlbXB0IHRvIHdyaXRlIHBhc3QgZW5kIG9mIHBhZ2VcbiIpOworCS8qIERvIG5vdCBhbGxvdyByZWFkcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KKwlpZiAoKGZyb20gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKKwkJICAgICAgIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0JaWYgKE5PVEFMSUdORUQgKHRvKSB8fCBOT1RBTElHTkVEKGxlbikpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1JFQURJTkcpOwogCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0JbmFuZF9nZXRfZGV2aWNlICh0aGlzLCBtdGQsIEZMX1dSSVRJTkcpOworCXN3aXRjaChvcHMtPm1vZGUpIHsKKwljYXNlIE1URF9PT0JfUExBQ0U6CisJY2FzZSBNVERfT09CX0FVVE86CisJCWJyZWFrOwogCi0JLyogQ2FsY3VsYXRlIGNoaXBuciAqLwotCWNoaXBuciA9IChpbnQpKHRvID4+IHRoaXMtPmNoaXBfc2hpZnQpOwotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJY2FzZSBNVERfT09CX1JBVzoKKwkJLyogUmVwbGFjZSB0aGUgcmVhZF9wYWdlIGFsZ29yaXRobSB0ZW1wb3JhcnkgKi8KKwkJcmVhZF9wYWdlID0gY2hpcC0+ZWNjLnJlYWRfcGFnZTsKKwkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX3JhdzsKKwkJYnJlYWs7CiAKLQkvKiBDaGVjaywgaWYgaXQgaXMgd3JpdGUgcHJvdGVjdGVkICovCi0JaWYgKG5hbmRfY2hlY2tfd3AobXRkKSkKKwlkZWZhdWx0OgogCQlnb3RvIG91dDsKLQotCS8qIGlmIG9vYnNlbCBpcyBOVUxMLCB1c2UgY2hpcCBkZWZhdWx0cyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKLQotCS8qIEF1dG9wbGFjZSBvZiBvb2IgZGF0YSA/IFVzZSB0aGUgZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lICovCi0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgewotCQlvb2JzZWwgPSB0aGlzLT5hdXRvb29iOwotCQlhdXRvcGxhY2UgPSAxOwogCX0KLQlpZiAob29ic2VsLT51c2VlY2MgPT0gTVREX05BTkRFQ0NfQVVUT1BMX1VTUikKLQkJYXV0b3BsYWNlID0gMTsKIAotCS8qIFNldHVwIHZhcmlhYmxlcyBhbmQgb29iIGJ1ZmZlciAqLwotCXRvdGFscGFnZXMgPSBsZW4gPj4gdGhpcy0+cGFnZV9zaGlmdDsKLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIHdyaXRlIHRvIHRoZSBjYWNoZWQgcGFnZSAqLwotCWlmIChwYWdlIDw9IHRoaXMtPnBhZ2VidWYgJiYgdGhpcy0+cGFnZWJ1ZiA8IChwYWdlICsgdG90YWxwYWdlcykpCi0JCXRoaXMtPnBhZ2VidWYgPSAtMTsKLQotCS8qIFNldCBpdCByZWxhdGl2ZSB0byBjaGlwICovCi0JcGFnZSAmPSB0aGlzLT5wYWdlbWFzazsKLQlzdGFydHBhZ2UgPSBwYWdlOwotCS8qIENhbGMgbnVtYmVyIG9mIHBhZ2VzIHdlIGNhbiB3cml0ZSBpbiBvbmUgZ28gKi8KLQludW1wYWdlcyA9IG1pbiAocHBibG9jayAtIChzdGFydHBhZ2UgICYgKHBwYmxvY2sgLSAxKSksIHRvdGFscGFnZXMpOwotCW9vYmJ1ZiA9IG5hbmRfcHJlcGFyZV9vb2JidWYgKG10ZCwgZWNjYnVmLCBvb2JzZWwsIGF1dG9wbGFjZSwgbnVtcGFnZXMpOwotCWJ1ZnN0YXJ0ID0gKHVfY2hhciAqKWJ1ZjsKLQotCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgaXMgd3JpdHRlbiAqLwotCXdoaWxlICh3cml0dGVuIDwgbGVuKSB7Ci0KLQkJdGhpcy0+ZGF0YV9wb2kgPSAodV9jaGFyKikgJmJ1Zlt3cml0dGVuXTsKLQkJLyogV3JpdGUgb25lIHBhZ2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSB0byB3cml0ZQotCQkgKiBvciB0aGUgbGFzdCBwYWdlIGluIHRoaXMgYmxvY2ssIHRoZW4gdXNlIHRoZQotCQkgKiByZWFsIHBhZ2Vwcm9ncmFtIGNvbW1hbmQsIGVsc2Ugc2VsZWN0IGNhY2hlZCBwcm9ncmFtbWluZwotCQkgKiBpZiBzdXBwb3J0ZWQgYnkgdGhlIGNoaXAuCi0JCSAqLwotCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSwgJm9vYmJ1Zltvb2JdLCBvb2JzZWwsICgtLW51bXBhZ2VzID4gMCkpOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfd3JpdGVfZWNjOiB3cml0ZV9wYWdlIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCS8qIE5leHQgb29iIHBhZ2UgKi8KLQkJb29iICs9IG10ZC0+b29ic2l6ZTsKLQkJLyogVXBkYXRlIHdyaXR0ZW4gYnl0ZXMgY291bnQgKi8KLQkJd3JpdHRlbiArPSBtdGQtPm9vYmJsb2NrOwotCQlpZiAod3JpdHRlbiA9PSBsZW4pCi0JCQlnb3RvIGNtcDsKLQotCQkvKiBJbmNyZW1lbnQgcGFnZSBhZGRyZXNzICovCi0JCXBhZ2UrKzsKLQotCQkvKiBIYXZlIHdlIGhpdCBhIGJsb2NrIGJvdW5kYXJ5ID8gVGhlbiB3ZSBoYXZlIHRvIHZlcmlmeSBhbmQKLQkJICogaWYgdmVyaWZ5IGlzIG9rLCB3ZSBoYXZlIHRvIHNldHVwIHRoZSBvb2IgYnVmZmVyIGZvcgotCQkgKiB0aGUgbmV4dCBwYWdlcy4KLQkJKi8KLQkJaWYgKCEocGFnZSAmIChwcGJsb2NrIC0gMSkpKXsKLQkJCWludCBvZnM7Ci0JCQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotCQkJcmV0ID0gbmFuZF92ZXJpZnlfcGFnZXMgKG10ZCwgdGhpcywgc3RhcnRwYWdlLAotCQkJCXBhZ2UgLSBzdGFydHBhZ2UsCi0JCQkJb29iYnVmLCBvb2JzZWwsIGNoaXBuciwgKGVjY2J1ZiAhPSBOVUxMKSk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX2VjYzogdmVyaWZ5X3BhZ2VzIGZhaWxlZCAlZFxuIiwgcmV0KTsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCSpyZXRsZW4gPSB3cml0dGVuOwotCi0JCQlvZnMgPSBhdXRvcGxhY2UgPyBtdGQtPm9vYmF2YWlsIDogbXRkLT5vb2JzaXplOwotCQkJaWYgKGVjY2J1ZikKLQkJCQllY2NidWYgKz0gKHBhZ2UgLSBzdGFydHBhZ2UpICogb2ZzOwotCQkJdG90YWxwYWdlcyAtPSBwYWdlIC0gc3RhcnRwYWdlOwotCQkJbnVtcGFnZXMgPSBtaW4gKHRvdGFscGFnZXMsIHBwYmxvY2spOwotCQkJcGFnZSAmPSB0aGlzLT5wYWdlbWFzazsKLQkJCXN0YXJ0cGFnZSA9IHBhZ2U7Ci0JCQlvb2JidWYgPSBuYW5kX3ByZXBhcmVfb29iYnVmIChtdGQsIGVjY2J1Ziwgb29ic2VsLAotCQkJCQlhdXRvcGxhY2UsIG51bXBhZ2VzKTsKLQkJCW9vYiA9IDA7Ci0JCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCQlpZiAoIXBhZ2UpIHsKLQkJCQljaGlwbnIrKzsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogVmVyaWZ5IHRoZSByZW1haW5pbmcgcGFnZXMgKi8KLWNtcDoKLQl0aGlzLT5kYXRhX3BvaSA9IGJ1ZnN0YXJ0OwotIAlyZXQgPSBuYW5kX3ZlcmlmeV9wYWdlcyAobXRkLCB0aGlzLCBzdGFydHBhZ2UsIHRvdGFscGFnZXMsCi0JCW9vYmJ1Ziwgb29ic2VsLCBjaGlwbnIsIChlY2NidWYgIT0gTlVMTCkpOwotCWlmICghcmV0KQotCQkqcmV0bGVuID0gd3JpdHRlbjsKKwlpZiAoIW9wcy0+ZGF0YnVmKQorCQlyZXQgPSBuYW5kX2RvX3JlYWRfb29iKG10ZCwgZnJvbSwgb3BzKTsKIAllbHNlCi0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9lY2M6IHZlcmlmeV9wYWdlcyBmYWlsZWQgJWRcbiIsIHJldCk7CisJCXJldCA9IG5hbmRfZG9fcmVhZF9vcHMobXRkLCBmcm9tLCBvcHMpOwogCi1vdXQ6Ci0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCWlmICh1bmxpa2VseShvcHMtPm1vZGUgPT0gTVREX09PQl9SQVcpKQorCQljaGlwLT5lY2MucmVhZF9wYWdlID0gcmVhZF9wYWdlOworIG91dDoKIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCiAKIC8qKgotICogbmFuZF93cml0ZV9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBvdXQtb2YtYmFuZAotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB0bzoJCW9mZnNldCB0byB3cml0ZSB0bwotICogQGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCi0gKiBAcmV0bGVuOglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQGJ1ZjoJdGhlIGRhdGEgdG8gd3JpdGUKLSAqCi0gKiBOQU5EIHdyaXRlIG91dC1vZi1iYW5kCisgKiBuYW5kX3dyaXRlX3BhZ2VfcmF3IC0gW0ludGVybl0gcmF3IHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKICAqLwotc3RhdGljIGludCBuYW5kX3dyaXRlX29vYiAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICogcmV0bGVuLCBjb25zdCB1X2NoYXIgKiBidWYpCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2VfcmF3KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCWNvbnN0IHVpbnQ4X3QgKmJ1ZikKIHsKLQlpbnQgY29sdW1uLCBwYWdlLCBzdGF0dXMsIHJldCA9IC1FSU8sIGNoaXBucjsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWNoaXAtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbXRkLT53cml0ZXNpemUpOworCWNoaXAtPndyaXRlX2J1ZihtdGQsIGNoaXAtPm9vYl9wb2ksIG10ZC0+b29ic2l6ZSk7Cit9CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfb29iOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2MgLSB7UkVQTEFDQUJMRV0gc29mdHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX3N3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCWludCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOwogCi0JLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KLQlwYWdlID0gKGludCkgKHRvID4+IHRoaXMtPnBhZ2Vfc2hpZnQpOwotCWNoaXBuciA9IChpbnQpICh0byA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKKwkvKiBTb2Z0d2FyZSBlY2MgY2FsY3VsYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBlY2NzdGVwczsgZWNjc3RlcHMtLSwgaSArPSBlY2NieXRlcywgcCArPSBlY2NzaXplKQorCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsKIAotCS8qIE1hc2sgdG8gZ2V0IGNvbHVtbiAqLwotCWNvbHVtbiA9IHRvICYgKG10ZC0+b29ic2l6ZSAtIDEpOworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5lY2MudG90YWw7IGkrKykKKwkJY2hpcC0+b29iX3BvaVtlY2Nwb3NbaV1dID0gZWNjX2NhbGNbaV07CiAKLQkvKiBJbml0aWFsaXplIHJldHVybiBsZW5ndGggdmFsdWUgKi8KLQkqcmV0bGVuID0gMDsKKwluYW5kX3dyaXRlX3BhZ2VfcmF3KG10ZCwgY2hpcCwgYnVmKTsKK30KIAotCS8qIERvIG5vdCBhbGxvdyB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlICovCi0JaWYgKChjb2x1bW4gKyBsZW4pID4gbXRkLT5vb2JzaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6IEF0dGVtcHQgdG8gd3JpdGUgcGFzdCBlbmQgb2YgcGFnZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2VfaHdlY2MgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIGJhc2VkIHBhZ2Ugd3JpdGUgZnVuY3Rpb24KKyAqIEBtdGQ6CW10ZCBpbmZvIHN0cnVjdHVyZQorICogQGNoaXA6CW5hbmQgY2hpcCBpbmZvIHN0cnVjdHVyZQorICogQGJ1ZjoJZGF0YSBidWZmZXIKKyAqLworc3RhdGljIHZvaWQgbmFuZF93cml0ZV9wYWdlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCSAgY29uc3QgdWludDhfdCAqYnVmKQoreworCWludCBpLCBlY2NzaXplID0gY2hpcC0+ZWNjLnNpemU7CisJaW50IGVjY2J5dGVzID0gY2hpcC0+ZWNjLmJ5dGVzOworCWludCBlY2NzdGVwcyA9IGNoaXAtPmVjYy5zdGVwczsKKwl1aW50OF90ICplY2NfY2FsYyA9IGNoaXAtPmJ1ZmZlcnMuZWNjY2FsYzsKKwljb25zdCB1aW50OF90ICpwID0gYnVmOworCWludCAqZWNjcG9zID0gY2hpcC0+ZWNjLmxheW91dC0+ZWNjcG9zOworCisJZm9yIChpID0gMDsgZWNjc3RlcHM7IGVjY3N0ZXBzLS0sIGkgKz0gZWNjYnl0ZXMsIHAgKz0gZWNjc2l6ZSkgeworCQljaGlwLT5lY2MuaHdjdGwobXRkLCBOQU5EX0VDQ19XUklURSk7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIHAsIGVjY3NpemUpOworCQljaGlwLT5lY2MuY2FsY3VsYXRlKG10ZCwgcCwgJmVjY19jYWxjW2ldKTsKIAl9CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfV1JJVElORyk7CisJZm9yIChpID0gMDsgaSA8IGNoaXAtPmVjYy50b3RhbDsgaSsrKQorCQljaGlwLT5vb2JfcG9pW2VjY3Bvc1tpXV0gPSBlY2NfY2FsY1tpXTsKIAotCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJY2hpcC0+d3JpdGVfYnVmKG10ZCwgY2hpcC0+b29iX3BvaSwgbXRkLT5vb2JzaXplKTsKK30KIAotCS8qIFJlc2V0IHRoZSBjaGlwLiBTb21lIGNoaXBzIChsaWtlIHRoZSBUb3NoaWJhIFRDNTgzMkRDIGZvdW5kCi0JICAgaW4gb25lIG9mIG15IERpc2tPbkNoaXAgMjAwMCB0ZXN0IHVuaXRzKSB3aWxsIGNsZWFyIHRoZSB3aG9sZQotCSAgIGRhdGEgcGFnZSB0b28gaWYgd2UgZG9uJ3QgZG8gdGhpcy4gSSBoYXZlIG5vIGNsdWUgd2h5LCBidXQKLQkgICBJIHNlZW0gdG8gaGF2ZSAnZml4ZWQnIGl0IGluIHRoZSBkb2MyMDAwIGRyaXZlciBpbgotCSAgIEF1Z3VzdCAxOTk5LiAgZHdtdzIuICovCi0JdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFU0VULCAtMSwgLTEpOworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWUgLSB7UkVQTEFDQUJMRV0gaGFyZHdhcmUgZWNjIHN5bmRyb20gYmFzZWQgcGFnZSB3cml0ZQorICogQG10ZDoJbXRkIGluZm8gc3RydWN0dXJlCisgKiBAY2hpcDoJbmFuZCBjaGlwIGluZm8gc3RydWN0dXJlCisgKiBAYnVmOglkYXRhIGJ1ZmZlcgorICoKKyAqIFRoZSBodyBnZW5lcmF0b3IgY2FsY3VsYXRlcyB0aGUgZXJyb3Igc3luZHJvbWUgYXV0b21hdGljYWxseS4gVGhlcmVmb3IKKyAqIHdlIG5lZWQgYSBzcGVjaWFsIG9vYiBsYXlvdXQgYW5kIGhhbmRsaW5nLgorICovCitzdGF0aWMgdm9pZCBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWUoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGNvbnN0IHVpbnQ4X3QgKmJ1ZikKK3sKKwlpbnQgaSwgZWNjc2l6ZSA9IGNoaXAtPmVjYy5zaXplOworCWludCBlY2NieXRlcyA9IGNoaXAtPmVjYy5ieXRlczsKKwlpbnQgZWNjc3RlcHMgPSBjaGlwLT5lY2Muc3RlcHM7CisJY29uc3QgdWludDhfdCAqcCA9IGJ1ZjsKKwl1aW50OF90ICpvb2IgPSBjaGlwLT5vb2JfcG9pOwogCi0JLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwotCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpCi0JCWdvdG8gb3V0OworCWZvciAoaSA9IDA7IGVjY3N0ZXBzOyBlY2NzdGVwcy0tLCBpICs9IGVjY2J5dGVzLCBwICs9IGVjY3NpemUpIHsKIAotCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIGlmIHdlIHdyaXRlIHRvIHRoZSBjYWNoZWQgcGFnZSAqLwotCWlmIChwYWdlID09IHRoaXMtPnBhZ2VidWYpCi0JCXRoaXMtPnBhZ2VidWYgPSAtMTsKKwkJY2hpcC0+ZWNjLmh3Y3RsKG10ZCwgTkFORF9FQ0NfV1JJVEUpOworCQljaGlwLT53cml0ZV9idWYobXRkLCBwLCBlY2NzaXplKTsKIAotCWlmIChOQU5EX01VU1RfUEFEKHRoaXMpKSB7Ci0JCS8qIFdyaXRlIG91dCBkZXNpcmVkIGRhdGEgKi8KLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TRVFJTiwgbXRkLT5vb2JibG9jaywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrKTsKLQkJLyogcHJlcGFkIDB4ZmYgZm9yIHBhcnRpYWwgcHJvZ3JhbW1pbmcgKi8KLQkJdGhpcy0+d3JpdGVfYnVmKG10ZCwgZmZjaGFycywgY29sdW1uKTsKLQkJLyogd3JpdGUgZGF0YSAqLwotCQl0aGlzLT53cml0ZV9idWYobXRkLCBidWYsIGxlbik7Ci0JCS8qIHBvc3RwYWQgMHhmZiBmb3IgcGFydGlhbCBwcm9ncmFtbWluZyAqLwotCQl0aGlzLT53cml0ZV9idWYobXRkLCBmZmNoYXJzLCBtdGQtPm9vYnNpemUgLSAobGVuK2NvbHVtbikpOworCQlpZiAoY2hpcC0+ZWNjLnByZXBhZCkgeworCQkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBjaGlwLT5lY2MucHJlcGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucHJlcGFkOworCQl9CisKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZShtdGQsIHAsIG9vYik7CisJCWNoaXAtPndyaXRlX2J1ZihtdGQsIG9vYiwgZWNjYnl0ZXMpOworCQlvb2IgKz0gZWNjYnl0ZXM7CisKKwkJaWYgKGNoaXAtPmVjYy5wb3N0cGFkKSB7CisJCQljaGlwLT53cml0ZV9idWYobXRkLCBvb2IsIGNoaXAtPmVjYy5wb3N0cGFkKTsKKwkJCW9vYiArPSBjaGlwLT5lY2MucG9zdHBhZDsKKwkJfQorCX0KKworCS8qIENhbGN1bGF0ZSByZW1haW5pbmcgb29iIGJ5dGVzICovCisJaSA9IG10ZC0+b29ic2l6ZSAtIChvb2IgLSBjaGlwLT5vb2JfcG9pKTsKKwlpZiAoaSkKKwkJY2hpcC0+d3JpdGVfYnVmKG10ZCwgb29iLCBpKTsKK30KKworLyoqCisgKiBuYW5kX3dyaXRlX3BhZ2UgLSBbSU5URVJOQUxdIHdyaXRlIG9uZSBwYWdlCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGNoaXA6CU5BTkQgY2hpcCBkZXNjcmlwdG9yCisgKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQorICogQHBhZ2U6CXBhZ2UgbnVtYmVyIHRvIHdyaXRlCisgKiBAY2FjaGVkOgljYWNoZWQgcHJvZ3JhbW1pbmcKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlX3BhZ2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkgICBjb25zdCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgY2FjaGVkKQoreworCWludCBzdGF0dXM7CisKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIDB4MDAsIHBhZ2UpOworCisJY2hpcC0+ZWNjLndyaXRlX3BhZ2UobXRkLCBjaGlwLCBidWYpOworCisJLyoKKwkgKiBDYWNoZWQgcHJvZ2FtbWluZyBkaXNhYmxlZCBmb3Igbm93LCBOb3Qgc3VyZSBpZiBpdHMgd29ydGggdGhlCisJICogdHJvdWJsZS4gVGhlIHNwZWVkIGdhaW4gaXMgbm90IHZlcnkgaW1wcmVzc2l2ZS4gKDIuMy0+Mi42TWliL3MpCisJICovCisJY2FjaGVkID0gMDsKKworCWlmICghY2FjaGVkIHx8ICEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfQ0FDSEVQUkcpKSB7CisKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1BBR0VQUk9HLCAtMSwgLTEpOworCQlzdGF0dXMgPSBjaGlwLT53YWl0ZnVuYyhtdGQsIGNoaXApOworCQkvKgorCQkgKiBTZWUgaWYgb3BlcmF0aW9uIGZhaWxlZCBhbmQgYWRkaXRpb25hbCBzdGF0dXMgY2hlY2tzIGFyZQorCQkgKiBhdmFpbGFibGUKKwkJICovCisJCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKGNoaXAtPmVycnN0YXQpKQorCQkJc3RhdHVzID0gY2hpcC0+ZXJyc3RhdChtdGQsIGNoaXAsIEZMX1dSSVRJTkcsIHN0YXR1cywKKwkJCQkJICAgICAgIHBhZ2UpOworCisJCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKQorCQkJcmV0dXJuIC1FSU87CiAJfSBlbHNlIHsKLQkJLyogV3JpdGUgb3V0IGRlc2lyZWQgZGF0YSAqLwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NFUUlOLCBtdGQtPm9vYmJsb2NrICsgY29sdW1uLCBwYWdlICYgdGhpcy0+cGFnZW1hc2spOwotCQkvKiB3cml0ZSBkYXRhICovCi0JCXRoaXMtPndyaXRlX2J1ZihtdGQsIGJ1ZiwgbGVuKTsKKwkJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0NBQ0hFRFBST0csIC0xLCAtMSk7CisJCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CiAJfQotCS8qIFNlbmQgY29tbWFuZCB0byBwcm9ncmFtIHRoZSBPT0IgZGF0YSAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfUEFHRVBST0csIC0xLCAtMSk7Ci0KLQlzdGF0dXMgPSB0aGlzLT53YWl0ZnVuYyAobXRkLCB0aGlzLCBGTF9XUklUSU5HKTsKLQotCS8qIFNlZSBpZiBkZXZpY2UgdGhpbmtzIGl0IHN1Y2NlZWRlZCAqLwotCWlmIChzdGF0dXMgJiBOQU5EX1NUQVRVU19GQUlMKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6ICIgIkZhaWxlZCB3cml0ZSwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0JLyogUmV0dXJuIGhhcHB5ICovCi0JKnJldGxlbiA9IGxlbjsKIAogI2lmZGVmIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUKIAkvKiBTZW5kIGNvbW1hbmQgdG8gcmVhZCBiYWNrIHRoZSBkYXRhICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9SRUFET09CLCBjb2x1bW4sIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1JFQUQwLCAwLCBwYWdlKTsKIAotCWlmICh0aGlzLT52ZXJpZnlfYnVmKG10ZCwgYnVmLCBsZW4pKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZV9vb2I6ICIgIkZhaWxlZCB3cml0ZSB2ZXJpZnksIHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChjaGlwLT52ZXJpZnlfYnVmKG10ZCwgYnVmLCBtdGQtPndyaXRlc2l6ZSkpCisJCXJldHVybiAtRUlPOwogI2VuZGlmCi0JcmV0ID0gMDsKLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0JbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotCi0vKioKLSAqIG5hbmRfd3JpdGV2IC0gW01URCBJbnRlcmZhY2VdIGNvbXBhYmlsdHkgZnVuY3Rpb24gZm9yIG5hbmRfd3JpdGV2X2VjYwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB2ZWNzOgl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKgotICogTkFORCB3cml0ZSB3aXRoIGt2ZWMuIFRoaXMganVzdCBjYWxscyB0aGUgZWNjIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbnQgbmFuZF93cml0ZXYgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwKLQkJbG9mZl90IHRvLCBzaXplX3QgKiByZXRsZW4pCi17Ci0JcmV0dXJuIChuYW5kX3dyaXRldl9lY2MgKG10ZCwgdmVjcywgY291bnQsIHRvLCByZXRsZW4sIE5VTEwsIE5VTEwpKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBuYW5kX3dyaXRldl9lY2MgLSBbTVREIEludGVyZmFjZV0gd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYwotICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEB2ZWNzOgl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAY291bnQ6CW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAZWNjYnVmOglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQG9vYnNlbDoJb29iIHNlbGVjdGlvbiBzdHJ1Y3R1cmUKLSAqCi0gKiBOQU5EIHdyaXRlIHdpdGggaW92ZWMgd2l0aCBlY2MKKyAqIG5hbmRfZmlsbF9vb2IgLSBbSW50ZXJuYWxdIFRyYW5zZmVyIGNsaWVudCBidWZmZXIgdG8gb29iCisgKiBAY2hpcDoJbmFuZCBjaGlwIHN0cnVjdHVyZQorICogQG9vYjoJb29iIGRhdGEgYnVmZmVyCisgKiBAb3BzOglvb2Igb3BzIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW50IG5hbmRfd3JpdGV2X2VjYyAoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCQlsb2ZmX3QgdG8sIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKK3N0YXRpYyB1aW50OF90ICpuYW5kX2ZpbGxfb29iKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIHVpbnQ4X3QgKm9vYiwKKwkJCQkgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQogewotCWludCBpLCBwYWdlLCBsZW4sIHRvdGFsX2xlbiwgcmV0ID0gLUVJTywgd3JpdHRlbiA9IDAsIGNoaXBucjsKLQlpbnQgb29iLCBudW1wYWdlcywgYXV0b3BsYWNlID0gMCwgc3RhcnRwYWdlOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50CXBwYmxvY2sgPSAoMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKLQl1X2NoYXIgKm9vYmJ1ZiwgKmJ1ZnN0YXJ0OworCXNpemVfdCBsZW4gPSBvcHMtPm9vYmxlbjsKIAotCS8qIFByZXNldCB3cml0dGVuIGxlbiBmb3IgZWFybHkgZXhpdCAqLwotCSpyZXRsZW4gPSAwOworCXN3aXRjaChvcHMtPm1vZGUpIHsKIAotCS8qIENhbGN1bGF0ZSB0b3RhbCBsZW5ndGggb2YgZGF0YSAqLwotCXRvdGFsX2xlbiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCi0JCXRvdGFsX2xlbiArPSAoaW50KSB2ZWNzW2ldLmlvdl9sZW47CisJY2FzZSBNVERfT09CX1BMQUNFOgorCWNhc2UgTVREX09PQl9SQVc6CisJCW1lbWNweShjaGlwLT5vb2JfcG9pICsgb3BzLT5vb2JvZmZzLCBvb2IsIGxlbik7CisJCXJldHVybiBvb2IgKyBsZW47CiAKLQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMywKLQkgICAgICAgIm5hbmRfd3JpdGV2OiB0byA9IDB4JTA4eCwgbGVuID0gJWksIGNvdW50ID0gJWxkXG4iLCAodW5zaWduZWQgaW50KSB0bywgKHVuc2lnbmVkIGludCkgdG90YWxfbGVuLCBjb3VudCk7CisJY2FzZSBNVERfT09CX0FVVE86IHsKKwkJc3RydWN0IG5hbmRfb29iZnJlZSAqZnJlZSA9IGNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWU7CisJCXVpbnQzMl90IGJvZmZzID0gMCwgd29mZnMgPSBvcHMtPm9vYm9mZnM7CisJCXNpemVfdCBieXRlcyA9IDA7CiAKLQkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgcGFnZSAqLwotCWlmICgodG8gKyB0b3RhbF9sZW4pID4gbXRkLT5zaXplKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF93cml0ZXY6IEF0dGVtcHRlZCB3cml0ZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZm9yKDsgZnJlZS0+bGVuZ3RoICYmIGxlbjsgZnJlZSsrLCBsZW4gLT0gYnl0ZXMpIHsKKwkJCS8qIFdyaXRlIHJlcXVlc3Qgbm90IGZyb20gb2Zmc2V0IDAgPyAqLworCQkJaWYgKHVubGlrZWx5KHdvZmZzKSkgeworCQkJCWlmICh3b2ZmcyA+PSBmcmVlLT5sZW5ndGgpIHsKKwkJCQkJd29mZnMgLT0gZnJlZS0+bGVuZ3RoOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQgKyB3b2ZmczsKKwkJCQlieXRlcyA9IG1pbl90KHNpemVfdCwgbGVuLAorCQkJCQkgICAgICAoZnJlZS0+bGVuZ3RoIC0gd29mZnMpKTsKKwkJCQl3b2ZmcyA9IDA7CisJCQl9IGVsc2UgeworCQkJCWJ5dGVzID0gbWluX3Qoc2l6ZV90LCBsZW4sIGZyZWUtPmxlbmd0aCk7CisJCQkJYm9mZnMgPSBmcmVlLT5vZmZzZXQ7CisJCQl9CisJCQltZW1jcHkoY2hpcC0+b29iX3BvaSArIHdvZmZzLCBvb2IsIGJ5dGVzKTsKKwkJCW9vYiArPSBieXRlczsKKwkJfQorCQlyZXR1cm4gb29iOwogCX0KKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKyNkZWZpbmUgTk9UQUxJR05FRCh4KSAoeCAmIChtdGQtPndyaXRlc2l6ZS0xKSkgIT0gMAorCisvKioKKyAqIG5hbmRfZG9fd3JpdGVfb3BzIC0gW0ludGVybmFsXSBOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiBAb3BzOglvb2Igb3BlcmF0aW9ucyBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqCisgKiBOQU5EIHdyaXRlIHdpdGggRUNDCisgKi8KK3N0YXRpYyBpbnQgbmFuZF9kb193cml0ZV9vcHMoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSAgICAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJaW50IGNoaXBuciwgcmVhbHBhZ2UsIHBhZ2UsIGJsb2NrbWFzazsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXVpbnQzMl90IHdyaXRlbGVuID0gb3BzLT5sZW47CisJdWludDhfdCAqb29iID0gb3BzLT5vb2JidWY7CisJdWludDhfdCAqYnVmID0gb3BzLT5kYXRidWY7CisJaW50IGJ5dGVzID0gbXRkLT53cml0ZXNpemU7CisJaW50IHJldDsKKworCW9wcy0+cmV0bGVuID0gMDsKIAogCS8qIHJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0JaWYgKE5PVEFMSUdORUQgKHRvKSB8fCBOT1RBTElHTkVEKHRvdGFsX2xlbikpIHsKLQkJcHJpbnRrIChLRVJOX05PVElDRSAibmFuZF93cml0ZV9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKKwlpZiAoTk9UQUxJR05FRCh0bykgfHwgTk9UQUxJR05FRChvcHMtPmxlbikpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJuYW5kX3dyaXRlOiAiCisJCSAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfV1JJVElORyk7Ci0KLQkvKiBHZXQgdGhlIGN1cnJlbnQgY2hpcC1uciAqLwotCWNoaXBuciA9IChpbnQpICh0byA+PiB0aGlzLT5jaGlwX3NoaWZ0KTsKLQkvKiBTZWxlY3QgdGhlIE5BTkQgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCWlmICghd3JpdGVsZW4pCisJCXJldHVybiAwOwogCiAJLyogQ2hlY2ssIGlmIGl0IGlzIHdyaXRlIHByb3RlY3RlZCAqLwogCWlmIChuYW5kX2NoZWNrX3dwKG10ZCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm4gLUVJTzsKIAotCS8qIGlmIG9vYnNlbCBpcyBOVUxMLCB1c2UgY2hpcCBkZWZhdWx0cyAqLwotCWlmIChvb2JzZWwgPT0gTlVMTCkKLQkJb29ic2VsID0gJm10ZC0+b29iaW5mbzsKKwljaGlwbnIgPSAoaW50KSh0byA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CiAKLQkvKiBBdXRvcGxhY2Ugb2Ygb29iIGRhdGEgPyBVc2UgdGhlIGRlZmF1bHQgcGxhY2VtZW50IHNjaGVtZSAqLwotCWlmIChvb2JzZWwtPnVzZWVjYyA9PSBNVERfTkFOREVDQ19BVVRPUExBQ0UpIHsKLQkJb29ic2VsID0gdGhpcy0+YXV0b29vYjsKLQkJYXV0b3BsYWNlID0gMTsKLQl9Ci0JaWYgKG9vYnNlbC0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTF9VU1IpCi0JCWF1dG9wbGFjZSA9IDE7CisJcmVhbHBhZ2UgPSAoaW50KSh0byA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKwlwYWdlID0gcmVhbHBhZ2UgJiBjaGlwLT5wYWdlbWFzazsKKwlibG9ja21hc2sgPSAoMSA8PCAoY2hpcC0+cGh5c19lcmFzZV9zaGlmdCAtIGNoaXAtPnBhZ2Vfc2hpZnQpKSAtIDE7CiAKLQkvKiBTZXR1cCBzdGFydCBwYWdlICovCi0JcGFnZSA9IChpbnQpICh0byA+PiB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSB3cml0ZSB0byB0aGUgY2FjaGVkIHBhZ2UgKi8KLQlpZiAocGFnZSA8PSB0aGlzLT5wYWdlYnVmICYmIHRoaXMtPnBhZ2VidWYgPCAoKHRvICsgdG90YWxfbGVuKSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSkKLQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOworCS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUsIHdoZW4gd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCisJaWYgKHRvIDw9IChjaGlwLT5wYWdlYnVmIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpICYmCisJICAgIChjaGlwLT5wYWdlYnVmIDw8IGNoaXAtPnBhZ2Vfc2hpZnQpIDwgKHRvICsgb3BzLT5sZW4pKQorCQljaGlwLT5wYWdlYnVmID0gLTE7CiAKLQlzdGFydHBhZ2UgPSBwYWdlICYgdGhpcy0+cGFnZW1hc2s7CisJY2hpcC0+b29iX3BvaSA9IGNoaXAtPmJ1ZmZlcnMub29id2J1ZjsKIAotCS8qIExvb3AgdW50aWwgYWxsIGt2ZWMnIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiAqLwotCWxlbiA9IDA7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCS8qIElmIHRoZSBnaXZlbiB0dXBsZSBpcyA+PSBwYWdlc2l6ZSB0aGVuCi0JCSAqIHdyaXRlIGl0IG91dCBmcm9tIHRoZSBpb3YKLQkJICovCi0JCWlmICgodmVjcy0+aW92X2xlbiAtIGxlbikgPj0gbXRkLT5vb2JibG9jaykgewotCQkJLyogQ2FsYyBudW1iZXIgb2YgcGFnZXMgd2UgY2FuIHdyaXRlCi0JCQkgKiBvdXQgb2YgdGhpcyBpb3YgaW4gb25lIGdvICovCi0JCQludW1wYWdlcyA9ICh2ZWNzLT5pb3ZfbGVuIC0gbGVuKSA+PiB0aGlzLT5wYWdlX3NoaWZ0OwotCQkJLyogRG8gbm90IGNyb3NzIGJsb2NrIGJvdW5kYXJpZXMgKi8KLQkJCW51bXBhZ2VzID0gbWluIChwcGJsb2NrIC0gKHN0YXJ0cGFnZSAmIChwcGJsb2NrIC0gMSkpLCBudW1wYWdlcyk7Ci0JCQlvb2JidWYgPSBuYW5kX3ByZXBhcmVfb29iYnVmIChtdGQsIE5VTEwsIG9vYnNlbCwgYXV0b3BsYWNlLCBudW1wYWdlcyk7Ci0JCQlidWZzdGFydCA9ICh1X2NoYXIgKil2ZWNzLT5pb3ZfYmFzZTsKLQkJCWJ1ZnN0YXJ0ICs9IGxlbjsKLQkJCXRoaXMtPmRhdGFfcG9pID0gYnVmc3RhcnQ7Ci0JCQlvb2IgPSAwOwotCQkJZm9yIChpID0gMTsgaSA8PSBudW1wYWdlczsgaSsrKSB7Ci0JCQkJLyogV3JpdGUgb25lIHBhZ2UuIElmIHRoaXMgaXMgdGhlIGxhc3QgcGFnZSB0byB3cml0ZQotCQkJCSAqIHRoZW4gdXNlIHRoZSByZWFsIHBhZ2Vwcm9ncmFtIGNvbW1hbmQsIGVsc2Ugc2VsZWN0Ci0JCQkJICogY2FjaGVkIHByb2dyYW1taW5nIGlmIHN1cHBvcnRlZCBieSB0aGUgY2hpcC4KLQkJCQkgKi8KLQkJCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrLAotCQkJCQkmb29iYnVmW29vYl0sIG9vYnNlbCwgaSAhPSBudW1wYWdlcyk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJZ290byBvdXQ7Ci0JCQkJdGhpcy0+ZGF0YV9wb2kgKz0gbXRkLT5vb2JibG9jazsKLQkJCQlsZW4gKz0gbXRkLT5vb2JibG9jazsKLQkJCQlvb2IgKz0gbXRkLT5vb2JzaXplOwotCQkJCXBhZ2UrKzsKLQkJCX0KLQkJCS8qIENoZWNrLCBpZiB3ZSBoYXZlIHRvIHN3aXRjaCB0byB0aGUgbmV4dCB0dXBsZSAqLwotCQkJaWYgKGxlbiA+PSAoaW50KSB2ZWNzLT5pb3ZfbGVuKSB7Ci0JCQkJdmVjcysrOwotCQkJCWxlbiA9IDA7Ci0JCQkJY291bnQtLTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIFdlIG11c3QgdXNlIHRoZSBpbnRlcm5hbCBidWZmZXIsIHJlYWQgZGF0YSBvdXQgb2YgZWFjaAotCQkJICogdHVwbGUgdW50aWwgd2UgaGF2ZSBhIGZ1bGwgcGFnZSB0byB3cml0ZQotCQkJICovCi0JCQlpbnQgY250ID0gMDsKLQkJCXdoaWxlIChjbnQgPCBtdGQtPm9vYmJsb2NrKSB7Ci0JCQkJaWYgKHZlY3MtPmlvdl9iYXNlICE9IE5VTEwgJiYgdmVjcy0+aW92X2xlbikKLQkJCQkJdGhpcy0+ZGF0YV9idWZbY250KytdID0gKCh1X2NoYXIgKikgdmVjcy0+aW92X2Jhc2UpW2xlbisrXTsKLQkJCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCQlpZiAobGVuID49IChpbnQpIHZlY3MtPmlvdl9sZW4pIHsKLQkJCQkJdmVjcysrOwotCQkJCQlsZW4gPSAwOwotCQkJCQljb3VudC0tOwotCQkJCX0KLQkJCX0KLQkJCXRoaXMtPnBhZ2VidWYgPSBwYWdlOwotCQkJdGhpcy0+ZGF0YV9wb2kgPSB0aGlzLT5kYXRhX2J1ZjsKLQkJCWJ1ZnN0YXJ0ID0gdGhpcy0+ZGF0YV9wb2k7Ci0JCQludW1wYWdlcyA9IDE7Ci0JCQlvb2JidWYgPSBuYW5kX3ByZXBhcmVfb29iYnVmIChtdGQsIE5VTEwsIG9vYnNlbCwgYXV0b3BsYWNlLCBudW1wYWdlcyk7Ci0JCQlyZXQgPSBuYW5kX3dyaXRlX3BhZ2UgKG10ZCwgdGhpcywgcGFnZSAmIHRoaXMtPnBhZ2VtYXNrLAotCQkJCW9vYmJ1Ziwgb29ic2VsLCAwKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBvdXQ7Ci0JCQlwYWdlKys7Ci0JCX0KKwl3aGlsZSgxKSB7CisJCWludCBjYWNoZWQgPSB3cml0ZWxlbiA+IGJ5dGVzICYmIHBhZ2UgIT0gYmxvY2ttYXNrOwogCi0JCXRoaXMtPmRhdGFfcG9pID0gYnVmc3RhcnQ7Ci0JCXJldCA9IG5hbmRfdmVyaWZ5X3BhZ2VzIChtdGQsIHRoaXMsIHN0YXJ0cGFnZSwgbnVtcGFnZXMsIG9vYmJ1Ziwgb29ic2VsLCBjaGlwbnIsIDApOworCQlpZiAodW5saWtlbHkob29iKSkKKwkJCW9vYiA9IG5hbmRfZmlsbF9vb2IoY2hpcCwgb29iLCBvcHMpOworCisJCXJldCA9IG5hbmRfd3JpdGVfcGFnZShtdGQsIGNoaXAsIGJ1ZiwgcGFnZSwgY2FjaGVkKTsKIAkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCi0JCXdyaXR0ZW4gKz0gbXRkLT5vb2JibG9jayAqIG51bXBhZ2VzOwotCQkvKiBBbGwgZG9uZSA/ICovCi0JCWlmICghY291bnQpCiAJCQlicmVhazsKIAotCQlzdGFydHBhZ2UgPSBwYWdlICYgdGhpcy0+cGFnZW1hc2s7CisJCXdyaXRlbGVuIC09IGJ5dGVzOworCQlpZiAoIXdyaXRlbGVuKQorCQkJYnJlYWs7CisKKwkJYnVmICs9IGJ5dGVzOworCQlyZWFscGFnZSsrOworCisJCXBhZ2UgPSByZWFscGFnZSAmIGNoaXAtPnBhZ2VtYXNrOwogCQkvKiBDaGVjaywgaWYgd2UgY3Jvc3MgYSBjaGlwIGJvdW5kYXJ5ICovCi0JCWlmICghc3RhcnRwYWdlKSB7CisJCWlmICghcGFnZSkgewogCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCQl9CiAJfQotCXJldCA9IDA7Ci1vdXQ6Ci0JLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLworCisJaWYgKHVubGlrZWx5KG9vYikpCisJCW1lbXNldChjaGlwLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJb3BzLT5yZXRsZW4gPSBvcHMtPmxlbiAtIHdyaXRlbGVuOworCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHRvOgkJb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiBAbGVuOgludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKKyAqIEByZXRsZW46CXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCisgKiBAYnVmOgl0aGUgZGF0YSB0byB3cml0ZQorICoKKyAqIE5BTkQgd3JpdGUgd2l0aCBFQ0MKKyAqLworc3RhdGljIGludCBuYW5kX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJCQkgIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKKwlpbnQgcmV0OworCisJLyogRG8gbm90IGFsbG93IHJlYWRzIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICgodG8gKyBsZW4pID4gbXRkLT5zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwluYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9XUklUSU5HKTsKKworCWNoaXAtPm9wcy5sZW4gPSBsZW47CisJY2hpcC0+b3BzLmRhdGJ1ZiA9ICh1aW50OF90ICopYnVmOworCWNoaXAtPm9wcy5vb2JidWYgPSBOVUxMOworCisJcmV0ID0gbmFuZF9kb193cml0ZV9vcHMobXRkLCB0bywgJmNoaXAtPm9wcyk7CisKIAluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAKLQkqcmV0bGVuID0gd3JpdHRlbjsKKwkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIG5hbmRfZG9fd3JpdGVfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgb3V0LW9mLWJhbmQKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAdG86CQlvZmZzZXQgdG8gd3JpdGUgdG8KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKgorICogTkFORCB3cml0ZSBvdXQtb2YtYmFuZAorICovCitzdGF0aWMgaW50IG5hbmRfZG9fd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgICAgIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKQoreworCWludCBjaGlwbnIsIHBhZ2UsIHN0YXR1czsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm5hbmRfd3JpdGVfb29iOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsCisJICAgICAgKHVuc2lnbmVkIGludCl0bywgKGludClvcHMtPmxlbik7CisKKwkvKiBEbyBub3QgYWxsb3cgd3JpdGUgcGFzdCBlbmQgb2YgcGFnZSAqLworCWlmICgob3BzLT5vb2JvZmZzICsgb3BzLT5sZW4pID4gbXRkLT5vb2JzaXplKSB7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX3dyaXRlX29vYjogIgorCQkgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBwYXN0IGVuZCBvZiBwYWdlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2hpcG5yID0gKGludCkodG8gPj4gY2hpcC0+Y2hpcF9zaGlmdCk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOworCisJLyogU2hpZnQgdG8gZ2V0IHBhZ2UgKi8KKwlwYWdlID0gKGludCkodG8gPj4gY2hpcC0+cGFnZV9zaGlmdCk7CisKKwkvKgorCSAqIFJlc2V0IHRoZSBjaGlwLiBTb21lIGNoaXBzIChsaWtlIHRoZSBUb3NoaWJhIFRDNTgzMkRDIGZvdW5kIGluIG9uZQorCSAqIG9mIG15IERpc2tPbkNoaXAgMjAwMCB0ZXN0IHVuaXRzKSB3aWxsIGNsZWFyIHRoZSB3aG9sZSBkYXRhIHBhZ2UgdG9vCisJICogaWYgd2UgZG9uJ3QgZG8gdGhpcy4gSSBoYXZlIG5vIGNsdWUgd2h5LCBidXQgSSBzZWVtIHRvIGhhdmUgJ2ZpeGVkJworCSAqIGl0IGluIHRoZSBkb2MyMDAwIGRyaXZlciBpbiBBdWd1c3QgMTk5OS4gIGR3bXcyLgorCSAqLworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRVNFVCwgLTEsIC0xKTsKKworCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KKwlpZiAobmFuZF9jaGVja193cChtdGQpKQorCQlyZXR1cm4gLUVST0ZTOworCisJLyogSW52YWxpZGF0ZSB0aGUgcGFnZSBjYWNoZSwgaWYgd2Ugd3JpdGUgdG8gdGhlIGNhY2hlZCBwYWdlICovCisJaWYgKHBhZ2UgPT0gY2hpcC0+cGFnZWJ1ZikKKwkJY2hpcC0+cGFnZWJ1ZiA9IC0xOworCisJY2hpcC0+b29iX3BvaSA9IGNoaXAtPmJ1ZmZlcnMub29id2J1ZjsKKwltZW1zZXQoY2hpcC0+b29iX3BvaSwgMHhmZiwgbXRkLT5vb2JzaXplKTsKKwluYW5kX2ZpbGxfb29iKGNoaXAsIG9wcy0+b29iYnVmLCBvcHMpOworCXN0YXR1cyA9IGNoaXAtPmVjYy53cml0ZV9vb2IobXRkLCBjaGlwLCBwYWdlICYgY2hpcC0+cGFnZW1hc2spOworCW1lbXNldChjaGlwLT5vb2JfcG9pLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCW9wcy0+cmV0bGVuID0gb3BzLT5sZW47CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBOQU5EIHdyaXRlIGRhdGEgYW5kL29yIG91dC1vZi1iYW5kCisgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQGZyb206CW9mZnNldCB0byByZWFkIGZyb20KKyAqIEBvcHM6CW9vYiBvcGVyYXRpb24gZGVzY3JpcHRpb24gc3RydWN0dXJlCisgKi8KK3N0YXRpYyBpbnQgbmFuZF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywKKwkJCSAgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpCit7CisJdm9pZCAoKndyaXRlX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJICBjb25zdCB1aW50OF90ICpidWYpID0gTlVMTDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXQgPSAtRU5PVFNVUFA7CisKKwlvcHMtPnJldGxlbiA9IDA7CisKKwkvKiBEbyBub3QgYWxsb3cgd3JpdGVzIHBhc3QgZW5kIG9mIGRldmljZSAqLworCWlmICgodG8gKyBvcHMtPmxlbikgPiBtdGQtPnNpemUpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfcmVhZF9vb2I6ICIKKwkJICAgICAgIkF0dGVtcHQgcmVhZCBiZXlvbmQgZW5kIG9mIGRldmljZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5hbmRfZ2V0X2RldmljZShjaGlwLCBtdGQsIEZMX1dSSVRJTkcpOworCisJc3dpdGNoKG9wcy0+bW9kZSkgeworCWNhc2UgTVREX09PQl9QTEFDRToKKwljYXNlIE1URF9PT0JfQVVUTzoKKwkJYnJlYWs7CisKKwljYXNlIE1URF9PT0JfUkFXOgorCQkvKiBSZXBsYWNlIHRoZSB3cml0ZV9wYWdlIGFsZ29yaXRobSB0ZW1wb3JhcnkgKi8KKwkJd3JpdGVfcGFnZSA9IGNoaXAtPmVjYy53cml0ZV9wYWdlOworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFvcHMtPmRhdGJ1ZikKKwkJcmV0ID0gbmFuZF9kb193cml0ZV9vb2IobXRkLCB0bywgb3BzKTsKKwllbHNlCisJCXJldCA9IG5hbmRfZG9fd3JpdGVfb3BzKG10ZCwgdG8sIG9wcyk7CisKKwlpZiAodW5saWtlbHkob3BzLT5tb2RlID09IE1URF9PT0JfUkFXKSkKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSB3cml0ZV9wYWdlOworIG91dDoKKwluYW5kX3JlbGVhc2VfZGV2aWNlKG10ZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjA1MCwxMiArMTgxNiwxMiBAQAogICoKICAqIFN0YW5kYXJkIGVyYXNlIGNvbW1hbmQgZm9yIE5BTkQgY2hpcHMKICAqLwotc3RhdGljIHZvaWQgc2luZ2xlX2VyYXNlX2NtZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKQorc3RhdGljIHZvaWQgc2luZ2xlX2VyYXNlX2NtZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCS8qIFNlbmQgY29tbWFuZHMgdG8gZXJhc2UgYSBibG9jayAqLwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTIsIC0xLCAtMSk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UpOworCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9FUkFTRTIsIC0xLCAtMSk7CiB9CiAKIC8qKgpAQCAtMjA2NiwxNSArMTgzMiwxNSBAQAogICogQU5EIG11bHRpIGJsb2NrIGVyYXNlIGNvbW1hbmQgZnVuY3Rpb24KICAqIEVyYXNlIDQgY29uc2VjdXRpdmUgYmxvY2tzCiAgKi8KLXN0YXRpYyB2b2lkIG11bHRpX2VyYXNlX2NtZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBwYWdlKQorc3RhdGljIHZvaWQgbXVsdGlfZXJhc2VfY21kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJLyogU2VuZCBjb21tYW5kcyB0byBlcmFzZSBhIGJsb2NrICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKyspOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMSwgLTEsIHBhZ2UrKyk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9FUkFTRTEsIC0xLCBwYWdlKTsKLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0VSQVNFMiwgLTEsIC0xKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSsrKTsKKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfRVJBU0UxLCAtMSwgcGFnZSk7CisJY2hpcC0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0VSQVNFMiwgLTEsIC0xKTsKIH0KIAogLyoqCkBAIC0yMDg0LDc5ICsxODUwLDgyIEBACiAgKgogICogRXJhc2Ugb25lIG9yZSBtb3JlIGJsb2NrcwogICovCi1zdGF0aWMgaW50IG5hbmRfZXJhc2UgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCitzdGF0aWMgaW50IG5hbmRfZXJhc2Uoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKIHsKLQlyZXR1cm4gbmFuZF9lcmFzZV9uYW5kIChtdGQsIGluc3RyLCAwKTsKKwlyZXR1cm4gbmFuZF9lcmFzZV9uYW5kKG10ZCwgaW5zdHIsIDApOwogfQogCiAjZGVmaW5lIEJCVF9QQUdFX01BU0sJMHhmZmZmZmYzZgogLyoqCi0gKiBuYW5kX2VyYXNlX2ludGVybiAtIFtOQU5EIEludGVyZmFjZV0gZXJhc2UgYmxvY2socykKKyAqIG5hbmRfZXJhc2VfbmFuZCAtIFtJbnRlcm5hbF0gZXJhc2UgYmxvY2socykKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAaW5zdHI6CWVyYXNlIGluc3RydWN0aW9uCiAgKiBAYWxsb3diYnQ6CWFsbG93IGVyYXNpbmcgdGhlIGJidCBhcmVhCiAgKgogICogRXJhc2Ugb25lIG9yZSBtb3JlIGJsb2NrcwogICovCi1pbnQgbmFuZF9lcmFzZV9uYW5kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyLCBpbnQgYWxsb3diYnQpCitpbnQgbmFuZF9lcmFzZV9uYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCSAgICBpbnQgYWxsb3diYnQpCiB7CiAJaW50IHBhZ2UsIGxlbiwgc3RhdHVzLCBwYWdlc19wZXJfYmxvY2ssIHJldCwgY2hpcG5yOwotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IHJld3JpdGVfYmJ0W05BTkRfTUFYX0NISVBTXT17MH07CS8qIGZsYWdzIHRvIGluZGljYXRlIHRoZSBwYWdlLCBpZiBiYnQgbmVlZHMgdG8gYmUgcmV3cml0dGVuLiAqLwotCXVuc2lnbmVkIGludCBiYnRfbWFza2VkX3BhZ2U7CQkvKiBiYnQgbWFzayB0byBjb21wYXJlIHRvIHBhZ2UgYmVpbmcgZXJhc2VkLiAqLwotCQkJCQkJLyogSXQgaXMgdXNlZCB0byBzZWUgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyBpbiB0aGUgc2FtZSAqLwotCQkJCQkJLyogICAyNTYgYmxvY2sgZ3JvdXAgYW5kIHRoZSBzYW1lIGJhbmsgYXMgdGhlIGJidC4gKi8KKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCWludCByZXdyaXRlX2JidFtOQU5EX01BWF9DSElQU109ezB9OworCXVuc2lnbmVkIGludCBiYnRfbWFza2VkX3BhZ2UgPSAweGZmZmZmZmZmOwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDMsCi0JICAgICAgICJuYW5kX2VyYXNlOiBzdGFydCA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGluc3RyLT5hZGRyLCAodW5zaWduZWQgaW50KSBpbnN0ci0+bGVuKTsKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAibmFuZF9lcmFzZTogc3RhcnQgPSAweCUwOHgsIGxlbiA9ICVpXG4iLAorCSAgICAgICh1bnNpZ25lZCBpbnQpaW5zdHItPmFkZHIsICh1bnNpZ25lZCBpbnQpaW5zdHItPmxlbik7CiAKIAkvKiBTdGFydCBhZGRyZXNzIG11c3QgYWxpZ24gb24gYmxvY2sgYm91bmRhcnkgKi8KLQlpZiAoaW5zdHItPmFkZHIgJiAoKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6IFVuYWxpZ25lZCBhZGRyZXNzXG4iKTsKKwlpZiAoaW5zdHItPmFkZHIgJiAoKDEgPDwgY2hpcC0+cGh5c19lcmFzZV9zaGlmdCkgLSAxKSkgeworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogVW5hbGlnbmVkIGFkZHJlc3NcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBMZW5ndGggbXVzdCBhbGlnbiBvbiBibG9jayBib3VuZGFyeSAqLwotCWlmIChpbnN0ci0+bGVuICYgKCgxIDw8IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQpIC0gMSkpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBMZW5ndGggbm90IGJsb2NrIGFsaWduZWRcbiIpOworCWlmIChpbnN0ci0+bGVuICYgKCgxIDw8IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQpIC0gMSkpIHsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm5hbmRfZXJhc2U6ICIKKwkJICAgICAgIkxlbmd0aCBub3QgYmxvY2sgYWxpZ25lZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIERvIG5vdCBhbGxvdyBlcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAoKGluc3RyLT5sZW4gKyBpbnN0ci0+YWRkcikgPiBtdGQtPnNpemUpIHsKLQkJREVCVUcgKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiBFcmFzZSBwYXN0IGVuZCBvZiBkZXZpY2VcbiIpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgorCQkgICAgICAiRXJhc2UgcGFzdCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW5zdHItPmZhaWxfYWRkciA9IDB4ZmZmZmZmZmY7CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfRVJBU0lORyk7CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfRVJBU0lORyk7CiAKIAkvKiBTaGlmdCB0byBnZXQgZmlyc3QgcGFnZSAqLwotCXBhZ2UgPSAoaW50KSAoaW5zdHItPmFkZHIgPj4gdGhpcy0+cGFnZV9zaGlmdCk7Ci0JY2hpcG5yID0gKGludCkgKGluc3RyLT5hZGRyID4+IHRoaXMtPmNoaXBfc2hpZnQpOworCXBhZ2UgPSAoaW50KShpbnN0ci0+YWRkciA+PiBjaGlwLT5wYWdlX3NoaWZ0KTsKKwljaGlwbnIgPSAoaW50KShpbnN0ci0+YWRkciA+PiBjaGlwLT5jaGlwX3NoaWZ0KTsKIAogCS8qIENhbGN1bGF0ZSBwYWdlcyBpbiBlYWNoIGJsb2NrICovCi0JcGFnZXNfcGVyX2Jsb2NrID0gMSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOworCXBhZ2VzX3Blcl9ibG9jayA9IDEgPDwgKGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgLSBjaGlwLT5wYWdlX3NoaWZ0KTsKIAogCS8qIFNlbGVjdCB0aGUgTkFORCBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIGNoaXBucik7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCi0JLyogQ2hlY2sgdGhlIFdQIGJpdCAqLwogCS8qIENoZWNrLCBpZiBpdCBpcyB3cml0ZSBwcm90ZWN0ZWQgKi8KIAlpZiAobmFuZF9jaGVja193cChtdGQpKSB7Ci0JCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogRGV2aWNlIGlzIHdyaXRlIHByb3RlY3RlZCEhIVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlOiAiCisJCSAgICAgICJEZXZpY2UgaXMgd3JpdGUgcHJvdGVjdGVkISEhXG4iKTsKIAkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKIAkJZ290byBlcmFzZV9leGl0OwogCX0KIAotCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoLCBzZXQgdGhlIEJCVCBwYWdlIG1hc2sgdG8gc2VlIGlmIHRoZSBCQlQgc2hvdWxkIGJlIHJld3JpdHRlbiAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgewotCQliYnRfbWFza2VkX3BhZ2UgPSB0aGlzLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0gJiBCQlRfUEFHRV9NQVNLOwotCX0gZWxzZSB7Ci0JCWJidF9tYXNrZWRfcGFnZSA9IDB4ZmZmZmZmZmY7CS8qIHNob3VsZCBub3QgbWF0Y2ggYW55dGhpbmcgKi8KLQl9CisJLyoKKwkgKiBJZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCwgc2V0IHRoZSBCQlQgcGFnZSBtYXNrIHRvIHNlZSBpZiB0aGUgQkJUCisJICogc2hvdWxkIGJlIHJld3JpdHRlbi4gT3RoZXJ3aXNlIHRoZSBtYXNrIGlzIHNldCB0byAweGZmZmZmZmZmIHdoaWNoCisJICogY2FuIG5vdCBiZSBtYXRjaGVkLiBUaGlzIGlzIGFsc28gZG9uZSB3aGVuIHRoZSBiYnQgaXMgYWN0dWFsbHkKKwkgKiBlcmFzZWQgdG8gYXZvaWQgcmVjdXNyc2l2ZSB1cGRhdGVzCisJICovCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBCQlRfQVVUT19SRUZSRVNIICYmICFhbGxvd2JidCkKKwkJYmJ0X21hc2tlZF9wYWdlID0gY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdICYgQkJUX1BBR0VfTUFTSzsKIAogCS8qIExvb3AgdGhyb3VnaCB0aGUgcGFnZXMgKi8KIAlsZW4gPSBpbnN0ci0+bGVuOwpAQCAtMjE2NCw2NCArMTkzMyw3NyBAQAogCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTSU5HOwogCiAJd2hpbGUgKGxlbikgewotCQkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgYmFkIGJsb2NrLCB3ZSBkbyBub3QgZXJhc2UgYmFkIGJsb2NrcyAhICovCi0JCWlmIChuYW5kX2Jsb2NrX2NoZWNrYmFkKG10ZCwgKChsb2ZmX3QpIHBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIDAsIGFsbG93YmJ0KSkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm5hbmRfZXJhc2U6IGF0dGVtcHQgdG8gZXJhc2UgYSBiYWQgYmxvY2sgYXQgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOworCQkvKgorCQkgKiBoZWNrIGlmIHdlIGhhdmUgYSBiYWQgYmxvY2ssIHdlIGRvIG5vdCBlcmFzZSBiYWQgYmxvY2tzICEKKwkJICovCisJCWlmIChuYW5kX2Jsb2NrX2NoZWNrYmFkKG10ZCwgKChsb2ZmX3QpIHBhZ2UpIDw8CisJCQkJCWNoaXAtPnBhZ2Vfc2hpZnQsIDAsIGFsbG93YmJ0KSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmFuZF9lcmFzZTogYXR0ZW1wdCB0byBlcmFzZSBhICIKKwkJCSAgICAgICAiYmFkIGJsb2NrIGF0IHBhZ2UgMHglMDh4XG4iLCBwYWdlKTsKIAkJCWluc3RyLT5zdGF0ZSA9IE1URF9FUkFTRV9GQUlMRUQ7CiAJCQlnb3RvIGVyYXNlX2V4aXQ7CiAJCX0KIAotCQkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSBlcmFzZSB0aGUgYmxvY2sgd2hpY2ggY29udGFpbnMKLQkJICAgdGhlIGN1cnJlbnQgY2FjaGVkIHBhZ2UgKi8KLQkJaWYgKHBhZ2UgPD0gdGhpcy0+cGFnZWJ1ZiAmJiB0aGlzLT5wYWdlYnVmIDwgKHBhZ2UgKyBwYWdlc19wZXJfYmxvY2spKQotCQkJdGhpcy0+cGFnZWJ1ZiA9IC0xOworCQkvKgorCQkgKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlLCBpZiB3ZSBlcmFzZSB0aGUgYmxvY2sgd2hpY2gKKwkJICogY29udGFpbnMgdGhlIGN1cnJlbnQgY2FjaGVkIHBhZ2UKKwkJICovCisJCWlmIChwYWdlIDw9IGNoaXAtPnBhZ2VidWYgJiYgY2hpcC0+cGFnZWJ1ZiA8CisJCSAgICAocGFnZSArIHBhZ2VzX3Blcl9ibG9jaykpCisJCQljaGlwLT5wYWdlYnVmID0gLTE7CiAKLQkJdGhpcy0+ZXJhc2VfY21kIChtdGQsIHBhZ2UgJiB0aGlzLT5wYWdlbWFzayk7CisJCWNoaXAtPmVyYXNlX2NtZChtdGQsIHBhZ2UgJiBjaGlwLT5wYWdlbWFzayk7CiAKLQkJc3RhdHVzID0gdGhpcy0+d2FpdGZ1bmMgKG10ZCwgdGhpcywgRkxfRVJBU0lORyk7CisJCXN0YXR1cyA9IGNoaXAtPndhaXRmdW5jKG10ZCwgY2hpcCk7CiAKLQkJLyogU2VlIGlmIG9wZXJhdGlvbiBmYWlsZWQgYW5kIGFkZGl0aW9uYWwgc3RhdHVzIGNoZWNrcyBhcmUgYXZhaWxhYmxlICovCi0JCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKHRoaXMtPmVycnN0YXQpKSB7Ci0JCQlzdGF0dXMgPSB0aGlzLT5lcnJzdGF0KG10ZCwgdGhpcywgRkxfRVJBU0lORywgc3RhdHVzLCBwYWdlKTsKLQkJfQorCQkvKgorCQkgKiBTZWUgaWYgb3BlcmF0aW9uIGZhaWxlZCBhbmQgYWRkaXRpb25hbCBzdGF0dXMgY2hlY2tzIGFyZQorCQkgKiBhdmFpbGFibGUKKwkJICovCisJCWlmICgoc3RhdHVzICYgTkFORF9TVEFUVVNfRkFJTCkgJiYgKGNoaXAtPmVycnN0YXQpKQorCQkJc3RhdHVzID0gY2hpcC0+ZXJyc3RhdChtdGQsIGNoaXAsIEZMX0VSQVNJTkcsCisJCQkJCSAgICAgICBzdGF0dXMsIHBhZ2UpOwogCiAJCS8qIFNlZSBpZiBibG9jayBlcmFzZSBzdWNjZWVkZWQgKi8KIAkJaWYgKHN0YXR1cyAmIE5BTkRfU1RBVFVTX0ZBSUwpIHsKLQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIiAiRmFpbGVkIGVyYXNlLCBwYWdlIDB4JTA4eFxuIiwgcGFnZSk7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZTogIgorCQkJICAgICAgIkZhaWxlZCBlcmFzZSwgcGFnZSAweCUwOHhcbiIsIHBhZ2UpOwogCQkJaW5zdHItPnN0YXRlID0gTVREX0VSQVNFX0ZBSUxFRDsKLQkJCWluc3RyLT5mYWlsX2FkZHIgPSAocGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0KTsKKwkJCWluc3RyLT5mYWlsX2FkZHIgPSAocGFnZSA8PCBjaGlwLT5wYWdlX3NoaWZ0KTsKIAkJCWdvdG8gZXJhc2VfZXhpdDsKIAkJfQogCi0JCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoLCBzZXQgdGhlIEJCVCByZXdyaXRlIGZsYWcgdG8gdGhlIHBhZ2UgYmVpbmcgZXJhc2VkICovCi0JCWlmICh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgewotCQkJaWYgKCgocGFnZSAmIEJCVF9QQUdFX01BU0spID09IGJidF9tYXNrZWRfcGFnZSkgJiYKLQkJCSAgICAgKHBhZ2UgIT0gdGhpcy0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdKSkgewotCQkJCXJld3JpdGVfYmJ0W2NoaXBucl0gPSAocGFnZSA8PCB0aGlzLT5wYWdlX3NoaWZ0KTsKLQkJCX0KLQkJfQorCQkvKgorCQkgKiBJZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCwgc2V0IHRoZSBCQlQgcmV3cml0ZSBmbGFnIHRvIHRoZQorCQkgKiBwYWdlIGJlaW5nIGVyYXNlZAorCQkgKi8KKwkJaWYgKGJidF9tYXNrZWRfcGFnZSAhPSAweGZmZmZmZmZmICYmCisJCSAgICAocGFnZSAmIEJCVF9QQUdFX01BU0spID09IGJidF9tYXNrZWRfcGFnZSkKKwkJCSAgICByZXdyaXRlX2JidFtjaGlwbnJdID0gKHBhZ2UgPDwgY2hpcC0+cGFnZV9zaGlmdCk7CiAKIAkJLyogSW5jcmVtZW50IHBhZ2UgYWRkcmVzcyBhbmQgZGVjcmVtZW50IGxlbmd0aCAqLwotCQlsZW4gLT0gKDEgPDwgdGhpcy0+cGh5c19lcmFzZV9zaGlmdCk7CisJCWxlbiAtPSAoMSA8PCBjaGlwLT5waHlzX2VyYXNlX3NoaWZ0KTsKIAkJcGFnZSArPSBwYWdlc19wZXJfYmxvY2s7CiAKIAkJLyogQ2hlY2ssIGlmIHdlIGNyb3NzIGEgY2hpcCBib3VuZGFyeSAqLwotCQlpZiAobGVuICYmICEocGFnZSAmIHRoaXMtPnBhZ2VtYXNrKSkgeworCQlpZiAobGVuICYmICEocGFnZSAmIGNoaXAtPnBhZ2VtYXNrKSkgewogCQkJY2hpcG5yKys7Ci0JCQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIC0xKTsKLQkJCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgY2hpcG5yKTsKKwkJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQkJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCBjaGlwbnIpOwogCi0JCQkvKiBpZiBCQlQgcmVxdWlyZXMgcmVmcmVzaCBhbmQgQkJULVBFUkNISVAsCi0JCQkgKiAgIHNldCB0aGUgQkJUIHBhZ2UgbWFzayB0byBzZWUgaWYgdGhpcyBCQlQgc2hvdWxkIGJlIHJld3JpdHRlbiAqLwotCQkJaWYgKCh0aGlzLT5vcHRpb25zICYgQkJUX0FVVE9fUkVGUkVTSCkgJiYgKHRoaXMtPmJidF90ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApKSB7Ci0JCQkJYmJ0X21hc2tlZF9wYWdlID0gdGhpcy0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdICYgQkJUX1BBR0VfTUFTSzsKLQkJCX0KLQorCQkJLyoKKwkJCSAqIElmIEJCVCByZXF1aXJlcyByZWZyZXNoIGFuZCBCQlQtUEVSQ0hJUCwgc2V0IHRoZSBCQlQKKwkJCSAqIHBhZ2UgbWFzayB0byBzZWUgaWYgdGhpcyBCQlQgc2hvdWxkIGJlIHJld3JpdHRlbgorCQkJICovCisJCQlpZiAoYmJ0X21hc2tlZF9wYWdlICE9IDB4ZmZmZmZmZmYgJiYKKwkJCSAgICAoY2hpcC0+YmJ0X3RkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkpCisJCQkJYmJ0X21hc2tlZF9wYWdlID0gY2hpcC0+YmJ0X3RkLT5wYWdlc1tjaGlwbnJdICYKKwkJCQkJQkJUX1BBR0VfTUFTSzsKIAkJfQogCX0KIAlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKIAotZXJhc2VfZXhpdDoKKyBlcmFzZV9leGl0OgogCiAJcmV0ID0gaW5zdHItPnN0YXRlID09IE1URF9FUkFTRV9ET05FID8gMCA6IC1FSU87CiAJLyogRG8gY2FsbCBiYWNrIGZ1bmN0aW9uICovCkBAIC0yMjMxLDE2ICsyMDEzLDIxIEBACiAJLyogRGVzZWxlY3QgYW5kIHdha2UgdXAgYW55b25lIHdhaXRpbmcgb24gdGhlIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAotCS8qIGlmIEJCVCByZXF1aXJlcyByZWZyZXNoIGFuZCBlcmFzZSB3YXMgc3VjY2Vzc2Z1bCwgcmV3cml0ZSBhbnkgc2VsZWN0ZWQgYmFkIGJsb2NrIHRhYmxlcyAqLwotCWlmICgodGhpcy0+b3B0aW9ucyAmIEJCVF9BVVRPX1JFRlJFU0gpICYmICghcmV0KSkgewotCQlmb3IgKGNoaXBuciA9IDA7IGNoaXBuciA8IHRoaXMtPm51bWNoaXBzOyBjaGlwbnIrKykgewotCQkJaWYgKHJld3JpdGVfYmJ0W2NoaXBucl0pIHsKLQkJCQkvKiB1cGRhdGUgdGhlIEJCVCBmb3IgY2hpcCAqLwotCQkJCURFQlVHIChNVERfREVCVUdfTEVWRUwwLCAibmFuZF9lcmFzZV9uYW5kOiBuYW5kX3VwZGF0ZV9iYnQgKCVkOjB4JTB4IDB4JTB4KVxuIiwKLQkJCQkJY2hpcG5yLCByZXdyaXRlX2JidFtjaGlwbnJdLCB0aGlzLT5iYnRfdGQtPnBhZ2VzW2NoaXBucl0pOwotCQkJCW5hbmRfdXBkYXRlX2JidCAobXRkLCByZXdyaXRlX2JidFtjaGlwbnJdKTsKLQkJCX0KLQkJfQorCS8qCisJICogSWYgQkJUIHJlcXVpcmVzIHJlZnJlc2ggYW5kIGVyYXNlIHdhcyBzdWNjZXNzZnVsLCByZXdyaXRlIGFueQorCSAqIHNlbGVjdGVkIGJhZCBibG9jayB0YWJsZXMKKwkgKi8KKwlpZiAoYmJ0X21hc2tlZF9wYWdlID09IDB4ZmZmZmZmZmYgfHwgcmV0KQorCQlyZXR1cm4gcmV0OworCisJZm9yIChjaGlwbnIgPSAwOyBjaGlwbnIgPCBjaGlwLT5udW1jaGlwczsgY2hpcG5yKyspIHsKKwkJaWYgKCFyZXdyaXRlX2JidFtjaGlwbnJdKQorCQkJY29udGludWU7CisJCS8qIHVwZGF0ZSB0aGUgQkJUIGZvciBjaGlwICovCisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJuYW5kX2VyYXNlX25hbmQ6IG5hbmRfdXBkYXRlX2JidCAiCisJCSAgICAgICIoJWQ6MHglMHggMHglMHgpXG4iLCBjaGlwbnIsIHJld3JpdGVfYmJ0W2NoaXBucl0sCisJCSAgICAgIGNoaXAtPmJidF90ZC0+cGFnZXNbY2hpcG5yXSk7CisJCW5hbmRfdXBkYXRlX2JidChtdGQsIHJld3JpdGVfYmJ0W2NoaXBucl0pOwogCX0KIAogCS8qIFJldHVybiBtb3JlIG9yIGxlc3MgaGFwcHkgKi8KQEAgLTIyNTMsNTEgKzIwNDAsNTAgQEAKICAqCiAgKiBTeW5jIGlzIGFjdHVhbGx5IGEgd2FpdCBmb3IgY2hpcCByZWFkeSBmdW5jdGlvbgogICovCi1zdGF0aWMgdm9pZCBuYW5kX3N5bmMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQorc3RhdGljIHZvaWQgbmFuZF9zeW5jKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCURFQlVHIChNVERfREVCVUdfTEVWRUwzLCAibmFuZF9zeW5jOiBjYWxsZWRcbiIpOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJuYW5kX3N5bmM6IGNhbGxlZFxuIik7CiAKIAkvKiBHcmFiIHRoZSBsb2NrIGFuZCBzZWUgaWYgdGhlIGRldmljZSBpcyBhdmFpbGFibGUgKi8KLQluYW5kX2dldF9kZXZpY2UgKHRoaXMsIG10ZCwgRkxfU1lOQ0lORyk7CisJbmFuZF9nZXRfZGV2aWNlKGNoaXAsIG10ZCwgRkxfU1lOQ0lORyk7CiAJLyogUmVsZWFzZSBpdCBhbmQgZ28gYmFjayAqLwotCW5hbmRfcmVsZWFzZV9kZXZpY2UgKG10ZCk7CisJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogfQogCi0KIC8qKgotICogbmFuZF9ibG9ja19pc2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBDaGVjayB3aGV0aGVyIHRoZSBibG9jayBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIGJhZAorICogbmFuZF9ibG9ja19pc2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBDaGVjayBpZiBibG9jayBhdCBvZmZzZXQgaXMgYmFkCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQG9mczoJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfaXNiYWQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKQorc3RhdGljIGludCBuYW5kX2Jsb2NrX2lzYmFkKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKIHsKIAkvKiBDaGVjayBmb3IgaW52YWxpZCBvZmZzZXQgKi8KLQlpZiAob2ZzID4gbXRkLT5zaXplKQorCWlmIChvZmZzID4gbXRkLT5zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBuYW5kX2Jsb2NrX2NoZWNrYmFkIChtdGQsIG9mcywgMSwgMCk7CisJcmV0dXJuIG5hbmRfYmxvY2tfY2hlY2tiYWQobXRkLCBvZmZzLCAxLCAwKTsKIH0KIAogLyoqCi0gKiBuYW5kX2Jsb2NrX21hcmtiYWQgLSBbTVREIEludGVyZmFjZV0gTWFyayB0aGUgYmxvY2sgYXQgdGhlIGdpdmVuIG9mZnNldCBhcyBiYWQKKyAqIG5hbmRfYmxvY2tfbWFya2JhZCAtIFtNVEQgSW50ZXJmYWNlXSBNYXJrIGJsb2NrIGF0IHRoZSBnaXZlbiBvZmZzZXQgYXMgYmFkCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQG9mczoJb2Zmc2V0IHJlbGF0aXZlIHRvIG10ZCBzdGFydAogICovCi1zdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2JhZCAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpCitzdGF0aWMgaW50IG5hbmRfYmxvY2tfbWFya2JhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcykKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAJaW50IHJldDsKIAotICAgICAgICBpZiAoKHJldCA9IG5hbmRfYmxvY2tfaXNiYWQobXRkLCBvZnMpKSkgewotICAgICAgICAJLyogSWYgaXQgd2FzIGJhZCBhbHJlYWR5LCByZXR1cm4gc3VjY2VzcyBhbmQgZG8gbm90aGluZy4gKi8KKwlpZiAoKHJldCA9IG5hbmRfYmxvY2tfaXNiYWQobXRkLCBvZnMpKSkgeworCQkvKiBJZiBpdCB3YXMgYmFkIGFscmVhZHksIHJldHVybiBzdWNjZXNzIGFuZCBkbyBub3RoaW5nLiAqLwogCQlpZiAocmV0ID4gMCkKIAkJCXJldHVybiAwOwotICAgICAgICAJcmV0dXJuIHJldDsKLSAgICAgICAgfQorCQlyZXR1cm4gcmV0OworCX0KIAotCXJldHVybiB0aGlzLT5ibG9ja19tYXJrYmFkKG10ZCwgb2ZzKTsKKwlyZXR1cm4gY2hpcC0+YmxvY2tfbWFya2JhZChtdGQsIG9mcyk7CiB9CiAKIC8qKgpAQCAtMjMwNiw5ICsyMDkyLDkgQEAKICAqLwogc3RhdGljIGludCBuYW5kX3N1c3BlbmQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OwogCi0JcmV0dXJuIG5hbmRfZ2V0X2RldmljZSAodGhpcywgbXRkLCBGTF9QTV9TVVNQRU5ERUQpOworCXJldHVybiBuYW5kX2dldF9kZXZpY2UoY2hpcCwgbXRkLCBGTF9QTV9TVVNQRU5ERUQpOwogfQogCiAvKioKQEAgLTIzMTcsMzczICsyMTAzLDM4NSBAQAogICovCiBzdGF0aWMgdm9pZCBuYW5kX3Jlc3VtZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQlpZiAodGhpcy0+c3RhdGUgPT0gRkxfUE1fU1VTUEVOREVEKQorCWlmIChjaGlwLT5zdGF0ZSA9PSBGTF9QTV9TVVNQRU5ERUQpCiAJCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0VSUiAicmVzdW1lKCkgY2FsbGVkIGZvciB0aGUgY2hpcCB3aGljaCBpcyBub3QgIgotCQkJCSJpbiBzdXNwZW5kZWQgc3RhdGVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfcmVzdW1lKCkgY2FsbGVkIGZvciBhIGNoaXAgd2hpY2ggaXMgbm90ICIKKwkJICAgICAgICJpbiBzdXNwZW5kZWQgc3RhdGVcbiIpOworfQorCisvKgorICogU2V0IGRlZmF1bHQgZnVuY3Rpb25zCisgKi8KK3N0YXRpYyB2b2lkIG5hbmRfc2V0X2RlZmF1bHRzKHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsIGludCBidXN3KQoreworCS8qIGNoZWNrIGZvciBwcm9wZXIgY2hpcF9kZWxheSBzZXR1cCwgc2V0IDIwdXMgaWYgbm90ICovCisJaWYgKCFjaGlwLT5jaGlwX2RlbGF5KQorCQljaGlwLT5jaGlwX2RlbGF5ID0gMjA7CisKKwkvKiBjaGVjaywgaWYgYSB1c2VyIHN1cHBsaWVkIGNvbW1hbmQgZnVuY3Rpb24gZ2l2ZW4gKi8KKwlpZiAoY2hpcC0+Y21kZnVuYyA9PSBOVUxMKQorCQljaGlwLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kOworCisJLyogY2hlY2ssIGlmIGEgdXNlciBzdXBwbGllZCB3YWl0IGZ1bmN0aW9uIGdpdmVuICovCisJaWYgKGNoaXAtPndhaXRmdW5jID09IE5VTEwpCisJCWNoaXAtPndhaXRmdW5jID0gbmFuZF93YWl0OworCisJaWYgKCFjaGlwLT5zZWxlY3RfY2hpcCkKKwkJY2hpcC0+c2VsZWN0X2NoaXAgPSBuYW5kX3NlbGVjdF9jaGlwOworCWlmICghY2hpcC0+cmVhZF9ieXRlKQorCQljaGlwLT5yZWFkX2J5dGUgPSBidXN3ID8gbmFuZF9yZWFkX2J5dGUxNiA6IG5hbmRfcmVhZF9ieXRlOworCWlmICghY2hpcC0+cmVhZF93b3JkKQorCQljaGlwLT5yZWFkX3dvcmQgPSBuYW5kX3JlYWRfd29yZDsKKwlpZiAoIWNoaXAtPmJsb2NrX2JhZCkKKwkJY2hpcC0+YmxvY2tfYmFkID0gbmFuZF9ibG9ja19iYWQ7CisJaWYgKCFjaGlwLT5ibG9ja19tYXJrYmFkKQorCQljaGlwLT5ibG9ja19tYXJrYmFkID0gbmFuZF9kZWZhdWx0X2Jsb2NrX21hcmtiYWQ7CisJaWYgKCFjaGlwLT53cml0ZV9idWYpCisJCWNoaXAtPndyaXRlX2J1ZiA9IGJ1c3cgPyBuYW5kX3dyaXRlX2J1ZjE2IDogbmFuZF93cml0ZV9idWY7CisJaWYgKCFjaGlwLT5yZWFkX2J1ZikKKwkJY2hpcC0+cmVhZF9idWYgPSBidXN3ID8gbmFuZF9yZWFkX2J1ZjE2IDogbmFuZF9yZWFkX2J1ZjsKKwlpZiAoIWNoaXAtPnZlcmlmeV9idWYpCisJCWNoaXAtPnZlcmlmeV9idWYgPSBidXN3ID8gbmFuZF92ZXJpZnlfYnVmMTYgOiBuYW5kX3ZlcmlmeV9idWY7CisJaWYgKCFjaGlwLT5zY2FuX2JidCkKKwkJY2hpcC0+c2Nhbl9iYnQgPSBuYW5kX2RlZmF1bHRfYmJ0OworCisJaWYgKCFjaGlwLT5jb250cm9sbGVyKSB7CisJCWNoaXAtPmNvbnRyb2xsZXIgPSAmY2hpcC0+aHdjb250cm9sOworCQlzcGluX2xvY2tfaW5pdCgmY2hpcC0+Y29udHJvbGxlci0+bG9jayk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoaXAtPmNvbnRyb2xsZXItPndxKTsKKwl9CiAKIH0KIAorLyoKKyAqIEdldCB0aGUgZmxhc2ggYW5kIG1hbnVmYWN0dXJlciBpZCBhbmQgbG9va3VwIGlmIHRoZSB0eXBlIGlzIHN1cHBvcnRlZAorICovCitzdGF0aWMgc3RydWN0IG5hbmRfZmxhc2hfZGV2ICpuYW5kX2dldF9mbGFzaF90eXBlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkJICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkJICBpbnQgYnVzdywgaW50ICptYWZfaWQpCit7CisJc3RydWN0IG5hbmRfZmxhc2hfZGV2ICp0eXBlID0gTlVMTDsKKwlpbnQgaSwgZGV2X2lkLCBtYWZfaWR4OworCisJLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KKwljaGlwLT5zZWxlY3RfY2hpcChtdGQsIDApOworCisJLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KKwljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfUkVBRElELCAweDAwLCAtMSk7CisKKwkvKiBSZWFkIG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEcyAqLworCSptYWZfaWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKwlkZXZfaWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKworCS8qIExvb2t1cCB0aGUgZmxhc2ggaWQgKi8KKwlmb3IgKGkgPSAwOyBuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lICE9IE5VTEw7IGkrKykgeworCQlpZiAoZGV2X2lkID09IG5hbmRfZmxhc2hfaWRzW2ldLmlkKSB7CisJCQl0eXBlID0gICZuYW5kX2ZsYXNoX2lkc1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCF0eXBlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCWlmICghbXRkLT5uYW1lKQorCQltdGQtPm5hbWUgPSB0eXBlLT5uYW1lOworCisJY2hpcC0+Y2hpcHNpemUgPSB0eXBlLT5jaGlwc2l6ZSA8PCAyMDsKKworCS8qIE5ld2VyIGRldmljZXMgaGF2ZSBhbGwgdGhlIGluZm9ybWF0aW9uIGluIGFkZGl0aW9uYWwgaWQgYnl0ZXMgKi8KKwlpZiAoIXR5cGUtPnBhZ2VzaXplKSB7CisJCWludCBleHRpZDsKKwkJLyogVGhlIDNyZCBpZCBieXRlIGNvbnRhaW5zIG5vbiByZWxldmFudCBkYXRhIEFUTSAqLworCQlleHRpZCA9IGNoaXAtPnJlYWRfYnl0ZShtdGQpOworCQkvKiBUaGUgNHRoIGlkIGJ5dGUgaXMgdGhlIGltcG9ydGFudCBvbmUgKi8KKwkJZXh0aWQgPSBjaGlwLT5yZWFkX2J5dGUobXRkKTsKKwkJLyogQ2FsYyBwYWdlc2l6ZSAqLworCQltdGQtPndyaXRlc2l6ZSA9IDEwMjQgPDwgKGV4dGlkICYgMHgzKTsKKwkJZXh0aWQgPj49IDI7CisJCS8qIENhbGMgb29ic2l6ZSAqLworCQltdGQtPm9vYnNpemUgPSAoOCA8PCAoZXh0aWQgJiAweDAxKSkgKiAobXRkLT53cml0ZXNpemUgPj4gOSk7CisJCWV4dGlkID4+PSAyOworCQkvKiBDYWxjIGJsb2Nrc2l6ZS4gQmxvY2tzaXplIGlzIG11bHRpcGxlcyBvZiA2NEtpQiAqLworCQltdGQtPmVyYXNlc2l6ZSA9ICg2NCAqIDEwMjQpIDw8IChleHRpZCAmIDB4MDMpOworCQlleHRpZCA+Pj0gMjsKKwkJLyogR2V0IGJ1c3dpZHRoIGluZm9ybWF0aW9uICovCisJCWJ1c3cgPSAoZXh0aWQgJiAweDAxKSA/IE5BTkRfQlVTV0lEVEhfMTYgOiAwOworCisJfSBlbHNlIHsKKwkJLyoKKwkJICogT2xkIGRldmljZXMgaGF2ZSBjaGlwIGRhdGEgaGFyZGNvZGVkIGluIHRoZSBkZXZpY2UgaWQgdGFibGUKKwkJICovCisJCW10ZC0+ZXJhc2VzaXplID0gdHlwZS0+ZXJhc2VzaXplOworCQltdGQtPndyaXRlc2l6ZSA9IHR5cGUtPnBhZ2VzaXplOworCQltdGQtPm9vYnNpemUgPSBtdGQtPndyaXRlc2l6ZSAvIDMyOworCQlidXN3ID0gdHlwZS0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7CisJfQorCisJLyogVHJ5IHRvIGlkZW50aWZ5IG1hbnVmYWN0dXJlciAqLworCWZvciAobWFmX2lkeCA9IDA7IG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLmlkICE9IDB4MDsgbWFmX2lkKyspIHsKKwkJaWYgKG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLmlkID09ICptYWZfaWQpCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIENoZWNrLCBpZiBidXN3aWR0aCBpcyBjb3JyZWN0LiBIYXJkd2FyZSBkcml2ZXJzIHNob3VsZCBzZXQKKwkgKiBjaGlwIGNvcnJlY3QgIQorCSAqLworCWlmIChidXN3ICE9IChjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTkFORCBkZXZpY2U6IE1hbnVmYWN0dXJlciBJRDoiCisJCSAgICAgICAiIDB4JTAyeCwgQ2hpcCBJRDogMHglMDJ4ICglcyAlcylcbiIsICptYWZfaWQsCisJCSAgICAgICBkZXZfaWQsIG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLm5hbWUsIG10ZC0+bmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5BTkQgYnVzIHdpZHRoICVkIGluc3RlYWQgJWQgYml0XG4iLAorCQkgICAgICAgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2KSA/IDE2IDogOCwKKwkJICAgICAgIGJ1c3cgPyAxNiA6IDgpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwkvKiBDYWxjdWxhdGUgdGhlIGFkZHJlc3Mgc2hpZnQgZnJvbSB0aGUgcGFnZSBzaXplICovCisJY2hpcC0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPndyaXRlc2l6ZSkgLSAxOworCS8qIENvbnZlcnQgY2hpcHNpemUgdG8gbnVtYmVyIG9mIHBhZ2VzIHBlciBjaGlwIC0xLiAqLworCWNoaXAtPnBhZ2VtYXNrID0gKGNoaXAtPmNoaXBzaXplID4+IGNoaXAtPnBhZ2Vfc2hpZnQpIC0gMTsKKworCWNoaXAtPmJidF9lcmFzZV9zaGlmdCA9IGNoaXAtPnBoeXNfZXJhc2Vfc2hpZnQgPQorCQlmZnMobXRkLT5lcmFzZXNpemUpIC0gMTsKKwljaGlwLT5jaGlwX3NoaWZ0ID0gZmZzKGNoaXAtPmNoaXBzaXplKSAtIDE7CisKKwkvKiBTZXQgdGhlIGJhZCBibG9jayBwb3NpdGlvbiAqLworCWNoaXAtPmJhZGJsb2NrcG9zID0gbXRkLT53cml0ZXNpemUgPiA1MTIgPworCQlOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyA6IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOworCisJLyogR2V0IGNoaXAgb3B0aW9ucywgcHJlc2VydmUgbm9uIGNoaXAgYmFzZWQgb3B0aW9ucyAqLworCWNoaXAtPm9wdGlvbnMgJj0gfk5BTkRfQ0hJUE9QVElPTlNfTVNLOworCWNoaXAtPm9wdGlvbnMgfD0gdHlwZS0+b3B0aW9ucyAmIE5BTkRfQ0hJUE9QVElPTlNfTVNLOworCisJLyoKKwkgKiBTZXQgY2hpcCBhcyBhIGRlZmF1bHQuIEJvYXJkIGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0LCBpZiBuZWNlc3NhcnkKKwkgKi8KKwljaGlwLT5vcHRpb25zIHw9IE5BTkRfTk9fQVVUT0lOQ1I7CisKKwkvKiBDaGVjayBpZiBjaGlwIGlzIGEgbm90IGEgc2Ftc3VuZyBkZXZpY2UuIERvIG5vdCBjbGVhciB0aGUKKwkgKiBvcHRpb25zIGZvciBjaGlwcyB3aGljaCBhcmUgbm90IGhhdmluZyBhbiBleHRlbmRlZCBpZC4KKwkgKi8KKwlpZiAoKm1hZl9pZCAhPSBOQU5EX01GUl9TQU1TVU5HICYmICF0eXBlLT5wYWdlc2l6ZSkKKwkJY2hpcC0+b3B0aW9ucyAmPSB+TkFORF9TQU1TVU5HX0xQX09QVElPTlM7CisKKwkvKiBDaGVjayBmb3IgQU5EIGNoaXBzIHdpdGggNCBwYWdlIHBsYW5lcyAqLworCWlmIChjaGlwLT5vcHRpb25zICYgTkFORF80UEFHRV9BUlJBWSkKKwkJY2hpcC0+ZXJhc2VfY21kID0gbXVsdGlfZXJhc2VfY21kOworCWVsc2UKKwkJY2hpcC0+ZXJhc2VfY21kID0gc2luZ2xlX2VyYXNlX2NtZDsKKworCS8qIERvIG5vdCByZXBsYWNlIHVzZXIgc3VwcGxpZWQgY29tbWFuZCBmdW5jdGlvbiAhICovCisJaWYgKG10ZC0+d3JpdGVzaXplID4gNTEyICYmIGNoaXAtPmNtZGZ1bmMgPT0gbmFuZF9jb21tYW5kKQorCQljaGlwLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kX2xwOworCisJcHJpbnRrKEtFUk5fSU5GTyAiTkFORCBkZXZpY2U6IE1hbnVmYWN0dXJlciBJRDoiCisJICAgICAgICIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgKm1hZl9pZCwgZGV2X2lkLAorCSAgICAgICBuYW5kX21hbnVmX2lkc1ttYWZfaWR4XS5uYW1lLCB0eXBlLT5uYW1lKTsKKworCXJldHVybiB0eXBlOworfQorCisvKiBtb2R1bGVfdGV4dF9hZGRyZXNzKCkgaXNuJ3QgZXhwb3J0ZWQsIGFuZCBpdCdzIG1vc3RseSBhIHBvaW50bGVzcworICAgdGVzdCBpZiB0aGlzIGlzIGEgbW9kdWxlIF9hbnl3YXlfIC0tIHRoZXknZCBoYXZlIHRvIHRyeSBfcmVhbGx5XyBoYXJkCisgICB0byBjYWxsIHVzIGZyb20gaW4ta2VybmVsIGNvZGUgaWYgdGhlIGNvcmUgTkFORCBzdXBwb3J0IGlzIG1vZHVsYXIuICovCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIGNhbGxlcl9pc19tb2R1bGUoKSAoMSkKKyNlbHNlCisjZGVmaW5lIGNhbGxlcl9pc19tb2R1bGUoKSBcCisJbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCisjZW5kaWYKIAogLyoqCiAgKiBuYW5kX3NjYW4gLSBbTkFORCBJbnRlcmZhY2VdIFNjYW4gZm9yIHRoZSBOQU5EIGRldmljZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBtYXhjaGlwczoJTnVtYmVyIG9mIGNoaXBzIHRvIHNjYW4gZm9yCiAgKgotICogVGhpcyBmaWxscyBvdXQgYWxsIHRoZSBub3QgaW5pdGlhbGl6ZWQgZnVuY3Rpb24gcG9pbnRlcnMKKyAqIFRoaXMgZmlsbHMgb3V0IGFsbCB0aGUgdW5pbml0aWFsaXplZCBmdW5jdGlvbiBwb2ludGVycwogICogd2l0aCB0aGUgZGVmYXVsdHMuCiAgKiBUaGUgZmxhc2ggSUQgaXMgcmVhZCBhbmQgdGhlIG10ZC9jaGlwIHN0cnVjdHVyZXMgYXJlCi0gKiBmaWxsZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLiBCdWZmZXJzIGFyZSBhbGxvY2F0ZWQgaWYKLSAqIHRoZXkgYXJlIG5vdCBwcm92aWRlZCBieSB0aGUgYm9hcmQgZHJpdmVyCisgKiBmaWxsZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLgorICogVGhlIG10ZC0+b3duZXIgZmllbGQgbXVzdCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBvZiB0aGUgY2FsbGVyCiAgKgogICovCi1pbnQgbmFuZF9zY2FuIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heGNoaXBzKQoraW50IG5hbmRfc2NhbihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IG1heGNoaXBzKQogewotCWludCBpLCBuYW5kX21hZl9pZCwgbmFuZF9kZXZfaWQsIGJ1c3csIG1hZl9pZDsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCBpLCBidXN3LCBuYW5kX21hZl9pZDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2ZsYXNoX2RldiAqdHlwZTsKIAotCS8qIEdldCBidXN3aWR0aCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZnVuY3Rpb25zKi8KLQlidXN3ID0gdGhpcy0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTY7Ci0KLQkvKiBjaGVjayBmb3IgcHJvcGVyIGNoaXBfZGVsYXkgc2V0dXAsIHNldCAyMHVzIGlmIG5vdCAqLwotCWlmICghdGhpcy0+Y2hpcF9kZWxheSkKLQkJdGhpcy0+Y2hpcF9kZWxheSA9IDIwOwotCi0JLyogY2hlY2ssIGlmIGEgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uIGdpdmVuICovCi0JaWYgKHRoaXMtPmNtZGZ1bmMgPT0gTlVMTCkKLQkJdGhpcy0+Y21kZnVuYyA9IG5hbmRfY29tbWFuZDsKLQotCS8qIGNoZWNrLCBpZiBhIHVzZXIgc3VwcGxpZWQgd2FpdCBmdW5jdGlvbiBnaXZlbiAqLwotCWlmICh0aGlzLT53YWl0ZnVuYyA9PSBOVUxMKQotCQl0aGlzLT53YWl0ZnVuYyA9IG5hbmRfd2FpdDsKLQotCWlmICghdGhpcy0+c2VsZWN0X2NoaXApCi0JCXRoaXMtPnNlbGVjdF9jaGlwID0gbmFuZF9zZWxlY3RfY2hpcDsKLQlpZiAoIXRoaXMtPndyaXRlX2J5dGUpCi0JCXRoaXMtPndyaXRlX2J5dGUgPSBidXN3ID8gbmFuZF93cml0ZV9ieXRlMTYgOiBuYW5kX3dyaXRlX2J5dGU7Ci0JaWYgKCF0aGlzLT5yZWFkX2J5dGUpCi0JCXRoaXMtPnJlYWRfYnl0ZSA9IGJ1c3cgPyBuYW5kX3JlYWRfYnl0ZTE2IDogbmFuZF9yZWFkX2J5dGU7Ci0JaWYgKCF0aGlzLT53cml0ZV93b3JkKQotCQl0aGlzLT53cml0ZV93b3JkID0gbmFuZF93cml0ZV93b3JkOwotCWlmICghdGhpcy0+cmVhZF93b3JkKQotCQl0aGlzLT5yZWFkX3dvcmQgPSBuYW5kX3JlYWRfd29yZDsKLQlpZiAoIXRoaXMtPmJsb2NrX2JhZCkKLQkJdGhpcy0+YmxvY2tfYmFkID0gbmFuZF9ibG9ja19iYWQ7Ci0JaWYgKCF0aGlzLT5ibG9ja19tYXJrYmFkKQotCQl0aGlzLT5ibG9ja19tYXJrYmFkID0gbmFuZF9kZWZhdWx0X2Jsb2NrX21hcmtiYWQ7Ci0JaWYgKCF0aGlzLT53cml0ZV9idWYpCi0JCXRoaXMtPndyaXRlX2J1ZiA9IGJ1c3cgPyBuYW5kX3dyaXRlX2J1ZjE2IDogbmFuZF93cml0ZV9idWY7Ci0JaWYgKCF0aGlzLT5yZWFkX2J1ZikKLQkJdGhpcy0+cmVhZF9idWYgPSBidXN3ID8gbmFuZF9yZWFkX2J1ZjE2IDogbmFuZF9yZWFkX2J1ZjsKLQlpZiAoIXRoaXMtPnZlcmlmeV9idWYpCi0JCXRoaXMtPnZlcmlmeV9idWYgPSBidXN3ID8gbmFuZF92ZXJpZnlfYnVmMTYgOiBuYW5kX3ZlcmlmeV9idWY7Ci0JaWYgKCF0aGlzLT5zY2FuX2JidCkKLQkJdGhpcy0+c2Nhbl9iYnQgPSBuYW5kX2RlZmF1bHRfYmJ0OwotCi0JLyogU2VsZWN0IHRoZSBkZXZpY2UgKi8KLQl0aGlzLT5zZWxlY3RfY2hpcChtdGQsIDApOwotCi0JLyogU2VuZCB0aGUgY29tbWFuZCBmb3IgcmVhZGluZyBkZXZpY2UgSUQgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwotCi0JLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KLQluYW5kX21hZl9pZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCW5hbmRfZGV2X2lkID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7Ci0KLQkvKiBQcmludCBhbmQgc3RvcmUgZmxhc2ggZGV2aWNlIGluZm9ybWF0aW9uICovCi0JZm9yIChpID0gMDsgbmFuZF9mbGFzaF9pZHNbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHsKLQotCQlpZiAobmFuZF9kZXZfaWQgIT0gbmFuZF9mbGFzaF9pZHNbaV0uaWQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIW10ZC0+bmFtZSkgbXRkLT5uYW1lID0gbmFuZF9mbGFzaF9pZHNbaV0ubmFtZTsKLQkJdGhpcy0+Y2hpcHNpemUgPSBuYW5kX2ZsYXNoX2lkc1tpXS5jaGlwc2l6ZSA8PCAyMDsKLQotCQkvKiBOZXcgZGV2aWNlcyBoYXZlIGFsbCB0aGUgaW5mb3JtYXRpb24gaW4gYWRkaXRpb25hbCBpZCBieXRlcyAqLwotCQlpZiAoIW5hbmRfZmxhc2hfaWRzW2ldLnBhZ2VzaXplKSB7Ci0JCQlpbnQgZXh0aWQ7Ci0JCQkvKiBUaGUgM3JkIGlkIGJ5dGUgY29udGFpbnMgbm9uIHJlbGV2YW50IGRhdGEgQVRNICovCi0JCQlleHRpZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJLyogVGhlIDR0aCBpZCBieXRlIGlzIHRoZSBpbXBvcnRhbnQgb25lICovCi0JCQlleHRpZCA9IHRoaXMtPnJlYWRfYnl0ZShtdGQpOwotCQkJLyogQ2FsYyBwYWdlc2l6ZSAqLwotCQkJbXRkLT5vb2JibG9jayA9IDEwMjQgPDwgKGV4dGlkICYgMHgzKTsKLQkJCWV4dGlkID4+PSAyOwotCQkJLyogQ2FsYyBvb2JzaXplICovCi0JCQltdGQtPm9vYnNpemUgPSAoOCA8PCAoZXh0aWQgJiAweDAxKSkgKiAobXRkLT5vb2JibG9jayA+PiA5KTsKLQkJCWV4dGlkID4+PSAyOwotCQkJLyogQ2FsYyBibG9ja3NpemUuIEJsb2Nrc2l6ZSBpcyBtdWx0aXBsZXMgb2YgNjRLaUIgKi8KLQkJCW10ZC0+ZXJhc2VzaXplID0gKDY0ICogMTAyNCkgIDw8IChleHRpZCAmIDB4MDMpOwotCQkJZXh0aWQgPj49IDI7Ci0JCQkvKiBHZXQgYnVzd2lkdGggaW5mb3JtYXRpb24gKi8KLQkJCWJ1c3cgPSAoZXh0aWQgJiAweDAxKSA/IE5BTkRfQlVTV0lEVEhfMTYgOiAwOwotCi0JCX0gZWxzZSB7Ci0JCQkvKiBPbGQgZGV2aWNlcyBoYXZlIHRoaXMgZGF0YSBoYXJkY29kZWQgaW4gdGhlCi0JCQkgKiBkZXZpY2UgaWQgdGFibGUgKi8KLQkJCW10ZC0+ZXJhc2VzaXplID0gbmFuZF9mbGFzaF9pZHNbaV0uZXJhc2VzaXplOwotCQkJbXRkLT5vb2JibG9jayA9IG5hbmRfZmxhc2hfaWRzW2ldLnBhZ2VzaXplOwotCQkJbXRkLT5vb2JzaXplID0gbXRkLT5vb2JibG9jayAvIDMyOwotCQkJYnVzdyA9IG5hbmRfZmxhc2hfaWRzW2ldLm9wdGlvbnMgJiBOQU5EX0JVU1dJRFRIXzE2OwotCQl9Ci0KLQkJLyogVHJ5IHRvIGlkZW50aWZ5IG1hbnVmYWN0dXJlciAqLwotCQlmb3IgKG1hZl9pZCA9IDA7IG5hbmRfbWFudWZfaWRzW21hZl9pZF0uaWQgIT0gMHgwOyBtYWZfaWQrKykgewotCQkJaWYgKG5hbmRfbWFudWZfaWRzW21hZl9pZF0uaWQgPT0gbmFuZF9tYWZfaWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBDaGVjaywgaWYgYnVzd2lkdGggaXMgY29ycmVjdC4gSGFyZHdhcmUgZHJpdmVycyBzaG91bGQgc2V0Ci0JCSAqIHRoaXMgY29ycmVjdCAhICovCi0JCWlmIChidXN3ICE9ICh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikpIHsKLQkJCXByaW50ayAoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKLQkJCQkiIDB4JTAyeCwgQ2hpcCBJRDogMHglMDJ4ICglcyAlcylcbiIsIG5hbmRfbWFmX2lkLCBuYW5kX2Rldl9pZCwKLQkJCQluYW5kX21hbnVmX2lkc1ttYWZfaWRdLm5hbWUgLCBtdGQtPm5hbWUpOwotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcKLQkJCQkiTkFORCBidXMgd2lkdGggJWQgaW5zdGVhZCAlZCBiaXRcbiIsCi0JCQkJCSh0aGlzLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNikgPyAxNiA6IDgsCi0JCQkJCWJ1c3cgPyAxNiA6IDgpOwotCQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCi0JCS8qIENhbGN1bGF0ZSB0aGUgYWRkcmVzcyBzaGlmdCBmcm9tIHRoZSBwYWdlIHNpemUgKi8KLQkJdGhpcy0+cGFnZV9zaGlmdCA9IGZmcyhtdGQtPm9vYmJsb2NrKSAtIDE7Ci0JCXRoaXMtPmJidF9lcmFzZV9zaGlmdCA9IHRoaXMtPnBoeXNfZXJhc2Vfc2hpZnQgPSBmZnMobXRkLT5lcmFzZXNpemUpIC0gMTsKLQkJdGhpcy0+Y2hpcF9zaGlmdCA9IGZmcyh0aGlzLT5jaGlwc2l6ZSkgLSAxOwotCi0JCS8qIFNldCB0aGUgYmFkIGJsb2NrIHBvc2l0aW9uICovCi0JCXRoaXMtPmJhZGJsb2NrcG9zID0gbXRkLT5vb2JibG9jayA+IDUxMiA/Ci0JCQlOQU5EX0xBUkdFX0JBREJMT0NLX1BPUyA6IE5BTkRfU01BTExfQkFEQkxPQ0tfUE9TOwotCi0JCS8qIEdldCBjaGlwIG9wdGlvbnMsIHByZXNlcnZlIG5vbiBjaGlwIGJhc2VkIG9wdGlvbnMgKi8KLQkJdGhpcy0+b3B0aW9ucyAmPSB+TkFORF9DSElQT1BUSU9OU19NU0s7Ci0JCXRoaXMtPm9wdGlvbnMgfD0gbmFuZF9mbGFzaF9pZHNbaV0ub3B0aW9ucyAmIE5BTkRfQ0hJUE9QVElPTlNfTVNLOwotCQkvKiBTZXQgdGhpcyBhcyBhIGRlZmF1bHQuIEJvYXJkIGRyaXZlcnMgY2FuIG92ZXJyaWRlIGl0LCBpZiBuZWNjZWNhcnkgKi8KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX05PX0FVVE9JTkNSOwotCQkvKiBDaGVjayBpZiB0aGlzIGlzIGEgbm90IGEgc2Ftc3VuZyBkZXZpY2UuIERvIG5vdCBjbGVhciB0aGUgb3B0aW9ucwotCQkgKiBmb3IgY2hpcHMgd2hpY2ggYXJlIG5vdCBoYXZpbmcgYW4gZXh0ZW5kZWQgaWQuCi0JCSAqLwotCQlpZiAobmFuZF9tYWZfaWQgIT0gTkFORF9NRlJfU0FNU1VORyAmJiAhbmFuZF9mbGFzaF9pZHNbaV0ucGFnZXNpemUpCi0JCQl0aGlzLT5vcHRpb25zICY9IH5OQU5EX1NBTVNVTkdfTFBfT1BUSU9OUzsKLQotCQkvKiBDaGVjayBmb3IgQU5EIGNoaXBzIHdpdGggNCBwYWdlIHBsYW5lcyAqLwotCQlpZiAodGhpcy0+b3B0aW9ucyAmIE5BTkRfNFBBR0VfQVJSQVkpCi0JCQl0aGlzLT5lcmFzZV9jbWQgPSBtdWx0aV9lcmFzZV9jbWQ7Ci0JCWVsc2UKLQkJCXRoaXMtPmVyYXNlX2NtZCA9IHNpbmdsZV9lcmFzZV9jbWQ7Ci0KLQkJLyogRG8gbm90IHJlcGxhY2UgdXNlciBzdXBwbGllZCBjb21tYW5kIGZ1bmN0aW9uICEgKi8KLQkJaWYgKG10ZC0+b29iYmxvY2sgPiA1MTIgJiYgdGhpcy0+Y21kZnVuYyA9PSBuYW5kX2NvbW1hbmQpCi0JCQl0aGlzLT5jbWRmdW5jID0gbmFuZF9jb21tYW5kX2xwOwotCi0JCXByaW50ayAoS0VSTl9JTkZPICJOQU5EIGRldmljZTogTWFudWZhY3R1cmVyIElEOiIKLQkJCSIgMHglMDJ4LCBDaGlwIElEOiAweCUwMnggKCVzICVzKVxuIiwgbmFuZF9tYWZfaWQsIG5hbmRfZGV2X2lkLAotCQkJbmFuZF9tYW51Zl9pZHNbbWFmX2lkXS5uYW1lICwgbmFuZF9mbGFzaF9pZHNbaV0ubmFtZSk7Ci0JCWJyZWFrOworCS8qIE1hbnkgY2FsbGVycyBnb3QgdGhpcyB3cm9uZywgc28gY2hlY2sgZm9yIGl0IGZvciBhIHdoaWxlLi4uICovCisJaWYgKCFtdGQtPm93bmVyICYmIGNhbGxlcl9pc19tb2R1bGUoKSkgeworCQlwcmludGsoS0VSTl9DUklUICJuYW5kX3NjYW4oKSBjYWxsZWQgd2l0aCBOVUxMIG10ZC0+b3duZXIhXG4iKTsKKwkJQlVHKCk7CiAJfQogCi0JaWYgKCFuYW5kX2ZsYXNoX2lkc1tpXS5uYW1lKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBOQU5EIGRldmljZSBmb3VuZCEhIVxuIik7Ci0JCXRoaXMtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOwotCQlyZXR1cm4gMTsKKwkvKiBHZXQgYnVzd2lkdGggdG8gc2VsZWN0IHRoZSBjb3JyZWN0IGZ1bmN0aW9ucyAqLworCWJ1c3cgPSBjaGlwLT5vcHRpb25zICYgTkFORF9CVVNXSURUSF8xNjsKKwkvKiBTZXQgdGhlIGRlZmF1bHQgZnVuY3Rpb25zICovCisJbmFuZF9zZXRfZGVmYXVsdHMoY2hpcCwgYnVzdyk7CisKKwkvKiBSZWFkIHRoZSBmbGFzaCB0eXBlICovCisJdHlwZSA9IG5hbmRfZ2V0X2ZsYXNoX3R5cGUobXRkLCBjaGlwLCBidXN3LCAmbmFuZF9tYWZfaWQpOworCisJaWYgKElTX0VSUih0eXBlKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBOQU5EIGRldmljZSBmb3VuZCEhIVxuIik7CisJCWNoaXAtPnNlbGVjdF9jaGlwKG10ZCwgLTEpOworCQlyZXR1cm4gUFRSX0VSUih0eXBlKTsKIAl9CiAKLQlmb3IgKGk9MTsgaSA8IG1heGNoaXBzOyBpKyspIHsKLQkJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBpKTsKLQorCS8qIENoZWNrIGZvciBhIGNoaXAgYXJyYXkgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbWF4Y2hpcHM7IGkrKykgeworCQljaGlwLT5zZWxlY3RfY2hpcChtdGQsIGkpOwogCQkvKiBTZW5kIHRoZSBjb21tYW5kIGZvciByZWFkaW5nIGRldmljZSBJRCAqLwotCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1JFQURJRCwgMHgwMCwgLTEpOwotCisJCWNoaXAtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9SRUFESUQsIDB4MDAsIC0xKTsKIAkJLyogUmVhZCBtYW51ZmFjdHVyZXIgYW5kIGRldmljZSBJRHMgKi8KLQkJaWYgKG5hbmRfbWFmX2lkICE9IHRoaXMtPnJlYWRfYnl0ZShtdGQpIHx8Ci0JCSAgICBuYW5kX2Rldl9pZCAhPSB0aGlzLT5yZWFkX2J5dGUobXRkKSkKKwkJaWYgKG5hbmRfbWFmX2lkICE9IGNoaXAtPnJlYWRfYnl0ZShtdGQpIHx8CisJCSAgICB0eXBlLT5pZCAhPSBjaGlwLT5yZWFkX2J5dGUobXRkKSkKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA+IDEpCiAJCXByaW50ayhLRVJOX0lORk8gIiVkIE5BTkQgY2hpcHMgZGV0ZWN0ZWRcbiIsIGkpOwogCi0JLyogQWxsb2NhdGUgYnVmZmVycywgaWYgbmVjY2VjYXJ5ICovCi0JaWYgKCF0aGlzLT5vb2JfYnVmKSB7Ci0JCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwotCQl0aGlzLT5vb2JfYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aGlzLT5vb2JfYnVmKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW4oKTogQ2Fubm90IGFsbG9jYXRlIG9vYl9idWZcbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJdGhpcy0+b3B0aW9ucyB8PSBOQU5EX09PQkJVRl9BTExPQzsKLQl9Ci0KLQlpZiAoIXRoaXMtPmRhdGFfYnVmKSB7Ci0JCXNpemVfdCBsZW47Ci0JCWxlbiA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7Ci0JCXRoaXMtPmRhdGFfYnVmID0ga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF0aGlzLT5kYXRhX2J1ZikgewotCQkJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX09PQkJVRl9BTExPQykKLQkJCQlrZnJlZSAodGhpcy0+b29iX2J1Zik7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW4oKTogQ2Fubm90IGFsbG9jYXRlIGRhdGFfYnVmXG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXRoaXMtPm9wdGlvbnMgfD0gTkFORF9EQVRBQlVGX0FMTE9DOwotCX0KLQogCS8qIFN0b3JlIHRoZSBudW1iZXIgb2YgY2hpcHMgYW5kIGNhbGMgdG90YWwgc2l6ZSBmb3IgbXRkICovCi0JdGhpcy0+bnVtY2hpcHMgPSBpOwotCW10ZC0+c2l6ZSA9IGkgKiB0aGlzLT5jaGlwc2l6ZTsKLQkvKiBDb252ZXJ0IGNoaXBzaXplIHRvIG51bWJlciBvZiBwYWdlcyBwZXIgY2hpcCAtMS4gKi8KLQl0aGlzLT5wYWdlbWFzayA9ICh0aGlzLT5jaGlwc2l6ZSA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAtIDE7Ci0JLyogUHJlc2V0IHRoZSBpbnRlcm5hbCBvb2IgYnVmZmVyICovCi0JbWVtc2V0KHRoaXMtPm9vYl9idWYsIDB4ZmYsIG10ZC0+b29ic2l6ZSA8PCAodGhpcy0+cGh5c19lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpKTsKKwljaGlwLT5udW1jaGlwcyA9IGk7CisJbXRkLT5zaXplID0gaSAqIGNoaXAtPmNoaXBzaXplOwogCi0JLyogSWYgbm8gZGVmYXVsdCBwbGFjZW1lbnQgc2NoZW1lIGlzIGdpdmVuLCBzZWxlY3QgYW4KLQkgKiBhcHByb3ByaWF0ZSBvbmUgKi8KLQlpZiAoIXRoaXMtPmF1dG9vb2IpIHsKLQkJLyogU2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBkZWZhdWx0IG9vYiBwbGFjZW1lbnQgc2NoZW1lIGZvcgotCQkgKiBwbGFjZW1lbnQgYWdub3N0aWMgZmlsZXN5c3RlbXMgKi8KKwkvKiBQcmVzZXQgdGhlIGludGVybmFsIG9vYiB3cml0ZSBidWZmZXIgKi8KKwltZW1zZXQoY2hpcC0+YnVmZmVycy5vb2J3YnVmLCAweGZmLCBtdGQtPm9vYnNpemUpOworCisJLyoKKwkgKiBJZiBubyBkZWZhdWx0IHBsYWNlbWVudCBzY2hlbWUgaXMgZ2l2ZW4sIHNlbGVjdCBhbiBhcHByb3ByaWF0ZSBvbmUKKwkgKi8KKwlpZiAoIWNoaXAtPmVjYy5sYXlvdXQpIHsKIAkJc3dpdGNoIChtdGQtPm9vYnNpemUpIHsKIAkJY2FzZSA4OgotCQkJdGhpcy0+YXV0b29vYiA9ICZuYW5kX29vYl84OworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl84OwogCQkJYnJlYWs7CiAJCWNhc2UgMTY6Ci0JCQl0aGlzLT5hdXRvb29iID0gJm5hbmRfb29iXzE2OworCQkJY2hpcC0+ZWNjLmxheW91dCA9ICZuYW5kX29vYl8xNjsKIAkJCWJyZWFrOwogCQljYXNlIDY0OgotCQkJdGhpcy0+YXV0b29vYiA9ICZuYW5kX29vYl82NDsKKwkJCWNoaXAtPmVjYy5sYXlvdXQgPSAmbmFuZF9vb2JfNjQ7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJObyBvb2Igc2NoZW1lIGRlZmluZWQgZm9yIG9vYnNpemUgJWRcbiIsCi0JCQkJbXRkLT5vb2JzaXplKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIG9vYiBzY2hlbWUgZGVmaW5lZCBmb3IgIgorCQkJICAgICAgICJvb2JzaXplICVkXG4iLCBtdGQtPm9vYnNpemUpOwogCQkJQlVHKCk7CiAJCX0KIAl9CiAKLQkvKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgdGhlIGZpbGVzeXN0ZW0gdG8gcGxhY2UgZnMgZGVwZW5kZW5kCi0JICogb29iIGRhdGEgKi8KLQltdGQtPm9vYmF2YWlsID0gMDsKLQlmb3IgKGkgPSAwOyB0aGlzLT5hdXRvb29iLT5vb2JmcmVlW2ldWzFdOyBpKyspCi0JCW10ZC0+b29iYXZhaWwgKz0gdGhpcy0+YXV0b29vYi0+b29iZnJlZVtpXVsxXTsKKwkvKgorCSAqIGNoZWNrIEVDQyBtb2RlLCBkZWZhdWx0IHRvIHNvZnR3YXJlIGlmIDNieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDIGlzCisJICogc2VsZWN0ZWQgYW5kIHdlIGhhdmUgMjU2IGJ5dGUgcGFnZXNpemUgZmFsbGJhY2sgdG8gc29mdHdhcmUgRUNDCisJICovCisJc3dpdGNoIChjaGlwLT5lY2MubW9kZSkgeworCWNhc2UgTkFORF9FQ0NfSFc6CisJCS8qIFVzZSBzdGFuZGFyZCBod2VjYyByZWFkIHBhZ2UgZnVuY3Rpb24gPyAqLworCQlpZiAoIWNoaXAtPmVjYy5yZWFkX3BhZ2UpCisJCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfaHdlY2M7CisJCWlmICghY2hpcC0+ZWNjLndyaXRlX3BhZ2UpCisJCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9od2VjYzsKKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9vb2IpCisJCQljaGlwLT5lY2MucmVhZF9vb2IgPSBuYW5kX3JlYWRfb29iX3N0ZDsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfb29iKQorCQkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N0ZDsKKworCWNhc2UgTkFORF9FQ0NfSFdfU1lORFJPTUU6CisJCWlmICghY2hpcC0+ZWNjLmNhbGN1bGF0ZSB8fCAhY2hpcC0+ZWNjLmNvcnJlY3QgfHwKKwkJICAgICFjaGlwLT5lY2MuaHdjdGwpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIEVDQyBmdW5jdGlvbnMgc3VwcGxpZWQsICIKKwkJCSAgICAgICAiSGFyZHdhcmUgRUNDIG5vdCBwb3NzaWJsZVxuIik7CisJCQlCVUcoKTsKKwkJfQorCQkvKiBVc2Ugc3RhbmRhcmQgc3luZHJvbWUgcmVhZC93cml0ZSBwYWdlIGZ1bmN0aW9uID8gKi8KKwkJaWYgKCFjaGlwLT5lY2MucmVhZF9wYWdlKQorCQkJY2hpcC0+ZWNjLnJlYWRfcGFnZSA9IG5hbmRfcmVhZF9wYWdlX3N5bmRyb21lOworCQlpZiAoIWNoaXAtPmVjYy53cml0ZV9wYWdlKQorCQkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBuYW5kX3dyaXRlX3BhZ2Vfc3luZHJvbWU7CisJCWlmICghY2hpcC0+ZWNjLnJlYWRfb29iKQorCQkJY2hpcC0+ZWNjLnJlYWRfb29iID0gbmFuZF9yZWFkX29vYl9zeW5kcm9tZTsKKwkJaWYgKCFjaGlwLT5lY2Mud3JpdGVfb29iKQorCQkJY2hpcC0+ZWNjLndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iX3N5bmRyb21lOworCisJCWlmIChtdGQtPndyaXRlc2l6ZSA+PSBjaGlwLT5lY2Muc2l6ZSkKKwkJCWJyZWFrOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlZCBieXRlIEhXIEVDQyBub3QgcG9zc2libGUgb24gIgorCQkgICAgICAgIiVkIGJ5dGUgcGFnZSBzaXplLCBmYWxsYmFjayB0byBTVyBFQ0NcbiIsCisJCSAgICAgICBjaGlwLT5lY2Muc2l6ZSwgbXRkLT53cml0ZXNpemUpOworCQljaGlwLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwljYXNlIE5BTkRfRUNDX1NPRlQ6CisJCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7CisJCWNoaXAtPmVjYy5jb3JyZWN0ID0gbmFuZF9jb3JyZWN0X2RhdGE7CisJCWNoaXAtPmVjYy5yZWFkX3BhZ2UgPSBuYW5kX3JlYWRfcGFnZV9zd2VjYzsKKwkJY2hpcC0+ZWNjLndyaXRlX3BhZ2UgPSBuYW5kX3dyaXRlX3BhZ2Vfc3dlY2M7CisJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOworCQljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKKwkJY2hpcC0+ZWNjLmJ5dGVzID0gMzsKKwkJYnJlYWs7CisKKwljYXNlIE5BTkRfRUNDX05PTkU6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5BTkRfRUNDX05PTkUgc2VsZWN0ZWQgYnkgYm9hcmQgZHJpdmVyLiAiCisJCSAgICAgICAiVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgISFcbiIpOworCQljaGlwLT5lY2MucmVhZF9wYWdlID0gbmFuZF9yZWFkX3BhZ2VfcmF3OworCQljaGlwLT5lY2Mud3JpdGVfcGFnZSA9IG5hbmRfd3JpdGVfcGFnZV9yYXc7CisJCWNoaXAtPmVjYy5yZWFkX29vYiA9IG5hbmRfcmVhZF9vb2Jfc3RkOworCQljaGlwLT5lY2Mud3JpdGVfb29iID0gbmFuZF93cml0ZV9vb2Jfc3RkOworCQljaGlwLT5lY2Muc2l6ZSA9IG10ZC0+d3JpdGVzaXplOworCQljaGlwLT5lY2MuYnl0ZXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIE5BTkRfRUNDX01PREUgJWRcbiIsCisJCSAgICAgICBjaGlwLT5lY2MubW9kZSk7CisJCUJVRygpOworCX0KIAogCS8qCi0JICogY2hlY2sgRUNDIG1vZGUsIGRlZmF1bHQgdG8gc29mdHdhcmUKLQkgKiBpZiAzYnl0ZS81MTJieXRlIGhhcmR3YXJlIEVDQyBpcyBzZWxlY3RlZCBhbmQgd2UgaGF2ZSAyNTYgYnl0ZSBwYWdlc2l6ZQotCSAqIGZhbGxiYWNrIHRvIHNvZnR3YXJlIEVDQwotCSovCi0JdGhpcy0+ZWNjc2l6ZSA9IDI1NjsJLyogc2V0IGRlZmF1bHQgZWNjc2l6ZSAqLwotCXRoaXMtPmVjY2J5dGVzID0gMzsKKwkgKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBmb3IgYSBjbGllbnQgdG8gcGxhY2UgZGF0YSBpbnRvCisJICogdGhlIG91dCBvZiBiYW5kIGFyZWEKKwkgKi8KKwljaGlwLT5lY2MubGF5b3V0LT5vb2JhdmFpbCA9IDA7CisJZm9yIChpID0gMDsgY2hpcC0+ZWNjLmxheW91dC0+b29iZnJlZVtpXS5sZW5ndGg7IGkrKykKKwkJY2hpcC0+ZWNjLmxheW91dC0+b29iYXZhaWwgKz0KKwkJCWNoaXAtPmVjYy5sYXlvdXQtPm9vYmZyZWVbaV0ubGVuZ3RoOwogCi0Jc3dpdGNoICh0aGlzLT5lY2Ntb2RlKSB7Ci0JY2FzZSBOQU5EX0VDQ19IVzEyXzIwNDg6Ci0JCWlmIChtdGQtPm9vYmJsb2NrIDwgMjA0OCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiMjA0OCBieXRlIEhXIEVDQyBub3QgcG9zc2libGUgb24gJWQgYnl0ZSBwYWdlIHNpemUsIGZhbGxiYWNrIHRvIFNXIEVDQ1xuIiwKLQkJCSAgICAgICBtdGQtPm9vYmJsb2NrKTsKLQkJCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOwotCQkJdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IG5hbmRfY2FsY3VsYXRlX2VjYzsKLQkJCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOwotCQl9IGVsc2UKLQkJCXRoaXMtPmVjY3NpemUgPSAyMDQ4OwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfSFczXzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXNl81MTI6Ci0JY2FzZSBOQU5EX0VDQ19IVzhfNTEyOgotCQlpZiAobXRkLT5vb2JibG9jayA9PSAyNTYpIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICI1MTIgYnl0ZSBIVyBFQ0Mgbm90IHBvc3NpYmxlIG9uIDI1NiBCeXRlIHBhZ2VzaXplLCBmYWxsYmFjayB0byBTVyBFQ0MgXG4iKTsKLQkJCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOwotCQkJdGhpcy0+Y2FsY3VsYXRlX2VjYyA9IG5hbmRfY2FsY3VsYXRlX2VjYzsKLQkJCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOwotCQl9IGVsc2UKLQkJCXRoaXMtPmVjY3NpemUgPSA1MTI7IC8qIHNldCBlY2NzaXplIHRvIDUxMiAqLwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfSFczXzI1NjoKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfRUNDX05PTkU6Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJOQU5EX0VDQ19OT05FIHNlbGVjdGVkIGJ5IGJvYXJkIGRyaXZlci4gVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgISFcbiIpOwotCQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfTk9ORTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfRUNDX1NPRlQ6Ci0JCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBuYW5kX2NhbGN1bGF0ZV9lY2M7Ci0JCXRoaXMtPmNvcnJlY3RfZGF0YSA9IG5hbmRfY29ycmVjdF9kYXRhOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJJbnZhbGlkIE5BTkRfRUNDX01PREUgJWRcbiIsIHRoaXMtPmVjY21vZGUpOworCS8qCisJICogU2V0IHRoZSBudW1iZXIgb2YgcmVhZCAvIHdyaXRlIHN0ZXBzIGZvciBvbmUgcGFnZSBkZXBlbmRpbmcgb24gRUNDCisJICogbW9kZQorCSAqLworCWNoaXAtPmVjYy5zdGVwcyA9IG10ZC0+d3JpdGVzaXplIC8gY2hpcC0+ZWNjLnNpemU7CisJaWYoY2hpcC0+ZWNjLnN0ZXBzICogY2hpcC0+ZWNjLnNpemUgIT0gbXRkLT53cml0ZXNpemUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBlY2MgcGFyYW1ldGVyc1xuIik7CiAJCUJVRygpOwogCX0KKwljaGlwLT5lY2MudG90YWwgPSBjaGlwLT5lY2Muc3RlcHMgKiBjaGlwLT5lY2MuYnl0ZXM7CiAKLQkvKiBDaGVjayBoYXJkd2FyZSBlY2MgZnVuY3Rpb24gYXZhaWxhYmlsaXR5IGFuZCBhZGp1c3QgbnVtYmVyIG9mIGVjYyBieXRlcyBwZXIKLQkgKiBjYWxjdWxhdGlvbiBzdGVwCi0JKi8KLQlzd2l0Y2ggKHRoaXMtPmVjY21vZGUpIHsKLQljYXNlIE5BTkRfRUNDX0hXMTJfMjA0ODoKLQkJdGhpcy0+ZWNjYnl0ZXMgKz0gNDsKLQljYXNlIE5BTkRfRUNDX0hXOF81MTI6Ci0JCXRoaXMtPmVjY2J5dGVzICs9IDI7Ci0JY2FzZSBOQU5EX0VDQ19IVzZfNTEyOgotCQl0aGlzLT5lY2NieXRlcyArPSAzOwotCWNhc2UgTkFORF9FQ0NfSFczXzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXM18yNTY6Ci0JCWlmICh0aGlzLT5jYWxjdWxhdGVfZWNjICYmIHRoaXMtPmNvcnJlY3RfZGF0YSAmJiB0aGlzLT5lbmFibGVfaHdlY2MpCi0JCQlicmVhazsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIk5vIEVDQyBmdW5jdGlvbnMgc3VwcGxpZWQsIEhhcmR3YXJlIEVDQyBub3QgcG9zc2libGVcbiIpOwotCQlCVUcoKTsKLQl9Ci0KLQltdGQtPmVjY3NpemUgPSB0aGlzLT5lY2NzaXplOwotCi0JLyogU2V0IHRoZSBudW1iZXIgb2YgcmVhZCAvIHdyaXRlIHN0ZXBzIGZvciBvbmUgcGFnZSB0byBlbnN1cmUgRUNDIGdlbmVyYXRpb24gKi8KLQlzd2l0Y2ggKHRoaXMtPmVjY21vZGUpIHsKLQljYXNlIE5BTkRfRUNDX0hXMTJfMjA0ODoKLQkJdGhpcy0+ZWNjc3RlcHMgPSBtdGQtPm9vYmJsb2NrIC8gMjA0ODsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0VDQ19IVzNfNTEyOgotCWNhc2UgTkFORF9FQ0NfSFc2XzUxMjoKLQljYXNlIE5BTkRfRUNDX0hXOF81MTI6Ci0JCXRoaXMtPmVjY3N0ZXBzID0gbXRkLT5vb2JibG9jayAvIDUxMjsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0VDQ19IVzNfMjU2OgotCWNhc2UgTkFORF9FQ0NfU09GVDoKLQkJdGhpcy0+ZWNjc3RlcHMgPSBtdGQtPm9vYmJsb2NrIC8gMjU2OwotCQlicmVhazsKLQotCWNhc2UgTkFORF9FQ0NfTk9ORToKLQkJdGhpcy0+ZWNjc3RlcHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIHN0YXRlLCB3YWl0cXVldWUgYW5kIHNwaW5sb2NrICovCi0JdGhpcy0+c3RhdGUgPSBGTF9SRUFEWTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmdGhpcy0+d3EpOwotCXNwaW5fbG9ja19pbml0ICgmdGhpcy0+Y2hpcF9sb2NrKTsKKwkvKiBJbml0aWFsaXplIHN0YXRlICovCisJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKIAogCS8qIERlLXNlbGVjdCB0aGUgZGV2aWNlICovCi0JdGhpcy0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CisJY2hpcC0+c2VsZWN0X2NoaXAobXRkLCAtMSk7CiAKIAkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlYnVmZmVyIHJlZmVyZW5jZSAqLwotCXRoaXMtPnBhZ2VidWYgPSAtMTsKKwljaGlwLT5wYWdlYnVmID0gLTE7CiAKIAkvKiBGaWxsIGluIHJlbWFpbmluZyBNVEQgZHJpdmVyIGRhdGEgKi8KIAltdGQtPnR5cGUgPSBNVERfTkFOREZMQVNIOwotCW10ZC0+ZmxhZ3MgPSBNVERfQ0FQX05BTkRGTEFTSCB8IE1URF9FQ0M7CisJbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIOwogCW10ZC0+ZWNjdHlwZSA9IE1URF9FQ0NfU1c7CiAJbXRkLT5lcmFzZSA9IG5hbmRfZXJhc2U7CiAJbXRkLT5wb2ludCA9IE5VTEw7CiAJbXRkLT51bnBvaW50ID0gTlVMTDsKIAltdGQtPnJlYWQgPSBuYW5kX3JlYWQ7CiAJbXRkLT53cml0ZSA9IG5hbmRfd3JpdGU7Ci0JbXRkLT5yZWFkX2VjYyA9IG5hbmRfcmVhZF9lY2M7Ci0JbXRkLT53cml0ZV9lY2MgPSBuYW5kX3dyaXRlX2VjYzsKIAltdGQtPnJlYWRfb29iID0gbmFuZF9yZWFkX29vYjsKIAltdGQtPndyaXRlX29vYiA9IG5hbmRfd3JpdGVfb29iOwotCW10ZC0+cmVhZHYgPSBOVUxMOwotCW10ZC0+d3JpdGV2ID0gbmFuZF93cml0ZXY7Ci0JbXRkLT53cml0ZXZfZWNjID0gbmFuZF93cml0ZXZfZWNjOwogCW10ZC0+c3luYyA9IG5hbmRfc3luYzsKIAltdGQtPmxvY2sgPSBOVUxMOwogCW10ZC0+dW5sb2NrID0gTlVMTDsKQEAgLTI2OTIsNDcgKzI0OTAsMzggQEAKIAltdGQtPmJsb2NrX2lzYmFkID0gbmFuZF9ibG9ja19pc2JhZDsKIAltdGQtPmJsb2NrX21hcmtiYWQgPSBuYW5kX2Jsb2NrX21hcmtiYWQ7CiAKLQkvKiBhbmQgbWFrZSB0aGUgYXV0b29vYiB0aGUgZGVmYXVsdCBvbmUgKi8KLQltZW1jcHkoJm10ZC0+b29iaW5mbywgdGhpcy0+YXV0b29vYiwgc2l6ZW9mKG10ZC0+b29iaW5mbykpOwotCi0JbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCS8qIHByb3BhZ2F0ZSBlY2MubGF5b3V0IHRvIG10ZF9pbmZvICovCisJbXRkLT5lY2NsYXlvdXQgPSBjaGlwLT5lY2MubGF5b3V0OwogCiAJLyogQ2hlY2ssIGlmIHdlIHNob3VsZCBza2lwIHRoZSBiYWQgYmxvY2sgdGFibGUgc2NhbiAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9TS0lQX0JCVFNDQU4pCisJaWYgKGNoaXAtPm9wdGlvbnMgJiBOQU5EX1NLSVBfQkJUU0NBTikKIAkJcmV0dXJuIDA7CiAKIAkvKiBCdWlsZCBiYWQgYmxvY2sgdGFibGUgKi8KLQlyZXR1cm4gdGhpcy0+c2Nhbl9iYnQgKG10ZCk7CisJcmV0dXJuIGNoaXAtPnNjYW5fYmJ0KG10ZCk7CiB9CiAKIC8qKgogICogbmFuZF9yZWxlYXNlIC0gW05BTkQgSW50ZXJmYWNlXSBGcmVlIHJlc291cmNlcyBoZWxkIGJ5IHRoZSBOQU5EIGRldmljZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKICovCi12b2lkIG5hbmRfcmVsZWFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQpCit2b2lkIG5hbmRfcmVsZWFzZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKIHsKLQlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAkvKiBEZXJlZ2lzdGVyIHBhcnRpdGlvbnMgKi8KLQlkZWxfbXRkX3BhcnRpdGlvbnMgKG10ZCk7CisJZGVsX210ZF9wYXJ0aXRpb25zKG10ZCk7CiAjZW5kaWYKIAkvKiBEZXJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KLQlkZWxfbXRkX2RldmljZSAobXRkKTsKKwlkZWxfbXRkX2RldmljZShtdGQpOwogCiAJLyogRnJlZSBiYWQgYmxvY2sgdGFibGUgbWVtb3J5ICovCi0Ja2ZyZWUgKHRoaXMtPmJidCk7Ci0JLyogQnVmZmVyIGFsbG9jYXRlZCBieSBuYW5kX3NjYW4gPyAqLwotCWlmICh0aGlzLT5vcHRpb25zICYgTkFORF9PT0JCVUZfQUxMT0MpCi0JCWtmcmVlICh0aGlzLT5vb2JfYnVmKTsKLQkvKiBCdWZmZXIgYWxsb2NhdGVkIGJ5IG5hbmRfc2NhbiA/ICovCi0JaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0RBVEFCVUZfQUxMT0MpCi0JCWtmcmVlICh0aGlzLT5kYXRhX2J1Zik7CisJa2ZyZWUoY2hpcC0+YmJ0KTsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwgKG5hbmRfc2Nhbik7Ci1FWFBPUlRfU1lNQk9MX0dQTCAobmFuZF9yZWxlYXNlKTsKLQorRVhQT1JUX1NZTUJPTF9HUEwobmFuZF9zY2FuKTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5hbmRfcmVsZWFzZSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IG5hbmRfYmFzZV9pbml0KHZvaWQpCiB7CkBAIC0yNzQ4LDYgKzI1MzcsNiBAQAogbW9kdWxlX2luaXQobmFuZF9iYXNlX2luaXQpOwogbW9kdWxlX2V4aXQobmFuZF9iYXNlX2V4aXQpOwogCi1NT0RVTEVfTElDRU5TRSAoIkdQTCIpOwotTU9EVUxFX0FVVEhPUiAoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04gKCJHZW5lcmljIE5BTkQgZmxhc2ggZHJpdmVyIGNvZGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdlbmVyaWMgTkFORCBmbGFzaCBkcml2ZXIgY29kZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2JidC5jCmluZGV4IGNhMjg2OTkuLmE2MTJjNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYnQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmJ0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICAqCiAgKiBGb2xsb3dpbmcgYXNzdW1wdGlvbnMgYXJlIG1hZGU6CiAgKiAtIGJidHMgc3RhcnQgYXQgYSBwYWdlIGJvdW5kYXJ5LCBpZiBhdXRvbG9jYXRlZCBvbiBhIGJsb2NrIGJvdW5kYXJ5Ci0gKiAtIHRoZSBzcGFjZSBuZWNjZWNhcnkgZm9yIGEgYmJ0IGluIEZMQVNIIGRvZXMgbm90IGV4Y2VlZCBhIGJsb2NrIGJvdW5kYXJ5CisgKiAtIHRoZSBzcGFjZSBuZWNlc3NhcnkgZm9yIGEgYmJ0IGluIEZMQVNIIGRvZXMgbm90IGV4Y2VlZCBhIGJsb2NrIGJvdW5kYXJ5CiAgKgogICovCiAKQEAgLTYwLDcgKzYwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogLyoqCiAgKiBjaGVja19wYXR0ZXJuIC0gW0dFTkVSSUNdIGNoZWNrIGlmIGEgcGF0dGVybiBpcyBpbiB0aGUgYnVmZmVyCkBAIC03NSw3ICs3NSw3IEBACiAgKiBwYXR0ZXJuIGFyZWEgY29udGFpbiAweGZmCiAgKgogKi8KLXN0YXRpYyBpbnQgY2hlY2tfcGF0dGVybiAodWludDhfdCAqYnVmLCBpbnQgbGVuLCBpbnQgcGFnbGVuLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkKQorc3RhdGljIGludCBjaGVja19wYXR0ZXJuKHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbiwgaW50IHBhZ2xlbiwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKIHsKIAlpbnQgaSwgZW5kID0gMDsKIAl1aW50OF90ICpwID0gYnVmOwpAQCAtMTE2LDcgKzExNiw3IEBACiAgKiBubyBvcHRpb25hbCBlbXB0eSBjaGVjawogICoKICovCi1zdGF0aWMgaW50IGNoZWNrX3Nob3J0X3BhdHRlcm4gKHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKK3N0YXRpYyBpbnQgY2hlY2tfc2hvcnRfcGF0dGVybih1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCiB7CiAJaW50IGk7CiAJdWludDhfdCAqcCA9IGJ1ZjsKQEAgLTE0Miw4ICsxNDIsOCBAQAogICogUmVhZCB0aGUgYmFkIGJsb2NrIHRhYmxlIHN0YXJ0aW5nIGZyb20gcGFnZS4KICAqCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgbnVtLAotCWludCBiaXRzLCBpbnQgb2ZmcywgaW50IHJlc2VydmVkX2Jsb2NrX2NvZGUpCitzdGF0aWMgaW50IHJlYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBwYWdlLCBpbnQgbnVtLAorCQkgICAgaW50IGJpdHMsIGludCBvZmZzLCBpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZSkKIHsKIAlpbnQgcmVzLCBpLCBqLCBhY3QgPSAwOwogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CkBAIC0xNTIsMTcgKzE1MiwxNyBAQAogCXVpbnQ4X3QgbXNrID0gKHVpbnQ4X3QpICgoMSA8PCBiaXRzKSAtIDEpOwogCiAJdG90bGVuID0gKG51bSAqIGJpdHMpID4+IDM7Ci0JZnJvbSA9ICgobG9mZl90KXBhZ2UpIDw8IHRoaXMtPnBhZ2Vfc2hpZnQ7CisJZnJvbSA9ICgobG9mZl90KSBwYWdlKSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwogCiAJd2hpbGUgKHRvdGxlbikgewotCQlsZW4gPSBtaW4gKHRvdGxlbiwgKHNpemVfdCkgKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSk7Ci0JCXJlcyA9IG10ZC0+cmVhZF9lY2MgKG10ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBidWYsIE5VTEwsIHRoaXMtPmF1dG9vb2IpOworCQlsZW4gPSBtaW4odG90bGVuLCAoc2l6ZV90KSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpKTsKKwkJcmVzID0gbXRkLT5yZWFkKG10ZCwgZnJvbSwgbGVuLCAmcmV0bGVuLCBidWYpOwogCQlpZiAocmVzIDwgMCkgewogCQkJaWYgKHJldGxlbiAhPSBsZW4pIHsKLQkJCQlwcmludGsgKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJuYW5kX2JidDogRXJyb3IgcmVhZGluZyBiYWQgYmxvY2sgdGFibGVcbiIpOwogCQkJCXJldHVybiByZXM7CiAJCQl9Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVDQyBlcnJvciB3aGlsZSByZWFkaW5nIGJhZCBibG9jayB0YWJsZVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJfQogCiAJCS8qIEFuYWx5c2UgZGF0YSAqLwpAQCAtMTcyLDIyICsxNzIsMjMgQEAKIAkJCQl1aW50OF90IHRtcCA9IChkYXQgPj4gaikgJiBtc2s7CiAJCQkJaWYgKHRtcCA9PSBtc2spCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChyZXNlcnZlZF9ibG9ja19jb2RlICYmCi0JCQkJICAgICh0bXAgPT0gcmVzZXJ2ZWRfYmxvY2tfY29kZSkpIHsKLQkJCQkJcHJpbnRrIChLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBSZXNlcnZlZCBibG9jayBhdCAweCUwOHhcbiIsCi0JCQkJCQkoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQkJCWlmIChyZXNlcnZlZF9ibG9ja19jb2RlICYmICh0bXAgPT0gcmVzZXJ2ZWRfYmxvY2tfY29kZSkpIHsKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIm5hbmRfcmVhZF9iYnQ6IFJlc2VydmVkIGJsb2NrIGF0IDB4JTA4eFxuIiwKKwkJCQkJICAgICAgICgob2ZmcyA8PCAyKSArIChhY3QgPj4gMSkpIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCQkJCXRoaXMtPmJidFtvZmZzICsgKGFjdCA+PiAzKV0gfD0gMHgyIDw8IChhY3QgJiAweDA2KTsKKwkJCQkJbXRkLT5lY2Nfc3RhdHMuYmJ0YmxvY2tzKys7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQkvKiBMZWF2ZSBpdCBmb3Igbm93LCBpZiBpdHMgbWF0dXJlZCB3ZSBjYW4gbW92ZSB0aGlzCiAJCQkJICogbWVzc2FnZSB0byBNVERfREVCVUdfTEVWRUwwICovCi0JCQkJcHJpbnRrIChLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBCYWQgYmxvY2sgYXQgMHglMDh4XG4iLAotCQkJCQkoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICJuYW5kX3JlYWRfYmJ0OiBCYWQgYmxvY2sgYXQgMHglMDh4XG4iLAorCQkJCSAgICAgICAoKG9mZnMgPDwgMikgKyAoYWN0ID4+IDEpKSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCQkJCS8qIEZhY3RvcnkgbWFya2VkIGJhZCBvciB3b3JuIG91dCA/ICovCiAJCQkJaWYgKHRtcCA9PSAwKQogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MyA8PCAoYWN0ICYgMHgwNik7CiAJCQkJZWxzZQogCQkJCQl0aGlzLT5iYnRbb2ZmcyArIChhY3QgPj4gMyldIHw9IDB4MSA8PCAoYWN0ICYgMHgwNik7CisJCQkJbXRkLT5lY2Nfc3RhdHMuYmFkYmxvY2tzKys7CiAJCQl9CiAJCX0KIAkJdG90bGVuIC09IGxlbjsKQEAgLTIwNyw3ICsyMDgsNyBAQAogICogUmVhZCB0aGUgYmFkIGJsb2NrIHRhYmxlIGZvciBhbGwgY2hpcHMgc3RhcnRpbmcgYXQgYSBnaXZlbiBwYWdlCiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgYmJ0IGJpdHMgYXJlIGluIGNvbnNlY3V0aXZlIG9yZGVyLgogKi8KLXN0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBpbnQgY2hpcCkKK3N0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIGludCBjaGlwKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHJlcyA9IDAsIGk7CkBAIC0yMzEsNiArMjMyLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTY2FuIHJlYWQgcmF3IGRhdGEgZnJvbSBmbGFzaAorICovCitzdGF0aWMgaW50IHNjYW5fcmVhZF9yYXcoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwgbG9mZl90IG9mZnMsCisJCQkgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1JBVzsKKwlvcHMub29ib2ZmcyA9IDA7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5kYXRidWYgPSBidWY7CisJb3BzLmxlbiA9IGxlbjsKKworCXJldHVybiBtdGQtPnJlYWRfb29iKG10ZCwgb2ZmcywgJm9wcyk7Cit9CisKKy8qCisgKiBTY2FuIHdyaXRlIGRhdGEgd2l0aCBvb2IgdG8gZmxhc2gKKyAqLworc3RhdGljIGludCBzY2FuX3dyaXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCQkgIHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqb29iKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5vb2JsZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwlvcHMub29iYnVmID0gb29iOworCW9wcy5sZW4gPSBsZW47CisKKwlyZXR1cm4gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzLCAmb3BzKTsKK30KKwogLyoqCiAgKiByZWFkX2Fic19iYnRzIC0gW0dFTkVSSUNdIFJlYWQgdGhlIGJhZCBibG9jayB0YWJsZShzKSBmb3IgYWxsIGNoaXBzIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gcGFnZQogICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTI0MiwyOCArMjc5LDg1IEBACiAgKiBXZSBhc3N1bWUgdGhhdCB0aGUgYmJ0IGJpdHMgYXJlIGluIGNvbnNlY3V0aXZlIG9yZGVyLgogICoKICovCi1zdGF0aWMgaW50IHJlYWRfYWJzX2JidHMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsCi0Jc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKK3N0YXRpYyBpbnQgcmVhZF9hYnNfYmJ0cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCQkJIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqbWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAogCS8qIFJlYWQgdGhlIHByaW1hcnkgdmVyc2lvbiwgaWYgYXZhaWxhYmxlICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQluYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgdGQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCXRkLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+b29iYmxvY2sgKyB0ZC0+dmVyb2Zmc107Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCB0ZC0+cGFnZXNbMF0sIHRkLT52ZXJzaW9uWzBdKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgdGQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsCisJCQkgICAgICBtdGQtPndyaXRlc2l6ZSk7CisJCXRkLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+d3JpdGVzaXplICsgdGQtPnZlcm9mZnNdOworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAorCQkgICAgICAgdGQtPnBhZ2VzWzBdLCB0ZC0+dmVyc2lvblswXSk7CiAJfQogCiAJLyogUmVhZCB0aGUgbWlycm9yIHZlcnNpb24sIGlmIGF2YWlsYWJsZSAqLwogCWlmIChtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSkgewotCQluYW5kX3JlYWRfcmF3IChtdGQsIGJ1ZiwgbWQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCW1kLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+b29iYmxvY2sgKyBtZC0+dmVyb2Zmc107Ci0JCXByaW50ayAoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCBtZC0+cGFnZXNbMF0sIG1kLT52ZXJzaW9uWzBdKTsKKwkJc2Nhbl9yZWFkX3JhdyhtdGQsIGJ1ZiwgbWQtPnBhZ2VzWzBdIDw8IHRoaXMtPnBhZ2Vfc2hpZnQsCisJCQkgICAgICBtdGQtPndyaXRlc2l6ZSk7CisJCW1kLT52ZXJzaW9uWzBdID0gYnVmW210ZC0+d3JpdGVzaXplICsgbWQtPnZlcm9mZnNdOworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLAorCQkgICAgICAgbWQtPnBhZ2VzWzBdLCBtZC0+dmVyc2lvblswXSk7CiAJfQotCiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBTY2FuIGEgZ2l2ZW4gYmxvY2sgZnVsbAorICovCitzdGF0aWMgaW50IHNjYW5fYmxvY2tfZnVsbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCwKKwkJCSAgIGxvZmZfdCBvZmZzLCB1aW50OF90ICpidWYsIHNpemVfdCByZWFkbGVuLAorCQkJICAgaW50IHNjYW5sZW4sIGludCBsZW4pCit7CisJaW50IHJldCwgajsKKworCXJldCA9IHNjYW5fcmVhZF9yYXcobXRkLCBidWYsIG9mZnMsIHJlYWRsZW4pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyssIGJ1ZiArPSBzY2FubGVuKSB7CisJCWlmIChjaGVja19wYXR0ZXJuKGJ1Ziwgc2NhbmxlbiwgbXRkLT53cml0ZXNpemUsIGJkKSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNjYW4gYSBnaXZlbiBibG9jayBwYXJ0aWFsbHkKKyAqLworc3RhdGljIGludCBzY2FuX2Jsb2NrX2Zhc3Qoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQsCisJCQkgICBsb2ZmX3Qgb2ZmcywgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IGosIHJldDsKKworCW9wcy5sZW4gPSBtdGQtPm9vYnNpemU7CisJb3BzLm9vYmxlbiA9IG10ZC0+b29ic2l6ZTsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwlmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKKwkJLyoKKwkJICogUmVhZCB0aGUgZnVsbCBvb2IgdW50aWwgcmVhZF9vb2IgaXMgZml4ZWQgdG8KKwkJICogaGFuZGxlIHNpbmdsZSBieXRlIHJlYWRzIGZvciAxNiBiaXQKKwkJICogYnVzd2lkdGgKKwkJICovCisJCXJldCA9IG10ZC0+cmVhZF9vb2IobXRkLCBvZmZzLCAmb3BzKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4oYnVmLCBiZCkpCisJCQlyZXR1cm4gMTsKKworCQlvZmZzICs9IG10ZC0+d3JpdGVzaXplOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBjcmVhdGVfYmJ0IC0gW0dFTkVSSUNdIENyZWF0ZSBhIGJhZCBibG9jayB0YWJsZSBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtMjc1LDE1ICszNjksMTYgQEAKICAqIENyZWF0ZSBhIGJhZCBibG9jayB0YWJsZSBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBmb3IgdGhlIGdpdmVuIGdvb2QvYmFkIGJsb2NrIGlkZW50aWZ5IHBhdHRlcm4KICAqLwotc3RhdGljIGludCBjcmVhdGVfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkLCBpbnQgY2hpcCkKK3N0YXRpYyBpbnQgY3JlYXRlX2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLAorCXN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQsIGludCBjaGlwKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7Ci0JaW50IGksIGosIG51bWJsb2NrcywgbGVuLCBzY2FubGVuOworCWludCBpLCBudW1ibG9ja3MsIGxlbiwgc2NhbmxlbjsKIAlpbnQgc3RhcnRibG9jazsKIAlsb2ZmX3QgZnJvbTsKLQlzaXplX3QgcmVhZGxlbiwgb29ibGVuOworCXNpemVfdCByZWFkbGVuOwogCi0JcHJpbnRrIChLRVJOX0lORk8gIlNjYW5uaW5nIGRldmljZSBmb3IgYmFkIGJsb2Nrc1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiU2Nhbm5pbmcgZGV2aWNlIGZvciBiYWQgYmxvY2tzXG4iKTsKIAogCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5BTExQQUdFUykKIAkJbGVuID0gMSA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CkBAIC0yOTYsMjUgKzM5MSwyNCBAQAogCiAJaWYgKCEoYmQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQ0FORU1QVFkpKSB7CiAJCS8qIFdlIG5lZWQgb25seSByZWFkIGZldyBieXRlcyBmcm9tIHRoZSBPT0IgYXJlYSAqLwotCQlzY2FubGVuID0gb29ibGVuID0gMDsKKwkJc2NhbmxlbiA9IDA7CiAJCXJlYWRsZW4gPSBiZC0+bGVuOwogCX0gZWxzZSB7CiAJCS8qIEZ1bGwgcGFnZSBjb250ZW50IHNob3VsZCBiZSByZWFkICovCi0JCXNjYW5sZW4JPSBtdGQtPm9vYmJsb2NrICsgbXRkLT5vb2JzaXplOwotCQlyZWFkbGVuID0gbGVuICogbXRkLT5vb2JibG9jazsKLQkJb29ibGVuID0gbGVuICogbXRkLT5vb2JzaXplOworCQlzY2FubGVuID0gbXRkLT53cml0ZXNpemUgKyBtdGQtPm9vYnNpemU7CisJCXJlYWRsZW4gPSBsZW4gKiBtdGQtPndyaXRlc2l6ZTsKIAl9CiAKIAlpZiAoY2hpcCA9PSAtMSkgewotCQkvKiBOb3RlIHRoYXQgbnVtYmxvY2tzIGlzIDIgKiAocmVhbCBudW1ibG9ja3MpIGhlcmUsIHNlZSBpKz0yIGJlbG93IGFzIGl0Ci0JCSAqIG1ha2VzIHNoaWZ0aW5nIGFuZCBtYXNraW5nIGxlc3MgcGFpbmZ1bCAqLworCQkvKiBOb3RlIHRoYXQgbnVtYmxvY2tzIGlzIDIgKiAocmVhbCBudW1ibG9ja3MpIGhlcmUsIHNlZSBpKz0yCisJCSAqIGJlbG93IGFzIGl0IG1ha2VzIHNoaWZ0aW5nIGFuZCBtYXNraW5nIGxlc3MgcGFpbmZ1bCAqLwogCQludW1ibG9ja3MgPSBtdGQtPnNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpOwogCQlzdGFydGJsb2NrID0gMDsKIAkJZnJvbSA9IDA7CiAJfSBlbHNlIHsKIAkJaWYgKGNoaXAgPj0gdGhpcy0+bnVtY2hpcHMpIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJjcmVhdGVfYmJ0KCk6IGNoaXBuciAoJWQpID4gYXZhaWxhYmxlIGNoaXBzICglZClcbiIsCi0JCQkJY2hpcCArIDEsIHRoaXMtPm51bWNoaXBzKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgImNyZWF0ZV9iYnQoKTogY2hpcG5yICglZCkgPiBhdmFpbGFibGUgY2hpcHMgKCVkKVxuIiwKKwkJCSAgICAgICBjaGlwICsgMSwgdGhpcy0+bnVtY2hpcHMpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJbnVtYmxvY2tzID0gdGhpcy0+Y2hpcHNpemUgPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIDEpOwpAQCAtMzI2LDM2ICs0MjAsMjIgQEAKIAlmb3IgKGkgPSBzdGFydGJsb2NrOyBpIDwgbnVtYmxvY2tzOykgewogCQlpbnQgcmV0OwogCi0JCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5FTVBUWSkKLQkJCWlmICgocmV0ID0gbmFuZF9yZWFkX3JhdyAobXRkLCBidWYsIGZyb20sIHJlYWRsZW4sIG9vYmxlbikpKQotCQkJCXJldHVybiByZXQ7CisJCWlmIChiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5BTExQQUdFUykKKwkJCXJldCA9IHNjYW5fYmxvY2tfZnVsbChtdGQsIGJkLCBmcm9tLCBidWYsIHJlYWRsZW4sCisJCQkJCSAgICAgIHNjYW5sZW4sIGxlbik7CisJCWVsc2UKKwkJCXJldCA9IHNjYW5fYmxvY2tfZmFzdChtdGQsIGJkLCBmcm9tLCBidWYsIGxlbik7CiAKLQkJZm9yIChqID0gMDsgaiA8IGxlbjsgaisrKSB7Ci0JCQlpZiAoIShiZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1NDQU5FTVBUWSkpIHsKLQkJCQlzaXplX3QgcmV0bGVuOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAKLQkJCQkvKiBSZWFkIHRoZSBmdWxsIG9vYiB1bnRpbCByZWFkX29vYiBpcyBmaXhlZCB0bwotCQkJCSAqIGhhbmRsZSBzaW5nbGUgYnl0ZSByZWFkcyBmb3IgMTYgYml0IGJ1c3dpZHRoICovCi0JCQkJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIGZyb20gKyBqICogbXRkLT5vb2JibG9jaywKLQkJCQkJCQltdGQtPm9vYnNpemUsICZyZXRsZW4sIGJ1Zik7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQotCQkJCWlmIChjaGVja19zaG9ydF9wYXR0ZXJuIChidWYsIGJkKSkgewotCQkJCQl0aGlzLT5iYnRbaSA+PiAzXSB8PSAweDAzIDw8IChpICYgMHg2KTsKLQkJCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTA4eFxuIiwKLQkJCQkJCWkgPj4gMSwgKHVuc2lnbmVkIGludCkgZnJvbSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNoZWNrX3BhdHRlcm4gKCZidWZbaiAqIHNjYW5sZW5dLCBzY2FubGVuLCBtdGQtPm9vYmJsb2NrLCBiZCkpIHsKLQkJCQkJdGhpcy0+YmJ0W2kgPj4gM10gfD0gMHgwMyA8PCAoaSAmIDB4Nik7Ci0JCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJCYWQgZXJhc2VibG9jayAlZCBhdCAweCUwOHhcbiIsCi0JCQkJCQlpID4+IDEsICh1bnNpZ25lZCBpbnQpIGZyb20pOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9CisJCWlmIChyZXQpIHsKKwkJCXRoaXMtPmJidFtpID4+IDNdIHw9IDB4MDMgPDwgKGkgJiAweDYpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQmFkIGVyYXNlYmxvY2sgJWQgYXQgMHglMDh4XG4iLAorCQkJICAgICAgIGkgPj4gMSwgKHVuc2lnbmVkIGludClmcm9tKTsKKwkJCW10ZC0+ZWNjX3N0YXRzLmJhZGJsb2NrcysrOwogCQl9CisKIAkJaSArPSAyOwogCQlmcm9tICs9ICgxIDw8IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJfQpAQCAtMzc0LDIyICs0NTQsMjMgQEAKICAqIGJsb2NrLgogICogSWYgdGhlIG9wdGlvbiBOQU5EX0JCVF9QRVJDSElQIGlzIGdpdmVuLCBlYWNoIGNoaXAgaXMgc2VhcmNoZWQKICAqIGZvciBhIGJidCwgd2hpY2ggY29udGFpbnMgdGhlIGJhZCBibG9jayBpbmZvcm1hdGlvbiBvZiB0aGlzIGNoaXAuCi0gKiBUaGlzIGlzIG5lY2NlY2FyeSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGNlcnRhaW4gRE9DIGRldmljZXMuCisgKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGNlcnRhaW4gRE9DIGRldmljZXMuCiAgKgogICogVGhlIGJidCBpZGVudCBwYXR0ZXJuIHJlc2lkZXMgaW4gdGhlIG9vYiBhcmVhIG9mIHRoZSBmaXJzdCBwYWdlCiAgKiBpbiBhIGJsb2NrLgogICovCi1zdGF0aWMgaW50IHNlYXJjaF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCitzdGF0aWMgaW50IHNlYXJjaF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCBpLCBjaGlwczsKIAlpbnQgYml0cywgc3RhcnRibG9jaywgYmxvY2ssIGRpcjsKLQlpbnQgc2NhbmxlbiA9IG10ZC0+b29iYmxvY2sgKyBtdGQtPm9vYnNpemU7CisJaW50IHNjYW5sZW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKIAlpbnQgYmJ0YmxvY2tzOworCWludCBibG9ja3RvcGFnZSA9IHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQ7CiAKIAkvKiBTZWFyY2ggZGlyZWN0aW9uIHRvcCAtPiBkb3duID8gKi8KIAlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9MQVNUQkxPQ0spIHsKLQkJc3RhcnRibG9jayA9IChtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSAtMTsKKwkJc3RhcnRibG9jayA9IChtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KSAtIDE7CiAJCWRpciA9IC0xOwogCX0gZWxzZSB7CiAJCXN0YXJ0YmxvY2sgPSAwOwpAQCAtNDE1LDEzICs0OTYsMTYgQEAKIAkJdGQtPnBhZ2VzW2ldID0gLTE7CiAJCS8qIFNjYW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyAqLwogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCB0ZC0+bWF4YmxvY2tzOyBibG9jaysrKSB7CisKIAkJCWludCBhY3RibG9jayA9IHN0YXJ0YmxvY2sgKyBkaXIgKiBibG9jazsKKwkJCWxvZmZfdCBvZmZzID0gYWN0YmxvY2sgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0OworCiAJCQkvKiBSZWFkIGZpcnN0IHBhZ2UgKi8KLQkJCW5hbmRfcmVhZF9yYXcgKG10ZCwgYnVmLCBhY3RibG9jayA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQsIG10ZC0+b29iYmxvY2ssIG10ZC0+b29ic2l6ZSk7Ci0JCQlpZiAoIWNoZWNrX3BhdHRlcm4oYnVmLCBzY2FubGVuLCBtdGQtPm9vYmJsb2NrLCB0ZCkpIHsKLQkJCQl0ZC0+cGFnZXNbaV0gPSBhY3RibG9jayA8PCAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0IC0gdGhpcy0+cGFnZV9zaGlmdCk7CisJCQlzY2FuX3JlYWRfcmF3KG10ZCwgYnVmLCBvZmZzLCBtdGQtPndyaXRlc2l6ZSk7CisJCQlpZiAoIWNoZWNrX3BhdHRlcm4oYnVmLCBzY2FubGVuLCBtdGQtPndyaXRlc2l6ZSwgdGQpKSB7CisJCQkJdGQtPnBhZ2VzW2ldID0gYWN0YmxvY2sgPDwgYmxvY2t0b3BhZ2U7CiAJCQkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikgewotCQkJCQl0ZC0+dmVyc2lvbltpXSA9IGJ1ZlttdGQtPm9vYmJsb2NrICsgdGQtPnZlcm9mZnNdOworCQkJCQl0ZC0+dmVyc2lvbltpXSA9IGJ1ZlttdGQtPndyaXRlc2l6ZSArIHRkLT52ZXJvZmZzXTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC00MzEsOSArNTE1LDEwIEBACiAJLyogQ2hlY2ssIGlmIHdlIGZvdW5kIGEgYmJ0IGZvciBlYWNoIHJlcXVlc3RlZCBjaGlwICovCiAJZm9yIChpID0gMDsgaSA8IGNoaXBzOyBpKyspIHsKIAkJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSkKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJCYWQgYmxvY2sgdGFibGUgbm90IGZvdW5kIGZvciBjaGlwICVkXG4iLCBpKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJhZCBibG9jayB0YWJsZSBub3QgZm91bmQgZm9yIGNoaXAgJWRcbiIsIGkpOwogCQllbHNlCi0JCQlwcmludGsgKEtFUk5fREVCVUcgIkJhZCBibG9jayB0YWJsZSBmb3VuZCBhdCBwYWdlICVkLCB2ZXJzaW9uIDB4JTAyWFxuIiwgdGQtPnBhZ2VzW2ldLCB0ZC0+dmVyc2lvbltpXSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIGZvdW5kIGF0IHBhZ2UgJWQsIHZlcnNpb24gMHglMDJYXG4iLCB0ZC0+cGFnZXNbaV0sCisJCQkgICAgICAgdGQtPnZlcnNpb25baV0pOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTQ0NywyMSArNTMyLDE5IEBACiAgKgogICogU2VhcmNoIGFuZCByZWFkIHRoZSBiYWQgYmxvY2sgdGFibGUocykKICovCi1zdGF0aWMgaW50IHNlYXJjaF9yZWFkX2JidHMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsCi0Jc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKK3N0YXRpYyBpbnQgc2VhcmNoX3JlYWRfYmJ0cyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqIGJ1Ziwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCkKIHsKIAkvKiBTZWFyY2ggdGhlIHByaW1hcnkgdGFibGUgKi8KLQlzZWFyY2hfYmJ0IChtdGQsIGJ1ZiwgdGQpOworCXNlYXJjaF9iYnQobXRkLCBidWYsIHRkKTsKIAogCS8qIFNlYXJjaCB0aGUgbWlycm9yIHRhYmxlICovCiAJaWYgKG1kKQotCQlzZWFyY2hfYmJ0IChtdGQsIGJ1ZiwgbWQpOworCQlzZWFyY2hfYmJ0KG10ZCwgYnVmLCBtZCk7CiAKIAkvKiBGb3JjZSByZXN1bHQgY2hlY2sgKi8KIAlyZXR1cm4gMTsKIH0KIAotCiAvKioKICAqIHdyaXRlX2JidCAtIFtHRU5FUklDXSAoUmUpd3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZQogICoKQEAgLTQ3NCwyNSArNTU3LDMxIEBACiAgKiAoUmUpd3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZQogICoKICovCi1zdGF0aWMgaW50IHdyaXRlX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmJ1ZiwKLQlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKnRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKm1kLCBpbnQgY2hpcHNlbCkKK3N0YXRpYyBpbnQgd3JpdGVfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsCisJCSAgICAgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICp0ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICptZCwKKwkJICAgICBpbnQgY2hpcHNlbCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKIAlzdHJ1Y3QgZXJhc2VfaW5mbyBlaW5mbzsKIAlpbnQgaSwgaiwgcmVzLCBjaGlwID0gMDsKIAlpbnQgYml0cywgc3RhcnRibG9jaywgZGlyLCBwYWdlLCBvZmZzLCBudW1ibG9ja3MsIHNmdCwgc2Z0bXNrOwotCWludCBucmNoaXBzLCBiYnRvZmZzLCBwYWdlb2ZmczsKKwlpbnQgbnJjaGlwcywgYmJ0b2ZmcywgcGFnZW9mZnMsIG9vYm9mZnM7CiAJdWludDhfdCBtc2tbNF07CiAJdWludDhfdCByY29kZSA9IHRkLT5yZXNlcnZlZF9ibG9ja19jb2RlOwogCXNpemVfdCByZXRsZW4sIGxlbiA9IDA7CiAJbG9mZl90IHRvOworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CiAKIAlpZiAoIXJjb2RlKQogCQlyY29kZSA9IDB4ZmY7CiAJLyogV3JpdGUgYmFkIGJsb2NrIHRhYmxlIHBlciBjaGlwIHJhdGhlciB0aGFuIHBlciBkZXZpY2UgPyAqLwogCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1BFUkNISVApIHsKLQkJbnVtYmxvY2tzID0gKGludCkgKHRoaXMtPmNoaXBzaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CisJCW51bWJsb2NrcyA9IChpbnQpKHRoaXMtPmNoaXBzaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCS8qIEZ1bGwgZGV2aWNlIHdyaXRlIG9yIHNwZWNpZmljIGNoaXAgPyAqLwogCQlpZiAoY2hpcHNlbCA9PSAtMSkgewogCQkJbnJjaGlwcyA9IHRoaXMtPm51bWNoaXBzOwpAQCAtNTAxLDcgKzU5MCw3IEBACiAJCQljaGlwID0gY2hpcHNlbDsKIAkJfQogCX0gZWxzZSB7Ci0JCW51bWJsb2NrcyA9IChpbnQpIChtdGQtPnNpemUgPj4gdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKKwkJbnVtYmxvY2tzID0gKGludCkobXRkLT5zaXplID4+IHRoaXMtPmJidF9lcmFzZV9zaGlmdCk7CiAJCW5yY2hpcHMgPSAxOwogCX0KIApAQCAtNTMwLDI3ICs2MTksMzggQEAKIAkJZm9yIChpID0gMDsgaSA8IHRkLT5tYXhibG9ja3M7IGkrKykgewogCQkJaW50IGJsb2NrID0gc3RhcnRibG9jayArIGRpciAqIGk7CiAJCQkvKiBDaGVjaywgaWYgdGhlIGJsb2NrIGlzIGJhZCAqLwotCQkJc3dpdGNoICgodGhpcy0+YmJ0W2Jsb2NrID4+IDJdID4+ICgyICogKGJsb2NrICYgMHgwMykpKSAmIDB4MDMpIHsKKwkJCXN3aXRjaCAoKHRoaXMtPmJidFtibG9jayA+PiAyXSA+PgorCQkJCSAoMiAqIChibG9jayAmIDB4MDMpKSkgJiAweDAzKSB7CiAJCQljYXNlIDB4MDE6CiAJCQljYXNlIDB4MDM6CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlwYWdlID0gYmxvY2sgPDwgKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOworCQkJcGFnZSA9IGJsb2NrIDw8CisJCQkJKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwogCQkJLyogQ2hlY2ssIGlmIHRoZSBibG9jayBpcyB1c2VkIGJ5IHRoZSBtaXJyb3IgdGFibGUgKi8KIAkJCWlmICghbWQgfHwgbWQtPnBhZ2VzW2NoaXBdICE9IHBhZ2UpCiAJCQkJZ290byB3cml0ZTsKIAkJfQotCQlwcmludGsgKEtFUk5fRVJSICJObyBzcGFjZSBsZWZ0IHRvIHdyaXRlIGJhZCBibG9jayB0YWJsZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gc3BhY2UgbGVmdCB0byB3cml0ZSBiYWQgYmxvY2sgdGFibGVcbiIpOwogCQlyZXR1cm4gLUVOT1NQQzsKLXdyaXRlOgorCXdyaXRlOgogCiAJCS8qIFNldCB1cCBzaGlmdCBjb3VudCBhbmQgbWFza3MgZm9yIHRoZSBmbGFzaCB0YWJsZSAqLwogCQliaXRzID0gdGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9OUkJJVFNfTVNLOworCQltc2tbMl0gPSB+cmNvZGU7CiAJCXN3aXRjaCAoYml0cykgewotCQljYXNlIDE6IHNmdCA9IDM7IHNmdG1zayA9IDB4MDc7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MDE7IG1za1syXSA9IH5yY29kZTsgbXNrWzNdID0gMHgwMTsgYnJlYWs7Ci0JCWNhc2UgMjogc2Z0ID0gMjsgc2Z0bXNrID0gMHgwNjsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwMTsgbXNrWzJdID0gfnJjb2RlOyBtc2tbM10gPSAweDAzOyBicmVhazsKLQkJY2FzZSA0OiBzZnQgPSAxOyBzZnRtc2sgPSAweDA0OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDBDOyBtc2tbMl0gPSB+cmNvZGU7IG1za1szXSA9IDB4MGY7IGJyZWFrOwotCQljYXNlIDg6IHNmdCA9IDA7IHNmdG1zayA9IDB4MDA7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MEY7IG1za1syXSA9IH5yY29kZTsgbXNrWzNdID0gMHhmZjsgYnJlYWs7CisJCWNhc2UgMTogc2Z0ID0gMzsgc2Z0bXNrID0gMHgwNzsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwMTsKKwkJCW1za1szXSA9IDB4MDE7CisJCQlicmVhazsKKwkJY2FzZSAyOiBzZnQgPSAyOyBzZnRtc2sgPSAweDA2OyBtc2tbMF0gPSAweDAwOyBtc2tbMV0gPSAweDAxOworCQkJbXNrWzNdID0gMHgwMzsKKwkJCWJyZWFrOworCQljYXNlIDQ6IHNmdCA9IDE7IHNmdG1zayA9IDB4MDQ7IG1za1swXSA9IDB4MDA7IG1za1sxXSA9IDB4MEM7CisJCQltc2tbM10gPSAweDBmOworCQkJYnJlYWs7CisJCWNhc2UgODogc2Z0ID0gMDsgc2Z0bXNrID0gMHgwMDsgbXNrWzBdID0gMHgwMDsgbXNrWzFdID0gMHgwRjsKKwkJCW1za1szXSA9IDB4ZmY7CisJCQlicmVhazsKIAkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtNTU4LDgyICs2NTgsOTIgQEAKIAogCQl0byA9ICgobG9mZl90KSBwYWdlKSA8PCB0aGlzLT5wYWdlX3NoaWZ0OwogCi0JCW1lbWNweSAoJm9vYmluZm8sIHRoaXMtPmF1dG9vb2IsIHNpemVvZihvb2JpbmZvKSk7Ci0JCW9vYmluZm8udXNlZWNjID0gTVREX05BTkRFQ0NfUExBQ0VPTkxZOwotCiAJCS8qIE11c3Qgd2Ugc2F2ZSB0aGUgYmxvY2sgY29udGVudHMgPyAqLwogCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9TQVZFQ09OVEVOVCkgewogCQkJLyogTWFrZSBpdCBibG9jayBhbGlnbmVkICovCiAJCQl0byAmPSB+KChsb2ZmX3QpICgoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpIC0gMSkpOwogCQkJbGVuID0gMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JCQlyZXMgPSBtdGQtPnJlYWRfZWNjIChtdGQsIHRvLCBsZW4sICZyZXRsZW4sIGJ1ZiwgJmJ1ZltsZW5dLCAmb29iaW5mbyk7CisJCQlyZXMgPSBtdGQtPnJlYWQobXRkLCB0bywgbGVuLCAmcmV0bGVuLCBidWYpOwogCQkJaWYgKHJlcyA8IDApIHsKIAkJCQlpZiAocmV0bGVuICE9IGxlbikgewotCQkJCQlwcmludGsgKEtFUk5fSU5GTyAibmFuZF9iYnQ6IEVycm9yIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgdGhlIGJhZCBibG9jayB0YWJsZVxuIik7CisJCQkJCXByaW50ayhLRVJOX0lORk8gIm5hbmRfYmJ0OiBFcnJvciAiCisJCQkJCSAgICAgICAicmVhZGluZyBibG9jayBmb3Igd3JpdGluZyAiCisJCQkJCSAgICAgICAidGhlIGJhZCBibG9jayB0YWJsZVxuIik7CiAJCQkJCXJldHVybiByZXM7CiAJCQkJfQotCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yIHdoaWxlIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlXG4iKTsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJuYW5kX2JidDogRUNDIGVycm9yICIKKwkJCQkgICAgICAgIndoaWxlIHJlYWRpbmcgYmxvY2sgZm9yIHdyaXRpbmcgIgorCQkJCSAgICAgICAiYmFkIGJsb2NrIHRhYmxlXG4iKTsKIAkJCX0KKwkJCS8qIFJlYWQgb29iIGRhdGEgKi8KKwkJCW9wcy5sZW4gPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOworCQkJb3BzLm9vYmJ1ZiA9ICZidWZbbGVuXTsKKwkJCXJlcyA9IG10ZC0+cmVhZF9vb2IobXRkLCB0byArIG10ZC0+d3JpdGVzaXplLCAmb3BzKTsKKwkJCWlmIChyZXMgPCAwIHx8IG9wcy5yZXRsZW4gIT0gb3BzLmxlbikKKwkJCQlnb3RvIG91dGVycjsKKwogCQkJLyogQ2FsYyB0aGUgYnl0ZSBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAqLwogCQkJcGFnZW9mZnMgPSBwYWdlIC0gKGludCkodG8gPj4gdGhpcy0+cGFnZV9zaGlmdCk7CiAJCQlvZmZzID0gcGFnZW9mZnMgPDwgdGhpcy0+cGFnZV9zaGlmdDsKIAkJCS8qIFByZXNldCB0aGUgYmJ0IGFyZWEgd2l0aCAweGZmICovCi0JCQltZW1zZXQgKCZidWZbb2Zmc10sIDB4ZmYsIChzaXplX3QpKG51bWJsb2NrcyA+PiBzZnQpKTsKLQkJCS8qIFByZXNldCB0aGUgYmJ0J3Mgb29iIGFyZWEgd2l0aCAweGZmICovCi0JCQltZW1zZXQgKCZidWZbbGVuICsgcGFnZW9mZnMgKiBtdGQtPm9vYnNpemVdLCAweGZmLAotCQkJCSgobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpIC0gcGFnZW9mZnMpICogbXRkLT5vb2JzaXplKTsKLQkJCWlmICh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1ZFUlNJT04pIHsKLQkJCQlidWZbbGVuICsgKHBhZ2VvZmZzICogbXRkLT5vb2JzaXplKSArIHRkLT52ZXJvZmZzXSA9IHRkLT52ZXJzaW9uW2NoaXBdOwotCQkJfQorCQkJbWVtc2V0KCZidWZbb2Zmc10sIDB4ZmYsIChzaXplX3QpIChudW1ibG9ja3MgPj4gc2Z0KSk7CisJCQlvb2JvZmZzID0gbGVuICsgKHBhZ2VvZmZzICogbXRkLT5vb2JzaXplKTsKKwogCQl9IGVsc2UgewogCQkJLyogQ2FsYyBsZW5ndGggKi8KIAkJCWxlbiA9IChzaXplX3QpIChudW1ibG9ja3MgPj4gc2Z0KTsKIAkJCS8qIE1ha2UgaXQgcGFnZSBhbGlnbmVkICEgKi8KLQkJCWxlbiA9IChsZW4gKyAobXRkLT5vb2JibG9jay0xKSkgJiB+KG10ZC0+b29iYmxvY2stMSk7CisJCQlsZW4gPSAobGVuICsgKG10ZC0+d3JpdGVzaXplIC0gMSkpICYKKwkJCQl+KG10ZC0+d3JpdGVzaXplIC0gMSk7CiAJCQkvKiBQcmVzZXQgdGhlIGJ1ZmZlciB3aXRoIDB4ZmYgKi8KLQkJCW1lbXNldCAoYnVmLCAweGZmLCBsZW4gKyAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplKTsKKwkJCW1lbXNldChidWYsIDB4ZmYsIGxlbiArCisJCQkgICAgICAgKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSogbXRkLT5vb2JzaXplKTsKIAkJCW9mZnMgPSAwOworCQkJb29ib2ZmcyA9IGxlbjsKIAkJCS8qIFBhdHRlcm4gaXMgbG9jYXRlZCBpbiBvb2IgYXJlYSBvZiBmaXJzdCBwYWdlICovCi0JCQltZW1jcHkgKCZidWZbbGVuICsgdGQtPm9mZnNdLCB0ZC0+cGF0dGVybiwgdGQtPmxlbik7Ci0JCQlpZiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9WRVJTSU9OKSB7Ci0JCQkJYnVmW2xlbiArIHRkLT52ZXJvZmZzXSA9IHRkLT52ZXJzaW9uW2NoaXBdOwotCQkJfQorCQkJbWVtY3B5KCZidWZbb29ib2ZmcyArIHRkLT5vZmZzXSwgdGQtPnBhdHRlcm4sIHRkLT5sZW4pOwogCQl9CiAKKwkJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfVkVSU0lPTikKKwkJCWJ1Zltvb2JvZmZzICsgdGQtPnZlcm9mZnNdID0gdGQtPnZlcnNpb25bY2hpcF07CisKIAkJLyogd2FsayB0aHJvdWdoIHRoZSBtZW1vcnkgdGFibGUgKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bWJsb2NrczsgKSB7CisJCWZvciAoaSA9IDA7IGkgPCBudW1ibG9ja3M7KSB7CiAJCQl1aW50OF90IGRhdDsKIAkJCWRhdCA9IHRoaXMtPmJidFtiYnRvZmZzICsgKGkgPj4gMildOwotCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKyAsIGkrKykgeworCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKywgaSsrKSB7CiAJCQkJaW50IHNmdGNudCA9IChpIDw8ICgzIC0gc2Z0KSkgJiBzZnRtc2s7CiAJCQkJLyogRG8gbm90IHN0b3JlIHRoZSByZXNlcnZlZCBiYnQgYmxvY2tzICEgKi8KLQkJCQlidWZbb2ZmcyArIChpID4+IHNmdCldICY9IH4obXNrW2RhdCAmIDB4MDNdIDw8IHNmdGNudCk7CisJCQkJYnVmW29mZnMgKyAoaSA+PiBzZnQpXSAmPQorCQkJCQl+KG1za1tkYXQgJiAweDAzXSA8PCBzZnRjbnQpOwogCQkJCWRhdCA+Pj0gMjsKIAkJCX0KIAkJfQogCi0JCW1lbXNldCAoJmVpbmZvLCAwLCBzaXplb2YgKGVpbmZvKSk7CisJCW1lbXNldCgmZWluZm8sIDAsIHNpemVvZihlaW5mbykpOwogCQllaW5mby5tdGQgPSBtdGQ7Ci0JCWVpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZykgdG87CisJCWVpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZyl0bzsKIAkJZWluZm8ubGVuID0gMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQ7Ci0JCXJlcyA9IG5hbmRfZXJhc2VfbmFuZCAobXRkLCAmZWluZm8sIDEpOwotCQlpZiAocmVzIDwgMCkgewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIm5hbmRfYmJ0OiBFcnJvciBkdXJpbmcgYmxvY2sgZXJhc2U6ICVkXG4iLCByZXMpOwotCQkJcmV0dXJuIHJlczsKLQkJfQorCQlyZXMgPSBuYW5kX2VyYXNlX25hbmQobXRkLCAmZWluZm8sIDEpOworCQlpZiAocmVzIDwgMCkKKwkJCWdvdG8gb3V0ZXJyOwogCi0JCXJlcyA9IG10ZC0+d3JpdGVfZWNjIChtdGQsIHRvLCBsZW4sICZyZXRsZW4sIGJ1ZiwgJmJ1ZltsZW5dLCAmb29iaW5mbyk7Ci0JCWlmIChyZXMgPCAwKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAibmFuZF9iYnQ6IEVycm9yIHdoaWxlIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlICVkXG4iLCByZXMpOwotCQkJcmV0dXJuIHJlczsKLQkJfQotCQlwcmludGsgKEtFUk5fREVCVUcgIkJhZCBibG9jayB0YWJsZSB3cml0dGVuIHRvIDB4JTA4eCwgdmVyc2lvbiAweCUwMlhcbiIsCi0JCQkodW5zaWduZWQgaW50KSB0bywgdGQtPnZlcnNpb25bY2hpcF0pOworCQlyZXMgPSBzY2FuX3dyaXRlX2JidChtdGQsIHRvLCBsZW4sIGJ1ZiwgJmJ1ZltsZW5dKTsKKwkJaWYgKHJlcyA8IDApCisJCQlnb3RvIG91dGVycjsKKworCQlwcmludGsoS0VSTl9ERUJVRyAiQmFkIGJsb2NrIHRhYmxlIHdyaXR0ZW4gdG8gMHglMDh4LCB2ZXJzaW9uICIKKwkJICAgICAgICIweCUwMlhcbiIsICh1bnNpZ25lZCBpbnQpdG8sIHRkLT52ZXJzaW9uW2NoaXBdKTsKIAogCQkvKiBNYXJrIGl0IGFzIHVzZWQgKi8KIAkJdGQtPnBhZ2VzW2NoaXBdID0gcGFnZTsKIAl9CiAJcmV0dXJuIDA7CisKKyBvdXRlcnI6CisJcHJpbnRrKEtFUk5fV0FSTklORworCSAgICAgICAibmFuZF9iYnQ6IEVycm9yIHdoaWxlIHdyaXRpbmcgYmFkIGJsb2NrIHRhYmxlICVkXG4iLCByZXMpOworCXJldHVybiByZXM7CiB9CiAKIC8qKgpAQCAtNjQ0LDI3ICs3NTQsMjcgQEAKICAqIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbWVtb3J5IGJhc2VkIGJidCBieSBzY2FubmluZyB0aGUgZGV2aWNlCiAgKiBmb3IgbWFudWZhY3R1cmVyIC8gc29mdHdhcmUgbWFya2VkIGdvb2QgLyBiYWQgYmxvY2tzCiAqLwotc3RhdGljIGlubGluZSBpbnQgbmFuZF9tZW1vcnlfYmJ0IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKK3N0YXRpYyBpbmxpbmUgaW50IG5hbmRfbWVtb3J5X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCiAJYmQtPm9wdGlvbnMgJj0gfk5BTkRfQkJUX1NDQU5FTVBUWTsKLQlyZXR1cm4gY3JlYXRlX2JidCAobXRkLCB0aGlzLT5kYXRhX2J1ZiwgYmQsIC0xKTsKKwlyZXR1cm4gY3JlYXRlX2JidChtdGQsIHRoaXMtPmJ1ZmZlcnMuZGF0YWJ1ZiwgYmQsIC0xKTsKIH0KIAogLyoqCi0gKiBjaGVja19jcmVhdGUgLSBbR0VORVJJQ10gY3JlYXRlIGFuZCB3cml0ZSBiYnQocykgaWYgbmVjY2VjYXJ5CisgKiBjaGVja19jcmVhdGUgLSBbR0VORVJJQ10gY3JlYXRlIGFuZCB3cml0ZSBiYnQocykgaWYgbmVjZXNzYXJ5CiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQogICogQGJ1ZjoJdGVtcG9yYXJ5IGJ1ZmZlcgogICogQGJkOgkJZGVzY3JpcHRvciBmb3IgdGhlIGdvb2QvYmFkIGJsb2NrIHNlYXJjaCBwYXR0ZXJuCiAgKgogICogVGhlIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcmVzdWx0cyBvZiB0aGUgcHJldmlvdXMgY2FsbCB0byByZWFkX2JidAotICogYW5kIGNyZWF0ZXMgLyB1cGRhdGVzIHRoZSBiYnQocykgaWYgbmVjY2VjYXJ5Ci0gKiBDcmVhdGlvbiBpcyBuZWNjZWNhcnkgaWYgbm8gYmJ0IHdhcyBmb3VuZCBmb3IgdGhlIGNoaXAvZGV2aWNlCi0gKiBVcGRhdGUgaXMgbmVjY2VjYXJ5IGlmIG9uZSBvZiB0aGUgdGFibGVzIGlzIG1pc3Npbmcgb3IgdGhlCisgKiBhbmQgY3JlYXRlcyAvIHVwZGF0ZXMgdGhlIGJidChzKSBpZiBuZWNlc3NhcnkKKyAqIENyZWF0aW9uIGlzIG5lY2Vzc2FyeSBpZiBubyBiYnQgd2FzIGZvdW5kIGZvciB0aGUgY2hpcC9kZXZpY2UKKyAqIFVwZGF0ZSBpcyBuZWNlc3NhcnkgaWYgb25lIG9mIHRoZSB0YWJsZXMgaXMgbWlzc2luZyBvciB0aGUKICAqIHZlcnNpb24gbnIuIG9mIG9uZSB0YWJsZSBpcyBsZXNzIHRoYW4gdGhlIG90aGVyCiAqLwotc3RhdGljIGludCBjaGVja19jcmVhdGUgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCitzdGF0aWMgaW50IGNoZWNrX2NyZWF0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQogewogCWludCBpLCBjaGlwcywgd3JpdGVvcHMsIGNoaXBzZWwsIHJlczsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwpAQCAtNzMyLDM1ICs4NDIsMzUgQEAKIAkJCXJkID0gdGQ7CiAJCQlnb3RvIHdyaXRlY2hlY2s7CiAJCX0KLWNyZWF0ZToKKwljcmVhdGU6CiAJCS8qIENyZWF0ZSB0aGUgYmFkIGJsb2NrIHRhYmxlIGJ5IHNjYW5uaW5nIHRoZSBkZXZpY2UgPyAqLwogCQlpZiAoISh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX0NSRUFURSkpCiAJCQljb250aW51ZTsKIAogCQkvKiBDcmVhdGUgdGhlIHRhYmxlIGluIG1lbW9yeSBieSBzY2FubmluZyB0aGUgY2hpcChzKSAqLwotCQljcmVhdGVfYmJ0IChtdGQsIGJ1ZiwgYmQsIGNoaXBzZWwpOworCQljcmVhdGVfYmJ0KG10ZCwgYnVmLCBiZCwgY2hpcHNlbCk7CiAKIAkJdGQtPnZlcnNpb25baV0gPSAxOwogCQlpZiAobWQpCiAJCQltZC0+dmVyc2lvbltpXSA9IDE7Ci13cml0ZWNoZWNrOgorCXdyaXRlY2hlY2s6CiAJCS8qIHJlYWQgYmFjayBmaXJzdCA/ICovCiAJCWlmIChyZCkKLQkJCXJlYWRfYWJzX2JidCAobXRkLCBidWYsIHJkLCBjaGlwc2VsKTsKKwkJCXJlYWRfYWJzX2JidChtdGQsIGJ1ZiwgcmQsIGNoaXBzZWwpOwogCQkvKiBJZiB0aGV5IHdlcmVuJ3QgdmVyc2lvbmVkLCByZWFkIGJvdGguICovCiAJCWlmIChyZDIpCi0JCQlyZWFkX2Fic19iYnQgKG10ZCwgYnVmLCByZDIsIGNoaXBzZWwpOworCQkJcmVhZF9hYnNfYmJ0KG10ZCwgYnVmLCByZDIsIGNoaXBzZWwpOwogCiAJCS8qIFdyaXRlIHRoZSBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJCWlmICgod3JpdGVvcHMgJiAweDAxKSAmJiAodGQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CisJCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CiAJCQlpZiAocmVzIDwgMCkKIAkJCQlyZXR1cm4gcmVzOwogCQl9CiAKIAkJLyogV3JpdGUgdGhlIG1pcnJvciBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJCWlmICgod3JpdGVvcHMgJiAweDAyKSAmJiBtZCAmJiAobWQtPm9wdGlvbnMgJiBOQU5EX0JCVF9XUklURSkpIHsKLQkJCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CisJCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CiAJCQlpZiAocmVzIDwgMCkKIAkJCQlyZXR1cm4gcmVzOwogCQl9CkBAIC03NzcsNyArODg3LDcgQEAKICAqIGFjY2lkZW50YWwgZXJhc3VyZXMgLyB3cml0ZXMuIFRoZSByZWdpb25zIGFyZSBpZGVudGlmaWVkIGJ5CiAgKiB0aGUgbWFyayAweDAyLgogKi8KLXN0YXRpYyB2b2lkIG1hcmtfYmJ0X3JlZ2lvbiAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCitzdGF0aWMgdm9pZCBtYXJrX2JidF9yZWdpb24oc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgaSwgaiwgY2hpcHMsIGJsb2NrLCBucmJsb2NrcywgdXBkYXRlOwpAQCAtNzk1LDcgKzkwNSw4IEBACiAJZm9yIChpID0gMDsgaSA8IGNoaXBzOyBpKyspIHsKIAkJaWYgKCh0ZC0+b3B0aW9ucyAmIE5BTkRfQkJUX0FCU1BBR0UpIHx8CiAJCSAgICAhKHRkLT5vcHRpb25zICYgTkFORF9CQlRfV1JJVEUpKSB7Ci0JCSAgICAJaWYgKHRkLT5wYWdlc1tpXSA9PSAtMSkgY29udGludWU7CisJCQlpZiAodGQtPnBhZ2VzW2ldID09IC0xKQorCQkJCWNvbnRpbnVlOwogCQkJYmxvY2sgPSB0ZC0+cGFnZXNbaV0gPj4gKHRoaXMtPmJidF9lcmFzZV9zaGlmdCAtIHRoaXMtPnBhZ2Vfc2hpZnQpOwogCQkJYmxvY2sgPDw9IDE7CiAJCQlvbGR2YWwgPSB0aGlzLT5iYnRbKGJsb2NrID4+IDMpXTsKQEAgLTgxNSw3ICs5MjYsOCBAQAogCQkJb2xkdmFsID0gdGhpcy0+YmJ0WyhibG9jayA+PiAzKV07CiAJCQluZXd2YWwgPSBvbGR2YWwgfCAoMHgyIDw8IChibG9jayAmIDB4MDYpKTsKIAkJCXRoaXMtPmJidFsoYmxvY2sgPj4gMyldID0gbmV3dmFsOwotCQkJaWYgKG9sZHZhbCAhPSBuZXd2YWwpIHVwZGF0ZSA9IDE7CisJCQlpZiAob2xkdmFsICE9IG5ld3ZhbCkKKwkJCQl1cGRhdGUgPSAxOwogCQkJYmxvY2sgKz0gMjsKIAkJfQogCQkvKiBJZiB3ZSB3YW50IHJlc2VydmVkIGJsb2NrcyB0byBiZSByZWNvcmRlZCB0byBmbGFzaCwgYW5kIHNvbWUKQEAgLTg0MCw3ICs5NTIsNyBAQAogICogYnkgY2FsbGluZyB0aGUgbmFuZF9mcmVlX2JidCBmdW5jdGlvbi4KICAqCiAqLwotaW50IG5hbmRfc2Nhbl9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJkKQoraW50IG5hbmRfc2Nhbl9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAlpbnQgbGVuLCByZXMgPSAwOwpAQCAtODUwLDIxICs5NjIsMjEgQEAKIAogCWxlbiA9IG10ZC0+c2l6ZSA+PiAodGhpcy0+YmJ0X2VyYXNlX3NoaWZ0ICsgMik7CiAJLyogQWxsb2NhdGUgbWVtb3J5ICgyYml0IHBlciBibG9jaykgKi8KLQl0aGlzLT5iYnQgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCXRoaXMtPmJidCA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRoaXMtPmJidCkgewotCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3NjYW5fYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJuYW5kX3NjYW5fYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIENsZWFyIHRoZSBtZW1vcnkgYmFkIGJsb2NrIHRhYmxlICovCi0JbWVtc2V0ICh0aGlzLT5iYnQsIDB4MDAsIGxlbik7CisJbWVtc2V0KHRoaXMtPmJidCwgMHgwMCwgbGVuKTsKIAogCS8qIElmIG5vIHByaW1hcnkgdGFibGUgZGVjcmlwdG9yIGlzIGdpdmVuLCBzY2FuIHRoZSBkZXZpY2UKIAkgKiB0byBidWlsZCBhIG1lbW9yeSBiYXNlZCBiYWQgYmxvY2sgdGFibGUKIAkgKi8KIAlpZiAoIXRkKSB7CiAJCWlmICgocmVzID0gbmFuZF9tZW1vcnlfYmJ0KG10ZCwgYmQpKSkgewotCQkJcHJpbnRrIChLRVJOX0VSUiAibmFuZF9iYnQ6IENhbid0IHNjYW4gZmxhc2ggYW5kIGJ1aWxkIHRoZSBSQU0tYmFzZWQgQkJUXG4iKTsKLQkJCWtmcmVlICh0aGlzLT5iYnQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJuYW5kX2JidDogQ2FuJ3Qgc2NhbiBmbGFzaCBhbmQgYnVpbGQgdGhlIFJBTS1iYXNlZCBCQlRcbiIpOworCQkJa2ZyZWUodGhpcy0+YmJ0KTsKIAkJCXRoaXMtPmJidCA9IE5VTEw7CiAJCX0KIAkJcmV0dXJuIHJlczsKQEAgLTg3MywzNSArOTg1LDM0IEBACiAJLyogQWxsb2NhdGUgYSB0ZW1wb3JhcnkgYnVmZmVyIGZvciBvbmUgZXJhc2VibG9jayBpbmNsLiBvb2IgKi8KIAlsZW4gPSAoMSA8PCB0aGlzLT5iYnRfZXJhc2Vfc2hpZnQpOwogCWxlbiArPSAobGVuID4+IHRoaXMtPnBhZ2Vfc2hpZnQpICogbXRkLT5vb2JzaXplOwotCWJ1ZiA9IGttYWxsb2MgKGxlbiwgR0ZQX0tFUk5FTCk7CisJYnVmID0gdm1hbGxvYyhsZW4pOwogCWlmICghYnVmKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIm5hbmRfYmJ0OiBPdXQgb2YgbWVtb3J5XG4iKTsKLQkJa2ZyZWUgKHRoaXMtPmJidCk7CisJCXByaW50ayhLRVJOX0VSUiAibmFuZF9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOworCQlrZnJlZSh0aGlzLT5iYnQpOwogCQl0aGlzLT5iYnQgPSBOVUxMOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBJcyB0aGUgYmJ0IGF0IGEgZ2l2ZW4gcGFnZSA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfQUJTUEFHRSkgewotCQlyZXMgPSByZWFkX2Fic19iYnRzIChtdGQsIGJ1ZiwgdGQsIG1kKTsKKwkJcmVzID0gcmVhZF9hYnNfYmJ0cyhtdGQsIGJ1ZiwgdGQsIG1kKTsKIAl9IGVsc2UgewogCQkvKiBTZWFyY2ggdGhlIGJhZCBibG9jayB0YWJsZSB1c2luZyBhIHBhdHRlcm4gaW4gb29iICovCi0JCXJlcyA9IHNlYXJjaF9yZWFkX2JidHMgKG10ZCwgYnVmLCB0ZCwgbWQpOworCQlyZXMgPSBzZWFyY2hfcmVhZF9iYnRzKG10ZCwgYnVmLCB0ZCwgbWQpOwogCX0KIAogCWlmIChyZXMpCi0JCXJlcyA9IGNoZWNrX2NyZWF0ZSAobXRkLCBidWYsIGJkKTsKKwkJcmVzID0gY2hlY2tfY3JlYXRlKG10ZCwgYnVmLCBiZCk7CiAKIAkvKiBQcmV2ZW50IHRoZSBiYnQgcmVnaW9ucyBmcm9tIGVyYXNpbmcgLyB3cml0aW5nICovCi0JbWFya19iYnRfcmVnaW9uIChtdGQsIHRkKTsKKwltYXJrX2JidF9yZWdpb24obXRkLCB0ZCk7CiAJaWYgKG1kKQotCQltYXJrX2JidF9yZWdpb24gKG10ZCwgbWQpOworCQltYXJrX2JidF9yZWdpb24obXRkLCBtZCk7CiAKLQlrZnJlZSAoYnVmKTsKKwl2ZnJlZShidWYpOwogCXJldHVybiByZXM7CiB9CiAKLQogLyoqCiAgKiBuYW5kX3VwZGF0ZV9iYnQgLSBbTkFORCBJbnRlcmZhY2VdIHVwZGF0ZSBiYWQgYmxvY2sgdGFibGUocykKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC05MDksNyArMTAyMCw3IEBACiAgKgogICogVGhlIGZ1bmN0aW9uIHVwZGF0ZXMgdGhlIGJhZCBibG9jayB0YWJsZShzKQogKi8KLWludCBuYW5kX3VwZGF0ZV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcykKK2ludCBuYW5kX3VwZGF0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGxlbiwgcmVzID0gMCwgd3JpdGVvcHMgPSAwOwpAQCAtOTI1LDkgKzEwMzYsOSBAQAogCS8qIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGJ1ZmZlciBmb3Igb25lIGVyYXNlYmxvY2sgaW5jbC4gb29iICovCiAJbGVuID0gKDEgPDwgdGhpcy0+YmJ0X2VyYXNlX3NoaWZ0KTsKIAlsZW4gKz0gKGxlbiA+PiB0aGlzLT5wYWdlX3NoaWZ0KSAqIG10ZC0+b29ic2l6ZTsKLQlidWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOworCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlwcmludGsgKEtFUk5fRVJSICJuYW5kX3VwZGF0ZV9iYnQ6IE91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIm5hbmRfdXBkYXRlX2JidDogT3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtOTM1LDcgKzEwNDYsNyBAQAogCiAJLyogRG8gd2UgaGF2ZSBhIGJidCBwZXIgY2hpcCA/ICovCiAJaWYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfUEVSQ0hJUCkgewotCQljaGlwID0gKGludCkgKG9mZnMgPj4gdGhpcy0+Y2hpcF9zaGlmdCk7CisJCWNoaXAgPSAoaW50KShvZmZzID4+IHRoaXMtPmNoaXBfc2hpZnQpOwogCQljaGlwc2VsID0gY2hpcDsKIAl9IGVsc2UgewogCQljaGlwID0gMDsKQEAgLTk0OCwxNyArMTA1OSwxNyBAQAogCiAJLyogV3JpdGUgdGhlIGJhZCBibG9jayB0YWJsZSB0byB0aGUgZGV2aWNlID8gKi8KIAlpZiAoKHdyaXRlb3BzICYgMHgwMSkgJiYgKHRkLT5vcHRpb25zICYgTkFORF9CQlRfV1JJVEUpKSB7Ci0JCXJlcyA9IHdyaXRlX2JidCAobXRkLCBidWYsIHRkLCBtZCwgY2hpcHNlbCk7CisJCXJlcyA9IHdyaXRlX2JidChtdGQsIGJ1ZiwgdGQsIG1kLCBjaGlwc2VsKTsKIAkJaWYgKHJlcyA8IDApCiAJCQlnb3RvIG91dDsKIAl9CiAJLyogV3JpdGUgdGhlIG1pcnJvciBiYWQgYmxvY2sgdGFibGUgdG8gdGhlIGRldmljZSA/ICovCiAJaWYgKCh3cml0ZW9wcyAmIDB4MDIpICYmIG1kICYmIChtZC0+b3B0aW9ucyAmIE5BTkRfQkJUX1dSSVRFKSkgewotCQlyZXMgPSB3cml0ZV9iYnQgKG10ZCwgYnVmLCBtZCwgdGQsIGNoaXBzZWwpOworCQlyZXMgPSB3cml0ZV9iYnQobXRkLCBidWYsIG1kLCB0ZCwgY2hpcHNlbCk7CiAJfQogCi1vdXQ6Ci0Ja2ZyZWUgKGJ1Zik7Cisgb3V0OgorCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtOTgxLDE0ICsxMDkyLDE0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIHNtYWxscGFnZV9mbGFzaGJhc2VkID0gewotCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTkVNUFRZIHwgTkFORF9CQlRfU0NBTkFMTFBBR0VTLAorCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTjJORFBBR0UsCiAJLm9mZnMgPSA1LAogCS5sZW4gPSAxLAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCiB9OwogCiBzdGF0aWMgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyIGxhcmdlcGFnZV9mbGFzaGJhc2VkID0gewotCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTkVNUFRZIHwgTkFORF9CQlRfU0NBTkFMTFBBR0VTLAorCS5vcHRpb25zID0gTkFORF9CQlRfU0NBTjJORFBBR0UsCiAJLm9mZnMgPSAwLAogCS5sZW4gPSAyLAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCkBAIC0xMDM2LDcgKzExNDcsNyBAQAogICogc3VwcG9ydCBmb3IgdGhlIGRldmljZSBhbmQgY2FsbHMgdGhlIG5hbmRfc2Nhbl9iYnQgZnVuY3Rpb24KICAqCiAqLwotaW50IG5hbmRfZGVmYXVsdF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoraW50IG5hbmRfZGVmYXVsdF9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIApAQCAtMTA0Niw3ICsxMTU3LDcgQEAKIAkgKiBvZiB0aGUgZ29vZCAvIGJhZCBpbmZvcm1hdGlvbiwgc28gd2UgX211c3RfIHN0b3JlCiAJICogdGhpcyBpbmZvcm1hdGlvbiBpbiBhIGdvb2QgLyBiYWQgdGFibGUgZHVyaW5nCiAJICogc3RhcnR1cAotCSovCisJICovCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX0lTX0FORCkgewogCQkvKiBVc2UgdGhlIGRlZmF1bHQgcGF0dGVybiBkZXNjcmlwdG9ycyAqLwogCQlpZiAoIXRoaXMtPmJidF90ZCkgewpAQCAtMTA1NCwxMCArMTE2NSw5IEBACiAJCQl0aGlzLT5iYnRfbWQgPSAmYmJ0X21pcnJvcl9kZXNjcjsKIAkJfQogCQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfVVNFX0ZMQVNIX0JCVDsKLQkJcmV0dXJuIG5hbmRfc2Nhbl9iYnQgKG10ZCwgJmFnYW5kX2ZsYXNoYmFzZWQpOworCQlyZXR1cm4gbmFuZF9zY2FuX2JidChtdGQsICZhZ2FuZF9mbGFzaGJhc2VkKTsKIAl9CiAKLQogCS8qIElzIGEgZmxhc2ggYmFzZWQgYmFkIGJsb2NrIHRhYmxlIHJlcXVlc3RlZCA/ICovCiAJaWYgKHRoaXMtPm9wdGlvbnMgJiBOQU5EX1VTRV9GTEFTSF9CQlQpIHsKIAkJLyogVXNlIHRoZSBkZWZhdWx0IHBhdHRlcm4gZGVzY3JpcHRvcnMgKi8KQEAgLTEwNjYsMTggKzExNzYsMTcgQEAKIAkJCXRoaXMtPmJidF9tZCA9ICZiYnRfbWlycm9yX2Rlc2NyOwogCQl9CiAJCWlmICghdGhpcy0+YmFkYmxvY2tfcGF0dGVybikgewotCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPm9vYmJsb2NrID4gNTEyKSA/Ci0JCQkJJmxhcmdlcGFnZV9mbGFzaGJhc2VkIDogJnNtYWxscGFnZV9mbGFzaGJhc2VkOworCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPndyaXRlc2l6ZSA+IDUxMikgPyAmbGFyZ2VwYWdlX2ZsYXNoYmFzZWQgOiAmc21hbGxwYWdlX2ZsYXNoYmFzZWQ7CiAJCX0KIAl9IGVsc2UgewogCQl0aGlzLT5iYnRfdGQgPSBOVUxMOwogCQl0aGlzLT5iYnRfbWQgPSBOVUxMOwogCQlpZiAoIXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pIHsKLQkJCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAobXRkLT5vb2JibG9jayA+IDUxMikgPwotCQkJCSZsYXJnZXBhZ2VfbWVtb3J5YmFzZWQgOiAmc21hbGxwYWdlX21lbW9yeWJhc2VkOworCQkJdGhpcy0+YmFkYmxvY2tfcGF0dGVybiA9IChtdGQtPndyaXRlc2l6ZSA+IDUxMikgPworCQkJICAgICZsYXJnZXBhZ2VfbWVtb3J5YmFzZWQgOiAmc21hbGxwYWdlX21lbW9yeWJhc2VkOwogCQl9CiAJfQotCXJldHVybiBuYW5kX3NjYW5fYmJ0IChtdGQsIHRoaXMtPmJhZGJsb2NrX3BhdHRlcm4pOworCXJldHVybiBuYW5kX3NjYW5fYmJ0KG10ZCwgdGhpcy0+YmFkYmxvY2tfcGF0dGVybik7CiB9CiAKIC8qKgpAQCAtMTA4NywyNiArMTE5NiwyOSBAQAogICogQGFsbG93YmJ0OglhbGxvdyBhY2Nlc3MgdG8gYmFkIGJsb2NrIHRhYmxlIHJlZ2lvbgogICoKICovCi1pbnQgbmFuZF9pc2JhZF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KQoraW50IG5hbmRfaXNiYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IGJsb2NrOwotCXVpbnQ4X3QJcmVzOworCXVpbnQ4X3QgcmVzOwogCiAJLyogR2V0IGJsb2NrIG51bWJlciAqIDIgKi8KLQlibG9jayA9IChpbnQpIChvZmZzID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CisJYmxvY2sgPSAoaW50KShvZmZzID4+ICh0aGlzLT5iYnRfZXJhc2Vfc2hpZnQgLSAxKSk7CiAJcmVzID0gKHRoaXMtPmJidFtibG9jayA+PiAzXSA+PiAoYmxvY2sgJiAweDA2KSkgJiAweDAzOwogCi0JREVCVUcgKE1URF9ERUJVR19MRVZFTDIsICJuYW5kX2lzYmFkX2JidCgpOiBiYnQgaW5mbyBmb3Igb2ZmcyAweCUwOHg6IChibG9jayAlZCkgMHglMDJ4XG4iLAotCQkodW5zaWduZWQgaW50KW9mZnMsIGJsb2NrID4+IDEsIHJlcyk7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMiwgIm5hbmRfaXNiYWRfYmJ0KCk6IGJidCBpbmZvIGZvciBvZmZzIDB4JTA4eDogKGJsb2NrICVkKSAweCUwMnhcbiIsCisJICAgICAgKHVuc2lnbmVkIGludClvZmZzLCBibG9jayA+PiAxLCByZXMpOwogCiAJc3dpdGNoICgoaW50KXJlcykgewotCWNhc2UgMHgwMDoJcmV0dXJuIDA7Ci0JY2FzZSAweDAxOglyZXR1cm4gMTsKLQljYXNlIDB4MDI6CXJldHVybiBhbGxvd2JidCA/IDAgOiAxOworCWNhc2UgMHgwMDoKKwkJcmV0dXJuIDA7CisJY2FzZSAweDAxOgorCQlyZXR1cm4gMTsKKwljYXNlIDB4MDI6CisJCXJldHVybiBhbGxvd2JidCA/IDAgOiAxOwogCX0KIAlyZXR1cm4gMTsKIH0KIAotRVhQT1JUX1NZTUJPTCAobmFuZF9zY2FuX2JidCk7Ci1FWFBPUlRfU1lNQk9MIChuYW5kX2RlZmF1bHRfYmJ0KTsKK0VYUE9SVF9TWU1CT0wobmFuZF9zY2FuX2JidCk7CitFWFBPUlRfU1lNQk9MKG5hbmRfZGVmYXVsdF9iYnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2VjYy5jCmluZGV4IDQwYWM5MDkuLjJhMTYzZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9lY2MuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfZWNjLmMKQEAgLTcsNiArNyw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBTdGV2ZW4gSi4gSGlsbCAoc2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSkKICAqICAgICAgICAgICAgICAgICAgICAgICAgIFRvc2hpYmEgQW1lcmljYSBFbGVjdHJvbmljcyBDb21wb25lbnRzLCBJbmMuCiAgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPgorICoKICAqICRJZDogbmFuZF9lY2MuYyx2IDEuMTUgMjAwNS8xMS8wNyAxMToxNDozMCBnbGVpeG5lciBFeHAgJAogICoKICAqIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CkBAIC02Miw5MCArNjQsNzYgQEAKIAkweDAwLCAweDU1LCAweDU2LCAweDAzLCAweDU5LCAweDBjLCAweDBmLCAweDVhLCAweDVhLCAweDBmLCAweDBjLCAweDU5LCAweDAzLCAweDU2LCAweDU1LCAweDAwCiB9OwogCi0KIC8qKgotICogbmFuZF90cmFuc19yZXN1bHQgLSBbR0VORVJJQ10gY3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MKLSAqIEByZWcyOglsaW5lIHBhcml0eSByZWcgMgotICogQHJlZzM6CWxpbmUgcGFyaXR5IHJlZyAzCi0gKiBAZWNjX2NvZGU6CWVjYwotICoKLSAqIENyZWF0ZXMgbm9uLWludmVydGVkIEVDQyBjb2RlIGZyb20gbGluZSBwYXJpdHkKLSAqLwotc3RhdGljIHZvaWQgbmFuZF90cmFuc19yZXN1bHQodV9jaGFyIHJlZzIsIHVfY2hhciByZWczLAotCXVfY2hhciAqZWNjX2NvZGUpCi17Ci0JdV9jaGFyIGEsIGIsIGksIHRtcDEsIHRtcDI7Ci0KLQkvKiBJbml0aWFsaXplIHZhcmlhYmxlcyAqLwotCWEgPSBiID0gMHg4MDsKLQl0bXAxID0gdG1wMiA9IDA7Ci0KLQkvKiBDYWxjdWxhdGUgZmlyc3QgRUNDIGJ5dGUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChyZWczICYgYSkJCS8qIExQMTUsMTMsMTEsOSAtLT4gZWNjX2NvZGVbMF0gKi8KLQkJCXRtcDEgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJaWYgKHJlZzIgJiBhKQkJLyogTFAxNCwxMiwxMCw4IC0tPiBlY2NfY29kZVswXSAqLwotCQkJdG1wMSB8PSBiOwotCQliID4+PSAxOwotCQlhID4+PSAxOwotCX0KLQotCS8qIENhbGN1bGF0ZSBzZWNvbmQgRUNDIGJ5dGUgKi8KLQliID0gMHg4MDsKLQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWlmIChyZWczICYgYSkJCS8qIExQNyw1LDMsMSAtLT4gZWNjX2NvZGVbMV0gKi8KLQkJCXRtcDIgfD0gYjsKLQkJYiA+Pj0gMTsKLQkJaWYgKHJlZzIgJiBhKQkJLyogTFA2LDQsMiwwIC0tPiBlY2NfY29kZVsxXSAqLwotCQkJdG1wMiB8PSBiOwotCQliID4+PSAxOwotCQlhID4+PSAxOwotCX0KLQotCS8qIFN0b3JlIHR3byBvZiB0aGUgRUNDIGJ5dGVzICovCi0JZWNjX2NvZGVbMF0gPSB0bXAxOwotCWVjY19jb2RlWzFdID0gdG1wMjsKLX0KLQotLyoqCi0gKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzIGJ5dGUgRUNDIGNvZGUgZm9yIDI1NiBieXRlIGJsb2NrCisgKiBuYW5kX2NhbGN1bGF0ZV9lY2MgLSBbTkFORCBJbnRlcmZhY2VdIENhbGN1bGF0ZSAzIGJ5dGUgRUNDIGNvZGUKKyAqCQkJZm9yIDI1NiBieXRlIGJsb2NrCiAgKiBAbXRkOglNVEQgYmxvY2sgc3RydWN0dXJlCiAgKiBAZGF0OglyYXcgZGF0YQogICogQGVjY19jb2RlOglidWZmZXIgZm9yIEVDQwogICovCi1pbnQgbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKK2ludCBuYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LAorCQkgICAgICAgdV9jaGFyICplY2NfY29kZSkKIHsKLQl1X2NoYXIgaWR4LCByZWcxLCByZWcyLCByZWczOwotCWludCBqOworCXVpbnQ4X3QgaWR4LCByZWcxLCByZWcyLCByZWczLCB0bXAxLCB0bXAyOworCWludCBpOwogCiAJLyogSW5pdGlhbGl6ZSB2YXJpYWJsZXMgKi8KIAlyZWcxID0gcmVnMiA9IHJlZzMgPSAwOwotCWVjY19jb2RlWzBdID0gZWNjX2NvZGVbMV0gPSBlY2NfY29kZVsyXSA9IDA7CiAKIAkvKiBCdWlsZCB1cCBjb2x1bW4gcGFyaXR5ICovCi0JZm9yKGogPSAwOyBqIDwgMjU2OyBqKyspIHsKLQorCWZvcihpID0gMDsgaSA8IDI1NjsgaSsrKSB7CiAJCS8qIEdldCBDUDAgLSBDUDUgZnJvbSB0YWJsZSAqLwotCQlpZHggPSBuYW5kX2VjY19wcmVjYWxjX3RhYmxlW2RhdFtqXV07CisJCWlkeCA9IG5hbmRfZWNjX3ByZWNhbGNfdGFibGVbKmRhdCsrXTsKIAkJcmVnMSBePSAoaWR4ICYgMHgzZik7CiAKIAkJLyogQWxsIGJpdCBYT1IgPSAxID8gKi8KIAkJaWYgKGlkeCAmIDB4NDApIHsKLQkJCXJlZzMgXj0gKHVfY2hhcikgajsKLQkJCXJlZzIgXj0gfigodV9jaGFyKSBqKTsKKwkJCXJlZzMgXj0gKHVpbnQ4X3QpIGk7CisJCQlyZWcyIF49IH4oKHVpbnQ4X3QpIGkpOwogCQl9CiAJfQogCiAJLyogQ3JlYXRlIG5vbi1pbnZlcnRlZCBFQ0MgY29kZSBmcm9tIGxpbmUgcGFyaXR5ICovCi0JbmFuZF90cmFuc19yZXN1bHQocmVnMiwgcmVnMywgZWNjX2NvZGUpOworCXRtcDEgID0gKHJlZzMgJiAweDgwKSA+PiAwOyAvKiBCNyAtPiBCNyAqLworCXRtcDEgfD0gKHJlZzIgJiAweDgwKSA+PiAxOyAvKiBCNyAtPiBCNiAqLworCXRtcDEgfD0gKHJlZzMgJiAweDQwKSA+PiAxOyAvKiBCNiAtPiBCNSAqLworCXRtcDEgfD0gKHJlZzIgJiAweDQwKSA+PiAyOyAvKiBCNiAtPiBCNCAqLworCXRtcDEgfD0gKHJlZzMgJiAweDIwKSA+PiAyOyAvKiBCNSAtPiBCMyAqLworCXRtcDEgfD0gKHJlZzIgJiAweDIwKSA+PiAzOyAvKiBCNSAtPiBCMiAqLworCXRtcDEgfD0gKHJlZzMgJiAweDEwKSA+PiAzOyAvKiBCNCAtPiBCMSAqLworCXRtcDEgfD0gKHJlZzIgJiAweDEwKSA+PiA0OyAvKiBCNCAtPiBCMCAqLworCisJdG1wMiAgPSAocmVnMyAmIDB4MDgpIDw8IDQ7IC8qIEIzIC0+IEI3ICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDgpIDw8IDM7IC8qIEIzIC0+IEI2ICovCisJdG1wMiB8PSAocmVnMyAmIDB4MDQpIDw8IDM7IC8qIEIyIC0+IEI1ICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDQpIDw8IDI7IC8qIEIyIC0+IEI0ICovCisJdG1wMiB8PSAocmVnMyAmIDB4MDIpIDw8IDI7IC8qIEIxIC0+IEIzICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDIpIDw8IDE7IC8qIEIxIC0+IEIyICovCisJdG1wMiB8PSAocmVnMyAmIDB4MDEpIDw8IDE7IC8qIEIwIC0+IEIxICovCisJdG1wMiB8PSAocmVnMiAmIDB4MDEpIDw8IDA7IC8qIEI3IC0+IEIwICovCiAKIAkvKiBDYWxjdWxhdGUgZmluYWwgRUNDIGNvZGUgKi8KLQllY2NfY29kZVswXSA9IH5lY2NfY29kZVswXTsKLQllY2NfY29kZVsxXSA9IH5lY2NfY29kZVsxXTsKKyNpZmRlZiBDT05GSUdfTkFORF9FQ0NfU01DCisJZWNjX2NvZGVbMF0gPSB+dG1wMjsKKwllY2NfY29kZVsxXSA9IH50bXAxOworI2Vsc2UKKwllY2NfY29kZVswXSA9IH50bXAxOworCWVjY19jb2RlWzFdID0gfnRtcDI7CisjZW5kaWYKIAllY2NfY29kZVsyXSA9ICgofnJlZzEpIDw8IDIpIHwgMHgwMzsKKwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChuYW5kX2NhbGN1bGF0ZV9lY2MpOworCitzdGF0aWMgaW5saW5lIGludCBjb3VudGJpdHModWludDMyX3QgYnl0ZSkKK3sKKwlpbnQgcmVzID0gMDsKKworCWZvciAoO2J5dGU7IGJ5dGUgPj49IDEpCisJCXJlcyArPSBieXRlICYgMHgwMTsKKwlyZXR1cm4gcmVzOworfQogCiAvKioKICAqIG5hbmRfY29ycmVjdF9kYXRhIC0gW05BTkQgSW50ZXJmYWNlXSBEZXRlY3QgYW5kIGNvcnJlY3QgYml0IGVycm9yKHMpCkBAIC0xNTYsOTMgKzE0NCw1NCBAQAogICoKICAqIERldGVjdCBhbmQgY29ycmVjdCBhIDEgYml0IGVycm9yIGZvciAyNTYgYnl0ZSBibG9jawogICovCi1pbnQgbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LCB1X2NoYXIgKnJlYWRfZWNjLCB1X2NoYXIgKmNhbGNfZWNjKQoraW50IG5hbmRfY29ycmVjdF9kYXRhKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwKKwkJICAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKIHsKLQl1X2NoYXIgYSwgYiwgYywgZDEsIGQyLCBkMywgYWRkLCBiaXQsIGk7CisJdWludDhfdCBzMCwgczEsIHMyOwogCi0JLyogRG8gZXJyb3IgZGV0ZWN0aW9uICovCi0JZDEgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOwotCWQyID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKLQlkMyA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07Ci0KLQlpZiAoKGQxIHwgZDIgfCBkMykgPT0gMCkgewotCQkvKiBObyBlcnJvcnMgKi8KKyNpZmRlZiBDT05GSUdfTkFORF9FQ0NfU01DCisJczAgPSBjYWxjX2VjY1swXSBeIHJlYWRfZWNjWzBdOworCXMxID0gY2FsY19lY2NbMV0gXiByZWFkX2VjY1sxXTsKKwlzMiA9IGNhbGNfZWNjWzJdIF4gcmVhZF9lY2NbMl07CisjZWxzZQorCXMxID0gY2FsY19lY2NbMF0gXiByZWFkX2VjY1swXTsKKwlzMCA9IGNhbGNfZWNjWzFdIF4gcmVhZF9lY2NbMV07CisJczIgPSBjYWxjX2VjY1syXSBeIHJlYWRfZWNjWzJdOworI2VuZGlmCisJaWYgKChzMCB8IHMxIHwgczIpID09IDApCiAJCXJldHVybiAwOwotCX0KLQllbHNlIHsKLQkJYSA9IChkMSBeIChkMSA+PiAxKSkgJiAweDU1OwotCQliID0gKGQyIF4gKGQyID4+IDEpKSAmIDB4NTU7Ci0JCWMgPSAoZDMgXiAoZDMgPj4gMSkpICYgMHg1NDsKIAotCQkvKiBGb3VuZCBhbmQgd2lsbCBjb3JyZWN0IHNpbmdsZSBiaXQgZXJyb3IgaW4gdGhlIGRhdGEgKi8KLQkJaWYgKChhID09IDB4NTUpICYmIChiID09IDB4NTUpICYmIChjID09IDB4NTQpKSB7Ci0JCQljID0gMHg4MDsKLQkJCWFkZCA9IDA7Ci0JCQlhID0gMHg4MDsKLQkJCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQkJCWlmIChkMSAmIGMpCi0JCQkJCWFkZCB8PSBhOwotCQkJCWMgPj49IDI7Ci0JCQkJYSA+Pj0gMTsKLQkJCX0KLQkJCWMgPSAweDgwOwotCQkJZm9yIChpPTA7IGk8NDsgaSsrKSB7Ci0JCQkJaWYgKGQyICYgYykKLQkJCQkJYWRkIHw9IGE7Ci0JCQkJYyA+Pj0gMjsKLQkJCQlhID4+PSAxOwotCQkJfQotCQkJYml0ID0gMDsKLQkJCWIgPSAweDA0OwotCQkJYyA9IDB4ODA7Ci0JCQlmb3IgKGk9MDsgaTwzOyBpKyspIHsKLQkJCQlpZiAoZDMgJiBjKQotCQkJCQliaXQgfD0gYjsKLQkJCQljID4+PSAyOwotCQkJCWIgPj49IDE7Ci0JCQl9Ci0JCQliID0gMHgwMTsKLQkJCWEgPSBkYXRbYWRkXTsKLQkJCWEgXj0gKGIgPDwgYml0KTsKLQkJCWRhdFthZGRdID0gYTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCWVsc2UgewotCQkJaSA9IDA7Ci0JCQl3aGlsZSAoZDEpIHsKLQkJCQlpZiAoZDEgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDEgPj49IDE7Ci0JCQl9Ci0JCQl3aGlsZSAoZDIpIHsKLQkJCQlpZiAoZDIgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDIgPj49IDE7Ci0JCQl9Ci0JCQl3aGlsZSAoZDMpIHsKLQkJCQlpZiAoZDMgJiAweDAxKQotCQkJCQkrK2k7Ci0JCQkJZDMgPj49IDE7Ci0JCQl9Ci0JCQlpZiAoaSA9PSAxKSB7Ci0JCQkJLyogRUNDIENvZGUgRXJyb3IgQ29ycmVjdGlvbiAqLwotCQkJCXJlYWRfZWNjWzBdID0gY2FsY19lY2NbMF07Ci0JCQkJcmVhZF9lY2NbMV0gPSBjYWxjX2VjY1sxXTsKLQkJCQlyZWFkX2VjY1syXSA9IGNhbGNfZWNjWzJdOwotCQkJCXJldHVybiAyOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLyogVW5jb3JyZWN0YWJsZSBFcnJvciAqLwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJfQorCS8qIENoZWNrIGZvciBhIHNpbmdsZSBiaXQgZXJyb3IgKi8KKwlpZiggKChzMCBeIChzMCA+PiAxKSkgJiAweDU1KSA9PSAweDU1ICYmCisJICAgICgoczEgXiAoczEgPj4gMSkpICYgMHg1NSkgPT0gMHg1NSAmJgorCSAgICAoKHMyIF4gKHMyID4+IDEpKSAmIDB4NTQpID09IDB4NTQpIHsKKworCQl1aW50MzJfdCBieXRlb2ZmcywgYml0bnVtOworCisJCWJ5dGVvZmZzID0gKHMxIDw8IDApICYgMHg4MDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDEpICYgMHg0MDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDIpICYgMHgyMDsKKwkJYnl0ZW9mZnMgfD0gKHMxIDw8IDMpICYgMHgxMDsKKworCQlieXRlb2ZmcyB8PSAoczAgPj4gNCkgJiAweDA4OworCQlieXRlb2ZmcyB8PSAoczAgPj4gMykgJiAweDA0OworCQlieXRlb2ZmcyB8PSAoczAgPj4gMikgJiAweDAyOworCQlieXRlb2ZmcyB8PSAoczAgPj4gMSkgJiAweDAxOworCisJCWJpdG51bSA9IChzMiA+PiA1KSAmIDB4MDQ7CisJCWJpdG51bSB8PSAoczIgPj4gNCkgJiAweDAyOworCQliaXRudW0gfD0gKHMyID4+IDMpICYgMHgwMTsKKworCQlkYXRbYnl0ZW9mZnNdIF49ICgxIDw8IGJpdG51bSk7CisKKwkJcmV0dXJuIDE7CiAJfQogCi0JLyogU2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCWlmKGNvdW50Yml0cyhzMCB8ICgodWludDMyX3QpczEgPDwgOCkgfCAoKHVpbnQzMl90KXMyIDw8MTYpKSA9PSAxKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAtMTsKIH0KLQotRVhQT1JUX1NZTUJPTChuYW5kX2NhbGN1bGF0ZV9lY2MpOwogRVhQT1JUX1NZTUJPTChuYW5kX2NvcnJlY3RfZGF0YSk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9pZHMuYwppbmRleCBkYmM3ZTU1Li4yZTJjZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL25hbmRfaWRzLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2lkcy5jCkBAIC0xOCw5OSArMTgsMTEwIEBACiAqCU5hbWUuIElEIGNvZGUsIHBhZ2VzaXplLCBjaGlwc2l6ZSBpbiBNZWdhQnl0ZSwgZXJhc2VibG9jayBzaXplLAogKglvcHRpb25zCiAqCi0qIAlQYWdlc2l6ZTsgMCwgMjU2LCA1MTIKLSoJMCAJZ2V0IHRoaXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgZXh0ZW5kZWQgY2hpcCBJRAorKglQYWdlc2l6ZTsgMCwgMjU2LCA1MTIKKyoJMAlnZXQgdGhpcyBpbmZvcm1hdGlvbiBmcm9tIHRoZSBleHRlbmRlZCBjaGlwIElECiArCTI1NgkyNTYgQnl0ZSBwYWdlIHNpemUKICoJNTEyCTUxMiBCeXRlIHBhZ2Ugc2l6ZQogKi8KIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiBuYW5kX2ZsYXNoX2lkc1tdID0gewotCXsiTkFORCAxTWlCIDVWIDgtYml0IiwgCQkweDZlLCAyNTYsIDEsIDB4MTAwMCwgMH0sCi0JeyJOQU5EIDJNaUIgNVYgOC1iaXQiLCAJCTB4NjQsIDI1NiwgMiwgMHgxMDAwLCAwfSwKLQl7Ik5BTkQgNE1pQiA1ViA4LWJpdCIsIAkJMHg2YiwgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCAxTWlCIDMsM1YgOC1iaXQiLCAJMHhlOCwgMjU2LCAxLCAweDEwMDAsIDB9LAotCXsiTkFORCAxTWlCIDMsM1YgOC1iaXQiLCAJMHhlYywgMjU2LCAxLCAweDEwMDAsIDB9LAotCXsiTkFORCAyTWlCIDMsM1YgOC1iaXQiLCAJMHhlYSwgMjU2LCAyLCAweDEwMDAsIDB9LAotCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLCAJMHhkNSwgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLCAJMHhlMywgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLCAJMHhlNSwgNTEyLCA0LCAweDIwMDAsIDB9LAotCXsiTkFORCA4TWlCIDMsM1YgOC1iaXQiLCAJMHhkNiwgNTEyLCA4LCAweDIwMDAsIDB9LAorCXsiTkFORCAxTWlCIDVWIDgtYml0IiwJCTB4NmUsIDI1NiwgMSwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgMk1pQiA1ViA4LWJpdCIsCQkweDY0LCAyNTYsIDIsIDB4MTAwMCwgMH0sCisJeyJOQU5EIDRNaUIgNVYgOC1iaXQiLAkJMHg2YiwgNTEyLCA0LCAweDIwMDAsIDB9LAorCXsiTkFORCAxTWlCIDMsM1YgOC1iaXQiLAkweGU4LCAyNTYsIDEsIDB4MTAwMCwgMH0sCisJeyJOQU5EIDFNaUIgMywzViA4LWJpdCIsCTB4ZWMsIDI1NiwgMSwgMHgxMDAwLCAwfSwKKwl7Ik5BTkQgMk1pQiAzLDNWIDgtYml0IiwJMHhlYSwgMjU2LCAyLCAweDEwMDAsIDB9LAorCXsiTkFORCA0TWlCIDMsM1YgOC1iaXQiLAkweGQ1LCA1MTIsIDQsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDRNaUIgMywzViA4LWJpdCIsCTB4ZTMsIDUxMiwgNCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgNE1pQiAzLDNWIDgtYml0IiwJMHhlNSwgNTEyLCA0LCAweDIwMDAsIDB9LAorCXsiTkFORCA4TWlCIDMsM1YgOC1iaXQiLAkweGQ2LCA1MTIsIDgsIDB4MjAwMCwgMH0sCiAKLQl7Ik5BTkQgOE1pQiAxLDhWIDgtYml0IiwgCTB4MzksIDUxMiwgOCwgMHgyMDAwLCAwfSwKLQl7Ik5BTkQgOE1pQiAzLDNWIDgtYml0IiwgCTB4ZTYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKLQl7Ik5BTkQgOE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ5LCA1MTIsIDgsIDB4MjAwMCwgTkFORF9CVVNXSURUSF8xNn0sCi0JeyJOQU5EIDhNaUIgMywzViAxNi1iaXQiLCAJMHg1OSwgNTEyLCA4LCAweDIwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCA4TWlCIDEsOFYgOC1iaXQiLAkweDM5LCA1MTIsIDgsIDB4MjAwMCwgMH0sCisJeyJOQU5EIDhNaUIgMywzViA4LWJpdCIsCTB4ZTYsIDUxMiwgOCwgMHgyMDAwLCAwfSwKKwl7Ik5BTkQgOE1pQiAxLDhWIDE2LWJpdCIsCTB4NDksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgOE1pQiAzLDNWIDE2LWJpdCIsCTB4NTksIDUxMiwgOCwgMHgyMDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCAxNk1pQiAxLDhWIDgtYml0IiwgCTB4MzMsIDUxMiwgMTYsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDE2TWlCIDMsM1YgOC1iaXQiLCAJMHg3MywgNTEyLCAxNiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTZNaUIgMSw4ViAxNi1iaXQiLCAJMHg0MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMTZNaUIgMywzViAxNi1iaXQiLCAJMHg1MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTZNaUIgMSw4ViA4LWJpdCIsCTB4MzMsIDUxMiwgMTYsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDE2TWlCIDMsM1YgOC1iaXQiLAkweDczLCA1MTIsIDE2LCAweDQwMDAsIDB9LAorCXsiTkFORCAxNk1pQiAxLDhWIDE2LWJpdCIsCTB4NDMsIDUxMiwgMTYsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDE2TWlCIDMsM1YgMTYtYml0IiwJMHg1MywgNTEyLCAxNiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCAzMk1pQiAxLDhWIDgtYml0IiwgCTB4MzUsIDUxMiwgMzIsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDMyTWlCIDMsM1YgOC1iaXQiLCAJMHg3NSwgNTEyLCAzMiwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMzJNaUIgMSw4ViAxNi1iaXQiLCAJMHg0NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMzJNaUIgMywzViAxNi1iaXQiLCAJMHg1NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMzJNaUIgMSw4ViA4LWJpdCIsCTB4MzUsIDUxMiwgMzIsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDMyTWlCIDMsM1YgOC1iaXQiLAkweDc1LCA1MTIsIDMyLCAweDQwMDAsIDB9LAorCXsiTkFORCAzMk1pQiAxLDhWIDE2LWJpdCIsCTB4NDUsIDUxMiwgMzIsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDMyTWlCIDMsM1YgMTYtYml0IiwJMHg1NSwgNTEyLCAzMiwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCA2NE1pQiAxLDhWIDgtYml0IiwgCTB4MzYsIDUxMiwgNjQsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLCAJMHg3NiwgNTEyLCA2NCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgNjRNaUIgMSw4ViAxNi1iaXQiLCAJMHg0NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLCAJMHg1NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgNjRNaUIgMSw4ViA4LWJpdCIsCTB4MzYsIDUxMiwgNjQsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLAkweDc2LCA1MTIsIDY0LCAweDQwMDAsIDB9LAorCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsCTB4NDYsIDUxMiwgNjQsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDY0TWlCIDMsM1YgMTYtYml0IiwJMHg1NiwgNTEyLCA2NCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKIAotCXsiTkFORCAxMjhNaUIgMSw4ViA4LWJpdCIsIAkweDc4LCA1MTIsIDEyOCwgMHg0MDAwLCAwfSwKLQl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLCAJMHgzOSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCi0JeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwgCTB4NzksIDUxMiwgMTI4LCAweDQwMDAsIDB9LAotCXsiTkFORCAxMjhNaUIgMSw4ViAxNi1iaXQiLCAJMHg3MiwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsIAkweDQ5LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKLQl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwgCTB4NzQsIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHg1OSwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwJMHg3OCwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDgtYml0IiwJMHgzOSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHg3OSwgNTEyLCAxMjgsIDB4NDAwMCwgMH0sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4NzIsIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAorCXsiTkFORCAxMjhNaUIgMSw4ViAxNi1iaXQiLAkweDQ5LCA1MTIsIDEyOCwgMHg0MDAwLCBOQU5EX0JVU1dJRFRIXzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHg3NCwgNTEyLCAxMjgsIDB4NDAwMCwgTkFORF9CVVNXSURUSF8xNn0sCisJeyJOQU5EIDEyOE1pQiAzLDNWIDE2LWJpdCIsCTB4NTksIDUxMiwgMTI4LCAweDQwMDAsIE5BTkRfQlVTV0lEVEhfMTZ9LAogCi0JeyJOQU5EIDI1Nk1pQiAzLDNWIDgtYml0IiwgCTB4NzEsIDUxMiwgMjU2LCAweDQwMDAsIDB9LAorCXsiTkFORCAyNTZNaUIgMywzViA4LWJpdCIsCTB4NzEsIDUxMiwgMjU2LCAweDQwMDAsIDB9LAogCi0JLyogVGhlc2UgYXJlIHRoZSBuZXcgY2hpcHMgd2l0aCBsYXJnZSBwYWdlIHNpemUuIFRoZSBwYWdlc2l6ZQotCSogYW5kIHRoZSBlcmFzZXNpemUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBleHRlbmRlZCBpZCBieXRlcwotCSovCisJLyoKKwkgKiBUaGVzZSBhcmUgdGhlIG5ldyBjaGlwcyB3aXRoIGxhcmdlIHBhZ2Ugc2l6ZS4gVGhlIHBhZ2VzaXplIGFuZCB0aGUKKwkgKiBlcmFzZXNpemUgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSBleHRlbmRlZCBpZCBieXRlcworCSAqLworI2RlZmluZSBMUF9PUFRJT05TIChOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fUkVBRFJEWSB8IE5BTkRfTk9fQVVUT0lOQ1IpCisjZGVmaW5lIExQX09QVElPTlMxNiAoTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYpCisKIAkvKjUxMiBNZWdhYml0ICovCi0JeyJOQU5EIDY0TWlCIDEsOFYgOC1iaXQiLCAJMHhBMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCA2NE1pQiAzLDNWIDgtYml0IiwgCTB4RjIsIDAsICA2NCwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNjRNaUIgMSw4ViAxNi1iaXQiLCAJMHhCMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLCAJMHhDMiwgMCwgIDY0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgNjRNaUIgMSw4ViA4LWJpdCIsCTB4QTIsIDAsICA2NCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDY0TWlCIDMsM1YgOC1iaXQiLAkweEYyLCAwLCAgNjQsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCA2NE1pQiAxLDhWIDE2LWJpdCIsCTB4QjIsIDAsICA2NCwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgNjRNaUIgMywzViAxNi1iaXQiLAkweEMyLCAwLCAgNjQsIDAsIExQX09QVElPTlMxNn0sCiAKIAkvKiAxIEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLCAJMHhBMSwgMCwgMTI4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsIAkweEYxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsIAkweEIxLCAwLCAxMjgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxMjhNaUIgMywzViAxNi1iaXQiLCAJMHhDMSwgMCwgMTI4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKKwl7Ik5BTkQgMTI4TWlCIDEsOFYgOC1iaXQiLAkweEExLCAwLCAxMjgsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4RjEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDEyOE1pQiAxLDhWIDE2LWJpdCIsCTB4QjEsIDAsIDEyOCwgMCwgTFBfT1BUSU9OUzE2fSwKKwl7Ik5BTkQgMTI4TWlCIDMsM1YgMTYtYml0IiwJMHhDMSwgMCwgMTI4LCAwLCBMUF9PUFRJT05TMTZ9LAogCiAJLyogMiBHaWdhYml0ICovCi0JeyJOQU5EIDI1Nk1pQiAxLDhWIDgtYml0IiwgCTB4QUEsIDAsIDI1NiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMjU2TWlCIDMsM1YgOC1iaXQiLCAJMHhEQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyNTZNaUIgMSw4ViAxNi1iaXQiLCAJMHhCQSwgMCwgMjU2LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfQlVTV0lEVEhfMTYgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgMjU2TWlCIDMsM1YgMTYtYml0IiwgCTB4Q0EsIDAsIDI1NiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCisJeyJOQU5EIDI1Nk1pQiAxLDhWIDgtYml0IiwJMHhBQSwgMCwgMjU2LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMjU2TWlCIDMsM1YgOC1iaXQiLAkweERBLCAwLCAyNTYsIDAsIExQX09QVElPTlN9LAorCXsiTkFORCAyNTZNaUIgMSw4ViAxNi1iaXQiLAkweEJBLCAwLCAyNTYsIDAsIExQX09QVElPTlMxNn0sCisJeyJOQU5EIDI1Nk1pQiAzLDNWIDE2LWJpdCIsCTB4Q0EsIDAsIDI1NiwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDQgR2lnYWJpdCAqLwotCXsiTkFORCA1MTJNaUIgMSw4ViA4LWJpdCIsIAkweEFDLCAwLCA1MTIsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDUxMk1pQiAzLDNWIDgtYml0IiwgCTB4REMsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX05PX0FVVE9JTkNSfSwKLQl7Ik5BTkQgNTEyTWlCIDEsOFYgMTYtYml0IiwgCTB4QkMsIDAsIDUxMiwgMCwgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgfCBOQU5EX0JVU1dJRFRIXzE2IHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDUxMk1pQiAzLDNWIDE2LWJpdCIsIAkweENDLCAwLCA1MTIsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCA1MTJNaUIgMSw4ViA4LWJpdCIsCTB4QUMsIDAsIDUxMiwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDUxMk1pQiAzLDNWIDgtYml0IiwJMHhEQywgMCwgNTEyLCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgNTEyTWlCIDEsOFYgMTYtYml0IiwJMHhCQywgMCwgNTEyLCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCA1MTJNaUIgMywzViAxNi1iaXQiLAkweENDLCAwLCA1MTIsIDAsIExQX09QVElPTlMxNn0sCiAKIAkvKiA4IEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMUdpQiAxLDhWIDgtYml0IiwgCTB4QTMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDFHaUIgMywzViA4LWJpdCIsIAkweEQzLCAwLCAxMDI0LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxR2lCIDEsOFYgMTYtYml0IiwgCTB4QjMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAxR2lCIDMsM1YgMTYtYml0IiwgCTB4QzMsIDAsIDEwMjQsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCAxR2lCIDEsOFYgOC1iaXQiLAkweEEzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMUdpQiAzLDNWIDgtYml0IiwJMHhEMywgMCwgMTAyNCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDFHaUIgMSw4ViAxNi1iaXQiLAkweEIzLCAwLCAxMDI0LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAxR2lCIDMsM1YgMTYtYml0IiwJMHhDMywgMCwgMTAyNCwgMCwgTFBfT1BUSU9OUzE2fSwKIAogCS8qIDE2IEdpZ2FiaXQgKi8KLQl7Ik5BTkQgMkdpQiAxLDhWIDgtYml0IiwgCTB4QTUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9OT19BVVRPSU5DUn0sCi0JeyJOQU5EIDJHaUIgMywzViA4LWJpdCIsIAkweEQ1LCAwLCAyMDQ4LCAwLCBOQU5EX1NBTVNVTkdfTFBfT1BUSU9OUyB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyR2lCIDEsOFYgMTYtYml0IiwgCTB4QjUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAotCXsiTkFORCAyR2lCIDMsM1YgMTYtYml0IiwgCTB4QzUsIDAsIDIwNDgsIDAsIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIHwgTkFORF9CVVNXSURUSF8xNiB8IE5BTkRfTk9fQVVUT0lOQ1J9LAorCXsiTkFORCAyR2lCIDEsOFYgOC1iaXQiLAkweEE1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TfSwKKwl7Ik5BTkQgMkdpQiAzLDNWIDgtYml0IiwJMHhENSwgMCwgMjA0OCwgMCwgTFBfT1BUSU9OU30sCisJeyJOQU5EIDJHaUIgMSw4ViAxNi1iaXQiLAkweEI1LCAwLCAyMDQ4LCAwLCBMUF9PUFRJT05TMTZ9LAorCXsiTkFORCAyR2lCIDMsM1YgMTYtYml0IiwJMHhDNSwgMCwgMjA0OCwgMCwgTFBfT1BUSU9OUzE2fSwKIAotCS8qIFJlbmVzYXMgQU5EIDEgR2lnYWJpdC4gVGhvc2UgY2hpcHMgZG8gbm90IHN1cHBvcnQgZXh0ZW5kZWQgaWQgYW5kIGhhdmUgYSBzdHJhbmdlIHBhZ2UvYmxvY2sgbGF5b3V0ICEKLQkgKiBUaGUgY2hvc2VuIG1pbmltdW0gZXJhc2VzaXplIGlzIDQgKiAyICogMjA0OCA9IDE2Mzg0IEJ5dGUsIGFzIHRob3NlIGNoaXBzIGhhdmUgYW4gYXJyYXkgb2YgNCBwYWdlIHBsYW5lcwotCSAqIDEgYmxvY2sgPSAyIHBhZ2VzLCBidXQgZHVlIHRvIHBsYW5lIGFycmFuZ2VtZW50IHRoZSBibG9ja3MgMC0zIGNvbnNpc3RzIG9mIHBhZ2UgMCArIDQsMSArIDUsIDIgKyA2LCAzICsgNwotCSAqIEFueXdheSBKRkZTMiB3b3VsZCBpbmNyZWFzZSB0aGUgZXJhc2VibG9jayBzaXplIHNvIHdlIGNob3NlIGEgY29tYmluZWQgb25lIHdoaWNoIGNhbiBiZSBlcmFzZWQgaW4gb25lIGdvCi0JICogVGhlcmUgYXJlIG1vcmUgc3BlZWQgaW1wcm92ZW1lbnRzIGZvciByZWFkcyBhbmQgd3JpdGVzIHBvc3NpYmxlLCBidXQgbm90IGltcGxlbWVudGVkIG5vdworCS8qCisJICogUmVuZXNhcyBBTkQgMSBHaWdhYml0LiBUaG9zZSBjaGlwcyBkbyBub3Qgc3VwcG9ydCBleHRlbmRlZCBpZCBhbmQKKwkgKiBoYXZlIGEgc3RyYW5nZSBwYWdlL2Jsb2NrIGxheW91dCAhICBUaGUgY2hvc2VuIG1pbmltdW0gZXJhc2VzaXplIGlzCisJICogNCAqIDIgKiAyMDQ4ID0gMTYzODQgQnl0ZSwgYXMgdGhvc2UgY2hpcHMgaGF2ZSBhbiBhcnJheSBvZiA0IHBhZ2UKKwkgKiBwbGFuZXMgMSBibG9jayA9IDIgcGFnZXMsIGJ1dCBkdWUgdG8gcGxhbmUgYXJyYW5nZW1lbnQgdGhlIGJsb2NrcworCSAqIDAtMyBjb25zaXN0cyBvZiBwYWdlIDAgKyA0LDEgKyA1LCAyICsgNiwgMyArIDcgQW55d2F5IEpGRlMyIHdvdWxkCisJICogaW5jcmVhc2UgdGhlIGVyYXNlYmxvY2sgc2l6ZSBzbyB3ZSBjaG9zZSBhIGNvbWJpbmVkIG9uZSB3aGljaCBjYW4gYmUKKwkgKiBlcmFzZWQgaW4gb25lIGdvIFRoZXJlIGFyZSBtb3JlIHNwZWVkIGltcHJvdmVtZW50cyBmb3IgcmVhZHMgYW5kCisJICogd3JpdGVzIHBvc3NpYmxlLCBidXQgbm90IGltcGxlbWVudGVkIG5vdwogCSAqLwotCXsiQU5EIDEyOE1pQiAzLDNWIDgtYml0IiwJMHgwMSwgMjA0OCwgMTI4LCAweDQwMDAsIE5BTkRfSVNfQU5EIHwgTkFORF9OT19BVVRPSU5DUiB8IE5BTkRfNFBBR0VfQVJSQVkgfCBCQlRfQVVUT19SRUZSRVNIfSwKKwl7IkFORCAxMjhNaUIgMywzViA4LWJpdCIsCTB4MDEsIDIwNDgsIDEyOCwgMHg0MDAwLAorCSBOQU5EX0lTX0FORCB8IE5BTkRfTk9fQVVUT0lOQ1IgfE5BTkRfTk9fUkVBRFJEWSB8IE5BTkRfNFBBR0VfQVJSQVkgfAorCSBCQlRfQVVUT19SRUZSRVNICisJfSwKIAogCXtOVUxMLH0KIH07CkBAIC0xMjUsMTMgKzEzNiwxMyBAQAogCXtOQU5EX01GUl9OQVRJT05BTCwgIk5hdGlvbmFsIn0sCiAJe05BTkRfTUZSX1JFTkVTQVMsICJSZW5lc2FzIn0sCiAJe05BTkRfTUZSX1NUTUlDUk8sICJTVCBNaWNybyJ9LAotICAgICAgICB7TkFORF9NRlJfSFlOSVgsICJIeW5peCJ9LAorCXtOQU5EX01GUl9IWU5JWCwgIkh5bml4In0sCiAJezB4MCwgIlVua25vd24ifQogfTsKIAotRVhQT1JUX1NZTUJPTCAobmFuZF9tYW51Zl9pZHMpOwotRVhQT1JUX1NZTUJPTCAobmFuZF9mbGFzaF9pZHMpOworRVhQT1JUX1NZTUJPTChuYW5kX21hbnVmX2lkcyk7CitFWFBPUlRfU1lNQk9MKG5hbmRfZmxhc2hfaWRzKTsKIAotTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKLU1PRFVMRV9BVVRIT1IgKCJUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTiAoIk5hbmQgZGV2aWNlICYgbWFudWZhY3R1cmVyIElEJ3MiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJOYW5kIGRldmljZSAmIG1hbnVmYWN0dXJlciBJRHMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmFuZHNpbS5jIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKaW5kZXggYTBhZjkyYy4uZWJkNjRhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uYW5kc2ltLmMKQEAgLTM2OSw3ICszNjksNyBAQAogCS8qIEluaXRpYWxpemUgdGhlIE5BTkQgZmxhc2ggcGFyYW1ldGVycyAqLwogCW5zLT5idXN3ID0gY2hpcC0+b3B0aW9ucyAmIE5BTkRfQlVTV0lEVEhfMTYgPyAxNiA6IDg7CiAJbnMtPmdlb20udG90c3ogICAgPSBtdGQtPnNpemU7Ci0JbnMtPmdlb20ucGdzeiAgICAgPSBtdGQtPm9vYmJsb2NrOworCW5zLT5nZW9tLnBnc3ogICAgID0gbXRkLT53cml0ZXNpemU7CiAJbnMtPmdlb20ub29ic3ogICAgPSBtdGQtPm9vYnNpemU7CiAJbnMtPmdlb20uc2Vjc3ogICAgPSBtdGQtPmVyYXNlc2l6ZTsKIAlucy0+Z2VvbS5wZ3N6b29iICA9IG5zLT5nZW9tLnBnc3ogKyBucy0+Z2VvbS5vb2JzejsKQEAgLTEwNzEsNjggKzEwNzEsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLW5zX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgbmFuZHNpbSAqbnMgPSAoc3RydWN0IG5hbmRzaW0gKikoKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXYpLT5wcml2OwotCi0Jc3dpdGNoIChjbWQpIHsKLQotCS8qIHNldCBDTEUgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdGFydCBjb21tYW5kIGxhdGNoIGN5Y2xlc1xuIik7Ci0JCW5zLT5saW5lcy5jbGUgID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQ0xFIGxpbmUgbG93ICovCi0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdG9wIGNvbW1hbmQgbGF0Y2ggY3ljbGVzXG4iKTsKLQkJbnMtPmxpbmVzLmNsZSAgPSAwOwotCQlicmVhazsKLQotCS8qIHNldCBBTEUgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBzdGFydCBhZGRyZXNzIGxhdGNoIGN5Y2xlc1xuIik7Ci0JCW5zLT5saW5lcy5hbGUgICA9IDE7Ci0JCWJyZWFrOwotCi0JLyogc2V0IEFMRSBsaW5lIGxvdyAqLwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQlOU19EQkcoIm5zX2h3Y29udHJvbDogc3RvcCBhZGRyZXNzIGxhdGNoIGN5Y2xlc1xuIik7Ci0JCW5zLT5saW5lcy5hbGUgID0gMDsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgV1AgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9TRVRXUDoKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IGVuYWJsZSB3cml0ZSBwcm90ZWN0aW9uXG4iKTsKLQkJbnMtPmxpbmVzLndwID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgV1AgbGluZSBsb3cgKi8KLQljYXNlIE5BTkRfQ1RMX0NMUldQOgotCQlOU19EQkcoIm5zX2h3Y29udHJvbDogZGlzYWJsZSB3cml0ZSBwcm90ZWN0aW9uXG4iKTsKLQkJbnMtPmxpbmVzLndwID0gMDsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQ0UgbGluZSBsb3cgKi8KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQkJTlNfREJHKCJuc19od2NvbnRyb2w6IGVuYWJsZSBjaGlwXG4iKTsKLQkJbnMtPmxpbmVzLmNlID0gMTsKLQkJYnJlYWs7Ci0KLQkvKiBzZXQgQ0UgbGluZSBoaWdoICovCi0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCU5TX0RCRygibnNfaHdjb250cm9sOiBkaXNhYmxlIGNoaXBcbiIpOwotCQlucy0+bGluZXMuY2UgPSAwOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCU5TX0VSUigiaHdjb250cm9sOiB1bmtub3duIGNvbW1hbmRcbiIpOwotICAgICAgICB9Ci0KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyB1X2NoYXIKIG5zX25hbmRfcmVhZF9ieXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpAQCAtMTM1OSw2ICsxMjk3LDE4IEBACiAJcmV0dXJuOwogfQogCitzdGF0aWMgdm9pZCBuc19od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBiaXRtYXNrKQoreworCXN0cnVjdCBuYW5kc2ltICpucyA9ICgoc3RydWN0IG5hbmRfY2hpcCAqKW10ZC0+cHJpdiktPnByaXY7CisKKwlucy0+bGluZXMuY2xlID0gYml0bWFzayAmIE5BTkRfQ0xFID8gMSA6IDA7CisJbnMtPmxpbmVzLmFsZSA9IGJpdG1hc2sgJiBOQU5EX0FMRSA/IDEgOiAwOworCW5zLT5saW5lcy5jZSA9IGJpdG1hc2sgJiBOQU5EX05DRSA/IDEgOiAwOworCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQluc19uYW5kX3dyaXRlX2J5dGUobXRkLCBjbWQpOworfQorCiBzdGF0aWMgaW50CiBuc19kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CkBAIC0xMzc3LDE3ICsxMzI3LDYgQEAKIH0KIAogc3RhdGljIHZvaWQKLW5zX25hbmRfd3JpdGVfd29yZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDE2X3Qgd29yZCkKLXsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gKHN0cnVjdCBuYW5kX2NoaXAgKiltdGQtPnByaXY7Ci0KLQlOU19EQkcoIndyaXRlX3dvcmRcbiIpOwotCi0JY2hpcC0+d3JpdGVfYnl0ZShtdGQsIHdvcmQgJiAweEZGKTsKLQljaGlwLT53cml0ZV9ieXRlKG10ZCwgd29yZCA+PiA4KTsKLX0KLQotc3RhdGljIHZvaWQKIG5zX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbikKIHsKICAgICAgICAgc3RydWN0IG5hbmRzaW0gKm5zID0gKHN0cnVjdCBuYW5kc2ltICopKChzdHJ1Y3QgbmFuZF9jaGlwICopbXRkLT5wcml2KS0+cHJpdjsKQEAgLTE1MTQsMTYgKzE0NTMsMTQgQEAKIAkvKgogCSAqIFJlZ2lzdGVyIHNpbXVsYXRvcidzIGNhbGxiYWNrcy4KIAkgKi8KLQljaGlwLT5od2NvbnRyb2wgID0gbnNfaHdjb250cm9sOworCWNoaXAtPmNtZF9jdHJsCSA9IG5zX2h3Y29udHJvbDsKIAljaGlwLT5yZWFkX2J5dGUgID0gbnNfbmFuZF9yZWFkX2J5dGU7CiAJY2hpcC0+ZGV2X3JlYWR5ICA9IG5zX2RldmljZV9yZWFkeTsKLQljaGlwLT53cml0ZV9ieXRlID0gbnNfbmFuZF93cml0ZV9ieXRlOwogCWNoaXAtPndyaXRlX2J1ZiAgPSBuc19uYW5kX3dyaXRlX2J1ZjsKIAljaGlwLT5yZWFkX2J1ZiAgID0gbnNfbmFuZF9yZWFkX2J1ZjsKIAljaGlwLT52ZXJpZnlfYnVmID0gbnNfbmFuZF92ZXJpZnlfYnVmOwotCWNoaXAtPndyaXRlX3dvcmQgPSBuc19uYW5kX3dyaXRlX3dvcmQ7CiAJY2hpcC0+cmVhZF93b3JkICA9IG5zX25hbmRfcmVhZF93b3JkOwotCWNoaXAtPmVjY21vZGUgICAgPSBOQU5EX0VDQ19TT0ZUOworCWNoaXAtPmVjYy5tb2RlICAgPSBOQU5EX0VDQ19TT0ZUOwogCWNoaXAtPm9wdGlvbnMgICB8PSBOQU5EX1NLSVBfQkJUU0NBTjsKIAogCS8qCkBAIC0xNTQ2LDYgKzE0ODMsOCBAQAogCQljaGlwLT5vcHRpb25zIHw9IE5BTkRfQlVTV0lEVEhfMTY7CiAJfQogCisJbnNtdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKIAlpZiAoKHJldHZhbCA9IG5hbmRfc2Nhbihuc210ZCwgMSkpICE9IDApIHsKIAkJTlNfRVJSKCJjYW4ndCByZWdpc3RlciBOQU5EIFNpbXVsYXRvclxuIik7CiAJCWlmIChyZXR2YWwgPiAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMgYi9kcml2ZXJzL210ZC9uYW5kL25kZmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZThkMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKQEAgLTAsMCArMSwzMTEgQEAKKy8qCisgKiAgZHJpdmVycy9tdGQvbmRmYy5jCisgKgorICogIE92ZXJ2aWV3OgorICogICBQbGF0Zm9ybSBpbmRlcGVuZGVuZCBkcml2ZXIgZm9yIE5ERkMgKE5hbkQgRmxhc2ggQ29udHJvbGxlcikKKyAqICAgaW50ZWdyYXRlZCBpbnRvIEVQNDQwIGNvcmVzCisgKgorICogIEF1dGhvcjogVGhvbWFzIEdsZWl4bmVyCisgKgorICogIENvcHlyaWdodCAyMDA2IElCTQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUJIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mCSB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQlMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uZGZjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2libTQ0eC5oPgorCitzdHJ1Y3QgbmRmY19uYW5kX210ZCB7CisJc3RydWN0IG10ZF9pbmZvCQkJbXRkOworCXN0cnVjdCBuYW5kX2NoaXAJCWNoaXA7CisJc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcAkqcGxfY2hpcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmRmY19uYW5kX210ZCBuZGZjX210ZFtOREZDX01BWF9CQU5LU107CisKK3N0cnVjdCBuZGZjX2NvbnRyb2xsZXIgeworCXZvaWQgX19pb21lbQkJKm5kZmNiYXNlOworCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wJbmRmY19jb250cm9sOworCWF0b21pY190CQljaGlsZHNfYWN0aXZlOworfTsKKworc3RhdGljIHN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgbmRmY19jdHJsOworCitzdGF0aWMgdm9pZCBuZGZjX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwl1aW50MzJfdCBjY3I7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJc3RydWN0IG5hbmRfY2hpcCAqbmFuZGNoaXAgPSBtdGQtPnByaXY7CisJc3RydWN0IG5kZmNfbmFuZF9tdGQgKm5hbmRtdGQgPSBuYW5kY2hpcC0+cHJpdjsKKwlzdHJ1Y3QgcGxhdGZvcm1fbmFuZF9jaGlwICpwY2hpcCA9IG5hbmRtdGQtPnBsX2NoaXA7CisKKwljY3IgPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfQ0NSKTsKKwlpZiAoY2hpcCA+PSAwKSB7CisJCWNjciAmPSB+TkRGQ19DQ1JfQlNfTUFTSzsKKwkJY2NyIHw9IE5ERkNfQ0NSX0JTKGNoaXAgKyBwY2hpcC0+Y2hpcF9vZmZzZXQpOworCX0gZWxzZQorCQljY3IgfD0gTkRGQ19DQ1JfUkVTRVRfQ0U7CisJd3JpdGVsKGNjciwgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7Cit9CisKK3N0YXRpYyB2b2lkIG5kZmNfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQorCQlyZXR1cm47CisKKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWwoY21kICYgMHhGRiwgY2hpcC0+SU9fQUREUl9XICsgTkRGQ19DTUQpOworCWVsc2UKKwkJd3JpdGVsKGNtZCAmIDB4RkYsIGNoaXAtPklPX0FERFJfVyArIE5ERkNfQUxFKTsKK30KKworc3RhdGljIGludCBuZGZjX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCisJcmV0dXJuIF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19TVEFUKSAmIE5ERkNfU1RBVF9JU19SRUFEWTsKK30KKworc3RhdGljIHZvaWQgbmRmY19lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQoreworCXVpbnQzMl90IGNjcjsKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKworCWNjciA9IF9fcmF3X3JlYWRsKG5kZmMtPm5kZmNiYXNlICsgTkRGQ19DQ1IpOworCWNjciB8PSBOREZDX0NDUl9SRVNFVF9FQ0M7CisJX19yYXdfd3JpdGVsKGNjciwgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJdWludDMyX3QgZWNjOworCXVpbnQ4X3QgKnAgPSAodWludDhfdCAqKSZlY2M7CisKKwl3bWIoKTsKKwllY2MgPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfRUNDKTsKKwllY2NfY29kZVswXSA9IHBbMV07CisJZWNjX2NvZGVbMV0gPSBwWzJdOworCWVjY19jb2RlWzJdID0gcFszXTsKKworCXJldHVybiAwOworfQorCisvKgorICogU3BlZWR1cHMgZm9yIGJ1ZmZlciByZWFkL3dyaXRlL3ZlcmlmeQorICoKKyAqIE5ERkMgYWxsb3dzIDMyYml0IHJlYWQvd3JpdGUgb2YgZGF0YS4gU28gd2UgY2FuIHNwZWVkIHVwIHRoZSBidWZmZXIKKyAqIGZ1bmN0aW9ucy4gTm8gZnVydGhlciBjaGVja2luZywgYXMgbmFuZF9iYXNlIHdpbGwgYWx3YXlzIHJlYWQvd3JpdGUKKyAqIHBhZ2UgYWxpZ25lZC4KKyAqLworc3RhdGljIHZvaWQgbmRmY19yZWFkX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBpbnQgbGVuKQoreworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXVpbnQzMl90ICpwID0gKHVpbnQzMl90ICopIGJ1ZjsKKworCWZvcig7bGVuID4gMDsgbGVuIC09IDQpCisJCSpwKysgPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfREFUQSk7Cit9CisKK3N0YXRpYyB2b2lkIG5kZmNfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9ICZuZGZjX2N0cmw7CisJdWludDMyX3QgKnAgPSAodWludDMyX3QgKikgYnVmOworCisJZm9yKDtsZW4gPiAwOyBsZW4gLT0gNCkKKwkJX19yYXdfd3JpdGVsKCpwKyssIG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBKTsKK30KKworc3RhdGljIGludCBuZGZjX3ZlcmlmeV9idWYoc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwl1aW50MzJfdCAqcCA9ICh1aW50MzJfdCAqKSBidWY7CisKKwlmb3IoO2xlbiA+IDA7IGxlbiAtPSA0KQorCQlpZiAoKnArKyAhPSBfX3Jhd19yZWFkbChuZGZjLT5uZGZjYmFzZSArIE5ERkNfREFUQSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEluaXRpYWxpemUgY2hpcCBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHZvaWQgbmRmY19jaGlwX2luaXQoc3RydWN0IG5kZmNfbmFuZF9tdGQgKm10ZCkKK3sKKwlzdHJ1Y3QgbmRmY19jb250cm9sbGVyICpuZGZjID0gJm5kZmNfY3RybDsKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gJm10ZC0+Y2hpcDsKKworCWNoaXAtPklPX0FERFJfUiA9IG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBOworCWNoaXAtPklPX0FERFJfVyA9IG5kZmMtPm5kZmNiYXNlICsgTkRGQ19EQVRBOworCWNoaXAtPmNtZF9jdHJsID0gbmRmY19od2NvbnRyb2w7CisJY2hpcC0+ZGV2X3JlYWR5ID0gbmRmY19yZWFkeTsKKwljaGlwLT5zZWxlY3RfY2hpcCA9IG5kZmNfc2VsZWN0X2NoaXA7CisJY2hpcC0+Y2hpcF9kZWxheSA9IDUwOworCWNoaXAtPnByaXYgPSBtdGQ7CisJY2hpcC0+b3B0aW9ucyA9IG10ZC0+cGxfY2hpcC0+b3B0aW9uczsKKwljaGlwLT5jb250cm9sbGVyID0gJm5kZmMtPm5kZmNfY29udHJvbDsKKwljaGlwLT5yZWFkX2J1ZiA9IG5kZmNfcmVhZF9idWY7CisJY2hpcC0+d3JpdGVfYnVmID0gbmRmY193cml0ZV9idWY7CisJY2hpcC0+dmVyaWZ5X2J1ZiA9IG5kZmNfdmVyaWZ5X2J1ZjsKKwljaGlwLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOworCWNoaXAtPmVjYy5od2N0bCA9IG5kZmNfZW5hYmxlX2h3ZWNjOworCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBuZGZjX2NhbGN1bGF0ZV9lY2M7CisJY2hpcC0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwljaGlwLT5lY2Muc2l6ZSA9IDI1NjsKKwljaGlwLT5lY2MuYnl0ZXMgPSAzOworCWNoaXAtPmVjY2xheW91dCA9IG10ZC0+cGxfY2hpcC0+ZWNjbGF5b3V0OworCW10ZC0+bXRkLnByaXYgPSBjaGlwOworCW10ZC0+bXRkLm93bmVyID0gVEhJU19NT0RVTEU7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19jaGlwX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCAqbmMgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbmRmY19jaGlwX3NldHRpbmdzICpzZXR0aW5ncyA9IG5jLT5wcml2OworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXN0cnVjdCBuZGZjX25hbmRfbXRkICpuYW5kbXRkOworCisJaWYgKG5jLT5jaGlwX29mZnNldCA+PSBOREZDX01BWF9CQU5LUyB8fCBuYy0+bnJfY2hpcHMgPiBOREZDX01BWF9CQU5LUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgdGhlIGJhbmsgc2V0dGluZ3MgKi8KKwlfX3Jhd193cml0ZWwoc2V0dGluZ3MtPmJhbmtfc2V0dGluZ3MsCisJCSAgICAgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0JDRkcwICsgKG5jLT5jaGlwX29mZnNldCA8PCAyKSk7CisKKwluYW5kbXRkID0gJm5kZmNfbXRkW3BkZXYtPmlkXTsKKwlpZiAobmFuZG10ZC0+cGxfY2hpcCkKKwkJcmV0dXJuIC1FQlVTWTsKKworCW5hbmRtdGQtPnBsX2NoaXAgPSBuYzsKKwluZGZjX2NoaXBfaW5pdChuYW5kbXRkKTsKKworCS8qIFNjYW4gZm9yIGNoaXBzICovCisJaWYgKG5hbmRfc2NhbigmbmFuZG10ZC0+bXRkLCBuYy0+bnJfY2hpcHMpKSB7CisJCW5hbmRtdGQtPnBsX2NoaXAgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwlwcmludGsoIk51bWJlciBvZiBwYXJ0aXRpb25zICVkXG4iLCBuYy0+bnJfcGFydGl0aW9ucyk7CisJaWYgKG5jLT5ucl9wYXJ0aXRpb25zKSB7CisJCS8qIEFkZCB0aGUgZnVsbCBkZXZpY2UsIHNvIGNvbXBsZXRlIGR1bXBzIGNhbiBiZSBtYWRlICovCisJCWFkZF9tdGRfZGV2aWNlKCZuYW5kbXRkLT5tdGQpOworCQlhZGRfbXRkX3BhcnRpdGlvbnMoJm5hbmRtdGQtPm10ZCwgbmMtPnBhcnRpdGlvbnMsCisJCQkJICAgbmMtPm5yX3BhcnRpdGlvbnMpOworCisJfSBlbHNlCisjZWxzZQorCQlhZGRfbXRkX2RldmljZSgmbmFuZG10ZC0+bXRkKTsKKyNlbmRpZgorCisJYXRvbWljX2luYygmbmRmYy0+Y2hpbGRzX2FjdGl2ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmRmY19jaGlwX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5kZmNfbmFuZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgKm5jID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG5kZmNfY29udHJvbGxlcl9zZXR0aW5ncyAqc2V0dGluZ3MgPSBuYy0+cHJpdjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBkZXYtPnJlc291cmNlOworCXN0cnVjdCBuZGZjX2NvbnRyb2xsZXIgKm5kZmMgPSAmbmRmY19jdHJsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBwaHlzID0gc2V0dGluZ3MtPm5kZmNfZXJwbiB8IHJlcy0+c3RhcnQ7CisKKwluZGZjLT5uZGZjYmFzZSA9IGlvcmVtYXA2NChwaHlzLCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIW5kZmMtPm5kZmNiYXNlKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTkRGQzogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlfX3Jhd193cml0ZWwoc2V0dGluZ3MtPmNjcl9zZXR0aW5ncywgbmRmYy0+bmRmY2Jhc2UgKyBOREZDX0NDUik7CisKKwlzcGluX2xvY2tfaW5pdCgmbmRmYy0+bmRmY19jb250cm9sLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5kZmMtPm5kZmNfY29udHJvbC53cSk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGZjKTsKKworCXByaW50aygiTkRGQyBOQU5EIERyaXZlciBpbml0aWFsaXplZC4gQ2hpcC1SZXY6IDB4JTA4eFxuIiwKKwkgICAgICAgX19yYXdfcmVhZGwobmRmYy0+bmRmY2Jhc2UgKyBOREZDX1JFVklEKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuZGZjX25hbmRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5kZmNfY29udHJvbGxlciAqbmRmYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKGF0b21pY19yZWFkKCZuZGZjLT5jaGlsZHNfYWN0aXZlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChuZGZjKSB7CisJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCQlpb3VubWFwKG5kZmNfY3RybC5uZGZjYmFzZSk7CisJCW5kZmNfY3RybC5uZGZjYmFzZSA9IE5VTEw7CisJfQorCXJldHVybiAwOworfQorCisvKiBkcml2ZXIgZGV2aWNlIHJlZ2lzdHJhdGlvbiAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBuZGZjX2NoaXBfZHJpdmVyID0geworCS5wcm9iZQkJPSBuZGZjX2NoaXBfcHJvYmUsCisJLnJlbW92ZQkJPSBuZGZjX2NoaXBfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJuZGZjLWNoaXAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbmRmY19uYW5kX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbmRmY19uYW5kX3Byb2JlLAorCS5yZW1vdmUJCT0gbmRmY19uYW5kX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibmRmYy1uYW5kIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5kZmNfbmFuZF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pbml0KCZuZGZjX2N0cmwubmRmY19jb250cm9sLmxvY2spOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5kZmNfY3RybC5uZGZjX2NvbnRyb2wud3EpOworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZGZjX25hbmRfZHJpdmVyKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZuZGZjX2NoaXBfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbmRmY19uYW5kX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbmRmY19jaGlwX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm5kZmNfbmFuZF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChuZGZjX25hbmRfaW5pdCk7Cittb2R1bGVfZXhpdChuZGZjX25hbmRfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlRob21hcyBHbGVpeG5lciA8dGdseEBsaW51dHJvbml4LmRlPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQbGF0Zm9ybSBkcml2ZXIgZm9yIE5ERkMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYyBiL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYwppbmRleCA5MWE5NWYzLi4yMmZhNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3BwY2hhbWVsZW9uZXZiLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9wcGNoYW1lbGVvbmV2Yi5jCkBAIC01OCwyMSArNTgsMjEgQEAKIC8qCiAgKiBNVEQgc3RydWN0dXJlIGZvciBQUENoYW1lbGVvbkVWQiBib2FyZAogICovCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpwcGNoYW1lbGVvbl9tdGQgCT0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKnBwY2hhbWVsZW9uX210ZCA9IE5VTEw7CiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpwcGNoYW1lbGVvbmV2Yl9tdGQgPSBOVUxMOwogCiAvKgogICogTW9kdWxlIHN0dWZmCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHBwY2hhbWVsZW9uX2Zpb19wYmFzZSAJPSBDRkdfTkFORDBfUEFERFI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNoYW1lbGVvbl9maW9fcGJhc2UgPSBDRkdfTkFORDBfUEFERFI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2UgPSBDRkdfTkFORDFfUEFERFI7CiAKICNpZmRlZiBNT0RVTEUKIG1vZHVsZV9wYXJhbShwcGNoYW1lbGVvbl9maW9fcGJhc2UsIHVsb25nLCAwKTsKIG1vZHVsZV9wYXJhbShwcGNoYW1lbGVvbmV2Yl9maW9fcGJhc2UsIHVsb25nLCAwKTsKICNlbHNlCi1fX3NldHVwKCJwcGNoYW1lbGVvbl9maW9fcGJhc2U9IixwcGNoYW1lbGVvbl9maW9fcGJhc2UpOwotX19zZXR1cCgicHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlPSIscHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlKTsKK19fc2V0dXAoInBwY2hhbWVsZW9uX2Zpb19wYmFzZT0iLCBwcGNoYW1lbGVvbl9maW9fcGJhc2UpOworX19zZXR1cCgicHBjaGFtZWxlb25ldmJfZmlvX3BiYXNlPSIsIHBwY2hhbWVsZW9uZXZiX2Zpb19wYmFzZSk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwpAQCAtODAsODIgKzgwLDk2IEBACiAgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZXMKICAqLwogc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvX2hpW10gPSB7Ci0JeyBuYW1lOiAiUFBDaGFtZWxlb24gSEkgTmFuZCBGbGFzaCIsCi0JCSAgb2Zmc2V0OiAwLAotCQkgIHNpemU6IDEyOCoxMDI0KjEwMjQgfQorICAgICAgeyAubmFtZSA9ICJQUENoYW1lbGVvbiBISSBOYW5kIEZsYXNoIiwKKwlvZmZzZXQgPSAwLAorCS5zaXplID0gMTI4ICogMTAyNCAqIDEwMjQKKyAgICAgIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb19tZVtdID0gewotCXsgbmFtZTogIlBQQ2hhbWVsZW9uIE1FIE5hbmQgRmxhc2giLAotCQkgIG9mZnNldDogMCwKLQkJICBzaXplOiAzMioxMDI0KjEwMjQgfQorICAgICAgeyAubmFtZSA9ICJQUENoYW1lbGVvbiBNRSBOYW5kIEZsYXNoIiwKKwkub2Zmc2V0ID0gMCwKKwkuc2l6ZSA9IDMyICogMTAyNCAqIDEwMjQKKyAgICAgIH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb19ldmJbXSA9IHsKLQl7IG5hbWU6ICJQUENoYW1lbGVvbkVWQiBOYW5kIEZsYXNoIiwKLQkJICBvZmZzZXQ6IDAsCi0JCSAgc2l6ZTogMzIqMTAyNCoxMDI0IH0KKyAgICAgIHsgLm5hbWUgPSAiUFBDaGFtZWxlb25FVkIgTmFuZCBGbGFzaCIsCisJLm9mZnNldCA9IDAsCisJLnNpemUgPSAzMiAqIDEwMjQgKiAxMDI0CisgICAgICB9CiB9OwogCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TIDEKIAotZXh0ZXJuIGludCBwYXJzZV9jbWRsaW5lX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsCi0JCQkJICAgIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLAotCQkJCSAgICBjb25zdCBjaGFyICptdGRfaWQpOworZXh0ZXJuIGludCBwYXJzZV9jbWRsaW5lX3BhcnRpdGlvbnMoc3RydWN0IG10ZF9pbmZvICptYXN0ZXIsIHN0cnVjdCBtdGRfcGFydGl0aW9uICoqcHBhcnRzLCBjb25zdCBjaGFyICptdGRfaWQpOwogI2VuZGlmCiAKLQogLyoKICAqCWhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCiAgKi8KLXN0YXRpYyB2b2lkIHBwY2hhbWVsZW9uX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQpCitzdGF0aWMgdm9pZCBwcGNoYW1lbGVvbl9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGRpbmZvLCBpbnQgY21kLAorCQkJCSAgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3dpdGNoKGNtZCkgeworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX1NFVENMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX0NMUkNMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX1NFVEFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkFMRToKLSAgICAgICAgCU1BQ1JPX05BTkRfQ1RMX0NMUkFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKKwlpZiAoY3RybCAmIE5BTkRfQ1RSTF9DSEFOR0UpIHsKKyNlcnJvciBNaXNzaW5nIGhlYWRlcmZpbGVzLiBObyB3YXkgdG8gZml4IHRoaXMuIC10Z2x4CisJCXN3aXRjaCAoY21kKSB7CisJCWNhc2UgTkFORF9DVExfU0VUQ0xFOgorCQkJTUFDUk9fTkFORF9DVExfU0VUQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9DTFJDTEU6CisJCQlNQUNST19OQU5EX0NUTF9DTFJDTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQwX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX1NFVEFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQUxFOgorCQkJTUFDUk9fTkFORF9DVExfQ0xSQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMF9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVROQ0U6CiAJCQlNQUNST19OQU5EX0VOQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKIAkJCU1BQ1JPX05BTkRfRElTQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDBfUEFERFIpOwotCQlicmVhazsKKwkJCWJyZWFrOworCQl9CiAJfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAotc3RhdGljIHZvaWQgcHBjaGFtZWxlb25ldmJfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkaW5mbywgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHBwY2hhbWVsZW9uZXZiX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZGluZm8sIGludCBjbWQsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgY3RybCkKIHsKLQlzd2l0Y2goY21kKSB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfU0VUQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfQ0xSQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfU0VUQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotICAgICAgICAJTUFDUk9fTkFORF9DVExfQ0xSQUxFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotICAgICAgICAJTUFDUk9fTkFORF9FTkFCTEVfQ0UoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0gICAgICAgIAlNQUNST19OQU5EX0RJU0FCTEVfQ0UoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKLQkJYnJlYWs7CisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisjZXJyb3IgTWlzc2luZyBoZWFkZXJmaWxlcy4gTm8gd2F5IHRvIGZpeCB0aGlzLiAtdGdseAorCQlzd2l0Y2ggKGNtZCkgeworCQljYXNlIE5BTkRfQ1RMX1NFVENMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX1NFVENMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgorCQkJTUFDUk9fTkFORF9DVExfQ0xSQ0xFKCh1bnNpZ25lZCBsb25nKUNGR19OQU5EMV9QQUREUik7CisJCQlicmVhazsKKwkJY2FzZSBOQU5EX0NUTF9TRVRBTEU6CisJCQlNQUNST19OQU5EX0NUTF9TRVRBTEUoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUkFMRToKKwkJCU1BQ1JPX05BTkRfQ1RMX0NMUkFMRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCWNhc2UgTkFORF9DVExfU0VUTkNFOgorCQkJTUFDUk9fTkFORF9FTkFCTEVfQ0UoKHVuc2lnbmVkIGxvbmcpQ0ZHX05BTkQxX1BBRERSKTsKKwkJCWJyZWFrOworCQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKKwkJCU1BQ1JPX05BTkRfRElTQUJMRV9DRSgodW5zaWduZWQgbG9uZylDRkdfTkFORDFfUEFERFIpOworCQkJYnJlYWs7CisJCX0KIAl9CisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAjaWZkZWYgVVNFX1JFQURZX0JVU1lfUElOCkBAIC0xNjQsMTUgKzE3OCwxNSBAQAogICovCiBzdGF0aWMgaW50IHBwY2hhbWVsZW9uX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm1pbmZvKQogewotCWlmIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVIpICYgTkFORF9SQl9HUElPX1BJTikKKwlpZiAoaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9JUikgJiBOQU5EX1JCX0dQSU9fUElOKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwcGNoYW1lbGVvbmV2Yl9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptaW5mbykKIHsKLQlpZiAoaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX0lSKSAmIE5BTkRfRVZCX1JCX0dQSU9fUElOKQotCXJldHVybiAxOworCWlmIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lSKSAmIE5BTkRfRVZCX1JCX0dQSU9fUElOKQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMTg1LDcgKzE5OSw3IEBACiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHBwY2hhbWVsZW9uZXZiX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBwcGNoYW1lbGVvbmV2Yl9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAljb25zdCBjaGFyICpwYXJ0X3R5cGUgPSAwOwpAQCAtMTk0LDEzICsyMDgsMTEgQEAKIAl2b2lkIF9faW9tZW0gKnBwY2hhbWVsZW9uX2Zpb19iYXNlOwogCXZvaWQgX19pb21lbSAqcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2U7CiAKLQogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkqIFByb2Nlc3NvciBtb2R1bGUgTkFORCAoaWYgYW55KSAqCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCXBwY2hhbWVsZW9uX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKwotCQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlwcGNoYW1lbGVvbl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwY2hhbWVsZW9uX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBQUENoYW1lbGVvbiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjA4LDYzICsyMjAsNjUgQEAKIAogCS8qIG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJcHBjaGFtZWxlb25fZmlvX2Jhc2UgPSBpb3JlbWFwKHBwY2hhbWVsZW9uX2Zpb19wYmFzZSwgU1pfNE0pOwotCWlmKCFwcGNoYW1lbGVvbl9maW9fYmFzZSkgeworCWlmICghcHBjaGFtZWxlb25fZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIFBQQ2hhbWVsZW9uIE5BTkQgZmxhc2ggZmFpbGVkXG4iKTsKIAkJa2ZyZWUocHBjaGFtZWxlb25fbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmcHBjaGFtZWxlb25fbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnBwY2hhbWVsZW9uX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgcHBjaGFtZWxlb25fbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHBwY2hhbWVsZW9uX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlwcGNoYW1lbGVvbl9tdGQtPnByaXYgPSB0aGlzOworCXBwY2hhbWVsZW9uX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotICAgICAgICAvKiBJbml0aWFsaXplIEdQSU9zICovCisJLyogSW5pdGlhbGl6ZSBHUElPcyAqLwogCS8qIFBpbiBtYXBwaW5nIGZvciBOQU5EIGNoaXAgKi8KIAkvKgotCQlDRQlHUElPXzAxCi0JCUNMRQlHUElPXzAyCi0JCUFMRQlHUElPXzAzCi0JCVIvQglHUElPXzA0Ci0JKi8KKwkgICBDRSAgIEdQSU9fMDEKKwkgICBDTEUgIEdQSU9fMDIKKwkgICBBTEUgIEdQSU9fMDMKKwkgICBSL0IgIEdQSU9fMDQKKwkgKi8KIAkvKiBvdXRwdXQgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9PU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfT1NSSCkgJiAweEMwRkZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9PU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX09TUkgpICYgMHhDMEZGRkZGRik7CiAJLyogdGhyZWUtc3RhdGUgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSSCkgJiAweEMwRkZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgpICYgMHhDMEZGRkZGRik7CiAJLyogZW5hYmxlIG91dHB1dCBkcml2ZXIgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RDUikgfCBOQU5EX25DRV9HUElPX1BJTiB8IE5BTkRfQ0xFX0dQSU9fUElOIHwgTkFORF9BTEVfR1BJT19QSU4pOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUiwKKwkJIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSKSB8IE5BTkRfbkNFX0dQSU9fUElOIHwgTkFORF9DTEVfR1BJT19QSU4gfCBOQU5EX0FMRV9HUElPX1BJTik7CiAjaWZkZWYgVVNFX1JFQURZX0JVU1lfUElOCiAJLyogdGhyZWUtc3RhdGUgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSSCkgJiAweEZGM0ZGRkZGKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JILCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkgpICYgMHhGRjNGRkZGRik7CiAJLyogaGlnaC1pbXBlZGVjZW5jZSAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSKSAmICh+TkFORF9SQl9HUElPX1BJTikpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UQ1IpICYgKH5OQU5EX1JCX0dQSU9fUElOKSk7CiAJLyogaW5wdXQgc2VsZWN0ICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JU1IxSCwgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9JU1IxSCkgJiAweEZGM0ZGRkZGKSB8IDB4MDA0MDAwMDApOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lTUjFILAorCQkgKGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfSVNSMUgpICYgMHhGRjNGRkZGRikgfCAweDAwNDAwMDAwKTsKICNlbmRpZgogCiAJLyogaW5zZXJ0IGNhbGxiYWNrcyAqLwogCXRoaXMtPklPX0FERFJfUiA9IHBwY2hhbWVsZW9uX2Zpb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IHBwY2hhbWVsZW9uX2Zpb19iYXNlOwotCXRoaXMtPmh3Y29udHJvbCA9IHBwY2hhbWVsZW9uX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHBwY2hhbWVsZW9uX2h3Y29udHJvbDsKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAl0aGlzLT5kZXZfcmVhZHkgPSBwcGNoYW1lbGVvbl9kZXZpY2VfcmVhZHk7CiAjZW5kaWYKIAl0aGlzLT5jaGlwX2RlbGF5ID0gTkFORF9CSUdfREVMQVlfVVM7CiAJLyogRUNDIG1vZGUgKi8KLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKGl0IGNvdWxkIG5vdCBiZSBtb3VudGVkKSAqLwotCWlmIChuYW5kX3NjYW4gKHBwY2hhbWVsZW9uX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKHBwY2hhbWVsZW9uX210ZCwgMSkpIHsKIAkJaW91bm1hcCgodm9pZCAqKXBwY2hhbWVsZW9uX2Zpb19iYXNlKTsKLQkJa2ZyZWUgKHBwY2hhbWVsZW9uX210ZCk7CisJCWtmcmVlKHBwY2hhbWVsZW9uX210ZCk7CiAJCWdvdG8gbmFuZF9ldmJfaW5pdDsKIAl9Ci0KICNpZm5kZWYgVVNFX1JFQURZX0JVU1lfUElOCiAJLyogQWRqdXN0IGRlbGF5IGlmIG5lY2Vzc2FyeSAqLwogCWlmIChwcGNoYW1lbGVvbl9tdGQtPnNpemUgPT0gTkFORF9TTUFMTF9TSVpFKQpAQCAtMjc1LDEyICsyODksMTEgQEAKIAlwcGNoYW1lbGVvbl9tdGQtPm5hbWUgPSAicHBjaGFtZWxlb24tbmFuZCI7CiAJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMocHBjaGFtZWxlb25fbXRkLCBwYXJ0X3Byb2JlcywgJm10ZF9wYXJ0cywgMCk7CiAJaWYgKG10ZF9wYXJ0c19uYiA+IDApCi0JICBwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwkJcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CiAJZWxzZQotCSAgbXRkX3BhcnRzX25iID0gMDsKKwkJbXRkX3BhcnRzX25iID0gMDsKICNlbmRpZgotCWlmIChtdGRfcGFydHNfbmIgPT0gMCkKLQl7CisJaWYgKG10ZF9wYXJ0c19uYiA9PSAwKSB7CiAJCWlmIChwcGNoYW1lbGVvbl9tdGQtPnNpemUgPT0gTkFORF9TTUFMTF9TSVpFKQogCQkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2luZm9fbWU7CiAJCWVsc2UKQEAgLTI5MywxMyArMzA2LDEyIEBACiAJcHJpbnRrKEtFUk5fTk9USUNFICJVc2luZyAlcyBwYXJ0aXRpb24gZGVmaW5pdGlvblxuIiwgcGFydF90eXBlKTsKIAlhZGRfbXRkX3BhcnRpdGlvbnMocHBjaGFtZWxlb25fbXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7CiAKLW5hbmRfZXZiX2luaXQ6CisgbmFuZF9ldmJfaW5pdDoKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSogRVZCIE5BTkQgKGFsd2F5cyBwcmVzZW50KSAqCiAJKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlwcGNoYW1lbGVvbmV2Yl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsKLQkJCQkJCQkgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlwcGNoYW1lbGVvbmV2Yl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwY2hhbWVsZW9uZXZiX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBQUENoYW1lbGVvbkVWQiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzA3LDc3ICszMTksNzYgQEAKIAogCS8qIG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2UgPSBpb3JlbWFwKHBwY2hhbWVsZW9uZXZiX2Zpb19wYmFzZSwgU1pfNE0pOwotCWlmKCFwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZSkgeworCWlmICghcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIFBQQ2hhbWVsZW9uRVZCIE5BTkQgZmxhc2ggZmFpbGVkXG4iKTsKIAkJa2ZyZWUocHBjaGFtZWxlb25ldmJfbXRkKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmcHBjaGFtZWxlb25ldmJfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnBwY2hhbWVsZW9uZXZiX210ZFsxXSk7CiAKIAkvKiBJbml0aWFsaXplIHN0cnVjdHVyZXMgKi8KLQltZW1zZXQoKGNoYXIgKikgcHBjaGFtZWxlb25ldmJfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHBwY2hhbWVsZW9uZXZiX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlwcGNoYW1lbGVvbmV2Yl9tdGQtPnByaXYgPSB0aGlzOwogCi0gICAgICAgIC8qIEluaXRpYWxpemUgR1BJT3MgKi8KKwkvKiBJbml0aWFsaXplIEdQSU9zICovCiAJLyogUGluIG1hcHBpbmcgZm9yIE5BTkQgY2hpcCAqLwogCS8qCi0JCUNFCUdQSU9fMTQKLQkJQ0xFCUdQSU9fMTUKLQkJQUxFCUdQSU9fMTYKLQkJUi9CCUdQSU9fMzEKLQkqLworCSAgIENFICAgR1BJT18xNAorCSAgIENMRSAgR1BJT18xNQorCSAgIEFMRSAgR1BJT18xNgorCSAgIFIvQiAgR1BJT18zMQorCSAqLwogCS8qIG91dHB1dCBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX09TUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9PU1JIKSAmIDB4RkZGRkZGRjApOwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfT1NSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX09TUkwpICYgMHgzRkZGRkZGRik7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfT1NSSCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9PU1JIKSAmIDB4RkZGRkZGRjApOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX09TUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfT1NSTCkgJiAweDNGRkZGRkZGKTsKIAkvKiB0aHJlZS1zdGF0ZSBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkgsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JIKSAmIDB4RkZGRkZGRjApOwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVFNSTCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkwpICYgMHgzRkZGRkZGRik7CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSSCwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UU1JIKSAmIDB4RkZGRkZGRjApOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSTCkgJiAweDNGRkZGRkZGKTsKIAkvKiBlbmFibGUgb3V0cHV0IGRyaXZlciAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfVENSKSB8IE5BTkRfRVZCX25DRV9HUElPX1BJTiB8CisJb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVENSLCBpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUikgfCBOQU5EX0VWQl9uQ0VfR1BJT19QSU4gfAogCQkgTkFORF9FVkJfQ0xFX0dQSU9fUElOIHwgTkFORF9FVkJfQUxFX0dQSU9fUElOKTsKICNpZmRlZiBVU0VfUkVBRFlfQlVTWV9QSU4KIAkvKiB0aHJlZS1zdGF0ZSBzZWxlY3QgKi8KLQlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQqKUdQSU8wX1RTUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UU1JMKSAmIDB4RkZGRkZGRkMpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RTUkwsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkICopR1BJTzBfVFNSTCkgJiAweEZGRkZGRkZDKTsKIAkvKiBoaWdoLWltcGVkZWNlbmNlICovCi0Jb3V0X2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IsIGluX2JlMzIoKHZvbGF0aWxlIHVuc2lnbmVkKilHUElPMF9UQ1IpICYgKH5OQU5EX0VWQl9SQl9HUElPX1BJTikpOworCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX1RDUiwgaW5fYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9UQ1IpICYgKH5OQU5EX0VWQl9SQl9HUElPX1BJTikpOwogCS8qIGlucHV0IHNlbGVjdCAqLwotCW91dF9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVNSMUwsIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCopR1BJTzBfSVNSMUwpICYgMHhGRkZGRkZGQykgfCAweDAwMDAwMDAxKTsKKwlvdXRfYmUzMigodm9sYXRpbGUgdW5zaWduZWQgKilHUElPMF9JU1IxTCwKKwkJIChpbl9iZTMyKCh2b2xhdGlsZSB1bnNpZ25lZCAqKUdQSU8wX0lTUjFMKSAmIDB4RkZGRkZGRkMpIHwgMHgwMDAwMDAwMSk7CiAjZW5kaWYKIAogCS8qIGluc2VydCBjYWxsYmFja3MgKi8KIAl0aGlzLT5JT19BRERSX1IgPSBwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZTsKIAl0aGlzLT5JT19BRERSX1cgPSBwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSBwcGNoYW1lbGVvbmV2Yl9od2NvbnRyb2w7CisJdGhpcy0+Y21kX2N0cmwgPSBwcGNoYW1lbGVvbmV2Yl9od2NvbnRyb2w7CiAjaWZkZWYgVVNFX1JFQURZX0JVU1lfUElOCiAJdGhpcy0+ZGV2X3JlYWR5ID0gcHBjaGFtZWxlb25ldmJfZGV2aWNlX3JlYWR5OwogI2VuZGlmCiAJdGhpcy0+Y2hpcF9kZWxheSA9IE5BTkRfU01BTExfREVMQVlfVVM7CiAKIAkvKiBFQ0MgbW9kZSAqLwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAogCS8qIFNjYW4gdG8gZmluZCBleGlzdGVuY2Ugb2YgdGhlIGRldmljZSAqLwotCWlmIChuYW5kX3NjYW4gKHBwY2hhbWVsZW9uZXZiX210ZCwgMSkpIHsKKwlpZiAobmFuZF9zY2FuKHBwY2hhbWVsZW9uZXZiX210ZCwgMSkpIHsKIAkJaW91bm1hcCgodm9pZCAqKXBwY2hhbWVsZW9uZXZiX2Zpb19iYXNlKTsKLQkJa2ZyZWUgKHBwY2hhbWVsZW9uZXZiX210ZCk7CisJCWtmcmVlKHBwY2hhbWVsZW9uZXZiX210ZCk7CiAJCXJldHVybiAtRU5YSU87CiAJfQotCiAjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAJcHBjaGFtZWxlb25ldmJfbXRkLT5uYW1lID0gTkFORF9FVkJfTVREX05BTUU7CiAJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMocHBjaGFtZWxlb25ldmJfbXRkLCBwYXJ0X3Byb2Jlc19ldmIsICZtdGRfcGFydHMsIDApOwogCWlmIChtdGRfcGFydHNfbmIgPiAwKQotCSAgcGFydF90eXBlID0gImNvbW1hbmQgbGluZSI7CisJCXBhcnRfdHlwZSA9ICJjb21tYW5kIGxpbmUiOwogCWVsc2UKLQkgIG10ZF9wYXJ0c19uYiA9IDA7CisJCW10ZF9wYXJ0c19uYiA9IDA7CiAjZW5kaWYKLQlpZiAobXRkX3BhcnRzX25iID09IDApCi0JeworCWlmIChtdGRfcGFydHNfbmIgPT0gMCkgewogCQltdGRfcGFydHMgPSBwYXJ0aXRpb25faW5mb19ldmI7CiAJCW10ZF9wYXJ0c19uYiA9IE5VTV9QQVJUSVRJT05TOwogCQlwYXJ0X3R5cGUgPSAic3RhdGljIjsKQEAgLTM5MCwxOCArNDAxLDE5IEBACiAJLyogUmV0dXJuIGhhcHB5ICovCiAJcmV0dXJuIDA7CiB9CisKIG1vZHVsZV9pbml0KHBwY2hhbWVsZW9uZXZiX2luaXQpOwogCiAvKgogICogQ2xlYW4gdXAgcm91dGluZQogICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgcHBjaGFtZWxlb25ldmJfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBwcGNoYW1lbGVvbmV2Yl9jbGVhbnVwKHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZShzKSAqLwotCW5hbmRfcmVsZWFzZSAocHBjaGFtZWxlb25fbXRkKTsKLQluYW5kX3JlbGVhc2UgKHBwY2hhbWVsZW9uZXZiX210ZCk7CisJbmFuZF9yZWxlYXNlKHBwY2hhbWVsZW9uX210ZCk7CisJbmFuZF9yZWxlYXNlKHBwY2hhbWVsZW9uZXZiX210ZCk7CiAKIAkvKiBSZWxlYXNlIGlvbWFwcyAqLwogCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmcHBjaGFtZWxlb25fbXRkWzFdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYyBiL2RyaXZlcnMvbXRkL25hbmQvcnRjX2Zyb200LmMKaW5kZXggNDEyOWMwMy4uZjhjNDk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9ydGNfZnJvbTQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3J0Y19mcm9tNC5jCkBAIC05NywxMiArOTcsMTIgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnJ0Y19mcm9tNF9maW9fYmFzZSA9ICh2b2lkICopUDJTRUdBRERSKFJUQ19GUk9NNF9GSU9fQkFTRSk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLm5hbWUgICA9ICJSZW5lc2FzIGZsYXNoIHBhcnRpdGlvbiAxIiwKLSAgICAgICAgICAgICAgICAub2Zmc2V0ID0gMCwKLSAgICAgICAgICAgICAgICAuc2l6ZSAgID0gTVREUEFSVF9TSVpfRlVMTAotICAgICAgICB9LAorCXsKKwkgLm5hbWUgPSAiUmVuZXNhcyBmbGFzaCBwYXJ0aXRpb24gMSIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEx9LAogfTsKKwogI2RlZmluZSBOVU1fUEFSVElUSU9OUyAxCiAKIC8qCkBAIC0xMTEsOCArMTExLDggQEAKICAqCQlOQU5EX0JCVF9DUkVBVEUgYW5kL29yIE5BTkRfQkJUX1dSSVRFCiAgKgogICovCi1zdGF0aWMgdWludDhfdCBiYnRfcGF0dGVybltdID0geydCJywgJ2InLCAndCcsICcwJyB9Owotc3RhdGljIHVpbnQ4X3QgbWlycm9yX3BhdHRlcm5bXSA9IHsnMScsICd0JywgJ2InLCAnQicgfTsKK3N0YXRpYyB1aW50OF90IGJidF9wYXR0ZXJuW10gPSB7ICdCJywgJ2InLCAndCcsICcwJyB9Oworc3RhdGljIHVpbnQ4X3QgbWlycm9yX3BhdHRlcm5bXSA9IHsgJzEnLCAndCcsICdiJywgJ0InIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgcnRjX2Zyb200X2JidF9tYWluX2Rlc2NyID0gewogCS5vcHRpb25zID0gTkFORF9CQlRfTEFTVEJMT0NLIHwgTkFORF9CQlRfQ1JFQVRFIHwgTkFORF9CQlRfV1JJVEUKQEAgLTEzNCw4ICsxMzQsNiBAQAogCS5wYXR0ZXJuID0gbWlycm9yX3BhdHRlcm4KIH07CiAKLQotCiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAKIC8qIHRoZSBSZWVkIFNvbG9tb24gY29udHJvbCBzdHJ1Y3R1cmUgKi8KQEAgLTE0NCwxNSArMTQyLDE0IEBACiAvKgogICogICAgICBoYXJkd2FyZSBzcGVjaWZpYyBPdXQgT2YgQmFuZCBpbmZvcm1hdGlvbgogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBydGNfZnJvbTRfbmFuZF9vb2JpbmZvID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IHJ0Y19mcm9tNF9uYW5kX29vYmluZm8gPSB7CiAJLmVjY2J5dGVzID0gMzIsCiAJLmVjY3BvcyA9IHsKLQkJIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LAotCQkgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCi0JCTE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKLQkJMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxfSwKLQkub29iZnJlZSA9IHsgezMyLCAzMn0gfQorCQkgICAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LAorCQkgICA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LAorCQkgICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCisJCSAgIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMX0sCisJLm9vYmZyZWUgPSB7ezMyLCAzMn19CiB9OwogCiAvKiBBYXJnaC4gSSBtaXNzZWQgdGhlIHJldmVyc2VkIGJpdCBvcmRlciwgd2hlbiBJCkBAIC0xNjIsNDQgKzE1OSw0MiBAQAogICogb2YgdGhlIGVjYyBieXRlIHdoaWNoIHdlIGdldCBmcm9tIHRoZSBGUEdBCiAgKi8KIHN0YXRpYyB1aW50OF90IHJldmJpdHNbMjU2XSA9IHsKLSAgICAgICAgMHgwMCwgMHg4MCwgMHg0MCwgMHhjMCwgMHgyMCwgMHhhMCwgMHg2MCwgMHhlMCwKLSAgICAgICAgMHgxMCwgMHg5MCwgMHg1MCwgMHhkMCwgMHgzMCwgMHhiMCwgMHg3MCwgMHhmMCwKLSAgICAgICAgMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKLSAgICAgICAgMHgxOCwgMHg5OCwgMHg1OCwgMHhkOCwgMHgzOCwgMHhiOCwgMHg3OCwgMHhmOCwKLSAgICAgICAgMHgwNCwgMHg4NCwgMHg0NCwgMHhjNCwgMHgyNCwgMHhhNCwgMHg2NCwgMHhlNCwKLSAgICAgICAgMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKLSAgICAgICAgMHgwYywgMHg4YywgMHg0YywgMHhjYywgMHgyYywgMHhhYywgMHg2YywgMHhlYywKLSAgICAgICAgMHgxYywgMHg5YywgMHg1YywgMHhkYywgMHgzYywgMHhiYywgMHg3YywgMHhmYywKLSAgICAgICAgMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKLSAgICAgICAgMHgxMiwgMHg5MiwgMHg1MiwgMHhkMiwgMHgzMiwgMHhiMiwgMHg3MiwgMHhmMiwKLSAgICAgICAgMHgwYSwgMHg4YSwgMHg0YSwgMHhjYSwgMHgyYSwgMHhhYSwgMHg2YSwgMHhlYSwKLSAgICAgICAgMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKLSAgICAgICAgMHgwNiwgMHg4NiwgMHg0NiwgMHhjNiwgMHgyNiwgMHhhNiwgMHg2NiwgMHhlNiwKLSAgICAgICAgMHgxNiwgMHg5NiwgMHg1NiwgMHhkNiwgMHgzNiwgMHhiNiwgMHg3NiwgMHhmNiwKLSAgICAgICAgMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKLSAgICAgICAgMHgxZSwgMHg5ZSwgMHg1ZSwgMHhkZSwgMHgzZSwgMHhiZSwgMHg3ZSwgMHhmZSwKLSAgICAgICAgMHgwMSwgMHg4MSwgMHg0MSwgMHhjMSwgMHgyMSwgMHhhMSwgMHg2MSwgMHhlMSwKLSAgICAgICAgMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKLSAgICAgICAgMHgwOSwgMHg4OSwgMHg0OSwgMHhjOSwgMHgyOSwgMHhhOSwgMHg2OSwgMHhlOSwKLSAgICAgICAgMHgxOSwgMHg5OSwgMHg1OSwgMHhkOSwgMHgzOSwgMHhiOSwgMHg3OSwgMHhmOSwKLSAgICAgICAgMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKLSAgICAgICAgMHgxNSwgMHg5NSwgMHg1NSwgMHhkNSwgMHgzNSwgMHhiNSwgMHg3NSwgMHhmNSwKLSAgICAgICAgMHgwZCwgMHg4ZCwgMHg0ZCwgMHhjZCwgMHgyZCwgMHhhZCwgMHg2ZCwgMHhlZCwKLSAgICAgICAgMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKLSAgICAgICAgMHgwMywgMHg4MywgMHg0MywgMHhjMywgMHgyMywgMHhhMywgMHg2MywgMHhlMywKLSAgICAgICAgMHgxMywgMHg5MywgMHg1MywgMHhkMywgMHgzMywgMHhiMywgMHg3MywgMHhmMywKLSAgICAgICAgMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKLSAgICAgICAgMHgxYiwgMHg5YiwgMHg1YiwgMHhkYiwgMHgzYiwgMHhiYiwgMHg3YiwgMHhmYiwKLSAgICAgICAgMHgwNywgMHg4NywgMHg0NywgMHhjNywgMHgyNywgMHhhNywgMHg2NywgMHhlNywKLSAgICAgICAgMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKLSAgICAgICAgMHgwZiwgMHg4ZiwgMHg0ZiwgMHhjZiwgMHgyZiwgMHhhZiwgMHg2ZiwgMHhlZiwKLSAgICAgICAgMHgxZiwgMHg5ZiwgMHg1ZiwgMHhkZiwgMHgzZiwgMHhiZiwgMHg3ZiwgMHhmZiwKKwkweDAwLCAweDgwLCAweDQwLCAweGMwLCAweDIwLCAweGEwLCAweDYwLCAweGUwLAorCTB4MTAsIDB4OTAsIDB4NTAsIDB4ZDAsIDB4MzAsIDB4YjAsIDB4NzAsIDB4ZjAsCisJMHgwOCwgMHg4OCwgMHg0OCwgMHhjOCwgMHgyOCwgMHhhOCwgMHg2OCwgMHhlOCwKKwkweDE4LCAweDk4LCAweDU4LCAweGQ4LCAweDM4LCAweGI4LCAweDc4LCAweGY4LAorCTB4MDQsIDB4ODQsIDB4NDQsIDB4YzQsIDB4MjQsIDB4YTQsIDB4NjQsIDB4ZTQsCisJMHgxNCwgMHg5NCwgMHg1NCwgMHhkNCwgMHgzNCwgMHhiNCwgMHg3NCwgMHhmNCwKKwkweDBjLCAweDhjLCAweDRjLCAweGNjLCAweDJjLCAweGFjLCAweDZjLCAweGVjLAorCTB4MWMsIDB4OWMsIDB4NWMsIDB4ZGMsIDB4M2MsIDB4YmMsIDB4N2MsIDB4ZmMsCisJMHgwMiwgMHg4MiwgMHg0MiwgMHhjMiwgMHgyMiwgMHhhMiwgMHg2MiwgMHhlMiwKKwkweDEyLCAweDkyLCAweDUyLCAweGQyLCAweDMyLCAweGIyLCAweDcyLCAweGYyLAorCTB4MGEsIDB4OGEsIDB4NGEsIDB4Y2EsIDB4MmEsIDB4YWEsIDB4NmEsIDB4ZWEsCisJMHgxYSwgMHg5YSwgMHg1YSwgMHhkYSwgMHgzYSwgMHhiYSwgMHg3YSwgMHhmYSwKKwkweDA2LCAweDg2LCAweDQ2LCAweGM2LCAweDI2LCAweGE2LCAweDY2LCAweGU2LAorCTB4MTYsIDB4OTYsIDB4NTYsIDB4ZDYsIDB4MzYsIDB4YjYsIDB4NzYsIDB4ZjYsCisJMHgwZSwgMHg4ZSwgMHg0ZSwgMHhjZSwgMHgyZSwgMHhhZSwgMHg2ZSwgMHhlZSwKKwkweDFlLCAweDllLCAweDVlLCAweGRlLCAweDNlLCAweGJlLCAweDdlLCAweGZlLAorCTB4MDEsIDB4ODEsIDB4NDEsIDB4YzEsIDB4MjEsIDB4YTEsIDB4NjEsIDB4ZTEsCisJMHgxMSwgMHg5MSwgMHg1MSwgMHhkMSwgMHgzMSwgMHhiMSwgMHg3MSwgMHhmMSwKKwkweDA5LCAweDg5LCAweDQ5LCAweGM5LCAweDI5LCAweGE5LCAweDY5LCAweGU5LAorCTB4MTksIDB4OTksIDB4NTksIDB4ZDksIDB4MzksIDB4YjksIDB4NzksIDB4ZjksCisJMHgwNSwgMHg4NSwgMHg0NSwgMHhjNSwgMHgyNSwgMHhhNSwgMHg2NSwgMHhlNSwKKwkweDE1LCAweDk1LCAweDU1LCAweGQ1LCAweDM1LCAweGI1LCAweDc1LCAweGY1LAorCTB4MGQsIDB4OGQsIDB4NGQsIDB4Y2QsIDB4MmQsIDB4YWQsIDB4NmQsIDB4ZWQsCisJMHgxZCwgMHg5ZCwgMHg1ZCwgMHhkZCwgMHgzZCwgMHhiZCwgMHg3ZCwgMHhmZCwKKwkweDAzLCAweDgzLCAweDQzLCAweGMzLCAweDIzLCAweGEzLCAweDYzLCAweGUzLAorCTB4MTMsIDB4OTMsIDB4NTMsIDB4ZDMsIDB4MzMsIDB4YjMsIDB4NzMsIDB4ZjMsCisJMHgwYiwgMHg4YiwgMHg0YiwgMHhjYiwgMHgyYiwgMHhhYiwgMHg2YiwgMHhlYiwKKwkweDFiLCAweDliLCAweDViLCAweGRiLCAweDNiLCAweGJiLCAweDdiLCAweGZiLAorCTB4MDcsIDB4ODcsIDB4NDcsIDB4YzcsIDB4MjcsIDB4YTcsIDB4NjcsIDB4ZTcsCisJMHgxNywgMHg5NywgMHg1NywgMHhkNywgMHgzNywgMHhiNywgMHg3NywgMHhmNywKKwkweDBmLCAweDhmLCAweDRmLCAweGNmLCAweDJmLCAweGFmLCAweDZmLCAweGVmLAorCTB4MWYsIDB4OWYsIDB4NWYsIDB4ZGYsIDB4M2YsIDB4YmYsIDB4N2YsIDB4ZmYsCiB9OwogCiAjZW5kaWYKIAotCi0KIC8qCiAgKiBydGNfZnJvbTRfaHdjb250cm9sIC0gaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yMTIsMzUgKzIwNywyMCBAQAogICogQWRkcmVzcyBsaW5lcyAoQTI0LUEyMiksIHNvIG5vIGFjdGlvbiBpcyByZXF1aXJlZCBoZXJlLgogICoKICAqLwotc3RhdGljIHZvaWQgcnRjX2Zyb200X2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHJ0Y19mcm9tNF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3RydWN0IG5hbmRfY2hpcCogdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopIChtdGQtPnByaXYpOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSAobXRkLT5wcml2KTsKIAotCXN3aXRjaChjbWQpIHsKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyB8IFJUQ19GUk9NNF9DTEUpOwotCQlicmVhazsKLQljYXNlIE5BTkRfQ1RMX0NMUkNMRToKLQkJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgJiB+UlRDX0ZST000X0NMRSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVRBTEU6Ci0JCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgUlRDX0ZST000X0FMRSk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyAmIH5SVENfRlJPTTRfQUxFKTsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCWJyZWFrOwotCi0JfQorCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyB8IFJUQ19GUk9NNF9DTEUpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XIHwgUlRDX0ZST000X0FMRSk7CiB9CiAKLQogLyoKICAqIHJ0Y19mcm9tNF9uYW5kX3NlbGVjdF9jaGlwIC0gaGFyZHdhcmUgc3BlY2lmaWMgY2hpcCBzZWxlY3QKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yNTIsMjYgKzIzMiwyNSBAQAogICovCiBzdGF0aWMgdm9pZCBydGNfZnJvbTRfbmFuZF9zZWxlY3RfY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApCiB7Ci0gICAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAogCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9SICYgflJUQ19GUk9NNF9OQU5EX0FERFJfTUFTSyk7CiAJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKSgodW5zaWduZWQgbG9uZyl0aGlzLT5JT19BRERSX1cgJiB+UlRDX0ZST000X05BTkRfQUREUl9NQVNLKTsKIAotICAgICAgICBzd2l0Y2goY2hpcCkgeworCXN3aXRjaCAoY2hpcCkgewogCi0gICAgICAgIGNhc2UgMDoJCS8qIHNlbGVjdCBzbG90IDMgY2hpcCAqLworCWNhc2UgMDoJCS8qIHNlbGVjdCBzbG90IDMgY2hpcCAqLwogCQl0aGlzLT5JT19BRERSX1IgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfUiB8IFJUQ19GUk9NNF9OQU5EX0FERFJfU0xPVDMpOwogCQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopKCh1bnNpZ25lZCBsb25nKXRoaXMtPklPX0FERFJfVyB8IFJUQ19GUk9NNF9OQU5EX0FERFJfU0xPVDMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDE6CQkvKiBzZWxlY3Qgc2xvdCA0IGNoaXAgKi8KKwkJYnJlYWs7CisJY2FzZSAxOgkJLyogc2VsZWN0IHNsb3QgNCBjaGlwICovCiAJCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9SIHwgUlRDX0ZST000X05BTkRfQUREUl9TTE9UNCk7CiAJCXRoaXMtPklPX0FERFJfVyA9ICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpdGhpcy0+SU9fQUREUl9XIHwgUlRDX0ZST000X05BTkRfQUREUl9TTE9UNCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisJCWJyZWFrOwogCi0gICAgICAgIH0KKwl9CiB9CiAKLQogLyoKICAqIHJ0Y19mcm9tNF9uYW5kX2RldmljZV9yZWFkeSAtIGhhcmR3YXJlIHNwZWNpZmljIHJlYWR5L2J1c3kgY2hlY2sKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0yOTAsNyArMjY5LDYgQEAKIAogfQogCi0KIC8qCiAgKiBkZXBsZXRlIC0gY29kZSB0byBwZXJmb3JtIGRldmljZSByZWNvdmVyeSBpbiBjYXNlIHRoZXJlIHdhcyBhIHBvd2VyIGxvc3MKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0zMDYsMjQgKzI4NCwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBkZXBsZXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKIHsKLSAgICAgICAgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCi0gICAgICAgIC8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCi0gICAgICAgIHdoaWxlICghdGhpcy0+ZGV2X3JlYWR5KG10ZCkpOworCS8qIHdhaXQgdW50aWwgZGV2aWNlIGlzIHJlYWR5ICovCisJd2hpbGUgKCF0aGlzLT5kZXZfcmVhZHkobXRkKSkgOwogCiAJdGhpcy0+c2VsZWN0X2NoaXAobXRkLCBjaGlwKTsKIAogCS8qIFNlbmQgdGhlIGNvbW1hbmRzIGZvciBkZXZpY2UgcmVjb3ZlcnksIHBoYXNlIDEgKi8KLQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX0RFUExFVEUxLCAweDAwMDAsIDB4MDAwMCk7Ci0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9ERVBMRVRFMiwgLTEsIC0xKTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfREVQTEVURTEsIDB4MDAwMCwgMHgwMDAwKTsKKwl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfREVQTEVURTIsIC0xLCAtMSk7CiAKIAkvKiBTZW5kIHRoZSBjb21tYW5kcyBmb3IgZGV2aWNlIHJlY292ZXJ5LCBwaGFzZSAyICovCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9ERVBMRVRFMSwgMHgwMDAwLCAweDAwMDQpOwotCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfREVQTEVURTIsIC0xLCAtMSk7CisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0RFUExFVEUxLCAweDAwMDAsIDB4MDAwNCk7CisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX0RFUExFVEUyLCAtMSwgLTEpOwogCiB9CiAKLQogI2lmZGVmIFJUQ19GUk9NNF9IV0VDQwogLyoKICAqIHJ0Y19mcm9tNF9lbmFibGVfaHdlY2MgLSBoYXJkd2FyZSBzcGVjaWZpYyBoYXJkd2FyZSBFQ0MgZW5hYmxlIGZ1bmN0aW9uCkBAIC0zMzUsMzkgKzMxMiwzNSBAQAogICovCiBzdGF0aWMgdm9pZCBydGNfZnJvbTRfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSkKIHsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqIHJzX2VjY19jdGwgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocnRjX2Zyb200X2Zpb19iYXNlICsgUlRDX0ZST000X1JTX0VDQ19DVEwpOworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpyc19lY2NfY3RsID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHJ0Y19mcm9tNF9maW9fYmFzZSArIFJUQ19GUk9NNF9SU19FQ0NfQ1RMKTsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKIAlzd2l0Y2ggKG1vZGUpIHsKLQkgICAgY2FzZSBOQU5EX0VDQ19SRUFEIDoKLQkJc3RhdHVzID0gIFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0NMUgotCQkJfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9GRF9FOworCWNhc2UgTkFORF9FQ0NfUkVBRDoKKwkJc3RhdHVzID0gUlRDX0ZST000X1JTX0VDQ19DVExfQ0xSIHwgUlRDX0ZST000X1JTX0VDQ19DVExfRkRfRTsKIAogCQkqcnNfZWNjX2N0bCA9IHN0YXR1czsKIAkJYnJlYWs7CiAKLQkgICAgY2FzZSBOQU5EX0VDQ19SRUFEU1lOIDoKLQkJc3RhdHVzID0gIDB4MDA7CisJY2FzZSBOQU5EX0VDQ19SRUFEU1lOOgorCQlzdGF0dXMgPSAweDAwOwogCiAJCSpyc19lY2NfY3RsID0gc3RhdHVzOwogCQlicmVhazsKIAotCSAgICBjYXNlIE5BTkRfRUNDX1dSSVRFIDoKLQkJc3RhdHVzID0gIFJUQ19GUk9NNF9SU19FQ0NfQ1RMX0NMUgotCQkJfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9HRU4KLQkJCXwgUlRDX0ZST000X1JTX0VDQ19DVExfRkRfRTsKKwljYXNlIE5BTkRfRUNDX1dSSVRFOgorCQlzdGF0dXMgPSBSVENfRlJPTTRfUlNfRUNDX0NUTF9DTFIgfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9HRU4gfCBSVENfRlJPTTRfUlNfRUNDX0NUTF9GRF9FOwogCiAJCSpyc19lY2NfY3RsID0gc3RhdHVzOwogCQlicmVhazsKIAotCSAgICBkZWZhdWx0OgorCWRlZmF1bHQ6CiAJCUJVRygpOwogCQlicmVhazsKIAl9CiAKIH0KIAotCiAvKgogICogcnRjX2Zyb200X2NhbGN1bGF0ZV9lY2MgLSBoYXJkd2FyZSBzcGVjaWZpYyBjb2RlIHRvIHJlYWQgRUNDIGNvZGUKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC0zODMsNyArMzU2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgcnRjX2Zyb200X2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGNvbnN0IHVfY2hhciAqZGF0LCB1X2NoYXIgKmVjY19jb2RlKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICogcnNfZWNjbiA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDTik7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnJzX2VjY24gPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikocnRjX2Zyb200X2Zpb19iYXNlICsgUlRDX0ZST000X1JTX0VDQ04pOwogCXVuc2lnbmVkIHNob3J0IHZhbHVlOwogCWludCBpOwogCkBAIC0zOTUsNyArMzY4LDYgQEAKIAllY2NfY29kZVs3XSB8PSAweDBmOwkvKiBzZXQgdGhlIGxhc3QgZm91ciBiaXRzIChub3QgdXNlZCkgKi8KIH0KIAotCiAvKgogICogcnRjX2Zyb200X2NvcnJlY3RfZGF0YSAtIGhhcmR3YXJlIHNwZWNpZmljIGNvZGUgdG8gY29ycmVjdCBkYXRhIHVzaW5nIEVDQyBjb2RlCiAgKiBAbXRkOglNVEQgZGV2aWNlIHN0cnVjdHVyZQpAQCAtNDE0LDcgKzM4Niw3IEBACiAJdW5zaWduZWQgc2hvcnQgc3RhdHVzOwogCXVpbnQxNl90IHBhcls2XSwgc3luWzZdOwogCXVpbnQ4X3QgZWNjWzhdOwotICAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcnNfZWNjOworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpyc19lY2M7CiAKIAlzdGF0dXMgPSAqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKShydGNfZnJvbTRfZmlvX2Jhc2UgKyBSVENfRlJPTTRfUlNfRUNDX0NISykpOwogCkBAIC00MjQsMjMgKzM5NiwxOCBAQAogCiAJLyogUmVhZCB0aGUgc3luZHJvbSBwYXR0ZXJuIGZyb20gdGhlIEZQR0EgYW5kIGNvcnJlY3QgdGhlIGJpdG9yZGVyICovCiAJcnNfZWNjID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopKHJ0Y19mcm9tNF9maW9fYmFzZSArIFJUQ19GUk9NNF9SU19FQ0MpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZWNjW2ldID0gcmV2Yml0c1soKnJzX2VjYykgJiAweEZGXTsKLSAgICAgICAgICAgICAgICByc19lY2MrKzsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZWNjW2ldID0gcmV2Yml0c1soKnJzX2VjYykgJiAweEZGXTsKKwkJcnNfZWNjKys7CisJfQogCiAJLyogY29udmVydCBpbnRvIDYgMTBiaXQgc3luZHJvbWUgZmllbGRzICovCi0JcGFyWzVdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpZWNjWzBdID4+IDApICYgMHgwZmYpIHwKLQkJCQkgICAgICAoKCh1aW50MTZfdCllY2NbMV0gPDwgOCkgJiAweDMwMCldOwotCXBhcls0XSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KWVjY1sxXSA+PiAyKSAmIDB4MDNmKSB8Ci0JCQkJICAgICAgKCgodWludDE2X3QpZWNjWzJdIDw8IDYpICYgMHgzYzApXTsKLQlwYXJbM10gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCllY2NbMl0gPj4gNCkgJiAweDAwZikgfAotCQkJCSAgICAgICgoKHVpbnQxNl90KWVjY1szXSA8PCA0KSAmIDB4M2YwKV07Ci0JcGFyWzJdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpZWNjWzNdID4+IDYpICYgMHgwMDMpIHwKLQkJCQkgICAgICAoKCh1aW50MTZfdCllY2NbNF0gPDwgMikgJiAweDNmYyldOwotCXBhclsxXSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KWVjY1s1XSA+PiAwKSAmIDB4MGZmKSB8Ci0JCQkJICAgICAgKCgodWludDE2X3QpZWNjWzZdIDw8IDgpICYgMHgzMDApXTsKLQlwYXJbMF0gPSAoKCh1aW50MTZfdCllY2NbNl0gPj4gMikgJiAweDAzZikgfCAoKCh1aW50MTZfdCllY2NbN10gPDwgNikgJiAweDNjMCk7CisJcGFyWzVdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpIGVjY1swXSA+PiAwKSAmIDB4MGZmKSB8ICgoKHVpbnQxNl90KSBlY2NbMV0gPDwgOCkgJiAweDMwMCldOworCXBhcls0XSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KSBlY2NbMV0gPj4gMikgJiAweDAzZikgfCAoKCh1aW50MTZfdCkgZWNjWzJdIDw8IDYpICYgMHgzYzApXTsKKwlwYXJbM10gPSByc19kZWNvZGVyLT5pbmRleF9vZlsoKCh1aW50MTZfdCkgZWNjWzJdID4+IDQpICYgMHgwMGYpIHwgKCgodWludDE2X3QpIGVjY1szXSA8PCA0KSAmIDB4M2YwKV07CisJcGFyWzJdID0gcnNfZGVjb2Rlci0+aW5kZXhfb2ZbKCgodWludDE2X3QpIGVjY1szXSA+PiA2KSAmIDB4MDAzKSB8ICgoKHVpbnQxNl90KSBlY2NbNF0gPDwgMikgJiAweDNmYyldOworCXBhclsxXSA9IHJzX2RlY29kZXItPmluZGV4X29mWygoKHVpbnQxNl90KSBlY2NbNV0gPj4gMCkgJiAweDBmZikgfCAoKCh1aW50MTZfdCkgZWNjWzZdIDw8IDgpICYgMHgzMDApXTsKKwlwYXJbMF0gPSAoKCh1aW50MTZfdCkgZWNjWzZdID4+IDIpICYgMHgwM2YpIHwgKCgodWludDE2X3QpIGVjY1s3XSA8PCA2KSAmIDB4M2MwKTsKIAogCS8qIENvbnZlcnQgdG8gY29tcHV0YWJsZSBzeW5kcm9tZSAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKQEAgLTQ1MywxNiArNDIwLDE0IEBACiAJCXN5bltpXSA9IHJzX2RlY29kZXItPmluZGV4X29mW3N5bltpXV07CiAJfQogCi0JLyogTGV0IHRoZSBsaWJyYXJ5IGNvZGUgZG8gaXRzIG1hZ2ljLiovCi0JcmVzID0gZGVjb2RlX3JzOChyc19kZWNvZGVyLCAodWludDhfdCAqKWJ1ZiwgcGFyLCA1MTIsIHN5biwgMCwgTlVMTCwgMHhmZiwgTlVMTCk7CisJLyogTGV0IHRoZSBsaWJyYXJ5IGNvZGUgZG8gaXRzIG1hZ2ljLiAqLworCXJlcyA9IGRlY29kZV9yczgocnNfZGVjb2RlciwgKHVpbnQ4X3QgKikgYnVmLCBwYXIsIDUxMiwgc3luLCAwLCBOVUxMLCAweGZmLCBOVUxMKTsKIAlpZiAocmVzID4gMCkgewotCQlERUJVRyAoTVREX0RFQlVHX0xFVkVMMCwgInJ0Y19mcm9tNF9jb3JyZWN0X2RhdGE6ICIKLQkJCSJFQ0MgY29ycmVjdGVkICVkIGVycm9ycyBvbiByZWFkXG4iLCByZXMpOworCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAicnRjX2Zyb200X2NvcnJlY3RfZGF0YTogIiAiRUNDIGNvcnJlY3RlZCAlZCBlcnJvcnMgb24gcmVhZFxuIiwgcmVzKTsKIAl9CiAJcmV0dXJuIHJlczsKIH0KIAotCiAvKioKICAqIHJ0Y19mcm9tNF9lcnJzdGF0IC0gcGVyZm9ybSBhZGRpdGlvbmFsIGVycm9yIHN0YXR1cyBjaGVja3MKICAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCkBAIC00NzgsNTQgKzQ0Myw2NiBAQAogICogbm90ZTogc2VlIHBhZ2VzIDM0Li4zNyBvZiBkYXRhIHNoZWV0IGZvciBkZXRhaWxzLgogICoKICAqLwotc3RhdGljIGludCBydGNfZnJvbTRfZXJyc3RhdChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcywgaW50IHN0YXRlLCBpbnQgc3RhdHVzLCBpbnQgcGFnZSkKK3N0YXRpYyBpbnQgcnRjX2Zyb200X2VycnN0YXQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsCisJCQkgICAgIGludCBzdGF0ZSwgaW50IHN0YXR1cywgaW50IHBhZ2UpCiB7Ci0JaW50CWVyX3N0YXQ9MDsKLQlpbnQJcnRuLCByZXRsZW47Ci0Jc2l6ZV90CWxlbjsKKwlpbnQgZXJfc3RhdCA9IDA7CisJaW50IHJ0biwgcmV0bGVuOworCXNpemVfdCBsZW47CiAJdWludDhfdCAqYnVmOwotCWludAlpOworCWludCBpOwogCi0JdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfQ0xFQVIsIC0xLCAtMSk7CisJdGhpcy0+Y21kZnVuYyhtdGQsIE5BTkRfQ01EX1NUQVRVU19DTEVBUiwgLTEsIC0xKTsKIAotICAgICAgICBpZiAoc3RhdGUgPT0gRkxfRVJBU0lORykgewotCQlmb3IgKGk9MDsgaTw0OyBpKyspIHsKLQkJCWlmIChzdGF0dXMgJiAxPDwoaSsxKSkgewotCQkJCXRoaXMtPmNtZGZ1bmMgKG10ZCwgKE5BTkRfQ01EX1NUQVRVU19FUlJPUiArIGkgKyAxKSwgLTEsIC0xKTsKLQkJCQlydG4gPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKLQkJCQl0aGlzLT5jbWRmdW5jIChtdGQsIE5BTkRfQ01EX1NUQVRVU19SRVNFVCwgLTEsIC0xKTsKLQkJCQlpZiAoIShydG4gJiBFUlJfU1RBVF9FQ0NfQVZBSUxBQkxFKSkgewotCQkJCQllcl9zdGF0IHw9IDE8PChpKzEpOwkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLwotCQkJCX0KLQkJCX0KKwlpZiAoc3RhdGUgPT0gRkxfRVJBU0lORykgeworCisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmICghKHN0YXR1cyAmIDEgPDwgKGkgKyAxKSkpCisJCQkJY29udGludWU7CisJCQl0aGlzLT5jbWRmdW5jKG10ZCwgKE5BTkRfQ01EX1NUQVRVU19FUlJPUiArIGkgKyAxKSwKKwkJCQkgICAgICAtMSwgLTEpOworCQkJcnRuID0gdGhpcy0+cmVhZF9ieXRlKG10ZCk7CisJCQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTX1JFU0VULCAtMSwgLTEpOworCisJCQkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLworCQkJaWYgKCEocnRuICYgRVJSX1NUQVRfRUNDX0FWQUlMQUJMRSkpCisJCQkJZXJfc3RhdCB8PSAxIDw8IChpICsgMSk7CiAJCX0KKwogCX0gZWxzZSBpZiAoc3RhdGUgPT0gRkxfV1JJVElORykgeworCisJCXVuc2lnbmVkIGxvbmcgY29ycmVjdGVkID0gbXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkOworCiAJCS8qIHNpbmdsZSBiYW5rIHdyaXRlIGxvZ2ljICovCi0JCXRoaXMtPmNtZGZ1bmMgKG10ZCwgTkFORF9DTURfU1RBVFVTX0VSUk9SLCAtMSwgLTEpOworCQl0aGlzLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU1RBVFVTX0VSUk9SLCAtMSwgLTEpOwogCQlydG4gPSB0aGlzLT5yZWFkX2J5dGUobXRkKTsKLQkJdGhpcy0+Y21kZnVuYyAobXRkLCBOQU5EX0NNRF9TVEFUVVNfUkVTRVQsIC0xLCAtMSk7CisJCXRoaXMtPmNtZGZ1bmMobXRkLCBOQU5EX0NNRF9TVEFUVVNfUkVTRVQsIC0xLCAtMSk7CisKIAkJaWYgKCEocnRuICYgRVJSX1NUQVRfRUNDX0FWQUlMQUJMRSkpIHsKLQkJCWVyX3N0YXQgfD0gMTw8MTsJLyogZXJyX2VjY19ub3RfYXZhaWwgKi8KLQkJfSBlbHNlIHsKLQkJCWxlbiA9IG10ZC0+b29iYmxvY2s7Ci0JCQlidWYgPSBrbWFsbG9jIChsZW4sIEdGUF9LRVJORUwpOwotCQkJaWYgKCFidWYpIHsKLQkJCQlwcmludGsgKEtFUk5fRVJSICJydGNfZnJvbTRfZXJyc3RhdDogT3V0IG9mIG1lbW9yeSFcbiIpOwotCQkJCWVyX3N0YXQgPSAxOwkJCS8qIGlmIHdlIGNhbid0IGNoZWNrLCBhc3N1bWUgZmFpbGVkICovCi0JCQl9IGVsc2UgewotCQkJCS8qIHJlY292ZXJ5IHJlYWQgKi8KLQkJCQkvKiBwYWdlIHJlYWQgKi8KLQkJCQlydG4gPSBuYW5kX2RvX3JlYWRfZWNjIChtdGQsIHBhZ2UsIGxlbiwgJnJldGxlbiwgYnVmLCBOVUxMLCB0aGlzLT5hdXRvb29iLCAxKTsKLQkJCQlpZiAocnRuKSB7CS8qIGlmIHJlYWQgZmFpbGVkIG9yID4gMS1iaXQgZXJyb3IgY29ycmVjdGVkICovCi0JCQkJCWVyX3N0YXQgfD0gMTw8MTsJLyogRUNDIHJlYWQgZmFpbGVkICovCi0JCQkJfQotCQkJCWtmcmVlKGJ1Zik7Ci0JCQl9CisJCQkvKiBlcnJfZWNjX25vdF9hdmFpbCAqLworCQkJZXJfc3RhdCB8PSAxIDw8IDE7CisJCQlnb3RvIG91dDsKIAkJfQorCisJCWxlbiA9IG10ZC0+d3JpdGVzaXplOworCQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInJ0Y19mcm9tNF9lcnJzdGF0OiBPdXQgb2YgbWVtb3J5IVxuIik7CisJCQllcl9zdGF0ID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogcmVjb3ZlcnkgcmVhZCAqLworCQlydG4gPSBuYW5kX2RvX3JlYWQobXRkLCBwYWdlLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisKKwkJLyogaWYgcmVhZCBmYWlsZWQgb3IgPiAxLWJpdCBlcnJvciBjb3JyZWN0ZWQgKi8KKwkJaWYgKHJ0biB8fCAobXRkLT5lY2Nfc3RhdHMuY29ycmVjdGVkIC0gY29ycmVjdGVkKSA+IDEpIHsKKwkJCWVyX3N0YXQgfD0gMSA8PCAxOworCQlrZnJlZShidWYpOwogCX0KIAogCXJ0biA9IHN0YXR1czsKLQlpZiAoZXJfc3RhdCA9PSAwKSB7CQkJCS8qIGlmIEVDQyBpcyBhdmFpbGFibGUgICAqLworCWlmIChlcl9zdGF0ID09IDApIHsJLyogaWYgRUNDIGlzIGF2YWlsYWJsZSAgICovCiAJCXJ0biA9IChzdGF0dXMgJiB+TkFORF9TVEFUVVNfRkFJTCk7CS8qICAgY2xlYXIgdGhlIGVycm9yIGJpdCAqLwogCX0KIApAQCAtNTMzLDMzICs1MTAsMzIgQEAKIH0KICNlbmRpZgogCi0KIC8qCiAgKiBNYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUKICAqLwotaW50IF9faW5pdCBydGNfZnJvbTRfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHJ0Y19mcm9tNF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAl1bnNpZ25lZCBzaG9ydCBiY3IxLCBiY3IyLCB3Y3IyOwogCWludCBpOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0JcnRjX2Zyb200X210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXJ0Y19mcm9tNF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ0Y19mcm9tNF9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIFJlbmVzYXMgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBSZW5lc2FzIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmcnRjX2Zyb200X210ZFsxXSk7CisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZydGNfZnJvbTRfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBydGNfZnJvbTRfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHJ0Y19mcm9tNF9tdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKKwltZW1zZXQodGhpcywgMCwgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApKTsKIAogCS8qIExpbmsgdGhlIHByaXZhdGUgZGF0YSB3aXRoIHRoZSBNVEQgc3RydWN0dXJlICovCiAJcnRjX2Zyb200X210ZC0+cHJpdiA9IHRoaXM7CisJcnRjX2Zyb200X210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qIHNldCBhcmVhIDUgYXMgUENNQ0lBIG1vZGUgdG8gY2xlYXIgdGhlIHNwZWMgb2YgdERIKERhdGEgaG9sZCB0aW1lOzlucyBtaW4pICovCiAJYmNyMSA9ICpTSDc3WDlfQkNSMSAmIH4weDAwMDI7CkBAIC01ODAsOSArNTU2LDkgQEAKIAl0aGlzLT5JT19BRERSX1IgPSBydGNfZnJvbTRfZmlvX2Jhc2U7CiAJdGhpcy0+SU9fQUREUl9XID0gcnRjX2Zyb200X2Zpb19iYXNlOwogCS8qIFNldCBhZGRyZXNzIG9mIGhhcmR3YXJlIGNvbnRyb2wgZnVuY3Rpb24gKi8KLQl0aGlzLT5od2NvbnRyb2wgPSBydGNfZnJvbTRfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gcnRjX2Zyb200X2h3Y29udHJvbDsKIAkvKiBTZXQgYWRkcmVzcyBvZiBjaGlwIHNlbGVjdCBmdW5jdGlvbiAqLwotICAgICAgICB0aGlzLT5zZWxlY3RfY2hpcCA9IHJ0Y19mcm9tNF9uYW5kX3NlbGVjdF9jaGlwOworCXRoaXMtPnNlbGVjdF9jaGlwID0gcnRjX2Zyb200X25hbmRfc2VsZWN0X2NoaXA7CiAJLyogY29tbWFuZCBkZWxheSB0aW1lIChpbiB1cykgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMTAwOwogCS8qIHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBSZWFkeS9CdXN5IGxpbmUgKi8KQEAgLTU5MSwxOSArNTY3LDIwIEBACiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAJcHJpbnRrKEtFUk5fSU5GTyAicnRjX2Zyb200X2luaXQ6IHVzaW5nIGhhcmR3YXJlIEVDQyBkZXRlY3Rpb24uXG4iKTsKIAotICAgICAgICB0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfSFc4XzUxMjsKLQl0aGlzLT5vcHRpb25zIHw9IE5BTkRfSFdFQ0NfU1lORFJPTUU7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IV19TWU5EUk9NRTsKKwl0aGlzLT5lY2Muc2l6ZSA9IDUxMjsKKwl0aGlzLT5lY2MuYnl0ZXMgPSA4OwogCS8qIHJldHVybiB0aGUgc3RhdHVzIG9mIGV4dHJhIHN0YXR1cyBhbmQgRUNDIGNoZWNrcyAqLwogCXRoaXMtPmVycnN0YXQgPSBydGNfZnJvbTRfZXJyc3RhdDsKIAkvKiBzZXQgdGhlIG5hbmRfb29iaW5mbyB0byBzdXBwb3J0IEZQR0EgSC9XIGVycm9yIGRldGVjdGlvbiAqLwotCXRoaXMtPmF1dG9vb2IgPSAmcnRjX2Zyb200X25hbmRfb29iaW5mbzsKLQl0aGlzLT5lbmFibGVfaHdlY2MgPSBydGNfZnJvbTRfZW5hYmxlX2h3ZWNjOwotCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBydGNfZnJvbTRfY2FsY3VsYXRlX2VjYzsKLQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBydGNfZnJvbTRfY29ycmVjdF9kYXRhOworCXRoaXMtPmVjYy5sYXlvdXQgPSAmcnRjX2Zyb200X25hbmRfb29iaW5mbzsKKwl0aGlzLT5lY2MuaHdjdGwgPSBydGNfZnJvbTRfZW5hYmxlX2h3ZWNjOworCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBydGNfZnJvbTRfY2FsY3VsYXRlX2VjYzsKKwl0aGlzLT5lY2MuY29ycmVjdCA9IHJ0Y19mcm9tNF9jb3JyZWN0X2RhdGE7CiAjZWxzZQogCXByaW50ayhLRVJOX0lORk8gInJ0Y19mcm9tNF9pbml0OiB1c2luZyBzb2Z0d2FyZSBFQ0MgZGV0ZWN0aW9uLlxuIik7CiAKLQl0aGlzLT5lY2Ntb2RlID0gTkFORF9FQ0NfU09GVDsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CiAjZW5kaWYKIAogCS8qIHNldCB0aGUgYmFkIGJsb2NrIHRhYmxlcyB0byBzdXBwb3J0IGRlYnVnZ2luZyAqLwpAQCAtNjE3LDcgKzU5NCw3IEBACiAJfQogCiAJLyogUGVyZm9ybSAnZGV2aWNlIHJlY292ZXJ5JyBmb3IgZWFjaCBjaGlwIGluIGNhc2UgdGhlcmUgd2FzIGEgcG93ZXIgbG9zcy4gKi8KLQlmb3IgKGk9MDsgaSA8IHRoaXMtPm51bWNoaXBzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgdGhpcy0+bnVtY2hpcHM7IGkrKykgewogCQlkZXBsZXRlKHJ0Y19mcm9tNF9tdGQsIGkpOwogCX0KIApAQCAtNjQzLDcgKzYyMCw3IEBACiAJICovCiAJcnNfZGVjb2RlciA9IGluaXRfcnMoMTAsIDB4NDA5LCAwLCAxLCA2KTsKIAlpZiAoIXJzX2RlY29kZXIpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiQ291bGQgbm90IGNyZWF0ZSBhIFJTIGRlY29kZXJcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBjcmVhdGUgYSBSUyBkZWNvZGVyXG4iKTsKIAkJbmFuZF9yZWxlYXNlKHJ0Y19mcm9tNF9tdGQpOwogCQlrZnJlZShydGNfZnJvbTRfbXRkKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC02NTIsMjAgKzYyOSwxOSBAQAogCS8qIFJldHVybiBoYXBweSAqLwogCXJldHVybiAwOwogfQotbW9kdWxlX2luaXQocnRjX2Zyb200X2luaXQpOwogCittb2R1bGVfaW5pdChydGNfZnJvbTRfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB2b2lkIF9fZXhpdCBydGNfZnJvbTRfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBydGNfZnJvbTRfY2xlYW51cCh2b2lkKQogewogCS8qIFJlbGVhc2UgcmVzb3VyY2UsIHVucmVnaXN0ZXIgcGFydGl0aW9ucyAqLwogCW5hbmRfcmVsZWFzZShydGNfZnJvbTRfbXRkKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCi0Ja2ZyZWUgKHJ0Y19mcm9tNF9tdGQpOworCWtmcmVlKHJ0Y19mcm9tNF9tdGQpOwogCiAjaWZkZWYgUlRDX0ZST000X0hXRUNDCiAJLyogRnJlZSB0aGUgcmVlZCBzb2xvbW9uIHJlc291cmNlcyAqLwpAQCAtNjc0LDEwICs2NTAsOSBAQAogCX0KICNlbmRpZgogfQorCiBtb2R1bGVfZXhpdChydGNfZnJvbTRfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiZC5tYXJsaW4gPGRtYXJsaW5AcmVkaGF0LmNvbSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJCb2FyZC1zcGVjaWZpYyBnbHVlIGxheWVyIGZvciBBRy1BTkQgZmxhc2ggb24gUmVuZXNhcyBGUk9NX0JPQVJENCIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCmluZGV4IDViNTU1OTkuLjJjMjYyZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvczNjMjQxMC5jCkBAIC0xOCw4ICsxOCw5IEBACiAgKgkyMC1KdW4tMjAwNSAgQkpEICBVcGRhdGVkIHMzYzI0NDAgc3VwcG9ydCwgZml4ZWQgdGltaW5nIGJ1ZwogICoJMDgtSnVsLTIwMDUgIEJKRCAgRml4IE9PUFMgd2hlbiBubyBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkCiAgKgkyMC1PY3QtMjAwNSAgQkpEICBGaXggdGltaW5nIGNhbGN1bGF0aW9uIGJ1ZworICoJMTQtSmFuLTIwMDYgIEJKRCAgQWxsb3cgY2xvY2sgdG8gYmUgc3RvcHBlZCB3aGVuIGlkbGUKICAqCi0gKiAkSWQ6IHMzYzI0MTAuYyx2IDEuMjAgMjAwNS8xMS8wNyAxMToxNDozMSBnbGVpeG5lciBFeHAgJAorICogJElkOiBzM2MyNDEwLmMsdiAxLjIzIDIwMDYvMDQvMDEgMTg6MDY6MjkgYmpkIEV4cCAkCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zNiw5ICszNyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAqLwogCi0jaW5jbHVkZSA8Y29uZmlnL210ZC9uYW5kL3MzYzI0MTAvaHdlY2MuaD4KLSNpbmNsdWRlIDxjb25maWcvbXRkL25hbmQvczNjMjQxMC9kZWJ1Zy5oPgotCiAjaWZkZWYgQ09ORklHX01URF9OQU5EX1MzQzI0MTBfREVCVUcKICNkZWZpbmUgREVCVUcKICNlbmRpZgpAQCAtNzMsMTQgKzcxLDIwIEBACiBzdGF0aWMgaW50IGhhcmR3YXJlX2VjYyA9IDA7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NVERfTkFORF9TM0MyNDEwX0NMS1NUT1AKK3N0YXRpYyBpbnQgY2xvY2tfc3RvcCA9IDE7CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBjbG9ja19zdG9wID0gMDsKKyNlbmRpZgorCisKIC8qIG5ldyBvb2IgcGxhY2VtZW50IGJsb2NrIGZvciB1c2Ugd2l0aCBoYXJkd2FyZSBlY2MgZ2VuZXJhdGlvbgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfaHdfZWNjb29iID0gewotCS51c2VlY2MJCT0gTVREX05BTkRFQ0NfQVVUT1BMQUNFLAotCS5lY2NieXRlcwk9IDMsCi0JLmVjY3BvcwkJPSB7MCwgMSwgMiB9LAotCS5vb2JmcmVlCT0geyB7OCwgOH0gfQorc3RhdGljIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2h3X2VjY29vYiA9IHsKKwkuZWNjYnl0ZXMgPSAzLAorCS5lY2Nwb3MgPSB7MCwgMSwgMn0sCisJLm9vYmZyZWUgPSB7ezgsIDh9fQogfTsKIAogLyogY29udHJvbGxlciBhbmQgbXRkIGluZm9ybWF0aW9uICovCkBAIC0xMzUsNiArMTM5LDExIEBACiAJcmV0dXJuIGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGFsbG93X2Nsa19zdG9wKHN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbykKK3sKKwlyZXR1cm4gY2xvY2tfc3RvcDsKK30KKwogLyogdGltaW5nIGNhbGN1bGF0aW9ucyAqLwogCiAjZGVmaW5lIE5TX0lOX0tIWiAxMDAwMDAwCkBAIC0xNDksOCArMTU4LDcgQEAKIAlwcl9kZWJ1ZygicmVzdWx0ICVkIGZyb20gJWxkLCAlZFxuIiwgcmVzdWx0LCBjbGssIHdhbnRlZCk7CiAKIAlpZiAocmVzdWx0ID4gbWF4KSB7Ci0JCXByaW50aygiJWQgbnMgaXMgdG9vIGJpZyBmb3IgY3VycmVudCBjbG9jayByYXRlICVsZFxuIiwKLQkJICAgICAgIHdhbnRlZCwgY2xrKTsKKwkJcHJpbnRrKCIlZCBucyBpcyB0b28gYmlnIGZvciBjdXJyZW50IGNsb2NrIHJhdGUgJWxkXG4iLCB3YW50ZWQsIGNsayk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTE2NCw4ICsxNzIsNyBAQAogCiAvKiBjb250cm9sbGVyIHNldHVwICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2luaXRodyhzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8sCi0JCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2luaXRodyhzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8sIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqcGxhdCA9IHRvX25hbmRfcGxhdChwZGV2KTsKIAl1bnNpZ25lZCBsb25nIGNsa3JhdGUgPSBjbGtfZ2V0X3JhdGUoaW5mby0+Y2xrKTsKQEAgLTE3Nyw3ICsxODQsNyBAQAogCWNsa3JhdGUgLz0gMTAwMDsJLyogdHVybiBjbG9jayBpbnRvIGtIeiBmb3IgZWFzZSBvZiB1c2UgKi8KIAogCWlmIChwbGF0ICE9IE5VTEwpIHsKLQkJdGFjbHMgID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50YWNscywgY2xrcmF0ZSwgNCk7CisJCXRhY2xzID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50YWNscywgY2xrcmF0ZSwgNCk7CiAJCXR3cnBoMCA9IHMzYzI0MTBfbmFuZF9jYWxjX3JhdGUocGxhdC0+dHdycGgwLCBjbGtyYXRlLCA4KTsKIAkJdHdycGgxID0gczNjMjQxMF9uYW5kX2NhbGNfcmF0ZShwbGF0LT50d3JwaDEsIGNsa3JhdGUsIDgpOwogCX0gZWxzZSB7CkBAIC0xOTMsMTkgKzIwMCwyMiBAQAogCX0KIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJUYWNscz0lZCwgJWRucyBUd3JwaDA9JWQgJWRucywgVHdycGgxPSVkICVkbnNcbiIsCi0JICAgICAgIHRhY2xzLCB0b19ucyh0YWNscywgY2xrcmF0ZSksCi0JICAgICAgIHR3cnBoMCwgdG9fbnModHdycGgwLCBjbGtyYXRlKSwKLQkgICAgICAgdHdycGgxLCB0b19ucyh0d3JwaDEsIGNsa3JhdGUpKTsKKwkgICAgICAgdGFjbHMsIHRvX25zKHRhY2xzLCBjbGtyYXRlKSwgdHdycGgwLCB0b19ucyh0d3JwaDAsIGNsa3JhdGUpLCB0d3JwaDEsIHRvX25zKHR3cnBoMSwgY2xrcmF0ZSkpOwogCiAJaWYgKCFpbmZvLT5pc19zM2MyNDQwKSB7Ci0JCWNmZyAgPSBTM0MyNDEwX05GQ09ORl9FTjsKLQkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RBQ0xTKHRhY2xzLTEpOwotCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVFdSUEgwKHR3cnBoMC0xKTsKLQkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RXUlBIMSh0d3JwaDEtMSk7CisJCWNmZyA9IFMzQzI0MTBfTkZDT05GX0VOOworCQljZmcgfD0gUzNDMjQxMF9ORkNPTkZfVEFDTFModGFjbHMgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RXUlBIMCh0d3JwaDAgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0MTBfTkZDT05GX1RXUlBIMSh0d3JwaDEgLSAxKTsKIAl9IGVsc2UgewotCQljZmcgICA9IFMzQzI0NDBfTkZDT05GX1RBQ0xTKHRhY2xzLTEpOwotCQljZmcgIHw9IFMzQzI0NDBfTkZDT05GX1RXUlBIMCh0d3JwaDAtMSk7Ci0JCWNmZyAgfD0gUzNDMjQ0MF9ORkNPTkZfVFdSUEgxKHR3cnBoMS0xKTsKKwkJY2ZnID0gUzNDMjQ0MF9ORkNPTkZfVEFDTFModGFjbHMgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0NDBfTkZDT05GX1RXUlBIMCh0d3JwaDAgLSAxKTsKKwkJY2ZnIHw9IFMzQzI0NDBfTkZDT05GX1RXUlBIMSh0d3JwaDEgLSAxKTsKKworCQkvKiBlbmFibGUgdGhlIGNvbnRyb2xsZXIgYW5kIGRlLWFzc2VydCBuRkNFICovCisKKwkJd3JpdGVsKFMzQzI0NDBfTkZDT05UX0VOQUJMRSB8IFMzQzI0NDBfTkZDT05UX0VOQUJMRSwKKwkJICAgICAgIGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQ09OVCk7CiAJfQogCiAJcHJfZGVidWcoUEZYICJORl9DT05GIGlzIDB4JWx4XG4iLCBjZmcpOwpAQCAtMjI5LDcgKzIzOSwxMCBAQAogCWluZm8gPSBubXRkLT5pbmZvOwogCiAJYml0ID0gKGluZm8tPmlzX3MzYzI0NDApID8gUzNDMjQ0MF9ORkNPTlRfbkZDRSA6IFMzQzI0MTBfTkZDT05GX25GQ0U7Ci0JcmVnID0gaW5mby0+cmVncysoKGluZm8tPmlzX3MzYzI0NDApID8gUzNDMjQ0MF9ORkNPTlQ6UzNDMjQxMF9ORkNPTkYpOworCXJlZyA9IGluZm8tPnJlZ3MgKyAoKGluZm8tPmlzX3MzYzI0NDApID8gUzNDMjQ0MF9ORkNPTlQgOiBTM0MyNDEwX05GQ09ORik7CisKKwlpZiAoY2hpcCAhPSAtMSAmJiBhbGxvd19jbGtfc3RvcChpbmZvKSkKKwkJY2xrX2VuYWJsZShpbmZvLT5jbGspOwogCiAJY3VyID0gcmVhZGwocmVnKTsKIApAQCAtMjQzLDc3ICsyNTYsNTEgQEAKIAogCQlpZiAoaW5mby0+cGxhdGZvcm0gIT0gTlVMTCkgewogCQkJaWYgKGluZm8tPnBsYXRmb3JtLT5zZWxlY3RfY2hpcCAhPSBOVUxMKQotCQkJCShpbmZvLT5wbGF0Zm9ybS0+c2VsZWN0X2NoaXApKG5tdGQtPnNldCwgY2hpcCk7CisJCQkJKGluZm8tPnBsYXRmb3JtLT5zZWxlY3RfY2hpcCkgKG5tdGQtPnNldCwgY2hpcCk7CiAJCX0KIAogCQljdXIgJj0gfmJpdDsKIAl9CiAKIAl3cml0ZWwoY3VyLCByZWcpOworCisJaWYgKGNoaXAgPT0gLTEgJiYgYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCWNsa19kaXNhYmxlKGluZm8tPmNsayk7CiB9CiAKLS8qIGNvbW1hbmQgYW5kIGNvbnRyb2wgZnVuY3Rpb25zCisvKiBzM2MyNDEwX25hbmRfaHdjb250cm9sCiAgKgotICogTm90ZSwgdGhlc2UgYWxsIHVzZSB0Z2x4J3MgbWV0aG9kIG9mIGNoYW5naW5nIHRoZSBJT19BRERSX1cgZmllbGQKLSAqIHRvIG1ha2UgdGhlIGNvZGUgc2ltcGxlciwgYW5kIHVzZSB0aGUgbmFuZCBsYXllcidzIGNvZGUgdG8gaXNzdWUgdGhlCi0gKiBjb21tYW5kIGFuZCBhZGRyZXNzIHNlcXVlbmNlcyB2aWEgdGhlIHByb3BlciBJTyBwb3J0cy4KLSAqCisgKiBJc3N1ZSBjb21tYW5kIGFuZCBhZGRyZXNzIGN5Y2xlcyB0byB0aGUgY2hpcAogKi8KIAotc3RhdGljIHZvaWQgczNjMjQxMF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHMzYzI0MTBfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CiAJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gczNjMjQxMF9uYW5kX210ZF90b2luZm8obXRkKTsKLQlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCQorCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE5BTkRfQ1RMX1NFVE5DRToKLQljYXNlIE5BTkRfQ1RMX0NMUk5DRToKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FsbGVkIGZvciBOQ0VcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBOQU5EX0NUTF9TRVRDTEU6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQ01EOwotCQlicmVhazsKLQotCWNhc2UgTkFORF9DVExfU0VUQUxFOgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkFERFI7Ci0JCWJyZWFrOwotCi0JCS8qIE5BTkRfQ1RMX0NMUkNMRTogKi8KLQkJLyogTkFORF9DVExfQ0xSQUxFOiAqLwotCWRlZmF1bHQ6Ci0JCWNoaXAtPklPX0FERFJfVyA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GREFUQTsKLQkJYnJlYWs7Ci0JfQorCWlmIChjdHJsICYgTkFORF9DTEUpCisJCXdyaXRlYihjbWQsIGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQ01EKTsKKwllbHNlCisJCXdyaXRlYihjbWQsIGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GQUREUik7CiB9CiAKIC8qIGNvbW1hbmQgYW5kIGNvbnRyb2wgZnVuY3Rpb25zICovCiAKLXN0YXRpYyB2b2lkIHMzYzI0NDBfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCitzdGF0aWMgdm9pZCBzM2MyNDQwX25hbmRfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJCSAgIHVuc2lnbmVkIGludCBjdHJsKQogewogCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHMzYzI0MTBfbmFuZF9tdGRfdG9pbmZvKG10ZCk7Ci0Jc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBOQU5EX0NUTF9TRVROQ0U6Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbGxlZCBmb3IgTkNFXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlicmVhazsKKwlpZiAoY21kID09IE5BTkRfQ01EX05PTkUpCisJCXJldHVybjsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkNNRDsKLQkJYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJY2hpcC0+SU9fQUREUl9XID0gaW5mby0+cmVncyArIFMzQzI0NDBfTkZBRERSOwotCQlicmVhazsKLQotCQkvKiBOQU5EX0NUTF9DTFJDTEU6ICovCi0JCS8qIE5BTkRfQ1RMX0NMUkFMRTogKi8KLQlkZWZhdWx0OgotCQljaGlwLT5JT19BRERSX1cgPSBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkRBVEE7Ci0JCWJyZWFrOwotCX0KKwlpZiAoY3RybCAmIE5BTkRfQ0xFKQorCQl3cml0ZWIoY21kLCBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkNNRCk7CisJZWxzZQorCQl3cml0ZWIoY21kLCBpbmZvLT5yZWdzICsgUzNDMjQ0MF9ORkFERFIpOwogfQogCiAvKiBzM2MyNDEwX25hbmRfZGV2cmVhZHkoKQpAQCAtMzMwLDIyICszMTcsMTYgQEAKIAlyZXR1cm4gcmVhZGIoaW5mby0+cmVncyArIFMzQzI0MTBfTkZTVEFUKSAmIFMzQzI0MTBfTkZTVEFUX0JVU1k7CiB9CiAKLQogLyogRUNDIGhhbmRsaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoc3RydWN0IG10ZF9pbmZvICptdGQsIHVfY2hhciAqZGF0LAotCQkJCSAgICAgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYykKK3N0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NvcnJlY3RfZGF0YShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICpkYXQsIHVfY2hhciAqcmVhZF9lY2MsIHVfY2hhciAqY2FsY19lY2MpCiB7Ci0JcHJfZGVidWcoInMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoJXAsJXAsJXAsJXApXG4iLAotCQkgbXRkLCBkYXQsIHJlYWRfZWNjLCBjYWxjX2VjYyk7CisJcHJfZGVidWcoInMzYzI0MTBfbmFuZF9jb3JyZWN0X2RhdGEoJXAsJXAsJXAsJXApXG4iLCBtdGQsIGRhdCwgcmVhZF9lY2MsIGNhbGNfZWNjKTsKIAogCXByX2RlYnVnKCJlY2NzOiByZWFkICUwMngsJTAyeCwlMDJ4IHZzIGNhbGMgJTAyeCwlMDJ4LCUwMnhcbiIsCi0JCSByZWFkX2VjY1swXSwgcmVhZF9lY2NbMV0sIHJlYWRfZWNjWzJdLAotCQkgY2FsY19lY2NbMF0sIGNhbGNfZWNjWzFdLCBjYWxjX2VjY1syXSk7CisJCSByZWFkX2VjY1swXSwgcmVhZF9lY2NbMV0sIHJlYWRfZWNjWzJdLCBjYWxjX2VjY1swXSwgY2FsY19lY2NbMV0sIGNhbGNfZWNjWzJdKTsKIAotCWlmIChyZWFkX2VjY1swXSA9PSBjYWxjX2VjY1swXSAmJgotCSAgICByZWFkX2VjY1sxXSA9PSBjYWxjX2VjY1sxXSAmJgotCSAgICByZWFkX2VjY1syXSA9PSBjYWxjX2VjY1syXSkKKwlpZiAocmVhZF9lY2NbMF0gPT0gY2FsY19lY2NbMF0gJiYgcmVhZF9lY2NbMV0gPT0gY2FsY19lY2NbMV0gJiYgcmVhZF9lY2NbMl0gPT0gY2FsY19lY2NbMl0pCiAJCXJldHVybiAwOwogCiAJLyogd2UgY3VyZW50bHkgaGF2ZSBubyBtZXRob2QgZm9yIGNvcnJlY3RpbmcgdGhlIGVycm9yICovCkBAIC0zNzgsOCArMzU5LDcgQEAKIAl3cml0ZWwoY3RybCB8IFMzQzI0NDBfTkZDT05UX0lOSVRFQ0MsIGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GQ09OVCk7CiB9CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCitzdGF0aWMgaW50IHMzYzI0MTBfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOwogCkBAIC0zODcsMTUgKzM2NywxMiBAQAogCWVjY19jb2RlWzFdID0gcmVhZGIoaW5mby0+cmVncyArIFMzQzI0MTBfTkZFQ0MgKyAxKTsKIAllY2NfY29kZVsyXSA9IHJlYWRiKGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GRUNDICsgMik7CiAKLQlwcl9kZWJ1ZygiY2FsY3VsYXRlX2VjYzogcmV0dXJuaW5nIGVjYyAlMDJ4LCUwMngsJTAyeFxuIiwKLQkJIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOworCXByX2RlYnVnKCJjYWxjdWxhdGVfZWNjOiByZXR1cm5pbmcgZWNjICUwMngsJTAyeCwlMDJ4XG4iLCBlY2NfY29kZVswXSwgZWNjX2NvZGVbMV0sIGVjY19jb2RlWzJdKTsKIAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgczNjMjQ0MF9uYW5kX2NhbGN1bGF0ZV9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsCi0JCQkJICAgICAgY29uc3QgdV9jaGFyICpkYXQsIHVfY2hhciAqZWNjX2NvZGUpCitzdGF0aWMgaW50IHMzYzI0NDBfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSkKIHsKIAlzdHJ1Y3QgczNjMjQxMF9uYW5kX2luZm8gKmluZm8gPSBzM2MyNDEwX25hbmRfbXRkX3RvaW5mbyhtdGQpOwogCXVuc2lnbmVkIGxvbmcgZWNjID0gcmVhZGwoaW5mby0+cmVncyArIFMzQzI0NDBfTkZNRUNDMCk7CkBAIC00MDQsMTMgKzM4MSwxMSBAQAogCWVjY19jb2RlWzFdID0gZWNjID4+IDg7CiAJZWNjX2NvZGVbMl0gPSBlY2MgPj4gMTY7CiAKLQlwcl9kZWJ1ZygiY2FsY3VsYXRlX2VjYzogcmV0dXJuaW5nIGVjYyAlMDJ4LCUwMngsJTAyeFxuIiwKLQkJIGVjY19jb2RlWzBdLCBlY2NfY29kZVsxXSwgZWNjX2NvZGVbMl0pOworCXByX2RlYnVnKCJjYWxjdWxhdGVfZWNjOiByZXR1cm5pbmcgZWNjICUwMngsJTAyeCwlMDJ4XG4iLCBlY2NfY29kZVswXSwgZWNjX2NvZGVbMV0sIGVjY19jb2RlWzJdKTsKIAogCXJldHVybiAwOwogfQogCi0KIC8qIG92ZXItcmlkZSB0aGUgc3RhbmRhcmQgZnVuY3Rpb25zIGZvciBhIGxpdHRsZSBtb3JlIHNwZWVkLiBXZSBjYW4KICAqIHVzZSByZWFkL3dyaXRlIGJsb2NrIHRvIG1vdmUgdGhlIGRhdGEgYnVmZmVycyB0by9mcm9tIHRoZSBjb250cm9sbGVyCiAqLwpAQCAtNDIxLDggKzM5Niw3IEBACiAJcmVhZHNiKHRoaXMtPklPX0FERFJfUiwgYnVmLCBsZW4pOwogfQogCi1zdGF0aWMgdm9pZCBzM2MyNDEwX25hbmRfd3JpdGVfYnVmKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAotCQkJCSAgIGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgczNjMjQxMF9uYW5kX3dyaXRlX2J1ZihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKIAl3cml0ZXNiKHRoaXMtPklPX0FERFJfVywgYnVmLCBsZW4pOwpAQCAtNDU5LDcgKzQzMyw4IEBACiAJLyogZnJlZSB0aGUgY29tbW9uIHJlc291cmNlcyAqLwogCiAJaWYgKGluZm8tPmNsayAhPSBOVUxMICYmICFJU19FUlIoaW5mby0+Y2xrKSkgewotCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCQlpZiAoIWFsbG93X2Nsa19zdG9wKGluZm8pKQorCQkJY2xrX2Rpc2FibGUoaW5mby0+Y2xrKTsKIAkJY2xrX3B1dChpbmZvLT5jbGspOwogCX0KIApAQCAtNDg4LDkgKzQ2Myw3IEBACiAJCXJldHVybiBhZGRfbXRkX2RldmljZSgmbXRkLT5tdGQpOwogCiAJaWYgKHNldC0+bnJfcGFydGl0aW9ucyA+IDAgJiYgc2V0LT5wYXJ0aXRpb25zICE9IE5VTEwpIHsKLQkJcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucygmbXRkLT5tdGQsCi0JCQkJCSAgc2V0LT5wYXJ0aXRpb25zLAotCQkJCQkgIHNldC0+bnJfcGFydGl0aW9ucyk7CisJCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoJm10ZC0+bXRkLCBzZXQtPnBhcnRpdGlvbnMsIHNldC0+bnJfcGFydGl0aW9ucyk7CiAJfQogCiAJcmV0dXJuIGFkZF9tdGRfZGV2aWNlKCZtdGQtPm10ZCk7CkBAIC01MTcsNyArNDkwLDcgQEAKIAogCWNoaXAtPklPX0FERFJfUgkgICA9IGluZm8tPnJlZ3MgKyBTM0MyNDEwX05GREFUQTsKIAljaGlwLT5JT19BRERSX1cgICAgPSBpbmZvLT5yZWdzICsgUzNDMjQxMF9ORkRBVEE7Ci0JY2hpcC0+aHdjb250cm9sICAgID0gczNjMjQxMF9uYW5kX2h3Y29udHJvbDsKKwljaGlwLT5jbWRfY3RybCAgICAgPSBzM2MyNDEwX25hbmRfaHdjb250cm9sOwogCWNoaXAtPmRldl9yZWFkeSAgICA9IHMzYzI0MTBfbmFuZF9kZXZyZWFkeTsKIAljaGlwLT53cml0ZV9idWYgICAgPSBzM2MyNDEwX25hbmRfd3JpdGVfYnVmOwogCWNoaXAtPnJlYWRfYnVmICAgICA9IHMzYzI0MTBfbmFuZF9yZWFkX2J1ZjsKQEAgLTUzMCwyNiArNTAzLDI5IEBACiAJaWYgKGluZm8tPmlzX3MzYzI0NDApIHsKIAkJY2hpcC0+SU9fQUREUl9SCSA9IGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GREFUQTsKIAkJY2hpcC0+SU9fQUREUl9XICA9IGluZm8tPnJlZ3MgKyBTM0MyNDQwX05GREFUQTsKLQkJY2hpcC0+aHdjb250cm9sICA9IHMzYzI0NDBfbmFuZF9od2NvbnRyb2w7CisJCWNoaXAtPmNtZF9jdHJsICAgPSBzM2MyNDQwX25hbmRfaHdjb250cm9sOwogCX0KIAogCW5tdGQtPmluZm8JICAgPSBpbmZvOwogCW5tdGQtPm10ZC5wcml2CSAgID0gY2hpcDsKKwlubXRkLT5tdGQub3duZXIgICAgPSBUSElTX01PRFVMRTsKIAlubXRkLT5zZXQJICAgPSBzZXQ7CiAKIAlpZiAoaGFyZHdhcmVfZWNjKSB7Ci0JCWNoaXAtPmNvcnJlY3RfZGF0YSAgPSBzM2MyNDEwX25hbmRfY29ycmVjdF9kYXRhOwotCQljaGlwLT5lbmFibGVfaHdlY2MgID0gczNjMjQxMF9uYW5kX2VuYWJsZV9od2VjYzsKLQkJY2hpcC0+Y2FsY3VsYXRlX2VjYyA9IHMzYzI0MTBfbmFuZF9jYWxjdWxhdGVfZWNjOwotCQljaGlwLT5lY2Ntb2RlCSAgICA9IE5BTkRfRUNDX0hXM181MTI7Ci0JCWNoaXAtPmF1dG9vb2IgICAgICAgPSAmbmFuZF9od19lY2Nvb2I7CisJCWNoaXAtPmVjYy5jb3JyZWN0ICAgPSBzM2MyNDEwX25hbmRfY29ycmVjdF9kYXRhOworCQljaGlwLT5lY2MuaHdjdGwJICAgID0gczNjMjQxMF9uYW5kX2VuYWJsZV9od2VjYzsKKwkJY2hpcC0+ZWNjLmNhbGN1bGF0ZSA9IHMzYzI0MTBfbmFuZF9jYWxjdWxhdGVfZWNjOworCQljaGlwLT5lY2MubW9kZQkgICAgPSBOQU5EX0VDQ19IVzsKKwkJY2hpcC0+ZWNjLnNpemUJICAgID0gNTEyOworCQljaGlwLT5lY2MuYnl0ZXMJICAgID0gMzsKKwkJY2hpcC0+ZWNjLmxheW91dCAgICA9ICZuYW5kX2h3X2VjY29vYjsKIAogCQlpZiAoaW5mby0+aXNfczNjMjQ0MCkgewotCQkJY2hpcC0+ZW5hYmxlX2h3ZWNjICA9IHMzYzI0NDBfbmFuZF9lbmFibGVfaHdlY2M7Ci0JCQljaGlwLT5jYWxjdWxhdGVfZWNjID0gczNjMjQ0MF9uYW5kX2NhbGN1bGF0ZV9lY2M7CisJCQljaGlwLT5lY2MuaHdjdGwgICAgID0gczNjMjQ0MF9uYW5kX2VuYWJsZV9od2VjYzsKKwkJCWNoaXAtPmVjYy5jYWxjdWxhdGUgPSBzM2MyNDQwX25hbmRfY2FsY3VsYXRlX2VjYzsKIAkJfQogCX0gZWxzZSB7Ci0JCWNoaXAtPmVjY21vZGUJICAgID0gTkFORF9FQ0NfU09GVDsKKwkJY2hpcC0+ZWNjLm1vZGUJICAgID0gTkFORF9FQ0NfU09GVDsKIAl9CiB9CiAKQEAgLTY1NCwxMyArNjMwLDExIEBACiAJbm10ZCA9IGluZm8tPm10ZHM7CiAKIAlmb3IgKHNldG5vID0gMDsgc2V0bm8gPCBucl9zZXRzOyBzZXRubysrLCBubXRkKyspIHsKLQkJcHJfZGVidWcoImluaXRpYWxpc2luZyBzZXQgJWQgKCVwLCBpbmZvICVwKVxuIiwKLQkJCSBzZXRubywgbm10ZCwgaW5mbyk7CisJCXByX2RlYnVnKCJpbml0aWFsaXNpbmcgc2V0ICVkICglcCwgaW5mbyAlcClcbiIsIHNldG5vLCBubXRkLCBpbmZvKTsKIAogCQlzM2MyNDEwX25hbmRfaW5pdF9jaGlwKGluZm8sIG5tdGQsIHNldHMpOwogCi0JCW5tdGQtPnNjYW5fcmVzID0gbmFuZF9zY2FuKCZubXRkLT5tdGQsCi0JCQkJCSAgIChzZXRzKSA/IHNldHMtPm5yX2NoaXBzIDogMSk7CisJCW5tdGQtPnNjYW5fcmVzID0gbmFuZF9zY2FuKCZubXRkLT5tdGQsIChzZXRzKSA/IHNldHMtPm5yX2NoaXBzIDogMSk7CiAKIAkJaWYgKG5tdGQtPnNjYW5fcmVzID09IDApIHsKIAkJCXMzYzI0MTBfbmFuZF9hZGRfcGFydGl0aW9uKGluZm8sIG5tdGQsIHNldHMpOwpAQCAtNjcwLDYgKzY0NCwxMSBAQAogCQkJc2V0cysrOwogCX0KIAorCWlmIChhbGxvd19jbGtfc3RvcChpbmZvKSkgeworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiY2xvY2sgaWRsZSBzdXBwb3J0IGVuYWJsZWRcbiIpOworCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCX0KKwogCXByX2RlYnVnKCJpbml0aWFsaXNlZCBva1xuIik7CiAJcmV0dXJuIDA7CiAKQEAgLTY4MSw2ICs2NjAsNDEgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBQTSBTdXBwb3J0ICovCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBpbnQgczNjMjR4eF9uYW5kX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgcG0pCit7CisJc3RydWN0IHMzYzI0MTBfbmFuZF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChpbmZvKSB7CisJCWlmICghYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfbmFuZF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBzM2MyNDEwX25hbmRfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisKKwlpZiAoaW5mbykgeworCQljbGtfZW5hYmxlKGluZm8tPmNsayk7CisJCXMzYzI0MTBfbmFuZF9pbml0aHcoaW5mbywgZGV2KTsKKworCQlpZiAoYWxsb3dfY2xrX3N0b3AoaW5mbykpCisJCQljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCX0KKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzM2MyNHh4X25hbmRfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0eHhfbmFuZF9yZXN1bWUgTlVMTAorI2VuZGlmCisKIC8qIGRyaXZlciBkZXZpY2UgcmVnaXN0cmF0aW9uICovCiAKIHN0YXRpYyBpbnQgczNjMjQxMF9uYW5kX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKQEAgLTY5Niw2ICs3MTAsOCBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9uYW5kX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gczNjMjQxMF9uYW5kX3Byb2JlLAogCS5yZW1vdmUJCT0gczNjMjQxMF9uYW5kX3JlbW92ZSwKKwkuc3VzcGVuZAk9IHMzYzI0eHhfbmFuZF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjR4eF9uYW5kX3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAiczNjMjQxMC1uYW5kIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCkBAIC03MDUsNiArNzIxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHMzYzI0NDBfbmFuZF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IHMzYzI0NDBfbmFuZF9wcm9iZSwKIAkucmVtb3ZlCQk9IHMzYzI0MTBfbmFuZF9yZW1vdmUsCisJLnN1c3BlbmQJPSBzM2MyNHh4X25hbmRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfbmFuZF9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gInMzYzI0NDAtbmFuZCIsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zaGFycHNsLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYwppbmRleCAxOTI0YTRmLi4yMTc0MzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NoYXJwc2wuYwpAQCAtNDYsNyArNDYsNiBAQAogI2RlZmluZSBGTENMRQkJKDEgPDwgMSkKICNkZWZpbmUgRkxDRTAJCSgxIDw8IDApCiAKLQogLyoKICAqIE1URCBzdHJ1Y3R1cmUgZm9yIFNoYXJwU0wKICAqLwpAQCAtNjAsNTAgKzU5LDQ0IEBACiBzdGF0aWMgaW50IG5yX3BhcnRpdGlvbnM7CiBzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gc2hhcnBzbF9uYW5kX2RlZmF1bHRfcGFydGl0aW9uX2luZm9bXSA9IHsKIAl7Ci0JLm5hbWUgPSAiU3lzdGVtIEFyZWEiLAotCS5vZmZzZXQgPSAwLAotCS5zaXplID0gNyAqIDEwMjQgKiAxMDI0LAotCX0sCisJIC5uYW1lID0gIlN5c3RlbSBBcmVhIiwKKwkgLm9mZnNldCA9IDAsCisJIC5zaXplID0gNyAqIDEwMjQgKiAxMDI0LAorCSB9LAogCXsKLQkubmFtZSA9ICJSb290IEZpbGVzeXN0ZW0iLAotCS5vZmZzZXQgPSA3ICogMTAyNCAqIDEwMjQsCi0JLnNpemUgPSAzMCAqIDEwMjQgKiAxMDI0LAotCX0sCisJIC5uYW1lID0gIlJvb3QgRmlsZXN5c3RlbSIsCisJIC5vZmZzZXQgPSA3ICogMTAyNCAqIDEwMjQsCisJIC5zaXplID0gMzAgKiAxMDI0ICogMTAyNCwKKwkgfSwKIAl7Ci0JLm5hbWUgPSAiSG9tZSBGaWxlc3lzdGVtIiwKLQkub2Zmc2V0ID0gTVREUEFSVF9PRlNfQVBQRU5EICwKLQkuc2l6ZSA9IE1URFBBUlRfU0laX0ZVTEwgLAotCX0sCisJIC5uYW1lID0gIkhvbWUgRmlsZXN5c3RlbSIsCisJIC5vZmZzZXQgPSBNVERQQVJUX09GU19BUFBFTkQsCisJIC5zaXplID0gTVREUEFSVF9TSVpfRlVMTCwKKwkgfSwKIH07CiAKIC8qCiAgKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICoJY3RybDoKKyAqCU5BTkRfQ05FOiBiaXQgMCAtPiBiaXQgMCAmIDQKKyAqCU5BTkRfQ0xFOiBiaXQgMSAtPiBiaXQgMQorICoJTkFORF9BTEU6IGJpdCAyIC0+IGJpdCAyCisgKgogICovCi1zdGF0aWMgdm9pZAotc2hhcnBzbF9uYW5kX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8qIG10ZCwgaW50IGNtZCkKK3N0YXRpYyB2b2lkIHNoYXJwc2xfbmFuZF9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsCisJCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE5BTkRfQ1RMX1NFVENMRToKLQkJd3JpdGViKHJlYWRiKEZMQVNIQ1RMKSB8IEZMQ0xFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQ0xFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpICYgfkZMQ0xFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOworCXN0cnVjdCBuYW5kX2NoaXAgKmNoaXAgPSBtdGQtPnByaXY7CiAKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRToKLQkJd3JpdGViKHJlYWRiKEZMQVNIQ1RMKSB8IEZMQUxFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpICYgfkZMQUxFLCBGTEFTSENUTCk7Ci0JCWJyZWFrOworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBjaGFyIGJpdHMgPSBjdHJsICYgMHgwNzsKIAotCWNhc2UgTkFORF9DVExfU0VUTkNFOgotCQl3cml0ZWIocmVhZGIoRkxBU0hDVEwpICYgfihGTENFMHxGTENFMSksIEZMQVNIQ1RMKTsKLQkJYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJOQ0U6Ci0JCXdyaXRlYihyZWFkYihGTEFTSENUTCkgfCAoRkxDRTB8RkxDRTEpLCBGTEFTSENUTCk7Ci0JCWJyZWFrOworCQliaXRzIHw9IChjdHJsICYgMHgwMSkgPDwgNDsKKwkJd3JpdGViKChyZWFkYihGTEFTSENUTCkgJiAweDE3KSB8IGJpdHMsIEZMQVNIQ1RMKTsKIAl9CisKKwlpZiAoY21kICE9IE5BTkRfQ01EX05PTkUpCisJCXdyaXRlYihjbWQsIGNoaXAtPklPX0FERFJfVyk7CiB9CiAKIHN0YXRpYyB1aW50OF90IHNjYW5fZmZfcGF0dGVybltdID0geyAweGZmLCAweGZmIH07CkBAIC0xMjIsMzEgKzExNSwyNiBAQAogCS5wYXR0ZXJuID0gc2Nhbl9mZl9wYXR0ZXJuCiB9OwogCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBha2l0YV9vb2JpbmZvID0gewotCS51c2VlY2MgPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IGFraXRhX29vYmluZm8gPSB7CiAJLmVjY2J5dGVzID0gMjQsCiAJLmVjY3BvcyA9IHsKLQkJMHg1LCAgMHgxLCAgMHgyLCAgMHgzLCAgMHg2LCAgMHg3LCAgMHgxNSwgMHgxMSwKLQkJMHgxMiwgMHgxMywgMHgxNiwgMHgxNywgMHgyNSwgMHgyMSwgMHgyMiwgMHgyMywKLQkJMHgyNiwgMHgyNywgMHgzNSwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNiwgMHgzN30sCi0JLm9vYmZyZWUgPSB7IHsweDA4LCAweDA5fSB9CisJCSAgIDB4NSwgMHgxLCAweDIsIDB4MywgMHg2LCAweDcsIDB4MTUsIDB4MTEsCisJCSAgIDB4MTIsIDB4MTMsIDB4MTYsIDB4MTcsIDB4MjUsIDB4MjEsIDB4MjIsIDB4MjMsCisJCSAgIDB4MjYsIDB4MjcsIDB4MzUsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzYsIDB4Mzd9LAorCS5vb2JmcmVlID0ge3sweDA4LCAweDA5fX0KIH07CiAKLXN0YXRpYyBpbnQKLXNoYXJwc2xfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvKiBtdGQpCitzdGF0aWMgaW50IHNoYXJwc2xfbmFuZF9kZXZfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCiB7CiAJcmV0dXJuICEoKHJlYWRiKEZMQVNIQ1RMKSAmIEZMUllCWSkgPT0gMCk7CiB9CiAKLXN0YXRpYyB2b2lkCi1zaGFycHNsX25hbmRfZW5hYmxlX2h3ZWNjKHN0cnVjdCBtdGRfaW5mbyogbXRkLCBpbnQgbW9kZSkKK3N0YXRpYyB2b2lkIHNoYXJwc2xfbmFuZF9lbmFibGVfaHdlY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKQogewotCXdyaXRlYigwICxFQ0NDTFJSKTsKKwl3cml0ZWIoMCwgRUNDQ0xSUik7CiB9CiAKLXN0YXRpYyBpbnQKLXNoYXJwc2xfbmFuZF9jYWxjdWxhdGVfZWNjKHN0cnVjdCBtdGRfaW5mbyogbXRkLCBjb25zdCB1X2NoYXIqIGRhdCwKLQkJCQl1X2NoYXIqIGVjY19jb2RlKQorc3RhdGljIGludCBzaGFycHNsX25hbmRfY2FsY3VsYXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICogZGF0LCB1X2NoYXIgKiBlY2NfY29kZSkKIHsKIAllY2NfY29kZVswXSA9IH5yZWFkYihFQ0NMUFVCKTsKIAllY2NfY29kZVsxXSA9IH5yZWFkYihFQ0NMUExCKTsKQEAgLTE1NCw0NyArMTQyLDQ0IEBACiAJcmV0dXJuIHJlYWRiKEVDQ0NOVFIpICE9IDA7CiB9CiAKLQogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogY29uc3QgY2hhciAqcGFydF9wcm9iZXNbXSA9IHsgImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwogI2VuZGlmCiAKLQogLyoKICAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQogICovCi1pbnQgX19pbml0Ci1zaGFycHNsX25hbmRfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc2hhcnBzbF9uYW5kX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzOwotCXN0cnVjdCBtdGRfcGFydGl0aW9uKiBzaGFycHNsX3BhcnRpdGlvbl9pbmZvOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpzaGFycHNsX3BhcnRpdGlvbl9pbmZvOwogCWludCBlcnIgPSAwOwogCiAJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBNVEQgZGV2aWNlIHN0cnVjdHVyZSBhbmQgcHJpdmF0ZSBkYXRhICovCi0Jc2hhcnBzbF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXNoYXJwc2xfbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzaGFycHNsX210ZCkgewotCQlwcmludGsgKCJVbmFibGUgdG8gYWxsb2NhdGUgU2hhcnBTTCBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIFNoYXJwU0wgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCiAJc2hhcnBzbF9pb19iYXNlID0gaW9yZW1hcChzaGFycHNsX3BoeXNfYmFzZSwgMHgxMDAwKTsKLQlpZighc2hhcnBzbF9pb19iYXNlKXsKKwlpZiAoIXNoYXJwc2xfaW9fYmFzZSkgewogCQlwcmludGsoImlvcmVtYXAgdG8gYWNjZXNzIFNoYXJwIFNMIE5BTkQgY2hpcCBmYWlsZWRcbiIpOwogCQlrZnJlZShzaGFycHNsX210ZCk7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoJnNoYXJwc2xfbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnNoYXJwc2xfbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSBzaGFycHNsX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCgoY2hhciAqKSB0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCW1lbXNldChzaGFycHNsX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAlzaGFycHNsX210ZC0+cHJpdiA9IHRoaXM7CisJc2hhcnBzbF9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIFBYQSBpbml0aWFsaXplCkBAIC0yMDUsMjMgKzE5MCwyNSBAQAogCXRoaXMtPklPX0FERFJfUiA9IEZMQVNISU87CiAJdGhpcy0+SU9fQUREUl9XID0gRkxBU0hJTzsKIAkvKiBTZXQgYWRkcmVzcyBvZiBoYXJkd2FyZSBjb250cm9sIGZ1bmN0aW9uICovCi0JdGhpcy0+aHdjb250cm9sID0gc2hhcnBzbF9uYW5kX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHNoYXJwc2xfbmFuZF9od2NvbnRyb2w7CiAJdGhpcy0+ZGV2X3JlYWR5ID0gc2hhcnBzbF9uYW5kX2Rldl9yZWFkeTsKIAkvKiAxNSB1cyBjb21tYW5kIGRlbGF5IHRpbWUgKi8KIAl0aGlzLT5jaGlwX2RlbGF5ID0gMTU7CiAJLyogc2V0IGVjY21vZGUgdXNpbmcgaGFyZHdhcmUgRUNDICovCi0JdGhpcy0+ZWNjbW9kZSA9IE5BTkRfRUNDX0hXM18yNTY7CisJdGhpcy0+ZWNjLm1vZGUgPSBOQU5EX0VDQ19IVzsKKwl0aGlzLT5lY2Muc2l6ZSA9IDI1NjsKKwl0aGlzLT5lY2MuYnl0ZXMgPSAzOwogCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAmc2hhcnBzbF9iYnQ7CiAJaWYgKG1hY2hpbmVfaXNfYWtpdGEoKSB8fCBtYWNoaW5lX2lzX2JvcnpvaSgpKSB7CiAJCXRoaXMtPmJhZGJsb2NrX3BhdHRlcm4gPSAmc2hhcnBzbF9ha2l0YV9iYnQ7Ci0JCXRoaXMtPmF1dG9vb2IgPSAmYWtpdGFfb29iaW5mbzsKKwkJdGhpcy0+ZWNjLmxheW91dCA9ICZha2l0YV9vb2JpbmZvOwogCX0KLQl0aGlzLT5lbmFibGVfaHdlY2MgPSBzaGFycHNsX25hbmRfZW5hYmxlX2h3ZWNjOwotCXRoaXMtPmNhbGN1bGF0ZV9lY2MgPSBzaGFycHNsX25hbmRfY2FsY3VsYXRlX2VjYzsKLQl0aGlzLT5jb3JyZWN0X2RhdGEgPSBuYW5kX2NvcnJlY3RfZGF0YTsKKwl0aGlzLT5lY2MuaHdjdGwgPSBzaGFycHNsX25hbmRfZW5hYmxlX2h3ZWNjOworCXRoaXMtPmVjYy5jYWxjdWxhdGUgPSBzaGFycHNsX25hbmRfY2FsY3VsYXRlX2VjYzsKKwl0aGlzLT5lY2MuY29ycmVjdCA9IG5hbmRfY29ycmVjdF9kYXRhOwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JZXJyPW5hbmRfc2NhbihzaGFycHNsX210ZCwxKTsKKwllcnIgPSBuYW5kX3NjYW4oc2hhcnBzbF9tdGQsIDEpOwogCWlmIChlcnIpIHsKIAkJaW91bm1hcChzaGFycHNsX2lvX2Jhc2UpOwogCQlrZnJlZShzaGFycHNsX210ZCk7CkBAIC0yMzAsMjQgKzIxNywyMyBAQAogCiAJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KIAlzaGFycHNsX210ZC0+bmFtZSA9ICJzaGFycHNsLW5hbmQiOwotCW5yX3BhcnRpdGlvbnMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhzaGFycHNsX210ZCwgcGFydF9wcm9iZXMsCi0JCQkJCQkmc2hhcnBzbF9wYXJ0aXRpb25faW5mbywgMCk7CisJbnJfcGFydGl0aW9ucyA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKHNoYXJwc2xfbXRkLCBwYXJ0X3Byb2JlcywgJnNoYXJwc2xfcGFydGl0aW9uX2luZm8sIDApOwogCiAJaWYgKG5yX3BhcnRpdGlvbnMgPD0gMCkgewogCQlucl9wYXJ0aXRpb25zID0gREVGQVVMVF9OVU1fUEFSVElUSU9OUzsKIAkJc2hhcnBzbF9wYXJ0aXRpb25faW5mbyA9IHNoYXJwc2xfbmFuZF9kZWZhdWx0X3BhcnRpdGlvbl9pbmZvOwogCQlpZiAobWFjaGluZV9pc19wb29kbGUoKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTMwICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSAyMiAqIDEwMjQgKiAxMDI0OwogCQl9IGVsc2UgaWYgKG1hY2hpbmVfaXNfY29yZ2koKSB8fCBtYWNoaW5lX2lzX3NoZXBoZXJkKCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT0yNSAqIDEwMjQgKiAxMDI0OworCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplID0gMjUgKiAxMDI0ICogMTAyNDsKIAkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX2h1c2t5KCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01MyAqIDEwMjQgKiAxMDI0OworCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplID0gNTMgKiAxMDI0ICogMTAyNDsKIAkJfSBlbHNlIGlmIChtYWNoaW5lX2lzX3NwaXR6KCkpIHsKLQkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZT01ICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSA1ICogMTAyNCAqIDEwMjQ7CiAJCX0gZWxzZSBpZiAobWFjaGluZV9pc19ha2l0YSgpKSB7Ci0JCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemU9NTggKiAxMDI0ICogMTAyNDsKKwkJCXNoYXJwc2xfcGFydGl0aW9uX2luZm9bMV0uc2l6ZSA9IDU4ICogMTAyNCAqIDEwMjQ7CiAJCX0gZWxzZSBpZiAobWFjaGluZV9pc19ib3J6b2koKSkgewotCQkJc2hhcnBzbF9wYXJ0aXRpb25faW5mb1sxXS5zaXplPTMyICogMTAyNCAqIDEwMjQ7CisJCQlzaGFycHNsX3BhcnRpdGlvbl9pbmZvWzFdLnNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogCQl9CiAJfQogCkBAIC0yNjEsMTUgKzI0NywxNSBAQAogCS8qIFJldHVybiBoYXBweSAqLwogCXJldHVybiAwOwogfQorCiBtb2R1bGVfaW5pdChzaGFycHNsX25hbmRfaW5pdCk7CiAKIC8qCiAgKiBDbGVhbiB1cCByb3V0aW5lCiAgKi8KLSNpZmRlZiBNT0RVTEUKIHN0YXRpYyB2b2lkIF9fZXhpdCBzaGFycHNsX25hbmRfY2xlYW51cCh2b2lkKQogewotCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAmc2hhcnBzbF9tdGRbMV07CisJc3RydWN0IG5hbmRfY2hpcCAqdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopJnNoYXJwc2xfbXRkWzFdOwogCiAJLyogUmVsZWFzZSByZXNvdXJjZXMsIHVucmVnaXN0ZXIgZGV2aWNlICovCiAJbmFuZF9yZWxlYXNlKHNoYXJwc2xfbXRkKTsKQEAgLTI3OSw4ICsyNjUsOCBAQAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCiAJa2ZyZWUoc2hhcnBzbF9tdGQpOwogfQorCiBtb2R1bGVfZXhpdChzaGFycHNsX25hbmRfY2xlYW51cCk7Ci0jZW5kaWYKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiUmljaGFyZCBQdXJkaWUgPHJwdXJkaWVAcnBzeXMubmV0PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zcGlhLmMgYi9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYwppbmRleCA5Y2YxY2U3Li4xZjZkNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3NwaWEuYwpAQCAtMzksMTYgKzM5LDE2IEBACiAgKi8KICNkZWZpbmUgU1BJQV9JT19CQVNFCTB4ZDAwMDAwMDAJLyogU3RhcnQgb2YgRVA3MjEyIElPIGFkZHJlc3Mgc3BhY2UgKi8KICNkZWZpbmUgU1BJQV9GSU9fQkFTRQkweGYwMDAwMDAwCS8qIEFkZHJlc3Mgd2hlcmUgZmxhc2ggaXMgbWFwcGVkICovCi0jZGVmaW5lIFNQSUFfUEVEUgkweDAwODAJCS8qCi0JCQkJCSAqIElPIG9mZnNldCB0byBQb3J0IEUgZGF0YSByZWdpc3RlcgotCQkJCQkgKiB3aGVyZSB0aGUgQ0xFLCBBTEUgYW5kIE5DRSBwaW5zCi0JCQkJCSAqIGFyZSB3aXJlZCB0by4KLQkJCQkJICovCi0jZGVmaW5lIFNQSUFfUEVERFIJMHgwMGMwCQkvKgotCQkJCQkgKiBJTyBvZmZzZXQgdG8gUG9ydCBFIGRhdGEgZGlyZWN0aW9uCi0JCQkJCSAqIHJlZ2lzdGVyIHNvIHdlIGNhbiBjb250cm9sIHRoZSBJTwotCQkJCQkgKiBsaW5lcy4KLQkJCQkJICovCisjZGVmaW5lIFNQSUFfUEVEUgkweDAwODAJLyoKKwkJCQkgKiBJTyBvZmZzZXQgdG8gUG9ydCBFIGRhdGEgcmVnaXN0ZXIKKwkJCQkgKiB3aGVyZSB0aGUgQ0xFLCBBTEUgYW5kIE5DRSBwaW5zCisJCQkJICogYXJlIHdpcmVkIHRvLgorCQkJCSAqLworI2RlZmluZSBTUElBX1BFRERSCTB4MDBjMAkvKgorCQkJCSAqIElPIG9mZnNldCB0byBQb3J0IEUgZGF0YSBkaXJlY3Rpb24KKwkJCQkgKiByZWdpc3RlciBzbyB3ZSBjYW4gY29udHJvbCB0aGUgSU8KKwkJCQkgKiBsaW5lcy4KKwkJCQkgKi8KIAogLyoKICAqIE1vZHVsZSBzdHVmZgpAQCAtNjksNzkgKzY5LDg0IEBACiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBwYXJ0aXRpb25faW5mb1tdID0gewogCXsKLQkJLm5hbWUJPSAiU1BJQSBmbGFzaCBwYXJ0aXRpb24gMSIsCi0JCS5vZmZzZXQJPSAwLAotCQkuc2l6ZQk9IDIqMTAyNCoxMDI0Ci0JfSwKKwkgLm5hbWUgPSAiU1BJQSBmbGFzaCBwYXJ0aXRpb24gMSIsCisJIC5vZmZzZXQgPSAwLAorCSAuc2l6ZSA9IDIgKiAxMDI0ICogMTAyNH0sCiAJewotCQkubmFtZQk9ICJTUElBIGZsYXNoIHBhcnRpdGlvbiAyIiwKLQkJLm9mZnNldAk9IDIqMTAyNCoxMDI0LAotCQkuc2l6ZQk9IDYqMTAyNCoxMDI0Ci0JfQorCSAubmFtZSA9ICJTUElBIGZsYXNoIHBhcnRpdGlvbiAyIiwKKwkgLm9mZnNldCA9IDIgKiAxMDI0ICogMTAyNCwKKwkgLnNpemUgPSA2ICogMTAyNCAqIDEwMjR9CiB9OwotI2RlZmluZSBOVU1fUEFSVElUSU9OUyAyCiAKKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMgogCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKLSovCi1zdGF0aWMgdm9pZCBzcGlhX2h3Y29udHJvbChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCl7CisgKgorICoJY3RybDoKKyAqCU5BTkRfQ05FOiBiaXQgMCAtPiBiaXQgMgorICoJTkFORF9DTEU6IGJpdCAxIC0+IGJpdCAwCisgKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEKKyAqLworc3RhdGljIHZvaWQgc3BpYV9od2NvbnRyb2woc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpCit7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotICAgIHN3aXRjaChjbWQpeworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl2b2lkIF9faW9tZW0gKmFkZHIgPSBzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHI7CisJCXVuc2lnbmVkIGNoYXIgYml0czsKIAotCWNhc2UgTkFORF9DVExfU0VUQ0xFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSB8PSAgMHgwMTsgYnJlYWs7Ci0JY2FzZSBOQU5EX0NUTF9DTFJDTEU6ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkcikpICY9IH4weDAxOyBicmVhazsKKwkJYml0cyA9IChjdHJsICYgTkFORF9DTkUpIDw8IDI7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0NMRSB8IE5BTkRfQUxFKSA+PiAxOworCQl3cml0ZWIoKHJlYWRiKGFkZHIpICYgfjB4NykgfCBiaXRzLCBhZGRyKTsKKwl9CiAKLQljYXNlIE5BTkRfQ1RMX1NFVEFMRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoc3BpYV9pb19iYXNlICsgc3BpYV9wZWRyKSkgfD0gIDB4MDI7IGJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSQUxFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSAmPSB+MHgwMjsgYnJlYWs7Ci0KLQljYXNlIE5BTkRfQ1RMX1NFVE5DRTogKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoc3BpYV9pb19iYXNlICsgc3BpYV9wZWRyKSkgJj0gfjB4MDQ7IGJyZWFrOwotCWNhc2UgTkFORF9DVExfQ0xSTkNFOiAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZHIpKSB8PSAgMHgwNDsgYnJlYWs7Ci0gICAgfQorCWlmIChjbWQgIT0gTkFORF9DTURfTk9ORSkKKwkJd3JpdGViKGNtZCwgY2hpcC0+SU9fQUREUl9XKTsKIH0KIAogLyoKICAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQogICovCi1pbnQgX19pbml0IHNwaWFfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNwaWFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CiAKIAkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIE1URCBkZXZpY2Ugc3RydWN0dXJlIGFuZCBwcml2YXRlIGRhdGEgKi8KLQlzcGlhX210ZCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mIChzdHJ1Y3QgbmFuZF9jaGlwKSwKLQkJCQlHRlBfS0VSTkVMKTsKKwlzcGlhX210ZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCksIEdGUF9LRVJORUwpOwogCWlmICghc3BpYV9tdGQpIHsKLQkJcHJpbnRrICgiVW5hYmxlIHRvIGFsbG9jYXRlIFNQSUEgTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBTUElBIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCi0JdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopICgmc3BpYV9tdGRbMV0pOworCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSgmc3BpYV9tdGRbMV0pOwogCiAJLyogSW5pdGlhbGl6ZSBzdHJ1Y3R1cmVzICovCi0JbWVtc2V0KChjaGFyICopIHNwaWFfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7Ci0JbWVtc2V0KChjaGFyICopIHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisJbWVtc2V0KHNwaWFfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CiAKIAkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLwogCXNwaWFfbXRkLT5wcml2ID0gdGhpczsKKwlzcGlhX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogU2V0IEdQSU8gUG9ydCBFIGNvbnRyb2wgcmVnaXN0ZXIgc28gdGhhdCB0aGUgcGlucyBhcmUgY29uZmlndXJlZAogCSAqIHRvIGJlIG91dHB1dHMgZm9yIGNvbnRyb2xsaW5nIHRoZSBOQU5EIGZsYXNoLgogCSAqLwotCSgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKHNwaWFfaW9fYmFzZSArIHNwaWFfcGVkZHIpKSA9IDB4MDc7CisJKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKShzcGlhX2lvX2Jhc2UgKyBzcGlhX3BlZGRyKSkgPSAweDA3OwogCiAJLyogU2V0IGFkZHJlc3Mgb2YgTkFORCBJTyBsaW5lcyAqLwotCXRoaXMtPklPX0FERFJfUiA9ICh2b2lkIF9faW9tZW0gKikgc3BpYV9maW9fYmFzZTsKLQl0aGlzLT5JT19BRERSX1cgPSAodm9pZCBfX2lvbWVtICopIHNwaWFfZmlvX2Jhc2U7CisJdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgX19pb21lbSAqKXNwaWFfZmlvX2Jhc2U7CisJdGhpcy0+SU9fQUREUl9XID0gKHZvaWQgX19pb21lbSAqKXNwaWFfZmlvX2Jhc2U7CiAJLyogU2V0IGFkZHJlc3Mgb2YgaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbiAqLwotCXRoaXMtPmh3Y29udHJvbCA9IHNwaWFfaHdjb250cm9sOworCXRoaXMtPmNtZF9jdHJsID0gc3BpYV9od2NvbnRyb2w7CiAJLyogMTUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDE1OwogCiAJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCi0JaWYgKG5hbmRfc2NhbiAoc3BpYV9tdGQsIDEpKSB7Ci0JCWtmcmVlIChzcGlhX210ZCk7CisJaWYgKG5hbmRfc2NhbihzcGlhX210ZCwgMSkpIHsKKwkJa2ZyZWUoc3BpYV9tdGQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTUxLDIyICsxNTYsMjIgQEAKIAkvKiBSZXR1cm4gaGFwcHkgKi8KIAlyZXR1cm4gMDsKIH0KKwogbW9kdWxlX2luaXQoc3BpYV9pbml0KTsKIAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgX19leGl0IHNwaWFfY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBzcGlhX2NsZWFudXAodm9pZCkKIHsKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UgKHNwaWFfbXRkKTsKKwluYW5kX3JlbGVhc2Uoc3BpYV9tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAoc3BpYV9tdGQpOworCWtmcmVlKHNwaWFfbXRkKTsKIH0KKwogbW9kdWxlX2V4aXQoc3BpYV9jbGVhbnVwKTsKLSNlbmRpZgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC90b3RvLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYwppbmRleCA3NjA5YzQzLi5mOWUyZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3RvdG8uYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGFzbS9hcmNoLW9tYXAxNTEwL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCisjZGVmaW5lIENPTkZJR19OQU5EX1dPUktBUk9VTkQgMQorCiAvKgogICogTVREIHN0cnVjdHVyZSBmb3IgVE9UTyBib2FyZAogICovCkBAIC0zOSwyNSArNDEsNiBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RvX2lvX2Jhc2UgPSBPTUFQX0ZMQVNIXzFfQkFTRTsKIAotI2RlZmluZSBDT05GSUdfTkFORF9XT1JLQVJPVU5EIDEKLQotI2RlZmluZSBOQU5EX05DRSAweDQwMDAKLSNkZWZpbmUgTkFORF9DTEUgMHgxMDAwCi0jZGVmaW5lIE5BTkRfQUxFIDB4MDAwMgotI2RlZmluZSBOQU5EX01BU0sgKE5BTkRfQ0xFIHwgTkFORF9BTEUgfCBOQU5EX05DRSkKLQotI2RlZmluZSBUX05BTkRfQ1RMX0NMUkFMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQUxFLCAwKQotI2RlZmluZSBUX05BTkRfQ1RMX1NFVEFMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQUxFLCBOQU5EX0FMRSkKLSNpZmRlZiBDT05GSUdfTkFORF9XT1JLQVJPVU5EICAgICAvKiAic29tZSIgZGV2IGJvYXJkcyBidXN0ZWQsIGJsdWUgd2lyZWQgdG8gcnRzMiA6KCAqLwotI2RlZmluZSBUX05BTkRfQ1RMX0NMUkNMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQ0xFLCAwKTsgcnRzMnNldG91dCgyLCAyKQotI2RlZmluZSBUX05BTkRfQ1RMX1NFVENMRShpb2IpICBncGlvc2V0b3V0KE5BTkRfQ0xFLCBOQU5EX0NMRSk7IHJ0czJzZXRvdXQoMiwgMCkKLSNlbHNlCi0jZGVmaW5lIFRfTkFORF9DVExfQ0xSQ0xFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9DTEUsIDApCi0jZGVmaW5lIFRfTkFORF9DVExfU0VUQ0xFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9DTEUsIE5BTkRfQ0xFKQotI2VuZGlmCi0jZGVmaW5lIFRfTkFORF9DVExfU0VUTkNFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9OQ0UsIDApCi0jZGVmaW5lIFRfTkFORF9DVExfQ0xSTkNFKGlvYikgIGdwaW9zZXRvdXQoTkFORF9OQ0UsIE5BTkRfTkNFKQotCiAvKgogICogRGVmaW5lIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZXMKICAqLwpAQCAtOTEsOTEgKzc0LDExMCBAQAogCiAjZGVmaW5lIE5VTV9QQVJUSVRJT05TMzJNIDMKICNkZWZpbmUgTlVNX1BBUlRJVElPTlM2NE0gNAorCiAvKgogICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKLSovCi0KLXN0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKQorICoKKyAqCWN0cmw6CisgKglOQU5EX05DRTogYml0IDAgLT4gYml0IDE0ICgweDQwMDApCisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEyICgweDEwMDApCisgKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDEgICgweDAwMDIpCisgKi8KK3N0YXRpYyB2b2lkIHRvdG9faHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLAorCQkJICAgdW5zaWduZWQgaW50IGN0cmwpCiB7CisJc3RydWN0IG5hbmRfY2hpcCAqY2hpcCA9IG10ZC0+cHJpdjsKIAotCXVkZWxheSgxKTsgLyogaG9wZWZ1bGx5IGVub3VnaCB0aW1lIGZvciB0YyBtYWtlIHByb2NlZGluZyB3cml0ZSB0byBjbGVhciAqLwotCXN3aXRjaChjbWQpeworCWlmIChjdHJsICYgTkFORF9DVFJMX0NIQU5HRSkgeworCQl1bnNpZ25lZCBsb25nIGJpdHM7CiAKLQkJY2FzZSBOQU5EX0NUTF9TRVRDTEU6IFRfTkFORF9DVExfU0VUQ0xFKGNtZCk7IGJyZWFrOwotCQljYXNlIE5BTkRfQ1RMX0NMUkNMRTogVF9OQU5EX0NUTF9DTFJDTEUoY21kKTsgYnJlYWs7CisJCS8qIGhvcGVmdWxseSBlbm91Z2ggdGltZSBmb3IgdGMgbWFrZSBwcm9jZWRpbmcgd3JpdGUgdG8gY2xlYXIgKi8KKwkJdWRlbGF5KDEpOwogCi0JCWNhc2UgTkFORF9DVExfU0VUQUxFOiBUX05BTkRfQ1RMX1NFVEFMRShjbWQpOyBicmVhazsKLQkJY2FzZSBOQU5EX0NUTF9DTFJBTEU6IFRfTkFORF9DVExfQ0xSQUxFKGNtZCk7IGJyZWFrOworCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpIDw8IDE0OworCQliaXRzIHw9IChjdHJsICYgTkFORF9DTEUpIDw8IDEyOworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDE7CiAKLQkJY2FzZSBOQU5EX0NUTF9TRVROQ0U6IFRfTkFORF9DVExfU0VUTkNFKGNtZCk7IGJyZWFrOwotCQljYXNlIE5BTkRfQ1RMX0NMUk5DRTogVF9OQU5EX0NUTF9DTFJOQ0UoY21kKTsgYnJlYWs7Cisjd2FybmluZyBXaWxkIGd1ZXNzIGFzIGdwaW9zZXRvdXQoKSBpcyBub3doZXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBzb3VyY2UgLSB0Z2x4CisJCWdwaW9zZXRvdXQoMHg1MDAyLCBiaXRzKTsKKworI2lmZGVmIENPTkZJR19OQU5EX1dPUktBUk9VTkQKKwkJLyogInNvbWUiIGRldiBib2FyZHMgYnVzdGVkLCBibHVlIHdpcmVkIHRvIHJ0czIgOiggKi8KKwkJcnRzMnNldG91dCgyLCAoY3RybCAmIE5BTkRfQ0xFKSA8PCAxKTsKKyNlbmRpZgorCQkvKiBhbGxvdyB0aW1lIHRvIGVuc3VyZSBncGlvIHN0YXRlIHRvIG92ZXIgdGFrZSBtZW1vcnkgd3JpdGUgKi8KKwkJdWRlbGF5KDEpOwogCX0KLQl1ZGVsYXkoMSk7IC8qIGFsbG93IHRpbWUgdG8gZW5zdXJlIGdwaW8gc3RhdGUgdG8gb3ZlciB0YWtlIG1lbW9yeSB3cml0ZSAqLworCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOwogfQogCiAvKgogICogTWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lCiAgKi8KLWludCBfX2luaXQgdG90b19pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgdG90b19pbml0KHZvaWQpCiB7CiAJc3RydWN0IG5hbmRfY2hpcCAqdGhpczsKIAlpbnQgZXJyID0gMDsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLwotCXRvdG9fbXRkID0ga21hbGxvYyAoc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykgKyBzaXplb2YgKHN0cnVjdCBuYW5kX2NoaXApLAotCQkJCUdGUF9LRVJORUwpOworCXRvdG9fbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSArIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0b3RvX210ZCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIGFsbG9jYXRlIHRvdG8gTkFORCBNVEQgZGV2aWNlIHN0cnVjdHVyZS5cbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgdG90byBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KIAogCS8qIEdldCBwb2ludGVyIHRvIHByaXZhdGUgZGF0YSAqLwotCXRoaXMgPSAoc3RydWN0IG5hbmRfY2hpcCAqKSAoJnRvdG9fbXRkWzFdKTsKKwl0aGlzID0gKHN0cnVjdCBuYW5kX2NoaXAgKikoJnRvdG9fbXRkWzFdKTsKIAogCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLwotCW1lbXNldCgoY2hhciAqKSB0b3RvX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOwotCW1lbXNldCgoY2hhciAqKSB0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOworCW1lbXNldCh0b3RvX210ZCwgMCwgc2l6ZW9mKHN0cnVjdCBtdGRfaW5mbykpOworCW1lbXNldCh0aGlzLCAwLCBzaXplb2Yoc3RydWN0IG5hbmRfY2hpcCkpOwogCiAJLyogTGluayB0aGUgcHJpdmF0ZSBkYXRhIHdpdGggdGhlIE1URCBzdHJ1Y3R1cmUgKi8KIAl0b3RvX210ZC0+cHJpdiA9IHRoaXM7CisJdG90b19tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKiBTZXQgYWRkcmVzcyBvZiBOQU5EIElPIGxpbmVzICovCiAJdGhpcy0+SU9fQUREUl9SID0gdG90b19pb19iYXNlOwogCXRoaXMtPklPX0FERFJfVyA9IHRvdG9faW9fYmFzZTsKLQl0aGlzLT5od2NvbnRyb2wgPSB0b3RvX2h3Y29udHJvbDsKKwl0aGlzLT5jbWRfY3RybCA9IHRvdG9faHdjb250cm9sOwogCXRoaXMtPmRldl9yZWFkeSA9IE5VTEw7CiAJLyogMjUgdXMgY29tbWFuZCBkZWxheSB0aW1lICovCiAJdGhpcy0+Y2hpcF9kZWxheSA9IDMwOwotCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOworCXRoaXMtPmVjYy5tb2RlID0gTkFORF9FQ0NfU09GVDsKIAotICAgICAgICAvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAobmFuZF9zY2FuICh0b3RvX210ZCwgMSkpIHsKKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwlpZiAobmFuZF9zY2FuKHRvdG9fbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X210ZDsKIAl9CiAKIAkvKiBSZWdpc3RlciB0aGUgcGFydGl0aW9ucyAqLwotCXN3aXRjaCh0b3RvX210ZC0+c2l6ZSl7Ci0JCWNhc2UgU1pfNjRNOiBhZGRfbXRkX3BhcnRpdGlvbnModG90b19tdGQsIHBhcnRpdGlvbl9pbmZvNjRNLCBOVU1fUEFSVElUSU9OUzY0TSk7IGJyZWFrOwotCQljYXNlIFNaXzMyTTogYWRkX210ZF9wYXJ0aXRpb25zKHRvdG9fbXRkLCBwYXJ0aXRpb25faW5mbzMyTSwgTlVNX1BBUlRJVElPTlMzMk0pOyBicmVhazsKLQkJZGVmYXVsdDogewotCQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIlVuc3VwcG9ydGVkIE5hbmQgZGV2aWNlXG4iKTsKKwlzd2l0Y2ggKHRvdG9fbXRkLT5zaXplKSB7CisJY2FzZSBTWl82NE06CisJCWFkZF9tdGRfcGFydGl0aW9ucyh0b3RvX210ZCwgcGFydGl0aW9uX2luZm82NE0sIE5VTV9QQVJUSVRJT05TNjRNKTsKKwkJYnJlYWs7CisJY2FzZSBTWl8zMk06CisJCWFkZF9tdGRfcGFydGl0aW9ucyh0b3RvX210ZCwgcGFydGl0aW9uX2luZm8zMk0sIE5VTV9QQVJUSVRJT05TMzJNKTsKKwkJYnJlYWs7CisJZGVmYXVsdDp7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbnN1cHBvcnRlZCBOYW5kIGRldmljZVxuIik7CiAJCQllcnIgPSAtRU5YSU87CiAJCQlnb3RvIG91dF9idWY7CiAJCX0KIAl9CiAKLSAgICAJZ3Bpb3Jlc2VydmUoTkFORF9NQVNLKTsgIC8qIGNsYWltIG91ciBncGlvcyAqLwotICAgIAlhcmNoZmxhc2h3cCgwLDApOwkgLyogb3BlbiB1cCBmbGFzaCBmb3Igd3JpdGluZyAqLworCWdwaW9yZXNlcnZlKE5BTkRfTUFTSyk7CS8qIGNsYWltIG91ciBncGlvcyAqLworCWFyY2hmbGFzaHdwKDAsIDApOwkvKiBvcGVuIHVwIGZsYXNoIGZvciB3cml0aW5nICovCiAKIAlnb3RvIG91dDsKIAotb3V0X2J1ZjoKLQlrZnJlZSAodGhpcy0+ZGF0YV9idWYpOwotb3V0X210ZDoKLQlrZnJlZSAodG90b19tdGQpOwotb3V0OgorIG91dF9tdGQ6CisJa2ZyZWUodG90b19tdGQpOworIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xODQsMjAgKzE4NiwyMSBAQAogLyoKICAqIENsZWFuIHVwIHJvdXRpbmUKICAqLwotc3RhdGljIHZvaWQgX19leGl0IHRvdG9fY2xlYW51cCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3RvX2NsZWFudXAodm9pZCkKIHsKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KLQluYW5kX3JlbGVhc2UgKHRvdG9fbXRkKTsKKwluYW5kX3JlbGVhc2UodG90b19tdGQpOwogCiAJLyogRnJlZSB0aGUgTVREIGRldmljZSBzdHJ1Y3R1cmUgKi8KLQlrZnJlZSAodG90b19tdGQpOworCWtmcmVlKHRvdG9fbXRkKTsKIAogCS8qIHN0b3AgZmxhc2ggd3JpdGVzICovCi0JIGFyY2hmbGFzaHdwKDAsMSk7CisJYXJjaGZsYXNod3AoMCwgMSk7CiAKIAkvKiByZWxlYXNlIGdwaW9zIHRvIHN5c3RlbSAqLwotCSBncGlvcmVsZWFzZShOQU5EX01BU0spOworCWdwaW9yZWxlYXNlKE5BTkRfTUFTSyk7CiB9CisKIG1vZHVsZV9leGl0KHRvdG9fY2xlYW51cCk7CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvdHM3MjUwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjRiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL210ZC9uYW5kL3RzNzI1MC5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogZHJpdmVycy9tdGQvbmFuZC90czcyNTAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZWNobm9sb2dpYyBTeXN0ZW1zIChzdXBwb3J0QGVtYmVkZGVkQVJNLmNvbSkKKyAqCisgKiBEZXJpdmVkIGZyb20gZHJpdmVycy9tdGQvbmFuZC9lZGI3MzEyLmMKKyAqICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcml1cyBHcsO2Z2VyIChtYWdAc3lzZ28uZGUpCisgKgorICogRGVyaXZlZCBmcm9tIGRyaXZlcnMvbXRkL25hbmQvYXV0Y3B1MTIuYworICogICBDb3B5cmlnaHQgKGMpIDIwMDEgVGhvbWFzIEdsZWl4bmVyIChnbGVpeG5lckBhdXRyb25peC5kZSkKKyAqCisgKiAkSWQ6IHRzNzI1MC5jLHYgMS40IDIwMDQvMTIvMzAgMjI6MDI6MDcgam9mZiBFeHAgJAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogT3ZlcnZpZXc6CisgKiAgIFRoaXMgaXMgYSBkZXZpY2UgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBkZXZpY2UgZm91bmQgb24gdGhlCisgKiAgIFRTLTcyNTAgYm9hcmQgd2hpY2ggdXRpbGl6ZXMgYSBTYW1zdW5nIDMyIE1ieXRlIHBhcnQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKy8qCisgKiBNVEQgc3RydWN0dXJlIGZvciBUUzcyNTAgYm9hcmQKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqdHM3MjUwX210ZCA9IE5VTEw7CisKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKK3N0YXRpYyBjb25zdCBjaGFyICpwYXJ0X3Byb2Jlc1tdID0geyAiY21kbGluZXBhcnQiLCBOVUxMIH07CisKKyNkZWZpbmUgTlVNX1BBUlRJVElPTlMgMworCisvKgorICogRGVmaW5lIHN0YXRpYyBwYXJ0aXRpb25zIGZvciBmbGFzaCBkZXZpY2UKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHBhcnRpdGlvbl9pbmZvMzJbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJUUy1CT09UUk9NIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSAweDAwMDA0MDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIkxpbnV4IiwKKwkJLm9mZnNldAkJPSAweDAwMDA0MDAwLAorCQkuc2l6ZQkJPSAweDAxZDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlJlZEJvb3QiLAorCQkub2Zmc2V0CQk9IDB4MDFkMDQwMDAsCisJCS5zaXplCQk9IDB4MDAyZmMwMDAsCisJfSwKK307CisKKy8qCisgKiBEZWZpbmUgc3RhdGljIHBhcnRpdGlvbnMgZm9yIGZsYXNoIGRldmljZQorICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcGFydGl0aW9uX2luZm8xMjhbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJUUy1CT09UUk9NIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSAweDAwMDA0MDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIkxpbnV4IiwKKwkJLm9mZnNldAkJPSAweDAwMDA0MDAwLAorCQkuc2l6ZQkJPSAweDA3ZDAwMDAwLAorCX0sIHsKKwkJLm5hbWUJCT0gIlJlZEJvb3QiLAorCQkub2Zmc2V0CQk9IDB4MDdkMDQwMDAsCisJCS5zaXplCQk9IDB4MDAyZmMwMDAsCisJfSwKK307CisjZW5kaWYKKworCisvKgorICoJaGFyZHdhcmUgc3BlY2lmaWMgYWNjZXNzIHRvIGNvbnRyb2wtbGluZXMKKyAqCisgKgljdHJsOgorICoJTkFORF9OQ0U6IGJpdCAwIC0+IGJpdCAyCisgKglOQU5EX0NMRTogYml0IDEgLT4gYml0IDEKKyAqCU5BTkRfQUxFOiBiaXQgMiAtPiBiaXQgMAorICovCitzdGF0aWMgdm9pZCB0czcyNTBfaHdjb250cm9sKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgY3RybCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IFRTNzJYWF9OQU5EX0NPTlRST0xfVklSVF9CQVNFOworCQl1bnNpZ25lZCBjaGFyIGJpdHM7CisKKwkJYml0cyA9IChjdHJsICYgTkFORF9DTkUpIDw8IDI7CisJCWJpdHMgfD0gY3RybCAmIE5BTkRfQ0xFOworCQliaXRzIHw9IChjdHJsICYgTkFORF9BTEUpID4+IDI7CisKKwkJX19yYXdfd3JpdGViKChfX3Jhd19yZWFkYihhZGRyKSAmIH4weDcpIHwgYml0cywgYWRkcik7CisJfQorCisJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQorCQl3cml0ZWIoY21kLCBjaGlwLT5JT19BRERSX1cpOworfQorCisvKgorICoJcmVhZCBkZXZpY2UgcmVhZHkgcGluCisgKi8KK3N0YXRpYyBpbnQgdHM3MjUwX2RldmljZV9yZWFkeShzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGIoVFM3MlhYX05BTkRfQlVTWV9WSVJUX0JBU0UpICYgMHgyMDsKK30KKworLyoKKyAqIE1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZQorICovCitzdGF0aWMgaW50IF9faW5pdCB0czcyNTBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKnRoaXM7CisJY29uc3QgY2hhciAqcGFydF90eXBlID0gMDsKKwlpbnQgbXRkX3BhcnRzX25iID0gMDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbXRkX3BhcnRzID0gMDsKKworCWlmICghbWFjaGluZV9pc190czcyeHgoKSB8fCBib2FyZF9pc190czcyMDAoKSkKKwkJcmV0dXJuIC1FTlhJTzsKKworCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgTVREIGRldmljZSBzdHJ1Y3R1cmUgYW5kIHByaXZhdGUgZGF0YSAqLworCXRzNzI1MF9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRzNzI1MF9tdGQpIHsKKwkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgVFM3MjUwIE5BTkQgTVREIGRldmljZSBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogR2V0IHBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhICovCisJdGhpcyA9IChzdHJ1Y3QgbmFuZF9jaGlwICopKCZ0czcyNTBfbXRkWzFdKTsKKworCS8qIEluaXRpYWxpemUgc3RydWN0dXJlcyAqLworCW1lbXNldCh0czcyNTBfbXRkLCAwLCBzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSk7CisJbWVtc2V0KHRoaXMsIDAsIHNpemVvZihzdHJ1Y3QgbmFuZF9jaGlwKSk7CisKKwkvKiBMaW5rIHRoZSBwcml2YXRlIGRhdGEgd2l0aCB0aGUgTVREIHN0cnVjdHVyZSAqLworCXRzNzI1MF9tdGQtPnByaXYgPSB0aGlzOworCXRzNzI1MF9tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwkvKiBpbnNlcnQgY2FsbGJhY2tzICovCisJdGhpcy0+SU9fQUREUl9SID0gKHZvaWQgKilUUzcyWFhfTkFORF9EQVRBX1ZJUlRfQkFTRTsKKwl0aGlzLT5JT19BRERSX1cgPSAodm9pZCAqKVRTNzJYWF9OQU5EX0RBVEFfVklSVF9CQVNFOworCXRoaXMtPmNtZF9jdHJsID0gdHM3MjUwX2h3Y29udHJvbDsKKwl0aGlzLT5kZXZfcmVhZHkgPSB0czcyNTBfZGV2aWNlX3JlYWR5OworCXRoaXMtPmNoaXBfZGVsYXkgPSAxNTsKKwl0aGlzLT5lY2MubW9kZSA9IE5BTkRfRUNDX1NPRlQ7CisKKwlwcmludGsoIlNlYXJjaGluZyBmb3IgTkFORCBmbGFzaC4uLlxuIik7CisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCisJaWYgKG5hbmRfc2Nhbih0czcyNTBfbXRkLCAxKSkgeworCQlrZnJlZSh0czcyNTBfbXRkKTsKKwkJcmV0dXJuIC1FTlhJTzsKKwl9CisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisJdHM3MjUwX210ZC0+bmFtZSA9ICJ0czcyNTAtbmFuZCI7CisJbXRkX3BhcnRzX25iID0gcGFyc2VfbXRkX3BhcnRpdGlvbnModHM3MjUwX210ZCwgcGFydF9wcm9iZXMsICZtdGRfcGFydHMsIDApOworCWlmIChtdGRfcGFydHNfbmIgPiAwKQorCQlwYXJ0X3R5cGUgPSAiY29tbWFuZCBsaW5lIjsKKwllbHNlCisJCW10ZF9wYXJ0c19uYiA9IDA7CisjZW5kaWYKKwlpZiAobXRkX3BhcnRzX25iID09IDApIHsKKwkJbXRkX3BhcnRzID0gcGFydGl0aW9uX2luZm8zMjsKKwkJaWYgKHRzNzI1MF9tdGQtPnNpemUgPj0gKDEyOCAqIDB4MTAwMDAwKSkKKwkJCW10ZF9wYXJ0cyA9IHBhcnRpdGlvbl9pbmZvMTI4OworCQltdGRfcGFydHNfbmIgPSBOVU1fUEFSVElUSU9OUzsKKwkJcGFydF90eXBlID0gInN0YXRpYyI7CisJfQorCisJLyogUmVnaXN0ZXIgdGhlIHBhcnRpdGlvbnMgKi8KKwlwcmludGsoS0VSTl9OT1RJQ0UgIlVzaW5nICVzIHBhcnRpdGlvbiBkZWZpbml0aW9uXG4iLCBwYXJ0X3R5cGUpOworCWFkZF9tdGRfcGFydGl0aW9ucyh0czcyNTBfbXRkLCBtdGRfcGFydHMsIG10ZF9wYXJ0c19uYik7CisKKwkvKiBSZXR1cm4gaGFwcHkgKi8KKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQodHM3MjUwX2luaXQpOworCisvKgorICogQ2xlYW4gdXAgcm91dGluZQorICovCitzdGF0aWMgdm9pZCBfX2V4aXQgdHM3MjUwX2NsZWFudXAodm9pZCkKK3sKKwkvKiBVbnJlZ2lzdGVyIHRoZSBkZXZpY2UgKi8KKwlkZWxfbXRkX2RldmljZSh0czcyNTBfbXRkKTsKKworCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCisJa2ZyZWUodHM3MjUwX210ZCk7Cit9CisKK21vZHVsZV9leGl0KHRzNzI1MF9jbGVhbnVwKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiSmVzc2UgT2ZmIDxqb2ZmQGVtYmVkZGVkQVJNLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTVREIG1hcCBkcml2ZXIgZm9yIFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzI1MCBib2FyZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL25mdGxjb3JlLmMKaW5kZXggZDdjZDVmYS4uZGM3NTczNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmZ0bGNvcmUuYworKysgYi9kcml2ZXJzL210ZC9uZnRsY29yZS5jCkBAIC03MCw4ICs3MCw2IEBACiAJbmZ0bC0+bWJkLmRldm51bSA9IC0xOwogCW5mdGwtPm1iZC5ibGtzaXplID0gNTEyOwogCW5mdGwtPm1iZC50ciA9IHRyOwotCW1lbWNweSgmbmZ0bC0+b29iaW5mbywgJm10ZC0+b29iaW5mbywgc2l6ZW9mKHN0cnVjdCBuYW5kX29vYmluZm8pKTsKLQluZnRsLT5vb2JpbmZvLnVzZWVjYyA9IE1URF9OQU5ERUNDX1BMQUNFT05MWTsKIAogICAgICAgICBpZiAoTkZUTF9tb3VudChuZnRsKSA8IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiTkZUTDogY291bGQgbm90IG1vdW50IGRldmljZVxuIik7CkBAIC0xMzYsNiArMTM0LDY5IEBACiAJa2ZyZWUobmZ0bCk7CiB9CiAKKy8qCisgKiBSZWFkIG9vYiBkYXRhIGZyb20gZmxhc2gKKyAqLworaW50IG5mdGxfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgIHNpemVfdCAqcmV0bGVuLCB1aW50OF90ICpidWYpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmcyAmIChtdGQtPndyaXRlc2l6ZSAtIDEpOworCW9wcy5vb2JsZW4gPSBsZW47CisJb3BzLm9vYmJ1ZiA9IGJ1ZjsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMgJiB+KG10ZC0+d3JpdGVzaXplIC0gMSksICZvcHMpOworCSpyZXRsZW4gPSBvcHMucmV0bGVuOworCXJldHVybiByZXM7Cit9CisKKy8qCisgKiBXcml0ZSBvb2IgZGF0YSB0byBmbGFzaAorICovCitpbnQgbmZ0bF93cml0ZV9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmKQoreworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IHJlczsKKworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKwlvcHMub29ib2ZmcyA9IG9mZnMgJiAobXRkLT53cml0ZXNpemUgLSAxKTsKKwlvcHMub29ibGVuID0gbGVuOworCW9wcy5vb2JidWYgPSBidWY7CisJb3BzLmRhdGJ1ZiA9IE5VTEw7CisJb3BzLmxlbiA9IGxlbjsKKworCXJlcyA9IG10ZC0+d3JpdGVfb29iKG10ZCwgb2ZmcyAmIH4obXRkLT53cml0ZXNpemUgLSAxKSwgJm9wcyk7CisJKnJldGxlbiA9IG9wcy5yZXRsZW47CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFdyaXRlIGRhdGEgYW5kIG9vYiB0byBmbGFzaAorICovCitzdGF0aWMgaW50IG5mdGxfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzLCBzaXplX3QgbGVuLAorCQkgICAgICBzaXplX3QgKnJldGxlbiwgdWludDhfdCAqYnVmLCB1aW50OF90ICpvb2IpCit7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwlpbnQgcmVzOworCisJb3BzLm1vZGUgPSBNVERfT09CX1BMQUNFOworCW9wcy5vb2JvZmZzID0gb2ZmczsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5vb2JidWYgPSBvb2I7CisJb3BzLmRhdGJ1ZiA9IGJ1ZjsKKwlvcHMubGVuID0gbGVuOworCisJcmVzID0gbXRkLT53cml0ZV9vb2IobXRkLCBvZmZzICYgfihtdGQtPndyaXRlc2l6ZSAtIDEpLCAmb3BzKTsKKwkqcmV0bGVuID0gb3BzLnJldGxlbjsKKwlyZXR1cm4gcmVzOworfQorCiAjaWZkZWYgQ09ORklHX05GVExfUlcKIAogLyogQWN0dWFsIE5GVEwgYWNjZXNzIHJvdXRpbmVzICovCkBAIC0xODUsNiArMjQ2LDcgQEAKIAogc3RhdGljIHUxNiBORlRMX2ZvbGRjaGFpbiAoc3RydWN0IE5GVExyZWNvcmQgKm5mdGwsIHVuc2lnbmVkIHRoaXNWVUMsIHVuc2lnbmVkIHBlbmRpbmdibG9jayApCiB7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBuZnRsLT5tYmQubXRkOwogCXUxNiBCbG9ja01hcFtNQVhfU0VDVE9SU19QRVJfVU5JVF07CiAJdW5zaWduZWQgY2hhciBCbG9ja0xhc3RTdGF0ZVtNQVhfU0VDVE9SU19QRVJfVU5JVF07CiAJdW5zaWduZWQgY2hhciBCbG9ja0ZyZWVGb3VuZFtNQVhfU0VDVE9SU19QRVJfVU5JVF07CkBAIC0xOTQsNyArMjU2LDcgQEAKIAl1bnNpZ25lZCBpbnQgdGFyZ2V0RVVOOwogCXN0cnVjdCBuZnRsX29vYiBvb2I7CiAJaW50IGlucGxhY2UgPSAxOwotICAgICAgICBzaXplX3QgcmV0bGVuOworCXNpemVfdCByZXRsZW47CiAKIAltZW1zZXQoQmxvY2tNYXAsIDB4ZmYsIHNpemVvZihCbG9ja01hcCkpOwogCW1lbXNldChCbG9ja0ZyZWVGb3VuZCwgMCwgc2l6ZW9mKEJsb2NrRnJlZUZvdW5kKSk7CkBAIC0yMTAsMjEgKzI3MiwyMSBAQAogCS8qIFNjYW4gdG8gZmluZCB0aGUgRXJhc2UgVW5pdCB3aGljaCBob2xkcyB0aGUgYWN0dWFsIGRhdGEgZm9yIGVhY2gKIAkgICA1MTItYnl0ZSBibG9jayB3aXRoaW4gdGhlIENoYWluLgogCSovCi0gICAgICAgIHNpbGx5ID0gTUFYX0xPT1BTOworCXNpbGx5ID0gTUFYX0xPT1BTOwogCXRhcmdldEVVTiA9IEJMT0NLX05JTDsKIAl3aGlsZSAodGhpc0VVTiA8PSBuZnRsLT5sYXN0RVVOICkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMsIGZvbGRtYXJrOworCQl1bnNpZ25lZCBpbnQgc3RhdHVzLCBmb2xkbWFyazsKIAogCQl0YXJnZXRFVU4gPSB0aGlzRVVOOwogCQlmb3IgKGJsb2NrID0gMDsgYmxvY2sgPCBuZnRsLT5FcmFzZVNpemUgLyA1MTI7IGJsb2NrICsrKSB7Ci0JCQlNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLAotCQkJCSAgICAodGhpc0VVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyAoYmxvY2sgKiA1MTIpLAotCQkJCSAgICAxNiAsICZyZXRsZW4sIChjaGFyICopJm9vYik7CisJCQluZnRsX3JlYWRfb29iKG10ZCwgKHRoaXNFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsKKwkJCQkgICAgICAoYmxvY2sgKiA1MTIpLCAxNiAsICZyZXRsZW4sCisJCQkJICAgICAgKGNoYXIgKikmb29iKTsKIAkJCWlmIChibG9jayA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRtYXJrID0gb29iLnUuYy5Gb2xkTWFyayB8IG9vYi51LmMuRm9sZE1hcmsxOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9sZG1hcmsgPT0gRk9MRF9NQVJLX0lOX1BST0dSRVNTKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUcoTVREX0RFQlVHX0xFVkVMMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV3JpdGUgSW5oaWJpdGVkIG9uIEVVTiAlZFxuIiwgdGhpc0VVTik7CisJCQkJZm9sZG1hcmsgPSBvb2IudS5jLkZvbGRNYXJrIHwgb29iLnUuYy5Gb2xkTWFyazE7CisJCQkJaWYgKGZvbGRtYXJrID09IEZPTERfTUFSS19JTl9QUk9HUkVTUykgeworCQkJCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJCQkgICAgICAiV3JpdGUgSW5oaWJpdGVkIG9uIEVVTiAlZFxuIiwgdGhpc0VVTik7CiAJCQkJCWlucGxhY2UgPSAwOwogCQkJCX0gZWxzZSB7CiAJCQkJCS8qIFRoZXJlJ3Mgbm8gb3RoZXIgcmVhc29uIG5vdCB0byBkbyBpbnBsYWNlLApAQCAtMjMzLDcgKzI5NSw3IEBACiAJCQkJCWlucGxhY2UgPSAxOwogCQkJCX0KIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IG9vYi5iLlN0YXR1cyB8IG9vYi5iLlN0YXR1czE7CisJCQlzdGF0dXMgPSBvb2IuYi5TdGF0dXMgfCBvb2IuYi5TdGF0dXMxOwogCQkJQmxvY2tMYXN0U3RhdGVbYmxvY2tdID0gc3RhdHVzOwogCiAJCQlzd2l0Y2goc3RhdHVzKSB7CkBAIC0zMjgsMTUgKzM5MCwxNSBAQAogCQkJcmV0dXJuIEJMT0NLX05JTDsKIAkJfQogCX0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBXZSBwdXQgYSBmb2xkIG1hcmsgaW4gdGhlIGNoYWluIHdlIGFyZSBmb2xkaW5nIG9ubHkgaWYKLSAgICAgICAgICAgICAgIHdlIGZvbGQgaW4gcGxhY2UgdG8gaGVscCB0aGUgbW91bnQgY2hlY2sgY29kZS4gSWYgd2UgZG8KLSAgICAgICAgICAgICAgIG5vdCBmb2xkIGluIHBsYWNlLCBpdCBpcyBwb3NzaWJsZSB0byBmaW5kIHRoZSB2YWxpZAotICAgICAgICAgICAgICAgY2hhaW4gYnkgc2VsZWN0aW5nIHRoZSBsb25nZXIgb25lICovCi0gICAgICAgICAgICBvb2IudS5jLkZvbGRNYXJrID0gb29iLnUuYy5Gb2xkTWFyazEgPSBjcHVfdG9fbGUxNihGT0xEX01BUktfSU5fUFJPR1JFU1MpOwotICAgICAgICAgICAgb29iLnUuYy51bnVzZWQgPSAweGZmZmZmZmZmOwotICAgICAgICAgICAgTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsIChuZnRsLT5FcmFzZVNpemUgKiB0YXJnZXRFVU4pICsgMiAqIDUxMiArIDgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwotICAgICAgICB9CisJCS8qIFdlIHB1dCBhIGZvbGQgbWFyayBpbiB0aGUgY2hhaW4gd2UgYXJlIGZvbGRpbmcgb25seSBpZiB3ZQorICAgICAgICAgICAgICAgZm9sZCBpbiBwbGFjZSB0byBoZWxwIHRoZSBtb3VudCBjaGVjayBjb2RlLiBJZiB3ZSBkbyBub3QgZm9sZCBpbgorICAgICAgICAgICAgICAgcGxhY2UsIGl0IGlzIHBvc3NpYmxlIHRvIGZpbmQgdGhlIHZhbGlkIGNoYWluIGJ5IHNlbGVjdGluZyB0aGUKKyAgICAgICAgICAgICAgIGxvbmdlciBvbmUgKi8KKwkJb29iLnUuYy5Gb2xkTWFyayA9IG9vYi51LmMuRm9sZE1hcmsxID0gY3B1X3RvX2xlMTYoRk9MRF9NQVJLX0lOX1BST0dSRVNTKTsKKwkJb29iLnUuYy51bnVzZWQgPSAweGZmZmZmZmZmOworCQluZnRsX3dyaXRlX29vYihtdGQsIChuZnRsLT5FcmFzZVNpemUgKiB0YXJnZXRFVU4pICsgMiAqIDUxMiArIDgsCisJCQkgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCX0KIAogCS8qIE9LLiBXZSBub3cga25vdyB0aGUgbG9jYXRpb24gb2YgZXZlcnkgYmxvY2sgaW4gdGhlIFZpcnR1YWwgVW5pdCBDaGFpbiwKIAkgICBhbmQgdGhlIEVyYXNlIFVuaXQgaW50byB3aGljaCB3ZSBhcmUgc3VwcG9zZWQgdG8gYmUgY29weWluZy4KQEAgLTM1MywzMyArNDE1LDMzIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0gICAgICAgICAgICAgICAgLyogY29weSBvbmx5IGluIG5vbiBmcmVlIGJsb2NrIChmcmVlIGJsb2NrcyBjYW4gb25seQorCQkvKiBjb3B5IG9ubHkgaW4gbm9uIGZyZWUgYmxvY2sgKGZyZWUgYmxvY2tzIGNhbiBvbmx5CiAgICAgICAgICAgICAgICAgICAgaGFwcGVuIGluIGNhc2Ugb2YgbWVkaWEgZXJyb3JzIG9yIGRlbGV0ZWQgYmxvY2tzKSAqLwotICAgICAgICAgICAgICAgIGlmIChCbG9ja01hcFtibG9ja10gPT0gQkxPQ0tfTklMKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisJCWlmIChCbG9ja01hcFtibG9ja10gPT0gQkxPQ0tfTklMKQorCQkJY29udGludWU7CiAKLSAgICAgICAgICAgICAgICByZXQgPSBNVERfUkVBRChuZnRsLT5tYmQubXRkLCAobmZ0bC0+RXJhc2VTaXplICogQmxvY2tNYXBbYmxvY2tdKSArIChibG9jayAqIDUxMiksCi0JCQkJICA1MTIsICZyZXRsZW4sIG1vdmVidWYpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldCA9IE1URF9SRUFEKG5mdGwtPm1iZC5tdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKGJsb2NrICogNTEyKSwgNTEyLCAmcmV0bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPSAtRUlPKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKCJFcnJvciB3ZW50IGF3YXkgb24gcmV0cnkuXG4iKTsKLSAgICAgICAgICAgICAgICB9CisJCXJldCA9IG10ZC0+cmVhZChtdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pICsgKGJsb2NrICogNTEyKSwKKwkJCQk1MTIsICZyZXRsZW4sIG1vdmVidWYpOworCQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVVQ0xFQU4pIHsKKwkJCXJldCA9IG10ZC0+cmVhZChtdGQsIChuZnRsLT5FcmFzZVNpemUgKiBCbG9ja01hcFtibG9ja10pCisJCQkJCSsgKGJsb2NrICogNTEyKSwgNTEyLCAmcmV0bGVuLAorCQkJCQltb3ZlYnVmKTsKKwkJCWlmIChyZXQgIT0gLUVJTykKKwkJCQlwcmludGsoIkVycm9yIHdlbnQgYXdheSBvbiByZXRyeS5cbiIpOworCQl9CiAJCW1lbXNldCgmb29iLCAweGZmLCBzaXplb2Yoc3RydWN0IG5mdGxfb29iKSk7CiAJCW9vYi5iLlN0YXR1cyA9IG9vYi5iLlN0YXR1czEgPSBTRUNUT1JfVVNFRDsKLSAgICAgICAgICAgICAgICBNVERfV1JJVEVFQ0MobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyAoYmxvY2sgKiA1MTIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MTIsICZyZXRsZW4sIG1vdmVidWYsIChjaGFyICopJm9vYiwgJm5mdGwtPm9vYmluZm8pOworCisJCW5mdGxfd3JpdGUobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKworCQkJICAgKGJsb2NrICogNTEyKSwgNTEyLCAmcmV0bGVuLCBtb3ZlYnVmLCAoY2hhciAqKSZvb2IpOwogCX0KIAotICAgICAgICAvKiBhZGQgdGhlIGhlYWRlciBzbyB0aGF0IGl0IGlzIG5vdyBhIHZhbGlkIGNoYWluICovCi0gICAgICAgIG9vYi51LmEuVmlydFVuaXROdW0gPSBvb2IudS5hLlNwYXJlVmlydFVuaXROdW0KLSAgICAgICAgICAgICAgICA9IGNwdV90b19sZTE2KHRoaXNWVUMpOwotICAgICAgICBvb2IudS5hLlJlcGxVbml0TnVtID0gb29iLnUuYS5TcGFyZVJlcGxVbml0TnVtID0gMHhmZmZmOworCS8qIGFkZCB0aGUgaGVhZGVyIHNvIHRoYXQgaXQgaXMgbm93IGEgdmFsaWQgY2hhaW4gKi8KKwlvb2IudS5hLlZpcnRVbml0TnVtID0gb29iLnUuYS5TcGFyZVZpcnRVbml0TnVtID0gY3B1X3RvX2xlMTYodGhpc1ZVQyk7CisJb29iLnUuYS5SZXBsVW5pdE51bSA9IG9vYi51LmEuU3BhcmVSZXBsVW5pdE51bSA9IDB4ZmZmZjsKIAotICAgICAgICBNVERfV1JJVEVPT0IobmZ0bC0+bWJkLm10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyA4LAotICAgICAgICAgICAgICAgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCW5mdGxfd3JpdGVfb29iKG10ZCwgKG5mdGwtPkVyYXNlU2l6ZSAqIHRhcmdldEVVTikgKyA4LAorCQkgICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJLyogT0suIFdlJ3ZlIG1vdmVkIHRoZSB3aG9sZSBsb3QgaW50byB0aGUgbmV3IGJsb2NrLiBOb3cgd2UgaGF2ZSB0byBmcmVlIHRoZSBvcmlnaW5hbCBibG9ja3MuICovCiAKQEAgLTM5NiwxOCArNDU4LDE4IEBACiAJd2hpbGUgKHRoaXNFVU4gPD0gbmZ0bC0+bGFzdEVVTiAmJiB0aGlzRVVOICE9IHRhcmdldEVVTikgewogCQl1bnNpZ25lZCBpbnQgRVVOdG1wOwogCi0gICAgICAgICAgICAgICAgRVVOdG1wID0gbmZ0bC0+UmVwbFVuaXRUYWJsZVt0aGlzRVVOXTsKKwkJRVVOdG1wID0gbmZ0bC0+UmVwbFVuaXRUYWJsZVt0aGlzRVVOXTsKIAotICAgICAgICAgICAgICAgIGlmIChORlRMX2Zvcm1hdGJsb2NrKG5mdGwsIHRoaXNFVU4pIDwgMCkgeworCQlpZiAoTkZUTF9mb3JtYXRibG9jayhuZnRsLCB0aGlzRVVOKSA8IDApIHsKIAkJCS8qIGNvdWxkIG5vdCBlcmFzZSA6IG1hcmsgYmxvY2sgYXMgcmVzZXJ2ZWQKIAkJCSAqLwogCQkJbmZ0bC0+UmVwbFVuaXRUYWJsZVt0aGlzRVVOXSA9IEJMT0NLX1JFU0VSVkVEOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBjb3JyZWN0bHkgZXJhc2VkIDogbWFyayBpdCBhcyBmcmVlICovCiAJCQluZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dID0gQkxPQ0tfRlJFRTsKIAkJCW5mdGwtPm51bWZyZWVFVU5zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRoaXNFVU4gPSBFVU50bXA7CisJCX0KKwkJdGhpc0VVTiA9IEVVTnRtcDsKIAl9CiAKIAkvKiBNYWtlIHRoaXMgdGhlIG5ldyBzdGFydCBvZiBjaGFpbiBmb3IgdGhpc1ZVQyAqLwpAQCAtNDczLDYgKzUzNSw3IEBACiB7CiAJdTE2IGxhc3RFVU47CiAJdTE2IHRoaXNWVUMgPSBibG9jayAvIChuZnRsLT5FcmFzZVNpemUgLyA1MTIpOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1bnNpZ25lZCBpbnQgd3JpdGVFVU47CiAJdW5zaWduZWQgbG9uZyBibG9ja29mcyA9IChibG9jayAqIDUxMikgJiAobmZ0bC0+RXJhc2VTaXplIC0xKTsKIAlzaXplX3QgcmV0bGVuOwpAQCAtNDg5LDIxICs1NTIsMjIgQEAKIAkJKi8KIAkJbGFzdEVVTiA9IEJMT0NLX05JTDsKIAkJd3JpdGVFVU4gPSBuZnRsLT5FVU50YWJsZVt0aGlzVlVDXTsKLSAgICAgICAgICAgICAgICBzaWxseSA9IE1BWF9MT09QUzsKKwkJc2lsbHkgPSBNQVhfTE9PUFM7CiAJCXdoaWxlICh3cml0ZUVVTiA8PSBuZnRsLT5sYXN0RVVOKSB7CiAJCQlzdHJ1Y3QgbmZ0bF9iY2kgYmNpOwogCQkJc2l6ZV90IHJldGxlbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXM7CisJCQl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCiAJCQlsYXN0RVVOID0gd3JpdGVFVU47CiAKLQkJCU1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsICh3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKLQkJCQkgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKKwkJCW5mdGxfcmVhZF9vb2IobXRkLAorCQkJCSAgICAgICh3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKKwkJCQkgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZiY2kpOwogCiAJCQlERUJVRyhNVERfREVCVUdfTEVWRUwyLCAiU3RhdHVzIG9mIGJsb2NrICVkIGluIEVVTiAlZCBpcyAleFxuIiwKIAkJCSAgICAgIGJsb2NrICwgd3JpdGVFVU4sIGxlMTZfdG9fY3B1KGJjaS5TdGF0dXMpKTsKIAotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOworCQkJc3RhdHVzID0gYmNpLlN0YXR1cyB8IGJjaS5TdGF0dXMxOwogCQkJc3dpdGNoKHN0YXR1cykgewogCQkJY2FzZSBTRUNUT1JfRlJFRToKIAkJCQlyZXR1cm4gd3JpdGVFVU47CkBAIC01NzQsMTAgKzYzOCwxMCBAQAogCQkvKiBXZSd2ZSBmb3VuZCBhIGZyZWUgYmxvY2suIEluc2VydCBpdCBpbnRvIHRoZSBjaGFpbi4gKi8KIAogCQlpZiAobGFzdEVVTiAhPSBCTE9DS19OSUwpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhpc1ZVQyB8PSAweDgwMDA7IC8qIEl0J3MgYSByZXBsYWNlbWVudCBibG9jayAqLworCQkJdGhpc1ZVQyB8PSAweDgwMDA7IC8qIEl0J3MgYSByZXBsYWNlbWVudCBibG9jayAqLwogCQl9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvKiBUaGUgZmlyc3QgYmxvY2sgaW4gYSBuZXcgY2hhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgbmZ0bC0+RVVOdGFibGVbdGhpc1ZVQ10gPSB3cml0ZUVVTjsKKwkJCS8qIFRoZSBmaXJzdCBibG9jayBpbiBhIG5ldyBjaGFpbiAqLworCQkJbmZ0bC0+RVVOdGFibGVbdGhpc1ZVQ10gPSB3cml0ZUVVTjsKIAkJfQogCiAJCS8qIHNldCB1cCB0aGUgYWN0dWFsIEVVTiB3ZSdyZSB3cml0aW5nIGludG8gKi8KQEAgLTU4NSwyOSArNjQ5LDI5IEBACiAJCW5mdGwtPlJlcGxVbml0VGFibGVbd3JpdGVFVU5dID0gQkxPQ0tfTklMOwogCiAJCS8qIC4uLiBhbmQgb24gdGhlIGZsYXNoIGl0c2VsZiAqLwotCQlNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCB3cml0ZUVVTiAqIG5mdGwtPkVyYXNlU2l6ZSArIDgsIDgsCi0JCQkgICAgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQluZnRsX3JlYWRfb29iKG10ZCwgd3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJICAgICAgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJCW9vYi51LmEuVmlydFVuaXROdW0gPSBvb2IudS5hLlNwYXJlVmlydFVuaXROdW0gPSBjcHVfdG9fbGUxNih0aGlzVlVDKTsKIAotCQlNVERfV1JJVEVPT0IobmZ0bC0+bWJkLm10ZCwgd3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUgKyA4LCA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CisJCW5mdGxfd3JpdGVfb29iKG10ZCwgd3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUgKyA4LCA4LAorCQkJICAgICAgICZyZXRsZW4sIChjaGFyICopJm9vYi51KTsKIAotICAgICAgICAgICAgICAgIC8qIHdlIGxpbmsgdGhlIG5ldyBibG9jayB0byB0aGUgY2hhaW4gb25seSBhZnRlciB0aGUKKwkJLyogd2UgbGluayB0aGUgbmV3IGJsb2NrIHRvIHRoZSBjaGFpbiBvbmx5IGFmdGVyIHRoZQogICAgICAgICAgICAgICAgICAgIGJsb2NrIGlzIHJlYWR5LiBJdCBhdm9pZHMgdGhlIGNhc2Ugd2hlcmUgdGhlIGNoYWluCiAgICAgICAgICAgICAgICAgICAgY291bGQgcG9pbnQgdG8gYSBmcmVlIGJsb2NrICovCi0gICAgICAgICAgICAgICAgaWYgKGxhc3RFVU4gIT0gQkxPQ0tfTklMKSB7CisJCWlmIChsYXN0RVVOICE9IEJMT0NLX05JTCkgewogCQkJLyogQm90aCBpbiBvdXIgY2FjaGUuLi4gKi8KIAkJCW5mdGwtPlJlcGxVbml0VGFibGVbbGFzdEVVTl0gPSB3cml0ZUVVTjsKIAkJCS8qIC4uLiBhbmQgb24gdGhlIGZsYXNoIGl0c2VsZiAqLwotCQkJTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgKGxhc3RFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgOCwKLQkJCQkgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQkJbmZ0bF9yZWFkX29vYihtdGQsIChsYXN0RVVOICogbmZ0bC0+RXJhc2VTaXplKSArIDgsCisJCQkJICAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOwogCiAJCQlvb2IudS5hLlJlcGxVbml0TnVtID0gb29iLnUuYS5TcGFyZVJlcGxVbml0TnVtCiAJCQkJPSBjcHVfdG9fbGUxNih3cml0ZUVVTik7CiAKLQkJCU1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCAobGFzdEVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyA4LAotCQkJCSAgICAgOCwgJnJldGxlbiwgKGNoYXIgKikmb29iLnUpOworCQkJbmZ0bF93cml0ZV9vb2IobXRkLCAobGFzdEVVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyA4LAorCQkJCSAgICAgICA4LCAmcmV0bGVuLCAoY2hhciAqKSZvb2IudSk7CiAJCX0KIAogCQlyZXR1cm4gd3JpdGVFVU47CkBAIC02MzksMTAgKzcwMyw5IEBACiAKIAltZW1zZXQoJm9vYiwgMHhmZiwgc2l6ZW9mKHN0cnVjdCBuZnRsX29vYikpOwogCW9vYi5iLlN0YXR1cyA9IG9vYi5iLlN0YXR1czEgPSBTRUNUT1JfVVNFRDsKLQlNVERfV1JJVEVFQ0MobmZ0bC0+bWJkLm10ZCwgKHdyaXRlRVVOICogbmZ0bC0+RXJhc2VTaXplKSArIGJsb2Nrb2ZzLAotCQkgICAgIDUxMiwgJnJldGxlbiwgKGNoYXIgKilidWZmZXIsIChjaGFyICopJm9vYiwgJm5mdGwtPm9vYmluZm8pOwotICAgICAgICAvKiBuZWVkIHRvIHdyaXRlIFNFQ1RPUl9VU0VEIGZsYWdzIHNpbmNlIHRoZXkgYXJlIG5vdCB3cml0dGVuIGluIG10ZF93cml0ZWVjYyAqLwogCisJbmZ0bF93cml0ZShuZnRsLT5tYmQubXRkLCAod3JpdGVFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgYmxvY2tvZnMsCisJCSAgIDUxMiwgJnJldGxlbiwgKGNoYXIgKilidWZmZXIsIChjaGFyICopJm9vYik7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogQ09ORklHX05GVExfUlcgKi8KQEAgLTY1MSwyMCArNzE0LDIyIEBACiAJCQkgIGNoYXIgKmJ1ZmZlcikKIHsKIAlzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCA9ICh2b2lkICopbWJkOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1MTYgbGFzdGdvb2RFVU47CiAJdTE2IHRoaXNFVU4gPSBuZnRsLT5FVU50YWJsZVtibG9jayAvIChuZnRsLT5FcmFzZVNpemUgLyA1MTIpXTsKIAl1bnNpZ25lZCBsb25nIGJsb2Nrb2ZzID0gKGJsb2NrICogNTEyKSAmIChuZnRsLT5FcmFzZVNpemUgLSAxKTsKLSAgICAgICAgdW5zaWduZWQgaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwogCWludCBzaWxseSA9IE1BWF9MT09QUzsKLSAgICAgICAgc2l6ZV90IHJldGxlbjsKLSAgICAgICAgc3RydWN0IG5mdGxfYmNpIGJjaTsKKwlzaXplX3QgcmV0bGVuOworCXN0cnVjdCBuZnRsX2JjaSBiY2k7CiAKIAlsYXN0Z29vZEVVTiA9IEJMT0NLX05JTDsKIAotICAgICAgICBpZiAodGhpc0VVTiAhPSBCTE9DS19OSUwpIHsKKwlpZiAodGhpc0VVTiAhPSBCTE9DS19OSUwpIHsKIAkJd2hpbGUgKHRoaXNFVU4gPCBuZnRsLT5uYl9ibG9ja3MpIHsKLQkJCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCAodGhpc0VVTiAqIG5mdGwtPkVyYXNlU2l6ZSkgKyBibG9ja29mcywKLQkJCQkJOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCisJCQlpZiAobmZ0bF9yZWFkX29vYihtdGQsICh0aGlzRVVOICogbmZ0bC0+RXJhc2VTaXplKSArCisJCQkJCSAgYmxvY2tvZnMsIDgsICZyZXRsZW4sCisJCQkJCSAgKGNoYXIgKikmYmNpKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC02OTQsNyArNzU5LDcgQEAKIAkJCX0KIAkJCXRoaXNFVU4gPSBuZnRsLT5SZXBsVW5pdFRhYmxlW3RoaXNFVU5dOwogCQl9Ci0gICAgICAgIH0KKwl9CiAKICB0aGVfZW5kOgogCWlmIChsYXN0Z29vZEVVTiA9PSBCTE9DS19OSUwpIHsKQEAgLTcwMyw3ICs3NjgsOSBAQAogCX0gZWxzZSB7CiAJCWxvZmZfdCBwdHIgPSAobGFzdGdvb2RFVU4gKiBuZnRsLT5FcmFzZVNpemUpICsgYmxvY2tvZnM7CiAJCXNpemVfdCByZXRsZW47Ci0JCWlmIChNVERfUkVBRChuZnRsLT5tYmQubXRkLCBwdHIsIDUxMiwgJnJldGxlbiwgYnVmZmVyKSkKKwkJaW50IHJlcyA9IG10ZC0+cmVhZChtdGQsIHB0ciwgNTEyLCAmcmV0bGVuLCBidWZmZXIpOworCisJCWlmIChyZXMgPCAwICYmIHJlcyAhPSAtRVVDTEVBTikKIAkJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jIGIvZHJpdmVycy9tdGQvbmZ0bG1vdW50LmMKaW5kZXggM2IxMDRlYi4uMDY3MjYyZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jCisrKyBiL2RyaXZlcnMvbXRkL25mdGxtb3VudC5jCkBAIC0zMyw2ICszMywxMSBAQAogCiBjaGFyIG5mdGxtb3VudHJldltdPSIkUmV2aXNpb246IDEuNDEgJCI7CiAKK2V4dGVybiBpbnQgbmZ0bF9yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHNpemVfdCBsZW4sCisJCQkgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7CitleHRlcm4gaW50IG5mdGxfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcywgc2l6ZV90IGxlbiwKKwkJCSAgc2l6ZV90ICpyZXRsZW4sIHVpbnQ4X3QgKmJ1Zik7CisKIC8qIGZpbmRfYm9vdF9yZWNvcmQ6IEZpbmQgdGhlIE5GVEwgTWVkaWEgSGVhZGVyIGFuZCBpdHMgU3BhcmUgY29weSB3aGljaCBjb250YWlucyB0aGUKICAqCXZhcmlvdXMgZGV2aWNlIGluZm9ybWF0aW9uIG9mIHRoZSBORlRMIHBhcnRpdGlvbiBhbmQgQmFkIFVuaXQgVGFibGUuIFVwZGF0ZQogICoJdGhlIFJlcGxVbml0VGFibGVbXSB0YWJsZSBhY2Nyb2RpbmcgdG8gdGhlIEJhZCBVbml0IFRhYmxlLiBSZXBsVW5pdFRhYmxlW10KQEAgLTQ1LDYgKzUwLDcgQEAKIAlzaXplX3QgcmV0bGVuOwogCXU4IGJ1ZltTRUNUT1JTSVpFXTsKIAlzdHJ1Y3QgTkZUTE1lZGlhSGVhZGVyICptaCA9ICZuZnRsLT5NZWRpYUhkcjsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJdW5zaWduZWQgaW50IGk7CiAKICAgICAgICAgLyogQXNzdW1lIGxvZ2ljYWwgRXJhc2VTaXplID09IHBoeXNpY2FsIGVyYXNlc2l6ZSBmb3Igc3RhcnRpbmcgdGhlIHNjYW4uCkBAIC02NSw3ICs3MSw4IEBACiAKIAkJLyogQ2hlY2sgZm9yIEFOQU5EIGhlYWRlciBmaXJzdC4gVGhlbiBjYW4gd2hpbmdlIGlmIGl0J3MgZm91bmQgYnV0IGxhdGVyCiAJCSAgIGNoZWNrcyBmYWlsICovCi0JCXJldCA9IE1URF9SRUFEKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplLCBTRUNUT1JTSVpFLCAmcmV0bGVuLCBidWYpOworCQlyZXQgPSBtdGQtPnJlYWQobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSwgU0VDVE9SU0laRSwKKwkJCQkmcmV0bGVuLCBidWYpOwogCQkvKiBXZSBpZ25vcmUgcmV0IGluIGNhc2UgdGhlIEVDQyBvZiB0aGUgTWVkaWFIZWFkZXIgaXMgaW52YWxpZAogCQkgICAod2hpY2ggaXMgYXBwYXJlbnRseSBhY2NlcHRhYmxlKSAqLwogCQlpZiAocmV0bGVuICE9IFNFQ1RPUlNJWkUpIHsKQEAgLTkwLDggKzk3LDkgQEAKIAkJfQogCiAJCS8qIFRvIGJlIHNhZmVyIHdpdGggQklPUywgYWxzbyB1c2UgZXJhc2UgbWFyayBhcyBkaXNjcmltaW5hbnQgKi8KLQkJaWYgKChyZXQgPSBNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LAotCQkJCTgsICZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApKSB7CisJCWlmICgocmV0ID0gbmZ0bF9yZWFkX29vYihtdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsKKwkJCQkJIFNFQ1RPUlNJWkUgKyA4LCA4LCAmcmV0bGVuLAorCQkJCQkgKGNoYXIgKikmaDEpIDwgMCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkFOQU5EIGhlYWRlciBmb3VuZCBhdCAweCV4IGluIG10ZCVkLCBidXQgT09CIGRhdGEgcmVhZCBmYWlsZWQgKGVyciAlZClcbiIsCiAJCQkgICAgICAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIG5mdGwtPm1iZC5tdGQtPmluZGV4LCByZXQpOwogCQkJY29udGludWU7CkBAIC0xMDksOCArMTE3LDggQEAKIAkJfQogCiAJCS8qIEZpbmFsbHkgcmVyZWFkIHRvIGNoZWNrIEVDQyAqLwotCQlpZiAoKHJldCA9IE1URF9SRUFERUNDKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplLCBTRUNUT1JTSVpFLAotCQkJCSZyZXRsZW4sIGJ1ZiwgKGNoYXIgKikmb29iLCBOVUxMKSA8IDApKSB7CisJCWlmICgocmV0ID0gbXRkLT5yZWFkKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIFNFQ1RPUlNJWkUsCisJCQkJICAgICAmcmV0bGVuLCBidWYpIDwgMCkpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiQU5BTkQgaGVhZGVyIGZvdW5kIGF0IDB4JXggaW4gbXRkJWQsIGJ1dCBFQ0MgcmVhZCBmYWlsZWQgKGVyciAlZClcbiIsCiAJCQkgICAgICAgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUsIG5mdGwtPm1iZC5tdGQtPmluZGV4LCByZXQpOwogCQkJY29udGludWU7CkBAIC0yMjgsOSArMjM2LDkgQEAKIFRoZSBuZXcgRGlza09uQ2hpcCBkcml2ZXIgYWxyZWFkeSBzY2FubmVkIHRoZSBiYWQgYmxvY2sgdGFibGUuICBKdXN0IHF1ZXJ5IGl0LgogCQkJaWYgKChpICYgKFNFQ1RPUlNJWkUgLSAxKSkgPT0gMCkgewogCQkJCS8qIHJlYWQgb25lIHNlY3RvciBmb3IgZXZlcnkgU0VDVE9SU0laRSBvZiBibG9ja3MgKi8KLQkJCQlpZiAoKHJldCA9IE1URF9SRUFERUNDKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsKLQkJCQkJCSAgICAgICBpICsgU0VDVE9SU0laRSwgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmLAotCQkJCQkJICAgICAgIChjaGFyICopJm9vYiwgTlVMTCkpIDwgMCkgeworCQkJCWlmICgocmV0ID0gbXRkLT5yZWFkKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsKKwkJCQkJCSAgICAgaSArIFNFQ1RPUlNJWkUsIFNFQ1RPUlNJWkUsICZyZXRsZW4sCisJCQkJCQkgICAgIGJ1ZikpIDwgMCkgewogCQkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlYWQgb2YgYmFkIHNlY3RvciB0YWJsZSBmYWlsZWQgKGVyciAlZClcbiIsCiAJCQkJCSAgICAgICByZXQpOwogCQkJCQlrZnJlZShuZnRsLT5SZXBsVW5pdFRhYmxlKTsKQEAgLTI2OCwxOCArMjc2LDIyIEBACiBzdGF0aWMgaW50IGNoZWNrX2ZyZWVfc2VjdG9ycyhzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgdW5zaWduZWQgaW50IGFkZHJlc3MsIGludCBsZW4sCiAJCQkgICAgICBpbnQgY2hlY2tfb29iKQogewotCWludCBpOwotCXNpemVfdCByZXRsZW47CiAJdTggYnVmW1NFQ1RPUlNJWkUgKyBuZnRsLT5tYmQubXRkLT5vb2JzaXplXTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CisJc2l6ZV90IHJldGxlbjsKKwlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gU0VDVE9SU0laRSkgewotCQlpZiAoTVREX1JFQURFQ0MobmZ0bC0+bWJkLm10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmLCAmYnVmW1NFQ1RPUlNJWkVdLCAmbmZ0bC0+b29iaW5mbykgPCAwKQorCQlpZiAobXRkLT5yZWFkKG10ZCwgYWRkcmVzcywgU0VDVE9SU0laRSwgJnJldGxlbiwgYnVmKSkKIAkJCXJldHVybiAtMTsKIAkJaWYgKG1lbWNtcGIoYnVmLCAweGZmLCBTRUNUT1JTSVpFKSAhPSAwKQogCQkJcmV0dXJuIC0xOwogCiAJCWlmIChjaGVja19vb2IpIHsKLQkJCWlmIChtZW1jbXBiKGJ1ZiArIFNFQ1RPUlNJWkUsIDB4ZmYsIG5mdGwtPm1iZC5tdGQtPm9vYnNpemUpICE9IDApCisJCQlpZihuZnRsX3JlYWRfb29iKG10ZCwgYWRkcmVzcywgbXRkLT5vb2JzaXplLAorCQkJCQkgJnJldGxlbiwgJmJ1ZltTRUNUT1JTSVpFXSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChtZW1jbXBiKGJ1ZiArIFNFQ1RPUlNJWkUsIDB4ZmYsIG10ZC0+b29ic2l6ZSkgIT0gMCkKIAkJCQlyZXR1cm4gLTE7CiAJCX0KIAkJYWRkcmVzcyArPSBTRUNUT1JTSVpFOwpAQCAtMzAxLDEwICszMTMsMTEgQEAKIAl1bnNpZ25lZCBpbnQgbmJfZXJhc2VzLCBlcmFzZV9tYXJrOwogCXN0cnVjdCBuZnRsX3VjaTEgdWNpOwogCXN0cnVjdCBlcmFzZV9pbmZvICppbnN0ciA9ICZuZnRsLT5pbnN0cjsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAKIAkvKiBSZWFkIHRoZSBVbml0IENvbnRyb2wgSW5mb3JtYXRpb24gIzEgZm9yIFdlYXItTGV2ZWxpbmcgKi8KLQlpZiAoTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwKLQkJCTgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwKKwkJCSAgOCwgJnJldGxlbiwgKGNoYXIgKikmdWNpKSA8IDApCiAJCWdvdG8gZGVmYXVsdF91Y2kxOwogCiAJZXJhc2VfbWFyayA9IGxlMTZfdG9fY3B1ICgodWNpLkVyYXNlTWFyayB8IHVjaS5FcmFzZU1hcmsxKSk7CkBAIC0zMjEsNyArMzM0LDcgQEAKIAlpbnN0ci0+bXRkID0gbmZ0bC0+bWJkLm10ZDsKIAlpbnN0ci0+YWRkciA9IGJsb2NrICogbmZ0bC0+RXJhc2VTaXplOwogCWluc3RyLT5sZW4gPSBuZnRsLT5FcmFzZVNpemU7Ci0JTVREX0VSQVNFKG5mdGwtPm1iZC5tdGQsIGluc3RyKTsKKwltdGQtPmVyYXNlKG10ZCwgaW5zdHIpOwogCiAJaWYgKGluc3RyLT5zdGF0ZSA9PSBNVERfRVJBU0VfRkFJTEVEKSB7CiAJCXByaW50aygiRXJyb3Igd2hpbGUgZm9ybWF0dGluZyBibG9jayAlZFxuIiwgYmxvY2spOwpAQCAtMzQzLDggKzM1Niw4IEBACiAJCQlnb3RvIGZhaWw7CiAKIAkJdWNpLldlYXJJbmZvID0gbGUzMl90b19jcHUobmJfZXJhc2VzKTsKLQkJaWYgKE1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAotCQkJCSAmcmV0bGVuLCAoY2hhciAqKSZ1Y2kpIDwgMCkKKwkJaWYgKG5mdGxfd3JpdGVfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsKKwkJCQkgICA4LCA4LCAmcmV0bGVuLCAoY2hhciAqKSZ1Y2kpIDwgMCkKIAkJCWdvdG8gZmFpbDsKIAkJcmV0dXJuIDA7CiBmYWlsOgpAQCAtMzY1LDYgKzM3OCw3IEBACiAgKgljYXNlLiAqLwogc3RhdGljIHZvaWQgY2hlY2tfc2VjdG9yc19pbl9jaGFpbihzdHJ1Y3QgTkZUTHJlY29yZCAqbmZ0bCwgdW5zaWduZWQgaW50IGZpcnN0X2Jsb2NrKQogeworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbmZ0bC0+bWJkLm10ZDsKIAl1bnNpZ25lZCBpbnQgYmxvY2ssIGksIHN0YXR1czsKIAlzdHJ1Y3QgbmZ0bF9iY2kgYmNpOwogCWludCBzZWN0b3JzX3Blcl9ibG9jazsKQEAgLTM3NCw4ICszODgsOSBAQAogCWJsb2NrID0gZmlyc3RfYmxvY2s7CiAJZm9yICg7OykgewogCQlmb3IgKGkgPSAwOyBpIDwgc2VjdG9yc19wZXJfYmxvY2s7IGkrKykgewotCQkJaWYgKE1URF9SRUFET09CKG5mdGwtPm1iZC5tdGQsIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSAqIFNFQ1RPUlNJWkUsCi0JCQkJCTgsICZyZXRsZW4sIChjaGFyICopJmJjaSkgPCAwKQorCQkJaWYgKG5mdGxfcmVhZF9vb2IobXRkLAorCQkJCQkgIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSAqIFNFQ1RPUlNJWkUsCisJCQkJCSAgOCwgJnJldGxlbiwgKGNoYXIgKikmYmNpKSA8IDApCiAJCQkJc3RhdHVzID0gU0VDVE9SX0lHTk9SRTsKIAkJCWVsc2UKIAkJCQlzdGF0dXMgPSBiY2kuU3RhdHVzIHwgYmNpLlN0YXR1czE7CkBAIC0zOTQsOSArNDA5LDEwIEBACiAJCQkJCS8qIHNlY3RvciBub3QgZnJlZSBhY3R1YWxseSA6IG1hcmsgaXQgYXMgU0VDVE9SX0lHTk9SRSAgKi8KIAkJCQkJYmNpLlN0YXR1cyA9IFNFQ1RPUl9JR05PUkU7CiAJCQkJCWJjaS5TdGF0dXMxID0gU0VDVE9SX0lHTk9SRTsKLQkJCQkJTVREX1dSSVRFT09CKG5mdGwtPm1iZC5tdGQsCi0JCQkJCQkgICAgIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgaSAqIFNFQ1RPUlNJWkUsCi0JCQkJCQkgICAgIDgsICZyZXRsZW4sIChjaGFyICopJmJjaSk7CisJCQkJCW5mdGxfd3JpdGVfb29iKG10ZCwgYmxvY2sgKgorCQkJCQkJICAgICAgIG5mdGwtPkVyYXNlU2l6ZSArCisJCQkJCQkgICAgICAgaSAqIFNFQ1RPUlNJWkUsIDgsCisJCQkJCQkgICAgICAgJnJldGxlbiwgKGNoYXIgKikmYmNpKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtNDgxLDEzICs0OTcsMTQgQEAKICAqCTEuICovCiBzdGF0aWMgaW50IGNoZWNrX2FuZF9tYXJrX2ZyZWVfYmxvY2soc3RydWN0IE5GVExyZWNvcmQgKm5mdGwsIGludCBibG9jaykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJc3RydWN0IG5mdGxfdWNpMSBoMTsKIAl1bnNpZ25lZCBpbnQgZXJhc2VfbWFyazsKIAlzaXplX3QgcmV0bGVuOwogCiAJLyogY2hlY2sgZXJhc2UgbWFyay4gKi8KLQlpZiAoTVREX1JFQURPT0IobmZ0bC0+bWJkLm10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwgOCwKLQkJCSZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApCisJaWYgKG5mdGxfcmVhZF9vb2IobXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAorCQkJICAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAllcmFzZV9tYXJrID0gbGUxNl90b19jcHUgKChoMS5FcmFzZU1hcmsgfCBoMS5FcmFzZU1hcmsxKSk7CkBAIC01MDEsOCArNTE4LDkgQEAKIAkJaDEuRXJhc2VNYXJrID0gY3B1X3RvX2xlMTYoRVJBU0VfTUFSSyk7CiAJCWgxLkVyYXNlTWFyazEgPSBjcHVfdG9fbGUxNihFUkFTRV9NQVJLKTsKIAkJaDEuV2VhckluZm8gPSBjcHVfdG9fbGUzMigwKTsKLQkJaWYgKE1URF9XUklURU9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIFNFQ1RPUlNJWkUgKyA4LCA4LAotCQkJCSAmcmV0bGVuLCAoY2hhciAqKSZoMSkgPCAwKQorCQlpZiAobmZ0bF93cml0ZV9vb2IobXRkLAorCQkJCSAgIGJsb2NrICogbmZ0bC0+RXJhc2VTaXplICsgU0VDVE9SU0laRSArIDgsIDgsCisJCQkJICAgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkKIAkJCXJldHVybiAtMTsKIAl9IGVsc2UgewogI2lmIDAKQEAgLTUxMyw4ICs1MzEsOCBAQAogCQkJCQkJU0VDVE9SU0laRSwgMCkgIT0gMCkKIAkJCQlyZXR1cm4gLTE7CiAKLQkJCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIGksCi0JCQkJCTE2LCAmcmV0bGVuLCBidWYpIDwgMCkKKwkJCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyBpLAorCQkJCQkgIDE2LCAmcmV0bGVuLCBidWYpIDwgMCkKIAkJCQlyZXR1cm4gLTE7CiAJCQlpZiAoaSA9PSBTRUNUT1JTSVpFKSB7CiAJCQkJLyogc2tpcCBlcmFzZSBtYXJrICovCkBAIC01NDAsMTEgKzU1OCwxMiBAQAogICovCiBzdGF0aWMgaW50IGdldF9mb2xkX21hcmsoc3RydWN0IE5GVExyZWNvcmQgKm5mdGwsIHVuc2lnbmVkIGludCBibG9jaykKIHsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IG5mdGwtPm1iZC5tdGQ7CiAJc3RydWN0IG5mdGxfdWNpMiB1Y2k7CiAJc2l6ZV90IHJldGxlbjsKIAotCWlmIChNVERfUkVBRE9PQihuZnRsLT5tYmQubXRkLCBibG9jayAqIG5mdGwtPkVyYXNlU2l6ZSArIDIgKiBTRUNUT1JTSVpFICsgOCwKLQkJCTgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQorCWlmIChuZnRsX3JlYWRfb29iKG10ZCwgYmxvY2sgKiBuZnRsLT5FcmFzZVNpemUgKyAyICogU0VDVE9SU0laRSArIDgsCisJCQkgIDgsICZyZXRsZW4sIChjaGFyICopJnVjaSkgPCAwKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBsZTE2X3RvX2NwdSgodWNpLkZvbGRNYXJrIHwgdWNpLkZvbGRNYXJrMSkpOwpAQCAtNTU4LDYgKzU3Nyw3IEBACiAJaW50IGNoYWluX2xlbmd0aCwgZG9fZm9ybWF0X2NoYWluOwogCXN0cnVjdCBuZnRsX3VjaTAgaDA7CiAJc3RydWN0IG5mdGxfdWNpMSBoMTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHMtPm1iZC5tdGQ7CiAJc2l6ZV90IHJldGxlbjsKIAogCS8qIHNlYXJjaCBmb3IgTkZUTCBNZWRpYUhlYWRlciBhbmQgU3BhcmUgTkZUTCBNZWRpYSBIZWFkZXIgKi8KQEAgLTU4MiwxMCArNjAyLDEzIEBACiAKIAkJCWZvciAoOzspIHsKIAkJCQkvKiByZWFkIHRoZSBibG9jayBoZWFkZXIuIElmIGVycm9yLCB3ZSBmb3JtYXQgdGhlIGNoYWluICovCi0JCQkJaWYgKE1URF9SRUFET09CKHMtPm1iZC5tdGQsIGJsb2NrICogcy0+RXJhc2VTaXplICsgOCwgOCwKLQkJCQkJCSZyZXRsZW4sIChjaGFyICopJmgwKSA8IDAgfHwKLQkJCQkgICAgTVREX1JFQURPT0Iocy0+bWJkLm10ZCwgYmxvY2sgKiBzLT5FcmFzZVNpemUgKyBTRUNUT1JTSVpFICsgOCwgOCwKLQkJCQkJCSZyZXRsZW4sIChjaGFyICopJmgxKSA8IDApIHsKKwkJCQlpZiAobmZ0bF9yZWFkX29vYihtdGQsCisJCQkJCQkgIGJsb2NrICogcy0+RXJhc2VTaXplICsgOCwgOCwKKwkJCQkJCSAgJnJldGxlbiwgKGNoYXIgKikmaDApIDwgMCB8fAorCQkJCSAgICBuZnRsX3JlYWRfb29iKG10ZCwKKwkJCQkJCSAgYmxvY2sgKiBzLT5FcmFzZVNpemUgKworCQkJCQkJICBTRUNUT1JTSVpFICsgOCwgOCwKKwkJCQkJCSAgJnJldGxlbiwgKGNoYXIgKikmaDEpIDwgMCkgewogCQkJCQlzLT5SZXBsVW5pdFRhYmxlW2Jsb2NrXSA9IEJMT0NLX05JTDsKIAkJCQkJZG9fZm9ybWF0X2NoYWluID0gMTsKIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcgYi9kcml2ZXJzL210ZC9vbmVuYW5kL0tjb25maWcKaW5kZXggMTI2ZmY2Yi4uNTkzMGEwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvb25lbmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvS2NvbmZpZwpAQCAtMjksNiArMjksMjAgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBPbmVOQU5EIGZsYXNoIHZpYSBwbGF0Zm9ybSBkZXZpY2UgZHJpdmVyLgogCitjb25maWcgTVREX09ORU5BTkRfT1RQCisJYm9vbCAiT25lTkFORCBPVFAgU3VwcG9ydCIKKwlkZXBlbmRzIG9uIE1URF9PTkVOQU5ECisJaGVscAorCSAgT25lIEJsb2NrIG9mIHRoZSBOQU5EIEZsYXNoIEFycmF5IG1lbW9yeSBpcyByZXNlcnZlZCBhcworCSAgYSBPbmUtVGltZSBQcm9ncmFtbWFibGUgQmxvY2sgbWVtb3J5IGFyZWEuCisJICBBbHNvLCAxc3QgQmxvY2sgb2YgTkFORCBGbGFzaCBBcnJheSBjYW4gYmUgdXNlZCBhcyBPVFAuCisKKwkgIFRoZSBPVFAgYmxvY2sgY2FuIGJlIHJlYWQsIHByb2dyYW1tZWQgYW5kIGxvY2tlZCB1c2luZyB0aGUgc2FtZQorCSAgb3BlcmF0aW9ucyBhcyBhbnkgb3RoZXIgTkFORCBGbGFzaCBBcnJheSBtZW1vcnkgYmxvY2suCisJICBPVFAgYmxvY2sgY2Fubm90IGJlIGVyYXNlZC4KKworCSAgT1RQIGJsb2NrIGlzIGZ1bGx5LWd1YXJhbnRlZWQgdG8gYmUgYSB2YWxpZCBibG9jay4KKwogY29uZmlnIE1URF9PTkVOQU5EX1NZTkNfUkVBRAogCWJvb2wgIk9uZU5BTkQgU3luYy4gQnVyc3QgUmVhZCBTdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2Jhc2UuYwppbmRleCBhNTNhNzNmLi44NGVjNDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmFzZS5jCisrKyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYXNlLmMKQEAgLTIzLDggKzIzLDcgQEAKIC8qKgogICogb25lbmFuZF9vb2JfNjQgLSBvb2IgaW5mbyBmb3IgbGFyZ2UgKDJLQikgcGFnZQogICovCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBvbmVuYW5kX29vYl82NCA9IHsKLQkudXNlZWNjCQk9IE1URF9OQU5ERUNDX0FVVE9QTEFDRSwKK3N0YXRpYyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb25lbmFuZF9vb2JfNjQgPSB7CiAJLmVjY2J5dGVzCT0gMjAsCiAJLmVjY3BvcwkJPSB7CiAJCTgsIDksIDEwLCAxMSwgMTIsCkBAIC0zNCwxNCArMzMsMTQgQEAKIAkJfSwKIAkub29iZnJlZQk9IHsKIAkJezIsIDN9LCB7MTQsIDJ9LCB7MTgsIDN9LCB7MzAsIDJ9LAotCQl7MjQsIDN9LCB7NDYsIDJ9LCB7NDAsIDN9LCB7NjIsIDJ9IH0KKwkJezM0LCAzfSwgezQ2LCAyfSwgezUwLCAzfSwgezYyLCAyfQorCX0KIH07CiAKIC8qKgogICogb25lbmFuZF9vb2JfMzIgLSBvb2IgaW5mbyBmb3IgbWlkZGxlICgxS0IpIHBhZ2UKICAqLwotc3RhdGljIHN0cnVjdCBuYW5kX29vYmluZm8gb25lbmFuZF9vb2JfMzIgPSB7Ci0JLnVzZWVjYwkJPSBNVERfTkFOREVDQ19BVVRPUExBQ0UsCitzdGF0aWMgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9uZW5hbmRfb29iXzMyID0gewogCS5lY2NieXRlcwk9IDEwLAogCS5lY2Nwb3MJCT0gewogCQk4LCA5LCAxMCwgMTEsIDEyLApAQCAtMTkwLDcgKzE4OSw3IEBACiBzdGF0aWMgaW50IG9uZW5hbmRfY29tbWFuZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgbG9mZl90IGFkZHIsIHNpemVfdCBsZW4pCiB7CiAJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKLQlpbnQgdmFsdWUsIHJlYWRjbWQgPSAwOworCWludCB2YWx1ZSwgcmVhZGNtZCA9IDAsIGJsb2NrX2NtZCA9IDA7CiAJaW50IGJsb2NrLCBwYWdlOwogCS8qIE5vdyB3ZSB1c2UgcGFnZSBzaXplIG9wZXJhdGlvbiAqLwogCWludCBzZWN0b3JzID0gNCwgY291bnQgPSA0OwpAQCAtMjA2LDYgKzIwNSw4IEBACiAKIAljYXNlIE9ORU5BTkRfQ01EX0VSQVNFOgogCWNhc2UgT05FTkFORF9DTURfQlVGRkVSUkFNOgorCWNhc2UgT05FTkFORF9DTURfT1RQX0FDQ0VTUzoKKwkJYmxvY2tfY21kID0gMTsKIAkJYmxvY2sgPSAoaW50KSAoYWRkciA+PiB0aGlzLT5lcmFzZV9zaGlmdCk7CiAJCXBhZ2UgPSAtMTsKIAkJYnJlYWs7CkBAIC0yMzMsNiArMjM0LDEyIEBACiAJCS8qIFdyaXRlICdERlMsIEZCQScgb2YgRmxhc2ggKi8KIAkJdmFsdWUgPSBvbmVuYW5kX2Jsb2NrX2FkZHJlc3ModGhpcywgYmxvY2spOwogCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEpOworCisJCWlmIChibG9ja19jbWQpIHsKKwkJCS8qIFNlbGVjdCBEYXRhUkFNIGZvciBERFAgKi8KKwkJCXZhbHVlID0gb25lbmFuZF9idWZmZXJyYW1fYWRkcmVzcyh0aGlzLCBibG9jayk7CisJCQl0aGlzLT53cml0ZV93b3JkKHZhbHVlLCB0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIpOworCQl9CiAJfQogCiAJaWYgKHBhZ2UgIT0gLTEpIHsKQEAgLTMwMSw2ICszMDgsNyBAQAogCiAJCWlmIChzdGF0ZSAhPSBGTF9SRUFESU5HKQogCQkJY29uZF9yZXNjaGVkKCk7CisJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAl9CiAJLyogVG8gZ2V0IGNvcnJlY3QgaW50ZXJydXB0IHN0YXR1cyBpbiB0aW1lb3V0IGNhc2UgKi8KIAlpbnRlcnJ1cHQgPSB0aGlzLT5yZWFkX3dvcmQodGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX0lOVEVSUlVQVCk7CkBAIC0zNDQsNyArMzUyLDcgQEAKIAogCWlmIChPTkVOQU5EX0NVUlJFTlRfQlVGRkVSUkFNKHRoaXMpKSB7CiAJCWlmIChhcmVhID09IE9ORU5BTkRfREFUQVJBTSkKLQkJCXJldHVybiBtdGQtPm9vYmJsb2NrOworCQkJcmV0dXJuIG10ZC0+d3JpdGVzaXplOwogCQlpZiAoYXJlYSA9PSBPTkVOQU5EX1NQQVJFUkFNKQogCQkJcmV0dXJuIG10ZC0+b29ic2l6ZTsKIAl9CkBAIC0zNzIsNiArMzgwLDE3IEBACiAKIAlidWZmZXJyYW0gKz0gb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSk7CiAKKwlpZiAoT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhjb3VudCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgd29yZDsKKworCQkvKiBBbGlnbiB3aXRoIHdvcmQoMTYtYml0KSBzaXplICovCisJCWNvdW50LS07CisKKwkJLyogUmVhZCB3b3JkIGFuZCBzYXZlIGJ5dGUgKi8KKwkJd29yZCA9IHRoaXMtPnJlYWRfd29yZChidWZmZXJyYW0gKyBvZmZzZXQgKyBjb3VudCk7CisJCWJ1ZmZlcltjb3VudF0gPSAod29yZCAmIDB4ZmYpOworCX0KKwogCW1lbWNweShidWZmZXIsIGJ1ZmZlcnJhbSArIG9mZnNldCwgY291bnQpOwogCiAJcmV0dXJuIDA7CkBAIC0zOTksNiArNDE4LDE3IEBACiAKIAl0aGlzLT5tbWNvbnRyb2wobXRkLCBPTkVOQU5EX1NZU19DRkcxX1NZTkNfUkVBRCk7CiAKKwlpZiAoT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhjb3VudCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgd29yZDsKKworCQkvKiBBbGlnbiB3aXRoIHdvcmQoMTYtYml0KSBzaXplICovCisJCWNvdW50LS07CisKKwkJLyogUmVhZCB3b3JkIGFuZCBzYXZlIGJ5dGUgKi8KKwkJd29yZCA9IHRoaXMtPnJlYWRfd29yZChidWZmZXJyYW0gKyBvZmZzZXQgKyBjb3VudCk7CisJCWJ1ZmZlcltjb3VudF0gPSAod29yZCAmIDB4ZmYpOworCX0KKwogCW1lbWNweShidWZmZXIsIGJ1ZmZlcnJhbSArIG9mZnNldCwgY291bnQpOwogCiAJdGhpcy0+bW1jb250cm9sKG10ZCwgMCk7CkBAIC00MjYsNiArNDU2LDIyIEBACiAKIAlidWZmZXJyYW0gKz0gb25lbmFuZF9idWZmZXJyYW1fb2Zmc2V0KG10ZCwgYXJlYSk7CiAKKwlpZiAoT05FTkFORF9DSEVDS19CWVRFX0FDQ0VTUyhjb3VudCkpIHsKKwkJdW5zaWduZWQgc2hvcnQgd29yZDsKKwkJaW50IGJ5dGVfb2Zmc2V0OworCisJCS8qIEFsaWduIHdpdGggd29yZCgxNi1iaXQpIHNpemUgKi8KKwkJY291bnQtLTsKKworCQkvKiBDYWxjdWxhdGUgYnl0ZSBhY2Nlc3Mgb2Zmc2V0ICovCisJCWJ5dGVfb2Zmc2V0ID0gb2Zmc2V0ICsgY291bnQ7CisKKwkJLyogUmVhZCB3b3JkIGFuZCBzYXZlIGJ5dGUgKi8KKwkJd29yZCA9IHRoaXMtPnJlYWRfd29yZChidWZmZXJyYW0gKyBieXRlX29mZnNldCk7CisJCXdvcmQgPSAod29yZCAmIH4weGZmKSB8IGJ1ZmZlcltjb3VudF07CisJCXRoaXMtPndyaXRlX3dvcmQod29yZCwgYnVmZmVycmFtICsgYnl0ZV9vZmZzZXQpOworCX0KKwogCW1lbWNweShidWZmZXJyYW0gKyBvZmZzZXQsIGJ1ZmZlciwgY291bnQpOwogCiAJcmV0dXJuIDA7CkBAIC01NDksMzEgKzU5NSwyOCBAQAogfQogCiAvKioKLSAqIG9uZW5hbmRfcmVhZF9lY2MgLSBbTVREIEludGVyZmFjZV0gUmVhZCBkYXRhIHdpdGggRUNDCisgKiBvbmVuYW5kX3JlYWQgLSBbTVREIEludGVyZmFjZV0gUmVhZCBkYXRhIGZyb20gZmxhc2gKICAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAcGFyYW0gZnJvbQkJb2Zmc2V0IHRvIHJlYWQgZnJvbQogICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKICAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dCBkYXRhCi0gKiBAcGFyYW0gb29iX2J1ZglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQHBhcmFtIG9vYnNlbAlvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQogICoKLSAqIE9uZU5BTkQgcmVhZCB3aXRoIEVDQwotICovCi1zdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9lY2Moc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwKLQl1X2NoYXIgKm9vYl9idWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCkKKyAqIFJlYWQgd2l0aCBlY2MKKyovCitzdGF0aWMgaW50IG9uZW5hbmRfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHJlYWQgPSAwLCBjb2x1bW47CiAJaW50IHRoaXNsZW47CiAJaW50IHJldCA9IDA7CiAKLQlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAib25lbmFuZF9yZWFkX2VjYzogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfcmVhZDogZnJvbSA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIGZyb20sIChpbnQpIGxlbik7CiAKIAkvKiBEbyBub3QgYWxsb3cgcmVhZHMgcGFzdCBlbmQgb2YgZGV2aWNlICovCiAJaWYgKChmcm9tICsgbGVuKSA+IG10ZC0+c2l6ZSkgewotCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF9yZWFkX2VjYzogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKKwkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZDogQXR0ZW1wdCByZWFkIGJleW9uZCBlbmQgb2YgZGV2aWNlXG4iKTsKIAkJKnJldGxlbiA9IDA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU4NCwxNCArNjI3LDE0IEBACiAJLyogVE9ETyBoYW5kbGluZyBvb2IgKi8KIAogCXdoaWxlIChyZWFkIDwgbGVuKSB7Ci0JCXRoaXNsZW4gPSBtaW5fdChpbnQsIG10ZC0+b29iYmxvY2ssIGxlbiAtIHJlYWQpOworCQl0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPndyaXRlc2l6ZSwgbGVuIC0gcmVhZCk7CiAKLQkJY29sdW1uID0gZnJvbSAmIChtdGQtPm9vYmJsb2NrIC0gMSk7Ci0JCWlmIChjb2x1bW4gKyB0aGlzbGVuID4gbXRkLT5vb2JibG9jaykKLQkJCXRoaXNsZW4gPSBtdGQtPm9vYmJsb2NrIC0gY29sdW1uOworCQljb2x1bW4gPSBmcm9tICYgKG10ZC0+d3JpdGVzaXplIC0gMSk7CisJCWlmIChjb2x1bW4gKyB0aGlzbGVuID4gbXRkLT53cml0ZXNpemUpCisJCQl0aGlzbGVuID0gbXRkLT53cml0ZXNpemUgLSBjb2x1bW47CiAKIAkJaWYgKCFvbmVuYW5kX2NoZWNrX2J1ZmZlcnJhbShtdGQsIGZyb20pKSB7Ci0JCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgZnJvbSwgbXRkLT5vb2JibG9jayk7CisJCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgZnJvbSwgbXRkLT53cml0ZXNpemUpOwogCiAJCQlyZXQgPSB0aGlzLT53YWl0KG10ZCwgRkxfUkVBRElORyk7CiAJCQkvKiBGaXJzdCBjb3B5IGRhdGEgYW5kIGNoZWNrIHJldHVybiB2YWx1ZSBmb3IgRUNDIGhhbmRsaW5nICovCkBAIC02MDYsNyArNjQ5LDcgQEAKIAkJCWJyZWFrOwogCiAJCWlmIChyZXQpIHsKLQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3JlYWRfZWNjOiByZWFkIGZhaWxlZCA9ICVkXG4iLCByZXQpOworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfcmVhZDogcmVhZCBmYWlsZWQgPSAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKQEAgLTYyOCwyMyArNjcxLDcgQEAKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3JlYWQgLSBbTVREIEludGVyZmFjZV0gTVREIGNvbXBhYmlsaXR5IGZ1bmN0aW9uIGZvciBvbmVuYW5kX3JlYWRfZWNjCi0gKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQotICogQHBhcmFtIGZyb20JCW9mZnNldCB0byByZWFkIGZyb20KLSAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCi0gKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCi0gKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQgZGF0YQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG9uZW5hbmRfcmVhZF9lY2Mgd2l0aCBvb2IgYnVmZmVyIGFuZCBvb2JzZWwgPSBOVUxMCi0qLwotc3RhdGljIGludCBvbmVuYW5kX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gb25lbmFuZF9yZWFkX2VjYyhtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBidWYsIE5VTEwsIE5VTEwpOwotfQotCi0vKioKLSAqIG9uZW5hbmRfcmVhZF9vb2IgLSBbTVREIEludGVyZmFjZV0gT25lTkFORCByZWFkIG91dC1vZi1iYW5kCisgKiBvbmVuYW5kX2RvX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE9uZU5BTkQgcmVhZCBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSBmcm9tCQlvZmZzZXQgdG8gcmVhZCBmcm9tCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZApAQCAtNjUzLDggKzY4MCw4IEBACiAgKgogICogT25lTkFORCByZWFkIG91dC1vZi1iYW5kIGRhdGEgZnJvbSB0aGUgc3BhcmUgYXJlYQogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfcmVhZF9vb2Ioc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK2ludCBvbmVuYW5kX2RvX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwogCWludCByZWFkID0gMCwgdGhpc2xlbiwgY29sdW1uOwpAQCAtNzA0LDcgKzczMSw3IEBACiAJCS8qIFJlYWQgbW9yZT8gKi8KIAkJaWYgKHJlYWQgPCBsZW4pIHsKIAkJCS8qIFBhZ2Ugc2l6ZSAqLwotCQkJZnJvbSArPSBtdGQtPm9vYmJsb2NrOworCQkJZnJvbSArPSBtdGQtPndyaXRlc2l6ZTsKIAkJCWNvbHVtbiA9IDA7CiAJCX0KIAl9CkBAIC03MTcsOCArNzQ0LDUzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBvbmVuYW5kX3JlYWRfb29iIC0gW01URCBJbnRlcmZhY2VdIE5BTkQgd3JpdGUgZGF0YSBhbmQvb3Igb3V0LW9mLWJhbmQKKyAqIEBtdGQ6CU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAZnJvbToJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQG9wczoJb29iIG9wZXJhdGlvbiBkZXNjcmlwdGlvbiBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIGludCBvbmVuYW5kX3JlYWRfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwKKwkJCSAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKK3sKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOworCisJcmV0dXJuIG9uZW5hbmRfZG9fcmVhZF9vb2IobXRkLCBmcm9tICsgb3BzLT5vb2JvZmZzLCBvcHMtPmxlbiwKKwkJCQkgICAmb3BzLT5yZXRsZW4sIG9wcy0+b29iYnVmKTsKK30KKwogI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUKIC8qKgorICogb25lbmFuZF92ZXJpZnlfb29iIC0gW0dFTkVSSUNdIHZlcmlmeSB0aGUgb29iIGNvbnRlbnRzIGFmdGVyIGEgd3JpdGUKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byB2ZXJpZnkKKyAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHJlYWQgZnJvbQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgYW5kIGNvbXBhcmUKKyAqCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF92ZXJpZnlfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgbG9mZl90IHRvLCBpbnQgbGVuKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJY2hhciAqcmVhZHAgPSB0aGlzLT5wYWdlX2J1ZjsKKwlpbnQgY29sdW1uID0gdG8gJiAobXRkLT5vb2JzaXplIC0gMSk7CisJaW50IHN0YXR1cywgaTsKKworCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFET09CLCB0bywgbXRkLT5vb2JzaXplKTsKKwlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMCk7CisJc3RhdHVzID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBzdGF0dXM7CisKKwl0aGlzLT5yZWFkX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfU1BBUkVSQU0sIHJlYWRwLCBjb2x1bW4sIGxlbik7CisKKwlmb3IoaSA9IDA7IGkgPCBsZW47IGkrKykKKwkJaWYgKGJ1ZltpXSAhPSAweEZGICYmIGJ1ZltpXSAhPSByZWFkcFtpXSkKKwkJCXJldHVybiAtRUJBRE1TRzsKKworCXJldHVybiAwOworfQorCisvKioKICAqIG9uZW5hbmRfdmVyaWZ5X3BhZ2UgLSBbR0VORVJJQ10gdmVyaWZ5IHRoZSBjaGlwIGNvbnRlbnRzIGFmdGVyIGEgd3JpdGUKICAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCiAgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byB2ZXJpZnkKQEAgLTczMSw3ICs4MDMsNyBAQAogCXZvaWQgX19pb21lbSAqZGF0YXJhbTAsICpkYXRhcmFtMTsKIAlpbnQgcmV0ID0gMDsKIAotCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9SRUFELCBhZGRyLCBtdGQtPm9vYmJsb2NrKTsKKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUkVBRCwgYWRkciwgbXRkLT53cml0ZXNpemUpOwogCiAJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1JFQURJTkcpOwogCWlmIChyZXQpCkBAIC03NDEsNTMgKzgxMyw1MSBAQAogCiAJLyogQ2hlY2ssIGlmIHRoZSB0d28gZGF0YXJhbSBhcmVhcyBhcmUgc2FtZSAqLwogCWRhdGFyYW0wID0gdGhpcy0+YmFzZSArIE9ORU5BTkRfREFUQVJBTTsKLQlkYXRhcmFtMSA9IGRhdGFyYW0wICsgbXRkLT5vb2JibG9jazsKKwlkYXRhcmFtMSA9IGRhdGFyYW0wICsgbXRkLT53cml0ZXNpemU7CiAKLQlpZiAobWVtY21wKGRhdGFyYW0wLCBkYXRhcmFtMSwgbXRkLT5vb2JibG9jaykpCisJaWYgKG1lbWNtcChkYXRhcmFtMCwgZGF0YXJhbTEsIG10ZC0+d3JpdGVzaXplKSkKIAkJcmV0dXJuIC1FQkFETVNHOwogCiAJcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBvbmVuYW5kX3ZlcmlmeV9wYWdlKC4uLikJKDApCisjZGVmaW5lIG9uZW5hbmRfdmVyaWZ5X29vYiguLi4pCQkoMCkKICNlbmRpZgogCi0jZGVmaW5lIE5PVEFMSUdORUQoeCkJKCh4ICYgKG10ZC0+b29iYmxvY2sgLSAxKSkgIT0gMCkKKyNkZWZpbmUgTk9UQUxJR05FRCh4KQkoKHggJiAobXRkLT53cml0ZXNpemUgLSAxKSkgIT0gMCkKIAogLyoqCi0gKiBvbmVuYW5kX3dyaXRlX2VjYyAtIFtNVEQgSW50ZXJmYWNlXSBPbmVOQU5EIHdyaXRlIHdpdGggRUNDCisgKiBvbmVuYW5kX3dyaXRlIC0gW01URCBJbnRlcmZhY2VdIHdyaXRlIGJ1ZmZlciB0byBGTEFTSAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKICAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKICAqIEBwYXJhbSBidWYJCXRoZSBkYXRhIHRvIHdyaXRlCi0gKiBAcGFyYW0gZWNjYnVmCWZpbGVzeXN0ZW0gc3VwcGxpZWQgb29iIGRhdGEgYnVmZmVyCi0gKiBAcGFyYW0gb29ic2VsCW9vYiBzZWxlY3Rpb24gc3RydWN0dXJlCiAgKgotICogT25lTkFORCB3cml0ZSB3aXRoIEVDQworICogV3JpdGUgd2l0aCBFQ0MKICAqLwotc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAotCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZiwKLQl1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBvbmVuYW5kX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQogewogCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CiAJaW50IHdyaXR0ZW4gPSAwOwogCWludCByZXQgPSAwOwogCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfd3JpdGVfZWNjOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOworCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3dyaXRlOiB0byA9IDB4JTA4eCwgbGVuID0gJWlcbiIsICh1bnNpZ25lZCBpbnQpIHRvLCAoaW50KSBsZW4pOwogCiAJLyogSW5pdGlhbGl6ZSByZXRsZW4sIGluIGNhc2Ugb2YgZWFybHkgZXhpdCAqLwogCSpyZXRsZW4gPSAwOwogCiAJLyogRG8gbm90IGFsbG93IHdyaXRlcyBwYXN0IGVuZCBvZiBkZXZpY2UgKi8KIAlpZiAodW5saWtlbHkoKHRvICsgbGVuKSA+IG10ZC0+c2l6ZSkpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGVfZWNjOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CisJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiBBdHRlbXB0IHdyaXRlIHRvIHBhc3QgZW5kIG9mIGRldmljZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIFJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCiAgICAgICAgIGlmICh1bmxpa2VseShOT1RBTElHTkVEKHRvKSkgfHwgdW5saWtlbHkoTk9UQUxJR05FRChsZW4pKSkgewotICAgICAgICAgICAgICAgIERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX2VjYzogQXR0ZW1wdCB0byB3cml0ZSBub3QgcGFnZSBhbGlnbmVkIGRhdGFcbiIpOworICAgICAgICAgICAgICAgIERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiBBdHRlbXB0IHRvIHdyaXRlIG5vdCBwYWdlIGFsaWduZWQgZGF0YVxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgICAgIH0KIApAQCAtNzk2LDIwICs4NjYsMjAgQEAKIAogCS8qIExvb3AgdW50aWwgYWxsIGRhdGEgd3JpdGUgKi8KIAl3aGlsZSAod3JpdHRlbiA8IGxlbikgewotCQlpbnQgdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT5vb2JibG9jaywgbGVuIC0gd3JpdHRlbik7CisJCWludCB0aGlzbGVuID0gbWluX3QoaW50LCBtdGQtPndyaXRlc2l6ZSwgbGVuIC0gd3JpdHRlbik7CiAKLQkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSwgdG8sIG10ZC0+b29iYmxvY2spOworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfQlVGRkVSUkFNLCB0bywgbXRkLT53cml0ZXNpemUpOwogCiAJCXRoaXMtPndyaXRlX2J1ZmZlcnJhbShtdGQsIE9ORU5BTkRfREFUQVJBTSwgYnVmLCAwLCB0aGlzbGVuKTsKIAkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgZmZjaGFycywgMCwgbXRkLT5vb2JzaXplKTsKIAotCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPRywgdG8sIG10ZC0+b29iYmxvY2spOworCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPRywgdG8sIG10ZC0+d3JpdGVzaXplKTsKIAogCQlvbmVuYW5kX3VwZGF0ZV9idWZmZXJyYW0obXRkLCB0bywgMSk7CiAKIAkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOwogCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9lY2M6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlOiB3cml0ZSBmaWxhZWQgJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC04MTgsNyArODg4LDcgQEAKIAkJLyogT25seSBjaGVjayB2ZXJpZnkgd3JpdGUgdHVybiBvbiAqLwogCQlyZXQgPSBvbmVuYW5kX3ZlcmlmeV9wYWdlKG10ZCwgKHVfY2hhciAqKSBidWYsIHRvKTsKIAkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGVfZWNjOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGU6IHZlcmlmeSBmYWlsZWQgJWRcbiIsIHJldCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCkBAIC04MzksMjQgKzkwOSw3IEBACiB9CiAKIC8qKgotICogb25lbmFuZF93cml0ZSAtIFtNVEQgSW50ZXJmYWNlXSBjb21wYWJpbGl0eSBmdW5jdGlvbiBmb3Igb25lbmFuZF93cml0ZV9lY2MKLSAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcGFyYW0gdG8JCW9mZnNldCB0byB3cml0ZSB0bwotICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCi0gKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0dGVuIGJ5dGVzCi0gKiBAcGFyYW0gYnVmCQl0aGUgZGF0YSB0byB3cml0ZQotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2ltcGx5IGNhbGxzIG9uZW5hbmRfd3JpdGVfZWNjCi0gKiB3aXRoIG9vYiBidWZmZXIgYW5kIG9vYnNlbCA9IE5VTEwKLSAqLwotc3RhdGljIGludCBvbmVuYW5kX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQotewotCXJldHVybiBvbmVuYW5kX3dyaXRlX2VjYyhtdGQsIHRvLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCBOVUxMKTsKLX0KLQotLyoqCi0gKiBvbmVuYW5kX3dyaXRlX29vYiAtIFtNVEQgSW50ZXJmYWNlXSBPbmVOQU5EIHdyaXRlIG91dC1vZi1iYW5kCisgKiBvbmVuYW5kX2RvX3dyaXRlX29vYiAtIFtJbnRlcm5hbF0gT25lTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKICAqIEBwYXJhbSB0bwkJb2Zmc2V0IHRvIHdyaXRlIHRvCiAgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUKQEAgLTg2NSwxMSArOTE4LDExIEBACiAgKgogICogT25lTkFORCB3cml0ZSBvdXQtb2YtYmFuZAogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGVfb29iKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCi0Jc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQorc3RhdGljIGludCBvbmVuYW5kX2RvX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAorCQkJCXNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCWludCBjb2x1bW4sIHN0YXR1czsKKwlpbnQgY29sdW1uLCByZXQgPSAwOwogCWludCB3cml0dGVuID0gMDsKIAogCURFQlVHKE1URF9ERUJVR19MRVZFTDMsICJvbmVuYW5kX3dyaXRlX29vYjogdG8gPSAweCUwOHgsIGxlbiA9ICVpXG4iLCAodW5zaWduZWQgaW50KSB0bywgKGludCkgbGVuKTsKQEAgLTg5NCwxNiArOTQ3LDI3IEBACiAKIAkJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSwgdG8sIG10ZC0+b29ic2l6ZSk7CiAKLQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgZmZjaGFycywgMCwgbXRkLT5vb2JzaXplKTsKLQkJdGhpcy0+d3JpdGVfYnVmZmVycmFtKG10ZCwgT05FTkFORF9TUEFSRVJBTSwgYnVmLCBjb2x1bW4sIHRoaXNsZW4pOworCQkvKiBXZSBzZW5kIGRhdGEgdG8gc3BhcmUgcmFtIHdpdGggb29ic2l6ZQorCQkgKiB0byBwcmV2ZW50IGJ5dGUgYWNjZXNzICovCisJCW1lbXNldCh0aGlzLT5wYWdlX2J1ZiwgMHhmZiwgbXRkLT5vb2JzaXplKTsKKwkJbWVtY3B5KHRoaXMtPnBhZ2VfYnVmICsgY29sdW1uLCBidWYsIHRoaXNsZW4pOworCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCB0aGlzLT5wYWdlX2J1ZiwgMCwgbXRkLT5vb2JzaXplKTsKIAogCQl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfUFJPR09PQiwgdG8sIG10ZC0+b29ic2l6ZSk7CiAKIAkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sIDApOwogCi0JCXN0YXR1cyA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKLQkJaWYgKHN0YXR1cykKKwkJcmV0ID0gdGhpcy0+d2FpdChtdGQsIEZMX1dSSVRJTkcpOworCQlpZiAocmV0KSB7CisJCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZV9vb2I6IHdyaXRlIGZpbGFlZCAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0ID0gb25lbmFuZF92ZXJpZnlfb29iKG10ZCwgYnVmLCB0bywgdGhpc2xlbik7CisJCWlmIChyZXQpIHsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRlX29vYjogdmVyaWZ5IGZhaWxlZCAlZFxuIiwgcmV0KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKIAkJd3JpdHRlbiArPSB0aGlzbGVuOwogCkBAIC05MjAsMTQ1ICs5ODQsMjIgQEAKIAogCSpyZXRsZW4gPSB3cml0dGVuOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCi0gKiBvbmVuYW5kX3dyaXRldl9lY2MgLSBbTVREIEludGVyZmFjZV0gd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYwotICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKLSAqIEBwYXJhbSB2ZWNzCQl0aGUgaW92ZWN0b3JzIHRvIHdyaXRlCi0gKiBAcGFyYW0gY291bnQJCW51bWJlciBvZiB2ZWN0b3JzCi0gKiBAcGFyYW0gdG8JCW9mZnNldCB0byB3cml0ZSB0bwotICogQHBhcmFtIHJldGxlbglwb2ludGVyIHRvIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBieXRlcwotICogQHBhcmFtIGVjY2J1ZglmaWxlc3lzdGVtIHN1cHBsaWVkIG9vYiBkYXRhIGJ1ZmZlcgotICogQHBhcmFtIG9vYnNlbAlvb2Igc2VsZWN0aW9uIHN0cnVjdHVyZQotICoKLSAqIE9uZU5BTkQgd3JpdGUgd2l0aCBpb3ZlYyB3aXRoIGVjYworICogb25lbmFuZF93cml0ZV9vb2IgLSBbTVREIEludGVyZmFjZV0gTkFORCB3cml0ZSBkYXRhIGFuZC9vciBvdXQtb2YtYmFuZAorICogQG10ZDoJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBmcm9tOglvZmZzZXQgdG8gcmVhZCBmcm9tCisgKiBAb3BzOglvb2Igb3BlcmF0aW9uIGRlc2NyaXB0aW9uIHN0cnVjdHVyZQogICovCi1zdGF0aWMgaW50IG9uZW5hbmRfd3JpdGV2X2VjYyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbiwKLQl1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKQorc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorCQkJICAgICBzdHJ1Y3QgbXRkX29vYl9vcHMgKm9wcykKIHsKLQlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OwotCXVuc2lnbmVkIGNoYXIgKnBidWY7Ci0Jc2l6ZV90IHRvdGFsX2xlbiwgbGVuOwotCWludCBpLCB3cml0dGVuID0gMDsKLQlpbnQgcmV0ID0gMDsKKwlCVUdfT04ob3BzLT5tb2RlICE9IE1URF9PT0JfUExBQ0UpOwogCi0JLyogUHJlc2V0IHdyaXR0ZW4gbGVuIGZvciBlYXJseSBleGl0ICovCi0JKnJldGxlbiA9IDA7Ci0KLQkvKiBDYWxjdWxhdGUgdG90YWwgbGVuZ3RoIG9mIGRhdGEgKi8KLQl0b3RhbF9sZW4gPSAwOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCQl0b3RhbF9sZW4gKz0gdmVjc1tpXS5pb3ZfbGVuOwotCi0JREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIm9uZW5hbmRfd3JpdGV2X2VjYzogdG8gPSAweCUwOHgsIGxlbiA9ICVpLCBjb3VudCA9ICVsZFxuIiwgKHVuc2lnbmVkIGludCkgdG8sICh1bnNpZ25lZCBpbnQpIHRvdGFsX2xlbiwgY291bnQpOwotCi0JLyogRG8gbm90IGFsbG93IHdyaXRlIHBhc3QgZW5kIG9mIHRoZSBkZXZpY2UgKi8KLQlpZiAodW5saWtlbHkoKHRvICsgdG90YWxfbGVuKSA+IG10ZC0+c2l6ZSkpIHsKLQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGV2X2VjYzogQXR0ZW1wdGVkIHdyaXRlIHBhc3QgZW5kIG9mIGRldmljZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFJlamVjdCB3cml0ZXMsIHdoaWNoIGFyZSBub3QgcGFnZSBhbGlnbmVkICovCi0gICAgICAgIGlmICh1bmxpa2VseShOT1RBTElHTkVEKHRvKSkgfHwgdW5saWtlbHkoTk9UQUxJR05FRCh0b3RhbF9sZW4pKSkgewotICAgICAgICAgICAgICAgIERFQlVHKE1URF9ERUJVR19MRVZFTDAsICJvbmVuYW5kX3dyaXRldl9lY2M6IEF0dGVtcHQgdG8gd3JpdGUgbm90IHBhZ2UgYWxpZ25lZCBkYXRhXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotCi0JLyogR3JhYiB0aGUgbG9jayBhbmQgc2VlIGlmIHRoZSBkZXZpY2UgaXMgYXZhaWxhYmxlICovCi0Jb25lbmFuZF9nZXRfZGV2aWNlKG10ZCwgRkxfV1JJVElORyk7Ci0KLQkvKiBUT0RPIGhhbmRsaW5nIG9vYiAqLwotCi0JLyogTG9vcCB1bnRpbCBhbGwga2V2ZSdzIGRhdGEgaGFzIGJlZW4gd3JpdHRlbiAqLwotCWxlbiA9IDA7Ci0Jd2hpbGUgKGNvdW50KSB7Ci0JCXBidWYgPSB0aGlzLT5wYWdlX2J1ZjsKLQkJLyoKLQkJICogSWYgdGhlIGdpdmVuIHR1cGxlIGlzID49IHBhZ2VzaXplIHRoZW4KLQkJICogd3JpdGUgaXQgb3V0IGZyb20gdGhlIGlvdgotCQkgKi8KLQkJaWYgKCh2ZWNzLT5pb3ZfbGVuIC0gbGVuKSA+PSBtdGQtPm9vYmJsb2NrKSB7Ci0JCQlwYnVmID0gdmVjcy0+aW92X2Jhc2UgKyBsZW47Ci0KLQkJCWxlbiArPSBtdGQtPm9vYmJsb2NrOwotCi0JCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCWlmIChsZW4gPj0gKGludCkgdmVjcy0+aW92X2xlbikgewotCQkJCXZlY3MrKzsKLQkJCQlsZW4gPSAwOwotCQkJCWNvdW50LS07Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgY250ID0gMCwgdGhpc2xlbjsKLQkJCXdoaWxlIChjbnQgPCBtdGQtPm9vYmJsb2NrKSB7Ci0JCQkJdGhpc2xlbiA9IG1pbl90KGludCwgbXRkLT5vb2JibG9jayAtIGNudCwgdmVjcy0+aW92X2xlbiAtIGxlbik7Ci0JCQkJbWVtY3B5KHRoaXMtPnBhZ2VfYnVmICsgY250LCB2ZWNzLT5pb3ZfYmFzZSArIGxlbiwgdGhpc2xlbik7Ci0JCQkJY250ICs9IHRoaXNsZW47Ci0JCQkJbGVuICs9IHRoaXNsZW47Ci0KLQkJCQkvKiBDaGVjaywgaWYgd2UgaGF2ZSB0byBzd2l0Y2ggdG8gdGhlIG5leHQgdHVwbGUgKi8KLQkJCQlpZiAobGVuID49IChpbnQpIHZlY3MtPmlvdl9sZW4pIHsKLQkJCQkJdmVjcysrOwotCQkJCQlsZW4gPSAwOwotCQkJCQljb3VudC0tOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9CVUZGRVJSQU0sIHRvLCBtdGQtPm9vYmJsb2NrKTsKLQotCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX0RBVEFSQU0sIHBidWYsIDAsIG10ZC0+b29iYmxvY2spOwotCQl0aGlzLT53cml0ZV9idWZmZXJyYW0obXRkLCBPTkVOQU5EX1NQQVJFUkFNLCBmZmNoYXJzLCAwLCBtdGQtPm9vYnNpemUpOwotCi0JCXRoaXMtPmNvbW1hbmQobXRkLCBPTkVOQU5EX0NNRF9QUk9HLCB0bywgbXRkLT5vb2JibG9jayk7Ci0KLQkJb25lbmFuZF91cGRhdGVfYnVmZmVycmFtKG10ZCwgdG8sIDEpOwotCi0JCXJldCA9IHRoaXMtPndhaXQobXRkLCBGTF9XUklUSU5HKTsKLQkJaWYgKHJldCkgewotCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMCwgIm9uZW5hbmRfd3JpdGV2X2VjYzogd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCi0JCS8qIE9ubHkgY2hlY2sgdmVyaWZ5IHdyaXRlIHR1cm4gb24gKi8KLQkJcmV0ID0gb25lbmFuZF92ZXJpZnlfcGFnZShtdGQsICh1X2NoYXIgKikgcGJ1ZiwgdG8pOwotCQlpZiAocmV0KSB7Ci0JCQlERUJVRyhNVERfREVCVUdfTEVWRUwwLCAib25lbmFuZF93cml0ZXZfZWNjOiB2ZXJpZnkgZmFpbGVkICVkXG4iLCByZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl3cml0dGVuICs9IG10ZC0+b29iYmxvY2s7Ci0KLQkJdG8gKz0gbXRkLT5vb2JibG9jazsKLQl9Ci0KLW91dDoKLQkvKiBEZXNlbGVjdCBhbmQgd2FrdCB1cCBhbnlvbmUgd2FpdGluZyBvbiB0aGUgZGV2aWNlICovCi0Jb25lbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwotCi0JKnJldGxlbiA9IHdyaXR0ZW47Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBvbmVuYW5kX3dyaXRldiAtIFtNVEQgSW50ZXJmYWNlXSBjb21wYWJpbHR5IGZ1bmN0aW9uIGZvciBvbmVuYW5kX3dyaXRldl9lY2MKLSAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBAcGFyYW0gdmVjcwkJdGhlIGlvdmVjdG9ycyB0byB3cml0ZQotICogQHBhcmFtIGNvdW50CQludW1iZXIgb2YgdmVjdG9ycwotICogQHBhcmFtIHRvCQlvZmZzZXQgdG8gd3JpdGUgdG8KLSAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gYnl0ZXMKLSAqCi0gKiBPbmVOQU5EIHdyaXRlIHdpdGgga3ZlYy4gVGhpcyBqdXN0IGNhbGxzIHRoZSBlY2MgZnVuY3Rpb24KLSAqLwotc3RhdGljIGludCBvbmVuYW5kX3dyaXRldihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3Qgc3RydWN0IGt2ZWMgKnZlY3MsCi0JdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbikKLXsKLQlyZXR1cm4gb25lbmFuZF93cml0ZXZfZWNjKG10ZCwgdmVjcywgY291bnQsIHRvLCByZXRsZW4sIE5VTEwsIE5VTEwpOworCXJldHVybiBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIHRvICsgb3BzLT5vb2JvZmZzLCBvcHMtPmxlbiwKKwkJCQkgICAgJm9wcy0+cmV0bGVuLCBvcHMtPm9vYmJ1Zik7CiB9CiAKIC8qKgpAQCAtMTIyNyw3ICsxMTY4LDcgQEAKIAogICAgICAgICAvKiBXZSB3cml0ZSB0d28gYnl0ZXMsIHNvIHdlIGRvbnQgaGF2ZSB0byBtZXNzIHdpdGggMTYgYml0IGFjY2VzcyAqLwogICAgICAgICBvZnMgKz0gbXRkLT5vb2JzaXplICsgKGJibS0+YmFkYmxvY2twb3MgJiB+MHgwMSk7Ci0gICAgICAgIHJldHVybiBtdGQtPndyaXRlX29vYihtdGQsIG9mcyAsIDIsICZyZXRsZW4sIGJ1Zik7CisgICAgICAgIHJldHVybiBvbmVuYW5kX2RvX3dyaXRlX29vYihtdGQsIG9mcyAsIDIsICZyZXRsZW4sIGJ1Zik7CiB9CiAKIC8qKgpAQCAtMTMyNCw2ICsxMjY1LDMwNCBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX01URF9PTkVOQU5EX09UUAorCisvKiBJbnRlcmFsIE9UUCBvcGVyYXRpb24gKi8KK3R5cGVkZWYgaW50ICgqb3RwX29wX3QpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZm9ybSwgc2l6ZV90IGxlbiwKKwkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKworLyoqCisgKiBkb19vdHBfcmVhZCAtIFtERUZBVUxUXSBSZWFkIE9UUCBibG9jayBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gcmVhZAorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWRieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogUmVhZCBPVFAgYmxvY2sgYXJlYS4KKyAqLworc3RhdGljIGludCBkb19vdHBfcmVhZChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb25lbmFuZF9jaGlwICp0aGlzID0gbXRkLT5wcml2OworCWludCByZXQ7CisKKwkvKiBFbnRlciBPVFAgYWNjZXNzIG1vZGUgKi8KKwl0aGlzLT5jb21tYW5kKG10ZCwgT05FTkFORF9DTURfT1RQX0FDQ0VTUywgMCwgMCk7CisJdGhpcy0+d2FpdChtdGQsIEZMX09UUElORyk7CisKKwlyZXQgPSBtdGQtPnJlYWQobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmKTsKKworCS8qIEV4aXQgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkb19vdHBfd3JpdGUgLSBbREVGQVVMVF0gV3JpdGUgT1RQIGJsb2NrIGFyZWEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byB3cml0ZQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0ZSBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogV3JpdGUgT1RQIGJsb2NrIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgZG9fb3RwX3dyaXRlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXN0cnVjdCBvbmVuYW5kX2NoaXAgKnRoaXMgPSBtdGQtPnByaXY7CisJdW5zaWduZWQgY2hhciAqcGJ1ZiA9IGJ1ZjsKKwlpbnQgcmV0OworCisJLyogRm9yY2UgYnVmZmVyIHBhZ2UgYWxpZ25lZCAqLworCWlmIChsZW4gPCBtdGQtPndyaXRlc2l6ZSkgeworCQltZW1jcHkodGhpcy0+cGFnZV9idWYsIGJ1ZiwgbGVuKTsKKwkJbWVtc2V0KHRoaXMtPnBhZ2VfYnVmICsgbGVuLCAweGZmLCBtdGQtPndyaXRlc2l6ZSAtIGxlbik7CisJCXBidWYgPSB0aGlzLT5wYWdlX2J1ZjsKKwkJbGVuID0gbXRkLT53cml0ZXNpemU7CisJfQorCisJLyogRW50ZXIgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9PVFBJTkcpOworCisJcmV0ID0gbXRkLT53cml0ZShtdGQsIGZyb20sIGxlbiwgcmV0bGVuLCBwYnVmKTsKKworCS8qIEV4aXQgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBkb19vdHBfbG9jayAtIFtERUZBVUxUXSBMb2NrIE9UUCBibG9jayBhcmVhCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gbG9jaworICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIGxvY2sKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIGxvY2sgYnl0ZXMKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dC9nZXQgZGF0YQorICoKKyAqIExvY2sgT1RQIGJsb2NrIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgZG9fb3RwX2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgcmV0OworCisJLyogRW50ZXIgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX09UUF9BQ0NFU1MsIDAsIDApOworCXRoaXMtPndhaXQobXRkLCBGTF9PVFBJTkcpOworCisJcmV0ID0gb25lbmFuZF9kb193cml0ZV9vb2IobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgYnVmKTsKKworCS8qIEV4aXQgT1RQIGFjY2VzcyBtb2RlICovCisJdGhpcy0+Y29tbWFuZChtdGQsIE9ORU5BTkRfQ01EX1JFU0VULCAwLCAwKTsKKwl0aGlzLT53YWl0KG10ZCwgRkxfUkVTRVRJTkcpOworCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiBvbmVuYW5kX290cF93YWxrIC0gW0RFRkFVTFRdIEhhbmRsZSBPVFAgb3BlcmF0aW9uCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGZyb20JCVRoZSBvZmZzZXQgdG8gcmVhZC93cml0ZQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQvd3JpdGUKKyAqIEBwYXJhbSByZXRsZW4JcG9pbnRlciB0byB2YXJpYWJsZSB0byBzdG9yZSB0aGUgbnVtYmVyIG9mIHJlYWQgYnl0ZXMKKyAqIEBwYXJhbSBidWYJCXRoZSBkYXRhYnVmZmVyIHRvIHB1dC9nZXQgZGF0YQorICogQHBhcmFtIGFjdGlvbglkbyBnaXZlbiBhY3Rpb24KKyAqIEBwYXJhbSBtb2RlCQlzcGVjaWZ5IHVzZXIgYW5kIGZhY3RvcnkKKyAqCisgKiBIYW5kbGUgT1RQIG9wZXJhdGlvbi4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX290cF93YWxrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwKKwkJCW90cF9vcF90IGFjdGlvbiwgaW50IG1vZGUpCit7CisJc3RydWN0IG9uZW5hbmRfY2hpcCAqdGhpcyA9IG10ZC0+cHJpdjsKKwlpbnQgb3RwX3BhZ2VzOworCWludCBkZW5zaXR5OworCWludCByZXQgPSAwOworCisJKnJldGxlbiA9IDA7CisKKwlkZW5zaXR5ID0gdGhpcy0+ZGV2aWNlX2lkID4+IE9ORU5BTkRfREVWSUNFX0RFTlNJVFlfU0hJRlQ7CisJaWYgKGRlbnNpdHkgPCBPTkVOQU5EX0RFVklDRV9ERU5TSVRZXzUxMk1iKQorCQlvdHBfcGFnZXMgPSAyMDsKKwllbHNlCisJCW90cF9wYWdlcyA9IDEwOworCisJaWYgKG1vZGUgPT0gTVREX09UUF9GQUNUT1JZKSB7CisJCWZyb20gKz0gbXRkLT53cml0ZXNpemUgKiBvdHBfcGFnZXM7CisJCW90cF9wYWdlcyA9IDY0IC0gb3RwX3BhZ2VzOworCX0KKworCS8qIENoZWNrIFVzZXIvRmFjdG9yeSBib3VuZGFyeSAqLworCWlmICgoKG10ZC0+d3JpdGVzaXplICogb3RwX3BhZ2VzKSAtIChmcm9tICsgbGVuKSkgPCAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChsZW4gPiAwICYmIG90cF9wYWdlcyA+IDApIHsKKwkJaWYgKCFhY3Rpb24pIHsJLyogT1RQIEluZm8gZnVuY3Rpb25zICovCisJCQlzdHJ1Y3Qgb3RwX2luZm8gKm90cGluZm87CisKKwkJCWxlbiAtPSBzaXplb2Yoc3RydWN0IG90cF9pbmZvKTsKKwkJCWlmIChsZW4gPD0gMCkKKwkJCQlyZXR1cm4gLUVOT1NQQzsKKworCQkJb3RwaW5mbyA9IChzdHJ1Y3Qgb3RwX2luZm8gKikgYnVmOworCQkJb3RwaW5mby0+c3RhcnQgPSBmcm9tOworCQkJb3RwaW5mby0+bGVuZ3RoID0gbXRkLT53cml0ZXNpemU7CisJCQlvdHBpbmZvLT5sb2NrZWQgPSAwOworCisJCQlmcm9tICs9IG10ZC0+d3JpdGVzaXplOworCQkJYnVmICs9IHNpemVvZihzdHJ1Y3Qgb3RwX2luZm8pOworCQkJKnJldGxlbiArPSBzaXplb2Yoc3RydWN0IG90cF9pbmZvKTsKKwkJfSBlbHNlIHsKKwkJCXNpemVfdCB0bXBfcmV0bGVuOworCQkJaW50IHNpemUgPSBsZW47CisKKwkJCXJldCA9IGFjdGlvbihtdGQsIGZyb20sIGxlbiwgJnRtcF9yZXRsZW4sIGJ1Zik7CisKKwkJCWJ1ZiArPSBzaXplOworCQkJbGVuIC09IHNpemU7CisJCQkqcmV0bGVuICs9IHNpemU7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisJCX0KKwkJb3RwX3BhZ2VzLS07CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb25lbmFuZF9nZXRfZmFjdF9wcm90X2luZm8gLSBbTVREIEludGVyZmFjZV0gUmVhZCBmYWN0b3J5IE9UUCBpbmZvCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIFJlYWQgZmFjdG9yeSBPVFAgaW5mby4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX2dldF9mYWN0X3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCXN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG9uZW5hbmRfb3RwX3dhbGsobXRkLCAwLCBsZW4sICZyZXRsZW4sICh1X2NoYXIgKikgYnVmLCBOVUxMLCBNVERfT1RQX0ZBQ1RPUlkpOworCisJcmV0dXJuIHJldCA/IDogcmV0bGVuOworfQorCisvKioKKyAqIG9uZW5hbmRfcmVhZF9mYWN0X3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIFJlYWQgZmFjdG9yeSBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIHJlYWQKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBSZWFkIGZhY3RvcnkgT1RQIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9yZWFkX2ZhY3RfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXJldHVybiBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgZG9fb3RwX3JlYWQsIE1URF9PVFBfRkFDVE9SWSk7Cit9CisKKy8qKgorICogb25lbmFuZF9nZXRfdXNlcl9wcm90X2luZm8gLSBbTVREIEludGVyZmFjZV0gUmVhZCB1c2VyIE9UUCBpbmZvCisgKiBAcGFyYW0gbXRkCQlNVEQgZGV2aWNlIHN0cnVjdHVyZQorICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKiBAcGFyYW0gbGVuCQludW1iZXIgb2YgYnl0ZXMgdG8gcmVhZAorICoKKyAqIFJlYWQgdXNlciBPVFAgaW5mby4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX2dldF91c2VyX3Byb3RfaW5mbyhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCXN0cnVjdCBvdHBfaW5mbyAqYnVmLCBzaXplX3QgbGVuKQoreworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCXJldCA9IG9uZW5hbmRfb3RwX3dhbGsobXRkLCAwLCBsZW4sICZyZXRsZW4sICh1X2NoYXIgKikgYnVmLCBOVUxMLCBNVERfT1RQX1VTRVIpOworCisJcmV0dXJuIHJldCA/IDogcmV0bGVuOworfQorCisvKioKKyAqIG9uZW5hbmRfcmVhZF91c2VyX3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIFJlYWQgdXNlciBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIHJlYWQKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiByZWFkIGJ5dGVzCisgKiBAcGFyYW0gYnVmCQl0aGUgZGF0YWJ1ZmZlciB0byBwdXQvZ2V0IGRhdGEKKyAqCisgKiBSZWFkIHVzZXIgT1RQIGFyZWEuCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9yZWFkX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXJldHVybiBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgZG9fb3RwX3JlYWQsIE1URF9PVFBfVVNFUik7Cit9CisKKy8qKgorICogb25lbmFuZF93cml0ZV91c2VyX3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIFdyaXRlIHVzZXIgT1RQIGFyZWEKKyAqIEBwYXJhbSBtdGQJCU1URCBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcGFyYW0gZnJvbQkJVGhlIG9mZnNldCB0byB3cml0ZQorICogQHBhcmFtIGxlbgkJbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlCisgKiBAcGFyYW0gcmV0bGVuCXBvaW50ZXIgdG8gdmFyaWFibGUgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB3cml0ZSBieXRlcworICogQHBhcmFtIGJ1ZgkJdGhlIGRhdGFidWZmZXIgdG8gcHV0L2dldCBkYXRhCisgKgorICogV3JpdGUgdXNlciBPVFAgYXJlYS4KKyAqLworc3RhdGljIGludCBvbmVuYW5kX3dyaXRlX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKQoreworCXJldHVybiBvbmVuYW5kX290cF93YWxrKG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sIGJ1ZiwgZG9fb3RwX3dyaXRlLCBNVERfT1RQX1VTRVIpOworfQorCisvKioKKyAqIG9uZW5hbmRfbG9ja191c2VyX3Byb3RfcmVnIC0gW01URCBJbnRlcmZhY2VdIExvY2sgdXNlciBPVFAgYXJlYQorICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBmcm9tCQlUaGUgb2Zmc2V0IHRvIGxvY2sKKyAqIEBwYXJhbSBsZW4JCW51bWJlciBvZiBieXRlcyB0byB1bmxvY2sKKyAqCisgKiBXcml0ZSBsb2NrIG1hcmsgb24gc3BhcmUgYXJlYSBpbiBwYWdlIDAgaW4gT1RQIGJsb2NrCisgKi8KK3N0YXRpYyBpbnQgb25lbmFuZF9sb2NrX3VzZXJfcHJvdF9yZWcoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorCQkJc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIG9vYl9idWZbNjRdOworCXNpemVfdCByZXRsZW47CisJaW50IHJldDsKKworCW1lbXNldChvb2JfYnVmLCAweGZmLCBtdGQtPm9vYnNpemUpOworCS8qCisJICogTm90ZTogT1RQIGxvY2sgb3BlcmF0aW9uCisJICogICAgICAgT1RQIGJsb2NrIDogMHhYWEZDCisJICogICAgICAgMXN0IGJsb2NrIDogMHhYWEYzIChJZiBjaGlwIHN1cHBvcnQpCisJICogICAgICAgQm90aCAgICAgIDogMHhYWEYwIChJZiBjaGlwIHN1cHBvcnQpCisJICovCisJb29iX2J1ZltPTkVOQU5EX09UUF9MT0NLX09GRlNFVF0gPSAweEZDOworCisJLyoKKwkgKiBXcml0ZSBsb2NrIG1hcmsgdG8gOHRoIHdvcmQgb2Ygc2VjdG9yMCBvZiBwYWdlMCBvZiB0aGUgc3BhcmUwLgorCSAqIFdlIHdyaXRlIDE2IGJ5dGVzIHNwYXJlIGFyZWEgaW5zdGVhZCBvZiAyIGJ5dGVzLgorCSAqLworCWZyb20gPSAwOworCWxlbiA9IDE2OworCisJcmV0ID0gb25lbmFuZF9vdHBfd2FsayhtdGQsIGZyb20sIGxlbiwgJnJldGxlbiwgb29iX2J1ZiwgZG9fb3RwX2xvY2ssIE1URF9PVFBfVVNFUik7CisKKwlyZXR1cm4gcmV0ID8gOiByZXRsZW47Cit9CisjZW5kaWYJLyogQ09ORklHX01URF9PTkVOQU5EX09UUCAqLworCiAvKioKICAqIG9uZW5hbmRfcHJpbnRfZGV2aWNlX2luZm8gLSBQcmludCBkZXZpY2UgSUQKICAqIEBwYXJhbSBkZXZpY2UgICAgICAgIGRldmljZSBJRApAQCAtMTQyMywxNSArMTY2MiwxNSBAQAogCiAJLyogT25lTkFORCBwYWdlIHNpemUgJiBibG9jayBzaXplICovCiAJLyogVGhlIGRhdGEgYnVmZmVyIHNpemUgaXMgZXF1YWwgdG8gcGFnZSBzaXplICovCi0JbXRkLT5vb2JibG9jayA9IHRoaXMtPnJlYWRfd29yZCh0aGlzLT5iYXNlICsgT05FTkFORF9SRUdfREFUQV9CVUZGRVJfU0laRSk7Ci0JbXRkLT5vb2JzaXplID0gbXRkLT5vb2JibG9jayA+PiA1OworCW10ZC0+d3JpdGVzaXplID0gdGhpcy0+cmVhZF93b3JkKHRoaXMtPmJhc2UgKyBPTkVOQU5EX1JFR19EQVRBX0JVRkZFUl9TSVpFKTsKKwltdGQtPm9vYnNpemUgPSBtdGQtPndyaXRlc2l6ZSA+PiA1OwogCS8qIFBhZ2VycyBwZXIgYmxvY2sgaXMgYWx3YXlzIDY0IGluIE9uZU5BTkQgKi8KLQltdGQtPmVyYXNlc2l6ZSA9IG10ZC0+b29iYmxvY2sgPDwgNjsKKwltdGQtPmVyYXNlc2l6ZSA9IG10ZC0+d3JpdGVzaXplIDw8IDY7CiAKIAl0aGlzLT5lcmFzZV9zaGlmdCA9IGZmcyhtdGQtPmVyYXNlc2l6ZSkgLSAxOwotCXRoaXMtPnBhZ2Vfc2hpZnQgPSBmZnMobXRkLT5vb2JibG9jaykgLSAxOworCXRoaXMtPnBhZ2Vfc2hpZnQgPSBmZnMobXRkLT53cml0ZXNpemUpIC0gMTsKIAl0aGlzLT5wcGJfc2hpZnQgPSAodGhpcy0+ZXJhc2Vfc2hpZnQgLSB0aGlzLT5wYWdlX3NoaWZ0KTsKLQl0aGlzLT5wYWdlX21hc2sgPSAobXRkLT5lcmFzZXNpemUgLyBtdGQtPm9vYmJsb2NrKSAtIDE7CisJdGhpcy0+cGFnZV9tYXNrID0gKG10ZC0+ZXJhc2VzaXplIC8gbXRkLT53cml0ZXNpemUpIC0gMTsKIAogCS8qIFJFVklTVDogTXVsdGljaGlwIGhhbmRsaW5nICovCiAKQEAgLTE0NzUsNyArMTcxNCw2IEBACiAJCQkJImluIHN1c3BlbmRlZCBzdGF0ZVxuIik7CiB9CiAKLQogLyoqCiAgKiBvbmVuYW5kX3NjYW4gLSBbT25lTkFORCBJbnRlcmZhY2VdIFNjYW4gZm9yIHRoZSBPbmVOQU5EIGRldmljZQogICogQHBhcmFtIG10ZAkJTVREIGRldmljZSBzdHJ1Y3R1cmUKQEAgLTE1MjIsNyArMTc2MCw3IEBACiAJLyogQWxsb2NhdGUgYnVmZmVycywgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKCF0aGlzLT5wYWdlX2J1ZikgewogCQlzaXplX3QgbGVuOwotCQlsZW4gPSBtdGQtPm9vYmJsb2NrICsgbXRkLT5vb2JzaXplOworCQlsZW4gPSBtdGQtPndyaXRlc2l6ZSArIG10ZC0+b29ic2l6ZTsKIAkJdGhpcy0+cGFnZV9idWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghdGhpcy0+cGFnZV9idWYpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAib25lbmFuZF9zY2FuKCk6IENhbid0IGFsbG9jYXRlIHBhZ2VfYnVmXG4iKTsKQEAgLTE1MzcsNDAgKzE3NzUsNDIgQEAKIAogCXN3aXRjaCAobXRkLT5vb2JzaXplKSB7CiAJY2FzZSA2NDoKLQkJdGhpcy0+YXV0b29vYiA9ICZvbmVuYW5kX29vYl82NDsKKwkJdGhpcy0+ZWNjbGF5b3V0ID0gJm9uZW5hbmRfb29iXzY0OwogCQlicmVhazsKIAogCWNhc2UgMzI6Ci0JCXRoaXMtPmF1dG9vb2IgPSAmb25lbmFuZF9vb2JfMzI7CisJCXRoaXMtPmVjY2xheW91dCA9ICZvbmVuYW5kX29vYl8zMjsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBPT0Igc2NoZW1lIGRlZmluZWQgZm9yIG9vYnNpemUgJWRcbiIsCiAJCQltdGQtPm9vYnNpemUpOwogCQkvKiBUbyBwcmV2ZW50IGtlcm5lbCBvb3BzICovCi0JCXRoaXMtPmF1dG9vb2IgPSAmb25lbmFuZF9vb2JfMzI7CisJCXRoaXMtPmVjY2xheW91dCA9ICZvbmVuYW5kX29vYl8zMjsKIAkJYnJlYWs7CiAJfQogCi0JbWVtY3B5KCZtdGQtPm9vYmluZm8sIHRoaXMtPmF1dG9vb2IsIHNpemVvZihtdGQtPm9vYmluZm8pKTsKKwltdGQtPmVjY2xheW91dCA9IHRoaXMtPmVjY2xheW91dDsKIAogCS8qIEZpbGwgaW4gcmVtYWluaW5nIE1URCBkcml2ZXIgZGF0YSAqLwogCW10ZC0+dHlwZSA9IE1URF9OQU5ERkxBU0g7Ci0JbXRkLT5mbGFncyA9IE1URF9DQVBfTkFOREZMQVNIIHwgTVREX0VDQzsKKwltdGQtPmZsYWdzID0gTVREX0NBUF9OQU5ERkxBU0g7CiAJbXRkLT5lY2N0eXBlID0gTVREX0VDQ19TVzsKIAltdGQtPmVyYXNlID0gb25lbmFuZF9lcmFzZTsKIAltdGQtPnBvaW50ID0gTlVMTDsKIAltdGQtPnVucG9pbnQgPSBOVUxMOwogCW10ZC0+cmVhZCA9IG9uZW5hbmRfcmVhZDsKIAltdGQtPndyaXRlID0gb25lbmFuZF93cml0ZTsKLQltdGQtPnJlYWRfZWNjID0gb25lbmFuZF9yZWFkX2VjYzsKLQltdGQtPndyaXRlX2VjYyA9IG9uZW5hbmRfd3JpdGVfZWNjOwogCW10ZC0+cmVhZF9vb2IgPSBvbmVuYW5kX3JlYWRfb29iOwogCW10ZC0+d3JpdGVfb29iID0gb25lbmFuZF93cml0ZV9vb2I7Ci0JbXRkLT5yZWFkdiA9IE5VTEw7Ci0JbXRkLT5yZWFkdl9lY2MgPSBOVUxMOwotCW10ZC0+d3JpdGV2ID0gb25lbmFuZF93cml0ZXY7Ci0JbXRkLT53cml0ZXZfZWNjID0gb25lbmFuZF93cml0ZXZfZWNjOworI2lmZGVmIENPTkZJR19NVERfT05FTkFORF9PVFAKKwltdGQtPmdldF9mYWN0X3Byb3RfaW5mbyA9IG9uZW5hbmRfZ2V0X2ZhY3RfcHJvdF9pbmZvOworCW10ZC0+cmVhZF9mYWN0X3Byb3RfcmVnID0gb25lbmFuZF9yZWFkX2ZhY3RfcHJvdF9yZWc7CisJbXRkLT5nZXRfdXNlcl9wcm90X2luZm8gPSBvbmVuYW5kX2dldF91c2VyX3Byb3RfaW5mbzsKKwltdGQtPnJlYWRfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfcmVhZF91c2VyX3Byb3RfcmVnOworCW10ZC0+d3JpdGVfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfd3JpdGVfdXNlcl9wcm90X3JlZzsKKwltdGQtPmxvY2tfdXNlcl9wcm90X3JlZyA9IG9uZW5hbmRfbG9ja191c2VyX3Byb3RfcmVnOworI2VuZGlmCiAJbXRkLT5zeW5jID0gb25lbmFuZF9zeW5jOwogCW10ZC0+bG9jayA9IE5VTEw7CiAJbXRkLT51bmxvY2sgPSBvbmVuYW5kX3VubG9jazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYyBiL2RyaXZlcnMvbXRkL29uZW5hbmQvb25lbmFuZF9iYnQuYwppbmRleCA0NTEwZDMzLi4xYjAwZGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9vbmVuYW5kL29uZW5hbmRfYmJ0LmMKKysrIGIvZHJpdmVycy9tdGQvb25lbmFuZC9vbmVuYW5kX2JidC5jCkBAIC0xNyw2ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvbXRkL29uZW5hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CiAKK2V4dGVybiBpbnQgb25lbmFuZF9kb19yZWFkX29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCisJCQkgICAgICAgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKKwogLyoqCiAgKiBjaGVja19zaG9ydF9wYXR0ZXJuIC0gW0dFTkVSSUNdIGNoZWNrIGlmIGEgcGF0dGVybiBpcyBpbiB0aGUgYnVmZmVyCiAgKiBAcGFyYW0gYnVmCQl0aGUgYnVmZmVyIHRvIHNlYXJjaApAQCAtODcsMTMgKzkwLDEzIEBACiAKIAkJCS8qIE5vIG5lZWQgdG8gcmVhZCBwYWdlcyBmdWxseSwKIAkJCSAqIGp1c3QgcmVhZCByZXF1aXJlZCBPT0IgYnl0ZXMgKi8KLQkJCXJldCA9IG10ZC0+cmVhZF9vb2IobXRkLCBmcm9tICsgaiAqIG10ZC0+b29iYmxvY2sgKyBiZC0+b2ZmcywKLQkJCQkJCXJlYWRsZW4sICZyZXRsZW4sICZidWZbMF0pOworCQkJcmV0ID0gb25lbmFuZF9kb19yZWFkX29vYihtdGQsIGZyb20gKyBqICogbXRkLT53cml0ZXNpemUgKyBiZC0+b2ZmcywKKwkJCQkJCSAgcmVhZGxlbiwgJnJldGxlbiwgJmJ1ZlswXSk7CiAKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIHJldDsKIAotCQkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4oJmJ1ZltqICogc2Nhbmxlbl0sIHNjYW5sZW4sIG10ZC0+b29iYmxvY2ssIGJkKSkgeworCQkJaWYgKGNoZWNrX3Nob3J0X3BhdHRlcm4oJmJ1ZltqICogc2Nhbmxlbl0sIHNjYW5sZW4sIG10ZC0+d3JpdGVzaXplLCBiZCkpIHsKIAkJCQliYm0tPmJidFtpID4+IDNdIHw9IDB4MDMgPDwgKGkgJiAweDYpOwogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJhZCBlcmFzZWJsb2NrICVkIGF0IDB4JTA4eFxuIiwKIAkJCQkJaSA+PiAxLCAodW5zaWduZWQgaW50KSBmcm9tKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3JlZGJvb3QuYyBiL2RyaXZlcnMvbXRkL3JlZGJvb3QuYwppbmRleCBjMDc3ZDJlLi41YjU4NTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9yZWRib290LmMKKysrIGIvZHJpdmVycy9tdGQvcmVkYm9vdC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRJZDogcmVkYm9vdC5jLHYgMS4xOSAyMDA1LzEyLzAxIDEwOjAzOjUxIGR3bXcyIEV4cCAkCisgKiAkSWQ6IHJlZGJvb3QuYyx2IDEuMjEgMjAwNi8wMy8zMCAxODozNDozNyBiamQgRXhwICQKICAqCiAgKiBQYXJzZSBSZWRCb290LXN0eWxlIEZsYXNoIEltYWdlIFN5c3RlbSAoRklTKSB0YWJsZXMgYW5kCiAgKiBwcm9kdWNlIGEgTGludXggcGFydGl0aW9uIGFycmF5IHRvIG1hdGNoLgpAQCAtMTUsMTQgKzE1LDE0IEBACiAKIHN0cnVjdCBmaXNfaW1hZ2VfZGVzYyB7CiAgICAgdW5zaWduZWQgY2hhciBuYW1lWzE2XTsgICAgICAvLyBOdWxsIHRlcm1pbmF0ZWQgbmFtZQotICAgIHVuc2lnbmVkIGxvbmcgZmxhc2hfYmFzZTsgICAgLy8gQWRkcmVzcyB3aXRoaW4gRkxBU0ggb2YgaW1hZ2UKLSAgICB1bnNpZ25lZCBsb25nIG1lbV9iYXNlOyAgICAgIC8vIEFkZHJlc3MgaW4gbWVtb3J5IHdoZXJlIGl0IGV4ZWN1dGVzCi0gICAgdW5zaWduZWQgbG9uZyBzaXplOyAgICAgICAgICAvLyBMZW5ndGggb2YgaW1hZ2UKLSAgICB1bnNpZ25lZCBsb25nIGVudHJ5X3BvaW50OyAgIC8vIEV4ZWN1dGlvbiBlbnRyeSBwb2ludAotICAgIHVuc2lnbmVkIGxvbmcgZGF0YV9sZW5ndGg7ICAgLy8gTGVuZ3RoIG9mIGFjdHVhbCBkYXRhCi0gICAgdW5zaWduZWQgY2hhciBfcGFkWzI1Ni0oMTYrNypzaXplb2YodW5zaWduZWQgbG9uZykpXTsKLSAgICB1bnNpZ25lZCBsb25nIGRlc2NfY2tzdW07ICAgIC8vIENoZWNrc3VtIG92ZXIgaW1hZ2UgZGVzY3JpcHRvcgotICAgIHVuc2lnbmVkIGxvbmcgZmlsZV9ja3N1bTsgICAgLy8gQ2hlY2tzdW0gb3ZlciBpbWFnZSBkYXRhCisgICAgdWludDMyX3QJICBmbGFzaF9iYXNlOyAgICAvLyBBZGRyZXNzIHdpdGhpbiBGTEFTSCBvZiBpbWFnZQorICAgIHVpbnQzMl90CSAgbWVtX2Jhc2U7ICAgICAgLy8gQWRkcmVzcyBpbiBtZW1vcnkgd2hlcmUgaXQgZXhlY3V0ZXMKKyAgICB1aW50MzJfdAkgIHNpemU7ICAgICAgICAgIC8vIExlbmd0aCBvZiBpbWFnZQorICAgIHVpbnQzMl90CSAgZW50cnlfcG9pbnQ7ICAgLy8gRXhlY3V0aW9uIGVudHJ5IHBvaW50CisgICAgdWludDMyX3QJICBkYXRhX2xlbmd0aDsgICAvLyBMZW5ndGggb2YgYWN0dWFsIGRhdGEKKyAgICB1bnNpZ25lZCBjaGFyIF9wYWRbMjU2LSgxNis3KnNpemVvZih1aW50MzJfdCkpXTsKKyAgICB1aW50MzJfdAkgIGRlc2NfY2tzdW07ICAgIC8vIENoZWNrc3VtIG92ZXIgaW1hZ2UgZGVzY3JpcHRvcgorICAgIHVpbnQzMl90CSAgZmlsZV9ja3N1bTsgICAgLy8gQ2hlY2tzdW0gb3ZlciBpbWFnZSBkYXRhCiB9OwogCiBzdHJ1Y3QgZmlzX2xpc3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvcmZkX2Z0bC5jIGIvZHJpdmVycy9tdGQvcmZkX2Z0bC5jCmluZGV4IGEzZTAwYTQuLmZhNDM2MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3JmZF9mdGwuYworKysgYi9kcml2ZXJzL210ZC9yZmRfZnRsLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgogICoKLSAqICRJZDogcmZkX2Z0bC5jLHYgMS41IDIwMDUvMTEvMDcgMTE6MTQ6MjEgZ2xlaXhuZXIgRXhwICQKKyAqICRJZDogcmZkX2Z0bC5jLHYgMS44IDIwMDYvMDEvMTUgMTI6NTE6NDQgc2VhbiBFeHAgJAogICoKICAqIFRoaXMgdHlwZSBvZiBmbGFzaCB0cmFuc2xhdGlvbiBsYXllciAoRlRMKSBpcyB1c2VkIGJ5IHRoZSBFbWJlZGRlZCBCSU9TCiAgKiBieSBHZW5lcmFsIFNvZnR3YXJlLiBJdCBpcyBrbm93biBhcyB0aGUgUmVzaWRlbnQgRmxhc2ggRGlzayAoUkZEKSwgc2VlOgpAQCAtNjEsNiArNjEsNyBAQAogCQlCTE9DS19PSywKIAkJQkxPQ0tfRVJBU0lORywKIAkJQkxPQ0tfRVJBU0VELAorCQlCTE9DS19VTlVTRUQsCiAJCUJMT0NLX0ZBSUxFRAogCX0gc3RhdGU7CiAJaW50IGZyZWVfc2VjdG9yczsKQEAgLTk5LDEwICsxMDAsOCBAQAogCWJsb2NrLT5vZmZzZXQgPSBwYXJ0LT5ibG9ja19zaXplICogYmxvY2tfbm87CiAKIAlpZiAobGUxNl90b19jcHUocGFydC0+aGVhZGVyX2NhY2hlWzBdKSAhPSBSRkRfTUFHSUMpIHsKLQkJYmxvY2stPnN0YXRlID0gQkxPQ0tfRVJBU0VEOyAvKiBhc3N1bXB0aW9uICovCi0JCWJsb2NrLT5mcmVlX3NlY3RvcnMgPSBwYXJ0LT5kYXRhX3NlY3RvcnNfcGVyX2Jsb2NrOwotCQlwYXJ0LT5yZXNlcnZlZF9ibG9jayA9IGJsb2NrX25vOwotCQlyZXR1cm4gMTsKKwkJYmxvY2stPnN0YXRlID0gQkxPQ0tfVU5VU0VEOworCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlibG9jay0+c3RhdGUgPSBCTE9DS19PSzsKQEAgLTEyNCw3ICsxMjMsNyBAQAogCQkJZW50cnkgPSAwOwogCiAJCWlmIChlbnRyeSA+PSBwYXJ0LT5zZWN0b3JfY291bnQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVgKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYCiAJCQkJIiclcyc6IHVuaXQgIyVkOiBlbnRyeSAlZCBjb3JydXB0LCAiCiAJCQkJInNlY3RvciAlZCBvdXQgb2YgcmFuZ2VcbiIsCiAJCQkJcGFydC0+bWJkLm10ZC0+bmFtZSwgYmxvY2tfbm8sIGksIGVudHJ5KTsKQEAgLTEzMiw3ICsxMzEsNyBAQAogCQl9CiAKIAkJaWYgKHBhcnQtPnNlY3Rvcl9tYXBbZW50cnldICE9IC0xKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWAogCQkJCSInJXMnOiBtb3JlIHRoYW4gb25lIGVudHJ5IGZvciBzZWN0b3IgJWRcbiIsCiAJCQkJcGFydC0+bWJkLm10ZC0+bmFtZSwgZW50cnkpOwogCQkJcGFydC0+ZXJyb3JzID0gMTsKQEAgLTE2Nyw3ICsxNjYsNyBAQAogCS8qIGVhY2ggZXJhc2UgYmxvY2sgaGFzIHRocmVlIGJ5dGVzIGhlYWRlciwgZm9sbG93ZWQgYnkgdGhlIG1hcCAqLwogCXBhcnQtPmhlYWRlcl9zZWN0b3JzX3Blcl9ibG9jayA9CiAJCQkoKEhFQURFUl9NQVBfT0ZGU0VUICsgc2VjdG9yc19wZXJfYmxvY2spICoKLQkJIAlzaXplb2YodTE2KSArIFNFQ1RPUl9TSVpFIC0gMSkgLyBTRUNUT1JfU0laRTsKKwkJCXNpemVvZih1MTYpICsgU0VDVE9SX1NJWkUgLSAxKSAvIFNFQ1RPUl9TSVpFOwogCiAJcGFydC0+ZGF0YV9zZWN0b3JzX3Blcl9ibG9jayA9IHNlY3RvcnNfcGVyX2Jsb2NrIC0KIAkJCXBhcnQtPmhlYWRlcl9zZWN0b3JzX3Blcl9ibG9jazsKQEAgLTIyNiw3ICsyMjUsNyBAQAogCX0KIAogCWlmIChwYXJ0LT5yZXNlcnZlZF9ibG9jayA9PSAtMSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICInJXMnOiBubyBlbXB0eSBlcmFzZSB1bml0IGZvdW5kXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiJyVzJzogbm8gZW1wdHkgZXJhc2UgdW5pdCBmb3VuZFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lKTsKIAogCQlwYXJ0LT5lcnJvcnMgPSAxOwpAQCAtMzE1LDcgKzMxNCw3IEBACiAJCXJjID0gLUVJTzsKIAogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgUFJFRklYICInJXMnOiB1bmFibGUgdG8gd3JpdGUgUkZEICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiJyVzJzogdW5hYmxlIHRvIHdyaXRlIFJGRCAiCiAJCQkJImhlYWRlciBhdCAweCVseFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLAogCQkJCXBhcnQtPmJsb2Nrc1tpXS5vZmZzZXQpOwpAQCAtMzQ4LDcgKzM0Nyw3IEBACiAJcmMgPSBwYXJ0LT5tYmQubXRkLT5lcmFzZShwYXJ0LT5tYmQubXRkLCBlcmFzZSk7CiAKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQUkVGSVggImVyYXNlIG9mIHJlZ2lvbiAleCwleCBvbiAnJXMnICIKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZXJhc2Ugb2YgcmVnaW9uICV4LCV4IG9uICclcycgIgogCQkJCSJmYWlsZWRcbiIsIGVyYXNlLT5hZGRyLCBlcmFzZS0+bGVuLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUpOwogCQlrZnJlZShlcmFzZSk7CkBAIC0zODMsNyArMzgyLDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggImVycm9yIHJlYWRpbmcgJyVzJyBhdCAiCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHJlYWRpbmcgJyVzJyBhdCAiCiAJCQkiMHglbHhcbiIsIHBhcnQtPm1iZC5tdGQtPm5hbWUsCiAJCQlwYXJ0LT5ibG9ja3NbYmxvY2tfbm9dLm9mZnNldCk7CiAKQEAgLTQyMyw3ICs0MjIsNyBAQAogCQkJcmMgPSAtRUlPOwogCiAJCWlmIChyYykgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJyVzJzogVW5hYmxlIHRvICIKKwkJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiclcyc6IFVuYWJsZSB0byAiCiAJCQkJInJlYWQgc2VjdG9yIGZvciByZWxvY2F0aW9uXG4iLAogCQkJCXBhcnQtPm1iZC5tdGQtPm5hbWUpOwogCkBAIC01MjAsNyArNTE5LDcgQEAKICAqIGJlY2F1c2UgaWYgd2UgZmlsbCB0aGF0IG9uZSB1cCBmaXJzdCBpdCdsbCBoYXZlIHRoZSBtb3N0IGNoYW5jZSBvZiBoYXZpbmcKICAqIHRoZSBsZWFzdCBsaXZlIHNlY3RvcnMgYXQgcmVjbGFpbS4KICAqLwotc3RhdGljIGludCBmaW5kX2ZyZWVfYmxvY2soY29uc3Qgc3RydWN0IHBhcnRpdGlvbiAqcGFydCkKK3N0YXRpYyBpbnQgZmluZF9mcmVlX2Jsb2NrKHN0cnVjdCBwYXJ0aXRpb24gKnBhcnQpCiB7CiAJaW50IGJsb2NrLCBzdG9wOwogCkBAIC01MzMsNiArNTMyLDkgQEAKIAkJCQlibG9jayAhPSBwYXJ0LT5yZXNlcnZlZF9ibG9jaykKIAkJCXJldHVybiBibG9jazsKIAorCQlpZiAocGFydC0+YmxvY2tzW2Jsb2NrXS5zdGF0ZSA9PSBCTE9DS19VTlVTRUQpCisJCQllcmFzZV9ibG9jayhwYXJ0LCBibG9jayk7CisKIAkJaWYgKCsrYmxvY2sgPj0gcGFydC0+dG90YWxfYmxvY2tzKQogCQkJYmxvY2sgPSAwOwogCkBAIC01NDEsNyArNTQzLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgZmluZF93cml0ZWFibGVfYmxvY2soc3RydWN0IHBhcnRpdGlvbiAqcGFydCwgdV9sb25nICpvbGRfc2VjdG9yKQorc3RhdGljIGludCBmaW5kX3dyaXRhYmxlX2Jsb2NrKHN0cnVjdCBwYXJ0aXRpb24gKnBhcnQsIHVfbG9uZyAqb2xkX3NlY3RvcikKIHsKIAlpbnQgcmMsIGJsb2NrOwogCXNpemVfdCByZXRsZW47CkBAIC01NzAsNyArNTcyLDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggIiclcyc6IHVuYWJsZSB0byByZWFkIGhlYWRlciBhdCAiCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggIiclcyc6IHVuYWJsZSB0byByZWFkIGhlYWRlciBhdCAiCiAJCQkJIjB4JWx4XG4iLCBwYXJ0LT5tYmQubXRkLT5uYW1lLAogCQkJCXBhcnQtPmJsb2Nrc1tibG9ja10ub2Zmc2V0KTsKIAkJZ290byBlcnI7CkBAIC02MDIsNyArNjA0LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgIgorCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgIgogCQkJIjB4JWx4XG4iLCBwYXJ0LT5tYmQubXRkLT5uYW1lLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CkBAIC02NTIsNyArNjU0LDcgQEAKIAlpZiAocGFydC0+Y3VycmVudF9ibG9jayA9PSAtMSB8fAogCQkhcGFydC0+YmxvY2tzW3BhcnQtPmN1cnJlbnRfYmxvY2tdLmZyZWVfc2VjdG9ycykgewogCi0JCXJjID0gZmluZF93cml0ZWFibGVfYmxvY2socGFydCwgb2xkX2FkZHIpOworCQlyYyA9IGZpbmRfd3JpdGFibGVfYmxvY2socGFydCwgb2xkX2FkZHIpOwogCQlpZiAocmMpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC02NzUsNyArNjc3LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgMHglbHhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAweCVseFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CkBAIC02OTUsNyArNjk3LDcgQEAKIAkJcmMgPSAtRUlPOwogCiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJlcnJvciB3cml0aW5nICclcycgYXQgMHglbHhcbiIsCisJCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImVycm9yIHdyaXRpbmcgJyVzJyBhdCAweCVseFxuIiwKIAkJCQlwYXJ0LT5tYmQubXRkLT5uYW1lLCBhZGRyKTsKIAkJaWYgKHJjKQogCQkJZ290byBlcnI7CkBAIC03NzYsNyArNzc4LDcgQEAKIAkJcGFydC0+YmxvY2tfc2l6ZSA9IGJsb2NrX3NpemU7CiAJZWxzZSB7CiAJCWlmICghbXRkLT5lcmFzZXNpemUpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSBQUkVGSVggInBsZWFzZSBwcm92aWRlIGJsb2NrX3NpemUiKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUFJFRklYICJwbGVhc2UgcHJvdmlkZSBibG9ja19zaXplIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJZWxzZQpAQCAtNzkxLDggKzc5Myw4IEBACiAJCWlmICghKG10ZC0+ZmxhZ3MgJiBNVERfV1JJVEVBQkxFKSkKIAkJCXBhcnQtPm1iZC5yZWFkb25seSA9IDE7CiAJCWVsc2UgaWYgKHBhcnQtPmVycm9ycykgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBSRUZJWCAiJyVzJzogZXJyb3JzIGZvdW5kLCAiCi0JCQkJCSJzZXR0aW5nIHJlYWQtb25seSIsIG10ZC0+bmFtZSk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBSRUZJWCAiJyVzJzogZXJyb3JzIGZvdW5kLCAiCisJCQkJCSJzZXR0aW5nIHJlYWQtb25seVxuIiwgbXRkLT5uYW1lKTsKIAkJCXBhcnQtPm1iZC5yZWFkb25seSA9IDE7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCBmNzJhNGY1Li5iZjc3NjEyNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxeC5oCkBAIC0yNjAsMTUgKzI2MCwxNyBAQAogI2RlZmluZSBSUENfTFNBX0RFRkFVTFQJCVJQQ19MRURfVFhfUlgKICNkZWZpbmUgUlBDX0xTQl9ERUZBVUxUCQlSUENfTEVEXzEwMF8xMAogCi0jZWxpZglkZWZpbmVkKENPTkZJR19NQUNIX0xQRDdBNDAwKSB8fCBkZWZpbmVkKENPTkZJR19NQUNIX0xQRDdBNDA0KQorI2VsaWYgICBkZWZpbmVkKENPTkZJR19NQUNIX0xQRDc5NTIwKSBcCisgICAgIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfTFBEN0E0MDApIFwKKyAgICAgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9MUEQ3QTQwNCkKIAotLyogVGhlIExQRDdBNDBYX0lPQkFSUklFUiBpcyBuZWNlc3NhcnkgdG8gb3ZlcmNvbWUgYSBtaXNtYXRjaCBiZXR3ZWVuCi0gKiB0aGUgd2F5IHRoYXQgdGhlIENQVSBoYW5kbGVzIGNoaXAgc2VsZWN0cyBhbmQgdGhlIHdheSB0aGF0IHRoZSBTTUMKLSAqIGNoaXAgZXhwZWN0cyB0aGUgY2hpcCBzZWxlY3QgdG8gb3BlcmF0ZS4gIFJlZmVyIHRvCisvKiBUaGUgTFBEN1hfSU9CQVJSSUVSIGlzIG5lY2Vzc2FyeSB0byBvdmVyY29tZSBhIG1pc21hdGNoIGJldHdlZW4gdGhlCisgKiB3YXkgdGhhdCB0aGUgQ1BVIGhhbmRsZXMgY2hpcCBzZWxlY3RzIGFuZCB0aGUgd2F5IHRoYXQgdGhlIFNNQyBjaGlwCisgKiBleHBlY3RzIHRoZSBjaGlwIHNlbGVjdCB0byBvcGVyYXRlLiAgUmVmZXIgdG8KICAqIERvY3VtZW50YXRpb24vYXJtL1NoYXJwLUxIL0lPQmFycmllciBmb3IgZGV0YWlscy4gIFRoZSByZWFkIGZyb20KLSAqIElPQkFSUklFUiBpcyBhIGJ5dGUgYXMgYSBsZWFzdC1jb21tb24gZGVub21pbmF0b3Igb2YgcG9zc2libGUKLSAqIHJlZ2lvbnMgdG8gdXNlIGFzIHRoZSBiYXJyaWVyLiAgSXQgd291bGQgYmUgd2FzdGVmdWwgdG8gcmVhZCAzMgotICogYml0cyBmcm9tIGEgYnl0ZSBvcmllbnRlZCByZWdpb24uCisgKiBJT0JBUlJJRVIgaXMgYSBieXRlLCBpbiBvcmRlciB0aGF0IHdlIHJlYWQgdGhlIGxlYXN0LWNvbW1vbgorICogZGVub21pbmF0b3IuICBJdCB3b3VsZCBiZSB3YXN0ZWZ1bCB0byByZWFkIDMyIGJpdHMgZnJvbSBhbiA4LWJpdAorICogYWNjZXNzaWJsZSByZWdpb24uCiAgKgogICogVGhlcmUgaXMgbm8gZXhwbGljaXQgcHJvdGVjdGlvbiBhZ2FpbnN0IGludGVycnVwdHMgaW50ZXJ2ZW5pbmcKICAqIGJldHdlZW4gdGhlIHdyaXRldyBhbmQgdGhlIElPQkFSUklFUi4gIEluIFNNQyBJU1IgdGhlcmUgaXMgYQpAQCAtMjg3LDI1ICsyODksMzUgQEAKICNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQogI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkwCiAjZGVmaW5lIFNNQ19OT1dBSVQJCTAKLSNkZWZpbmUgTFBEN0E0MFhfSU9CQVJSSUVSCXJlYWRiIChJT0JBUlJJRVJfVklSVCkKKyNkZWZpbmUgTFBEN1hfSU9CQVJSSUVSCQlyZWFkYiAoSU9CQVJSSUVSX1ZJUlQpCiAKLSNkZWZpbmUgU01DX2ludyhhLHIpCQlyZWFkdyAoKHZvaWQqKSAoKGEpICsgKHIpKSkKLSNkZWZpbmUgU01DX2luc3coYSxyLHAsbCkJcmVhZHN3ICgodm9pZCopICgoYSkgKyAocikpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0dyh2LGEscikJICAgICAoeyB3cml0ZXcgKCh2KSwgKGEpICsgKHIpKTsgTFBEN0E0MFhfSU9CQVJSSUVSOyB9KQorI2RlZmluZSBTTUNfaW53KGEscilcCisgICAoeyB1bnNpZ25lZCBzaG9ydCB2ID0gcmVhZHcgKCh2b2lkKikgKChhKSArIChyKSkpOyBMUEQ3WF9JT0JBUlJJRVI7IHY7IH0pCisjZGVmaW5lIFNNQ19vdXR3KHYsYSxyKQkgICh7IHdyaXRldyAoKHYpLCAoYSkgKyAocikpOyBMUEQ3WF9JT0JBUlJJRVI7IH0pCiAKLSNkZWZpbmUgU01DX291dHN3CQlMUEQ3QTQwWF9TTUNfb3V0c3cKKyNkZWZpbmUgU01DX2luc3cJCUxQRDdfU01DX2luc3cKK3N0YXRpYyBpbmxpbmUgdm9pZCBMUEQ3X1NNQ19pbnN3ICh1bnNpZ25lZCBjaGFyKiBhLCBpbnQgciwKKwkJCQkgIHVuc2lnbmVkIGNoYXIqIHAsIGludCBsKQoreworCXVuc2lnbmVkIHNob3J0KiBwcyA9ICh1bnNpZ25lZCBzaG9ydCopIHA7CisJd2hpbGUgKGwtLSA+IDApIHsKKwkJKnBzKysgPSByZWFkdyAoYSArIHIpOworCQlMUEQ3WF9JT0JBUlJJRVI7CisJfQorfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgTFBEN0E0MFhfU01DX291dHN3KHVuc2lnbmVkIGxvbmcgYSwgaW50IHIsCi0JCQkJICAgICB1bnNpZ25lZCBjaGFyKiBwLCBpbnQgbCkKKyNkZWZpbmUgU01DX291dHN3CQlMUEQ3X1NNQ19vdXRzdworc3RhdGljIGlubGluZSB2b2lkIExQRDdfU01DX291dHN3ICh1bnNpZ25lZCBjaGFyKiBhLCBpbnQgciwKKwkJCQkgICB1bnNpZ25lZCBjaGFyKiBwLCBpbnQgbCkKIHsKIAl1bnNpZ25lZCBzaG9ydCogcHMgPSAodW5zaWduZWQgc2hvcnQqKSBwOwogCXdoaWxlIChsLS0gPiAwKSB7CiAJCXdyaXRldyAoKnBzKyssIGEgKyByKTsKLQkJTFBEN0E0MFhfSU9CQVJSSUVSOworCQlMUEQ3WF9JT0JBUlJJRVI7CiAJfQogfQogCi0jZGVmaW5lIFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUJTFBEN0E0MFhfSU9CQVJSSUVSCisjZGVmaW5lIFNNQ19JTlRFUlJVUFRfUFJFQU1CTEUJTFBEN1hfSU9CQVJSSUVSCiAKICNkZWZpbmUgUlBDX0xTQV9ERUZBVUxUCQlSUENfTEVEX1RYX1JYCiAjZGVmaW5lIFJQQ19MU0JfREVGQVVMVAkJUlBDX0xFRF8xMDBfMTAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9LY29uZmlnIGIvZHJpdmVycy9wYXJwb3J0L0tjb25maWcKaW5kZXggZjYzYzM4Ny4uNmM4NDUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L0tjb25maWcKKysrIGIvZHJpdmVycy9wYXJwb3J0L0tjb25maWcKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogY29uZmlnIFBBUlBPUlRfU0VSSUFMCiAJdHJpc3RhdGUgIk11bHRpLUlPIGNhcmRzIChwYXJhbGxlbCBhbmQgc2VyaWFsKSIKLQlkZXBlbmRzIG9uIFNFUklBTF84MjUwICYmIFBBUlBPUlRfUEMgJiYgUENJCisJZGVwZW5kcyBvbiBTRVJJQUxfODI1MF9QQ0kgJiYgUEFSUE9SVF9QQyAmJiBQQ0kKIAloZWxwCiAJICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgbXVsdGktSU8gUENJIGNhcmRzIHRoYXQgaGF2ZSBwYXJhbGxlbCBhbmQKIAkgIHNlcmlhbCBwb3J0cy4gIFlvdSBzaG91bGQgc2F5IFkgb3IgTSBoZXJlLiAgSWYgeW91IHNheSBNLCB0aGUgbW9kdWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGNyeXB0LmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGNyeXB0LmgKaW5kZXggNWU2YjFmNS4uMGNhMWQxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY3J5cHQuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCiAgKgotICogIHo5MGNyeXB0IDEuMy4zCisgKiAgejkwY3J5cHQgMS4zLjMgKGtlcm5lbC1wcml2YXRlIGhlYWRlcikKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24KICAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMgKGJ1cnJvdWdoQHVzLmlibS5jb20pCkBAIC0yNywxODggKzI3LDcgQEAKICNpZm5kZWYgX1o5MENSWVBUX0hfCiAjZGVmaW5lIF9aOTBDUllQVF9IXwogCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2RlZmluZSB6OTBjcnlwdF9WRVJTSU9OIDEKLSNkZWZpbmUgejkwY3J5cHRfUkVMRUFTRSAzCS8vIDIgPSBQQ0lYQ0MsIDMgPSByZXdyaXRlIGZvciBjb2Rpbmcgc3RhbmRhcmRzCi0jZGVmaW5lIHo5MGNyeXB0X1ZBUklBTlQgMwkvLyAzID0gQ0VYMkEgc3VwcG9ydAotCi0vKioKLSAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG8KLSAqCi0gKiBSZXF1aXJlbWVudHM6Ci0gKiAtIG91dHB1dGRhdGFsZW5ndGggaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgaW5wdXRkYXRhbGVuZ3RoLgotICogLSBBbGwga2V5IHBhcnRzIGFyZSByaWdodCBqdXN0aWZpZWQgaW4gdGhlaXIgZmllbGRzLCBwYWRkZWQgb24KLSAqICAgdGhlIGxlZnQgd2l0aCB6ZXJvZXMuCi0gKiAtIGxlbmd0aChiX2tleSkgPSBpbnB1dGRhdGFsZW5ndGgKLSAqIC0gbGVuZ3RoKG5fbW9kdWx1cykgPSBpbnB1dGRhdGFsZW5ndGgKLSAqLwotc3RydWN0IGljYV9yc2FfbW9kZXhwbyB7Ci0JY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7Ci0JY2hhciBfX3VzZXIgKgliX2tleTsKLQljaGFyIF9fdXNlciAqCW5fbW9kdWx1czsKLX07Ci0KLS8qKgotICogc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQKLSAqCi0gKiBSZXF1aXJlbWVudHM6Ci0gKiAtIGlucHV0ZGF0YWxlbmd0aCBpcyBldmVuLgotICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KLSAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCi0gKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgotICogLSBsZW5ndGgoYnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAotICogLSBsZW5ndGgoYnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCi0gKiAtIGxlbmd0aChucF9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4Ci0gKiAtIGxlbmd0aChucV9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIKLSAqIC0gbGVuZ3RoKHVfbXVsdF9pbnYpID0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4Ci0gKi8KLXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IHsKLQljaGFyIF9fdXNlciAqCWlucHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOwotCWNoYXIgX191c2VyICoJb3V0cHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCWJwX2tleTsKLQljaGFyIF9fdXNlciAqCWJxX2tleTsKLQljaGFyIF9fdXNlciAqCW5wX3ByaW1lOwotCWNoYXIgX191c2VyICoJbnFfcHJpbWU7Ci0JY2hhciBfX3VzZXIgKgl1X211bHRfaW52OwotfTsKLQotI2RlZmluZSBaOTBfSU9DVExfTUFHSUMgJ3onICAvLyBOT1RFOiAgTmVlZCB0byBhbGxvY2F0ZSBmcm9tIGxpbnV4IGZvbGtzCi0KLS8qKgotICogSW50ZXJmYWNlIG5vdGVzOgotICoKLSAqIFRoZSBpb2N0bCgpcyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgKGFsb25nIHdpdGggcmVsZXZhbnQgZGV0YWlscykKLSAqIGFyZToKLSAqCi0gKiAgIElDQVJTQU1PREVYUE8KLSAqICAgICBQZXJmb3JtIGFuIFJTQSBvcGVyYXRpb24gdXNpbmcgYSBNb2R1bHVzLUV4cG9uZW50IHBhaXIKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwbyBzdHJ1Y3QgYXMgaXRzIGFyZy4KLSAqCi0gKiAgICAgTk9URTogcGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyBzdHJ1Y3R1cmUKLSAqICAgICAgICAgICBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUKLSAqICAgICAgICAgICBibG9jawotICoKLSAqICAgSUNBUlNBQ1JUCi0gKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgQ2hpbmVzZS1SZW1haW5kZXIgVGhlb3JlbSBrZXkKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwb19jcnQgc3RydWN0IGFzIGl0cyBhcmcuCi0gKgotICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCi0gKiAgICAgICAgICAgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY29udGVudHMgb2YgdGhlCi0gKiAgICAgICAgICAgYmxvY2sKLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBkZXZpY2UgdHlwZXMgdG9nZXRoZXIuCi0gKgotICogICBaOTBTVEFUX1BDSUNBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0FzLgotICoKLSAqICAgWjkwU1RBVF9QQ0lDQ0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDIgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDMgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfQ0VYMkNDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQ3MuCi0gKgotICogICBaOTBTVEFUX0NFWDJBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkFzLgotICoKLSAqICAgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyB3YWl0aW5nIHRvIGJlCi0gKiAgICAgc2VudCB0byBhIGRldmljZS4KLSAqCi0gKiAgIFo5MFNUQVRfUEVORElOR1FfQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VudCB0byBhCi0gKiAgICAgZGV2aWNlIGF3YWl0aW5nIHRoZSByZXBseS4KLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgaGFuZGxlcy4KLSAqCi0gKiAgIFo5MFNUQVRfRE9NQUlOX0lOREVYCi0gKiAgICAgUmV0dXJuIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBDcnlwdG9ncmFwaGljIERvbWFpbi4KLSAqCi0gKiAgIFo5MFNUQVRfU1RBVFVTX01BU0sKLSAqICAgICBSZXR1cm4gYW4gNjQgZWxlbWVudCBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyBmb3IgdGhlIHN0YXR1cyBvZgotICogICAgIGFsbCBkZXZpY2VzLgotICogICAgICAgMHgwMTogUENJQ0EKLSAqICAgICAgIDB4MDI6IFBDSUNDCi0gKiAgICAgICAweDAzOiBQQ0lYQ0NfTUNMMgotICogICAgICAgMHgwNDogUENJWENDX01DTDMKLSAqICAgICAgIDB4MDU6IENFWDJDCi0gKiAgICAgICAweDA2OiBDRVgyQQotICogICAgICAgMHgwZDogZGV2aWNlIGlzIGRpc2FibGVkIHZpYSB0aGUgcHJvYyBmaWxlc3lzdGVtCi0gKgotICogICBaOTBTVEFUX1FERVBUSF9NQVNLCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBxdWV1ZQotICogICAgIGRlcHRoIG9mIGFsbCBkZXZpY2VzLgotICoKLSAqICAgWjkwU1RBVF9QRVJERVZfUkVRQ05UCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlcnMgZm9yIHRoZSBudW1iZXIKLSAqICAgICBvZiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3RzIHBlciBkZXZpY2Ugc2luY2UgdGhlIGRldmljZQotICogICAgIHdhcyBkZXRlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUuCi0gKgotICogICBJQ0FaOTBTVEFUVVMgKGRlcHJlY2F0ZWQpCi0gKiAgICAgUmV0dXJuIHNvbWUgZGV2aWNlIGRyaXZlciBzdGF0dXMgaW4gYSBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV96OTBfc3RhdHVzIHN0cnVjdCBhcyBpdHMgYXJnLgotICoKLSAqICAgICBOT1RFOiB0aGlzIGlvY3RsKCkgaXMgZGVwcmVjYXRlZCwgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKLSAqICAgICAgICAgICBzaW5nbGUgaW9jdGwoKXMgZm9yIGVhY2ggdHlwZSBvZiBzdGF0dXMgYmVpbmcgcmVxdWVzdGVkCi0gKgotICogICBaOTBTVEFUX1BDSVhDQ0NPVU5UIChkZXByZWNhdGVkKQotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lYQ0NzIChNQ0wyICsgTUNMMykuCi0gKiAgICAgVGhpcyBpcyBERVBSRUNBVEVEIG5vdyB0aGF0IE1DTDMgUENJWENDcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBmcm9tCi0gKiAgICAgTUNMMiBQQ0lYQ0NzLgotICoKLSAqICAgWjkwUVVJRVNDRSAobm90IHJlY29tbWVuZGVkKQotICogICAgIFF1aWVzY2UgdGhlIGRyaXZlci4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gc3RvcCBhbGwgbmV3Ci0gKiAgICAgcmVxdWVzdHMgZnJvbSBiZWluZyBwcm9jZXNzZWQuICBJdHMgdXNlIGlzIE5PVCByZWNvbW1lbmRlZCwKLSAqICAgICBleGNlcHQgaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGVyZSBpcyBubyBvdGhlciB3YXkgdG8gc3RvcAotICogICAgIGNhbGxlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRyaXZlci4gIEl0cyBvcmlnaW5hbCB1c2Ugd2FzIHRvCi0gKiAgICAgYWxsb3cgdGhlIGRyaXZlciB0byBiZSAiZHJhaW5lZCIgb2Ygd29yayBpbiBwcmVwYXJhdGlvbiBmb3IKLSAqICAgICBhIHN5c3RlbSBzaHV0ZG93bi4KLSAqCi0gKiAgICAgTk9URTogb25jZSBpc3N1ZWQsIHRoaXMgYmFuIG9uIG5ldyB3b3JrIGNhbm5vdCBiZSB1bmRvbmUKLSAqICAgICAgICAgICBleGNlcHQgYnkgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcgdGhlIGRyaXZlci4KLSAqLwotCi0vKioKLSAqIFN1cHBvcnRlZCBpb2N0bCBjYWxscwotICovCi0jZGVmaW5lIElDQVJTQU1PREVYUE8JX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA1LCAwKQotI2RlZmluZSBJQ0FSU0FDUlQJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA2LCAwKQotCi0vKiBERVBSRUNBVEVEIHN0YXR1cyBjYWxscyAoYm91bmQgZm9yIHJlbW92YWwgYXQgc29tZSBwb2ludCkgKi8KLSNkZWZpbmUgSUNBWjkwU1RBVFVTCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDEwLCBzdHJ1Y3QgaWNhX3o5MF9zdGF0dXMpCi0jZGVmaW5lIFo5MFNUQVRfUENJWENDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDMsIGludCkKLQotLyogdW5yZWxhdGVkIHRvIElDQSBjYWxsZXJzICovCi0jZGVmaW5lIFo5MFFVSUVTQ0UJX0lPKFo5MF9JT0NUTF9NQUdJQywgMHgxMSkKLQotLyogTmV3IHN0YXR1cyBjYWxscyAqLwotI2RlZmluZSBaOTBTVEFUX1RPVEFMQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDAsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QQ0lDQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQxLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUENJQ0NDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MiwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YiwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YywgaW50KQotI2RlZmluZSBaOTBTVEFUX0NFWDJDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGQsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9DRVgyQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRlLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDQsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NSwgaW50KQotI2RlZmluZSBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVCBfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NiwgaW50KQotI2RlZmluZSBaOTBTVEFUX0RPTUFJTl9JTkRFWAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NywgaW50KQotI2RlZmluZSBaOTBTVEFUX1NUQVRVU19NQVNLCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ4LCBjaGFyWzY0XSkKLSNkZWZpbmUgWjkwU1RBVF9RREVQVEhfTUFTSwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0OSwgY2hhcls2NF0pCi0jZGVmaW5lIFo5MFNUQVRfUEVSREVWX1JFUUNOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YSwgaW50WzY0XSkKKyNpbmNsdWRlIDxhc20vejkwY3J5cHQuaD4KIAogLyoqCiAgKiBsb2NhbCBlcnJubyBkZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IGY1YWFjOTIuLjUzYzI0NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTEzNjUsNyArMTM2NSw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfQ1BVX1MzQzI0MTAgKi8KIAotI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKIAogc3RhdGljIGludCBzM2MyNDQwX3NlcmlhbF9zZXRzb3VyY2Uoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKIAkJCQkgICAgIHN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjICpjbGspCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2xoN2E0MHguYwppbmRleCBhYTUyMWI4Li43NzZkNGZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfbGg3YTQweC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9saDdhNDB4LmMKQEAgLTE0NSwxNCArMTQ1LDE1IEBACiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QqIHR0eSA9IHBvcnQtPmluZm8tPnR0eTsKIAlpbnQgY2JSeE1heCA9IDI1NjsJLyogKEdyb3NzKSBsaW1pdCBvbiByZWNlaXZlICovCi0JdW5zaWduZWQgaW50IGRhdGEsIGZsYWc7LyogUmVjZWl2ZWQgZGF0YSBhbmQgc3RhdHVzICovCisJdW5zaWduZWQgaW50IGRhdGE7CS8qIFJlY2VpdmVkIGRhdGEgYW5kIHN0YXR1cyAqLworCXVuc2lnbmVkIGludCBmbGFnOwogCiAJd2hpbGUgKCEoVVIgKHBvcnQsIFVBUlRfUl9TVEFUVVMpICYgblJ4UmR5KSAmJiAtLWNiUnhNYXgpIHsKIAkJZGF0YSA9IFVSIChwb3J0LCBVQVJUX1JfREFUQSk7CiAJCWZsYWcgPSBUVFlfTk9STUFMOwogCQkrK3BvcnQtPmljb3VudC5yeDsKIAotCQlpZiAodW5saWtlbHkoZGF0YSAmIFJ4RXJyb3IpKSB7CS8qIFF1aWNrIGNoZWNrLCBzaG9ydC1jaXJjdWl0ICovCisJCWlmICh1bmxpa2VseShkYXRhICYgUnhFcnJvcikpIHsKIAkJCWlmIChkYXRhICYgUnhCcmVhaykgewogCQkJCWRhdGEgJj0gfihSeEZyYW1pbmdFcnJvciB8IFJ4UGFyaXR5RXJyb3IpOwogCQkJCSsrcG9ydC0+aWNvdW50LmJyazsKQEAgLTMwMyw3ICszMDQsNyBAQAogCS8qIE5vdGUsIGtlcm5lbCBhcHBlYXJzIHRvIGJlIHNldHRpbmcgRFRSIGFuZCBSVFMgb24gY29uc29sZS4gKi8KIAogCS8qICoqKiBGSVhNRTogdGhpcyBkZXNlcnZlcyBtb3JlIHdvcmsuICBUaGVyZSdzIHNvbWUgd29yayBpbgotICAgICAgICAgICAgICAgdHJhY2luZyBhbGwgb2YgdGhlIElPIHBpbnMuICovCisJICAgICAgIHRyYWNpbmcgYWxsIG9mIHRoZSBJTyBwaW5zLiAqLwogI2lmIDAKIAlpZiggcG9ydC0+bWFwYmFzZSA9PSBVQVJUMV9QSFlTKSB7CiAJCWdwaW9SZWdzX3QgKmdwaW8gPSAoZ3Bpb1JlZ3NfdCAqKUlPX0FERFJFU1MoR1BJT19QSFlTKTsKQEAgLTY2Miw5ICs2NjMsMTMgQEAKIAlpZiAocmV0ID09IDApIHsKIAkJaW50IGk7CiAKLQkJZm9yIChpID0gMDsgaSA8IERFVl9OUjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgREVWX05SOyBpKyspIHsKKwkJCS8qIFVBUlQzLCB3aGVuIHVzZWQsIHJlcXVpcmVzIEdQSU8gcGluIHJlYWxsb2NhdGlvbiAqLworCQkJaWYgKGxoN2E0MHhfcG9ydHNbaV0ucG9ydC5tYXBiYXNlID09IFVBUlQzX1BIWVMpCisJCQkJR1BJT19QSU5NVVggfD0gMTw8MzsKIAkJCXVhcnRfYWRkX29uZV9wb3J0ICgmbGg3YTQweF9yZWcsCiAJCQkJCSAgICZsaDdhNDB4X3BvcnRzW2ldLnBvcnQpOworCQl9CiAJfQogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNTY0MTQ5OC4uNWEyODQwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtMTY3LDYgKzE2Nyw2OSBAQAogCSAgaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL21vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFtYmEtY2xjZC4KIAorY2hvaWNlCisKKwlkZXBlbmRzIG9uIEZCX0FSTUNMQ0QgJiYgKEFSQ0hfTEg3QTQwWCB8fCBBUkNIX0xINzk1MlgpCisJcHJvbXB0ICJMQ0QgUGFuZWwiCisJZGVmYXVsdCBGQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyCisKK2NvbmZpZyBGQl9BUk1DTENEX1NIQVJQX0xRMDM1UTdEQjAyX0hSVEZUCisJYm9vbCAiTG9naWNQRCBMQ0QgMy41XCIgUVZHQSB3L0hSVEZUIElDIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMDM1UTdEQjAyLCBhIDMuNSIKKwkgIGNvbG9yIFFWR0EsIEhSVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBhbiBpbnRlZ3JhdGVkIEhSVEZUIGNvbnRyb2xsZXIgSUMuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgMjQweDMyMC4KKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFEwNTdRM0RDMDIKKwlib29sICJMb2dpY1BEIExDRCA1LjdcIiBRVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMDU3UTNEQzAyLCBhIDUuNyIKKwkgIGNvbG9yIFFWR0EsIFRGVCBwYW5lbC4gIFRoZSBMb2dpY1BEIGRldmljZSBpbmNsdWRlcyBhbgorCSAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDMyMHgyNDAuCisKK2NvbmZpZyBGQl9BUk1DTENEX1NIQVJQX0xRNjREMzQzCisJYm9vbCAiTG9naWNQRCBMQ0QgNi40XCIgVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRNjREMzQzLCBhIDYuNCIKKwkgIGNvbG9yIFZHQSwgVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgNjQweDQ4MC4KKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFExMEQzNjgKKwlib29sICJMb2dpY1BEIExDRCAxMC40XCIgVkdBIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNoYXJwIExRMTBEMzY4LCBhIDEwLjQiCisJICBjb2xvciBWR0EsIFRGVCBwYW5lbC4gIFRoZSBMb2dpY1BEIGRldmljZSBpbmNsdWRlcyBhbgorCSAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDY0MHg0ODAuCisKKworY29uZmlnIEZCX0FSTUNMQ0RfU0hBUlBfTFExMjFTMURHNDEKKwlib29sICJMb2dpY1BEIExDRCAxMi4xXCIgU1ZHQSIKKwloZWxwCisJICBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTaGFycCBMUTEyMVMxREc0MSwgYSAxMi4xIgorCSAgY29sb3IgU1ZHQSwgVEZUIHBhbmVsLiAgVGhlIExvZ2ljUEQgZGV2aWNlIGluY2x1ZGVzIGFuCisJICBUaGUgbmF0aXZlIHJlc29sdXRpb24gaXMgODAweDYwMC4KKworCSAgVGhpcyBwYW5lbCByZXF1aXJlcyBhIGNsb2NrIHJhdGUgbWF5IGJlIGFuIGludGVnZXIgZnJhY3Rpb24KKwkgIG9mIHRoZSBiYXNlIExDRENMSyBmcmVxdWVuY3kuICBUaGUgZHJpdmVyIHdpbGwgc2VsZWN0IHRoZQorCSAgaGlnaGVzdCBmcmVxdWVuY3kgYXZhaWxhYmxlIHRoYXQgaXMgbG93ZXIgdGhhbiB0aGUgbWF4aW11bQorCSAgYWxsb3dlZC4gIFRoZSBwYW5lbCBtYXkgZmxpY2tlciBpZiB0aGUgY2xvY2sgcmF0ZSBpcworCSAgc2xvd2VyIHRoYW4gdGhlIHJlY29tbWVuZGVkIG1pbmltdW0uCisKK2NvbmZpZyBGQl9BUk1DTENEX0FVT19BMDcwVlcwMV9XSURFCisJYm9vbCAiQVUgT3B0cm9uaWNzIEEwNzBWVzAxIExDRCA3LjBcIiBXSURFIgorCWhlbHAKKwkgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFVIE9wdHJvbmljcywgYSA3LjAiCisJICBXSURFIENvbG9yLiAgVGhlIG5hdGl2ZSByZXNvbHV0aW9uIGlzIDIzNHg0ODAuCisKK2NvbmZpZyBGQl9BUk1DTENEX0hJVEFDSEkKKwlib29sICJIaXRhY2hpIFdpZGUgU2NyZWVuIDgwMHg0ODAiCisJaGVscAorCSAgVGhpcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSGl0YWNoaSA4MDB4NDgwLgorCitlbmRjaG9pY2UKKworCiBjb25maWcgRkJfQUNPUk4KIAlib29sICJBY29ybiBWSURDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBBUk0gJiYgKEFSQ0hfQUNPUk4gfHwgQVJDSF9DTFBTNzUwMCkKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcgYi9mcy9LY29uZmlnCmluZGV4IGY5YjU4NDIuLjIwZjliNTUgMTAwNjQ0Ci0tLSBhL2ZzL0tjb25maWcKKysrIGIvZnMvS2NvbmZpZwpAQCAtMzkzLDE4ICszOTMsMzAgQEAKIAlib29sICJJbm90aWZ5IGZpbGUgY2hhbmdlIG5vdGlmaWNhdGlvbiBzdXBwb3J0IgogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBhbmQgdGhlIGFzc29jaWF0ZWQgc3lzdGVtCi0JICBjYWxscy4gIElub3RpZnkgaXMgYSBmaWxlIGNoYW5nZSBub3RpZmljYXRpb24gc3lzdGVtIGFuZCBhCi0JICByZXBsYWNlbWVudCBmb3IgZG5vdGlmeS4gIElub3RpZnkgZml4ZXMgbnVtZXJvdXMgc2hvcnRjb21pbmdzIGluCi0JICBkbm90aWZ5IGFuZCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZlYXR1cmVzLiAgSXQgYWxsb3dzIG1vbml0b3JpbmcKLQkgIG9mIGJvdGggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHZpYSBhIHNpbmdsZSBvcGVuIGZkLiAgT3RoZXIgZmVhdHVyZXMKLQkgIGluY2x1ZGUgbXVsdGlwbGUgZmlsZSBldmVudHMsIG9uZS1zaG90IHN1cHBvcnQsIGFuZCB1bm1vdW50CisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBpbm90aWZ5IHN1cHBvcnQuICBJbm90aWZ5IGlzIGEgZmlsZSBjaGFuZ2UKKwkgIG5vdGlmaWNhdGlvbiBzeXN0ZW0gYW5kIGEgcmVwbGFjZW1lbnQgZm9yIGRub3RpZnkuICBJbm90aWZ5IGZpeGVzCisJICBudW1lcm91cyBzaG9ydGNvbWluZ3MgaW4gZG5vdGlmeSBhbmQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmZWF0dXJlcworCSAgaW5jbHVkaW5nIG11bHRpcGxlIGZpbGUgZXZlbnRzLCBvbmUtc2hvdCBzdXBwb3J0LCBhbmQgdW5tb3VudAogCSAgbm90aWZpY2F0aW9uLgogCiAJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorY29uZmlnIElOT1RJRllfVVNFUgorCWJvb2wgIklub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlIgorCWRlcGVuZHMgb24gSU5PVElGWQorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIGlub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlLCBpbmNsdWRpbmcgdGhlCisJICBhc3NvY2lhdGVkIHN5c3RlbSBjYWxscy4gIElub3RpZnkgYWxsb3dzIG1vbml0b3Jpbmcgb2YgYm90aCBmaWxlcyBhbmQKKwkgIGRpcmVjdG9yaWVzIHZpYSBhIHNpbmdsZSBvcGVuIGZkLiAgRXZlbnRzIGFyZSByZWFkIGZyb20gdGhlIGZpbGUKKwkgIGRlc2NyaXB0b3IsIHdoaWNoIGlzIGFsc28gc2VsZWN0KCktIGFuZCBwb2xsKCktYWJsZS4KKworCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2lub3RpZnkudHh0CisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCisKIGNvbmZpZyBRVU9UQQogCWJvb2wgIlF1b3RhIHN1cHBvcnQiCiAJaGVscApAQCAtMTEwMSw2ICsxMTEzLDQ0IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KIAorY29uZmlnIEpGRlMyX0ZTX1hBVFRSCisJYm9vbCAiSkZGUzIgWEFUVFIgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEpGRlMyX0ZTICYmIEVYUEVSSU1FTlRBTCAmJiAhSkZGUzJfRlNfV1JJVEVCVUZGRVIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBFeHRlbmRlZCBhdHRyaWJ1dGVzIGFyZSBuYW1lOnZhbHVlIHBhaXJzIGFzc29jaWF0ZWQgd2l0aCBpbm9kZXMgYnkKKwkgIHRoZSBrZXJuZWwgb3IgYnkgdXNlcnMgKHNlZSB0aGUgYXR0cig1KSBtYW51YWwgcGFnZSwgb3IgdmlzaXQKKwkgIDxodHRwOi8vYWNsLmJlc3RiaXRzLmF0Lz4gZm9yIGRldGFpbHMpLgorCSAgCisJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgSkZGUzJfRlNfUE9TSVhfQUNMCisJYm9vbCAiSkZGUzIgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHMiCisJZGVwZW5kcyBvbiBKRkZTMl9GU19YQVRUUgorCWRlZmF1bHQgeQorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwloZWxwCisJICBQb3NpeCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisJICAKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQb3NpeCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCSAgCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4KKworY29uZmlnIEpGRlMyX0ZTX1NFQ1VSSVRZCisJYm9vbCAiSkZGUzIgU2VjdXJpdHkgTGFiZWxzIgorCWRlcGVuZHMgb24gSkZGUzJfRlNfWEFUVFIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWN1cml0eSBsYWJlbHMgc3VwcG9ydCBhbHRlcm5hdGl2ZSBhY2Nlc3MgY29udHJvbCBtb2RlbHMKKwkgIGltcGxlbWVudGVkIGJ5IHNlY3VyaXR5IG1vZHVsZXMgbGlrZSBTRUxpbnV4LiAgVGhpcyBvcHRpb24KKwkgIGVuYWJsZXMgYW4gZXh0ZW5kZWQgYXR0cmlidXRlIGhhbmRsZXIgZm9yIGZpbGUgc2VjdXJpdHkKKwkgIGxhYmVscyBpbiB0aGUgamZmczIgZmlsZXN5c3RlbS4KKwkgIAorCSAgSWYgeW91IGFyZSBub3QgdXNpbmcgYSBzZWN1cml0eSBtb2R1bGUgdGhhdCByZXF1aXJlcyB1c2luZworCSAgZXh0ZW5kZWQgYXR0cmlidXRlcyBmb3IgZmlsZSBzZWN1cml0eSBsYWJlbHMsIHNheSBOLgorCiBjb25maWcgSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUwogCWJvb2wgIkFkdmFuY2VkIGNvbXByZXNzaW9uIG9wdGlvbnMgZm9yIEpGRlMyIgogCWRlcGVuZHMgb24gSkZGUzJfRlMKZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGUKaW5kZXggMDc4ZDNkMS4uZDBlYTZiZiAxMDA2NDQKLS0tIGEvZnMvTWFrZWZpbGUKKysrIGIvZnMvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDcgQEAKIAkJaW9wcmlvLm8gcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubwogCiBvYmotJChDT05GSUdfSU5PVElGWSkJCSs9IGlub3RpZnkubworb2JqLSQoQ09ORklHX0lOT1RJRllfVVNFUikJKz0gaW5vdGlmeV91c2VyLm8KIG9iai0kKENPTkZJR19FUE9MTCkJCSs9IGV2ZW50cG9sbC5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0Lm8gY29tcGF0X2lvY3RsLm8KIApkaWZmIC0tZ2l0IGEvZnMvZXZlbnRwb2xsLmMgYi9mcy9ldmVudHBvbGwuYwppbmRleCAxYjQ0OTFjLi4yNjk1MzM3IDEwMDY0NAotLS0gYS9mcy9ldmVudHBvbGwuYworKysgYi9mcy9ldmVudHBvbGwuYwpAQCAtMzM3LDIwICszMzcsMjAgQEAKIC8qIFNwZWNpYWwgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSByYi10cmVlIG5vZGUgdG8gZGV0ZWN0IGxpbmthZ2UgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlcF9yYl9pbml0bm9kZShzdHJ1Y3QgcmJfbm9kZSAqbikKIHsKLQluLT5yYl9wYXJlbnQgPSBuOworCXJiX3NldF9wYXJlbnQobiwgbik7CiB9CiAKIC8qIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIHJiLXRyZWUgYW5kIG1hcmtzIGl0IGZvciBhIGZhc3QgaXMtbGlua2VkIGNoZWNrICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZXBfcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKm4sIHN0cnVjdCByYl9yb290ICpyKQogewogCXJiX2VyYXNlKG4sIHIpOwotCW4tPnJiX3BhcmVudCA9IG47CisJcmJfc2V0X3BhcmVudChuLCBuKTsKIH0KIAogLyogRmFzdCBjaGVjayB0byB2ZXJpZnkgdGhhdCB0aGUgaXRlbSBpcyBsaW5rZWQgdG8gdGhlIG1haW4gcmItdHJlZSAqLwogc3RhdGljIGlubGluZSBpbnQgZXBfcmJfbGlua2VkKHN0cnVjdCByYl9ub2RlICpuKQogewotCXJldHVybiBuLT5yYl9wYXJlbnQgIT0gbjsKKwlyZXR1cm4gcmJfcGFyZW50KG4pICE9IG47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmMKaW5kZXggM2E3OWQ5Ny4uZDA3ODU4YyAxMDA2NDQKLS0tIGEvZnMvZXhlYy5jCisrKyBiL2ZzL2V4ZWMuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMTA4NSw2ICsxMDg2LDExIEBACiAJLyoga2VybmVsIG1vZHVsZSBsb2FkZXIgZml4dXAgKi8KIAkvKiBzbyB3ZSBkb24ndCB0cnkgdG8gbG9hZCBydW4gbW9kcHJvYmUgaW4ga2VybmVsIHNwYWNlLiAqLwogCXNldF9mcyhVU0VSX0RTKTsKKworCXJldHZhbCA9IGF1ZGl0X2Jwcm0oYnBybSk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwogCXJldHZhbCA9IC1FTk9FTlQ7CiAJZm9yICh0cnk9MDsgdHJ5PDI7IHRyeSsrKSB7CiAJCXJlYWRfbG9jaygmYmluZm10X2xvY2spOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9kaXIuYyBiL2ZzL2V4dDMvZGlyLmMKaW5kZXggZjM3NTI4ZS4uZmJiMGQ0ZSAxMDA2NDQKLS0tIGEvZnMvZXh0My9kaXIuYworKysgYi9mcy9leHQzL2Rpci5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAkJICogYmVnaW5uaW5nIG9mIHRoZSBsb29wIGFuZCB0cnkgdG8gZnJlZSB0aGUgcGFyZW50CiAJCSAqIG5vZGUuCiAJCSAqLwotCQlwYXJlbnQgPSBuLT5yYl9wYXJlbnQ7CisJCXBhcmVudCA9IHJiX3BhcmVudChuKTsKIAkJZm5hbWUgPSByYl9lbnRyeShuLCBzdHJ1Y3QgZm5hbWUsIHJiX2hhc2gpOwogCQl3aGlsZSAoZm5hbWUpIHsKIAkJCXN0cnVjdCBmbmFtZSAqIG9sZCA9IGZuYW1lOwpkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeS5jIGIvZnMvaW5vdGlmeS5jCmluZGV4IDczMmVjNGIuLjcyMzgzNmEgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnkuYworKysgYi9mcy9pbm90aWZ5LmMKQEAgLTUsNyArNSwxMCBAQAogICoJSm9obiBNY0N1dGNoYW4JPHR0YkB0ZW50YWNsZS5kaHMub3JnPgogICoJUm9iZXJ0IExvdmUJPHJtbEBub3ZlbGwuY29tPgogICoKKyAqIEtlcm5lbCBBUEkgYWRkZWQgYnk6IEFteSBHcmlmZmlzIDxhbXkuZ3JpZmZpc0BocC5jb20+CisgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IEpvaG4gTWNDdXRjaGFuCisgKiBDb3B5cmlnaHQgMjAwNiBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTIwLDM1ICsyMywxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgotI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CiAKIHN0YXRpYyBhdG9taWNfdCBpbm90aWZ5X2Nvb2tpZTsKIAotc3RhdGljIGttZW1fY2FjaGVfdCAqd2F0Y2hfY2FjaGVwIF9fcmVhZF9tb3N0bHk7Ci1zdGF0aWMga21lbV9jYWNoZV90ICpldmVudF9jYWNoZXAgX19yZWFkX21vc3RseTsKLQotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqaW5vdGlmeV9tbnQgX19yZWFkX21vc3RseTsKLQotLyogdGhlc2UgYXJlIGNvbmZpZ3VyYWJsZSB2aWEgL3Byb2Mvc3lzL2ZzL2lub3RpZnkvICovCi1pbnQgaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMgX19yZWFkX21vc3RseTsKLWludCBpbm90aWZ5X21heF91c2VyX3dhdGNoZXMgX19yZWFkX21vc3RseTsKLWludCBpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzIF9fcmVhZF9tb3N0bHk7Ci0KIC8qCiAgKiBMb2NrIG9yZGVyaW5nOgogICoKQEAgLTU2LDMzMCArNDEsMTExIEBACiAgKiBpcHJ1bmVfbXV0ZXggKHN5bmNocm9uaXplIHNocmlua19pY2FjaGVfbWVtb3J5KCkpCiAgKiAJaW5vZGVfbG9jayAocHJvdGVjdHMgdGhlIHN1cGVyX2Jsb2NrLT5zX2lub2RlcyBsaXN0KQogICogCWlub2RlLT5pbm90aWZ5X211dGV4IChwcm90ZWN0cyBpbm9kZS0+aW5vdGlmeV93YXRjaGVzIGFuZCB3YXRjaGVzLT5pX2xpc3QpCi0gKiAJCWlub3RpZnlfZGV2LT5tdXRleCAocHJvdGVjdHMgaW5vdGlmeV9kZXZpY2UgYW5kIHdhdGNoZXMtPmRfbGlzdCkKKyAqIAkJaW5vdGlmeV9oYW5kbGUtPm11dGV4IChwcm90ZWN0cyBpbm90aWZ5X2hhbmRsZSBhbmQgd2F0Y2hlcy0+aF9saXN0KQorICoKKyAqIFRoZSBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaW5vdGlmeV9oYW5kbGUtPm11dGV4IGFuZCBoZWxkIGR1cmluZyBleGVjdXRpb24KKyAqIG9mIGEgY2FsbGVyJ3MgZXZlbnQgaGFuZGxlci4gIFRodXMsIHRoZSBjYWxsZXIgbXVzdCBub3QgaG9sZCBhbnkgbG9ja3MKKyAqIHRha2VuIGluIHRoZWlyIGV2ZW50IGhhbmRsZXIgd2hpbGUgY2FsbGluZyBhbnkgb2YgdGhlIHB1Ymxpc2hlZCBpbm90aWZ5CisgKiBpbnRlcmZhY2VzLgogICovCiAKIC8qCi0gKiBMaWZldGltZXMgb2YgdGhlIHRocmVlIG1haW4gZGF0YSBzdHJ1Y3R1cmVzLS1pbm90aWZ5X2RldmljZSwgaW5vZGUsIGFuZAorICogTGlmZXRpbWVzIG9mIHRoZSB0aHJlZSBtYWluIGRhdGEgc3RydWN0dXJlcy0taW5vdGlmeV9oYW5kbGUsIGlub2RlLCBhbmQKICAqIGlub3RpZnlfd2F0Y2gtLWFyZSBtYW5hZ2VkIGJ5IHJlZmVyZW5jZSBjb3VudC4KICAqCi0gKiBpbm90aWZ5X2RldmljZTogTGlmZXRpbWUgaXMgZnJvbSBpbm90aWZ5X2luaXQoKSB1bnRpbCByZWxlYXNlLiAgQWRkaXRpb25hbAotICogcmVmZXJlbmNlcyBjYW4gYnVtcCB0aGUgY291bnQgdmlhIGdldF9pbm90aWZ5X2RldigpIGFuZCBkcm9wIHRoZSBjb3VudCB2aWEKLSAqIHB1dF9pbm90aWZ5X2RldigpLgorICogaW5vdGlmeV9oYW5kbGU6IExpZmV0aW1lIGlzIGZyb20gaW5vdGlmeV9pbml0KCkgdG8gaW5vdGlmeV9kZXN0cm95KCkuCisgKiBBZGRpdGlvbmFsIHJlZmVyZW5jZXMgY2FuIGJ1bXAgdGhlIGNvdW50IHZpYSBnZXRfaW5vdGlmeV9oYW5kbGUoKSBhbmQgZHJvcAorICogdGhlIGNvdW50IHZpYSBwdXRfaW5vdGlmeV9oYW5kbGUoKS4KICAqCi0gKiBpbm90aWZ5X3dhdGNoOiBMaWZldGltZSBpcyBmcm9tIGNyZWF0ZV93YXRjaCgpIHRvIGRlc3Rvcnlfd2F0Y2goKS4KLSAqIEFkZGl0aW9uYWwgcmVmZXJlbmNlcyBjYW4gYnVtcCB0aGUgY291bnQgdmlhIGdldF9pbm90aWZ5X3dhdGNoKCkgYW5kIGRyb3AKLSAqIHRoZSBjb3VudCB2aWEgcHV0X2lub3RpZnlfd2F0Y2goKS4KKyAqIGlub3RpZnlfd2F0Y2g6IGZvciBpbm90aWZ5J3MgcHVycG9zZXMsIGxpZmV0aW1lIGlzIGZyb20gaW5vdGlmeV9hZGRfd2F0Y2goKQorICogdG8gcmVtb3ZlX3dhdGNoX25vX2V2ZW50KCkuICBBZGRpdGlvbmFsIHJlZmVyZW5jZXMgY2FuIGJ1bXAgdGhlIGNvdW50IHZpYQorICogZ2V0X2lub3RpZnlfd2F0Y2goKSBhbmQgZHJvcCB0aGUgY291bnQgdmlhIHB1dF9pbm90aWZ5X3dhdGNoKCkuICBUaGUgY2FsbGVyCisgKiBpcyByZXBvbnNpYmxlIGZvciB0aGUgZmluYWwgcHV0IGFmdGVyIHJlY2VpdmluZyBJTl9JR05PUkVELCBvciB3aGVuIHVzaW5nCisgKiBJTl9PTkVTSE9UIGFmdGVyIHJlY2VpdmluZyB0aGUgZmlyc3QgZXZlbnQuICBJbm90aWZ5IGRvZXMgdGhlIGZpbmFsIHB1dCBpZgorICogaW5vdGlmeV9kZXN0cm95KCkgaXMgY2FsbGVkLgogICoKICAqIGlub2RlOiBQaW5uZWQgc28gbG9uZyBhcyB0aGUgaW5vZGUgaXMgYXNzb2NpYXRlZCB3aXRoIGEgd2F0Y2gsIGZyb20KLSAqIGNyZWF0ZV93YXRjaCgpIHRvIHB1dF9pbm90aWZ5X3dhdGNoKCkuCisgKiBpbm90aWZ5X2FkZF93YXRjaCgpIHRvIHRoZSBmaW5hbCBwdXRfaW5vdGlmeV93YXRjaCgpLgogICovCiAKIC8qCi0gKiBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgLSByZXByZXNlbnRzIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAtIHJlcHJlc2VudHMgYW4gaW5vdGlmeSBpbnN0YW5jZQogICoKICAqIFRoaXMgc3RydWN0dXJlIGlzIHByb3RlY3RlZCBieSB0aGUgbXV0ZXggJ211dGV4Jy4KICAqLwotc3RydWN0IGlub3RpZnlfZGV2aWNlIHsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAJd3E7CQkvKiB3YWl0IHF1ZXVlIGZvciBpL28gKi8KK3N0cnVjdCBpbm90aWZ5X2hhbmRsZSB7CiAJc3RydWN0IGlkcgkJaWRyOwkJLyogaWRyIG1hcHBpbmcgd2QgLT4gd2F0Y2ggKi8KIAlzdHJ1Y3QgbXV0ZXgJCW11dGV4OwkJLyogcHJvdGVjdHMgdGhpcyBiYWQgYm95ICovCi0Jc3RydWN0IGxpc3RfaGVhZCAJZXZlbnRzOwkJLyogbGlzdCBvZiBxdWV1ZWQgZXZlbnRzICovCiAJc3RydWN0IGxpc3RfaGVhZAl3YXRjaGVzOwkvKiBsaXN0IG9mIHdhdGNoZXMgKi8KIAlhdG9taWNfdAkJY291bnQ7CQkvKiByZWZlcmVuY2UgY291bnQgKi8KLQlzdHJ1Y3QgdXNlcl9zdHJ1Y3QJKnVzZXI7CQkvKiB1c2VyIHdobyBvcGVuZWQgdGhpcyBkZXYgKi8KLQl1bnNpZ25lZCBpbnQJCXF1ZXVlX3NpemU7CS8qIHNpemUgb2YgdGhlIHF1ZXVlIChieXRlcykgKi8KLQl1bnNpZ25lZCBpbnQJCWV2ZW50X2NvdW50OwkvKiBudW1iZXIgb2YgcGVuZGluZyBldmVudHMgKi8KLQl1bnNpZ25lZCBpbnQJCW1heF9ldmVudHM7CS8qIG1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyAqLwogCXUzMgkJCWxhc3Rfd2Q7CS8qIHRoZSBsYXN0IHdkIGFsbG9jYXRlZCAqLworCWNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKmluX29wczsgLyogaW5vdGlmeSBjYWxsZXIgb3BlcmF0aW9ucyAqLwogfTsKIAotLyoKLSAqIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAtIEFuIGlub3RpZnkgZXZlbnQsIG9yaWdpbmF0aW5nIGZyb20gYSB3YXRjaCBhbmQKLSAqIHF1ZXVlZCBmb3IgdXNlci1zcGFjZS4gIEEgbGlzdCBvZiB0aGVzZSBpcyBhdHRhY2hlZCB0byBlYWNoIGluc3RhbmNlIG9mIHRoZQotICogZGV2aWNlLiAgSW4gcmVhZCgpLCB0aGlzIGxpc3QgaXMgd2Fsa2VkIGFuZCBhbGwgZXZlbnRzIHRoYXQgY2FuIGZpdCBpbiB0aGUKLSAqIGJ1ZmZlciBhcmUgcmV0dXJuZWQuCi0gKgotICogUHJvdGVjdGVkIGJ5IGRldi0+bXV0ZXggb2YgdGhlIGRldmljZSBpbiB3aGljaCB3ZSBhcmUgcXVldWVkLgotICovCi1zdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgewotCXN0cnVjdCBpbm90aWZ5X2V2ZW50CWV2ZW50OwkvKiB0aGUgdXNlci1zcGFjZSBldmVudCAqLwotCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGxpc3Q7CS8qIGVudHJ5IGluIGlub3RpZnlfZGV2aWNlJ3MgbGlzdCAqLwotCWNoYXIJCQkqbmFtZTsJLyogZmlsZW5hbWUsIGlmIGFueSAqLwotfTsKLQotLyoKLSAqIHN0cnVjdCBpbm90aWZ5X3dhdGNoIC0gcmVwcmVzZW50cyBhIHdhdGNoIHJlcXVlc3Qgb24gYSBzcGVjaWZpYyBpbm9kZQotICoKLSAqIGRfbGlzdCBpcyBwcm90ZWN0ZWQgYnkgZGV2LT5tdXRleCBvZiB0aGUgYXNzb2NpYXRlZCB3YXRjaC0+ZGV2LgotICogaV9saXN0IGFuZCBtYXNrIGFyZSBwcm90ZWN0ZWQgYnkgaW5vZGUtPmlub3RpZnlfbXV0ZXggb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUuCi0gKiBkZXYsIGlub2RlLCBhbmQgd2QgYXJlIG5ldmVyIHdyaXR0ZW4gdG8gb25jZSB0aGUgd2F0Y2ggaXMgY3JlYXRlZC4KLSAqLwotc3RydWN0IGlub3RpZnlfd2F0Y2ggewotCXN0cnVjdCBsaXN0X2hlYWQJZF9saXN0OwkvKiBlbnRyeSBpbiBpbm90aWZ5X2RldmljZSdzIGxpc3QgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkCWlfbGlzdDsJLyogZW50cnkgaW4gaW5vZGUncyBsaXN0ICovCi0JYXRvbWljX3QJCWNvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KLQlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UJKmRldjsJLyogYXNzb2NpYXRlZCBkZXZpY2UgKi8KLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZTsJLyogYXNzb2NpYXRlZCBpbm9kZSAqLwotCXMzMiAJCQl3ZDsJLyogd2F0Y2ggZGVzY3JpcHRvciAqLwotCXUzMgkJCW1hc2s7CS8qIGV2ZW50IG1hc2sgZm9yIHRoaXMgd2F0Y2ggKi8KLX07Ci0KLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLQotc3RhdGljIGludCB6ZXJvOwotCi1jdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdID0gewotCXsKLQkJLmN0bF9uYW1lCT0gSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVMsCi0JCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl9pbnN0YW5jZXMiLAotCQkuZGF0YQkJPSAmaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMsCi0JCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCi0JCS5tb2RlCQk9IDA2NDQsCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAotCQkuZXh0cmExCQk9ICZ6ZXJvLAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBJTk9USUZZX01BWF9VU0VSX1dBVENIRVMsCi0JCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl93YXRjaGVzIiwKLQkJLmRhdGEJCT0gJmlub3RpZnlfbWF4X3VzZXJfd2F0Y2hlcywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwKLQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKLQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCi0JCS5leHRyYTEJCT0gJnplcm8sIAotCX0sCi0JewotCQkuY3RsX25hbWUJPSBJTk9USUZZX01BWF9RVUVVRURfRVZFTlRTLAotCQkucHJvY25hbWUJPSAibWF4X3F1ZXVlZF9ldmVudHMiLAotCQkuZGF0YQkJPSAmaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cywKLQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJLm1vZGUJCT0gMDY0NCwgCi0JCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCi0JCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLCAKLQkJLmV4dHJhMQkJPSAmemVybwotCX0sCi0JeyAuY3RsX25hbWUgPSAwIH0KLX07Ci0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfZGV2KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIGdldF9pbm90aWZ5X2hhbmRsZShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQogewotCWF0b21pY19pbmMoJmRldi0+Y291bnQpOworCWF0b21pY19pbmMoJmloLT5jb3VudCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5vdGlmeV9kZXYoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfaGFuZGxlKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+Y291bnQpKSB7Ci0JCWF0b21pY19kZWMoJmRldi0+dXNlci0+aW5vdGlmeV9kZXZzKTsKLQkJZnJlZV91aWQoZGV2LT51c2VyKTsKLQkJaWRyX2Rlc3Ryb3koJmRldi0+aWRyKTsKLQkJa2ZyZWUoZGV2KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaWgtPmNvdW50KSkgeworCQlpZHJfZGVzdHJveSgmaWgtPmlkcik7CisJCWtmcmVlKGloKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCisvKioKKyAqIGdldF9pbm90aWZ5X3dhdGNoIC0gZ3JhYiBhIHJlZmVyZW5jZSB0byBhbiBpbm90aWZ5X3dhdGNoCisgKiBAd2F0Y2g6IHdhdGNoIHRvIGdyYWIKKyAqLwordm9pZCBnZXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCiB7CiAJYXRvbWljX2luYygmd2F0Y2gtPmNvdW50KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGdldF9pbm90aWZ5X3dhdGNoKTsKIAotLyoKKy8qKgogICogcHV0X2lub3RpZnlfd2F0Y2ggLSBkZWNyZW1lbnRzIHRoZSByZWYgY291bnQgb24gYSBnaXZlbiB3YXRjaC4gIGNsZWFucyB1cAotICogdGhlIHdhdGNoIGFuZCBpdHMgcmVmZXJlbmNlcyBpZiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLgorICogd2F0Y2ggcmVmZXJlbmNlcyBpZiB0aGUgY291bnQgcmVhY2hlcyB6ZXJvLiAgaW5vdGlmeV93YXRjaCBpcyBmcmVlZCBieQorICogaW5vdGlmeSBjYWxsZXJzIHZpYSB0aGUgZGVzdHJveV93YXRjaCgpIG9wLgorICogQHdhdGNoOiB3YXRjaCB0byByZWxlYXNlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCit2b2lkIHB1dF9pbm90aWZ5X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmd2F0Y2gtPmNvdW50KSkgewotCQlwdXRfaW5vdGlmeV9kZXYod2F0Y2gtPmRldik7CisJCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWggPSB3YXRjaC0+aWg7CisKIAkJaXB1dCh3YXRjaC0+aW5vZGUpOwotCQlrbWVtX2NhY2hlX2ZyZWUod2F0Y2hfY2FjaGVwLCB3YXRjaCk7CisJCWloLT5pbl9vcHMtPmRlc3Ryb3lfd2F0Y2god2F0Y2gpOworCQlwdXRfaW5vdGlmeV9oYW5kbGUoaWgpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHB1dF9pbm90aWZ5X3dhdGNoKTsKIAogLyoKLSAqIGtlcm5lbF9ldmVudCAtIGNyZWF0ZSBhIG5ldyBrZXJuZWwgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycworICogaW5vdGlmeV9oYW5kbGVfZ2V0X3dkIC0gcmV0dXJucyB0aGUgbmV4dCBXRCBmb3IgdXNlIGJ5IHRoZSBnaXZlbiBoYW5kbGUKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGNhbiBzbGVlcC4KKyAqIENhbGxlcnMgbXVzdCBob2xkIGloLT5tdXRleC4gIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLgogICovCi1zdGF0aWMgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICoga2VybmVsX2V2ZW50KHMzMiB3ZCwgdTMyIG1hc2ssIHUzMiBjb29raWUsCi0JCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQ7Ci0KLQlrZXZlbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGV2ZW50X2NhY2hlcCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHVubGlrZWx5KCFrZXZlbnQpKQotCQlyZXR1cm4gTlVMTDsKLQotCS8qIHdlIGhhbmQgdGhpcyBvdXQgdG8gdXNlci1zcGFjZSwgc28gemVybyBpdCBqdXN0IGluIGNhc2UgKi8KLQltZW1zZXQoJmtldmVudC0+ZXZlbnQsIDAsIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkpOwotCi0Ja2V2ZW50LT5ldmVudC53ZCA9IHdkOwotCWtldmVudC0+ZXZlbnQubWFzayA9IG1hc2s7Ci0Ja2V2ZW50LT5ldmVudC5jb29raWUgPSBjb29raWU7Ci0KLQlJTklUX0xJU1RfSEVBRCgma2V2ZW50LT5saXN0KTsKLQotCWlmIChuYW1lKSB7Ci0JCXNpemVfdCBsZW4sIHJlbSwgZXZlbnRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCk7Ci0KLQkJLyoKLQkJICogV2UgbmVlZCB0byBwYWQgdGhlIGZpbGVuYW1lIHNvIGFzIHRvIHByb3Blcmx5IGFsaWduIGFuCi0JCSAqIGFycmF5IG9mIGlub3RpZnlfZXZlbnQgc3RydWN0dXJlcy4gIEJlY2F1c2UgdGhlIHN0cnVjdHVyZSBpcwotCQkgKiBzbWFsbCBhbmQgdGhlIGNvbW1vbiBjYXNlIGlzIGEgc21hbGwgZmlsZW5hbWUsIHdlIGp1c3Qgcm91bmQKLQkJICogdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdHVyZSdzIHNpemVvZi4gIFRoaXMgaXMKLQkJICogc2ltcGxlIGFuZCBzYWZlIGZvciBhbGwgYXJjaGl0ZWN0dXJlcy4KLQkJICovCi0JCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7Ci0JCXJlbSA9IGV2ZW50X3NpemUgLSBsZW47Ci0JCWlmIChsZW4gPiBldmVudF9zaXplKSB7Ci0JCQlyZW0gPSBldmVudF9zaXplIC0gKGxlbiAlIGV2ZW50X3NpemUpOwotCQkJaWYgKGxlbiAlIGV2ZW50X3NpemUgPT0gMCkKLQkJCQlyZW0gPSAwOwotCQl9Ci0KLQkJa2V2ZW50LT5uYW1lID0ga21hbGxvYyhsZW4gKyByZW0sIEdGUF9LRVJORUwpOwotCQlpZiAodW5saWtlbHkoIWtldmVudC0+bmFtZSkpIHsKLQkJCWttZW1fY2FjaGVfZnJlZShldmVudF9jYWNoZXAsIGtldmVudCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQltZW1jcHkoa2V2ZW50LT5uYW1lLCBuYW1lLCBsZW4pOwotCQlpZiAocmVtKQotCQkJbWVtc2V0KGtldmVudC0+bmFtZSArIGxlbiwgMCwgcmVtKTsJCQotCQlrZXZlbnQtPmV2ZW50LmxlbiA9IGxlbiArIHJlbTsKLQl9IGVsc2UgewotCQlrZXZlbnQtPmV2ZW50LmxlbiA9IDA7Ci0JCWtldmVudC0+bmFtZSA9IE5VTEw7Ci0JfQotCi0JcmV0dXJuIGtldmVudDsKLX0KLQotLyoKLSAqIGlub3RpZnlfZGV2X2dldF9ldmVudCAtIHJldHVybiB0aGUgbmV4dCBldmVudCBpbiB0aGUgZ2l2ZW4gZGV2J3MgcXVldWUKLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+bXV0ZXguCi0gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICoKLWlub3RpZnlfZGV2X2dldF9ldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gbGlzdF9lbnRyeShkZXYtPmV2ZW50cy5uZXh0LCBzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQsIGxpc3QpOwotfQotCi0vKgotICogaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQgLSBhZGQgYSBuZXcgZXZlbnQgdG8gdGhlIGdpdmVuIGRldmljZQotICoKLSAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5tdXRleC4gIENhbiBzbGVlcCAoY2FsbHMga2VybmVsX2V2ZW50KCkpLgotICovCi1zdGF0aWMgdm9pZCBpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwKLQkJCQkgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCB1MzIgbWFzaywKLQkJCQkgICAgdTMyIGNvb2tpZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudCwgKmxhc3Q7Ci0KLQkvKiBjb2FsZXNjaW5nOiBkcm9wIHRoaXMgZXZlbnQgaWYgaXQgaXMgYSBkdXBlIG9mIHRoZSBwcmV2aW91cyAqLwotCWxhc3QgPSBpbm90aWZ5X2Rldl9nZXRfZXZlbnQoZGV2KTsKLQlpZiAobGFzdCAmJiBsYXN0LT5ldmVudC5tYXNrID09IG1hc2sgJiYgbGFzdC0+ZXZlbnQud2QgPT0gd2F0Y2gtPndkICYmCi0JCQlsYXN0LT5ldmVudC5jb29raWUgPT0gY29va2llKSB7Ci0JCWNvbnN0IGNoYXIgKmxhc3RuYW1lID0gbGFzdC0+bmFtZTsKLQotCQlpZiAoIW5hbWUgJiYgIWxhc3RuYW1lKQotCQkJcmV0dXJuOwotCQlpZiAobmFtZSAmJiBsYXN0bmFtZSAmJiAhc3RyY21wKGxhc3RuYW1lLCBuYW1lKSkKLQkJCXJldHVybjsKLQl9Ci0KLQkvKiB0aGUgcXVldWUgb3ZlcmZsb3dlZCBhbmQgd2UgYWxyZWFkeSBzZW50IHRoZSBRX09WRVJGTE9XIGV2ZW50ICovCi0JaWYgKHVubGlrZWx5KGRldi0+ZXZlbnRfY291bnQgPiBkZXYtPm1heF9ldmVudHMpKQotCQlyZXR1cm47Ci0KLQkvKiBpZiB0aGUgcXVldWUgb3ZlcmZsb3dzLCB3ZSBuZWVkIHRvIG5vdGlmeSB1c2VyIHNwYWNlICovCi0JaWYgKHVubGlrZWx5KGRldi0+ZXZlbnRfY291bnQgPT0gZGV2LT5tYXhfZXZlbnRzKSkKLQkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KC0xLCBJTl9RX09WRVJGTE9XLCBjb29raWUsIE5VTEwpOwotCWVsc2UKLQkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KHdhdGNoLT53ZCwgbWFzaywgY29va2llLCBuYW1lKTsKLQotCWlmICh1bmxpa2VseSgha2V2ZW50KSkKLQkJcmV0dXJuOwotCi0JLyogcXVldWUgdGhlIGV2ZW50IGFuZCB3YWtlIHVwIGFueW9uZSB3YWl0aW5nICovCi0JZGV2LT5ldmVudF9jb3VudCsrOwotCWRldi0+cXVldWVfc2l6ZSArPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsga2V2ZW50LT5ldmVudC5sZW47Ci0JbGlzdF9hZGRfdGFpbCgma2V2ZW50LT5saXN0LCAmZGV2LT5ldmVudHMpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53cSk7Ci19Ci0KLS8qCi0gKiByZW1vdmVfa2V2ZW50IC0gY2xlYW5zIHVwIGFuZCB1bHRpbWF0ZWx5IGZyZWVzIHRoZSBnaXZlbiBrZXZlbnQKLSAqCi0gKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+bXV0ZXguCi0gKi8KLXN0YXRpYyB2b2lkIHJlbW92ZV9rZXZlbnQoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsCi0JCQkgIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqa2V2ZW50KQotewotCWxpc3RfZGVsKCZrZXZlbnQtPmxpc3QpOwotCi0JZGV2LT5ldmVudF9jb3VudC0tOwotCWRldi0+cXVldWVfc2l6ZSAtPSBzaXplb2Yoc3RydWN0IGlub3RpZnlfZXZlbnQpICsga2V2ZW50LT5ldmVudC5sZW47Ci0KLQlrZnJlZShrZXZlbnQtPm5hbWUpOwotCWttZW1fY2FjaGVfZnJlZShldmVudF9jYWNoZXAsIGtldmVudCk7Ci19Ci0KLS8qCi0gKiBpbm90aWZ5X2Rldl9ldmVudF9kZXF1ZXVlIC0gZGVzdHJveSBhbiBldmVudCBvbiB0aGUgZ2l2ZW4gZGV2aWNlCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPm11dGV4LgotICovCi1zdGF0aWMgdm9pZCBpbm90aWZ5X2Rldl9ldmVudF9kZXF1ZXVlKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQotewotCWlmICghbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpKSB7Ci0JCXN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqa2V2ZW50OwotCQlrZXZlbnQgPSBpbm90aWZ5X2Rldl9nZXRfZXZlbnQoZGV2KTsKLQkJcmVtb3ZlX2tldmVudChkZXYsIGtldmVudCk7Ci0JfQotfQotCi0vKgotICogaW5vdGlmeV9kZXZfZ2V0X3dkIC0gcmV0dXJucyB0aGUgbmV4dCBXRCBmb3IgdXNlIGJ5IHRoZSBnaXZlbiBkZXYKLSAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBkZXYtPm11dGV4LiAgVGhpcyBmdW5jdGlvbiBjYW4gc2xlZXAuCi0gKi8KLXN0YXRpYyBpbnQgaW5vdGlmeV9kZXZfZ2V0X3dkKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LAotCQkJICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQorc3RhdGljIGludCBpbm90aWZ5X2hhbmRsZV9nZXRfd2Qoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQogewogCWludCByZXQ7CiAKIAlkbyB7Ci0JCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJmRldi0+aWRyLCBHRlBfS0VSTkVMKSkpCisJCWlmICh1bmxpa2VseSghaWRyX3ByZV9nZXQoJmloLT5pZHIsIEdGUF9LRVJORUwpKSkKIAkJCXJldHVybiAtRU5PU1BDOwotCQlyZXQgPSBpZHJfZ2V0X25ld19hYm92ZSgmZGV2LT5pZHIsIHdhdGNoLCBkZXYtPmxhc3Rfd2QrMSwgJndhdGNoLT53ZCk7CisJCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZpaC0+aWRyLCB3YXRjaCwgaWgtPmxhc3Rfd2QrMSwgJndhdGNoLT53ZCk7CiAJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwogCisJaWYgKGxpa2VseSghcmV0KSkKKwkJaWgtPmxhc3Rfd2QgPSB3YXRjaC0+d2Q7CisKIAlyZXR1cm4gcmV0OwogfQogCiAvKgotICogZmluZF9pbm9kZSAtIHJlc29sdmUgYSB1c2VyLWdpdmVuIHBhdGggdG8gYSBzcGVjaWZpYyBpbm9kZSBhbmQgcmV0dXJuIGEgbmQKLSAqLwotc3RhdGljIGludCBmaW5kX2lub2RlKGNvbnN0IGNoYXIgX191c2VyICpkaXJuYW1lLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKLQkJICAgICAgdW5zaWduZWQgZmxhZ3MpCi17Ci0JaW50IGVycm9yOwotCi0JZXJyb3IgPSBfX3VzZXJfd2FsayhkaXJuYW1lLCBmbGFncywgbmQpOwotCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOwotCS8qIHlvdSBjYW4gb25seSB3YXRjaCBhbiBpbm9kZSBpZiB5b3UgaGF2ZSByZWFkIHBlcm1pc3Npb25zIG9uIGl0ICovCi0JZXJyb3IgPSB2ZnNfcGVybWlzc2lvbihuZCwgTUFZX1JFQUQpOwotCWlmIChlcnJvcikgCi0JCXBhdGhfcmVsZWFzZShuZCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0vKgogICogaW5vdGlmeV9pbm9kZV93YXRjaGVkIC0gcmV0dXJucyBub256ZXJvIGlmIHRoZXJlIGFyZSB3YXRjaGVzIG9uIHRoaXMgaW5vZGUKICAqIGFuZCB6ZXJvIG90aGVyd2lzZS4gIFdlIGNhbGwgdGhpcyBsb2NrbGVzcywgd2UgZG8gbm90IGNhcmUgaWYgd2UgcmFjZS4KICAqLwpAQCAtNDIyLDY3ICsxODgsMTggQEAKIH0KIAogLyoKLSAqIGNyZWF0ZV93YXRjaCAtIGNyZWF0ZXMgYSB3YXRjaCBvbiB0aGUgZ2l2ZW4gZGV2aWNlLgotICoKLSAqIENhbGxlcnMgbXVzdCBob2xkIGRldi0+bXV0ZXguICBDYWxscyBpbm90aWZ5X2Rldl9nZXRfd2QoKSBzbyBtYXkgc2xlZXAuCi0gKiBCb3RoICdkZXYnIGFuZCAnaW5vZGUnIChieSB3YXkgb2YgbmFtZWlkYXRhKSBuZWVkIHRvIGJlIHBpbm5lZC4KLSAqLwotc3RhdGljIHN0cnVjdCBpbm90aWZ5X3dhdGNoICpjcmVhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsCi0JCQkJCSAgdTMyIG1hc2ssIHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoOwotCWludCByZXQ7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJmRldi0+dXNlci0+aW5vdGlmeV93YXRjaGVzKSA+PQotCQkJaW5vdGlmeV9tYXhfdXNlcl93YXRjaGVzKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PU1BDKTsKLQotCXdhdGNoID0ga21lbV9jYWNoZV9hbGxvYyh3YXRjaF9jYWNoZXAsIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghd2F0Y2gpKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXJldCA9IGlub3RpZnlfZGV2X2dldF93ZChkZXYsIHdhdGNoKTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlrbWVtX2NhY2hlX2ZyZWUod2F0Y2hfY2FjaGVwLCB3YXRjaCk7Ci0JCXJldHVybiBFUlJfUFRSKHJldCk7Ci0JfQotCi0JZGV2LT5sYXN0X3dkID0gd2F0Y2gtPndkOwotCXdhdGNoLT5tYXNrID0gbWFzazsKLQlhdG9taWNfc2V0KCZ3YXRjaC0+Y291bnQsIDApOwotCUlOSVRfTElTVF9IRUFEKCZ3YXRjaC0+ZF9saXN0KTsKLQlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPmlfbGlzdCk7Ci0KLQkvKiBzYXZlIGEgcmVmZXJlbmNlIHRvIGRldmljZSBhbmQgYnVtcCB0aGUgY291bnQgdG8gbWFrZSBpdCBvZmZpY2lhbCAqLwotCWdldF9pbm90aWZ5X2RldihkZXYpOwotCXdhdGNoLT5kZXYgPSBkZXY7Ci0KLQkvKgotCSAqIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGFuZCBidW1wIHRoZSByZWYgY291bnQgdG8gbWFrZSBpdAotCSAqIG9mZmljaWFsLiAgV2UgaG9sZCBhIHJlZmVyZW5jZSB0byBuYW1laWRhdGEsIHdoaWNoIG1ha2VzIHRoaXMgc2FmZS4KLQkgKi8KLQl3YXRjaC0+aW5vZGUgPSBpZ3JhYihpbm9kZSk7Ci0KLQkvKiBidW1wIG91ciBvd24gY291bnQsIGNvcnJlc3BvbmRpbmcgdG8gb3VyIGVudHJ5IGluIGRldi0+d2F0Y2hlcyAqLwotCWdldF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQotCWF0b21pY19pbmMoJmRldi0+dXNlci0+aW5vdGlmeV93YXRjaGVzKTsKLQotCXJldHVybiB3YXRjaDsKLX0KLQotLyoKLSAqIGlub3RpZnlfZmluZF9kZXYgLSBmaW5kIHRoZSB3YXRjaCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGlub2RlIGFuZCBkZXYKKyAqIGlub3RpZnlfZmluZF9oYW5kbGUgLSBmaW5kIHRoZSB3YXRjaCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGlub2RlIGFuZAorICogaGFuZGxlCiAgKgogICogQ2FsbGVycyBtdXN0IGhvbGQgaW5vZGUtPmlub3RpZnlfbXV0ZXguCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqaW5vZGVfZmluZF9kZXYoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJICAgIHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBpbm90aWZ5X3dhdGNoICppbm9kZV9maW5kX2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkgICAgICAgc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCkKIHsKIAlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdhdGNoLCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcywgaV9saXN0KSB7Ci0JCWlmICh3YXRjaC0+ZGV2ID09IGRldikKKwkJaWYgKHdhdGNoLT5paCA9PSBpaCkKIAkJCXJldHVybiB3YXRjaDsKIAl9CiAKQEAgLTQ5MCw0MCArMjA3LDQwIEBACiB9CiAKIC8qCi0gKiByZW1vdmVfd2F0Y2hfbm9fZXZlbnQgLSByZW1vdmVfd2F0Y2goKSB3aXRob3V0IHRoZSBJTl9JR05PUkVEIGV2ZW50LgorICogcmVtb3ZlX3dhdGNoX25vX2V2ZW50IC0gcmVtb3ZlIHdhdGNoIHdpdGhvdXQgdGhlIElOX0lHTk9SRUQgZXZlbnQuCisgKgorICogQ2FsbGVycyBtdXN0IGhvbGQgYm90aCBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaWgtPm11dGV4LgogICovCiBzdGF0aWMgdm9pZCByZW1vdmVfd2F0Y2hfbm9fZXZlbnQoc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAotCQkJCSAgc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCisJCQkJICBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQogewogCWxpc3RfZGVsKCZ3YXRjaC0+aV9saXN0KTsKLQlsaXN0X2RlbCgmd2F0Y2gtPmRfbGlzdCk7CisJbGlzdF9kZWwoJndhdGNoLT5oX2xpc3QpOwogCiAJaWYgKCFpbm90aWZ5X2lub2RlX3dhdGNoZWQod2F0Y2gtPmlub2RlKSkKIAkJc2V0X2RlbnRyeV9jaGlsZF9mbGFncyh3YXRjaC0+aW5vZGUsIDApOwogCi0JYXRvbWljX2RlYygmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOwotCWlkcl9yZW1vdmUoJmRldi0+aWRyLCB3YXRjaC0+d2QpOwotCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKKwlpZHJfcmVtb3ZlKCZpaC0+aWRyLCB3YXRjaC0+d2QpOwogfQogCi0vKgotICogcmVtb3ZlX3dhdGNoIC0gUmVtb3ZlIGEgd2F0Y2ggZnJvbSBib3RoIHRoZSBkZXZpY2UgYW5kIHRoZSBpbm9kZS4gIFNlbmRzCi0gKiB0aGUgSU5fSUdOT1JFRCBldmVudCB0byB0aGUgZ2l2ZW4gZGV2aWNlIHNpZ25pZnlpbmcgdGhhdCB0aGUgaW5vZGUgaXMgbm8KLSAqIGxvbmdlciB3YXRjaGVkLgorLyoqCisgKiBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQgLSBSZW1vdmUgYSB3YXRjaCBmcm9tIGJvdGggdGhlIGhhbmRsZSBhbmQgdGhlCisgKiBpbm9kZS4gIFNlbmRzIHRoZSBJTl9JR05PUkVEIGV2ZW50IHNpZ25pZnlpbmcgdGhhdCB0aGUgaW5vZGUgaXMgbm8gbG9uZ2VyCisgKiB3YXRjaGVkLiAgTWF5IGJlIGludm9rZWQgZnJvbSBhIGNhbGxlcidzIGV2ZW50IGhhbmRsZXIuCisgKiBAaWg6IGlub3RpZnkgaGFuZGxlIGFzc29jaWF0ZWQgd2l0aCB3YXRjaAorICogQHdhdGNoOiB3YXRjaCB0byByZW1vdmUKICAqCi0gKiBDYWxsZXJzIG11c3QgaG9sZCBib3RoIGlub2RlLT5pbm90aWZ5X211dGV4IGFuZCBkZXYtPm11dGV4LiAgV2UgZHJvcCBhCi0gKiByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGJlZm9yZSByZXR1cm5pbmcuCi0gKgotICogVGhlIGlub2RlIGlzIG5vdCBpcHV0KCkgc28gYXMgdG8gcmVtYWluIGF0b21pYy4gIElmIHRoZSBpbm9kZSBuZWVkcyB0byBiZQotICogaXB1dCgpLCB0aGUgY2FsbCByZXR1cm5zIG9uZS4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyB6ZXJvLgorICogQ2FsbGVycyBtdXN0IGhvbGQgYm90aCBpbm9kZS0+aW5vdGlmeV9tdXRleCBhbmQgaWgtPm11dGV4LgogICovCi1zdGF0aWMgdm9pZCByZW1vdmVfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQordm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQogewotCWlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50KGRldiwgd2F0Y2gsIElOX0lHTk9SRUQsIDAsIE5VTEwpOwotCXJlbW92ZV93YXRjaF9ub19ldmVudCh3YXRjaCwgZGV2KTsKKwlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKKwlpaC0+aW5fb3BzLT5oYW5kbGVfZXZlbnQod2F0Y2gsIHdhdGNoLT53ZCwgSU5fSUdOT1JFRCwgMCwgTlVMTCwgTlVMTCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQpOwogCi0vKiBLZXJuZWwgQVBJICovCisvKiBLZXJuZWwgQVBJIGZvciBwcm9kdWNpbmcgZXZlbnRzICovCiAKIC8qCiAgKiBpbm90aWZ5X2RfaW5zdGFudGlhdGUgLSBpbnN0YW50aWF0ZSBkY2FjaGUgZW50cnkgZm9yIGlub2RlCkBAIC01NjMsOSArMjgwLDEwIEBACiAgKiBAbWFzazogZXZlbnQgbWFzayBkZXNjcmliaW5nIHRoaXMgZXZlbnQKICAqIEBjb29raWU6IGNvb2tpZSBmb3Igc3luY2hyb25pemF0aW9uLCBvciB6ZXJvCiAgKiBAbmFtZTogZmlsZW5hbWUsIGlmIGFueQorICogQG5faW5vZGU6IGlub2RlIGFzc29jaWF0ZWQgd2l0aCBuYW1lCiAgKi8KIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaywgdTMyIGNvb2tpZSwKLQkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lKQorCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBpbm9kZSAqbl9pbm9kZSkKIHsKIAlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsICpuZXh0OwogCkBAIC01NzYsMTQgKzI5NCwxMyBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3YXRjaCwgbmV4dCwgJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMsIGlfbGlzdCkgewogCQl1MzIgd2F0Y2hfbWFzayA9IHdhdGNoLT5tYXNrOwogCQlpZiAod2F0Y2hfbWFzayAmIG1hc2spIHsKLQkJCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gd2F0Y2gtPmRldjsKLQkJCWdldF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKLQkJCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQkJaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQoZGV2LCB3YXRjaCwgbWFzaywgY29va2llLCBuYW1lKTsKKwkJCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWg9IHdhdGNoLT5paDsKKwkJCW11dGV4X2xvY2soJmloLT5tdXRleCk7CiAJCQlpZiAod2F0Y2hfbWFzayAmIElOX09ORVNIT1QpCi0JCQkJcmVtb3ZlX3dhdGNoX25vX2V2ZW50KHdhdGNoLCBkZXYpOwotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQkJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKKwkJCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKKwkJCWloLT5pbl9vcHMtPmhhbmRsZV9ldmVudCh3YXRjaCwgd2F0Y2gtPndkLCBtYXNrLCBjb29raWUsCisJCQkJCQkgbmFtZSwgbl9pbm9kZSk7CisJCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7CiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CkBAIC02MTMsNyArMzMwLDggQEAKIAlpZiAoaW5vdGlmeV9pbm9kZV93YXRjaGVkKGlub2RlKSkgewogCQlkZ2V0KHBhcmVudCk7CiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIGNvb2tpZSwgbmFtZSk7CisJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIGNvb2tpZSwgbmFtZSwKKwkJCQkJICBkZW50cnktPmRfaW5vZGUpOwogCQlkcHV0KHBhcmVudCk7CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CkBAIC02NjUsNyArMzgzLDcgQEAKIAogCQluZWVkX2lwdXRfdG1wID0gbmVlZF9pcHV0OwogCQluZWVkX2lwdXQgPSBOVUxMOwotCQkvKiBJbiBjYXNlIHRoZSByZW1vdmVfd2F0Y2goKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KKwkJLyogSW4gY2FzZSBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoKSBkcm9wcyBhIHJlZmVyZW5jZS4gKi8KIAkJaWYgKGlub2RlICE9IG5lZWRfaXB1dF90bXApCiAJCQlfX2lnZXQoaW5vZGUpOwogCQllbHNlCkBAIC02OTQsMTEgKzQxMiwxMiBAQAogCQltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCXdhdGNoZXMgPSAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlczsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0X3csIHdhdGNoZXMsIGlfbGlzdCkgewotCQkJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYgPSB3YXRjaC0+ZGV2OwotCQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCQlpbm90aWZ5X2Rldl9xdWV1ZV9ldmVudChkZXYsIHdhdGNoLCBJTl9VTk1PVU5ULDAsTlVMTCk7Ci0JCQlyZW1vdmVfd2F0Y2god2F0Y2gsIGRldik7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQkJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaD0gd2F0Y2gtPmloOworCQkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKKwkJCWloLT5pbl9vcHMtPmhhbmRsZV9ldmVudCh3YXRjaCwgd2F0Y2gtPndkLCBJTl9VTk1PVU5ULCAwLAorCQkJCQkJIE5VTEwsIE5VTEwpOworCQkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCB3YXRjaCk7CisJCQltdXRleF91bmxvY2soJmloLT5tdXRleCk7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCWlwdXQoaW5vZGUpOwkJCkBAIC03MTgsNDMyICs0MzcsMjkyIEBACiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdhdGNoLCBuZXh0LCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcywgaV9saXN0KSB7Ci0JCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gd2F0Y2gtPmRldjsKLQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCXJlbW92ZV93YXRjaCh3YXRjaCwgZGV2KTsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCA9IHdhdGNoLT5paDsKKwkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKKwkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGloLCB3YXRjaCk7CisJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2lub2RlX2lzX2RlYWQpOwogCi0vKiBEZXZpY2UgSW50ZXJmYWNlICovCisvKiBLZXJuZWwgQ29uc3VtZXIgQVBJICovCiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5vdGlmeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQorLyoqCisgKiBpbm90aWZ5X2luaXQgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbm90aWZ5IGluc3RhbmNlCisgKiBAb3BzOiBjYWxsZXIncyBpbm90aWZ5IG9wZXJhdGlvbnMKKyAqLworc3RydWN0IGlub3RpZnlfaGFuZGxlICppbm90aWZ5X2luaXQoY29uc3Qgc3RydWN0IGlub3RpZnlfb3BlcmF0aW9ucyAqb3BzKQogewotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCWludCByZXQgPSAwOworCXN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWg7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJmRldi0+d3EsIHdhaXQpOwotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCWlmICghbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpKQotCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJaWggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIWloKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKLQlyZXR1cm4gcmV0OworCWlkcl9pbml0KCZpaC0+aWRyKTsKKwlJTklUX0xJU1RfSEVBRCgmaWgtPndhdGNoZXMpOworCW11dGV4X2luaXQoJmloLT5tdXRleCk7CisJaWgtPmxhc3Rfd2QgPSAwOworCWloLT5pbl9vcHMgPSBvcHM7CisJYXRvbWljX3NldCgmaWgtPmNvdW50LCAwKTsKKwlnZXRfaW5vdGlmeV9oYW5kbGUoaWgpOworCisJcmV0dXJuIGloOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9pbml0KTsKIAotc3RhdGljIHNzaXplX3QgaW5vdGlmeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCisvKioKKyAqIGlub3RpZnlfaW5pdF93YXRjaCAtIGluaXRpYWxpemUgYW4gaW5vdGlmeSB3YXRjaAorICogQHdhdGNoOiB3YXRjaCB0byBpbml0aWFsaXplCisgKi8KK3ZvaWQgaW5vdGlmeV9pbml0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKIHsKLQlzaXplX3QgZXZlbnRfc2l6ZSA9IHNpemVvZiAoc3RydWN0IGlub3RpZnlfZXZlbnQpOwotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OwotCWNoYXIgX191c2VyICpzdGFydDsKLQlpbnQgcmV0OwotCURFRklORV9XQUlUKHdhaXQpOwotCi0Jc3RhcnQgPSBidWY7Ci0JZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jd2hpbGUgKDEpIHsKLQkJaW50IGV2ZW50czsKLQotCQlwcmVwYXJlX3RvX3dhaXQoJmRldi0+d3EsICZ3YWl0LCBUQVNLX0lOVEVSUlVQVElCTEUpOwotCi0JCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCQlldmVudHMgPSAhbGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpOwotCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCQlpZiAoZXZlbnRzKSB7Ci0JCQlyZXQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCXJldCA9IC1FQUdBSU47Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJcmV0ID0gLUVJTlRSOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlzY2hlZHVsZSgpOwotCX0KLQotCWZpbmlzaF93YWl0KCZkZXYtPndxLCAmd2FpdCk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKLQotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCXdoaWxlICgxKSB7Ci0JCXN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqa2V2ZW50OwotCi0JCXJldCA9IGJ1ZiAtIHN0YXJ0OwotCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5ldmVudHMpKQotCQkJYnJlYWs7Ci0KLQkJa2V2ZW50ID0gaW5vdGlmeV9kZXZfZ2V0X2V2ZW50KGRldik7Ci0JCWlmIChldmVudF9zaXplICsga2V2ZW50LT5ldmVudC5sZW4gPiBjb3VudCkKLQkJCWJyZWFrOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAma2V2ZW50LT5ldmVudCwgZXZlbnRfc2l6ZSkpIHsKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCQlidWYgKz0gZXZlbnRfc2l6ZTsKLQkJY291bnQgLT0gZXZlbnRfc2l6ZTsKLQotCQlpZiAoa2V2ZW50LT5uYW1lKSB7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1Ziwga2V2ZW50LT5uYW1lLCBrZXZlbnQtPmV2ZW50LmxlbikpewotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlidWYgKz0ga2V2ZW50LT5ldmVudC5sZW47Ci0JCQljb3VudCAtPSBrZXZlbnQtPmV2ZW50LmxlbjsKLQkJfQotCi0JCXJlbW92ZV9rZXZlbnQoZGV2LCBrZXZlbnQpOwotCX0KLQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCi0JcmV0dXJuIHJldDsKKwlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPmhfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJndhdGNoLT5pX2xpc3QpOworCWF0b21pY19zZXQoJndhdGNoLT5jb3VudCwgMCk7CisJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOyAvKiBpbml0aWFsIGdldCAqLwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9pbml0X3dhdGNoKTsKIAotc3RhdGljIGludCBpbm90aWZ5X3JlbGVhc2Uoc3RydWN0IGlub2RlICppZ25vcmVkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKKy8qKgorICogaW5vdGlmeV9kZXN0cm95IC0gY2xlYW4gdXAgYW5kIGRlc3Ryb3kgYW4gaW5vdGlmeSBpbnN0YW5jZQorICogQGloOiBpbm90aWZ5IGhhbmRsZQorICovCit2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQogewotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCiAJLyoKLQkgKiBEZXN0cm95IGFsbCBvZiB0aGUgd2F0Y2hlcyBvbiB0aGlzIGRldmljZS4gIFVuZm9ydHVuYXRlbHksIG5vdCB2ZXJ5CisJICogRGVzdHJveSBhbGwgb2YgdGhlIHdhdGNoZXMgZm9yIHRoaXMgaGFuZGxlLiBVbmZvcnR1bmF0ZWx5LCBub3QgdmVyeQogCSAqIHByZXR0eS4gIFdlIGNhbm5vdCBkbyBhIHNpbXBsZSBpdGVyYXRpb24gb3ZlciB0aGUgbGlzdCwgYmVjYXVzZSB3ZQogCSAqIGRvIG5vdCBrbm93IHRoZSBpbm9kZSB1bnRpbCB3ZSBpdGVyYXRlIHRvIHRoZSB3YXRjaC4gIEJ1dCB3ZSBuZWVkIHRvCi0JICogaG9sZCBpbm9kZS0+aW5vdGlmeV9tdXRleCBiZWZvcmUgZGV2LT5tdXRleC4gIFRoZSBmb2xsb3dpbmcgd29ya3MuCisJICogaG9sZCBpbm9kZS0+aW5vdGlmeV9tdXRleCBiZWZvcmUgaWgtPm11dGV4LiAgVGhlIGZvbGxvd2luZyB3b3Jrcy4KIAkgKi8KIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7CiAJCXN0cnVjdCBsaXN0X2hlYWQgKndhdGNoZXM7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQkJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0JCXdhdGNoZXMgPSAmZGV2LT53YXRjaGVzOworCQltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCQl3YXRjaGVzID0gJmloLT53YXRjaGVzOwogCQlpZiAobGlzdF9lbXB0eSh3YXRjaGVzKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAkJCWJyZWFrOwogCQl9Ci0JCXdhdGNoID0gbGlzdF9lbnRyeSh3YXRjaGVzLT5uZXh0LCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCwgZF9saXN0KTsKKwkJd2F0Y2ggPSBsaXN0X2VudHJ5KHdhdGNoZXMtPm5leHQsIHN0cnVjdCBpbm90aWZ5X3dhdGNoLCBoX2xpc3QpOwogCQlnZXRfaW5vdGlmeV93YXRjaCh3YXRjaCk7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAogCQlpbm9kZSA9IHdhdGNoLT5pbm9kZTsKIAkJbXV0ZXhfbG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKKwkJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKIAogCQkvKiBtYWtlIHN1cmUgd2UgZGlkbid0IHJhY2Ugd2l0aCBhbm90aGVyIGxpc3QgcmVtb3ZhbCAqLwotCQlpZiAobGlrZWx5KGlkcl9maW5kKCZkZXYtPmlkciwgd2F0Y2gtPndkKSkpCi0JCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGRldik7CisJCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmloLT5pZHIsIHdhdGNoLT53ZCkpKSB7CisJCQlyZW1vdmVfd2F0Y2hfbm9fZXZlbnQod2F0Y2gsIGloKTsKKwkJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKKwkJfQogCi0JCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJCXB1dF9pbm90aWZ5X3dhdGNoKHdhdGNoKTsKIAl9CiAKLQkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZXZlbnRzIG9uIHRoaXMgZGV2aWNlICovCi0JbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7Ci0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpCi0JCWlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoZGV2KTsKLQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOwotCi0JLyogZnJlZSB0aGlzIGRldmljZTogdGhlIHB1dCBtYXRjaGluZyB0aGUgZ2V0IGluIGlub3RpZnlfaW5pdCgpICovCi0JcHV0X2lub3RpZnlfZGV2KGRldik7Ci0KLQlyZXR1cm4gMDsKKwkvKiBmcmVlIHRoaXMgaGFuZGxlOiB0aGUgcHV0IG1hdGNoaW5nIHRoZSBnZXQgaW4gaW5vdGlmeV9pbml0KCkgKi8KKwlwdXRfaW5vdGlmeV9oYW5kbGUoaWgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9kZXN0cm95KTsKIAotLyoKLSAqIGlub3RpZnlfaWdub3JlIC0gcmVtb3ZlIGEgZ2l2ZW4gd2QgZnJvbSB0aGlzIGlub3RpZnkgaW5zdGFuY2UuCisvKioKKyAqIGlub3RpZnlfZmluZF93YXRjaCAtIGZpbmQgYW4gZXhpc3Rpbmcgd2F0Y2ggZm9yIGFuIChpaCxpbm9kZSkgcGFpcgorICogQGloOiBpbm90aWZ5IGhhbmRsZQorICogQGlub2RlOiBpbm9kZSB0byB3YXRjaAorICogQHdhdGNocDogcG9pbnRlciB0byBleGlzdGluZyBpbm90aWZ5X3dhdGNoCisgKgorICogQ2FsbGVyIG11c3QgcGluIGdpdmVuIGlub2RlICh2aWEgbmFtZWlkYXRhKS4KKyAqLworczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKip3YXRjaHApCit7CisJc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZDsKKwlpbnQgcmV0ID0gLUVOT0VOVDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCisJb2xkID0gaW5vZGVfZmluZF9oYW5kbGUoaW5vZGUsIGloKTsKKwlpZiAodW5saWtlbHkob2xkKSkgeworCQlnZXRfaW5vdGlmeV93YXRjaChvbGQpOyAvKiBjYWxsZXIgbXVzdCBwdXQgd2F0Y2ggKi8KKwkJKndhdGNocCA9IG9sZDsKKwkJcmV0ID0gb2xkLT53ZDsKKwl9CisKKwltdXRleF91bmxvY2soJmloLT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9maW5kX3dhdGNoKTsKKworLyoqCisgKiBpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoIC0gZmluZCBhbmQgdXBkYXRlIHRoZSBtYXNrIG9mIGFuIGV4aXN0aW5nIHdhdGNoCisgKiBAaWg6IGlub3RpZnkgaGFuZGxlCisgKiBAaW5vZGU6IGlub2RlJ3Mgd2F0Y2ggdG8gdXBkYXRlCisgKiBAbWFzazogbWFzayBvZiBldmVudHMgdG8gd2F0Y2gKKyAqCisgKiBDYWxsZXIgbXVzdCBwaW4gZ2l2ZW4gaW5vZGUgKHZpYSBuYW1laWRhdGEpLgorICovCitzMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgdTMyIG1hc2spCit7CisJc3RydWN0IGlub3RpZnlfd2F0Y2ggKm9sZDsKKwlpbnQgbWFza19hZGQgPSAwOworCWludCByZXQ7CisKKwlpZiAobWFzayAmIElOX01BU0tfQUREKQorCQltYXNrX2FkZCA9IDE7CisKKwkvKiBkb24ndCBhbGxvdyBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCisJbWFzayAmPSBJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVDsKKwlpZiAodW5saWtlbHkoIW1hc2spKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCisJLyoKKwkgKiBIYW5kbGUgdGhlIGNhc2Ugb2YgcmUtYWRkaW5nIGEgd2F0Y2ggb24gYW4gKGlub2RlLGloKSBwYWlyIHRoYXQgd2UKKwkgKiBhcmUgYWxyZWFkeSB3YXRjaGluZy4gIFdlIGp1c3QgdXBkYXRlIHRoZSBtYXNrIGFuZCByZXR1cm4gaXRzIHdkLgorCSAqLworCW9sZCA9IGlub2RlX2ZpbmRfaGFuZGxlKGlub2RlLCBpaCk7CisJaWYgKHVubGlrZWx5KCFvbGQpKSB7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChtYXNrX2FkZCkKKwkJb2xkLT5tYXNrIHw9IG1hc2s7CisJZWxzZQorCQlvbGQtPm1hc2sgPSBtYXNrOworCXJldCA9IG9sZC0+d2Q7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOworCW11dGV4X3VubG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X2ZpbmRfdXBkYXRlX3dhdGNoKTsKKworLyoqCisgKiBpbm90aWZ5X2FkZF93YXRjaCAtIGFkZCBhIHdhdGNoIHRvIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIEBpaDogaW5vdGlmeSBoYW5kbGUKKyAqIEB3YXRjaDogY2FsbGVyIGFsbG9jYXRlZCB3YXRjaCBzdHJ1Y3R1cmUKKyAqIEBpbm9kZTogaW5vZGUgdG8gd2F0Y2gKKyAqIEBtYXNrOiBtYXNrIG9mIGV2ZW50cyB0byB3YXRjaAorICoKKyAqIENhbGxlciBtdXN0IHBpbiBnaXZlbiBpbm9kZSAodmlhIG5hbWVpZGF0YSkuCisgKiBDYWxsZXIgbXVzdCBlbnN1cmUgaXQgb25seSBjYWxscyBpbm90aWZ5X2FkZF93YXRjaCgpIG9uY2UgcGVyIHdhdGNoLgorICogQ2FsbHMgaW5vdGlmeV9oYW5kbGVfZ2V0X3dkKCkgc28gbWF5IHNsZWVwLgorICovCitzMzIgaW5vdGlmeV9hZGRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLAorCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaykKK3sKKwlpbnQgcmV0ID0gMDsKKworCS8qIGRvbid0IGFsbG93IGludmFsaWQgYml0czogd2UgZG9uJ3Qgd2FudCBmbGFncyBzZXQgKi8KKwltYXNrICY9IElOX0FMTF9FVkVOVFMgfCBJTl9PTkVTSE9UOworCWlmICh1bmxpa2VseSghbWFzaykpCisJCXJldHVybiAtRUlOVkFMOworCXdhdGNoLT5tYXNrID0gbWFzazsKKworCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwltdXRleF9sb2NrKCZpaC0+bXV0ZXgpOworCisJLyogSW5pdGlhbGl6ZSBhIG5ldyB3YXRjaCAqLworCXJldCA9IGlub3RpZnlfaGFuZGxlX2dldF93ZChpaCwgd2F0Y2gpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKwlyZXQgPSB3YXRjaC0+d2Q7CisKKwkvKiBzYXZlIGEgcmVmZXJlbmNlIHRvIGhhbmRsZSBhbmQgYnVtcCB0aGUgY291bnQgdG8gbWFrZSBpdCBvZmZpY2lhbCAqLworCWdldF9pbm90aWZ5X2hhbmRsZShpaCk7CisJd2F0Y2gtPmloID0gaWg7CisKKwkvKgorCSAqIFNhdmUgYSByZWZlcmVuY2UgdG8gdGhlIGlub2RlIGFuZCBidW1wIHRoZSByZWYgY291bnQgdG8gbWFrZSBpdAorCSAqIG9mZmljaWFsLiAgV2UgaG9sZCBhIHJlZmVyZW5jZSB0byBuYW1laWRhdGEsIHdoaWNoIG1ha2VzIHRoaXMgc2FmZS4KKwkgKi8KKwl3YXRjaC0+aW5vZGUgPSBpZ3JhYihpbm9kZSk7CisKKwlpZiAoIWlub3RpZnlfaW5vZGVfd2F0Y2hlZChpbm9kZSkpCisJCXNldF9kZW50cnlfY2hpbGRfZmxhZ3MoaW5vZGUsIDEpOworCisJLyogQWRkIHRoZSB3YXRjaCB0byB0aGUgaGFuZGxlJ3MgYW5kIHRoZSBpbm9kZSdzIGxpc3QgKi8KKwlsaXN0X2FkZCgmd2F0Y2gtPmhfbGlzdCwgJmloLT53YXRjaGVzKTsKKwlsaXN0X2FkZCgmd2F0Y2gtPmlfbGlzdCwgJmlub2RlLT5pbm90aWZ5X3dhdGNoZXMpOworb3V0OgorCW11dGV4X3VubG9jaygmaWgtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9hZGRfd2F0Y2gpOworCisvKioKKyAqIGlub3RpZnlfcm1fd2QgLSByZW1vdmUgYSB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIEBpaDogaW5vdGlmeSBoYW5kbGUKKyAqIEB3ZDogd2F0Y2ggZGVzY3JpcHRvciB0byByZW1vdmUKICAqCiAgKiBDYW4gc2xlZXAuCiAgKi8KLXN0YXRpYyBpbnQgaW5vdGlmeV9pZ25vcmUoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYsIHMzMiB3ZCkKK2ludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIHUzMiB3ZCkKIHsKIAlzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2g7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOwotCXdhdGNoID0gaWRyX2ZpbmQoJmRldi0+aWRyLCB3ZCk7CisJbXV0ZXhfbG9jaygmaWgtPm11dGV4KTsKKwl3YXRjaCA9IGlkcl9maW5kKCZpaC0+aWRyLCB3ZCk7CiAJaWYgKHVubGlrZWx5KCF3YXRjaCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJZ2V0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCWlub2RlID0gd2F0Y2gtPmlub2RlOwotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZpaC0+bXV0ZXgpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlub3RpZnlfbXV0ZXgpOwotCW11dGV4X2xvY2soJmRldi0+bXV0ZXgpOworCW11dGV4X2xvY2soJmloLT5tdXRleCk7CiAKIAkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBkaWQgbm90IHJhY2UgKi8KLQlpZiAobGlrZWx5KGlkcl9maW5kKCZkZXYtPmlkciwgd2QpID09IHdhdGNoKSkKLQkJcmVtb3ZlX3dhdGNoKHdhdGNoLCBkZXYpOworCWlmIChsaWtlbHkoaWRyX2ZpbmQoJmloLT5pZHIsIHdkKSA9PSB3YXRjaCkpCisJCWlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChpaCwgd2F0Y2gpOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwltdXRleF91bmxvY2soJmloLT5tdXRleCk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7CiAJcHV0X2lub3RpZnlfd2F0Y2god2F0Y2gpOwogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpbm90aWZ5X3JtX3dkKTsKIAotc3RhdGljIGxvbmcgaW5vdGlmeV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCisvKioKKyAqIGlub3RpZnlfcm1fd2F0Y2ggLSByZW1vdmUgYSB3YXRjaCBmcm9tIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqIEBpaDogaW5vdGlmeSBoYW5kbGUKKyAqIEB3YXRjaDogd2F0Y2ggdG8gcmVtb3ZlCisgKgorICogQ2FuIHNsZWVwLgorICovCitpbnQgaW5vdGlmeV9ybV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkgICAgIHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKIHsKLQlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKLQl2b2lkIF9fdXNlciAqcDsKLQlpbnQgcmV0ID0gLUVOT1RUWTsKLQotCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlwID0gKHZvaWQgX191c2VyICopIGFyZzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBGSU9OUkVBRDoKLQkJcmV0ID0gcHV0X3VzZXIoZGV2LT5xdWV1ZV9zaXplLCAoaW50IF9fdXNlciAqKSBwKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gaW5vdGlmeV9ybV93ZChpaCwgd2F0Y2gtPndkKTsKIH0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW5vdGlmeV9mb3BzID0gewotCS5wb2xsICAgICAgICAgICA9IGlub3RpZnlfcG9sbCwKLQkucmVhZCAgICAgICAgICAgPSBpbm90aWZ5X3JlYWQsCi0JLnJlbGVhc2UgICAgICAgID0gaW5vdGlmeV9yZWxlYXNlLAotCS51bmxvY2tlZF9pb2N0bCA9IGlub3RpZnlfaW9jdGwsCi0JLmNvbXBhdF9pb2N0bAk9IGlub3RpZnlfaW9jdGwsCi19OwotCi1hc21saW5rYWdlIGxvbmcgc3lzX2lub3RpZnlfaW5pdCh2b2lkKQotewotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OwotCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsJCi0JaW50IGZkLCByZXQ7Ci0KLQlmZCA9IGdldF91bnVzZWRfZmQoKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gZmQ7Ci0KLQlmaWxwID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWZpbHApIHsKLQkJcmV0ID0gLUVORklMRTsKLQkJZ290byBvdXRfcHV0X2ZkOwotCX0KLQotCXVzZXIgPSBnZXRfdWlkKGN1cnJlbnQtPnVzZXIpOwotCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PQotCQkJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMpKSB7Ci0JCXJldCA9IC1FTUZJTEU7Ci0JCWdvdG8gb3V0X2ZyZWVfdWlkOwotCX0KLQotCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmICh1bmxpa2VseSghZGV2KSkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9mcmVlX3VpZDsKLQl9Ci0KLQlmaWxwLT5mX29wID0gJmlub3RpZnlfZm9wczsKLQlmaWxwLT5mX3Zmc21udCA9IG1udGdldChpbm90aWZ5X21udCk7Ci0JZmlscC0+Zl9kZW50cnkgPSBkZ2V0KGlub3RpZnlfbW50LT5tbnRfcm9vdCk7Ci0JZmlscC0+Zl9tYXBwaW5nID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKLQlmaWxwLT5mX21vZGUgPSBGTU9ERV9SRUFEOwotCWZpbHAtPmZfZmxhZ3MgPSBPX1JET05MWTsKLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBkZXY7Ci0KLQlpZHJfaW5pdCgmZGV2LT5pZHIpOwotCUlOSVRfTElTVF9IRUFEKCZkZXYtPmV2ZW50cyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmRldi0+d2F0Y2hlcyk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53cSk7Ci0JbXV0ZXhfaW5pdCgmZGV2LT5tdXRleCk7Ci0JZGV2LT5ldmVudF9jb3VudCA9IDA7Ci0JZGV2LT5xdWV1ZV9zaXplID0gMDsKLQlkZXYtPm1heF9ldmVudHMgPSBpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzOwotCWRldi0+dXNlciA9IHVzZXI7Ci0JZGV2LT5sYXN0X3dkID0gMDsKLQlhdG9taWNfc2V0KCZkZXYtPmNvdW50LCAwKTsKLQotCWdldF9pbm90aWZ5X2RldihkZXYpOwotCWF0b21pY19pbmMoJnVzZXItPmlub3RpZnlfZGV2cyk7Ci0JZmRfaW5zdGFsbChmZCwgZmlscCk7Ci0KLQlyZXR1cm4gZmQ7Ci1vdXRfZnJlZV91aWQ6Ci0JZnJlZV91aWQodXNlcik7Ci0JcHV0X2ZpbHAoZmlscCk7Ci1vdXRfcHV0X2ZkOgotCXB1dF91bnVzZWRfZmQoZmQpOwotCXJldHVybiByZXQ7Ci19Ci0KLWFzbWxpbmthZ2UgbG9uZyBzeXNfaW5vdGlmeV9hZGRfd2F0Y2goaW50IGZkLCBjb25zdCBjaGFyIF9fdXNlciAqcGF0aCwgdTMyIG1hc2spCi17Ci0Jc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoLCAqb2xkOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKLQlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlpbnQgcmV0LCBmcHV0X25lZWRlZDsKLQlpbnQgbWFza19hZGQgPSAwOwotCXVuc2lnbmVkIGZsYWdzID0gMDsKLQotCWZpbHAgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOwotCWlmICh1bmxpa2VseSghZmlscCkpCi0JCXJldHVybiAtRUJBREY7Ci0KLQkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCBhbiBpbm90aWZ5IGluc3RhbmNlICovCi0JaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJmlub3RpZnlfZm9wcykpIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBmcHV0X2FuZF9vdXQ7Ci0JfQotCi0JaWYgKCEobWFzayAmIElOX0RPTlRfRk9MTE9XKSkKLQkJZmxhZ3MgfD0gTE9PS1VQX0ZPTExPVzsKLQlpZiAobWFzayAmIElOX09OTFlESVIpCi0JCWZsYWdzIHw9IExPT0tVUF9ESVJFQ1RPUlk7Ci0KLQlyZXQgPSBmaW5kX2lub2RlKHBhdGgsICZuZCwgZmxhZ3MpOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlnb3RvIGZwdXRfYW5kX291dDsKLQotCS8qIGlub2RlIGhlbGQgaW4gcGxhY2UgYnkgcmVmZXJlbmNlIHRvIG5kOyBkZXYgYnkgZmdldCBvbiBmZCAqLwotCWlub2RlID0gbmQuZGVudHJ5LT5kX2lub2RlOwotCWRldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pbm90aWZ5X211dGV4KTsKLQltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKLQotCWlmIChtYXNrICYgSU5fTUFTS19BREQpCi0JCW1hc2tfYWRkID0gMTsKLQotCS8qIGRvbid0IGxldCB1c2VyLXNwYWNlIHNldCBpbnZhbGlkIGJpdHM6IHdlIGRvbid0IHdhbnQgZmxhZ3Mgc2V0ICovCi0JbWFzayAmPSBJTl9BTExfRVZFTlRTIHwgSU5fT05FU0hPVDsKLQlpZiAodW5saWtlbHkoIW1hc2spKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qCi0JICogSGFuZGxlIHRoZSBjYXNlIG9mIHJlLWFkZGluZyBhIHdhdGNoIG9uIGFuIChpbm9kZSxkZXYpIHBhaXIgdGhhdCB3ZQotCSAqIGFyZSBhbHJlYWR5IHdhdGNoaW5nLiAgV2UganVzdCB1cGRhdGUgdGhlIG1hc2sgYW5kIHJldHVybiBpdHMgd2QuCi0JICovCi0Jb2xkID0gaW5vZGVfZmluZF9kZXYoaW5vZGUsIGRldik7Ci0JaWYgKHVubGlrZWx5KG9sZCkpIHsKLQkJaWYgKG1hc2tfYWRkKQotCQkJb2xkLT5tYXNrIHw9IG1hc2s7Ci0JCWVsc2UKLQkJCW9sZC0+bWFzayA9IG1hc2s7Ci0JCXJldCA9IG9sZC0+d2Q7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXdhdGNoID0gY3JlYXRlX3dhdGNoKGRldiwgbWFzaywgaW5vZGUpOwotCWlmICh1bmxpa2VseShJU19FUlIod2F0Y2gpKSkgewotCQlyZXQgPSBQVFJfRVJSKHdhdGNoKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKCFpbm90aWZ5X2lub2RlX3dhdGNoZWQoaW5vZGUpKQotCQlzZXRfZGVudHJ5X2NoaWxkX2ZsYWdzKGlub2RlLCAxKTsKLQotCS8qIEFkZCB0aGUgd2F0Y2ggdG8gdGhlIGRldmljZSdzIGFuZCB0aGUgaW5vZGUncyBsaXN0ICovCi0JbGlzdF9hZGQoJndhdGNoLT5kX2xpc3QsICZkZXYtPndhdGNoZXMpOwotCWxpc3RfYWRkKCZ3YXRjaC0+aV9saXN0LCAmaW5vZGUtPmlub3RpZnlfd2F0Y2hlcyk7Ci0JcmV0ID0gd2F0Y2gtPndkOwotb3V0OgotCW11dGV4X3VubG9jaygmZGV2LT5tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aW5vdGlmeV9tdXRleCk7Ci0JcGF0aF9yZWxlYXNlKCZuZCk7Ci1mcHV0X2FuZF9vdXQ6Ci0JZnB1dF9saWdodChmaWxwLCBmcHV0X25lZWRlZCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5c19pbm90aWZ5X3JtX3dhdGNoKGludCBmZCwgdTMyIHdkKQotewotCXN0cnVjdCBmaWxlICpmaWxwOwotCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OwotCWludCByZXQsIGZwdXRfbmVlZGVkOwotCi0JZmlscCA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7Ci0JaWYgKHVubGlrZWx5KCFmaWxwKSkKLQkJcmV0dXJuIC1FQkFERjsKLQotCS8qIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGFuIGlub3RpZnkgaW5zdGFuY2UgKi8KLQlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmaW5vdGlmeV9mb3BzKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JcmV0ID0gaW5vdGlmeV9pZ25vcmUoZGV2LCB3ZCk7Ci0KLW91dDoKLQlmcHV0X2xpZ2h0KGZpbHAsIGZwdXRfbmVlZGVkKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKLWlub3RpZnlfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCi0JICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQotewotICAgIHJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJpbm90aWZ5IiwgTlVMTCwgMHhCQUQxREVBKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGlub3RpZnlfZnNfdHlwZSA9IHsKLSAgICAubmFtZSAgICAgICAgICAgPSAiaW5vdGlmeWZzIiwKLSAgICAuZ2V0X3NiICAgICAgICAgPSBpbm90aWZ5X2dldF9zYiwKLSAgICAua2lsbF9zYiAgICAgICAgPSBraWxsX2Fub25fc3VwZXIsCi19OworRVhQT1JUX1NZTUJPTF9HUEwoaW5vdGlmeV9ybV93YXRjaCk7CiAKIC8qCi0gKiBpbm90aWZ5X3NldHVwIC0gT3VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHdlIGNhbm5ub3QgcmV0dXJuCi0gKiBlcnJvciBiZWNhdXNlIHdlIGhhdmUgY29tcGlsZWQtaW4gVkZTIGhvb2tzLiAgU28gYW4gKHVubGlrZWx5KSBmYWlsdXJlIGhlcmUKLSAqIG11c3QgcmVzdWx0IGluIHBhbmljKCkuCisgKiBpbm90aWZ5X3NldHVwIC0gY29yZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgogICovCiBzdGF0aWMgaW50IF9faW5pdCBpbm90aWZ5X3NldHVwKHZvaWQpCiB7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmlub3RpZnlfZnNfdHlwZSk7Ci0JaWYgKHVubGlrZWx5KHJldCkpCi0JCXBhbmljKCJpbm90aWZ5OiByZWdpc3Rlcl9maWxlc3lzdGVtIHJldHVybmVkICVkIVxuIiwgcmV0KTsKLQotCWlub3RpZnlfbW50ID0ga2Vybl9tb3VudCgmaW5vdGlmeV9mc190eXBlKTsKLQlpZiAoSVNfRVJSKGlub3RpZnlfbW50KSkKLQkJcGFuaWMoImlub3RpZnk6IGtlcm5fbW91bnQgcmV0ICVsZCFcbiIsIFBUUl9FUlIoaW5vdGlmeV9tbnQpKTsKLQotCWlub3RpZnlfbWF4X3F1ZXVlZF9ldmVudHMgPSAxNjM4NDsKLQlpbm90aWZ5X21heF91c2VyX2luc3RhbmNlcyA9IDEyODsKLQlpbm90aWZ5X21heF91c2VyX3dhdGNoZXMgPSA4MTkyOwotCiAJYXRvbWljX3NldCgmaW5vdGlmeV9jb29raWUsIDApOwogCi0Jd2F0Y2hfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImlub3RpZnlfd2F0Y2hfY2FjaGUiLAotCQkJCQkgc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X3dhdGNoKSwKLQkJCQkJIDAsIFNMQUJfUEFOSUMsIE5VTEwsIE5VTEwpOwotCWV2ZW50X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5X2V2ZW50X2NhY2hlIiwKLQkJCQkJIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQpLAotCQkJCQkgMCwgU0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvaW5vdGlmeV91c2VyLmMgYi9mcy9pbm90aWZ5X3VzZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTk5MzFlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvaW5vdGlmeV91c2VyLmMKQEAgLTAsMCArMSw3MTkgQEAKKy8qCisgKiBmcy9pbm90aWZ5X3VzZXIuYyAtIGlub3RpZnkgc3VwcG9ydCBmb3IgdXNlcnNwYWNlCisgKgorICogQXV0aG9yczoKKyAqCUpvaG4gTWNDdXRjaGFuCTx0dGJAdGVudGFjbGUuZGhzLm9yZz4KKyAqCVJvYmVydCBMb3ZlCTxybWxAbm92ZWxsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSm9obiBNY0N1dGNoYW4KKyAqIENvcHlyaWdodCAyMDA2IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5vdGlmeS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisKKyNpbmNsdWRlIDxhc20vaW9jdGxzLmg+CisKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKndhdGNoX2NhY2hlcCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGttZW1fY2FjaGVfdCAqZXZlbnRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CisKK3N0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmlub3RpZnlfbW50IF9fcmVhZF9tb3N0bHk7CisKKy8qIHRoZXNlIGFyZSBjb25maWd1cmFibGUgdmlhIC9wcm9jL3N5cy9mcy9pbm90aWZ5LyAqLworaW50IGlub3RpZnlfbWF4X3VzZXJfaW5zdGFuY2VzIF9fcmVhZF9tb3N0bHk7CitpbnQgaW5vdGlmeV9tYXhfdXNlcl93YXRjaGVzIF9fcmVhZF9tb3N0bHk7CitpbnQgaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cyBfX3JlYWRfbW9zdGx5OworCisvKgorICogTG9jayBvcmRlcmluZzoKKyAqCisgKiBpbm90aWZ5X2Rldi0+dXBfbXV0ZXggKGVuc3VyZXMgd2UgZG9uJ3QgcmUtYWRkIHRoZSBzYW1lIHdhdGNoKQorICogCWlub2RlLT5pbm90aWZ5X211dGV4IChwcm90ZWN0cyBpbm9kZSdzIHdhdGNoIGxpc3QpCisgKiAJCWlub3RpZnlfaGFuZGxlLT5tdXRleCAocHJvdGVjdHMgaW5vdGlmeV9oYW5kbGUncyB3YXRjaCBsaXN0KQorICogCQkJaW5vdGlmeV9kZXYtPmV2X211dGV4IChwcm90ZWN0cyBkZXZpY2UncyBldmVudCBxdWV1ZSkKKyAqLworCisvKgorICogTGlmZXRpbWVzIG9mIHRoZSBtYWluIGRhdGEgc3RydWN0dXJlczoKKyAqCisgKiBpbm90aWZ5X2RldmljZTogTGlmZXRpbWUgaXMgbWFuYWdlZCBieSByZWZlcmVuY2UgY291bnQsIGZyb20KKyAqIHN5c19pbm90aWZ5X2luaXQoKSB1bnRpbCByZWxlYXNlLiAgQWRkaXRpb25hbCByZWZlcmVuY2VzIGNhbiBidW1wIHRoZSBjb3VudAorICogdmlhIGdldF9pbm90aWZ5X2RldigpIGFuZCBkcm9wIHRoZSBjb3VudCB2aWEgcHV0X2lub3RpZnlfZGV2KCkuCisgKgorICogaW5vdGlmeV91c2VyX3dhdGNoOiBMaWZldGltZSBpcyBmcm9tIGNyZWF0ZV93YXRjaCgpIHRvIHRoZSByZWNlaXB0IG9mIGFuCisgKiBJTl9JR05PUkVEIGV2ZW50IGZyb20gaW5vdGlmeSwgb3Igd2hlbiB1c2luZyBJTl9PTkVTSE9ULCB0byByZWNlaXB0IG9mIHRoZQorICogZmlyc3QgZXZlbnQsIG9yIHRvIGlub3RpZnlfZGVzdHJveSgpLgorICovCisKKy8qCisgKiBzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgLSByZXByZXNlbnRzIGFuIGlub3RpZnkgaW5zdGFuY2UKKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIG11dGV4ICdtdXRleCcuCisgKi8KK3N0cnVjdCBpbm90aWZ5X2RldmljZSB7CisJd2FpdF9xdWV1ZV9oZWFkX3QgCXdxOwkJLyogd2FpdCBxdWV1ZSBmb3IgaS9vICovCisJc3RydWN0IG11dGV4CQlldl9tdXRleDsJLyogcHJvdGVjdHMgZXZlbnQgcXVldWUgKi8KKwlzdHJ1Y3QgbXV0ZXgJCXVwX211dGV4OwkvKiBzeW5jaHJvbml6ZXMgd2F0Y2ggdXBkYXRlcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgCWV2ZW50czsJCS8qIGxpc3Qgb2YgcXVldWVkIGV2ZW50cyAqLworCWF0b21pY190CQljb3VudDsJCS8qIHJlZmVyZW5jZSBjb3VudCAqLworCXN0cnVjdCB1c2VyX3N0cnVjdAkqdXNlcjsJCS8qIHVzZXIgd2hvIG9wZW5lZCB0aGlzIGRldiAqLworCXN0cnVjdCBpbm90aWZ5X2hhbmRsZQkqaWg7CQkvKiBpbm90aWZ5IGhhbmRsZSAqLworCXVuc2lnbmVkIGludAkJcXVldWVfc2l6ZTsJLyogc2l6ZSBvZiB0aGUgcXVldWUgKGJ5dGVzKSAqLworCXVuc2lnbmVkIGludAkJZXZlbnRfY291bnQ7CS8qIG51bWJlciBvZiBwZW5kaW5nIGV2ZW50cyAqLworCXVuc2lnbmVkIGludAkJbWF4X2V2ZW50czsJLyogbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzICovCit9OworCisvKgorICogc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50IC0gQW4gaW5vdGlmeSBldmVudCwgb3JpZ2luYXRpbmcgZnJvbSBhIHdhdGNoIGFuZAorICogcXVldWVkIGZvciB1c2VyLXNwYWNlLiAgQSBsaXN0IG9mIHRoZXNlIGlzIGF0dGFjaGVkIHRvIGVhY2ggaW5zdGFuY2Ugb2YgdGhlCisgKiBkZXZpY2UuICBJbiByZWFkKCksIHRoaXMgbGlzdCBpcyB3YWxrZWQgYW5kIGFsbCBldmVudHMgdGhhdCBjYW4gZml0IGluIHRoZQorICogYnVmZmVyIGFyZSByZXR1cm5lZC4KKyAqCisgKiBQcm90ZWN0ZWQgYnkgZGV2LT5ldl9tdXRleCBvZiB0aGUgZGV2aWNlIGluIHdoaWNoIHdlIGFyZSBxdWV1ZWQuCisgKi8KK3N0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCB7CisJc3RydWN0IGlub3RpZnlfZXZlbnQJZXZlbnQ7CS8qIHRoZSB1c2VyLXNwYWNlIGV2ZW50ICovCisJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsJLyogZW50cnkgaW4gaW5vdGlmeV9kZXZpY2UncyBsaXN0ICovCisJY2hhcgkJCSpuYW1lOwkvKiBmaWxlbmFtZSwgaWYgYW55ICovCit9OworCisvKgorICogc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCAtIG91ciB2ZXJzaW9uIG9mIGFuIGlub3RpZnlfd2F0Y2gsIHdlIGFkZAorICogYSByZWZlcmVuY2UgdG8gdGhlIGFzc29jaWF0ZWQgaW5vdGlmeV9kZXZpY2UuCisgKi8KK3N0cnVjdCBpbm90aWZ5X3VzZXJfd2F0Y2ggeworCXN0cnVjdCBpbm90aWZ5X2RldmljZQkqZGV2OwkvKiBhc3NvY2lhdGVkIGRldmljZSAqLworCXN0cnVjdCBpbm90aWZ5X3dhdGNoCXdkYXRhOwkvKiBpbm90aWZ5IHdhdGNoIGRhdGEgKi8KK307CisKKyNpZmRlZiBDT05GSUdfU1lTQ1RMCisKKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKworc3RhdGljIGludCB6ZXJvOworCitjdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gSU5PVElGWV9NQVhfVVNFUl9JTlNUQU5DRVMsCisJCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl9pbnN0YW5jZXMiLAorCQkuZGF0YQkJPSAmaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMsCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCisJCS5tb2RlCQk9IDA2NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCisJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAorCQkuZXh0cmExCQk9ICZ6ZXJvLAorCX0sCisJeworCQkuY3RsX25hbWUJPSBJTk9USUZZX01BWF9VU0VSX1dBVENIRVMsCisJCS5wcm9jbmFtZQk9ICJtYXhfdXNlcl93YXRjaGVzIiwKKwkJLmRhdGEJCT0gJmlub3RpZnlfbWF4X3VzZXJfd2F0Y2hlcywKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKKwkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCisJCS5leHRyYTEJCT0gJnplcm8sCisJfSwKKwl7CisJCS5jdGxfbmFtZQk9IElOT1RJRllfTUFYX1FVRVVFRF9FVkVOVFMsCisJCS5wcm9jbmFtZQk9ICJtYXhfcXVldWVkX2V2ZW50cyIsCisJCS5kYXRhCQk9ICZpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzLAorCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkubW9kZQkJPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAorCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKKwkJLmV4dHJhMQkJPSAmemVybworCX0sCisJeyAuY3RsX25hbWUgPSAwIH0KK307CisjZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfZGV2KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQoreworCWF0b21pY19pbmMoJmRldi0+Y291bnQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfZGV2KHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2KQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZkZXYtPmNvdW50KSkgeworCQlhdG9taWNfZGVjKCZkZXYtPnVzZXItPmlub3RpZnlfZGV2cyk7CisJCWZyZWVfdWlkKGRldi0+dXNlcik7CisJCWtmcmVlKGRldik7CisJfQorfQorCisvKgorICogZnJlZV9pbm90aWZ5X3VzZXJfd2F0Y2ggLSBjbGVhbnMgdXAgdGhlIHdhdGNoIGFuZCBpdHMgcmVmZXJlbmNlcworICovCitzdGF0aWMgdm9pZCBmcmVlX2lub3RpZnlfdXNlcl93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqdykKK3sKKwlzdHJ1Y3QgaW5vdGlmeV91c2VyX3dhdGNoICp3YXRjaDsKKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKKworCXdhdGNoID0gY29udGFpbmVyX29mKHcsIHN0cnVjdCBpbm90aWZ5X3VzZXJfd2F0Y2gsIHdkYXRhKTsKKwlkZXYgPSB3YXRjaC0+ZGV2OworCisJYXRvbWljX2RlYygmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOworCXB1dF9pbm90aWZ5X2RldihkZXYpOworCWttZW1fY2FjaGVfZnJlZSh3YXRjaF9jYWNoZXAsIHdhdGNoKTsKK30KKworLyoKKyAqIGtlcm5lbF9ldmVudCAtIGNyZWF0ZSBhIG5ldyBrZXJuZWwgZXZlbnQgd2l0aCB0aGUgZ2l2ZW4gcGFyYW1ldGVycworICoKKyAqIFRoaXMgZnVuY3Rpb24gY2FuIHNsZWVwLgorICovCitzdGF0aWMgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICoga2VybmVsX2V2ZW50KHMzMiB3ZCwgdTMyIG1hc2ssIHUzMiBjb29raWUsCisJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQ7CisKKwlrZXZlbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGV2ZW50X2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFrZXZlbnQpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIHdlIGhhbmQgdGhpcyBvdXQgdG8gdXNlci1zcGFjZSwgc28gemVybyBpdCBqdXN0IGluIGNhc2UgKi8KKwltZW1zZXQoJmtldmVudC0+ZXZlbnQsIDAsIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkpOworCisJa2V2ZW50LT5ldmVudC53ZCA9IHdkOworCWtldmVudC0+ZXZlbnQubWFzayA9IG1hc2s7CisJa2V2ZW50LT5ldmVudC5jb29raWUgPSBjb29raWU7CisKKwlJTklUX0xJU1RfSEVBRCgma2V2ZW50LT5saXN0KTsKKworCWlmIChuYW1lKSB7CisJCXNpemVfdCBsZW4sIHJlbSwgZXZlbnRfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCk7CisKKwkJLyoKKwkJICogV2UgbmVlZCB0byBwYWQgdGhlIGZpbGVuYW1lIHNvIGFzIHRvIHByb3Blcmx5IGFsaWduIGFuCisJCSAqIGFycmF5IG9mIGlub3RpZnlfZXZlbnQgc3RydWN0dXJlcy4gIEJlY2F1c2UgdGhlIHN0cnVjdHVyZSBpcworCQkgKiBzbWFsbCBhbmQgdGhlIGNvbW1vbiBjYXNlIGlzIGEgc21hbGwgZmlsZW5hbWUsIHdlIGp1c3Qgcm91bmQKKwkJICogdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdHVyZSdzIHNpemVvZi4gIFRoaXMgaXMKKwkJICogc2ltcGxlIGFuZCBzYWZlIGZvciBhbGwgYXJjaGl0ZWN0dXJlcy4KKwkJICovCisJCWxlbiA9IHN0cmxlbihuYW1lKSArIDE7CisJCXJlbSA9IGV2ZW50X3NpemUgLSBsZW47CisJCWlmIChsZW4gPiBldmVudF9zaXplKSB7CisJCQlyZW0gPSBldmVudF9zaXplIC0gKGxlbiAlIGV2ZW50X3NpemUpOworCQkJaWYgKGxlbiAlIGV2ZW50X3NpemUgPT0gMCkKKwkJCQlyZW0gPSAwOworCQl9CisKKwkJa2V2ZW50LT5uYW1lID0ga21hbGxvYyhsZW4gKyByZW0sIEdGUF9LRVJORUwpOworCQlpZiAodW5saWtlbHkoIWtldmVudC0+bmFtZSkpIHsKKwkJCWttZW1fY2FjaGVfZnJlZShldmVudF9jYWNoZXAsIGtldmVudCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCQltZW1jcHkoa2V2ZW50LT5uYW1lLCBuYW1lLCBsZW4pOworCQlpZiAocmVtKQorCQkJbWVtc2V0KGtldmVudC0+bmFtZSArIGxlbiwgMCwgcmVtKTsKKwkJa2V2ZW50LT5ldmVudC5sZW4gPSBsZW4gKyByZW07CisJfSBlbHNlIHsKKwkJa2V2ZW50LT5ldmVudC5sZW4gPSAwOworCQlrZXZlbnQtPm5hbWUgPSBOVUxMOworCX0KKworCXJldHVybiBrZXZlbnQ7Cit9CisKKy8qCisgKiBpbm90aWZ5X2Rldl9nZXRfZXZlbnQgLSByZXR1cm4gdGhlIG5leHQgZXZlbnQgaW4gdGhlIGdpdmVuIGRldidzIHF1ZXVlCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBkZXYtPmV2X211dGV4LgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm90aWZ5X2tlcm5lbF9ldmVudCAqCitpbm90aWZ5X2Rldl9nZXRfZXZlbnQoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGxpc3RfZW50cnkoZGV2LT5ldmVudHMubmV4dCwgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50LCBsaXN0KTsKK30KKworLyoKKyAqIGlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50IC0gZXZlbnQgaGFuZGxlciByZWdpc3RlcmVkIHdpdGggY29yZSBpbm90aWZ5LCBhZGRzCisgKiBhIG5ldyBldmVudCB0byB0aGUgZ2l2ZW4gZGV2aWNlCisgKgorICogQ2FuIHNsZWVwIChjYWxscyBrZXJuZWxfZXZlbnQoKSkuCisgKi8KK3N0YXRpYyB2b2lkIGlub3RpZnlfZGV2X3F1ZXVlX2V2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3LCB1MzIgd2QsIHUzMiBtYXNrLAorCQkJCSAgICB1MzIgY29va2llLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlnbm9yZWQpCit7CisJc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCAqd2F0Y2g7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7CisJc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQsICpsYXN0OworCisJd2F0Y2ggPSBjb250YWluZXJfb2Yodywgc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCwgd2RhdGEpOworCWRldiA9IHdhdGNoLT5kZXY7CisKKwltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKworCS8qIHdlIGNhbiBzYWZlbHkgcHV0IHRoZSB3YXRjaCBhcyB3ZSBkb24ndCByZWZlcmVuY2UgaXQgd2hpbGUKKwkgKiBnZW5lcmF0aW5nIHRoZSBldmVudAorCSAqLworCWlmIChtYXNrICYgSU5fSUdOT1JFRCB8fCBtYXNrICYgSU5fT05FU0hPVCkKKwkJcHV0X2lub3RpZnlfd2F0Y2godyk7IC8qIGZpbmFsIHB1dCAqLworCisJLyogY29hbGVzY2luZzogZHJvcCB0aGlzIGV2ZW50IGlmIGl0IGlzIGEgZHVwZSBvZiB0aGUgcHJldmlvdXMgKi8KKwlsYXN0ID0gaW5vdGlmeV9kZXZfZ2V0X2V2ZW50KGRldik7CisJaWYgKGxhc3QgJiYgbGFzdC0+ZXZlbnQubWFzayA9PSBtYXNrICYmIGxhc3QtPmV2ZW50LndkID09IHdkICYmCisJCQlsYXN0LT5ldmVudC5jb29raWUgPT0gY29va2llKSB7CisJCWNvbnN0IGNoYXIgKmxhc3RuYW1lID0gbGFzdC0+bmFtZTsKKworCQlpZiAoIW5hbWUgJiYgIWxhc3RuYW1lKQorCQkJZ290byBvdXQ7CisJCWlmIChuYW1lICYmIGxhc3RuYW1lICYmICFzdHJjbXAobGFzdG5hbWUsIG5hbWUpKQorCQkJZ290byBvdXQ7CisJfQorCisJLyogdGhlIHF1ZXVlIG92ZXJmbG93ZWQgYW5kIHdlIGFscmVhZHkgc2VudCB0aGUgUV9PVkVSRkxPVyBldmVudCAqLworCWlmICh1bmxpa2VseShkZXYtPmV2ZW50X2NvdW50ID4gZGV2LT5tYXhfZXZlbnRzKSkKKwkJZ290byBvdXQ7CisKKwkvKiBpZiB0aGUgcXVldWUgb3ZlcmZsb3dzLCB3ZSBuZWVkIHRvIG5vdGlmeSB1c2VyIHNwYWNlICovCisJaWYgKHVubGlrZWx5KGRldi0+ZXZlbnRfY291bnQgPT0gZGV2LT5tYXhfZXZlbnRzKSkKKwkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KC0xLCBJTl9RX09WRVJGTE9XLCBjb29raWUsIE5VTEwpOworCWVsc2UKKwkJa2V2ZW50ID0ga2VybmVsX2V2ZW50KHdkLCBtYXNrLCBjb29raWUsIG5hbWUpOworCisJaWYgKHVubGlrZWx5KCFrZXZlbnQpKQorCQlnb3RvIG91dDsKKworCS8qIHF1ZXVlIHRoZSBldmVudCBhbmQgd2FrZSB1cCBhbnlvbmUgd2FpdGluZyAqLworCWRldi0+ZXZlbnRfY291bnQrKzsKKwlkZXYtPnF1ZXVlX3NpemUgKz0gc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2V2ZW50KSArIGtldmVudC0+ZXZlbnQubGVuOworCWxpc3RfYWRkX3RhaWwoJmtldmVudC0+bGlzdCwgJmRldi0+ZXZlbnRzKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d3EpOworCitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmV2X211dGV4KTsKK30KKworLyoKKyAqIHJlbW92ZV9rZXZlbnQgLSBjbGVhbnMgdXAgYW5kIHVsdGltYXRlbHkgZnJlZXMgdGhlIGdpdmVuIGtldmVudAorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgZGV2LT5ldl9tdXRleC4KKyAqLworc3RhdGljIHZvaWQgcmVtb3ZlX2tldmVudChzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldiwKKwkJCSAgc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQpCit7CisJbGlzdF9kZWwoJmtldmVudC0+bGlzdCk7CisKKwlkZXYtPmV2ZW50X2NvdW50LS07CisJZGV2LT5xdWV1ZV9zaXplIC09IHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9ldmVudCkgKyBrZXZlbnQtPmV2ZW50LmxlbjsKKworCWtmcmVlKGtldmVudC0+bmFtZSk7CisJa21lbV9jYWNoZV9mcmVlKGV2ZW50X2NhY2hlcCwga2V2ZW50KTsKK30KKworLyoKKyAqIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUgLSBkZXN0cm95IGFuIGV2ZW50IG9uIHRoZSBnaXZlbiBkZXZpY2UKKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIGRldi0+ZXZfbXV0ZXguCisgKi8KK3N0YXRpYyB2b2lkIGlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYpCit7CisJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpIHsKKwkJc3RydWN0IGlub3RpZnlfa2VybmVsX2V2ZW50ICprZXZlbnQ7CisJCWtldmVudCA9IGlub3RpZnlfZGV2X2dldF9ldmVudChkZXYpOworCQlyZW1vdmVfa2V2ZW50KGRldiwga2V2ZW50KTsKKwl9Cit9CisKKy8qCisgKiBmaW5kX2lub2RlIC0gcmVzb2x2ZSBhIHVzZXItZ2l2ZW4gcGF0aCB0byBhIHNwZWNpZmljIGlub2RlIGFuZCByZXR1cm4gYSBuZAorICovCitzdGF0aWMgaW50IGZpbmRfaW5vZGUoY29uc3QgY2hhciBfX3VzZXIgKmRpcm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kLAorCQkgICAgICB1bnNpZ25lZCBmbGFncykKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IF9fdXNlcl93YWxrKGRpcm5hbWUsIGZsYWdzLCBuZCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJLyogeW91IGNhbiBvbmx5IHdhdGNoIGFuIGlub2RlIGlmIHlvdSBoYXZlIHJlYWQgcGVybWlzc2lvbnMgb24gaXQgKi8KKwllcnJvciA9IHZmc19wZXJtaXNzaW9uKG5kLCBNQVlfUkVBRCk7CisJaWYgKGVycm9yKQorCQlwYXRoX3JlbGVhc2UobmQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIGNyZWF0ZV93YXRjaCAtIGNyZWF0ZXMgYSB3YXRjaCBvbiB0aGUgZ2l2ZW4gZGV2aWNlLgorICoKKyAqIENhbGxlcnMgbXVzdCBob2xkIGRldi0+dXBfbXV0ZXguCisgKi8KK3N0YXRpYyBpbnQgY3JlYXRlX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2LCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJdTMyIG1hc2spCit7CisJc3RydWN0IGlub3RpZnlfdXNlcl93YXRjaCAqd2F0Y2g7CisJaW50IHJldDsKKworCWlmIChhdG9taWNfcmVhZCgmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpID49CisJCQlpbm90aWZ5X21heF91c2VyX3dhdGNoZXMpCisJCXJldHVybiAtRU5PU1BDOworCisJd2F0Y2ggPSBrbWVtX2NhY2hlX2FsbG9jKHdhdGNoX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCF3YXRjaCkpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogc2F2ZSBhIHJlZmVyZW5jZSB0byBkZXZpY2UgYW5kIGJ1bXAgdGhlIGNvdW50IHRvIG1ha2UgaXQgb2ZmaWNpYWwgKi8KKwlnZXRfaW5vdGlmeV9kZXYoZGV2KTsKKwl3YXRjaC0+ZGV2ID0gZGV2OworCisJYXRvbWljX2luYygmZGV2LT51c2VyLT5pbm90aWZ5X3dhdGNoZXMpOworCisJaW5vdGlmeV9pbml0X3dhdGNoKCZ3YXRjaC0+d2RhdGEpOworCXJldCA9IGlub3RpZnlfYWRkX3dhdGNoKGRldi0+aWgsICZ3YXRjaC0+d2RhdGEsIGlub2RlLCBtYXNrKTsKKwlpZiAocmV0IDwgMCkKKwkJZnJlZV9pbm90aWZ5X3VzZXJfd2F0Y2goJndhdGNoLT53ZGF0YSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBEZXZpY2UgSW50ZXJmYWNlICovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaW5vdGlmeV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCByZXQgPSAwOworCisJcG9sbF93YWl0KGZpbGUsICZkZXYtPndxLCB3YWl0KTsKKwltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKwlpZiAoIWxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKSkKKwkJcmV0ID0gUE9MTElOIHwgUE9MTFJETk9STTsKKwltdXRleF91bmxvY2soJmRldi0+ZXZfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgaW5vdGlmeV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJc2l6ZV90IGV2ZW50X3NpemUgPSBzaXplb2YgKHN0cnVjdCBpbm90aWZ5X2V2ZW50KTsKKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKKwljaGFyIF9fdXNlciAqc3RhcnQ7CisJaW50IHJldDsKKwlERUZJTkVfV0FJVCh3YWl0KTsKKworCXN0YXJ0ID0gYnVmOworCWRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXdoaWxlICgxKSB7CisJCWludCBldmVudHM7CisKKwkJcHJlcGFyZV90b193YWl0KCZkZXYtPndxLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKwkJZXZlbnRzID0gIWxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmV2X211dGV4KTsKKwkJaWYgKGV2ZW50cykgeworCQkJcmV0ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlyZXQgPSAtRUFHQUlOOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCXJldCA9IC1FSU5UUjsKKwkJCWJyZWFrOworCQl9CisKKwkJc2NoZWR1bGUoKTsKKwl9CisKKwlmaW5pc2hfd2FpdCgmZGV2LT53cSwgJndhaXQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPmV2X211dGV4KTsKKwl3aGlsZSAoMSkgeworCQlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudDsKKworCQlyZXQgPSBidWYgLSBzdGFydDsKKwkJaWYgKGxpc3RfZW1wdHkoJmRldi0+ZXZlbnRzKSkKKwkJCWJyZWFrOworCisJCWtldmVudCA9IGlub3RpZnlfZGV2X2dldF9ldmVudChkZXYpOworCQlpZiAoZXZlbnRfc2l6ZSArIGtldmVudC0+ZXZlbnQubGVuID4gY291bnQpCisJCQlicmVhazsKKworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmtldmVudC0+ZXZlbnQsIGV2ZW50X3NpemUpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJYnVmICs9IGV2ZW50X3NpemU7CisJCWNvdW50IC09IGV2ZW50X3NpemU7CisKKwkJaWYgKGtldmVudC0+bmFtZSkgeworCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsIGtldmVudC0+bmFtZSwga2V2ZW50LT5ldmVudC5sZW4pKXsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWJyZWFrOworCQkJfQorCQkJYnVmICs9IGtldmVudC0+ZXZlbnQubGVuOworCQkJY291bnQgLT0ga2V2ZW50LT5ldmVudC5sZW47CisJCX0KKworCQlyZW1vdmVfa2V2ZW50KGRldiwga2V2ZW50KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmV2X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW5vdGlmeV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaWdub3JlZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpbm90aWZ5X2Rlc3Ryb3koZGV2LT5paCk7CisKKwkvKiBkZXN0cm95IGFsbCBvZiB0aGUgZXZlbnRzIG9uIHRoaXMgZGV2aWNlICovCisJbXV0ZXhfbG9jaygmZGV2LT5ldl9tdXRleCk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXYtPmV2ZW50cykpCisJCWlub3RpZnlfZGV2X2V2ZW50X2RlcXVldWUoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+ZXZfbXV0ZXgpOworCisJLyogZnJlZSB0aGlzIGRldmljZTogdGhlIHB1dCBtYXRjaGluZyB0aGUgZ2V0IGluIGlub3RpZnlfaW5pdCgpICovCisJcHV0X2lub3RpZnlfZGV2KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgaW5vdGlmeV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7CisJdm9pZCBfX3VzZXIgKnA7CisJaW50IHJldCA9IC1FTk9UVFk7CisKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRklPTlJFQUQ6CisJCXJldCA9IHB1dF91c2VyKGRldi0+cXVldWVfc2l6ZSwgKGludCBfX3VzZXIgKikgcCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlub3RpZnlfZm9wcyA9IHsKKwkucG9sbCAgICAgICAgICAgPSBpbm90aWZ5X3BvbGwsCisJLnJlYWQgICAgICAgICAgID0gaW5vdGlmeV9yZWFkLAorCS5yZWxlYXNlICAgICAgICA9IGlub3RpZnlfcmVsZWFzZSwKKwkudW5sb2NrZWRfaW9jdGwgPSBpbm90aWZ5X2lvY3RsLAorCS5jb21wYXRfaW9jdGwJPSBpbm90aWZ5X2lvY3RsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgaW5vdGlmeV91c2VyX29wcyA9IHsKKwkuaGFuZGxlX2V2ZW50CT0gaW5vdGlmeV9kZXZfcXVldWVfZXZlbnQsCisJLmRlc3Ryb3lfd2F0Y2gJPSBmcmVlX2lub3RpZnlfdXNlcl93YXRjaCwKK307CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW5vdGlmeV9pbml0KHZvaWQpCit7CisJc3RydWN0IGlub3RpZnlfZGV2aWNlICpkZXY7CisJc3RydWN0IGlub3RpZnlfaGFuZGxlICppaDsKKwlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CisJc3RydWN0IGZpbGUgKmZpbHA7CisJaW50IGZkLCByZXQ7CisKKwlmZCA9IGdldF91bnVzZWRfZmQoKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmQ7CisKKwlmaWxwID0gZ2V0X2VtcHR5X2ZpbHAoKTsKKwlpZiAoIWZpbHApIHsKKwkJcmV0ID0gLUVORklMRTsKKwkJZ290byBvdXRfcHV0X2ZkOworCX0KKworCXVzZXIgPSBnZXRfdWlkKGN1cnJlbnQtPnVzZXIpOworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PQorCQkJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMpKSB7CisJCXJldCA9IC1FTUZJTEU7CisJCWdvdG8gb3V0X2ZyZWVfdWlkOworCX0KKworCWRldiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbm90aWZ5X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghZGV2KSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3VpZDsKKwl9CisKKwlpaCA9IGlub3RpZnlfaW5pdCgmaW5vdGlmeV91c2VyX29wcyk7CisJaWYgKHVubGlrZWx5KElTX0VSUihpaCkpKSB7CisJCXJldCA9IFBUUl9FUlIoaWgpOworCQlnb3RvIG91dF9mcmVlX2RldjsKKwl9CisJZGV2LT5paCA9IGloOworCisJZmlscC0+Zl9vcCA9ICZpbm90aWZ5X2ZvcHM7CisJZmlscC0+Zl92ZnNtbnQgPSBtbnRnZXQoaW5vdGlmeV9tbnQpOworCWZpbHAtPmZfZGVudHJ5ID0gZGdldChpbm90aWZ5X21udC0+bW50X3Jvb3QpOworCWZpbHAtPmZfbWFwcGluZyA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX21hcHBpbmc7CisJZmlscC0+Zl9tb2RlID0gRk1PREVfUkVBRDsKKwlmaWxwLT5mX2ZsYWdzID0gT19SRE9OTFk7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZGV2OworCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZXZlbnRzKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPndxKTsKKwltdXRleF9pbml0KCZkZXYtPmV2X211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPnVwX211dGV4KTsKKwlkZXYtPmV2ZW50X2NvdW50ID0gMDsKKwlkZXYtPnF1ZXVlX3NpemUgPSAwOworCWRldi0+bWF4X2V2ZW50cyA9IGlub3RpZnlfbWF4X3F1ZXVlZF9ldmVudHM7CisJZGV2LT51c2VyID0gdXNlcjsKKwlhdG9taWNfc2V0KCZkZXYtPmNvdW50LCAwKTsKKworCWdldF9pbm90aWZ5X2RldihkZXYpOworCWF0b21pY19pbmMoJnVzZXItPmlub3RpZnlfZGV2cyk7CisJZmRfaW5zdGFsbChmZCwgZmlscCk7CisKKwlyZXR1cm4gZmQ7CitvdXRfZnJlZV9kZXY6CisJa2ZyZWUoZGV2KTsKK291dF9mcmVlX3VpZDoKKwlmcmVlX3VpZCh1c2VyKTsKKwlwdXRfZmlscChmaWxwKTsKK291dF9wdXRfZmQ6CisJcHV0X3VudXNlZF9mZChmZCk7CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19pbm90aWZ5X2FkZF93YXRjaChpbnQgZmQsIGNvbnN0IGNoYXIgX191c2VyICpwYXRoLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBpbm90aWZ5X2RldmljZSAqZGV2OworCXN0cnVjdCBuYW1laWRhdGEgbmQ7CisJc3RydWN0IGZpbGUgKmZpbHA7CisJaW50IHJldCwgZnB1dF9uZWVkZWQ7CisJdW5zaWduZWQgZmxhZ3MgPSAwOworCisJZmlscCA9IGZnZXRfbGlnaHQoZmQsICZmcHV0X25lZWRlZCk7CisJaWYgKHVubGlrZWx5KCFmaWxwKSkKKwkJcmV0dXJuIC1FQkFERjsKKworCS8qIHZlcmlmeSB0aGF0IHRoaXMgaXMgaW5kZWVkIGFuIGlub3RpZnkgaW5zdGFuY2UgKi8KKwlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmaW5vdGlmeV9mb3BzKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZwdXRfYW5kX291dDsKKwl9CisKKwlpZiAoIShtYXNrICYgSU5fRE9OVF9GT0xMT1cpKQorCQlmbGFncyB8PSBMT09LVVBfRk9MTE9XOworCWlmIChtYXNrICYgSU5fT05MWURJUikKKwkJZmxhZ3MgfD0gTE9PS1VQX0RJUkVDVE9SWTsKKworCXJldCA9IGZpbmRfaW5vZGUocGF0aCwgJm5kLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gZnB1dF9hbmRfb3V0OworCisJLyogaW5vZGUgaGVsZCBpbiBwbGFjZSBieSByZWZlcmVuY2UgdG8gbmQ7IGRldiBieSBmZ2V0IG9uIGZkICovCisJaW5vZGUgPSBuZC5kZW50cnktPmRfaW5vZGU7CisJZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJbXV0ZXhfbG9jaygmZGV2LT51cF9tdXRleCk7CisJcmV0ID0gaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChkZXYtPmloLCBpbm9kZSwgbWFzayk7CisJaWYgKHJldCA9PSAtRU5PRU5UKQorCQlyZXQgPSBjcmVhdGVfd2F0Y2goZGV2LCBpbm9kZSwgbWFzayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVwX211dGV4KTsKKworCXBhdGhfcmVsZWFzZSgmbmQpOworZnB1dF9hbmRfb3V0OgorCWZwdXRfbGlnaHQoZmlscCwgZnB1dF9uZWVkZWQpOworCXJldHVybiByZXQ7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfaW5vdGlmeV9ybV93YXRjaChpbnQgZmQsIHUzMiB3ZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKwlzdHJ1Y3QgaW5vdGlmeV9kZXZpY2UgKmRldjsKKwlpbnQgcmV0LCBmcHV0X25lZWRlZDsKKworCWZpbHAgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmICh1bmxpa2VseSghZmlscCkpCisJCXJldHVybiAtRUJBREY7CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIGluZGVlZCBhbiBpbm90aWZ5IGluc3RhbmNlICovCisJaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJmlub3RpZnlfZm9wcykpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJLyogd2UgZnJlZSBvdXIgd2F0Y2ggZGF0YSB3aGVuIHdlIGdldCBJTl9JR05PUkVEICovCisJcmV0ID0gaW5vdGlmeV9ybV93ZChkZXYtPmloLCB3ZCk7CisKK291dDoKKwlmcHV0X2xpZ2h0KGZpbHAsIGZwdXRfbmVlZGVkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHN1cGVyX2Jsb2NrICoKK2lub3RpZnlfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLCBpbnQgZmxhZ3MsCisJICAgICAgIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhKQoreworICAgIHJldHVybiBnZXRfc2JfcHNldWRvKGZzX3R5cGUsICJpbm90aWZ5IiwgTlVMTCwgMHhCQUQxREVBKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGlub3RpZnlfZnNfdHlwZSA9IHsKKyAgICAubmFtZSAgICAgICAgICAgPSAiaW5vdGlmeWZzIiwKKyAgICAuZ2V0X3NiICAgICAgICAgPSBpbm90aWZ5X2dldF9zYiwKKyAgICAua2lsbF9zYiAgICAgICAgPSBraWxsX2Fub25fc3VwZXIsCit9OworCisvKgorICogaW5vdGlmeV91c2VyX3NldHVwIC0gT3VyIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAgTm90ZSB0aGF0IHdlIGNhbm5ub3QgcmV0dXJuCisgKiBlcnJvciBiZWNhdXNlIHdlIGhhdmUgY29tcGlsZWQtaW4gVkZTIGhvb2tzLiAgU28gYW4gKHVubGlrZWx5KSBmYWlsdXJlIGhlcmUKKyAqIG11c3QgcmVzdWx0IGluIHBhbmljKCkuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGlub3RpZnlfdXNlcl9zZXR1cCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZpbm90aWZ5X2ZzX3R5cGUpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlwYW5pYygiaW5vdGlmeTogcmVnaXN0ZXJfZmlsZXN5c3RlbSByZXR1cm5lZCAlZCFcbiIsIHJldCk7CisKKwlpbm90aWZ5X21udCA9IGtlcm5fbW91bnQoJmlub3RpZnlfZnNfdHlwZSk7CisJaWYgKElTX0VSUihpbm90aWZ5X21udCkpCisJCXBhbmljKCJpbm90aWZ5OiBrZXJuX21vdW50IHJldCAlbGQhXG4iLCBQVFJfRVJSKGlub3RpZnlfbW50KSk7CisKKwlpbm90aWZ5X21heF9xdWV1ZWRfZXZlbnRzID0gMTYzODQ7CisJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMgPSAxMjg7CisJaW5vdGlmeV9tYXhfdXNlcl93YXRjaGVzID0gODE5MjsKKworCXdhdGNoX2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5X3dhdGNoX2NhY2hlIiwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV91c2VyX3dhdGNoKSwKKwkJCQkJIDAsIFNMQUJfUEFOSUMsIE5VTEwsIE5VTEwpOworCWV2ZW50X2NhY2hlcCA9IGttZW1fY2FjaGVfY3JlYXRlKCJpbm90aWZ5X2V2ZW50X2NhY2hlIiwKKwkJCQkJIHNpemVvZihzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQpLAorCQkJCQkgMCwgU0xBQl9QQU5JQywgTlVMTCwgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KKworbW9kdWxlX2luaXQoaW5vdGlmeV91c2VyX3NldHVwKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMvaW50cmVwLmMgYi9mcy9qZmZzL2ludHJlcC5jCmluZGV4IDBlZjIwN2QuLjUzNzFhNDAgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvaW50cmVwLmMKKysrIGIvZnMvamZmcy9pbnRyZXAuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJRDMocHJpbnRrKEtFUk5fTk9USUNFICJmbGFzaF9zYWZlX3JlYWQoJXAsICUwOHgsICVwLCAlMDh4KVxuIiwKIAkJICBtdGQsICh1bnNpZ25lZCBpbnQpIGZyb20sIGJ1ZiwgY291bnQpKTsKIAotCXJlcyA9IE1URF9SRUFEKG10ZCwgZnJvbSwgY291bnQsICZyZXRsZW4sIGJ1Zik7CisJcmVzID0gbXRkLT5yZWFkKG10ZCwgZnJvbSwgY291bnQsICZyZXRsZW4sIGJ1Zik7CiAJaWYgKHJldGxlbiAhPSBjb3VudCkgewogCQlwYW5pYygiRGlkbid0IHJlYWQgYWxsIGJ5dGVzIGluIGZsYXNoX3NhZmVfcmVhZCgpLiBSZXR1cm5lZCAlZFxuIiwgcmVzKTsKIAl9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAlfX3UzMiByZXQ7CiAJaW50IHJlczsKIAotCXJlcyA9IE1URF9SRUFEKG10ZCwgZnJvbSwgNCwgJnJldGxlbiwgKHVuc2lnbmVkIGNoYXIgKikmcmV0KTsKKwlyZXMgPSBtdGQtPnJlYWQobXRkLCBmcm9tLCA0LCAmcmV0bGVuLCAodW5zaWduZWQgY2hhciAqKSZyZXQpOwogCWlmIChyZXRsZW4gIT0gNCkgewogCQlwcmludGsoIkRpZG4ndCByZWFkIGFsbCBieXRlcyBpbiBmbGFzaF9yZWFkX3UzMigpLiBSZXR1cm5lZCAlZFxuIiwgcmVzKTsKIAkJcmV0dXJuIDA7CkBAIC0yODIsNyArMjgyLDcgQEAKIAlEMyhwcmludGsoS0VSTl9OT1RJQ0UgImZsYXNoX3NhZmVfd3JpdGUoJXAsICUwOHgsICVwLCAlMDh4KVxuIiwKIAkJICBtdGQsICh1bnNpZ25lZCBpbnQpIHRvLCBidWYsIGNvdW50KSk7CiAKLQlyZXMgPSBNVERfV1JJVEUobXRkLCB0bywgY291bnQsICZyZXRsZW4sIGJ1Zik7CisJcmVzID0gbXRkLT53cml0ZShtdGQsIHRvLCBjb3VudCwgJnJldGxlbiwgYnVmKTsKIAlpZiAocmV0bGVuICE9IGNvdW50KSB7CiAJCXByaW50aygiRGlkbid0IHdyaXRlIGFsbCBieXRlcyBpbiBmbGFzaF9zYWZlX3dyaXRlKCkuIFJldHVybmVkICVkXG4iLCByZXMpOwogCX0KQEAgLTMwMCw5ICszMDAsOSBAQAogCiAJRDMocHJpbnRrKEtFUk5fTk9USUNFICJmbGFzaF9zYWZlX3dyaXRldiglcCwgJTA4eCwgJXApXG4iLAogCQkgIG10ZCwgKHVuc2lnbmVkIGludCkgdG8sIHZlY3MpKTsKLQkKKwogCWlmIChtdGQtPndyaXRldikgewotCQlyZXMgPSBNVERfV1JJVEVWKG10ZCwgdmVjcywgaW92ZWNfY250LCB0bywgJnJldGxlbik7CisJCXJlcyA9IG10ZC0+d3JpdGV2KG10ZCwgdmVjcywgaW92ZWNfY250LCB0bywgJnJldGxlbik7CiAJCXJldHVybiByZXMgPyByZXMgOiByZXRsZW47CiAJfQogCS8qIE5vdCBpbXBsZW1lbnRlZCB3cml0ZXYuIFJlcGVhdGVkbHkgdXNlIHdyaXRlIC0gb24gdGhlIG5vdCBzbwpAQCAtMzEyLDcgKzMxMiw4IEBACiAJcmV0bGVuPTA7CiAKIAlmb3IgKGk9MDsgIXJlcyAmJiBpPGlvdmVjX2NudDsgaSsrKSB7Ci0JCXJlcyA9IE1URF9XUklURShtdGQsIHRvLCB2ZWNzW2ldLmlvdl9sZW4sICZyZXRsZW5fYSwgdmVjc1tpXS5pb3ZfYmFzZSk7CisJCXJlcyA9IG10ZC0+d3JpdGUobXRkLCB0bywgdmVjc1tpXS5pb3ZfbGVuLCAmcmV0bGVuX2EsCisJCQkJIHZlY3NbaV0uaW92X2Jhc2UpOwogCQlpZiAocmV0bGVuX2EgIT0gdmVjc1tpXS5pb3ZfbGVuKSB7CiAJCQlwcmludGsoIkRpZG4ndCB3cml0ZSBhbGwgYnl0ZXMgaW4gZmxhc2hfc2FmZV93cml0ZXYoKS4gUmV0dXJuZWQgJWRcbiIsIHJlcyk7CiAJCQlpZiAoaSAhPSBpb3ZlY19jbnQtMSkKQEAgLTM5Myw3ICszOTQsNyBAQAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAlhZGRfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CiAKLQlpZiAoTVREX0VSQVNFKG10ZCwgZXJhc2UpIDwgMCkgeworCWlmIChtdGQtPmVyYXNlKG10ZCwgZXJhc2UpIDwgMCkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlyZW1vdmVfd2FpdF9xdWV1ZSgmd2FpdF9xLCAmd2FpdCk7CiAJCWtmcmVlKGVyYXNlKTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL01ha2VmaWxlIGIvZnMvamZmczIvTWFrZWZpbGUKaW5kZXggNzdkYzU1Ni4uN2YyOGVlMCAxMDA2NDQKLS0tIGEvZnMvamZmczIvTWFrZWZpbGUKKysrIGIvZnMvamZmczIvTWFrZWZpbGUKQEAgLTEyLDYgKzEyLDkgQEAKIGpmZnMyLXkJKz0gc3VwZXIubyBkZWJ1Zy5vCiAKIGpmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSKQkrPSB3YnVmLm8KK2pmZnMyLSQoQ09ORklHX0pGRlMyX0ZTX1hBVFRSKQkJKz0geGF0dHIubyB4YXR0cl90cnVzdGVkLm8geGF0dHJfdXNlci5vCitqZmZzMi0kKENPTkZJR19KRkZTMl9GU19TRUNVUklUWSkJKz0gc2VjdXJpdHkubworamZmczItJChDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMKQkrPSBhY2wubwogamZmczItJChDT05GSUdfSkZGUzJfUlVCSU4pCSs9IGNvbXByX3J1YmluLm8KIGpmZnMyLSQoQ09ORklHX0pGRlMyX1JUSU1FKQkrPSBjb21wcl9ydGltZS5vCiBqZmZzMi0kKENPTkZJR19KRkZTMl9aTElCKQkrPSBjb21wcl96bGliLm8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL1JFQURNRS5Mb2NraW5nIGIvZnMvamZmczIvUkVBRE1FLkxvY2tpbmcKaW5kZXggYjc5NDM0My4uYzhmMGJkNiAxMDA2NDQKLS0tIGEvZnMvamZmczIvUkVBRE1FLkxvY2tpbmcKKysrIGIvZnMvamZmczIvUkVBRE1FLkxvY2tpbmcKQEAgLTE1MCwzICsxNTAsMjQgQEAKIAogT3JkZXJpbmcgY29uc3RyYWludHM6CiAJTG9jayB3YnVmX3NlbSBsYXN0LCBhZnRlciB0aGUgYWxsb2Nfc2VtIG9yIGFuZCBmLT5zZW0uCisKKworCWMtPnhhdHRyX3NlbQorCS0tLS0tLS0tLS0tLQorCitUaGlzIHJlYWQvd3JpdGUgc2VtYXBob3JlIHByb3RlY3RzIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlCit4YXR0ciByZWxhdGVkIG9iamVjdHMgd2hpY2ggaW5jbHVkZSBzdHVmZiBpbiBzdXBlcmJsb2NrIGFuZCBpYy0+eHJlZi4KK0luIHJlYWQtb25seSBwYXRoLCB3cml0ZS1zZW1hcGhvcmUgaXMgdG9vIG11Y2ggZXhjbHVzaW9uLiBJdCdzIGVub3VnaAorYnkgcmVhZC1zZW1hcGhvcmUuIEJ1dCB5b3UgbXVzdCBob2xkIHdyaXRlLXNlbWFwaG9yZSB3aGVuIHVwZGF0aW5nLAorY3JlYXRpbmcgb3IgZGVsZXRpbmcgYW55IHhhdHRyIHJlbGF0ZWQgb2JqZWN0LgorCitPbmNlIHhhdHRyX3NlbSByZWxlYXNlZCwgdGhlcmUgd291bGQgYmUgbm8gYXNzdXJhbmNlIGZvciB0aGUgZXhpc3RlbmNlCitvZiB0aG9zZSBvYmplY3RzLiBUaHVzLCBhIHNlcmllcyBvZiBwcm9jZXNzZXMgaXMgb2Z0ZW4gcmVxdWlyZWQgdG8gcmV0cnksCit3aGVuIHVwZGF0aW5nIHN1Y2ggYSBvYmplY3QgaXMgbmVjZXNzYXJ5IHVuZGVyIGhvbGRpbmcgcmVhZCBzZW1hcGhvcmUuCitGb3IgZXhhbXBsZSwgZG9famZmczJfZ2V0eGF0dHIoKSBob2xkcyByZWFkLXNlbWFwaG9yZSB0byBzY2FuIHhyZWYgYW5kCit4ZGF0dW0gYXQgZmlyc3QuIEJ1dCBpdCByZXRyaWVzIHRoaXMgcHJvY2VzcyB3aXRoIGhvbGRpbmcgd3JpdGUtc2VtYXBob3JlCithZnRlciByZWxlYXNlIHJlYWQtc2VtYXBob3JlLCBpZiBpdCdzIG5lY2Vzc2FyeSB0byBsb2FkIG5hbWUvdmFsdWUgcGFpcgorZnJvbSBtZWRpdW0uCisKK09yZGVyaW5nIGNvbnN0cmFpbnRzOgorCUxvY2sgeGF0dHJfc2VtIGxhc3QsIGFmdGVyIHRoZSBhbGxvY19zZW0uCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9hY2wuYyBiL2ZzL2pmZnMyL2FjbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMGRkNDgKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZmZzMi9hY2wuYwpAQCAtMCwwICsxLDQ4NSBAQAorLyoKKyAqIEpGRlMyIC0tIEpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtLCBWZXJzaW9uIDIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBORUMgQ29ycG9yYXRpb24KKyAqCisgKiBDcmVhdGVkIGJ5IEthaUdhaSBLb2hlaSA8a2FpZ2FpQGFrLmpwLm5lYy5jb20+CisgKgorICogRm9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlICdMSUNFTkNFJyBpbiB0aGlzIGRpcmVjdG9yeS4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsX3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgIm5vZGVsaXN0LmgiCisKK3N0YXRpYyBzaXplX3QgamZmczJfYWNsX3NpemUoaW50IGNvdW50KQoreworCWlmIChjb3VudCA8PSA0KSB7CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9oZWFkZXIpCisJCSAgICAgICArIGNvdW50ICogc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnlfc2hvcnQpOworCX0gZWxzZSB7CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9oZWFkZXIpCisJCSAgICAgICArIDQgKiBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeV9zaG9ydCkKKwkJICAgICAgICsgKGNvdW50IC0gNCkgKiBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeSk7CisJfQorfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9jb3VudChzaXplX3Qgc2l6ZSkKK3sKKwlzaXplX3QgczsKKworCXNpemUgLT0gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfaGVhZGVyKTsKKwlzID0gc2l6ZSAtIDQgKiBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeV9zaG9ydCk7CisJaWYgKHMgPCAwKSB7CisJCWlmIChzaXplICUgc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnlfc2hvcnQpKQorCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gc2l6ZSAvIHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5X3Nob3J0KTsKKwl9IGVsc2UgeworCQlpZiAocyAlIHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5KSkKKwkJCXJldHVybiAtMTsKKwkJcmV0dXJuIHMgLyBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeSkgKyA0OworCX0KK30KKworc3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKmpmZnMyX2FjbF9mcm9tX21lZGl1bSh2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCit7CisJdm9pZCAqZW5kID0gdmFsdWUgKyBzaXplOworCXN0cnVjdCBqZmZzMl9hY2xfaGVhZGVyICpoZWFkZXIgPSB2YWx1ZTsKKwlzdHJ1Y3QgamZmczJfYWNsX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJdWludDMyX3QgdmVyOworCWludCBpLCBjb3VudDsKKworCWlmICghdmFsdWUpCisJCXJldHVybiBOVUxMOworCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfaGVhZGVyKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJdmVyID0gamUzMl90b19jcHUoaGVhZGVyLT5hX3ZlcnNpb24pOworCWlmICh2ZXIgIT0gSkZGUzJfQUNMX1ZFUlNJT04pIHsKKwkJSkZGUzJfV0FSTklORygiSW52YWxpZCBBQ0wgdmVyc2lvbi4gKD0ldSlcbiIsIHZlcik7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCXZhbHVlICs9IHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2hlYWRlcik7CisJY291bnQgPSBqZmZzMl9hY2xfY291bnQoc2l6ZSk7CisJaWYgKGNvdW50IDwgMCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiBOVUxMOworCisJYWNsID0gcG9zaXhfYWNsX2FsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjbCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlmb3IgKGk9MDsgaSA8IGNvdW50OyBpKyspIHsKKwkJZW50cnkgPSB2YWx1ZTsKKwkJaWYgKHZhbHVlICsgc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnlfc2hvcnQpID4gZW5kKQorCQkJZ290byBmYWlsOworCQlhY2wtPmFfZW50cmllc1tpXS5lX3RhZyA9IGplMTZfdG9fY3B1KGVudHJ5LT5lX3RhZyk7CisJCWFjbC0+YV9lbnRyaWVzW2ldLmVfcGVybSA9IGplMTZfdG9fY3B1KGVudHJ5LT5lX3Blcm0pOworCQlzd2l0Y2ggKGFjbC0+YV9lbnRyaWVzW2ldLmVfdGFnKSB7CisJCQljYXNlIEFDTF9VU0VSX09CSjoKKwkJCWNhc2UgQUNMX0dST1VQX09CSjoKKwkJCWNhc2UgQUNMX01BU0s6CisJCQljYXNlIEFDTF9PVEhFUjoKKwkJCQl2YWx1ZSArPSBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeV9zaG9ydCk7CisJCQkJYWNsLT5hX2VudHJpZXNbaV0uZV9pZCA9IEFDTF9VTkRFRklORURfSUQ7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQUNMX1VTRVI6CisJCQljYXNlIEFDTF9HUk9VUDoKKwkJCQl2YWx1ZSArPSBzaXplb2Yoc3RydWN0IGpmZnMyX2FjbF9lbnRyeSk7CisJCQkJaWYgKHZhbHVlID4gZW5kKQorCQkJCQlnb3RvIGZhaWw7CisJCQkJYWNsLT5hX2VudHJpZXNbaV0uZV9pZCA9IGplMzJfdG9fY3B1KGVudHJ5LT5lX2lkKTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisJaWYgKHZhbHVlICE9IGVuZCkKKwkJZ290byBmYWlsOworCXJldHVybiBhY2w7CisgZmFpbDoKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworfQorCitzdGF0aWMgdm9pZCAqamZmczJfYWNsX3RvX21lZGl1bShjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgamZmczJfYWNsX2hlYWRlciAqaGVhZGVyOworCXN0cnVjdCBqZmZzMl9hY2xfZW50cnkgKmVudHJ5OworCXZvaWQgKmU7CisJc2l6ZV90IGk7CisKKwkqc2l6ZSA9IGpmZnMyX2FjbF9zaXplKGFjbC0+YV9jb3VudCk7CisJaGVhZGVyID0ga21hbGxvYyhzaXplb2YoKmhlYWRlcikgKyBhY2wtPmFfY291bnQgKiBzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZWFkZXIpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWhlYWRlci0+YV92ZXJzaW9uID0gY3B1X3RvX2plMzIoSkZGUzJfQUNMX1ZFUlNJT04pOworCWUgPSBoZWFkZXIgKyAxOworCWZvciAoaT0wOyBpIDwgYWNsLT5hX2NvdW50OyBpKyspIHsKKwkJZW50cnkgPSBlOworCQllbnRyeS0+ZV90YWcgPSBjcHVfdG9famUxNihhY2wtPmFfZW50cmllc1tpXS5lX3RhZyk7CisJCWVudHJ5LT5lX3Blcm0gPSBjcHVfdG9famUxNihhY2wtPmFfZW50cmllc1tpXS5lX3Blcm0pOworCQlzd2l0Y2goYWNsLT5hX2VudHJpZXNbaV0uZV90YWcpIHsKKwkJCWNhc2UgQUNMX1VTRVI6CisJCQljYXNlIEFDTF9HUk9VUDoKKwkJCQllbnRyeS0+ZV9pZCA9IGNwdV90b19qZTMyKGFjbC0+YV9lbnRyaWVzW2ldLmVfaWQpOworCQkJCWUgKz0gc2l6ZW9mKHN0cnVjdCBqZmZzMl9hY2xfZW50cnkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFDTF9VU0VSX09CSjoKKwkJCWNhc2UgQUNMX0dST1VQX09CSjoKKwkJCWNhc2UgQUNMX01BU0s6CisJCQljYXNlIEFDTF9PVEhFUjoKKwkJCQllICs9IHNpemVvZihzdHJ1Y3QgamZmczJfYWNsX2VudHJ5X3Nob3J0KTsKKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisJcmV0dXJuIGhlYWRlcjsKKyBmYWlsOgorCWtmcmVlKGhlYWRlcik7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpqZmZzMl9pZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG9zaXhfYWNsICoqaV9hY2wpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gSkZGUzJfQUNMX05PVF9DQUNIRUQ7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmICgqaV9hY2wgIT0gSkZGUzJfQUNMX05PVF9DQUNIRUQpCisJCWFjbCA9IHBvc2l4X2FjbF9kdXAoKmlfYWNsKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJcmV0dXJuIGFjbDsKK30KKworc3RhdGljIHZvaWQgamZmczJfaXNldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBvc2l4X2FjbCAqKmlfYWNsLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCit7CisJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlpZiAoKmlfYWNsICE9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEKQorCQlwb3NpeF9hY2xfcmVsZWFzZSgqaV9hY2wpOworCSppX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpqZmZzMl9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCWNoYXIgKnZhbHVlID0gTlVMTDsKKwlpbnQgcmMsIHhwcmVmaXg7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKKwkJYWNsID0gamZmczJfaWdldF9hY2woaW5vZGUsICZmLT5pX2FjbF9hY2Nlc3MpOworCQlpZiAoYWNsICE9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEKQorCQkJcmV0dXJuIGFjbDsKKwkJeHByZWZpeCA9IEpGRlMyX1hQUkVGSVhfQUNMX0FDQ0VTUzsKKwkJYnJlYWs7CisJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQlhY2wgPSBqZmZzMl9pZ2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2RlZmF1bHQpOworCQlpZiAoYWNsICE9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEKQorCQkJcmV0dXJuIGFjbDsKKwkJeHByZWZpeCA9IEpGRlMyX1hQUkVGSVhfQUNMX0RFRkFVTFQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKwlyYyA9IGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCB4cHJlZml4LCAiIiwgTlVMTCwgMCk7CisJaWYgKHJjID4gMCkgeworCQl2YWx1ZSA9IGttYWxsb2MocmMsIEdGUF9LRVJORUwpOworCQlpZiAoIXZhbHVlKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXJjID0gZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIHhwcmVmaXgsICIiLCB2YWx1ZSwgcmMpOworCX0KKwlpZiAocmMgPiAwKSB7CisJCWFjbCA9IGpmZnMyX2FjbF9mcm9tX21lZGl1bSh2YWx1ZSwgcmMpOworCX0gZWxzZSBpZiAocmMgPT0gLUVOT0RBVEEgfHwgcmMgPT0gLUVOT1NZUykgeworCQlhY2wgPSBOVUxMOworCX0gZWxzZSB7CisJCWFjbCA9IEVSUl9QVFIocmMpOworCX0KKwlpZiAodmFsdWUpCisJCWtmcmVlKHZhbHVlKTsKKwlpZiAoIUlTX0VSUihhY2wpKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEFDTF9UWVBFX0FDQ0VTUzoKKwkJCWpmZnMyX2lzZXRfYWNsKGlub2RlLCAmZi0+aV9hY2xfYWNjZXNzLCBhY2wpOworCQkJYnJlYWs7CisJCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJCWpmZnMyX2lzZXRfYWNsKGlub2RlLCAmZi0+aV9hY2xfZGVmYXVsdCwgYWNsKTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiBhY2w7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisJc2l6ZV90IHNpemUgPSAwOworCWNoYXIgKnZhbHVlID0gTlVMTDsKKwlpbnQgcmMsIHhwcmVmaXg7CisKKwlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCXhwcmVmaXggPSBKRkZTMl9YUFJFRklYX0FDTF9BQ0NFU1M7CisJCWlmIChhY2wpIHsKKwkJCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKKwkJCXJjID0gcG9zaXhfYWNsX2VxdWl2X21vZGUoYWNsLCAmbW9kZSk7CisJCQlpZiAocmMgPCAwKQorCQkJCXJldHVybiByYzsKKwkJCWlmIChpbm9kZS0+aV9tb2RlICE9IG1vZGUpIHsKKwkJCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJCQlqZmZzMl9kaXJ0eV9pbm9kZShpbm9kZSk7CisJCQl9CisJCQlpZiAocmMgPT0gMCkKKwkJCQlhY2wgPSBOVUxMOworCQl9CisJCWJyZWFrOworCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJeHByZWZpeCA9IEpGRlMyX1hQUkVGSVhfQUNMX0RFRkFVTFQ7CisJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCXJldHVybiBhY2wgPyAtRUFDQ0VTIDogMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChhY2wpIHsKKwkJdmFsdWUgPSBqZmZzMl9hY2xfdG9fbWVkaXVtKGFjbCwgJnNpemUpOworCQlpZiAoSVNfRVJSKHZhbHVlKSkKKwkJCXJldHVybiBQVFJfRVJSKHZhbHVlKTsKKwl9CisKKwlyYyA9IGRvX2pmZnMyX3NldHhhdHRyKGlub2RlLCB4cHJlZml4LCAiIiwgdmFsdWUsIHNpemUsIDApOworCWlmICh2YWx1ZSkKKwkJa2ZyZWUodmFsdWUpOworCWlmICghcmMpIHsKKwkJc3dpdGNoKHR5cGUpIHsKKwkJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2FjY2VzcywgYWNsKTsKKwkJCWJyZWFrOworCQljYXNlIEFDTF9UWVBFX0RFRkFVTFQ6CisJCQlqZmZzMl9pc2V0X2FjbChpbm9kZSwgJmYtPmlfYWNsX2RlZmF1bHQsIGFjbCk7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwlpbnQgcmM7CisKKwlhY2wgPSBqZmZzMl9nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKKwlpZiAoYWNsKSB7CisJCXJjID0gcG9zaXhfYWNsX3Blcm1pc3Npb24oaW5vZGUsIGFjbCwgbWFzayk7CisJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJCXJldHVybiByYzsKKwl9CisJcmV0dXJuIC1FQUdBSU47Cit9CisKK2ludCBqZmZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBqZmZzMl9jaGVja19hY2wpOworfQorCitpbnQgamZmczJfaW5pdF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCit7CisJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZTMl9JTk9ERV9JTkZPKGlub2RlKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMLCAqY2xvbmU7CisJbW9kZV90IG1vZGU7CisJaW50IHJjID0gMDsKKworCWYtPmlfYWNsX2FjY2VzcyA9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEOworCWYtPmlfYWNsX2RlZmF1bHQgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkpIHsKKwkJYWNsID0gamZmczJfZ2V0X2FjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOworCQlpZiAoSVNfRVJSKGFjbCkpCisJCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCQlpZiAoIWFjbCkKKwkJCWlub2RlLT5pX21vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwl9CisJaWYgKGFjbCkgeworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQkJcmMgPSBqZmZzMl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBhY2wpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9LRVJORUwpOworCQlyYyA9IC1FTk9NRU07CisJCWlmICghY2xvbmUpCisJCQlnb3RvIGNsZWFudXA7CisJCW1vZGUgPSBpbm9kZS0+aV9tb2RlOworCQlyYyA9IHBvc2l4X2FjbF9jcmVhdGVfbWFzcShjbG9uZSwgJm1vZGUpOworCQlpZiAocmMgPj0gMCkgeworCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJCQlpZiAocmMgPiAwKQorCQkJCXJjID0gamZmczJfc2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBjbG9uZSk7CisJCX0KKwkJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOworCX0KKyBjbGVhbnVwOgorCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIGpmZnMyX2NsZWFyX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisKKwlpZiAoZi0+aV9hY2xfYWNjZXNzICYmIGYtPmlfYWNsX2FjY2VzcyAhPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCkgeworCQlwb3NpeF9hY2xfcmVsZWFzZShmLT5pX2FjbF9hY2Nlc3MpOworCQlmLT5pX2FjbF9hY2Nlc3MgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwl9CisJaWYgKGYtPmlfYWNsX2RlZmF1bHQgJiYgZi0+aV9hY2xfZGVmYXVsdCAhPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCkgeworCQlwb3NpeF9hY2xfcmVsZWFzZShmLT5pX2FjbF9kZWZhdWx0KTsKKwkJZi0+aV9hY2xfZGVmYXVsdCA9IEpGRlMyX0FDTF9OT1RfQ0FDSEVEOworCX0KK30KKworaW50IGpmZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgKmNsb25lOworCWludCByYzsKKworCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJYWNsID0gamZmczJfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKwlpZiAoSVNfRVJSKGFjbCkgfHwgIWFjbCkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKKwljbG9uZSA9IHBvc2l4X2FjbF9jbG9uZShhY2wsIEdGUF9LRVJORUwpOworCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJaWYgKCFjbG9uZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmMgPSBwb3NpeF9hY2xfY2htb2RfbWFzcShjbG9uZSwgaW5vZGUtPmlfbW9kZSk7CisJaWYgKCFyYykKKwkJcmMgPSBqZmZzMl9zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKKwlwb3NpeF9hY2xfcmVsZWFzZShjbG9uZSk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc2l6ZV90IGpmZnMyX2FjbF9hY2Nlc3NfbGlzdHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCQkJCSBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJY29uc3QgaW50IHJldGxlbiA9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKTsKKworCWlmIChsaXN0ICYmIHJldGxlbiA8PSBsaXN0X3NpemUpCisJCXN0cmNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKTsKKwlyZXR1cm4gcmV0bGVuOworfQorCitzdGF0aWMgc2l6ZV90IGpmZnMyX2FjbF9kZWZhdWx0X2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKwljb25zdCBpbnQgcmV0bGVuID0gc2l6ZW9mKFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxUKTsKKworCWlmIChsaXN0ICYmIHJldGxlbiA8PSBsaXN0X3NpemUpCisJCXN0cmNweShsaXN0LCBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCk7CisJcmV0dXJuIHJldGxlbjsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsOworCWludCByYzsKKworCWFjbCA9IGpmZnMyX2dldF9hY2woaW5vZGUsIHR5cGUpOworCWlmIChJU19FUlIoYWNsKSkKKwkJcmV0dXJuIFBUUl9FUlIoYWNsKTsKKwlpZiAoIWFjbCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCXJjID0gcG9zaXhfYWNsX3RvX3hhdHRyKGFjbCwgYnVmZmVyLCBzaXplKTsKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9hY2Nlc3NfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAobmFtZVswXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gamZmczJfYWNsX2dldHhhdHRyKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfYWNsX2RlZmF1bHRfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAobmFtZVswXSAhPSAnXDAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gamZmczJfYWNsX2dldHhhdHRyKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwlpbnQgcmM7CisKKwlpZiAoKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCkgJiYgIWNhcGFibGUoQ0FQX0ZPV05FUikpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAodmFsdWUpIHsKKwkJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOworCQlpZiAoSVNfRVJSKGFjbCkpCisJCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCQlpZiAoYWNsKSB7CisJCQlyYyA9IHBvc2l4X2FjbF92YWxpZChhY2wpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJYWNsID0gTlVMTDsKKwl9CisJcmMgPSBqZmZzMl9zZXRfYWNsKGlub2RlLCB0eXBlLCBhY2wpOworIG91dDoKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCXJldHVybiByYzsKK30KKworc3RhdGljIGludCBqZmZzMl9hY2xfYWNjZXNzX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKG5hbWVbMF0gIT0gJ1wwJykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGpmZnMyX2FjbF9zZXR4YXR0cihpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLCBidWZmZXIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGpmZnMyX2FjbF9kZWZhdWx0X3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgICAgY29uc3Qgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmIChuYW1lWzBdICE9ICdcMCcpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBqZmZzMl9hY2xfc2V0eGF0dHIoaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX2FjbF9hY2Nlc3NfeGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKKwkubGlzdAk9IGpmZnMyX2FjbF9hY2Nlc3NfbGlzdHhhdHRyLAorCS5nZXQJPSBqZmZzMl9hY2xfYWNjZXNzX2dldHhhdHRyLAorCS5zZXQJPSBqZmZzMl9hY2xfYWNjZXNzX3NldHhhdHRyLAorfTsKKworc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfYWNsX2RlZmF1bHRfeGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4CT0gUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQsCisJLmxpc3QJPSBqZmZzMl9hY2xfZGVmYXVsdF9saXN0eGF0dHIsCisJLmdldAk9IGpmZnMyX2FjbF9kZWZhdWx0X2dldHhhdHRyLAorCS5zZXQJPSBqZmZzMl9hY2xfZGVmYXVsdF9zZXR4YXR0ciwKK307CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9hY2wuaCBiL2ZzL2pmZnMyL2FjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4OTNiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZmZzMi9hY2wuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqIENyZWF0ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgorICoKKyAqLworc3RydWN0IGpmZnMyX2FjbF9lbnRyeSB7CisJamludDE2X3QJZV90YWc7CisJamludDE2X3QJZV9wZXJtOworCWppbnQzMl90CWVfaWQ7Cit9OworCitzdHJ1Y3QgamZmczJfYWNsX2VudHJ5X3Nob3J0IHsKKwlqaW50MTZfdAllX3RhZzsKKwlqaW50MTZfdAllX3Blcm07Cit9OworCitzdHJ1Y3QgamZmczJfYWNsX2hlYWRlciB7CisJamludDMyX3QJYV92ZXJzaW9uOworfTsKKworI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKKworI2RlZmluZSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRCAoKHZvaWQgKiktMSkKKworZXh0ZXJuIGludCBqZmZzMl9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CitleHRlcm4gaW50IGpmZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gaW50IGpmZnMyX2luaXRfYWNsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBqZmZzMl9jbGVhcl9hY2woc3RydWN0IGlub2RlICopOworCitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfYWNsX2FjY2Vzc194YXR0cl9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIGpmZnMyX2FjbF9kZWZhdWx0X3hhdHRyX2hhbmRsZXI7CisKKyNlbHNlCisKKyNkZWZpbmUgamZmczJfcGVybWlzc2lvbiBOVUxMCisjZGVmaW5lIGpmZnMyX2FjbF9jaG1vZChpbm9kZSkJCSgwKQorI2RlZmluZSBqZmZzMl9pbml0X2FjbChpbm9kZSxkaXIpCSgwKQorI2RlZmluZSBqZmZzMl9jbGVhcl9hY2woaW5vZGUpCisKKyNlbmRpZgkvKiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMICovCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9idWlsZC5jIGIvZnMvamZmczIvYnVpbGQuYwppbmRleCA3MGY3YTg5Li4wMjgyNjk2IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9idWlsZC5jCisrKyBiL2ZzL2pmZnMyL2J1aWxkLmMKQEAgLTE2MCw2ICsxNjAsNyBAQAogCQlpYy0+c2Nhbl9kZW50cyA9IE5VTEw7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KKwlqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oYyk7CiAJYy0+ZmxhZ3MgJj0gfkpGRlMyX1NCX0ZMQUdfQlVJTERJTkc7CiAKIAlkYmdfZnNidWlsZCgiRlMgYnVpbGQgY29tcGxldGVcbiIpOwpAQCAtMTc4LDYgKzE3OSw3IEBACiAJCQkJamZmczJfZnJlZV9mdWxsX2RpcmVudChmZCk7CiAJCQl9CiAJCX0KKwkJamZmczJfY2xlYXJfeGF0dHJfc3Vic3lzdGVtKGMpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9jb21wci5jIGIvZnMvamZmczIvY29tcHIuYwppbmRleCBlNzk0NGU2Li43MDAxYmEyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9jb21wci5jCisrKyBiL2ZzL2pmZnMyL2NvbXByLmMKQEAgLTQxMiw3ICs0MTIsNyBAQAogICAgICAgICAgICAgICAgIGtmcmVlKGNvbXByYnVmKTsKIH0KIAotaW50IGpmZnMyX2NvbXByZXNzb3JzX2luaXQodm9pZCkKK2ludCBfX2luaXQgamZmczJfY29tcHJlc3NvcnNfaW5pdCh2b2lkKQogewogLyogUmVnaXN0ZXJpbmcgY29tcHJlc3NvcnMgKi8KICNpZmRlZiBDT05GSUdfSkZGUzJfWkxJQgpkaWZmIC0tZ2l0IGEvZnMvamZmczIvY29tcHIuaCBiL2ZzL2pmZnMyL2NvbXByLmgKaW5kZXggYTc3ZTgzMC4uNTA5YjhiMSAxMDA2NDQKLS0tIGEvZnMvamZmczIvY29tcHIuaAorKysgYi9mcy9qZmZzMi9jb21wci5oCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+Ci0jaW5jbHVkZSA8bGludXgvamZmczJfZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L2pmZnMyX2ZzX3NiLmg+CisjaW5jbHVkZSAiamZmczJfZnNfaS5oIgorI2luY2x1ZGUgImpmZnMyX2ZzX3NiLmgiCiAjaW5jbHVkZSAibm9kZWxpc3QuaCIKIAogI2RlZmluZSBKRkZTMl9SVUJJTk1JUFNfUFJJT1JJVFkgMTAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2RlYnVnLmMgYi9mcy9qZmZzMi9kZWJ1Zy5jCmluZGV4IDFmZTE3ZGUuLjcyYjRmYzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2RlYnVnLmMKKysrIGIvZnMvamZmczIvZGVidWcuYwpAQCAtMTkyLDEzICsxOTIsMTMgQEAKIAkJZWxzZQogCQkJbXlfZGlydHlfc2l6ZSArPSB0b3RsZW47CiAKLQkJaWYgKCghcmVmMi0+bmV4dF9waHlzKSAhPSAocmVmMiA9PSBqZWItPmxhc3Rfbm9kZSkpIHsKLQkJCUpGRlMyX0VSUk9SKCJub2RlX3JlZiBmb3Igbm9kZSBhdCAlIzA4eCAobWVtICVwKSBoYXMgbmV4dF9waHlzIGF0ICUjMDh4IChtZW0gJXApLCBsYXN0X25vZGUgaXMgYXQgJSMwOHggKG1lbSAlcCkuXG4iLAotCQkJCXJlZl9vZmZzZXQocmVmMiksIHJlZjIsIHJlZl9vZmZzZXQocmVmMi0+bmV4dF9waHlzKSwgcmVmMi0+bmV4dF9waHlzLAotCQkJCXJlZl9vZmZzZXQoamViLT5sYXN0X25vZGUpLCBqZWItPmxhc3Rfbm9kZSk7CisJCWlmICgoIXJlZl9uZXh0KHJlZjIpKSAhPSAocmVmMiA9PSBqZWItPmxhc3Rfbm9kZSkpIHsKKwkJCUpGRlMyX0VSUk9SKCJub2RlX3JlZiBmb3Igbm9kZSBhdCAlIzA4eCAobWVtICVwKSBoYXMgbmV4dCBhdCAlIzA4eCAobWVtICVwKSwgbGFzdF9ub2RlIGlzIGF0ICUjMDh4IChtZW0gJXApLlxuIiwKKwkJCQkgICAgcmVmX29mZnNldChyZWYyKSwgcmVmMiwgcmVmX29mZnNldChyZWZfbmV4dChyZWYyKSksIHJlZl9uZXh0KHJlZjIpLAorCQkJCSAgICByZWZfb2Zmc2V0KGplYi0+bGFzdF9ub2RlKSwgamViLT5sYXN0X25vZGUpOwogCQkJZ290byBlcnJvcjsKIAkJfQotCQlyZWYyID0gcmVmMi0+bmV4dF9waHlzOworCQlyZWYyID0gcmVmX25leHQocmVmMik7CiAJfQogCiAJaWYgKG15X3VzZWRfc2l6ZSAhPSBqZWItPnVzZWRfc2l6ZSkgewpAQCAtMjY4LDkgKzI2OCw5IEBACiAJfQogCiAJcHJpbnRrKEpGRlMyX0RCRyk7Ci0JZm9yIChyZWYgPSBqZWItPmZpcnN0X25vZGU7IDsgcmVmID0gcmVmLT5uZXh0X3BoeXMpIHsKKwlmb3IgKHJlZiA9IGplYi0+Zmlyc3Rfbm9kZTsgOyByZWYgPSByZWZfbmV4dChyZWYpKSB7CiAJCXByaW50aygiJSMwOHgoJSN4KSIsIHJlZl9vZmZzZXQocmVmKSwgcmVmLT5fX3RvdGxlbik7Ci0JCWlmIChyZWYtPm5leHRfcGh5cykKKwkJaWYgKHJlZl9uZXh0KHJlZikpCiAJCQlwcmludGsoIi0+Iik7CiAJCWVsc2UKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZGVidWcuaCBiL2ZzL2pmZnMyL2RlYnVnLmgKaW5kZXggMTYyYWY2ZC4uNWZhNDk0YSAxMDA2NDQKLS0tIGEvZnMvamZmczIvZGVidWcuaAorKysgYi9mcy9qZmZzMi9kZWJ1Zy5oCkBAIC0xNzEsNiArMTcxLDEyIEBACiAjZGVmaW5lIGRiZ19tZW1hbGxvYyhmbXQsIC4uLikKICNlbmRpZgogCisvKiBXYXRjaCB0aGUgWEFUVFIgc3Vic3lzdGVtICovCisjaWZkZWYgSkZGUzJfREJHX1hBVFRSX01FU1NBR0VTCisjZGVmaW5lIGRiZ194YXR0cihmbXQsIC4uLikgIEpGRlMyX0RFQlVHKGZtdCwgIyNfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lIGRiZ194YXR0cihmbXQsIC4uLikKKyNlbmRpZiAKIAogLyogIlNhbml0eSIgY2hlY2tzICovCiB2b2lkCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jCmluZGV4IDhiYzdhNTAuLmVkZDgzNzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2Rpci5jCisrKyBiL2ZzL2pmZnMyL2Rpci5jCkBAIC0xNyw4ICsxNyw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+Ci0jaW5jbHVkZSA8bGludXgvamZmczJfZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L2pmZnMyX2ZzX3NiLmg+CisjaW5jbHVkZSAiamZmczJfZnNfaS5oIgorI2luY2x1ZGUgImpmZnMyX2ZzX3NiLmgiCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgIm5vZGVsaXN0LmgiCiAKQEAgLTU3LDcgKzU3LDEyIEBACiAJLnJtZGlyID0JamZmczJfcm1kaXIsCiAJLm1rbm9kID0JamZmczJfbWtub2QsCiAJLnJlbmFtZSA9CWpmZnMyX3JlbmFtZSwKKwkucGVybWlzc2lvbiA9CWpmZnMyX3Blcm1pc3Npb24sCiAJLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyLAorCS5zZXR4YXR0ciA9CWpmZnMyX3NldHhhdHRyLAorCS5nZXR4YXR0ciA9CWpmZnMyX2dldHhhdHRyLAorCS5saXN0eGF0dHIgPQlqZmZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyID0JamZmczJfcmVtb3ZleGF0dHIKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTc4LDYgKzgzLDkgQEAKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9sb29rdXAoKVxuIikpOwogCisJaWYgKHRhcmdldC0+ZF9uYW1lLmxlbiA+IEpGRlMyX01BWF9OQU1FX0xFTikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CisKIAlkaXJfZiA9IEpGRlMyX0lOT0RFX0lORk8oZGlyX2kpOwogCWMgPSBKRkZTMl9TQl9JTkZPKGRpcl9pLT5pX3NiKTsKIApAQCAtMjA2LDEyICsyMTQsMTUgQEAKIAlyZXQgPSBqZmZzMl9kb19jcmVhdGUoYywgZGlyX2YsIGYsIHJpLAogCQkJICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuKTsKIAotCWlmIChyZXQpIHsKLQkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwotCQlpcHV0KGlub2RlKTsKLQkJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBqZmZzMl9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXJfaSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCXJldCA9IGpmZnMyX2luaXRfYWNsKGlub2RlLCBkaXJfaSk7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOwogCiAJZGlyX2ktPmlfbXRpbWUgPSBkaXJfaS0+aV9jdGltZSA9IElUSU1FKGplMzJfdG9fY3B1KHJpLT5jdGltZSkpOwogCkBAIC0yMjEsNiArMjMyLDEyIEBACiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2NyZWF0ZTogQ3JlYXRlZCBpbm8gIyVsdSB3aXRoIG1vZGUgJW8sIG5saW5rICVkKCVkKS4gbnJwYWdlcyAlbGRcbiIsCiAJCSAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9tb2RlLCBpbm9kZS0+aV9ubGluaywgZi0+aW5vY2FjaGUtPm5saW5rLCBpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKSk7CiAJcmV0dXJuIDA7CisKKyBmYWlsOgorCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKKwlpcHV0KGlub2RlKTsKKwlqZmZzMl9mcmVlX3Jhd19pbm9kZShyaSk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjkxLDcgKzMwOCw3IEBACiAJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuOwogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7CiAJaW50IG5hbWVsZW47Ci0JdWludDMyX3QgYWxsb2NsZW4sIHBoeXNfb2ZzOworCXVpbnQzMl90IGFsbG9jbGVuOwogCWludCByZXQsIHRhcmdldGxlbiA9IHN0cmxlbih0YXJnZXQpOwogCiAJLyogRklYTUU6IElmIHlvdSBjYXJlLiBXZSdkIG5lZWQgdG8gdXNlIGZyYWdzIGZvciB0aGUgdGFyZ2V0CkBAIC0zMTAsOCArMzI3LDggQEAKIAkgKiBKdXN0IHRoZSBub2RlIHdpbGwgZG8gZm9yIG5vdywgdGhvdWdoCiAJICovCiAJbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgdGFyZ2V0bGVuLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKLQkJCQlBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSArIHRhcmdldGxlbiwgJmFsbG9jbGVuLAorCQkJCSAgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCiAJaWYgKHJldCkgewogCQlqZmZzMl9mcmVlX3Jhd19pbm9kZShyaSk7CkBAIC0zMzksNyArMzU2LDcgQEAKIAlyaS0+ZGF0YV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCB0YXJnZXQsIHRhcmdldGxlbikpOwogCXJpLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJpLCBzaXplb2YoKnJpKS04KSk7CiAKLQlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCB0YXJnZXQsIHRhcmdldGxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgdGFyZ2V0LCB0YXJnZXRsZW4sIEFMTE9DX05PUk1BTCk7CiAKIAlqZmZzMl9mcmVlX3Jhd19pbm9kZShyaSk7CiAKQEAgLTM3MSw4ICszODgsMjAgQEAKIAl1cCgmZi0+c2VtKTsKIAogCWpmZnMyX2NvbXBsZXRlX3Jlc2VydmF0aW9uKGMpOwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCi0JCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKKworCXJldCA9IGpmZnMyX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpcl9pKTsKKwlpZiAocmV0KSB7CisJCWpmZnMyX2NsZWFyX2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gamZmczJfaW5pdF9hY2woaW5vZGUsIGRpcl9pKTsKKwlpZiAocmV0KSB7CisJCWpmZnMyX2NsZWFyX2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZhbGxvY2xlbiwKKwkJCQkgIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CiAJaWYgKHJldCkgewogCQkvKiBFZXAuICovCiAJCWpmZnMyX2NsZWFyX2lub2RlKGlub2RlKTsKQEAgLTQwNCw3ICs0MzMsNyBAQAogCXJkLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJkLCBzaXplb2YoKnJkKS04KSk7CiAJcmQtPm5hbWVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbmFtZWxlbikpOwogCi0JZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lbGVuLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIEFMTE9DX05PUk1BTCk7CiAKIAlpZiAoSVNfRVJSKGZkKSkgewogCQkvKiBkaXJlbnQgZmFpbGVkIHRvIHdyaXRlLiBEZWxldGUgdGhlIGlub2RlIG5vcm1hbGx5CkBAIC00NDIsNyArNDcxLDcgQEAKIAlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm47CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKIAlpbnQgbmFtZWxlbjsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnM7CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAogCW1vZGUgfD0gU19JRkRJUjsKQEAgLTQ1Nyw4ICs0ODYsOCBAQAogCSAqIEp1c3QgdGhlIG5vZGUgd2lsbCBkbyBmb3Igbm93LCB0aG91Z2gKIAkgKi8KIAluYW1lbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSksICZwaHlzX29mcywgJmFsbG9jbGVuLCBBTExPQ19OT1JNQUwsCi0JCQkJSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpLCAmYWxsb2NsZW4sIEFMTE9DX05PUk1BTCwKKwkJCQkgIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAKIAlpZiAocmV0KSB7CiAJCWpmZnMyX2ZyZWVfcmF3X2lub2RlKHJpKTsKQEAgLTQ4Myw3ICs1MTIsNyBAQAogCXJpLT5kYXRhX2NyYyA9IGNwdV90b19qZTMyKDApOwogCXJpLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJpLCBzaXplb2YoKnJpKS04KSk7CiAKLQlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCBOVUxMLCAwLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCBOVUxMLCAwLCBBTExPQ19OT1JNQUwpOwogCiAJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOwogCkBAIC01MDEsOCArNTMwLDIwIEBACiAJdXAoJmYtPnNlbSk7CiAKIAlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZwaHlzX29mcywgJmFsbG9jbGVuLAotCQkJCUFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CisKKwlyZXQgPSBqZmZzMl9pbml0X3NlY3VyaXR5KGlub2RlLCBkaXJfaSk7CisJaWYgKHJldCkgeworCQlqZmZzMl9jbGVhcl9pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXQ7CisJfQorCXJldCA9IGpmZnMyX2luaXRfYWNsKGlub2RlLCBkaXJfaSk7CisJaWYgKHJldCkgeworCQlqZmZzMl9jbGVhcl9pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmYWxsb2NsZW4sCisJCQkJICBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOwogCWlmIChyZXQpIHsKIAkJLyogRWVwLiAqLwogCQlqZmZzMl9jbGVhcl9pbm9kZShpbm9kZSk7CkBAIC01MzQsNyArNTc1LDcgQEAKIAlyZC0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCktOCkpOwogCXJkLT5uYW1lX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4pKTsKIAotCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbmFtZWxlbiwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lbGVuLCBBTExPQ19OT1JNQUwpOwogCiAJaWYgKElTX0VSUihmZCkpIHsKIAkJLyogZGlyZW50IGZhaWxlZCB0byB3cml0ZS4gRGVsZXRlIHRoZSBpbm9kZSBub3JtYWxseQpAQCAtNTg4LDEyICs2MjksMTIgQEAKIAlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm47CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKIAlpbnQgbmFtZWxlbjsKLQlqaW50MTZfdCBkZXY7CisJdW5pb24gamZmczJfZGV2aWNlX25vZGUgZGV2OwogCWludCBkZXZsZW4gPSAwOwotCXVpbnQzMl90IGFsbG9jbGVuLCBwaHlzX29mczsKKwl1aW50MzJfdCBhbGxvY2xlbjsKIAlpbnQgcmV0OwogCi0JaWYgKCFvbGRfdmFsaWRfZGV2KHJkZXYpKQorCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyaSA9IGpmZnMyX2FsbG9jX3Jhd19pbm9kZSgpOwpAQCAtNjAyLDE3ICs2NDMsMTUgQEAKIAogCWMgPSBKRkZTMl9TQl9JTkZPKGRpcl9pLT5pX3NiKTsKIAotCWlmIChTX0lTQkxLKG1vZGUpIHx8IFNfSVNDSFIobW9kZSkpIHsKLQkJZGV2ID0gY3B1X3RvX2plMTYob2xkX2VuY29kZV9kZXYocmRldikpOwotCQlkZXZsZW4gPSBzaXplb2YoZGV2KTsKLQl9CisJaWYgKFNfSVNCTEsobW9kZSkgfHwgU19JU0NIUihtb2RlKSkKKwkJZGV2bGVuID0gamZmczJfZW5jb2RlX2RldigmZGV2LCByZGV2KTsKIAogCS8qIFRyeSB0byByZXNlcnZlIGVub3VnaCBzcGFjZSBmb3IgYm90aCBub2RlIGFuZCBkaXJlbnQuCiAJICogSnVzdCB0aGUgbm9kZSB3aWxsIGRvIGZvciBub3csIHRob3VnaAogCSAqLwogCW5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47Ci0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSArIGRldmxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCi0JCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyBkZXZsZW4sICZhbGxvY2xlbiwKKwkJCQkgIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAogCWlmIChyZXQpIHsKIAkJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOwpAQCAtNjM5LDcgKzY3OCw3IEBACiAJcmktPmRhdGFfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJmRldiwgZGV2bGVuKSk7CiAJcmktPm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgcmksIHNpemVvZigqcmkpLTgpKTsKIAotCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIChjaGFyICopJmRldiwgZGV2bGVuLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCAoY2hhciAqKSZkZXYsIGRldmxlbiwgQUxMT0NfTk9STUFMKTsKIAogCWpmZnMyX2ZyZWVfcmF3X2lub2RlKHJpKTsKIApAQCAtNjU3LDggKzY5NiwyMCBAQAogCXVwKCZmLT5zZW0pOwogCiAJamZmczJfY29tcGxldGVfcmVzZXJ2YXRpb24oYyk7Ci0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKLQkJCQlBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOworCisJcmV0ID0gamZmczJfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXQgPSBqZmZzMl9pbml0X2FjbChpbm9kZSwgZGlyX2kpOworCWlmIChyZXQpIHsKKwkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJmFsbG9jbGVuLAorCQkJCSAgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAlpZiAocmV0KSB7CiAJCS8qIEVlcC4gKi8KIAkJamZmczJfY2xlYXJfaW5vZGUoaW5vZGUpOwpAQCAtNjkzLDcgKzc0NCw3IEBACiAJcmQtPm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgcmQsIHNpemVvZigqcmQpLTgpKTsKIAlyZC0+bmFtZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCBkZW50cnktPmRfbmFtZS5uYW1lLCBuYW1lbGVuKSk7CiAKLQlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4sIHBoeXNfb2ZzLCBBTExPQ19OT1JNQUwpOworCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgZGVudHJ5LT5kX25hbWUubmFtZSwgbmFtZWxlbiwgQUxMT0NfTk9STUFMKTsKIAogCWlmIChJU19FUlIoZmQpKSB7CiAJCS8qIGRpcmVudCBmYWlsZWQgdG8gd3JpdGUuIERlbGV0ZSB0aGUgaW5vZGUgbm9ybWFsbHkKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2VyYXNlLmMgYi9mcy9qZmZzMi9lcmFzZS5jCmluZGV4IGRhZDY4ZmQuLjE4NjJlOGIgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2VyYXNlLmMKKysrIGIvZnMvamZmczIvZXJhc2UuYwpAQCAtMzAsNyArMzAsNiBAQAogI2VuZGlmCiBzdGF0aWMgdm9pZCBqZmZzMl9lcmFzZV9mYWlsZWQoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsIHVpbnQzMl90IGJhZF9vZmZzZXQpOwogc3RhdGljIHZvaWQgamZmczJfZXJhc2Vfc3VjY2VlZGVkKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKTsKLXN0YXRpYyB2b2lkIGpmZnMyX2ZyZWVfYWxsX25vZGVfcmVmcyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYik7CiBzdGF0aWMgdm9pZCBqZmZzMl9tYXJrX2VyYXNlZF9ibG9jayhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYik7CiAKIHN0YXRpYyB2b2lkIGpmZnMyX2VyYXNlX2Jsb2NrKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLApAQCAtMTM2LDcgKzEzNSw3IEBACiAJCQljLT51c2VkX3NpemUgLT0gamViLT51c2VkX3NpemU7CiAJCQljLT5kaXJ0eV9zaXplIC09IGplYi0+ZGlydHlfc2l6ZTsKIAkJCWplYi0+d2FzdGVkX3NpemUgPSBqZWItPnVzZWRfc2l6ZSA9IGplYi0+ZGlydHlfc2l6ZSA9IGplYi0+ZnJlZV9zaXplID0gMDsKLQkJCWpmZnMyX2ZyZWVfYWxsX25vZGVfcmVmcyhjLCBqZWIpOworCQkJamZmczJfZnJlZV9qZWJfbm9kZV9yZWZzKGMsIGplYik7CiAJCQlsaXN0X2FkZCgmamViLT5saXN0LCAmYy0+ZXJhc2luZ19saXN0KTsKIAkJCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCkBAIC0yMzEsNiArMjMwLDcgQEAKIAkJCSAgIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmtlZCBsaXN0LiBTdGFzaCBpdCBhbmQgY29udGludWUKIAkJCSAgIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAqLwogCQkJaWMgPSAoc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICopKCpwcmV2KTsKKwkJCUJVR19PTihpYy0+Y2xhc3MgIT0gUkFXTk9ERV9DTEFTU19JTk9ERV9DQUNIRSk7CiAJCQlwcmV2ID0gJmljLT5ub2RlczsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0yODMsMjIgKzI4MywyNyBAQAogCQlqZmZzMl9kZWxfaW5vX2NhY2hlKGMsIGljKTsKIH0KIAotc3RhdGljIHZvaWQgamZmczJfZnJlZV9hbGxfbm9kZV9yZWZzKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQordm9pZCBqZmZzMl9mcmVlX2plYl9ub2RlX3JlZnMoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCiB7Ci0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmVmOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmJsb2NrLCAqcmVmOwogCUQxKHByaW50ayhLRVJOX0RFQlVHICJGcmVlaW5nIGFsbCBub2RlIHJlZnMgZm9yIGVyYXNlYmxvY2sgb2Zmc2V0IDB4JTA4eFxuIiwgamViLT5vZmZzZXQpKTsKLQl3aGlsZShqZWItPmZpcnN0X25vZGUpIHsKLQkJcmVmID0gamViLT5maXJzdF9ub2RlOwotCQlqZWItPmZpcnN0X25vZGUgPSByZWYtPm5leHRfcGh5czsKIAotCQkvKiBSZW1vdmUgZnJvbSB0aGUgaW5vZGUtbGlzdCAqLwotCQlpZiAocmVmLT5uZXh0X2luX2lubykKKwlibG9jayA9IHJlZiA9IGplYi0+Zmlyc3Rfbm9kZTsKKworCXdoaWxlIChyZWYpIHsKKwkJaWYgKHJlZi0+Zmxhc2hfb2Zmc2V0ID09IFJFRl9MSU5LX05PREUpIHsKKwkJCXJlZiA9IHJlZi0+bmV4dF9pbl9pbm87CisJCQlqZmZzMl9mcmVlX3JlZmJsb2NrKGJsb2NrKTsKKwkJCWJsb2NrID0gcmVmOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHJlZi0+Zmxhc2hfb2Zmc2V0ICE9IFJFRl9FTVBUWV9OT0RFICYmIHJlZi0+bmV4dF9pbl9pbm8pCiAJCQlqZmZzMl9yZW1vdmVfbm9kZV9yZWZzX2Zyb21faW5vX2xpc3QoYywgcmVmLCBqZWIpOwogCQkvKiBlbHNlIGl0IHdhcyBhIG5vbi1pbm9kZSBub2RlIG9yIGFscmVhZHkgcmVtb3ZlZCwgc28gZG9uJ3QgYm90aGVyICovCiAKLQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmVmKTsKKwkJcmVmKys7CiAJfQotCWplYi0+bGFzdF9ub2RlID0gTlVMTDsKKwlqZWItPmZpcnN0X25vZGUgPSBqZWItPmxhc3Rfbm9kZSA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbnQgamZmczJfYmxvY2tfY2hlY2tfZXJhc2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsIHVpbnQzMl90ICpiYWRfb2Zmc2V0KQpAQCAtMzUxLDcgKzM1Niw2IEBACiAKIHN0YXRpYyB2b2lkIGpmZnMyX21hcmtfZXJhc2VkX2Jsb2NrKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQogewotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm1hcmtlcl9yZWYgPSBOVUxMOwogCXNpemVfdCByZXRsZW47CiAJaW50IHJldDsKIAl1aW50MzJfdCBiYWRfb2Zmc2V0OwpAQCAtMzczLDEyICszNzcsOCBAQAogCQkJCWdvdG8gZmlsZWJhZDsKIAkJfQogCi0JCWplYi0+Zmlyc3Rfbm9kZSA9IGplYi0+bGFzdF9ub2RlID0gTlVMTDsKKwkJLyogRXZlcnl0aGluZyBlbHNlIGdvdCB6ZXJvZWQgYmVmb3JlIHRoZSBlcmFzZSAqLwogCQlqZWItPmZyZWVfc2l6ZSA9IGMtPnNlY3Rvcl9zaXplOwotCQlqZWItPnVzZWRfc2l6ZSA9IDA7Ci0JCWplYi0+ZGlydHlfc2l6ZSA9IDA7Ci0JCWplYi0+d2FzdGVkX3NpemUgPSAwOwotCiAJfSBlbHNlIHsKIAogCQlzdHJ1Y3Qga3ZlYyB2ZWNzWzFdOwpAQCAtMzg4LDExICszODgsNyBAQAogCQkJLnRvdGxlbiA9CWNwdV90b19qZTMyKGMtPmNsZWFubWFya2VyX3NpemUpCiAJCX07CiAKLQkJbWFya2VyX3JlZiA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCQlpZiAoIW1hcmtlcl9yZWYpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBhbGxvY2F0ZSByYXcgbm9kZSByZWYgZm9yIGNsZWFuIG1hcmtlci4gUmVmaWxpbmdcbiIpOwotCQkJZ290byByZWZpbGU7Ci0JCX0KKwkJamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDEpOwogCiAJCW1hcmtlci5oZHJfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJm1hcmtlciwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLTQpKTsKIApAQCAtNDA4LDIxICs0MDQsMTMgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTaG9ydCB3cml0ZSB0byBuZXdseS1lcmFzZWQgYmxvY2sgYXQgMHglMDh4OiBXYW50ZWQgJXpkLCBnb3QgJXpkXG4iLAogCQkJCSAgICAgICBqZWItPm9mZnNldCwgc2l6ZW9mKG1hcmtlciksIHJldGxlbik7CiAKLQkJCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKG1hcmtlcl9yZWYpOwogCQkJZ290byBmaWxlYmFkOwogCQl9CiAKLQkJbWFya2VyX3JlZi0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCQltYXJrZXJfcmVmLT5uZXh0X3BoeXMgPSBOVUxMOwotCQltYXJrZXJfcmVmLT5mbGFzaF9vZmZzZXQgPSBqZWItPm9mZnNldCB8IFJFRl9OT1JNQUw7Ci0JCW1hcmtlcl9yZWYtPl9fdG90bGVuID0gYy0+Y2xlYW5tYXJrZXJfc2l6ZTsKLQotCQlqZWItPmZpcnN0X25vZGUgPSBqZWItPmxhc3Rfbm9kZSA9IG1hcmtlcl9yZWY7Ci0KLQkJamViLT5mcmVlX3NpemUgPSBjLT5zZWN0b3Jfc2l6ZSAtIGMtPmNsZWFubWFya2VyX3NpemU7Ci0JCWplYi0+dXNlZF9zaXplID0gYy0+Y2xlYW5tYXJrZXJfc2l6ZTsKLQkJamViLT5kaXJ0eV9zaXplID0gMDsKLQkJamViLT53YXN0ZWRfc2l6ZSA9IDA7CisJCS8qIEV2ZXJ5dGhpbmcgZWxzZSBnb3QgemVyb2VkIGJlZm9yZSB0aGUgZXJhc2UgKi8KKwkJamViLT5mcmVlX3NpemUgPSBjLT5zZWN0b3Jfc2l6ZTsKKwkJLyogRklYTUUgU3BlY2lhbCBjYXNlIGZvciBjbGVhbm1hcmtlciBpbiBlbXB0eSBibG9jayAqLworCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgamViLT5vZmZzZXQgfCBSRUZfTk9STUFMLCBjLT5jbGVhbm1hcmtlcl9zaXplLCBOVUxMKTsKIAl9CiAKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9maWxlLmMgYi9mcy9qZmZzMi9maWxlLmMKaW5kZXggOWY0MTcxMi4uYmI4ODQ0ZiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZmlsZS5jCisrKyBiL2ZzL2pmZnMyL2ZpbGUuYwpAQCAtNTQsNyArNTQsMTIgQEAKIAogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgamZmczJfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0KIHsKLQkuc2V0YXR0ciA9CWpmZnMyX3NldGF0dHIKKwkucGVybWlzc2lvbiA9CWpmZnMyX3Blcm1pc3Npb24sCisJLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyLAorCS5zZXR4YXR0ciA9CWpmZnMyX3NldHhhdHRyLAorCS5nZXR4YXR0ciA9CWpmZnMyX2dldHhhdHRyLAorCS5saXN0eGF0dHIgPQlqZmZzMl9saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyID0JamZmczJfcmVtb3ZleGF0dHIKIH07CiAKIHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgamZmczJfZmlsZV9hZGRyZXNzX29wZXJhdGlvbnMgPQpAQCAtMTI5LDEzICsxMzQsMTMgQEAKIAkJc3RydWN0IGpmZnMyX3NiX2luZm8gKmMgPSBKRkZTMl9TQl9JTkZPKGlub2RlLT5pX3NiKTsKIAkJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSByaTsKIAkJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmZuOwotCQl1aW50MzJfdCBwaHlzX29mcywgYWxsb2NfbGVuOworCQl1aW50MzJfdCBhbGxvY19sZW47CiAKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgIldyaXRpbmcgbmV3IGhvbGUgZnJhZyAweCV4LTB4JXggYmV0d2VlbiBjdXJyZW50IEVPRiBhbmQgbmV3IHBhZ2VcbiIsCiAJCQkgICh1bnNpZ25lZCBpbnQpaW5vZGUtPmlfc2l6ZSwgcGFnZW9mcykpOwogCi0JCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKHJpKSwgJnBoeXNfb2ZzLCAmYWxsb2NfbGVuLAotCQkJCQlBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CisJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKHJpKSwgJmFsbG9jX2xlbiwKKwkJCQkJICBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCkBAIC0xNjEsNyArMTY2LDcgQEAKIAkJcmkubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcmksIHNpemVvZihyaSktOCkpOwogCQlyaS5kYXRhX2NyYyA9IGNwdV90b19qZTMyKDApOwogCi0JCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgJnJpLCBOVUxMLCAwLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwkJZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCAmcmksIE5VTEwsIDAsIEFMTE9DX05PUk1BTCk7CiAKIAkJaWYgKElTX0VSUihmbikpIHsKIAkJCXJldCA9IFBUUl9FUlIoZm4pOwpAQCAtMjE1LDEyICsyMjAsMjAgQEAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfY29tbWl0X3dyaXRlKCk6IGlubyAjJWx1LCBwYWdlIGF0IDB4JWx4LCByYW5nZSAlZC0lZCwgZmxhZ3MgJWx4XG4iLAogCQkgIGlub2RlLT5pX2lubywgcGctPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQsIHN0YXJ0LCBlbmQsIHBnLT5mbGFncykpOwogCi0JaWYgKCFzdGFydCAmJiBlbmQgPT0gUEFHRV9DQUNIRV9TSVpFKSB7Ci0JCS8qIFdlIG5lZWQgdG8gYXZvaWQgZGVhZGxvY2sgd2l0aCBwYWdlX2NhY2hlX3JlYWQoKSBpbgotCQkgICBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfcGFzcygpLiBTbyB3ZSBoYXZlIHRvIG1hcmsgdGhlCi0JCSAgIHBhZ2UgdXAgdG8gZGF0ZSwgdG8gcHJldmVudCBwYWdlX2NhY2hlX3JlYWQoKSBmcm9tCi0JCSAgIHRyeWluZyB0byByZS1sb2NrIGl0LiAqLwotCQlTZXRQYWdlVXB0b2RhdGUocGcpOworCWlmIChlbmQgPT0gUEFHRV9DQUNIRV9TSVpFKSB7CisJCWlmICghc3RhcnQpIHsKKwkJCS8qIFdlIG5lZWQgdG8gYXZvaWQgZGVhZGxvY2sgd2l0aCBwYWdlX2NhY2hlX3JlYWQoKSBpbgorCQkJICAgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3Bhc3MoKS4gU28gd2UgaGF2ZSB0byBtYXJrIHRoZQorCQkJICAgcGFnZSB1cCB0byBkYXRlLCB0byBwcmV2ZW50IHBhZ2VfY2FjaGVfcmVhZCgpIGZyb20KKwkJCSAgIHRyeWluZyB0byByZS1sb2NrIGl0LiAqLworCQkJU2V0UGFnZVVwdG9kYXRlKHBnKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdoZW4gd3JpdGluZyBvdXQgdGhlIGVuZCBvZiBhIHBhZ2UsIHdyaXRlIG91dCB0aGUgCisJCQkgICBfd2hvbGVfIHBhZ2UuIFRoaXMgaGVscHMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YKKwkJCSAgIG5vZGVzIGluIGZpbGVzIHdoaWNoIGhhdmUgbWFueSBzaG9ydCB3cml0ZXMsIGxpa2UKKwkJCSAgIHN5c2xvZyBmaWxlcy4gKi8KKwkJCXN0YXJ0ID0gYWxpZ25lZF9zdGFydCA9IDA7CisJCX0KIAl9CiAKIAlyaSA9IGpmZnMyX2FsbG9jX3Jhd19pbm9kZSgpOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZnMuYyBiL2ZzL2pmZnMyL2ZzLmMKaW5kZXggMDllNWQxMC4uN2I2YzI0YiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZnMuYworKysgYi9mcy9qZmZzMi9mcy5jCkBAIC0zMywxMSArMzMsMTEgQEAKIAlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOwogCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmk7Ci0JdW5zaWduZWQgc2hvcnQgZGV2OworCXVuaW9uIGpmZnMyX2RldmljZV9ub2RlIGRldjsKIAl1bnNpZ25lZCBjaGFyICptZGF0YSA9IE5VTEw7CiAJaW50IG1kYXRhbGVuID0gMDsKIAl1bnNpZ25lZCBpbnQgaXZhbGlkOwotCXVpbnQzMl90IHBoeXNfb2ZzLCBhbGxvY2xlbjsKKwl1aW50MzJfdCBhbGxvY2xlbjsKIAlpbnQgcmV0OwogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9zZXRhdHRyKCk6IGlubyAjJWx1XG4iLCBpbm9kZS0+aV9pbm8pKTsKIAlyZXQgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKQEAgLTUxLDIwICs1MSwyNCBAQAogCSAgIGl0IG91dCBhZ2FpbiB3aXRoIHRoZSBhcHByb3ByaWF0ZSBkYXRhIGF0dGFjaGVkICovCiAJaWYgKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0NIUihpbm9kZS0+aV9tb2RlKSkgewogCQkvKiBGb3IgdGhlc2UsIHdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdG8gcmVhZCB0aGUgb2xkIG5vZGUgKi8KLQkJZGV2ID0gb2xkX2VuY29kZV9kZXYoaW5vZGUtPmlfcmRldik7CisJCW1kYXRhbGVuID0gamZmczJfZW5jb2RlX2RldigmZGV2LCBpbm9kZS0+aV9yZGV2KTsKIAkJbWRhdGEgPSAoY2hhciAqKSZkZXY7Ci0JCW1kYXRhbGVuID0gc2l6ZW9mKGRldik7CiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9zZXRhdHRyKCk6IFdyaXRpbmcgJWQgYnl0ZXMgb2Yga2Rldl90XG4iLCBtZGF0YWxlbikpOwogCX0gZWxzZSBpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkgeworCQlkb3duKCZmLT5zZW0pOwogCQltZGF0YWxlbiA9IGYtPm1ldGFkYXRhLT5zaXplOwogCQltZGF0YSA9IGttYWxsb2MoZi0+bWV0YWRhdGEtPnNpemUsIEdGUF9VU0VSKTsKLQkJaWYgKCFtZGF0YSkKKwkJaWYgKCFtZGF0YSkgeworCQkJdXAoJmYtPnNlbSk7CiAJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCQlyZXQgPSBqZmZzMl9yZWFkX2Rub2RlKGMsIGYsIGYtPm1ldGFkYXRhLCBtZGF0YSwgMCwgbWRhdGFsZW4pOwogCQlpZiAocmV0KSB7CisJCQl1cCgmZi0+c2VtKTsKIAkJCWtmcmVlKG1kYXRhKTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKwkJdXAoJmYtPnNlbSk7CiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9zZXRhdHRyKCk6IFdyaXRpbmcgJWQgYnl0ZXMgb2Ygc3ltbGluayB0YXJnZXRcbiIsIG1kYXRhbGVuKSk7CiAJfQogCkBAIC03NSw4ICs3OSw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyBtZGF0YWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCi0JCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyBtZGF0YWxlbiwgJmFsbG9jbGVuLAorCQkJCSAgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCWlmIChyZXQpIHsKIAkJamZmczJfZnJlZV9yYXdfaW5vZGUocmkpOwogCQlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlICYgU19JRk1UKSkKQEAgLTEyNyw3ICsxMzEsNyBAQAogCWVsc2UKIAkJcmktPmRhdGFfY3JjID0gY3B1X3RvX2plMzIoMCk7CiAKLQluZXdfbWV0YWRhdGEgPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgbWRhdGEsIG1kYXRhbGVuLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwluZXdfbWV0YWRhdGEgPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgbWRhdGEsIG1kYXRhbGVuLCBBTExPQ19OT1JNQUwpOwogCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQogCQlrZnJlZShtZGF0YSk7CiAKQEAgLTE4MCw3ICsxODQsMTIgQEAKIAogaW50IGpmZnMyX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQogewotCXJldHVybiBqZmZzMl9kb19zZXRhdHRyKGRlbnRyeS0+ZF9pbm9kZSwgaWF0dHIpOworCWludCByYzsKKworCXJjID0gamZmczJfZG9fc2V0YXR0cihkZW50cnktPmRfaW5vZGUsIGlhdHRyKTsKKwlpZiAoIXJjICYmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpKQorCQlyYyA9IGpmZnMyX2FjbF9jaG1vZChkZW50cnktPmRfaW5vZGUpOworCXJldHVybiByYzsKIH0KIAogaW50IGpmZnMyX3N0YXRmcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQpAQCAtMjE5LDYgKzIyOCw3IEBACiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfY2xlYXJfaW5vZGUoKTogaW5vICMlbHUgbW9kZSAlb1xuIiwgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9tb2RlKSk7CiAKKwlqZmZzMl94YXR0cl9kZWxldGVfaW5vZGUoYywgZi0+aW5vY2FjaGUpOwogCWpmZnMyX2RvX2NsZWFyX2lub2RlKGMsIGYpOwogfQogCkBAIC0yMjcsNiArMjM3LDggQEAKIAlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZjsKIAlzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYzsKIAlzdHJ1Y3QgamZmczJfcmF3X2lub2RlIGxhdGVzdF9ub2RlOworCXVuaW9uIGpmZnMyX2RldmljZV9ub2RlIGpkZXY7CisJZGV2X3QgcmRldiA9IDA7CiAJaW50IHJldDsKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9yZWFkX2lub2RlKCk6IGlub2RlLT5pX2lubyA9PSAlbHVcbiIsIGlub2RlLT5pX2lubykpOwpAQCAtMjU4LDcgKzI3MCw2IEBACiAJaW5vZGUtPmlfYmxvY2tzID0gKGlub2RlLT5pX3NpemUgKyA1MTEpID4+IDk7CiAKIAlzd2l0Y2ggKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpIHsKLQkJamludDE2X3QgcmRldjsKIAogCWNhc2UgU19JRkxOSzoKIAkJaW5vZGUtPmlfb3AgPSAmamZmczJfc3ltbGlua19pbm9kZV9vcGVyYXRpb25zOwpAQCAtMjkyLDggKzMwMywxNiBAQAogCWNhc2UgU19JRkJMSzoKIAljYXNlIFNfSUZDSFI6CiAJCS8qIFJlYWQgdGhlIGRldmljZSBudW1iZXJzIGZyb20gdGhlIG1lZGlhICovCisJCWlmIChmLT5tZXRhZGF0YS0+c2l6ZSAhPSBzaXplb2YoamRldi5vbGQpICYmCisJCSAgICBmLT5tZXRhZGF0YS0+c2l6ZSAhPSBzaXplb2YoamRldi5uZXcpKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkRldmljZSBub2RlIGhhcyBzdHJhbmdlIHNpemUgJWRcbiIsIGYtPm1ldGFkYXRhLT5zaXplKTsKKwkJCXVwKCZmLT5zZW0pOworCQkJamZmczJfZG9fY2xlYXJfaW5vZGUoYywgZik7CisJCQltYWtlX2JhZF9pbm9kZShpbm9kZSk7CisJCQlyZXR1cm47CisJCX0KIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgIlJlYWRpbmcgZGV2aWNlIG51bWJlcnMgZnJvbSBmbGFzaFxuIikpOwotCQlpZiAoamZmczJfcmVhZF9kbm9kZShjLCBmLCBmLT5tZXRhZGF0YSwgKGNoYXIgKikmcmRldiwgMCwgc2l6ZW9mKHJkZXYpKSA8IDApIHsKKwkJaWYgKGpmZnMyX3JlYWRfZG5vZGUoYywgZiwgZi0+bWV0YWRhdGEsIChjaGFyICopJmpkZXYsIDAsIGYtPm1ldGFkYXRhLT5zaXplKSA8IDApIHsKIAkJCS8qIEVlcCAqLwogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJSZWFkIGRldmljZSBudW1iZXJzIGZvciBpbm9kZSAlbHUgZmFpbGVkXG4iLCAodW5zaWduZWQgbG9uZylpbm9kZS0+aV9pbm8pOwogCQkJdXAoJmYtPnNlbSk7CkBAIC0zMDEsMTIgKzMyMCwxNSBAQAogCQkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCQkJcmV0dXJuOwogCQl9CisJCWlmIChmLT5tZXRhZGF0YS0+c2l6ZSA9PSBzaXplb2YoamRldi5vbGQpKQorCQkJcmRldiA9IG9sZF9kZWNvZGVfZGV2KGplMTZfdG9fY3B1KGpkZXYub2xkKSk7CisJCWVsc2UKKwkJCXJkZXYgPSBuZXdfZGVjb2RlX2RldihqZTMyX3RvX2NwdShqZGV2Lm5ldykpOwogCiAJY2FzZSBTX0lGU09DSzoKIAljYXNlIFNfSUZJRk86CiAJCWlub2RlLT5pX29wID0gJmpmZnMyX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLAotCQkJCSAgIG9sZF9kZWNvZGVfZGV2KChqZTE2X3RvX2NwdShyZGV2KSkpKTsKKwkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCByZGV2KTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNDkyLDYgKzUxNCw4IEBACiAJfQogCW1lbXNldChjLT5pbm9jYWNoZV9saXN0LCAwLCBJTk9DQUNIRV9IQVNIU0laRSAqIHNpemVvZihzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKikpOwogCisJamZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oYyk7CisKIAlpZiAoKHJldCA9IGpmZnMyX2RvX21vdW50X2ZzKGMpKSkKIAkJZ290byBvdXRfaW5vaGFzaDsKIApAQCAtNTI2LDYgKzU1MCw3IEBACiAJZWxzZQogCQlrZnJlZShjLT5ibG9ja3MpOwogIG91dF9pbm9oYXNoOgorCWpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShjKTsKIAlrZnJlZShjLT5pbm9jYWNoZV9saXN0KTsKICBvdXRfd2J1ZjoKIAlqZmZzMl9mbGFzaF9jbGVhbnVwKGMpOwpAQCAtNjM5LDEzICs2NjQsNiBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQkvKiBhZGQgc2V0dXBzIGZvciBvdGhlciBiaXphcnJlIGZsYXNoZXMgaGVyZS4uLiAqLwotCWlmIChqZmZzMl9ub3JfZWNjKGMpKSB7Ci0JCXJldCA9IGpmZnMyX25vcl9lY2NfZmxhc2hfc2V0dXAoYyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCS8qIGFuZCBEYXRhZmxhc2ggKi8KIAlpZiAoamZmczJfZGF0YWZsYXNoKGMpKSB7CiAJCXJldCA9IGpmZnMyX2RhdGFmbGFzaF9zZXR1cChjKTsKQEAgLTY2OSwxMSArNjg3LDYgQEAKIAkJamZmczJfbmFuZF9mbGFzaF9jbGVhbnVwKGMpOwogCX0KIAotCS8qIGFkZCBjbGVhbnVwcyBmb3Igb3RoZXIgYml6YXJyZSBmbGFzaGVzIGhlcmUuLi4gKi8KLQlpZiAoamZmczJfbm9yX2VjYyhjKSkgewotCQlqZmZzMl9ub3JfZWNjX2ZsYXNoX2NsZWFudXAoYyk7Ci0JfQotCiAJLyogYW5kIERhdGFGbGFzaCAqLwogCWlmIChqZmZzMl9kYXRhZmxhc2goYykpIHsKIAkJamZmczJfZGF0YWZsYXNoX2NsZWFudXAoYyk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9nYy5jIGIvZnMvamZmczIvZ2MuYwppbmRleCBmOWZmZWNlLi40NzdjNTI2IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9nYy5jCisrKyBiL2ZzL2pmZnMyL2djLmMKQEAgLTEyNSw2ICsxMjUsNyBAQAogCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CiAJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3OwogCWludCByZXQgPSAwLCBpbnVtLCBubGluazsKKwlpbnQgeGF0dHIgPSAwOwogCiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmYy0+YWxsb2Nfc2VtKSkKIAkJcmV0dXJuIC1FSU5UUjsKQEAgLTEzOCw3ICsxMzksNyBAQAogCQkgICB0aGUgbm9kZSBDUkNzIGV0Yy4gRG8gaXQgbm93LiAqLwogCiAJCS8qIGNoZWNrZWRfaW5vIGlzIHByb3RlY3RlZCBieSB0aGUgYWxsb2Nfc2VtICovCi0JCWlmIChjLT5jaGVja2VkX2lubyA+IGMtPmhpZ2hlc3RfaW5vKSB7CisJCWlmIChjLT5jaGVja2VkX2lubyA+IGMtPmhpZ2hlc3RfaW5vICYmIHhhdHRyKSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJDaGVja2VkIGFsbCBpbm9kZXMgYnV0IHN0aWxsIDB4JXggYnl0ZXMgb2YgdW5jaGVja2VkIHNwYWNlP1xuIiwKIAkJCSAgICAgICBjLT51bmNoZWNrZWRfc2l6ZSk7CiAJCQlqZmZzMl9kYmdfZHVtcF9ibG9ja19saXN0c19ub2xvY2soYyk7CkBAIC0xNDgsNiArMTQ5LDkgQEAKIAogCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAorCQlpZiAoIXhhdHRyKQorCQkJeGF0dHIgPSBqZmZzMl92ZXJpZnlfeGF0dHIoYyk7CisKIAkJc3Bpbl9sb2NrKCZjLT5pbm9jYWNoZV9sb2NrKTsKIAogCQlpYyA9IGpmZnMyX2dldF9pbm9fY2FjaGUoYywgYy0+Y2hlY2tlZF9pbm8rKyk7CkBAIC0xODEsNiArMTg1LDEwIEBACiAJCQkgICBhbmQgdHJpZ2dlciB0aGUgQlVHKCkgYWJvdmUgd2hpbGUgd2UgaGF2ZW4ndCB5ZXQKIAkJCSAgIGZpbmlzaGVkIGNoZWNraW5nIGFsbCBpdHMgbm9kZXMgKi8KIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJXYWl0aW5nIGZvciBpbm8gIyV1IHRvIGZpbmlzaCByZWFkaW5nXG4iLCBpYy0+aW5vKSk7CisJCQkvKiBXZSBuZWVkIHRvIGNvbWUgYmFjayBhZ2FpbiBmb3IgdGhlIF9zYW1lXyBpbm9kZS4gV2UndmUKKwkJCSBtYWRlIG5vIHByb2dyZXNzIGluIHRoaXMgY2FzZSwgYnV0IHRoYXQgc2hvdWxkIGJlIE9LICovCisJCQljLT5jaGVja2VkX2luby0tOworCiAJCQl1cCgmYy0+YWxsb2Nfc2VtKTsKIAkJCXNsZWVwX29uX3NwaW51bmxvY2soJmMtPmlub2NhY2hlX3dxLCAmYy0+aW5vY2FjaGVfbG9jayk7CiAJCQlyZXR1cm4gMDsKQEAgLTIzMSw3ICsyMzksNyBAQAogCiAJd2hpbGUocmVmX29ic29sZXRlKHJhdykpIHsKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgIk5vZGUgYXQgMHglMDh4IGlzIG9ic29sZXRlLi4uIHNraXBwaW5nXG4iLCByZWZfb2Zmc2V0KHJhdykpKTsKLQkJcmF3ID0gcmF3LT5uZXh0X3BoeXM7CisJCXJhdyA9IHJlZl9uZXh0KHJhdyk7CiAJCWlmICh1bmxpa2VseSghcmF3KSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZWVwLiBFbmQgb2YgcmF3IGxpc3Qgd2hpbGUgc3RpbGwgc3VwcG9zZWRseSBub2RlcyB0byBHQ1xuIik7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJlcmFzZSBibG9jayBhdCAweCUwOHguIGZyZWVfc2l6ZSAweCUwOHgsIGRpcnR5X3NpemUgMHglMDh4LCB1c2VkX3NpemUgMHglMDh4XG4iLApAQCAtMjQ4LDE2ICsyNTYsMzcgQEAKIAogCWlmICghcmF3LT5uZXh0X2luX2lubykgewogCQkvKiBJbm9kZS1sZXNzIG5vZGUuIENsZWFuIG1hcmtlciwgc25hcHNob3Qgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCAqLwotCQkvKiBGSVhNRTogSWYgaXQncyBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjb3BpZWQsIGluY2x1ZGluZyBzb21ldGhpbmcKLQkJICAgd2UgZG9uJ3QgZ3JvayB0aGF0IGhhcyBKRkZTMl9OT0RFVFlQRV9SV0NPTVBBVF9DT1BZLCB3ZSBzaG91bGQgZG8gc28gKi8KIAkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0JCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByYXcpOworCQlpZiAocmVmX2ZsYWdzKHJhdykgPT0gUkVGX1BSSVNUSU5FKSB7CisJCQkvKiBJdCdzIGFuIHVua25vd24gbm9kZSB3aXRoIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfQ09QWSAqLworCQkJamZmczJfZ2FyYmFnZV9jb2xsZWN0X3ByaXN0aW5lKGMsIE5VTEwsIHJhdyk7CisJCX0gZWxzZSB7CisJCQkvKiBKdXN0IG1hcmsgaXQgb2Jzb2xldGUgKi8KKwkJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByYXcpOworCQl9CiAJCXVwKCZjLT5hbGxvY19zZW0pOwogCQlnb3RvIGVyYXNlaXRfbG9jazsKIAl9CiAKIAlpYyA9IGpmZnMyX3Jhd19yZWZfdG9faWMocmF3KTsKIAorI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorCS8qIFdoZW4gJ2ljJyByZWZlcnMgeGF0dHJfZGF0dW0veGF0dHJfcmVmLCB0aGlzIG5vZGUgaXMgR0NlZCBhcyB4YXR0ci4KKwkgKiBXZSBjYW4gZGVjaWRlIHdoZXRoZXIgdGhpcyBub2RlIGlzIGlub2RlIG9yIHhhdHRyIGJ5IGljLT5jbGFzcy4gICAgICovCisJaWYgKGljLT5jbGFzcyA9PSBSQVdOT0RFX0NMQVNTX1hBVFRSX0RBVFVNCisJICAgIHx8IGljLT5jbGFzcyA9PSBSQVdOT0RFX0NMQVNTX1hBVFRSX1JFRikgeworCQlCVUdfT04ocmF3LT5uZXh0X2luX2lubyAhPSAodm9pZCAqKWljKTsKKwkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwkJaWYgKGljLT5jbGFzcyA9PSBSQVdOT0RFX0NMQVNTX1hBVFRSX0RBVFVNKSB7CisJCQlyZXQgPSBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfZGF0dW0oYywgKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqKWljKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9yZWYoYywgKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKilpYyk7CisJCX0KKwkJZ290byByZWxlYXNlX3NlbTsKKwl9CisjZW5kaWYKKwogCS8qIFdlIG5lZWQgdG8gaG9sZCB0aGUgaW5vY2FjaGUuIEVpdGhlciB0aGUgZXJhc2VfY29tcGxldGlvbl9sb2NrIG9yCiAJICAgdGhlIGlub2NhY2hlX2xvY2sgYXJlIHN1ZmZpY2llbnQ7IHdlIHRyYWRlIGRvd24gc2luY2UgdGhlIGlub2NhY2hlX2xvY2sKIAkgICBjYXVzZXMgbGVzcyBjb250ZW50aW9uLiAqLwpAQCAtNDk5LDcgKzUyOCw2IEBACiAJCQkJCSAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3KQogewogCXVuaW9uIGpmZnMyX25vZGVfdW5pb24gKm5vZGU7Ci0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbnJhdzsKIAlzaXplX3QgcmV0bGVuOwogCWludCByZXQ7CiAJdWludDMyX3QgcGh5c19vZnMsIGFsbG9jbGVuOwpAQCAtNTA4LDE1ICs1MzYsMTYgQEAKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJHb2luZyB0byBHQyBSRUZfUFJJU1RJTkUgbm9kZSBhdCAweCUwOHhcbiIsIHJlZl9vZmZzZXQocmF3KSkpOwogCi0JcmF3bGVuID0gcmVmX3RvdGxlbihjLCBjLT5nY2Jsb2NrLCByYXcpOworCWFsbG9jbGVuID0gcmF3bGVuID0gcmVmX3RvdGxlbihjLCBjLT5nY2Jsb2NrLCByYXcpOwogCiAJLyogQXNrIGZvciBhIHNtYWxsIGFtb3VudCBvZiBzcGFjZSAob3IgdGhlIHRvdGxlbiBpZiBzbWFsbGVyKSBiZWNhdXNlIHdlCiAJICAgZG9uJ3Qgd2FudCB0byBmb3JjZSB3YXN0YWdlIG9mIHRoZSBlbmQgb2YgYSBibG9jayBpZiBzcGxpdHRpbmcgd291bGQKIAkgICB3b3JrLiAqLwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgbWluX3QodWludDMyX3QsIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2lub2RlKSArCi0JCQkJSkZGUzJfTUlOX0RBVEFfTEVOLCByYXdsZW4pLCAmcGh5c19vZnMsICZhbGxvY2xlbiwgcmF3bGVuKTsKLQkJCQkvKiB0aGlzIGlzIG5vdCB0aGUgZXhhY3Qgc3VtbWFyeSBzaXplIG9mIGl0LAotCQkJCQlpdCBpcyBvbmx5IGFuIHVwcGVyIGVzdGltYXRpb24gKi8KKwlpZiAoaWMgJiYgYWxsb2NsZW4gPiBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19pbm9kZSkgKyBKRkZTMl9NSU5fREFUQV9MRU4pCisJCWFsbG9jbGVuID0gc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUpICsgSkZGUzJfTUlOX0RBVEFfTEVOOworCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBhbGxvY2xlbiwgJmFsbG9jbGVuLCByYXdsZW4pOworCS8qICdyYXdsZW4nIGlzIG5vdCB0aGUgZXhhY3Qgc3VtbWFyeSBzaXplOyBpdCBpcyBvbmx5IGFuIHVwcGVyIGVzdGltYXRpb24gKi8KIAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01ODAsMjIgKzYwOSwxNyBAQAogCQl9CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gbm9kZSB0eXBlIGZvciBSRUZfUFJJU1RJTkUgbm9kZSBhdCAweCUwOHg6IDB4JTA0eFxuIiwKLQkJICAgICAgIHJlZl9vZmZzZXQocmF3KSwgamUxNl90b19jcHUobm9kZS0+dS5ub2RldHlwZSkpOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0JbnJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCWlmICghbnJhdykgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dF9ub2RlOworCQkvKiBJZiBpdCdzIGlub2RlLWxlc3MsIHdlIGRvbid0IF9rbm93XyB3aGF0IGl0IGlzLiBKdXN0IGNvcHkgaXQgaW50YWN0ICovCisJCWlmIChpYykgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBub2RlIHR5cGUgZm9yIFJFRl9QUklTVElORSBub2RlIGF0IDB4JTA4eDogMHglMDR4XG4iLAorCQkJICAgICAgIHJlZl9vZmZzZXQocmF3KSwgamUxNl90b19jcHUobm9kZS0+dS5ub2RldHlwZSkpOworCQkJZ290byBiYWlsOworCQl9CiAJfQogCiAJLyogT0ssIGFsbCB0aGUgQ1JDcyBhcmUgZ29vZDsgdGhpcyBub2RlIGNhbiBqdXN0IGJlIGNvcGllZCBhcy1pcy4gKi8KICByZXRyeToKLQlucmF3LT5mbGFzaF9vZmZzZXQgPSBwaHlzX29mczsKLQlucmF3LT5fX3RvdGxlbiA9IHJhd2xlbjsKLQlucmF3LT5uZXh0X3BoeXMgPSBOVUxMOworCXBoeXNfb2ZzID0gd3JpdGVfb2ZzKGMpOwogCiAJcmV0ID0gamZmczJfZmxhc2hfd3JpdGUoYywgcGh5c19vZnMsIHJhd2xlbiwgJnJldGxlbiwgKGNoYXIgKilub2RlKTsKIApAQCAtNjAzLDE3ICs2MjcsMTEgQEAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJXcml0ZSBvZiAlZCBieXRlcyBhdCAweCUwOHggZmFpbGVkLiByZXR1cm5lZCAlZCwgcmV0bGVuICV6ZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgcmF3bGVuLCBwaHlzX29mcywgcmV0LCByZXRsZW4pOwogCQlpZiAocmV0bGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBEb2Vzbid0IGJlbG9uZyB0byBhbnkgaW5vZGUgKi8KLQkJCW5yYXctPm5leHRfaW5faW5vID0gTlVMTDsKLQotCQkJbnJhdy0+Zmxhc2hfb2Zmc2V0IHw9IFJFRl9PQlNPTEVURTsKLQkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBucmF3KTsKLQkJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCBucmF3KTsKKwkJCWpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBwaHlzX29mcyB8IFJFRl9PQlNPTEVURSwgcmF3bGVuLCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiTm90IG1hcmtpbmcgdGhlIHNwYWNlIGF0IDB4JTA4eCBhcyBkaXJ0eSBiZWNhdXNlIHRoZSBmbGFzaCBkcml2ZXIgcmV0dXJuZWQgcmV0bGVuIHplcm9cbiIsIG5yYXctPmZsYXNoX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihucmF3KTsKKwkJCXByaW50ayhLRVJOX05PVElDRSAiTm90IG1hcmtpbmcgdGhlIHNwYWNlIGF0IDB4JTA4eCBhcyBkaXJ0eSBiZWNhdXNlIHRoZSBmbGFzaCBkcml2ZXIgcmV0dXJuZWQgcmV0bGVuIHplcm9cbiIsIHBoeXNfb2ZzKTsKIAkJfQotCQlpZiAoIXJldHJpZWQgJiYgKG5yYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKSkpIHsKKwkJaWYgKCFyZXRyaWVkKSB7CiAJCQkvKiBUcnkgdG8gcmVhbGxvY2F0ZSBzcGFjZSBhbmQgcmV0cnkgKi8KIAkJCXVpbnQzMl90IGR1bW15OwogCQkJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiA9ICZjLT5ibG9ja3NbcGh5c19vZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CkBAIC02MjUsNyArNjQzLDcgQEAKIAkJCWpmZnMyX2RiZ19hY2N0X3Nhbml0eV9jaGVjayhjLGplYik7CiAJCQlqZmZzMl9kYmdfYWNjdF9wYXJhbm9pYV9jaGVjayhjLCBqZWIpOwogCi0JCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHJhd2xlbiwgJnBoeXNfb2ZzLCAmZHVtbXksIHJhd2xlbik7CisJCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHJhd2xlbiwgJmR1bW15LCByYXdsZW4pOwogCQkJCQkJLyogdGhpcyBpcyBub3QgdGhlIGV4YWN0IHN1bW1hcnkgc2l6ZSBvZiBpdCwKIAkJCQkJCQlpdCBpcyBvbmx5IGFuIHVwcGVyIGVzdGltYXRpb24gKi8KIApAQCAtNjM4LDI1ICs2NTYsMTMgQEAKIAkJCQlnb3RvIHJldHJ5OwogCQkJfQogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSB0byByZXRyeSBmYWlsZWQgd3JpdGU6ICVkIVxuIiwgcmV0KSk7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihucmF3KTsKIAkJfQogCi0JCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKG5yYXcpOwogCQlpZiAoIXJldCkKIAkJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0X25vZGU7CiAJfQotCW5yYXctPmZsYXNoX29mZnNldCB8PSBSRUZfUFJJU1RJTkU7Ci0JamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIG5yYXcpOwotCi0JLyogTGluayBpbnRvIHBlci1pbm9kZSBsaXN0LiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBvZiB0aGUgaWMKLQkgICBzdGF0ZSBiZWluZyBJTk9fU1RBVEVfR0MuIE5vdGUgdGhhdCBpZiB3ZSdyZSBkb2luZyB0aGlzCi0JICAgZm9yIGFuIGlub2RlIHdoaWNoIGlzIGluLWNvcmUsIHRoZSAnbnJhdycgcG9pbnRlciBpcyB0aGVuCi0JICAgZ29pbmcgdG8gYmUgZmV0Y2hlZCBmcm9tIGljLT5ub2RlcyBieSBvdXIgY2FsbGVyLiAqLwotCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLSAgICAgICAgbnJhdy0+bmV4dF9pbl9pbm8gPSBpYy0+bm9kZXM7Ci0gICAgICAgIGljLT5ub2RlcyA9IG5yYXc7Ci0Jc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHBoeXNfb2ZzIHwgUkVGX1BSSVNUSU5FLCByYXdsZW4sIGljKTsKIAogCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByYXcpOwogCUQxKHByaW50ayhLRVJOX0RFQlVHICJXSEVFRSEgR0MgUkVGX1BSSVNUSU5FIG5vZGUgYXQgMHglMDh4IHN1Y2NlZWRlZFxuIiwgcmVmX29mZnNldChyYXcpKSk7CkBAIC02NzUsMTkgKzY4MSwxNiBAQAogCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpuZXdfZm47CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSByaTsKIAlzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICpsYXN0X2ZyYWc7Ci0JamludDE2X3QgZGV2OworCXVuaW9uIGpmZnMyX2RldmljZV9ub2RlIGRldjsKIAljaGFyICptZGF0YSA9IE5VTEwsIG1kYXRhbGVuID0gMDsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnMsIGlsZW47CisJdWludDMyX3QgYWxsb2NsZW4sIGlsZW47CiAJaW50IHJldDsKIAogCWlmIChTX0lTQkxLKEpGRlMyX0ZfSV9NT0RFKGYpKSB8fAogCSAgICBTX0lTQ0hSKEpGRlMyX0ZfSV9NT0RFKGYpKSApIHsKIAkJLyogRm9yIHRoZXNlLCB3ZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIHJlYWQgdGhlIG9sZCBub2RlICovCi0JCS8qIEZJWE1FOiBmb3IgbWlub3Igb3IgbWFqb3IgPiAyNTUuICovCi0JCWRldiA9IGNwdV90b19qZTE2KCgoSkZGUzJfRl9JX1JERVZfTUFKKGYpIDw8IDgpIHwKLQkJCUpGRlMyX0ZfSV9SREVWX01JTihmKSkpOworCQltZGF0YWxlbiA9IGpmZnMyX2VuY29kZV9kZXYoJmRldiwgSkZGUzJfRl9JX1JERVYoZikpOwogCQltZGF0YSA9IChjaGFyICopJmRldjsKLQkJbWRhdGFsZW4gPSBzaXplb2YoZGV2KTsKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2dhcmJhZ2VfY29sbGVjdF9tZXRhZGF0YSgpOiBXcml0aW5nICVkIGJ5dGVzIG9mIGtkZXZfdFxuIiwgbWRhdGFsZW4pKTsKIAl9IGVsc2UgaWYgKFNfSVNMTksoSkZGUzJfRl9JX01PREUoZikpKSB7CiAJCW1kYXRhbGVuID0gZm4tPnNpemU7CkBAIC03MDYsNyArNzA5LDcgQEAKIAogCX0KIAotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKHJpKSArIG1kYXRhbGVuLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyaSkgKyBtZGF0YWxlbiwgJmFsbG9jbGVuLAogCQkJCUpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CiAJaWYgKHJldCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9yZXNlcnZlX3NwYWNlX2djIG9mICV6ZCBieXRlcyBmb3IgZ2FyYmFnZV9jb2xsZWN0X21ldGFkYXRhIGZhaWxlZDogJWRcbiIsCkBAIC03NDQsNyArNzQ3LDcgQEAKIAlyaS5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyaSwgc2l6ZW9mKHJpKS04KSk7CiAJcmkuZGF0YV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCBtZGF0YSwgbWRhdGFsZW4pKTsKIAotCW5ld19mbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsICZyaSwgbWRhdGEsIG1kYXRhbGVuLCBwaHlzX29mcywgQUxMT0NfR0MpOworCW5ld19mbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsICZyaSwgbWRhdGEsIG1kYXRhbGVuLCBBTExPQ19HQyk7CiAKIAlpZiAoSVNfRVJSKG5ld19mbikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3Igd3JpdGluZyBuZXcgZG5vZGU6ICVsZFxuIiwgUFRSX0VSUihuZXdfZm4pKTsKQEAgLTc2NSw3ICs3NjgsNyBAQAogewogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqbmV3X2ZkOwogCXN0cnVjdCBqZmZzMl9yYXdfZGlyZW50IHJkOwotCXVpbnQzMl90IGFsbG9jbGVuLCBwaHlzX29mczsKKwl1aW50MzJfdCBhbGxvY2xlbjsKIAlpbnQgcmV0OwogCiAJcmQubWFnaWMgPSBjcHVfdG9famUxNihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKQEAgLTc4NywxNCArNzkwLDE0IEBACiAJcmQubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcmQsIHNpemVvZihyZCktOCkpOwogCXJkLm5hbWVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgZmQtPm5hbWUsIHJkLm5zaXplKSk7CiAKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyZCkrcmQubnNpemUsICZwaHlzX29mcywgJmFsbG9jbGVuLAorCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKHJkKStyZC5uc2l6ZSwgJmFsbG9jbGVuLAogCQkJCUpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUocmQubnNpemUpKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX3Jlc2VydmVfc3BhY2VfZ2Mgb2YgJXpkIGJ5dGVzIGZvciBnYXJiYWdlX2NvbGxlY3RfZGlyZW50IGZhaWxlZDogJWRcbiIsCiAJCSAgICAgICBzaXplb2YocmQpK3JkLm5zaXplLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQluZXdfZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZiwgJnJkLCBmZC0+bmFtZSwgcmQubnNpemUsIHBoeXNfb2ZzLCBBTExPQ19HQyk7CisJbmV3X2ZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGYsICZyZCwgZmQtPm5hbWUsIHJkLm5zaXplLCBBTExPQ19HQyk7CiAKIAlpZiAoSVNfRVJSKG5ld19mZCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfd3JpdGVfZGlyZW50IGluIGdhcmJhZ2VfY29sbGVjdF9kaXJlbnQgZmFpbGVkOiAlbGRcbiIsIFBUUl9FUlIobmV3X2ZkKSk7CkBAIC05MjIsNyArOTI1LDcgQEAKIAlzdHJ1Y3QgamZmczJfcmF3X2lub2RlIHJpOwogCXN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKmZyYWc7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKm5ld19mbjsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnMsIGlsZW47CisJdWludDMyX3QgYWxsb2NsZW4sIGlsZW47CiAJaW50IHJldDsKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJXcml0aW5nIHJlcGxhY2VtZW50IGhvbGUgbm9kZSBmb3IgaW5vICMldSBmcm9tIG9mZnNldCAweCV4IHRvIDB4JXhcbiIsCkBAIC0xMDAxLDE0ICsxMDA0LDE0IEBACiAJcmkuZGF0YV9jcmMgPSBjcHVfdG9famUzMigwKTsKIAlyaS5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyaSwgc2l6ZW9mKHJpKS04KSk7CiAKLQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyaSksICZwaHlzX29mcywgJmFsbG9jbGVuLAotCQkJCUpGRlMyX1NVTU1BUllfSU5PREVfU0laRSk7CisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YocmkpLCAmYWxsb2NsZW4sCisJCQkJICAgICBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyBvZiAlemQgYnl0ZXMgZm9yIGdhcmJhZ2VfY29sbGVjdF9ob2xlIGZhaWxlZDogJWRcbiIsCiAJCSAgICAgICBzaXplb2YocmkpLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQluZXdfZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCAmcmksIE5VTEwsIDAsIHBoeXNfb2ZzLCBBTExPQ19HQyk7CisJbmV3X2ZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgJnJpLCBOVUxMLCAwLCBBTExPQ19HQyk7CiAKIAlpZiAoSVNfRVJSKG5ld19mbikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3Igd3JpdGluZyBuZXcgaG9sZSBub2RlOiAlbGRcbiIsIFBUUl9FUlIobmV3X2ZuKSk7CkBAIC0xMDcwLDcgKzEwNzMsNyBAQAogewogCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpuZXdfZm47CiAJc3RydWN0IGpmZnMyX3Jhd19pbm9kZSByaTsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnMsIG9mZnNldCwgb3JpZ19lbmQsIG9yaWdfc3RhcnQ7CisJdWludDMyX3QgYWxsb2NsZW4sIG9mZnNldCwgb3JpZ19lbmQsIG9yaWdfc3RhcnQ7CiAJaW50IHJldCA9IDA7CiAJdW5zaWduZWQgY2hhciAqY29tcHJidWYgPSBOVUxMLCAqd3JpdGVidWY7CiAJdW5zaWduZWQgbG9uZyBwZzsKQEAgLTEyMjcsNyArMTIzMCw3IEBACiAJCXVpbnQzMl90IGNkYXRhbGVuOwogCQl1aW50MTZfdCBjb21wcnR5cGUgPSBKRkZTMl9DT01QUl9OT05FOwogCi0JCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKHJpKSArIEpGRlMyX01JTl9EQVRBX0xFTiwgJnBoeXNfb2ZzLAorCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKGMsIHNpemVvZihyaSkgKyBKRkZTMl9NSU5fREFUQV9MRU4sCiAJCQkJCSZhbGxvY2xlbiwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAogCQlpZiAocmV0KSB7CkBAIC0xMjY0LDcgKzEyNjcsNyBAQAogCQlyaS5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyaSwgc2l6ZW9mKHJpKS04KSk7CiAJCXJpLmRhdGFfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgY29tcHJidWYsIGNkYXRhbGVuKSk7CiAKLQkJbmV3X2ZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgJnJpLCBjb21wcmJ1ZiwgY2RhdGFsZW4sIHBoeXNfb2ZzLCBBTExPQ19HQyk7CisJCW5ld19mbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsICZyaSwgY29tcHJidWYsIGNkYXRhbGVuLCBBTExPQ19HQyk7CiAKIAkJamZmczJfZnJlZV9jb21wcmJ1Zihjb21wcmJ1Ziwgd3JpdGVidWYpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9oaXN0by5oIGIvZnMvamZmczIvaGlzdG8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJhOTNhMC4uMDAwMDAwMAotLS0gYS9mcy9qZmZzMi9oaXN0by5oCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0vKiBUaGlzIGZpbGUgcHJvdmlkZXMgdGhlIGJpdC1wcm9iYWJpbGl0aWVzIGZvciB0aGUgaW5wdXQgZmlsZSAqLwotI2RlZmluZSBCSVRfRElWSURFUiA2MjkKLXN0YXRpYyBpbnQgYml0c1s5XSA9IHsgMTc5LDE2NywxODMsMTY1LDE1OSwxOTgsMTc4LDExOSx9OyAvKiBpYTMyIC5zbyBmaWxlcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qZmZzMl9mc19pLmggYi9mcy9qZmZzMi9qZmZzMl9mc19pLmgKc2ltaWxhcml0eSBpbmRleCA5MSUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC9qZmZzMl9mc19pLmgKcmVuYW1lIHRvIGZzL2pmZnMyL2pmZnMyX2ZzX2kuaAppbmRleCBhZDU2NWJmLi4yZTBjYzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaAorKysgYi9mcy9qZmZzMi9qZmZzMl9mc19pLmgKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyB7CkBAIC00NSw2ICs0NiwxMCBAQAogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiAjZW5kaWYKICNlbmRpZgorI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKKwlzdHJ1Y3QgcG9zaXhfYWNsICppX2FjbF9hY2Nlc3M7CisJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfZGVmYXVsdDsKKyNlbmRpZgogfTsKIAogI2VuZGlmIC8qIF9KRkZTMl9GU19JICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmggYi9mcy9qZmZzMi9qZmZzMl9mc19zYi5oCnNpbWlsYXJpdHkgaW5kZXggOTElCnJlbmFtZSBmcm9tIGluY2x1ZGUvbGludXgvamZmczJfZnNfc2IuaApyZW5hbWUgdG8gZnMvamZmczIvamZmczJfZnNfc2IuaAppbmRleCA0YmNmYjU1Li45MzVmZWMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3NiLmgKKysrIGIvZnMvamZmczIvamZmczJfZnNfc2IuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSCiAJLyogV3JpdGUtYmVoaW5kIGJ1ZmZlciBmb3IgTkFORCBmbGFzaCAqLwogCXVuc2lnbmVkIGNoYXIgKndidWY7CisJdW5zaWduZWQgY2hhciAqb29iYnVmOwogCXVpbnQzMl90IHdidWZfb2ZzOwogCXVpbnQzMl90IHdidWZfbGVuOwogCXN0cnVjdCBqZmZzMl9pbm9kaXJ0eSAqd2J1Zl9pbm9kZXM7CkBAIC0xMDcsNyArMTA4LDcgQEAKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlIHdidWZfc2VtOwkvKiBQcm90ZWN0cyB0aGUgd3JpdGUgYnVmZmVyICovCiAKIAkvKiBJbmZvcm1hdGlvbiBhYm91dCBvdXQtb2YtYmFuZCBhcmVhIHVzYWdlLi4uICovCi0Jc3RydWN0IG5hbmRfb29iaW5mbyAqb29iaW5mbzsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKIAl1aW50MzJfdCBiYWRibG9ja19wb3M7CiAJdWludDMyX3QgZnNkYXRhX3BvczsKIAl1aW50MzJfdCBmc2RhdGFfbGVuOwpAQCAtMTE1LDYgKzExNiwxNiBAQAogCiAJc3RydWN0IGpmZnMyX3N1bW1hcnkgKnN1bW1hcnk7CQkvKiBTdW1tYXJ5IGluZm9ybWF0aW9uICovCiAKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKyNkZWZpbmUgWEFUVFJJTkRFWF9IQVNIU0laRQkoNTcpCisJdWludDMyX3QgaGlnaGVzdF94aWQ7CisJc3RydWN0IGxpc3RfaGVhZCB4YXR0cmluZGV4W1hBVFRSSU5ERVhfSEFTSFNJWkVdOworCXN0cnVjdCBsaXN0X2hlYWQgeGF0dHJfdW5jaGVja2VkOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnhyZWZfdGVtcDsKKwlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKKwl1aW50MzJfdCB4ZGF0dW1fbWVtX3VzYWdlOworCXVpbnQzMl90IHhkYXR1bV9tZW1fdGhyZXNob2xkOworI2VuZGlmCiAJLyogT1MtcHJpdmF0ZSBwb2ludGVyIGZvciBnZXR0aW5nIGJhY2sgdG8gbWFzdGVyIHN1cGVyYmxvY2sgaW5mbyAqLwogCXZvaWQgKm9zX3ByaXY7CiB9OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbWFsbG9jLmMgYi9mcy9qZmZzMi9tYWxsb2MuYwppbmRleCAwMzZjYmQxLi40ODg5ZDA3IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9tYWxsb2MuYworKysgYi9mcy9qZmZzMi9tYWxsb2MuYwpAQCAtMjYsNiArMjYsMTAgQEAKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKnJhd19ub2RlX3JlZl9zbGFiOwogc3RhdGljIGttZW1fY2FjaGVfdCAqbm9kZV9mcmFnX3NsYWI7CiBzdGF0aWMga21lbV9jYWNoZV90ICppbm9kZV9jYWNoZV9zbGFiOworI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorc3RhdGljIGttZW1fY2FjaGVfdCAqeGF0dHJfZGF0dW1fY2FjaGU7CitzdGF0aWMga21lbV9jYWNoZV90ICp4YXR0cl9yZWZfY2FjaGU7CisjZW5kaWYKIAogaW50IF9faW5pdCBqZmZzMl9jcmVhdGVfc2xhYl9jYWNoZXModm9pZCkKIHsKQEAgLTUzLDggKzU3LDggQEAKIAlpZiAoIXRtcF9kbm9kZV9pbmZvX3NsYWIpCiAJCWdvdG8gZXJyOwogCi0JcmF3X25vZGVfcmVmX3NsYWIgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiamZmczJfcmF3X25vZGVfcmVmIiwKLQkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYpLAorCXJhd19ub2RlX3JlZl9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnMyX3JlZmJsb2NrIiwKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYpICogKFJFRlNfUEVSX0JMT0NLICsgMSksCiAJCQkJCSAgICAgIDAsIDAsIE5VTEwsIE5VTEwpOwogCWlmICghcmF3X25vZGVfcmVmX3NsYWIpCiAJCWdvdG8gZXJyOwpAQCAtNjgsOCArNzIsMjQgQEAKIAlpbm9kZV9jYWNoZV9zbGFiID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnMyX2lub2RlX2NhY2hlIiwKIAkJCQkJICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlKSwKIAkJCQkJICAgICAwLCAwLCBOVUxMLCBOVUxMKTsKLQlpZiAoaW5vZGVfY2FjaGVfc2xhYikKLQkJcmV0dXJuIDA7CisJaWYgKCFpbm9kZV9jYWNoZV9zbGFiKQorCQlnb3RvIGVycjsKKworI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorCXhhdHRyX2RhdHVtX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImpmZnMyX3hhdHRyX2RhdHVtIiwKKwkJCQkJICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtKSwKKwkJCQkJICAgICAwLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAoIXhhdHRyX2RhdHVtX2NhY2hlKQorCQlnb3RvIGVycjsKKworCXhhdHRyX3JlZl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJqZmZzMl94YXR0cl9yZWYiLAorCQkJCQkgICBzaXplb2Yoc3RydWN0IGpmZnMyX3hhdHRyX3JlZiksCisJCQkJCSAgIDAsIDAsIE5VTEwsIE5VTEwpOworCWlmICgheGF0dHJfcmVmX2NhY2hlKQorCQlnb3RvIGVycjsKKyNlbmRpZgorCisJcmV0dXJuIDA7CiAgZXJyOgogCWpmZnMyX2Rlc3Ryb3lfc2xhYl9jYWNoZXMoKTsKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTkxLDYgKzExMSwxMiBAQAogCQlrbWVtX2NhY2hlX2Rlc3Ryb3kobm9kZV9mcmFnX3NsYWIpOwogCWlmKGlub2RlX2NhY2hlX3NsYWIpCiAJCWttZW1fY2FjaGVfZGVzdHJveShpbm9kZV9jYWNoZV9zbGFiKTsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwlpZiAoeGF0dHJfZGF0dW1fY2FjaGUpCisJCWttZW1fY2FjaGVfZGVzdHJveSh4YXR0cl9kYXR1bV9jYWNoZSk7CisJaWYgKHhhdHRyX3JlZl9jYWNoZSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KHhhdHRyX3JlZl9jYWNoZSk7CisjZW5kaWYKIH0KIAogc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpqZmZzMl9hbGxvY19mdWxsX2RpcmVudChpbnQgbmFtZXNpemUpCkBAIC0xNjQsMTUgKzE5MCw2NSBAQAogCWttZW1fY2FjaGVfZnJlZSh0bXBfZG5vZGVfaW5mb19zbGFiLCB4KTsKIH0KIAotc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKHZvaWQpCitzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpqZmZzMl9hbGxvY19yZWZibG9jayh2b2lkKQogewogCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJldDsKKwogCXJldCA9IGttZW1fY2FjaGVfYWxsb2MocmF3X25vZGVfcmVmX3NsYWIsIEdGUF9LRVJORUwpOwotCWRiZ19tZW1hbGxvYygiJXBcbiIsIHJldCk7CisJaWYgKHJldCkgeworCQlpbnQgaSA9IDA7CisJCWZvciAoaT0wOyBpIDwgUkVGU19QRVJfQkxPQ0s7IGkrKykgeworCQkJcmV0W2ldLmZsYXNoX29mZnNldCA9IFJFRl9FTVBUWV9OT0RFOworCQkJcmV0W2ldLm5leHRfaW5faW5vID0gTlVMTDsKKwkJfQorCQlyZXRbaV0uZmxhc2hfb2Zmc2V0ID0gUkVGX0xJTktfTk9ERTsKKwkJcmV0W2ldLm5leHRfaW5faW5vID0gTlVMTDsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAotdm9pZCBqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICp4KQoraW50IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsIGludCBucikKK3sKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICoqcCwgKnJlZjsKKwlpbnQgaSA9IG5yOworCisJZGJnX21lbWFsbG9jKCIlZFxuIiwgbnIpOworCisJcCA9ICZqZWItPmxhc3Rfbm9kZTsKKwlyZWYgPSAqcDsKKworCWRiZ19tZW1hbGxvYygiUmVzZXJ2aW5nICVkIHJlZnMgZm9yIGJsb2NrIEAweCUwOHhcbiIsIG5yLCBqZWItPm9mZnNldCk7CisKKwkvKiBJZiBqZWItPmxhc3Rfbm9kZSBpcyByZWFsbHkgYSB2YWxpZCBub2RlIHRoZW4gc2tpcCBvdmVyIGl0ICovCisJaWYgKHJlZiAmJiByZWYtPmZsYXNoX29mZnNldCAhPSBSRUZfRU1QVFlfTk9ERSkKKwkJcmVmKys7CisKKwl3aGlsZSAoaSkgeworCQlpZiAoIXJlZikgeworCQkJZGJnX21lbWFsbG9jKCJBbGxvY2F0aW5nIG5ldyByZWZibG9jayBsaW5rZWQgZnJvbSAlcFxuIiwgcCk7CisJCQlyZWYgPSAqcCA9IGpmZnMyX2FsbG9jX3JlZmJsb2NrKCk7CisJCQlpZiAoIXJlZikKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlpZiAocmVmLT5mbGFzaF9vZmZzZXQgPT0gUkVGX0xJTktfTk9ERSkgeworCQkJcCA9ICZyZWYtPm5leHRfaW5faW5vOworCQkJcmVmID0gKnA7CisJCQljb250aW51ZTsKKwkJfQorCQlpLS07CisJCXJlZisrOworCX0KKwlqZWItPmFsbG9jYXRlZF9yZWZzID0gbnI7CisKKwlkYmdfbWVtYWxsb2MoIlJlc2VydmVkICVkIHJlZnMgZm9yIGJsb2NrIEAweCUwOHgsIGxhc3Rfbm9kZSBpcyAlcCAoJTA4eCwlcClcbiIsCisJCSAgbnIsIGplYi0+b2Zmc2V0LCBqZWItPmxhc3Rfbm9kZSwgamViLT5sYXN0X25vZGUtPmZsYXNoX29mZnNldCwKKwkJICBqZWItPmxhc3Rfbm9kZS0+bmV4dF9pbl9pbm8pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgamZmczJfZnJlZV9yZWZibG9jayhzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICp4KQogewogCWRiZ19tZW1hbGxvYygiJXBcbiIsIHgpOwogCWttZW1fY2FjaGVfZnJlZShyYXdfbm9kZV9yZWZfc2xhYiwgeCk7CkBAIC0yMDUsMyArMjgxLDQwIEBACiAJZGJnX21lbWFsbG9jKCIlcFxuIiwgeCk7CiAJa21lbV9jYWNoZV9mcmVlKGlub2RlX2NhY2hlX3NsYWIsIHgpOwogfQorCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCitzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX2FsbG9jX3hhdHRyX2RhdHVtKHZvaWQpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKwl4ZCA9IGttZW1fY2FjaGVfYWxsb2MoeGF0dHJfZGF0dW1fY2FjaGUsIEdGUF9LRVJORUwpOworCWRiZ19tZW1hbGxvYygiJXBcbiIsIHhkKTsKKworCW1lbXNldCh4ZCwgMCwgc2l6ZW9mKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSkpOworCXhkLT5jbGFzcyA9IFJBV05PREVfQ0xBU1NfWEFUVFJfREFUVU07CisJSU5JVF9MSVNUX0hFQUQoJnhkLT54aW5kZXgpOworCXJldHVybiB4ZDsKK30KKwordm9pZCBqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJZGJnX21lbWFsbG9jKCIlcFxuIiwgeGQpOworCWttZW1fY2FjaGVfZnJlZSh4YXR0cl9kYXR1bV9jYWNoZSwgeGQpOworfQorCitzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpqZmZzMl9hbGxvY194YXR0cl9yZWYodm9pZCkKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWY7CisJcmVmID0ga21lbV9jYWNoZV9hbGxvYyh4YXR0cl9yZWZfY2FjaGUsIEdGUF9LRVJORUwpOworCWRiZ19tZW1hbGxvYygiJXBcbiIsIHJlZik7CisKKwltZW1zZXQocmVmLCAwLCBzaXplb2Yoc3RydWN0IGpmZnMyX3hhdHRyX3JlZikpOworCXJlZi0+Y2xhc3MgPSBSQVdOT0RFX0NMQVNTX1hBVFRSX1JFRjsKKwlyZXR1cm4gcmVmOworfQorCit2b2lkIGpmZnMyX2ZyZWVfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKK3sKKwlkYmdfbWVtYWxsb2MoIiVwXG4iLCByZWYpOworCWttZW1fY2FjaGVfZnJlZSh4YXR0cl9yZWZfY2FjaGUsIHJlZik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL25vZGVsaXN0LmMgYi9mcy9qZmZzMi9ub2RlbGlzdC5jCmluZGV4IDFkNDY2NzcuLjkyN2RmZTQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL25vZGVsaXN0LmMKKysrIGIvZnMvamZmczIvbm9kZWxpc3QuYwpAQCAtNDM4LDggKzQzOCw3IEBACiAJaWYgKGMtPm10ZC0+cG9pbnQpIHsKIAkJZXJyID0gYy0+bXRkLT5wb2ludChjLT5tdGQsIG9mcywgbGVuLCAmcmV0bGVuLCAmYnVmZmVyKTsKIAkJaWYgKCFlcnIgJiYgcmV0bGVuIDwgdG4tPmNzaXplKSB7Ci0JCQlKRkZTMl9XQVJOSU5HKCJNVEQgcG9pbnQgcmV0dXJuZWQgbGVuIHRvbyBzaG9ydDogJXp1ICIKLQkJCQkJImluc3RlYWQgb2YgJXUuXG4iLCByZXRsZW4sIHRuLT5jc2l6ZSk7CisJCQlKRkZTMl9XQVJOSU5HKCJNVEQgcG9pbnQgcmV0dXJuZWQgbGVuIHRvbyBzaG9ydDogJXp1IGluc3RlYWQgb2YgJXUuXG4iLCByZXRsZW4sIHRuLT5jc2l6ZSk7CiAJCQljLT5tdGQtPnVucG9pbnQoYy0+bXRkLCBidWZmZXIsIG9mcywgbGVuKTsKIAkJfSBlbHNlIGlmIChlcnIpCiAJCQlKRkZTMl9XQVJOSU5HKCJNVEQgcG9pbnQgZmFpbGVkOiBlcnJvciBjb2RlICVkLlxuIiwgZXJyKTsKQEAgLTQ2Miw4ICs0NjEsNyBAQAogCQl9CiAKIAkJaWYgKHJldGxlbiAhPSBsZW4pIHsKLQkJCUpGRlMyX0VSUk9SKCJzaG9ydCByZWFkIGF0ICUjMDh4OiAlemQgaW5zdGVhZCBvZiAlZC5cbiIsCi0JCQkJCW9mcywgcmV0bGVuLCBsZW4pOworCQkJSkZGUzJfRVJST1IoInNob3J0IHJlYWQgYXQgJSMwOHg6ICV6ZCBpbnN0ZWFkIG9mICVkLlxuIiwgb2ZzLCByZXRsZW4sIGxlbik7CiAJCQllcnIgPSAtRUlPOwogCQkJZ290byBmcmVlX291dDsKIAkJfQpAQCAtOTQwLDYgKzkzOCw3IEBACiAJCXRoaXMgPSBjLT5pbm9jYWNoZV9saXN0W2ldOwogCQl3aGlsZSAodGhpcykgewogCQkJbmV4dCA9IHRoaXMtPm5leHQ7CisJCQlqZmZzMl94YXR0cl9mcmVlX2lub2RlKGMsIHRoaXMpOwogCQkJamZmczJfZnJlZV9pbm9kZV9jYWNoZSh0aGlzKTsKIAkJCXRoaXMgPSBuZXh0OwogCQl9CkBAIC05NTQsOSArOTUzLDEzIEBACiAKIAlmb3IgKGk9MDsgaTxjLT5ucl9ibG9ja3M7IGkrKykgewogCQl0aGlzID0gYy0+YmxvY2tzW2ldLmZpcnN0X25vZGU7Ci0JCXdoaWxlKHRoaXMpIHsKLQkJCW5leHQgPSB0aGlzLT5uZXh0X3BoeXM7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZih0aGlzKTsKKwkJd2hpbGUgKHRoaXMpIHsKKwkJCWlmICh0aGlzW1JFRlNfUEVSX0JMT0NLXS5mbGFzaF9vZmZzZXQgPT0gUkVGX0xJTktfTk9ERSkKKwkJCQluZXh0ID0gdGhpc1tSRUZTX1BFUl9CTE9DS10ubmV4dF9pbl9pbm87CisJCQllbHNlCisJCQkJbmV4dCA9IE5VTEw7CisKKwkJCWpmZnMyX2ZyZWVfcmVmYmxvY2sodGhpcyk7CiAJCQl0aGlzID0gbmV4dDsKIAkJfQogCQljLT5ibG9ja3NbaV0uZmlyc3Rfbm9kZSA9IGMtPmJsb2Nrc1tpXS5sYXN0X25vZGUgPSBOVUxMOwpAQCAtMTA0NywzICsxMDUwLDE2OSBAQAogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiB9CisKK3N0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmpmZnMyX2xpbmtfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJCSAgICAgICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJCQkgICAgICAgdWludDMyX3Qgb2ZzLCB1aW50MzJfdCBsZW4sCisJCQkJCSAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQoreworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZjsKKworCUJVR19PTighamViLT5hbGxvY2F0ZWRfcmVmcyk7CisJamViLT5hbGxvY2F0ZWRfcmVmcy0tOworCisJcmVmID0gamViLT5sYXN0X25vZGU7CisKKwlkYmdfbm9kZXJlZigiTGFzdCBub2RlIGF0ICVwIGlzICglMDh4LCVwKVxuIiwgcmVmLCByZWYtPmZsYXNoX29mZnNldCwKKwkJICAgIHJlZi0+bmV4dF9pbl9pbm8pOworCisJd2hpbGUgKHJlZi0+Zmxhc2hfb2Zmc2V0ICE9IFJFRl9FTVBUWV9OT0RFKSB7CisJCWlmIChyZWYtPmZsYXNoX29mZnNldCA9PSBSRUZfTElOS19OT0RFKQorCQkJcmVmID0gcmVmLT5uZXh0X2luX2lubzsKKwkJZWxzZQorCQkJcmVmKys7CisJfQorCisJZGJnX25vZGVyZWYoIk5ldyByZWYgaXMgJXAgKCUwOHggYmVjb21lcyAlMDh4LCVwKSBsZW4gMHgleFxuIiwgcmVmLCAKKwkJICAgIHJlZi0+Zmxhc2hfb2Zmc2V0LCBvZnMsIHJlZi0+bmV4dF9pbl9pbm8sIGxlbik7CisKKwlyZWYtPmZsYXNoX29mZnNldCA9IG9mczsKKworCWlmICghamViLT5maXJzdF9ub2RlKSB7CisJCWplYi0+Zmlyc3Rfbm9kZSA9IHJlZjsKKwkJQlVHX09OKHJlZl9vZmZzZXQocmVmKSAhPSBqZWItPm9mZnNldCk7CisJfSBlbHNlIGlmICh1bmxpa2VseShyZWZfb2Zmc2V0KHJlZikgIT0gamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKSkgeworCQl1aW50MzJfdCBsYXN0X2xlbiA9IHJlZl90b3RsZW4oYywgamViLCBqZWItPmxhc3Rfbm9kZSk7CisKKwkJSkZGUzJfRVJST1IoIkFkZGluZyBuZXcgcmVmICVwIGF0ICgweCUwOHgtMHglMDh4KSBub3QgaW1tZWRpYXRlbHkgYWZ0ZXIgcHJldmlvdXMgKDB4JTA4eC0weCUwOHgpXG4iLAorCQkJICAgIHJlZiwgcmVmX29mZnNldChyZWYpLCByZWZfb2Zmc2V0KHJlZikrbGVuLAorCQkJICAgIHJlZl9vZmZzZXQoamViLT5sYXN0X25vZGUpLCAKKwkJCSAgICByZWZfb2Zmc2V0KGplYi0+bGFzdF9ub2RlKStsYXN0X2xlbik7CisJCUJVRygpOworCX0KKwlqZWItPmxhc3Rfbm9kZSA9IHJlZjsKKworCWlmIChpYykgeworCQlyZWYtPm5leHRfaW5faW5vID0gaWMtPm5vZGVzOworCQlpYy0+bm9kZXMgPSByZWY7CisJfSBlbHNlIHsKKwkJcmVmLT5uZXh0X2luX2lubyA9IE5VTEw7CisJfQorCisJc3dpdGNoKHJlZl9mbGFncyhyZWYpKSB7CisJY2FzZSBSRUZfVU5DSEVDS0VEOgorCQljLT51bmNoZWNrZWRfc2l6ZSArPSBsZW47CisJCWplYi0+dW5jaGVja2VkX3NpemUgKz0gbGVuOworCQlicmVhazsKKworCWNhc2UgUkVGX05PUk1BTDoKKwljYXNlIFJFRl9QUklTVElORToKKwkJYy0+dXNlZF9zaXplICs9IGxlbjsKKwkJamViLT51c2VkX3NpemUgKz0gbGVuOworCQlicmVhazsKKworCWNhc2UgUkVGX09CU09MRVRFOgorCQljLT5kaXJ0eV9zaXplICs9IGxlbjsKKwkJamViLT5kaXJ0eV9zaXplICs9IGxlbjsKKwkJYnJlYWs7CisJfQorCWMtPmZyZWVfc2l6ZSAtPSBsZW47CisJamViLT5mcmVlX3NpemUgLT0gbGVuOworCisjaWZkZWYgVEVTVF9UT1RMRU4KKwkvKiBTZXQgKGFuZCB0ZXN0KSBfX3RvdGxlbiBmaWVsZC4uLiBmb3Igbm93ICovCisJcmVmLT5fX3RvdGxlbiA9IGxlbjsKKwlyZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKKyNlbmRpZgorCXJldHVybiByZWY7Cit9CisKKy8qIE5vIGxvY2tpbmcsIG5vIHJlc2VydmF0aW9uIG9mICdyZWYnLiBEbyBub3QgdXNlIG9uIGEgbGl2ZSBmaWxlIHN5c3RlbSAqLworaW50IGpmZnMyX3NjYW5fZGlydHlfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCisJCQkgICB1aW50MzJfdCBzaXplKQoreworCWlmICghc2l6ZSkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KHNpemUgPiBqZWItPmZyZWVfc2l6ZSkpIHsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiRGlydHkgc3BhY2UgMHgleCBsYXJnZXIgdGhlbiBmcmVlX3NpemUgMHgleCAod2FzdGVkIDB4JXgpXG4iLAorCQkgICAgICAgc2l6ZSwgamViLT5mcmVlX3NpemUsIGplYi0+d2FzdGVkX3NpemUpOworCQlCVUcoKTsKKwl9CisJLyogUkVGX0VNUFRZX05PREUgaXMgIW9ic29sZXRlLCBzbyB0aGF0IHdvcmtzIE9LICovCisJaWYgKGplYi0+bGFzdF9ub2RlICYmIHJlZl9vYnNvbGV0ZShqZWItPmxhc3Rfbm9kZSkpIHsKKyNpZmRlZiBURVNUX1RPVExFTgorCQlqZWItPmxhc3Rfbm9kZS0+X190b3RsZW4gKz0gc2l6ZTsKKyNlbmRpZgorCQljLT5kaXJ0eV9zaXplICs9IHNpemU7CisJCWMtPmZyZWVfc2l6ZSAtPSBzaXplOworCQlqZWItPmRpcnR5X3NpemUgKz0gc2l6ZTsKKwkJamViLT5mcmVlX3NpemUgLT0gc2l6ZTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCBvZnMgPSBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemU7CisJCW9mcyB8PSBSRUZfT0JTT0xFVEU7CisKKwkJamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcywgc2l6ZSwgTlVMTCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGN1bGF0ZSB0b3RsZW4gZnJvbSBzdXJyb3VuZGluZyBub2RlcyBvciBlcmFzZWJsb2NrICovCitzdGF0aWMgaW5saW5lIHVpbnQzMl90IF9fcmVmX3RvdGxlbihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKKwkJCQkgICAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmVmKQoreworCXVpbnQzMl90IHJlZl9lbmQ7CisJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbmV4dF9yZWYgPSByZWZfbmV4dChyZWYpOworCisJaWYgKG5leHRfcmVmKQorCQlyZWZfZW5kID0gcmVmX29mZnNldChuZXh0X3JlZik7CisJZWxzZSB7CisJCWlmICghamViKQorCQkJamViID0gJmMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXTsKKworCQkvKiBMYXN0IG5vZGUgaW4gYmxvY2suIFVzZSBmcmVlX3NwYWNlICovCisJCWlmICh1bmxpa2VseShyZWYgIT0gamViLT5sYXN0X25vZGUpKSB7CisJCQlwcmludGsoS0VSTl9DUklUICJyZWYgJXAgQDB4JTA4eCBpcyBub3QgamViLT5sYXN0X25vZGUgKCVwIEAweCUwOHgpXG4iLAorCQkJICAgICAgIHJlZiwgcmVmX29mZnNldChyZWYpLCBqZWItPmxhc3Rfbm9kZSwgamViLT5sYXN0X25vZGU/cmVmX29mZnNldChqZWItPmxhc3Rfbm9kZSk6MCk7CisJCQlCVUcoKTsKKwkJfQorCQlyZWZfZW5kID0gamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplOworCX0KKwlyZXR1cm4gcmVmX2VuZCAtIHJlZl9vZmZzZXQocmVmKTsKK30KKwordWludDMyX3QgX19qZmZzMl9yZWZfdG90bGVuKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJICAgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZikKK3sKKwl1aW50MzJfdCByZXQ7CisKKwlyZXQgPSBfX3JlZl90b3RsZW4oYywgamViLCByZWYpOworCisjaWZkZWYgVEVTVF9UT1RMRU4KKwlpZiAodW5saWtlbHkocmV0ICE9IHJlZi0+X190b3RsZW4pKSB7CisJCWlmICghamViKQorCQkJamViID0gJmMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXTsKKworCQlwcmludGsoS0VSTl9DUklUICJUb3RsZW4gZm9yIHJlZiBhdCAlcCAoMHglMDh4LTB4JTA4eCkgbWlzY2FsY3VsYXRlZCBhcyAweCV4IGluc3RlYWQgb2YgJXhcbiIsCisJCSAgICAgICByZWYsIHJlZl9vZmZzZXQocmVmKSwgcmVmX29mZnNldChyZWYpK3JlZi0+X190b3RsZW4sCisJCSAgICAgICByZXQsIHJlZi0+X190b3RsZW4pOworCQlpZiAocmVmX25leHQocmVmKSkgeworCQkJcHJpbnRrKEtFUk5fQ1JJVCAibmV4dCAlcCAoMHglMDh4LTB4JTA4eClcbiIsIHJlZl9uZXh0KHJlZiksIHJlZl9vZmZzZXQocmVmX25leHQocmVmKSksCisJCQkgICAgICAgcmVmX29mZnNldChyZWZfbmV4dChyZWYpKStyZWYtPl9fdG90bGVuKTsKKwkJfSBlbHNlIAorCQkJcHJpbnRrKEtFUk5fQ1JJVCAiTm8gbmV4dCByZWYuIGplYi0+bGFzdF9ub2RlIGlzICVwXG4iLCBqZWItPmxhc3Rfbm9kZSk7CisKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiamViLT53YXN0ZWRfc2l6ZSAleCwgZGlydHlfc2l6ZSAleCwgdXNlZF9zaXplICV4LCBmcmVlX3NpemUgJXhcbiIsIGplYi0+d2FzdGVkX3NpemUsIGplYi0+ZGlydHlfc2l6ZSwgamViLT51c2VkX3NpemUsIGplYi0+ZnJlZV9zaXplKTsKKworI2lmIGRlZmluZWQoSkZGUzJfREJHX0RVTVBTKSB8fCBkZWZpbmVkKEpGRlMyX0RCR19QQVJBTk9JQV9DSEVDS1MpCisJCV9famZmczJfZGJnX2R1bXBfbm9kZV9yZWZzX25vbG9jayhjLCBqZWIpOworI2VuZGlmCisKKwkJV0FSTl9PTigxKTsKKworCQlyZXQgPSByZWYtPl9fdG90bGVuOworCX0KKyNlbmRpZiAvKiBURVNUX1RPVExFTiAqLworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9ub2RlbGlzdC5oIGIvZnMvamZmczIvbm9kZWxpc3QuaAppbmRleCAyM2E2N2JiLi5iMTZjNjBiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9ub2RlbGlzdC5oCisrKyBiL2ZzL2pmZnMyL25vZGVsaXN0LmgKQEAgLTE4LDggKzE4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2pmZnMyLmg+Ci0jaW5jbHVkZSA8bGludXgvamZmczJfZnNfc2IuaD4KLSNpbmNsdWRlIDxsaW51eC9qZmZzMl9mc19pLmg+CisjaW5jbHVkZSAiamZmczJfZnNfc2IuaCIKKyNpbmNsdWRlICJqZmZzMl9mc19pLmgiCisjaW5jbHVkZSAieGF0dHIuaCIKKyNpbmNsdWRlICJhY2wuaCIKICNpbmNsdWRlICJzdW1tYXJ5LmgiCiAKICNpZmRlZiBfX0VDT1MKQEAgLTc1LDE0ICs3Nyw1MCBAQAogc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZgogewogCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5leHRfaW5faW5vOyAvKiBQb2ludHMgdG8gdGhlIG5leHQgcmF3X25vZGVfcmVmCi0JCWZvciB0aGlzIGlub2RlLiBJZiB0aGlzIGlzIHRoZSBsYXN0LCBpdCBwb2ludHMgdG8gdGhlIGlub2RlX2NhY2hlCi0JCWZvciB0aGlzIGlub2RlIGluc3RlYWQuIFRoZSBpbm9kZV9jYWNoZSB3aWxsIGhhdmUgTlVMTCBpbiB0aGUgZmlyc3QKLQkJd29yZCBzbyB5b3Uga25vdyB3aGVuIHlvdSd2ZSBnb3QgdGhlcmUgOikgKi8KLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuZXh0X3BoeXM7CisJCWZvciB0aGlzIG9iamVjdC4gSWYgdGhpcyBfaXNfIHRoZSBsYXN0LCBpdCBwb2ludHMgdG8gdGhlIGlub2RlX2NhY2hlLAorCQl4YXR0cl9yZWYgb3IgeGF0dHJfZGF0dW0gaW5zdGVhZC4gVGhlIGNvbW1vbiBwYXJ0IG9mIHRob3NlIHN0cnVjdHVyZXMKKwkJaGFzIE5VTEwgaW4gdGhlIGZpcnN0IHdvcmQuIFNlZSBqZmZzMl9yYXdfcmVmX3RvX2ljKCkgYmVsb3cgKi8KIAl1aW50MzJfdCBmbGFzaF9vZmZzZXQ7CisjZGVmaW5lIFRFU1RfVE9UTEVOCisjaWZkZWYgVEVTVF9UT1RMRU4KIAl1aW50MzJfdCBfX3RvdGxlbjsgLyogVGhpcyBtYXkgZGllOyB1c2UgcmVmX3RvdGxlbihjLCBqZWIsICkgYmVsb3cgKi8KKyNlbmRpZgogfTsKIAorI2RlZmluZSBSRUZfTElOS19OT0RFICgoaW50MzJfdCktMSkKKyNkZWZpbmUgUkVGX0VNUFRZX05PREUgKChpbnQzMl90KS0yKQorCisvKiBVc2UgYmxvY2tzIG9mIGFib3V0IDI1NiBieXRlcyAqLworI2RlZmluZSBSRUZTX1BFUl9CTE9DSyAoKDI1NS9zaXplb2Yoc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZikpLTEpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmVmX25leHQoc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmVmKQoreworCXJlZisrOworCisJLyogTGluayB0byBhbm90aGVyIGJsb2NrIG9mIHJlZnMgKi8KKwlpZiAocmVmLT5mbGFzaF9vZmZzZXQgPT0gUkVGX0xJTktfTk9ERSkgeworCQlyZWYgPSByZWYtPm5leHRfaW5faW5vOworCQlpZiAoIXJlZikKKwkJCXJldHVybiByZWY7CisJfQorCisJLyogRW5kIG9mIGNoYWluICovCisJaWYgKHJlZi0+Zmxhc2hfb2Zmc2V0ID09IFJFRl9FTVBUWV9OT0RFKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpqZmZzMl9yYXdfcmVmX3RvX2ljKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdykKK3sKKwl3aGlsZShyYXctPm5leHRfaW5faW5vKQorCQlyYXcgPSByYXctPm5leHRfaW5faW5vOworCisJLyogTkIuIFRoaXMgY2FuIGJlIGEgamZmczJfeGF0dHJfZGF0dW0gb3IgamZmczJfeGF0dHJfcmVmIGFuZAorCSAgIG5vdCBhY3R1YWxseSBhIGpmZnMyX2lub2RlX2NhY2hlLiBDaGVjayAtPmNsYXNzICovCisJcmV0dXJuICgoc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICopcmF3KTsKK30KKwogICAgICAgICAvKiBmbGFzaF9vZmZzZXQgJiAzIGFsd2F5cyBoYXMgdG8gYmUgemVybywgYmVjYXVzZSBub2RlcyBhcmUKIAkgICBhbHdheXMgYWxpZ25lZCBhdCA0IGJ5dGVzLiBTbyB3ZSBoYXZlIGEgY291cGxlIG9mIGV4dHJhIGJpdHMKIAkgICB0byBwbGF5IHdpdGgsIHdoaWNoIGluZGljYXRlIHRoZSBub2RlJ3Mgc3RhdHVzOyBzZWUgYmVsb3c6ICovCkBAIC05NSw2ICsxMzMsMTEgQEAKICNkZWZpbmUgcmVmX29ic29sZXRlKHJlZikJKCgocmVmKS0+Zmxhc2hfb2Zmc2V0ICYgMykgPT0gUkVGX09CU09MRVRFKQogI2RlZmluZSBtYXJrX3JlZl9ub3JtYWwocmVmKSAgICBkbyB7IChyZWYpLT5mbGFzaF9vZmZzZXQgPSByZWZfb2Zmc2V0KHJlZikgfCBSRUZfTk9STUFMOyB9IHdoaWxlKDApCiAKKy8qIE5COiBSRUZfUFJJU1RJTkUgZm9yIGFuIGlub2RlLWxlc3Mgbm9kZSAocmVmLT5uZXh0X2luX2lubyA9PSBOVUxMKSBpbmRpY2F0ZXMKKyAgIGl0IGlzIGFuIHVua25vd24gbm9kZSBvZiB0eXBlIEpGRlMyX05PREVUWVBFX1JXQ09NUEFUX0NPUFksIHNvIGl0J2xsIGdldAorICAgY29waWVkLiBJZiB5b3UgbmVlZCB0byBkbyBhbnl0aGluZyBkaWZmZXJlbnQgdG8gR0MgaW5vZGUtbGVzcyBub2RlcywgdGhlbgorICAgeW91IG5lZWQgdG8gbW9kaWZ5IGdjLmMgYWNjb3JkaW5nbHkuICovCisKIC8qIEZvciBlYWNoIGlub2RlIGluIHRoZSBmaWxlc3lzdGVtLCB3ZSBuZWVkIHRvIGtlZXAgYSByZWNvcmQgb2YKICAgIG5saW5rLCBiZWNhdXNlIGl0IHdvdWxkIGJlIGEgUElUQSB0byBzY2FuIHRoZSB3aG9sZSBkaXJlY3RvcnkgdHJlZQogICAgYXQgcmVhZF9pbm9kZSgpIHRpbWUgdG8gY2FsY3VsYXRlIGl0LCBhbmQgdG8ga2VlcCBzdWZmaWNpZW50IGluZm9ybWF0aW9uCkBAIC0xMDMsMTUgKzE0NiwyNyBAQAogICAgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBwaHlzaWNhbCBub2RlIHdoaWNoIGlzIHBhcnQgb2YgdGhpcyBpbm9kZSwgdG9vLgogKi8KIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSB7CisJLyogRmlyc3QgcGFydCBvZiBzdHJ1Y3R1cmUgaXMgc2hhcmVkIHdpdGggb3RoZXIgb2JqZWN0cyB3aGljaAorCSAgIGNhbiB0ZXJtaW5hdGUgdGhlIHJhdyBub2RlIHJlZnMnIG5leHRfaW5faW5vIGxpc3QgLS0gd2hpY2gKKwkgICBjdXJyZW50bHkgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtIGFuZCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmLiAqLworCiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpzY2FuX2RlbnRzOyAvKiBVc2VkIGR1cmluZyBzY2FuIHRvIGhvbGQKIAkJdGVtcG9yYXJ5IGxpc3RzIG9mIGRpcmVudHMsIGFuZCBsYXRlciBtdXN0IGJlIHNldCB0bwogCQlOVUxMIHRvIG1hcmsgdGhlIGVuZCBvZiB0aGUgcmF3X25vZGVfcmVmLT5uZXh0X2luX2lubwogCQljaGFpbi4gKi8KLQlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKm5leHQ7CiAJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqbm9kZXM7CisJdWludDhfdCBjbGFzczsJLyogSXQncyB1c2VkIGZvciBpZGVudGlmaWNhdGlvbiAqLworCisJLyogZW5kIG9mIHNoYXJlZCBzdHJ1Y3R1cmUgKi8KKworCXVpbnQ4X3QgZmxhZ3M7CisJdWludDE2X3Qgc3RhdGU7CiAJdWludDMyX3QgaW5vOworCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqbmV4dDsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICp4cmVmOworI2VuZGlmCiAJaW50IG5saW5rOwotCWludCBzdGF0ZTsKIH07CiAKIC8qIElub2RlIHN0YXRlcyBmb3IgJ3N0YXRlJyBhYm92ZS4gV2UgbmVlZCB0aGUgJ0dDJyBzdGF0ZSB0byBwcmV2ZW50CkBAIC0xMjUsOCArMTgwLDE2IEBACiAjZGVmaW5lIElOT19TVEFURV9SRUFESU5HCTUJLyogSW4gcmVhZF9pbm9kZSgpICovCiAjZGVmaW5lIElOT19TVEFURV9DTEVBUklORwk2CS8qIEluIGNsZWFyX2lub2RlKCkgKi8KIAorI2RlZmluZSBJTk9fRkxBR1NfWEFUVFJfQ0hFQ0tFRAkweDAxCS8qIGhhcyBubyBkdXBsaWNhdGUgeGF0dHJfcmVmICovCisKKyNkZWZpbmUgUkFXTk9ERV9DTEFTU19JTk9ERV9DQUNIRQkwCisjZGVmaW5lIFJBV05PREVfQ0xBU1NfWEFUVFJfREFUVU0JMQorI2RlZmluZSBSQVdOT0RFX0NMQVNTX1hBVFRSX1JFRgkJMgorCiAjZGVmaW5lIElOT0NBQ0hFX0hBU0hTSVpFIDEyOAogCisjZGVmaW5lIHdyaXRlX29mcyhjKSAoKGMpLT5uZXh0YmxvY2stPm9mZnNldCArIChjKS0+c2VjdG9yX3NpemUgLSAoYyktPm5leHRibG9jay0+ZnJlZV9zaXplKQorCiAvKgogICBMYXJnZXIgcmVwcmVzZW50YXRpb24gb2YgYSByYXcgbm9kZSwga2VwdCBpbi1jb3JlIG9ubHkgd2hlbiB0aGUKICAgc3RydWN0IGlub2RlIGZvciB0aGlzIHBhcnRpY3VsYXIgaW5vIGlzIGluc3RhbnRpYXRlZC4KQEAgLTE5Miw2ICsyNTUsNyBAQAogCXVpbnQzMl90IHdhc3RlZF9zaXplOwogCXVpbnQzMl90IGZyZWVfc2l6ZTsJLyogTm90ZSB0aGF0IHNlY3Rvcl9zaXplIC0gZnJlZV9zaXplCiAJCQkJICAgaXMgdGhlIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGZyZWUgc3BhY2UgKi8KKwl1aW50MzJfdCBhbGxvY2F0ZWRfcmVmczsKIAlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpmaXJzdF9ub2RlOwogCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmxhc3Rfbm9kZTsKIApAQCAtMjAzLDU3ICsyNjcsNyBAQAogCXJldHVybiAoKGMtPmZsYXNoX3NpemUgLyBjLT5zZWN0b3Jfc2l6ZSkgKiBzaXplb2YgKHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrKSkgPiAoMTI4ICogMTAyNCk7CiB9CiAKLS8qIENhbGN1bGF0ZSB0b3RsZW4gZnJvbSBzdXJyb3VuZGluZyBub2RlcyBvciBlcmFzZWJsb2NrICovCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IF9fcmVmX3RvdGxlbihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKLQkJCQkgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKLQkJCQkgICAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmVmKQotewotCXVpbnQzMl90IHJlZl9lbmQ7Ci0KLQlpZiAocmVmLT5uZXh0X3BoeXMpCi0JCXJlZl9lbmQgPSByZWZfb2Zmc2V0KHJlZi0+bmV4dF9waHlzKTsKLQllbHNlIHsKLQkJaWYgKCFqZWIpCi0JCQlqZWIgPSAmYy0+YmxvY2tzW3JlZi0+Zmxhc2hfb2Zmc2V0IC8gYy0+c2VjdG9yX3NpemVdOwotCi0JCS8qIExhc3Qgbm9kZSBpbiBibG9jay4gVXNlIGZyZWVfc3BhY2UgKi8KLQkJQlVHX09OKHJlZiAhPSBqZWItPmxhc3Rfbm9kZSk7Ci0JCXJlZl9lbmQgPSBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemU7Ci0JfQotCXJldHVybiByZWZfZW5kIC0gcmVmX29mZnNldChyZWYpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90IHJlZl90b3RsZW4oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCi0JCQkJICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAotCQkJCSAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmVmKQotewotCXVpbnQzMl90IHJldDsKLQotI2lmIENPTkZJR19KRkZTMl9GU19ERUJVRyA+IDAKLQlpZiAoamViICYmIGplYiAhPSAmYy0+YmxvY2tzW3JlZi0+Zmxhc2hfb2Zmc2V0IC8gYy0+c2VjdG9yX3NpemVdKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgInJlZl90b3RsZW4gY2FsbGVkIHdpdGggd3JvbmcgYmxvY2sgLS0gYXQgMHglMDh4IGluc3RlYWQgb2YgMHglMDh4OyByZWYgMHglMDh4XG4iLAotCQkgICAgICAgamViLT5vZmZzZXQsIGMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXS5vZmZzZXQsIHJlZl9vZmZzZXQocmVmKSk7Ci0JCUJVRygpOwotCX0KLSNlbmRpZgotCi0jaWYgMQotCXJldCA9IHJlZi0+X190b3RsZW47Ci0jZWxzZQotCS8qIFRoaXMgZG9lc24ndCBhY3R1YWxseSB3b3JrIHlldCAqLwotCXJldCA9IF9fcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7Ci0JaWYgKHJldCAhPSByZWYtPl9fdG90bGVuKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIlRvdGxlbiBmb3IgcmVmIGF0ICVwICgweCUwOHgtMHglMDh4KSBtaXNjYWxjdWxhdGVkIGFzIDB4JXggaW5zdGVhZCBvZiAleFxuIiwKLQkJICAgICAgIHJlZiwgcmVmX29mZnNldChyZWYpLCByZWZfb2Zmc2V0KHJlZikrcmVmLT5fX3RvdGxlbiwKLQkJICAgICAgIHJldCwgcmVmLT5fX3RvdGxlbik7Ci0JCWlmICghamViKQotCQkJamViID0gJmMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXTsKLQkJamZmczJfZGJnX2R1bXBfbm9kZV9yZWZzX25vbG9jayhjLCBqZWIpOwotCQlCVUcoKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQorI2RlZmluZSByZWZfdG90bGVuKGEsIGIsIGMpIF9famZmczJfcmVmX3RvdGxlbigoYSksIChiKSwgKGMpKQogCiAjZGVmaW5lIEFMTE9DX05PUk1BTAkwCS8qIE5vcm1hbCBhbGxvY2F0aW9uICovCiAjZGVmaW5lIEFMTE9DX0RFTEVUSU9OCTEJLyogRGVsZXRpb24gbm9kZS4gQmVzdCB0byBhbGxvdyBpdCAqLwpAQCAtMjY4LDEzICsyODIsMTUgQEAKIAogI2RlZmluZSBQQUQoeCkgKCgoeCkrMykmfjMpCiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICpqZmZzMl9yYXdfcmVmX3RvX2ljKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdykKK3N0YXRpYyBpbmxpbmUgaW50IGpmZnMyX2VuY29kZV9kZXYodW5pb24gamZmczJfZGV2aWNlX25vZGUgKmpkZXYsIGRldl90IHJkZXYpCiB7Ci0Jd2hpbGUocmF3LT5uZXh0X2luX2lubykgewotCQlyYXcgPSByYXctPm5leHRfaW5faW5vOworCWlmIChvbGRfdmFsaWRfZGV2KHJkZXYpKSB7CisJCWpkZXYtPm9sZCA9IGNwdV90b19qZTE2KG9sZF9lbmNvZGVfZGV2KHJkZXYpKTsKKwkJcmV0dXJuIHNpemVvZihqZGV2LT5vbGQpOworCX0gZWxzZSB7CisJCWpkZXYtPm5ldyA9IGNwdV90b19qZTMyKG5ld19lbmNvZGVfZGV2KHJkZXYpKTsKKwkJcmV0dXJuIHNpemVvZihqZGV2LT5uZXcpOwogCX0KLQotCXJldHVybiAoKHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqKXJhdyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqZnJhZ19maXJzdChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKQEAgLTI5OSw3ICszMTUsNiBAQAogCXJldHVybiByYl9lbnRyeShub2RlLCBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnLCByYik7CiB9CiAKLSNkZWZpbmUgcmJfcGFyZW50KHJiKSAoKHJiKS0+cmJfcGFyZW50KQogI2RlZmluZSBmcmFnX25leHQoZnJhZykgcmJfZW50cnkocmJfbmV4dCgmKGZyYWcpLT5yYiksIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcsIHJiKQogI2RlZmluZSBmcmFnX3ByZXYoZnJhZykgcmJfZW50cnkocmJfcHJldigmKGZyYWcpLT5yYiksIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcsIHJiKQogI2RlZmluZSBmcmFnX3BhcmVudChmcmFnKSByYl9lbnRyeShyYl9wYXJlbnQoJihmcmFnKS0+cmIpLCBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnLCByYikKQEAgLTMyNCwyOCArMzM5LDQ0IEBACiBpbnQgamZmczJfYWRkX2Z1bGxfZG5vZGVfdG9faW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCBzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm4pOwogdm9pZCBqZmZzMl90cnVuY2F0ZV9mcmFndHJlZSAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCByYl9yb290ICpsaXN0LCB1aW50MzJfdCBzaXplKTsKIGludCBqZmZzMl9hZGRfb2xkZXJfZnJhZ190b19mcmFndHJlZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsIHN0cnVjdCBqZmZzMl90bXBfZG5vZGVfaW5mbyAqdG4pOworc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqamZmczJfbGlua19ub2RlX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkJICAgICAgIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCisJCQkJCSAgICAgICB1aW50MzJfdCBvZnMsIHVpbnQzMl90IGxlbiwKKwkJCQkJICAgICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpOworZXh0ZXJuIHVpbnQzMl90IF9famZmczJfcmVmX3RvdGxlbihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkgICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAorCQkJCSAgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJlZik7CiAKIC8qIG5vZGVtZ210LmMgKi8KIGludCBqZmZzMl90aHJlYWRfc2hvdWxkX3dha2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwotaW50IGpmZnMyX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IG1pbnNpemUsIHVpbnQzMl90ICpvZnMsCitpbnQgamZmczJfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwKIAkJCXVpbnQzMl90ICpsZW4sIGludCBwcmlvLCB1aW50MzJfdCBzdW1zaXplKTsKLWludCBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLCB1aW50MzJfdCAqb2ZzLAoraW50IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2Moc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IG1pbnNpemUsCiAJCQl1aW50MzJfdCAqbGVuLCB1aW50MzJfdCBzdW1zaXplKTsKLWludCBqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5ldyk7CitzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIAorCQkJCQkJICAgICAgIHVpbnQzMl90IG9mcywgdWludDMyX3QgbGVuLAorCQkJCQkJICAgICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpOwogdm9pZCBqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CiB2b2lkIGpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3KTsKIAogLyogd3JpdGUuYyAqLwogaW50IGpmZnMyX2RvX25ld19pbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsIHVpbnQzMl90IG1vZGUsIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpKTsKIAotc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmpmZnMyX3dyaXRlX2Rub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFsZW4sIHVpbnQzMl90IGZsYXNoX29mcywgaW50IGFsbG9jX21vZGUpOwotc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpqZmZzMl93cml0ZV9kaXJlbnQoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCBzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqcmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVpbnQzMl90IG5hbWVsZW4sIHVpbnQzMl90IGZsYXNoX29mcywgaW50IGFsbG9jX21vZGUpOworc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKmpmZnMyX3dyaXRlX2Rub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwKKwkJCQkJICAgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJCSAgIHVpbnQzMl90IGRhdGFsZW4sIGludCBhbGxvY19tb2RlKTsKK3N0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqamZmczJfd3JpdGVfZGlyZW50KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwKKwkJCQkJICAgICBzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqcmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsCisJCQkJCSAgICAgdWludDMyX3QgbmFtZWxlbiwgaW50IGFsbG9jX21vZGUpOwogaW50IGpmZnMyX3dyaXRlX2lub2RlX3JhbmdlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwKIAkJCSAgICBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSwgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJICAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3Qgd3JpdGVsZW4sIHVpbnQzMl90ICpyZXRsZW4pOwotaW50IGpmZnMyX2RvX2NyZWF0ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmRpcl9mLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiwgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKLWludCBqZmZzMl9kb191bmxpbmsoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpkaXJfZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpkZWFkX2YsIHVpbnQzMl90IHRpbWUpOwotaW50IGpmZnMyX2RvX2xpbmsgKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGlyX2YsIHVpbnQzMl90IGlubywgdWludDhfdCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgdWludDMyX3QgdGltZSk7CitpbnQgamZmczJfZG9fY3JlYXRlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGlyX2YsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLAorCQkgICAgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuKTsKK2ludCBqZmZzMl9kb191bmxpbmsoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpkaXJfZiwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIGludCBuYW1lbGVuLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGVhZF9mLCB1aW50MzJfdCB0aW1lKTsKK2ludCBqZmZzMl9kb19saW5rKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZGlyX2YsIHVpbnQzMl90IGlubywKKwkJICAgdWludDhfdCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgdWludDMyX3QgdGltZSk7CiAKIAogLyogcmVhZGlub2RlLmMgKi8KQEAgLTM2OCwxMiArMzk5LDE5IEBACiB2b2lkIGpmZnMyX2ZyZWVfcmF3X2lub2RlKHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKik7CiBzdHJ1Y3QgamZmczJfdG1wX2Rub2RlX2luZm8gKmpmZnMyX2FsbG9jX3RtcF9kbm9kZV9pbmZvKHZvaWQpOwogdm9pZCBqZmZzMl9mcmVlX3RtcF9kbm9kZV9pbmZvKHN0cnVjdCBqZmZzMl90bXBfZG5vZGVfaW5mbyAqKTsKLXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZih2b2lkKTsKLXZvaWQgamZmczJfZnJlZV9yYXdfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqKTsKK2ludCBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCSBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLCBpbnQgbnIpOwordm9pZCBqZmZzMl9mcmVlX3JlZmJsb2NrKHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKik7CiBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICpqZmZzMl9hbGxvY19ub2RlX2ZyYWcodm9pZCk7CiB2b2lkIGpmZnMyX2ZyZWVfbm9kZV9mcmFnKHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKik7CiBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmpmZnMyX2FsbG9jX2lub2RlX2NhY2hlKHZvaWQpOwogdm9pZCBqZmZzMl9mcmVlX2lub2RlX2NhY2hlKHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqKTsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKK3N0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqamZmczJfYWxsb2NfeGF0dHJfZGF0dW0odm9pZCk7Cit2b2lkIGpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICopOworc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqamZmczJfYWxsb2NfeGF0dHJfcmVmKHZvaWQpOwordm9pZCBqZmZzMl9mcmVlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICopOworI2VuZGlmCiAKIC8qIGdjLmMgKi8KIGludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfcGFzcyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CkBAIC0zOTMsMTIgKzQzMSwxNCBAQAogCQkJCXVpbnQzMl90IG9mcywgdWludDMyX3QgbGVuKTsKIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqamZmczJfc2Nhbl9tYWtlX2lub19jYWNoZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgaW5vKTsKIGludCBqZmZzMl9zY2FuX2NsYXNzaWZ5X2plYihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYik7CitpbnQgamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwgdWludDMyX3Qgc2l6ZSk7CiAKIC8qIGJ1aWxkLmMgKi8KIGludCBqZmZzMl9kb19tb3VudF9mcyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CiAKIC8qIGVyYXNlLmMgKi8KIHZvaWQgamZmczJfZXJhc2VfcGVuZGluZ19ibG9ja3Moc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIGludCBjb3VudCk7Cit2b2lkIGpmZnMyX2ZyZWVfamViX25vZGVfcmVmcyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYik7CiAKICNpZmRlZiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIKIC8qIHdidWYuYyAqLwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZW1nbXQuYyBiL2ZzL2pmZnMyL25vZGVtZ210LmMKaW5kZXggNDkxMjdhMS4uOGJlZGZkMiAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZW1nbXQuYworKysgYi9mcy9qZmZzMi9ub2RlbWdtdC5jCkBAIC0yMywxMyArMjMsMTIgQEAKICAqCWpmZnMyX3Jlc2VydmVfc3BhY2UgLSByZXF1ZXN0IHBoeXNpY2FsIHNwYWNlIHRvIHdyaXRlIG5vZGVzIHRvIGZsYXNoCiAgKglAYzogc3VwZXJibG9jayBpbmZvCiAgKglAbWluc2l6ZTogTWluaW11bSBhY2NlcHRhYmxlIHNpemUgb2YgYWxsb2NhdGlvbgotICoJQG9mczogUmV0dXJuZWQgdmFsdWUgb2Ygbm9kZSBvZmZzZXQKICAqCUBsZW46IFJldHVybmVkIHZhbHVlIG9mIGFsbG9jYXRpb24gbGVuZ3RoCiAgKglAcHJpbzogQWxsb2NhdGlvbiB0eXBlIC0gQUxMT0Nfe05PUk1BTCxERUxFVElPTn0KICAqCiAgKglSZXF1ZXN0cyBhIGJsb2NrIG9mIHBoeXNpY2FsIHNwYWNlIG9uIHRoZSBmbGFzaC4gUmV0dXJucyB6ZXJvIGZvciBzdWNjZXNzCi0gKglhbmQgcHV0cyAnb2ZzJyBhbmQgJ2xlbicgaW50byB0aGUgYXBwcmlvcHJpYXRlIHBsYWNlLCBvciByZXR1cm5zIC1FTk9TUEMKLSAqCW9yIG90aGVyIGVycm9yIGlmIGFwcHJvcHJpYXRlLgorICoJYW5kIHB1dHMgJ2xlbicgaW50byB0aGUgYXBwcm9wcmlhdGUgcGxhY2UsIG9yIHJldHVybnMgLUVOT1NQQyBvciBvdGhlciAKKyAqCWVycm9yIGlmIGFwcHJvcHJpYXRlLiBEb2Vzbid0IHJldHVybiBsZW4gc2luY2UgdGhhdCdzIAogICoKICAqCUlmIGl0IHJldHVybnMgemVybywgamZmczJfcmVzZXJ2ZV9zcGFjZSgpIGFsc28gZG93bnMgdGhlIHBlci1maWxlc3lzdGVtCiAgKglhbGxvY2F0aW9uIHNlbWFwaG9yZSwgdG8gcHJldmVudCBtb3JlIHRoYW4gb25lIGFsbG9jYXRpb24gZnJvbSBiZWluZwpAQCAtNDAsOSArMzksOSBAQAogICovCiAKIHN0YXRpYyBpbnQgamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgIHVpbnQzMl90IG1pbnNpemUsCi0JCQkJCXVpbnQzMl90ICpvZnMsIHVpbnQzMl90ICpsZW4sIHVpbnQzMl90IHN1bXNpemUpOworCQkJCSAgdWludDMyX3QgKmxlbiwgdWludDMyX3Qgc3Vtc2l6ZSk7CiAKLWludCBqZmZzMl9yZXNlcnZlX3NwYWNlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLCB1aW50MzJfdCAqb2ZzLAoraW50IGpmZnMyX3Jlc2VydmVfc3BhY2Uoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHVpbnQzMl90IG1pbnNpemUsCiAJCQl1aW50MzJfdCAqbGVuLCBpbnQgcHJpbywgdWludDMyX3Qgc3Vtc2l6ZSkKIHsKIAlpbnQgcmV0ID0gLUVBR0FJTjsKQEAgLTEzMiwxOSArMTMxLDIxIEBACiAJCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJCX0KIAotCQlyZXQgPSBqZmZzMl9kb19yZXNlcnZlX3NwYWNlKGMsIG1pbnNpemUsIG9mcywgbGVuLCBzdW1zaXplKTsKKwkJcmV0ID0gamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShjLCBtaW5zaXplLCBsZW4sIHN1bXNpemUpOwogCQlpZiAocmV0KSB7CiAJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfcmVzZXJ2ZV9zcGFjZTogcmV0IGlzICVkXG4iLCByZXQpKTsKIAkJfQogCX0KIAlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBjLT5uZXh0YmxvY2ssIDEpOwogCWlmIChyZXQpCiAJCXVwKCZjLT5hbGxvY19zZW0pOwogCXJldHVybiByZXQ7CiB9CiAKLWludCBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLCB1aW50MzJfdCAqb2ZzLAotCQkJdWludDMyX3QgKmxlbiwgdWludDMyX3Qgc3Vtc2l6ZSkKK2ludCBqZmZzMl9yZXNlcnZlX3NwYWNlX2djKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCBtaW5zaXplLAorCQkJICAgdWludDMyX3QgKmxlbiwgdWludDMyX3Qgc3Vtc2l6ZSkKIHsKIAlpbnQgcmV0ID0gLUVBR0FJTjsKIAltaW5zaXplID0gUEFEKG1pbnNpemUpOwpAQCAtMTUzLDEyICsxNTQsMTUgQEAKIAogCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAl3aGlsZShyZXQgPT0gLUVBR0FJTikgewotCQlyZXQgPSBqZmZzMl9kb19yZXNlcnZlX3NwYWNlKGMsIG1pbnNpemUsIG9mcywgbGVuLCBzdW1zaXplKTsKKwkJcmV0ID0gamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShjLCBtaW5zaXplLCBsZW4sIHN1bXNpemUpOwogCQlpZiAocmV0KSB7CiAJCSAgICAgICAgRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3Jlc2VydmVfc3BhY2VfZ2M6IGxvb3BpbmcsIHJldCBpcyAlZFxuIiwgcmV0KSk7CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJaWYgKCFyZXQpCisJCXJldCA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgYy0+bmV4dGJsb2NrLCAxKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI1OSwxMCArMjYzLDExIEBACiB9CiAKIC8qIENhbGxlZCB3aXRoIGFsbG9jIHNlbSBfYW5kXyBlcmFzZV9jb21wbGV0aW9uX2xvY2sgKi8KLXN0YXRpYyBpbnQgamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwgdWludDMyX3QgKm9mcywgdWludDMyX3QgKmxlbiwgdWludDMyX3Qgc3Vtc2l6ZSkKK3N0YXRpYyBpbnQgamZmczJfZG9fcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgdWludDMyX3QgbWluc2l6ZSwKKwkJCQkgIHVpbnQzMl90ICpsZW4sIHVpbnQzMl90IHN1bXNpemUpCiB7CiAJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiA9IGMtPm5leHRibG9jazsKLQl1aW50MzJfdCByZXNlcnZlZF9zaXplOyAJCQkvKiBmb3Igc3VtbWFyeSBpbmZvcm1hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBqZWIgKi8KKwl1aW50MzJfdCByZXNlcnZlZF9zaXplOwkJCQkvKiBmb3Igc3VtbWFyeSBpbmZvcm1hdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBqZWIgKi8KIAlpbnQgcmV0OwogCiAgcmVzdGFydDoKQEAgLTMxMiw2ICszMTcsOCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKGplYiAmJiBtaW5zaXplID4gamViLT5mcmVlX3NpemUpIHsKKwkJCXVpbnQzMl90IHdhc3RlOworCiAJCQkvKiBTa2lwIHRoZSBlbmQgb2YgdGhpcyBibG9jayBhbmQgZmlsZSBpdCBhcyBoYXZpbmcgc29tZSBkaXJ0eSBzcGFjZSAqLwogCQkJLyogSWYgdGhlcmUncyBhIHBlbmRpbmcgd3JpdGUgdG8gaXQsIGZsdXNoIG5vdyAqLwogCkBAIC0zMjQsMTAgKzMzMSwyNiBAQAogCQkJCWdvdG8gcmVzdGFydDsKIAkJCX0KIAotCQkJYy0+d2FzdGVkX3NpemUgKz0gamViLT5mcmVlX3NpemU7Ci0JCQljLT5mcmVlX3NpemUgLT0gamViLT5mcmVlX3NpemU7Ci0JCQlqZWItPndhc3RlZF9zaXplICs9IGplYi0+ZnJlZV9zaXplOwotCQkJamViLT5mcmVlX3NpemUgPSAwOworCQkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwkJCXJldCA9IGpmZnMyX3ByZWFsbG9jX3Jhd19ub2RlX3JlZnMoYywgamViLCAxKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIHJldDsKKwkJCS8qIEp1c3QgbG9jayBpdCBhZ2FpbiBhbmQgY29udGludWUuIE5vdGhpbmcgbXVjaCBjYW4gY2hhbmdlIGJlY2F1c2UKKwkJCSAgIHdlIGhvbGQgYy0+YWxsb2Nfc2VtIGFueXdheS4gSW4gZmFjdCwgaXQncyBub3QgZW50aXJlbHkgY2xlYXIgd2h5CisJCQkgICB3ZSBob2xkIGMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayBpbiB0aGUgbWFqb3JpdHkgb2YgdGhpcyBmdW5jdGlvbi4uLgorCQkJICAgYnV0IHRoYXQncyBhIHF1ZXN0aW9uIGZvciBhbm90aGVyIChtb3JlIGNhZmZlaW5lLXJpY2gpIGRheS4gKi8KKwkJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworCQkJd2FzdGUgPSBqZWItPmZyZWVfc2l6ZTsKKwkJCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLAorCQkJCQkgICAgKGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSB3YXN0ZSkgfCBSRUZfT0JTT0xFVEUsCisJCQkJCSAgICB3YXN0ZSwgTlVMTCk7CisJCQkvKiBGSVhNRTogdGhhdCBtYWRlIGl0IGNvdW50IGFzIGRpcnR5LiBDb252ZXJ0IHRvIHdhc3RlZCAqLworCQkJamViLT5kaXJ0eV9zaXplIC09IHdhc3RlOworCQkJYy0+ZGlydHlfc2l6ZSAtPSB3YXN0ZTsKKwkJCWplYi0+d2FzdGVkX3NpemUgKz0gd2FzdGU7CisJCQljLT53YXN0ZWRfc2l6ZSArPSB3YXN0ZTsKIAogCQkJamZmczJfY2xvc2VfbmV4dGJsb2NrKGMsIGplYik7CiAJCQlqZWIgPSBOVUxMOwpAQCAtMzQ5LDcgKzM3Miw2IEBACiAJfQogCS8qIE9LLCBqZWIgKD09Yy0+bmV4dGJsb2NrKSBpcyBub3cgcG9pbnRpbmcgYXQgYSBibG9jayB3aGljaCBkZWZpbml0ZWx5IGhhcwogCSAgIGVub3VnaCBzcGFjZSAqLwotCSpvZnMgPSBqZWItPm9mZnNldCArIChjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKTsKIAkqbGVuID0gamViLT5mcmVlX3NpemUgLSByZXNlcnZlZF9zaXplOwogCiAJaWYgKGMtPmNsZWFubWFya2VyX3NpemUgJiYgamViLT51c2VkX3NpemUgPT0gYy0+Y2xlYW5tYXJrZXJfc2l6ZSAmJgpAQCAtMzY1LDcgKzM4Nyw4IEBACiAJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAl9CiAKLQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZG9fcmVzZXJ2ZV9zcGFjZSgpOiBHaXZpbmcgMHgleCBieXRlcyBhdCAweCV4XG4iLCAqbGVuLCAqb2ZzKSk7CisJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2RvX3Jlc2VydmVfc3BhY2UoKTogR2l2aW5nIDB4JXggYnl0ZXMgYXQgMHgleFxuIiwKKwkJICAqbGVuLCBqZWItPm9mZnNldCArIChjLT5zZWN0b3Jfc2l6ZSAtIGplYi0+ZnJlZV9zaXplKSkpOwogCXJldHVybiAwOwogfQogCkBAIC0zNzQsNyArMzk3LDYgQEAKICAqCUBjOiBzdXBlcmJsb2NrIGluZm8KICAqCUBuZXc6IG5ldyBub2RlIHJlZmVyZW5jZSB0byBhZGQKICAqCUBsZW46IGxlbmd0aCBvZiB0aGlzIHBoeXNpY2FsIG5vZGUKLSAqCUBkaXJ0eTogZGlydHkgZmxhZyBmb3IgbmV3IG5vZGUKICAqCiAgKglTaG91bGQgb25seSBiZSB1c2VkIHRvIHJlcG9ydCBub2RlcyBmb3Igd2hpY2ggc3BhY2UgaGFzIGJlZW4gYWxsb2NhdGVkCiAgKglieSBqZmZzMl9yZXNlcnZlX3NwYWNlLgpAQCAtMzgyLDQyICs0MDQsMzAgQEAKICAqCU11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGFsbG9jX3NlbSBoZWxkLgogICovCiAKLWludCBqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5ldykKK3N0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKmpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkJCSAgICAgICB1aW50MzJfdCBvZnMsIHVpbnQzMl90IGxlbiwKKwkJCQkJCSAgICAgICBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQogewogCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7Ci0JdWludDMyX3QgbGVuOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5ldzsKIAotCWplYiA9ICZjLT5ibG9ja3NbbmV3LT5mbGFzaF9vZmZzZXQgLyBjLT5zZWN0b3Jfc2l6ZV07Ci0JbGVuID0gcmVmX3RvdGxlbihjLCBqZWIsIG5ldyk7CisJamViID0gJmMtPmJsb2Nrc1tvZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CiAKLQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKCk6IE5vZGUgYXQgMHgleCglZCksIHNpemUgMHgleFxuIiwgcmVmX29mZnNldChuZXcpLCByZWZfZmxhZ3MobmV3KSwgbGVuKSk7CisJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZigpOiBOb2RlIGF0IDB4JXgoJWQpLCBzaXplIDB4JXhcbiIsCisJCSAgb2ZzICYgfjMsIG9mcyAmIDMsIGxlbikpOwogI2lmIDEKLQkvKiB3ZSBjb3VsZCBnZXQgc29tZSBvYnNvbGV0ZSBub2RlcyBhZnRlciBuZXh0YmxvY2sgd2FzIHJlZmlsZWQKLQkgICBpbiB3YnVmLmMgKi8KLQlpZiAoKGMtPm5leHRibG9jayB8fCAhcmVmX29ic29sZXRlKG5ldykpCi0JICAgICYmKGplYiAhPSBjLT5uZXh0YmxvY2sgfHwgcmVmX29mZnNldChuZXcpICE9IGplYi0+b2Zmc2V0ICsgKGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUpKSkgeworCS8qIEFsbG93IG5vbi1vYnNvbGV0ZSBub2RlcyBvbmx5IHRvIGJlIGFkZGVkIGF0IHRoZSBlbmQgb2YgYy0+bmV4dGJsb2NrLCAKKwkgICBpZiBjLT5uZXh0YmxvY2sgaXMgc2V0LiBOb3RlIHRoYXQgd2J1Zi5jIHdpbGwgZmlsZSBvYnNvbGV0ZSBub2RlcworCSAgIGV2ZW4gYWZ0ZXIgcmVmaWxpbmcgYy0+bmV4dGJsb2NrICovCisJaWYgKChjLT5uZXh0YmxvY2sgfHwgKChvZnMgJiAzKSAhPSBSRUZfT0JTT0xFVEUpKQorCSAgICAmJiAoamViICE9IGMtPm5leHRibG9jayB8fCAob2ZzICYgfjMpICE9IGplYi0+b2Zmc2V0ICsgKGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhcmdoLiBub2RlIGFkZGVkIGluIHdyb25nIHBsYWNlXG4iKTsKLQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYobmV3KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KICNlbmRpZgogCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAotCWlmICghamViLT5maXJzdF9ub2RlKQotCQlqZWItPmZpcnN0X25vZGUgPSBuZXc7Ci0JaWYgKGplYi0+bGFzdF9ub2RlKQotCQlqZWItPmxhc3Rfbm9kZS0+bmV4dF9waHlzID0gbmV3OwotCWplYi0+bGFzdF9ub2RlID0gbmV3OwotCi0JamViLT5mcmVlX3NpemUgLT0gbGVuOwotCWMtPmZyZWVfc2l6ZSAtPSBsZW47Ci0JaWYgKHJlZl9vYnNvbGV0ZShuZXcpKSB7Ci0JCWplYi0+ZGlydHlfc2l6ZSArPSBsZW47Ci0JCWMtPmRpcnR5X3NpemUgKz0gbGVuOwotCX0gZWxzZSB7Ci0JCWplYi0+dXNlZF9zaXplICs9IGxlbjsKLQkJYy0+dXNlZF9zaXplICs9IGxlbjsKLQl9CisJbmV3ID0gamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcywgbGVuLCBpYyk7CiAKIAlpZiAoIWplYi0+ZnJlZV9zaXplICYmICFqZWItPmRpcnR5X3NpemUgJiYgIUlTRElSVFkoamViLT53YXN0ZWRfc2l6ZSkpIHsKIAkJLyogSWYgaXQgbGl2ZXMgb24gdGhlIGRpcnR5X2xpc3QsIGpmZnMyX3Jlc2VydmVfc3BhY2Ugd2lsbCBwdXQgaXQgdGhlcmUgKi8KQEAgLTQzOCw3ICs0NDgsNyBAQAogCiAJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbmV3OwogfQogCiAKQEAgLTQ3MCw4ICs0ODAsOSBAQAogCXN0cnVjdCBqZmZzMl91bmtub3duX25vZGUgbjsKIAlpbnQgcmV0LCBhZGRlZHNpemU7CiAJc2l6ZV90IHJldGxlbjsKKwl1aW50MzJfdCBmcmVlZF9sZW47CiAKLQlpZighcmVmKSB7CisJaWYodW5saWtlbHkoIXJlZikpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJFRUVFRUsuIGpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZSBjYWxsZWQgd2l0aCBOVUxMIG5vZGVcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtNDk5LDMyICs1MTAsMzQgQEAKIAogCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAorCWZyZWVkX2xlbiA9IHJlZl90b3RsZW4oYywgamViLCByZWYpOworCiAJaWYgKHJlZl9mbGFncyhyZWYpID09IFJFRl9VTkNIRUNLRUQpIHsKLQkJRDEoaWYgKHVubGlrZWx5KGplYi0+dW5jaGVja2VkX3NpemUgPCByZWZfdG90bGVuKGMsIGplYiwgcmVmKSkpIHsKKwkJRDEoaWYgKHVubGlrZWx5KGplYi0+dW5jaGVja2VkX3NpemUgPCBmcmVlZF9sZW4pKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgInJhdyB1bmNoZWNrZWQgbm9kZSBvZiBzaXplIDB4JTA4eCBmcmVlZCBmcm9tIGVyYXNlIGJsb2NrICVkIGF0IDB4JTA4eCwgYnV0IHVuY2hlY2tlZF9zaXplIHdhcyBhbHJlYWR5IDB4JTA4eFxuIiwKLQkJCSAgICAgICByZWZfdG90bGVuKGMsIGplYiwgcmVmKSwgYmxvY2tuciwgcmVmLT5mbGFzaF9vZmZzZXQsIGplYi0+dXNlZF9zaXplKTsKKwkJCSAgICAgICBmcmVlZF9sZW4sIGJsb2NrbnIsIHJlZi0+Zmxhc2hfb2Zmc2V0LCBqZWItPnVzZWRfc2l6ZSk7CiAJCQlCVUcoKTsKIAkJfSkKLQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIk9ic29sZXRpbmcgcHJldmlvdXNseSB1bmNoZWNrZWQgbm9kZSBhdCAweCUwOHggb2YgbGVuICV4OiAiLCByZWZfb2Zmc2V0KHJlZiksIHJlZl90b3RsZW4oYywgamViLCByZWYpKSk7Ci0JCWplYi0+dW5jaGVja2VkX3NpemUgLT0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7Ci0JCWMtPnVuY2hlY2tlZF9zaXplIC09IHJlZl90b3RsZW4oYywgamViLCByZWYpOworCQlEMShwcmludGsoS0VSTl9ERUJVRyAiT2Jzb2xldGluZyBwcmV2aW91c2x5IHVuY2hlY2tlZCBub2RlIGF0IDB4JTA4eCBvZiBsZW4gJXg6ICIsIHJlZl9vZmZzZXQocmVmKSwgZnJlZWRfbGVuKSk7CisJCWplYi0+dW5jaGVja2VkX3NpemUgLT0gZnJlZWRfbGVuOworCQljLT51bmNoZWNrZWRfc2l6ZSAtPSBmcmVlZF9sZW47CiAJfSBlbHNlIHsKLQkJRDEoaWYgKHVubGlrZWx5KGplYi0+dXNlZF9zaXplIDwgcmVmX3RvdGxlbihjLCBqZWIsIHJlZikpKSB7CisJCUQxKGlmICh1bmxpa2VseShqZWItPnVzZWRfc2l6ZSA8IGZyZWVkX2xlbikpIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAicmF3IG5vZGUgb2Ygc2l6ZSAweCUwOHggZnJlZWQgZnJvbSBlcmFzZSBibG9jayAlZCBhdCAweCUwOHgsIGJ1dCB1c2VkX3NpemUgd2FzIGFscmVhZHkgMHglMDh4XG4iLAotCQkJICAgICAgIHJlZl90b3RsZW4oYywgamViLCByZWYpLCBibG9ja25yLCByZWYtPmZsYXNoX29mZnNldCwgamViLT51c2VkX3NpemUpOworCQkJICAgICAgIGZyZWVkX2xlbiwgYmxvY2tuciwgcmVmLT5mbGFzaF9vZmZzZXQsIGplYi0+dXNlZF9zaXplKTsKIAkJCUJVRygpOwogCQl9KQotCQlEMShwcmludGsoS0VSTl9ERUJVRyAiT2Jzb2xldGluZyBub2RlIGF0IDB4JTA4eCBvZiBsZW4gJSN4OiAiLCByZWZfb2Zmc2V0KHJlZiksIHJlZl90b3RsZW4oYywgamViLCByZWYpKSk7Ci0JCWplYi0+dXNlZF9zaXplIC09IHJlZl90b3RsZW4oYywgamViLCByZWYpOwotCQljLT51c2VkX3NpemUgLT0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7CisJCUQxKHByaW50ayhLRVJOX0RFQlVHICJPYnNvbGV0aW5nIG5vZGUgYXQgMHglMDh4IG9mIGxlbiAlI3g6ICIsIHJlZl9vZmZzZXQocmVmKSwgZnJlZWRfbGVuKSk7CisJCWplYi0+dXNlZF9zaXplIC09IGZyZWVkX2xlbjsKKwkJYy0+dXNlZF9zaXplIC09IGZyZWVkX2xlbjsKIAl9CiAKIAkvLyBUYWtlIGNhcmUsIHRoYXQgd2FzdGVkIHNpemUgaXMgdGFrZW4gaW50byBjb25jZXJuCi0JaWYgKChqZWItPmRpcnR5X3NpemUgfHwgSVNESVJUWShqZWItPndhc3RlZF9zaXplICsgcmVmX3RvdGxlbihjLCBqZWIsIHJlZikpKSAmJiBqZWIgIT0gYy0+bmV4dGJsb2NrKSB7Ci0JCUQxKHByaW50ayhLRVJOX0RFQlVHICJEaXJ0eWluZ1xuIikpOwotCQlhZGRlZHNpemUgPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKLQkJamViLT5kaXJ0eV9zaXplICs9IHJlZl90b3RsZW4oYywgamViLCByZWYpOwotCQljLT5kaXJ0eV9zaXplICs9IHJlZl90b3RsZW4oYywgamViLCByZWYpOworCWlmICgoamViLT5kaXJ0eV9zaXplIHx8IElTRElSVFkoamViLT53YXN0ZWRfc2l6ZSArIGZyZWVkX2xlbikpICYmIGplYiAhPSBjLT5uZXh0YmxvY2spIHsKKwkJRDEocHJpbnRrKCJEaXJ0eWluZ1xuIikpOworCQlhZGRlZHNpemUgPSBmcmVlZF9sZW47CisJCWplYi0+ZGlydHlfc2l6ZSArPSBmcmVlZF9sZW47CisJCWMtPmRpcnR5X3NpemUgKz0gZnJlZWRfbGVuOwogCiAJCS8qIENvbnZlcnQgd2FzdGVkIHNwYWNlIHRvIGRpcnR5LCBpZiBub3QgYSBiYWQgYmxvY2sgKi8KIAkJaWYgKGplYi0+d2FzdGVkX3NpemUpIHsKQEAgLTU0MywxMCArNTU2LDEwIEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlEMShwcmludGsoS0VSTl9ERUJVRyAiV2FzdGluZ1xuIikpOworCQlEMShwcmludGsoIldhc3RpbmdcbiIpKTsKIAkJYWRkZWRzaXplID0gMDsKLQkJamViLT53YXN0ZWRfc2l6ZSArPSByZWZfdG90bGVuKGMsIGplYiwgcmVmKTsKLQkJYy0+d2FzdGVkX3NpemUgKz0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7CisJCWplYi0+d2FzdGVkX3NpemUgKz0gZnJlZWRfbGVuOworCQljLT53YXN0ZWRfc2l6ZSArPSBmcmVlZF9sZW47CiAJfQogCXJlZi0+Zmxhc2hfb2Zmc2V0ID0gcmVmX29mZnNldChyZWYpIHwgUkVGX09CU09MRVRFOwogCkBAIC02MjIsNyArNjM1LDcgQEAKIAkvKiBUaGUgZXJhc2VfZnJlZV9zZW0gaXMgbG9ja2VkLCBhbmQgaGFzIGJlZW4gc2luY2UgYmVmb3JlIHdlIG1hcmtlZCB0aGUgbm9kZSBvYnNvbGV0ZQogCSAgIGFuZCBwb3RlbnRpYWxseSBwdXQgaXRzIGVyYXNlYmxvY2sgb250byB0aGUgZXJhc2VfcGVuZGluZ19saXN0LiBUaHVzLCB3ZSBrbm93IHRoYXQKIAkgICB0aGUgYmxvY2sgaGFzbid0IF9hbHJlYWR5XyBiZWVuIGVyYXNlZCwgYW5kIHRoYXQgJ3JlZicgaXRzZWxmIGhhc24ndCBiZWVuIGZyZWVkIHlldAotCSAgIGJ5IGpmZnMyX2ZyZWVfYWxsX25vZGVfcmVmcygpIGluIGVyYXNlLmMuIFdoaWNoIGlzIG5pY2UuICovCisJICAgYnkgamZmczJfZnJlZV9qZWJfbm9kZV9yZWZzKCkgaW4gZXJhc2UuYy4gV2hpY2ggaXMgbmljZS4gKi8KIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJvYmxpdGVyYXRpbmcgb2Jzb2xldGVkIG5vZGUgYXQgMHglMDh4XG4iLCByZWZfb2Zmc2V0KHJlZikpKTsKIAlyZXQgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIHJlZl9vZmZzZXQocmVmKSwgc2l6ZW9mKG4pLCAmcmV0bGVuLCAoY2hhciAqKSZuKTsKQEAgLTYzNCw4ICs2NDcsOCBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJTaG9ydCByZWFkIGZyb20gb2Jzb2xldGVkIG5vZGUgYXQgMHglMDh4OiAlemRcbiIsIHJlZl9vZmZzZXQocmVmKSwgcmV0bGVuKTsKIAkJZ290byBvdXRfZXJhc2Vfc2VtOwogCX0KLQlpZiAoUEFEKGplMzJfdG9fY3B1KG4udG90bGVuKSkgIT0gUEFEKHJlZl90b3RsZW4oYywgamViLCByZWYpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJOb2RlIHRvdGxlbiBvbiBmbGFzaCAoMHglMDh4KSAhPSB0b3RsZW4gZnJvbSBub2RlIHJlZiAoMHglMDh4KVxuIiwgamUzMl90b19jcHUobi50b3RsZW4pLCByZWZfdG90bGVuKGMsIGplYiwgcmVmKSk7CisJaWYgKFBBRChqZTMyX3RvX2NwdShuLnRvdGxlbikpICE9IFBBRChmcmVlZF9sZW4pKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vZGUgdG90bGVuIG9uIGZsYXNoICgweCUwOHgpICE9IHRvdGxlbiBmcm9tIG5vZGUgcmVmICgweCUwOHgpXG4iLCBqZTMyX3RvX2NwdShuLnRvdGxlbiksIGZyZWVkX2xlbik7CiAJCWdvdG8gb3V0X2VyYXNlX3NlbTsKIAl9CiAJaWYgKCEoamUxNl90b19jcHUobi5ub2RldHlwZSkgJiBKRkZTMl9OT0RFX0FDQ1VSQVRFKSkgewpAQCAtNjcxLDYgKzY4NCwxMCBAQAogCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKIAkJaWMgPSBqZmZzMl9yYXdfcmVmX3RvX2ljKHJlZik7CisJCS8qIEl0IHNlZW1zIHdlIHNob3VsZCBuZXZlciBjYWxsIGpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZSgpIGZvcgorCQkgICBYQVRUUiBub2Rlcy4uLi4geWV0LiBNYWtlIHN1cmUgd2Ugbm90aWNlIGlmL3doZW4gd2UgY2hhbmdlCisJCSAgIHRoYXQgOikgKi8KKwkJQlVHX09OKGljLT5jbGFzcyAhPSBSQVdOT0RFX0NMQVNTX0lOT0RFX0NBQ0hFKTsKIAkJZm9yIChwID0gJmljLT5ub2RlczsgKCpwKSAhPSByZWY7IHAgPSAmKCgqcCktPm5leHRfaW5faW5vKSkKIAkJCTsKIApAQCAtNjgzLDUxICs3MDAsNiBAQAogCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAl9CiAKLQotCS8qIE1lcmdlIHdpdGggdGhlIG5leHQgbm9kZSBpbiB0aGUgcGh5c2ljYWwgbGlzdCwgaWYgdGhlcmUgaXMgb25lCi0JICAgYW5kIGlmIGl0J3MgYWxzbyBvYnNvbGV0ZSBhbmQgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gYW55IGlub2RlICovCi0JaWYgKHJlZi0+bmV4dF9waHlzICYmIHJlZl9vYnNvbGV0ZShyZWYtPm5leHRfcGh5cykgJiYKLQkgICAgIXJlZi0+bmV4dF9waHlzLT5uZXh0X2luX2lubykgewotCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpuID0gcmVmLT5uZXh0X3BoeXM7Ci0KLQkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCi0JCXJlZi0+X190b3RsZW4gKz0gbi0+X190b3RsZW47Ci0JCXJlZi0+bmV4dF9waHlzID0gbi0+bmV4dF9waHlzOwotICAgICAgICAgICAgICAgIGlmIChqZWItPmxhc3Rfbm9kZSA9PSBuKSBqZWItPmxhc3Rfbm9kZSA9IHJlZjsKLQkJaWYgKGplYi0+Z2Nfbm9kZSA9PSBuKSB7Ci0JCQkvKiBnYyB3aWxsIGJlIGhhcHB5IGNvbnRpbnVpbmcgZ2Mgb24gdGhpcyBub2RlICovCi0JCQlqZWItPmdjX25vZGU9cmVmOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCi0JCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKG4pOwotCX0KLQotCS8qIEFsc28gbWVyZ2Ugd2l0aCB0aGUgcHJldmlvdXMgbm9kZSBpbiB0aGUgbGlzdCwgaWYgdGhlcmUgaXMgb25lCi0JICAgYW5kIHRoYXQgb25lIGlzIG9ic29sZXRlICovCi0JaWYgKHJlZiAhPSBqZWItPmZpcnN0X25vZGUgKSB7Ci0JCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnAgPSBqZWItPmZpcnN0X25vZGU7Ci0KLQkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCi0JCXdoaWxlIChwLT5uZXh0X3BoeXMgIT0gcmVmKQotCQkJcCA9IHAtPm5leHRfcGh5czsKLQotCQlpZiAocmVmX29ic29sZXRlKHApICYmICFyZWYtPm5leHRfaW5faW5vKSB7Ci0JCQlwLT5fX3RvdGxlbiArPSByZWYtPl9fdG90bGVuOwotCQkJaWYgKGplYi0+bGFzdF9ub2RlID09IHJlZikgewotCQkJCWplYi0+bGFzdF9ub2RlID0gcDsKLQkJCX0KLQkJCWlmIChqZWItPmdjX25vZGUgPT0gcmVmKSB7Ci0JCQkJLyogZ2Mgd2lsbCBiZSBoYXBweSBjb250aW51aW5nIGdjIG9uIHRoaXMgbm9kZSAqLwotCQkJCWplYi0+Z2Nfbm9kZT1wOwotCQkJfQotCQkJcC0+bmV4dF9waHlzID0gcmVmLT5uZXh0X3BoeXM7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyZWYpOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCX0KICBvdXRfZXJhc2Vfc2VtOgogCXVwKCZjLT5lcmFzZV9mcmVlX3NlbSk7CiB9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9vcy1saW51eC5oIGIvZnMvamZmczIvb3MtbGludXguaAppbmRleCBkMzA3Y2Y1Li5jZDQwMjFiIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9vcy1saW51eC5oCisrKyBiL2ZzL2pmZnMyL29zLWxpbnV4LmgKQEAgLTMxLDkgKzMxLDcgQEAKICNkZWZpbmUgSkZGUzJfRl9JX01PREUoZikgKE9GTklfRURPTklfMlNGRkooZiktPmlfbW9kZSkKICNkZWZpbmUgSkZGUzJfRl9JX1VJRChmKSAoT0ZOSV9FRE9OSV8yU0ZGSihmKS0+aV91aWQpCiAjZGVmaW5lIEpGRlMyX0ZfSV9HSUQoZikgKE9GTklfRURPTklfMlNGRkooZiktPmlfZ2lkKQotCi0jZGVmaW5lIEpGRlMyX0ZfSV9SREVWX01JTihmKSAoaW1pbm9yKE9GTklfRURPTklfMlNGRkooZikpKQotI2RlZmluZSBKRkZTMl9GX0lfUkRFVl9NQUooZikgKGltYWpvcihPRk5JX0VET05JXzJTRkZKKGYpKSkKKyNkZWZpbmUgSkZGUzJfRl9JX1JERVYoZikgKE9GTklfRURPTklfMlNGRkooZiktPmlfcmRldikKIAogI2RlZmluZSBJVElNRShzZWMpICgoc3RydWN0IHRpbWVzcGVjKXtzZWMsIDB9KQogI2RlZmluZSBJX1NFQyh0dikgKCh0dikudHZfc2VjKQpAQCAtNjAsNiArNTgsMTAgQEAKIAlmLT50YXJnZXQgPSBOVUxMOwogCWYtPmZsYWdzID0gMDsKIAlmLT51c2VyY29tcHIgPSAwOworI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKKwlmLT5pX2FjbF9hY2Nlc3MgPSBKRkZTMl9BQ0xfTk9UX0NBQ0hFRDsKKwlmLT5pX2FjbF9kZWZhdWx0ID0gSkZGUzJfQUNMX05PVF9DQUNIRUQ7CisjZW5kaWYKIH0KIAogCkBAIC05MCwxMyArOTIsMTAgQEAKICNkZWZpbmUgamZmczJfZmxhc2hfd3JpdGV2KGEsYixjLGQsZSxmKSBqZmZzMl9mbGFzaF9kaXJlY3Rfd3JpdGV2KGEsYixjLGQsZSkKICNkZWZpbmUgamZmczJfd2J1Zl90aW1lb3V0IE5VTEwKICNkZWZpbmUgamZmczJfd2J1Zl9wcm9jZXNzIE5VTEwKLSNkZWZpbmUgamZmczJfbm9yX2VjYyhjKSAoMCkKICNkZWZpbmUgamZmczJfZGF0YWZsYXNoKGMpICgwKQotI2RlZmluZSBqZmZzMl9ub3Jfd2J1Zl9mbGFzaChjKSAoMCkKLSNkZWZpbmUgamZmczJfbm9yX2VjY19mbGFzaF9zZXR1cChjKSAoMCkKLSNkZWZpbmUgamZmczJfbm9yX2VjY19mbGFzaF9jbGVhbnVwKGMpIGRvIHt9IHdoaWxlICgwKQogI2RlZmluZSBqZmZzMl9kYXRhZmxhc2hfc2V0dXAoYykgKDApCiAjZGVmaW5lIGpmZnMyX2RhdGFmbGFzaF9jbGVhbnVwKGMpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBqZmZzMl9ub3Jfd2J1Zl9mbGFzaChjKSAoMCkKICNkZWZpbmUgamZmczJfbm9yX3didWZfZmxhc2hfc2V0dXAoYykgKDApCiAjZGVmaW5lIGpmZnMyX25vcl93YnVmX2ZsYXNoX2NsZWFudXAoYykgZG8ge30gd2hpbGUgKDApCiAKQEAgLTEwNyw5ICsxMDYsNyBAQAogI2lmZGVmIENPTkZJR19KRkZTMl9TVU1NQVJZCiAjZGVmaW5lIGpmZnMyX2Nhbl9tYXJrX29ic29sZXRlKGMpICgwKQogI2Vsc2UKLSNkZWZpbmUgamZmczJfY2FuX21hcmtfb2Jzb2xldGUoYykgXAotICAoKGMtPm10ZC0+dHlwZSA9PSBNVERfTk9SRkxBU0ggJiYgIShjLT5tdGQtPmZsYWdzICYgKE1URF9FQ0N8TVREX1BST0dSQU1fUkVHSU9OUykpKSB8fCBcCi0gICBjLT5tdGQtPnR5cGUgPT0gTVREX1JBTSkKKyNkZWZpbmUgamZmczJfY2FuX21hcmtfb2Jzb2xldGUoYykgKGMtPm10ZC0+ZmxhZ3MgJiAoTVREX0JJVF9XUklURUFCTEUpKQogI2VuZGlmCiAKICNkZWZpbmUgamZmczJfY2xlYW5tYXJrZXJfb29iKGMpIChjLT5tdGQtPnR5cGUgPT0gTVREX05BTkRGTEFTSCkKQEAgLTEzMywxNSArMTMwLDExIEBACiBpbnQgamZmczJfbmFuZF9mbGFzaF9zZXR1cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CiB2b2lkIGpmZnMyX25hbmRfZmxhc2hfY2xlYW51cChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CiAKLSNkZWZpbmUgamZmczJfbm9yX2VjYyhjKSAoYy0+bXRkLT50eXBlID09IE1URF9OT1JGTEFTSCAmJiAoYy0+bXRkLT5mbGFncyAmIE1URF9FQ0MpKQotaW50IGpmZnMyX25vcl9lY2NfZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwotdm9pZCBqZmZzMl9ub3JfZWNjX2ZsYXNoX2NsZWFudXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwotCiAjZGVmaW5lIGpmZnMyX2RhdGFmbGFzaChjKSAoYy0+bXRkLT50eXBlID09IE1URF9EQVRBRkxBU0gpCiBpbnQgamZmczJfZGF0YWZsYXNoX3NldHVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKIHZvaWQgamZmczJfZGF0YWZsYXNoX2NsZWFudXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwogCi0jZGVmaW5lIGpmZnMyX25vcl93YnVmX2ZsYXNoKGMpIChjLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIICYmIChjLT5tdGQtPmZsYWdzICYgTVREX1BST0dSQU1fUkVHSU9OUykpCisjZGVmaW5lIGpmZnMyX25vcl93YnVmX2ZsYXNoKGMpIChjLT5tdGQtPnR5cGUgPT0gTVREX05PUkZMQVNIICYmICEgKGMtPm10ZC0+ZmxhZ3MgJiBNVERfQklUX1dSSVRFQUJMRSkpCiBpbnQgamZmczJfbm9yX3didWZfZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwogdm9pZCBqZmZzMl9ub3Jfd2J1Zl9mbGFzaF9jbGVhbnVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvcmVhZGlub2RlLmMgYi9mcy9qZmZzMi9yZWFkaW5vZGUuYwppbmRleCBmMTY5NTY0Li41ZmVjMDEyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9yZWFkaW5vZGUuYworKysgYi9mcy9qZmZzMi9yZWFkaW5vZGUuYwpAQCAtNjYsNyArNjYsNyBAQAogCQkJamZmczJfZnJlZV9mdWxsX2Rub2RlKHRuLT5mbik7CiAJCQlqZmZzMl9mcmVlX3RtcF9kbm9kZV9pbmZvKHRuKTsKIAotCQkJdGhpcyA9IHRoaXMtPnJiX3BhcmVudDsKKwkJCXRoaXMgPSByYl9wYXJlbnQodGhpcyk7CiAJCQlpZiAoIXRoaXMpCiAJCQkJYnJlYWs7CiAKQEAgLTExNiwxOSArMTE2LDQyIEBACiAJCQkJdWludDMyX3QgKmxhdGVzdF9tY3RpbWUsIHVpbnQzMl90ICptY3RpbWVfdmVyKQogewogCXN0cnVjdCBqZmZzMl9mdWxsX2RpcmVudCAqZmQ7CisJdWludDMyX3QgY3JjOwogCi0JLyogVGhlIGRpcmVudHJ5IG5vZGVzIGFyZSBjaGVja2VkIGR1cmluZyB0aGUgZmxhc2ggc2Nhbm5pbmcgKi8KLQlCVUdfT04ocmVmX2ZsYWdzKHJlZikgPT0gUkVGX1VOQ0hFQ0tFRCk7CiAJLyogT2Jzb2xldGVkLiBUaGlzIGNhbm5vdCBoYXBwZW4sIHN1cmVseT8gZHdtdzIgMjAwMjAzMDggKi8KIAlCVUdfT04ocmVmX29ic29sZXRlKHJlZikpOwogCi0JLyogU2FuaXR5IGNoZWNrICovCi0JaWYgKHVubGlrZWx5KFBBRCgocmQtPm5zaXplICsgc2l6ZW9mKCpyZCkpKSAhPSBQQUQoamUzMl90b19jcHUocmQtPnRvdGxlbikpKSkgewotCQlKRkZTMl9FUlJPUigiaWxsZWdhbCBuc2l6ZSBpbiBub2RlIGF0ICUjMDh4OiBuc2l6ZSAlIzAyeCwgdG90bGVuICUjMDR4XG4iLAotCQkgICAgICAgcmVmX29mZnNldChyZWYpLCByZC0+bnNpemUsIGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKTsKKwljcmMgPSBjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCkgLSA4KTsKKwlpZiAodW5saWtlbHkoY3JjICE9IGplMzJfdG9fY3B1KHJkLT5ub2RlX2NyYykpKSB7CisJCUpGRlMyX05PVElDRSgiaGVhZGVyIENSQyBmYWlsZWQgb24gZGlyZW50IG5vZGUgYXQgJSMwOHg6IHJlYWQgJSMwOHgsIGNhbGN1bGF0ZWQgJSMwOHhcbiIsCisJCQkgICAgIHJlZl9vZmZzZXQocmVmKSwgamUzMl90b19jcHUocmQtPm5vZGVfY3JjKSwgY3JjKTsKIAkJcmV0dXJuIDE7CiAJfQogCisJLyogSWYgd2UndmUgbmV2ZXIgY2hlY2tlZCB0aGUgQ1JDcyBvbiB0aGlzIG5vZGUsIGNoZWNrIHRoZW0gbm93ICovCisJaWYgKHJlZl9mbGFncyhyZWYpID09IFJFRl9VTkNIRUNLRUQpIHsKKwkJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYjsKKwkJaW50IGxlbjsKKworCQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJaWYgKHVubGlrZWx5KFBBRCgocmQtPm5zaXplICsgc2l6ZW9mKCpyZCkpKSAhPSBQQUQoamUzMl90b19jcHUocmQtPnRvdGxlbikpKSkgeworCQkJSkZGUzJfRVJST1IoImlsbGVnYWwgbnNpemUgaW4gbm9kZSBhdCAlIzA4eDogbnNpemUgJSMwMngsIHRvdGxlbiAlIzA0eFxuIiwKKwkJCQkgICAgcmVmX29mZnNldChyZWYpLCByZC0+bnNpemUsIGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKTsKKwkJCXJldHVybiAxOworCQl9CisKKwkJamViID0gJmMtPmJsb2Nrc1tyZWYtPmZsYXNoX29mZnNldCAvIGMtPnNlY3Rvcl9zaXplXTsKKwkJbGVuID0gcmVmX3RvdGxlbihjLCBqZWIsIHJlZik7CisKKwkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCQlqZWItPnVzZWRfc2l6ZSArPSBsZW47CisJCWplYi0+dW5jaGVja2VkX3NpemUgLT0gbGVuOworCQljLT51c2VkX3NpemUgKz0gbGVuOworCQljLT51bmNoZWNrZWRfc2l6ZSAtPSBsZW47CisJCXJlZi0+Zmxhc2hfb2Zmc2V0ID0gcmVmX29mZnNldChyZWYpIHwgUkVGX1BSSVNUSU5FOworCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwl9CisKIAlmZCA9IGpmZnMyX2FsbG9jX2Z1bGxfZGlyZW50KHJkLT5uc2l6ZSArIDEpOwogCWlmICh1bmxpa2VseSghZmQpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE5OCwxMyArMjIxLDIxIEBACiAJc3RydWN0IGpmZnMyX3RtcF9kbm9kZV9pbmZvICp0bjsKIAl1aW50MzJfdCBsZW4sIGNzaXplOwogCWludCByZXQgPSAxOworCXVpbnQzMl90IGNyYzsKIAogCS8qIE9ic29sZXRlZC4gVGhpcyBjYW5ub3QgaGFwcGVuLCBzdXJlbHk/IGR3bXcyIDIwMDIwMzA4ICovCiAJQlVHX09OKHJlZl9vYnNvbGV0ZShyZWYpKTsKIAorCWNyYyA9IGNyYzMyKDAsIHJkLCBzaXplb2YoKnJkKSAtIDgpOworCWlmICh1bmxpa2VseShjcmMgIT0gamUzMl90b19jcHUocmQtPm5vZGVfY3JjKSkpIHsKKwkJSkZGUzJfTk9USUNFKCJub2RlIENSQyBmYWlsZWQgb24gZG5vZGUgYXQgJSMwOHg6IHJlYWQgJSMwOHgsIGNhbGN1bGF0ZWQgJSMwOHhcbiIsCisJCQkgICAgIHJlZl9vZmZzZXQocmVmKSwgamUzMl90b19jcHUocmQtPm5vZGVfY3JjKSwgY3JjKTsKKwkJcmV0dXJuIDE7CisJfQorCiAJdG4gPSBqZmZzMl9hbGxvY190bXBfZG5vZGVfaW5mbygpOwogCWlmICghdG4pIHsKLQkJSkZGUzJfRVJST1IoImZhaWxlZCB0byBhbGxvY2F0ZSB0biAoJWQgYnl0ZXMpLlxuIiwgc2l6ZW9mKCp0bikpOworCQlKRkZTMl9FUlJPUigiZmFpbGVkIHRvIGFsbG9jYXRlIHRuICglenUgYnl0ZXMpLlxuIiwgc2l6ZW9mKCp0bikpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIxMywxNCArMjQ0LDYgQEAKIAogCS8qIElmIHdlJ3ZlIG5ldmVyIGNoZWNrZWQgdGhlIENSQ3Mgb24gdGhpcyBub2RlLCBjaGVjayB0aGVtIG5vdyAqLwogCWlmIChyZWZfZmxhZ3MocmVmKSA9PSBSRUZfVU5DSEVDS0VEKSB7Ci0JCXVpbnQzMl90IGNyYzsKLQotCQljcmMgPSBjcmMzMigwLCByZCwgc2l6ZW9mKCpyZCkgLSA4KTsKLQkJaWYgKHVubGlrZWx5KGNyYyAhPSBqZTMyX3RvX2NwdShyZC0+bm9kZV9jcmMpKSkgewotCQkJSkZGUzJfTk9USUNFKCJoZWFkZXIgQ1JDIGZhaWxlZCBvbiBub2RlIGF0ICUjMDh4OiByZWFkICUjMDh4LCBjYWxjdWxhdGVkICUjMDh4XG4iLAotCQkJCQlyZWZfb2Zmc2V0KHJlZiksIGplMzJfdG9fY3B1KHJkLT5ub2RlX2NyYyksIGNyYyk7Ci0JCQlnb3RvIGZyZWVfb3V0OwotCQl9CiAKIAkJLyogU2FuaXR5IGNoZWNrcyAqLwogCQlpZiAodW5saWtlbHkoamUzMl90b19jcHUocmQtPm9mZnNldCkgPiBqZTMyX3RvX2NwdShyZC0+aXNpemUpKSB8fApAQCAtMzQzLDcgKzM2Niw3IEBACiAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGpmZnMyX2dldF9pbm9kZV9ub2RlcygpLgogICogSXQgaXMgY2FsbGVkIGV2ZXJ5IHRpbWUgYW4gdW5rbm93biBub2RlIGlzIGZvdW5kLgogICoKLSAqIFJldHVybnM6IDAgb24gc3VjY2VzOworICogUmV0dXJuczogMCBvbiBzdWNjZXNzOwogICogCSAgICAxIGlmIHRoZSBub2RlIHNob3VsZCBiZSBtYXJrZWQgb2Jzb2xldGU7CiAgKiAJICAgIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KICAqLwpAQCAtMzU0LDM3ICszNzcsMzAgQEAKIAogCXVuLT5ub2RldHlwZSA9IGNwdV90b19qZTE2KEpGRlMyX05PREVfQUNDVVJBVEUgfCBqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpKTsKIAotCWlmIChjcmMzMigwLCB1biwgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpIC0gNCkgIT0gamUzMl90b19jcHUodW4tPmhkcl9jcmMpKSB7Ci0JCS8qIEhtbW0uIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgYXQgc2NhbiB0aW1lLiAqLwotCQlKRkZTMl9OT1RJQ0UoIm5vZGUgaGVhZGVyIENSQyBmYWlsZWQgYXQgJSMwOHguIEJ1dCBpdCBtdXN0IGhhdmUgYmVlbiBPSyBlYXJsaWVyLlxuIiwgcmVmX29mZnNldChyZWYpKTsKLQkJamZmczJfZGJnX2R1bXBfbm9kZShjLCByZWZfb2Zmc2V0KHJlZikpOworCXN3aXRjaChqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpICYgSkZGUzJfQ09NUEFUX01BU0spIHsKKworCWNhc2UgSkZGUzJfRkVBVFVSRV9JTkNPTVBBVDoKKwkJSkZGUzJfRVJST1IoInVua25vd24gSU5DT01QQVQgbm9kZXR5cGUgJSMwNFggYXQgJSMwOHhcbiIsCisJCQkgICAgamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSwgcmVmX29mZnNldChyZWYpKTsKKwkJLyogRUVQICovCisJCUJVRygpOworCQlicmVhazsKKworCWNhc2UgSkZGUzJfRkVBVFVSRV9ST0NPTVBBVDoKKwkJSkZGUzJfRVJST1IoInVua25vd24gUk9DT01QQVQgbm9kZXR5cGUgJSMwNFggYXQgJSMwOHhcbiIsCisJCQkgICAgamUxNl90b19jcHUodW4tPm5vZGV0eXBlKSwgcmVmX29mZnNldChyZWYpKTsKKwkJQlVHX09OKCEoYy0+ZmxhZ3MgJiBKRkZTMl9TQl9GTEFHX1JPKSk7CisJCWJyZWFrOworCisJY2FzZSBKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NPUFk6CisJCUpGRlMyX05PVElDRSgidW5rbm93biBSV0NPTVBBVF9DT1BZIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAorCQkJICAgICBqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpLCByZWZfb2Zmc2V0KHJlZikpOworCQlicmVhazsKKworCWNhc2UgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEU6CisJCUpGRlMyX05PVElDRSgidW5rbm93biBSV0NPTVBBVF9ERUxFVEUgbm9kZXR5cGUgJSMwNFggYXQgJSMwOHhcbiIsCisJCQkgICAgIGplMTZfdG9fY3B1KHVuLT5ub2RldHlwZSksIHJlZl9vZmZzZXQocmVmKSk7CiAJCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCXN3aXRjaChqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpICYgSkZGUzJfQ09NUEFUX01BU0spIHsKLQotCQljYXNlIEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQ6Ci0JCQlKRkZTMl9FUlJPUigidW5rbm93biBJTkNPTVBBVCBub2RldHlwZSAlIzA0WCBhdCAlIzA4eFxuIiwKLQkJCQlqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpLCByZWZfb2Zmc2V0KHJlZikpOwotCQkJLyogRUVQICovCi0JCQlCVUcoKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSkZGUzJfRkVBVFVSRV9ST0NPTVBBVDoKLQkJCUpGRlMyX0VSUk9SKCJ1bmtub3duIFJPQ09NUEFUIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAotCQkJCQlqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpLCByZWZfb2Zmc2V0KHJlZikpOwotCQkJQlVHX09OKCEoYy0+ZmxhZ3MgJiBKRkZTMl9TQl9GTEFHX1JPKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfQ09QWToKLQkJCUpGRlMyX05PVElDRSgidW5rbm93biBSV0NPTVBBVF9DT1BZIG5vZGV0eXBlICUjMDRYIGF0ICUjMDh4XG4iLAotCQkJCQlqZTE2X3RvX2NwdSh1bi0+bm9kZXR5cGUpLCByZWZfb2Zmc2V0KHJlZikpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0RFTEVURToKLQkJCUpGRlMyX05PVElDRSgidW5rbm93biBSV0NPTVBBVF9ERUxFVEUgbm9kZXR5cGUgJSMwNFggYXQgJSMwOHhcbiIsCi0JCQkJCWplMTZfdG9fY3B1KHVuLT5ub2RldHlwZSksIHJlZl9vZmZzZXQocmVmKSk7Ci0JCQlyZXR1cm4gMTsKLQkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNDM0LDcgKzQ1MCw3IEBACiAJfQogCiAJaWYgKHJldGxlbiA8IGxlbikgewotCQlKRkZTMl9FUlJPUigic2hvcnQgcmVhZCBhdCAlIzA4eDogJWQgaW5zdGVhZCBvZiAlZC5cbiIsCisJCUpGRlMyX0VSUk9SKCJzaG9ydCByZWFkIGF0ICUjMDh4OiAlenUgaW5zdGVhZCBvZiAlZC5cbiIsCiAJCQkJb2ZmcywgcmV0bGVuLCBsZW4pOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC01NDIsMTMgKzU1OCwyNSBAQAogCQl9CiAKIAkJaWYgKHJldGxlbiA8IGxlbikgewotCQkJSkZGUzJfRVJST1IoInNob3J0IHJlYWQgYXQgJSMwOHg6ICVkIGluc3RlYWQgb2YgJWQuXG4iLCByZWZfb2Zmc2V0KHJlZiksIHJldGxlbiwgbGVuKTsKKwkJCUpGRlMyX0VSUk9SKCJzaG9ydCByZWFkIGF0ICUjMDh4OiAlenUgaW5zdGVhZCBvZiAlZC5cbiIsIHJlZl9vZmZzZXQocmVmKSwgcmV0bGVuLCBsZW4pOwogCQkJZXJyID0gLUVJTzsKIAkJCWdvdG8gZnJlZV9vdXQ7CiAJCX0KIAogCQlub2RlID0gKHVuaW9uIGpmZnMyX25vZGVfdW5pb24gKilidWZzdGFydDsKIAorCQkvKiBObyBuZWVkIHRvIG1hc2sgaW4gdGhlIHZhbGlkIGJpdDsgaXQgc2hvdWxkbid0IGJlIGludmFsaWQgKi8KKwkJaWYgKGplMzJfdG9fY3B1KG5vZGUtPnUuaGRyX2NyYykgIT0gY3JjMzIoMCwgbm9kZSwgc2l6ZW9mKG5vZGUtPnUpLTQpKSB7CisJCQlKRkZTMl9OT1RJQ0UoIk5vZGUgaGVhZGVyIENSQyBmYWlsZWQgYXQgJSMwOHguIHslMDR4LCUwNHgsJTA4eCwlMDh4fVxuIiwKKwkJCQkgICAgIHJlZl9vZmZzZXQocmVmKSwgamUxNl90b19jcHUobm9kZS0+dS5tYWdpYyksCisJCQkJICAgICBqZTE2X3RvX2NwdShub2RlLT51Lm5vZGV0eXBlKSwKKwkJCQkgICAgIGplMzJfdG9fY3B1KG5vZGUtPnUudG90bGVuKSwKKwkJCQkgICAgIGplMzJfdG9fY3B1KG5vZGUtPnUuaGRyX2NyYykpOworCQkJamZmczJfZGJnX2R1bXBfbm9kZShjLCByZWZfb2Zmc2V0KHJlZikpOworCQkJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIHJlZik7CisJCQlnb3RvIGNvbnQ7CisJCX0KKwogCQlzd2l0Y2ggKGplMTZfdG9fY3B1KG5vZGUtPnUubm9kZXR5cGUpKSB7CiAKIAkJY2FzZSBKRkZTMl9OT0RFVFlQRV9ESVJFTlQ6CkBAIC02MDYsNiArNjM0LDcgQEAKIAkJCQlnb3RvIGZyZWVfb3V0OwogCiAJCX0KKwljb250OgogCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAJfQogCkBAIC02NzksMTIgKzcwOCwxMiBAQAogCQkJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIGZuLT5yYXcpOwogCiAJCUJVR19PTihyYi0+cmJfbGVmdCk7Ci0JCWlmIChyYi0+cmJfcGFyZW50ICYmIHJiLT5yYl9wYXJlbnQtPnJiX2xlZnQgPT0gcmIpIHsKKwkJaWYgKHJiX3BhcmVudChyYikgJiYgcmJfcGFyZW50KHJiKS0+cmJfbGVmdCA9PSByYikgewogCQkJLyogV2Ugd2VyZSB0aGVuIGxlZnQtaGFuZCBjaGlsZCBvZiBvdXIgcGFyZW50LiBXZSBuZWVkCiAJCQkgKiB0byBtb3ZlIG91ciBvd24gcmlnaHQtaGFuZCBjaGlsZCBpbnRvIG91ciBwbGFjZS4gKi8KIAkJCXJlcGxfcmIgPSByYi0+cmJfcmlnaHQ7CiAJCQlpZiAocmVwbF9yYikKLQkJCQlyZXBsX3JiLT5yYl9wYXJlbnQgPSByYi0+cmJfcGFyZW50OworCQkJCXJiX3NldF9wYXJlbnQocmVwbF9yYiwgcmJfcGFyZW50KHJiKSk7CiAJCX0gZWxzZQogCQkJcmVwbF9yYiA9IE5VTEw7CiAKQEAgLTY5MiwxNCArNzIxLDE0IEBACiAKIAkJLyogUmVtb3ZlIHRoZSBzcGVudCB0biBmcm9tIHRoZSB0cmVlOyBkb24ndCBib3RoZXIgcmViYWxhbmNpbmcKIAkJICogYnV0IHB1dCBvdXIgcmlnaHQtaGFuZCBjaGlsZCBpbiBvdXIgb3duIHBsYWNlLiAqLwotCQlpZiAodG4tPnJiLnJiX3BhcmVudCkgewotCQkJaWYgKHRuLT5yYi5yYl9wYXJlbnQtPnJiX2xlZnQgPT0gJnRuLT5yYikKLQkJCQl0bi0+cmIucmJfcGFyZW50LT5yYl9sZWZ0ID0gcmVwbF9yYjsKLQkJCWVsc2UgaWYgKHRuLT5yYi5yYl9wYXJlbnQtPnJiX3JpZ2h0ID09ICZ0bi0+cmIpCi0JCQkJdG4tPnJiLnJiX3BhcmVudC0+cmJfcmlnaHQgPSByZXBsX3JiOworCQlpZiAocmJfcGFyZW50KCZ0bi0+cmIpKSB7CisJCQlpZiAocmJfcGFyZW50KCZ0bi0+cmIpLT5yYl9sZWZ0ID09ICZ0bi0+cmIpCisJCQkJcmJfcGFyZW50KCZ0bi0+cmIpLT5yYl9sZWZ0ID0gcmVwbF9yYjsKKwkJCWVsc2UgaWYgKHJiX3BhcmVudCgmdG4tPnJiKS0+cmJfcmlnaHQgPT0gJnRuLT5yYikKKwkJCQlyYl9wYXJlbnQoJnRuLT5yYiktPnJiX3JpZ2h0ID0gcmVwbF9yYjsKIAkJCWVsc2UgQlVHKCk7CiAJCX0gZWxzZSBpZiAodG4tPnJiLnJiX3JpZ2h0KQotCQkJdG4tPnJiLnJiX3JpZ2h0LT5yYl9wYXJlbnQgPSBOVUxMOworCQkJcmJfc2V0X3BhcmVudCh0bi0+cmIucmJfcmlnaHQsIE5VTEwpOwogCiAJCWpmZnMyX2ZyZWVfdG1wX2Rub2RlX2luZm8odG4pOwogCQlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zY2FuLmMgYi9mcy9qZmZzMi9zY2FuLmMKaW5kZXggY2Y1NWIyMi4uNjE2MTgwOCAxMDA2NDQKLS0tIGEvZnMvamZmczIvc2Nhbi5jCisrKyBiL2ZzL2pmZnMyL3NjYW4uYwpAQCAtNjUsNiArNjUsMjggQEAKIAkJcmV0dXJuIERFRkFVTFRfRU1QVFlfU0NBTl9TSVpFOwogfQogCitzdGF0aWMgaW50IGZpbGVfZGlydHkoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCit7CisJaW50IHJldDsKKworCWlmICgocmV0ID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDEpKSkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBqZWItPmZyZWVfc2l6ZSkpKQorCQlyZXR1cm4gcmV0OworCS8qIFR1cm5lZCB3YXN0ZWQgc2l6ZSBpbnRvIGRpcnR5LCBzaW5jZSB3ZSBhcHBhcmVudGx5IAorCSAgIHRoaW5rIGl0J3MgcmVjb3ZlcmFibGUgbm93LiAqLworCWplYi0+ZGlydHlfc2l6ZSArPSBqZWItPndhc3RlZF9zaXplOworCWMtPmRpcnR5X3NpemUgKz0gamViLT53YXN0ZWRfc2l6ZTsKKwljLT53YXN0ZWRfc2l6ZSAtPSBqZWItPndhc3RlZF9zaXplOworCWplYi0+d2FzdGVkX3NpemUgPSAwOworCWlmIChWRVJZRElSVFkoYywgamViLT5kaXJ0eV9zaXplKSkgeworCQlsaXN0X2FkZCgmamViLT5saXN0LCAmYy0+dmVyeV9kaXJ0eV9saXN0KTsKKwl9IGVsc2UgeworCQlsaXN0X2FkZCgmamViLT5saXN0LCAmYy0+ZGlydHlfbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCiBpbnQgamZmczJfc2Nhbl9tZWRpdW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCiB7CiAJaW50IGksIHJldDsKQEAgLTE3MCwzNCArMTkyLDIwIEBACiAJCQkJCSghYy0+bmV4dGJsb2NrIHx8IGMtPm5leHRibG9jay0+ZnJlZV9zaXplIDwgamViLT5mcmVlX3NpemUpKSB7CiAJCQkJLyogQmV0dGVyIGNhbmRpZGF0ZSBmb3IgdGhlIG5leHQgd3JpdGVzIHRvIGdvIHRvICovCiAJCQkJaWYgKGMtPm5leHRibG9jaykgewotCQkJCQljLT5uZXh0YmxvY2stPmRpcnR5X3NpemUgKz0gYy0+bmV4dGJsb2NrLT5mcmVlX3NpemUgKyBjLT5uZXh0YmxvY2stPndhc3RlZF9zaXplOwotCQkJCQljLT5kaXJ0eV9zaXplICs9IGMtPm5leHRibG9jay0+ZnJlZV9zaXplICsgYy0+bmV4dGJsb2NrLT53YXN0ZWRfc2l6ZTsKLQkJCQkJYy0+ZnJlZV9zaXplIC09IGMtPm5leHRibG9jay0+ZnJlZV9zaXplOwotCQkJCQljLT53YXN0ZWRfc2l6ZSAtPSBjLT5uZXh0YmxvY2stPndhc3RlZF9zaXplOwotCQkJCQljLT5uZXh0YmxvY2stPmZyZWVfc2l6ZSA9IGMtPm5leHRibG9jay0+d2FzdGVkX3NpemUgPSAwOwotCQkJCQlpZiAoVkVSWURJUlRZKGMsIGMtPm5leHRibG9jay0+ZGlydHlfc2l6ZSkpIHsKLQkJCQkJCWxpc3RfYWRkKCZjLT5uZXh0YmxvY2stPmxpc3QsICZjLT52ZXJ5X2RpcnR5X2xpc3QpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJbGlzdF9hZGQoJmMtPm5leHRibG9jay0+bGlzdCwgJmMtPmRpcnR5X2xpc3QpOwotCQkJCQl9CisJCQkJCXJldCA9IGZpbGVfZGlydHkoYywgYy0+bmV4dGJsb2NrKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCXJldHVybiByZXQ7CiAJCQkJCS8qIGRlbGV0aW5nIHN1bW1hcnkgaW5mb3JtYXRpb24gb2YgdGhlIG9sZCBuZXh0YmxvY2sgKi8KIAkJCQkJamZmczJfc3VtX3Jlc2V0X2NvbGxlY3RlZChjLT5zdW1tYXJ5KTsKIAkJCQl9Ci0JCQkJLyogdXBkYXRlIGNvbGxlY3RlZCBzdW1tYXJ5IGluZnJvbWF0aW9uIGZvciB0aGUgY3VycmVudCBuZXh0YmxvY2sgKi8KKwkJCQkvKiB1cGRhdGUgY29sbGVjdGVkIHN1bW1hcnkgaW5mb3JtYXRpb24gZm9yIHRoZSBjdXJyZW50IG5leHRibG9jayAqLwogCQkJCWpmZnMyX3N1bV9tb3ZlX2NvbGxlY3RlZChjLCBzKTsKIAkJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfc2Nhbl9tZWRpdW0oKTogbmV3IG5leHRibG9jayA9IDB4JTA4eFxuIiwgamViLT5vZmZzZXQpKTsKIAkJCQljLT5uZXh0YmxvY2sgPSBqZWI7CiAJCQl9IGVsc2UgewotCQkJCWplYi0+ZGlydHlfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZSArIGplYi0+d2FzdGVkX3NpemU7Ci0JCQkJYy0+ZGlydHlfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZSArIGplYi0+d2FzdGVkX3NpemU7Ci0JCQkJYy0+ZnJlZV9zaXplIC09IGplYi0+ZnJlZV9zaXplOwotCQkJCWMtPndhc3RlZF9zaXplIC09IGplYi0+d2FzdGVkX3NpemU7Ci0JCQkJamViLT5mcmVlX3NpemUgPSBqZWItPndhc3RlZF9zaXplID0gMDsKLQkJCQlpZiAoVkVSWURJUlRZKGMsIGplYi0+ZGlydHlfc2l6ZSkpIHsKLQkJCQkJbGlzdF9hZGQoJmplYi0+bGlzdCwgJmMtPnZlcnlfZGlydHlfbGlzdCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGlzdF9hZGQoJmplYi0+bGlzdCwgJmMtPmRpcnR5X2xpc3QpOwotCQkJCX0KKwkJCQlyZXQgPSBmaWxlX2RpcnR5KGMsIGplYik7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIHJldDsKIAkJCX0KIAkJCWJyZWFrOwogCkBAIC0yMjIsOSArMjMwLDYgQEAKIAkJfQogCX0KIAotCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkgJiYgcykKLQkJa2ZyZWUocyk7Ci0KIAkvKiBOZXh0YmxvY2sgZGlydHkgaXMgYWx3YXlzIHNlZW4gYXMgd2FzdGVkLCBiZWNhdXNlIHdlIGNhbm5vdCByZWN5Y2xlIGl0IG5vdyAqLwogCWlmIChjLT5uZXh0YmxvY2sgJiYgKGMtPm5leHRibG9jay0+ZGlydHlfc2l6ZSkpIHsKIAkJYy0+bmV4dGJsb2NrLT53YXN0ZWRfc2l6ZSArPSBjLT5uZXh0YmxvY2stPmRpcnR5X3NpemU7CkBAIC0yNDIsMTEgKzI0Nyw4IEBACiAKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3NjYW5fbWVkaXVtKCk6IFNraXBwaW5nICVkIGJ5dGVzIGluIG5leHRibG9jayB0byBlbnN1cmUgcGFnZSBhbGlnbm1lbnRcbiIsCiAJCQkgIHNraXApKTsKLQkJYy0+bmV4dGJsb2NrLT53YXN0ZWRfc2l6ZSArPSBza2lwOwotCQljLT53YXN0ZWRfc2l6ZSArPSBza2lwOwotCi0JCWMtPm5leHRibG9jay0+ZnJlZV9zaXplIC09IHNraXA7Ci0JCWMtPmZyZWVfc2l6ZSAtPSBza2lwOworCQlqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGMtPm5leHRibG9jaywgMSk7CisJCWpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgYy0+bmV4dGJsb2NrLCBza2lwKTsKIAl9CiAjZW5kaWYKIAlpZiAoYy0+bnJfZXJhc2luZ19ibG9ja3MpIHsKQEAgLTI2Niw2ICsyNjgsOSBAQAogCWVsc2UKIAkJYy0+bXRkLT51bnBvaW50KGMtPm10ZCwgZmxhc2hidWYsIDAsIGMtPm10ZC0+c2l6ZSk7CiAjZW5kaWYKKwlpZiAocykKKwkJa2ZyZWUocyk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yOTAsNyArMjk1LDcgQEAKIGludCBqZmZzMl9zY2FuX2NsYXNzaWZ5X2plYihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYikKIHsKIAlpZiAoKGplYi0+dXNlZF9zaXplICsgamViLT51bmNoZWNrZWRfc2l6ZSkgPT0gUEFEKGMtPmNsZWFubWFya2VyX3NpemUpICYmICFqZWItPmRpcnR5X3NpemUKLQkJJiYgKCFqZWItPmZpcnN0X25vZGUgfHwgIWplYi0+Zmlyc3Rfbm9kZS0+bmV4dF9waHlzKSApCisJICAgICYmICghamViLT5maXJzdF9ub2RlIHx8ICFyZWZfbmV4dChqZWItPmZpcnN0X25vZGUpKSApCiAJCXJldHVybiBCTEtfU1RBVEVfQ0xFQU5NQVJLRVI7CiAKIAkvKiBtb3ZlIGJsb2NrcyB3aXRoIG1heCA0IGJ5dGUgZGlydHkgc3BhY2UgdG8gY2xlYW5saXN0ICovCkBAIC0zMDYsMTEgKzMxMSwxMTkgQEAKIAkJcmV0dXJuIEJMS19TVEFURV9BTExESVJUWTsKIH0KIAorI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorc3RhdGljIGludCBqZmZzMl9zY2FuX3hhdHRyX25vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCisJCQkJIHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgKnJ4LCB1aW50MzJfdCBvZnMsCisJCQkJIHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJdWludDMyX3QgdG90bGVuLCBjcmM7CisJaW50IGVycjsKKworCWNyYyA9IGNyYzMyKDAsIHJ4LCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194YXR0cikgLSA0KTsKKwlpZiAoY3JjICE9IGplMzJfdG9fY3B1KHJ4LT5ub2RlX2NyYykpIHsKKwkJaWYgKGplMzJfdG9fY3B1KHJ4LT5ub2RlX2NyYykgIT0gMHhmZmZmZmZmZikKKwkJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCQkgICAgICBvZnMsIGplMzJfdG9fY3B1KHJ4LT5ub2RlX2NyYyksIGNyYyk7CisJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pKSkpCisJCQlyZXR1cm4gZXJyOworCQlyZXR1cm4gMDsKKwl9CisKKwl0b3RsZW4gPSBQQUQoc2l6ZW9mKCpyeCkgKyByeC0+bmFtZV9sZW4gKyAxICsgamUxNl90b19jcHUocngtPnZhbHVlX2xlbikpOworCWlmICh0b3RsZW4gIT0gamUzMl90b19jcHUocngtPnRvdGxlbikpIHsKKwkJSkZGUzJfV0FSTklORygibm9kZSBsZW5ndGggbWlzbWF0Y2ggYXQgJSMwOHgsIHJlYWQ9JXUsIGNhbGM9JXVcbiIsCisJCQkgICAgICBvZnMsIGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pLCB0b3RsZW4pOworCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBqZTMyX3RvX2NwdShyeC0+dG90bGVuKSkpKQorCQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIDA7CisJfQorCisJeGQgPSBqZmZzMl9zZXR1cF94YXR0cl9kYXR1bShjLCBqZTMyX3RvX2NwdShyeC0+eGlkKSwgamUzMl90b19jcHUocngtPnZlcnNpb24pKTsKKwlpZiAoSVNfRVJSKHhkKSkgeworCQlpZiAoUFRSX0VSUih4ZCkgPT0gLUVFWElTVCkgeworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pKSkpKQorCQkJCXJldHVybiBlcnI7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlyZXR1cm4gUFRSX0VSUih4ZCk7CisJfQorCXhkLT54cHJlZml4ID0gcngtPnhwcmVmaXg7CisJeGQtPm5hbWVfbGVuID0gcngtPm5hbWVfbGVuOworCXhkLT52YWx1ZV9sZW4gPSBqZTE2X3RvX2NwdShyeC0+dmFsdWVfbGVuKTsKKwl4ZC0+ZGF0YV9jcmMgPSBqZTMyX3RvX2NwdShyeC0+ZGF0YV9jcmMpOworCisJeGQtPm5vZGUgPSBqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgb2ZzIHwgUkVGX1BSSVNUSU5FLCB0b3RsZW4sIE5VTEwpOworCS8qIEZJWE1FICovIHhkLT5ub2RlLT5uZXh0X2luX2lubyA9ICh2b2lkICopeGQ7CisKKwlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKQorCQlqZmZzMl9zdW1fYWRkX3hhdHRyX21lbShzLCByeCwgb2ZzIC0gamViLT5vZmZzZXQpOworCWRiZ194YXR0cigic2NhbmluZyB4ZGF0dW0gYXQgJSMwOHggKHhpZD0ldSwgdmVyc2lvbj0ldSlcbiIsCisJCSAgb2ZzLCB4ZC0+eGlkLCB4ZC0+dmVyc2lvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfc2Nhbl94cmVmX25vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCisJCQkJc3RydWN0IGpmZnMyX3Jhd194cmVmICpyciwgdWludDMyX3Qgb2ZzLAorCQkJCXN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZjsKKwl1aW50MzJfdCBjcmM7CisJaW50IGVycjsKKworCWNyYyA9IGNyYzMyKDAsIHJyLCBzaXplb2YoKnJyKSAtIDQpOworCWlmIChjcmMgIT0gamUzMl90b19jcHUocnItPm5vZGVfY3JjKSkgeworCQlpZiAoamUzMl90b19jcHUocnItPm5vZGVfY3JjKSAhPSAweGZmZmZmZmZmKQorCQkJSkZGUzJfV0FSTklORygibm9kZSBDUkMgZmFpbGVkIGF0ICUjMDh4LCByZWFkPSUjMDh4LCBjYWxjPSUjMDh4XG4iLAorCQkJCSAgICAgIG9mcywgamUzMl90b19jcHUocnItPm5vZGVfY3JjKSwgY3JjKTsKKwkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KHJyLT50b3RsZW4pKSkpKQorCQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194cmVmKSkgIT0gamUzMl90b19jcHUocnItPnRvdGxlbikpIHsKKwkJSkZGUzJfV0FSTklORygibm9kZSBsZW5ndGggbWlzbWF0Y2ggYXQgJSMwOHgsIHJlYWQ9JXUsIGNhbGM9JXpkXG4iLAorCQkJICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyci0+dG90bGVuKSwKKwkJCSAgICAgIFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194cmVmKSkpOworCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBqZTMyX3RvX2NwdShyci0+dG90bGVuKSkpKQorCQkJcmV0dXJuIGVycjsKKwkJcmV0dXJuIDA7CisJfQorCisJcmVmID0gamZmczJfYWxsb2NfeGF0dHJfcmVmKCk7CisJaWYgKCFyZWYpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQkVGT1JFIGpmZnMyX2J1aWxkX3hhdHRyX3N1YnN5c3RlbSgpIGNhbGxlZCwgCisJICogcmVmLT54aWQgaXMgdXNlZCB0byBzdG9yZSAzMmJpdCB4aWQsIHhkIGlzIG5vdCB1c2VkCisJICogcmVmLT5pbm8gaXMgdXNlZCB0byBzdG9yZSAzMmJpdCBpbm9kZS1udW1iZXIsIGljIGlzIG5vdCB1c2VkCisJICogVGhvZXMgdmFyaWFibGVzIGFyZSBkZWNsYXJlZCBhcyB1bmlvbiwgdGh1cyB1c2luZyB0aG9zZQorCSAqIGFyZSBleGNsdXNpdmUuIEluIGEgc2ltaWxhciB3YXksIHJlZi0+bmV4dCBpcyB0ZW1wb3JhcmlseQorCSAqIHVzZWQgdG8gY2hhaW4gYWxsIHhhdHRyX3JlZiBvYmplY3QuIEl0J3MgcmUtY2hhaW5lZCB0bworCSAqIGpmZnMyX2lub2RlX2NhY2hlIGluIGpmZnMyX2J1aWxkX3hhdHRyX3N1YnN5c3RlbSgpIGNvcnJlY3RseS4KKwkgKi8KKwlyZWYtPmlubyA9IGplMzJfdG9fY3B1KHJyLT5pbm8pOworCXJlZi0+eGlkID0gamUzMl90b19jcHUocnItPnhpZCk7CisJcmVmLT5uZXh0ID0gYy0+eHJlZl90ZW1wOworCWMtPnhyZWZfdGVtcCA9IHJlZjsKKworCXJlZi0+bm9kZSA9IGpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMgfCBSRUZfUFJJU1RJTkUsIFBBRChqZTMyX3RvX2NwdShyci0+dG90bGVuKSksIE5VTEwpOworCS8qIEZJWE1FICovIHJlZi0+bm9kZS0+bmV4dF9pbl9pbm8gPSAodm9pZCAqKXJlZjsKKworCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpCisJCWpmZnMyX3N1bV9hZGRfeHJlZl9tZW0ocywgcnIsIG9mcyAtIGplYi0+b2Zmc2V0KTsKKwlkYmdfeGF0dHIoInNjYW4geHJlZiBhdCAlIzA4eCAoeGlkPSV1LCBpbm89JXUpXG4iLAorCQkgIG9mcywgcmVmLT54aWQsIHJlZi0+aW5vKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiBDYWxsZWQgd2l0aCAnYnVmX3NpemUgPT0gMCcgaWYgYnVmIGlzIGluIGZhY3QgYSBwb2ludGVyIF9kaXJlY3RseV8gaW50bworICAgdGhlIGZsYXNoLCBYSVAtc3R5bGUgKi8KIHN0YXRpYyBpbnQgamZmczJfc2Nhbl9lcmFzZWJsb2NrIChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKLQkJCQl1bnNpZ25lZCBjaGFyICpidWYsIHVpbnQzMl90IGJ1Zl9zaXplLCBzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykgeworCQkJCSAgdW5zaWduZWQgY2hhciAqYnVmLCB1aW50MzJfdCBidWZfc2l6ZSwgc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMpIHsKIAlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlICpub2RlOwogCXN0cnVjdCBqZmZzMl91bmtub3duX25vZGUgY3Jjbm9kZTsKLQlzdHJ1Y3QgamZmczJfc3VtX21hcmtlciAqc207CiAJdWludDMyX3Qgb2ZzLCBwcmV2b2ZzOwogCXVpbnQzMl90IGhkcl9jcmMsIGJ1Zl9vZnMsIGJ1Zl9sZW47CiAJaW50IGVycjsKQEAgLTM0NCw0NCArNDU3LDc1IEBACiAjZW5kaWYKIAogCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpIHsKLQkJc20gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX21hcmtlciksIEdGUF9LRVJORUwpOwotCQlpZiAoIXNtKSB7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCi0JCWVyciA9IGpmZnMyX2ZpbGxfc2Nhbl9idWYoYywgKHVuc2lnbmVkIGNoYXIgKikgc20sIGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLQotCQkJCQlzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV9tYXJrZXIpLCBzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV9tYXJrZXIpKTsKLQkJaWYgKGVycikgewotCQkJa2ZyZWUoc20pOwotCQkJcmV0dXJuIGVycjsKLQkJfQotCi0JCWlmIChqZTMyX3RvX2NwdShzbS0+bWFnaWMpID09IEpGRlMyX1NVTV9NQUdJQyApIHsKLQkJCWVyciA9IGpmZnMyX3N1bV9zY2FuX3N1bW5vZGUoYywgamViLCBqZTMyX3RvX2NwdShzbS0+b2Zmc2V0KSwgJnBzZXVkb19yYW5kb20pOwotCQkJaWYgKGVycikgewotCQkJCWtmcmVlKHNtKTsKLQkJCQlyZXR1cm4gZXJyOworCQlzdHJ1Y3QgamZmczJfc3VtX21hcmtlciAqc207CisJCXZvaWQgKnN1bXB0ciA9IE5VTEw7CisJCXVpbnQzMl90IHN1bWxlbjsKKwkgICAgICAKKwkJaWYgKCFidWZfc2l6ZSkgeworCQkJLyogWElQIGNhc2UuIEp1c3QgbG9vaywgcG9pbnQgYXQgdGhlIHN1bW1hcnkgaWYgaXQncyB0aGVyZSAqLworCQkJc20gPSAodm9pZCAqKWJ1ZiArIGMtPnNlY3Rvcl9zaXplIC0gc2l6ZW9mKCpzbSk7CisJCQlpZiAoamUzMl90b19jcHUoc20tPm1hZ2ljKSA9PSBKRkZTMl9TVU1fTUFHSUMpIHsKKwkJCQlzdW1wdHIgPSBidWYgKyBqZTMyX3RvX2NwdShzbS0+b2Zmc2V0KTsKKwkJCQlzdW1sZW4gPSBjLT5zZWN0b3Jfc2l6ZSAtIGplMzJfdG9fY3B1KHNtLT5vZmZzZXQpOwogCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgTkFORCBmbGFzaCwgcmVhZCBhIHdob2xlIHBhZ2Ugb2YgaXQuIEVsc2UganVzdCB0aGUgZW5kICovCisJCQlpZiAoYy0+d2J1Zl9wYWdlc2l6ZSkKKwkJCQlidWZfbGVuID0gYy0+d2J1Zl9wYWdlc2l6ZTsKKwkJCWVsc2UKKwkJCQlidWZfbGVuID0gc2l6ZW9mKCpzbSk7CisKKwkJCS8qIFJlYWQgYXMgbXVjaCBhcyB3ZSB3YW50IGludG8gdGhlIF9lbmRfIG9mIHRoZSBwcmVhbGxvY2F0ZWQgYnVmZmVyICovCisJCQllcnIgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsIGJ1ZiArIGJ1Zl9zaXplIC0gYnVmX2xlbiwgCisJCQkJCQkgIGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBidWZfbGVuLAorCQkJCQkJICBidWZfbGVuKTsJCQkJCisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisKKwkJCXNtID0gKHZvaWQgKilidWYgKyBidWZfc2l6ZSAtIHNpemVvZigqc20pOworCQkJaWYgKGplMzJfdG9fY3B1KHNtLT5tYWdpYykgPT0gSkZGUzJfU1VNX01BR0lDKSB7CisJCQkJc3VtbGVuID0gYy0+c2VjdG9yX3NpemUgLSBqZTMyX3RvX2NwdShzbS0+b2Zmc2V0KTsKKwkJCQlzdW1wdHIgPSBidWYgKyBidWZfc2l6ZSAtIHN1bWxlbjsKKworCQkJCS8qIE5vdywgbWFrZSBzdXJlIHRoZSBzdW1tYXJ5IGl0c2VsZiBpcyBhdmFpbGFibGUgKi8KKwkJCQlpZiAoc3VtbGVuID4gYnVmX3NpemUpIHsKKwkJCQkJLyogTmVlZCB0byBrbWFsbG9jIGZvciB0aGlzLiAqLworCQkJCQlzdW1wdHIgPSBrbWFsbG9jKHN1bWxlbiwgR0ZQX0tFUk5FTCk7CisJCQkJCWlmICghc3VtcHRyKQorCQkJCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJCW1lbWNweShzdW1wdHIgKyBzdW1sZW4gLSBidWZfbGVuLCBidWYgKyBidWZfc2l6ZSAtIGJ1Zl9sZW4sIGJ1Zl9sZW4pOworCQkJCX0KKwkJCQlpZiAoYnVmX2xlbiA8IHN1bWxlbikgeworCQkJCQkvKiBOZWVkIHRvIHJlYWQgbW9yZSBzbyB0aGF0IHRoZSBlbnRpcmUgc3VtbWFyeSBub2RlIGlzIHByZXNlbnQgKi8KKwkJCQkJZXJyID0gamZmczJfZmlsbF9zY2FuX2J1ZihjLCBzdW1wdHIsIAorCQkJCQkJCQkgIGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBzdW1sZW4sCisJCQkJCQkJCSAgc3VtbGVuIC0gYnVmX2xlbik7CQkJCQorCQkJCQlpZiAoZXJyKQorCQkJCQkJcmV0dXJuIGVycjsKKwkJCQl9CisJCQl9CisKIAkJfQogCi0JCWtmcmVlKHNtKTsKKwkJaWYgKHN1bXB0cikgeworCQkJZXJyID0gamZmczJfc3VtX3NjYW5fc3Vtbm9kZShjLCBqZWIsIHN1bXB0ciwgc3VtbGVuLCAmcHNldWRvX3JhbmRvbSk7CiAKLQkJb2ZzID0gamViLT5vZmZzZXQ7Ci0JCXByZXZvZnMgPSBqZWItPm9mZnNldCAtIDE7CisJCQlpZiAoYnVmX3NpemUgJiYgc3VtbGVuID4gYnVmX3NpemUpCisJCQkJa2ZyZWUoc3VtcHRyKTsKKwkJCS8qIElmIGl0IHJldHVybnMgd2l0aCBhIHJlYWwgZXJyb3IsIGJhaWwuIAorCQkJICAgSWYgaXQgcmV0dXJucyBwb3NpdGl2ZSwgdGhhdCdzIGEgYmxvY2sgY2xhc3NpZmljYXRpb24KKwkJCSAgIChpLmUuIEJMS19TVEFURV94eHgpIHNvIHJldHVybiB0aGF0IHRvby4KKwkJCSAgIElmIGl0IHJldHVybnMgemVybywgZmFsbCB0aHJvdWdoIHRvIGZ1bGwgc2Nhbi4gKi8KKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQogCX0KIAogCWJ1Zl9vZnMgPSBqZWItPm9mZnNldDsKIAogCWlmICghYnVmX3NpemUpIHsKKwkJLyogVGhpcyBpcyB0aGUgWElQIGNhc2UgLS0gd2UncmUgcmVhZGluZyBfZGlyZWN0bHlfIGZyb20gdGhlIGZsYXNoIGNoaXAgKi8KIAkJYnVmX2xlbiA9IGMtPnNlY3Rvcl9zaXplOwotCi0JCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpIHsKLQkJCS8qIG11c3QgcmVyZWFkIGJlY2F1c2Ugb2Ygc3VtbWFyeSB0ZXN0ICovCi0JCQllcnIgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsIGJ1ZiwgYnVmX29mcywgYnVmX2xlbik7Ci0JCQlpZiAoZXJyKQotCQkJCXJldHVybiBlcnI7Ci0JCX0KLQogCX0gZWxzZSB7CiAJCWJ1Zl9sZW4gPSBFTVBUWV9TQ0FOX1NJWkUoYy0+c2VjdG9yX3NpemUpOwogCQllcnIgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsIGJ1ZiwgYnVmX29mcywgYnVmX2xlbik7CkBAIC00MTgsNyArNTYyLDEwIEBACiAJaWYgKG9mcykgewogCQlEMShwcmludGsoS0VSTl9ERUJVRyAiRnJlZSBzcGFjZSBhdCAlMDh4IGVuZHMgYXQgJTA4eFxuIiwgamViLT5vZmZzZXQsCiAJCQkgIGplYi0+b2Zmc2V0ICsgb2ZzKSk7Ci0JCURJUlRZX1NQQUNFKG9mcyk7CisJCWlmICgoZXJyID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDEpKSkKKwkJCXJldHVybiBlcnI7CisJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIG9mcykpKQorCQkJcmV0dXJuIGVycjsKIAl9CiAKIAkvKiBOb3cgb2ZzIGlzIGEgY29tcGxldGUgcGh5c2ljYWwgZmxhc2ggb2Zmc2V0IGFzIGl0IGFsd2F5cyB3YXMuLi4gKi8KQEAgLTQzMyw2ICs1ODAsMTEgQEAKIAogCQlqZmZzMl9kYmdfYWNjdF9wYXJhbm9pYV9jaGVja19ub2xvY2soYywgamViKTsKIAorCQkvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vZGUgcmVmcyBhdmFpbGFibGUgZm9yIHVzZSAqLworCQllcnIgPSBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGplYiwgMik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCiAJCWNvbmRfcmVzY2hlZCgpOwogCiAJCWlmIChvZnMgJiAzKSB7CkBAIC00NDIsNyArNTk0LDggQEAKIAkJfQogCQlpZiAob2ZzID09IHByZXZvZnMpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm9mcyAweCUwOHggaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBTa2lwcGluZ1xuIiwgb2ZzKTsKLQkJCURJUlRZX1NQQUNFKDQpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgNCkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gNDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC00NTEsNyArNjA0LDggQEAKIAkJaWYgKGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgPCBvZnMgKyBzaXplb2YoKm5vZGUpKSB7CiAJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiRmV3ZXIgdGhhbiAlemQgYnl0ZXMgbGVmdCB0byBlbmQgb2YgYmxvY2suICgleCsleDwleCslengpIE5vdCByZWFkaW5nXG4iLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSksCiAJCQkJICBqZWItPm9mZnNldCwgYy0+c2VjdG9yX3NpemUsIG9mcywgc2l6ZW9mKCpub2RlKSkpOwotCQkJRElSVFlfU1BBQ0UoKGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUpLW9mcyk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCAoamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSktb2ZzKSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTQ4MSw3ICs2MzUsOCBAQAogCQkJCWlmICgqKHVpbnQzMl90ICopKCZidWZbaW5idWZfb2ZzXSkgIT0gMHhmZmZmZmZmZikgewogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJFbXB0eSBmbGFzaCBhdCAweCUwOHggZW5kcyBhdCAweCUwOHhcbiIsCiAJCQkJCSAgICAgICBlbXB0eV9zdGFydCwgb2ZzKTsKLQkJCQkJRElSVFlfU1BBQ0Uob2ZzLWVtcHR5X3N0YXJ0KTsKKwkJCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgb2ZzLWVtcHR5X3N0YXJ0KSkpCisJCQkJCQlyZXR1cm4gZXJyOwogCQkJCQlnb3RvIHNjYW5fbW9yZTsKIAkJCQl9CiAKQEAgLTQ5NCw3ICs2NDksNyBAQAogCQkJLyogSWYgd2UncmUgb25seSBjaGVja2luZyB0aGUgYmVnaW5uaW5nIG9mIGEgYmxvY2sgd2l0aCBhIGNsZWFubWFya2VyLAogCQkJICAgYmFpbCBub3cgKi8KIAkJCWlmIChidWZfb2ZzID09IGplYi0+b2Zmc2V0ICYmIGplYi0+dXNlZF9zaXplID09IFBBRChjLT5jbGVhbm1hcmtlcl9zaXplKSAmJgotCQkJICAgIGMtPmNsZWFubWFya2VyX3NpemUgJiYgIWplYi0+ZGlydHlfc2l6ZSAmJiAhamViLT5maXJzdF9ub2RlLT5uZXh0X3BoeXMpIHsKKwkJCSAgICBjLT5jbGVhbm1hcmtlcl9zaXplICYmICFqZWItPmRpcnR5X3NpemUgJiYgIXJlZl9uZXh0KGplYi0+Zmlyc3Rfbm9kZSkpIHsKIAkJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiJWQgYnl0ZXMgYXQgc3RhcnQgb2YgYmxvY2sgc2VlbXMgY2xlYW4uLi4gYXNzdW1pbmcgYWxsIGNsZWFuXG4iLCBFTVBUWV9TQ0FOX1NJWkUoYy0+c2VjdG9yX3NpemUpKSk7CiAJCQkJcmV0dXJuIEJMS19TVEFURV9DTEVBTk1BUktFUjsKIAkJCX0KQEAgLTUxOCwyMCArNjczLDIzIEBACiAKIAkJaWYgKG9mcyA9PSBqZWItPm9mZnNldCAmJiBqZTE2X3RvX2NwdShub2RlLT5tYWdpYykgPT0gS1NBTVRJQl9DSUdBTV8yU0ZGSikgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTWFnaWMgYml0bWFzayBpcyBiYWNrd2FyZHMgYXQgb2Zmc2V0IDB4JTA4eC4gV3JvbmcgZW5kaWFuIGZpbGVzeXN0ZW0/XG4iLCBvZnMpOwotCQkJRElSVFlfU1BBQ0UoNCk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCA0KSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCW9mcyArPSA0OwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGplMTZfdG9fY3B1KG5vZGUtPm1hZ2ljKSA9PSBKRkZTMl9ESVJUWV9CSVRNQVNLKSB7CiAJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiRGlydHkgYml0bWFzayBhdCAweCUwOHhcbiIsIG9mcykpOwotCQkJRElSVFlfU1BBQ0UoNCk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCA0KSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCW9mcyArPSA0OwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGplMTZfdG9fY3B1KG5vZGUtPm1hZ2ljKSA9PSBKRkZTMl9PTERfTUFHSUNfQklUTUFTSykgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT2xkIEpGRlMyIGJpdG1hc2sgZm91bmQgYXQgMHglMDh4XG4iLCBvZnMpOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiWW91IGNhbm5vdCB1c2Ugb2xkZXIgSkZGUzIgZmlsZXN5c3RlbXMgd2l0aCBuZXdlciBrZXJuZWxzXG4iKTsKLQkJCURJUlRZX1NQQUNFKDQpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgNCkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gNDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01NDAsNyArNjk4LDggQEAKIAkJCW5vaXN5X3ByaW50aygmbm9pc2UsICJqZmZzMl9zY2FuX2VyYXNlYmxvY2soKTogTWFnaWMgYml0bWFzayAweCUwNHggbm90IGZvdW5kIGF0IDB4JTA4eDogMHglMDR4IGluc3RlYWRcbiIsCiAJCQkJICAgICBKRkZTMl9NQUdJQ19CSVRNQVNLLCBvZnMsCiAJCQkJICAgICBqZTE2X3RvX2NwdShub2RlLT5tYWdpYykpOwotCQkJRElSVFlfU1BBQ0UoNCk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCA0KSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCW9mcyArPSA0OwogCQkJY29udGludWU7CiAJCX0KQEAgLTU1Nyw3ICs3MTYsOCBAQAogCQkJCSAgICAgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSwKIAkJCQkgICAgIGplMzJfdG9fY3B1KG5vZGUtPmhkcl9jcmMpLAogCQkJCSAgICAgaGRyX2NyYyk7Ci0JCQlESVJUWV9TUEFDRSg0KTsKKwkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIDQpKSkKKwkJCQlyZXR1cm4gZXJyOwogCQkJb2ZzICs9IDQ7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtNTY4LDcgKzcyOCw4IEBACiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJOb2RlIGF0IDB4JTA4eCB3aXRoIGxlbmd0aCAweCUwOHggd291bGQgcnVuIG92ZXIgdGhlIGVuZCBvZiB0aGUgZXJhc2UgYmxvY2tcbiIsCiAJCQkgICAgICAgb2ZzLCBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBlcmhhcHMgdGhlIGZpbGUgc3lzdGVtIHdhcyBjcmVhdGVkIHdpdGggdGhlIHdyb25nIGVyYXNlIHNpemU/XG4iKTsKLQkJCURJUlRZX1NQQUNFKDQpOworCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgNCkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gNDsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC01NzYsNyArNzM3LDggQEAKIAkJaWYgKCEoamUxNl90b19jcHUobm9kZS0+bm9kZXR5cGUpICYgSkZGUzJfTk9ERV9BQ0NVUkFURSkpIHsKIAkJCS8qIFdoZWVlLiBUaGlzIGlzIGFuIG9ic29sZXRlZCBub2RlICovCiAJCQlEMihwcmludGsoS0VSTl9ERUJVRyAiTm9kZSBhdCAweCUwOHggaXMgb2Jzb2xldGUuIFNraXBwaW5nXG4iLCBvZnMpKTsKLQkJCURJUlRZX1NQQUNFKFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpKSkKKwkJCQlyZXR1cm4gZXJyOwogCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02MTQsMzAgKzc3Niw1OSBAQAogCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKIAkJCWJyZWFrOwogCisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWEFUVFI6CisJCQlpZiAoYnVmX29mcyArIGJ1Zl9sZW4gPCBvZnMgKyBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSB7CisJCQkJYnVmX2xlbiA9IG1pbl90KHVpbnQzMl90LCBidWZfc2l6ZSwgamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtIG9mcyk7CisJCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZld2VyIHRoYW4gJWQgYnl0ZXMgKHhhdHRyIG5vZGUpIgorCQkJCQkgICIgbGVmdCB0byBlbmQgb2YgYnVmLiBSZWFkaW5nIDB4JXggYXQgMHglMDh4XG4iLAorCQkJCQkgIGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbiksIGJ1Zl9sZW4sIG9mcykpOworCQkJCWVyciA9IGpmZnMyX2ZpbGxfc2Nhbl9idWYoYywgYnVmLCBvZnMsIGJ1Zl9sZW4pOworCQkJCWlmIChlcnIpCisJCQkJCXJldHVybiBlcnI7CisJCQkJYnVmX29mcyA9IG9mczsKKwkJCQlub2RlID0gKHZvaWQgKilidWY7CisJCQl9CisJCQllcnIgPSBqZmZzMl9zY2FuX3hhdHRyX25vZGUoYywgamViLCAodm9pZCAqKW5vZGUsIG9mcywgcyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlvZnMgKz0gUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpOworCQkJYnJlYWs7CisJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWFJFRjoKKwkJCWlmIChidWZfb2ZzICsgYnVmX2xlbiA8IG9mcyArIGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpIHsKKwkJCQlidWZfbGVuID0gbWluX3QodWludDMyX3QsIGJ1Zl9zaXplLCBqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gb2ZzKTsKKwkJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiRmV3ZXIgdGhhbiAlZCBieXRlcyAoeHJlZiBub2RlKSIKKwkJCQkJICAiIGxlZnQgdG8gZW5kIG9mIGJ1Zi4gUmVhZGluZyAweCV4IGF0IDB4JTA4eFxuIiwKKwkJCQkJICBqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pLCBidWZfbGVuLCBvZnMpKTsKKwkJCQllcnIgPSBqZmZzMl9maWxsX3NjYW5fYnVmKGMsIGJ1Ziwgb2ZzLCBidWZfbGVuKTsKKwkJCQlpZiAoZXJyKQorCQkJCQlyZXR1cm4gZXJyOworCQkJCWJ1Zl9vZnMgPSBvZnM7CisJCQkJbm9kZSA9ICh2b2lkICopYnVmOworCQkJfQorCQkJZXJyID0gamZmczJfc2Nhbl94cmVmX25vZGUoYywgamViLCAodm9pZCAqKW5vZGUsIG9mcywgcyk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCQlvZnMgKz0gUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpOworCQkJYnJlYWs7CisjZW5kaWYJLyogQ09ORklHX0pGRlMyX0ZTX1hBVFRSICovCisKIAkJY2FzZSBKRkZTMl9OT0RFVFlQRV9DTEVBTk1BUktFUjoKIAkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJDTEVBTk1BUktFUiBub2RlIGZvdW5kIGF0IDB4JTA4eFxuIiwgb2ZzKSk7CiAJCQlpZiAoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSAhPSBjLT5jbGVhbm1hcmtlcl9zaXplKSB7CiAJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJDTEVBTk1BUktFUiBub2RlIGZvdW5kIGF0IDB4JTA4eCBoYXMgdG90bGVuIDB4JXggIT0gbm9ybWFsIDB4JXhcbiIsCiAJCQkJICAgICAgIG9mcywgamUzMl90b19jcHUobm9kZS0+dG90bGVuKSwgYy0+Y2xlYW5tYXJrZXJfc2l6ZSk7Ci0JCQkJRElSVFlfU1BBQ0UoUEFEKHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkpOworCQkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpKSkpCisJCQkJCXJldHVybiBlcnI7CiAJCQkJb2ZzICs9IFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpOwogCQkJfSBlbHNlIGlmIChqZWItPmZpcnN0X25vZGUpIHsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNMRUFOTUFSS0VSIG5vZGUgZm91bmQgYXQgMHglMDh4LCBub3QgZmlyc3Qgbm9kZSBpbiBibG9jayAoMHglMDh4KVxuIiwgb2ZzLCBqZWItPm9mZnNldCk7Ci0JCQkJRElSVFlfU1BBQ0UoUEFEKHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkpOworCQkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpKSkpCisJCQkJCXJldHVybiBlcnI7CiAJCQkJb2ZzICs9IFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpOwogCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICptYXJrZXJfcmVmID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7Ci0JCQkJaWYgKCFtYXJrZXJfcmVmKSB7Ci0JCQkJCXByaW50ayhLRVJOX05PVElDRSAiRmFpbGVkIHRvIGFsbG9jYXRlIG5vZGUgcmVmIGZvciBjbGVhbiBtYXJrZXJcbiIpOwotCQkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCQl9Ci0JCQkJbWFya2VyX3JlZi0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCQkJCW1hcmtlcl9yZWYtPm5leHRfcGh5cyA9IE5VTEw7Ci0JCQkJbWFya2VyX3JlZi0+Zmxhc2hfb2Zmc2V0ID0gb2ZzIHwgUkVGX05PUk1BTDsKLQkJCQltYXJrZXJfcmVmLT5fX3RvdGxlbiA9IGMtPmNsZWFubWFya2VyX3NpemU7Ci0JCQkJamViLT5maXJzdF9ub2RlID0gamViLT5sYXN0X25vZGUgPSBtYXJrZXJfcmVmOworCQkJCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMgfCBSRUZfTk9STUFMLCBjLT5jbGVhbm1hcmtlcl9zaXplLCBOVUxMKTsKIAotCQkJCVVTRURfU1BBQ0UoUEFEKGMtPmNsZWFubWFya2VyX3NpemUpKTsKIAkJCQlvZnMgKz0gUEFEKGMtPmNsZWFubWFya2VyX3NpemUpOwogCQkJfQogCQkJYnJlYWs7CkBAIC02NDUsNyArODM2LDggQEAKIAkJY2FzZSBKRkZTMl9OT0RFVFlQRV9QQURESU5HOgogCQkJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkKIAkJCQlqZmZzMl9zdW1fYWRkX3BhZGRpbmdfbWVtKHMsIGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpOwotCQkJRElSVFlfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpKTsKKwkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSkpKQorCQkJCXJldHVybiBlcnI7CiAJCQlvZnMgKz0gUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpOwogCQkJYnJlYWs7CiAKQEAgLTY1Niw3ICs4NDgsOCBAQAogCQkJICAgICAgICBjLT5mbGFncyB8PSBKRkZTMl9TQl9GTEFHX1JPOwogCQkJCWlmICghKGpmZnMyX2lzX3JlYWRvbmx5KGMpKSkKIAkJCQkJcmV0dXJuIC1FUk9GUzsKLQkJCQlESVJUWV9TUEFDRShQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSkpOworCQkJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSkpKQorCQkJCQlyZXR1cm4gZXJyOwogCQkJCW9mcyArPSBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQkJYnJlYWs7CiAKQEAgLTY2NiwxNSArODU5LDIxIEBACiAKIAkJCWNhc2UgSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9ERUxFVEU6CiAJCQkJRDEocHJpbnRrKEtFUk5fTk9USUNFICJVbmtub3duIGJ1dCBjb21wYXRpYmxlIGZlYXR1cmUgbm9kZSAoMHglMDR4KSBmb3VuZCBhdCBvZmZzZXQgMHglMDh4XG4iLCBqZTE2X3RvX2NwdShub2RlLT5ub2RldHlwZSksIG9mcykpOwotCQkJCURJUlRZX1NQQUNFKFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSk7CisJCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KG5vZGUtPnRvdGxlbikpKSkpCisJCQkJCXJldHVybiBlcnI7CiAJCQkJb2ZzICs9IFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKTsKIAkJCQlicmVhazsKIAotCQkJY2FzZSBKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0NPUFk6CisJCQljYXNlIEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfQ09QWTogewogCQkJCUQxKHByaW50ayhLRVJOX05PVElDRSAiVW5rbm93biBidXQgY29tcGF0aWJsZSBmZWF0dXJlIG5vZGUgKDB4JTA0eCkgZm91bmQgYXQgb2Zmc2V0IDB4JTA4eFxuIiwgamUxNl90b19jcHUobm9kZS0+bm9kZXR5cGUpLCBvZnMpKTsKLQkJCQlVU0VEX1NQQUNFKFBBRChqZTMyX3RvX2NwdShub2RlLT50b3RsZW4pKSk7CisKKwkJCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgb2ZzIHwgUkVGX1BSSVNUSU5FLCBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSksIE5VTEwpOworCisJCQkJLyogV2UgY2FuJ3Qgc3VtbWFyaXNlIG5vZGVzIHdlIGRvbid0IGdyb2sgKi8KKwkJCQlqZmZzMl9zdW1fZGlzYWJsZV9jb2xsZWN0aW5nKHMpOwogCQkJCW9mcyArPSBQQUQoamUzMl90b19jcHUobm9kZS0+dG90bGVuKSk7CiAJCQkJYnJlYWs7CisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtNjg3LDkgKzg4Niw5IEBACiAJCX0KIAl9CiAKLQlEMShwcmludGsoS0VSTl9ERUJVRyAiQmxvY2sgYXQgMHglMDh4OiBmcmVlIDB4JTA4eCwgZGlydHkgMHglMDh4LCB1bmNoZWNrZWQgMHglMDh4LCB1c2VkIDB4JTA4eFxuIiwgamViLT5vZmZzZXQsCi0JCSAgamViLT5mcmVlX3NpemUsIGplYi0+ZGlydHlfc2l6ZSwgamViLT51bmNoZWNrZWRfc2l6ZSwgamViLT51c2VkX3NpemUpKTsKLQorCUQxKHByaW50ayhLRVJOX0RFQlVHICJCbG9jayBhdCAweCUwOHg6IGZyZWUgMHglMDh4LCBkaXJ0eSAweCUwOHgsIHVuY2hlY2tlZCAweCUwOHgsIHVzZWQgMHglMDh4LCB3YXN0ZWQgMHglMDh4XG4iLAorCQkgIGplYi0+b2Zmc2V0LGplYi0+ZnJlZV9zaXplLCBqZWItPmRpcnR5X3NpemUsIGplYi0+dW5jaGVja2VkX3NpemUsIGplYi0+dXNlZF9zaXplLCBqZWItPndhc3RlZF9zaXplKSk7CisJCiAJLyogbWFya19ub2RlX29ic29sZXRlIGNhbiBhZGQgdG8gd2FzdGVkICEhICovCiAJaWYgKGplYi0+d2FzdGVkX3NpemUpIHsKIAkJamViLT5kaXJ0eV9zaXplICs9IGplYi0+d2FzdGVkX3NpemU7CkBAIC03MzAsOSArOTI5LDkgQEAKIHN0YXRpYyBpbnQgamZmczJfc2Nhbl9pbm9kZV9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAogCQkJCSBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSwgdWludDMyX3Qgb2ZzLCBzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CiAJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYzsKIAl1aW50MzJfdCBpbm8gPSBqZTMyX3RvX2NwdShyaS0+aW5vKTsKKwlpbnQgZXJyOwogCiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3NjYW5faW5vZGVfbm9kZSgpOiBOb2RlIGF0IDB4JTA4eFxuIiwgb2ZzKSk7CiAKQEAgLTc0NSwxMiArOTQ0LDYgQEAKIAkgICBXaGljaCBtZWFucyB0aGF0IHRoZSBfZnVsbF8gYW1vdW50IG9mIHRpbWUgdG8gZ2V0IHRvIHByb3BlciB3cml0ZSBtb2RlIHdpdGggR0MKIAkgICBvcGVyYXRpb25hbCBtYXkgYWN0dWFsbHkgYmUgX2xvbmdlcl8gdGhhbiBiZWZvcmUuIFN1Y2tzIHRvIGJlIG1lLiAqLwogCi0JcmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7Ci0JaWYgKCFyYXcpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJqZmZzMl9zY2FuX2lub2RlX25vZGUoKTogYWxsb2NhdGlvbiBvZiBub2RlIHJlZmVyZW5jZSBmYWlsZWRcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KIAlpYyA9IGpmZnMyX2dldF9pbm9fY2FjaGUoYywgaW5vKTsKIAlpZiAoIWljKSB7CiAJCS8qIElub2NhY2hlIGdldCBmYWlsZWQuIEVpdGhlciB3ZSByZWFkIGEgYm9ndXMgaW5vIyBvciBpdCdzIGp1c3QgZ2VudWluZWx5IHRoZQpAQCAtNzYyLDMwICs5NTUsMTcgQEAKIAkJCXByaW50ayhLRVJOX05PVElDRSAiamZmczJfc2Nhbl9pbm9kZV9ub2RlKCk6IENSQyBmYWlsZWQgb24gbm9kZSBhdCAweCUwOHg6IFJlYWQgMHglMDh4LCBjYWxjdWxhdGVkIDB4JTA4eFxuIiwKIAkJCSAgICAgICBvZnMsIGplMzJfdG9fY3B1KHJpLT5ub2RlX2NyYyksIGNyYyk7CiAJCQkvKiBXZSBiZWxpZXZlIHRvdGxlbiBiZWNhdXNlIHRoZSBDUkMgb24gdGhlIG5vZGUgX2hlYWRlcl8gd2FzIE9LLCBqdXN0IHRoZSBub2RlIGl0c2VsZiBmYWlsZWQuICovCi0JCQlESVJUWV9TUEFDRShQQUQoamUzMl90b19jcHUocmktPnRvdGxlbikpKTsKLQkJCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJhdyk7CisJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBQQUQoamUzMl90b19jcHUocmktPnRvdGxlbikpKSkpCisJCQkJcmV0dXJuIGVycjsKIAkJCXJldHVybiAwOwogCQl9CiAJCWljID0gamZmczJfc2Nhbl9tYWtlX2lub19jYWNoZShjLCBpbm8pOwotCQlpZiAoIWljKSB7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCQlpZiAoIWljKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KIAl9CiAKIAkvKiBXaGVlZS4gSXQgd29ya2VkICovCi0KLQlyYXctPmZsYXNoX29mZnNldCA9IG9mcyB8IFJFRl9VTkNIRUNLRUQ7Ci0JcmF3LT5fX3RvdGxlbiA9IFBBRChqZTMyX3RvX2NwdShyaS0+dG90bGVuKSk7Ci0JcmF3LT5uZXh0X3BoeXMgPSBOVUxMOwotCXJhdy0+bmV4dF9pbl9pbm8gPSBpYy0+bm9kZXM7Ci0KLQlpYy0+bm9kZXMgPSByYXc7Ci0JaWYgKCFqZWItPmZpcnN0X25vZGUpCi0JCWplYi0+Zmlyc3Rfbm9kZSA9IHJhdzsKLQlpZiAoamViLT5sYXN0X25vZGUpCi0JCWplYi0+bGFzdF9ub2RlLT5uZXh0X3BoeXMgPSByYXc7Ci0JamViLT5sYXN0X25vZGUgPSByYXc7CisJamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9VTkNIRUNLRUQsIFBBRChqZTMyX3RvX2NwdShyaS0+dG90bGVuKSksIGljKTsKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJOb2RlIGlzIGlubyAjJXUsIHZlcnNpb24gJWQuIFJhbmdlIDB4JXgtMHgleFxuIiwKIAkJICBqZTMyX3RvX2NwdShyaS0+aW5vKSwgamUzMl90b19jcHUocmktPnZlcnNpb24pLApAQCAtNzk0LDggKzk3NCw2IEBACiAKIAlwc2V1ZG9fcmFuZG9tICs9IGplMzJfdG9fY3B1KHJpLT52ZXJzaW9uKTsKIAotCVVOQ0hFQ0tFRF9TUEFDRShQQUQoamUzMl90b19jcHUocmktPnRvdGxlbikpKTsKLQogCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpIHsKIAkJamZmczJfc3VtX2FkZF9pbm9kZV9tZW0ocywgcmksIG9mcyAtIGplYi0+b2Zmc2V0KTsKIAl9CkBAIC04MDYsMTAgKzk4NCwxMCBAQAogc3RhdGljIGludCBqZmZzMl9zY2FuX2RpcmVudF9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAogCQkJCSAgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCB1aW50MzJfdCBvZnMsIHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzKQogewotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwogCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWM7CiAJdWludDMyX3QgY3JjOworCWludCBlcnI7CiAKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfc2Nhbl9kaXJlbnRfbm9kZSgpOiBOb2RlIGF0IDB4JTA4eFxuIiwgb2ZzKSk7CiAKQEAgLTgyMSw3ICs5OTksOCBAQAogCQlwcmludGsoS0VSTl9OT1RJQ0UgImpmZnMyX3NjYW5fZGlyZW50X25vZGUoKTogTm9kZSBDUkMgZmFpbGVkIG9uIG5vZGUgYXQgMHglMDh4OiBSZWFkIDB4JTA4eCwgY2FsY3VsYXRlZCAweCUwOHhcbiIsCiAJCSAgICAgICBvZnMsIGplMzJfdG9fY3B1KHJkLT5ub2RlX2NyYyksIGNyYyk7CiAJCS8qIFdlIGJlbGlldmUgdG90bGVuIGJlY2F1c2UgdGhlIENSQyBvbiB0aGUgbm9kZSBfaGVhZGVyXyB3YXMgT0ssIGp1c3QgdGhlIG5vZGUgaXRzZWxmIGZhaWxlZC4gKi8KLQkJRElSVFlfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKSk7CisJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShyZC0+dG90bGVuKSkpKSkKKwkJCXJldHVybiBlcnI7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODQyLDQwICsxMDIxLDIzIEBACiAJCWpmZnMyX2ZyZWVfZnVsbF9kaXJlbnQoZmQpOwogCQkvKiBGSVhNRTogV2h5IGRvIHdlIGJlbGlldmUgdG90bGVuPyAqLwogCQkvKiBXZSBiZWxpZXZlIHRvdGxlbiBiZWNhdXNlIHRoZSBDUkMgb24gdGhlIG5vZGUgX2hlYWRlcl8gd2FzIE9LLCBqdXN0IHRoZSBuYW1lIGZhaWxlZC4gKi8KLQkJRElSVFlfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKSk7CisJCWlmICgoZXJyID0gamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIFBBRChqZTMyX3RvX2NwdShyZC0+dG90bGVuKSkpKSkKKwkJCXJldHVybiBlcnI7CiAJCXJldHVybiAwOwogCX0KLQlyYXcgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKLQlpZiAoIXJhdykgewotCQlqZmZzMl9mcmVlX2Z1bGxfZGlyZW50KGZkKTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJqZmZzMl9zY2FuX2RpcmVudF9ub2RlKCk6IGFsbG9jYXRpb24gb2Ygbm9kZSByZWZlcmVuY2UgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCWljID0gamZmczJfc2Nhbl9tYWtlX2lub19jYWNoZShjLCBqZTMyX3RvX2NwdShyZC0+cGlubykpOwogCWlmICghaWMpIHsKIAkJamZmczJfZnJlZV9mdWxsX2RpcmVudChmZCk7Ci0JCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJhdyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXJhdy0+X190b3RsZW4gPSBQQUQoamUzMl90b19jcHUocmQtPnRvdGxlbikpOwotCXJhdy0+Zmxhc2hfb2Zmc2V0ID0gb2ZzIHwgUkVGX1BSSVNUSU5FOwotCXJhdy0+bmV4dF9waHlzID0gTlVMTDsKLQlyYXctPm5leHRfaW5faW5vID0gaWMtPm5vZGVzOwotCWljLT5ub2RlcyA9IHJhdzsKLQlpZiAoIWplYi0+Zmlyc3Rfbm9kZSkKLQkJamViLT5maXJzdF9ub2RlID0gcmF3OwotCWlmIChqZWItPmxhc3Rfbm9kZSkKLQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IHJhdzsKLQlqZWItPmxhc3Rfbm9kZSA9IHJhdzsKKwlmZC0+cmF3ID0gamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9QUklTVElORSwgUEFEKGplMzJfdG9fY3B1KHJkLT50b3RsZW4pKSwgaWMpOwogCi0JZmQtPnJhdyA9IHJhdzsKIAlmZC0+bmV4dCA9IE5VTEw7CiAJZmQtPnZlcnNpb24gPSBqZTMyX3RvX2NwdShyZC0+dmVyc2lvbik7CiAJZmQtPmlubyA9IGplMzJfdG9fY3B1KHJkLT5pbm8pOwogCWZkLT5uaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKGZkLT5uYW1lLCByZC0+bnNpemUpOwogCWZkLT50eXBlID0gcmQtPnR5cGU7Ci0JVVNFRF9TUEFDRShQQUQoamUzMl90b19jcHUocmQtPnRvdGxlbikpKTsKIAlqZmZzMl9hZGRfZmRfdG9fbGlzdChjLCBmZCwgJmljLT5zY2FuX2RlbnRzKTsKIAogCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpIHsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3NlY3VyaXR5LmMgYi9mcy9qZmZzMi9zZWN1cml0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTk4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZmZzMi9zZWN1cml0eS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgTkVDIENvcnBvcmF0aW9uCisgKgorICogQ3JlYXRlZCBieSBLYWlHYWkgS29oZWkgPGthaWdhaUBhay5qcC5uZWMuY29tPgorICoKKyAqIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhpcyBkaXJlY3RvcnkuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSAibm9kZWxpc3QuaCIKKworLyogLS0tLSBJbml0aWFsIFNlY3VyaXR5IExhYmVsIEF0dGFjaG1lbnQgLS0tLS0tLS0tLS0tLS0gKi8KK2ludCBqZmZzMl9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQoreworCWludCByYzsKKwlzaXplX3QgbGVuOworCXZvaWQgKnZhbHVlOworCWNoYXIgKm5hbWU7CisKKwlyYyA9IHNlY3VyaXR5X2lub2RlX2luaXRfc2VjdXJpdHkoaW5vZGUsIGRpciwgJm5hbWUsICZ2YWx1ZSwgJmxlbik7CisJaWYgKHJjKSB7CisJCWlmIChyYyA9PSAtRU9QTk9UU1VQUCkKKwkJCXJldHVybiAwOworCQlyZXR1cm4gcmM7CisJfQorCXJjID0gZG9famZmczJfc2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfU0VDVVJJVFksIG5hbWUsIHZhbHVlLCBsZW4sIDApOworCisgICAgICAgIGtmcmVlKG5hbWUpOworICAgICAgICBrZnJlZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByYzsKK30KKworLyogLS0tLSBYQVRUUiBIYW5kbGVyIGZvciAic2VjdXJpdHkuKiIgLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgamZmczJfc2VjdXJpdHlfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfU0VDVVJJVFksIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfc2VjdXJpdHlfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgIiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9TRUNVUklUWSwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzaXplX3QgamZmczJfc2VjdXJpdHlfbGlzdHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKwlzaXplX3QgcmV0bGVuID0gWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiArIG5hbWVfbGVuICsgMTsKKworCWlmIChsaXN0ICYmIHJldGxlbiA8PSBsaXN0X3NpemUpIHsKKwkJc3RyY3B5KGxpc3QsIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCk7CisJCXN0cmNweShsaXN0ICsgWEFUVFJfU0VDVVJJVFlfUFJFRklYX0xFTiwgbmFtZSk7CisJfQorCisJcmV0dXJuIHJldGxlbjsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfc2VjdXJpdHlfeGF0dHJfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfU0VDVVJJVFlfUFJFRklYLAorCS5saXN0ID0gamZmczJfc2VjdXJpdHlfbGlzdHhhdHRyLAorCS5zZXQgPSBqZmZzMl9zZWN1cml0eV9zZXR4YXR0ciwKKwkuZ2V0ID0gamZmczJfc2VjdXJpdHlfZ2V0eGF0dHIKK307CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdW1tYXJ5LmMgYi9mcy9qZmZzMi9zdW1tYXJ5LmMKaW5kZXggZmI5Y2VjNi4uMGIwMmZjNyAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VtbWFyeS5jCisrKyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwpAQCAtNSw2ICs1LDcgQEAKICAqICAgICAgICAgICAgICAgICAgICAgWm9sdGFuIFNvZ29yIDx3ZXRoQGluZi51LXN6ZWdlZC5odT4sCiAgKiAgICAgICAgICAgICAgICAgICAgIFBhdHJpayBLbHViYSA8cGFqa29AaGFsb20udS1zemVnZWQuaHU+LAogICogICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IG9mIFN6ZWdlZCwgSHVuZ2FyeQorICogICAgICAgICAgICAgICAyMDA1ICBLYWlHYWkgS29oZWkgPGthaWdhaUBhay5qcC5uZWMuY29tPgogICoKICAqIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhpcyBkaXJlY3RvcnkuCiAgKgpAQCAtODEsNiArODIsMTkgQEAKIAkJCWRiZ19zdW1tYXJ5KCJkaXJlbnQgKCV1KSBhZGRlZCB0byBzdW1tYXJ5XG4iLAogCQkJCQkJamUzMl90b19jcHUoaXRlbS0+ZC5pbm8pKTsKIAkJCWJyZWFrOworI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgorCQljYXNlIEpGRlMyX05PREVUWVBFX1hBVFRSOgorCQkJcy0+c3VtX3NpemUgKz0gSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFOworCQkJcy0+c3VtX251bSsrOworCQkJZGJnX3N1bW1hcnkoInhhdHRyICh4aWQ9JXUsIHZlcnNpb249JXUpIGFkZGVkIHRvIHN1bW1hcnlcbiIsCisJCQkJICAgIGplMzJfdG9fY3B1KGl0ZW0tPngueGlkKSwgamUzMl90b19jcHUoaXRlbS0+eC52ZXJzaW9uKSk7CisJCQlicmVhazsKKwkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YUkVGOgorCQkJcy0+c3VtX3NpemUgKz0gSkZGUzJfU1VNTUFSWV9YUkVGX1NJWkU7CisJCQlzLT5zdW1fbnVtKys7CisJCQlkYmdfc3VtbWFyeSgieHJlZiBhZGRlZCB0byBzdW1tYXJ5XG4iKTsKKwkJCWJyZWFrOworI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQlKRkZTMl9XQVJOSU5HKCJVTktOT1dOIG5vZGUgdHlwZSAldVxuIiwKIAkJCQkJICAgIGplMTZfdG9fY3B1KGl0ZW0tPnUubm9kZXR5cGUpKTsKQEAgLTE0MSw2ICsxNTUsNDAgQEAKIAlyZXR1cm4gamZmczJfc3VtX2FkZF9tZW0ocywgKHVuaW9uIGpmZnMyX3N1bV9tZW0gKil0ZW1wKTsKIH0KIAorI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgoraW50IGpmZnMyX3N1bV9hZGRfeGF0dHJfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCBzdHJ1Y3QgamZmczJfcmF3X3hhdHRyICpyeCwgdWludDMyX3Qgb2ZzKQoreworCXN0cnVjdCBqZmZzMl9zdW1feGF0dHJfbWVtICp0ZW1wOworCisJdGVtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feGF0dHJfbWVtKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0ZW1wKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRlbXAtPm5vZGV0eXBlID0gcngtPm5vZGV0eXBlOworCXRlbXAtPnhpZCA9IHJ4LT54aWQ7CisJdGVtcC0+dmVyc2lvbiA9IHJ4LT52ZXJzaW9uOworCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9mcyk7CisJdGVtcC0+dG90bGVuID0gcngtPnRvdGxlbjsKKwl0ZW1wLT5uZXh0ID0gTlVMTDsKKworCXJldHVybiBqZmZzMl9zdW1fYWRkX21lbShzLCAodW5pb24gamZmczJfc3VtX21lbSAqKXRlbXApOworfQorCitpbnQgamZmczJfc3VtX2FkZF94cmVmX21lbShzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcywgc3RydWN0IGpmZnMyX3Jhd194cmVmICpyciwgdWludDMyX3Qgb2ZzKQoreworCXN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0gKnRlbXA7CisKKwl0ZW1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV94cmVmX21lbSksIEdGUF9LRVJORUwpOworCWlmICghdGVtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0ZW1wLT5ub2RldHlwZSA9IHJyLT5ub2RldHlwZTsKKwl0ZW1wLT5vZmZzZXQgPSBjcHVfdG9famUzMihvZnMpOworCXRlbXAtPm5leHQgPSBOVUxMOworCisJcmV0dXJuIGpmZnMyX3N1bV9hZGRfbWVtKHMsICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7Cit9CisjZW5kaWYKIC8qIENsZWFudXAgZXZlcnkgY29sbGVjdGVkIHN1bW1hcnkgaW5mb3JtYXRpb24gKi8KIAogc3RhdGljIHZvaWQgamZmczJfc3VtX2NsZWFuX2NvbGxlY3RlZChzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcykKQEAgLTI1OSw3ICszMDcsNDAgQEAKIAogCQkJcmV0dXJuIGpmZnMyX3N1bV9hZGRfbWVtKGMtPnN1bW1hcnksICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7CiAJCX0KKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwkJY2FzZSBKRkZTMl9OT0RFVFlQRV9YQVRUUjogeworCQkJc3RydWN0IGpmZnMyX3N1bV94YXR0cl9tZW0gKnRlbXA7CisJCQlpZiAoamUzMl90b19jcHUobm9kZS0+eC52ZXJzaW9uKSA9PSAweGZmZmZmZmZmKQorCQkJCXJldHVybiAwOworCQkJdGVtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feGF0dHJfbWVtKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIXRlbXApCisJCQkJZ290byBub19tZW07CiAKKwkJCXRlbXAtPm5vZGV0eXBlID0gbm9kZS0+eC5ub2RldHlwZTsKKwkJCXRlbXAtPnhpZCA9IG5vZGUtPngueGlkOworCQkJdGVtcC0+dmVyc2lvbiA9IG5vZGUtPngudmVyc2lvbjsKKwkJCXRlbXAtPnRvdGxlbiA9IG5vZGUtPngudG90bGVuOworCQkJdGVtcC0+b2Zmc2V0ID0gY3B1X3RvX2plMzIob2ZzKTsKKwkJCXRlbXAtPm5leHQgPSBOVUxMOworCisJCQlyZXR1cm4gamZmczJfc3VtX2FkZF9tZW0oYy0+c3VtbWFyeSwgKHVuaW9uIGpmZnMyX3N1bV9tZW0gKil0ZW1wKTsKKwkJfQorCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6IHsKKwkJCXN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0gKnRlbXA7CisKKwkJCWlmIChqZTMyX3RvX2NwdShub2RlLT5yLmlubykgPT0gMHhmZmZmZmZmZgorCQkJICAgICYmIGplMzJfdG9fY3B1KG5vZGUtPnIueGlkKSA9PSAweGZmZmZmZmZmKQorCQkJCXJldHVybiAwOworCQkJdGVtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1feHJlZl9tZW0pLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghdGVtcCkKKwkJCQlnb3RvIG5vX21lbTsKKwkJCXRlbXAtPm5vZGV0eXBlID0gbm9kZS0+ci5ub2RldHlwZTsKKwkJCXRlbXAtPm9mZnNldCA9IGNwdV90b19qZTMyKG9mcyk7CisJCQl0ZW1wLT5uZXh0ID0gTlVMTDsKKworCQkJcmV0dXJuIGpmZnMyX3N1bV9hZGRfbWVtKGMtPnN1bW1hcnksICh1bmlvbiBqZmZzMl9zdW1fbWVtICopdGVtcCk7CisJCX0KKyNlbmRpZgogCQljYXNlIEpGRlMyX05PREVUWVBFX1BBRERJTkc6CiAJCQlkYmdfc3VtbWFyeSgibm9kZSBQQURESU5HXG4iKTsKIAkJCWMtPnN1bW1hcnktPnN1bV9wYWRkZWQgKz0gamUzMl90b19jcHUobm9kZS0+dS50b3RsZW4pOwpAQCAtMjg4LDIzICszNjksNDEgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAorc3RhdGljIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnN1bV9saW5rX25vZGVfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCQkJICAgIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCisJCQkJCQkgICAgdWludDMyX3Qgb2ZzLCB1aW50MzJfdCBsZW4sCisJCQkJCQkgICAgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYykKK3sKKwkvKiBJZiB0aGVyZSB3YXMgYSBnYXAsIG1hcmsgaXQgZGlydHkgKi8KKwlpZiAoKG9mcyAmIH4zKSA+IGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUpIHsKKwkJLyogRXcuIFN1bW1hcnkgZG9lc24ndCBhY3R1YWxseSB0ZWxsIHVzIGV4cGxpY2l0bHkgYWJvdXQgZGlydHkgc3BhY2UgKi8KKwkJamZmczJfc2Nhbl9kaXJ0eV9zcGFjZShjLCBqZWIsIChvZnMgJiB+MykgLSAoYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZSkpOworCX0KKworCXJldHVybiBqZmZzMl9saW5rX25vZGVfcmVmKGMsIGplYiwgamViLT5vZmZzZXQgKyBvZnMsIGxlbiwgaWMpOworfQogCiAvKiBQcm9jZXNzIHRoZSBzdG9yZWQgc3VtbWFyeSBpbmZvcm1hdGlvbiAtIGhlbHBlciBmdW5jdGlvbiBmb3IgamZmczJfc3VtX3NjYW5fc3Vtbm9kZSgpICovCiAKIHN0YXRpYyBpbnQgamZmczJfc3VtX3Byb2Nlc3Nfc3VtX2RhdGEoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIsCiAJCQkJc3RydWN0IGpmZnMyX3Jhd19zdW1tYXJ5ICpzdW1tYXJ5LCB1aW50MzJfdCAqcHNldWRvX3JhbmRvbSkKIHsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CiAJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYzsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwogCXZvaWQgKnNwOwogCWludCBpLCBpbm87CisJaW50IGVycjsKIAogCXNwID0gc3VtbWFyeS0+c3VtOwogCiAJZm9yIChpPTA7IGk8amUzMl90b19jcHUoc3VtbWFyeS0+c3VtX251bSk7IGkrKykgewogCQlkYmdfc3VtbWFyeSgicHJvY2Vzc2luZyBzdW1tYXJ5IGluZGV4ICVkXG4iLCBpKTsKIAorCQkvKiBNYWtlIHN1cmUgdGhlcmUncyBhIHNwYXJlIHJlZiBmb3IgZGlydHkgc3BhY2UgKi8KKwkJZXJyID0gamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDIpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwogCQlzd2l0Y2ggKGplMTZfdG9fY3B1KCgoc3RydWN0IGpmZnMyX3N1bV91bmtub3duX2ZsYXNoICopc3ApLT5ub2RldHlwZSkpIHsKIAkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfSU5PREU6IHsKIAkJCQlzdHJ1Y3QgamZmczJfc3VtX2lub2RlX2ZsYXNoICpzcGk7CkBAIC0zMTIsMzkgKzQxMSwyMSBAQAogCiAJCQkJaW5vID0gamUzMl90b19jcHUoc3BpLT5pbm9kZSk7CiAKLQkJCQlkYmdfc3VtbWFyeSgiSW5vZGUgYXQgMHglMDh4XG4iLAotCQkJCQkJCWplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3BpLT5vZmZzZXQpKTsKLQotCQkJCXJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCQkJCWlmICghcmF3KSB7Ci0JCQkJCUpGRlMyX05PVElDRSgiYWxsb2NhdGlvbiBvZiBub2RlIHJlZmVyZW5jZSBmYWlsZWRcbiIpOwotCQkJCQlrZnJlZShzdW1tYXJ5KTsKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJfQorCQkJCWRiZ19zdW1tYXJ5KCJJbm9kZSBhdCAweCUwOHgtMHglMDh4XG4iLAorCQkJCQkgICAgamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGktPm9mZnNldCksCisJCQkJCSAgICBqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNwaS0+b2Zmc2V0KSArIGplMzJfdG9fY3B1KHNwaS0+dG90bGVuKSk7CiAKIAkJCQlpYyA9IGpmZnMyX3NjYW5fbWFrZV9pbm9fY2FjaGUoYywgaW5vKTsKIAkJCQlpZiAoIWljKSB7CiAJCQkJCUpGRlMyX05PVElDRSgic2Nhbl9tYWtlX2lub19jYWNoZSBmYWlsZWRcbiIpOwotCQkJCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOwotCQkJCQlrZnJlZShzdW1tYXJ5KTsKIAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQogCi0JCQkJcmF3LT5mbGFzaF9vZmZzZXQgPSAoamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGktPm9mZnNldCkpIHwgUkVGX1VOQ0hFQ0tFRDsKLQkJCQlyYXctPl9fdG90bGVuID0gUEFEKGplMzJfdG9fY3B1KHNwaS0+dG90bGVuKSk7Ci0JCQkJcmF3LT5uZXh0X3BoeXMgPSBOVUxMOwotCQkJCXJhdy0+bmV4dF9pbl9pbm8gPSBpYy0+bm9kZXM7CisJCQkJc3VtX2xpbmtfbm9kZV9yZWYoYywgamViLCBqZTMyX3RvX2NwdShzcGktPm9mZnNldCkgfCBSRUZfVU5DSEVDS0VELAorCQkJCQkJICBQQUQoamUzMl90b19jcHUoc3BpLT50b3RsZW4pKSwgaWMpOwogCi0JCQkJaWMtPm5vZGVzID0gcmF3OwotCQkJCWlmICghamViLT5maXJzdF9ub2RlKQotCQkJCQlqZWItPmZpcnN0X25vZGUgPSByYXc7Ci0JCQkJaWYgKGplYi0+bGFzdF9ub2RlKQotCQkJCQlqZWItPmxhc3Rfbm9kZS0+bmV4dF9waHlzID0gcmF3OwotCQkJCWplYi0+bGFzdF9ub2RlID0gcmF3OwogCQkJCSpwc2V1ZG9fcmFuZG9tICs9IGplMzJfdG9fY3B1KHNwaS0+dmVyc2lvbik7CiAKLQkJCQlVTkNIRUNLRURfU1BBQ0UoUEFEKGplMzJfdG9fY3B1KHNwaS0+dG90bGVuKSkpOwotCiAJCQkJc3AgKz0gSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFOwogCiAJCQkJYnJlYWs7CkBAIC0zNTQsNTIgKzQzNSwzMyBAQAogCQkJCXN0cnVjdCBqZmZzMl9zdW1fZGlyZW50X2ZsYXNoICpzcGQ7CiAJCQkJc3BkID0gc3A7CiAKLQkJCQlkYmdfc3VtbWFyeSgiRGlyZW50IGF0IDB4JTA4eFxuIiwKLQkJCQkJCQlqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNwZC0+b2Zmc2V0KSk7CisJCQkJZGJnX3N1bW1hcnkoIkRpcmVudCBhdCAweCUwOHgtMHglMDh4XG4iLAorCQkJCQkgICAgamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGQtPm9mZnNldCksCisJCQkJCSAgICBqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNwZC0+b2Zmc2V0KSArIGplMzJfdG9fY3B1KHNwZC0+dG90bGVuKSk7CisKIAogCQkJCWZkID0gamZmczJfYWxsb2NfZnVsbF9kaXJlbnQoc3BkLT5uc2l6ZSsxKTsKLQkJCQlpZiAoIWZkKSB7Ci0JCQkJCWtmcmVlKHN1bW1hcnkpOworCQkJCWlmICghZmQpCiAJCQkJCXJldHVybiAtRU5PTUVNOwotCQkJCX0KIAogCQkJCW1lbWNweSgmZmQtPm5hbWUsIHNwZC0+bmFtZSwgc3BkLT5uc2l6ZSk7CiAJCQkJZmQtPm5hbWVbc3BkLT5uc2l6ZV0gPSAwOwogCi0JCQkJcmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7Ci0JCQkJaWYgKCFyYXcpIHsKLQkJCQkJamZmczJfZnJlZV9mdWxsX2RpcmVudChmZCk7Ci0JCQkJCUpGRlMyX05PVElDRSgiYWxsb2NhdGlvbiBvZiBub2RlIHJlZmVyZW5jZSBmYWlsZWRcbiIpOwotCQkJCQlrZnJlZShzdW1tYXJ5KTsKLQkJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQkJfQotCiAJCQkJaWMgPSBqZmZzMl9zY2FuX21ha2VfaW5vX2NhY2hlKGMsIGplMzJfdG9fY3B1KHNwZC0+cGlubykpOwogCQkJCWlmICghaWMpIHsKIAkJCQkJamZmczJfZnJlZV9mdWxsX2RpcmVudChmZCk7Ci0JCQkJCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJhdyk7Ci0JCQkJCWtmcmVlKHN1bW1hcnkpOwogCQkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCQl9CiAKLQkJCQlyYXctPl9fdG90bGVuID0gUEFEKGplMzJfdG9fY3B1KHNwZC0+dG90bGVuKSk7Ci0JCQkJcmF3LT5mbGFzaF9vZmZzZXQgPSAoamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcGQtPm9mZnNldCkpIHwgUkVGX1BSSVNUSU5FOwotCQkJCXJhdy0+bmV4dF9waHlzID0gTlVMTDsKLQkJCQlyYXctPm5leHRfaW5faW5vID0gaWMtPm5vZGVzOwotCQkJCWljLT5ub2RlcyA9IHJhdzsKLQkJCQlpZiAoIWplYi0+Zmlyc3Rfbm9kZSkKLQkJCQkJamViLT5maXJzdF9ub2RlID0gcmF3OwotCQkJCWlmIChqZWItPmxhc3Rfbm9kZSkKLQkJCQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IHJhdzsKLQkJCQlqZWItPmxhc3Rfbm9kZSA9IHJhdzsKKwkJCQlmZC0+cmF3ID0gc3VtX2xpbmtfbm9kZV9yZWYoYywgamViLCAgamUzMl90b19jcHUoc3BkLT5vZmZzZXQpIHwgUkVGX1VOQ0hFQ0tFRCwKKwkJCQkJCQkgICAgUEFEKGplMzJfdG9fY3B1KHNwZC0+dG90bGVuKSksIGljKTsKIAotCQkJCWZkLT5yYXcgPSByYXc7CiAJCQkJZmQtPm5leHQgPSBOVUxMOwogCQkJCWZkLT52ZXJzaW9uID0gamUzMl90b19jcHUoc3BkLT52ZXJzaW9uKTsKIAkJCQlmZC0+aW5vID0gamUzMl90b19jcHUoc3BkLT5pbm8pOwogCQkJCWZkLT5uaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKGZkLT5uYW1lLCBzcGQtPm5zaXplKTsKIAkJCQlmZC0+dHlwZSA9IHNwZC0+dHlwZTsKLQkJCQlVU0VEX1NQQUNFKFBBRChqZTMyX3RvX2NwdShzcGQtPnRvdGxlbikpKTsKKwogCQkJCWpmZnMyX2FkZF9mZF90b19saXN0KGMsIGZkLCAmaWMtPnNjYW5fZGVudHMpOwogCiAJCQkJKnBzZXVkb19yYW5kb20gKz0gamUzMl90b19jcHUoc3BkLT52ZXJzaW9uKTsKQEAgLTQwOCw0OCArNDcwLDEwNSBAQAogCiAJCQkJYnJlYWs7CiAJCQl9CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJCQljYXNlIEpGRlMyX05PREVUWVBFX1hBVFRSOiB7CisJCQkJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKwkJCQlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX2ZsYXNoICpzcHg7CiAKKwkJCQlzcHggPSAoc3RydWN0IGpmZnMyX3N1bV94YXR0cl9mbGFzaCAqKXNwOworCQkJCWRiZ19zdW1tYXJ5KCJ4YXR0ciBhdCAlIzA4eC0lIzA4eCAoeGlkPSV1LCB2ZXJzaW9uPSV1KVxuIiwgCisJCQkJCSAgICBqZWItPm9mZnNldCArIGplMzJfdG9fY3B1KHNweC0+b2Zmc2V0KSwKKwkJCQkJICAgIGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3B4LT5vZmZzZXQpICsgamUzMl90b19jcHUoc3B4LT50b3RsZW4pLAorCQkJCQkgICAgamUzMl90b19jcHUoc3B4LT54aWQpLCBqZTMyX3RvX2NwdShzcHgtPnZlcnNpb24pKTsKKworCQkJCXhkID0gamZmczJfc2V0dXBfeGF0dHJfZGF0dW0oYywgamUzMl90b19jcHUoc3B4LT54aWQpLAorCQkJCQkJCQlqZTMyX3RvX2NwdShzcHgtPnZlcnNpb24pKTsKKwkJCQlpZiAoSVNfRVJSKHhkKSkgeworCQkJCQlpZiAoUFRSX0VSUih4ZCkgPT0gLUVFWElTVCkgeworCQkJCQkJLyogYSBuZXdlciB2ZXJzaW9uIG9mIHhkIGV4aXN0cyAqLworCQkJCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgamUzMl90b19jcHUoc3B4LT50b3RsZW4pKSkpCisJCQkJCQkJcmV0dXJuIGVycjsKKwkJCQkJCXNwICs9IEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCUpGRlMyX05PVElDRSgiYWxsb2NhdGlvbiBvZiB4YXR0cl9kYXR1bSBmYWlsZWRcbiIpOworCQkJCQlyZXR1cm4gUFRSX0VSUih4ZCk7CisJCQkJfQorCisJCQkJeGQtPm5vZGUgPSBzdW1fbGlua19ub2RlX3JlZihjLCBqZWIsIGplMzJfdG9fY3B1KHNweC0+b2Zmc2V0KSB8IFJFRl9VTkNIRUNLRUQsCisJCQkJCQkJICAgICBQQUQoamUzMl90b19jcHUoc3B4LT50b3RsZW4pKSwgTlVMTCk7CisJCQkJLyogRklYTUUgKi8geGQtPm5vZGUtPm5leHRfaW5faW5vID0gKHZvaWQgKil4ZDsKKworCQkJCSpwc2V1ZG9fcmFuZG9tICs9IGplMzJfdG9fY3B1KHNweC0+eGlkKTsKKwkJCQlzcCArPSBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkU7CisKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWFJFRjogeworCQkJCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZjsKKwkJCQlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfZmxhc2ggKnNwcjsKKworCQkJCXNwciA9IChzdHJ1Y3QgamZmczJfc3VtX3hyZWZfZmxhc2ggKilzcDsKKwkJCQlkYmdfc3VtbWFyeSgieHJlZiBhdCAlIzA4eC0lIzA4eFxuIiwKKwkJCQkJICAgIGplYi0+b2Zmc2V0ICsgamUzMl90b19jcHUoc3ByLT5vZmZzZXQpLAorCQkJCQkgICAgamViLT5vZmZzZXQgKyBqZTMyX3RvX2NwdShzcHItPm9mZnNldCkgKyAKKwkJCQkJICAgICh1aW50MzJfdClQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpKTsKKworCQkJCXJlZiA9IGpmZnMyX2FsbG9jX3hhdHRyX3JlZigpOworCQkJCWlmICghcmVmKSB7CisJCQkJCUpGRlMyX05PVElDRSgiYWxsb2NhdGlvbiBvZiB4YXR0cl9kYXR1bSBmYWlsZWRcbiIpOworCQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQl9CisJCQkJcmVmLT5pbm8gPSAweGZmZmZmZmZlOworCQkJCXJlZi0+eGlkID0gMHhmZmZmZmZmZDsKKwkJCQlyZWYtPm5leHQgPSBjLT54cmVmX3RlbXA7CisJCQkJYy0+eHJlZl90ZW1wID0gcmVmOworCisJCQkJcmVmLT5ub2RlID0gc3VtX2xpbmtfbm9kZV9yZWYoYywgamViLCBqZTMyX3RvX2NwdShzcHItPm9mZnNldCkgfCBSRUZfVU5DSEVDS0VELAorCQkJCQkJCSAgICAgIFBBRChzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194cmVmKSksIE5VTEwpOworCQkJCS8qIEZJWE1FICovIHJlZi0+bm9kZS0+bmV4dF9pbl9pbm8gPSAodm9pZCAqKXJlZjsKKworCQkJCSpwc2V1ZG9fcmFuZG9tICs9IHJlZi0+bm9kZS0+Zmxhc2hfb2Zmc2V0OworCQkJCXNwICs9IEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFOworCisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKIAkJCWRlZmF1bHQgOiB7Ci0JCQkJSkZGUzJfV0FSTklORygiVW5zdXBwb3J0ZWQgbm9kZSB0eXBlIGZvdW5kIGluIHN1bW1hcnkhIEV4aXRpbmcuLi4iKTsKLQkJCQlrZnJlZShzdW1tYXJ5KTsKLQkJCQlyZXR1cm4gLUVJTzsKKwkJCQl1aW50MTZfdCBub2RldHlwZSA9IGplMTZfdG9fY3B1KCgoc3RydWN0IGpmZnMyX3N1bV91bmtub3duX2ZsYXNoICopc3ApLT5ub2RldHlwZSk7CisJCQkJSkZGUzJfV0FSTklORygiVW5zdXBwb3J0ZWQgbm9kZSB0eXBlICV4IGZvdW5kIGluIHN1bW1hcnkhIEV4aXRpbmcuLi5cbiIsIG5vZGV0eXBlKTsKKwkJCQlpZiAoKG5vZGV0eXBlICYgSkZGUzJfQ09NUEFUX01BU0spID09IEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQpCisJCQkJCXJldHVybiAtRUlPOworCisJCQkJLyogRm9yIGNvbXBhdGlibGUgbm9kZSB0eXBlcywganVzdCBmYWxsIGJhY2sgdG8gdGhlIGZ1bGwgc2NhbiAqLworCQkJCWMtPndhc3RlZF9zaXplIC09IGplYi0+d2FzdGVkX3NpemU7CisJCQkJYy0+ZnJlZV9zaXplICs9IGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemU7CisJCQkJYy0+dXNlZF9zaXplIC09IGplYi0+dXNlZF9zaXplOworCQkJCWMtPmRpcnR5X3NpemUgLT0gamViLT5kaXJ0eV9zaXplOworCQkJCWplYi0+d2FzdGVkX3NpemUgPSBqZWItPnVzZWRfc2l6ZSA9IGplYi0+ZGlydHlfc2l6ZSA9IDA7CisJCQkJamViLT5mcmVlX3NpemUgPSBjLT5zZWN0b3Jfc2l6ZTsKKworCQkJCWpmZnMyX2ZyZWVfamViX25vZGVfcmVmcyhjLCBqZWIpOworCQkJCXJldHVybiAtRU5PVFJFQ09WRVJBQkxFOwogCQkJfQogCQl9CiAJfQotCi0Ja2ZyZWUoc3VtbWFyeSk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qIFByb2Nlc3MgdGhlIHN1bW1hcnkgbm9kZSAtIGNhbGxlZCBmcm9tIGpmZnMyX3NjYW5fZXJhc2VibG9jaygpICovCi0KIGludCBqZmZzMl9zdW1fc2Nhbl9zdW1ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLAotCQkJCXVpbnQzMl90IG9mcywgdWludDMyX3QgKnBzZXVkb19yYW5kb20pCisJCQkgICBzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkgKnN1bW1hcnksIHVpbnQzMl90IHN1bXNpemUsCisJCQkgICB1aW50MzJfdCAqcHNldWRvX3JhbmRvbSkKIHsKIAlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlIGNyY25vZGU7Ci0Jc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqY2FjaGVfcmVmOwotCXN0cnVjdCBqZmZzMl9yYXdfc3VtbWFyeSAqc3VtbWFyeTsKLQlpbnQgcmV0LCBzdW1zaXplOworCWludCByZXQsIG9mczsKIAl1aW50MzJfdCBjcmM7CiAKLQlzdW1zaXplID0gYy0+c2VjdG9yX3NpemUgLSBvZnM7Ci0Jb2ZzICs9IGplYi0+b2Zmc2V0OworCW9mcyA9IGMtPnNlY3Rvcl9zaXplIC0gc3Vtc2l6ZTsKIAogCWRiZ19zdW1tYXJ5KCJzdW1tYXJ5IGZvdW5kIGZvciAweCUwOHggYXQgMHglMDh4ICgweCV4IGJ5dGVzKVxuIiwKLQkJCQlqZWItPm9mZnNldCwgb2ZzLCBzdW1zaXplKTsKLQotCXN1bW1hcnkgPSBrbWFsbG9jKHN1bXNpemUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFzdW1tYXJ5KSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IGpmZnMyX2ZpbGxfc2Nhbl9idWYoYywgKHVuc2lnbmVkIGNoYXIgKilzdW1tYXJ5LCBvZnMsIHN1bXNpemUpOwotCi0JaWYgKHJldCkgewotCQlrZnJlZShzdW1tYXJ5KTsKLQkJcmV0dXJuIHJldDsKLQl9CisJCSAgICBqZWItPm9mZnNldCwgamViLT5vZmZzZXQgKyBvZnMsIHN1bXNpemUpOwogCiAJLyogT0ssIG5vdyBjaGVjayBmb3Igbm9kZSB2YWxpZGl0eSBhbmQgQ1JDICovCiAJY3Jjbm9kZS5tYWdpYyA9IGNwdV90b19qZTE2KEpGRlMyX01BR0lDX0JJVE1BU0spOwpAQCAtNDg2LDY3ICs2MDUsNTAgQEAKIAogCQlkYmdfc3VtbWFyeSgiU3VtbWFyeSA6IENMRUFOTUFSS0VSIG5vZGUgXG4iKTsKIAorCQlyZXQgPSBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGplYiwgMSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCiAJCWlmIChqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSAhPSBjLT5jbGVhbm1hcmtlcl9zaXplKSB7CiAJCQlkYmdfc3VtbWFyeSgiQ0xFQU5NQVJLRVIgbm9kZSBoYXMgdG90bGVuIDB4JXggIT0gbm9ybWFsIDB4JXhcbiIsCiAJCQkJamUzMl90b19jcHUoc3VtbWFyeS0+Y2xuX21rciksIGMtPmNsZWFubWFya2VyX3NpemUpOwotCQkJVU5DSEVDS0VEX1NQQUNFKFBBRChqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSkpOworCQkJaWYgKChyZXQgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KHN1bW1hcnktPmNsbl9ta3IpKSkpKQorCQkJCXJldHVybiByZXQ7CiAJCX0gZWxzZSBpZiAoamViLT5maXJzdF9ub2RlKSB7CiAJCQlkYmdfc3VtbWFyeSgiQ0xFQU5NQVJLRVIgbm9kZSBub3QgZmlyc3Qgbm9kZSBpbiBibG9jayAiCiAJCQkJCSIoMHglMDh4KVxuIiwgamViLT5vZmZzZXQpOwotCQkJVU5DSEVDS0VEX1NQQUNFKFBBRChqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKSkpOworCQkJaWYgKChyZXQgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KHN1bW1hcnktPmNsbl9ta3IpKSkpKQorCQkJCXJldHVybiByZXQ7CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICptYXJrZXJfcmVmID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7Ci0KLQkJCWlmICghbWFya2VyX3JlZikgewotCQkJCUpGRlMyX05PVElDRSgiRmFpbGVkIHRvIGFsbG9jYXRlIG5vZGUgcmVmIGZvciBjbGVhbiBtYXJrZXJcbiIpOwotCQkJCWtmcmVlKHN1bW1hcnkpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCi0JCQltYXJrZXJfcmVmLT5uZXh0X2luX2lubyA9IE5VTEw7Ci0JCQltYXJrZXJfcmVmLT5uZXh0X3BoeXMgPSBOVUxMOwotCQkJbWFya2VyX3JlZi0+Zmxhc2hfb2Zmc2V0ID0gamViLT5vZmZzZXQgfCBSRUZfTk9STUFMOwotCQkJbWFya2VyX3JlZi0+X190b3RsZW4gPSBqZTMyX3RvX2NwdShzdW1tYXJ5LT5jbG5fbWtyKTsKLQkJCWplYi0+Zmlyc3Rfbm9kZSA9IGplYi0+bGFzdF9ub2RlID0gbWFya2VyX3JlZjsKLQotCQkJVVNFRF9TUEFDRSggUEFEKGplMzJfdG9fY3B1KHN1bW1hcnktPmNsbl9ta3IpKSApOworCQkJamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIGplYi0+b2Zmc2V0IHwgUkVGX05PUk1BTCwKKwkJCQkJICAgIGplMzJfdG9fY3B1KHN1bW1hcnktPmNsbl9ta3IpLCBOVUxMKTsKIAkJfQogCX0KIAotCWlmIChqZTMyX3RvX2NwdShzdW1tYXJ5LT5wYWRkZWQpKSB7Ci0JCURJUlRZX1NQQUNFKGplMzJfdG9fY3B1KHN1bW1hcnktPnBhZGRlZCkpOwotCX0KLQogCXJldCA9IGpmZnMyX3N1bV9wcm9jZXNzX3N1bV9kYXRhKGMsIGplYiwgc3VtbWFyeSwgcHNldWRvX3JhbmRvbSk7CisJLyogLUVOT1RSRUNPVkVSQUJMRSBpc24ndCBhIGZhdGFsIGVycm9yIC0tIGl0IG1lYW5zIHdlIHNob3VsZCBkbyBhIGZ1bGwKKwkgICBzY2FuIG9mIHRoaXMgZXJhc2VibG9jay4gU28gcmV0dXJuIHplcm8gKi8KKwlpZiAocmV0ID09IC1FTk9UUkVDT1ZFUkFCTEUpCisJCXJldHVybiAwOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CQkvKiByZWFsIGVycm9yICovCisKKwkvKiBmb3IgUEFSQU5PSUFfQ0hFQ0sgKi8KKwlyZXQgPSBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGplYiwgMik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCS8qIGZvciBQQVJBTk9JQV9DSEVDSyAqLwotCWNhY2hlX3JlZiA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOworCXN1bV9saW5rX25vZGVfcmVmKGMsIGplYiwgb2ZzIHwgUkVGX05PUk1BTCwgc3Vtc2l6ZSwgTlVMTCk7CiAKLQlpZiAoIWNhY2hlX3JlZikgewotCQlKRkZTMl9OT1RJQ0UoIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlIHJlZiBmb3IgY2FjaGVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAodW5saWtlbHkoamViLT5mcmVlX3NpemUpKSB7CisJCUpGRlMyX1dBUk5JTkcoIkZyZWUgc2l6ZSAweCV4IGJ5dGVzIGluIGVyYXNlYmxvY2sgQDB4JTA4eCB3aXRoIHN1bW1hcnk/XG4iLAorCQkJICAgICAgamViLT5mcmVlX3NpemUsIGplYi0+b2Zmc2V0KTsKKwkJamViLT53YXN0ZWRfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZTsKKwkJYy0+d2FzdGVkX3NpemUgKz0gamViLT5mcmVlX3NpemU7CisJCWMtPmZyZWVfc2l6ZSAtPSBqZWItPmZyZWVfc2l6ZTsKKwkJamViLT5mcmVlX3NpemUgPSAwOwogCX0KIAotCWNhY2hlX3JlZi0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCWNhY2hlX3JlZi0+bmV4dF9waHlzID0gTlVMTDsKLQljYWNoZV9yZWYtPmZsYXNoX29mZnNldCA9IG9mcyB8IFJFRl9OT1JNQUw7Ci0JY2FjaGVfcmVmLT5fX3RvdGxlbiA9IHN1bXNpemU7Ci0KLQlpZiAoIWplYi0+Zmlyc3Rfbm9kZSkKLQkJamViLT5maXJzdF9ub2RlID0gY2FjaGVfcmVmOwotCWlmIChqZWItPmxhc3Rfbm9kZSkKLQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IGNhY2hlX3JlZjsKLQlqZWItPmxhc3Rfbm9kZSA9IGNhY2hlX3JlZjsKLQotCVVTRURfU1BBQ0Uoc3Vtc2l6ZSk7Ci0KLQlqZWItPndhc3RlZF9zaXplICs9IGplYi0+ZnJlZV9zaXplOwotCWMtPndhc3RlZF9zaXplICs9IGplYi0+ZnJlZV9zaXplOwotCWMtPmZyZWVfc2l6ZSAtPSBqZWItPmZyZWVfc2l6ZTsKLQlqZWItPmZyZWVfc2l6ZSA9IDA7Ci0KIAlyZXR1cm4gamZmczJfc2Nhbl9jbGFzc2lmeV9qZWIoYywgamViKTsKIAogY3JjX2VycjoKQEAgLTU2NCw2ICs2NjYsNyBAQAogCXVuaW9uIGpmZnMyX3N1bV9tZW0gKnRlbXA7CiAJc3RydWN0IGpmZnMyX3N1bV9tYXJrZXIgKnNtOwogCXN0cnVjdCBrdmVjIHZlY3NbMl07CisJdWludDMyX3Qgc3VtX29mczsKIAl2b2lkICp3cGFnZTsKIAlpbnQgcmV0OwogCXNpemVfdCByZXRsZW47CkBAIC01ODEsMTYgKzY4NCwxNyBAQAogCXdwYWdlID0gYy0+c3VtbWFyeS0+c3VtX2J1ZjsKIAogCXdoaWxlIChjLT5zdW1tYXJ5LT5zdW1fbnVtKSB7CisJCXRlbXAgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkOwogCi0JCXN3aXRjaCAoamUxNl90b19jcHUoYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+dS5ub2RldHlwZSkpIHsKKwkJc3dpdGNoIChqZTE2X3RvX2NwdSh0ZW1wLT51Lm5vZGV0eXBlKSkgewogCQkJY2FzZSBKRkZTMl9OT0RFVFlQRV9JTk9ERTogewogCQkJCXN0cnVjdCBqZmZzMl9zdW1faW5vZGVfZmxhc2ggKnNpbm9fcHRyID0gd3BhZ2U7CiAKLQkJCQlzaW5vX3B0ci0+bm9kZXR5cGUgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5pLm5vZGV0eXBlOwotCQkJCXNpbm9fcHRyLT5pbm9kZSA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmkuaW5vZGU7Ci0JCQkJc2lub19wdHItPnZlcnNpb24gPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5pLnZlcnNpb247Ci0JCQkJc2lub19wdHItPm9mZnNldCA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmkub2Zmc2V0OwotCQkJCXNpbm9fcHRyLT50b3RsZW4gPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5pLnRvdGxlbjsKKwkJCQlzaW5vX3B0ci0+bm9kZXR5cGUgPSB0ZW1wLT5pLm5vZGV0eXBlOworCQkJCXNpbm9fcHRyLT5pbm9kZSA9IHRlbXAtPmkuaW5vZGU7CisJCQkJc2lub19wdHItPnZlcnNpb24gPSB0ZW1wLT5pLnZlcnNpb247CisJCQkJc2lub19wdHItPm9mZnNldCA9IHRlbXAtPmkub2Zmc2V0OworCQkJCXNpbm9fcHRyLT50b3RsZW4gPSB0ZW1wLT5pLnRvdGxlbjsKIAogCQkJCXdwYWdlICs9IEpGRlMyX1NVTU1BUllfSU5PREVfU0laRTsKIApAQCAtNjAwLDMwICs3MDQsNjAgQEAKIAkJCWNhc2UgSkZGUzJfTk9ERVRZUEVfRElSRU5UOiB7CiAJCQkJc3RydWN0IGpmZnMyX3N1bV9kaXJlbnRfZmxhc2ggKnNkcm50X3B0ciA9IHdwYWdlOwogCi0JCQkJc2RybnRfcHRyLT5ub2RldHlwZSA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmQubm9kZXR5cGU7Ci0JCQkJc2RybnRfcHRyLT50b3RsZW4gPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLnRvdGxlbjsKLQkJCQlzZHJudF9wdHItPm9mZnNldCA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmQub2Zmc2V0OwotCQkJCXNkcm50X3B0ci0+cGlubyA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQtPmQucGlubzsKLQkJCQlzZHJudF9wdHItPnZlcnNpb24gPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLnZlcnNpb247Ci0JCQkJc2RybnRfcHRyLT5pbm8gPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLmlubzsKLQkJCQlzZHJudF9wdHItPm5zaXplID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC5uc2l6ZTsKLQkJCQlzZHJudF9wdHItPnR5cGUgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLnR5cGU7CisJCQkJc2RybnRfcHRyLT5ub2RldHlwZSA9IHRlbXAtPmQubm9kZXR5cGU7CisJCQkJc2RybnRfcHRyLT50b3RsZW4gPSB0ZW1wLT5kLnRvdGxlbjsKKwkJCQlzZHJudF9wdHItPm9mZnNldCA9IHRlbXAtPmQub2Zmc2V0OworCQkJCXNkcm50X3B0ci0+cGlubyA9IHRlbXAtPmQucGlubzsKKwkJCQlzZHJudF9wdHItPnZlcnNpb24gPSB0ZW1wLT5kLnZlcnNpb247CisJCQkJc2RybnRfcHRyLT5pbm8gPSB0ZW1wLT5kLmlubzsKKwkJCQlzZHJudF9wdHItPm5zaXplID0gdGVtcC0+ZC5uc2l6ZTsKKwkJCQlzZHJudF9wdHItPnR5cGUgPSB0ZW1wLT5kLnR5cGU7CiAKLQkJCQltZW1jcHkoc2RybnRfcHRyLT5uYW1lLCBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLm5hbWUsCi0JCQkJCQkJYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+ZC5uc2l6ZSk7CisJCQkJbWVtY3B5KHNkcm50X3B0ci0+bmFtZSwgdGVtcC0+ZC5uYW1lLAorCQkJCQkJCXRlbXAtPmQubnNpemUpOwogCi0JCQkJd3BhZ2UgKz0gSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkLT5kLm5zaXplKTsKKwkJCQl3cGFnZSArPSBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKHRlbXAtPmQubnNpemUpOwogCiAJCQkJYnJlYWs7CiAJCQl9CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1hBVFRSCisJCQljYXNlIEpGRlMyX05PREVUWVBFX1hBVFRSOiB7CisJCQkJc3RydWN0IGpmZnMyX3N1bV94YXR0cl9mbGFzaCAqc3hhdHRyX3B0ciA9IHdwYWdlOwogCisJCQkJdGVtcCA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQ7CisJCQkJc3hhdHRyX3B0ci0+bm9kZXR5cGUgPSB0ZW1wLT54Lm5vZGV0eXBlOworCQkJCXN4YXR0cl9wdHItPnhpZCA9IHRlbXAtPngueGlkOworCQkJCXN4YXR0cl9wdHItPnZlcnNpb24gPSB0ZW1wLT54LnZlcnNpb247CisJCQkJc3hhdHRyX3B0ci0+b2Zmc2V0ID0gdGVtcC0+eC5vZmZzZXQ7CisJCQkJc3hhdHRyX3B0ci0+dG90bGVuID0gdGVtcC0+eC50b3RsZW47CisKKwkJCQl3cGFnZSArPSBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkU7CisJCQkJYnJlYWs7CisJCQl9CisJCQljYXNlIEpGRlMyX05PREVUWVBFX1hSRUY6IHsKKwkJCQlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfZmxhc2ggKnN4cmVmX3B0ciA9IHdwYWdlOworCisJCQkJdGVtcCA9IGMtPnN1bW1hcnktPnN1bV9saXN0X2hlYWQ7CisJCQkJc3hyZWZfcHRyLT5ub2RldHlwZSA9IHRlbXAtPnIubm9kZXR5cGU7CisJCQkJc3hyZWZfcHRyLT5vZmZzZXQgPSB0ZW1wLT5yLm9mZnNldDsKKworCQkJCXdwYWdlICs9IEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCiAJCQlkZWZhdWx0IDogewotCQkJCUJVRygpOwkvKiB1bmtub3duIG5vZGUgaW4gc3VtbWFyeSBpbmZvcm1hdGlvbiAqLworCQkJCWlmICgoamUxNl90b19jcHUodGVtcC0+dS5ub2RldHlwZSkgJiBKRkZTMl9DT01QQVRfTUFTSykKKwkJCQkgICAgPT0gSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZKSB7CisJCQkJCWRiZ19zdW1tYXJ5KCJXcml0aW5nIHVua25vd24gUldDT01QQVRfQ09QWSBub2RlIHR5cGUgJXhcbiIsCisJCQkJCQkgICAgamUxNl90b19jcHUodGVtcC0+dS5ub2RldHlwZSkpOworCQkJCQlqZmZzMl9zdW1fZGlzYWJsZV9jb2xsZWN0aW5nKGMtPnN1bW1hcnkpOworCQkJCX0gZWxzZSB7CisJCQkJCUJVRygpOwkvKiB1bmtub3duIG5vZGUgaW4gc3VtbWFyeSBpbmZvcm1hdGlvbiAqLworCQkJCX0KIAkJCX0KIAkJfQogCi0JCXRlbXAgPSBjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkOwotCQljLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkID0gYy0+c3VtbWFyeS0+c3VtX2xpc3RfaGVhZC0+dS5uZXh0OworCQljLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkID0gdGVtcC0+dS5uZXh0OwogCQlrZnJlZSh0ZW1wKTsKIAogCQljLT5zdW1tYXJ5LT5zdW1fbnVtLS07CkBAIC02NDUsMjUgKzc3OSwzNCBAQAogCXZlY3NbMV0uaW92X2Jhc2UgPSBjLT5zdW1tYXJ5LT5zdW1fYnVmOwogCXZlY3NbMV0uaW92X2xlbiA9IGRhdGFzaXplOwogCisJc3VtX29mcyA9IGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZTsKKwogCWRiZ19zdW1tYXJ5KCJKRkZTMjogd3JpdGluZyBvdXQgZGF0YSB0byBmbGFzaCB0byBwb3MgOiAweCUwOHhcbiIsCi0JCQlqZWItPm9mZnNldCArIGMtPnNlY3Rvcl9zaXplIC0gamViLT5mcmVlX3NpemUpOworCQkgICAgc3VtX29mcyk7CiAKLQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQlyZXQgPSBqZmZzMl9mbGFzaF93cml0ZXYoYywgdmVjcywgMiwgamViLT5vZmZzZXQgKyBjLT5zZWN0b3Jfc2l6ZSAtCi0JCQkJamViLT5mcmVlX3NpemUsICZyZXRsZW4sIDApOwotCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQorCXJldCA9IGpmZnMyX2ZsYXNoX3dyaXRldihjLCB2ZWNzLCAyLCBzdW1fb2ZzLCAmcmV0bGVuLCAwKTsKIAogCWlmIChyZXQgfHwgKHJldGxlbiAhPSBpbmZvc2l6ZSkpIHsKLQkJSkZGUzJfV0FSTklORygiV3JpdGUgb2YgJXpkIGJ5dGVzIGF0IDB4JTA4eCBmYWlsZWQuIHJldHVybmVkICVkLCByZXRsZW4gJXpkXG4iLAotCQkJaW5mb3NpemUsIGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZSwgcmV0LCByZXRsZW4pOworCisJCUpGRlMyX1dBUk5JTkcoIldyaXRlIG9mICV1IGJ5dGVzIGF0IDB4JTA4eCBmYWlsZWQuIHJldHVybmVkICVkLCByZXRsZW4gJXpkXG4iLAorCQkJICAgICAgaW5mb3NpemUsIHN1bV9vZnMsIHJldCwgcmV0bGVuKTsKKworCQlpZiAocmV0bGVuKSB7CisJCQkvKiBXYXN0ZSByZW1haW5pbmcgc3BhY2UgKi8KKwkJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwkJCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBzdW1fb2ZzIHwgUkVGX09CU09MRVRFLCBpbmZvc2l6ZSwgTlVMTCk7CisJCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwkJfQogCiAJCWMtPnN1bW1hcnktPnN1bV9zaXplID0gSkZGUzJfU1VNTUFSWV9OT1NVTV9TSVpFOwotCQlXQVNURURfU1BBQ0UoaW5mb3NpemUpOwogCi0JCXJldHVybiAxOworCQlyZXR1cm4gMDsKIAl9CiAKKwlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIHN1bV9vZnMgfCBSRUZfTk9STUFMLCBpbmZvc2l6ZSwgTlVMTCk7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjcxLDEzICs4MTQsMTYgQEAKIAogaW50IGpmZnMyX3N1bV93cml0ZV9zdW1ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQogewotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnN1bW1hcnlfcmVmOwotCWludCBkYXRhc2l6ZSwgaW5mb3NpemUsIHBhZHNpemUsIHJldDsKKwlpbnQgZGF0YXNpemUsIGluZm9zaXplLCBwYWRzaXplOwogCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CisJaW50IHJldDsKIAogCWRiZ19zdW1tYXJ5KCJjYWxsZWRcbiIpOwogCisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKIAlqZWIgPSBjLT5uZXh0YmxvY2s7CisJamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCBqZWIsIDEpOwogCiAJaWYgKCFjLT5zdW1tYXJ5LT5zdW1fbnVtIHx8ICFjLT5zdW1tYXJ5LT5zdW1fbGlzdF9oZWFkKSB7CiAJCUpGRlMyX1dBUk5JTkcoIkVtcHR5IHN1bW1hcnkgaW5mbyEhIVxuIik7CkBAIC02OTYsMzUgKzg0MiwxMSBAQAogCQlqZmZzMl9zdW1fZGlzYWJsZV9jb2xsZWN0aW5nKGMtPnN1bW1hcnkpOwogCiAJCUpGRlMyX1dBUk5JTkcoIk5vdCBlbm91Z2ggc3BhY2UgZm9yIHN1bW1hcnksIHBhZHNpemUgPSAlZFxuIiwgcGFkc2l6ZSk7CisJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJcmV0ID0gamZmczJfc3VtX3dyaXRlX2RhdGEoYywgamViLCBpbmZvc2l6ZSwgZGF0YXNpemUsIHBhZHNpemUpOwotCWlmIChyZXQpCi0JCXJldHVybiAwOyAvKiBjYW4ndCB3cml0ZSBvdXQgc3VtbWFyeSwgYmxvY2sgaXMgbWFya2VkIGFzIE5PU1VNX1NJWkUgKi8KLQotCS8qIGZvciBBQ0NUX1BBUkFOT0lBX0NIRUNLICovCi0Jc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0Jc3VtbWFyeV9yZWYgPSBqZmZzMl9hbGxvY19yYXdfbm9kZV9yZWYoKTsKIAlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0KLQlpZiAoIXN1bW1hcnlfcmVmKSB7Ci0JCUpGRlMyX05PVElDRSgiRmFpbGVkIHRvIGFsbG9jYXRlIG5vZGUgcmVmIGZvciBzdW1tYXJ5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jc3VtbWFyeV9yZWYtPm5leHRfaW5faW5vID0gTlVMTDsKLQlzdW1tYXJ5X3JlZi0+bmV4dF9waHlzID0gTlVMTDsKLQlzdW1tYXJ5X3JlZi0+Zmxhc2hfb2Zmc2V0ID0gKGplYi0+b2Zmc2V0ICsgYy0+c2VjdG9yX3NpemUgLSBqZWItPmZyZWVfc2l6ZSkgfCBSRUZfTk9STUFMOwotCXN1bW1hcnlfcmVmLT5fX3RvdGxlbiA9IGluZm9zaXplOwotCi0JaWYgKCFqZWItPmZpcnN0X25vZGUpCi0JCWplYi0+Zmlyc3Rfbm9kZSA9IHN1bW1hcnlfcmVmOwotCWlmIChqZWItPmxhc3Rfbm9kZSkKLQkJamViLT5sYXN0X25vZGUtPm5leHRfcGh5cyA9IHN1bW1hcnlfcmVmOwotCWplYi0+bGFzdF9ub2RlID0gc3VtbWFyeV9yZWY7Ci0KLQlVU0VEX1NQQUNFKGluZm9zaXplKTsKLQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zdW1tYXJ5LmggYi9mcy9qZmZzMi9zdW1tYXJ5LmgKaW5kZXggYjdhNjc4Yi4uNmJmMWY2YSAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VtbWFyeS5oCisrKyBiL2ZzL2pmZnMyL3N1bW1hcnkuaApAQCAtMTgsMjMgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgogCi0jZGVmaW5lIERJUlRZX1NQQUNFKHgpIGRvIHsgdHlwZW9mKHgpIF94ID0gKHgpOyBcCi0JCWMtPmZyZWVfc2l6ZSAtPSBfeDsgYy0+ZGlydHlfc2l6ZSArPSBfeDsgXAotCQlqZWItPmZyZWVfc2l6ZSAtPSBfeCA7IGplYi0+ZGlydHlfc2l6ZSArPSBfeDsgXAotCQl9d2hpbGUoMCkKLSNkZWZpbmUgVVNFRF9TUEFDRSh4KSBkbyB7IHR5cGVvZih4KSBfeCA9ICh4KTsgXAotCQljLT5mcmVlX3NpemUgLT0gX3g7IGMtPnVzZWRfc2l6ZSArPSBfeDsgXAotCQlqZWItPmZyZWVfc2l6ZSAtPSBfeCA7IGplYi0+dXNlZF9zaXplICs9IF94OyBcCi0JCX13aGlsZSgwKQotI2RlZmluZSBXQVNURURfU1BBQ0UoeCkgZG8geyB0eXBlb2YoeCkgX3ggPSAoeCk7IFwKLQkJYy0+ZnJlZV9zaXplIC09IF94OyBjLT53YXN0ZWRfc2l6ZSArPSBfeDsgXAotCQlqZWItPmZyZWVfc2l6ZSAtPSBfeCA7IGplYi0+d2FzdGVkX3NpemUgKz0gX3g7IFwKLQkJfXdoaWxlKDApCi0jZGVmaW5lIFVOQ0hFQ0tFRF9TUEFDRSh4KSBkbyB7IHR5cGVvZih4KSBfeCA9ICh4KTsgXAotCQljLT5mcmVlX3NpemUgLT0gX3g7IGMtPnVuY2hlY2tlZF9zaXplICs9IF94OyBcCi0JCWplYi0+ZnJlZV9zaXplIC09IF94IDsgamViLT51bmNoZWNrZWRfc2l6ZSArPSBfeDsgXAotCQl9d2hpbGUoMCkKLQogI2RlZmluZSBCTEtfU1RBVEVfQUxMRkYJCTAKICNkZWZpbmUgQkxLX1NUQVRFX0NMRUFOCQkxCiAjZGVmaW5lIEJMS19TVEFURV9QQVJURElSVFkJMgpAQCAtNDUsNiArMjgsOCBAQAogI2RlZmluZSBKRkZTMl9TVU1NQVJZX05PU1VNX1NJWkUgMHhmZmZmZmZmZgogI2RlZmluZSBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUgKHNpemVvZihzdHJ1Y3QgamZmczJfc3VtX2lub2RlX2ZsYXNoKSkKICNkZWZpbmUgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRSh4KSAoc2l6ZW9mKHN0cnVjdCBqZmZzMl9zdW1fZGlyZW50X2ZsYXNoKSArICh4KSkKKyNkZWZpbmUgSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFIChzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV94YXR0cl9mbGFzaCkpCisjZGVmaW5lIEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFIChzaXplb2Yoc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoKSkKIAogLyogU3VtbWFyeSBzdHJ1Y3R1cmVzIHVzZWQgb24gZmxhc2ggKi8KIApAQCAtNzUsMTEgKzYwLDI4IEBACiAJdWludDhfdCBuYW1lWzBdOwkvKiBkaXJlbnQgbmFtZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorc3RydWN0IGpmZnMyX3N1bV94YXR0cl9mbGFzaAoreworCWppbnQxNl90IG5vZGV0eXBlOwkvKiA9PSBKRkZTMl9OT0RFVFlQRV9YQVRSICovCisJamludDMyX3QgeGlkOwkJLyogeGF0dHIgaWRlbnRpZmllciAqLworCWppbnQzMl90IHZlcnNpb247CS8qIHZlcnNpb24gbnVtYmVyICovCisJamludDMyX3Qgb2Zmc2V0OwkvKiBvZmZzZXQgb24gamViICovCisJamludDMyX3QgdG90bGVuOwkvKiBub2RlIGxlbmd0aCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGpmZnMyX3N1bV94cmVmX2ZsYXNoCit7CisJamludDE2X3Qgbm9kZXR5cGU7CS8qID09IEpGRlMyX05PREVUWVBFX1hSRUYgKi8KKwlqaW50MzJfdCBvZmZzZXQ7CS8qIG9mZnNldCBvbiBqZWIgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKIHVuaW9uIGpmZnMyX3N1bV9mbGFzaAogewogCXN0cnVjdCBqZmZzMl9zdW1fdW5rbm93bl9mbGFzaCB1OwogCXN0cnVjdCBqZmZzMl9zdW1faW5vZGVfZmxhc2ggaTsKIAlzdHJ1Y3QgamZmczJfc3VtX2RpcmVudF9mbGFzaCBkOworCXN0cnVjdCBqZmZzMl9zdW1feGF0dHJfZmxhc2ggeDsKKwlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfZmxhc2ggcjsKIH07CiAKIC8qIFN1bW1hcnkgc3RydWN0dXJlcyB1c2VkIGluIHRoZSBtZW1vcnkgKi8KQEAgLTExNCwxMSArMTE2LDMwIEBACiAJdWludDhfdCBuYW1lWzBdOwkvKiBkaXJlbnQgbmFtZSAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAorc3RydWN0IGpmZnMyX3N1bV94YXR0cl9tZW0KK3sKKwl1bmlvbiBqZmZzMl9zdW1fbWVtICpuZXh0OworCWppbnQxNl90IG5vZGV0eXBlOworCWppbnQzMl90IHhpZDsKKwlqaW50MzJfdCB2ZXJzaW9uOworCWppbnQzMl90IG9mZnNldDsKKwlqaW50MzJfdCB0b3RsZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtCit7CisJdW5pb24gamZmczJfc3VtX21lbSAqbmV4dDsKKwlqaW50MTZfdCBub2RldHlwZTsKKwlqaW50MzJfdCBvZmZzZXQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiB1bmlvbiBqZmZzMl9zdW1fbWVtCiB7CiAJc3RydWN0IGpmZnMyX3N1bV91bmtub3duX21lbSB1OwogCXN0cnVjdCBqZmZzMl9zdW1faW5vZGVfbWVtIGk7CiAJc3RydWN0IGpmZnMyX3N1bV9kaXJlbnRfbWVtIGQ7CisJc3RydWN0IGpmZnMyX3N1bV94YXR0cl9tZW0geDsKKwlzdHJ1Y3QgamZmczJfc3VtX3hyZWZfbWVtIHI7CiB9OwogCiAvKiBTdW1tYXJ5IHJlbGF0ZWQgaW5mb3JtYXRpb24gc3RvcmVkIGluIHN1cGVyYmxvY2sgKi8KQEAgLTE1OSw4ICsxODAsMTEgQEAKIGludCBqZmZzMl9zdW1fYWRkX3BhZGRpbmdfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCB1aW50MzJfdCBzaXplKTsKIGludCBqZmZzMl9zdW1fYWRkX2lub2RlX21lbShzdHJ1Y3QgamZmczJfc3VtbWFyeSAqcywgc3RydWN0IGpmZnMyX3Jhd19pbm9kZSAqcmksIHVpbnQzMl90IG9mcyk7CiBpbnQgamZmczJfc3VtX2FkZF9kaXJlbnRfbWVtKHN0cnVjdCBqZmZzMl9zdW1tYXJ5ICpzLCBzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqcmQsIHVpbnQzMl90IG9mcyk7CitpbnQgamZmczJfc3VtX2FkZF94YXR0cl9tZW0oc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgKnJ4LCB1aW50MzJfdCBvZnMpOworaW50IGpmZnMyX3N1bV9hZGRfeHJlZl9tZW0oc3RydWN0IGpmZnMyX3N1bW1hcnkgKnMsIHN0cnVjdCBqZmZzMl9yYXdfeHJlZiAqcnIsIHVpbnQzMl90IG9mcyk7CiBpbnQgamZmczJfc3VtX3NjYW5fc3Vtbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwKLQkJCXVpbnQzMl90IG9mcywgdWludDMyX3QgKnBzZXVkb19yYW5kb20pOworCQkJICAgc3RydWN0IGpmZnMyX3Jhd19zdW1tYXJ5ICpzdW1tYXJ5LCB1aW50MzJfdCBzdW1sZW4sCisJCQkgICB1aW50MzJfdCAqcHNldWRvX3JhbmRvbSk7CiAKICNlbHNlCQkJCS8qIFNVTU1BUlkgRElTQUJMRUQgKi8KIApAQCAtMTc2LDcgKzIwMCw5IEBACiAjZGVmaW5lIGpmZnMyX3N1bV9hZGRfcGFkZGluZ19tZW0oYSxiKQogI2RlZmluZSBqZmZzMl9zdW1fYWRkX2lub2RlX21lbShhLGIsYykKICNkZWZpbmUgamZmczJfc3VtX2FkZF9kaXJlbnRfbWVtKGEsYixjKQotI2RlZmluZSBqZmZzMl9zdW1fc2Nhbl9zdW1ub2RlKGEsYixjLGQpICgwKQorI2RlZmluZSBqZmZzMl9zdW1fYWRkX3hhdHRyX21lbShhLGIsYykKKyNkZWZpbmUgamZmczJfc3VtX2FkZF94cmVmX21lbShhLGIsYykKKyNkZWZpbmUgamZmczJfc3VtX3NjYW5fc3Vtbm9kZShhLGIsYyxkLGUpICgwKQogCiAjZW5kaWYgLyogQ09ORklHX0pGRlMyX1NVTU1BUlkgKi8KIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VwZXIuYyBiL2ZzL2pmZnMyL3N1cGVyLmMKaW5kZXggZmZkOGU4NC4uOWQwNTIxNCAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VwZXIuYworKysgYi9mcy9qZmZzMi9zdXBlci5jCkBAIC0xNTEsNyArMTUxLDEwIEBACiAKIAlzYi0+c19vcCA9ICZqZmZzMl9zdXBlcl9vcGVyYXRpb25zOwogCXNiLT5zX2ZsYWdzID0gZmxhZ3MgfCBNU19OT0FUSU1FOwotCisJc2ItPnNfeGF0dHIgPSBqZmZzMl94YXR0cl9oYW5kbGVyczsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisJc2ItPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisjZW5kaWYKIAlyZXQgPSBqZmZzMl9kb19maWxsX3N1cGVyKHNiLCBkYXRhLCBmbGFncyAmIE1TX1NJTEVOVCA/IDEgOiAwKTsKIAogCWlmIChyZXQpIHsKQEAgLTI5Myw2ICsyOTYsNyBAQAogCQlrZnJlZShjLT5ibG9ja3MpOwogCWpmZnMyX2ZsYXNoX2NsZWFudXAoYyk7CiAJa2ZyZWUoYy0+aW5vY2FjaGVfbGlzdCk7CisJamZmczJfY2xlYXJfeGF0dHJfc3Vic3lzdGVtKGMpOwogCWlmIChjLT5tdGQtPnN5bmMpCiAJCWMtPm10ZC0+c3luYyhjLT5tdGQpOwogCkBAIC0zMjAsNiArMzI0LDE4IEBACiB7CiAJaW50IHJldDsKIAorCS8qIFBhcmFub2lhIGNoZWNrcyBmb3Igb24tbWVkaXVtIHN0cnVjdHVyZXMuIElmIHdlIGFzayBHQ0MKKwkgICB0byBwYWNrIHRoZW0gd2l0aCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB0aGVuIGl0IF9hbHNvXworCSAgIGFzc3VtZXMgdGhhdCB0aGV5J3JlIG5vdCBhbGlnbmVkIC0tIHNvIGl0IGVtaXRzIGNyYXBweQorCSAgIGNvZGUgb24gc29tZSBhcmNoaXRlY3R1cmVzLiBJZGVhbGx5IHdlIHdhbnQgYW4gYXR0cmlidXRlCisJICAgd2hpY2ggbWVhbnMganVzdCAnbm8gcGFkZGluZycsIHdpdGhvdXQgdGhlIGFsaWdubWVudAorCSAgIHRoaW5nLiBCdXQgR0NDIGRvZXNuJ3QgaGF2ZSB0aGF0IC0tIHdlIGhhdmUgdG8ganVzdAorCSAgIGhvcGUgdGhlIHN0cnVjdHMgYXJlIHRoZSByaWdodCBzaXplcywgaW5zdGVhZC4gKi8KKwlCVUdfT04oc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpICE9IDEyKTsKKwlCVUdfT04oc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfZGlyZW50KSAhPSA0MCk7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X2lub2RlKSAhPSA2OCk7CisJQlVHX09OKHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkpICE9IDMyKTsKKwogCXByaW50ayhLRVJOX0lORk8gIkpGRlMyIHZlcnNpb24gMi4yLiIKICNpZmRlZiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVIKIAkgICAgICAgIiAoTkFORCkiCkBAIC0zMjcsNyArMzQzLDcgQEAKICNpZmRlZiBDT05GSUdfSkZGUzJfU1VNTUFSWQogCSAgICAgICAiIChTVU1NQVJZKSAiCiAjZW5kaWYKLQkgICAgICAgIiAoQykgMjAwMS0yMDAzIFJlZCBIYXQsIEluYy5cbiIpOworCSAgICAgICAiIChDKSAyMDAxLTIwMDYgUmVkIEhhdCwgSW5jLlxuIik7CiAKIAlqZmZzMl9pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiamZmczJfaSIsCiAJCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvKSwKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3N5bWxpbmsuYyBiL2ZzL2pmZnMyL3N5bWxpbmsuYwppbmRleCBkNTU3NTRmLi5mYzIxMWI2IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zeW1saW5rLmMKKysrIGIvZnMvamZmczIvc3ltbGluay5jCkBAIC0yNCw3ICsyNCwxMiBAQAogewogCS5yZWFkbGluayA9CWdlbmVyaWNfcmVhZGxpbmssCiAJLmZvbGxvd19saW5rID0JamZmczJfZm9sbG93X2xpbmssCi0JLnNldGF0dHIgPQlqZmZzMl9zZXRhdHRyCisJLnBlcm1pc3Npb24gPQlqZmZzMl9wZXJtaXNzaW9uLAorCS5zZXRhdHRyID0JamZmczJfc2V0YXR0ciwKKwkuc2V0eGF0dHIgPQlqZmZzMl9zZXR4YXR0ciwKKwkuZ2V0eGF0dHIgPQlqZmZzMl9nZXR4YXR0ciwKKwkubGlzdHhhdHRyID0JamZmczJfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0ciA9CWpmZnMyX3JlbW92ZXhhdHRyCiB9OwogCiBzdGF0aWMgdm9pZCAqamZmczJfZm9sbG93X2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3didWYuYyBiL2ZzL2pmZnMyL3didWYuYwppbmRleCA0Y2ViZjBlLi5hN2YxNTNmIDEwMDY0NAotLS0gYS9mcy9qZmZzMi93YnVmLmMKKysrIGIvZnMvamZmczIvd2J1Zi5jCkBAIC0xNTYsNjkgKzE1NiwxMzAgQEAKIAkJamZmczJfZXJhc2VfcGVuZGluZ190cmlnZ2VyKGMpOwogCX0KIAotCS8qIEFkanVzdCBpdHMgc2l6ZSBjb3VudHMgYWNjb3JkaW5nbHkgKi8KLQljLT53YXN0ZWRfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZTsKLQljLT5mcmVlX3NpemUgLT0gamViLT5mcmVlX3NpemU7Ci0JamViLT53YXN0ZWRfc2l6ZSArPSBqZWItPmZyZWVfc2l6ZTsKLQlqZWItPmZyZWVfc2l6ZSA9IDA7CisJaWYgKCFqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGplYiwgMSkpIHsKKwkJdWludDMyX3Qgb2xkZnJlZSA9IGplYi0+ZnJlZV9zaXplOworCisJCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCAKKwkJCQkgICAgKGplYi0+b2Zmc2V0K2MtPnNlY3Rvcl9zaXplLW9sZGZyZWUpIHwgUkVGX09CU09MRVRFLAorCQkJCSAgICBvbGRmcmVlLCBOVUxMKTsKKwkJLyogY29udmVydCB0byB3YXN0ZWQgKi8KKwkJYy0+d2FzdGVkX3NpemUgKz0gb2xkZnJlZTsKKwkJamViLT53YXN0ZWRfc2l6ZSArPSBvbGRmcmVlOworCQljLT5kaXJ0eV9zaXplIC09IG9sZGZyZWU7CisJCWplYi0+ZGlydHlfc2l6ZSAtPSBvbGRmcmVlOworCX0KIAogCWpmZnMyX2RiZ19kdW1wX2Jsb2NrX2xpc3RzX25vbG9jayhjKTsKIAlqZmZzMl9kYmdfYWNjdF9zYW5pdHlfY2hlY2tfbm9sb2NrKGMsamViKTsKIAlqZmZzMl9kYmdfYWNjdF9wYXJhbm9pYV9jaGVja19ub2xvY2soYywgamViKTsKIH0KIAorc3RhdGljIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKipqZmZzMl9pbmNvcmVfcmVwbGFjZV9yYXcoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJCQkJICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLAorCQkJCQkJCSAgICBzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXcsCisJCQkJCQkJICAgIHVuaW9uIGpmZnMyX25vZGVfdW5pb24gKm5vZGUpCit7CisJc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqZnJhZzsKKwlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOworCisJZGJnX25vZGVyZWYoImluY29yZV9yZXBsYWNlX3Jhdzogbm9kZSBhdCAlcCBpcyB7JTA0eCwlMDR4fVxuIiwKKwkJICAgIG5vZGUsIGplMTZfdG9fY3B1KG5vZGUtPnUubWFnaWMpLCBqZTE2X3RvX2NwdShub2RlLT51Lm5vZGV0eXBlKSk7CisKKwlCVUdfT04oamUxNl90b19jcHUobm9kZS0+dS5tYWdpYykgIT0gMHgxOTg1ICYmCisJICAgICAgIGplMTZfdG9fY3B1KG5vZGUtPnUubWFnaWMpICE9IDApOworCisJc3dpdGNoIChqZTE2X3RvX2NwdShub2RlLT51Lm5vZGV0eXBlKSkgeworCWNhc2UgSkZGUzJfTk9ERVRZUEVfSU5PREU6CisJCWlmIChmLT5tZXRhZGF0YSAmJiBmLT5tZXRhZGF0YS0+cmF3ID09IHJhdykgeworCQkJZGJnX25vZGVyZWYoIldpbGwgcmVwbGFjZSAtPnJhdyBpbiBmLT5tZXRhZGF0YSBhdCAlcFxuIiwgZi0+bWV0YWRhdGEpOworCQkJcmV0dXJuICZmLT5tZXRhZGF0YS0+cmF3OworCQl9CisJCWZyYWcgPSBqZmZzMl9sb29rdXBfbm9kZV9mcmFnKCZmLT5mcmFndHJlZSwgamUzMl90b19jcHUobm9kZS0+aS5vZmZzZXQpKTsKKwkJQlVHX09OKCFmcmFnKTsKKwkJLyogRmluZCBhIGZyYWcgd2hpY2ggcmVmZXJzIHRvIHRoZSBmdWxsX2Rub2RlIHdlIHdhbnQgdG8gbW9kaWZ5ICovCisJCXdoaWxlICghZnJhZy0+bm9kZSB8fCBmcmFnLT5ub2RlLT5yYXcgIT0gcmF3KSB7CisJCQlmcmFnID0gZnJhZ19uZXh0KGZyYWcpOworCQkJQlVHX09OKCFmcmFnKTsKKwkJfQorCQlkYmdfbm9kZXJlZigiV2lsbCByZXBsYWNlIC0+cmF3IGluIGZ1bGxfZG5vZGUgYXQgJXBcbiIsIGZyYWctPm5vZGUpOworCQlyZXR1cm4gJmZyYWctPm5vZGUtPnJhdzsKKworCWNhc2UgSkZGUzJfTk9ERVRZUEVfRElSRU5UOgorCQlmb3IgKGZkID0gZi0+ZGVudHM7IGZkOyBmZCA9IGZkLT5uZXh0KSB7CisJCQlpZiAoZmQtPnJhdyA9PSByYXcpIHsKKwkJCQlkYmdfbm9kZXJlZigiV2lsbCByZXBsYWNlIC0+cmF3IGluIGZ1bGxfZGlyZW50IGF0ICVwXG4iLCBmZCk7CisJCQkJcmV0dXJuICZmZC0+cmF3OworCQkJfQorCQl9CisJCUJVRygpOworCisJZGVmYXVsdDoKKwkJZGJnX25vZGVyZWYoIkRvbid0IGNhcmUgYWJvdXQgcmVwbGFjaW5nIHJhdyBmb3Igbm9kZXR5cGUgJXhcbiIsCisJCQkgICAgamUxNl90b19jcHUobm9kZS0+dS5ub2RldHlwZSkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qIFJlY292ZXIgZnJvbSBmYWlsdXJlIHRvIHdyaXRlIHdidWYuIFJlY292ZXIgdGhlIG5vZGVzIHVwIHRvIHRoZQogICogd2J1Ziwgbm90IHRoZSBvbmUgd2hpY2ggd2Ugd2VyZSBzdGFydGluZyB0byB0cnkgdG8gd3JpdGUuICovCiAKIHN0YXRpYyB2b2lkIGpmZnMyX3didWZfcmVjb3ZlcihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKIHsKIAlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLCAqbmV3X2plYjsKLQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICoqZmlyc3RfcmF3LCAqKnJhdzsKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXcsICpuZXh0LCAqZmlyc3RfcmF3ID0gTlVMTDsKIAlzaXplX3QgcmV0bGVuOwogCWludCByZXQ7CisJaW50IG5yX3JlZmlsZSA9IDA7CiAJdW5zaWduZWQgY2hhciAqYnVmOwogCXVpbnQzMl90IHN0YXJ0LCBlbmQsIG9mcywgbGVuOwogCi0Jc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCiAJamViID0gJmMtPmJsb2Nrc1tjLT53YnVmX29mcyAvIGMtPnNlY3Rvcl9zaXplXTsKIAorCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAlqZmZzMl9ibG9ja19yZWZpbGUoYywgamViLCBSRUZJTEVfTk9URU1QVFkpOworCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCisJQlVHX09OKCFyZWZfb2Jzb2xldGUoamViLT5sYXN0X25vZGUpKTsKIAogCS8qIEZpbmQgdGhlIGZpcnN0IG5vZGUgdG8gYmUgcmVjb3ZlcmVkLCBieSBza2lwcGluZyBvdmVyIGV2ZXJ5CiAJICAgbm9kZSB3aGljaCBlbmRzIGJlZm9yZSB0aGUgd2J1ZiBzdGFydHMsIG9yIHdoaWNoIGlzIG9ic29sZXRlLiAqLwotCWZpcnN0X3JhdyA9ICZqZWItPmZpcnN0X25vZGU7Ci0Jd2hpbGUgKCpmaXJzdF9yYXcgJiYKLQkgICAgICAgKHJlZl9vYnNvbGV0ZSgqZmlyc3RfcmF3KSB8fAotCQkocmVmX29mZnNldCgqZmlyc3RfcmF3KStyZWZfdG90bGVuKGMsIGplYiwgKmZpcnN0X3JhdykpIDwgYy0+d2J1Zl9vZnMpKSB7Ci0JCUQxKHByaW50ayhLRVJOX0RFQlVHICJTa2lwcGluZyBub2RlIGF0IDB4JTA4eCglZCktMHglMDh4IHdoaWNoIGlzIGVpdGhlciBiZWZvcmUgMHglMDh4IG9yIG9ic29sZXRlXG4iLAotCQkJICByZWZfb2Zmc2V0KCpmaXJzdF9yYXcpLCByZWZfZmxhZ3MoKmZpcnN0X3JhdyksCi0JCQkgIChyZWZfb2Zmc2V0KCpmaXJzdF9yYXcpICsgcmVmX3RvdGxlbihjLCBqZWIsICpmaXJzdF9yYXcpKSwKLQkJCSAgYy0+d2J1Zl9vZnMpKTsKLQkJZmlyc3RfcmF3ID0gJigqZmlyc3RfcmF3KS0+bmV4dF9waHlzOworCWZvciAobmV4dCA9IHJhdyA9IGplYi0+Zmlyc3Rfbm9kZTsgbmV4dDsgcmF3ID0gbmV4dCkgeworCQluZXh0ID0gcmVmX25leHQocmF3KTsKKworCQlpZiAocmVmX29ic29sZXRlKHJhdykgfHwgCisJCSAgICAobmV4dCAmJiByZWZfb2Zmc2V0KG5leHQpIDw9IGMtPndidWZfb2ZzKSkgeworCQkJZGJnX25vZGVyZWYoIlNraXBwaW5nIG5vZGUgYXQgMHglMDh4KCVkKS0weCUwOHggd2hpY2ggaXMgZWl0aGVyIGJlZm9yZSAweCUwOHggb3Igb2Jzb2xldGVcbiIsCisJCQkJICAgIHJlZl9vZmZzZXQocmF3KSwgcmVmX2ZsYWdzKHJhdyksCisJCQkJICAgIChyZWZfb2Zmc2V0KHJhdykgKyByZWZfdG90bGVuKGMsIGplYiwgcmF3KSksCisJCQkJICAgIGMtPndidWZfb2ZzKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRiZ19ub2RlcmVmKCJGaXJzdCBub2RlIHRvIGJlIHJlY292ZXJlZCBpcyBhdCAweCUwOHgoJWQpLTB4JTA4eFxuIiwKKwkJCSAgICByZWZfb2Zmc2V0KHJhdyksIHJlZl9mbGFncyhyYXcpLAorCQkJICAgIChyZWZfb2Zmc2V0KHJhdykgKyByZWZfdG90bGVuKGMsIGplYiwgcmF3KSkpOworCisJCWZpcnN0X3JhdyA9IHJhdzsKKwkJYnJlYWs7CiAJfQogCi0JaWYgKCEqZmlyc3RfcmF3KSB7CisJaWYgKCFmaXJzdF9yYXcpIHsKIAkJLyogQWxsIG5vZGVzIHdlcmUgb2Jzb2xldGUuIE5vdGhpbmcgdG8gcmVjb3Zlci4gKi8KIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgIk5vIG5vbi1vYnNvbGV0ZSBub2RlcyB0byBiZSByZWNvdmVyZWQuIEp1c3QgZmlsaW5nIGJsb2NrIGJhZFxuIikpOwotCQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwkJYy0+d2J1Zl9sZW4gPSAwOwogCQlyZXR1cm47CiAJfQogCi0Jc3RhcnQgPSByZWZfb2Zmc2V0KCpmaXJzdF9yYXcpOwotCWVuZCA9IHJlZl9vZmZzZXQoKmZpcnN0X3JhdykgKyByZWZfdG90bGVuKGMsIGplYiwgKmZpcnN0X3Jhdyk7CisJc3RhcnQgPSByZWZfb2Zmc2V0KGZpcnN0X3Jhdyk7CisJZW5kID0gcmVmX29mZnNldChqZWItPmxhc3Rfbm9kZSk7CisJbnJfcmVmaWxlID0gMTsKIAotCS8qIEZpbmQgdGhlIGxhc3Qgbm9kZSB0byBiZSByZWNvdmVyZWQgKi8KLQlyYXcgPSBmaXJzdF9yYXc7Ci0Jd2hpbGUgKCgqcmF3KSkgewotCQlpZiAoIXJlZl9vYnNvbGV0ZSgqcmF3KSkKLQkJCWVuZCA9IHJlZl9vZmZzZXQoKnJhdykgKyByZWZfdG90bGVuKGMsIGplYiwgKnJhdyk7CisJLyogQ291bnQgdGhlIG51bWJlciBvZiByZWZzIHdoaWNoIG5lZWQgdG8gYmUgY29waWVkICovCisJd2hpbGUgKChyYXcgPSByZWZfbmV4dChyYXcpKSAhPSBqZWItPmxhc3Rfbm9kZSkKKwkJbnJfcmVmaWxlKys7CiAKLQkJcmF3ID0gJigqcmF3KS0+bmV4dF9waHlzOwotCX0KLQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQotCUQxKHByaW50ayhLRVJOX0RFQlVHICJ3YnVmIHJlY292ZXIgJTA4eC0lMDh4XG4iLCBzdGFydCwgZW5kKSk7CisJZGJnX25vZGVyZWYoIndidWYgcmVjb3ZlciAlMDh4LSUwOHggKCVkIGJ5dGVzIGluICVkIG5vZGVzKVxuIiwKKwkJICAgIHN0YXJ0LCBlbmQsIGVuZCAtIHN0YXJ0LCBucl9yZWZpbGUpOwogCiAJYnVmID0gTlVMTDsKIAlpZiAoc3RhcnQgPCBjLT53YnVmX29mcykgewpAQCAtMjMzLDI4ICsyOTQsMzcgQEAKIAkJfQogCiAJCS8qIERvIHRoZSByZWFkLi4uICovCi0JCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykpCi0JCQlyZXQgPSBjLT5tdGQtPnJlYWRfZWNjKGMtPm10ZCwgc3RhcnQsIGMtPndidWZfb2ZzIC0gc3RhcnQsICZyZXRsZW4sIGJ1ZiwgTlVMTCwgYy0+b29iaW5mbyk7Ci0JCWVsc2UKLQkJCXJldCA9IGMtPm10ZC0+cmVhZChjLT5tdGQsIHN0YXJ0LCBjLT53YnVmX29mcyAtIHN0YXJ0LCAmcmV0bGVuLCBidWYpOworCQlyZXQgPSBjLT5tdGQtPnJlYWQoYy0+bXRkLCBzdGFydCwgYy0+d2J1Zl9vZnMgLSBzdGFydCwgJnJldGxlbiwgYnVmKTsKIAotCQlpZiAocmV0ID09IC1FQkFETVNHICYmIHJldGxlbiA9PSBjLT53YnVmX29mcyAtIHN0YXJ0KSB7Ci0JCQkvKiBFQ0MgcmVjb3ZlcmVkICovCisJCS8qIEVDQyByZWNvdmVyZWQgPyAqLworCQlpZiAoKHJldCA9PSAtRVVDTEVBTiB8fCByZXQgPT0gLUVCQURNU0cpICYmCisJCSAgICAocmV0bGVuID09IGMtPndidWZfb2ZzIC0gc3RhcnQpKQogCQkJcmV0ID0gMDsKLQkJfQorCiAJCWlmIChyZXQgfHwgcmV0bGVuICE9IGMtPndidWZfb2ZzIC0gc3RhcnQpIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgIk9sZCBkYXRhIGFyZSBhbHJlYWR5IGxvc3QgaW4gd2J1ZiByZWNvdmVyeS4gRGF0YSBsb3NzIGVuc3Vlcy5cbiIpOwogCiAJCQlrZnJlZShidWYpOwogCQkJYnVmID0gTlVMTDsKIAkJcmVhZF9mYWlsZWQ6Ci0JCQlmaXJzdF9yYXcgPSAmKCpmaXJzdF9yYXcpLT5uZXh0X3BoeXM7CisJCQlmaXJzdF9yYXcgPSByZWZfbmV4dChmaXJzdF9yYXcpOworCQkJbnJfcmVmaWxlLS07CisJCQl3aGlsZSAoZmlyc3RfcmF3ICYmIHJlZl9vYnNvbGV0ZShmaXJzdF9yYXcpKSB7CisJCQkJZmlyc3RfcmF3ID0gcmVmX25leHQoZmlyc3RfcmF3KTsKKwkJCQlucl9yZWZpbGUtLTsKKwkJCX0KKwogCQkJLyogSWYgdGhpcyB3YXMgdGhlIG9ubHkgbm9kZSB0byBiZSByZWNvdmVyZWQsIGdpdmUgdXAgKi8KLQkJCWlmICghKCpmaXJzdF9yYXcpKQorCQkJaWYgKCFmaXJzdF9yYXcpIHsKKwkJCQljLT53YnVmX2xlbiA9IDA7CiAJCQkJcmV0dXJuOworCQkJfQogCiAJCQkvKiBJdCB3YXNuJ3QuIEdvIG9uIGFuZCB0cnkgdG8gcmVjb3ZlciBub2RlcyBjb21wbGV0ZSBpbiB0aGUgd2J1ZiAqLwotCQkJc3RhcnQgPSByZWZfb2Zmc2V0KCpmaXJzdF9yYXcpOworCQkJc3RhcnQgPSByZWZfb2Zmc2V0KGZpcnN0X3Jhdyk7CisJCQlkYmdfbm9kZXJlZigid2J1ZiBub3cgcmVjb3ZlciAlMDh4LSUwOHggKCVkIGJ5dGVzIGluICVkIG5vZGVzKVxuIiwKKwkJCQkgICAgc3RhcnQsIGVuZCwgZW5kIC0gc3RhcnQsIG5yX3JlZmlsZSk7CisKIAkJfSBlbHNlIHsKIAkJCS8qIFJlYWQgc3VjY2VlZGVkLiBDb3B5IHRoZSByZW1haW5pbmcgZGF0YSBmcm9tIHRoZSB3YnVmICovCiAJCQltZW1jcHkoYnVmICsgKGMtPndidWZfb2ZzIC0gc3RhcnQpLCBjLT53YnVmLCBlbmQgLSBjLT53YnVmX29mcyk7CkBAIC0yNjMsMTQgKzMzMywyMyBAQAogCS8qIE9LLi4uIHdlJ3JlIHRvIHJld3JpdGUgKGVuZC1zdGFydCkgYnl0ZXMgb2YgZGF0YSBmcm9tIGZpcnN0X3JhdyBvbndhcmRzLgogCSAgIEVpdGhlciAnYnVmJyBjb250YWlucyB0aGUgZGF0YSwgb3Igd2UgZmluZCBpdCBpbiB0aGUgd2J1ZiAqLwogCi0KIAkvKiAuLi4gYW5kIGdldCBhbiBhbGxvY2F0aW9uIG9mIHNwYWNlIGZyb20gYSBzaGlueSBuZXcgYmxvY2sgaW5zdGVhZCAqLwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgZW5kLXN0YXJ0LCAmb2ZzLCAmbGVuLCBKRkZTMl9TVU1NQVJZX05PU1VNX1NJWkUpOworCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgZW5kLXN0YXJ0LCAmbGVuLCBKRkZTMl9TVU1NQVJZX05PU1VNX1NJWkUpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGFsbG9jYXRlIHNwYWNlIGZvciB3YnVmIHJlY292ZXJ5LiBEYXRhIGxvc3MgZW5zdWVzLlxuIik7CiAJCWtmcmVlKGJ1Zik7CiAJCXJldHVybjsKIAl9CisKKwlyZXQgPSBqZmZzMl9wcmVhbGxvY19yYXdfbm9kZV9yZWZzKGMsIGMtPm5leHRibG9jaywgbnJfcmVmaWxlKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byBhbGxvY2F0ZSBub2RlIHJlZnMgZm9yIHdidWYgcmVjb3ZlcnkuIERhdGEgbG9zcyBlbnN1ZXMuXG4iKTsKKwkJa2ZyZWUoYnVmKTsKKwkJcmV0dXJuOworCX0KKworCW9mcyA9IHdyaXRlX29mcyhjKTsKKwogCWlmIChlbmQtc3RhcnQgPj0gYy0+d2J1Zl9wYWdlc2l6ZSkgewogCQkvKiBOZWVkIHRvIGRvIGFub3RoZXIgd3JpdGUgaW1tZWRpYXRlbHksIGJ1dCBpdCdzIHBvc3NpYmxlCiAJCSAgIHRoYXQgdGhpcyBpcyBqdXN0IGJlY2F1c2UgdGhlIHdidWYgaXRzZWxmIGlzIGNvbXBsZXRlbHkKQEAgLTI4OCwzNiArMzY3LDIyIEBACiAJCWlmIChicmVha21lKysgPT0gMjApIHsKIAkJCXByaW50ayhLRVJOX05PVElDRSAiRmFraW5nIHdyaXRlIGVycm9yIGF0IDB4JTA4eFxuIiwgb2ZzKTsKIAkJCWJyZWFrbWUgPSAwOwotCQkJYy0+bXRkLT53cml0ZV9lY2MoYy0+bXRkLCBvZnMsIHRvd3JpdGUsICZyZXRsZW4sCi0JCQkJCSAgYnJva2VuYnVmLCBOVUxMLCBjLT5vb2JpbmZvKTsKKwkJCWMtPm10ZC0+d3JpdGUoYy0+bXRkLCBvZnMsIHRvd3JpdGUsICZyZXRsZW4sCisJCQkJICAgICAgYnJva2VuYnVmKTsKIAkJCXJldCA9IC1FSU87CiAJCX0gZWxzZQogI2VuZGlmCi0JCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykpCi0JCQlyZXQgPSBjLT5tdGQtPndyaXRlX2VjYyhjLT5tdGQsIG9mcywgdG93cml0ZSwgJnJldGxlbiwKLQkJCQkJCXJld3JpdGVfYnVmLCBOVUxMLCBjLT5vb2JpbmZvKTsKLQkJZWxzZQotCQkJcmV0ID0gYy0+bXRkLT53cml0ZShjLT5tdGQsIG9mcywgdG93cml0ZSwgJnJldGxlbiwgcmV3cml0ZV9idWYpOworCQkJcmV0ID0gYy0+bXRkLT53cml0ZShjLT5tdGQsIG9mcywgdG93cml0ZSwgJnJldGxlbiwKKwkJCQkJICAgIHJld3JpdGVfYnVmKTsKIAogCQlpZiAocmV0IHx8IHJldGxlbiAhPSB0b3dyaXRlKSB7CiAJCQkvKiBBcmdoLiBXZSB0cmllZC4gUmVhbGx5IHdlIGRpZC4gKi8KIAkJCXByaW50ayhLRVJOX0NSSVQgIlJlY292ZXJ5IG9mIHdidWYgZmFpbGVkIGR1ZSB0byBhIHNlY29uZCB3cml0ZSBlcnJvclxuIik7CiAJCQlrZnJlZShidWYpOwogCi0JCQlpZiAocmV0bGVuKSB7Ci0JCQkJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3MjsKKwkJCWlmIChyZXRsZW4pCisJCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIG9mcyB8IFJFRl9PQlNPTEVURSwgcmVmX3RvdGxlbihjLCBqZWIsIGZpcnN0X3JhdyksIE5VTEwpOwogCi0JCQkJcmF3MiA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCQkJCWlmICghcmF3MikKLQkJCQkJcmV0dXJuOwotCi0JCQkJcmF3Mi0+Zmxhc2hfb2Zmc2V0ID0gb2ZzIHwgUkVGX09CU09MRVRFOwotCQkJCXJhdzItPl9fdG90bGVuID0gcmVmX3RvdGxlbihjLCBqZWIsICpmaXJzdF9yYXcpOwotCQkJCXJhdzItPm5leHRfcGh5cyA9IE5VTEw7Ci0JCQkJcmF3Mi0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCi0JCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHJhdzIpOwotCQkJfQogCQkJcmV0dXJuOwogCQl9CiAJCXByaW50ayhLRVJOX05PVElDRSAiUmVjb3Zlcnkgb2Ygd2J1ZiBzdWNjZWVkZWQgdG8gJTA4eFxuIiwgb2ZzKTsKQEAgLTMyNiwxMiArMzkxLDEwIEBACiAJCWMtPndidWZfb2ZzID0gb2ZzICsgdG93cml0ZTsKIAkJbWVtbW92ZShjLT53YnVmLCByZXdyaXRlX2J1ZiArIHRvd3JpdGUsIGMtPndidWZfbGVuKTsKIAkJLyogRG9uJ3QgbXVjayBhYm91dCB3aXRoIGMtPndidWZfaW5vZGVzLiBGYWxzZSBwb3NpdGl2ZXMgYXJlIGhhcm1sZXNzLiAqLwotCQlrZnJlZShidWYpOwogCX0gZWxzZSB7CiAJCS8qIE9LLCBub3cgd2UncmUgbGVmdCB3aXRoIHRoZSBkcmVncyBpbiB3aGljaGV2ZXIgYnVmZmVyIHdlJ3JlIHVzaW5nICovCiAJCWlmIChidWYpIHsKIAkJCW1lbWNweShjLT53YnVmLCBidWYsIGVuZC1zdGFydCk7Ci0JCQlrZnJlZShidWYpOwogCQl9IGVsc2UgewogCQkJbWVtbW92ZShjLT53YnVmLCBjLT53YnVmICsgKHN0YXJ0IC0gYy0+d2J1Zl9vZnMpLCBlbmQgLSBzdGFydCk7CiAJCX0KQEAgLTM0Myw2MiArNDA2LDExMSBAQAogCW5ld19qZWIgPSAmYy0+YmxvY2tzW29mcyAvIGMtPnNlY3Rvcl9zaXplXTsKIAogCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQlpZiAobmV3X2plYi0+Zmlyc3Rfbm9kZSkgewotCQkvKiBPZGQsIGJ1dCBwb3NzaWJsZSB3aXRoIFNUIGZsYXNoIGxhdGVyIG1heWJlICovCi0JCW5ld19qZWItPmxhc3Rfbm9kZS0+bmV4dF9waHlzID0gKmZpcnN0X3JhdzsKLQl9IGVsc2UgewotCQluZXdfamViLT5maXJzdF9ub2RlID0gKmZpcnN0X3JhdzsKLQl9Ci0KLQlyYXcgPSBmaXJzdF9yYXc7Ci0Jd2hpbGUgKCpyYXcpIHsKLQkJdWludDMyX3QgcmF3bGVuID0gcmVmX3RvdGxlbihjLCBqZWIsICpyYXcpOworCWZvciAocmF3ID0gZmlyc3RfcmF3OyByYXcgIT0gamViLT5sYXN0X25vZGU7IHJhdyA9IHJlZl9uZXh0KHJhdykpIHsKKwkJdWludDMyX3QgcmF3bGVuID0gcmVmX3RvdGxlbihjLCBqZWIsIHJhdyk7CisJCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWM7CisJCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5ld19yZWY7CisJCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKiphZGp1c3RfcmVmID0gTlVMTDsKKwkJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBOVUxMOwogCiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJSZWZpbGluZyBibG9jayBvZiAlMDh4IGF0ICUwOHgoJWQpIHRvICUwOHhcbiIsCi0JCQkgIHJhd2xlbiwgcmVmX29mZnNldCgqcmF3KSwgcmVmX2ZsYWdzKCpyYXcpLCBvZnMpKTsKKwkJCSAgcmF3bGVuLCByZWZfb2Zmc2V0KHJhdyksIHJlZl9mbGFncyhyYXcpLCBvZnMpKTsKIAotCQlpZiAocmVmX29ic29sZXRlKCpyYXcpKSB7Ci0JCQkvKiBTaG91bGRuJ3QgcmVhbGx5IGhhcHBlbiBtdWNoICovCi0JCQluZXdfamViLT5kaXJ0eV9zaXplICs9IHJhd2xlbjsKLQkJCW5ld19qZWItPmZyZWVfc2l6ZSAtPSByYXdsZW47Ci0JCQljLT5kaXJ0eV9zaXplICs9IHJhd2xlbjsKLQkJfSBlbHNlIHsKLQkJCW5ld19qZWItPnVzZWRfc2l6ZSArPSByYXdsZW47Ci0JCQluZXdfamViLT5mcmVlX3NpemUgLT0gcmF3bGVuOworCQlpYyA9IGpmZnMyX3Jhd19yZWZfdG9faWMocmF3KTsKKworCQkvKiBJY2suIFRoaXMgWEFUVFIgbWVzcyBzaG91bGQgYmUgZml4ZWQgc2hvcnRseS4uLiAqLworCQlpZiAoaWMgJiYgaWMtPmNsYXNzID09IFJBV05PREVfQ0xBU1NfWEFUVFJfREFUVU0pIHsKKwkJCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQgPSAodm9pZCAqKWljOworCQkJQlVHX09OKHhkLT5ub2RlICE9IHJhdyk7CisJCQlhZGp1c3RfcmVmID0gJnhkLT5ub2RlOworCQkJcmF3LT5uZXh0X2luX2lubyA9IE5VTEw7CisJCQlpYyA9IE5VTEw7CisJCX0gZWxzZSBpZiAoaWMgJiYgaWMtPmNsYXNzID09IFJBV05PREVfQ0xBU1NfWEFUVFJfUkVGKSB7CisJCQlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhyID0gKHZvaWQgKilpYzsKKwkJCUJVR19PTih4ci0+bm9kZSAhPSByYXcpOworCQkJYWRqdXN0X3JlZiA9ICZ4ci0+bm9kZTsKKwkJCXJhdy0+bmV4dF9pbl9pbm8gPSBOVUxMOworCQkJaWMgPSBOVUxMOworCQl9IGVsc2UgaWYgKGljICYmIGljLT5jbGFzcyA9PSBSQVdOT0RFX0NMQVNTX0lOT0RFX0NBQ0hFKSB7CisJCQlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICoqcCA9ICZpYy0+bm9kZXM7CisKKwkJCS8qIFJlbW92ZSB0aGUgb2xkIG5vZGUgZnJvbSB0aGUgcGVyLWlub2RlIGxpc3QgKi8KKwkJCXdoaWxlICgqcCAmJiAqcCAhPSAodm9pZCAqKWljKSB7CisJCQkJaWYgKCpwID09IHJhdykgeworCQkJCQkoKnApID0gKHJhdy0+bmV4dF9pbl9pbm8pOworCQkJCQlyYXctPm5leHRfaW5faW5vID0gTlVMTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXAgPSAmKCgqcCktPm5leHRfaW5faW5vKTsKKwkJCX0KKworCQkJaWYgKGljLT5zdGF0ZSA9PSBJTk9fU1RBVEVfUFJFU0VOVCAmJiAhcmVmX29ic29sZXRlKHJhdykpIHsKKwkJCQkvKiBJZiBpdCdzIGFuIGluLWNvcmUgaW5vZGUsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QgYW55CisJCQkJICAgZnVsbF9kaXJlbnQgb3IgZnVsbF9kbm9kZSBzdHJ1Y3R1cmUgdG8gcG9pbnQgdG8gdGhlCisJCQkJICAgbmV3IHZlcnNpb24gaW5zdGVhZCBvZiB0aGUgb2xkICovCisJCQkJZiA9IGpmZnMyX2djX2ZldGNoX2lub2RlKGMsIGljLT5pbm8sIGljLT5ubGluayk7CisJCQkJaWYgKElTX0VSUihmKSkgeworCQkJCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuOyBpdCBfbXVzdF8gYmUgcHJlc2VudCAqLworCQkJCQlKRkZTMl9FUlJPUigiRmFpbGVkIHRvIGlnZXQoKSBpbm8gIyV1LCBlcnIgJWxkXG4iLAorCQkJCQkJICAgIGljLT5pbm8sIFBUUl9FUlIoZikpOworCQkJCQlCVUcoKTsKKwkJCQl9CisJCQkJLyogV2UgZG9uJ3QgbG9jayBmLT5zZW0uIFRoZXJlJ3MgYSBudW1iZXIgb2Ygd2F5cyB3ZSBjb3VsZAorCQkJCSAgIGVuZCB1cCBpbiBoZXJlIHdpdGggaXQgYWxyZWFkeSBiZWluZyBsb2NrZWQsIGFuZCBub2JvZHkncworCQkJCSAgIGdvaW5nIHRvIG1vZGlmeSBpdCBvbiB1cyBhbnl3YXkgYmVjYXVzZSB3ZSBob2xkIHRoZQorCQkJCSAgIGFsbG9jX3NlbS4gV2UncmUgb25seSBjaGFuZ2luZyBvbmUgLT5yYXcgcG9pbnRlciB0b28sCisJCQkJICAgd2hpY2ggd2UgY2FuIGdldCBhd2F5IHdpdGggd2l0aG91dCB1cHNldHRpbmcgcmVhZGVycy4gKi8KKwkJCQlhZGp1c3RfcmVmID0gamZmczJfaW5jb3JlX3JlcGxhY2VfcmF3KGMsIGYsIHJhdywKKwkJCQkJCQkJICAgICAgKHZvaWQgKikoYnVmPzpjLT53YnVmKSArIChyZWZfb2Zmc2V0KHJhdykgLSBzdGFydCkpOworCQkJfSBlbHNlIGlmICh1bmxpa2VseShpYy0+c3RhdGUgIT0gSU5PX1NUQVRFX1BSRVNFTlQgJiYKKwkJCQkJICAgIGljLT5zdGF0ZSAhPSBJTk9fU1RBVEVfQ0hFQ0tFREFCU0VOVCAmJgorCQkJCQkgICAgaWMtPnN0YXRlICE9IElOT19TVEFURV9HQykpIHsKKwkJCQlKRkZTMl9FUlJPUigiSW5vZGUgIyV1IGlzIGluIHN0cmFuZ2Ugc3RhdGUgJWQhXG4iLCBpYy0+aW5vLCBpYy0+c3RhdGUpOworCQkJCUJVRygpOworCQkJfQorCQl9CisKKwkJbmV3X3JlZiA9IGpmZnMyX2xpbmtfbm9kZV9yZWYoYywgbmV3X2plYiwgb2ZzIHwgcmVmX2ZsYWdzKHJhdyksIHJhd2xlbiwgaWMpOworCisJCWlmIChhZGp1c3RfcmVmKSB7CisJCQlCVUdfT04oKmFkanVzdF9yZWYgIT0gcmF3KTsKKwkJCSphZGp1c3RfcmVmID0gbmV3X3JlZjsKKwkJfQorCQlpZiAoZikKKwkJCWpmZnMyX2djX3JlbGVhc2VfaW5vZGUoYywgZik7CisKKwkJaWYgKCFyZWZfb2Jzb2xldGUocmF3KSkgewogCQkJamViLT5kaXJ0eV9zaXplICs9IHJhd2xlbjsKIAkJCWplYi0+dXNlZF9zaXplICAtPSByYXdsZW47CiAJCQljLT5kaXJ0eV9zaXplICs9IHJhd2xlbjsKKwkJCWMtPnVzZWRfc2l6ZSAtPSByYXdsZW47CisJCQlyYXctPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQocmF3KSB8IFJFRl9PQlNPTEVURTsKKwkJCUJVR19PTihyYXctPm5leHRfaW5faW5vKTsKIAkJfQotCQljLT5mcmVlX3NpemUgLT0gcmF3bGVuOwotCQkoKnJhdyktPmZsYXNoX29mZnNldCA9IG9mcyB8IHJlZl9mbGFncygqcmF3KTsKIAkJb2ZzICs9IHJhd2xlbjsKLQkJbmV3X2plYi0+bGFzdF9ub2RlID0gKnJhdzsKLQotCQlyYXcgPSAmKCpyYXcpLT5uZXh0X3BoeXM7CiAJfQogCisJa2ZyZWUoYnVmKTsKKwogCS8qIEZpeCB1cCB0aGUgb3JpZ2luYWwgamViIG5vdyBpdCdzIG9uIHRoZSBiYWRfbGlzdCAqLwotCSpmaXJzdF9yYXcgPSBOVUxMOwotCWlmIChmaXJzdF9yYXcgPT0gJmplYi0+Zmlyc3Rfbm9kZSkgewotCQlqZWItPmxhc3Rfbm9kZSA9IE5VTEw7CisJaWYgKGZpcnN0X3JhdyA9PSBqZWItPmZpcnN0X25vZGUpIHsKIAkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZhaWxpbmcgYmxvY2sgYXQgJTA4eCBpcyBub3cgZW1wdHkuIE1vdmluZyB0byBlcmFzZV9wZW5kaW5nX2xpc3RcbiIsIGplYi0+b2Zmc2V0KSk7CiAJCWxpc3RfZGVsKCZqZWItPmxpc3QpOwogCQlsaXN0X2FkZCgmamViLT5saXN0LCAmYy0+ZXJhc2VfcGVuZGluZ19saXN0KTsKIAkJYy0+bnJfZXJhc2luZ19ibG9ja3MrKzsKIAkJamZmczJfZXJhc2VfcGVuZGluZ190cmlnZ2VyKGMpOwogCX0KLQllbHNlCi0JCWplYi0+bGFzdF9ub2RlID0gY29udGFpbmVyX29mKGZpcnN0X3Jhdywgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiwgbmV4dF9waHlzKTsKIAogCWpmZnMyX2RiZ19hY2N0X3Nhbml0eV9jaGVja19ub2xvY2soYywgamViKTsKLSAgICAgICAgamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2tfbm9sb2NrKGMsIGplYik7CisJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2tfbm9sb2NrKGMsIGplYik7CiAKIAlqZmZzMl9kYmdfYWNjdF9zYW5pdHlfY2hlY2tfbm9sb2NrKGMsIG5ld19qZWIpOwotICAgICAgICBqZmZzMl9kYmdfYWNjdF9wYXJhbm9pYV9jaGVja19ub2xvY2soYywgbmV3X2plYik7CisJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2tfbm9sb2NrKGMsIG5ld19qZWIpOwogCiAJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKLQlEMShwcmludGsoS0VSTl9ERUJVRyAid2J1ZiByZWNvdmVyeSBjb21wbGV0ZWQgT0tcbiIpKTsKKwlEMShwcmludGsoS0VSTl9ERUJVRyAid2J1ZiByZWNvdmVyeSBjb21wbGV0ZWQgT0suIHdidWZfb2ZzIDB4JTA4eCwgbGVuIDB4JXhcbiIsIGMtPndidWZfb2ZzLCBjLT53YnVmX2xlbikpOworCiB9CiAKIC8qIE1lYW5pbmcgb2YgcGFkIGFyZ3VtZW50OgpAQCAtNDEyLDYgKzUyNCw3IEBACiAKIHN0YXRpYyBpbnQgX19qZmZzMl9mbHVzaF93YnVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBpbnQgcGFkKQogeworCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICp3YnVmX2plYjsKIAlpbnQgcmV0OwogCXNpemVfdCByZXRsZW47CiAKQEAgLTQyOSw2ICs1NDIsMTAgQEAKIAlpZiAoIWMtPndidWZfbGVuKQkvKiBhbHJlYWR5IGNoZWNrZWQgYy0+d2J1ZiBhYm92ZSAqLwogCQlyZXR1cm4gMDsKIAorCXdidWZfamViID0gJmMtPmJsb2Nrc1tjLT53YnVmX29mcyAvIGMtPnNlY3Rvcl9zaXplXTsKKwlpZiAoamZmczJfcHJlYWxsb2NfcmF3X25vZGVfcmVmcyhjLCB3YnVmX2plYiwgYy0+bmV4dGJsb2NrLT5hbGxvY2F0ZWRfcmVmcyArIDEpKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qIGNsYWltIHJlbWFpbmluZyBzcGFjZSBvbiB0aGUgcGFnZQogCSAgIHRoaXMgaGFwcGVucywgaWYgd2UgaGF2ZSBhIGNoYW5nZSB0byBhIG5ldyBibG9jaywKIAkgICBvciBpZiBmc3luYyBmb3JjZXMgdXMgdG8gZmx1c2ggdGhlIHdyaXRlYnVmZmVyLgpAQCAtNDU4LDE1ICs1NzUsMTIgQEAKIAlpZiAoYnJlYWttZSsrID09IDIwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiRmFraW5nIHdyaXRlIGVycm9yIGF0IDB4JTA4eFxuIiwgYy0+d2J1Zl9vZnMpOwogCQlicmVha21lID0gMDsKLQkJYy0+bXRkLT53cml0ZV9lY2MoYy0+bXRkLCBjLT53YnVmX29mcywgYy0+d2J1Zl9wYWdlc2l6ZSwKLQkJCQkJJnJldGxlbiwgYnJva2VuYnVmLCBOVUxMLCBjLT5vb2JpbmZvKTsKKwkJYy0+bXRkLT53cml0ZShjLT5tdGQsIGMtPndidWZfb2ZzLCBjLT53YnVmX3BhZ2VzaXplLCAmcmV0bGVuLAorCQkJICAgICAgYnJva2VuYnVmKTsKIAkJcmV0ID0gLUVJTzsKIAl9IGVsc2UKICNlbmRpZgogCi0JaWYgKGpmZnMyX2NsZWFubWFya2VyX29vYihjKSkKLQkJcmV0ID0gYy0+bXRkLT53cml0ZV9lY2MoYy0+bXRkLCBjLT53YnVmX29mcywgYy0+d2J1Zl9wYWdlc2l6ZSwgJnJldGxlbiwgYy0+d2J1ZiwgTlVMTCwgYy0+b29iaW5mbyk7Ci0JZWxzZQogCQlyZXQgPSBjLT5tdGQtPndyaXRlKGMtPm10ZCwgYy0+d2J1Zl9vZnMsIGMtPndidWZfcGFnZXNpemUsICZyZXRsZW4sIGMtPndidWYpOwogCiAJaWYgKHJldCB8fCByZXRsZW4gIT0gYy0+d2J1Zl9wYWdlc2l6ZSkgewpAQCAtNDgzLDMyICs1OTcsMzQgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0KIAkvKiBBZGp1c3QgZnJlZSBzaXplIG9mIHRoZSBibG9jayBpZiB3ZSBwYWRkZWQuICovCiAJaWYgKHBhZCkgewotCQlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOwotCi0JCWplYiA9ICZjLT5ibG9ja3NbYy0+d2J1Zl9vZnMgLyBjLT5zZWN0b3Jfc2l6ZV07CisJCXVpbnQzMl90IHdhc3RlID0gYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuOwogCiAJCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9mbHVzaF93YnVmKCkgYWRqdXN0aW5nIGZyZWVfc2l6ZSBvZiAlc2Jsb2NrIGF0ICUwOHhcbiIsCi0JCQkgIChqZWI9PWMtPm5leHRibG9jayk/Im5leHQiOiIiLCBqZWItPm9mZnNldCkpOworCQkJICAod2J1Zl9qZWI9PWMtPm5leHRibG9jayk/Im5leHQiOiIiLCB3YnVmX2plYi0+b2Zmc2V0KSk7CiAKIAkJLyogd2J1Zl9wYWdlc2l6ZSAtIHdidWZfbGVuIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgdGhhdCdzIHRvIGJlCiAJCSAgIHBhZGRlZC4gSWYgdGhlcmUgaXMgbGVzcyBmcmVlIHNwYWNlIGluIHRoZSBibG9jayB0aGFuIHRoYXQsCiAJCSAgIHNvbWV0aGluZyBzY3Jld2VkIHVwICovCi0JCWlmIChqZWItPmZyZWVfc2l6ZSA8IChjLT53YnVmX3BhZ2VzaXplIC0gYy0+d2J1Zl9sZW4pKSB7CisJCWlmICh3YnVmX2plYi0+ZnJlZV9zaXplIDwgd2FzdGUpIHsKIAkJCXByaW50ayhLRVJOX0NSSVQgImpmZnMyX2ZsdXNoX3didWYoKTogQWNjb3VudGluZyBlcnJvci4gd2J1ZiBhdCAweCUwOHggaGFzIDB4JTAzeCBieXRlcywgMHglMDN4IGxlZnQuXG4iLAotCQkJICAgICAgIGMtPndidWZfb2ZzLCBjLT53YnVmX2xlbiwgYy0+d2J1Zl9wYWdlc2l6ZS1jLT53YnVmX2xlbik7CisJCQkgICAgICAgYy0+d2J1Zl9vZnMsIGMtPndidWZfbGVuLCB3YXN0ZSk7CiAJCQlwcmludGsoS0VSTl9DUklUICJqZmZzMl9mbHVzaF93YnVmKCk6IEJ1dCBmcmVlX3NpemUgZm9yIGJsb2NrIGF0IDB4JTA4eCBpcyBvbmx5IDB4JTA4eFxuIiwKLQkJCSAgICAgICBqZWItPm9mZnNldCwgamViLT5mcmVlX3NpemUpOworCQkJICAgICAgIHdidWZfamViLT5vZmZzZXQsIHdidWZfamViLT5mcmVlX3NpemUpOwogCQkJQlVHKCk7CiAJCX0KLQkJamViLT5mcmVlX3NpemUgLT0gKGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbik7Ci0JCWMtPmZyZWVfc2l6ZSAtPSAoYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuKTsKLQkJamViLT53YXN0ZWRfc2l6ZSArPSAoYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuKTsKLQkJYy0+d2FzdGVkX3NpemUgKz0gKGMtPndidWZfcGFnZXNpemUgLSBjLT53YnVmX2xlbik7Ci0JfQorCisJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworCQlqZmZzMl9saW5rX25vZGVfcmVmKGMsIHdidWZfamViLCAoYy0+d2J1Zl9vZnMgKyBjLT53YnVmX2xlbikgfCBSRUZfT0JTT0xFVEUsIHdhc3RlLCBOVUxMKTsKKwkJLyogRklYTUU6IHRoYXQgbWFkZSBpdCBjb3VudCBhcyBkaXJ0eS4gQ29udmVydCB0byB3YXN0ZWQgKi8KKwkJd2J1Zl9qZWItPmRpcnR5X3NpemUgLT0gd2FzdGU7CisJCWMtPmRpcnR5X3NpemUgLT0gd2FzdGU7CisJCXdidWZfamViLT53YXN0ZWRfc2l6ZSArPSB3YXN0ZTsKKwkJYy0+d2FzdGVkX3NpemUgKz0gd2FzdGU7CisJfSBlbHNlCisJCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAogCS8qIFN0aWNrIGFueSBub3ctb2Jzb2xldGVkIGJsb2NrcyBvbiB0aGUgZXJhc2VfcGVuZGluZ19saXN0ICovCiAJamZmczJfcmVmaWxlX3didWZfYmxvY2tzKGMpOwpAQCAtNjAzLDIwICs3MTksMzAgQEAKIAogCXJldHVybiByZXQ7CiB9Ci1pbnQgamZmczJfZmxhc2hfd3JpdGV2KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqaW52ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgdG8sIHNpemVfdCAqcmV0bGVuLCB1aW50MzJfdCBpbm8pCi17Ci0Jc3RydWN0IGt2ZWMgb3V0dmVjc1szXTsKLQl1aW50MzJfdCB0b3RsZW4gPSAwOwotCXVpbnQzMl90IHNwbGl0X29mcyA9IDA7Ci0JdWludDMyX3Qgb2xkX3RvdGxlbjsKLQlpbnQgcmV0LCBzcGxpdHZlYyA9IC0xOwotCWludCBpbnZlYywgb3V0dmVjOwotCXNpemVfdCB3YnVmX3JldGxlbjsKLQl1bnNpZ25lZCBjaGFyICp3YnVmX3B0cjsKLQlzaXplX3QgZG9uZWxlbiA9IDA7Ci0JdWludDMyX3Qgb3V0dmVjX3RvID0gdG87CiAKLQkvKiBJZiBub3QgTkFORCBmbGFzaCwgZG9uJ3QgYm90aGVyICovCitzdGF0aWMgc2l6ZV90IGpmZnMyX2ZpbGxfd2J1ZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgY29uc3QgdWludDhfdCAqYnVmLAorCQkJICAgICAgc2l6ZV90IGxlbikKK3sKKwlpZiAobGVuICYmICFjLT53YnVmX2xlbiAmJiAobGVuID49IGMtPndidWZfcGFnZXNpemUpKQorCQlyZXR1cm4gMDsKKworCWlmIChsZW4gPiAoYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuKSkKKwkJbGVuID0gYy0+d2J1Zl9wYWdlc2l6ZSAtIGMtPndidWZfbGVuOworCW1lbWNweShjLT53YnVmICsgYy0+d2J1Zl9sZW4sIGJ1ZiwgbGVuKTsKKwljLT53YnVmX2xlbiArPSAodWludDMyX3QpIGxlbjsKKwlyZXR1cm4gbGVuOworfQorCitpbnQgamZmczJfZmxhc2hfd3JpdGV2KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqaW52ZWNzLAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbiwKKwkJICAgICAgIHVpbnQzMl90IGlubykKK3sKKwlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOworCXNpemVfdCB3YnVmX3JldGxlbiwgZG9uZWxlbiA9IDA7CisJdWludDMyX3Qgb3V0dmVjX3RvID0gdG87CisJaW50IHJldCwgaW52ZWM7CisKKwkvKiBJZiBub3Qgd3JpdGVidWZmZXJlZCBmbGFzaCwgZG9uJ3QgYm90aGVyICovCiAJaWYgKCFqZmZzMl9pc193cml0ZWJ1ZmZlcmVkKGMpKQogCQlyZXR1cm4gamZmczJfZmxhc2hfZGlyZWN0X3dyaXRldihjLCBpbnZlY3MsIGNvdW50LCB0bywgcmV0bGVuKTsKIApAQCAtNjI5LDM0ICs3NTUsMjIgQEAKIAkJbWVtc2V0KGMtPndidWYsMHhmZixjLT53YnVmX3BhZ2VzaXplKTsKIAl9CiAKLQkvKiBGaXh1cCB0aGUgd2J1ZiBpZiB3ZSBhcmUgbW92aW5nIHRvIGEgbmV3IGVyYXNlYmxvY2suICBUaGUgY2hlY2tzIGJlbG93Ci0JICAgZmFpbCBmb3IgRUNDJ2QgTk9SIGJlY2F1c2UgY2xlYW5tYXJrZXIgPT0gMTYsIHNvIGEgYmxvY2sgc3RhcnRzIGF0Ci0JICAgeHh4MDAxMC4gICovCi0JaWYgKGpmZnMyX25vcl9lY2MoYykpIHsKLQkJaWYgKCgoYy0+d2J1Zl9vZnMgJSBjLT5zZWN0b3Jfc2l6ZSkgPT0gMCkgJiYgIWMtPndidWZfbGVuKSB7Ci0JCQljLT53YnVmX29mcyA9IFBBR0VfRElWKHRvKTsKLQkJCWMtPndidWZfbGVuID0gUEFHRV9NT0QodG8pOwotCQkJbWVtc2V0KGMtPndidWYsMHhmZixjLT53YnVmX3BhZ2VzaXplKTsKLQkJfQotCX0KLQotCS8qIFNhbml0eSBjaGVja3Mgb24gdGFyZ2V0IGFkZHJlc3MuCi0JICAgSXQncyBwZXJtaXR0ZWQgdG8gd3JpdGUgYXQgUEFEKGMtPndidWZfbGVuK2MtPndidWZfb2ZzKSwKLQkgICBhbmQgaXQncyBwZXJtaXR0ZWQgdG8gd3JpdGUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldwotCSAgIGVyYXNlIGJsb2NrLiBBbnl0aGluZyBlbHNlLCBhbmQgeW91IGRpZS4KLQkgICBOZXcgYmxvY2sgc3RhcnRzIGF0IHh4eDAwMGMgKDAtYiA9IGJsb2NrIGhlYWRlcikKLQkqLworCS8qCisJICogU2FuaXR5IGNoZWNrcyBvbiB0YXJnZXQgYWRkcmVzcy4gIEl0J3MgcGVybWl0dGVkIHRvIHdyaXRlCisJICogYXQgUEFEKGMtPndidWZfbGVuK2MtPndidWZfb2ZzKSwgYW5kIGl0J3MgcGVybWl0dGVkIHRvCisJICogd3JpdGUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBlcmFzZSBibG9jay4gQW55dGhpbmcgZWxzZSwKKwkgKiBhbmQgeW91IGRpZS4gIE5ldyBibG9jayBzdGFydHMgYXQgeHh4MDAwYyAoMC1iID0gYmxvY2sKKwkgKiBoZWFkZXIpCisJICovCiAJaWYgKFNFQ1RPUl9BRERSKHRvKSAhPSBTRUNUT1JfQUREUihjLT53YnVmX29mcykpIHsKIAkJLyogSXQncyBhIHdyaXRlIHRvIGEgbmV3IGJsb2NrICovCiAJCWlmIChjLT53YnVmX2xlbikgewotCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX2ZsYXNoX3dyaXRldigpIHRvIDB4JWx4IGNhdXNlcyBmbHVzaCBvZiB3YnVmIGF0IDB4JTA4eFxuIiwgKHVuc2lnbmVkIGxvbmcpdG8sIGMtPndidWZfb2ZzKSk7CisJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZmxhc2hfd3JpdGV2KCkgdG8gMHglbHggIgorCQkJCSAgImNhdXNlcyBmbHVzaCBvZiB3YnVmIGF0IDB4JTA4eFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nKXRvLCBjLT53YnVmX29mcykpOwogCQkJcmV0ID0gX19qZmZzMl9mbHVzaF93YnVmKGMsIFBBRF9OT0FDQ09VTlQpOwotCQkJaWYgKHJldCkgewotCQkJCS8qIHRoZSB1bmRlcmx5aW5nIGxheWVyIGhhcyB0byBjaGVjayB3YnVmX2xlbiB0byBkbyB0aGUgY2xlYW51cCAqLwotCQkJCUQxKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2ZsdXNoX3didWYoKSBjYWxsZWQgZnJvbSBqZmZzMl9mbGFzaF93cml0ZXYoKSBmYWlsZWQgJWRcbiIsIHJldCkpOwotCQkJCSpyZXRsZW4gPSAwOwotCQkJCWdvdG8gZXhpdDsKLQkJCX0KKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRlcnI7CiAJCX0KIAkJLyogc2V0IHBvaW50ZXIgdG8gbmV3IGJsb2NrICovCiAJCWMtPndidWZfb2ZzID0gUEFHRV9ESVYodG8pOwpAQCAtNjY1LDE2NSArNzc5LDcwIEBACiAKIAlpZiAodG8gIT0gUEFEKGMtPndidWZfb2ZzICsgYy0+d2J1Zl9sZW4pKSB7CiAJCS8qIFdlJ3JlIG5vdCB3cml0aW5nIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB3cml0ZWJ1ZmZlci4gQmFkLiAqLwotCQlwcmludGsoS0VSTl9DUklUICJqZmZzMl9mbGFzaF93cml0ZXYoKTogTm9uLWNvbnRpZ3VvdXMgd3JpdGUgdG8gJTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKXRvKTsKKwkJcHJpbnRrKEtFUk5fQ1JJVCAiamZmczJfZmxhc2hfd3JpdGV2KCk6IE5vbi1jb250aWd1b3VzIHdyaXRlICIKKwkJICAgICAgICJ0byAlMDhseFxuIiwgKHVuc2lnbmVkIGxvbmcpdG8pOwogCQlpZiAoYy0+d2J1Zl9sZW4pCiAJCQlwcmludGsoS0VSTl9DUklUICJ3YnVmIHdhcyBwcmV2aW91c2x5ICUwOHgtJTA4eFxuIiwKLQkJCQkJICBjLT53YnVmX29mcywgYy0+d2J1Zl9vZnMrYy0+d2J1Zl9sZW4pOworCQkJICAgICAgIGMtPndidWZfb2ZzLCBjLT53YnVmX29mcytjLT53YnVmX2xlbik7CiAJCUJVRygpOwogCX0KIAotCS8qIE5vdGUgb3V0dmVjc1szXSBhYm92ZS4gV2Uga25vdyBjb3VudCBpcyBuZXZlciBncmVhdGVyIHRoYW4gMiAqLwotCWlmIChjb3VudCA+IDIpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiamZmczJfZmxhc2hfd3JpdGV2KCk6IGNvdW50IGlzICVsZFxuIiwgY291bnQpOwotCQlCVUcoKTsKLQl9Ci0KLQlpbnZlYyA9IDA7Ci0Jb3V0dmVjID0gMDsKLQotCS8qIEZpbGwgd3JpdGVidWZmZXIgZmlyc3QsIGlmIGFscmVhZHkgaW4gdXNlICovCi0JaWYgKGMtPndidWZfbGVuKSB7Ci0JCXVpbnQzMl90IGludmVjX29mcyA9IDA7Ci0KLQkJLyogYWRqdXN0IGFsaWdubWVudCBvZmZzZXQgKi8KLQkJaWYgKGMtPndidWZfbGVuICE9IFBBR0VfTU9EKHRvKSkgewotCQkJYy0+d2J1Zl9sZW4gPSBQQUdFX01PRCh0byk7Ci0JCQkvKiB0YWtlIGNhcmUgb2YgYWxpZ25tZW50IHRvIG5leHQgcGFnZSAqLwotCQkJaWYgKCFjLT53YnVmX2xlbikKLQkJCQljLT53YnVmX2xlbiA9IGMtPndidWZfcGFnZXNpemU7Ci0JCX0KLQotCQl3aGlsZShjLT53YnVmX2xlbiA8IGMtPndidWZfcGFnZXNpemUpIHsKLQkJCXVpbnQzMl90IHRoaXNsZW47Ci0KLQkJCWlmIChpbnZlYyA9PSBjb3VudCkKLQkJCQlnb3RvIGFsbGRvbmU7Ci0KLQkJCXRoaXNsZW4gPSBjLT53YnVmX3BhZ2VzaXplIC0gYy0+d2J1Zl9sZW47Ci0KLQkJCWlmICh0aGlzbGVuID49IGludmVjc1tpbnZlY10uaW92X2xlbikKLQkJCQl0aGlzbGVuID0gaW52ZWNzW2ludmVjXS5pb3ZfbGVuOwotCi0JCQlpbnZlY19vZnMgPSB0aGlzbGVuOwotCi0JCQltZW1jcHkoYy0+d2J1ZiArIGMtPndidWZfbGVuLCBpbnZlY3NbaW52ZWNdLmlvdl9iYXNlLCB0aGlzbGVuKTsKLQkJCWMtPndidWZfbGVuICs9IHRoaXNsZW47Ci0JCQlkb25lbGVuICs9IHRoaXNsZW47Ci0JCQkvKiBHZXQgbmV4dCBpbnZlYywgaWYgYWN0dWFsIGRpZCBub3QgZmlsbCB0aGUgYnVmZmVyICovCi0JCQlpZiAoYy0+d2J1Zl9sZW4gPCBjLT53YnVmX3BhZ2VzaXplKQotCQkJCWludmVjKys7Ci0JCX0KLQotCQkvKiB3cml0ZSBidWZmZXIgaXMgZnVsbCwgZmx1c2ggYnVmZmVyICovCi0JCXJldCA9IF9famZmczJfZmx1c2hfd2J1ZihjLCBOT1BBRCk7Ci0JCWlmIChyZXQpIHsKLQkJCS8qIHRoZSB1bmRlcmx5aW5nIGxheWVyIGhhcyB0byBjaGVjayB3YnVmX2xlbiB0byBkbyB0aGUgY2xlYW51cCAqLwotCQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfZmx1c2hfd2J1ZigpIGNhbGxlZCBmcm9tIGpmZnMyX2ZsYXNoX3dyaXRldigpIGZhaWxlZCAlZFxuIiwgcmV0KSk7Ci0JCQkvKiBSZXRsZW4gemVybyB0byBtYWtlIHN1cmUgb3VyIGNhbGxlciBkb2Vzbid0IG1hcmsgdGhlIHNwYWNlIGRpcnR5LgotCQkJICAgV2UndmUgYWxyZWFkeSBkb25lIGV2ZXJ5dGhpbmcgdGhhdCdzIG5lY2Vzc2FyeSAqLwotCQkJKnJldGxlbiA9IDA7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQkJb3V0dmVjX3RvICs9IGRvbmVsZW47Ci0JCWMtPndidWZfb2ZzID0gb3V0dmVjX3RvOwotCi0JCS8qIEFsbCBpbnZlY3MgZG9uZSA/ICovCi0JCWlmIChpbnZlYyA9PSBjb3VudCkKLQkJCWdvdG8gYWxsZG9uZTsKLQotCQkvKiBTZXQgdXAgdGhlIGZpcnN0IG91dHZlYywgY29udGFpbmluZyB0aGUgcmVtYWluZGVyIG9mIHRoZQotCQkgICBpbnZlYyB3ZSBwYXJ0aWFsbHkgdXNlZCAqLwotCQlpZiAoaW52ZWNzW2ludmVjXS5pb3ZfbGVuID4gaW52ZWNfb2ZzKSB7Ci0JCQlvdXR2ZWNzWzBdLmlvdl9iYXNlID0gaW52ZWNzW2ludmVjXS5pb3ZfYmFzZStpbnZlY19vZnM7Ci0JCQl0b3RsZW4gPSBvdXR2ZWNzWzBdLmlvdl9sZW4gPSBpbnZlY3NbaW52ZWNdLmlvdl9sZW4taW52ZWNfb2ZzOwotCQkJaWYgKHRvdGxlbiA+IGMtPndidWZfcGFnZXNpemUpIHsKLQkJCQlzcGxpdHZlYyA9IG91dHZlYzsKLQkJCQlzcGxpdF9vZnMgPSBvdXR2ZWNzWzBdLmlvdl9sZW4gLSBQQUdFX01PRCh0b3RsZW4pOwotCQkJfQotCQkJb3V0dmVjKys7Ci0JCX0KLQkJaW52ZWMrKzsKLQl9Ci0KLQkvKiBPSywgbm93IHdlJ3ZlIGZsdXNoZWQgdGhlIHdidWYgYW5kIHRoZSBzdGFydCBvZiB0aGUgYml0cwotCSAgIHdlIGhhdmUgYmVlbiBhc2tlZCB0byB3cml0ZSwgbm93IHRvIHdyaXRlIHRoZSByZXN0Li4uLiAqLwotCi0JLyogdG90bGVuIGhvbGRzIHRoZSBhbW91bnQgb2YgZGF0YSBzdGlsbCB0byBiZSB3cml0dGVuICovCi0Jb2xkX3RvdGxlbiA9IHRvdGxlbjsKLQlmb3IgKCA7IGludmVjIDwgY291bnQ7IGludmVjKyssb3V0dmVjKysgKSB7Ci0JCW91dHZlY3Nbb3V0dmVjXS5pb3ZfYmFzZSA9IGludmVjc1tpbnZlY10uaW92X2Jhc2U7Ci0JCXRvdGxlbiArPSBvdXR2ZWNzW291dHZlY10uaW92X2xlbiA9IGludmVjc1tpbnZlY10uaW92X2xlbjsKLQkJaWYgKFBBR0VfRElWKHRvdGxlbikgIT0gUEFHRV9ESVYob2xkX3RvdGxlbikpIHsKLQkJCXNwbGl0dmVjID0gb3V0dmVjOwotCQkJc3BsaXRfb2ZzID0gb3V0dmVjc1tvdXR2ZWNdLmlvdl9sZW4gLSBQQUdFX01PRCh0b3RsZW4pOwotCQkJb2xkX3RvdGxlbiA9IHRvdGxlbjsKKwkvKiBhZGp1c3QgYWxpZ25tZW50IG9mZnNldCAqLworCWlmIChjLT53YnVmX2xlbiAhPSBQQUdFX01PRCh0bykpIHsKKwkJYy0+d2J1Zl9sZW4gPSBQQUdFX01PRCh0byk7CisJCS8qIHRha2UgY2FyZSBvZiBhbGlnbm1lbnQgdG8gbmV4dCBwYWdlICovCisJCWlmICghYy0+d2J1Zl9sZW4pIHsKKwkJCWMtPndidWZfbGVuID0gYy0+d2J1Zl9wYWdlc2l6ZTsKKwkJCXJldCA9IF9famZmczJfZmx1c2hfd2J1ZihjLCBOT1BBRCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0ZXJyOwogCQl9CiAJfQogCi0JLyogTm93IHRoZSBvdXR2ZWNzIGFycmF5IGhvbGRzIGFsbCB0aGUgcmVtYWluaW5nIGRhdGEgdG8gd3JpdGUgKi8KLQkvKiBVcCB0byBzcGxpdHZlYyxzcGxpdF9vZnMgaXMgdG8gYmUgd3JpdHRlbiBpbW1lZGlhdGVseS4gVGhlIHJlc3QKLQkgICBnb2VzIGludG8gdGhlIChub3ctZW1wdHkpIHdidWYgKi8KKwlmb3IgKGludmVjID0gMDsgaW52ZWMgPCBjb3VudDsgaW52ZWMrKykgeworCQlpbnQgdmxlbiA9IGludmVjc1tpbnZlY10uaW92X2xlbjsKKwkJdWludDhfdCAqdiA9IGludmVjc1tpbnZlY10uaW92X2Jhc2U7CiAKLQlpZiAoc3BsaXR2ZWMgIT0gLTEpIHsKLQkJdWludDMyX3QgcmVtYWluZGVyOworCQl3YnVmX3JldGxlbiA9IGpmZnMyX2ZpbGxfd2J1ZihjLCB2LCB2bGVuKTsKIAotCQlyZW1haW5kZXIgPSBvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfbGVuIC0gc3BsaXRfb2ZzOwotCQlvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfbGVuID0gc3BsaXRfb2ZzOwotCi0JCS8qIFdlIGRpZCBjcm9zcyBhIHBhZ2UgYm91bmRhcnksIHNvIHdlIHdyaXRlIHNvbWUgbm93ICovCi0JCWlmIChqZmZzMl9jbGVhbm1hcmtlcl9vb2IoYykpCi0JCQlyZXQgPSBjLT5tdGQtPndyaXRldl9lY2MoYy0+bXRkLCBvdXR2ZWNzLCBzcGxpdHZlYysxLCBvdXR2ZWNfdG8sICZ3YnVmX3JldGxlbiwgTlVMTCwgYy0+b29iaW5mbyk7Ci0JCWVsc2UKLQkJCXJldCA9IGpmZnMyX2ZsYXNoX2RpcmVjdF93cml0ZXYoYywgb3V0dmVjcywgc3BsaXR2ZWMrMSwgb3V0dmVjX3RvLCAmd2J1Zl9yZXRsZW4pOwotCi0JCWlmIChyZXQgPCAwIHx8IHdidWZfcmV0bGVuICE9IFBBR0VfRElWKHRvdGxlbikpIHsKLQkJCS8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2ZSBubyBwcm9ibGVtLAotCQkJICAgYy0+d2J1ZiBpcyBlbXB0eS4gSG93ZXZlciByZWZpbGUgbmV4dGJsb2NrIHRvIGF2b2lkCi0JCQkgICB3cml0aW5nIGFnYWluIHRvIHNhbWUgYWRkcmVzcy4KLQkJCSovCi0JCQlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOwotCi0JCQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0KLQkJCWplYiA9ICZjLT5ibG9ja3Nbb3V0dmVjX3RvIC8gYy0+c2VjdG9yX3NpemVdOwotCQkJamZmczJfYmxvY2tfcmVmaWxlKGMsIGplYiwgUkVGSUxFX0FOWVdBWSk7Ci0KLQkJCSpyZXRsZW4gPSAwOwotCQkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0JCQlnb3RvIGV4aXQ7CisJCWlmIChjLT53YnVmX2xlbiA9PSBjLT53YnVmX3BhZ2VzaXplKSB7CisJCQlyZXQgPSBfX2pmZnMyX2ZsdXNoX3didWYoYywgTk9QQUQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIG91dGVycjsKIAkJfQotCisJCXZsZW4gLT0gd2J1Zl9yZXRsZW47CisJCW91dHZlY190byArPSB3YnVmX3JldGxlbjsKIAkJZG9uZWxlbiArPSB3YnVmX3JldGxlbjsKLQkJYy0+d2J1Zl9vZnMgPSBQQUdFX0RJVihvdXR2ZWNfdG8pICsgUEFHRV9ESVYodG90bGVuKTsKKwkJdiArPSB3YnVmX3JldGxlbjsKIAotCQlpZiAocmVtYWluZGVyKSB7Ci0JCQlvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfYmFzZSArPSBzcGxpdF9vZnM7Ci0JCQlvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfbGVuID0gcmVtYWluZGVyOwotCQl9IGVsc2UgewotCQkJc3BsaXR2ZWMrKzsKKwkJaWYgKHZsZW4gPj0gYy0+d2J1Zl9wYWdlc2l6ZSkgeworCQkJcmV0ID0gYy0+bXRkLT53cml0ZShjLT5tdGQsIG91dHZlY190bywgUEFHRV9ESVYodmxlbiksCisJCQkJCSAgICAmd2J1Zl9yZXRsZW4sIHYpOworCQkJaWYgKHJldCA8IDAgfHwgd2J1Zl9yZXRsZW4gIT0gUEFHRV9ESVYodmxlbikpCisJCQkJZ290byBvdXRmaWxlOworCisJCQl2bGVuIC09IHdidWZfcmV0bGVuOworCQkJb3V0dmVjX3RvICs9IHdidWZfcmV0bGVuOworCQkJYy0+d2J1Zl9vZnMgPSBvdXR2ZWNfdG87CisJCQlkb25lbGVuICs9IHdidWZfcmV0bGVuOworCQkJdiArPSB3YnVmX3JldGxlbjsKIAkJfQogCi0JfSBlbHNlIHsKLQkJc3BsaXR2ZWMgPSAwOworCQl3YnVmX3JldGxlbiA9IGpmZnMyX2ZpbGxfd2J1ZihjLCB2LCB2bGVuKTsKKwkJaWYgKGMtPndidWZfbGVuID09IGMtPndidWZfcGFnZXNpemUpIHsKKwkJCXJldCA9IF9famZmczJfZmx1c2hfd2J1ZihjLCBOT1BBRCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0ZXJyOworCQl9CisKKwkJb3V0dmVjX3RvICs9IHdidWZfcmV0bGVuOworCQlkb25lbGVuICs9IHdidWZfcmV0bGVuOwogCX0KIAotCS8qIE5vdyBzcGxpdHZlYyBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBiaXRzIHdlIGhhdmUgdG8gY29weQotCSAgIGludG8gdGhlIHdidWYgKi8KLQl3YnVmX3B0ciA9IGMtPndidWY7Ci0KLQlmb3IgKCA7IHNwbGl0dmVjIDwgb3V0dmVjOyBzcGxpdHZlYysrKSB7Ci0JCS8qIERvbid0IGNvcHkgdGhlIHdidWYgaW50byBpdHNlbGYgKi8KLQkJaWYgKG91dHZlY3Nbc3BsaXR2ZWNdLmlvdl9iYXNlID09IGMtPndidWYpCi0JCQljb250aW51ZTsKLQkJbWVtY3B5KHdidWZfcHRyLCBvdXR2ZWNzW3NwbGl0dmVjXS5pb3ZfYmFzZSwgb3V0dmVjc1tzcGxpdHZlY10uaW92X2xlbik7Ci0JCXdidWZfcHRyICs9IG91dHZlY3Nbc3BsaXR2ZWNdLmlvdl9sZW47Ci0JCWRvbmVsZW4gKz0gb3V0dmVjc1tzcGxpdHZlY10uaW92X2xlbjsKLQl9Ci0JYy0+d2J1Zl9sZW4gPSB3YnVmX3B0ciAtIGMtPndidWY7Ci0KLQkvKiBJZiB0aGVyZSdzIGEgcmVtYWluZGVyIGluIHRoZSB3YnVmIGFuZCBpdCdzIGEgbm9uLUdDIHdyaXRlLAotCSAgIHJlbWVtYmVyIHRoYXQgdGhlIHdidWYgYWZmZWN0cyB0aGlzIGlubyAqLwotYWxsZG9uZToKKwkvKgorCSAqIElmIHRoZXJlJ3MgYSByZW1haW5kZXIgaW4gdGhlIHdidWYgYW5kIGl0J3MgYSBub24tR0Mgd3JpdGUsCisJICogcmVtZW1iZXIgdGhhdCB0aGUgd2J1ZiBhZmZlY3RzIHRoaXMgaW5vCisJICovCiAJKnJldGxlbiA9IGRvbmVsZW47CiAKIAlpZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7CkBAIC04MzYsOCArODU1LDI0IEBACiAJCWpmZnMyX3didWZfZGlydGllc19pbm9kZShjLCBpbm8pOwogCiAJcmV0ID0gMDsKKwl1cF93cml0ZSgmYy0+d2J1Zl9zZW0pOworCXJldHVybiByZXQ7CiAKLWV4aXQ6CitvdXRmaWxlOgorCS8qCisJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIG5vIHByb2JsZW0sIGMtPndidWYgaXMgZW1wdHkuIEhvd2V2ZXIKKwkgKiByZWZpbGUgbmV4dGJsb2NrIHRvIGF2b2lkIHdyaXRpbmcgYWdhaW4gdG8gc2FtZSBhZGRyZXNzLgorCSAqLworCisJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCisJamViID0gJmMtPmJsb2Nrc1tvdXR2ZWNfdG8gLyBjLT5zZWN0b3Jfc2l6ZV07CisJamZmczJfYmxvY2tfcmVmaWxlKGMsIGplYiwgUkVGSUxFX0FOWVdBWSk7CisKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworb3V0ZXJyOgorCSpyZXRsZW4gPSAwOwogCXVwX3dyaXRlKCZjLT53YnVmX3NlbSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTg0Niw3ICs4ODEsOCBAQAogICoJVGhpcyBpcyB0aGUgZW50cnkgZm9yIGZsYXNoIHdyaXRlLgogICoJQ2hlY2ssIGlmIHdlIHdvcmsgb24gTkFORCBGTEFTSCwgaWYgc28gYnVpbGQgYW4ga3ZlYyBhbmQgd3JpdGUgaXQgdmlhIHZyaXRldgogKi8KLWludCBqZmZzMl9mbGFzaF93cml0ZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQoraW50IGpmZnMyX2ZsYXNoX3dyaXRlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAorCQkgICAgICBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCiB7CiAJc3RydWN0IGt2ZWMgdmVjc1sxXTsKIApAQCAtODcxLDI1ICs5MDcsMjMgQEAKIAogCS8qIFJlYWQgZmxhc2ggKi8KIAlkb3duX3JlYWQoJmMtPndidWZfc2VtKTsKLQlpZiAoamZmczJfY2xlYW5tYXJrZXJfb29iKGMpKQotCQlyZXQgPSBjLT5tdGQtPnJlYWRfZWNjKGMtPm10ZCwgb2ZzLCBsZW4sIHJldGxlbiwgYnVmLCBOVUxMLCBjLT5vb2JpbmZvKTsKLQllbHNlCi0JCXJldCA9IGMtPm10ZC0+cmVhZChjLT5tdGQsIG9mcywgbGVuLCByZXRsZW4sIGJ1Zik7CisJcmV0ID0gYy0+bXRkLT5yZWFkKGMtPm10ZCwgb2ZzLCBsZW4sIHJldGxlbiwgYnVmKTsKIAotCWlmICggKHJldCA9PSAtRUJBRE1TRykgJiYgKCpyZXRsZW4gPT0gbGVuKSApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXRkLT5yZWFkKDB4JXp4IGJ5dGVzIGZyb20gMHglbGx4KSByZXR1cm5lZCBFQ0MgZXJyb3JcbiIsCi0JCSAgICAgICBsZW4sIG9mcyk7CisJaWYgKCAocmV0ID09IC1FQkFETVNHIHx8IHJldCA9PSAtRVVDTEVBTikgJiYgKCpyZXRsZW4gPT0gbGVuKSApIHsKKwkJaWYgKHJldCA9PSAtRUJBRE1TRykKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10ZC0+cmVhZCgweCV6eCBieXRlcyBmcm9tIDB4JWxseCkiCisJCQkgICAgICAgIiByZXR1cm5lZCBFQ0MgZXJyb3JcbiIsIGxlbiwgb2ZzKTsKIAkJLyoKLQkJICogV2UgaGF2ZSB0aGUgcmF3IGRhdGEgd2l0aG91dCBFQ0MgY29ycmVjdGlvbiBpbiB0aGUgYnVmZmVyLCBtYXliZQotCQkgKiB3ZSBhcmUgbHVja3kgYW5kIGFsbCBkYXRhIG9yIHBhcnRzIGFyZSBjb3JyZWN0LiBXZSBjaGVjayB0aGUgbm9kZS4KLQkJICogSWYgZGF0YSBhcmUgY29ycnVwdGVkIG5vZGUgY2hlY2sgd2lsbCBzb3J0IGl0IG91dC4KLQkJICogV2Uga2VlcCB0aGlzIGJsb2NrLCBpdCB3aWxsIGZhaWwgb24gd3JpdGUgb3IgZXJhc2UgYW5kIHRoZSB3ZQotCQkgKiBtYXJrIGl0IGJhZC4gT3Igc2hvdWxkIHdlIGRvIHRoYXQgbm93PyBCdXQgd2Ugc2hvdWxkIGdpdmUgaGltIGEgY2hhbmNlLgotCQkgKiBNYXliZSB3ZSBoYWQgYSBzeXN0ZW0gY3Jhc2ggb3IgcG93ZXIgbG9zcyBiZWZvcmUgdGhlIGVjYyB3cml0ZSBvcgotCQkgKiBhIGVyYXNlIHdhcyBjb21wbGV0ZWQuCisJCSAqIFdlIGhhdmUgdGhlIHJhdyBkYXRhIHdpdGhvdXQgRUNDIGNvcnJlY3Rpb24gaW4gdGhlIGJ1ZmZlciwKKwkJICogbWF5YmUgd2UgYXJlIGx1Y2t5IGFuZCBhbGwgZGF0YSBvciBwYXJ0cyBhcmUgY29ycmVjdC4gV2UKKwkJICogY2hlY2sgdGhlIG5vZGUuICBJZiBkYXRhIGFyZSBjb3JydXB0ZWQgbm9kZSBjaGVjayB3aWxsIHNvcnQKKwkJICogaXQgb3V0LiAgV2Uga2VlcCB0aGlzIGJsb2NrLCBpdCB3aWxsIGZhaWwgb24gd3JpdGUgb3IgZXJhc2UKKwkJICogYW5kIHRoZSB3ZSBtYXJrIGl0IGJhZC4gT3Igc2hvdWxkIHdlIGRvIHRoYXQgbm93PyBCdXQgd2UKKwkJICogc2hvdWxkIGdpdmUgaGltIGEgY2hhbmNlLiAgTWF5YmUgd2UgaGFkIGEgc3lzdGVtIGNyYXNoIG9yCisJCSAqIHBvd2VyIGxvc3MgYmVmb3JlIHRoZSBlY2Mgd3JpdGUgb3IgYSBlcmFzZSB3YXMgY29tcGxldGVkLgogCQkgKiBTbyB3ZSByZXR1cm4gc3VjY2Vzcy4gOikKIAkJICovCi0JIAlyZXQgPSAwOworCQlyZXQgPSAwOwogCX0KIAogCS8qIGlmIG5vIHdyaXRlYnVmZmVyIGF2YWlsYWJsZSBvciB3cml0ZSBidWZmZXIgZW1wdHksIHJldHVybiAqLwpAQCAtOTExLDcgKzk0NSw3IEBACiAJCW9yYmYgPSAoYy0+d2J1Zl9vZnMgLSBvZnMpOwkvKiBvZmZzZXQgaW4gcmVhZCBidWZmZXIgKi8KIAkJaWYgKG9yYmYgPiBsZW4pCQkJLyogaXMgd3JpdGUgYmV5b25kIHdyaXRlIGJ1ZmZlciA/ICovCiAJCQlnb3RvIGV4aXQ7Ci0JCWx3YmYgPSBsZW4gLSBvcmJmOyAJCS8qIG51bWJlciBvZiBieXRlcyB0byBjb3B5ICovCisJCWx3YmYgPSBsZW4gLSBvcmJmOwkJLyogbnVtYmVyIG9mIGJ5dGVzIHRvIGNvcHkgKi8KIAkJaWYgKGx3YmYgPiBjLT53YnVmX2xlbikKIAkJCWx3YmYgPSBjLT53YnVmX2xlbjsKIAl9CkBAIC05MjMsMTU4ICs5NTcsMTU5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2RlZmluZSBOUl9PT0JfU0NBTl9QQUdFUwk0CisKIC8qCi0gKglDaGVjaywgaWYgdGhlIG91dCBvZiBiYW5kIGFyZWEgaXMgZW1wdHkKKyAqIENoZWNrLCBpZiB0aGUgb3V0IG9mIGJhbmQgYXJlYSBpcyBlbXB0eQogICovCi1pbnQgamZmczJfY2hlY2tfb29iX2VtcHR5KCBzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiwgaW50IG1vZGUpCitpbnQgamZmczJfY2hlY2tfb29iX2VtcHR5KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJICBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViLCBpbnQgbW9kZSkKIHsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0JaW50IAlyZXQgPSAwOwotCWludAlpLGxlbixwYWdlOwotCXNpemVfdCAgcmV0bGVuOwotCWludAlvb2Jfc2l6ZTsKKwlpbnQgaSwgcGFnZSwgcmV0OworCWludCBvb2JzaXplID0gYy0+bXRkLT5vb2JzaXplOworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CiAKLQkvKiBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgYWxsIG9vYiBkYXRhIGluIHRoaXMgc2VjdG9yICovCi0Jb29iX3NpemUgPSBjLT5tdGQtPm9vYnNpemU7Ci0JbGVuID0gNCAqIG9vYl9zaXplOwotCWJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgImpmZnMyX2NoZWNrX29vYl9lbXB0eSgpOiBhbGxvY2F0aW9uIG9mIHRlbXBvcmFyeSBkYXRhIGJ1ZmZlciBmb3Igb29iIGNoZWNrIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQkvKgotCSAqIGlmIG1vZGUgPSAwLCB3ZSBzY2FuIGZvciBhIHRvdGFsIGVtcHR5IG9vYiBhcmVhLCBlbHNlIHdlIGhhdmUKLQkgKiB0byB0YWtlIGNhcmUgb2YgdGhlIGNsZWFubWFya2VyIGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBibG9jawotCSovCi0JcmV0ID0gamZmczJfZmxhc2hfcmVhZF9vb2IoYywgamViLT5vZmZzZXQsIGxlbiAsICZyZXRsZW4sIGJ1Zik7CisJb3BzLmxlbiA9IE5SX09PQl9TQ0FOX1BBR0VTICogb29ic2l6ZTsKKwlvcHMub29ibGVuID0gb29ic2l6ZTsKKwlvcHMub29iYnVmID0gYy0+b29iYnVmOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMuZGF0YnVmID0gTlVMTDsKKwlvcHMubW9kZSA9IE1URF9PT0JfUExBQ0U7CisKKwlyZXQgPSBjLT5tdGQtPnJlYWRfb29iKGMtPm10ZCwgamViLT5vZmZzZXQsICZvcHMpOwogCWlmIChyZXQpIHsKLQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfb29iX2VtcHR5KCk6IFJlYWQgT09CIGZhaWxlZCAlZCBmb3IgYmxvY2sgYXQgJTA4eFxuIiwgcmV0LCBqZWItPm9mZnNldCkpOwotCQlnb3RvIG91dDsKKwkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfb29iX2VtcHR5KCk6IFJlYWQgT09CICIKKwkJCSAgImZhaWxlZCAlZCBmb3IgYmxvY2sgYXQgJTA4eFxuIiwgcmV0LCBqZWItPm9mZnNldCkpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChyZXRsZW4gPCBsZW4pIHsKLQkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfb29iX2VtcHR5KCk6IFJlYWQgT09CIHJldHVybiBzaG9ydCByZWFkICIKLQkJCSAgIiglemQgYnl0ZXMgbm90ICVkKSBmb3IgYmxvY2sgYXQgJTA4eFxuIiwgcmV0bGVuLCBsZW4sIGplYi0+b2Zmc2V0KSk7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gb3V0OworCWlmIChvcHMucmV0bGVuIDwgb3BzLmxlbikgeworCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19vb2JfZW1wdHkoKTogUmVhZCBPT0IgIgorCQkJICAicmV0dXJuZWQgc2hvcnQgcmVhZCAoJXpkIGJ5dGVzIG5vdCAlZCkgZm9yIGJsb2NrICIKKwkJCSAgImF0ICUwOHhcbiIsIG9wcy5yZXRsZW4sIG9wcy5sZW4sIGplYi0+b2Zmc2V0KSk7CisJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIFNwZWNpYWwgY2hlY2sgZm9yIGZpcnN0IHBhZ2UgKi8KLQlmb3IoaSA9IDA7IGkgPCBvb2Jfc2l6ZSA7IGkrKykgeworCWZvcihpID0gMDsgaSA8IG9vYnNpemUgOyBpKyspIHsKIAkJLyogWWVhaCwgd2Uga25vdyBhYm91dCB0aGUgY2xlYW5tYXJrZXIuICovCiAJCWlmIChtb2RlICYmIGkgPj0gYy0+ZnNkYXRhX3BvcyAmJgogCQkgICAgaSA8IGMtPmZzZGF0YV9wb3MgKyBjLT5mc2RhdGFfbGVuKQogCQkJY29udGludWU7CiAKLQkJaWYgKGJ1ZltpXSAhPSAweEZGKSB7Ci0JCQlEMihwcmludGsoS0VSTl9ERUJVRyAiRm91bmQgJTAyeCBhdCAleCBpbiBPT0IgZm9yICUwOHhcbiIsCi0JCQkJICBidWZbaV0sIGksIGplYi0+b2Zmc2V0KSk7Ci0JCQlyZXQgPSAxOwotCQkJZ290byBvdXQ7CisJCWlmIChvcHMub29iYnVmW2ldICE9IDB4RkYpIHsKKwkJCUQyKHByaW50ayhLRVJOX0RFQlVHICJGb3VuZCAlMDJ4IGF0ICV4IGluIE9PQiBmb3IgIgorCQkJCSAgIiUwOHhcbiIsIG9wcy5vb2JidWZbaV0sIGksIGplYi0+b2Zmc2V0KSk7CisJCQlyZXR1cm4gMTsKIAkJfQogCX0KIAogCS8qIHdlIGtub3csIHdlIGFyZSBhbGlnbmVkIDopICovCi0JZm9yIChwYWdlID0gb29iX3NpemU7IHBhZ2UgPCBsZW47IHBhZ2UgKz0gc2l6ZW9mKGxvbmcpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZGF0ID0gKih1bnNpZ25lZCBsb25nICopKCZidWZbcGFnZV0pOwotCQlpZihkYXQgIT0gLTEpIHsKLQkJCXJldCA9IDE7Ci0JCQlnb3RvIG91dDsKLQkJfQorCWZvciAocGFnZSA9IG9vYnNpemU7IHBhZ2UgPCBvcHMubGVuOyBwYWdlICs9IHNpemVvZihsb25nKSkgeworCQlsb25nIGRhdCA9ICoobG9uZyAqKSgmb3BzLm9vYmJ1ZltwYWdlXSk7CisJCWlmKGRhdCAhPSAtMSkKKwkJCXJldHVybiAxOwogCX0KLQotb3V0OgotCWtmcmVlKGJ1Zik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgotKglTY2FuIGZvciBhIHZhbGlkIGNsZWFubWFya2VyIGFuZCBmb3IgYmFkIGJsb2NrcwotKglGb3IgdmlydHVhbCBibG9ja3MgKGNvbmNhdGVuYXRlZCBwaHlzaWNhbCBibG9ja3MpIGNoZWNrIHRoZSBjbGVhbm1hcmtlcgotKglvbmx5IGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaXJzdCBwaHlzaWNhbCBibG9jaywgYnV0IHNjYW4gZm9yIGJhZCBibG9ja3MgaW4gYWxsCi0qCXBoeXNpY2FsIGJsb2NrcwotKi8KLWludCBqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyIChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYikKKyAqIFNjYW4gZm9yIGEgdmFsaWQgY2xlYW5tYXJrZXIgYW5kIGZvciBiYWQgYmxvY2tzCisgKi8KK2ludCBqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyIChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkgIHN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIpCiB7CiAJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBuOwotCXVuc2lnbmVkIGNoYXIgYnVmWzIgKiBOQU5EX01BWF9PT0JTSVpFXTsKLQl1bnNpZ25lZCBjaGFyICpwOwotCWludCByZXQsIGksIGNudCwgcmV0dmFsID0gMDsKLQlzaXplX3QgcmV0bGVuLCBvZmZzZXQ7Ci0JaW50IG9vYl9zaXplOworCXN0cnVjdCBtdGRfb29iX29wcyBvcHM7CisJaW50IG9vYnNpemUgPSBjLT5tdGQtPm9vYnNpemU7CisJdW5zaWduZWQgY2hhciAqcCwqYjsKKwlpbnQgaSwgcmV0OworCXNpemVfdCBvZmZzZXQgPSBqZWItPm9mZnNldDsKIAotCW9mZnNldCA9IGplYi0+b2Zmc2V0OwotCW9vYl9zaXplID0gYy0+bXRkLT5vb2JzaXplOwotCi0JLyogTG9vcCB0aHJvdWdoIHRoZSBwaHlzaWNhbCBibG9ja3MgKi8KLQlmb3IgKGNudCA9IDA7IGNudCA8IChjLT5zZWN0b3Jfc2l6ZSAvIGMtPm10ZC0+ZXJhc2VzaXplKTsgY250KyspIHsKLQkJLyogQ2hlY2sgZmlyc3QgaWYgdGhlIGJsb2NrIGlzIGJhZC4gKi8KLQkJaWYgKGMtPm10ZC0+YmxvY2tfaXNiYWQgKGMtPm10ZCwgb2Zmc2V0KSkgewotCQkJRDEgKHByaW50ayAoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6IEJhZCBibG9jayBhdCAlMDh4XG4iLCBqZWItPm9mZnNldCkpOwotCQkJcmV0dXJuIDI7Ci0JCX0KLQkJLyoKLQkJICAgKiAgICBXZSByZWFkIG9vYiBkYXRhIGZyb20gcGFnZSAwIGFuZCAxIG9mIHRoZSBibG9jay4KLQkJICAgKiAgICBwYWdlIDAgY29udGFpbnMgY2xlYW5tYXJrZXIgYW5kIGJhZGJsb2NrIGluZm8KLQkJICAgKiAgICBwYWdlIDEgY29udGFpbnMgZmFpbHVyZSBjb3VudCBvZiB0aGlzIGJsb2NrCi0JCSAqLwotCQlyZXQgPSBjLT5tdGQtPnJlYWRfb29iIChjLT5tdGQsIG9mZnNldCwgb29iX3NpemUgPDwgMSwgJnJldGxlbiwgYnVmKTsKLQotCQlpZiAocmV0KSB7Ci0JCQlEMSAocHJpbnRrIChLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogUmVhZCBPT0IgZmFpbGVkICVkIGZvciBibG9jayBhdCAlMDh4XG4iLCByZXQsIGplYi0+b2Zmc2V0KSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWlmIChyZXRsZW4gPCAob29iX3NpemUgPDwgMSkpIHsKLQkJCUQxIChwcmludGsgKEtFUk5fV0FSTklORyAiamZmczJfY2hlY2tfbmFuZF9jbGVhbm1hcmtlcigpOiBSZWFkIE9PQiByZXR1cm4gc2hvcnQgcmVhZCAoJXpkIGJ5dGVzIG5vdCAlZCkgZm9yIGJsb2NrIGF0ICUwOHhcbiIsIHJldGxlbiwgb29iX3NpemUgPDwgMSwgamViLT5vZmZzZXQpKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJLyogQ2hlY2sgY2xlYW5tYXJrZXIgb25seSBvbiB0aGUgZmlyc3QgcGh5c2ljYWwgYmxvY2sgKi8KLQkJaWYgKCFjbnQpIHsKLQkJCW4ubWFnaWMgPSBjcHVfdG9famUxNiAoSkZGUzJfTUFHSUNfQklUTUFTSyk7Ci0JCQluLm5vZGV0eXBlID0gY3B1X3RvX2plMTYgKEpGRlMyX05PREVUWVBFX0NMRUFOTUFSS0VSKTsKLQkJCW4udG90bGVuID0gY3B1X3RvX2plMzIgKDgpOwotCQkJcCA9ICh1bnNpZ25lZCBjaGFyICopICZuOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgYy0+ZnNkYXRhX2xlbjsgaSsrKSB7Ci0JCQkJaWYgKGJ1ZltjLT5mc2RhdGFfcG9zICsgaV0gIT0gcFtpXSkgewotCQkJCQlyZXR2YWwgPSAxOwotCQkJCX0KLQkJCX0KLQkJCUQxKGlmIChyZXR2YWwgPT0gMSkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogQ2xlYW5tYXJrZXIgbm9kZSBub3QgZGV0ZWN0ZWQgaW4gYmxvY2sgYXQgJTA4eFxuIiwgamViLT5vZmZzZXQpOwotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk9PQiBhdCAlMDh4IHdhcyAiLCBvZmZzZXQpOwotCQkJCWZvciAoaT0wOyBpIDwgb29iX3NpemU7IGkrKykgewotCQkJCQlwcmludGsoIiUwMnggIiwgYnVmW2ldKTsKLQkJCQl9Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJfSkKLQkJfQotCQlvZmZzZXQgKz0gYy0+bXRkLT5lcmFzZXNpemU7CisJLyogQ2hlY2sgZmlyc3QgaWYgdGhlIGJsb2NrIGlzIGJhZC4gKi8KKwlpZiAoYy0+bXRkLT5ibG9ja19pc2JhZChjLT5tdGQsIG9mZnNldCkpIHsKKwkJRDEgKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKSIKKwkJCSAgICI6IEJhZCBibG9jayBhdCAlMDh4XG4iLCBqZWItPm9mZnNldCkpOworCQlyZXR1cm4gMjsKIAl9Ci0JcmV0dXJuIHJldHZhbDsKKworCW9wcy5sZW4gPSBvb2JzaXplOworCW9wcy5vb2JsZW4gPSBvb2JzaXplOworCW9wcy5vb2JidWYgPSBjLT5vb2JidWY7CisJb3BzLm9vYm9mZnMgPSAwOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKworCXJldCA9IGMtPm10ZC0+cmVhZF9vb2IoYy0+bXRkLCBvZmZzZXQsICZvcHMpOworCWlmIChyZXQpIHsKKwkJRDEgKHByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogIgorCQkJICAgIlJlYWQgT09CIGZhaWxlZCAlZCBmb3IgYmxvY2sgYXQgJTA4eFxuIiwKKwkJCSAgIHJldCwgamViLT5vZmZzZXQpKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAob3BzLnJldGxlbiA8IG9wcy5sZW4pIHsKKwkJRDEgKHByaW50ayAoS0VSTl9XQVJOSU5HICJqZmZzMl9jaGVja19uYW5kX2NsZWFubWFya2VyKCk6ICIKKwkJCSAgICAiUmVhZCBPT0IgcmV0dXJuIHNob3J0IHJlYWQgKCV6ZCBieXRlcyBub3QgJWQpICIKKwkJCSAgICAiZm9yIGJsb2NrIGF0ICUwOHhcbiIsIG9wcy5yZXRsZW4sIG9wcy5sZW4sCisJCQkgICAgamViLT5vZmZzZXQpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJbi5tYWdpYyA9IGNwdV90b19qZTE2IChKRkZTMl9NQUdJQ19CSVRNQVNLKTsKKwluLm5vZGV0eXBlID0gY3B1X3RvX2plMTYgKEpGRlMyX05PREVUWVBFX0NMRUFOTUFSS0VSKTsKKwluLnRvdGxlbiA9IGNwdV90b19qZTMyICg4KTsKKwlwID0gKHVuc2lnbmVkIGNoYXIgKikgJm47CisJYiA9IGMtPm9vYmJ1ZiArIGMtPmZzZGF0YV9wb3M7CisKKwlmb3IgKGkgPSBjLT5mc2RhdGFfbGVuOyBpOyBpLS0pIHsKKwkJaWYgKCpiKysgIT0gKnArKykKKwkJCXJldCA9IDE7CisJfQorCisJRDEoaWYgKHJldCA9PSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX2NoZWNrX25hbmRfY2xlYW5tYXJrZXIoKTogIgorCQkgICAgICAgIkNsZWFubWFya2VyIG5vZGUgbm90IGRldGVjdGVkIGluIGJsb2NrIGF0ICUwOHhcbiIsCisJCSAgICAgICBvZmZzZXQpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJPT0IgYXQgJTA4enggd2FzICIsIG9mZnNldCk7CisJCWZvciAoaT0wOyBpIDwgb29ic2l6ZTsgaSsrKQorCQkJcHJpbnRrKCIlMDJ4ICIsIGMtPm9vYmJ1ZltpXSk7CisJCXByaW50aygiXG4iKTsKKwl9KTsKKwlyZXR1cm4gcmV0OwogfQogCi1pbnQgamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYikKK2ludCBqZmZzMl93cml0ZV9uYW5kX2NsZWFubWFya2VyKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCSBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViKQogewotCXN0cnVjdCAJamZmczJfdW5rbm93bl9ub2RlIG47Ci0JaW50IAlyZXQ7Ci0Jc2l6ZV90IAlyZXRsZW47CisJc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSBuOworCWludAlyZXQ7CisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKIAogCW4ubWFnaWMgPSBjcHVfdG9famUxNihKRkZTMl9NQUdJQ19CSVRNQVNLKTsKIAluLm5vZGV0eXBlID0gY3B1X3RvX2plMTYoSkZGUzJfTk9ERVRZUEVfQ0xFQU5NQVJLRVIpOwogCW4udG90bGVuID0gY3B1X3RvX2plMzIoOCk7CiAKLQlyZXQgPSBqZmZzMl9mbGFzaF93cml0ZV9vb2IoYywgamViLT5vZmZzZXQgKyBjLT5mc2RhdGFfcG9zLCBjLT5mc2RhdGFfbGVuLCAmcmV0bGVuLCAodW5zaWduZWQgY2hhciAqKSZuKTsKKwlvcHMubGVuID0gYy0+ZnNkYXRhX2xlbjsKKwlvcHMub29ibGVuID0gYy0+ZnNkYXRhX2xlbjs7CisJb3BzLm9vYmJ1ZiA9ICh1aW50OF90ICopJm47CisJb3BzLm9vYm9mZnMgPSBjLT5mc2RhdGFfcG9zOworCW9wcy5kYXRidWYgPSBOVUxMOworCW9wcy5tb2RlID0gTVREX09PQl9QTEFDRTsKKworCXJldCA9IGMtPm10ZC0+d3JpdGVfb29iKGMtPm10ZCwgamViLT5vZmZzZXQsICZvcHMpOwogCiAJaWYgKHJldCkgewotCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl93cml0ZV9uYW5kX2NsZWFubWFya2VyKCk6IFdyaXRlIGZhaWxlZCBmb3IgYmxvY2sgYXQgJTA4eDogZXJyb3IgJWRcbiIsIGplYi0+b2Zmc2V0LCByZXQpKTsKKwkJRDEocHJpbnRrKEtFUk5fV0FSTklORyAiamZmczJfd3JpdGVfbmFuZF9jbGVhbm1hcmtlcigpOiAiCisJCQkgICJXcml0ZSBmYWlsZWQgZm9yIGJsb2NrIGF0ICUwOHg6IGVycm9yICVkXG4iLAorCQkJICBqZWItPm9mZnNldCwgcmV0KSk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChyZXRsZW4gIT0gYy0+ZnNkYXRhX2xlbikgewotCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl93cml0ZV9uYW5kX2NsZWFubWFya2VyKCk6IFNob3J0IHdyaXRlIGZvciBibG9jayBhdCAlMDh4OiAlemQgbm90ICVkXG4iLCBqZWItPm9mZnNldCwgcmV0bGVuLCBjLT5mc2RhdGFfbGVuKSk7Ci0JCXJldHVybiByZXQ7CisJaWYgKG9wcy5yZXRsZW4gIT0gb3BzLmxlbikgeworCQlEMShwcmludGsoS0VSTl9XQVJOSU5HICJqZmZzMl93cml0ZV9uYW5kX2NsZWFubWFya2VyKCk6ICIKKwkJCSAgIlNob3J0IHdyaXRlIGZvciBibG9jayBhdCAlMDh4OiAlemQgbm90ICVkXG4iLAorCQkJICBqZWItPm9mZnNldCwgb3BzLnJldGxlbiwgb3BzLmxlbikpOworCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTA4LDE4ICsxMTQzLDkgQEAKIAlyZXR1cm4gMTsKIH0KIAotI2RlZmluZSBOQU5EX0pGRlMyX09PQjE2X0ZTREFMRU4JOAotCi1zdGF0aWMgc3RydWN0IG5hbmRfb29iaW5mbyBqZmZzMl9vb2JpbmZvX2RvY2VjYyA9IHsKLQkudXNlZWNjID0gTVREX05BTkRFQ0NfUExBQ0UsCi0JLmVjY2J5dGVzID0gNiwKLQkuZWNjcG9zID0gezAsMSwyLDMsNCw1fQotfTsKLQotCiBzdGF0aWMgaW50IGpmZnMyX25hbmRfc2V0X29vYmluZm8oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCiB7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbyAqb2luZm8gPSAmYy0+bXRkLT5vb2JpbmZvOworCXN0cnVjdCBuYW5kX2VjY2xheW91dCAqb2luZm8gPSBjLT5tdGQtPmVjY2xheW91dDsKIAogCS8qIERvIHRoaXMgb25seSwgaWYgd2UgaGF2ZSBhbiBvb2IgYnVmZmVyICovCiAJaWYgKCFjLT5tdGQtPm9vYnNpemUpCkBAIC0xMTI5LDMzICsxMTU1LDIzIEBACiAJYy0+Y2xlYW5tYXJrZXJfc2l6ZSA9IDA7CiAKIAkvKiBTaG91bGQgd2UgdXNlIGF1dG9wbGFjZW1lbnQgPyAqLwotCWlmIChvaW5mbyAmJiBvaW5mby0+dXNlZWNjID09IE1URF9OQU5ERUNDX0FVVE9QTEFDRSkgewotCQlEMShwcmludGsoS0VSTl9ERUJVRyAiSkZGUzIgdXNpbmcgYXV0b3BsYWNlIG9uIE5BTkRcbiIpKTsKLQkJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLwotCQlpZiAoIW9pbmZvLT5vb2JmcmVlWzBdWzFdKSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORyAiamZmczJfbmFuZF9zZXRfb29iaW5mbygpOiBFZWVwLiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkIGFuZCBubyBlbXB0eSBzcGFjZSBpbiBvb2JcbiIpOwotCQkJcmV0dXJuIC1FTk9TUEM7Ci0JCX0KLQkJYy0+ZnNkYXRhX3BvcyA9IG9pbmZvLT5vb2JmcmVlWzBdWzBdOwotCQljLT5mc2RhdGFfbGVuID0gb2luZm8tPm9vYmZyZWVbMF1bMV07Ci0JCWlmIChjLT5mc2RhdGFfbGVuID4gOCkKLQkJCWMtPmZzZGF0YV9sZW4gPSA4OwotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgaXMganVzdCBhIGxlZ2FjeSBmYWxsYmFjayBhbmQgc2hvdWxkIGdvIGF3YXkgc29vbiAqLwotCQlzd2l0Y2goYy0+bXRkLT5lY2N0eXBlKSB7Ci0JCWNhc2UgTVREX0VDQ19SU19EaXNrT25DaGlwOgotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSkZGUzIgdXNpbmcgRGlza09uQ2hpcCBoYXJkd2FyZSBFQ0Mgd2l0aG91dCBhdXRvcGxhY2VtZW50LiBGaXggaXQhXG4iKTsKLQkJCWMtPm9vYmluZm8gPSAmamZmczJfb29iaW5mb19kb2NlY2M7Ci0JCQljLT5mc2RhdGFfcG9zID0gNjsKLQkJCWMtPmZzZGF0YV9sZW4gPSBOQU5EX0pGRlMyX09PQjE2X0ZTREFMRU47Ci0JCQljLT5iYWRibG9ja19wb3MgPSAxNTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlEMShwcmludGsoS0VSTl9ERUJVRyAiSkZGUzIgb24gTkFORC4gTm8gYXV0b3BsYWNtZW50IGluZm8gZm91bmRcbiIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJaWYgKCFvaW5mbykgeworCQlEMShwcmludGsoS0VSTl9ERUJVRyAiSkZGUzIgb24gTkFORC4gTm8gYXV0b3BsYWNtZW50IGluZm8gZm91bmRcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCisJRDEocHJpbnRrKEtFUk5fREVCVUcgIkpGRlMyIHVzaW5nIGF1dG9wbGFjZSBvbiBOQU5EXG4iKSk7CisJLyogR2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgZnJlZSBieXRlcyAqLworCWlmICghb2luZm8tPm9vYmZyZWVbMF0ubGVuZ3RoKSB7CisJCXByaW50ayAoS0VSTl9XQVJOSU5HICJqZmZzMl9uYW5kX3NldF9vb2JpbmZvKCk6IEVlZXAuIgorCQkJIiBBdXRvcGxhY2VtZW50IHNlbGVjdGVkIGFuZCBubyBlbXB0eSBzcGFjZSBpbiBvb2JcbiIpOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisJYy0+ZnNkYXRhX3BvcyA9IG9pbmZvLT5vb2JmcmVlWzBdLm9mZnNldDsKKwljLT5mc2RhdGFfbGVuID0gb2luZm8tPm9vYmZyZWVbMF0ubGVuZ3RoOworCWlmIChjLT5mc2RhdGFfbGVuID4gOCkKKwkJYy0+ZnNkYXRhX2xlbiA9IDg7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE2NSwxMyArMTE4MSwxNyBAQAogCiAJLyogSW5pdGlhbGlzZSB3cml0ZSBidWZmZXIgKi8KIAlpbml0X3J3c2VtKCZjLT53YnVmX3NlbSk7Ci0JYy0+d2J1Zl9wYWdlc2l6ZSA9IGMtPm10ZC0+b29iYmxvY2s7CisJYy0+d2J1Zl9wYWdlc2l6ZSA9IGMtPm10ZC0+d3JpdGVzaXplOwogCWMtPndidWZfb2ZzID0gMHhGRkZGRkZGRjsKIAogCWMtPndidWYgPSBrbWFsbG9jKGMtPndidWZfcGFnZXNpemUsIEdGUF9LRVJORUwpOwogCWlmICghYy0+d2J1ZikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwljLT5vb2JidWYgPSBrbWFsbG9jKE5SX09PQl9TQ0FOX1BBR0VTICogYy0+bXRkLT5vb2JzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMtPm9vYmJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKIAlyZXMgPSBqZmZzMl9uYW5kX3NldF9vb2JpbmZvKGMpOwogCiAjaWZkZWYgQlJFQUtNRQpAQCAtMTE4OSw2ICsxMjA5LDcgQEAKIHZvaWQgamZmczJfbmFuZF9mbGFzaF9jbGVhbnVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQogewogCWtmcmVlKGMtPndidWYpOworCWtmcmVlKGMtPm9vYmJ1Zik7CiB9CiAKIGludCBqZmZzMl9kYXRhZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpIHsKQEAgLTEyMzYsMzMgKzEyNTcsMTQgQEAKIAlrZnJlZShjLT53YnVmKTsKIH0KIAotaW50IGpmZnMyX25vcl9lY2NfZmxhc2hfc2V0dXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpIHsKLQkvKiBDbGVhbm1hcmtlciBpcyBhY3R1YWxseSBsYXJnZXIgb24gdGhlIGZsYXNoZXMgKi8KLQljLT5jbGVhbm1hcmtlcl9zaXplID0gMTY7Ci0KLQkvKiBJbml0aWFsaXplIHdyaXRlIGJ1ZmZlciAqLwotCWluaXRfcndzZW0oJmMtPndidWZfc2VtKTsKLQljLT53YnVmX3BhZ2VzaXplID0gYy0+bXRkLT5lY2NzaXplOwotCWMtPndidWZfb2ZzID0gMHhGRkZGRkZGRjsKLQotCWMtPndidWYgPSBrbWFsbG9jKGMtPndidWZfcGFnZXNpemUsIEdGUF9LRVJORUwpOwotCWlmICghYy0+d2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBqZmZzMl9ub3JfZWNjX2ZsYXNoX2NsZWFudXAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpIHsKLQlrZnJlZShjLT53YnVmKTsKLX0KLQogaW50IGpmZnMyX25vcl93YnVmX2ZsYXNoX3NldHVwKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKSB7Ci0JLyogQ2xlYW5tYXJrZXIgY3VycmVudGx5IG9jY3VwaWVzIGEgd2hvbGUgcHJvZ3JhbW1pbmcgcmVnaW9uICovCi0JYy0+Y2xlYW5tYXJrZXJfc2l6ZSA9IE1URF9QUk9HUkVHSU9OX1NJWkUoYy0+bXRkKTsKKwkvKiBDbGVhbm1hcmtlciBjdXJyZW50bHkgb2NjdXBpZXMgd2hvbGUgcHJvZ3JhbW1pbmcgcmVnaW9ucywKKwkgKiBlaXRoZXIgb25lIG9yIDIgZm9yIDhCeXRlIFNUTWljcm8gZmxhc2hlcy4gKi8KKwljLT5jbGVhbm1hcmtlcl9zaXplID0gbWF4KDE2dSwgYy0+bXRkLT53cml0ZXNpemUpOwogCiAJLyogSW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgKi8KIAlpbml0X3J3c2VtKCZjLT53YnVmX3NlbSk7Ci0JYy0+d2J1Zl9wYWdlc2l6ZSA9IE1URF9QUk9HUkVHSU9OX1NJWkUoYy0+bXRkKTsKKwljLT53YnVmX3BhZ2VzaXplID0gYy0+bXRkLT53cml0ZXNpemU7CiAJYy0+d2J1Zl9vZnMgPSAweEZGRkZGRkZGOwogCiAJYy0+d2J1ZiA9IGttYWxsb2MoYy0+d2J1Zl9wYWdlc2l6ZSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9mcy9qZmZzMi93cml0ZS5jIGIvZnMvamZmczIvd3JpdGUuYwppbmRleCAxMzQyZjAxLi42NzE3Njc5IDEwMDY0NAotLS0gYS9mcy9qZmZzMi93cml0ZS5jCisrKyBiL2ZzL2pmZnMyL3dyaXRlLmMKQEAgLTM3LDcgKzM3LDYgQEAKIAlmLT5pbm9jYWNoZS0+bm9kZXMgPSAoc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqKWYtPmlub2NhY2hlOwogCWYtPmlub2NhY2hlLT5zdGF0ZSA9IElOT19TVEFURV9QUkVTRU5UOwogCi0KIAlqZmZzMl9hZGRfaW5vX2NhY2hlKGMsIGYtPmlub2NhY2hlKTsKIAlEMShwcmludGsoS0VSTl9ERUJVRyAiamZmczJfZG9fbmV3X2lub2RlKCk6IEFzc2lnbmVkIGlubyMgJWRcbiIsIGYtPmlub2NhY2hlLT5pbm8pKTsKIAlyaS0+aW5vID0gY3B1X3RvX2plMzIoZi0+aW5vY2FjaGUtPmlubyk7CkBAIC01NywxMiArNTYsMTQgQEAKIC8qIGpmZnMyX3dyaXRlX2Rub2RlIC0gZ2l2ZW4gYSByYXdfaW5vZGUsIGFsbG9jYXRlIGEgZnVsbF9kbm9kZSBmb3IgaXQsCiAgICB3cml0ZSBpdCB0byB0aGUgZmxhc2gsIGxpbmsgaXQgaW50byB0aGUgZXhpc3RpbmcgaW5vZGUvZnJhZ21lbnQgbGlzdCAqLwogCi1zdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqamZmczJfd3JpdGVfZG5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCBzdHJ1Y3QgamZmczJfcmF3X2lub2RlICpyaSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdWludDMyX3QgZGF0YWxlbiwgdWludDMyX3QgZmxhc2hfb2ZzLCBpbnQgYWxsb2NfbW9kZSkKK3N0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpqZmZzMl93cml0ZV9kbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsCisJCQkJCSAgIHN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgKnJpLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLAorCQkJCQkgICB1aW50MzJfdCBkYXRhbGVuLCBpbnQgYWxsb2NfbW9kZSkKIAogewotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm47CiAJc2l6ZV90IHJldGxlbjsKKwl1aW50MzJfdCBmbGFzaF9vZnM7CiAJc3RydWN0IGt2ZWMgdmVjc1syXTsKIAlpbnQgcmV0OwogCWludCByZXRyaWVkID0gMDsKQEAgLTc4LDM0ICs3OSwyMSBAQAogCXZlY3NbMV0uaW92X2Jhc2UgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CiAJdmVjc1sxXS5pb3ZfbGVuID0gZGF0YWxlbjsKIAotCWpmZnMyX2RiZ19wcmV3cml0ZV9wYXJhbm9pYV9jaGVjayhjLCBmbGFzaF9vZnMsIHZlY3NbMF0uaW92X2xlbiArIHZlY3NbMV0uaW92X2xlbik7Ci0KIAlpZiAoamUzMl90b19jcHUocmktPnRvdGxlbikgIT0gc2l6ZW9mKCpyaSkgKyBkYXRhbGVuKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImpmZnMyX3dyaXRlX2Rub2RlOiByaS0+dG90bGVuICgweCUwOHgpICE9IHNpemVvZigqcmkpICgweCUwOHp4KSArIGRhdGFsZW4gKDB4JTA4eClcbiIsIGplMzJfdG9fY3B1KHJpLT50b3RsZW4pLCBzaXplb2YoKnJpKSwgZGF0YWxlbik7CiAJfQotCXJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpOwotCWlmICghcmF3KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAogCWZuID0gamZmczJfYWxsb2NfZnVsbF9kbm9kZSgpOwotCWlmICghZm4pIHsKLQkJamZmczJfZnJlZV9yYXdfbm9kZV9yZWYocmF3KTsKKwlpZiAoIWZuKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQlmbi0+b2ZzID0gamUzMl90b19jcHUocmktPm9mZnNldCk7Ci0JZm4tPnNpemUgPSBqZTMyX3RvX2NwdShyaS0+ZHNpemUpOwotCWZuLT5mcmFncyA9IDA7CiAKIAkvKiBjaGVjayBudW1iZXIgb2YgdmFsaWQgdmVjcyAqLwogCWlmICghZGF0YWxlbiB8fCAhZGF0YSkKIAkJY250ID0gMTsKICByZXRyeToKLQlmbi0+cmF3ID0gcmF3OworCWZsYXNoX29mcyA9IHdyaXRlX29mcyhjKTsKIAotCXJhdy0+Zmxhc2hfb2Zmc2V0ID0gZmxhc2hfb2ZzOwotCXJhdy0+X190b3RsZW4gPSBQQUQoc2l6ZW9mKCpyaSkrZGF0YWxlbik7Ci0JcmF3LT5uZXh0X3BoeXMgPSBOVUxMOworCWpmZnMyX2RiZ19wcmV3cml0ZV9wYXJhbm9pYV9jaGVjayhjLCBmbGFzaF9vZnMsIHZlY3NbMF0uaW92X2xlbiArIHZlY3NbMV0uaW92X2xlbik7CiAKIAlpZiAoKGFsbG9jX21vZGUhPUFMTE9DX0dDKSAmJiAoamUzMl90b19jcHUocmktPnZlcnNpb24pIDwgZi0+aGlnaGVzdF92ZXJzaW9uKSkgewogCQlCVUdfT04oIXJldHJpZWQpOwpAQCAtMTI1LDIyICsxMTMsMTYgQEAKIAogCQkvKiBNYXJrIHRoZSBzcGFjZSBhcyBkaXJ0aWVkICovCiAJCWlmIChyZXRsZW4pIHsKLQkJCS8qIERvZXNuJ3QgYmVsb25nIHRvIGFueSBpbm9kZSAqLwotCQkJcmF3LT5uZXh0X2luX2lubyA9IE5VTEw7Ci0KIAkJCS8qIERvbid0IGNoYW5nZSByYXctPnNpemUgdG8gbWF0Y2ggcmV0bGVuLiBXZSBtYXkgaGF2ZQogCQkJICAgd3JpdHRlbiB0aGUgbm9kZSBoZWFkZXIgYWxyZWFkeSwgYW5kIG9ubHkgdGhlIGRhdGEgd2lsbAogCQkJICAgc2VlbSBjb3JydXB0ZWQsIGluIHdoaWNoIGNhc2UgdGhlIHNjYW4gd291bGQgc2tpcCBvdmVyCiAJCQkgICBhbnkgbm9kZSB3ZSB3cml0ZSBiZWZvcmUgdGhlIG9yaWdpbmFsIGludGVuZGVkIGVuZCBvZgogCQkJICAgdGhpcyBub2RlICovCi0JCQlyYXctPmZsYXNoX29mZnNldCB8PSBSRUZfT0JTT0xFVEU7Ci0JCQlqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcmF3KTsKLQkJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByYXcpOworCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIGZsYXNoX29mcyB8IFJFRl9PQlNPTEVURSwgUEFEKHNpemVvZigqcmkpK2RhdGFsZW4pLCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiTm90IG1hcmtpbmcgdGhlIHNwYWNlIGF0IDB4JTA4eCBhcyBkaXJ0eSBiZWNhdXNlIHRoZSBmbGFzaCBkcml2ZXIgcmV0dXJuZWQgcmV0bGVuIHplcm9cbiIsIHJhdy0+Zmxhc2hfb2Zmc2V0KTsKLQkJCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJhdyk7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vdCBtYXJraW5nIHRoZSBzcGFjZSBhdCAweCUwOHggYXMgZGlydHkgYmVjYXVzZSB0aGUgZmxhc2ggZHJpdmVyIHJldHVybmVkIHJldGxlbiB6ZXJvXG4iLCBmbGFzaF9vZnMpOwogCQl9Ci0JCWlmICghcmV0cmllZCAmJiBhbGxvY19tb2RlICE9IEFMTE9DX05PUkVUUlkgJiYgKHJhdyA9IGpmZnMyX2FsbG9jX3Jhd19ub2RlX3JlZigpKSkgeworCQlpZiAoIXJldHJpZWQgJiYgYWxsb2NfbW9kZSAhPSBBTExPQ19OT1JFVFJZKSB7CiAJCQkvKiBUcnkgdG8gcmVhbGxvY2F0ZSBzcGFjZSBhbmQgcmV0cnkgKi8KIAkJCXVpbnQzMl90IGR1bW15OwogCQkJc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYiA9ICZjLT5ibG9ja3NbZmxhc2hfb2ZzIC8gYy0+c2VjdG9yX3NpemVdOwpAQCAtMTUzLDE5ICsxMzUsMjAgQEAKIAkJCWpmZnMyX2RiZ19hY2N0X3BhcmFub2lhX2NoZWNrKGMsIGplYik7CiAKIAkJCWlmIChhbGxvY19tb2RlID09IEFMTE9DX0dDKSB7Ci0JCQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YoKnJpKSArIGRhdGFsZW4sICZmbGFzaF9vZnMsCi0JCQkJCQkJJmR1bW15LCBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOworCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKCpyaSkgKyBkYXRhbGVuLCAmZHVtbXksCisJCQkJCQkJICAgICBKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBMb2NraW5nIHBhaW4gKi8KIAkJCQl1cCgmZi0+c2VtKTsKIAkJCQlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKIAotCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyaSkgKyBkYXRhbGVuLCAmZmxhc2hfb2ZzLAotCQkJCQkJCSZkdW1teSwgYWxsb2NfbW9kZSwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKKwkJCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgZGF0YWxlbiwgJmR1bW15LAorCQkJCQkJCSAgYWxsb2NfbW9kZSwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAkJCQlkb3duKCZmLT5zZW0pOwogCQkJfQogCiAJCQlpZiAoIXJldCkgeworCQkJCWZsYXNoX29mcyA9IHdyaXRlX29mcyhjKTsKIAkJCQlEMShwcmludGsoS0VSTl9ERUJVRyAiQWxsb2NhdGVkIHNwYWNlIGF0IDB4JTA4eCB0byByZXRyeSBmYWlsZWQgd3JpdGUuXG4iLCBmbGFzaF9vZnMpKTsKIAogCQkJCWpmZnMyX2RiZ19hY2N0X3Nhbml0eV9jaGVjayhjLGplYik7CkBAIC0xNzQsNyArMTU3LDYgQEAKIAkJCQlnb3RvIHJldHJ5OwogCQkJfQogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSB0byByZXRyeSBmYWlsZWQgd3JpdGU6ICVkIVxuIiwgcmV0KSk7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOwogCQl9CiAJCS8qIFJlbGVhc2UgdGhlIGZ1bGxfZG5vZGUgd2hpY2ggaXMgbm93IHVzZWxlc3MsIGFuZCByZXR1cm4gKi8KIAkJamZmczJfZnJlZV9mdWxsX2Rub2RlKGZuKTsKQEAgLTE4OCwyMCArMTcwLDE3IEBACiAJaWYgKChqZTMyX3RvX2NwdShyaS0+ZHNpemUpID49IFBBR0VfQ0FDSEVfU0laRSkgfHwKIAkgICAgKCAoKGplMzJfdG9fY3B1KHJpLT5vZmZzZXQpJihQQUdFX0NBQ0hFX1NJWkUtMSkpPT0wKSAmJgogCSAgICAgIChqZTMyX3RvX2NwdShyaS0+ZHNpemUpK2plMzJfdG9fY3B1KHJpLT5vZmZzZXQpID09ICBqZTMyX3RvX2NwdShyaS0+aXNpemUpKSkpIHsKLQkJcmF3LT5mbGFzaF9vZmZzZXQgfD0gUkVGX1BSSVNUSU5FOworCQlmbGFzaF9vZnMgfD0gUkVGX1BSSVNUSU5FOwogCX0gZWxzZSB7Ci0JCXJhdy0+Zmxhc2hfb2Zmc2V0IHw9IFJFRl9OT1JNQUw7CisJCWZsYXNoX29mcyB8PSBSRUZfTk9STUFMOwogCX0KLQlqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcmF3KTsKLQotCS8qIExpbmsgaW50byBwZXItaW5vZGUgbGlzdCAqLwotCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQlyYXctPm5leHRfaW5faW5vID0gZi0+aW5vY2FjaGUtPm5vZGVzOwotCWYtPmlub2NhY2hlLT5ub2RlcyA9IHJhdzsKLQlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwlmbi0+cmF3ID0gamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIGZsYXNoX29mcywgUEFEKHNpemVvZigqcmkpK2RhdGFsZW4pLCBmLT5pbm9jYWNoZSk7CisJZm4tPm9mcyA9IGplMzJfdG9fY3B1KHJpLT5vZmZzZXQpOworCWZuLT5zaXplID0gamUzMl90b19jcHUocmktPmRzaXplKTsKKwlmbi0+ZnJhZ3MgPSAwOwogCiAJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3dyaXRlX2Rub2RlIHdyb3RlIG5vZGUgYXQgMHglMDh4KCVkKSB3aXRoIGRzaXplIDB4JXgsIGNzaXplIDB4JXgsIG5vZGVfY3JjIDB4JTA4eCwgZGF0YV9jcmMgMHglMDh4LCB0b3RsZW4gMHglMDh4XG4iLAotCQkgIGZsYXNoX29mcywgcmVmX2ZsYWdzKHJhdyksIGplMzJfdG9fY3B1KHJpLT5kc2l6ZSksCisJCSAgZmxhc2hfb2ZzICYgfjMsIGZsYXNoX29mcyAmIDMsIGplMzJfdG9fY3B1KHJpLT5kc2l6ZSksCiAJCSAgamUzMl90b19jcHUocmktPmNzaXplKSwgamUzMl90b19jcHUocmktPm5vZGVfY3JjKSwKIAkJICBqZTMyX3RvX2NwdShyaS0+ZGF0YV9jcmMpLCBqZTMyX3RvX2NwdShyaS0+dG90bGVuKSkpOwogCkBAIC0yMTIsMTIgKzE5MSwxNCBAQAogCXJldHVybiBmbjsKIH0KIAotc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpqZmZzMl93cml0ZV9kaXJlbnQoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCBzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqcmQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVpbnQzMl90IG5hbWVsZW4sIHVpbnQzMl90IGZsYXNoX29mcywgaW50IGFsbG9jX21vZGUpCitzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmpmZnMyX3dyaXRlX2RpcmVudChzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsCisJCQkJCSAgICAgc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAorCQkJCQkgICAgIHVpbnQzMl90IG5hbWVsZW4sIGludCBhbGxvY19tb2RlKQogewotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwogCXNpemVfdCByZXRsZW47CiAJc3RydWN0IGt2ZWMgdmVjc1syXTsKKwl1aW50MzJfdCBmbGFzaF9vZnM7CiAJaW50IHJldHJpZWQgPSAwOwogCWludCByZXQ7CiAKQEAgLTIyOCwyNiArMjA5LDE2IEBACiAJRDEoaWYoamUzMl90b19jcHUocmQtPmhkcl9jcmMpICE9IGNyYzMyKDAsIHJkLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSktNCkpIHsKIAkJcHJpbnRrKEtFUk5fQ1JJVCAiRWVwLiBDUkMgbm90IGNvcnJlY3QgaW4gamZmczJfd3JpdGVfZGlyZW50KClcbiIpOwogCQlCVUcoKTsKLQl9Ci0JICAgKTsKKwkgICB9KTsKIAogCXZlY3NbMF0uaW92X2Jhc2UgPSByZDsKIAl2ZWNzWzBdLmlvdl9sZW4gPSBzaXplb2YoKnJkKTsKIAl2ZWNzWzFdLmlvdl9iYXNlID0gKHVuc2lnbmVkIGNoYXIgKiluYW1lOwogCXZlY3NbMV0uaW92X2xlbiA9IG5hbWVsZW47CiAKLQlqZmZzMl9kYmdfcHJld3JpdGVfcGFyYW5vaWFfY2hlY2soYywgZmxhc2hfb2ZzLCB2ZWNzWzBdLmlvdl9sZW4gKyB2ZWNzWzFdLmlvdl9sZW4pOwotCi0JcmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCk7Ci0KLQlpZiAoIXJhdykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KIAlmZCA9IGpmZnMyX2FsbG9jX2Z1bGxfZGlyZW50KG5hbWVsZW4rMSk7Ci0JaWYgKCFmZCkgewotCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOworCWlmICghZmQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCX0KIAogCWZkLT52ZXJzaW9uID0gamUzMl90b19jcHUocmQtPnZlcnNpb24pOwogCWZkLT5pbm8gPSBqZTMyX3RvX2NwdShyZC0+aW5vKTsKQEAgLTI1NywxMSArMjI4LDkgQEAKIAlmZC0+bmFtZVtuYW1lbGVuXT0wOwogCiAgcmV0cnk6Ci0JZmQtPnJhdyA9IHJhdzsKKwlmbGFzaF9vZnMgPSB3cml0ZV9vZnMoYyk7CiAKLQlyYXctPmZsYXNoX29mZnNldCA9IGZsYXNoX29mczsKLQlyYXctPl9fdG90bGVuID0gUEFEKHNpemVvZigqcmQpK25hbWVsZW4pOwotCXJhdy0+bmV4dF9waHlzID0gTlVMTDsKKwlqZmZzMl9kYmdfcHJld3JpdGVfcGFyYW5vaWFfY2hlY2soYywgZmxhc2hfb2ZzLCB2ZWNzWzBdLmlvdl9sZW4gKyB2ZWNzWzFdLmlvdl9sZW4pOwogCiAJaWYgKChhbGxvY19tb2RlIT1BTExPQ19HQykgJiYgKGplMzJfdG9fY3B1KHJkLT52ZXJzaW9uKSA8IGYtPmhpZ2hlc3RfdmVyc2lvbikpIHsKIAkJQlVHX09OKCFyZXRyaWVkKTsKQEAgLTI4MCwxNSArMjQ5LDExIEBACiAJCQkgICAgICAgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgZmxhc2hfb2ZzLCByZXQsIHJldGxlbik7CiAJCS8qIE1hcmsgdGhlIHNwYWNlIGFzIGRpcnRpZWQgKi8KIAkJaWYgKHJldGxlbikgewotCQkJcmF3LT5uZXh0X2luX2lubyA9IE5VTEw7Ci0JCQlyYXctPmZsYXNoX29mZnNldCB8PSBSRUZfT0JTT0xFVEU7Ci0JCQlqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcmF3KTsKLQkJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByYXcpOworCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIGZsYXNoX29mcyB8IFJFRl9PQlNPTEVURSwgUEFEKHNpemVvZigqcmQpK25hbWVsZW4pLCBOVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiTm90IG1hcmtpbmcgdGhlIHNwYWNlIGF0IDB4JTA4eCBhcyBkaXJ0eSBiZWNhdXNlIHRoZSBmbGFzaCBkcml2ZXIgcmV0dXJuZWQgcmV0bGVuIHplcm9cbiIsIHJhdy0+Zmxhc2hfb2Zmc2V0KTsKLQkJCWpmZnMyX2ZyZWVfcmF3X25vZGVfcmVmKHJhdyk7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIk5vdCBtYXJraW5nIHRoZSBzcGFjZSBhdCAweCUwOHggYXMgZGlydHkgYmVjYXVzZSB0aGUgZmxhc2ggZHJpdmVyIHJldHVybmVkIHJldGxlbiB6ZXJvXG4iLCBmbGFzaF9vZnMpOwogCQl9Ci0JCWlmICghcmV0cmllZCAmJiAocmF3ID0gamZmczJfYWxsb2NfcmF3X25vZGVfcmVmKCkpKSB7CisJCWlmICghcmV0cmllZCkgewogCQkJLyogVHJ5IHRvIHJlYWxsb2NhdGUgc3BhY2UgYW5kIHJldHJ5ICovCiAJCQl1aW50MzJfdCBkdW1teTsKIAkJCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWIgPSAmYy0+YmxvY2tzW2ZsYXNoX29mcyAvIGMtPnNlY3Rvcl9zaXplXTsKQEAgLTMwMSwzOSArMjY2LDMzIEBACiAJCQlqZmZzMl9kYmdfYWNjdF9wYXJhbm9pYV9jaGVjayhjLCBqZWIpOwogCiAJCQlpZiAoYWxsb2NfbW9kZSA9PSBBTExPQ19HQykgewotCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgc2l6ZW9mKCpyZCkgKyBuYW1lbGVuLCAmZmxhc2hfb2ZzLAotCQkJCQkJCSZkdW1teSwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CisJCQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCBzaXplb2YoKnJkKSArIG5hbWVsZW4sICZkdW1teSwKKwkJCQkJCQkgICAgIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBMb2NraW5nIHBhaW4gKi8KIAkJCQl1cCgmZi0+c2VtKTsKIAkJCQlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKIAotCQkJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkgKyBuYW1lbGVuLCAmZmxhc2hfb2ZzLAotCQkJCQkJCSZkdW1teSwgYWxsb2NfbW9kZSwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CisJCQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKSArIG5hbWVsZW4sICZkdW1teSwKKwkJCQkJCQkgIGFsbG9jX21vZGUsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOwogCQkJCWRvd24oJmYtPnNlbSk7CiAJCQl9CiAKIAkJCWlmICghcmV0KSB7CisJCQkJZmxhc2hfb2ZzID0gd3JpdGVfb2ZzKGMpOwogCQkJCUQxKHByaW50ayhLRVJOX0RFQlVHICJBbGxvY2F0ZWQgc3BhY2UgYXQgMHglMDh4IHRvIHJldHJ5IGZhaWxlZCB3cml0ZS5cbiIsIGZsYXNoX29mcykpOwogCQkJCWpmZnMyX2RiZ19hY2N0X3Nhbml0eV9jaGVjayhjLGplYik7CiAJCQkJamZmczJfZGJnX2FjY3RfcGFyYW5vaWFfY2hlY2soYywgamViKTsKIAkJCQlnb3RvIHJldHJ5OwogCQkJfQogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBhbGxvY2F0ZSBzcGFjZSB0byByZXRyeSBmYWlsZWQgd3JpdGU6ICVkIVxuIiwgcmV0KSk7Ci0JCQlqZmZzMl9mcmVlX3Jhd19ub2RlX3JlZihyYXcpOwogCQl9CiAJCS8qIFJlbGVhc2UgdGhlIGZ1bGxfZG5vZGUgd2hpY2ggaXMgbm93IHVzZWxlc3MsIGFuZCByZXR1cm4gKi8KIAkJamZmczJfZnJlZV9mdWxsX2RpcmVudChmZCk7CiAJCXJldHVybiBFUlJfUFRSKHJldD9yZXQ6LUVJTyk7CiAJfQogCS8qIE1hcmsgdGhlIHNwYWNlIHVzZWQgKi8KLQlyYXctPmZsYXNoX29mZnNldCB8PSBSRUZfUFJJU1RJTkU7Ci0JamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHJhdyk7Ci0KLQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Ci0JcmF3LT5uZXh0X2luX2lubyA9IGYtPmlub2NhY2hlLT5ub2RlczsKLQlmLT5pbm9jYWNoZS0+bm9kZXMgPSByYXc7Ci0Jc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJZmQtPnJhdyA9IGpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBmbGFzaF9vZnMgfCBSRUZfUFJJU1RJTkUsIFBBRChzaXplb2YoKnJkKStuYW1lbGVuKSwgZi0+aW5vY2FjaGUpOwogCiAJaWYgKHJldHJpZWQpIHsKIAkJamZmczJfZGJnX2FjY3Rfc2FuaXR5X2NoZWNrKGMsTlVMTCk7CkBAIC0zNTksMTQgKzMxOCwxNCBAQAogCQlzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm47CiAJCXVuc2lnbmVkIGNoYXIgKmNvbXByYnVmID0gTlVMTDsKIAkJdWludDE2X3QgY29tcHJ0eXBlID0gSkZGUzJfQ09NUFJfTk9ORTsKLQkJdWludDMyX3QgcGh5c19vZnMsIGFsbG9jbGVuOworCQl1aW50MzJfdCBhbGxvY2xlbjsKIAkJdWludDMyX3QgZGF0YWxlbiwgY2RhdGFsZW47CiAJCWludCByZXRyaWVkID0gMDsKIAogCXJldHJ5OgogCQlEMihwcmludGsoS0VSTl9ERUJVRyAiamZmczJfY29tbWl0X3dyaXRlKCkgbG9vcDogMHgleCB0byB3cml0ZSB0byAweCV4XG4iLCB3cml0ZWxlbiwgb2Zmc2V0KSk7CiAKLQkJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSArIEpGRlMyX01JTl9EQVRBX0xFTiwgJnBoeXNfb2ZzLAorCQlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpICsgSkZGUzJfTUlOX0RBVEFfTEVOLAogCQkJCQkmYWxsb2NsZW4sIEFMTE9DX05PUk1BTCwgSkZGUzJfU1VNTUFSWV9JTk9ERV9TSVpFKTsKIAkJaWYgKHJldCkgewogCQkJRDEocHJpbnRrKEtFUk5fREVCVUcgImpmZnMyX3Jlc2VydmVfc3BhY2UgcmV0dXJuZWQgJWRcbiIsIHJldCkpOwpAQCAtMzk0LDcgKzM1Myw3IEBACiAJCXJpLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJpLCBzaXplb2YoKnJpKS04KSk7CiAJCXJpLT5kYXRhX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIGNvbXByYnVmLCBjZGF0YWxlbikpOwogCi0JCWZuID0gamZmczJfd3JpdGVfZG5vZGUoYywgZiwgcmksIGNvbXByYnVmLCBjZGF0YWxlbiwgcGh5c19vZnMsIEFMTE9DX05PUkVUUlkpOworCQlmbiA9IGpmZnMyX3dyaXRlX2Rub2RlKGMsIGYsIHJpLCBjb21wcmJ1ZiwgY2RhdGFsZW4sIEFMTE9DX05PUkVUUlkpOwogCiAJCWpmZnMyX2ZyZWVfY29tcHJidWYoY29tcHJidWYsIGJ1Zik7CiAKQEAgLTQ0OCwxMyArNDA3LDEzIEBACiAJc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQgKnJkOwogCXN0cnVjdCBqZmZzMl9mdWxsX2Rub2RlICpmbjsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKmZkOwotCXVpbnQzMl90IGFsbG9jbGVuLCBwaHlzX29mczsKKwl1aW50MzJfdCBhbGxvY2xlbjsKIAlpbnQgcmV0OwogCiAJLyogVHJ5IHRvIHJlc2VydmUgZW5vdWdoIHNwYWNlIGZvciBib3RoIG5vZGUgYW5kIGRpcmVudC4KIAkgKiBKdXN0IHRoZSBub2RlIHdpbGwgZG8gZm9yIG5vdywgdGhvdWdoCiAJICovCi0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJpKSwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sIEFMTE9DX05PUk1BTCwKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmkpLCAmYWxsb2NsZW4sIEFMTE9DX05PUk1BTCwKIAkJCQlKRkZTMl9TVU1NQVJZX0lOT0RFX1NJWkUpOwogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9kb19jcmVhdGUoKTogcmVzZXJ2ZWQgMHgleCBieXRlc1xuIiwgYWxsb2NsZW4pKTsKIAlpZiAocmV0KSB7CkBAIC00NjUsNyArNDI0LDcgQEAKIAlyaS0+ZGF0YV9jcmMgPSBjcHVfdG9famUzMigwKTsKIAlyaS0+bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCByaSwgc2l6ZW9mKCpyaSktOCkpOwogCi0JZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgTlVMTCwgMCwgcGh5c19vZnMsIEFMTE9DX05PUk1BTCk7CisJZm4gPSBqZmZzMl93cml0ZV9kbm9kZShjLCBmLCByaSwgTlVMTCwgMCwgQUxMT0NfTk9STUFMKTsKIAogCUQxKHByaW50ayhLRVJOX0RFQlVHICJqZmZzMl9kb19jcmVhdGUgY3JlYXRlZCBmaWxlIHdpdGggbW9kZSAweCV4XG4iLAogCQkgIGplbW9kZV90b19jcHUocmktPm1vZGUpKSk7CkBAIC00ODQsNyArNDQzLDcgQEAKIAogCXVwKCZmLT5zZW0pOwogCWpmZnMyX2NvbXBsZXRlX3Jlc2VydmF0aW9uKGMpOwotCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCisJcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmYWxsb2NsZW4sCiAJCQkJQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX0RJUkVOVF9TSVpFKG5hbWVsZW4pKTsKIAogCWlmIChyZXQpIHsKQEAgLTUxNiw3ICs0NzUsNyBAQAogCXJkLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJkLCBzaXplb2YoKnJkKS04KSk7CiAJcmQtPm5hbWVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgbmFtZSwgbmFtZWxlbikpOwogCi0JZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBuYW1lLCBuYW1lbGVuLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIG5hbWUsIG5hbWVsZW4sIEFMTE9DX05PUk1BTCk7CiAKIAlqZmZzMl9mcmVlX3Jhd19kaXJlbnQocmQpOwogCkBAIC01NDUsNyArNTA0LDcgQEAKIHsKIAlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqcmQ7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnM7CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAogCWlmICgxIC8qIGFsdGVybmF0aXZlIGJyYW5jaCBuZWVkcyB0ZXN0aW5nICovIHx8CkBAIC01NTYsNyArNTE1LDcgQEAKIAkJaWYgKCFyZCkKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJnBoeXNfb2ZzLCAmYWxsb2NsZW4sCisJCXJldCA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgc2l6ZW9mKCpyZCkrbmFtZWxlbiwgJmFsbG9jbGVuLAogCQkJCQlBTExPQ19ERUxFVElPTiwgSkZGUzJfU1VNTUFSWV9ESVJFTlRfU0laRShuYW1lbGVuKSk7CiAJCWlmIChyZXQpIHsKIAkJCWpmZnMyX2ZyZWVfcmF3X2RpcmVudChyZCk7CkBAIC01ODAsNyArNTM5LDcgQEAKIAkJcmQtPm5vZGVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgcmQsIHNpemVvZigqcmQpLTgpKTsKIAkJcmQtPm5hbWVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgbmFtZSwgbmFtZWxlbikpOwogCi0JCWZkID0gamZmczJfd3JpdGVfZGlyZW50KGMsIGRpcl9mLCByZCwgbmFtZSwgbmFtZWxlbiwgcGh5c19vZnMsIEFMTE9DX0RFTEVUSU9OKTsKKwkJZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBuYW1lLCBuYW1lbGVuLCBBTExPQ19ERUxFVElPTik7CiAKIAkJamZmczJfZnJlZV9yYXdfZGlyZW50KHJkKTsKIApAQCAtNjU5LDE0ICs2MTgsMTQgQEAKIHsKIAlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCAqcmQ7CiAJc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICpmZDsKLQl1aW50MzJfdCBhbGxvY2xlbiwgcGh5c19vZnM7CisJdWludDMyX3QgYWxsb2NsZW47CiAJaW50IHJldDsKIAogCXJkID0gamZmczJfYWxsb2NfcmF3X2RpcmVudCgpOwogCWlmICghcmQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBzaXplb2YoKnJkKStuYW1lbGVuLCAmcGh5c19vZnMsICZhbGxvY2xlbiwKKwlyZXQgPSBqZmZzMl9yZXNlcnZlX3NwYWNlKGMsIHNpemVvZigqcmQpK25hbWVsZW4sICZhbGxvY2xlbiwKIAkJCQlBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfRElSRU5UX1NJWkUobmFtZWxlbikpOwogCWlmIChyZXQpIHsKIAkJamZmczJfZnJlZV9yYXdfZGlyZW50KHJkKTsKQEAgLTY5Miw3ICs2NTEsNyBAQAogCXJkLT5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsIHJkLCBzaXplb2YoKnJkKS04KSk7CiAJcmQtPm5hbWVfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgbmFtZSwgbmFtZWxlbikpOwogCi0JZmQgPSBqZmZzMl93cml0ZV9kaXJlbnQoYywgZGlyX2YsIHJkLCBuYW1lLCBuYW1lbGVuLCBwaHlzX29mcywgQUxMT0NfTk9STUFMKTsKKwlmZCA9IGpmZnMyX3dyaXRlX2RpcmVudChjLCBkaXJfZiwgcmQsIG5hbWUsIG5hbWVsZW4sIEFMTE9DX05PUk1BTCk7CiAKIAlqZmZzMl9mcmVlX3Jhd19kaXJlbnQocmQpOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi94YXR0ci5jIGIvZnMvamZmczIveGF0dHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgyZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvamZmczIveGF0dHIuYwpAQCAtMCwwICsxLDEyMzggQEAKKy8qCisgKiBKRkZTMiAtLSBKb3VybmFsbGluZyBGbGFzaCBGaWxlIFN5c3RlbSwgVmVyc2lvbiAyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgTkVDIENvcnBvcmF0aW9uCisgKgorICogQ3JlYXRlZCBieSBLYWlHYWkgS29oZWkgPGthaWdhaUBhay5qcC5uZWMuY29tPgorICoKKyAqIEZvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSAnTElDRU5DRScgaW4gdGhpcyBkaXJlY3RvcnkuCisgKgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9qZmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgIm5vZGVsaXN0LmgiCisvKiAtLS0tLS0tLSB4ZGF0dW0gcmVsYXRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLQorICogeGF0dHJfZGF0dW1faGFzaGtleSh4cHJlZml4LCB4bmFtZSwgeHZhbHVlLCB4c2l6ZSkKKyAqICAgaXMgdXNlZCB0byBjYWxjdXJhdGUgeGRhdHVtIGhhc2hrZXkuIFRoZSByZW1pbmRlciBvZiBoYXNoa2V5IGludG8gWEFUVFJJTkRFWF9IQVNIU0laRSBpcworICogICB0aGUgaW5kZXggb2YgdGhlIHhhdHRyIG5hbWUvdmFsdWUgcGFpciBjYWNoZSAoYy0+eGF0dHJpbmRleCkuCisgKiB1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gcmVsZWFzZSB4YXR0ciBuYW1lL3ZhbHVlIHBhaXIgYW5kIGRldGFjaCBmcm9tIGMtPnhhdHRyaW5kZXguCisgKiByZWNsYWltX3hhdHRyX2RhdHVtKGMpCisgKiAgIGlzIHVzZWQgdG8gcmVjbGFpbSB4YXR0ciBuYW1lL3ZhbHVlIHBhaXJzIG9uIHRoZSB4YXR0ciBuYW1lL3ZhbHVlIHBhaXIgY2FjaGUgd2hlbgorICogICBtZW1vcnkgdXNhZ2UgYnkgY2FjaGUgaXMgb3ZlciBjLT54ZGF0dW1fbWVtX3RocmVzaG9sZC4gQ3VycmVudHJ5LCB0aGlzIHRocmVzaG9sZCAKKyAqICAgaXMgaGFyZCBjb2RlZCBhcyAzMktpQi4KKyAqIGRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKQorICogICBpcyB1c2VkIHRvIGRlbGV0ZSBhIGpmZnMyIG5vZGUgaXMgZG9taW5hdGVkIGJ5IHhkYXR1bS4gV2hlbiBFQlMoRXJhc2UgQmxvY2sgU3VtbWFyeSkgaXMKKyAqICAgZW5hYmxlZCwgaXQgb3ZlcndyaXRlcyB0aGUgb2Jzb2xldGUgbm9kZSBieSBteXNlbGYuCisgKiBkZWxldGVfeGF0dHJfZGF0dW0oYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gZGVsZXRlIGpmZnMyX3hhdHRyX2RhdHVtIG9iamVjdC4gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCAwLXZhbHVlIG9mIHJlZmVyZW5jZQorICogICBjb3VudGVyLiAoSXQgbWVhbnMgaG93IG1hbnkgamZmczJfeGF0dHJfcmVmIG9iamVjdCByZWZlcnMgdGhpcyB4ZGF0dW0uKQorICogZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIGxvYWQgdGhlIHhkYXR1bSBpbmZvcm1hdGlvbnMgd2l0aG91dCBuYW1lL3ZhbHVlIHBhaXIgZnJvbSB0aGUgbWVkaXVtLgorICogICBJdCdzIG5lY2Vzc2FyeSBvbmNlLCBiZWNhdXNlIHRob3NlIGluZm9ybWF0aW9ucyBhcmUgbm90IGNvbGxlY3RlZCBkdXJpbmcgbW91bnRpbmcKKyAqICAgcHJvY2VzcyB3aGVuIEVCUyBpcyBlbmFibGVkLgorICogICAwIHdpbGwgYmUgcmV0dXJuZWQsIGlmIHN1Y2Nlc3MuIEFuIG5lZ2F0aXZlIHJldHVybiB2YWx1ZSBtZWFucyByZWNvdmVyYWJsZSBlcnJvciwgYW5kCisgKiAgIHBvc2l0aXZlIHJldHVybiB2YWx1ZSBtZWFucyB1bnJlY292ZXJhYmxlIGVycm9yLiBUaHVzLCBjYWxsZXIgbXVzdCByZW1vdmUgdGhpcyB4ZGF0dW0KKyAqICAgYW5kIHhyZWYgd2hlbiBpdCByZXR1cm5lZCBwb3NpdGl2ZSB2YWx1ZS4KKyAqIGRvX2xvYWRfeGF0dHJfZGF0dW0oYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gbG9hZCBuYW1lL3ZhbHVlIHBhaXIgZnJvbSB0aGUgbWVkaXVtLgorICogICBUaGUgbWVhbmluZ3Mgb2YgcmV0dXJuIHZhbHVlIGlzIHNhbWUgYXMgZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKCkuCisgKiBsb2FkX3hhdHRyX2RhdHVtKGMsIHhkKQorICogICBpcyB1c2VkIHRvIGJlIGFzIGEgd3JhcHBlciBvZiBkb192ZXJpZnlfeGF0dHJfZGF0dW0oKSBhbmQgZG9fbG9hZF94YXR0cl9kYXR1bSgpLgorICogICBJZiB4ZCBuZWVkIHRvIGNhbGwgZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKCkgYXQgZmlyc3QsIGl0J3MgY2FsbGVkIGJlZm9yZSBjYWxsaW5nCisgKiAgIGRvX2xvYWRfeGF0dHJfZGF0dW0oKS4gVGhlIG1lYW5pbmdzIG9mIHJldHVybiB2YWx1ZSBpcyBzYW1lIGFzIGRvX3ZlcmlmeV94YXR0cl9kYXR1bSgpLgorICogc2F2ZV94YXR0cl9kYXR1bShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byB3cml0ZSB4ZGF0dW0gdG8gbWVkaXVtLiB4ZC0+dmVyc2lvbiB3aWxsIGJlIGluY3JlbWVudGVkLgorICogY3JlYXRlX3hhdHRyX2RhdHVtKGMsIHhwcmVmaXgsIHhuYW1lLCB4dmFsdWUsIHhzaXplKQorICogICBpcyB1c2VkIHRvIGNyZWF0ZSBuZXcgeGRhdHVtIGFuZCB3cml0ZSB0byBtZWRpdW0uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdWludDMyX3QgeGF0dHJfZGF0dW1faGFzaGtleShpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsIGNvbnN0IGNoYXIgKnh2YWx1ZSwgaW50IHhzaXplKQoreworCWludCBuYW1lX2xlbiA9IHN0cmxlbih4bmFtZSk7CisKKwlyZXR1cm4gY3JjMzIoeHByZWZpeCwgeG5hbWUsIG5hbWVfbGVuKSBeIGNyYzMyKHhwcmVmaXgsIHh2YWx1ZSwgeHNpemUpOworfQorCitzdGF0aWMgdm9pZCB1bmxvYWRfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJRDEoZGJnX3hhdHRyKCIlczogeGlkPSV1LCB2ZXJzaW9uPSV1XG4iLCBfX0ZVTkNUSU9OX18sIHhkLT54aWQsIHhkLT52ZXJzaW9uKSk7CisJaWYgKHhkLT54bmFtZSkgeworCQljLT54ZGF0dW1fbWVtX3VzYWdlIC09ICh4ZC0+bmFtZV9sZW4gKyAxICsgeGQtPnZhbHVlX2xlbik7CisJCWtmcmVlKHhkLT54bmFtZSk7CisJfQorCisJbGlzdF9kZWxfaW5pdCgmeGQtPnhpbmRleCk7CisJeGQtPmhhc2hrZXkgPSAwOworCXhkLT54bmFtZSA9IE5VTEw7CisJeGQtPnh2YWx1ZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIHJlY2xhaW1feGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCwgKl94ZDsKKwl1aW50MzJfdCB0YXJnZXQsIGJlZm9yZTsKKwlzdGF0aWMgaW50IGluZGV4ID0gMDsKKwlpbnQgY291bnQ7CisKKwlpZiAoYy0+eGRhdHVtX21lbV90aHJlc2hvbGQgPiBjLT54ZGF0dW1fbWVtX3VzYWdlKQorCQlyZXR1cm47CisKKwliZWZvcmUgPSBjLT54ZGF0dW1fbWVtX3VzYWdlOworCXRhcmdldCA9IGMtPnhkYXR1bV9tZW1fdXNhZ2UgKiA0IC8gNTsgLyogMjAlIHJlZHVjdGlvbiAqLworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IFhBVFRSSU5ERVhfSEFTSFNJWkU7IGNvdW50KyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhkLCBfeGQsICZjLT54YXR0cmluZGV4W2luZGV4XSwgeGluZGV4KSB7CisJCQlpZiAoeGQtPmZsYWdzICYgSkZGUzJfWEZMQUdTX0hPVCkgeworCQkJCXhkLT5mbGFncyAmPSB+SkZGUzJfWEZMQUdTX0hPVDsKKwkJCX0gZWxzZSBpZiAoISh4ZC0+ZmxhZ3MgJiBKRkZTMl9YRkxBR1NfQklORCkpIHsKKwkJCQl1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJfQorCQkJaWYgKGMtPnhkYXR1bV9tZW1fdXNhZ2UgPD0gdGFyZ2V0KQorCQkJCWdvdG8gb3V0OworCQl9CisJCWluZGV4ID0gKGluZGV4KzEpICUgWEFUVFJJTkRFWF9IQVNIU0laRTsKKwl9Cisgb3V0OgorCUpGRlMyX05PVElDRSgieGRhdHVtX21lbV91c2FnZSBmcm9tICV1IGJ5dGUgdG8gJXUgYnl0ZSAoJXUgYnl0ZSByZWNsYWltZWQpXG4iLAorCQkgICAgIGJlZm9yZSwgYy0+eGRhdHVtX21lbV91c2FnZSwgYmVmb3JlIC0gYy0+eGRhdHVtX21lbV91c2FnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgcng7CisJc2l6ZV90IGxlbmd0aDsKKwlpbnQgcmM7CisKKwlpZiAoIXhkLT5ub2RlKSB7CisJCUpGRlMyX1dBUk5JTkcoInhkYXR1bSAoeGlkPSV1KSBpcyByZW1vdmVkIHR3aWNlLlxuIiwgeGQtPnhpZCk7CisJCXJldHVybjsKKwl9CisJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkgeworCQltZW1zZXQoJnJ4LCAweGZmLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194YXR0cikpOworCQlyYyA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldCh4ZC0+bm9kZSksCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLAorCQkJCSAgICAgICZsZW5ndGgsIChjaGFyICopJnJ4KTsKKwkJaWYgKHJjIHx8IGxlbmd0aCAhPSBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkpIHsKKwkJCUpGRlMyX0VSUk9SKCJqZmZzMl9mbGFzaF9yZWFkKCk9JWQsIHJlcT0lenUsIHJlYWQ9JXp1IGF0ICUjMDh4XG4iLAorCQkJCSAgICByYywgc2l6ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpLAorCQkJCSAgICBsZW5ndGgsIHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKwkJfQorCQlyYyA9IGpmZnMyX2ZsYXNoX3dyaXRlKGMsIHJlZl9vZmZzZXQoeGQtPm5vZGUpLCBzaXplb2YocngpLAorCQkJCSAgICAgICAmbGVuZ3RoLCAoY2hhciAqKSZyeCk7CisJCWlmIChyYyB8fCBsZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpKSB7CisJCQlKRkZTMl9FUlJPUigiamZmczJfZmxhc2hfd3JpdGUoKT0lZCwgcmVxPSV6dSwgd3JvdGU9JXp1IGFyICUjMDh4XG4iLAorCQkJCSAgICByYywgc2l6ZW9mKHJ4KSwgbGVuZ3RoLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSk7CisJCX0KKwl9CisJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCXhkLT5ub2RlLT5uZXh0X2luX2lubyA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIHhkLT5ub2RlKTsKKwl4ZC0+bm9kZSA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGRlbGV0ZV94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlCVUdfT04oeGQtPnJlZmNudCk7CisKKwl1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCWlmICh4ZC0+bm9kZSkgeworCQlkZWxldGVfeGF0dHJfZGF0dW1fbm9kZShjLCB4ZCk7CisJCXhkLT5ub2RlID0gTlVMTDsKKwl9CisJamZmczJfZnJlZV94YXR0cl9kYXR1bSh4ZCk7Cit9CisKK3N0YXRpYyBpbnQgZG9fdmVyaWZ5X3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAqLworCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CisJc3RydWN0IGpmZnMyX3Jhd194YXR0ciByeDsKKwlzaXplX3QgcmVhZGxlbjsKKwl1aW50MzJfdCBjcmMsIHRvdGxlbjsKKwlpbnQgcmM7CisKKwlCVUdfT04oIXhkLT5ub2RlKTsKKwlCVUdfT04ocmVmX2ZsYWdzKHhkLT5ub2RlKSAhPSBSRUZfVU5DSEVDS0VEKTsKKworCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSwgc2l6ZW9mKHJ4KSwgJnJlYWRsZW4sIChjaGFyICopJnJ4KTsKKwlpZiAocmMgfHwgcmVhZGxlbiAhPSBzaXplb2YocngpKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX2ZsYXNoX3JlYWQoKT0lZCwgcmVxPSV6dSwgcmVhZD0lenUgYXQgJSMwOHhcbiIsCisJCQkgICAgICByYywgc2l6ZW9mKHJ4KSwgcmVhZGxlbiwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQlyZXR1cm4gcmMgPyByYyA6IC1FSU87CisJfQorCWNyYyA9IGNyYzMyKDAsICZyeCwgc2l6ZW9mKHJ4KSAtIDQpOworCWlmIChjcmMgIT0gamUzMl90b19jcHUocngubm9kZV9jcmMpKSB7CisJCWlmIChqZTMyX3RvX2NwdShyeC5ub2RlX2NyYykgIT0gMHhmZmZmZmZmZikKKwkJCUpGRlMyX0VSUk9SKCJub2RlIENSQyBmYWlsZWQgYXQgJSMwOHgsIHJlYWQ9JSMwOHgsIGNhbGM9JSMwOHhcbiIsCisJCQkJICAgIHJlZl9vZmZzZXQoeGQtPm5vZGUpLCBqZTMyX3RvX2NwdShyeC5oZHJfY3JjKSwgY3JjKTsKKwkJcmV0dXJuIEVJTzsKKwl9CisJdG90bGVuID0gUEFEKHNpemVvZihyeCkgKyByeC5uYW1lX2xlbiArIDEgKyBqZTE2X3RvX2NwdShyeC52YWx1ZV9sZW4pKTsKKwlpZiAoamUxNl90b19jcHUocngubWFnaWMpICE9IEpGRlMyX01BR0lDX0JJVE1BU0sKKwkgICAgfHwgamUxNl90b19jcHUocngubm9kZXR5cGUpICE9IEpGRlMyX05PREVUWVBFX1hBVFRSCisJICAgIHx8IGplMzJfdG9fY3B1KHJ4LnRvdGxlbikgIT0gdG90bGVuCisJICAgIHx8IGplMzJfdG9fY3B1KHJ4LnhpZCkgIT0geGQtPnhpZAorCSAgICB8fCBqZTMyX3RvX2NwdShyeC52ZXJzaW9uKSAhPSB4ZC0+dmVyc2lvbikgeworCQlKRkZTMl9FUlJPUigiaW5jb25zaXN0ZW50IHhkYXR1bSBhdCAlIzA4eCwgbWFnaWM9JSMwNHgvJSMwNHgsICIKKwkJCSAgICAibm9kZXR5cGU9JSMwNHgvJSMwNHgsIHRvdGxlbj0ldS8ldSwgeGlkPSV1LyV1LCB2ZXJzaW9uPSV1LyV1XG4iLAorCQkJICAgIHJlZl9vZmZzZXQoeGQtPm5vZGUpLCBqZTE2X3RvX2NwdShyeC5tYWdpYyksIEpGRlMyX01BR0lDX0JJVE1BU0ssCisJCQkgICAgamUxNl90b19jcHUocngubm9kZXR5cGUpLCBKRkZTMl9OT0RFVFlQRV9YQVRUUiwKKwkJCSAgICBqZTMyX3RvX2NwdShyeC50b3RsZW4pLCB0b3RsZW4sCisJCQkgICAgamUzMl90b19jcHUocngueGlkKSwgeGQtPnhpZCwKKwkJCSAgICBqZTMyX3RvX2NwdShyeC52ZXJzaW9uKSwgeGQtPnZlcnNpb24pOworCQlyZXR1cm4gRUlPOworCX0KKwl4ZC0+eHByZWZpeCA9IHJ4LnhwcmVmaXg7CisJeGQtPm5hbWVfbGVuID0gcngubmFtZV9sZW47CisJeGQtPnZhbHVlX2xlbiA9IGplMTZfdG9fY3B1KHJ4LnZhbHVlX2xlbik7CisJeGQtPmRhdGFfY3JjID0gamUzMl90b19jcHUocnguZGF0YV9jcmMpOworCisJLyogVGhpcyBKRkZTMl9OT0RFVFlQRV9YQVRUUiBub2RlIGlzIGNoZWNrZWQgKi8KKwlqZWIgPSAmYy0+YmxvY2tzW3JlZl9vZmZzZXQoeGQtPm5vZGUpIC8gYy0+c2VjdG9yX3NpemVdOworCXRvdGxlbiA9IFBBRChqZTMyX3RvX2NwdShyeC50b3RsZW4pKTsKKworCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwljLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47IGMtPnVzZWRfc2l6ZSArPSB0b3RsZW47CisJamViLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47IGplYi0+dXNlZF9zaXplICs9IHRvdGxlbjsKKwl4ZC0+bm9kZS0+Zmxhc2hfb2Zmc2V0ID0gcmVmX29mZnNldCh4ZC0+bm9kZSkgfCBSRUZfUFJJU1RJTkU7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisKKwkvKiB1bmNoZWNrZWQgeGRhdHVtIGlzIGNoYWluZWQgd2l0aCBjLT54YXR0cl91bmNoZWNrZWQgKi8KKwlsaXN0X2RlbF9pbml0KCZ4ZC0+eGluZGV4KTsKKworCWRiZ194YXR0cigic3VjY2VzcyBvbiB2ZXJmeWluZyB4ZGF0dW0gKHhpZD0ldSwgdmVyc2lvbj0ldSlcbiIsCisJCSAgeGQtPnhpZCwgeGQtPnZlcnNpb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fbG9hZF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwljaGFyICpkYXRhOworCXNpemVfdCByZWFkbGVuOworCXVpbnQzMl90IGNyYywgbGVuZ3RoOworCWludCBpLCByZXQsIHJldHJ5ID0gMDsKKworCUJVR19PTigheGQtPm5vZGUpOworCUJVR19PTihyZWZfZmxhZ3MoeGQtPm5vZGUpICE9IFJFRl9QUklTVElORSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZ4ZC0+eGluZGV4KSk7CisgcmV0cnk6CisJbGVuZ3RoID0geGQtPm5hbWVfbGVuICsgMSArIHhkLT52YWx1ZV9sZW47CisJZGF0YSA9IGttYWxsb2MobGVuZ3RoLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHhkLT5ub2RlKStzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194YXR0ciksCisJCQkgICAgICAgbGVuZ3RoLCAmcmVhZGxlbiwgZGF0YSk7CisKKwlpZiAocmV0IHx8IGxlbmd0aCE9cmVhZGxlbikgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9mbGFzaF9yZWFkKCkgcmV0dXJuZWQgJWQsIHJlcXVlc3Q9JWQsIHJlYWRsZW49JXp1LCBhdCAlIzA4eFxuIiwKKwkJCSAgICAgIHJldCwgbGVuZ3RoLCByZWFkbGVuLCByZWZfb2Zmc2V0KHhkLT5ub2RlKSk7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gcmV0ID8gcmV0IDogLUVJTzsKKwl9CisKKwlkYXRhW3hkLT5uYW1lX2xlbl0gPSAnXDAnOworCWNyYyA9IGNyYzMyKDAsIGRhdGEsIGxlbmd0aCk7CisJaWYgKGNyYyAhPSB4ZC0+ZGF0YV9jcmMpIHsKKwkJSkZGUzJfV0FSTklORygibm9kZSBDUkMgZmFpbGVkIChKRkZTMl9OT0RFVFlQRV9YUkVGKSIKKwkJCSAgICAgICIgYXQgJSMwOHgsIHJlYWQ6IDB4JTA4eCBjYWxjdWxhdGVkOiAweCUwOHhcbiIsCisJCQkgICAgICByZWZfb2Zmc2V0KHhkLT5ub2RlKSwgeGQtPmRhdGFfY3JjLCBjcmMpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIEVJTzsKKwl9CisKKwl4ZC0+ZmxhZ3MgfD0gSkZGUzJfWEZMQUdTX0hPVDsKKwl4ZC0+eG5hbWUgPSBkYXRhOworCXhkLT54dmFsdWUgPSBkYXRhICsgeGQtPm5hbWVfbGVuKzE7CisKKwljLT54ZGF0dW1fbWVtX3VzYWdlICs9IGxlbmd0aDsKKworCXhkLT5oYXNoa2V5ID0geGF0dHJfZGF0dW1faGFzaGtleSh4ZC0+eHByZWZpeCwgeGQtPnhuYW1lLCB4ZC0+eHZhbHVlLCB4ZC0+dmFsdWVfbGVuKTsKKwlpID0geGQtPmhhc2hrZXkgJSBYQVRUUklOREVYX0hBU0hTSVpFOworCWxpc3RfYWRkKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJpbmRleFtpXSk7CisJaWYgKCFyZXRyeSkgeworCQlyZXRyeSA9IDE7CisJCXJlY2xhaW1feGF0dHJfZGF0dW0oYyk7CisJCWlmICgheGQtPnhuYW1lKQorCQkJZ290byByZXRyeTsKKwl9CisKKwlkYmdfeGF0dHIoInN1Y2Nlc3Mgb24gbG9hZGluZyB4ZGF0dW0gKHhpZD0ldSwgeHByZWZpeD0ldSwgeG5hbWU9JyVzJylcbiIsCisJCSAgeGQtPnhpZCwgeGQtPnhwcmVmaXgsIHhkLT54bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKTsKKwkgKiByYyA8IDAgOiByZWNvdmVyYWJsZSBlcnJvciwgdHJ5IGFnYWluCisJICogcmMgPSAwIDogc3VjY2VzcworCSAqIHJjID4gMCA6IFVucmVjb3ZlcmFibGUgZXJyb3IsIHRoaXMgbm9kZSBzaG91bGQgYmUgZGVsZXRlZC4KKwkgKi8KKwlpbnQgcmMgPSAwOworCUJVR19PTih4ZC0+eG5hbWUpOworCWlmICgheGQtPm5vZGUpCisJCXJldHVybiBFSU87CisJaWYgKHVubGlrZWx5KHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVGX1BSSVNUSU5FKSkgeworCQlyYyA9IGRvX3ZlcmlmeV94YXR0cl9kYXR1bShjLCB4ZCk7CisJCWlmIChyYyA+IDApIHsKKwkJCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCQkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgeGQpOworCQl9CisJfQorCWlmICghcmMpCisJCXJjID0gZG9fbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHNhdmVfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3OworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgcng7CisJc3RydWN0IGt2ZWMgdmVjc1syXTsKKwlzaXplX3QgbGVuZ3RoOworCWludCByYywgdG90bGVuOworCXVpbnQzMl90IHBoeXNfb2ZzID0gd3JpdGVfb2ZzKGMpOworCisJQlVHX09OKCF4ZC0+eG5hbWUpOworCisJdmVjc1swXS5pb3ZfYmFzZSA9ICZyeDsKKwl2ZWNzWzBdLmlvdl9sZW4gPSBQQUQoc2l6ZW9mKHJ4KSk7CisJdmVjc1sxXS5pb3ZfYmFzZSA9IHhkLT54bmFtZTsKKwl2ZWNzWzFdLmlvdl9sZW4gPSB4ZC0+bmFtZV9sZW4gKyAxICsgeGQtPnZhbHVlX2xlbjsKKwl0b3RsZW4gPSB2ZWNzWzBdLmlvdl9sZW4gKyB2ZWNzWzFdLmlvdl9sZW47CisKKwkvKiBTZXR1cCByYXcteGF0dHIgKi8KKwlyeC5tYWdpYyA9IGNwdV90b19qZTE2KEpGRlMyX01BR0lDX0JJVE1BU0spOworCXJ4Lm5vZGV0eXBlID0gY3B1X3RvX2plMTYoSkZGUzJfTk9ERVRZUEVfWEFUVFIpOworCXJ4LnRvdGxlbiA9IGNwdV90b19qZTMyKFBBRCh0b3RsZW4pKTsKKwlyeC5oZHJfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgJnJ4LCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkgLSA0KSk7CisKKwlyeC54aWQgPSBjcHVfdG9famUzMih4ZC0+eGlkKTsKKwlyeC52ZXJzaW9uID0gY3B1X3RvX2plMzIoKyt4ZC0+dmVyc2lvbik7CisJcngueHByZWZpeCA9IHhkLT54cHJlZml4OworCXJ4Lm5hbWVfbGVuID0geGQtPm5hbWVfbGVuOworCXJ4LnZhbHVlX2xlbiA9IGNwdV90b19qZTE2KHhkLT52YWx1ZV9sZW4pOworCXJ4LmRhdGFfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgdmVjc1sxXS5pb3ZfYmFzZSwgdmVjc1sxXS5pb3ZfbGVuKSk7CisJcngubm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcngsIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSAtIDQpKTsKKworCXJjID0gamZmczJfZmxhc2hfd3JpdGV2KGMsIHZlY3MsIDIsIHBoeXNfb2ZzLCAmbGVuZ3RoLCAwKTsKKwlpZiAocmMgfHwgdG90bGVuICE9IGxlbmd0aCkgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9mbGFzaF93cml0ZXYoKT0lZCwgcmVxPSV1LCB3cm90ZT0lenUsIGF0ICUjMDh4XG4iLAorCQkJICAgICAgcmMsIHRvdGxlbiwgbGVuZ3RoLCBwaHlzX29mcyk7CisJCXJjID0gcmMgPyByYyA6IC1FSU87CisJCWlmIChsZW5ndGgpCisJCQlqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcGh5c19vZnMgfCBSRUZfT0JTT0xFVEUsIFBBRCh0b3RsZW4pLCBOVUxMKTsKKworCQlyZXR1cm4gcmM7CisJfQorCisJLyogc3VjY2VzcyAqLworCXJhdyA9IGpmZnMyX2FkZF9waHlzaWNhbF9ub2RlX3JlZihjLCBwaHlzX29mcyB8IFJFRl9QUklTVElORSwgUEFEKHRvdGxlbiksIE5VTEwpOworCS8qIEZJWE1FICovIHJhdy0+bmV4dF9pbl9pbm8gPSAodm9pZCAqKXhkOworCisJaWYgKHhkLT5ub2RlKQorCQlkZWxldGVfeGF0dHJfZGF0dW1fbm9kZShjLCB4ZCk7CisJeGQtPm5vZGUgPSByYXc7CisKKwlkYmdfeGF0dHIoInN1Y2Nlc3Mgb24gc2F2aW5nIHhkYXR1bSAoeGlkPSV1LCB2ZXJzaW9uPSV1LCB4cHJlZml4PSV1LCB4bmFtZT0nJXMnKVxuIiwKKwkJICB4ZC0+eGlkLCB4ZC0+dmVyc2lvbiwgeGQtPnhwcmVmaXgsIHhkLT54bmFtZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqY3JlYXRlX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCQkJICAgIGludCB4cHJlZml4LCBjb25zdCBjaGFyICp4bmFtZSwKKwkJCQkJCSAgICBjb25zdCBjaGFyICp4dmFsdWUsIGludCB4c2l6ZSkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOworCXVpbnQzMl90IGhhc2hrZXksIG5hbWVfbGVuOworCWNoYXIgKmRhdGE7CisJaW50IGksIHJjOworCisJLyogU2VhcmNoIHhhdHRyX2RhdHVtIGhhcyBzYW1lIHhuYW1lL3h2YWx1ZSBieSBpbmRleCAqLworCWhhc2hrZXkgPSB4YXR0cl9kYXR1bV9oYXNoa2V5KHhwcmVmaXgsIHhuYW1lLCB4dmFsdWUsIHhzaXplKTsKKwlpID0gaGFzaGtleSAlIFhBVFRSSU5ERVhfSEFTSFNJWkU7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh4ZCwgJmMtPnhhdHRyaW5kZXhbaV0sIHhpbmRleCkgeworCQlpZiAoeGQtPmhhc2hrZXk9PWhhc2hrZXkKKwkJICAgICYmIHhkLT54cHJlZml4PT14cHJlZml4CisJCSAgICAmJiB4ZC0+dmFsdWVfbGVuPT14c2l6ZQorCQkgICAgJiYgIXN0cmNtcCh4ZC0+eG5hbWUsIHhuYW1lKQorCQkgICAgJiYgIW1lbWNtcCh4ZC0+eHZhbHVlLCB4dmFsdWUsIHhzaXplKSkgeworCQkJeGQtPnJlZmNudCsrOworCQkJcmV0dXJuIHhkOworCQl9CisJfQorCisJLyogTm90IGZvdW5kLCBDcmVhdGUgTkVXIFhBVFRSLUNhY2hlICovCisJbmFtZV9sZW4gPSBzdHJsZW4oeG5hbWUpOworCisJeGQgPSBqZmZzMl9hbGxvY194YXR0cl9kYXR1bSgpOworCWlmICgheGQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJZGF0YSA9IGttYWxsb2MobmFtZV9sZW4gKyAxICsgeHNpemUsIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhkKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCXN0cmNweShkYXRhLCB4bmFtZSk7CisJbWVtY3B5KGRhdGEgKyBuYW1lX2xlbiArIDEsIHh2YWx1ZSwgeHNpemUpOworCisJeGQtPnJlZmNudCA9IDE7CisJeGQtPnhpZCA9ICsrYy0+aGlnaGVzdF94aWQ7CisJeGQtPmZsYWdzIHw9IEpGRlMyX1hGTEFHU19IT1Q7CisJeGQtPnhwcmVmaXggPSB4cHJlZml4OworCisJeGQtPmhhc2hrZXkgPSBoYXNoa2V5OworCXhkLT54bmFtZSA9IGRhdGE7CisJeGQtPnh2YWx1ZSA9IGRhdGEgKyBuYW1lX2xlbiArIDE7CisJeGQtPm5hbWVfbGVuID0gbmFtZV9sZW47CisJeGQtPnZhbHVlX2xlbiA9IHhzaXplOworCXhkLT5kYXRhX2NyYyA9IGNyYzMyKDAsIGRhdGEsIHhkLT5uYW1lX2xlbiArIDEgKyB4ZC0+dmFsdWVfbGVuKTsKKworCXJjID0gc2F2ZV94YXR0cl9kYXR1bShjLCB4ZCk7CisJaWYgKHJjKSB7CisJCWtmcmVlKHhkLT54bmFtZSk7CisJCWpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oeGQpOworCQlyZXR1cm4gRVJSX1BUUihyYyk7CisJfQorCisJLyogSW5zZXJ0IEhhc2ggSW5kZXggKi8KKwlpID0gaGFzaGtleSAlIFhBVFRSSU5ERVhfSEFTSFNJWkU7CisJbGlzdF9hZGQoJnhkLT54aW5kZXgsICZjLT54YXR0cmluZGV4W2ldKTsKKworCWMtPnhkYXR1bV9tZW1fdXNhZ2UgKz0gKHhkLT5uYW1lX2xlbiArIDEgKyB4ZC0+dmFsdWVfbGVuKTsKKwlyZWNsYWltX3hhdHRyX2RhdHVtKGMpOworCisJcmV0dXJuIHhkOworfQorCisvKiAtLS0tLS0tLSB4cmVmIHJlbGF0ZWQgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLQorICogdmVyaWZ5X3hhdHRyX3JlZihjLCByZWYpCisgKiAgIGlzIHVzZWQgdG8gbG9hZCB4cmVmIGluZm9ybWF0aW9uIGZyb20gbWVkaXVtLiBCZWNhdXNlIHN1bW1hcnkgZGF0YSBkb2VzIG5vdAorICogICBjb250YWluIHhpZC9pbm8sIGl0J3MgbmVjZXNzYXJ5IHRvIHZlcmlmeSBvbmNlIHdoaWxlIG1vdW50aW5nIHByb2Nlc3MuCisgKiBkZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKQorICogICBpcyB1c2VkIHRvIGRlbGV0ZSBhIGpmZnMyIG5vZGUgaXMgZG9taW5hdGVkIGJ5IHhyZWYuIFdoZW4gRUJTIGlzIGVuYWJsZWQsCisgKiAgIGl0IG92ZXJ3cml0ZXMgdGhlIG9ic29sZXRlIG5vZGUgYnkgbXlzZWxmLiAKKyAqIGRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKQorICogICBpcyB1c2VkIHRvIGRlbGV0ZSBqZmZzMl94YXR0cl9yZWYgb2JqZWN0LiBJZiB0aGUgcmVmZXJlbmNlIGNvdW50ZXIgb2YgeGRhdHVtCisgKiAgIGlzIHJlZmVyZWQgYnkgdGhpcyB4cmVmIGJlY29tZSAwLCBkZWxldGVfeGF0dHJfZGF0dW0oKSBpcyBjYWxsZWQgbGF0ZXIuCisgKiBzYXZlX3hhdHRyX3JlZihjLCByZWYpCisgKiAgIGlzIHVzZWQgdG8gd3JpdGUgeHJlZiB0byBtZWRpdW0uCisgKiBjcmVhdGVfeGF0dHJfcmVmKGMsIGljLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBjcmVhdGUgYSBuZXcgeHJlZiBhbmQgd3JpdGUgdG8gbWVkaXVtLgorICogamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKGMsIGljKQorICogICBpcyBjYWxsZWQgdG8gcmVtb3ZlIHhyZWZzIHJlbGF0ZWQgdG8gb2Jzb2xldGUgaW5vZGUgd2hlbiBpbm9kZSBpcyB1bmxpbmtlZC4KKyAqIGpmZnMyX3hhdHRyX2ZyZWVfaW5vZGUoYywgaWMpCisgKiAgIGlzIGNhbGxlZCB0byByZWxlYXNlIHhhdHRyIHJlbGF0ZWQgb2JqZWN0cyB3aGVuIHVubW91bnRpbmcuIAorICogY2hlY2tfeGF0dHJfcmVmX2lub2RlKGMsIGljKQorICogICBpcyB1c2VkIHRvIGNvbmZpcm0gaW5vZGUgZG9lcyBub3QgaGF2ZSBkdXBsaWNhdGUgeGF0dHIgbmFtZS92YWx1ZSBwYWlyLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBpbnQgdmVyaWZ5X3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKQoreworCXN0cnVjdCBqZmZzMl9lcmFzZWJsb2NrICpqZWI7CisJc3RydWN0IGpmZnMyX3Jhd194cmVmIHJyOworCXNpemVfdCByZWFkbGVuOworCXVpbnQzMl90IGNyYywgdG90bGVuOworCWludCByYzsKKworCUJVR19PTihyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBSRUZfVU5DSEVDS0VEKTsKKworCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSksIHNpemVvZihyciksICZyZWFkbGVuLCAoY2hhciAqKSZycik7CisJaWYgKHJjIHx8IHNpemVvZihycikgIT0gcmVhZGxlbikgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9mbGFzaF9yZWFkKCk9JWQsIHJlcT0lenUsIHJlYWQ9JXp1LCBhdCAlIzA4eFxuIiwKKwkJCSAgICAgIHJjLCBzaXplb2YocnIpLCByZWFkbGVuLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSkpOworCQlyZXR1cm4gcmMgPyByYyA6IC1FSU87CisJfQorCS8qIG9ic29sZXRlIG5vZGUgKi8KKwljcmMgPSBjcmMzMigwLCAmcnIsIHNpemVvZihycikgLSA0KTsKKwlpZiAoY3JjICE9IGplMzJfdG9fY3B1KHJyLm5vZGVfY3JjKSkgeworCQlpZiAoamUzMl90b19jcHUocnIubm9kZV9jcmMpICE9IDB4ZmZmZmZmZmYpCisJCQlKRkZTMl9FUlJPUigibm9kZSBDUkMgZmFpbGVkIGF0ICUjMDh4LCByZWFkPSUjMDh4LCBjYWxjPSUjMDh4XG4iLAorCQkJCSAgICByZWZfb2Zmc2V0KHJlZi0+bm9kZSksIGplMzJfdG9fY3B1KHJyLm5vZGVfY3JjKSwgY3JjKTsKKwkJcmV0dXJuIEVJTzsKKwl9CisJaWYgKGplMTZfdG9fY3B1KHJyLm1hZ2ljKSAhPSBKRkZTMl9NQUdJQ19CSVRNQVNLCisJICAgIHx8IGplMTZfdG9fY3B1KHJyLm5vZGV0eXBlKSAhPSBKRkZTMl9OT0RFVFlQRV9YUkVGCisJICAgIHx8IGplMzJfdG9fY3B1KHJyLnRvdGxlbikgIT0gUEFEKHNpemVvZihycikpKSB7CisJCUpGRlMyX0VSUk9SKCJpbmNvbnNpc3RlbnQgeHJlZiBhdCAlIzA4eCwgbWFnaWM9JSMwNHgvJSMwNHgsICIKKwkJCSAgICAibm9kZXR5cGU9JSMwNHgvJSMwNHgsIHRvdGxlbj0ldS8lenVcbiIsCisJCQkgICAgcmVmX29mZnNldChyZWYtPm5vZGUpLCBqZTE2X3RvX2NwdShyci5tYWdpYyksIEpGRlMyX01BR0lDX0JJVE1BU0ssCisJCQkgICAgamUxNl90b19jcHUocnIubm9kZXR5cGUpLCBKRkZTMl9OT0RFVFlQRV9YUkVGLAorCQkJICAgIGplMzJfdG9fY3B1KHJyLnRvdGxlbiksIFBBRChzaXplb2YocnIpKSk7CisJCXJldHVybiBFSU87CisJfQorCXJlZi0+aW5vID0gamUzMl90b19jcHUocnIuaW5vKTsKKwlyZWYtPnhpZCA9IGplMzJfdG9fY3B1KHJyLnhpZCk7CisKKwkvKiBmaXh1cCBzdXBlcmJsb2NrL2VyYXNlYmxvY2sgaW5mbyAqLworCWplYiA9ICZjLT5ibG9ja3NbcmVmX29mZnNldChyZWYtPm5vZGUpIC8gYy0+c2VjdG9yX3NpemVdOworCXRvdGxlbiA9IFBBRChzaXplb2YocnIpKTsKKworCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwljLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47IGMtPnVzZWRfc2l6ZSArPSB0b3RsZW47CisJamViLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47IGplYi0+dXNlZF9zaXplICs9IHRvdGxlbjsKKwlyZWYtPm5vZGUtPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQocmVmLT5ub2RlKSB8IFJFRl9QUklTVElORTsKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKworCWRiZ194YXR0cigic3VjY2VzcyBvbiB2ZXJpZnlpbmcgeHJlZiAoaW5vPSV1LCB4aWQ9JXUpIGF0ICUjMDh4XG4iLAorCQkgIHJlZi0+aW5vLCByZWYtPnhpZCwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVsZXRlX3hhdHRyX3JlZl9ub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJc3RydWN0IGpmZnMyX3Jhd194cmVmIHJyOworCXNpemVfdCBsZW5ndGg7CisJaW50IHJjOworCisJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkgeworCQltZW1zZXQoJnJyLCAweGZmLCBzaXplb2YocnIpKTsKKwkJcmMgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIHJlZl9vZmZzZXQocmVmLT5ub2RlKSwKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSksCisJCQkJICAgICAgJmxlbmd0aCwgKGNoYXIgKikmcnIpOworCQlpZiAocmMgfHwgbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkgeworCQkJSkZGUzJfRVJST1IoImpmZnMyX2ZsYXNoX3JlYWQoKT0lZCwgcmVxPSV6dSwgcmVhZD0lenUgYXQgJSMwOHhcbiIsCisJCQkJICAgIHJjLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSksCisJCQkJICAgIGxlbmd0aCwgcmVmX29mZnNldChyZWYtPm5vZGUpKTsKKwkJfQorCQlyYyA9IGpmZnMyX2ZsYXNoX3dyaXRlKGMsIHJlZl9vZmZzZXQocmVmLT5ub2RlKSwgc2l6ZW9mKHJyKSwKKwkJCQkgICAgICAgJmxlbmd0aCwgKGNoYXIgKikmcnIpOworCQlpZiAocmMgfHwgbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hyZWYpKSB7CisJCQlKRkZTMl9FUlJPUigiamZmczJfZmxhc2hfd3JpdGUoKT0lZCwgcmVxPSV6dSwgd3JvdGU9JXp1IGF0ICUjMDh4XG4iLAorCQkJCSAgICByYywgc2l6ZW9mKHJyKSwgbGVuZ3RoLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSkpOworCQl9CisJfQorCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwlyZWYtPm5vZGUtPm5leHRfaW5faW5vID0gTlVMTDsKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywgcmVmLT5ub2RlKTsKKwlyZWYtPm5vZGUgPSBOVUxMOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKworCUJVR19PTighcmVmLT5ub2RlKTsKKwlkZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsKKworCXhkID0gcmVmLT54ZDsKKwl4ZC0+cmVmY250LS07CisJaWYgKCF4ZC0+cmVmY250KQorCQlkZWxldGVfeGF0dHJfZGF0dW0oYywgeGQpOworCWpmZnMyX2ZyZWVfeGF0dHJfcmVmKHJlZik7Cit9CisKK3N0YXRpYyBpbnQgc2F2ZV94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpyYXc7CisJc3RydWN0IGpmZnMyX3Jhd194cmVmIHJyOworCXNpemVfdCBsZW5ndGg7CisJdWludDMyX3QgcGh5c19vZnMgPSB3cml0ZV9vZnMoYyk7CisJaW50IHJldDsKKworCXJyLm1hZ2ljID0gY3B1X3RvX2plMTYoSkZGUzJfTUFHSUNfQklUTUFTSyk7CisJcnIubm9kZXR5cGUgPSBjcHVfdG9famUxNihKRkZTMl9OT0RFVFlQRV9YUkVGKTsKKwlyci50b3RsZW4gPSBjcHVfdG9famUzMihQQUQoc2l6ZW9mKHJyKSkpOworCXJyLmhkcl9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcnIsIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSAtIDQpKTsKKworCXJyLmlubyA9IGNwdV90b19qZTMyKHJlZi0+aWMtPmlubyk7CisJcnIueGlkID0gY3B1X3RvX2plMzIocmVmLT54ZC0+eGlkKTsKKwlyci5ub2RlX2NyYyA9IGNwdV90b19qZTMyKGNyYzMyKDAsICZyciwgc2l6ZW9mKHJyKSAtIDQpKTsKKworCXJldCA9IGpmZnMyX2ZsYXNoX3dyaXRlKGMsIHBoeXNfb2ZzLCBzaXplb2YocnIpLCAmbGVuZ3RoLCAoY2hhciAqKSZycik7CisJaWYgKHJldCB8fCBzaXplb2YocnIpICE9IGxlbmd0aCkgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9mbGFzaF93cml0ZSgpIHJldHVybmVkICVkLCByZXF1ZXN0PSV6dSwgcmV0bGVuPSV6dSwgYXQgJSMwOHhcbiIsCisJCQkgICAgICByZXQsIHNpemVvZihyciksIGxlbmd0aCwgcGh5c19vZnMpOworCQlyZXQgPSByZXQgPyByZXQgOiAtRUlPOworCQlpZiAobGVuZ3RoKQorCQkJamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHBoeXNfb2ZzIHwgUkVGX09CU09MRVRFLCBQQUQoc2l6ZW9mKHJyKSksIE5VTEwpOworCisJCXJldHVybiByZXQ7CisJfQorCisJcmF3ID0gamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHBoeXNfb2ZzIHwgUkVGX1BSSVNUSU5FLCBQQUQoc2l6ZW9mKHJyKSksIE5VTEwpOworCS8qIEZJWE1FICovIHJhdy0+bmV4dF9pbl9pbm8gPSAodm9pZCAqKXJlZjsKKwlpZiAocmVmLT5ub2RlKQorCQlkZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsKKwlyZWYtPm5vZGUgPSByYXc7CisKKwlkYmdfeGF0dHIoInN1Y2Nlc3Mgb24gc2F2aW5nIHhyZWYgKGlubz0ldSwgeGlkPSV1KVxuIiwgcmVmLT5pYy0+aW5vLCByZWYtPnhkLT54aWQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpjcmVhdGVfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljLAorCQkJCQkJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWY7CisJaW50IHJldDsKKworCXJlZiA9IGpmZnMyX2FsbG9jX3hhdHRyX3JlZigpOworCWlmICghcmVmKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlyZWYtPmljID0gaWM7CisJcmVmLT54ZCA9IHhkOworCisJcmV0ID0gc2F2ZV94YXR0cl9yZWYoYywgcmVmKTsKKwlpZiAocmV0KSB7CisJCWpmZnMyX2ZyZWVfeGF0dHJfcmVmKHJlZik7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJLyogQ2hhaW4gdG8gaW5vZGUgKi8KKwlyZWYtPm5leHQgPSBpYy0+eHJlZjsKKwlpYy0+eHJlZiA9IHJlZjsKKworCXJldHVybiByZWY7IC8qIHN1Y2Nlc3MgKi8KK30KKwordm9pZCBqZmZzMl94YXR0cl9kZWxldGVfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpCit7CisJLyogSXQncyBjYWxsZWQgZnJvbSBqZmZzMl9jbGVhcl9pbm9kZSgpIG9uIGlub2RlIHJlbW92aW5nLgorCSAgIFdoZW4gYW4gaW5vZGUgd2l0aCBYQVRUUiBpcyByZW1vdmVkLCB0aG9zZSBYQVRUUnMgbXVzdCBiZSByZW1vdmVkLiAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKl9yZWY7CisKKwlpZiAoIWljIHx8IGljLT5ubGluayA+IDApCisJCXJldHVybjsKKworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJZm9yIChyZWYgPSBpYy0+eHJlZjsgcmVmOyByZWYgPSBfcmVmKSB7CisJCV9yZWYgPSByZWYtPm5leHQ7CisJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwl9CisJaWMtPnhyZWYgPSBOVUxMOworCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworfQorCit2b2lkIGpmZnMyX3hhdHRyX2ZyZWVfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpCit7CisJLyogSXQncyBjYWxsZWQgZnJvbSBqZmZzMl9mcmVlX2lub19jYWNoZXMoKSB1bnRpbCB1bm1vdW50aW5nIEZTLiAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqX3JlZjsKKworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJZm9yIChyZWYgPSBpYy0+eHJlZjsgcmVmOyByZWYgPSBfcmVmKSB7CisJCV9yZWYgPSByZWYtPm5leHQ7CisJCXhkID0gcmVmLT54ZDsKKwkJeGQtPnJlZmNudC0tOworCQlpZiAoIXhkLT5yZWZjbnQpIHsKKwkJCXVubG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhkKTsKKwkJfQorCQlqZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworCX0KKwlpYy0+eHJlZiA9IE5VTEw7CisJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfeGF0dHJfcmVmX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQoreworCS8qIHN1Y2Nlc3Mgb2YgY2hlY2tfeGF0dHJfcmVmX2lub2RlKCkgbWVhbnMgdGFodCBpbm9kZSAoaWMpIGRvc2Ugbm90IGhhdmUKKwkgKiBkdXBsaWNhdGUgbmFtZS92YWx1ZSBwYWlycy4gSWYgZHVwbGljYXRlIG5hbWUvdmFsdWUgcGFpciB3b3VsZCBiZSBmb3VuZCwKKwkgKiBvbmUgd2lsbCBiZSByZW1vdmVkLgorCSAqLworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKmNtcCwgKipwcmVmOworCWludCByYyA9IDA7CisKKwlpZiAobGlrZWx5KGljLT5mbGFncyAmIElOT19GTEFHU19YQVRUUl9DSEVDS0VEKSkKKwkJcmV0dXJuIDA7CisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKyByZXRyeToKKwlyYyA9IDA7CisJZm9yIChyZWY9aWMtPnhyZWYsIHByZWY9JmljLT54cmVmOyByZWY7IHByZWY9JnJlZi0+bmV4dCwgcmVmPXJlZi0+bmV4dCkgeworCQlpZiAoIXJlZi0+eGQtPnhuYW1lKSB7CisJCQlyYyA9IGxvYWRfeGF0dHJfZGF0dW0oYywgcmVmLT54ZCk7CisJCQlpZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJCSpwcmVmID0gcmVmLT5uZXh0OworCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8IDApKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWZvciAoY21wPXJlZi0+bmV4dCwgcHJlZj0mcmVmLT5uZXh0OyBjbXA7IHByZWY9JmNtcC0+bmV4dCwgY21wPWNtcC0+bmV4dCkgeworCQkJaWYgKCFjbXAtPnhkLT54bmFtZSkgeworCQkJCXJlZi0+eGQtPmZsYWdzIHw9IEpGRlMyX1hGTEFHU19CSU5EOworCQkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCBjbXAtPnhkKTsKKwkJCQlyZWYtPnhkLT5mbGFncyAmPSB+SkZGUzJfWEZMQUdTX0JJTkQ7CisJCQkJaWYgKHVubGlrZWx5KHJjID4gMCkpIHsKKwkJCQkJKnByZWYgPSBjbXAtPm5leHQ7CisJCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgY21wKTsKKwkJCQkJZ290byByZXRyeTsKKwkJCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaWYgKHJlZi0+eGQtPnhwcmVmaXggPT0gY21wLT54ZC0+eHByZWZpeAorCQkJICAgICYmICFzdHJjbXAocmVmLT54ZC0+eG5hbWUsIGNtcC0+eGQtPnhuYW1lKSkgeworCQkJCSpwcmVmID0gY21wLT5uZXh0OworCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgY21wKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfQorCQl9CisJfQorCWljLT5mbGFncyB8PSBJTk9fRkxBR1NfWEFUVFJfQ0hFQ0tFRDsKKyBvdXQ6CisJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIC0tLS0tLS0tIHhhdHRyIHN1YnN5c3RlbSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tCisgKiBqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShjKQorICogICBpcyB1c2VkIHRvIGluaXRpYWxpemUgc2VtYXBob3JlIGFuZCBsaXN0X2hlYWQsIGFuZCBzb21lIHZhcmlhYmxlcy4KKyAqIGpmZnMyX2ZpbmRfeGF0dHJfZGF0dW0oYywgeGlkKQorICogICBpcyB1c2VkIHRvIGxvb2t1cCB4ZGF0dW0gd2hpbGUgc2Nhbm5pbmcgcHJvY2Vzcy4KKyAqIGpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShjKQorICogICBpcyB1c2VkIHRvIHJlbGVhc2UgYW55IHhhdHRyIHJlbGF0ZWQgb2JqZWN0cy4KKyAqIGpmZnMyX2J1aWxkX3hhdHRyX3N1YnN5c3RlbShjKQorICogICBpcyB1c2VkIHRvIGFzc29jaWF0ZSB4ZGF0dW0gYW5kIHhyZWYgd2hpbGUgc3VwZXIgYmxvY2sgYnVpbGRpbmcgcHJvY2Vzcy4KKyAqIGpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKGMsIHhpZCwgdmVyc2lvbikKKyAqICAgaXMgdXNlZCB0byBpbnNlcnQgeGRhdHVtIHdoaWxlIHNjYW5uaW5nIHByb2Nlc3MuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordm9pZCBqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYykKK3sKKwlpbnQgaTsKKworCWZvciAoaT0wOyBpIDwgWEFUVFJJTkRFWF9IQVNIU0laRTsgaSsrKQorCQlJTklUX0xJU1RfSEVBRCgmYy0+eGF0dHJpbmRleFtpXSk7CisJSU5JVF9MSVNUX0hFQUQoJmMtPnhhdHRyX3VuY2hlY2tlZCk7CisJYy0+eHJlZl90ZW1wID0gTlVMTDsKKworCWluaXRfcndzZW0oJmMtPnhhdHRyX3NlbSk7CisJYy0+eGRhdHVtX21lbV91c2FnZSA9IDA7CisJYy0+eGRhdHVtX21lbV90aHJlc2hvbGQgPSAzMiAqIDEwMjQ7CS8qIERlZmF1bHQgMzJLQiAqLworfQorCitzdGF0aWMgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICpqZmZzMl9maW5kX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCB1aW50MzJfdCB4aWQpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKwlpbnQgaSA9IHhpZCAlIFhBVFRSSU5ERVhfSEFTSFNJWkU7CisKKwkvKiBJdCdzIG9ubHkgdXNlZCBpbiBzY2FubmluZy9idWlsZGluZyBwcm9jZXNzLiAqLworCUJVR19PTighKGMtPmZsYWdzICYgKEpGRlMyX1NCX0ZMQUdfU0NBTk5JTkd8SkZGUzJfU0JfRkxBR19CVUlMRElORykpKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoeGQsICZjLT54YXR0cmluZGV4W2ldLCB4aW5kZXgpIHsKKwkJaWYgKHhkLT54aWQ9PXhpZCkKKwkJCXJldHVybiB4ZDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgamZmczJfY2xlYXJfeGF0dHJfc3Vic3lzdGVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQsICpfeGQ7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqX3JlZjsKKwlpbnQgaTsKKworCWZvciAocmVmPWMtPnhyZWZfdGVtcDsgcmVmOyByZWYgPSBfcmVmKSB7CisJCV9yZWYgPSByZWYtPm5leHQ7CisJCWpmZnMyX2ZyZWVfeGF0dHJfcmVmKHJlZik7CisJfQorCWMtPnhyZWZfdGVtcCA9IE5VTEw7CisKKwlmb3IgKGk9MDsgaSA8IFhBVFRSSU5ERVhfSEFTSFNJWkU7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGQsIF94ZCwgJmMtPnhhdHRyaW5kZXhbaV0sIHhpbmRleCkgeworCQkJbGlzdF9kZWwoJnhkLT54aW5kZXgpOworCQkJaWYgKHhkLT54bmFtZSkKKwkJCQlrZnJlZSh4ZC0+eG5hbWUpOworCQkJamZmczJfZnJlZV94YXR0cl9kYXR1bSh4ZCk7CisJCX0KKwl9Cit9CisKK3ZvaWQgamZmczJfYnVpbGRfeGF0dHJfc3Vic3lzdGVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQoreworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKl9yZWY7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCwgKl94ZDsKKwlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljOworCWludCBpLCB4ZGF0dW1fY291bnQgPTAsIHhkYXR1bV91bmNoZWNrZWRfY291bnQgPSAwLCB4cmVmX2NvdW50ID0gMDsKKworCUJVR19PTighKGMtPmZsYWdzICYgSkZGUzJfU0JfRkxBR19CVUlMRElORykpOworCisJLyogUGhhc2UuMSAqLworCWZvciAocmVmPWMtPnhyZWZfdGVtcDsgcmVmOyByZWY9X3JlZikgeworCQlfcmVmID0gcmVmLT5uZXh0OworCQkvKiBjaGVja2luZyBSRUZfVU5DSEVDS0VEIG5vZGVzICovCisJCWlmIChyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBSRUZfUFJJU1RJTkUpIHsKKwkJCWlmICh2ZXJpZnlfeGF0dHJfcmVmKGMsIHJlZikpIHsKKwkJCQlkZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsKKwkJCQlqZmZzMl9mcmVlX3hhdHRyX3JlZihyZWYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCS8qIEF0IHRoaXMgcG9pbnQsIHJlZi0+eGlkIGFuZCByZWYtPmlubyBjb250YWluIFhJRCBhbmQgaW5vZGUgbnVtYmVyLgorCQkgICByZWYtPnhkIGFuZCByZWYtPmljIGFyZSBub3QgdmFsaWQgeWV0LiAqLworCQl4ZCA9IGpmZnMyX2ZpbmRfeGF0dHJfZGF0dW0oYywgcmVmLT54aWQpOworCQlpYyA9IGpmZnMyX2dldF9pbm9fY2FjaGUoYywgcmVmLT5pbm8pOworCQlpZiAoIXhkIHx8ICFpYykgeworCQkJaWYgKHJlZl9mbGFncyhyZWYtPm5vZGUpICE9IFJFRl9VTkNIRUNLRUQpCisJCQkJSkZGUzJfV0FSTklORygieHJlZihpbm89JXUsIHhpZD0ldSkgaXMgb3JwaGFuLiBcbiIsCisJCQkJCSAgICAgIHJlZi0+aW5vLCByZWYtPnhpZCk7CisJCQlkZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsKKwkJCWpmZnMyX2ZyZWVfeGF0dHJfcmVmKHJlZik7CisJCQljb250aW51ZTsKKwkJfQorCQlyZWYtPnhkID0geGQ7CisJCXJlZi0+aWMgPSBpYzsKKwkJeGQtPnJlZmNudCsrOworCQlyZWYtPm5leHQgPSBpYy0+eHJlZjsKKwkJaWMtPnhyZWYgPSByZWY7CisJCXhyZWZfY291bnQrKzsKKwl9CisJYy0+eHJlZl90ZW1wID0gTlVMTDsKKwkvKiBBZnRlciB0aGlzLCByZWYtPnhpZC9pbm8gYXJlIE5FVkVSIHVzZWQuICovCisKKwkvKiBQaGFzZS4yICovCisJZm9yIChpPTA7IGkgPCBYQVRUUklOREVYX0hBU0hTSVpFOyBpKyspIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhkLCBfeGQsICZjLT54YXR0cmluZGV4W2ldLCB4aW5kZXgpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCQkJaWYgKCF4ZC0+cmVmY250KSB7CisJCQkJaWYgKHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVGX1VOQ0hFQ0tFRCkKKwkJCQkJSkZGUzJfV0FSTklORygib3JwaGFuIHhkYXR1bSh4aWQ9JXUsIHZlcnNpb249JXUpIGF0ICUjMDh4XG4iLAorCQkJCQkJICAgICAgeGQtPnhpZCwgeGQtPnZlcnNpb24sIHJlZl9vZmZzZXQoeGQtPm5vZGUpKTsKKwkJCQlkZWxldGVfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVGX1BSSVNUSU5FKSB7CisJCQkJZGJnX3hhdHRyKCJ1bmNoZWNrZWQgeGRhdHVtKHhpZD0ldSkgYXQgJSMwOHhcbiIsCisJCQkJCSAgeGQtPnhpZCwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQkJCWxpc3RfYWRkKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJfdW5jaGVja2VkKTsKKwkJCQl4ZGF0dW1fdW5jaGVja2VkX2NvdW50Kys7CisJCQl9CisJCQl4ZGF0dW1fY291bnQrKzsKKwkJfQorCX0KKwkvKiBidWlsZCBjb21wbGV0ZSAqLworCUpGRlMyX05PVElDRSgiY29tcGxldGUgYnVpbGRpbmcgeGF0dHIgc3Vic3lzdGVtLCAldSBvZiB4ZGF0dW0gKCV1IHVuY2hlY2tlZCkgYW5kICIKKwkJICAgICAiJXUgb2YgeHJlZiBmb3VuZC5cbiIsIHhkYXR1bV9jb3VudCwgeGRhdHVtX3VuY2hlY2tlZF9jb3VudCwgeHJlZl9jb3VudCk7Cit9CisKK3N0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqamZmczJfc2V0dXBfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsCisJCQkJCQkgIHVpbnQzMl90IHhpZCwgdWludDMyX3QgdmVyc2lvbikKK3sKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCAqX3hkOworCisJX3hkID0gamZmczJfZmluZF94YXR0cl9kYXR1bShjLCB4aWQpOworCWlmIChfeGQpIHsKKwkJZGJnX3hhdHRyKCJkdXBsaWNhdGUgeGRhdHVtICh4aWQ9JXUsIHZlcnNpb249JXUvJXUpIGF0ICUjMDh4XG4iLAorCQkJICB4aWQsIHZlcnNpb24sIF94ZC0+dmVyc2lvbiwgcmVmX29mZnNldChfeGQtPm5vZGUpKTsKKwkJaWYgKHZlcnNpb24gPCBfeGQtPnZlcnNpb24pCisJCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKKwl9CisJeGQgPSBqZmZzMl9hbGxvY194YXR0cl9kYXR1bSgpOworCWlmICgheGQpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCXhkLT54aWQgPSB4aWQ7CisJeGQtPnZlcnNpb24gPSB2ZXJzaW9uOworCWlmICh4ZC0+eGlkID4gYy0+aGlnaGVzdF94aWQpCisJCWMtPmhpZ2hlc3RfeGlkID0geGQtPnhpZDsKKwlsaXN0X2FkZF90YWlsKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJpbmRleFt4aWQgJSBYQVRUUklOREVYX0hBU0hTSVpFXSk7CisKKwlpZiAoX3hkKSB7CisJCWxpc3RfZGVsX2luaXQoJl94ZC0+eGluZGV4KTsKKwkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgX3hkKTsKKwkJamZmczJfZnJlZV94YXR0cl9kYXR1bShfeGQpOworCX0KKwlyZXR1cm4geGQ7Cit9CisKKy8qIC0tLS0tLS0tIHhhdHRyIHN1YnN5c3RlbSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tCisgKiB4cHJlZml4X3RvX2hhbmRsZXIoeHByZWZpeCkKKyAqICAgaXMgdXNlZCB0byB0cmFuc2xhdGUgeHByZWZpeCBpbnRvIHhhdHRyX2hhbmRsZXIuCisgKiBqZmZzMl9saXN0eGF0dHIoZGVudHJ5LCBidWZmZXIsIHNpemUpCisgKiAgIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGxpc3R4YXR0ciBoYW5kbGVyIG9uIGpmZnMyLgorICogZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIHhwcmVmaXgsIHhuYW1lLCBidWZmZXIsIHNpemUpCisgKiAgIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGdldHhhdHRyIGhhbmRsZXIgb24gamZmczIuCisgKiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgeHByZWZpeCwgeG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpCisgKiAgIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIHNldHhhdHRyIGhhbmRsZXIgb24gamZmczIuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IHhhdHRyX2hhbmRsZXIgKmpmZnMyX3hhdHRyX2hhbmRsZXJzW10gPSB7CisJJmpmZnMyX3VzZXJfeGF0dHJfaGFuZGxlciwKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfU0VDVVJJVFkKKwkmamZmczJfc2VjdXJpdHlfeGF0dHJfaGFuZGxlciwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19KRkZTMl9GU19QT1NJWF9BQ0wKKwkmamZmczJfYWNsX2FjY2Vzc194YXR0cl9oYW5kbGVyLAorCSZqZmZzMl9hY2xfZGVmYXVsdF94YXR0cl9oYW5kbGVyLAorI2VuZGlmCisJJmpmZnMyX3RydXN0ZWRfeGF0dHJfaGFuZGxlciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHhhdHRyX2hhbmRsZXIgKnhwcmVmaXhfdG9faGFuZGxlcihpbnQgeHByZWZpeCkgeworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpyZXQ7CisKKwlzd2l0Y2ggKHhwcmVmaXgpIHsKKwljYXNlIEpGRlMyX1hQUkVGSVhfVVNFUjoKKwkJcmV0ID0gJmpmZnMyX3VzZXJfeGF0dHJfaGFuZGxlcjsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1NFQ1VSSVRZCisJY2FzZSBKRkZTMl9YUFJFRklYX1NFQ1VSSVRZOgorCQlyZXQgPSAmamZmczJfc2VjdXJpdHlfeGF0dHJfaGFuZGxlcjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfUE9TSVhfQUNMCisJY2FzZSBKRkZTMl9YUFJFRklYX0FDTF9BQ0NFU1M6CisJCXJldCA9ICZqZmZzMl9hY2xfYWNjZXNzX3hhdHRyX2hhbmRsZXI7CisJCWJyZWFrOworCWNhc2UgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVDoKKwkJcmV0ID0gJmpmZnMyX2FjbF9kZWZhdWx0X3hhdHRyX2hhbmRsZXI7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBKRkZTMl9YUFJFRklYX1RSVVNURUQ6CisJCXJldCA9ICZqZmZzMl90cnVzdGVkX3hhdHRyX2hhbmRsZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IE5VTEw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzc2l6ZV90IGpmZnMyX2xpc3R4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYyA9IGYtPmlub2NhY2hlOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKipwcmVmOworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJc3RydWN0IHhhdHRyX2hhbmRsZXIgKnhoYW5kbGU7CisJc3NpemVfdCBsZW4sIHJjOworCWludCByZXRyeSA9IDA7CisKKwlyYyA9IGNoZWNrX3hhdHRyX3JlZl9pbm9kZShjLCBpYyk7CisJaWYgKHVubGlrZWx5KHJjKSkKKwkJcmV0dXJuIHJjOworCisJZG93bl9yZWFkKCZjLT54YXR0cl9zZW0pOworIHJldHJ5OgorCWxlbiA9IDA7CisJZm9yIChyZWY9aWMtPnhyZWYsIHByZWY9JmljLT54cmVmOyByZWY7IHByZWY9JnJlZi0+bmV4dCwgcmVmPXJlZi0+bmV4dCkgeworCQlCVUdfT04ocmVmLT5pYyAhPSBpYyk7CisJCXhkID0gcmVmLT54ZDsKKwkJaWYgKCF4ZC0+eG5hbWUpIHsKKwkJCS8qIHhkYXR1bSBpcyB1bmNoYWNoZWQgKi8KKwkJCWlmICghcmV0cnkpIHsKKwkJCQlyZXRyeSA9IDE7CisJCQkJdXBfcmVhZCgmYy0+eGF0dHJfc2VtKTsKKwkJCQlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCQkJCWdvdG8gcmV0cnk7CisJCQl9IGVsc2UgeworCQkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CisJCQkJaWYgKHVubGlrZWx5KHJjID4gMCkpIHsKKwkJCQkJKnByZWYgPSByZWYtPm5leHQ7CisJCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQkJZ290byByZXRyeTsKKwkJCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJCXhoYW5kbGUgPSB4cHJlZml4X3RvX2hhbmRsZXIoeGQtPnhwcmVmaXgpOworCQlpZiAoIXhoYW5kbGUpCisJCQljb250aW51ZTsKKwkJaWYgKGJ1ZmZlcikgeworCQkJcmMgPSB4aGFuZGxlLT5saXN0KGlub2RlLCBidWZmZXIrbGVuLCBzaXplLWxlbiwgeGQtPnhuYW1lLCB4ZC0+bmFtZV9sZW4pOworCQl9IGVsc2UgeworCQkJcmMgPSB4aGFuZGxlLT5saXN0KGlub2RlLCBOVUxMLCAwLCB4ZC0+eG5hbWUsIHhkLT5uYW1lX2xlbik7CisJCX0KKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gb3V0OworCQlsZW4gKz0gcmM7CisJfQorCXJjID0gbGVuOworIG91dDoKKwlpZiAoIXJldHJ5KSB7CisJCXVwX3JlYWQoJmMtPnhhdHRyX3NlbSk7CisJfSBlbHNlIHsKKwkJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJfQorCXJldHVybiByYzsKK30KKworaW50IGRvX2pmZnMyX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB4cHJlZml4LCBjb25zdCBjaGFyICp4bmFtZSwKKwkJICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgamZmczJfaW5vZGVfaW5mbyAqZiA9IEpGRlMyX0lOT0RFX0lORk8oaW5vZGUpOworCXN0cnVjdCBqZmZzMl9zYl9pbmZvICpjID0gSkZGUzJfU0JfSU5GTyhpbm9kZS0+aV9zYik7CisJc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYyA9IGYtPmlub2NhY2hlOworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQ7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLCAqKnByZWY7CisJaW50IHJjLCByZXRyeSA9IDA7CisKKwlyYyA9IGNoZWNrX3hhdHRyX3JlZl9pbm9kZShjLCBpYyk7CisJaWYgKHVubGlrZWx5KHJjKSkKKwkJcmV0dXJuIHJjOworCisJZG93bl9yZWFkKCZjLT54YXR0cl9zZW0pOworIHJldHJ5OgorCWZvciAocmVmPWljLT54cmVmLCBwcmVmPSZpYy0+eHJlZjsgcmVmOyBwcmVmPSZyZWYtPm5leHQsIHJlZj1yZWYtPm5leHQpIHsKKwkJQlVHX09OKHJlZi0+aWMhPWljKTsKKworCQl4ZCA9IHJlZi0+eGQ7CisJCWlmICh4ZC0+eHByZWZpeCAhPSB4cHJlZml4KQorCQkJY29udGludWU7CisJCWlmICgheGQtPnhuYW1lKSB7CisJCQkvKiB4ZGF0dW0gaXMgdW5jaGFjaGVkICovCisJCQlpZiAoIXJldHJ5KSB7CisJCQkJcmV0cnkgPSAxOworCQkJCXVwX3JlYWQoJmMtPnhhdHRyX3NlbSk7CisJCQkJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwkJCQlnb3RvIHJldHJ5OworCQkJfSBlbHNlIHsKKwkJCQlyYyA9IGxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJCWlmICh1bmxpa2VseShyYyA+IDApKSB7CisJCQkJCSpwcmVmID0gcmVmLT5uZXh0OworCQkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7CisJCQkJCWdvdG8gcmV0cnk7CisJCQkJfSBlbHNlIGlmICh1bmxpa2VseShyYyA8IDApKSB7CisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoIXN0cmNtcCh4bmFtZSwgeGQtPnhuYW1lKSkgeworCQkJcmMgPSB4ZC0+dmFsdWVfbGVuOworCQkJaWYgKGJ1ZmZlcikgeworCQkJCWlmIChzaXplIDwgcmMpIHsKKwkJCQkJcmMgPSAtRVJBTkdFOworCQkJCX0gZWxzZSB7CisJCQkJCW1lbWNweShidWZmZXIsIHhkLT54dmFsdWUsIHJjKTsKKwkJCQl9CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyYyA9IC1FTk9EQVRBOworIG91dDoKKwlpZiAoIXJldHJ5KSB7CisJCXVwX3JlYWQoJmMtPnhhdHRyX3NlbSk7CisJfSBlbHNlIHsKKwkJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJfQorCXJldHVybiByYzsKK30KKworaW50IGRvX2pmZnMyX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB4cHJlZml4LCBjb25zdCBjaGFyICp4bmFtZSwKKwkJICAgICAgY29uc3QgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCXN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmID0gSkZGUzJfSU5PREVfSU5GTyhpbm9kZSk7CisJc3RydWN0IGpmZnMyX3NiX2luZm8gKmMgPSBKRkZTMl9TQl9JTkZPKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljID0gZi0+aW5vY2FjaGU7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYsICpuZXdyZWYsICoqcHJlZjsKKwl1aW50MzJfdCBsZW5ndGgsIHJlcXVlc3Q7CisJaW50IHJjOworCisJcmMgPSBjaGVja194YXR0cl9yZWZfaW5vZGUoYywgaWMpOworCWlmICh1bmxpa2VseShyYykpCisJCXJldHVybiByYzsKKworCXJlcXVlc3QgPSBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpICsgc3RybGVuKHhuYW1lKSArIDEgKyBzaXplKTsKKwlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2UoYywgcmVxdWVzdCwgJmxlbmd0aCwKKwkJCQkgQUxMT0NfTk9STUFMLCBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkUpOworCWlmIChyYykgeworCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9yZXNlcnZlX3NwYWNlKCk9JWQsIHJlcXVlc3Q9JXVcbiIsIHJjLCByZXF1ZXN0KTsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIEZpbmQgZXhpc3RpbmcgeGF0dHIgKi8KKwlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworIHJldHJ5OgorCWZvciAocmVmPWljLT54cmVmLCBwcmVmPSZpYy0+eHJlZjsgcmVmOyBwcmVmPSZyZWYtPm5leHQsIHJlZj1yZWYtPm5leHQpIHsKKwkJeGQgPSByZWYtPnhkOworCQlpZiAoeGQtPnhwcmVmaXggIT0geHByZWZpeCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXhkLT54bmFtZSkgeworCQkJcmMgPSBsb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJCWlmICh1bmxpa2VseShyYyA+IDApKSB7CisJCQkJKnByZWYgPSByZWYtPm5leHQ7CisJCQkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCQkJCWdvdG8gcmV0cnk7CisJCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKCFzdHJjbXAoeGQtPnhuYW1lLCB4bmFtZSkpIHsKKwkJCWlmIChmbGFncyAmIFhBVFRSX0NSRUFURSkgeworCQkJCXJjID0gLUVFWElTVDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWlmICghYnVmZmVyKSB7CisJCQkJKnByZWYgPSByZWYtPm5leHQ7CisJCQkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYpOworCQkJCXJjID0gMDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisJLyogbm90IGZvdW5kICovCisJaWYgKGZsYWdzICYgWEFUVFJfUkVQTEFDRSkgeworCQlyYyA9IC1FTk9EQVRBOworCQlnb3RvIG91dDsKKwl9CisJaWYgKCFidWZmZXIpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisgZm91bmQ6CisJeGQgPSBjcmVhdGVfeGF0dHJfZGF0dW0oYywgeHByZWZpeCwgeG5hbWUsIGJ1ZmZlciwgc2l6ZSk7CisJaWYgKElTX0VSUih4ZCkpIHsKKwkJcmMgPSBQVFJfRVJSKHhkKTsKKwkJZ290byBvdXQ7CisJfQorCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCWpmZnMyX2NvbXBsZXRlX3Jlc2VydmF0aW9uKGMpOworCisJLyogY3JlYXRlIHhhdHRyX3JlZiAqLworCXJlcXVlc3QgPSBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpOworCXJjID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCByZXF1ZXN0LCAmbGVuZ3RoLAorCQkJCSBBTExPQ19OT1JNQUwsIEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFKTsKKwlpZiAocmMpIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfcmVzZXJ2ZV9zcGFjZSgpPSVkLCByZXF1ZXN0PSV1XG4iLCByYywgcmVxdWVzdCk7CisJCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJCXhkLT5yZWZjbnQtLTsKKwkJaWYgKCF4ZC0+cmVmY250KQorCQkJZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwkJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJCXJldHVybiByYzsKKwl9CisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlpZiAocmVmKQorCQkqcHJlZiA9IHJlZi0+bmV4dDsKKwluZXdyZWYgPSBjcmVhdGVfeGF0dHJfcmVmKGMsIGljLCB4ZCk7CisJaWYgKElTX0VSUihuZXdyZWYpKSB7CisJCWlmIChyZWYpIHsKKwkJCXJlZi0+bmV4dCA9IGljLT54cmVmOworCQkJaWMtPnhyZWYgPSByZWY7CisJCX0KKwkJcmMgPSBQVFJfRVJSKG5ld3JlZik7CisJCXhkLT5yZWZjbnQtLTsKKwkJaWYgKCF4ZC0+cmVmY250KQorCQkJZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwl9IGVsc2UgaWYgKHJlZikgeworCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7CisJfQorIG91dDoKKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlqZmZzMl9jb21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIC0tLS0tLS0tIGdhcmJhZ2UgY29sbGVjdG9yIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tCisgKiBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfZGF0dW0oYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gbW92ZSB4ZGF0dW0gaW50byBuZXcgbm9kZS4KKyAqIGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9yZWYoYywgcmVmKQorICogICBpcyB1c2VkIHRvIG1vdmUgeHJlZiBpbnRvIG5ldyBub2RlLgorICogamZmczJfdmVyaWZ5X3hhdHRyKGMpCisgKiAgIGlzIHVzZWQgdG8gY2FsbCBkb192ZXJpZnlfeGF0dHJfZGF0dW0oKSBiZWZvcmUgZ2FyYmFnZSBjb2xsZWN0aW5nLgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK2ludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJdWludDMyX3QgdG90bGVuLCBsZW5ndGgsIG9sZF9vZnM7CisJaW50IHJjID0gLUVJTlZBTDsKKworCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJQlVHX09OKCF4ZC0+bm9kZSk7CisKKwlvbGRfb2ZzID0gcmVmX29mZnNldCh4ZC0+bm9kZSk7CisJdG90bGVuID0gcmVmX3RvdGxlbihjLCBjLT5nY2Jsb2NrLCB4ZC0+bm9kZSk7CisJaWYgKHRvdGxlbiA8IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoIXhkLT54bmFtZSkgeworCQlyYyA9IGxvYWRfeGF0dHJfZGF0dW0oYywgeGQpOworCQlpZiAodW5saWtlbHkocmMgPiAwKSkgeworCQkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgeGQpOworCQkJcmMgPSAwOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAodW5saWtlbHkocmMgPCAwKSkKKwkJCWdvdG8gb3V0OworCX0KKwlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgdG90bGVuLCAmbGVuZ3RoLCBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkUpOworCWlmIChyYyB8fCBsZW5ndGggPCB0b3RsZW4pIHsKKwkJSkZGUzJfV0FSTklORygiamZmczJfcmVzZXJ2ZV9zcGFjZSgpPSVkLCByZXF1ZXN0PSV1XG4iLCByYywgdG90bGVuKTsKKwkJcmMgPSByYyA/IHJjIDogLUVCQURGRDsKKwkJZ290byBvdXQ7CisJfQorCXJjID0gc2F2ZV94YXR0cl9kYXR1bShjLCB4ZCk7CisJaWYgKCFyYykKKwkJZGJnX3hhdHRyKCJ4ZGF0dW0gKHhpZD0ldSwgdmVyc2lvbj0ldSkgR0MnZWQgZnJvbSAlIzA4eCB0byAlMDh4XG4iLAorCQkJICB4ZC0+eGlkLCB4ZC0+dmVyc2lvbiwgb2xkX29mcywgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworIG91dDoKKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlyZXR1cm4gcmM7Cit9CisKKworaW50IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKK3sKKwl1aW50MzJfdCB0b3RsZW4sIGxlbmd0aCwgb2xkX29mczsKKwlpbnQgcmMgPSAtRUlOVkFMOworCisJZG93bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlCVUdfT04oIXJlZi0+bm9kZSk7CisKKwlvbGRfb2ZzID0gcmVmX29mZnNldChyZWYtPm5vZGUpOworCXRvdGxlbiA9IHJlZl90b3RsZW4oYywgYy0+Z2NibG9jaywgcmVmLT5ub2RlKTsKKwlpZiAodG90bGVuICE9IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hyZWYpKQorCQlnb3RvIG91dDsKKworCXJjID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhjLCB0b3RsZW4sICZsZW5ndGgsIEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFKTsKKwlpZiAocmMgfHwgbGVuZ3RoIDwgdG90bGVuKSB7CisJCUpGRlMyX1dBUk5JTkcoIiVzOiBqZmZzMl9yZXNlcnZlX3NwYWNlKCkgPSAlZCwgcmVxdWVzdCA9ICV1XG4iLAorCQkJICAgICAgX19GVU5DVElPTl9fLCByYywgdG90bGVuKTsKKwkJcmMgPSByYyA/IHJjIDogLUVCQURGRDsKKwkJZ290byBvdXQ7CisJfQorCXJjID0gc2F2ZV94YXR0cl9yZWYoYywgcmVmKTsKKwlpZiAoIXJjKQorCQlkYmdfeGF0dHIoInhyZWYgKGlubz0ldSwgeGlkPSV1KSBHQydlZCBmcm9tICUjMDh4IHRvICUwOHhcbiIsCisJCQkgIHJlZi0+aWMtPmlubywgcmVmLT54ZC0+eGlkLCBvbGRfb2ZzLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSkpOworIG91dDoKKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBqZmZzMl92ZXJpZnlfeGF0dHIoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpCit7CisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCwgKl94ZDsKKwlpbnQgcmM7CisKKwlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4ZCwgX3hkLCAmYy0+eGF0dHJfdW5jaGVja2VkLCB4aW5kZXgpIHsKKwkJcmMgPSBkb192ZXJpZnlfeGF0dHJfZGF0dW0oYywgeGQpOworCQlpZiAocmMgPT0gMCkgeworCQkJbGlzdF9kZWxfaW5pdCgmeGQtPnhpbmRleCk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChyYyA+IDApIHsKKwkJCWxpc3RfZGVsX2luaXQoJnhkLT54aW5kZXgpOworCQkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgeGQpOworCQl9CisJfQorCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCisJcmV0dXJuIGxpc3RfZW1wdHkoJmMtPnhhdHRyX3VuY2hlY2tlZCkgPyAxIDogMDsKK30KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyLmggYi9mcy9qZmZzMi94YXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTk5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9qZmZzMi94YXR0ci5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqIENyZWF0ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgorICoKKyAqLworI2lmbmRlZiBfSkZGUzJfRlNfWEFUVFJfSF8KKyNkZWZpbmUgX0pGRlMyX0ZTX1hBVFRSX0hfCisKKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2RlZmluZSBKRkZTMl9YRkxBR1NfSE9UCSgweDAxKQkvKiBUaGlzIGRhdHVtIGlzIEhPVCAqLworI2RlZmluZSBKRkZTMl9YRkxBR1NfQklORAkoMHgwMikJLyogVGhpcyBkYXR1bSBpcyBub3QgcmVjbGFpbWVkICovCisKK3N0cnVjdCBqZmZzMl94YXR0cl9kYXR1bQoreworCXZvaWQgKmFsd2F5c19udWxsOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKm5vZGU7CisJdWludDhfdCBjbGFzczsKKwl1aW50OF90IGZsYWdzOworCXVpbnQxNl90IHhwcmVmaXg7CQkJLyogc2VlIEpGRlMyX1hBVFRSX1BSRUZJWF8qICovCisKKwlzdHJ1Y3QgbGlzdF9oZWFkIHhpbmRleDsJLyogY2hhaW5lZCBmcm9tIGMtPnhhdHRyaW5kZXhbbl0gKi8KKwl1aW50MzJfdCByZWZjbnQ7CQkvKiAjIG9mIHhhdHRyX3JlZiByZWZlcnMgdGhpcyAqLworCXVpbnQzMl90IHhpZDsKKwl1aW50MzJfdCB2ZXJzaW9uOworCisJdWludDMyX3QgZGF0YV9jcmM7CisJdWludDMyX3QgaGFzaGtleTsKKwljaGFyICp4bmFtZTsJCS8qIFhBVFRSIG5hbWUgd2l0aG91dCBwcmVmaXggKi8KKwl1aW50MzJfdCBuYW1lX2xlbjsJLyogbGVuZ3RoIG9mIHhuYW1lICovCisJY2hhciAqeHZhbHVlOwkJLyogWEFUVFIgdmFsdWUgKi8KKwl1aW50MzJfdCB2YWx1ZV9sZW47CS8qIGxlbmd0aCBvZiB4dmFsdWUgKi8KK307CisKK3N0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZTsKK3N0cnVjdCBqZmZzMl94YXR0cl9yZWYKK3sKKwl2b2lkICphbHdheXNfbnVsbDsKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpub2RlOworCXVpbnQ4X3QgY2xhc3M7CisJdWludDhfdCBmbGFnczsJCS8qIEN1cnJlbnRseSB1bnVzZWQgKi8KKwl1MTYgdW51c2VkOworCisJdW5pb24geworCQlzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljOwkvKiByZWZlcmVuY2UgdG8gamZmczJfaW5vZGVfY2FjaGUgKi8KKwkJdWludDMyX3QgaW5vOwkJCS8qIG9ubHkgdXNlZCBpbiBzY2FubmluZy9idWlsZGluZyAgKi8KKwl9OworCXVuaW9uIHsKKwkJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsJLyogcmVmZXJlbmNlIHRvIGpmZnMyX3hhdHRyX2RhdHVtICovCisJCXVpbnQzMl90IHhpZDsJCQkvKiBvbmx5IHVzZWQgaW4gc2NjYW5uaW5nL2J1aWxkaW5nICovCisJfTsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpuZXh0OwkJLyogY2hhaW5lZCBmcm9tIGljLT54cmVmX2xpc3QgKi8KK307CisKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKworZXh0ZXJuIHZvaWQgamZmczJfaW5pdF94YXR0cl9zdWJzeXN0ZW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOworZXh0ZXJuIHZvaWQgamZmczJfYnVpbGRfeGF0dHJfc3Vic3lzdGVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKK2V4dGVybiB2b2lkIGpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYyk7CisKK2V4dGVybiBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB4aWQsIHVpbnQzMl90IHZlcnNpb24pOworCitleHRlcm4gdm9pZCBqZmZzMl94YXR0cl9kZWxldGVfaW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWMpOworZXh0ZXJuIHZvaWQgamZmczJfeGF0dHJfZnJlZV9pbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2NhY2hlICppYyk7CisKK2V4dGVybiBpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkKTsKK2V4dGVybiBpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKTsKK2V4dGVybiBpbnQgamZmczJfdmVyaWZ5X3hhdHRyKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKTsKKworZXh0ZXJuIGludCBkb19qZmZzMl9nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCQkgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBkb19qZmZzMl9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgeHByZWZpeCwgY29uc3QgY2hhciAqeG5hbWUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7CisKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqamZmczJfeGF0dHJfaGFuZGxlcnNbXTsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl91c2VyX3hhdHRyX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfdHJ1c3RlZF94YXR0cl9oYW5kbGVyOworCitleHRlcm4gc3NpemVfdCBqZmZzMl9saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CisjZGVmaW5lIGpmZnMyX2dldHhhdHRyCQlnZW5lcmljX2dldHhhdHRyCisjZGVmaW5lIGpmZnMyX3NldHhhdHRyCQlnZW5lcmljX3NldHhhdHRyCisjZGVmaW5lIGpmZnMyX3JlbW92ZXhhdHRyCWdlbmVyaWNfcmVtb3ZleGF0dHIKKworI2Vsc2UKKworI2RlZmluZSBqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShjKQorI2RlZmluZSBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oYykKKyNkZWZpbmUgamZmczJfY2xlYXJfeGF0dHJfc3Vic3lzdGVtKGMpCisKKyNkZWZpbmUgamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKGMsIGljKQorI2RlZmluZSBqZmZzMl94YXR0cl9mcmVlX2lub2RlKGMsIGljKQorI2RlZmluZSBqZmZzMl92ZXJpZnlfeGF0dHIoYykJCQkoMSkKKworI2RlZmluZSBqZmZzMl94YXR0cl9oYW5kbGVycwlOVUxMCisjZGVmaW5lIGpmZnMyX2xpc3R4YXR0cgkJTlVMTAorI2RlZmluZSBqZmZzMl9nZXR4YXR0cgkJTlVMTAorI2RlZmluZSBqZmZzMl9zZXR4YXR0cgkJTlVMTAorI2RlZmluZSBqZmZzMl9yZW1vdmV4YXR0cglOVUxMCisKKyNlbmRpZiAvKiBDT05GSUdfSkZGUzJfRlNfWEFUVFIgKi8KKworI2lmZGVmIENPTkZJR19KRkZTMl9GU19TRUNVUklUWQorZXh0ZXJuIGludCBqZmZzMl9pbml0X3NlY3VyaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKTsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl9zZWN1cml0eV94YXR0cl9oYW5kbGVyOworI2Vsc2UKKyNkZWZpbmUgamZmczJfaW5pdF9zZWN1cml0eShpbm9kZSxkaXIpCSgwKQorI2VuZGlmIC8qIENPTkZJR19KRkZTMl9GU19TRUNVUklUWSAqLworCisjZW5kaWYgLyogX0pGRlMyX0ZTX1hBVFRSX0hfICovCmRpZmYgLS1naXQgYS9mcy9qZmZzMi94YXR0cl90cnVzdGVkLmMgYi9mcy9qZmZzMi94YXR0cl90cnVzdGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwNDZlMQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3RydXN0ZWQuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqIENyZWF0ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCitzdGF0aWMgaW50IGpmZnMyX3RydXN0ZWRfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgIiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZG9famZmczJfZ2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVFJVU1RFRCwgbmFtZSwgYnVmZmVyLCBzaXplKTsKK30KKworc3RhdGljIGludCBqZmZzMl90cnVzdGVkX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKKwkJCQkgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKCFzdHJjbXAobmFtZSwgIiIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZG9famZmczJfc2V0eGF0dHIoaW5vZGUsIEpGRlMyX1hQUkVGSVhfVFJVU1RFRCwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzaXplX3QgamZmczJfdHJ1c3RlZF9saXN0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCit7CisJc2l6ZV90IHJldGxlbiA9IFhBVFRSX1RSVVNURURfUFJFRklYX0xFTiArIG5hbWVfbGVuICsgMTsKKworCWlmIChsaXN0ICYmIHJldGxlbjw9bGlzdF9zaXplKSB7CisJCXN0cmNweShsaXN0LCBYQVRUUl9UUlVTVEVEX1BSRUZJWCk7CisJCXN0cmNweShsaXN0ICsgWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOLCBuYW1lKTsKKwl9CisKKwlyZXR1cm4gcmV0bGVuOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciBqZmZzMl90cnVzdGVkX3hhdHRyX2hhbmRsZXIgPSB7CisJLnByZWZpeCA9IFhBVFRSX1RSVVNURURfUFJFRklYLAorCS5saXN0ID0gamZmczJfdHJ1c3RlZF9saXN0eGF0dHIsCisJLnNldCA9IGpmZnMyX3RydXN0ZWRfc2V0eGF0dHIsCisJLmdldCA9IGpmZnMyX3RydXN0ZWRfZ2V0eGF0dHIKK307CmRpZmYgLS1naXQgYS9mcy9qZmZzMi94YXR0cl91c2VyLmMgYi9mcy9qZmZzMi94YXR0cl91c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4ZTlhYQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2pmZnMyL3hhdHRyX3VzZXIuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogSkZGUzIgLS0gSm91cm5hbGxpbmcgRmxhc2ggRmlsZSBTeXN0ZW0sIFZlcnNpb24gMi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIE5FQyBDb3Jwb3JhdGlvbgorICoKKyAqIENyZWF0ZWQgYnkgS2FpR2FpIEtvaGVpIDxrYWlnYWlAYWsuanAubmVjLmNvbT4KKyAqCisgKiBGb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uLCBzZWUgdGhlIGZpbGUgJ0xJQ0VOQ0UnIGluIHRoaXMgZGlyZWN0b3J5LgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvamZmczIuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlICJub2RlbGlzdC5oIgorCitzdGF0aWMgaW50IGpmZnMyX3VzZXJfZ2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKQoreworCWlmICghc3RyY21wKG5hbWUsICIiKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGRvX2pmZnMyX2dldHhhdHRyKGlub2RlLCBKRkZTMl9YUFJFRklYX1VTRVIsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgamZmczJfdXNlcl9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBmbGFncykKK3sKKwlpZiAoIXN0cmNtcChuYW1lLCAiIikpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwgSkZGUzJfWFBSRUZJWF9VU0VSLCBuYW1lLCBidWZmZXIsIHNpemUsIGZsYWdzKTsKK30KKworc3RhdGljIHNpemVfdCBqZmZzMl91c2VyX2xpc3R4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJCSAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKwlzaXplX3QgcmV0bGVuID0gWEFUVFJfVVNFUl9QUkVGSVhfTEVOICsgbmFtZV9sZW4gKyAxOworCisJaWYgKGxpc3QgJiYgcmV0bGVuIDw9IGxpc3Rfc2l6ZSkgeworCQlzdHJjcHkobGlzdCwgWEFUVFJfVVNFUl9QUkVGSVgpOworCQlzdHJjcHkobGlzdCArIFhBVFRSX1VTRVJfUFJFRklYX0xFTiwgbmFtZSk7CisJfQorCisJcmV0dXJuIHJldGxlbjsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgamZmczJfdXNlcl94YXR0cl9oYW5kbGVyID0geworCS5wcmVmaXggPSBYQVRUUl9VU0VSX1BSRUZJWCwKKwkubGlzdCA9IGpmZnMyX3VzZXJfbGlzdHhhdHRyLAorCS5zZXQgPSBqZmZzMl91c2VyX3NldHhhdHRyLAorCS5nZXQgPSBqZmZzMl91c2VyX2dldHhhdHRyCit9OwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZDZlMmVlMi4uMTg0ZmU0YWMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAKIAlpZiAobGlrZWx5KHJldHZhbCA9PSAwKSkgewogCQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCAmJiBuZCAmJiBuZC0+ZGVudHJ5ICYmCiAJCQkJbmQtPmRlbnRyeS0+ZF9pbm9kZSkpCi0JCWF1ZGl0X2lub2RlKG5hbWUsIG5kLT5kZW50cnktPmRfaW5vZGUsIGZsYWdzKTsKKwkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPmRlbnRyeS0+ZF9pbm9kZSk7CiAJfQogb3V0X2ZhaWw6CiAJcmV0dXJuIHJldHZhbDsKZGlmZiAtLWdpdCBhL2ZzL29wZW4uYyBiL2ZzL29wZW4uYwppbmRleCAzMTdiN2M3Li40ZjE3OGFjIDEwMDY0NAotLS0gYS9mcy9vcGVuLmMKKysrIGIvZnMvb3Blbi5jCkBAIC02MzMsNyArNjMzLDcgQEAKIAlkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAotCWF1ZGl0X2lub2RlKE5VTEwsIGlub2RlLCAwKTsKKwlhdWRpdF9pbm9kZShOVUxMLCBpbm9kZSk7CiAKIAllcnIgPSAtRVJPRlM7CiAJaWYgKElTX1JET05MWShpbm9kZSkpCkBAIC03ODYsNyArNzg2LDcgQEAKIAlpZiAoZmlsZSkgewogCQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5OwogCQlkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKLQkJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlLCAwKTsKKwkJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlKTsKIAkJZXJyb3IgPSBjaG93bl9jb21tb24oZGVudHJ5LCB1c2VyLCBncm91cCk7CiAJCWZwdXQoZmlsZSk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCA2Y2M3N2RjLi42YWZmZjcyIDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtMTAxOSw4ICsxMDE5LDggQEAKIAlpZiAoY3VycmVudCAhPSB0YXNrKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKGNvdW50ID4gUEFHRV9TSVpFKQotCQljb3VudCA9IFBBR0VfU0laRTsKKwlpZiAoY291bnQgPj0gUEFHRV9TSVpFKQorCQljb3VudCA9IFBBR0VfU0laRSAtIDE7CiAKIAlpZiAoKnBwb3MgIT0gMCkgewogCQkvKiBObyBwYXJ0aWFsIHdyaXRlcy4gKi8KQEAgLTEwMzMsNiArMTAzMyw3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKHBhZ2UsIGJ1ZiwgY291bnQpKQogCQlnb3RvIG91dF9mcmVlX3BhZ2U7CiAKKwlwYWdlW2NvdW50XSA9ICdcMCc7CiAJbG9naW51aWQgPSBzaW1wbGVfc3RydG91bChwYWdlLCAmdG1wLCAxMCk7CiAJaWYgKHRtcCA9PSBwYWdlKSB7CiAJCWxlbmd0aCA9IC1FSU5WQUw7CmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCBlNDE2MTkwLi5jMzJmMTViIDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCisrKyBiL2ZzL3hhdHRyLmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCWlmICghZikKIAkJcmV0dXJuIGVycm9yOwogCWRlbnRyeSA9IGYtPmZfZGVudHJ5OwotCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSwgMCk7CisJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlKTsKIAllcnJvciA9IHNldHhhdHRyKGRlbnRyeSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIAlmcHV0KGYpOwogCXJldHVybiBlcnJvcjsKQEAgLTQ2OSw3ICs0NjksNyBAQAogCWlmICghZikKIAkJcmV0dXJuIGVycm9yOwogCWRlbnRyeSA9IGYtPmZfZGVudHJ5OwotCWF1ZGl0X2lub2RlKE5VTEwsIGRlbnRyeS0+ZF9pbm9kZSwgMCk7CisJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlKTsKIAllcnJvciA9IHJlbW92ZXhhdHRyKGRlbnRyeSwgbmFtZSk7CiAJZnB1dChmKTsKIAlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oIGIvaW5jbHVkZS9hY3BpL3BsYXRmb3JtL2FjbGludXguaAppbmRleCAyZTZkNTQ1Li4zYzZhNjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcGxhdGZvcm0vYWNsaW51eC5oCisrKyBiL2luY2x1ZGUvYWNwaS9wbGF0Zm9ybS9hY2xpbnV4LmgKQEAgLTQ5LDcgKzQ5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKaW5kZXggYmFkZjAyNy4uZWY3ZDgzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX19BQ1BJX1BST0NFU1NPUl9ICiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKaW5kZXggM2Y4ODcxNS4uNGI2ZWY3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BTFBIQV9CSVRPUFNfSAogI2RlZmluZSBfQUxQSEFfQklUT1BTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlLmgKaW5kZXggZTZkNGQxNi4uZjE5OWU2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZS5oCkBAIC00LDcgKzQsNiBAQAogI2lmbmRlZiBfX0FSQ0hfQUxQSEFfQ0FDSEVfSAogI2RlZmluZSBfX0FSQ0hfQUxQSEFfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIEJ5dGVzIHBlciBMMSAoZGF0YSkgY2FjaGUgbGluZS4gKi8KICNpZiBkZWZpbmVkKENPTkZJR19BTFBIQV9HRU5FUklDKSB8fCBkZWZpbmVkKENPTkZJR19BTFBIQV9FVjYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jYWNoZWZsdXNoLmgKaW5kZXggM2ZjNmVmNy4uODA1NjQwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NhY2hlZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQUxQSEFfQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAvKiBDYWNoZXMgYXJlbid0IGJyYWluLWRlYWQgb24gdGhlIEFscGhhLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9jaWEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfY2lhLmgKaW5kZXggM2E3MGQ2OC4uOWUwNTE2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV9jaWEuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX2NpYS5oCkBAIC00LDcgKzQsNiBAQAogLyogRGVmaW5lIHRvIGV4cGVyaW1lbnQgd2l0aCBmaXR0aW5nIGV2ZXJ5dGhpbmcgaW50byBvbmUgNTEyTUIgSEFFIHdpbmRvdy4gICovCiAjZGVmaW5lIENJQV9PTkVfSEFFX1dJTkRPVyAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3QyLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb3JlX3QyLmgKaW5kZXggNWMxYzQwMy4uZGJhNzBjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvY29yZV90Mi5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2NvcmVfdDIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BTFBIQV9UMl9fSF9fCiAjZGVmaW5lIF9fQUxQSEFfVDJfX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2RtYS1tYXBwaW5nLmgKaW5kZXggNjJkMGQ2Ni4uYjlmZjRkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQUxQSEFfRE1BX01BUFBJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2RtYS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLmgKaW5kZXggNjgzYWZhYS4uODdjZmRiZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvZG1hLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX0FTTV9ETUFfSAogI2RlZmluZSBfQVNNX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9mbG9wcHkuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2Zsb3BweS5oCmluZGV4IDI4OWEwMGQuLmUxNzdkNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2Zsb3BweS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FMUEhBX0ZMT1BQWV9ICiAjZGVmaW5lIF9fQVNNX0FMUEhBX0ZMT1BQWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBmZF9pbmIocG9ydCkJCQlpbmJfcChwb3J0KQogI2RlZmluZSBmZF9vdXRiKHZhbHVlLHBvcnQpCQlvdXRiX3AodmFsdWUscG9ydCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2hhcmRpcnEuaAppbmRleCA3YmI2YTM2Li5kOTUzZTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfSEFSRElSUV9ICiAjZGVmaW5lIF9BTFBIQV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCmluZGV4IGEzMTBiOWUuLmNhOWQ0M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2h3X2lycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfSFdfSVJRX0gKICNkZWZpbmUgX0FMUEhBX0hXX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIGh3X3Jlc2VuZF9pcnEoc3RydWN0IGh3X2ludGVycnVwdF90eXBlICpoLCB1bnNpZ25lZCBpbnQgaSkge30KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAppbmRleCA2MTI2YWZlLi4yYTVjYzBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaApAQCAtMTMsNyArMTMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfREVGQVVMVFMKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaW8uaCBiL2luY2x1ZGUvYXNtLWFscGhhL2lvLmgKaW5kZXggM2ViYmVlZS4uZjVhZTk4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pby5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaXJxLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pcnEuaAppbmRleCA1NjZkYjcyLi5mNmRlMDMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pcnEuaApAQCAtOCw3ICs4LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgICBkZWZpbmVkKENPTkZJR19BTFBIQV9HRU5FUklDKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9rbWFwX3R5cGVzLmgKaW5kZXggM2QxMGNkMy4uM2U2NzM1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEva21hcF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL2ttYXBfdHlwZXMuaApAQCAtMyw3ICszLDYgQEAKIAogLyogRHVtbXkgaGVhZGVyIGp1c3QgdG8gZGVmaW5lIGttX3R5cGUuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL21hY2h2ZWMuaCBiL2luY2x1ZGUvYXNtLWFscGhhL21hY2h2ZWMuaAppbmRleCBlY2UxNjZhLi5hY2VkMjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9tYWNodmVjLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbWFjaHZlYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FMUEhBX01BQ0hWRUNfSAogI2RlZmluZSBfX0FMUEhBX01BQ0hWRUNfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWFscGhhL21tdV9jb250ZXh0LmgKaW5kZXggMGMwMTdmYy4uZmUyNDllOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9tbXVfY29udGV4dC5oCkBAIC03LDcgKzcsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk2LCBMaW51cyBUb3J2YWxkcwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL21tem9uZS5oIGIvaW5jbHVkZS9hc20tYWxwaGEvbW16b25lLmgKaW5kZXggMTkyZDgwYy4uNjRkMGFiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvbW16b25lLmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9BU01fTU1aT05FX0hfCiAjZGVmaW5lIF9BU01fTU1aT05FX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CiAKIHN0cnVjdCBib290bWVtX2RhdGFfdDsgLyogc3R1cGlkIGZvcndhcmQgZGVjbC4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWFscGhhL3BhZ2UuaAppbmRleCA2MWJjZjcwLi44YzdjZDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfUEFHRV9ICiAjZGVmaW5lIF9BTFBIQV9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wYWwuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3BhcmFtLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wYXJhbS5oCmluZGV4IDNlZDBiM2IuLjIxNGU3OTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvcGFyYW0uaApAQCAtNSw3ICs1LDYgQEAKICAgIGhhcmR3YXJlIGlnbm9yZXMgcmVwcm9ncmFtbWluZy4gIFdlIGFsc28gbmVlZCB1c2VybGFuZCBidXktaW4gdG8gdGhlIAogICAgY2hhbmdlIGluIEhaLCBzaW5jZSB0aGlzIGlzIHZpc2libGUgaW4gdGhlIHdhaXQ0IHJlc291cmNlcyBldGMuICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgSFoKICMgaWZuZGVmIENPTkZJR19BTFBIQV9SQVdISURFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wZ2FsbG9jLmgKaW5kZXggMzA4NDc1Ni4uNDcxODY0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BnYWxsb2MuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX1BHQUxMT0NfSAogI2RlZmluZSBfQUxQSEFfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wZ3RhYmxlLmgKaW5kZXggYTk4NWNkMi4uOTNlYWE1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BndGFibGUuaApAQCAtMTAsNyArMTAsNiBAQAogICogVGhpcyBob3BlZnVsbHkgd29ya3Mgd2l0aCBhbnkgc3RhbmRhcmQgQWxwaGEgcGFnZS1zaXplLCBhcyBkZWZpbmVkCiAgKiBpbiA8YXNtL3BhZ2UuaD4gKGN1cnJlbnRseSA4MTkyKS4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmgKaW5kZXggN2U0YjI5OC4uOWQyNjNlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc2VyaWFsLmgKQEAgLTIsNyArMiw2IEBACiAgKiBpbmNsdWRlL2FzbS1hbHBoYS9zZXJpYWwuaAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL3NtcC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKaW5kZXggZTE0MzIxMC4uYTFhMWVjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc21wLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NNUF9ICiAjZGVmaW5lIF9fQVNNX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKaW5kZXggODE5N2M2OS4uMGMyOTRjOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FMUEhBX1NQSU5MT0NLX0gKICNkZWZpbmUgX0FMUEhBX1NQSU5MT0NLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaAppbmRleCBmM2I3YjFhLi4wM2U5YzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BTFBIQV9TWVNURU1fSAogI2RlZmluZSBfX0FMUEhBX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFsLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vYmFycmllci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFscGhhL3RsYmZsdXNoLmgKaW5kZXggOWQ0ODRjMS4uMWNhM2VkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQUxQSEFfVExCRkxVU0hfSAogI2RlZmluZSBfQUxQSEFfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaAppbmRleCBlZjI1YjY1Li5iYzZlNmE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS91bmlzdGQuaApAQCAtMzgzLDYgKzM4Myw4IEBACiAjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJCTQ0NQogI2RlZmluZSBfX05SX2lub3RpZnlfcm1fd2F0Y2gJCTQ0NgogCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIE5SX1NZU0NBTExTCQkJNDQ3CiAKICNpZiBkZWZpbmVkKF9fR05VQ19fKQpAQCAtNTY1LDkgKzU2Nyw4IEBACiAJX3N5c2NhbGxfcmV0dXJuKHR5cGUpOwkJCQkJCVwKIH0KIAotI2VuZGlmIC8qIF9fTElCUkFSWV9fICYmIF9fR05VQ19fICovCisjZW5kaWYgLyogX19HTlVDX18gKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CkBAIC01NzgsNyArNTc5LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTY2MSw0ICs2NjEsNSBAQAogCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSAgYXNtKCIud2Vha1x0IiAjeCAiXG4iICN4ICIgPSBzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FMUEhBX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXBtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXBtLmgKaW5kZXggM2E1MGViNy4uZDA5MTEzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FwbS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcG0uaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBBUk1fQVNNX1NBMTEwMF9BUE1fSAogI2RlZmluZSBBUk1fQVNNX1NBMTEwMF9BUE1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYXBtX2Jpb3MuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKaW5kZXggZDgyMDlmOC4uMjRiNTFjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvbWVtb3J5LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweGYwMDAwMDAwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvYWNvcm5mYi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2w3NTAwL2Fjb3JuZmIuaAppbmRleCAzODY3MjMxLi5hZWE2MzMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbDc1MDAvYWNvcm5mYi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNsNzUwMC9hY29ybmZiLmgKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjZGVmaW5lIGFjb3JuZmJfdmFsaWRfcGl4cmF0ZSh2YXIpICh2YXItPnBpeGNsb2NrID49IDM5MzI1ICYmIHZhci0+cGl4Y2xvY2sgPD0gNDAxMTkpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L2hhcmR3YXJlLmgKaW5kZXggMTM4Njg3MS4uMGZkYmU3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9oYXJkd2FyZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIENMUFM3MTExX1ZJUlRfQkFTRQkweGZmMDAwMDAwCiAjZGVmaW5lIENMUFM3MTExX0JBU0UJCUNMUFM3MTExX1ZJUlRfQkFTRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaAppbmRleCA2MWQ4NzE3Li5jNmU4ZGNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC9tZW1vcnkuaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC91bmNvbXByZXNzLmgKaW5kZXggMDcxNTdiNy4uMDNkMjMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3VuY29tcHJlc3MuaApAQCAtMTcsNyArMTcsNiBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2NscHM3MTExLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L2hhcmR3YXJlLmgKaW5kZXggZWM1MWZlOS4uZGFhZDhlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvaGFyZHdhcmUuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKICNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9tZW1vcnkuaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX0ZPT1RCUklER0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCmluZGV4IDk5MTgxZmZjLi5jYmQ3YWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVic2EyODUvbWVtb3J5LmgKQEAgLTE5LDcgKzE5LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAogI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0ZPT1RCUklER0VfQURESU4pCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lYnNhMjg1L3ZtYWxsb2MuaAppbmRleCBkMWNhOTU1Yy4uMDI1OTgyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtZWJzYTI4NS92bWFsbG9jLmgKQEAgLTYsNyArNiw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDSF9GT09UQlJJREdFCiAjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MzAwMDAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3NtcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW50ZWdyYXRvci9zbXAuaAppbmRleCBkYTY5ODFlLi5hYjJjNzliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pbnRlZ3JhdG9yL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWludGVncmF0b3Ivc21wLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIEFTTUFSTV9BUkNIX1NNUF9ICiAjZGVmaW5lIEFTTUFSTV9BUkNIX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCmluZGV4IGJjNjJmNGIuLmU0M2ViZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKQEAgLTUsNyArNSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKICNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCmluZGV4IDQ3MmJhZGIuLjE0Y2E4ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCkBAIC0zLDcgKzMsNiBAQAogICoKICAqIElPUDN4eCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzIxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0lRMzEyNDQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAppbmRleCBjOThlYjYyNS4uZmJkZDVhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCkBAIC0xLDcgKzEsNiBAQAogLyoKICAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdW5jb21wcmVzcy5oCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9kbWEuaAppbmRleCBiMWEwNzFlLi43ODlmN2Y1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaXhwNHh4L2RtYS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKICNkZWZpbmUgX19BU01fQVJDSF9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY2xvY2tzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2Nsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlZTAyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2Nsb2Nrcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGluY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY2xvY2tzLmgKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorCisjaWZuZGVmIF9fQVNNX0FSQ0hfQ0xPQ0tTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9DTE9DS1NfSAorCit1bnNpZ25lZCBpbnQgZmNsa2ZyZXFfZ2V0ICh2b2lkKTsKK3Vuc2lnbmVkIGludCBoY2xrZnJlcV9nZXQgKHZvaWQpOwordW5zaWduZWQgaW50IHBjbGtmcmVxX2dldCAodm9pZCk7CisKKyNlbmRpZiAgLyogX0FTTV9BUkNIX0NMT0NLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2NvbnN0YW50cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9jb25zdGFudHMuaAppbmRleCA1MmMxY2I5Li41MWRlOTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2NvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvY29uc3RhbnRzLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9DT05TVEFOVFNfSAogI2RlZmluZSBfX0FTTV9BUkNIX0NPTlNUQU5UU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogQWRkcmVzc2luZyBjb25zdGFudHMgKi8KIApAQCAtMjksOCArMjgsNyBAQAogCiAjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQogCi0jIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHhjMDAwMDAwMCAvKiBTdGFydCBvZiBTRFJBTSAqLwotLyojIGRlZmluZSBJT0JBUlJJRVJfUEhZUwkJMHgwMDAwMDAwMCAqLyAvKiBTdGFydCBvZiBmbGFzaCAqLworIyBkZWZpbmUgSU9CQVJSSUVSX1BIWVMJCTB4MTAwMDAwMDAgLyogU2Vjb25kIGJhbmssIGZhc3Rlc3QgdGltaW5nICovCiAjIGRlZmluZSBJT0JBUlJJRVJfVklSVAkJMHhmMDAwMDAwMAogIyBkZWZpbmUgSU9CQVJSSUVSX1NJWkUJCVBBR0VfU0laRQogCkBAIC01Myw2ICs1MSw5IEBACiAjIGRlZmluZSBDUExEMDhfUEhZUwkJQ1BMRFhfUEhZUyAoMHgwOCkKICMgZGVmaW5lIENQTEQwOF9WSVJUCQlDUExEWF9WSVJUICgweDA4KQogIyBkZWZpbmUgQ1BMRDA4X1NJWkUJCVBBR0VfU0laRQorIyBkZWZpbmUgQ1BMRDBBX1BIWVMJCUNQTERYX1BIWVMgKDB4MGEpCisjIGRlZmluZSBDUExEMEFfVklSVAkJQ1BMRFhfVklSVCAoMHgwYSkKKyMgZGVmaW5lIENQTEQwQV9TSVpFCQlQQUdFX1NJWkUKICMgZGVmaW5lIENQTEQwQ19QSFlTCQlDUExEWF9QSFlTICgweDBjKQogIyBkZWZpbmUgQ1BMRDBDX1ZJUlQJCUNQTERYX1ZJUlQgKDB4MGMpCiAjIGRlZmluZSBDUExEMENfU0laRQkJUEFHRV9TSVpFCkBAIC04NCw1ICs4NSw3IEBACiAjZGVmaW5lCVhUQUxfSU4JCQkxNDc0NTYwMAkvKiAxNC43NDU2IE1IeiBjcnlzdGFsICovCiAjZGVmaW5lIFBMTF9DTE9DSwkJKFhUQUxfSU4gKiAyMSkJLyogMzA5IE1IeiBQTEwgY2xvY2sgKi8KICNkZWZpbmUgTUFYX0hDTEtfS0haCQkxMDAwMDAJCS8qIEhDTEsgbWF4IGxpbWl0IH4xMDBNSHogKi8KKyNkZWZpbmUgSENMSwkJCSg5OTk5MzYwMCkKKy8vI2RlZmluZSBIQ0xLCQkJKDExOTgwODAwMCkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfQ09OU1RBTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2RtYS5oCmluZGV4IDE1NDkyZTMuLmE4Y2JkMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9kbWEuaApAQCAtMSw5ICsxLDg2IEBACiAvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2RtYS5oCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMyBDb2FzdGFsIEVudmlyb25tZW50YWwgU3lzdGVtcworICogIENvcHlyaWdodCAoQykgMjAwNSBNYXJjIFNpbmdlcgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICovCisKK3R5cGVkZWYgZW51bSB7CisJRE1BX00yTTAJPSAwLAorCURNQV9NMk0xCT0gMSwKKwlETUFfTTJQMAk9IDIsCS8qIFR4ICovCisJRE1BX00yUDEJPSAzLAkvKiBSeCAqLworCURNQV9NMlAyCT0gNCwJLyogVHggKi8KKwlETUFfTTJQMwk9IDUsCS8qIFJ4ICovCisJRE1BX00yUDQJPSA2LAkvKiBUeCAtIEFDOTcgKi8KKwlETUFfTTJQNQk9IDcsCS8qIFJ4IC0gQUM5NyAqLworCURNQV9NMlA2CT0gOCwJLyogVHggKi8KKwlETUFfTTJQNwk9IDksCS8qIFJ4ICovCit9IGRtYV9kZXZpY2VfdDsKKworI2RlZmluZSBETUFfTEVOR1RIX01BWAkJKCg2NCoxMDI0KSAtIDQpIC8qIGJ5dGVzICovCisKKyNkZWZpbmUgRE1BQ19HQ0EJCV9fUkVHKERNQUNfUEhZUyArIDB4MmI4MCkKKyNkZWZpbmUgRE1BQ19HSVIJCV9fUkVHKERNQUNfUEhZUyArIDB4MmJjMCkKKworI2RlZmluZSBETUFDX0dJUl9NTUkxCQkoMTw8MTEpCisjZGVmaW5lIERNQUNfR0lSX01NSTAJCSgxPDwxMCkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJOAkJKDE8PDkpCisjZGVmaW5lIERNQUNfR0lSX01QSTkJCSgxPDw4KQorI2RlZmluZSBETUFDX0dJUl9NUEk2CQkoMTw8NykKKyNkZWZpbmUgRE1BQ19HSVJfTVBJNwkJKDE8PDYpCisjZGVmaW5lIERNQUNfR0lSX01QSTQJCSgxPDw1KQorI2RlZmluZSBETUFDX0dJUl9NUEk1CQkoMTw8NCkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJMgkJKDE8PDMpCisjZGVmaW5lIERNQUNfR0lSX01QSTMJCSgxPDwyKQorI2RlZmluZSBETUFDX0dJUl9NUEkwCQkoMTw8MSkKKyNkZWZpbmUgRE1BQ19HSVJfTVBJMQkJKDE8PDApCisKKyNkZWZpbmUgRE1BQ19NMlAwCQkweDAwMDAKKyNkZWZpbmUgRE1BQ19NMlAxCQkweDAwNDAKKyNkZWZpbmUgRE1BQ19NMlAyCQkweDAwODAKKyNkZWZpbmUgRE1BQ19NMlAzCQkweDAwYzAKKyNkZWZpbmUgRE1BQ19NMlA0CQkweDAyNDAKKyNkZWZpbmUgRE1BQ19NMlA1CQkweDAyMDAKKyNkZWZpbmUgRE1BQ19NMlA2CQkweDAyYzAKKyNkZWZpbmUgRE1BQ19NMlA3CQkweDAyODAKKyNkZWZpbmUgRE1BQ19NMlA4CQkweDAzNDAKKyNkZWZpbmUgRE1BQ19NMlA5CQkweDAzMDAKKyNkZWZpbmUgRE1BQ19NMk0wCQkweDAxMDAKKyNkZWZpbmUgRE1BQ19NMk0xCQkweDAxNDAKKworI2RlZmluZSBETUFDX1BfUENPTlRST0woYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwMCkKKyNkZWZpbmUgRE1BQ19QX1BJTlRFUlJVUFQoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwNCkKKyNkZWZpbmUgRE1BQ19QX1BQQUxMT0MoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwOCkKKyNkZWZpbmUgRE1BQ19QX1BTVEFUVVMoYykJX19SRUcoRE1BQ19QSFlTICsgKGMpICsgMHgwYykKKyNkZWZpbmUgRE1BQ19QX1JFTUFJTihjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDE0KQorI2RlZmluZSBETUFDX1BfTUFYQ05UMChjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDIwKQorI2RlZmluZSBETUFDX1BfQkFTRTAoYykJCV9fUkVHKERNQUNfUEhZUyArIChjKSArIDB4MjQpCisjZGVmaW5lIERNQUNfUF9DVVJSRU5UMChjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDI4KQorI2RlZmluZSBETUFDX1BfTUFYQ05UMShjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDMwKQorI2RlZmluZSBETUFDX1BfQkFTRTEoYykJCV9fUkVHKERNQUNfUEhZUyArIChjKSArIDB4MzQpCisjZGVmaW5lIERNQUNfUF9DVVJSRU5UMShjKQlfX1JFRyhETUFDX1BIWVMgKyAoYykgKyAweDM4KQorCisjZGVmaW5lIERNQUNfUENPTlRST0xfRU5BQkxFCSgxPDw0KQorCisjZGVmaW5lIERNQUNfUE9SVF9VU0IJCTAKKyNkZWZpbmUgRE1BQ19QT1JUX1NETU1DCQkxCisjZGVmaW5lIERNQUNfUE9SVF9BQzk3XzEJMgorI2RlZmluZSBETUFDX1BPUlRfQUM5N18yCTMKKyNkZWZpbmUgRE1BQ19QT1JUX0FDOTdfMwk0CisjZGVmaW5lIERNQUNfUE9SVF9VQVJUMQkJNgorI2RlZmluZSBETUFDX1BPUlRfVUFSVDIJCTcKKyNkZWZpbmUgRE1BQ19QT1JUX1VBUlQzCQk4CisKKyNkZWZpbmUgRE1BQ19QU1RBVFVTX0NVUlJTVEFURV9TSElGVAk0CisjZGVmaW5lIERNQUNfUFNUQVRVU19DVVJSU1RBVEVfTUFTSwkweDMKKworI2RlZmluZSBETUFDX1BTVEFUVVNfTkVYVEJVRgkgKDE8PDYpCisjZGVmaW5lIERNQUNfUFNUQVRVU19TVEFMTFJJTlQJICgxPDwwKQorCisjZGVmaW5lIERNQUNfSU5UX0NIRQkJICgxPDwzKQorI2RlZmluZSBETUFDX0lOVF9ORkIJCSAoMTw8MSkKKyNkZWZpbmUgRE1BQ19JTlRfU1RBTEwJCSAoMTw8MCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvZW50cnktbWFjcm8uUwppbmRleCBhMmY2N2MwLi45ZmM3ZjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2VudHJ5LW1hY3JvLlMKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9lbnRyeS1tYWNyby5TCkBAIC0xMCwxMSArMTAsNzMgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CiAKLSMgaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKLSMgIGVycm9yICJMSDdBNDAwIGFuZCBMSDdBNDA0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUiCi0jIGVuZGlmCisvKiBJbiBvcmRlciB0byBhbGxvdyB0aGVyZSB0byBiZSBzdXBwb3J0IGZvciBib3RoIG9mIHRoZSBwcm9jZXNzb3IKKyAgIGNsYXNzZXMgYXQgdGhlIHNhbWUgdGltZSwgd2UgbWFrZSBhIGhhY2sgaGVyZSB0aGF0IGlzbid0IHZlcnkKKyAgIHByZXR0eS4gIEF0IHN0YXJ0dXAsIHRoZSBsaW5rIHBvaW50ZWQgdG8gd2l0aCB0aGUKKyAgIGJyYW5jaF9pcnFfbGg3YTQwMCBzeW1ib2wgaXMgcmVwbGFjZWQgd2l0aCBhIE5PUCB3aGVuIHRoZSBDUFUgaXMKKyAgIGRldGVjdGVkIGFzIGEgbGg3YTQwNC4KIAotIyBpZiBkZWZpbmVkIChDT05GSUdfQVJDSF9MSDdBNDAwKQorICAgKioqIEZJWE1FOiB3ZSBzaG91bGQgY2xlYW4gdGhpcyB1cCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lCisJICAgICAgaW1wbGVtZW50YXRpb24gZm9yIGVhY2ggQ1BVJ3MgZGVzaWduLgorCisqLworCisjaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkgJiYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwNCkKKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKK2JyYW5jaF9pcnFfbGg3YTQwMDogYiAxMDAwZgorCitAIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMSDdBNDA0IGdldF9pcnFucl9hbmRfYmFzZS4KKworCQltb3YJXGlycW5yLCAjMAkJCUAgVklDMSBpcnEgYmFzZQorCQltb3YJXGJhc2UsICNpb19wMnYoMHg4MDAwMDAwMCkJQCBBUEIgcmVnaXN0ZXJzCisJCWFkZAlcYmFzZSwgXGJhc2UsICMweDgwMDAKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMV9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJdHN0CVx0bXAsICNWQV9WSUMxREVGQVVMVAkJQCBEZWZhdWx0IHZlY3RvcmVkIFZJQzEKKwkJbGRybmUJXGlycXN0YXQsIFtcYmFzZSwgIzBdCQlAIFZJQzFfSVJRU1RBVFVTCisJCWJuZQkxMDAxZgorCQlhZGQJXGJhc2UsIFxiYXNlLCAjKDB4YTAwMCAtIDB4ODAwMCkKKwkJbGRyCVx0bXAsIFtcYmFzZSwgIzB4MDAzMF0JCUAgVklDMl9WRUNUQUREUgorCQl0c3QJXHRtcCwgI1ZBX1ZFQ1RPUkVECQlAIERpcmVjdCB2ZWN0b3JlZAorCQlibmUJMTAwMmYKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMwXQkJQCBWSUMyX0lSUVNUQVRVUworCQltb3YJXGlycW5yLCAjMzIJCQlAIFZJQzIgaXJxIGJhc2UKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDAyOgkJYW5kCVxpcnFuciwgXHRtcCwgIzB4M2YJCUAgTWFzayBmb3IgdmFsaWQgYml0cworMTAwODoJCW1vdnMJXGlycXN0YXQsICMxCQkJQCBGb3JjZSAhWgorCQlzdHIJXHRtcCwgW1xiYXNlLCAjMHgwMDMwXQkJQCBDbGVhciB2ZWN0b3IKKwkJYgkxMDA5ZgorCitAIEltcGxlbWVudGF0aW9uIG9mIHRoZSBMSDdBNDAwIGdldF9pcnFucl9hbmRfYmFzZS4KKworMTAwMDoJCW1vdglcaXJxbnIsICMwCisJCW1vdglcYmFzZSwgI2lvX3AydigweDgwMDAwMDAwKQlAIEFQQiByZWdpc3RlcnMKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDUwMF0JQCBQSUMgSU5UU1IKKworMTAwMToJCW1vdnMJXGlycXN0YXQsIFxpcnFzdGF0LCBsc3IgIzEJQCBTaGlmdCBpbnRvIGNhcnJ5CisJCWJjcwkxMDA4ZgkJCQlAIEJpdCBzZXQ7IGlycSBmb3VuZAorCQlhZGQJXGlycW5yLCBcaXJxbnIsICMxCisJCWJuZQkxMDAxYgkJCQlAIFVudGlsIG5vIGJpdHMKKwkJYgkxMDA5ZgkJCQlAIE5vdGhpbmc/ICBIbW0uCisxMDA4OgkJbW92cwlcaXJxc3RhdCwgIzEJCQlAIEZvcmNlICFaCisKKzEwMDk6CisgICAgICAgICAgICAgICAuZW5kbQorCisKKworI2VsaWYgZGVmaW5lZCAoQ09ORklHX0FSQ0hfTEg3QTQwMCkKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaGFyZHdhcmUuaAppbmRleCBhZWIwN2MxLi5lOWZmNzRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9oYXJkd2FyZS5oCkBAIC0xMyw2ICsxMyw4IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKIAorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgkJLyogQWRkZWQgZm9yIHRoZSBzYWtlIG9mIGFtYmEtY2xjZCBkcml2ZXIgKi8KKwogI2RlZmluZSBpb19wMnYoeCkgKDB4ZjAwMDAwMDAgfCAoKCh4KSAmIDB4ZmZmMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQogI2RlZmluZSBpb192MnAoeCkgKCAgICAgICAgICAgICAoKCh4KSAmIDB4MGZmZjAwMDApIDw8IDQpIHwgKCh4KSAmIDB4MDAwMGZmZmYpKQogCkBAIC01Myw2ICs1NSw4IEBACiAKICNlbmRpZgogCisjZGVmaW5lIE1BU0tfQU5EX1NFVCh2LG0scykJKHYpID0gKCh2KSZ+KG0pKXwocykKKwogI2luY2x1ZGUgInJlZ2lzdGVycy5oIgogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9IQVJEV0FSRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCmluZGV4IGY5MWYzZTUuLmFmZThjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvaXJxcy5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfSVJRU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSVJRU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBGSVFfU1RBUlQJODAKIApAQCAtMTU0LDkgKzE1MywxMCBAQAogI2lmICFkZWZpbmVkIChJUlFfR1BJTzBJTlRSKQogIyBkZWZpbmUgSVJRX0dQSU8wSU5UUglJUlFfR1BJTzBGSVEKICNlbmRpZgotI2RlZmluZSBJUlFfVElDSyAJSVJRX1RJTlRSCisjZGVmaW5lIElSUV9USUNLCUlSUV9USU5UUgogI2RlZmluZSBJUlFfUENDMV9SRFkJSVJRX0dQSU82SU5UUgkvKiBQQ0NhcmQgMSByZWFkeSAqLwogI2RlZmluZSBJUlFfUENDMl9SRFkJSVJRX0dQSU83SU5UUgkvKiBQQ0NhcmQgMiByZWFkeSAqLworI2RlZmluZSBJUlFfVVNCCQlJUlFfVVNCSU5UUgkvKiBVU0IgZGV2aWNlICovCiAKICNpZmRlZiBDT05GSUdfTUFDSF9LRVY3QTQwMAogIyBkZWZpbmUgSVJRX1RTCQlJUlFfR1BJT0ZJUQkvKiBUb3VjaHNjcmVlbiAqLwpAQCAtMTkxLDYgKzE5MSwxMCBAQAogIyBkZWZpbmUgSVJRX0xQRDdBNDAwX1RTCUlSUV9MUEQ3QTQwWF9DUExEICsgMQkvKiBUb3VjaCBzY3JlZW4gKi8KICNlbmRpZgogCisjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApCisjIGRlZmluZSBJUlFfVE9VQ0gJCUlSUV9MUEQ3QTQwMF9UUworI2VuZGlmCisKICNkZWZpbmUgTlJfSVJRUwkJKE5SX0lSUV9DUFUgKyBOUl9JUlFfQk9BUkQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9yZWdpc3RlcnMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWxoN2E0MHgvcmVnaXN0ZXJzLmgKaW5kZXggMmVkYjIyZS4uYjRmMDliMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9yZWdpc3RlcnMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3JlZ2lzdGVycy5oCkBAIC05LDcgKzksNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvY29uc3RhbnRzLmg+CiAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdJU1RFUlNfSApAQCAtMTgsNyArMTcsNyBAQAogCiAJLyogUGh5c2ljYWwgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzZXMgKi8KIAotI2RlZmluZSBBQzk3X1BIWVMJKDB4ODAwMDAwMDApCS8qIEFDOTcgQ29udHJvbGxlciAqLworI2RlZmluZSBBQzk3Q19QSFlTCSgweDgwMDAwMDAwKQkvKiBBQzk3IENvbnRyb2xsZXIgKi8KICNkZWZpbmUgTU1DX1BIWVMJKDB4ODAwMDAxMDApCS8qIE11bHRpbWVkaWEgQ2FyZCBDb250cm9sbGVyICovCiAjZGVmaW5lIFVTQl9QSFlTCSgweDgwMDAwMjAwKQkvKiBVU0IgQ2xpZW50ICovCiAjZGVmaW5lIFNDSV9QSFlTCSgweDgwMDAwMzAwKQkvKiBTZWN1cmUgQ2FyZCBJbnRlcmZhY2UgKi8KQEAgLTM1LDYgKzM0LDggQEAKICNkZWZpbmUgUlRDX1BIWVMJKDB4ODAwMDBkMDApCS8qIFJlYWwtdGltZSBDbG9jayAqLwogI2RlZmluZSBHUElPX1BIWVMJKDB4ODAwMDBlMDApCS8qIEdlbmVyYWwgUHVycG9zZSBJTyAqLwogI2RlZmluZSBCTUlfUEhZUwkoMHg4MDAwMGYwMCkJLyogQmF0dGVyeSBNb25pdG9yIEludGVyZmFjZSAqLworI2RlZmluZSBIUlRGVENfUEhZUwkoMHg4MDAwMTAwMCkJLyogSGlnaC1yZXMgVEZUIENvbnRyb2xsZXIgKExIN0E0MDApICovCisjZGVmaW5lIEFMSV9QSFlTCSgweDgwMDAxMDAwKQkvKiBBZHZhbmNlZCBMQ0QgSW50ZXJmYWNlIChMSDdBNDA0KSAqLwogI2RlZmluZSBXRFRfUEhZUwkoMHg4MDAwMTQwMCkJLyogV2F0Y2hkb2cgVGltZXIgKi8KICNkZWZpbmUgU01DX1BIWVMJKDB4ODAwMDIwMDApCS8qIFN0YXRpYyBNZW1vcnkgQ29udHJvbGxlciAqLwogI2RlZmluZSBTRFJDX1BIWVMJKDB4ODAwMDI0MDApCS8qIFNEUkFNIENvbnRyb2xsZXIgKi8KQEAgLTQzLDYgKzQ0LDcgQEAKIAogCS8qIFBoeXNpY2FsIHJlZ2lzdGVycyBvZiB0aGUgTEg3QTQwNCAqLwogCisjZGVmaW5lIEFEQ19QSFlTCSgweDgwMDAxMzAwKQkvKiBBL0QgJiBUb3VjaHNjcmVlbiBDb250cm9sbGVyICovCiAjZGVmaW5lIFZJQzFfUEhZUwkoMHg4MDAwODAwMCkJLyogVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgMSAqLwogI2RlZmluZSBVU0JIX1BIWVMJKDB4ODAwMDkwMDApCS8qIFVTQiBPSENJIGhvc3QgY29udHJvbGxlciAqLwogI2RlZmluZSBWSUMyX1BIWVMJKDB4ODAwMGEwMDApCS8qIFZlY3RvcmVkIEludGVycnVwdCBDb250cm9sbGVyIDIgKi8KQEAgLTUzLDEwICs1NSwzMiBAQAogCiAJLyogQ2xvY2svU3RhdGUgQ29udHJvbGxlciByZWdpc3RlciAqLwogCisjZGVmaW5lIENTQ19QV1JTUglfX1JFRyhDU0NfUEhZUyArIDB4MDApIC8qIFJlc2V0IHJlZ2lzdGVyICYgSUQgKi8KICNkZWZpbmUgQ1NDX1BXUkNOVAlfX1JFRyhDU0NfUEhZUyArIDB4MDQpIC8qIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1NDX0NMS1NFVAlfX1JFRyhDU0NfUEhZUyArIDB4MjApIC8qIENsb2NrIHNwZWVkIGNvbnRyb2wgKi8KKyNkZWZpbmUgQ1NDX1VTQkRSRVNFVAlfX1JFRyhDU0NfUEhZUyArIDB4NGMpIC8qIFVTQiBEZXZpY2UgcmVzZXRzICovCiAKICNkZWZpbmUgQ1NDX1BXUkNOVF9VU0JIX0VOCSgxPDwyOCkJLyogVVNCIEhvc3QgcG93ZXIgZW5hYmxlICovCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMk0xX0VOCSgxPDwyNykKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yTTBfRU4JKDE8PDI2KQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQOF9FTgkoMTw8MjUpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlA5X0VOCSgxPDwyNCkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDZfRU4JKDE8PDIzKQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQN19FTgkoMTw8MjIpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlA0X0VOCSgxPDwyMSkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDVfRU4JKDE8PDIwKQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQMl9FTgkoMTw8MTkpCisjZGVmaW5lIENTQ19QV1JDTlRfRE1BQ19NMlAzX0VOCSgxPDwxOCkKKyNkZWZpbmUgQ1NDX1BXUkNOVF9ETUFDX00yUDBfRU4JKDE8PDE3KQorI2RlZmluZSBDU0NfUFdSQ05UX0RNQUNfTTJQMV9FTgkoMTw8MTYpCiAKKyNkZWZpbmUgQ1NDX1BXUlNSX0NISVBNQU5fU0hJRlQJKDI0KQorI2RlZmluZSBDU0NfUFdSU1JfQ0hJUE1BTl9NQVNLCSgweGZmKQorI2RlZmluZSBDU0NfUFdSU1JfQ0hJUElEX1NISUZUCSgxNikKKyNkZWZpbmUgQ1NDX1BXUlNSX0NISVBJRF9NQVNLCSgweGZmKQorCisjZGVmaW5lIENTQ19VU0JEUkVTRVRfQVBCUkVTRVRSRUcJKDE8PDEpCisjZGVmaW5lIENTQ19VU0JEUkVTRVRfSU9SRVNFVFJFRwkoMTw8MCkKIAogCS8qIEludGVycnVwdCBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwogCkBAIC0xMDksNiArMTMzLDEzIEBACiAjZGVmaW5lIEdQSU9fR1BJT0ZFT0kJX19SRUcoR1BJT19QSFlTICsgMHg1NCkJLyogR1BJTyBFbmQtb2YtSW50ZXJydXB0ICovCiAjZGVmaW5lIEdQSU9fR1BJT0lOVEVOCV9fUkVHKEdQSU9fUEhZUyArIDB4NTgpCS8qIEdQSU8gSW50ZXJydXB0IEVuYWJsZSAqLwogI2RlZmluZSBHUElPX0lOVFNUQVRVUwlfX1JFRyhHUElPX1BIWVMgKyAweDVjKQkvKiBHUElPIEludGVycnVwdCBTdGF0dXMgKi8KKyNkZWZpbmUgR1BJT19QSU5NVVgJX19SRUcoR1BJT19QSFlTICsgMHgyYykKKyNkZWZpbmUgR1BJT19QQURECV9fUkVHKEdQSU9fUEhZUyArIDB4MTApCisjZGVmaW5lIEdQSU9fUEFECV9fUkVHKEdQSU9fUEhZUyArIDB4MDApCisjZGVmaW5lIEdQSU9fUENECV9fUkVHKEdQSU9fUEhZUyArIDB4MDgpCisjZGVmaW5lIEdQSU9fUENERAlfX1JFRyhHUElPX1BIWVMgKyAweDE4KQorI2RlZmluZSBHUElPX1BFREQJX19SRUcoR1BJT19QSFlTICsgMHgyNCkKKyNkZWZpbmUgR1BJT19QRUQJX19SRUcoR1BJT19QSFlTICsgMHgyMCkKIAogCiAJLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyIHJlZ2lzdGVycyAqLwpAQCAtMTM4LDIwICsxNjksMjEgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZCAoQ09ORklHX01BQ0hfTFBEN0E0MDApIHx8IGRlZmluZWQgKENPTkZJR19NQUNIX0xQRDdBNDA0KQotIyBkZWZpbmUgQ1BMRF9DT05UUk9MCQlfX1JFRzgoQ1BMRDAyX1BIWVMpCi0jIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzgoQ1BMRDA2X1BIWVMpCi0jIGRlZmluZSBDUExEX1NQSV9DT05UUk9MCV9fUkVHOChDUExEMDhfUEhZUykKLSMgZGVmaW5lIENQTERfU1BJX0VFUFJPTQlfX1JFRzgoQ1BMRDBBX1BIWVMpCi0jIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUc4KENQTEQwQ19QSFlTKSAvKiBJUlEgbWFzay9zdGF0dXMgKi8KLSMgZGVmaW5lIENQTERfQk9PVF9NT0RFCQlfX1JFRzgoQ1BMRDBFX1BIWVMpCi0jIGRlZmluZSBDUExEX0ZMQVNICQlfX1JFRzgoQ1BMRDEwX1BIWVMpCi0jIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUc4KENQTEQxMl9QSFlTKQotIyBkZWZpbmUgQ1BMRF9SRVZJU0lPTgkJX19SRUc4KENQTEQxNF9QSFlTKQotIyBkZWZpbmUgQ1BMRF9HUElPX0VYVAkJX19SRUc4KENQTEQxNl9QSFlTKQotIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHOChDUExEMThfUEhZUykKLSMgZGVmaW5lIENQTERfR1BJT19ESVIJCV9fUkVHOChDUExEMUFfUEhZUykKLSNlbmRpZgogCisjIGRlZmluZSBDUExEX0NPTlRST0wJCV9fUkVHMTYoQ1BMRDAyX1BIWVMpCisjIGRlZmluZSBDUExEX1NQSV9EQVRBCQlfX1JFRzE2KENQTEQwNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9TUElfQ09OVFJPTAlfX1JFRzE2KENQTEQwOF9QSFlTKQorIyBkZWZpbmUgQ1BMRF9TUElfRUVQUk9NCV9fUkVHMTYoQ1BMRDBBX1BIWVMpCisjIGRlZmluZSBDUExEX0lOVEVSUlVQVFMJX19SRUcxNihDUExEMENfUEhZUykgLyogSVJRIG1hc2svc3RhdHVzICovCisjIGRlZmluZSBDUExEX0JPT1RfTU9ERQkJX19SRUcxNihDUExEMEVfUEhZUykKKyMgZGVmaW5lIENQTERfRkxBU0gJCV9fUkVHMTYoQ1BMRDEwX1BIWVMpCisjIGRlZmluZSBDUExEX1BPV0VSX01HTVQJX19SRUcxNihDUExEMTJfUEhZUykKKyMgZGVmaW5lIENQTERfUkVWSVNJT04JCV9fUkVHMTYoQ1BMRDE0X1BIWVMpCisjIGRlZmluZSBDUExEX0dQSU9fRVhUCQlfX1JFRzE2KENQTEQxNl9QSFlTKQorIyBkZWZpbmUgQ1BMRF9HUElPX0RBVEEJCV9fUkVHMTYoQ1BMRDE4X1BIWVMpCisjIGRlZmluZSBDUExEX0dQSU9fRElSCQlfX1JFRzE2KENQTEQxQV9QSFlTKQorCisjZW5kaWYKIAogCS8qIFRpbWVyIHJlZ2lzdGVycyAqLwogCkBAIC0xOTAsNCArMjIyLDMgQEAKIAogCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9SRUdJU1RFUlNfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3NzcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9zc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJiMWM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC9zc3AuaApAQCAtMCwwICsxLDcxIEBACisvKiBzc3AuaAorICAgICAkSWQkCisKKyAgIHdyaXR0ZW4gYnkgTWFyYyBTaW5nZXIKKyAgIDYgRGVjIDIwMDQKKworICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmMgU2luZ2VyCisKKyAgIC0tLS0tLS0tLS0tCisgICBERVNDUklQVElPTgorICAgLS0tLS0tLS0tLS0KKworICAgVGhpcyBTU1AgaGVhZGVyIGlzIGF2YWlsYWJsZSB0aHJvdWdob3V0IHRoZSBrZXJuZWwsIGZvciB0aGlzCisgICBtYWNoaW5lL2FyY2hpdGVjdHVyZSwgYmVjYXVzZSBkcml2ZXJzIHRoYXQgdXNlIGl0IG1heSBiZSBkaXNwZXJzZWQuCisKKyAgIFRoaXMgZmlsZSB3YXMgY2xvbmVkIGZyb20gdGhlIDc5NTJ4IGltcGxlbWVudGF0aW9uLiAgSXQgd291bGQgYmUKKyAgIGJldHRlciB0byBzaGFyZSB0aGVtLCBidXQgd2UncmUgdGFraW5nIGFuIGVhc2llciBhcHByb2FjaCBmb3IgdGhlCisgICB0aW1lIGJlaW5nLgorCisqLworCisjaWYgIWRlZmluZWQgKF9fU1NQX0hfXykKKyMgICAgZGVmaW5lICAgX19TU1BfSF9fCisKKy8qIC0tLS0tIEluY2x1ZGVzICovCisKKy8qIC0tLS0tIFR5cGVzICovCisKK3N0cnVjdCBzc3BfZHJpdmVyIHsKKwlpbnQgICgqaW5pdCkJCSh2b2lkKTsKKwl2b2lkICgqZXhpdCkJCSh2b2lkKTsKKwl2b2lkICgqYWNxdWlyZSkJCSh2b2lkKTsKKwl2b2lkICgqcmVsZWFzZSkJCSh2b2lkKTsKKwlpbnQgICgqY29uZmlndXJlKQkoaW50IGRldmljZSwgaW50IG1vZGUsIGludCBzcGVlZCwKKwkJCQkgaW50IGZyYW1lX3NpemVfd3JpdGUsIGludCBmcmFtZV9zaXplX3JlYWQpOworCXZvaWQgKCpjaGlwX3NlbGVjdCkJKGludCBlbmFibGUpOworCXZvaWQgKCpzZXRfY2FsbGJhY2tzKSAgICh2b2lkKiBoYW5kbGUsCisJCQkJIGlycXJldHVybl90ICgqY2FsbGJhY2tfdHgpKHZvaWQqKSwKKwkJCQkgaXJxcmV0dXJuX3QgKCpjYWxsYmFja19yeCkodm9pZCopKTsKKwl2b2lkICgqZW5hYmxlKQkJKHZvaWQpOworCXZvaWQgKCpkaXNhYmxlKQkJKHZvaWQpOworLy8JaW50ICAoKnNhdmVfc3RhdGUpCSh2b2lkKik7CisvLwl2b2lkICgqcmVzdG9yZV9zdGF0ZSkJKHZvaWQqKTsKKwlpbnQgICgqcmVhZCkJCSh2b2lkKTsKKwlpbnQgICgqd3JpdGUpCQkodTE2IGRhdGEpOworCWludCAgKCp3cml0ZV9yZWFkKQkodTE2IGRhdGEpOworCXZvaWQgKCpmbHVzaCkJCSh2b2lkKTsKKwl2b2lkICgqd3JpdGVfYXN5bmMpCSh2b2lkKiBwdiwgc2l6ZV90IGNiKTsKKwlzaXplX3QgKCp3cml0ZV9wb3MpCSh2b2lkKTsKK307CisKKwkvKiBUaGVzZSBtb2RlcyBhcmUgb25seSBhdmFpbGFibGUgb24gdGhlIExINzk1MjQgKi8KKyNkZWZpbmUgU1NQX01PREVfU1BJCQkoMSkKKyNkZWZpbmUgU1NQX01PREVfU1NJCQkoMikKKyNkZWZpbmUgU1NQX01PREVfTUlDUk9XSVJFCSgzKQorI2RlZmluZSBTU1BfTU9ERV9JMlMJCSg0KQorCisJLyogQ1BMRCBTUEkgZGV2aWNlcyAqLworI2RlZmluZSBERVZJQ0VfRUVQUk9NCTAJLyogQ29uZmlndXJhdGlvbiBlZXByb20gKi8KKyNkZWZpbmUgREVWSUNFX01BQwkxCS8qIE1BQyBlZXByb20gKExQRDc5NTI0KSAqLworI2RlZmluZSBERVZJQ0VfQ09ERUMJMgkvKiBBdWRpbyBjb2RlYyAqLworI2RlZmluZSBERVZJQ0VfVE9VQ0gJMwkvKiBUb3VjaCBzY3JlZW4gKExQRDc5NTIwKSAqLworCisvKiAtLS0tLSBHbG9iYWxzICovCisKKy8qIC0tLS0tIFByb3RvdHlwZXMgKi8KKworLy9leHRlcm4gc3RydWN0IHNzcF9kcml2ZXIgbGg3OTUyMF9pMnNfZHJpdmVyOworZXh0ZXJuIHN0cnVjdCBzc3BfZHJpdmVyIGxoN2E0MDBfY3BsZF9zc3BfZHJpdmVyOworCisjZW5kaWYgIC8qIF9fU1NQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbGg3YTQweC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaAppbmRleCBmODA1MzM0Li4zZDFjZTA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1saDdhNDB4L3VuY29tcHJlc3MuaApAQCAtMTYsNyArMTYsNyBAQAogI2lmbmRlZiBVQVJUX1JfU1RBVFVTCiAjIGRlZmluZSBVQVJUX1JfU1RBVFVTCSgweDEwKQogI2VuZGlmCi0jZGVmaW5lIG5UeFJkeSAgCSgweDIwKQkvKiBOb3QgVHhSZWFkeSAobGl0ZXJhbGx5IFR4IEZJRk8gZnVsbCkgKi8KKyNkZWZpbmUgblR4UmR5CQkoMHgyMCkJLyogTm90IFR4UmVhZHkgKGxpdGVyYWxseSBUeCBGSUZPIGZ1bGwpICovCiAKIAkvKiBBY2Nlc3MgVUFSVCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcyBiZWZvcmUgTU1VIGlzIHNldHVwICovCiAjZGVmaW5lIFVBUlRfU1RBVFVTICgqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcqKSAoVUFSVDJfUEhZUyArIFVBUlRfUl9TVEFUVVMpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC5oCmluZGV4IDZkNjI0MGEuLmRmZGJmMDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX09NQVBfQk9BUkRfSAogI2RlZmluZSBfT01BUF9CT0FSRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBEaWZmZXJlbnQgcGVyaXBoZXJhbCBpZHMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaGFyZHdhcmUuaAppbmRleCA3OTA5YjcyLi5jN2Q5ZTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9oYXJkd2FyZS5oCkBAIC0zNyw3ICszNyw2IEBACiAjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9IQVJEV0FSRV9ICiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZm5kZWYgX19BU1NFTUJMRVJfXwogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvc3lzdGVtLmgKaW5kZXggNjc5NzBkMS4uYWMyYmZhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL3N5c3RlbS5oCkBAIC00LDcgKzQsNiBAQAogICovCiAjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKICNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKaW5kZXggY2EyYzhiZS4uYWNhMGFkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC91bmNvbXByZXNzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9zZXJpYWwuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvY2xvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFlMDAzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9jbG9jay5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2Nsb2NrLmgKKyAqCisgKiBDbG9jayBjb250cm9sIGRyaXZlciBmb3IgUE5YNDAwOCAtIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yczogVml0YWx5IFdvb2wsIERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0KKyAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqLworI2lmbmRlZiBfX1BOWDQwMDhfQ0xPQ0tfSF9fCisjZGVmaW5lIF9fUE5YNDAwOF9DTE9DS19IX18KKworc3RydWN0IG1vZHVsZTsKK3N0cnVjdCBjbGs7CisKKyNkZWZpbmUgUFdSTUFOX1ZBX0JBU0UJCUlPX0FERFJFU1MoUE5YNDAwOF9QV1JNQU5fQkFTRSkKKyNkZWZpbmUgSENMS0RJVkNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDQwKQorI2RlZmluZSBQV1JDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHg0NCkKKyNkZWZpbmUgUExMQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NDgpCisjZGVmaW5lIE9TQzEzQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NGMpCisjZGVmaW5lIFNZU0NMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDUwKQorI2RlZmluZSBIQ0xLUExMQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4NTgpCisjZGVmaW5lIFVTQkNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweDY0KQorI2RlZmluZSBTRFJBTUNMS0NUUkxfUkVHCShQV1JNQU5fVkFfQkFTRSArIDB4NjgpCisjZGVmaW5lIE1TQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4ODApCisjZGVmaW5lIEJUQ0xLQ1RSTAkJKFBXUk1BTl9WQV9CQVNFICsgMHg4NCkKKyNkZWZpbmUgRFVNQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4OTApCisjZGVmaW5lIEkyQ0NMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGFjKQorI2RlZmluZSBLRVlDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhiMCkKKyNkZWZpbmUgVFNDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhiNCkKKyNkZWZpbmUgUFdNQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4YjgpCisjZGVmaW5lIFNQSUNUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGM0KQorI2RlZmluZSBGTEFTSENMS0NUUkxfUkVHCShQV1JNQU5fVkFfQkFTRSArIDB4YzgpCisjZGVmaW5lIFVBUlQzQ0xLX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhkMCkKKyNkZWZpbmUgVUFSVENMS0NUUkxfUkVHCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGU0KQorI2RlZmluZSBETUFDTEtDVFJMX1JFRwkJKFBXUk1BTl9WQV9CQVNFICsgMHhlOCkKKyNkZWZpbmUgQVVUT0NMS19DVFJMCQkoUFdSTUFOX1ZBX0JBU0UgKyAweGVjKQorI2RlZmluZSBKUEVHQ0xLQ1RSTF9SRUcJCShQV1JNQU5fVkFfQkFTRSArIDB4ZmMpCisKKyNkZWZpbmUgQVVESU9DT05GSUdfVkFfQkFTRQlJT19BRERSRVNTKFBOWDQwMDhfQVVESU9DT05GSUdfQkFTRSkKKyNkZWZpbmUgRFNQUExMQ1RSTF9SRUcJCShBVURJT0NPTkZJR19WQV9CQVNFICsgMHg2MCkKKyNkZWZpbmUgRFNQQ0xLQ1RSTF9SRUcJCShBVURJT0NPTkZJR19WQV9CQVNFICsgMHg2NCkKKyNkZWZpbmUgQVVESU9DTEtDVFJMX1JFRwkoQVVESU9DT05GSUdfVkFfQkFTRSArIDB4NjgpCisjZGVmaW5lIEFVRElPUExMQ1RSTF9SRUcJKEFVRElPQ09ORklHX1ZBX0JBU0UgKyAweDZDKQorCisjZGVmaW5lIFVTQl9PVEdfQ0xLQ1RSTF9SRUcJSU9fQUREUkVTUyhQTlg0MDA4X1VTQl9DT05GSUdfQkFTRSArIDB4ZmY0KQorCisjZGVmaW5lIFZGUDlDTEtDVFJMX1JFRwkJSU9fQUREUkVTUyhQTlg0MDA4X0RFQlVHX0JBU0UpCisKKyNkZWZpbmUgQ0xLX1JBVEVfMTNNSFogMTMwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfMU1IWiAxMDAwCisjZGVmaW5lIENMS19SQVRFXzIwOE1IWiAyMDgwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfNDhNSFogNDgwMDAKKyNkZWZpbmUgQ0xLX1JBVEVfMzJLSFogMzIKKworI2RlZmluZSBQTlg0MDA4X1VBUlRfQ0xLIENMS19SQVRFXzEzTUhaICogMTAwMCAvKiBpbiBNSHogKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzODM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZGVidWctbWFjcm8uUwpAQCAtMCwwICsxLDI3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2RlYnVnLW1hY3JvLlMKKyAqCisgKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCisgKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LHJ4CisJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCisJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KKwkJbW92CVxyeCwgIzB4MDAwOTAwMDAKKwkJYWRkZXEJXHJ4LCBccngsICMweDQwMDAwMDAwCisJCWFkZG5lCVxyeCwgXHJ4LCAjMHhmNDAwMDAwMAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiCVxyZCwgW1xyeCwgIzB4MF0KKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlZTEyMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZG1hLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9kbWEuaAorICoKKyAqICBQTlg0MDA4IERNQSBoZWFkZXIgZmlsZQorICoKKyAqICBBdXRob3I6CVZpdGFseSBXb29sCisgKiAgQ29weXJpZ2h0OglNb250YVZpc3RhIFNvZnR3YXJlIEluYy4gKGMpIDIwMDUKKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHhmZmZmZmZmZgorCisjZGVmaW5lIE1BWF9ETUFfQ0hBTk5FTFMJOAorCisjZGVmaW5lIERNQUNfQkFTRQkJSU9fQUREUkVTUyhQTlg0MDA4X0RNQV9DT05GSUdfQkFTRSkKKyNkZWZpbmUgRE1BQ19JTlRfU1RBVAkJKERNQUNfQkFTRSArIDB4MDAwMCkKKyNkZWZpbmUgRE1BQ19JTlRfVENfU1RBVAkoRE1BQ19CQVNFICsgMHgwMDA0KQorI2RlZmluZSBETUFDX0lOVF9UQ19DTEVBUgkoRE1BQ19CQVNFICsgMHgwMDA4KQorI2RlZmluZSBETUFDX0lOVF9FUlJfU1RBVAkoRE1BQ19CQVNFICsgMHgwMDBjKQorI2RlZmluZSBETUFDX0lOVF9FUlJfQ0xFQVIJKERNQUNfQkFTRSArIDB4MDAxMCkKKyNkZWZpbmUgRE1BQ19TT0ZUX1NSRVEJCShETUFDX0JBU0UgKyAweDAwMjQpCisjZGVmaW5lIERNQUNfQ09ORklHCQkoRE1BQ19CQVNFICsgMHgwMDMwKQorI2RlZmluZSBETUFDX0N4X1NSQ19BRERSKGMpCShETUFDX0JBU0UgKyAweDAxMDAgKyAoYykgKiAweDIwKQorI2RlZmluZSBETUFDX0N4X0RFU1RfQUREUihjKQkoRE1BQ19CQVNFICsgMHgwMTA0ICsgKGMpICogMHgyMCkKKyNkZWZpbmUgRE1BQ19DeF9MTEkoYykJCShETUFDX0JBU0UgKyAweDAxMDggKyAoYykgKiAweDIwKQorI2RlZmluZSBETUFDX0N4X0NPTlRST0woYykJKERNQUNfQkFTRSArIDB4MDEwYyArIChjKSAqIDB4MjApCisjZGVmaW5lIERNQUNfQ3hfQ09ORklHKGMpCShETUFDX0JBU0UgKyAweDAxMTAgKyAoYykgKiAweDIwKQorCitlbnVtIHsKKwlXSURUSF9CWVRFID0gMCwKKwlXSURUSF9IV09SRCwKKwlXSURUSF9XT1JECit9OworCitlbnVtIHsKKwlGQ19NRU0yTUVNX0RNQSwKKwlGQ19NRU0yUEVSX0RNQSwKKwlGQ19QRVIyTUVNX0RNQSwKKwlGQ19QRVIyUEVSX0RNQSwKKwlGQ19QRVIyUEVSX0RQRVIsCisJRkNfTUVNMlBFUl9QRVIsCisJRkNfUEVSMk1FTV9QRVIsCisJRkNfUEVSMlBFUl9TUEVSCit9OworCitlbnVtIHsKKwlETUFfSU5UX1VOS05PV04gPSAwLAorCURNQV9FUlJfSU5UID0gMSwKKwlETUFfVENfSU5UID0gMiwKK307CisKK2VudW0geworCURNQV9CVUZGRVJfQUxMT0NBVEVEID0gMSwKKwlETUFfSEFTX0xMID0gMiwKK307CisKK2VudW0geworCVBFUl9DQU1fRE1BXzEgPSAwLAorCVBFUl9OREZfRkxBU0ggPSAxLAorCVBFUl9NQlhfU0xBVkVfRklGTyA9IDIsCisJUEVSX1NQSTJfUkVDX1hNSVQgPSAzLAorCVBFUl9NU19TRF9SWF9YTUlUID0gNCwKKwlQRVJfSFNfVUFSVF8xX1hNSVQgPSA1LAorCVBFUl9IU19VQVJUXzFfUlggPSA2LAorCVBFUl9IU19VQVJUXzJfWE1JVCA9IDcsCisJUEVSX0hTX1VBUlRfMl9SWCA9IDgsCisJUEVSX0hTX1VBUlRfN19YTUlUID0gOSwKKwlQRVJfSFNfVUFSVF83X1JYID0gMTAsCisJUEVSX1NQSTFfUkVDX1hNSVQgPSAxMSwKKwlQRVJfTUxDX05ERl9TUkVDID0gMTIsCisJUEVSX0NBTV9ETUFfMiA9IDEzLAorCVBFUl9QUk5HX0lORklGTyA9IDE0LAorCVBFUl9QUk5HX09VVEZJRk8gPSAxNSwKK307CisKK3N0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsIHsKKwlpbnQgdGNfbWFzazsKKwlpbnQgY2FjaGVhYmxlOworCWludCBidWZmZXJhYmxlOworCWludCBwcml2X21vZGU7CisJaW50IGRpOworCWludCBzaTsKKwlpbnQgZGVzdF9haGIxOworCWludCBzcmNfYWhiMTsKKwlpbnQgZHdpZHRoOworCWludCBzd2lkdGg7CisJaW50IGRic2l6ZTsKKwlpbnQgc2JzaXplOworCWludCB0cl9zaXplOworfTsKKworc3RydWN0IHBueDQwMDhfZG1hX2NoX2NvbmZpZyB7CisJaW50IGhhbHQ7CisJaW50IGFjdGl2ZTsKKwlpbnQgbG9jazsKKwlpbnQgaXRjOworCWludCBpZTsKKwlpbnQgZmxvd19jbnRybDsKKwlpbnQgZGVzdF9wZXI7CisJaW50IHNyY19wZXI7Cit9OworCitzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgeworCXVuc2lnbmVkIGxvbmcgc3JjX2FkZHI7CisJdW5zaWduZWQgbG9uZyBkZXN0X2FkZHI7CisJdTMyIG5leHRfZG1hOworCXVuc2lnbmVkIGxvbmcgY2hfY3RybDsKKwlzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKm5leHQ7CisJaW50IGZsYWdzOworCXZvaWQgKmFsbG9jX2RhdGE7CisJaW50ICgqZnJlZSkgKHZvaWQgKik7Cit9OworCitzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnIHsKKwlpbnQgaXNfbGw7CisJdW5zaWduZWQgbG9uZyBzcmNfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGRlc3RfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGNoX2N0cmw7CisJdW5zaWduZWQgbG9uZyBjaF9jZmc7CisJc3RydWN0IHBueDQwMDhfZG1hX2xsICpsbDsKKwl1MzIgbGxfZG1hOworCWludCBmbGFnczsKKwl2b2lkICphbGxvY19kYXRhOworCWludCAoKmZyZWUpICh2b2lkICopOworfTsKKworZXh0ZXJuIHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqcG54NDAwOF9hbGxvY19sbF9lbnRyeShkbWFfYWRkcl90ICopOworZXh0ZXJuIHZvaWQgcG54NDAwOF9mcmVlX2xsX2VudHJ5KHN0cnVjdCBwbng0MDA4X2RtYV9sbCAqLCBkbWFfYWRkcl90KTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZnJlZV9sbCh1MzIgbGxfZG1hLCBzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKik7CisKK2V4dGVybiBpbnQgcG54NDAwOF9yZXF1ZXN0X2NoYW5uZWwoY2hhciAqLCBpbnQsCisJCQkJICAgdm9pZCAoKikoaW50LCBpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKiksCisJCQkJICAgdm9pZCAqKTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZnJlZV9jaGFubmVsKGludCk7CitleHRlcm4gaW50IHBueDQwMDhfY29uZmlnX2RtYShpbnQsIGludCwgaW50KTsKK2V4dGVybiBpbnQgcG54NDAwOF9kbWFfcGFja19jb250cm9sKGNvbnN0IHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICosCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgKik7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX3BhcnNlX2NvbnRyb2wodW5zaWduZWQgbG9uZywKKwkJCQkgICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jdHJsICopOworZXh0ZXJuIGludCBwbng0MDA4X2RtYV9wYWNrX2NvbmZpZyhjb25zdCBzdHJ1Y3QgcG54NDAwOF9kbWFfY2hfY29uZmlnICosCisJCQkJICAgdW5zaWduZWQgbG9uZyAqKTsKK2V4dGVybiBpbnQgcG54NDAwOF9kbWFfcGFyc2VfY29uZmlnKHVuc2lnbmVkIGxvbmcsCisJCQkJICAgIHN0cnVjdCBwbng0MDA4X2RtYV9jaF9jb25maWcgKik7CitleHRlcm4gaW50IHBueDQwMDhfY29uZmlnX2NoYW5uZWwoaW50LCBzdHJ1Y3QgcG54NDAwOF9kbWFfY29uZmlnICopOworZXh0ZXJuIGludCBwbng0MDA4X2NoYW5uZWxfZ2V0X2NvbmZpZyhpbnQsIHN0cnVjdCBwbng0MDA4X2RtYV9jb25maWcgKik7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZShpbnQpOworZXh0ZXJuIGludCBwbng0MDA4X2RtYV9jaF9kaXNhYmxlKGludCk7CitleHRlcm4gaW50IHBueDQwMDhfZG1hX2NoX2VuYWJsZWQoaW50KTsKK2V4dGVybiB2b2lkIHBueDQwMDhfZG1hX3NwbGl0X2hlYWRfZW50cnkoc3RydWN0IHBueDQwMDhfZG1hX2NvbmZpZyAqLAorCQkJCQkgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKik7CitleHRlcm4gdm9pZCBwbng0MDA4X2RtYV9zcGxpdF9sbF9lbnRyeShzdHJ1Y3QgcG54NDAwOF9kbWFfbGwgKiwKKwkJCQkgICAgICAgc3RydWN0IHBueDQwMDhfZG1hX2NoX2N0cmwgKik7CisKKyNlbmRpZgkJCQkvKiBfQVNNX0FSQ0hfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWMxOThlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBQTlg0MDA4LWJhc2VkIHBsYXRmb3JtcworICoKKyAqIDIwMDUtMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQXV0aG9yOiBWaXRhbHkgV29vbCA8dndvb2xAcnUubXZpc3RhLmNvbT4KKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlICJwbGF0Zm9ybS5oIgorCisjZGVmaW5lIElPX0JBU0UgICAgICAgICAweEYwMDAwMDAwCisjZGVmaW5lIElPX0FERFJFU1MoeCkgICgoKCgoeCkgJiAweGZmMDAwMDAwKSA+PiA0KSB8ICgoeCkgJiAweGZmZmZmKSkgfCBJT19CQVNFKQorCisjZGVmaW5lIElOVFJDX01BU0sJCQkweDAwCisjZGVmaW5lIElOVFJDX1JBV19TVEFUCQkJMHgwNAorI2RlZmluZSBJTlRSQ19TVEFUCQkJMHgwOAorI2RlZmluZSBJTlRSQ19QT0xBUgkJCTB4MEMKKyNkZWZpbmUgSU5UUkNfQUNUX1RZUEUJCQkweDEwCisjZGVmaW5lIElOVFJDX1RZUEUJCQkweDE0CisKKyNkZWZpbmUgU0lDMV9CQVNFX0lOVCAgIDMyCisjZGVmaW5lIFNJQzJfQkFTRV9JTlQgICA2NAorCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKy8qIGRlY29kZSB0aGUgTUlDIGludGVycnVwdCBudW1iZXJzICovCisJCWxkcglcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UpCisJCWxkcglcaXJxc3RhdCwgW1xiYXNlLCAjSU5UUkNfU1RBVF0KKworCQljbXAJXGlycXN0YXQsIzE8PDE2CisJCW1vdmhzCVxpcnFuciwjMTYKKwkJbW92bG8JXGlycW5yLCMwCisJCW1vdmhzCVxpcnFzdGF0LFxpcnFzdGF0LGxzciMxNgorCQljbXAJXGlycXN0YXQsIzE8PDgKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjOAorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjOAorCQljbXAJXGlycXN0YXQsIzE8PDQKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjNAorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjNAorCQljbXAJXGlycXN0YXQsIzE8PDIKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjMgorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjMgorCQljbXAJXGlycXN0YXQsIzE8PDEKKwkJYWRkaHMJXGlycW5yLFxpcnFuciwjMQorCisvKiB3YXMgdGhlcmUgYW4gaW50ZXJydXB0ID8gaWYgbm90IHRoZW4gZHJvcCBvdXQgd2l0aCBFUSBzdGF0dXMgKi8KKwkJdGVxCVxpcnFzdGF0LCMwCisJCWJlcQkxMDAzZgorCisvKiBhbmQgbm93IGNoZWNrIGZvciBleHRlbmRlZCBJUlEgcmVhc29ucyAqLworCQljbXAJXGlycW5yLCMxCisJCWJscwkxMDAzZgorCQljbXAJXGlycW5yLCMzMAorCQlibG8JMTAwMmYKKworLyogSVJRIDMxLDMwICA6IEhpZ2ggcHJpb3JpdHkgY2FzY2FkZSBJUlEgaGFuZGxlICovCisvKiByZWFkIHRoZSBjb3JyZWN0IFNJQyAqLworLyogZGVjb2Rpbmcgc3RhdHVzIGFmdGVyIGNvbXBhcmUgOiBlcSBpcyAzMCAoU0lDMSkgLCBuZSBpcyAzMSAoU0lDMikgKi8KKy8qIHNldCB0aGUgYmFzZSBJUlEgbnVtYmVyICovCisJCWxkcmVxCVxiYXNlLCA9SU9fQUREUkVTUyhQTlg0MDA4X0lOVENUUkxTSUMxX0JBU0UpCisJCW1vdmVxICBcaXJxbnIsI1NJQzFfQkFTRV9JTlQKKwkJbGRybmUJXGJhc2UsID1JT19BRERSRVNTKFBOWDQwMDhfSU5UQ1RSTFNJQzJfQkFTRSkKKwkJbW92bmUgICBcaXJxbnIsI1NJQzJfQkFTRV9JTlQKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICNJTlRSQ19TVEFUXQorCQlsZHIJXHRtcCwJICBbXGJhc2UsICNJTlRSQ19UWVBFXQorLyogYW5kIHdpdGggaW52ZXJ0ZWQgbWFzayA6IGxvdyBwcmlvcml0eSBpbnRlcnJ1cHRzICAqLworCQlhbmQJXGlycXN0YXQsXGlycXN0YXQsXHRtcAorCQliCTEwMDRmCisKKzEwMDM6CisvKiBJUlEgMSwwICA6IExvdyBwcmlvcml0eSBjYXNjYWRlIElSUSBoYW5kbGUgKi8KKy8qIHJlYWQgdGhlIGNvcnJlY3QgU0lDICovCisvKiBkZWNvZGluZyBzdGF0dXMgYWZ0ZXIgY29tcGFyZSA6IGVxIGlzIDEgKFNJQzIpICwgbmUgaXMgMCAoU0lDMSkqLworLyogcmVhZCB0aGUgY29ycmVjdCBTSUMgKi8KKy8qIHNldCB0aGUgYmFzZSBJUlEgbnVtYmVyICAqLworCQlsZHJuZQlcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFKQorCQltb3ZuZSAgIFxpcnFuciwjU0lDMV9CQVNFX0lOVAorCQlsZHJlcQlcYmFzZSwgPUlPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMl9CQVNFKQorCQltb3ZlcSAgIFxpcnFuciwjU0lDMl9CQVNFX0lOVAorCQlsZHIJXGlycXN0YXQsIFtcYmFzZSwgI0lOVFJDX1NUQVRdCisJCWxkcglcdG1wLAkgIFtcYmFzZSwgI0lOVFJDX1RZUEVdCisvKiBhbmQgd2l0aCBpbnZlcnRlZCBtYXNrIDogbG93IHByaW9yaXR5IGludGVycnVwdHMgICovCisJCWJpYwlcaXJxc3RhdCxcaXJxc3RhdCxcdG1wCisKKzEwMDQ6CisKKwkJY21wCVxpcnFzdGF0LCMxPDwxNgorCQlhZGRocwlcaXJxbnIsXGlycW5yLCMxNgorCQltb3ZocwlcaXJxc3RhdCxcaXJxc3RhdCxsc3IjMTYKKwkJY21wCVxpcnFzdGF0LCMxPDw4CisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzgKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzgKKwkJY21wCVxpcnFzdGF0LCMxPDw0CisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzQKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzQKKwkJY21wCVxpcnFzdGF0LCMxPDwyCisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzIKKwkJbW92aHMJXGlycXN0YXQsXGlycXN0YXQsbHNyIzIKKwkJY21wCVxpcnFzdGF0LCMxPDwxCisJCWFkZGhzCVxpcnFucixcaXJxbnIsIzEKKworCisvKiBpcyBpcnFzdGF0IG5vdCB6ZXJvICovCisKKzEwMDI6CisvKiB3ZSBhc3NlcnQgdGhhdCBpcnFzdGF0IGlzIG5vdCBlcXVhbCB0byB6ZXJvIGFuZCByZXR1cm4gbmUgc3RhdHVzIGlmIHRydWUqLworCQl0ZXEJXGlycXN0YXQsIzAKKzEwMDM6CisJCS5lbmRtCisKKworCQkubWFjcm8JaXJxX3ByaW9fdGFibGUKKwkJLmVuZG0KKworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTVhNzcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2dwaW8uaApAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvZ3Bpby5oCisgKgorICogUE5YNDAwOCBHUElPIGRyaXZlciAtIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIEJhc2VkIG9uIHJlZmVyZW5jZSBjb2RlIGJ5IEl3byBNZXJnbGVyIGFuZCBaLlRhYmFhbG91dGUgZnJvbSBQaGlsaXBzOgorICogQ29weXJpZ2h0IChjKSAyMDA1IEtvbmlua2xpamtlIFBoaWxpcHMgRWxlY3Ryb25pY3MgTi5WLgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfUE5YNDAwOF9HUElPX0hfCisjZGVmaW5lIF9QTlg0MDA4X0dQSU9fSF8KKworCisvKiBCbG9jayBudW1iZXJzICovCisjZGVmaW5lIEdQSU9fSU4JCSgwKQorI2RlZmluZSBHUElPX09VVAkJKDB4MTAwKQorI2RlZmluZSBHUElPX0JJRAkJKDB4MjAwKQorI2RlZmluZSBHUElPX1JBTQkJKDB4MzAwKQorI2RlZmluZSBHUElPX01VWAkJKDB4NDAwKQorCisjZGVmaW5lIEdQSU9fVFlQRV9NQVNLKEspICgoSykgJiAweDcwMCkKKworLyogSU5QVVQgR1BJT3MgKi8KKy8qIEdQSSAqLworI2RlZmluZSBHUElfMDAJCShHUElPX0lOIHwgMCkKKyNkZWZpbmUgR1BJXzAxCQkoR1BJT19JTiB8IDEpCisjZGVmaW5lIEdQSV8wMiAgIAkoR1BJT19JTiB8IDIpCisjZGVmaW5lIEdQSV8wMyAJIAkoR1BJT19JTiB8IDMpCisjZGVmaW5lIEdQSV8wNCAgIAkoR1BJT19JTiB8IDQpCisjZGVmaW5lIEdQSV8wNSAgIAkoR1BJT19JTiB8IDUpCisjZGVmaW5lIEdQSV8wNiAgIAkoR1BJT19JTiB8IDYpCisjZGVmaW5lIEdQSV8wNyAgIAkoR1BJT19JTiB8IDcpCisjZGVmaW5lIEdQSV8wOCAgIAkoR1BJT19JTiB8IDgpCisjZGVmaW5lIEdQSV8wOSAgIAkoR1BJT19JTiB8IDkpCisjZGVmaW5lIFUxX1JYIAkJKEdQSU9fSU4gfCAxNSkKKyNkZWZpbmUgVTJfSFRDUyAJKEdQSU9fSU4gfCAxNikKKyNkZWZpbmUgVTJfUlgJIAkoR1BJT19JTiB8IDE3KQorI2RlZmluZSBVM19SWAkJKEdQSU9fSU4gfCAxOCkKKyNkZWZpbmUgVTRfUlgJCShHUElPX0lOIHwgMTkpCisjZGVmaW5lIFU1X1JYCQkoR1BJT19JTiB8IDIwKQorI2RlZmluZSBVNl9JUlJYIAkoR1BJT19JTiB8IDIxKQorI2RlZmluZSBVN19IQ1RTIAkoR1BJT19JTiB8IDIyKQorI2RlZmluZSBVN19SWAkJKEdQSU9fSU4gfCAyMykKKy8qIE1JU0MgSU4gKi8KKyNkZWZpbmUgU1BJMV9EQVRJTgkoR1BJT19JTiB8IDI1KQorI2RlZmluZSBESVNQX1NZTkMJKEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgU1BJMl9EQVRJTgkoR1BJT19JTiB8IDI3KQorI2RlZmluZSBHUElfMTEgIAkoR1BJT19JTiB8IDI4KQorCisjZGVmaW5lIEdQSU9fSU5fTUFTSyAgIDB4MWVmZjgzZmYKKworLyogT1VUUFVUIEdQSU9zICovCisvKiBHUE8gKi8KKyNkZWZpbmUgR1BPXzAwCQkoR1BJT19PVVQgfCAwKQorI2RlZmluZSBHUE9fMDEgICAJKEdQSU9fT1VUIHwgMSkKKyNkZWZpbmUgR1BPXzAyICAgCShHUElPX09VVCB8IDIpCisjZGVmaW5lIEdQT18wMyAJIAkoR1BJT19PVVQgfCAzKQorI2RlZmluZSBHUE9fMDQgICAJKEdQSU9fT1VUIHwgNCkKKyNkZWZpbmUgR1BPXzA1ICAgCShHUElPX09VVCB8IDUpCisjZGVmaW5lIEdQT18wNiAgIAkoR1BJT19PVVQgfCA2KQorI2RlZmluZSBHUE9fMDcgICAJKEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgR1BPXzA4CQkoR1BJT19PVVQgfCA4KQorI2RlZmluZSBHUE9fMDkgICAJKEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgR1BPXzEwICAgCShHUElPX09VVCB8IDEwKQorI2RlZmluZSBHUE9fMTEgCSAJKEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIEdQT18xMiAgIAkoR1BJT19PVVQgfCAxMikKKyNkZWZpbmUgR1BPXzEzICAgCShHUElPX09VVCB8IDEzKQorI2RlZmluZSBHUE9fMTQgICAJKEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIEdQT18xNSAgIAkoR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgR1BPXzE2ICAJKEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIEdQT18xNyAJIAkoR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgR1BPXzE4ICAgCShHUElPX09VVCB8IDE4KQorI2RlZmluZSBHUE9fMTkgICAJKEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIEdQT18yMCAgIAkoR1BJT19PVVQgfCAyMCkKKyNkZWZpbmUgR1BPXzIxICAgCShHUElPX09VVCB8IDIxKQorI2RlZmluZSBHUE9fMjIgICAJKEdQSU9fT1VUIHwgMjIpCisjZGVmaW5lIEdQT18yMyAgIAkoR1BJT19PVVQgfCAyMykKKworI2RlZmluZSBHUElPX09VVF9NQVNLICAgMHhmZmZmZmYKKworLyogQklESVJFQ1RJT05BTCBHUElPcyAqLworLyogUkFNIHBpbnMgKi8KKyNkZWZpbmUgUkFNX0QxOQkJKEdQSU9fUkFNIHwgMCkKKyNkZWZpbmUgUkFNX0QyMCAgCShHUElPX1JBTSB8IDEpCisjZGVmaW5lIFJBTV9EMjEgIAkoR1BJT19SQU0gfCAyKQorI2RlZmluZSBSQU1fRDIyIAkoR1BJT19SQU0gfCAzKQorI2RlZmluZSBSQU1fRDIzICAJKEdQSU9fUkFNIHwgNCkKKyNkZWZpbmUgUkFNX0QyNCAgCShHUElPX1JBTSB8IDUpCisjZGVmaW5lIFJBTV9EMjUgIAkoR1BJT19SQU0gfCA2KQorI2RlZmluZSBSQU1fRDI2ICAJKEdQSU9fUkFNIHwgNykKKyNkZWZpbmUgUkFNX0QyNwkJKEdQSU9fUkFNIHwgOCkKKyNkZWZpbmUgUkFNX0QyOCAgCShHUElPX1JBTSB8IDkpCisjZGVmaW5lIFJBTV9EMjkgIAkoR1BJT19SQU0gfCAxMCkKKyNkZWZpbmUgUkFNX0QzMCAJKEdQSU9fUkFNIHwgMTEpCisjZGVmaW5lIFJBTV9EMzEgIAkoR1BJT19SQU0gfCAxMikKKworI2RlZmluZSBHUElPX1JBTV9NQVNLICAgMHgxZmZmCisKKy8qIEkvTyBwaW5zICovCisjZGVmaW5lIEdQSU9fMDAgIAkoR1BJT19CSUQgfCAyNSkKKyNkZWZpbmUgR1BJT18wMSAJKEdQSU9fQklEIHwgMjYpCisjZGVmaW5lIEdQSU9fMDIgIAkoR1BJT19CSUQgfCAyNykKKyNkZWZpbmUgR1BJT18wMyAgCShHUElPX0JJRCB8IDI4KQorI2RlZmluZSBHUElPXzA0IAkoR1BJT19CSUQgfCAyOSkKKyNkZWZpbmUgR1BJT18wNSAgCShHUElPX0JJRCB8IDMwKQorCisjZGVmaW5lIEdQSU9fQklEX01BU0sgICAweDdlMDAwMDAwCisKKy8qIE5vbi1HUElPIG11bHRpcGxleGVkIFBJT3MuIEZvciBtdWx0aXBsZXhpbmcgd2l0aCBHUElPLCBwbGVhc2UgdXNlIEdQSU8gbWFjcm9zICovCisjZGVmaW5lIEdQSU9fU0RSQU1fU0VMIAkoR1BJT19NVVggfCAzKQorCisjZGVmaW5lIEdQSU9fTVVYX01BU0sgICAweDgKKworLyogRXh0cmFjdGlvbi9hc3NlbWJseSBtYWNyb3MgKi8KKyNkZWZpbmUgR1BJT19CSVRfTUFTSyhLKSAoKEspICYgMHgxRikKKyNkZWZpbmUgR1BJT19CSVQoSykgKDEgPDwgR1BJT19CSVRfTUFTSyhLKSkKKyNkZWZpbmUgR1BJT19JU01VWChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fTVVYKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX01VWF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU1JBTShLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fUkFNKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX1JBTV9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU0JJRChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fQklEKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX0JJRF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU09VVChLKSAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fT1VUKSAmJiAoR1BJT19CSVQoSykgJiBHUElPX09VVF9NQVNLKSkKKyNkZWZpbmUgR1BJT19JU0lOKEspICAoKEdQSU9fVFlQRV9NQVNLKEspID09IEdQSU9fSU4pICYmIChHUElPX0JJVChLKSAmIEdQSU9fSU5fTUFTSykpCisKK2V4dGVybiBpbnQgcG54NDAwOF9ncGlvX3JlZ2lzdGVyX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fdW5yZWdpc3Rlcl9waW4odW5zaWduZWQgc2hvcnQgcGluKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHBueDQwMDhfZ3Bpb19yZWFkX3Bpbih1bnNpZ25lZCBzaG9ydCBwaW4pOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fd3JpdGVfcGluKHVuc2lnbmVkIHNob3J0IHBpbiwgaW50IG91dHB1dCk7CitleHRlcm4gaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX2RpcmVjdGlvbih1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fZGlyZWN0aW9uKHVuc2lnbmVkIHNob3J0IHBpbik7CitleHRlcm4gaW50IHBueDQwMDhfZ3Bpb19zZXRfcGluX211eCh1bnNpZ25lZCBzaG9ydCBwaW4sIGludCBvdXRwdXQpOworZXh0ZXJuIGludCBwbng0MDA4X2dwaW9fcmVhZF9waW5fbXV4KHVuc2lnbmVkIHNob3J0IHBpbik7CisKKyNlbmRpZgkJCQkvKiBfUE5YNDAwOF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0MTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaGFyZHdhcmUuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9oYXJkd2FyZS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9wbGF0Zm9ybS5oPgorCisvKiBTdGFydCBvZiB2aXJ0dWFsIGFkZHJlc3NlcyBmb3IgSU8gZGV2aWNlcyAqLworI2RlZmluZSBJT19CQVNFICAgICAgICAgMHhGMDAwMDAwMAorCisvKiBUaGlzIG1hY3JvIHJlbGllcyBvbiBmYWN0IHRoYXQgZm9yIGFsbCBIVyBpL28gYWRkcmVzc2VzIGJpdHMgMjAtMjMgYXJlIDAgKi8KKyNkZWZpbmUgSU9fQUREUkVTUyh4KSAgKCgoKCh4KSAmIDB4ZmYwMDAwMDApID4+IDQpIHwgKCh4KSAmIDB4ZmZmZmYpKSB8IElPX0JBU0UpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9pby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZWU0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lvLmgKQEAgLTAsMCArMSwyMSBAQAorCisvKgorICogIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaW8uaAorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxjaGlnaXJldkBydS5tdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAweGZmZmZmZmZmCisKKyNkZWZpbmUgX19pbyhhKQkJCSgodm9pZCBfX2lvbWVtICopKGEpKQorI2RlZmluZSBfX21lbV9wY2koYSkJCShhKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYmZmNWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycS5oCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIgLSBoZWFkZXIgZmlsZQorICogdGhpcyBvbmUgaXMgdXNlZCBpbiBlbnRyeS1hcm52LlMgYXMgd2VsbCBzbyBpdCBjYW5ub3QgY29udGFpbiBDIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBfX1BOWDQwMDhfSVJRX0hfXworI2RlZmluZSBfX1BOWDQwMDhfSVJRX0hfXworCisjZGVmaW5lIE1JQ19WQV9CQVNFICAgICAgICAgICAgIElPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UpCisjZGVmaW5lIFNJQzFfVkFfQkFTRSAgICAgICAgICAgIElPX0FERFJFU1MoUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFKQorI2RlZmluZSBTSUMyX1ZBX0JBU0UgICAgICAgICAgICBJT19BRERSRVNTKFBOWDQwMDhfSU5UQ1RSTFNJQzJfQkFTRSkKKworLyogTWFudWFsOiBDaGFwdGVyIDIwLCBwYWdlIDE5NSAqLworCisjZGVmaW5lIElOVENfQklUKGlycSkgKDE8PCAoKGlycSkgJiAweDFGKSkKKworI2RlZmluZSBJTlRDX0VSKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDAgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX1JTUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDQgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX1NSKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDggKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX0FQUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweEMgKyAoKChpcnEpJigweDM8PDUpKTw8OSkpKQorI2RlZmluZSBJTlRDX0FUUihpcnEpICAgSU9fQUREUkVTUygoUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UgKyAweDEwICsgKCgoaXJxKSYoMHgzPDw1KSk8PDkpKSkKKyNkZWZpbmUgSU5UQ19JVFIoaXJxKSAgIElPX0FERFJFU1MoKFBOWDQwMDhfSU5UQ1RSTE1JQ19CQVNFICsgMHgxNCArICgoKGlycSkmKDB4Mzw8NSkpPDw5KSkpCisKKyNkZWZpbmUgU1RBUlRfSU5UX1JFR19CSVQoaXJxKSAoMTw8KChpcnEpJjB4MUYpKQorCisjZGVmaW5lIFNUQVJUX0lOVF9FUl9SRUcoaXJxKSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4MjAgKyAoKChpcnEpJigweDE8PDUpKT4+MSkpKQorI2RlZmluZSBTVEFSVF9JTlRfUlNSX1JFRyhpcnEpICAgIElPX0FERFJFU1MoKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweDI0ICsgKCgoaXJxKSYoMHgxPDw1KSk+PjEpKSkKKyNkZWZpbmUgU1RBUlRfSU5UX1NSX1JFRyhpcnEpICAgICBJT19BRERSRVNTKChQTlg0MDA4X1BXUk1BTl9CQVNFICsgMHgyOCArICgoKGlycSkmKDB4MTw8NSkpPj4xKSkpCisjZGVmaW5lIFNUQVJUX0lOVF9BUFJfUkVHKGlycSkgICAgSU9fQUREUkVTUygoUE5YNDAwOF9QV1JNQU5fQkFTRSArIDB4MkMgKyAoKChpcnEpJigweDE8PDUpKT4+MSkpKQorCitleHRlcm4gdm9pZCBfX2luaXQgcG54NDAwOF9pbml0X2lycSh2b2lkKTsKKworI2VuZGlmIC8qIF9fUE5YNDAwOF9JUlFfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZWM3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L2lycXMuaApAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvaXJxcy5oCisgKgorICogUE5YNDAwOCBJUlEgY29udHJvbGxlciBkcml2ZXIgLSBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9fUE5YNDAwOF9JUlFTX2hfXworI2RlZmluZSBfX1BOWDQwMDhfSVJRU19oX18KKworI2RlZmluZSBOUl9JUlFTICAgICAgICAgOTYKKworLypNYW51YWw6IHRhYmxlIDI1OSwgcGFnZSAxOTkqLworCisvKlNVQjIgSW50ZXJydXB0IFJvdXRpbmcgKFNJQzIpKi8KKworI2RlZmluZSBTSUMyX0JBU0VfSU5UICAgNjQKKworI2RlZmluZSBDTEtfU1dJVENIX0FSTV9JTlQgOTUJLyptYW51YWw6IENsa3N3aXRjaCBBUk0gICovCisjZGVmaW5lIENMS19TV0lUQ0hfRFNQX0lOVCA5NAkvKm1hbnVhbDogQ2xrU3dpdGNoIERTUCAgKi8KKyNkZWZpbmUgQ0xLX1NXSVRDSF9BVURfSU5UIDkzCS8qbWFudWFsOiBDbGtzd2l0Y2ggQVVEICAqLworI2RlZmluZSBHUElfMDZfSU5UICAgICAgICAgOTIKKyNkZWZpbmUgR1BJXzA1X0lOVCAgICAgICAgIDkxCisjZGVmaW5lIEdQSV8wNF9JTlQgICAgICAgICA5MAorI2RlZmluZSBHUElfMDNfSU5UICAgICAgICAgODkKKyNkZWZpbmUgR1BJXzAyX0lOVCAgICAgICAgIDg4CisjZGVmaW5lIEdQSV8wMV9JTlQgICAgICAgICA4NworI2RlZmluZSBHUElfMDBfSU5UICAgICAgICAgODYKKyNkZWZpbmUgQlRfQ0xLUkVRX0lOVCAgICAgIDg1CisjZGVmaW5lIFNQSTFfREFUSU5fSU5UICAgICA4NAorI2RlZmluZSBVNV9SWF9JTlQgICAgICAgICAgODMKKyNkZWZpbmUgU0RJT19JTlRfTiAgICAgICAgIDgyCisjZGVmaW5lIENBTV9IU19JTlQgICAgICAgICA4MQorI2RlZmluZSBDQU1fVlNfSU5UICAgICAgICAgODAKKyNkZWZpbmUgR1BJXzA3X0lOVCAgICAgICAgIDc5CisjZGVmaW5lIERJU1BfU1lOQ19JTlQgICAgICA3OAorI2RlZmluZSBEU1BfSU5UOCAgICAgICAgICAgNzcKKyNkZWZpbmUgVTdfSENUU19JTlQgICAgICAgIDc2CisjZGVmaW5lIEdQSV8xMF9JTlQgICAgICAgICA3NQorI2RlZmluZSBHUElfMDlfSU5UICAgICAgICAgNzQKKyNkZWZpbmUgR1BJXzA4X0lOVCAgICAgICAgIDczCisjZGVmaW5lIERTUF9JTlQ3ICAgICAgICAgICA3MgorI2RlZmluZSBVMl9IQ1RTX0lOVCAgICAgICAgNzEKKyNkZWZpbmUgU1BJMl9EQVRJTl9JTlQgICAgIDcwCisjZGVmaW5lIEdQSU9fMDVfSU5UICAgICAgICA2OQorI2RlZmluZSBHUElPXzA0X0lOVCAgICAgICAgNjgKKyNkZWZpbmUgR1BJT18wM19JTlQgICAgICAgIDY3CisjZGVmaW5lIEdQSU9fMDJfSU5UICAgICAgICA2NgorI2RlZmluZSBHUElPXzAxX0lOVCAgICAgICAgNjUKKyNkZWZpbmUgR1BJT18wMF9JTlQgICAgICAgIDY0CisKKy8qTWFudWFsOiB0YWJsZSAyNTgsIHBhZ2UgMTk4Ki8KKworLypTVUIxIEludGVycnVwdCBSb3V0aW5nIChTSUMxKSovCisKKyNkZWZpbmUgU0lDMV9CQVNFX0lOVCAgIDMyCisKKyNkZWZpbmUgVVNCX0kyQ19JTlQgICAgICAgIDYzCisjZGVmaW5lIFVTQl9ERVZfSFBfSU5UICAgICA2MgorI2RlZmluZSBVU0JfREVWX0xQX0lOVCAgICAgNjEKKyNkZWZpbmUgVVNCX0RFVl9ETUFfSU5UICAgIDYwCisjZGVmaW5lIFVTQl9IT1NUX0lOVCAgICAgICA1OQorI2RlZmluZSBVU0JfT1RHX0FUWF9JTlRfTiAgNTgKKyNkZWZpbmUgVVNCX09UR19USU1FUl9JTlQgIDU3CisjZGVmaW5lIFNXX0lOVCAgICAgICAgICAgICA1NgorI2RlZmluZSBTUEkxX0lOVCAgICAgICAgICAgNTUKKyNkZWZpbmUgS0VZX0lSUSAgICAgICAgICAgIDU0CisjZGVmaW5lIERTUF9NX0lOVCAgICAgICAgICA1MworI2RlZmluZSBSVENfSU5UICAgICAgICAgICAgNTIKKyNkZWZpbmUgSTJDXzFfSU5UICAgICAgICAgIDUxCisjZGVmaW5lIEkyQ18yX0lOVCAgICAgICAgICA1MAorI2RlZmluZSBQTEwxX0xPQ0tfSU5UICAgICAgNDkKKyNkZWZpbmUgUExMMl9MT0NLX0lOVCAgICAgIDQ4CisjZGVmaW5lIFBMTDNfTE9DS19JTlQgICAgICA0NworI2RlZmluZSBQTEw0X0xPQ0tfSU5UICAgICAgNDYKKyNkZWZpbmUgUExMNV9MT0NLX0lOVCAgICAgIDQ1CisjZGVmaW5lIFNQSTJfSU5UICAgICAgICAgICA0NAorI2RlZmluZSBEU1BfSU5UMSAgICAgICAgICAgNDMKKyNkZWZpbmUgRFNQX0lOVDIgICAgICAgICAgIDQyCisjZGVmaW5lIERTUF9URE1fSU5UMiAgICAgICA0MQorI2RlZmluZSBUU19BVVhfSU5UICAgICAgICAgNDAKKyNkZWZpbmUgVFNfSVJRICAgICAgICAgICAgIDM5CisjZGVmaW5lIFRTX1BfSU5UICAgICAgICAgICAzOAorI2RlZmluZSBVT1VUMV9UT19QQURfSU5UICAgMzcKKyNkZWZpbmUgR1BJXzExX0lOVCAgICAgICAgIDM2CisjZGVmaW5lIERTUF9JTlQ0ICAgICAgICAgICAzNQorI2RlZmluZSBKVEFHX0NPTU1fUlhfSU5UICAgMzQKKyNkZWZpbmUgSlRBR19DT01NX1RYX0lOVCAgIDMzCisjZGVmaW5lIERTUF9JTlQzICAgICAgICAgICAzMgorCisvKk1hbnVhbDogdGFibGUgMjU3LCBwYWdlIDE5NyovCisKKy8qTUFJTiBJbnRlcnJ1cHQgUm91dGluZyovCisKKyNkZWZpbmUgTUFJTl9CQVNFX0lOVCAgIDAKKworI2RlZmluZSBTVUIyX0ZJUV9OICAgICAgICAgMzEJLyphY3RpdmUgbG93ICovCisjZGVmaW5lIFNVQjFfRklRX04gICAgICAgICAzMAkvKmFjdGl2ZSBsb3cgKi8KKyNkZWZpbmUgSlBFR19JTlQgICAgICAgICAgIDI5CisjZGVmaW5lIERNQV9JTlQgICAgICAgICAgICAyOAorI2RlZmluZSBNU1RJTUVSX0lOVCAgICAgICAgMjcKKyNkZWZpbmUgSUlSMV9JTlQgICAgICAgICAgIDI2CisjZGVmaW5lIElJUjJfSU5UICAgICAgICAgICAyNQorI2RlZmluZSBJSVI3X0lOVCAgICAgICAgICAgMjQKKyNkZWZpbmUgRFNQX1RETV9JTlQwICAgICAgIDIzCisjZGVmaW5lIERTUF9URE1fSU5UMSAgICAgICAyMgorI2RlZmluZSBEU1BfUF9JTlQgICAgICAgICAgMjEKKyNkZWZpbmUgRFNQX0lOVDAgICAgICAgICAgIDIwCisjZGVmaW5lIERVTV9JTlQgICAgICAgICAgICAxOQorI2RlZmluZSBVT1VUMF9UT19QQURfSU5UICAgMTgKKyNkZWZpbmUgTVA0X0VOQ19JTlQgICAgICAgIDE3CisjZGVmaW5lIE1QNF9ERUNfSU5UICAgICAgICAxNgorI2RlZmluZSBTRDBfSU5UICAgICAgICAgICAgMTUKKyNkZWZpbmUgTUJYX0lOVCAgICAgICAgICAgIDE0CisjZGVmaW5lIFNEMV9JTlQgICAgICAgICAgICAxMworI2RlZmluZSBNU19JTlRfTiAgICAgICAgICAgMTIKKyNkZWZpbmUgRkxBU0hfSU5UICAgICAgICAgIDExIC8qTkFORCovCisjZGVmaW5lIElJUjZfSU5UICAgICAgICAgICAxMAorI2RlZmluZSBJSVI1X0lOVCAgICAgICAgICAgOQorI2RlZmluZSBJSVI0X0lOVCAgICAgICAgICAgOAorI2RlZmluZSBJSVIzX0lOVCAgICAgICAgICAgNworI2RlZmluZSBXQVRDSF9JTlQgICAgICAgICAgNgorI2RlZmluZSBIU1RJTUVSX0lOVCAgICAgICAgNQorI2RlZmluZSBBUkNIX1RJTUVSX0lSUSAgICAgSFNUSU1FUl9JTlQKKyNkZWZpbmUgQ0FNX0lOVCAgICAgICAgICAgIDQKKyNkZWZpbmUgUFJOR19JTlQgICAgICAgICAgIDMKKyNkZWZpbmUgQ1JZUFRPX0lOVCAgICAgICAgIDIKKyNkZWZpbmUgU1VCMl9JUlFfTiAgICAgICAgIDEJLyphY3RpdmUgbG93ICovCisjZGVmaW5lIFNVQjFfSVJRX04gICAgICAgICAwCS8qYWN0aXZlIGxvdyAqLworCisjZGVmaW5lIFBOWDQwMDhfSVJRX1RZUEVTIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypJUlEgIydzOiAqLyAgICAgICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9MT1csICBJUlFUX0xPVywgIElSUVRfSElHSCwgLyogIDAsIDEsIDIsIDMgKi8gICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogIDQsIDUsIDYsIDcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogIDgsIDksMTAsMTEgKi8gICAgIFwKK0lSUVRfTE9XLCAgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMTIsMTMsMTQsMTUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMTYsMTcsMTgsMTkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMjAsMjEsMjIsMjMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMjQsMjUsMjYsMjcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfTE9XLCAgLyogMjgsMjksMzAsMzEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9MT1csICBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogMzIsMzMsMzQsMzUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0ZBTExJTkcsIElSUVRfSElHSCwgLyogMzYsMzcsMzgsMzkgKi8gIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNDAsNDEsNDIsNDMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNDQsNDUsNDYsNDcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfTE9XLCAgLyogNDgsNDksNTAsNTEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNTIsNTMsNTQsNTUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0xPVywgIElSUVRfSElHSCwgLyogNTYsNTcsNTgsNTkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjAsNjEsNjIsNjMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjQsNjUsNjYsNjcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNjgsNjksNzAsNzEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNzIsNzMsNzQsNzUgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogNzYsNzcsNzgsNzkgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODAsODEsODIsODMgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODQsODUsODYsODcgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogODgsODksOTAsOTEgKi8gICAgIFwKK0lSUVRfSElHSCwgSVJRVF9ISUdILCBJUlFUX0hJR0gsIElSUVRfSElHSCwgLyogOTIsOTMsOTQsOTUgKi8gICAgIFwKK30KKworLyogU3RhcnQgRW5hYmxlIFBpbiBJbnRlcnJ1cHRzIC0gdGFibGUgNTggcGFnZSA2NiAqLworCisjZGVmaW5lIFNFX1BJTl9CQVNFX0lOVCAgIDMyCisKKyNkZWZpbmUgU0VfVTdfUlhfSU5UICAgICAgICAgICAgNjMKKyNkZWZpbmUgU0VfVTdfSENUU19JTlQgICAgICAgICAgNjIKKyNkZWZpbmUgU0VfQlRfQ0xLUkVRX0lOVCAgICAgICAgNjEKKyNkZWZpbmUgU0VfVTZfSVJSWF9JTlQgICAgICAgICAgNjAKKy8qNTkgdW51c2VkKi8KKyNkZWZpbmUgU0VfVTVfUlhfSU5UICAgICAgICAgICAgNTgKKyNkZWZpbmUgU0VfR1BJXzExX0lOVCAgICAgICAgICAgNTcKKyNkZWZpbmUgU0VfVTNfUlhfSU5UICAgICAgICAgICAgNTYKKyNkZWZpbmUgU0VfVTJfSENUU19JTlQgICAgICAgICAgNTUKKyNkZWZpbmUgU0VfVTJfUlhfSU5UICAgICAgICAgICAgNTQKKyNkZWZpbmUgU0VfVTFfUlhfSU5UICAgICAgICAgICAgNTMKKyNkZWZpbmUgU0VfRElTUF9TWU5DX0lOVCAgICAgICAgNTIKKy8qNTEgdW51c2VkKi8KKyNkZWZpbmUgU0VfU0RJT19JTlRfTiAgICAgICAgICAgNTAKKyNkZWZpbmUgU0VfTVNESU9fU1RBUlRfSU5UICAgICAgNDkKKyNkZWZpbmUgU0VfR1BJXzA2X0lOVCAgICAgICAgICAgNDgKKyNkZWZpbmUgU0VfR1BJXzA1X0lOVCAgICAgICAgICAgNDcKKyNkZWZpbmUgU0VfR1BJXzA0X0lOVCAgICAgICAgICAgNDYKKyNkZWZpbmUgU0VfR1BJXzAzX0lOVCAgICAgICAgICAgNDUKKyNkZWZpbmUgU0VfR1BJXzAyX0lOVCAgICAgICAgICAgNDQKKyNkZWZpbmUgU0VfR1BJXzAxX0lOVCAgICAgICAgICAgNDMKKyNkZWZpbmUgU0VfR1BJXzAwX0lOVCAgICAgICAgICAgNDIKKyNkZWZpbmUgU0VfU1lTQ0xLRU5fUElOX0lOVCAgICAgNDEKKyNkZWZpbmUgU0VfU1BJMV9EQVRBSU5fSU5UICAgICAgNDAKKyNkZWZpbmUgU0VfR1BJXzA3X0lOVCAgICAgICAgICAgMzkKKyNkZWZpbmUgU0VfU1BJMl9EQVRBSU5fSU5UICAgICAgMzgKKyNkZWZpbmUgU0VfR1BJXzEwX0lOVCAgICAgICAgICAgMzcKKyNkZWZpbmUgU0VfR1BJXzA5X0lOVCAgICAgICAgICAgMzYKKyNkZWZpbmUgU0VfR1BJXzA4X0lOVCAgICAgICAgICAgMzUKKy8qMzQtMzIgdW51c2VkKi8KKworLyogU3RhcnQgRW5hYmxlIEludGVybmFsIEludGVycnVwdHMgLSB0YWJsZSA1NyBwYWdlIDY1ICovCisKKyNkZWZpbmUgU0VfSU5UX0JBU0VfSU5UICAgMAorCisjZGVmaW5lIFNFX1RTX0lSUSAgICAgICAgICAgICAgIDMxCisjZGVmaW5lIFNFX1RTX1BfSU5UICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNFX1RTX0FVWF9JTlQgICAgICAgICAgIDI5CisvKjI3LTI4IHVudXNlZCovCisjZGVmaW5lIFNFX1VTQl9BSEJfTkVFRF9DTEtfSU5UIDI2CisjZGVmaW5lIFNFX01TVElNRVJfSU5UICAgICAgICAgIDI1CisjZGVmaW5lIFNFX1JUQ19JTlQgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFNFX1VTQl9ORUVEX0NMS19JTlQgICAgIDIzCisjZGVmaW5lIFNFX1VTQl9JTlQgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFNFX1VTQl9JMkNfSU5UICAgICAgICAgIDIxCisjZGVmaW5lIFNFX1VTQl9PVEdfVElNRVJfSU5UICAgIDIwCisKKyNlbmRpZiAvKiBfX1BOWDQwMDhfSVJRU19oX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvbWVtb3J5LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODI2OGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFBoaWxpcHMgU2VtaWNvbmR1Y3RvcnMKKyAqIENvcHlyaWdodCAoYykgMjAwNSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworLyoKKyAqIFBoeXNpY2FsIERSQU0gb2Zmc2V0LgorICovCisjZGVmaW5lIFBIWVNfT0ZGU0VUICAgICAoMHg4MDAwMDAwMCkKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpICgoeCkgLSBQQUdFX09GRlNFVCArIFBIWVNfT0ZGU0VUKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpICgoeCkgKyBQQUdFX09GRlNFVCAtIFBIWVNfT0ZGU0VUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWQ1ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wYXJhbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wYXJhbS5oCisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIEhaIDEwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NWEzNjUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3BsYXRmb3JtLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcGxhdGZyb20uaAorICoKKyAqIFBOWDQwMDggQmFzZSBhZGRyZXNzZXMgLSBoZWFkZXIgZmlsZQorICoKKyAqIEF1dGhvcjogRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiBCYXNlZCBvbiByZWZlcmVuY2UgY29kZSByZWNlaXZlZCBmcm9tIFBoaWxpcHM6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUGhpbGlwcyBTZW1pY29uZHVjdG9ycworICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUExBVEZPUk1fSF9fCisjZGVmaW5lIF9fQVNNX0FSQ0hfUExBVEZPUk1fSF9fCisKKyNkZWZpbmUgUE5YNDAwOF9JUkFNX0JBU0UJCTB4MDgwMDAwMDAKKyNkZWZpbmUgUE5YNDAwOF9JUkFNX1NJWkUJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9ZVVZfU0xBVkVfQkFTRQkJMHgxMDAwMDAwMAorI2RlZmluZSBQTlg0MDA4X0RVTV9TTEFWRV9CQVNFCQkweDE4MDAwMDAwCisjZGVmaW5lIFBOWDQwMDhfTkRGX0ZMQVNIX0JBU0UJCTB4MjAwMjAwMDAKKyNkZWZpbmUgUE5YNDAwOF9TUEkxX0JBU0UJCTB4MjAwODgwMDAKKyNkZWZpbmUgUE5YNDAwOF9TUEkyX0JBU0UJCTB4MjAwOTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9TRF9DT05GSUdfQkFTRQkJMHgyMDA5ODAwMAorI2RlZmluZSBQTlg0MDA4X0ZMQVNIX0RBVEEJCTB4MjAwQjAwMDAKKyNkZWZpbmUgUE5YNDAwOF9NTENfRkxBU0hfQkFTRQkJMHgyMDBCODAwMAorI2RlZmluZSBQTlg0MDA4X0pQRUdfQ09ORklHX0JBU0UJMHgzMDBBMDAwMAorI2RlZmluZSBQTlg0MDA4X0RNQV9DT05GSUdfQkFTRQkJMHgzMTAwMDAwMAorI2RlZmluZSBQTlg0MDA4X1VTQl9DT05GSUdfQkFTRQkJMHgzMTAyMDAwMAorI2RlZmluZSBQTlg0MDA4X1NEUkFNX0NGR19CQVNFCQkweDMxMDgwMDAwCisjZGVmaW5lIFBOWDQwMDhfQUhCMkZBQl9CQVNFCQkweDQwMDAwMDAwCisjZGVmaW5lIFBOWDQwMDhfUFdSTUFOX0JBU0UJCTB4NDAwMDQwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMTUlDX0JBU0UJCTB4NDAwMDgwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMU0lDMV9CQVNFCTB4NDAwMEMwMDAKKyNkZWZpbmUgUE5YNDAwOF9JTlRDVFJMU0lDMl9CQVNFCTB4NDAwMTAwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQxX0JBU0UJCTB4NDAwMTQwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQyX0JBU0UJCTB4NDAwMTgwMDAKKyNkZWZpbmUgUE5YNDAwOF9IU1VBUlQ3X0JBU0UJCTB4NDAwMUMwMDAKKyNkZWZpbmUgUE5YNDAwOF9SVENfQkFTRQkJMHg0MDAyNDAwMAorI2RlZmluZSBQTlg0MDA4X1BJT19CQVNFCQkweDQwMDI4MDAwCisjZGVmaW5lIFBOWDQwMDhfTVNUSU1FUl9CQVNFCQkweDQwMDM0MDAwCisjZGVmaW5lIFBOWDQwMDhfSFNUSU1FUl9CQVNFCQkweDQwMDM4MDAwCisjZGVmaW5lIFBOWDQwMDhfV0RPR19CQVNFCQkweDQwMDNDMDAwCisjZGVmaW5lIFBOWDQwMDhfREVCVUdfQkFTRQkJMHg0MDA0MDAwMAorI2RlZmluZSBQTlg0MDA4X1RPVUNIMV9CQVNFCQkweDQwMDQ4MDAwCisjZGVmaW5lIFBOWDQwMDhfS0VZU0NBTl9CQVNFCQkweDQwMDUwMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVENUUkxfQkFTRQkJMHg0MDA1NDAwMAorI2RlZmluZSBQTlg0MDA4X1BXTV9CQVNFCQkweDQwMDVDMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVDNfQkFTRQkJMHg0MDA4MDAwMAorI2RlZmluZSBQTlg0MDA4X1VBUlQ0X0JBU0UJCTB4NDAwODgwMDAKKyNkZWZpbmUgUE5YNDAwOF9VQVJUNV9CQVNFCQkweDQwMDkwMDAwCisjZGVmaW5lIFBOWDQwMDhfVUFSVDZfQkFTRQkJMHg0MDA5ODAwMAorI2RlZmluZSBQTlg0MDA4X0kyQzFfQkFTRQkJMHg0MDBBMDAwMAorI2RlZmluZSBQTlg0MDA4X0kyQzJfQkFTRQkJMHg0MDBBODAwMAorI2RlZmluZSBQTlg0MDA4X01BR0lDR0FURV9CQVNFCQkweDQwMEIwMDAwCisjZGVmaW5lIFBOWDQwMDhfRFVNQ09ORl9CQVNFCQkweDQwMEI4MDAwCisjZGVmaW5lIFBOWDQwMDhfRFVNX01BSU5DRkdfQkFTRSAgICAgICAJMHg0MDBCQzAwMAorI2RlZmluZSBQTlg0MDA4X0RTUF9CQVNFCQkweDQwMEMwMDAwCisjZGVmaW5lIFBOWDQwMDhfUFJPRkNPVU5URVJfQkFTRQkweDQwMEM4MDAwCisjZGVmaW5lIFBOWDQwMDhfQ1JZUFRPX0JBU0UJCTB4NDAwRDAwMDAKKyNkZWZpbmUgUE5YNDAwOF9DQU1JRkNPTkZfQkFTRQkJMHg0MDBEODAwMAorI2RlZmluZSBQTlg0MDA4X1lVVjJSR0JfQkFTRQkJMHg0MDBFMDAwMAorI2RlZmluZSBQTlg0MDA4X0FVRElPQ09ORklHX0JBU0UJMHg0MDBFODAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcG0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjYwNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9wbS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3BtLmgKKyAqCisgKiBQTlg0MDA4IFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXNzIC0gaGVhZGVyIGZpbGUKKyAqCisgKiBBdXRob3JzOiBWaXRhbHkgV29vbCwgRG1pdHJ5IENoaWdpcmV2IDxzb3VyY2VAbXZpc3RhLmNvbT4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9QTlg0MDA4X1BNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QTlg0MDA4X1BNX0gKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCisjaW5jbHVkZSAiaXJxLmgiCisjaW5jbHVkZSAiaXJxcy5oIgorI2luY2x1ZGUgImNsb2NrLmgiCisKK2V4dGVybiB2b2lkIHBueDQwMDhfcG1faWRsZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBueDQwMDhfcG1fc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgcG54NDAwOF9jcHVfc3VzcGVuZF9zejsKK2V4dGVybiB2b2lkIHBueDQwMDhfY3B1X3N1c3BlbmQodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IHBueDQwMDhfY3B1X3N0YW5kYnlfc3o7CitleHRlcm4gdm9pZCBwbng0MDA4X2NwdV9zdGFuZGJ5KHZvaWQpOworCitleHRlcm4gaW50IHBueDQwMDhfc3RhcnR1cF9wbGwoc3RydWN0IGNsayAqKTsKK2V4dGVybiBpbnQgcG54NDAwOF9zaHV0ZG93bl9wbGwoc3RydWN0IGNsayAqKTsKKworc3RhdGljIGlubGluZSB2b2lkIHN0YXJ0X2ludF91bWFzayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9FUl9SRUcoaXJxKSkgfAorCQkgICAgIFNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9FUl9SRUcoaXJxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdGFydF9pbnRfbWFzayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9FUl9SRUcoaXJxKSkgJgorCQkgICAgIH5TVEFSVF9JTlRfUkVHX0JJVChpcnEpLCBTVEFSVF9JTlRfRVJfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X2Fjayh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKFNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9SU1JfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X3NldF9mYWxsaW5nX2VkZ2UodTggaXJxKQoreworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTVEFSVF9JTlRfQVBSX1JFRyhpcnEpKSAmCisJCSAgICAgflNUQVJUX0lOVF9SRUdfQklUKGlycSksIFNUQVJUX0lOVF9BUFJfUkVHKGlycSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZSh1OCBpcnEpCit7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNUQVJUX0lOVF9BUFJfUkVHKGlycSkpIHwKKwkJICAgICBTVEFSVF9JTlRfUkVHX0JJVChpcnEpLCBTVEFSVF9JTlRfQVBSX1JFRyhpcnEpKTsKK30KKworI2VuZGlmCQkJCS8qIEFTU0VNQkxFUiAqLworI2VuZGlmCQkJCS8qIF9fQVNNX0FSQ0hfUE5YNDAwOF9QTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTNkYTcwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaApAQCAtMCwwICsxLDM4IEBACisvKgorICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBQaGlsaXBzIFNlbWljb25kdWN0b3JzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfaWRsZSh2b2lkKQoreworCWNwdV9kb19pZGxlKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKK3sKKwljcHVfcmVzZXQoMCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDcwYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3RpbWV4LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdGltZXguaAorICoKKyAqIFBOWDQwMDggdGltZXJzIGhlYWRlciBmaWxlCisgKgorICogQXV0aG9yOiBEbWl0cnkgQ2hpZ2lyZXYgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDUgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworI2lmbmRlZiBfX1BOWDQwMDhfVElNRVhfSAorI2RlZmluZSBfX1BOWDQwMDhfVElNRVhfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMDAwMDAwCisKKyNkZWZpbmUgVElDS1MyVVNFQ1MoeCkJKHgpCisKKy8qIE1pbGxpU2Vjb25kIFRpbWVyIC0gQ2hhcHRlciAyMSBQYWdlIDIwMiAqLworCisjZGVmaW5lIE1TVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBNU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgTVNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIE1TVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9NU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgTVNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X01TVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBNU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfTVNUSU1FUl9CQVNFICsgMHgxYykpCisKKy8qIEhpZ2ggU3BlZWQgVGltZXIgLSBDaHBhdGVyIDIyLCBQYWdlIDIwNSAqLworCisjZGVmaW5lIEhTVElNX0lOVCAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDApKQorI2RlZmluZSBIU1RJTV9DVFJMICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHg0KSkKKyNkZWZpbmUgSFNUSU1fQ09VTlRFUiBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4OCkpCisjZGVmaW5lIEhTVElNX1BNQVRDSCAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweEMpKQorI2RlZmluZSBIU1RJTV9QQ09VTlQgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxMCkpCisjZGVmaW5lIEhTVElNX01DVFJMICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDE0KSkKKyNkZWZpbmUgSFNUSU1fTUFUQ0gwICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MTgpKQorI2RlZmluZSBIU1RJTV9NQVRDSDEgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgxYykpCisjZGVmaW5lIEhTVElNX01BVENIMiAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDIwKSkKKyNkZWZpbmUgSFNUSU1fQ0NSICAgICBJT19BRERSRVNTKChQTlg0MDA4X0hTVElNRVJfQkFTRSArIDB4MjgpKQorI2RlZmluZSBIU1RJTV9DUjAgICAgIElPX0FERFJFU1MoKFBOWDQwMDhfSFNUSU1FUl9CQVNFICsgMHgyQykpCisjZGVmaW5lIEhTVElNX0NSMSAgICAgSU9fQUREUkVTUygoUE5YNDAwOF9IU1RJTUVSX0JBU0UgKyAweDMwKSkKKworLyogSU1QT1JUQU5UOiBib3RoIHRpbWVycyBhcmUgVVBDT1VOVElORyAqLworCisvKiB4U1RJTV9NQ1RSTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVIwX0lOVCAgICAgICAgMQorI2RlZmluZSBSRVNFVF9DT1VOVDAgICAoMTw8MSkKKyNkZWZpbmUgU1RPUF9DT1VOVDAgICAgKDE8PDIpCisjZGVmaW5lIE1SMV9JTlQgICAgICAgICgxPDwzKQorI2RlZmluZSBSRVNFVF9DT1VOVDEgICAoMTw8NCkKKyNkZWZpbmUgU1RPUF9DT1VOVDEgICAgKDE8PDUpCisjZGVmaW5lIE1SMl9JTlQgICAgICAgICgxPDw2KQorI2RlZmluZSBSRVNFVF9DT1VOVDIgICAoMTw8NykKKyNkZWZpbmUgU1RPUF9DT1VOVDIgICAgKDE8PDgpCisKKy8qIHhTVElNX0NUUkwgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIENPVU5UX0VOQUIgICAgIDEKKyNkZWZpbmUgUkVTRVRfQ09VTlQgICAgKDE8PDEpCisjZGVmaW5lIERFQlVHX0VOICAgICAgICgxPDwyKQorCisvKiB4U1RJTV9JTlQgYml0IGRlZmluaXRpb25zICovCisjZGVmaW5lIE1BVENIMF9JTlQgICAgIDEKKyNkZWZpbmUgTUFUQ0gxX0lOVCAgICAgKDE8PDEpCisjZGVmaW5lIE1BVENIMl9JTlQgICAgICgxPDwyKQorI2RlZmluZSBSVENfVElDSzAgICAgICAoMTw8NCkKKyNkZWZpbmUgUlRDX1RJQ0sxICAgICAgKDE8PDUpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmE0ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqICBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3VuY29tcHJlc3MuaAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgQVJNIExpbWl0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjZGVmaW5lIFVBUlQ1X0JBU0UgMHg0MDA5MDAwMAorCisjZGVmaW5lIFVBUlQ1X0RSICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKFVBUlQ1X0JBU0UpKQorI2RlZmluZSBVQVJUNV9GUiAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChVQVJUNV9CQVNFICsgMTgpKQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHB1dGMoY2hhciBjKQoreworCXdoaWxlIChVQVJUNV9GUiAmICgxIDw8IDUpKQorCQliYXJyaWVyKCk7CisKKwlVQVJUNV9EUiA9IGM7Cit9CisKKy8qCisgKiBUaGlzIGRvZXMgbm90IGFwcGVuZCBhIG5ld2xpbmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKKy8qCisgKiBub3RoaW5nIHRvIGRvCisgKi8KKyNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcG54NDAwOC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQwZDkyNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXBueDQwMDgvdm1hbGxvYy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1wbng0MDA4L3ZtYWxsb2MuaAorICoKKyAqIEF1dGhvcjogVml0YWx5IFdvb2wgPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIDIwMDYgKGMpIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtCisgKiBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3MKKyAqIG9yIGltcGxpZWQuCisgKi8KKworLyoKKyAqIEp1c3QgYW55IGFyYml0cmFyeSBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mIHRoZSB2bWFsbG9jIFZNIGFyZWE6IHRoZQorICogY3VycmVudCA4TUIgdmFsdWUganVzdCBtZWFucyB0aGF0IHRoZXJlIHdpbGwgYmUgYSA4TUIgImhvbGUiIGFmdGVyIHRoZQorICogcGh5c2ljYWwgbWVtb3J5IHVudGlsIHRoZSBrZXJuZWwgdmlydHVhbCBtZW1vcnkgc3RhcnRzLiAgVGhhdCBtZWFucyB0aGF0CisgKiBhbnkgb3V0LW9mLWJvdW5kcyBtZW1vcnkgYWNjZXNzZXMgd2lsbCBob3BlZnVsbHkgYmUgY2F1Z2h0LgorICogVGhlIHZtYWxsb2MoKSByb3V0aW5lcyBsZWF2ZXMgYSBob2xlIG9mIDRrQiBiZXR3ZWVuIGVhY2ggdm1hbGxvY2VkCisgKiBhcmVhIGZvciB0aGUgc2FtZSByZWFzb24uIDspCisgKi8KKyNkZWZpbmUgVk1BTExPQ19FTkQgICAgICAgKFBBR0VfT0ZGU0VUICsgMHgxMDAwMDAwMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pZHAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pZHAuaAppbmRleCBlN2VmNDk3Li5iNjk1MjUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvaWRwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lkcC5oCkBAIC0xNSw3ICsxNSw2IEBACiAgKiAgICAgICAgICAgICBDaGFuZ2VzIGZvciAyLjYga2VybmVsLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE5vdGU6IHRoaXMgZmlsZSBtdXN0IGJlIHNhZmUgdG8gaW5jbHVkZSBpbiBhc3NlbWJseSBmaWxlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKaW5kZXggNjdhZjIzOGEuLmYzYmM3MGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL2lycXMuaApAQCAtMTAsNyArMTAsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BYQTI3eAogI2RlZmluZSBQWEFfSVJRX1NLSVAJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3B4YS1yZWdzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAppbmRleCBjOGY1M2E3Li42NjUwZDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcHhhLXJlZ3MuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfX1BYQV9SRUdTX0gKICNkZWZpbmUgX19QWEFfUkVHU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFBYQSBDaGlwIHNlbGVjdHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS90aW1leC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3RpbWV4LmgKaW5kZXggYWExMjVlYy4uMjQ3M2JiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3RpbWV4LmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTI1eCkKIC8qIFBYQTI1MC8yMTAgdGltZXIgYmFzZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcmVhbHZpZXcvc21wLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9zbXAuaAppbmRleCBmYzg3NzgzLi41MTU4MTllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1yZWFsdmlldy9zbXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgQVNNQVJNX0FSQ0hfU01QX0gKICNkZWZpbmUgQVNNQVJNX0FSQ0hfU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaAppbmRleCBiMDExZTE0Li43Mjk2NGY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAogI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9IIF9fRklMRV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlICJoYXJkd2FyZS5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAppbmRleCBjMzgwZDI2Li41ZTRjOGMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKQEAgLTEyNiw5ICsxMjYsMTggQEAKICNkZWZpbmUgUzNDMjRYWF9TWl9JSVMJICAgU1pfMU0KIAogLyogR1BJTyBwb3J0cyAqLwotI2RlZmluZSBTM0MyNFhYX1ZBX0dQSU8JICAgUzNDMjQxMF9BRERSKDB4MDBFMDAwMDApCisKKy8qIHRoZSBjYWxjdWxhdGlvbiBmb3IgdGhlIFZBIG9mIHRoaXMgbXVzdCBlbnN1cmUgdGhhdAorICogaXQgaXMgdGhlIHNhbWUgZGlzdGFuY2UgYXBhcnQgZnJvbSB0aGUgVUFSVCBpbiB0aGUKKyAqIHBoc3lpY2FsIGFkZHJlc3Mgc3BhY2UsIGFzIHRoZSBpbml0aWFsIG1hcHBpbmcgZm9yIHRoZSBJTworICogaXMgZG9uZSBhcyBhIDE6MSBtYXBpbmcuIFRoaXMgcHV0cyBpdCAoY3VycmVudGx5KSBhdAorICogMHhGNjgwMDAwMCwgd2hpY2ggaXMgbm90IGluIHRoZSB3YXkgb2YgYW55IGN1cnJlbnQgbWFwcGluZworICogYnkgdGhlIGJhc2Ugc3lzdGVtLgorKi8KKwogI2RlZmluZSBTM0MyNDAwX1BBX0dQSU8JICAgKDB4MTU2MDAwMDApCiAjZGVmaW5lIFMzQzI0MTBfUEFfR1BJTwkgICAoMHg1NjAwMDAwMCkKKyNkZWZpbmUgUzNDMjRYWF9WQV9HUElPCSAgICgoUzNDMjQxMF9QQV9HUElPIC0gUzNDMjRYWF9QQV9VQVJUKSArIFMzQzI0WFhfVkFfVUFSVCkKICNkZWZpbmUgUzNDMjRYWF9TWl9HUElPCSAgIFNaXzFNCiAKIC8qIFJUQyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAppbmRleCAzNDM2MDcwLi42YzkyZmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtY2xvY2suaApAQCAtMTE0LDcgKzExNCw3IEBACiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAotI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQ0MikKIAogLyogZXh0cmEgcmVnaXN0ZXJzICovCiAjZGVmaW5lIFMzQzI0NDBfQ0FNRElWTgkgICAgUzNDMjQxMF9DTEtSRUcoMHgxOCkKQEAgLTEzNiw3ICsxMzYsOSBAQAogI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRiAgICgxPDw5KQogI2RlZmluZSBTM0MyNDQwX0NBTURJVk5fRFZTRU4gICAgICAgICgxPDwxMikKIAotI2VuZGlmIC8qIENPTkZJR19DUFVfUzNDMjQ0MCAqLworI2RlZmluZSBTM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjMgICgxPDw1KQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TM0MyNDQwIG9yIENPTkZJR19DUFVfUzNDMjQ0MiAqLwogCiAKICNlbmRpZiAvKiBfX0FTTV9BUk1fUkVHU19DTE9DSyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKaW5kZXggZDI1NzQwOC4uNWYxMDMzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtZ3Bpby5oCkBAIC00NTAsMTIgKzQ1MCwxNCBAQAogI2RlZmluZSBTM0MyNDEwX0dQRDBfT1VUUAkoMHgwMSA8PCAwKQogI2RlZmluZSBTM0MyNDEwX0dQRDBfVkQ4CSgweDAyIDw8IDApCiAjZGVmaW5lIFMzQzI0MDBfR1BEMF9WRlJBTUUJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDMjQ0Ml9HUEQwX25TUElDUzEJKDB4MDMgPDwgMCkKIAogI2RlZmluZSBTM0MyNDEwX0dQRDEgICAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0QsIDEpCiAjZGVmaW5lIFMzQzI0MTBfR1BEMV9JTlAJKDB4MDAgPDwgMikKICNkZWZpbmUgUzNDMjQxMF9HUEQxX09VVFAJKDB4MDEgPDwgMikKICNkZWZpbmUgUzNDMjQxMF9HUEQxX1ZEOQkoMHgwMiA8PCAyKQogI2RlZmluZSBTM0MyNDAwX0dQRDFfVk0JCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzI0NDJfR1BEMV9TUElDTEsxCSgweDAzIDw8IDIpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEQyICAgICAgICAgICAgUzNDMjQxMF9HUElPTk8oUzNDMjQxMF9HUElPX0JBTktELCAyKQogI2RlZmluZSBTM0MyNDEwX0dQRDJfSU5QCSgweDAwIDw8IDQpCkBAIC04NTgsNiArODYwLDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEcxMl9PVVRQICAgICgweDAxIDw8IDI0KQogI2RlZmluZSBTM0MyNDEwX0dQRzEyX0VJTlQyMCAgKDB4MDIgPDwgMjQpCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTJfWE1PTiAgICAoMHgwMyA8PCAyNCkKKyNkZWZpbmUgUzNDMjQ0Ml9HUEcxMl9uU1BJQ1MwICgweDAzIDw8IDI0KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BHMTMgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0csIDEzKQogI2RlZmluZSBTM0MyNDEwX0dQRzEzX0lOUCAgICAgKDB4MDAgPDwgMjYpCkBAIC05NDMsNiArOTQ2LDcgQEAKICNkZWZpbmUgUzNDMjQxMF9HUEg5X0lOUCAgICAgICgweDAwIDw8IDE4KQogI2RlZmluZSBTM0MyNDEwX0dQSDlfT1VUUCAgICAgKDB4MDEgPDwgMTgpCiAjZGVmaW5lIFMzQzI0MTBfR1BIOV9DTEtPVVQwICAoMHgwMiA8PCAxOCkKKyNkZWZpbmUgUzNDMjQ0Ml9HUEg5X25TUElDUzAgICgweDAzIDw8IDE4KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BIMTAgICAgICAgICBTM0MyNDEwX0dQSU9OTyhTM0MyNDEwX0dQSU9fQkFOS0gsIDEwKQogI2RlZmluZSBTM0MyNDEwX0dQSDEwX0lOUCAgICAgKDB4MDAgPDwgMjApCkBAIC0xMDUxLDYgKzEwNTUsNyBAQAogI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMxX0lETUFTSwkgICAoMHhmZmZmMDAwMCkKICNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMV8yNDEwCSAgICgweDMyNDEwMDAwKQogI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMxXzI0NDAJICAgKDB4MzI0NDAwMDApCisjZGVmaW5lIFMzQzI0MTBfR1NUQVRVUzFfMjQ0MgkgICAoMHgzMjQ0MGFhYSkKIAogI2RlZmluZSBTM0MyNDEwX0dTVEFUVVMyX1dUUkVTRVQgICAoMTw8MikKICNkZWZpbmUgUzNDMjQxMF9HU1RBVFVTMl9PRkZSRVNFVCAgKDE8PDEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCmluZGV4IGE2ZjZhMGUuLjhlMTUyYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdW5jb21wcmVzcy5oCkBAIC0yMiw3ICsyMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogZGVmaW5lcyBmb3IgVUFSVCByZWdpc3RlcnMgKi8KICNpbmNsdWRlICJhc20vYXJjaC9yZWdzLXNlcmlhbC5oIgpAQCAtODIsNyArODEsOCBAQAogCQl3aGlsZSAoMSkgewogCQkJbGV2ZWwgPSB1YXJ0X3JkKFMzQzI0MTBfVUZTVEFUKTsKIAotCQkJaWYgKGNwdWlkID09IFMzQzI0MTBfR1NUQVRVUzFfMjQ0MCkgeworCQkJaWYgKGNwdWlkID09IFMzQzI0MTBfR1NUQVRVUzFfMjQ0MCB8fAorCQkJICAgIGNwdWlkID09IFMzQzI0MTBfR1NUQVRVUzFfMjQ0MikgewogCQkJCWxldmVsICY9IFMzQzI0NDBfVUZTVEFUX1RYTUFTSzsKIAkJCQlsZXZlbCA+Pj0gUzNDMjQ0MF9VRlNUQVRfVFhTSElGVDsKIAkJCX0gZWxzZSB7CkBAIC0xMzAsNyArMTMwLDcgQEAKIHsKIAlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVERBVCk7CiAJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOwotCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg0MCksIFMzQzI0MTBfV1RDT04pOworCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg4MCksIFMzQzI0MTBfV1RDT04pOwogfQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2Fzc2FiZXQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9hc3NhYmV0LmgKaW5kZXggMWY1OWIzNi4uZDZhMWJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2Fzc2FiZXQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvYXNzYWJldC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0FSQ0hfQVNTQUJFVF9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfQVNTQUJFVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogU3lzdGVtIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgZmxhZ3MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jZXJmLmgKaW5kZXggMzU2ZDViYS4uOWExOWMzZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jZXJmLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NlcmYuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfSU5DTFVERV9DRVJGX0hfCiAjZGVmaW5lIF9JTkNMVURFX0NFUkZfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIENFUkZfRVRIX0lPCQkJMHhmMDAwMDAwMAogI2RlZmluZSBDRVJGX0VUSF9JUlEgSVJRX0dQSU8yNgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2NvbGxpZS5oCmluZGV4IGQ0OWU1ZmYuLjE0YTM0NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9jb2xsaWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvY29sbGllLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9DT0xMSUVfSAogI2RlZmluZSBfX0FTTV9BUkNIX0NPTExJRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBDT0xMSUVfU0NQX0NIQVJHRV9PTglTQ09PUF9HUENSX1BBMTEKICNkZWZpbmUgQ09MTElFX1NDUF9ESUFHX0JPT1QxCVNDT09QX0dQQ1JfUEExMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2RtYS5oCmluZGV4IDAyNTc1ZDcuLjZiNzkxN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvZG1hLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAogI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlICJoYXJkd2FyZS5oIgogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKaW5kZXggZWUwMDhhNS4uMWFiZDdjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2hhcmR3YXJlLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQVJDSF9IQVJEV0FSRV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgVU5DQUNIRUFCTEVfQUREUgkweGZhMDUwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pZGUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pZGUuaAppbmRleCAyMTUzNTM4Li45OGIxMGJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lkZS5oCkBAIC05LDcgKzksNiBAQAogICogICAgICAgICAgICAgIGFyY2hpdGVjdHVyZXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9pcnFzLmgKaW5kZXggZWFiZDNiZS4uZDc5NDA2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvaXJxcy5oCkBAIC03LDcgKzcsNiBAQAogICoKICAqIDIwMDEvMTEvMTQJUk1LCUNsZWFuZWQgdXAgYW5kIHN0YW5kYXJkaXNlZCBhIGxvdCBvZiB0aGUgSVJRcy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lCUlSUV9HUElPMAkJMAogI2RlZmluZQlJUlFfR1BJTzEJCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9tZW1vcnkuaAppbmRleCBhMjlmYWMxLi4xZmYxNzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL21lbW9yeS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtc2ExMTAwL3N5c3RlbS5oCmluZGV4IDBmMDYxMmYuLmFlZjkxZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXNhMTEwMC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zYTExMDAvc3lzdGVtLmgKQEAgLTMsNyArMyw2IEBACiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk5IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmggYi9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKaW5kZXggM2Q3MjgzZC4uNGIwY2UzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQVRPTUlDX0gKICNkZWZpbmUgX19BU01fQVJNX0FUT01JQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiB0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2J1Zy5oIGIvaW5jbHVkZS9hc20tYXJtL2J1Zy5oCmluZGV4IDVhYjgyMTYuLjdmYjAyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYnVnLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9BU01BUk1fQlVHX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogI2lmZGVmIENPTkZJR19ERUJVR19CVUdWRVJCT1NFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaAppbmRleCA3NDZiZTU2Li5mZTBjNzQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTUFSTV9DQUNIRUZMVVNIX0gKICNkZWZpbmUgX0FTTUFSTV9DQUNIRUZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NwdS5oIGIvaW5jbHVkZS9hc20tYXJtL2NwdS5oCmluZGV4IDc1MWJjNzQuLjcxNTQyNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9jcHUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY3B1LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fQVJNX0NQVV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9DUFVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CiAKIHN0cnVjdCBjcHVpbmZvX2FybSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCmluZGV4IDYzY2E3NDEuLjU1ZWI0ZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4gLyogbmVlZCBzdHJ1Y3QgcGFnZSAqLwogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0vZG1hLmgKaW5kZXggNDljMDFlMi4uOWYyYzUzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kbWEuaApAQCAtMyw3ICszLDYgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZG1hY2hfdDsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2VsZi5oIGIvaW5jbHVkZS9hc20tYXJtL2VsZi5oCmluZGV4IDJkNDRiNDIuLjcxMDYxY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNQVJNX0VMRl9ICiAjZGVmaW5lIF9fQVNNQVJNX0VMRl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oIGIvaW5jbHVkZS9hc20tYXJtL2Zwc3RhdGUuaAppbmRleCA1MmJhZTA4Li4xMzJjM2M1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vZnBzdGF0ZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9mcHN0YXRlLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19BU01fQVJNX0ZQU1RBVEVfSAogI2RlZmluZSBfX0FTTV9BUk1fRlBTVEFURV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2dsdWUuaCBiL2luY2x1ZGUvYXNtLWFybS9nbHVlLmgKaW5kZXggMjIzZTBkNi4uMGNjNWQzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2dsdWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vZ2x1ZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fU1REQ19fCiAjZGVmaW5lIF9fX19nbHVlKG5hbWUsZm4pCW5hbWUjI2ZuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmRpcnEuaAppbmRleCAxY2JiMTczLi4xODIzMTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9kZWMyMTI4NS5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2RlYzIxMjg1LmgKaW5kZXggNjY4NWUzZi4uNTQ2ZjcwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2RlYzIxMjg1LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2RlYzIxMjg1LmgKQEAgLTE4LDcgKzE4LDYgQEAKICNkZWZpbmUgREMyMTI4NV9QQ0lfSU8JCQkweDdjMDAwMDAwCiAjZGVmaW5lIERDMjEyODVfUENJX01FTQkJCTB4ODAwMDAwMDAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNkZWZpbmUgREMyMTI4NV9JTyh4KQkJKCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKEFSTUNTUl9CQVNFKyh4KSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9tZC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvbWQuaAppbmRleCA4MmZhMmMyLi4zOTZlNTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9tZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9pb21kLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX19BU01BUk1fSEFSRFdBUkVfSU9NRF9ICiAjZGVmaW5lIF9fQVNNQVJNX0hBUkRXQVJFX0lPTURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9sZWRzLmggYi9pbmNsdWRlL2FzbS1hcm0vbGVkcy5oCmluZGV4IDg4Y2U0MTIuLjEyMjkwZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9sZWRzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2xlZHMuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBBU01fQVJNX0xFRFNfSAogI2RlZmluZSBBU01fQVJNX0xFRFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgZW51bSB7CiAJbGVkX2lkbGVfc3RhcnQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfYXQ5MXJtOTIwMC5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX2F0OTFybTkyMDAuaAppbmRleCA5OGY0YjBjLi5hMDI2OWRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfYXQ5MXJtOTIwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9hdDkxcm05MjAwLmgKQEAgLTcsNyArNyw2IEBACiAgKgogICogIExvdyBsZXZlbCBtYWNoaW5lIGRlcGVuZGVudCBVQVJUIGZ1bmN0aW9ucy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3QgdWFydF9wb3J0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfc2ExMTAwLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9zZXJpYWxfc2ExMTAwLmgKaW5kZXggOTE2MjAxOC4uMjBjMjJiYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21hY2gvc2VyaWFsX3NhMTEwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3NlcmlhbF9zYTExMDAuaApAQCAtNyw3ICs3LDYgQEAKICAqCiAgKiBMb3cgbGV2ZWwgbWFjaGluZSBkZXBlbmRlbnQgVUFSVCBmdW5jdGlvbnMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IHVhcnRfcG9ydDsKIHN0cnVjdCB1YXJ0X2luZm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmgKaW5kZXggOTZjNmRiNy4uOWYyODA3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaApAQCAtNTAsNiArNTAsNyBAQAogI2RlZmluZSBEWU5fVElDS19FTkFCTEVECSgxIDw8IDEpCiAKIHN0cnVjdCBkeW5fdGlja190aW1lciB7CisJc3BpbmxvY2tfdAlsb2NrOwogCXVuc2lnbmVkIGludAlzdGF0ZTsJCQkvKiBDdXJyZW50IHN0YXRlICovCiAJaW50CQkoKmVuYWJsZSkodm9pZCk7CS8qIEVuYWJsZXMgZHluYW1pYyB0aWNrICovCiAJaW50CQkoKmRpc2FibGUpKHZvaWQpOwkvKiBEaXNhYmxlcyBkeW5hbWljIHRpY2sgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9tZW1vcnkuaAppbmRleCAyMDkyODk0Li43MzFlMzIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWVtb3J5LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL21lbW9yeS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjZGVmaW5lIFVMKHgpICh4KQogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL21lbW9yeS5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKaW5kZXggYTQwNGQyYi4uNjZjZmViNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01BUk1fUEFHRV9ICiAjZGVmaW5lIF9BU01BUk1fUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkJMTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wY2kuaCBiL2luY2x1ZGUvYXNtLWFybS9wY2kuaAppbmRleCBlYWQzY2VkLi5mMjFhYmQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3BjaS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBBU01BUk1fUENJX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+IC8qIGZvciBQQ0lCSU9TX01JTl8qICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaCBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCmluZGV4IDEwNjA0NWUuLmU5MzEwODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFdvcmsgb3V0IGlmIHdlIG5lZWQgbXVsdGlwbGUgQ1BVIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLWFybS9wdHJhY2UuaAppbmRleCA3N2FkYjdmLi4yYmViZTNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3B0cmFjZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9QVFJBQ0VfSAogI2RlZmluZSBfX0FTTV9BUk1fUFRSQUNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFBUUkFDRV9HRVRSRUdTCQkxMgogI2RlZmluZSBQVFJBQ0VfU0VUUkVHUwkJMTMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zbXAuaCBiL2luY2x1ZGUvYXNtLWFybS9zbXAuaAppbmRleCBmZTQ1ZjdmLi5mNjdhY2NlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NtcC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0FSTV9TTVBfSAogI2RlZmluZSBfX0FTTV9BUk1fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAppbmRleCA3Yzk1NjhkLi45Yzc0NGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgQ1BVX0FSQ0hfVU5LTk9XTgkwCiAjZGVmaW5lIENQVV9BUkNIX0FSTXYzCQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCmluZGV4IDcyODk5MjQuLmQ5N2ZjNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01BUk1fVExCRkxVU0hfSAogI2RlZmluZSBfQVNNQVJNX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIENPTkZJR19NTVUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCmluZGV4IGNiZjM5YTUuLjFlODkxZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKQEAgLTEzLDggKzEzLDYgQEAKICNpZm5kZWYgX19BU01fQVJNX1VOSVNURF9ICiAjZGVmaW5lIF9fQVNNX0FSTV9VTklTVERfSAogCi0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotCiAjZGVmaW5lIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UJMHg5MDAwMDAKIAogI2lmIGRlZmluZWQoX190aHVtYl9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKQEAgLTM3OCw2ICszNzYsOSBAQAogI3VuZGVmIF9fTlJfaXBjCiAjZW5kaWYKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKICNkZWZpbmUgX19zeXMyKHgpICN4CiAjZGVmaW5lIF9fc3lzMSh4KSBfX3N5czIoeCkKIApAQCAtNTI2LDcgKzUyNyw2IEBACiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCQkJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0dFVEhPU1ROQU1FCkBAIC01NDcsNyArNTQ3LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NPQ0tFVENBTEwKICNlbmRpZgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTU3MSw3ICs1NzAsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNTgxLDQgKzU4MCw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX0FSTV9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaAppbmRleCAxNTUyYzg2Li45N2U5NDRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9hdG9taWMuaApAQCAtMjAsNyArMjAsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fQVRPTUlDX0gKICNkZWZpbmUgX19BU01fQVJNX0FUT01JQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19TTVAKICNlcnJvciBTTVAgaXMgTk9UIHN1cHBvcnRlZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvYnVnLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9idWcuaAppbmRleCA3MTc3YzczLi44NTQ1ZDU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9idWcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTUFSTV9CVUdfSAogI2RlZmluZSBfQVNNQVJNX0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CVUcKICNpZmRlZiBDT05GSUdfREVCVUdfQlVHVkVSQk9TRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvZG1hLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaAppbmRleCA5OTVlMjIzLi40MzI2YmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9kbWEuaApAQCAtMyw3ICszLDYgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZG1hY2hfdDsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L2hhcmRpcnEuaAppbmRleCA4N2MxOWQyLi5lNzE3NzQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtMjYvaGFyZHdhcmUuaAppbmRleCA4MmZjNTVlLi44MDFkZjBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2hhcmR3YXJlLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpZm5kZWYgX19BU01fSEFSRFdBUkVfSAogI2RlZmluZSBfX0FTTV9IQVJEV0FSRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvaW8uaCBiL2luY2x1ZGUvYXNtLWFybTI2L2lvLmgKaW5kZXggMDJmOTRkOC4uMmFhMDMzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9pby5oCkBAIC0yMiw3ICsyMiw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9sZWRzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9sZWRzLmgKaW5kZXggODhjZTQxMi4uMTIyOTBlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvbGVkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L2xlZHMuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBBU01fQVJNX0xFRFNfSAogI2RlZmluZSBBU01fQVJNX0xFRFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgZW51bSB7CiAJbGVkX2lkbGVfc3RhcnQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9tYWNoLXR5cGVzLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9tYWNoLXR5cGVzLmgKaW5kZXggYjM0MDQ1Yi4uMGFlYWVkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvbWFjaC10eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L21hY2gtdHlwZXMuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX19BU01fQVJNX01BQ0hfVFlQRV9ICiAjZGVmaW5lIF9fQVNNX0FSTV9NQUNIX1RZUEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiBleHRlcm4gdW5zaWduZWQgaW50IF9fbWFjaGluZV9hcmNoX3R5cGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9wYWdlLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9wYWdlLmgKaW5kZXggZDNmMjNhYy4uZmExOWRlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTUFSTV9QQUdFX0gKICNkZWZpbmUgX0FTTUFSTV9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3BndGFibGUuaAppbmRleCBhNTkwMjUwLi4xOWFjOTEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvcGd0YWJsZS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybTI2L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmgKaW5kZXggNWZjNzQ3ZC4uZGQ4NmE3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtMjYvc2VyaWFsLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19BU01fU0VSSUFMX0gKICNkZWZpbmUgX19BU01fU0VSSUFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc21wLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zbXAuaAppbmRleCA1Y2E3NzE2Li4zODM0OWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zbXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yIFNNUCBub3Qgc3VwcG9ydGVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXNpcnEuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c2lycS5oCmluZGV4IGNhZDI1MGMuLjgxZGNhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3N5c2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3N5c2lycS5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKiAgIDA0LTA0LTE5OTggUEpCICAgICBNZXJnZWQgYXJjIGFuZCBhNWsgdmVyc2lvbnMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0E1SykKICNkZWZpbmUgSVJRX1BSSU5URVIgICAgICAgICAgICAgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaAppbmRleCA3MDI4ODQ5Li5kMWY2OWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi9zeXN0ZW0uaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGUgY29tcGlsZXIgZGlkIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSByZWdpc3RlciB3ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtMjYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaAppbmRleCBiZTRjMmZiLi43MGViNmQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBfX0FTTV9BUk1fVU5JU1REX0gKICNkZWZpbmUgX19BU01fQVJNX1VOSVNURF9ICiAKLSNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0KICNkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UJMHg5MDAwMDAKIAogLyoKQEAgLTMxMiw2ICszMTAsOSBAQAogI2RlZmluZSBfX0FSTV9OUl9jYWNoZWZsdXNoCQkoX19BUk1fTlJfQkFTRSsyKQogI2RlZmluZSBfX0FSTV9OUl91c3IyNgkJCShfX0FSTV9OUl9CQVNFKzMpCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCiAjZGVmaW5lIF9fc3lzMih4KSAjeAogI2RlZmluZSBfX3N5czEoeCkgX19zeXMyKHgpCiAKQEAgLTQ0Myw3ICs0NDQsNiBAQAogICBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQkJCVwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CkBAIC00NjIsNyArNDYyLDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC00ODYsNyArNDg1LDcgQEAKIAkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKIAkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTQ5Niw0ICs0OTUsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9BUk1fVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaW8uaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvaW8uaAppbmRleCBkZDM5MTk4Li4xMWVmNWI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9pby5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX0FSQ0hfQ1JJU19JT19ICiAKICNpbmNsdWRlIDxhc20vYXJjaC9zdmludG8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogRXRyYXggc2hhZG93IHJlZ2lzdGVycyAtIHdoaWNoIGxpdmUgaW4gYXJjaC9jcmlzL2tlcm5lbC9zaGFkb3dzLmMgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9wYWdlLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BhZ2UuaAppbmRleCA0MDdlNmU2Li43ZDgzMDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0NSSVNfQVJDSF9QQUdFX0gKICNkZWZpbmUgX0NSSVNfQVJDSF9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYxMC9zeXN0ZW0uaAppbmRleCAxYWM3YjYzLi40YTljZDM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjEwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MTAvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0NSSVNfQVJDSF9TWVNURU1fSAogI2RlZmluZSBfX0FTTV9DUklTX0FSQ0hfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiByZWFkIHRoZSBDUFUgdmVyc2lvbiByZWdpc3RlciAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lvLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lvLmgKaW5kZXggMDQzYzljZS4uNWVmZTRkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaW8uaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxhc20vYXJjaC9od3JlZ3MvcmVnX21hcC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9yZWdfcmR3ci5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2h3cmVncy9naW9fZGVmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBlbnVtIGNyaXN2MzJfaW9fZGlyCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lycS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pcnEuaAppbmRleCBkMzVhYTgxLi5lZWIwYTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fQVJDSF9JUlFfSAogI2RlZmluZSBfQVNNX0FSQ0hfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgImh3cmVncy9pbnRyX3ZlY3QuaCIKIAogLyogTnVtYmVyIG9mIG5vbi1jcHUgaW50ZXJydXB0cy4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvcGFnZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wYWdlLmgKaW5kZXggNzc4MjdiYy4uZmE0NTRmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fQ1JJU19BUkNIX1BBR0VfSAogI2RlZmluZSBfQVNNX0NSSVNfQVJDSF9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9wcm9jZXNzb3IuaAppbmRleCAzMmJmMmU1Li41NTUzYjBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvcHJvY2Vzc29yLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fQ1JJU19BUkNIX1BST0NFU1NPUl9ICiAjZGVmaW5lIF9BU01fQ1JJU19BUkNIX1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUmV0dXJuIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gcG9pbnRlci4gKi8KICNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9zeXN0ZW0uaAppbmRleCBhM2Q3NWQ1Li5kMjBlMmQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fQ1JJU19BUkNIX1NZU1RFTV9ICiAjZGVmaW5lIF9BU01fQ1JJU19BUkNIX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUmVhZCB0aGUgQ1BVIHZlcnNpb24gcmVnaXN0ZXIuICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmR2cih2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9lc2hsaWJsZC5oIGIvaW5jbHVkZS9hc20tY3Jpcy9lc2hsaWJsZC5oCmluZGV4IDJiNTc3Y2QuLjEwY2UzNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZXNobGlibGQuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2VzaGxpYmxkLmgKQEAgLTMyLDcgKzMyLDYgQEAKIC8qIFdlIGhhdmUgZGVwZW5kZW5jaWVzIGFsbCBvdmVyIHRoZSBwbGFjZSBmb3IgdGhlIGhvc3Qgc3lzdGVtCiAgICBmb3IgeHNpbSBiZWluZyBhIGxpbnV4IHN5c3RlbSwgc28gbGV0J3Mgbm90IHByZXRlbmQgYW55dGhpbmcKICAgIGVsc2Ugd2l0aCAjaWZkZWY6cyBoZXJlIHVudGlsIGZpeGVkLiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KIAogLyogTWF5YmUgZG8gc2FuaXR5IGNoZWNraW5nIGlmIGZpbGUgaW5wdXQuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4Z3Bpby5oIGIvaW5jbHVkZS9hc20tY3Jpcy9ldHJheGdwaW8uaAppbmRleCA4MGVlMTBmLi41ZDAwMjhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1jcmlzL2V0cmF4Z3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvZXRyYXhncGlvLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgX0FTTV9FVFJBWEdQSU9fSAogI2RlZmluZSBfQVNNX0VUUkFYR1BJT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIC8qIGV0cmF4Z3BpbyBfSU9DX1RZUEUsIGJpdHMgOCB0byAxNSBpbiBpb2N0bCBjbWQgKi8KICNpZmRlZiBDT05GSUdfRVRSQVhfQVJDSF9WMTAKICNkZWZpbmUgRVRSQVhHUElPX0lPQ1RZUEUgNDMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvZmFzdHRpbWVyLmggYi9pbmNsdWRlL2FzbS1jcmlzL2Zhc3R0aW1lci5oCmluZGV4IDY5NTIyMDIuLmEzYTc3MTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvZmFzdHRpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9mYXN0dGltZXIuaApAQCAtNSw3ICs1LDYgQEAKICAqIFRoaXMgbWF5IGJlIHVzZWZ1bCBpbiBvdGhlciBPUyB0aGFuIExpbnV4IHNvIHVzZSAyIHNwYWNlIGluZGVudGF0aW9uLi4uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDIgQXhpcyBDb21tdW5pY2F0aW9ucyBBQgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPiAvKiBzdHJ1Y3QgdGltZXZhbCAqLwogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGFnZS5oIGIvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmgKaW5kZXggMzc4NzYzMy4uODE4MzJlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9DUklTX1BBR0VfSAogI2RlZmluZSBfQ1JJU19QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3BhZ2UuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWNyaXMvcGNpLmggYi9pbmNsdWRlL2FzbS1jcmlzL3BjaS5oCmluZGV4IDIwNjRiYzEuLmIyYWM4YTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tY3Jpcy9wY2kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQ1JJU19QQ0lfSAogI2RlZmluZSBfX0FTTV9DUklTX1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KICNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogZm9yIHN0cnVjdCBwYWdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oCmluZGV4IDcwYTgzMjUuLjVkNzZjMWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcGd0YWJsZS5oCkBAIC05LDcgKzksNiBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcHJvY2Vzc29yLmgKaW5kZXggOTYxZTJiYy4uNTY4ZGExZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3Byb2Nlc3Nvci5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX0NSSVNfUFJPQ0VTU09SX0gKICNkZWZpbmUgX19BU01fQ1JJU19QUk9DRVNTT1JfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9ydGMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvcnRjLmgKaW5kZXggOTdjMTMwMy4uY2I0YmY5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3J0Yy5oCkBAIC00LDcgKzQsNiBAQAogI2RlZmluZSBfX1JUQ19IX18KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfRVRSQVhfRFMxMzAyCiAgICAvKiBEYWxsYXMgRFMxMzAyIGNsb2NrL2NhbGVuZGFyIHJlZ2lzdGVyIG51bWJlcnMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1jcmlzL3RsYmZsdXNoLmgKaW5kZXggYzUyMjM4MC4uMDU2OTYxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0NSSVNfVExCRkxVU0hfSAogI2RlZmluZSBfQ1JJU19UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWNyaXMvdW5pc3RkLmgKaW5kZXggYmIyZGZlNC4uYzI5NTRlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3VuaXN0ZC5oCkBAIC0yOTUsMTEgKzI5NSwxMSBAQAogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NwogI2RlZmluZSBfX05SX2tleWN0bAkJMjg4CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg5CiAKIAotCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtMzc5LDEyICszNzksMTAgQEAKICAqIGNvbXBsYWludHMuICBXZSBkb24ndCB3YW50IHRvIHVzZSAtZm5vLWJ1aWx0aW4sIHNvIGp1c3QgdXNlIGEKICAqIGRpZmZlcmVudCBuYW1lIHdoZW4gaW4gdGhlIGtlcm5lbC4KICAqLwotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX2V4aXQga2VybmVsX3N5c2NhbGxfZXhpdAotI2VuZGlmCiBzdGF0aWMgaW5saW5lIF9zeXNjYWxsMShpbnQsX2V4aXQsaW50LGV4aXRjb2RlKQogc3RhdGljIGlubGluZSBfc3lzY2FsbDMocGlkX3Qsd2FpdHBpZCxwaWRfdCxwaWQsaW50ICosd2FpdF9zdGF0LGludCxvcHRpb25zKQotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAKIC8qCkBAIC0zOTUsNCArMzkzLDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9DUklTX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oIGIvaW5jbHVkZS9hc20tZnJ2L2F0b21pYy5oCmluZGV4IDVkOWY4NGIuLjlhNGZmMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvYXRvbWljLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX0FTTV9BVE9NSUNfSAogI2RlZmluZSBfQVNNX0FUT01JQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zcHItcmVncy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKaW5kZXggNjM0NGQwNi4uOTgwYWUxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfQVNNX0JJVE9QU19ICiAjZGVmaW5lIF9BU01fQklUT1BTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9idWcuaCBiL2luY2x1ZGUvYXNtLWZydi9idWcuaAppbmRleCA0NTE3MTJjLi42YjFiNDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2J1Zy5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fQlVHX0gKICNkZWZpbmUgX0FTTV9CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1mcnYvY2FjaGUuaAppbmRleCBjZjY5YjYzLi4yNzk3MTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvY2FjaGUuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9DQUNIRV9ICiAjZGVmaW5lIF9fQVNNX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBieXRlcyBwZXIgTDEgY2FjaGUgbGluZSAqLwogI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJKENPTkZJR19GUlZfTDFfQ0FDSEVfU0hJRlQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZG1hLmggYi9pbmNsdWRlL2FzbS1mcnYvZG1hLmgKaW5kZXggZDhmOWEyZi4uMThkNmJiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9kbWEuaApAQCAtMTQsNyArMTQsNiBAQAogCiAvLyNkZWZpbmUgRE1BX0RFQlVHIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjdW5kZWYgTUFYX0RNQV9DSEFOTkVMUwkJLyogZG9uJ3QgdXNlIGtlcm5lbC9kbWEuYyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2VsZi5oIGIvaW5jbHVkZS9hc20tZnJ2L2VsZi5oCmluZGV4IDdkMjA5OGYuLjM4NjU2ZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvZWxmLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fRUxGX0gKICNkZWZpbmUgX19BU01fRUxGX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvZnB1LmggYi9pbmNsdWRlL2FzbS1mcnYvZnB1LmgKaW5kZXggYjExNzhmOC4uZDczYzYwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2ZwdS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9mcHUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fRlBVX0gKICNkZWZpbmUgX19BU01fRlBVX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tZnJ2L2hhcmRpcnEuaAppbmRleCA2ODUxMjM5Li43NTgxYjVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9oYXJkaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oIGIvaW5jbHVkZS9hc20tZnJ2L2hpZ2htZW0uaAppbmRleCAyOTVmNzRhLi5jZmJmN2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9oaWdobWVtLmgKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWVtLWxheW91dC5oPgogI2luY2x1ZGUgPGFzbS9zcHItcmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lkZS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lkZS5oCmluZGV4IGFlMDMxZWEuLmYwYmQyY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaWRlLmgKQEAgLTE0LDcgKzE0LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9pby5oIGIvaW5jbHVkZS9hc20tZnJ2L2lvLmgKaW5kZXggMDEyNDdjYi4uYjU2ZWJhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2lvLmgKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3ZpcnRjb252ZXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L2lycS5oIGIvaW5jbHVkZS9hc20tZnJ2L2lycS5oCmluZGV4IDJjMTZkOGQuLjU4YjYxOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvaXJxLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9JUlFfSF8KICNkZWZpbmUgX0FTTV9JUlFfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogdGhlIHN5c3RlbSBoYXMgYW4gb24tQ1BVIFBJQyBhbmQgYW5vdGhlciBQSUMgb24gdGhlIEZQR0EgYW5kIG90aGVyIFBJQ3Mgb24gb3RoZXIgcGVyaXBoZXJhbHMsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWZydi9tbXVfY29udGV4dC5oCmluZGV4IDRmYjllYTMuLjcyZWRjYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9tbXVfY29udGV4dC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fTU1VX0NPTlRFWFRfSAogI2RlZmluZSBfQVNNX01NVV9DT05URVhUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9wYWdlLmggYi9pbmNsdWRlL2FzbS1mcnYvcGFnZS5oCmluZGV4IGRjMGY3ZTAuLjEzNGNjMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3BhZ2UuaApAQCAtMyw3ICszLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgogI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGNpLmggYi9pbmNsdWRlL2FzbS1mcnYvcGNpLmgKaW5kZXggNTk4YjBjNi4uZjM1YTQ1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wY2kuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBBU01fUENJX0gKICNkZWZpbmUJQVNNX1BDSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tZnJ2L3BnYWxsb2MuaAppbmRleCAxYmQyOGY0Li5jZTk4MmE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ2FsbG9jLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX0FTTV9QR0FMTE9DX0gKICNkZWZpbmUgX0FTTV9QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAppbmRleCBkMWMzYjE4Li43YWY3NDg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKQEAgLTE2LDcgKzE2LDYgQEAKICNpZm5kZWYgX0FTTV9QR1RBQkxFX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tZW0tbGF5b3V0Lmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tZnJ2L3Byb2Nlc3Nvci5oCmluZGV4IDUyMjhjMTguLjFjNGRiYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcHJvY2Vzc29yLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9QUk9DRVNTT1JfSAogI2RlZmluZSBfQVNNX1BST0NFU1NPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWVtLWxheW91dC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NlZ21lbnQuaCBiL2luY2x1ZGUvYXNtLWZydi9zZWdtZW50LmgKaW5kZXggNjEyMjJmMC4uZTM2MTZhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NlZ21lbnQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc2VnbWVudC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fU0VHTUVOVF9ICiAjZGVmaW5lIF9BU01fU0VHTUVOVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tZnJ2L3NlcmlhbC5oCmluZGV4IDY5MTdkNTUuLmRiYjgyNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvc2VyaWFsLmgKQEAgLTYsNyArNiw2IEBACiAgKgogICogQmFzZWQgb24gbGludXgvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NlcmlhbC1yZWdzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc21wLmggYi9pbmNsdWRlL2FzbS1mcnYvc21wLmgKaW5kZXggNWNhNzcxNi4uMzgzNDllYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zbXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2Vycm9yIFNNUCBub3Qgc3VwcG9ydGVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1mcnYvc3lzdGVtLmgKaW5kZXggMTczNGVkOS4uMzUxODYzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi9zeXN0ZW0uaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1NZU1RFTV9ICiAjZGVmaW5lIF9BU01fU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiAvKiBnZXQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oCmluZGV4IGJjMzQ2MjYyLi5kYTNhMzE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdGxiZmx1c2guaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1RMQkZMVVNIX0gKICNkZWZpbmUgX0FTTV9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3R5cGVzLmggYi9pbmNsdWRlL2FzbS1mcnYvdHlwZXMuaAppbmRleCAyNTYwZjU5Li4xYjZkMTkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdHlwZXMuaApAQCAtNDYsNyArNDYsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHR5cGVkZWYgc2lnbmVkIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5hbGlnbmVkLmgKaW5kZXggYTBkMTk5Yi4uZGM4ZTljOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmFsaWduZWQuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfQVNNX1VOQUxJR05FRF9ICiAjZGVmaW5lIF9BU01fVU5BTElHTkVEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVW5hbGlnbmVkIGFjY2Vzc2VzIG9uIHVDbGludXggY2FuJ3QgYmUgcGVyZm9ybWVkIGluIGEgZmF1bHQgaGFuZGxlciAtIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCmluZGV4IDI2NjJhM2UuLjdjMmU3MTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKQEAgLTMxNyw2ICszMTcsOCBAQAogI2RlZmluZSBfX05SX3BzZWxlY3Q2CQkzMDgKICNkZWZpbmUgX19OUl9wcG9sbAkJMzA5CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMzEwCiAKIC8qCkBAIC00NzcsOSArNDc5LDggQEAKIAlyZXR1cm4gd2FpdHBpZCgtMSx3YWl0X3N0YXQsMCk7CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KIC8qICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIgKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTUwMyw3ICs1MDQsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotI2VuZGlmCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01MTUsNCArNTE1LDUgQEAKICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi92aXJ0Y29udmVydC5oIGIvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmgKaW5kZXggYTI5YTBhZS4uNTk3ODhmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3ZpcnRjb252ZXJ0LmgKQEAgLTE3LDcgKzE3LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiAjaWZkZWYgQ09ORklHX01NVQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKaW5kZXggMWE1NjVhOS4uMGNkOTcxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX0dFTkVSSUNfQlVHX0gKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAjaWZuZGVmIEhBVkVfQVJDSF9CVUcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaAppbmRleCAxYjM1NjIwLi5iNTQxZTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfRE1BX01BUFBJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZmNudGwuaAppbmRleCBiNjYzNTIwLi5jMTU0YjlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL2ZjbnRsLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfRkNOVExfSAogI2RlZmluZSBfQVNNX0dFTkVSSUNfRkNOVExfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogb3Blbi9mY250bCAtIE9fU1lOQyBpcyBvbmx5IGltcGxlbWVudGVkIG9uIGJsb2NrcyBkZXZpY2VzIGFuZCBvbiBmaWxlcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCmluZGV4IDkyOTFjMjQuLmFiNDY5MjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fR0VORVJJQ19MT0NBTF9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19MT0NBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvc2lnbmFsLmgKaW5kZXggOTQxOGQ2ZS4uZGFlMWQ4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3NpZ25hbC5oCkBAIC0xLDMgKzEsOCBAQAorI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NJR05BTF9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKICNpZm5kZWYgU0lHX0JMT0NLCiAjZGVmaW5lIFNJR19CTE9DSyAgICAgICAgICAwCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZW5kaWYKQEAgLTE5LDMgKzI0LDUgQEAKICNkZWZpbmUgU0lHX0lHTgkoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwogI2RlZmluZSBTSUdfRVJSCSgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCktMSkJLyogZXJyb3IgcmV0dXJuIGZyb20gc2lnbmFsICovCiAjZW5kaWYKKworI2VuZGlmIC8qIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3RsYi5oCmluZGV4IGNkZDQxNDUuLjg2N2Q5MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy90bGIuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfQVNNX0dFTkVSSUNfX1RMQl9ICiAjZGVmaW5lIF9BU01fR0VORVJJQ19fVExCX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaAppbmRleCA1NzRmNTdiNi4uZDc2Mjk5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmgKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgMjAwMiwgWW9zaGlub3JpIFNhdG8KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2RtYS5oIGIvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKaW5kZXggMzcwODY4MS4uM2VkYmFhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZG1hLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9ETUFfSAogI2RlZmluZSBfSDgzMDBfRE1BX0ggCiAgCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBTZXQgbnVtYmVyIG9mIGNoYW5uZWxzIG9mIERNQSBvbiBDb2xkRmlyZSBmb3IgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2VsZi5oIGIvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKaW5kZXggZjRhZjE1NS4uN2JhNmEwYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvZWxmLmgKQEAgLTUsNyArNSw2IEBACiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20taDgzMDAvaGFyZGlycS5oCmluZGV4IGU5NjFiZmUuLjE4ZmE3OTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9oYXJkaXJxLmgKQEAgLTIsNyArMiw2IEBACiAjZGVmaW5lIF9fSDgzMDBfSEFSRElSUV9ICiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9pby5oIGIvaW5jbHVkZS9hc20taDgzMDAvaW8uaAppbmRleCAxNzczZTM3Li45MWI3NDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL2lvLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdmlydGNvbnZlcnQuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0g4MzAwNykgfHwgZGVmaW5lZChDT05GSUdfSDgzMDY4KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmgKaW5kZXggYjA1ZDExMy4uZmJhZDY1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9rZXlib2FyZC5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfSDgzMDBfS0VZQk9BUkRfSAogI2RlZmluZSBfSDgzMDBfS0VZQk9BUkRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGR1bW15IGkuZS4gbm8gcmVhbCBrZXlib2FyZCAqLwogI2RlZmluZSBrYmRfc2V0a2V5Y29kZSh4Li4uKQkoLUVOT1NZUykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9tbXVfY29udGV4dC5oCmluZGV4IDIzYjU1NWIuLjg1NTcyMWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvbW11X2NvbnRleHQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19IODMwMF9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9fSDgzMDBfTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oIGIvaW5jbHVkZS9hc20taDgzMDAvcGFnZS5oCmluZGV4IDY0NzJjOWYuLmY5ZjlkM2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9QQUdFX0gKICNkZWZpbmUgX0g4MzAwX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmggYi9pbmNsdWRlL2FzbS1oODMwMC9wYWdlX29mZnNldC5oCmluZGV4IDhjYzZlMTcuLmY4NzA2NDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3BhZ2Vfb2Zmc2V0LmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcGFnZV9vZmZzZXQuaApAQCAtMSw0ICsxLDMgQEAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2RlZmluZSBQQUdFX09GRlNFVF9SQVcJCTB4MDAwMDAwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3BhcmFtLmgKaW5kZXggMTI2ZGRkZi4uYzI1ODA2ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9wYXJhbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSDgzMDBfUEFSQU1fSAogI2RlZmluZSBfSDgzMDBfUEFSQU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgSFoKICNkZWZpbmUgSFogMTAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wZ3RhYmxlLmgKaW5kZXggZjZlMjk2Zi4uOGI3YzY4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1oODMwMC9wcm9jZXNzb3IuaAppbmRleCBjNmYwYTcxMC4uYzdlMmY0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvcHJvY2Vzc29yLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqLwogI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IF9fbGFiZWxfXyBfbDsgX2w6ICYmX2w7fSkKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS1oZWxwZXIuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3NlbWFwaG9yZS1oZWxwZXIuaAppbmRleCAyOWUwZmJmLi40ZmVhMzZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9zZW1hcGhvcmUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2VtYXBob3JlLWhlbHBlci5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3NobS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKaW5kZXggYmVjNzU4NS4uZWQ2NjIzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc2htLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9IODMwMF9TSE1fSAogI2RlZmluZSBfSDgzMDBfU0hNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBmb3JtYXQgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBzaGFyZWQgbWVtb3J5IHBhZ2VzCiAgICBjdXJyZW50bHkgb3V0IGluIHN3YXAgc3BhY2UgKHNlZSBhbHNvIG1tL3N3YXAuYyk6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCmluZGV4IDhlODFjZjYuLjEzNGUwOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSDgzMDBfU1lTVEVNX0gKICNkZWZpbmUgX0g4MzAwX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaAppbmRleCA4YTkzOTYxLi5mZmI2N2Y0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC91bmFsaWduZWQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19IODMwMF9VTkFMSUdORURfSAogI2RlZmluZSBfX0g4MzAwX1VOQUxJR05FRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogVXNlIG1lbW1vdmUgaGVyZSwgc28gZ2NjIGRvZXMgbm90IGluc2VydCBhIF9fYnVpbHRpbl9tZW1jcHkuICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKaW5kZXggYWRiMDUxNS4uMjI2ZGQ1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdW5pc3RkLmgKQEAgLTI5Miw2ICsyOTIsOCBAQAogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4NwogI2RlZmluZSBfX05SX2tleWN0bAkJMjg4CiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMgMjg5CiAKIApAQCAtNDYwLDcgKzQ2Miw2IEBACiAgIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgX19yZXMpOwkJCVwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTQ4Myw3ICs0ODQsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTUzNCw3ICs1MzQsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNTQzLDQgKzU0Myw1IEBACiAgIGFzbSAoIi53ZWFrXHRfIiAjbmFtZSAiXG4iCQkJCVwKICAgICAgICAiLnNldFx0XyIgI25hbWUgIixfc3lzX25pX3N5c2NhbGwiKTsKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0g4MzAwX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3ZpcnRjb252ZXJ0LmgKaW5kZXggM2IzNDRjMS4uZWU3ZDVlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvdmlydGNvbnZlcnQuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC92aXJ0Y29udmVydC5oCkBAIC03LDcgKzcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L2FwaWMuaAppbmRleCAyODgyMzNmLi5jYzliOTQwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9hcGljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0FQSUNfSAogI2RlZmluZSBfX0FTTV9BUElDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9hdG9taWMuaAppbmRleCA0ZGRjZTUyLi40ZjA2MWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYXRvbWljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVJDSF9JMzg2X0FUT01JQ19fCiAjZGVmaW5lIF9fQVJDSF9JMzg2X0FUT01JQ19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWkzODYvYml0b3BzLmgKaW5kZXggMDhkZWFlZS4uMWM3ODBmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2JpdG9wcy5oCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oIGIvaW5jbHVkZS9hc20taTM4Ni9idWcuaAppbmRleCA4Zjc5ZGUxLi44MDYyY2RiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYnVnLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9JMzg2X0JVR19ICiAjZGVmaW5lIF9JMzg2X0JVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRlbGwgdGhlIHVzZXIgdGhlcmUgaXMgc29tZSBwcm9ibGVtLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9idWdzLmggYi9pbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaAppbmRleCA1MDIzM2UwLi4yYTllNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2J1Z3MuaApAQCAtMTcsNyArMTcsNiBAQAogICoJdm9pZCBjaGVja19idWdzKHZvaWQpOwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20taTM4Ni9ieXRlb3JkZXIuaAppbmRleCBhMGQ3M2Y0Li5hNDU0NzBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYnl0ZW9yZGVyLmgKQEAgLTgsNyArOCw2IEBACiAKIC8qIEZvciBhdm9pZGluZyBic3dhcCBvbiBpMzg2ICovCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2VuZGlmCiAKIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1pMzg2L2NhY2hlLmgKaW5kZXggY2ExNWM5Yy4uNTdjNjJmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvY2FjaGUuaApAQCAtNCw3ICs0LDYgQEAKICNpZm5kZWYgX19BUkNIX0kzODZfQ0FDSEVfSAogI2RlZmluZSBfX0FSQ0hfSTM4Nl9DQUNIRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogTDEgY2FjaGUgbGluZSBzaXplICovCiAjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCShDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9kbWEuaCBiL2luY2x1ZGUvYXNtLWkzODYvZG1hLmgKaW5kZXggZjI0YjJiYi4uZDIzYWFjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2RtYS5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX0RNQV9ICiAjZGVmaW5lIF9BU01fRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CS8qIEFuZCBzcGlubG9ja3MgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9maXhtYXAuaAppbmRleCBjZmIxYzYxLi5mN2UwNjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZml4bWFwLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0FTTV9GSVhNQVBfSAogI2RlZmluZSBfQVNNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogdXNlZCBieSB2bWFsbG9jLmMsIHZzeXNjYWxsLmxkcy5TLgogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20taTM4Ni9oYXJkaXJxLmgKaW5kZXggZWU3NTRkMy4uMGUzNThkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9oaWdobWVtLmggYi9pbmNsdWRlL2FzbS1pMzg2L2hpZ2htZW0uaAppbmRleCAwZmQzMzEzLi5lOWEzNGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2hpZ2htZW0uaApAQCAtMjAsNyArMjAsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCmluZGV4IDdmMWE4YTYuLmFmNWQ0MzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvaHBldC5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaCBiL2luY2x1ZGUvYXNtLWkzODYvaHdfaXJxLmgKaW5kZXggNjIyODE1Yi4uOTVkM2ZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2h3X2lycS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKgk8dG9tc29mdEBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaWRlLmggYi9pbmNsdWRlL2FzbS1pMzg2L2lkZS5oCmluZGV4IDQ1NDQ0MDEuLjczNDY1ZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pZGUuaApAQCAtMTMsNyArMTMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgTUFYX0hXSUZTCiAjIGlmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pby5oIGIvaW5jbHVkZS9hc20taTM4Ni9pby5oCmluZGV4IDc5NjcwYmIuLmIzNzI0ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSU9fSAogI2RlZmluZSBfQVNNX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvaW9fYXBpYy5oIGIvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmgKaW5kZXggZDkyZTI1My4uNTA5MmU4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9pb19hcGljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0lPX0FQSUNfSAogI2RlZmluZSBfX0FTTV9JT19BUElDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9pcnEuaCBiL2luY2x1ZGUvYXNtLWkzODYvaXJxLmgKaW5kZXggNTE2OWQ3YS4uMzMxNzI2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L2lycS5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKgk8dG9tc29mdEBpbmZvcm1hdGlrLnR1LWNoZW1uaXR6LmRlPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogLyogaW5jbHVkZSBjb21lcyBmcm9tIG1hY2hpbmUgc3BlY2lmaWMgZGlyZWN0b3J5ICovCiAjaW5jbHVkZSAiaXJxX3ZlY3RvcnMuaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9rbWFwX3R5cGVzLmgKaW5kZXggNjg4NmEwYy4uODA2YWFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9rbWFwX3R5cGVzLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fS01BUF9UWVBFU19ICiAjZGVmaW5lIF9BU01fS01BUF9UWVBFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmggYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oCmluZGV4IDNkNmQxMjkuLjlmZDA3MzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9BUElDX0gKICNkZWZpbmUgX19BU01fTUFDSF9BUElDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2RlZmluZSBlc3JfZGlzYWJsZSAoMSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLWkzODYvbW11X2NvbnRleHQuaAppbmRleCBiZjA4MjE4Li42MmI3YmYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbXVfY29udGV4dC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0kzODZfU0NIRURfSAogI2RlZmluZSBfX0kzODZfU0NIRURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbXRyci5oIGIvaW5jbHVkZS9hc20taTM4Ni9tdHJyLmgKaW5kZXggNjRjZjkzNy4uNWE0NmRlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tdHJyLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tdHJyLmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpZm5kZWYgX0xJTlVYX01UUlJfSAogI2RlZmluZSBfTElOVVhfTVRSUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGFnZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmgKaW5kZXggMzBmNTJhMi4uZTNhNTUyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wYWdlLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X1VTRV8zRE5PVwogCkBAIC0xMzcsOSArMTM2LDkgQEAKIAkoKGN1cnJlbnQtPnBlcnNvbmFsaXR5ICYgUkVBRF9JTVBMSUVTX0VYRUMpID8gVk1fRVhFQyA6IDAgKSB8IFwKIAkJIFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSB8IFZNX01BWUVYRUMpCiAKLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCi0KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiBfSTM4Nl9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvcGFyYW0uaAppbmRleCAwOTU1ODBmLi43NDVkYzViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wYXJhbS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNaTM4Nl9QQVJBTV9ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jIGluY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCiAjIGRlZmluZSBVU0VSX0haCTEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyIgKi8KICMgZGVmaW5lIENMT0NLU19QRVJfU0VDCQkoVVNFUl9IWikJLyogbGlrZSB0aW1lcygpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BjaS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wY2kuaAppbmRleCA3OGM4NTk4NWEuLjY0YjZkMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGNpLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wY2kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19pMzg2X1BDSV9ICiAjZGVmaW5lIF9faTM4Nl9QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIGZvciBzdHJ1Y3QgcGFnZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaAppbmRleCAwMzgwYzNkLi40YjFlNjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3BnYWxsb2MuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0kzODZfUEdBTExPQ19ICiAjZGVmaW5lIF9JMzg2X1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgkJLyogZm9yIHN0cnVjdCBwYWdlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCmluZGV4IDY3MmMzZjcuLjA5Njk3ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSTM4Nl9QR1RBQkxFX0gKICNkZWZpbmUgX0kzODZfUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoZSBMaW51eCBtZW1vcnkgbWFuYWdlbWVudCBhc3N1bWVzIGEgdGhyZWUtbGV2ZWwgcGFnZSB0YWJsZSBzZXR1cC4gT24KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1pMzg2L3Byb2Nlc3Nvci5oCmluZGV4IDgwNWYwZGMuLjRkZjM4MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wcm9jZXNzb3IuaApAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NlcmlhbC5oCmluZGV4IGUxZWNmY2MuLmJkNjc0ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zZXJpYWwuaApAQCAtMiw3ICsyLDYgQEAKICAqIGluY2x1ZGUvYXNtLWkzODYvc2VyaWFsLmgKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAppbmRleCA2MWQzYWI5Li4xNDJkMTBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKQEAgLTUsNyArNSw2IEBACiAgKiBXZSBuZWVkIHRoZSBBUElDIGRlZmluaXRpb25zIGF1dG9tYXRpY2FsbHkgYXMgcGFydCBvZiAnc21wLmgnCiAgKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaAppbmRleCBkNzZiNzY5Li4wNGJhMzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcndsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaCBiL2luY2x1ZGUvYXNtLWkzODYvc3RyaW5nLmgKaW5kZXggYmI1Zjg4YS4uYjkyNzczNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zdHJpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N0cmluZy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfSTM4Nl9TVFJJTkdfSF8KIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIC8qCiAgKiBPbiBhIDQ4NiBvciBQZW50aXVtLCB3ZSBhcmUgYmV0dGVyIG9mZiBub3QgdXNpbmcgdGhlCiAgKiBieXRlIHN0cmluZyBvcGVyYXRpb25zLiBCdXQgb24gYSAzODYgb3IgYSBQUHJvIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKaW5kZXggMTljYzc5Yy4uMDI0OWY5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TWVNURU1fSAogI2RlZmluZSBfX0FTTV9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5oCmluZGV4IDFmN2Q0OGMuLjg0MjBlZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKQEAgLTksNyArOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdGltZXguaCBiL2luY2x1ZGUvYXNtLWkzODYvdGltZXguaAppbmRleCAyOTJiNWE2Li5kNDM0OTg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90aW1leC5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfQVNNaTM4Nl9USU1FWF9ICiAjZGVmaW5lIF9BU01pMzg2X1RJTUVYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogI2lmZGVmIENPTkZJR19YODZfRUxBTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20taTM4Ni90bGJmbHVzaC5oCmluZGV4IGFiMjE2ZTEuLmQ1N2NhNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9JMzg2X1RMQkZMVVNIX0gKICNkZWZpbmUgX0kzODZfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLWkzODYvdHlwZXMuaAppbmRleCBlNTBhMDhiLi40YjRiMjk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni90eXBlcy5oCkBAIC0zNSw3ICszNSw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBzaWduZWQgY2hhciBzODsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgKaW5kZXggMzcxNDU3Yi4uMWVjNjU1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91YWNjZXNzLmgKQEAgLTQsNyArNCw2IEBACiAvKgogICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWZldGNoLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAppbmRleCBlYjRiMTUyLi5kZTJjY2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKQEAgLTMyMyw2ICszMjMsOCBAQAogI2RlZmluZSBfX05SX3RlZQkJMzE1CiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTMxNgogCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDMxNwogCiAvKgpAQCAtNDIyLDcgKzQyNCw2IEBACiBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCkBAIC00NDYsNyArNDQ3LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC00ODUsNyArNDg1LDcgQEAKIAkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKIAkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTQ5Nyw0ICs0OTcsNSBAQAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX0kzODZfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2FzbW1hY3JvLmggYi9pbmNsdWRlL2FzbS1pYTY0L2FzbW1hY3JvLmgKaW5kZXggZWRmMmNlYmIuLmMyMmI0NjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2FzbW1hY3JvLmgKQEAgLTYsNyArNiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIEVOVFJZKG5hbWUpCQkJCVwKIAkuYWxpZ24gMzI7CQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGUuaAppbmRleCBmMGExMDRkLi5lNzQ4MmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9jYWNoZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfQ0FDSEVfSAogI2RlZmluZSBfQVNNX0lBNjRfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBIZXdsZXR0LVBhY2thcmQgQ28KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZGVsYXkuaCBiL2luY2x1ZGUvYXNtLWlhNjQvZGVsYXkuaAppbmRleCBiYmE3MDIwLi5hMzBhNjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kZWxheS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgRG9uIER1Z2dlciA8ZG9uLmR1Z2dlckBpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWlhNjQvZG1hLW1hcHBpbmcuaAppbmRleCBkZjY3ZDQwLi45OWE4ZjhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kbWEtbWFwcGluZy5oCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSGV3bGV0dC1QYWNrYXJkIENvCiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogCiAjZGVmaW5lIGRtYV9hbGxvY19jb2hlcmVudAlwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLmggYi9pbmNsdWRlL2FzbS1pYTY0L2RtYS5oCmluZGV4IDNiZTFiNDkuLmRhZDNhNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9kbWEuaApAQCAtNiw3ICs2LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oIGIvaW5jbHVkZS9hc20taWE2NC9lbGYuaAppbmRleCA0NDZmY2UwLi4yNWY5ODM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZWxmLmgKQEAgLTgsNyArOCw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCmluZGV4IDMzZWY4ZjAuLjE0MGU0OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaGFyZGlycS5oCkBAIC02LDcgKzYsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaWEzMi5oIGIvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKaW5kZXggZjgwNDRhMS4uNWZmOGQ3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pYTMyLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9JQTMyX0gKICNkZWZpbmUgX0FTTV9JQTY0X0lBMzJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaWRlLmgKaW5kZXggOTNmNDVjNS4uZTkyODY3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2ludHJpbnNpY3MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oCmluZGV4IDgwODlmOTUuLjNhOTVhYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvaW50cmluc2ljcy5oCkBAIC05LDcgKzksNiBAQAogICovCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGluY2x1ZGUgY29tcGlsZXIgc3BlY2lmaWMgaW50cmluc2ljcyAqLwogI2luY2x1ZGUgPGFzbS9pYTY0cmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaAppbmRleCBiYzc3NzUyLi41ZDE2NThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2ttYXBfdHlwZXMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X0tNQVBfVFlQRVNfSAogI2RlZmluZSBfQVNNX0lBNjRfS01BUF9UWVBFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWFjaHZlYy5oIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKaW5kZXggYTljOTk1YS4uMGRmNzJhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tYWNodmVjLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfSAogI2RlZmluZSBfQVNNX0lBNjRfTUFDSFZFQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uczogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKaW5kZXggNDY1MDFiMC4uODk0YmM0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKQEAgLTcsNyArNyw2IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEVudHJpZXMgZGVmaW5lZCBzbyBmYXI6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmggYi9pbmNsdWRlL2FzbS1pYTY0L25vZGVkYXRhLmgKaW5kZXggOTk3OGM3Yy4uYTE0MDMxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9ub2RlZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbm9kZWRhdGEuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfTk9ERURBVEFfSAogI2RlZmluZSBfQVNNX0lBNjRfTk9ERURBVEFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbnVtYS5oPgogCiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9udW1hLmggYi9pbmNsdWRlL2FzbS1pYTY0L251bWEuaAppbmRleCBkYWU2YWViLi5lNWE4MjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L251bWEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L251bWEuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfTlVNQV9ICiAjZGVmaW5lIF9BU01fSUE2NF9OVU1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX05VTUEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYWdlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAppbmRleCAyMDg3ODI1Li5mNWE5NDllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhZ2UuaApAQCAtNyw3ICs3LDYgQEAKICAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20taWE2NC9wYXJhbS5oCmluZGV4IDVlMWUwZDIuLjQ5YzYyZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BhcmFtLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgTUFYSE9TVE5BTUVMRU4JNjQJLyogbWF4IGxlbmd0aCBvZiBob3N0bmFtZSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogbXVzdG4ndCBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gb3V0c2lkZSBvZiAjaWZkZWYgX19LRVJORUxfXyAqLwogIyBpZmRlZiBDT05GSUdfSUE2NF9IUF9TSU0KICAgLyoKICAgICogWWVhaCwgc2ltdWxhdGluZyBzdHVmZiBpcyBzbG93LCBzbyBsZXQgdXMgY2F0Y2ggc29tZSBicmVhdGggYmV0d2VlbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGVyY3B1LmgKaW5kZXggMmIxNGRlZS4uYWUzNTdkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BlcmNwdS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjIGRlZmluZSBUSElTX0NQVSh2YXIpCShwZXJfY3B1X18jI3ZhcikgIC8qIHVzZSB0aGlzIHRvIG1hcmsgYWNjZXNzZXMgdG8gcGVyLUNQVSB2YXJpYWJsZXMuLi4gKi8KICNlbHNlIC8qICFfX0FTU0VNQkxZX18gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCmluZGV4IGYyZjIzMzguLjljYjY4ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGdhbGxvYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIEdvdXRoYW0gUmFvIDxnb3V0aGFtLnJhb0BpbnRlbC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAppbmRleCBjMGY4MTQ0Li5lYWFjMDhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaApAQCAtMTIsNyArMTIsNiBAQAogICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRhdmlkbUBocGwuaHAuY29tPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCmluZGV4IGIzYmQ1OGUuLjI2NWY0ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaApAQCAtMTMsNyArMTMsNiBAQAogICogMDYvMTYvMDAJQS4gTWFsbGljawlhZGRlZCBjc2Qvc3NkL3Rzc2QgZm9yIGlhMzIgc3VwcG9ydAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CiAjaW5jbHVkZSA8YXNtL2tyZWdzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oIGIvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaAppbmRleCA5NDcxY2RjLi40MTVhYmIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKQEAgLTU0LDcgKzU0LDYgQEAKICAqIFRoaXMgaXMgYmVjYXVzZSBhci5lYyBpcyBzYXZlZCBhcyBwYXJ0IG9mIGFyLnBmcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZnB1Lmg+CiAjaWZuZGVmIEFTTV9PRkZTRVRTX0MKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCmluZGV4IGEzOTE0MzUuLjcxOWZmMzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfU01QX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc2ltdWxhdG9yLmgKaW5kZXggMTZhNDhiNS4uYzNmZDNlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi9zaW11bGF0b3IuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NpbXVsYXRvci5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX0lBNjRfU05fU0lNVUxBVE9SX0gKICNkZWZpbmUgX0FTTV9JQTY0X1NOX1NJTVVMQVRPUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBTTk1BR0lDIDB4YWVlZWVlZWU4YmFkYmVlZkwKICNkZWZpbmUgSVNfTUVEVVNBKCkJCQkoe2xvbmcgc247IGFzbSgibW92ICUwPWNwdWlkWyUxXSIgOiAiPXIiKHNuKSA6ICJyIigyKSk7IHNuID09IFNOTUFHSUM7fSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fY3B1aWQuaAppbmRleCA3NDlkZWIyLi5hNjc2ZGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX2NwdWlkLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9jcHVpZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fSUE2NF9TTl9TTl9DUFVJRF9ICiAjZGVmaW5lIF9BU01fSUE2NF9TTl9TTl9DUFVJRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vc24vYWRkcnMuaD4KICNpbmNsdWRlIDxhc20vc24vcGRhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaAppbmRleCA1MWFjYTAyLi44Yzg2NWU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2FsLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3NuX2NwdWlkLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oCmluZGV4IGFhM2I4YWMuLjg0MDZmMWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaApAQCAtMTUsNyArMTUsNiBAQAogI2RlZmluZSBfQVNNX0lBNjRfU05fWFBDX0gKIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3N0cmluZy5oIGIvaW5jbHVkZS9hc20taWE2NC9zdHJpbmcuaAppbmRleCA0MzUwMmQzLi44NWZkNjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc3RyaW5nLmgKQEAgLTksNyArOSw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiByZW1vdmUgdGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgQS1zdGVwIHdvcmthcm91bmQuLi4gKi8KIAogI2RlZmluZSBfX0hBVkVfQVJDSF9TVFJMRU4JMSAvKiBzZWUgYXJjaC9pYTY0L2xpYi9zdHJsZW4uUyAqLwogI2RlZmluZSBfX0hBVkVfQVJDSF9NRU1TRVQJMSAvKiBzZWUgYXJjaC9pYTY0L2xpYi9tZW1zZXQuUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKaW5kZXggMmYzNjIwNS4uNjVkYjQzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgQXNpdCBNYWxsaWNrIDxhc2l0LmsubWFsbGlja0BpbnRlbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgRG9uIER1Z2dlciA8ZG9uLmR1Z2dlckBpbnRlbC5jb20+CiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9rcmVncy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3RsYi5oIGIvaW5jbHVkZS9hc20taWE2NC90bGIuaAppbmRleCA4MzQzNzBiLi4yNmVkY2I3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvdGxiLmgKQEAgLTM3LDcgKzM3LDYgQEAKICAqCX0KICAqCXRsYl9maW5pc2hfbW11KHRsYiwgc3RhcnQsIGVuZCk7CS8vIGZpbmlzaCB1bm1hcCBmb3IgYWRkcmVzcyBzcGFjZSBNTQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCmluZGV4IGEzNWIzMjMuLmNmOWFjYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKQEAgLTYsNyArNiw2IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKaW5kZXggNzEwNzc2My4uNjMyZjJlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCkBAIC0yOTQsNyArMjk0LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIE5SX3N5c2NhbGxzCQkJMjc5IC8qIGxlbmd0aCBvZiBzeXNjYWxsIHRhYmxlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmggYi9pbmNsdWRlL2FzbS1tMzJyL2Fzc2VtYmxlci5oCmluZGV4IDFhMWFhMTcuLjQ3MDQxZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvYXNzZW1ibGVyLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9hc3NlbWJsZXIuaApAQCAtOSw3ICs5LDYgQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBNMzJSIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtYWNybyBkZWZpbml0aW9ucy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19TVFIKICNpZmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1tMzJyL2F0b21pYy5oCmluZGV4IDMxMjJmZTEuLmY1YTdkNzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9hdG9taWMuaApAQCAtOSw3ICs5LDYgQEAKICAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCmluZGV4IDkwMmEzNjYuLjY2YWI2NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaApAQCAtMTEsNyArMTEsNiBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9jYWNoZWZsdXNoLmggYi9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlZmx1c2guaAppbmRleCBlNTc0MjdiLi44YjI2MWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2NhY2hlZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9NMzJSX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfQVNNX00zMlJfQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiBleHRlcm4gdm9pZCBfZmx1c2hfY2FjaGVfYWxsKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1tMzJyL2hhcmRpcnEuaAppbmRleCA1ZGE4MzBlLi5jYjhhYTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2hhcmRpcnEuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX19BU01fSEFSRElSUV9ICiAjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oIGIvaW5jbHVkZS9hc20tbTMyci9pZGUuaAppbmRleCBmN2FhOTY5Li4yMTlhMGY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKQEAgLTE1LDcgKzE1LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIE1BWF9IV0lGUwogIyBpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvaXJxLmggYi9pbmNsdWRlL2FzbS1tMzJyL2lycS5oCmluZGV4IGNhOTQzOTUuLjJmOTNmNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9pcnEuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX0FTTV9NMzJSX0lSUV9ICiAjZGVmaW5lIF9BU01fTTMyUl9JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19QTEFUX00zMjcwMFVUX0FscGhhKSB8fCBkZWZpbmVkKENPTkZJR19QTEFUX1VTUlYpCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9rbWFwX3R5cGVzLmggYi9pbmNsdWRlL2FzbS1tMzJyL2ttYXBfdHlwZXMuaAppbmRleCA3NDI5NTkxLi4wNTI0ZDg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2ttYXBfdHlwZXMuaApAQCAtMyw3ICszLDYgQEAKIAogLyogRHVtbXkgaGVhZGVyIGp1c3QgdG8gZGVmaW5lIGttX3R5cGUuICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMjEwNHV0L20zMjEwNHV0X3BsZC5oCmluZGV4IGE0ZWFjMjAuLjZiYTRkZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyMTA0dXQvbTMyMTA0dXRfcGxkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tMzIxMDR1dC9tMzIxMDR1dF9wbGQuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfTTMyMTA0VVRfTTMyMTA0VVRfUExEX0gKICNkZWZpbmUgX00zMjEwNFVUX00zMjEwNFVUX1BMRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1BMQVRfTTMyMTA0VVQpCiAjZGVmaW5lIFBMRF9QTEFUX0JBU0UJCTB4MDJjMDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGFuLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xhbi5oCmluZGV4IDUwNTQ1ZWMuLmMwNTBiMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGFuLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sYW4uaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfTTMyNzAwVVRfTTMyNzAwVVRfTEFOX0gKICNkZWZpbmUgX00zMjcwMFVUX00zMjcwMFVUX0xBTl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xjZC5oIGIvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9sY2QuaAppbmRleCBlZGU2Yzc3Li40ZGE0ZTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X2xjZC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfbGNkLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX00zMjcwMFVUX00zMjcwMFVUX0xDRF9ICiAjZGVmaW5lIF9NMzI3MDBVVF9NMzI3MDBVVF9MQ0RfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbTMyNzAwdXQvbTMyNzAwdXRfcGxkLmgKaW5kZXggZjVlNDc5NC4uZjM1ZjkxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9tMzI3MDB1dC9tMzI3MDB1dF9wbGQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMjcwMHV0L20zMjcwMHV0X3BsZC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9NMzI3MDBVVF9NMzI3MDBVVF9QTERfSAogI2RlZmluZSBfTTMyNzAwVVRfTTMyNzAwVVRfUExEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUExBVF9NMzI3MDBVVF9BbHBoYSkKICNkZWZpbmUgUExEX1BMQVRfQkFTRQkJMHgwOGMwMDAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9tMzJyLmggYi9pbmNsdWRlL2FzbS1tMzJyL20zMnIuaAppbmRleCBiMTMzY2E2Li5kZWNmYzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL20zMnIuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL20zMnIuaApAQCAtNyw3ICs3LDYgQEAKICAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCAgUmVuZXNhcyBUZWNobm9sb2d5IENvcnAuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBDaGlwIHR5cGUgKi8KICNpZiBkZWZpbmVkKENPTkZJR19DSElQX1hOVVhfTVApIHx8IGRlZmluZWQoQ09ORklHX0NISVBfWE5VWDJfTVApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL21tdS5oIGIvaW5jbHVkZS9hc20tbTMyci9tbXUuaAppbmRleCA5YzAwZWI3Li5jZjNmNmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvbW11LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTTMyUl9NTVVfSAogI2RlZmluZSBfQVNNX00zMlJfTU1VX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgIWRlZmluZWQoQ09ORklHX01NVSkKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvbW11X2NvbnRleHQuaAppbmRleCAzNjM0YzUzLi41NDIzMDJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9tbXVfY29udGV4dC5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vbTMyci5oPgogCkBAIC0xNSw3ICsxNCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGFuLmggYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGFuLmgKaW5kZXggN2EyYTgzOS4uNjE5NDgyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xhbi5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sYW4uaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfT1BTUFVUX09QU1BVVF9MQU5fSAogI2RlZmluZSBfT1BTUFVUX09QU1BVVF9MQU5fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xjZC5oIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X2xjZC5oCmluZGV4IDNhODgzZTMuLjQ0Y2ZkN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9sY2QuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfbGNkLmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgX09QU1BVVF9PUFNQVVRfTENEX0gKICNkZWZpbmUgX09QU1BVVF9PUFNQVVRfTENEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9wbGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvb3BzcHV0L29wc3B1dF9wbGQuaAppbmRleCAyMDE4ZTY5Li40NjI5NmZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL29wc3B1dC9vcHNwdXRfcGxkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9vcHNwdXQvb3BzcHV0X3BsZC5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9PUFNQVVRfT1BTUFVUX1BMRF9ICiAjZGVmaW5lIF9PUFNQVVRfT1BTUFVUX1BMRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBQTERfUExBVF9CQVNFCQkweDFjYzAwMDAwCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGFnZS5oIGIvaW5jbHVkZS9hc20tbTMyci9wYWdlLmgKaW5kZXggOWRkYmMwOC4uOTY4OGJlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTTMyUl9QQUdFX0gKICNkZWZpbmUgX0FTTV9NMzJSX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbTMyci9wZ2FsbG9jLmgKaW5kZXggNmRhMzA5Yi4uZTA5YTg2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wZ2FsbG9jLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qICRJZCQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaAppbmRleCA4NjE3MjdjMi4uYmUwZjE2N2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIHRyYWRpdGlvbmFsIE0zMlIgdHdvLWxldmVsIHBhZ2luZyBzdHJ1Y3R1cmU6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oCmluZGV4IDc1NzQwZGUuLjE5ODNiN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS5oCkBAIC0yMCw3ICsyMCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1tMzJyL3Byb2Nlc3Nvci5oCmluZGV4IDA5ZmQxODEuLjMyNzU1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wcm9jZXNzb3IuaApAQCAtMTQsNyArMTQsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+ICAvKiBwdF9yZWdzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1tMzJyL3B0cmFjZS5oCmluZGV4IDUzYzc5MjQuLmEwN2ZhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9wdHJhY2UuaApAQCAtMTIsNyArMTIsNiBAQAogICogICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiwgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CQkvKiBNMzJSX1BTV19CU00sIE0zMlJfUFNXX0JQTSAqLwogCiAvKiAwIC0gMTMgYXJlIGludGVnZXIgcmVnaXN0ZXJzIChnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzKS4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3J0Yy5oIGIvaW5jbHVkZS9hc20tbTMyci9ydGMuaAppbmRleCBlYzNjZGY2Li42YjJiODM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3J0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcnRjLmgKQEAgLTQsNyArNCw2IEBACiAjZGVmaW5lIF9fUlRDX0hfXwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogICAgLyogRGFsbGFzIERTMTMwMiBjbG9jay9jYWxlbmRhciByZWdpc3RlciBudW1iZXJzLiAqLwogIyAgZGVmaW5lIFJUQ19TRUNPTkRTICAgICAgMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvc2VtYXBob3JlLmgKaW5kZXggODE3NTBlZC4uNDFlNDVkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NlbWFwaG9yZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tbTMyci9zZXJpYWwuaAppbmRleCAxYmY0ODBmLi41YWMyNDRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc2VyaWFsLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qIGluY2x1ZGUvYXNtLW0zMnIvc2VyaWFsLmggKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIEJBU0VfQkFVRAkxMTUyMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9zaWdjb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAppbmRleCA5NDJiOGEzLi43MzAyNWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3NpZ2NvbnRleHQuaApAQCAtMyw3ICszLDYgQEAKIAogLyogJElkJCAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBzaWdjb250ZXh0IHsKIAkvKiBDUFUgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oIGIvaW5jbHVkZS9hc20tbTMyci9zbXAuaAppbmRleCAxMTg0MjkzLi42NTBkMjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc21wLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qICRJZCQgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NNUAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAppbmRleCA3ZGU3ZGVmLi5mOTRjMWE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCkBAIC05LDcgKzksNiBAQAogICogICAgQ29weXJpZ2h0IChDKSAyMDA0ICBIaXJva2F6dSBUYWthdGEgPHRha2F0YSBhdCBsaW51eC1tMzJyLm9yZz4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19ERUJVR19TUElOTE9DSywgQ09ORklHX1NNUCAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaAppbmRleCBlNTUwMTNmLi4zMzU2N2U4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCkBAIC0xMCw3ICsxMCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDYgIEhpcm9rYXp1IFRha2F0YSA8dGFrYXRhIGF0IGxpbnV4LW0zMnIub3JnPgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmgKaW5kZXggYWJmMTJlNy4uZTg5YmZkMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdGltZXguaApAQCAtOSw3ICs5LDYgQEAKICAqIG0zMnIgYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkoQ09ORklHX0JVU19DTE9DSyAvIENPTkZJR19USU1FUl9ESVZJREUpCiAjZGVmaW5lIENMT0NLX1RJQ0tfRkFDVE9SCTIwCS8qIEZhY3RvciBvZiBib3RoIDEwMDAwMDAgYW5kIENMT0NLX1RJQ0tfUkFURSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tbTMyci90bGJmbHVzaC5oCmluZGV4IGJjN2M0MDcuLmFlNDQ5NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTTMyUl9UTEJGTFVTSF9ICiAjZGVmaW5lIF9BU01fTTMyUl9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbTMyci5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaAppbmRleCA4MTljYzI4Li4yNmU5NzhjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3VhY2Nlc3MuaApAQCAtMTEsNyArMTEsNiBAQAogLyoKICAqIFVzZXIgc3BhY2UgbWVtb3J5IGFjY2VzcyBmdW5jdGlvbnMKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKaW5kZXggYmUwZWIwMTQuLmNjMzE3OTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaApAQCAtMjk1LDYgKzI5NSw4IEBACiAjZGVmaW5lIF9fTlJfa2V4ZWNfbG9hZAkJMjgzCiAjZGVmaW5lIF9fTlJfd2FpdGlkCQkyODQKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscyAyODUKIAogLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjQ6IHNlZQpAQCAtNDA1LDcgKzQwNyw2IEBACiBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOyBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTQyMSw3ICs0MjIsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX0dFVFJMSU1JVCAvKndpbGwgYmUgdW51c2VkKi8KICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNDcwLDQgKzQ3MCw1IEBACiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKICNlbmRpZgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fTTMyUl9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLW02OGsvYXRvbWljLmgKaW5kZXggNzMyZDY5Ni4uZDVlZWQ2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2F0b21pYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FSQ0hfTTY4S19BVE9NSUNfXwogI2RlZmluZSBfX0FSQ0hfTTY4S19BVE9NSUNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CS8qIGxvY2FsX2lycV9YWFgoKSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oIGIvaW5jbHVkZS9hc20tbTY4ay9idWcuaAppbmRleCAwNzJjZTI3Li43YjYwNzc2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19CVUdfSAogI2RlZmluZSBfTTY4S19CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAjaWZkZWYgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLW1hcHBpbmcuaAppbmRleCBiMTkyMGM3Li5kZmZkNTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9NNjhLX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BDSQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RtYS1tYXBwaW5nLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oIGIvaW5jbHVkZS9hc20tbTY4ay9kbWEuaAppbmRleCBkNTI2NmE4Li5kMGM5ZTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZG1hLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLX0RNQV9ICiAjZGVmaW5lIF9NNjhLX0RNQV9IIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBpdCdzIHVzZWxlc3Mgb24gdGhlIG02OGssIGJ1dCB1bmZvcnR1bmF0ZWx5IG5lZWRlZCBieSB0aGUgbmV3CiAgICBib290bWVtIGFsbG9jYXRvciAoYnV0IHRoaXMgc2hvdWxkIGRvIGl0IGZvciB0aGlzKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9kdm1hLmggYi9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaAppbmRleCA1OTc4Zjg3Li5lMTExMmRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2R2bWEuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19NNjhLX0RWTUFfSAogI2RlZmluZSBfX002OEtfRFZNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBEVk1BX1BBR0VfU0hJRlQJMTMKICNkZWZpbmUgRFZNQV9QQUdFX1NJWkUJKDFVTCA8PCBEVk1BX1BBR0VfU0hJRlQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oIGIvaW5jbHVkZS9hc20tbTY4ay9lbGYuaAppbmRleCAzOGJmODM0Li5lYjYzYjg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZWxmLmgKQEAgLTUsNyArNSw2IEBACiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oIGIvaW5jbHVkZS9hc20tbTY4ay9lbnRyeS5oCmluZGV4IDAzOTY0OTUuLmY4ZjZiMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvZW50cnkuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2VudHJ5LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTTY4S19FTlRSWV9ICiAjZGVmaW5lIF9fTTY4S19FTlRSWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2ZwdS5oIGIvaW5jbHVkZS9hc20tbTY4ay9mcHUuaAppbmRleCAzYmNmODUwLi41OTcwMWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2ZwdS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvZnB1LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTTY4S19GUFVfSAogI2RlZmluZSBfX002OEtfRlBVX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogTUFYIGZsb2F0aW5nIHBvaW50IHVuaXQgc3RhdGUgc2l6ZSAoRlNBVkUvRlJFU1RPUkUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLW02OGsvaGFyZGlycS5oCmluZGV4IDVlMWM1ODI2Li4zOTRlZTk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NNjhLX0hBUkRJUlFfSAogI2RlZmluZSBfX002OEtfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKaW5kZXggMzYxMThmZC4uMzY1Zjc2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCkBAIC0zMSw3ICszMSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pby5oIGIvaW5jbHVkZS9hc20tbTY4ay9pby5oCmluZGV4IGRjZmFhMzUuLjVlMGZjZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lvLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3Jhd19pby5oPgogI2luY2x1ZGUgPGFzbS92aXJ0Y29udmVydC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pcnEuaCBiL2luY2x1ZGUvYXNtLW02OGsvaXJxLmgKaW5kZXggOWFjMDQ3Yy4uYjRmNDhiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S19JUlFfSF8KICNkZWZpbmUgX002OEtfSVJRX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW02OGsvbWMxNDY4MThydGMuaAppbmRleCAxMTQ0MjA5Li4xMWZlMTJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL21jMTQ2ODE4cnRjLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9tYzE0NjgxOHJ0Yy5oCkBAIC00LDcgKzQsNiBAQAogI2lmbmRlZiBfQVNNX01DMTQ2ODE4UlRDX0gKICNkZWZpbmUgX0FTTV9NQzE0NjgxOFJUQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19BVEFSSQogLyogUlRDIGluIEF0YXJpIG1hY2hpbmVzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1tNjhrL21tdV9jb250ZXh0LmgKaW5kZXggNjYxMTkxZC4uMjMxZDExYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvbW11X2NvbnRleHQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NNjhLX01NVV9DT05URVhUX0gKICNkZWZpbmUgX19NNjhLX01NVV9DT05URVhUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdGF0aWMgaW5saW5lIHZvaWQgZW50ZXJfbGF6eV90bGIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9tb3Rvcm9sYV9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaAppbmRleCAxNjI4NzIzLi4xY2NjNzMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL21vdG9yb2xhX3BndGFibGUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX01PVE9ST0xBX1BHVEFCTEVfSAogI2RlZmluZSBfTU9UT1JPTEFfUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIERlZmluaXRpb25zIGZvciBNTVUgZGVzY3JpcHRvcnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvb3BlbnByb20uaCBiL2luY2x1ZGUvYXNtLW02OGsvb3BlbnByb20uaAppbmRleCBlZmJmYjBiLi44NjlhYjkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL29wZW5wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9vcGVucHJvbS5oCkBAIC04LDcgKzgsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIEVtcGlyaWNhbCBjb25zdGFudHMuLi4gKi8KICNpZmRlZiBDT05GSUdfU1VOMwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaAppbmRleCBmMjA2ZGZiLi5kYjAxN2Y4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfUEFHRV9ICiAjZGVmaW5lIF9NNjhLX1BBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjaWZuZGVmIENPTkZJR19TVU4zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3BhZ2Vfb2Zmc2V0LmggYi9pbmNsdWRlL2FzbS1tNjhrL3BhZ2Vfb2Zmc2V0LmgKaW5kZXggODZkM2MyOC4uMWNiZGI3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9wYWdlX29mZnNldC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvcGFnZV9vZmZzZXQuaApAQCAtMSw0ICsxLDMgQEAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogVGhpcyBoYW5kbGVzIHRoZSBtZW1vcnkgbWFwLi4gKi8KICNpZm5kZWYgQ09ORklHX1NVTjMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmgKaW5kZXggYjQ2OGI3OS4uYTljZmI0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wZ2FsbG9jLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIE02OEtfUEdBTExPQ19ICiAjZGVmaW5lIE02OEtfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKaW5kZXggYWRkMTI5ZS4uZjNhYTA1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wZ3RhYmxlLmgKQEAgLTMsNyArMyw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLW02OGsvcHJvY2Vzc29yLmgKaW5kZXggNzk4MjI4NS4uMzUyNzk5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3Byb2Nlc3Nvci5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KICNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2ZwdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlbWFwaG9yZS1oZWxwZXIuaAppbmRleCAxNTE2YTY0Mi4uZWVmMzBiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zZW1hcGhvcmUtaGVscGVyLmgKQEAgLTksNyArOSw2IEBACiAgKiBtNjhrIHZlcnNpb24gYnkgQW5kcmVhcyBTY2h3YWIKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NlcmlhbC5oCmluZGV4IDNmZTI5ZjguLjJiOTBkNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zZXJpYWwuaApAQCAtNiw3ICs2LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgMS44NDMyIE1IeiBjbG9jayBmb3IgeW91ciBVQVJULgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oIGIvaW5jbHVkZS9hc20tbTY4ay9zZXR1cC5oCmluZGV4IGE4OWFhODQuLjdmYWNjOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL3NldHVwLmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpZm5kZWYgX002OEtfU0VUVVBfSAogI2RlZmluZSBfTTY4S19TRVRVUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvc2htLmggYi9pbmNsdWRlL2FzbS1tNjhrL3NobS5oCmluZGV4IDNmYTJmMzYuLmZhNTZlYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvc2htLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9zaG0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfU0hNX0gKICNkZWZpbmUgX002OEtfU0hNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBmb3JtYXQgb2YgcGFnZSB0YWJsZSBlbnRyaWVzIHRoYXQgY29ycmVzcG9uZCB0byBzaGFyZWQgbWVtb3J5IHBhZ2VzCiAgICBjdXJyZW50bHkgb3V0IGluIHN3YXAgc3BhY2UgKHNlZSBhbHNvIG1tL3N3YXAuYyk6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTY4ay9zeXN0ZW0uaAppbmRleCA2NGQzNDgxLi5kNmRkODA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLX1NZU1RFTV9ICiAjZGVmaW5lIF9NNjhLX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmgKaW5kZXggOGU2MWNjZi4uMzE2Nzg4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfVExCRkxVU0hfSAogI2RlZmluZSBfTTY4S19UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBDT05GSUdfU1VOMwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaAppbmRleCBjMjU1NGJjLi5mMjM2ZmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmgKQEAgLTI4NSw2ICsyODUsOCBAQAogI2RlZmluZSBfX05SX3JlcXVlc3Rfa2V5CTI4MAogI2RlZmluZSBfX05SX2tleWN0bAkJMjgxCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNkZWZpbmUgTlJfc3lzY2FsbHMJCTI4MgogCiAvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyNDogc2VlCkBAIC0zODMsNyArMzg1LDYgQEAKIF9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7IFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTQwNiw3ICs0MDcsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNDYxLDQgKzQ2MSw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fTTY4S19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaCBiL2luY2x1ZGUvYXNtLW02OGsvdmlydGNvbnZlcnQuaAppbmRleCA4YzRlODAzLi44M2E4N2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL3ZpcnRjb252ZXJ0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay92aXJ0Y29udmVydC5oCkBAIC03LDcgKzcsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2JpdG9wcy5oCmluZGV4IDBiNjhjY2QuLmQ3ZmE3ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYml0b3BzLmgKQEAgLTUsNyArNSw2IEBACiAgKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgkvKiBzd2FiMzIgKi8KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBzYXZlX2ZsYWdzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvY29sZGZpcmUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb2xkZmlyZS5oCmluZGV4IDYxOTBmNzcuLjJmYWJjYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb2xkZmlyZS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb2xkZmlyZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCWNvbGRmaXJlX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglEZWZpbmUgdGhlIHByb2Nlc3NvciBzdXBwb3J0IHBlcmlwaGVyYWxzIGJhc2UgYWRkcmVzcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9jb21tcHJvYy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbW1wcm9jLmgKaW5kZXggZTUyMmNhOC4uMDE2MWViYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbW1wcm9jLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2NvbW1wcm9jLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX19DUE1fMzYwX18KICNkZWZpbmUgX19DUE1fMzYwX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBDUE0gQ29tbWFuZCByZWdpc3RlciBtYXNrczogKi8KICNkZWZpbmUgQ1BNX0NSX1JTVAkoKHVzaG9ydCkweDgwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEtbWFwcGluZy5oCmluZGV4IGE2YzQyYmEuLjU2MjJiODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S05PTU1VX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX002OEtOT01NVV9ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2RtYS5oCmluZGV4IDQzZTk4YzkuLjMzMzgwMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZG1hLmgKQEAgLTMsNyArMyw2IEBACiAgCiAvLyNkZWZpbmUJRE1BX0RFQlVHCTEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0NPTERGSVJFCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsZi5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsZi5oCmluZGV4IDk5MTk0ODcuLjQwYjFlZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxmLmgKQEAgLTUsNyArNSw2IEBACiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsaWEuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbGlhLmgKaW5kZXggZjE4YjhlOS4uZTAzN2Q0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2VsaWEuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZWxpYS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCWVsaWFfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY29sZGZpcmUuaD4KIAogI2lmZGVmIENPTkZJR19lTElBCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZW50cnkuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbnRyeS5oCmluZGV4IDA2ZjVhYTcuLmMyNTUzZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbnRyeS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9lbnRyeS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX002OEtOT01NVV9FTlRSWV9ICiAjZGVmaW5lIF9fTTY4S05PTU1VX0VOVFJZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9mcHUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9mcHUuaAppbmRleCAyMjUwODI5Li5iMTZiMmU0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2ZwdS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX002OEtOT01NVV9GUFVfSAogI2RlZmluZSBfX002OEtOT01NVV9GUFVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBNQVggZmxvYXRpbmcgcG9pbnQgdW5pdCBzdGF0ZSBzaXplIChGU0FWRS9GUkVTVE9SRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaGFyZGlycS5oCmluZGV4IDQ3NjE4MGYuLjk4MDA3NWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NNjhLX0hBUkRJUlFfSAogI2RlZmluZSBfX002OEtfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaW8uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pby5oCmluZGV4IGUwOGYyZWUuLjhkZjRjZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9pby5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pby5oCkBAIC0zLDcgKzMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGVzZSBhcmUgZm9yIElTQS9QQ0kgc2hhcmVkIG1lbW9yeSBfb25seV8gYW5kIHNob3VsZCBuZXZlciBiZSB1c2VkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXJxLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvaXJxLmgKaW5kZXggMjBjNDhlYy4uMmI0MDg4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9pcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtfSVJRX0hfCiAjZGVmaW5lIF9NNjhLX0lSUV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAjaWZkZWYgQ09ORklHX0NPTERGSVJFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyMDZzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIwNnNpbS5oCmluZGV4IGQxZTc1MDkuLjdlMzU5NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIwNnNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIwNnNpbS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCW01MjA2c2ltX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglEZWZpbmUgdGhlIDUyMDYgU0lNIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyMHhzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIweHNpbS5oCmluZGV4IDZkYzYyODYuLjFkYWMyMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIweHNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTIweHNpbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lIG01MjB4c2ltX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiAgRGVmaW5lIHRoZSA1MjgyIFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201MjN4c2ltLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyM3hzaW0uaAppbmRleCA5MjZjZmI4Li5iZjM5NzMxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyM3hzaW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyM3hzaW0uaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZQltNTIzeHNpbV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJRGVmaW5lIHRoZSA1MjN4IFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201Mjcyc2ltLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNzJzaW0uaAppbmRleCBiNDA4NzUzLi42MjE3ZWRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNzJzaW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyNzJzaW0uaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZQltNTI3MnNpbV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJRGVmaW5lIHRoZSA1MjcyIFNJTSByZWdpc3RlciBzZXQgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L201Mjd4c2ltLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyN3hzaW0uaAppbmRleCBlNzg3OGQwLi4xZjYzYWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyN3hzaW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyN3hzaW0uaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZQltNTI3eHNpbV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJRGVmaW5lIHRoZSA1MjcwLzUyNzEgU0lNIHJlZ2lzdGVyIHNldCBhZGRyZXNzZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbTUyOHhzaW0uaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI4eHNpbS5oCmluZGV4IDYxMDc3NGEuLjFhM2IxYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI4eHNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tNTI4eHNpbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lCW01Mjh4c2ltX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglEZWZpbmUgdGhlIDUyODAvNTI4MiBTSU0gcmVnaXN0ZXIgc2V0IGFkZHJlc3Nlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZjYWNoZS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmNhY2hlLmgKaW5kZXggOWNiNDAxNC4uNDVkMWFjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmNhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmNhY2hlLmgKQEAgLTExLDcgKzExLDYgQEAKICNkZWZpbmUJX19NNjhLTk9NTVVfTUNGQ0FDSEVfSAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCVRoZSBkaWZmZXJlbnQgQ29sZEZpcmUgZmFtaWxpZXMgaGF2ZSBkaWZmZXJlbnQgY2FjaGUgYXJyYW5nbWVudHMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmZG1hLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmZG1hLmgKaW5kZXggYjkzZjhiYS4uZWE3MjllOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZmRtYS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZkbWEuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZQltY2ZkbWFfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCUdldCBhZGRyZXNzIHNwZWNpZmljIGRlZmluZXMgZm9yIHRoaXMgQ29sZGZpcmUgbWVtYmVyLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm1idXMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZtYnVzLmgKaW5kZXggNDc2MjU4OS4uMTNkZjlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm1idXMuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbWJ1cy5oCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpZm5kZWYgbWNmbWJ1c19oCiAjZGVmaW5lIG1jZm1idXNfaAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAKICNkZWZpbmUgTUNGTUJVU19CQVNFCQkweDI4MApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZm5lLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbmUuaAppbmRleCBhNzFiMWM4Li5jOTIwY2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbmUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmbmUuaApAQCAtMTgsNyArMTgsNiBAQAogI2RlZmluZQltY2ZuZV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICoJU3VwcG9ydCBmb3IgTkUyMDAwIGNsb25lcyBkZXZpY2VzIGluIENvbGRGaXJlIGJhc2VkIGJvYXJkcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZwY2kuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZwY2kuaAppbmRleCBkNjIyOTA0Li5mMTUwN2RkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBjaS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCW1jZnBjaV9oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BDSQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGl0LmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmcGl0LmgKaW5kZXggYTY4NWYxYi4uMGQyNjcyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnBpdC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZwaXQuaApAQCAtMTEsNyArMTEsNiBAQAogI2RlZmluZQltY2ZwaXRfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCUdldCBhZGRyZXNzIHNwZWNpZmljIGRlZmluZXMgZm9yIHRoZSA1MjcwLzUyNzEsIDUyODAvNTI4MiwgYW5kIDUyMDguCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc2ltLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc2ltLmgKaW5kZXggODFkNzRhMy4uOTdhMGMyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNpbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzaW0uaApAQCAtMTIsNyArMTIsNiBAQAogI2RlZmluZQltY2ZzaW1faAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCUluY2x1ZGUgNTIwNCwgNTIwNi9lLCA1MjM1LCA1MjQ5LCA1MjcwLzUyNzEsIDUyNzIsIDUyODAvNTI4MiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzbWMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2ZzbWMuaAppbmRleCAyNTgzOTAwLi4yZDdhNGRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmc21jLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnNtYy5oCkBAIC0xNyw3ICsxNyw2IEBACiAgKglhbGxvdyA4IGJpdCBhY2Nlc3Nlcy4gU28gdGhpcyBjb2RlIGlzIDE2Yml0IGFjY2VzcyBvbmx5LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI3VuZGVmCW91dGIKICN1bmRlZglpbmIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2Z0aW1lci5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnRpbWVyLmgKaW5kZXggMGY0NzE2NC4uNjhiZjMzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnRpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnRpbWVyLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUJbWNmdGltZXJfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCUdldCBhZGRyZXNzIHNwZWNpZmljIGRlZmluZXMgZm9yIHRoaXMgQ29sZEZpcmUgbWVtYmVyLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnVhcnQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2Z1YXJ0LmgKaW5kZXggYjAxNmZhZC4uODA0MGU0MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZnVhcnQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmdWFydC5oCkBAIC0xMiw3ICsxMiw2IEBACiAjZGVmaW5lCW1jZnVhcnRfaAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCURlZmluZSB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBVQVJUUyB3aXRoaW4gdGhlIE1CQVIgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZndkZWJ1Zy5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21jZndkZWJ1Zy5oCmluZGV4IDZjZWFlMTAuLjI3ZjcwZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tY2Z3ZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbWNmd2RlYnVnLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgbWNmZGVidWdfaAogI2RlZmluZSBtY2ZkZWJ1Z19oCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogRGVmaW5lIHRoZSBkZWJ1ZyBtb2R1bGUgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE1DRkRFQlVHX0NTUgkweDAJCQkvKiBDb25maWd1cmF0aW9uIHN0YXR1cwkJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21tdV9jb250ZXh0LmgKaW5kZXggMWUwODBlYy4uNmMwNzdkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L21tdV9jb250ZXh0LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTTY4S05PTU1VX01NVV9DT05URVhUX0gKICNkZWZpbmUgX19NNjhLTk9NTVVfTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L25ldHRlbC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L25ldHRlbC5oCmluZGV4IDliZGEzMDcuLjAyOTlmNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9uZXR0ZWwuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvbmV0dGVsLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNkZWZpbmUJbmV0dGVsX2gKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2lmZGVmIENPTkZJR19ORVR0ZWwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFnZS5oCmluZGV4IDk0MmRmYmUuLmEyMmJmNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX002OEtOT01NVV9QQUdFX0gKICNkZWZpbmUgX002OEtOT01NVV9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGFnZV9vZmZzZXQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlX29mZnNldC5oCmluZGV4IDJiNDU2NDUuLjhlZDZkN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlX29mZnNldC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYWdlX29mZnNldC5oCkBAIC0xLDUgKzEsNCBAQAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIFRoaXMgaGFuZGxlcyB0aGUgbWVtb3J5IG1hcC4uICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYXJhbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3BhcmFtLmgKaW5kZXggM2Y1N2Q1ZGIuLjRjOTkwNGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wYXJhbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTTY4S05PTU1VX1BBUkFNX0gKICNkZWZpbmUgX002OEtOT01NVV9QQVJBTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0NMRU9QQVRSQSkKICNkZWZpbmUJSFogMTAwMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wZ3RhYmxlLmgKaW5kZXggMDA4OTMwNS4uNTQ5YWQyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcGd0YWJsZS5oCkBAIC03LDcgKzcsNiBAQAogICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDIsIEdyZWcgVW5nZXJlciA8Z2VyZ0BzbmFwZ2Vhci5jb20+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9wcm9jZXNzb3IuaAppbmRleCBiYTM5M2IxLi4yNzhiMDBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3Byb2Nlc3Nvci5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KICNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1hcGhvcmUtaGVscGVyLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc2VtYXBob3JlLWhlbHBlci5oCmluZGV4IGE2NTg2NDEuLjQzZGE3YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zZW1hcGhvcmUtaGVscGVyLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3NlbWFwaG9yZS1oZWxwZXIuaApAQCAtOSw3ICs5LDYgQEAKICAqIG02OGsgdmVyc2lvbiBieSBBbmRyZWFzIFNjaHdhYgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoZXNlIHR3byBfbXVzdF8gZXhlY3V0ZSBhdG9taWNhbGx5IHdydCBlYWNoIG90aGVyLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oCmluZGV4IDYzMzhhZmMuLjJiYmUyZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9NNjhLTk9NTVVfU1lTVEVNX0gKICNkZWZpbmUgX002OEtOT01NVV9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGdldCBjb25maWd1cmF0aW9uIG1hY3JvcyAqLwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogI2luY2x1ZGUgPGFzbS9lbnRyeS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuYWxpZ25lZC5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuYWxpZ25lZC5oCmluZGV4IDg4NzZmMDMuLjg2OWU5ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmFsaWduZWQuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5hbGlnbmVkLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTTY4S19VTkFMSUdORURfSAogI2RlZmluZSBfX002OEtfVU5BTElHTkVEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0NPTERGSVJFCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmlzdGQuaAppbmRleCA1MzczOTg4Li4xYjJhYmRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuaXN0ZC5oCkBAIC0yODYsNiArMjg2LDggQEAKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODAKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4MQogIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBOUl9zeXNjYWxscwkJMjgyCiAKIC8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTIyOiBzZWUKQEAgLTQzNyw3ICs0MzksNiBAQAogICByZXR1cm4gKHR5cGUpX19yZXM7CQkJCQkJCQlcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0lQQ19QQVJTRV9WRVJTSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9SRUFERElSCiAjZGVmaW5lIF9fQVJDSF9XQU5UX09MRF9TVEFUCkBAIC00NjAsNyArNDYxLDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC01MTUsNyArNTE1LDcgQEAKIAkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKIAkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTUyNSw0ICs1MjUsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX002OEtfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2Eub3V0LmggYi9pbmNsdWRlL2FzbS1taXBzL2Eub3V0LmgKaW5kZXggMmIzZGMzYi4uZWYzM2MzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hLm91dC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYS5vdXQuaApAQCAtMTAsNyArMTAsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9hZGRyc3BhY2UuaAppbmRleCAwY2M2YzcwLi40NWM3MDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FkZHJzcGFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYWRkcnNwYWNlLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9BRERSU1BBQ0VfSAogI2RlZmluZSBfQVNNX0FERFJTUEFDRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxzcGFjZXMuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXJjL3R5cGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL2FyYy90eXBlcy5oCmluZGV4IGJiYjcyNWMuLmI5YWRjZDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2FyYy90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYXJjL3R5cGVzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fQVJDX1RZUEVTX0gKICNkZWZpbmUgX0FTTV9BUkNfVFlQRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQVJDMzIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hc20uaCBiL2luY2x1ZGUvYXNtLW1pcHMvYXNtLmgKaW5kZXggNGIwOTBmMy4uZTMwMzhhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9hc20uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FzbS5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX0FTTV9ICiAjZGVmaW5lIF9fQVNNX0FTTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2dpZGVmcy5oPgogCiAjaWZuZGVmIENBVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oIGIvaW5jbHVkZS9hc20tbWlwcy9hc21tYWNyby5oCmluZGV4IGY1NGFhMTQuLjJjNDJmNmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXNtbWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2FzbW1hY3JvLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fQVNNTUFDUk9fSAogI2RlZmluZSBfQVNNX0FTTU1BQ1JPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1taXBzL2F0b21pYy5oCmluZGV4IDJjOGI4NTMuLjEzZDQ0ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9hdG9taWMuaApAQCAtMTcsNyArMTcsNiBAQAogICogPGxpbnV4L3NwaW5sb2NrLmg+IHdlIGhhdmUgdG8gaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4gb3V0c2lkZSB0aGUKICAqIG1haW4gYmlnIHdyYXBwZXIgLi4uCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAjaWZuZGVmIF9BU01fQVRPTUlDX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYmNhY2hlLmggYi9pbmNsdWRlL2FzbS1taXBzL2JjYWNoZS5oCmluZGV4IDQ0NjEwMmIuLjM2NDZhM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYmNhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9iY2FjaGUuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9CQ0FDSEVfSAogI2RlZmluZSBfQVNNX0JDQUNIRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogU29tZSBSNDAwMCAvIFI0NDAwIC8gUjQ2MDAgLyBSNTAwMCBtYWNoaW5lcyBtYXkgaGF2ZSBhIG5vbi1kbWEtY29oZXJlbnQsCiAgICBjaGlwc2V0IGltcGxlbWVudGVkIGNhY2hlcy4gIE9uIG1hY2hpbmVzIHdpdGggb3RoZXIgQ1BVcyB0aGUgQ1BVIGRvZXMgdGhlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaAppbmRleCBkMmY0NDQ1Li4wOThjZWMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fQklUT1BTX0gKICNkZWZpbmUgX0FTTV9CSVRPUFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmggYi9pbmNsdWRlL2FzbS1taXBzL2J1Zy5oCmluZGV4IDg3ZDQ5YTUuLjdiNDczOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9idWcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fQlVHX0gKICNkZWZpbmUgX19BU01fQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0JVRwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2J1Z3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCmluZGV4IGNiMmVhN2MuLjBkN2Y5YzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnVncy5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfQVNNX0JVR1NfSAogI2RlZmluZSBfQVNNX0JVR1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1pbmZvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tbWlwcy9ieXRlb3JkZXIuaAppbmRleCBhZWZjMDJmLi5lZWU4M2NiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvYnl0ZW9yZGVyLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fQllURU9SREVSX0gKICNkZWZpbmUgX0FTTV9CWVRFT1JERVJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZS5oCmluZGV4IDU1ZTE5ZjIuLjM3ZjE3NWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NhY2hlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fQ0FDSEVfSAogI2RlZmluZSBfQVNNX0NBQ0hFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGttYWxsb2MuaD4KIAogI2RlZmluZSBMMV9DQUNIRV9TSElGVAkJQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvY2hlY2tzdW0uaAppbmRleCBiMDlmODk3Li5hNWU2MDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2NoZWNrc3VtLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jaGVja3N1bS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fQ0hFQ0tTVU1fSAogI2RlZmluZSBfQVNNX0NIRUNLU1VNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmggYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1mZWF0dXJlcy5oCmluZGV4IDI1NGUxMWUuLjg4MWNlMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWZlYXR1cmVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtZmVhdHVyZXMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fQ1BVX0ZFQVRVUkVTX0gKICNkZWZpbmUgX19BU01fQ1BVX0ZFQVRVUkVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2NwdS5oPgogI2luY2x1ZGUgPGFzbS9jcHUtaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9jcHUtaW5mby5oCmluZGV4IDY1NzJhYzcuLmEyZjBjOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvY3B1LWluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2NwdS1pbmZvLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fQ1BVX0lORk9fSAogI2RlZmluZSBfX0FTTV9DUFVfSU5GT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogI2lmZGVmIENPTkZJR19TR0lfSVAyNwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1NDc3LmgKaW5kZXggYTQzODU0OC4uYzVhZjRiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjU0NzcuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNTQ3Ny5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX0REQjVYWFhfRERCNTQ3N19ICiAjZGVmaW5lIF9fQVNNX0REQjVYWFhfRERCNTQ3N19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgY29udGFpbnMgbWFjcm9zIHRoYXQgYXJlIHNwZWNpZmljIHRvIEREQjU0Nzcgb3IgcmVuYW1lZCBmcm9tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oIGIvaW5jbHVkZS9hc20tbWlwcy9kZGI1eHh4L2RkYjV4eHguaAppbmRleCAyZjFiMTkxLi5lOTdmY2M4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RkYjV4eHgvZGRiNXh4eC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGRiNXh4eC9kZGI1eHh4LmgKQEAgLTE4LDcgKzE4LDYgQEAKICNpZm5kZWYgX19BU01fRERCNVhYWF9EREI1WFhYX0gKICNkZWZpbmUgX19BU01fRERCNVhYWF9EREI1WFhYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmggYi9pbmNsdWRlL2FzbS1taXBzL2RlYnVnLmgKaW5kZXggOTMwZjJiNy4uMWZkNWEyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVidWcuaApAQCAtMTUsNyArMTUsNiBAQAogI2lmbmRlZiBfQVNNX0RFQlVHX0gKICNkZWZpbmUgX0FTTV9ERUJVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIHJ1bi10aW1lIG1hY3JvcyBmb3IgY2F0Y2hpbmcgc3B1cmlvdXMgZXJyb3JzLiAgRWFibGUgQ09ORklHX1JVTlRJTUVfREVCVUcgaW4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaCBiL2luY2x1ZGUvYXNtLW1pcHMvZGVjL3Byb20uaAppbmRleCAxMzg0ZGQwLi5iOWM4MjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2RlYy9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9kZWMvcHJvbS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9BU01fREVDX1BST01fSAogI2RlZmluZSBfQVNNX0RFQ19QUk9NX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1taXBzL2RlbGF5LmgKaW5kZXggOTI4ZjMwZi4uZWE3NzA1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kZWxheS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZGVsYXkuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0RFTEFZX0gKICNkZWZpbmUgX0FTTV9ERUxBWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgogI2luY2x1ZGUgPGFzbS9jb21waWxlci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9kbWEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZG1hLmgKaW5kZXggNmFhZjk5My4uZTg1ODQ5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2RtYS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fRE1BX0gKICNkZWZpbmUgX0FTTV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4JCS8qIEFuZCBzcGlubG9ja3MgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9lbGYuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZWxmLmgKaW5kZXggYmRjOWRlMi4uZWJkNmJmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2VsZi5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX0VMRl9ICiAjZGVmaW5lIF9BU01fRUxGX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBFTEYgaGVhZGVyIGVfZmxhZ3MgZGVmaW5lcy4gKi8KIC8qIE1JUFMgYXJjaGl0ZWN0dXJlIGxldmVsLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oIGIvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oCmluZGV4IDQzZDA0N2EuLjc4NzIyMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZmNudGwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZjbnRsLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9BU01fRkNOVExfSAogI2RlZmluZSBfQVNNX0ZDTlRMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIE9fQVBQRU5ECTB4MDAwOAogI2RlZmluZSBPX1NZTkMJCTB4MDAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvZml4bWFwLmgKaW5kZXggNzNhMzAyOC4uMWNhZGVmYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2ZpeG1hcC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fRklYTUFQX0gKICNkZWZpbmUgX0FTTV9GSVhNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpZmRlZiBDT05GSUdfSElHSE1FTQogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmggYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCmluZGV4IDhiZjUxMGEuLjU4YzU2MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0ZQVV9ICiAjZGVmaW5lIF9BU01fRlBVX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oIGIvaW5jbHVkZS9hc20tbWlwcy9mdXRleC5oCmluZGV4IDFmOTQ2NDAuLmVkMDIzZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Z1dGV4LmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2hhemFyZHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCmluZGV4IGRhZGMwNTEuLjY2OTQzYzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fSEFaQVJEU19ICiAjZGVmaW5lIF9BU01fSEFaQVJEU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fQVNTRU1CTFlfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvaGlnaG1lbS5oCmluZGV4IDhjZjU5ODQuLmM5NzZiZmFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2hpZ2htZW0uaApAQCAtMTksNyArMTksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9pbnRlcnJ1cHQuaAppbmRleCA0YmI5YzA2Li5hOTlkNjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2ludGVycnVwdC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaW50ZXJydXB0LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9JTlRFUlJVUFRfSAogI2RlZmluZSBfQVNNX0lOVEVSUlVQVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgogCiBfX2FzbV9fICgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaW8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvaW8uaAppbmRleCA2YjE3ZWI5Li5kZjYyNGUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pby5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fSU9fSAogI2RlZmluZSBfQVNNX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjaGluZS5oCmluZGV4IGU0NDBmZGYuLjFiNjMxYjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2hpbmUuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX0lQMzJfTUFDSElORV9ICiAjZGVmaW5lIF9BU01fSVAzMl9NQUNISU5FX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NHSV9JUDMyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IGRkZTY3N2YuLmQzNWM2MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9JUlFfSAogI2RlZmluZSBfQVNNX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwc210cmVncy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pc2FkZXAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXNhZGVwLmgKaW5kZXggN2JiMDAzNS4uMjRjNmNkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pc2FkZXAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lzYWRlcC5oCkBAIC01LDcgKzUsNiBAQAogICoKICAqIENvcHlyaWdodCAoYykgMTk5OCBIYXJhbGQgS29lcmZnZW4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9fQVNNX0lTQURFUF9ICiAjZGVmaW5lIF9fQVNNX0lTQURFUF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2ptcjM5MjcvaXJxLmgKaW5kZXggYjBjMzI1YS4uZmU1NTFmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9qbXIzOTI3L2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvam1yMzkyNy9pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCiBzdHJ1Y3QgdGJfaXJxX3NwYWNlIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMva21hcF90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9rbWFwX3R5cGVzLmgKaW5kZXggNjg4NmEwYy4uODA2YWFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9rbWFwX3R5cGVzLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fS01BUF9UWVBFU19ICiAjZGVmaW5lIF9BU01fS01BUF9UWVBFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAjIGRlZmluZSBEKG4pIF9fS01fRkVOQ0VfIyNuICwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbG9jYWwuaAppbmRleCBjMzg4NDRmLi45ZTJkNDNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9sb2NhbC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0xPQ0FMX0gKICNkZWZpbmUgX0FTTV9MT0NBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MTAwMC5oCmluZGV4IDQ2ODZlMTcuLjU4MmFjZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxMDAwLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTEwMDAuaApAQCAtMzUsNyArMzUsNiBAQAogI2lmbmRlZiBfQVUxMDAwX0hfCiAjZGVmaW5lIF9BVTEwMDBfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHguaAppbmRleCBiN2I0NmRkLi45NDcxMzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4LmgKQEAgLTIzLDcgKzIzLDYgQEAKICNpZm5kZWYgX0FVMVhYWF9IXwogI2RlZmluZSBfQVUxWFhYX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKaW5kZXggYjMyN2JjZC4uZDViMzhhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfZGJkbWEuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCkBAIC0zNCw3ICszNCw2IEBACiAjaWZuZGVmIF9BVTEwMDBfREJETUFfSF8KICNkZWZpbmUgX0FVMTAwMF9EQkRNQV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX0xBTkdVQUdFX0FTU0VNQkxZCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X2lkZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgKaW5kZXggZTg2N2I0ZS4uMzAxZTcxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfaWRlLmgKQEAgLTI5LDcgKzI5LDYgQEAKICAqIE5vdGU6IGZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgIkFNRCBBbGNoZW15IEF1MTIwMC9BdTE1NTAgSURFCiAgKiAgICAgICBJbnRlcmZhY2UgYW5kIExpbnV4IERldmljZSBEcml2ZXIiIEFwcGxpY2F0aW9uIE5vdGUuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKICAgICAgICAgI2RlZmluZSBETUFfV0FJVF9USU1FT1VUICAgICAgICAxMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdTF4MDAvYXUxeHh4X3BzYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmgKaW5kZXggOGU1ZmIzYy4uNWMzZTJhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9hdTF4eHhfcHNjLmgKQEAgLTMzLDcgKzMzLDYgQEAKICNpZm5kZWYgX0FVMTAwMF9QU0NfSF8KICNkZWZpbmUgX0FVMTAwMF9QU0NfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBUaGUgUFNDIGJhc2UgYWRkcmVzc2VzLiAgKi8KICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWF1MXgwMC9pb3JlbWFwLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2lvcmVtYXAuaAppbmRleCBkM2VjNjI3Li4wOThmY2E0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2lvcmVtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXUxeDAwL2lvcmVtYXAuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9BVTFYMDBfSU9SRU1BUF9ICiAjZGVmaW5lIF9fQVNNX01BQ0hfQVUxWDAwX0lPUkVNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2lmZGVmIENPTkZJR182NEJJVF9QSFlTX0FERFIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtY29iYWx0L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IGFjZThjNWUuLmUwZTA4ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1jb2JhbHQvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWNvYmFsdC9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19BU01fQ09CQUxUX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAjZGVmaW5lIF9fQVNNX0NPQkFMVF9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgY3B1X2hhc190bGIJCTEKICNkZWZpbmUgY3B1X2hhc180a2V4CQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWRiMXgwMC9kYjF4MDAuaAppbmRleCA3YjI4YjIzLi44ZmJiNGI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZGIxeDAwL2RiMXgwMC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1kYjF4MDAvZGIxeDAwLmgKQEAgLTI4LDcgKzI4LDYgQEAKICNpZm5kZWYgX19BU01fREIxWDAwX0gKICNkZWZpbmUgX19BU01fREIxWDAwX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX01JUFNfREIxNTUwCiAjZGVmaW5lIEJDU1JfS1NFRzFfQUREUiAweEFGMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9pZGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCmluZGV4IGUzMzE1MzUuLjZlYmEyZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9rbWFsbG9jLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9rbWFsbG9jLmgKaW5kZXggMzczZDY2ZC4uNDEwYWI1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMva21hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2ttYWxsb2MuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9HRU5FUklDX0tNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9NQUNIX0dFTkVSSUNfS01BTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBDT05GSUdfRE1BX0NPSEVSRU5UCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvc3BhY2VzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaAppbmRleCBiODQ5ZDhkLi4wYWU5OTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZ2VuZXJpYy9zcGFjZXMuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX01BQ0hfR0VORVJJQ19TUEFDRVNfSAogI2RlZmluZSBfQVNNX01BQ0hfR0VORVJJQ19TUEFDRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjIvc3BhY2VzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9zcGFjZXMuaAppbmRleCA4Mzg1ZjcxLi5hYjIwYzAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9zcGFjZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyMi9zcGFjZXMuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX01BQ0hfSVAyMl9TUEFDRVNfSAogI2RlZmluZSBfQVNNX01BQ0hfSVAyMl9TUEFDRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCBmMGVmMWFjLi4yYTNkZTA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9JUDMyX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfSVAzMl9DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBSNTAwMCBoYXMgYW4gaW50ZXJlc3RpbmcgInJlc3RyaWN0aW9uIjogIGxsKGQpL3NjKGQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9rbWFsbG9jLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAzMi9rbWFsbG9jLmgKaW5kZXggOWQyZDRkOS4uZjYxOThhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMzIva21hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDMyL2ttYWxsb2MuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9JUDMyX0tNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9NQUNIX0lQMzJfS01BTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9SNTAwMCkgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9STTcwMDApCiAjZGVmaW5lIEFSQ0hfS01BTExPQ19NSU5BTElHTgkzMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmggYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCAxMmM5MzcyLi5lOTYwNjc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fTUFDSF9NSVBTX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfTUlQU19DUFVfRkVBVFVSRV9PVkVSUklERVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBDUFUgZmVhdHVyZSBvdmVycmlkZXMgZm9yIE1JUFMgYm9hcmRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtbWlwcy9pcnEuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2lycS5oCmluZGV4IGY4NTc5NjkuLjA4M2Q5YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1taXBzL2lycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9NQUNIX01JUFNfSVJRX0gKICNkZWZpbmUgX19BU01fTUFDSF9NSVBTX0lSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBOUl9JUlFTCTI1NgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXBiMXgwMC9wYjE1NTAuaAppbmRleCA5NTc4ZWFkLi45YTQ5NTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcGIxeDAwL3BiMTU1MC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1wYjF4MDAvcGIxNTUwLmgKQEAgLTI3LDcgKzI3LDYgQEAKICNpZm5kZWYgX19BU01fUEIxNTUwX0gKICNkZWZpbmUgX19BU01fUEIxNTUwX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgREJETUFfQUM5N19UWF9DSEFOIERTQ1JfQ01EMF9QU0MxX1RYCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtc2ltL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLXNpbS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaAppbmRleCBkOTY1M2U0Li5kNzM2YmRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtc2ltL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1zaW0vY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQVNNX01BQ0hfU0lNX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAjZGVmaW5lIF9fQVNNX01BQ0hfU0lNX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIENQVSBmZWF0dXJlIG92ZXJyaWRlcyBmb3IgTUlQUyBib2FyZHMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKaW5kZXggZmE4YjkxMy4uYjk4ZjE2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpZm5kZWYgX19BU01fTUlQU19CT0FSRFNfR0VORVJJQ19ICiAjZGVmaW5lIF9fQVNNX01JUFNfQk9BUkRTX0dFTkVSSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvYm9uaXRvNjQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWlwc3JlZ3MuaAppbmRleCA5OGI2ODA4Li42NzM5Nzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21pcHNyZWdzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzcmVncy5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fTUlQU1JFR1NfSAogI2RlZmluZSBfQVNNX01JUFNSRUdTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vaGF6YXJkcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKaW5kZXggNmUwOWY0Yy4uMThiNjlkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfQVNNX01NVV9DT05URVhUX0gKICNkZWZpbmUgX0FTTV9NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW16b25lLmgKaW5kZXggZjZiZDJlMC4uZGMyMzFjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21tem9uZS5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfQVNNX01NWk9ORV9IXwogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxtbXpvbmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tb2R1bGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW9kdWxlLmgKaW5kZXggMmFmNDk2Yy4uMzk5ZDAzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21vZHVsZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX01PRFVMRV9ICiAjZGVmaW5lIF9BU01fTU9EVUxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21zZ2J1Zi5oIGIvaW5jbHVkZS9hc20tbWlwcy9tc2didWYuaAppbmRleCBhMTUzMzk1Li4wZDZjN2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21zZ2J1Zi5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbXNnYnVmLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fTVNHQlVGX0gKICNkZWZpbmUgX0FTTV9NU0dCVUZfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGUgbXNxaWQ2NF9kcyBzdHJ1Y3R1cmUgZm9yIHRoZSBNSVBTIGFyY2hpdGVjdHVyZS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKaW5kZXggNDZmMmQyMy4uMTQ3ODQ0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYWNjZXNzLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0FTTV9QQUNDRVNTX0gKICNkZWZpbmUgX0FTTV9QQUNDRVNTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKICNpZmRlZiBDT05GSUdfMzJCSVQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGFnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKaW5kZXggM2QyNjJjMC4uNmI5Nzc0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUEFHRV9ICiAjZGVmaW5lIF9BU01fUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wY2kuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGNpLmgKaW5kZXggNmM5YWQ4MS4uYzRkNjhiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BjaS5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfQVNNX1BDSV9ICiAjZGVmaW5lIF9BU01fUENJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCmluZGV4IGZlMWRmNTcuLjU4MmMxZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcGdhbGxvYy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1BHQUxMT0NfSAogI2RlZmluZSBfQVNNX1BHQUxMT0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS0zMi5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKaW5kZXggMDg3YzIwNy4uNGIyNmQ4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTMyLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fUEdUQUJMRV8zMl9ICiAjZGVmaW5lIF9BU01fUEdUQUJMRV8zMl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAppbmRleCAyZmFmNWM5Li5lM2RiOTMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtNjQuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9QR1RBQkxFXzY0X0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFXzY0X0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS1iaXRzLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUtYml0cy5oCmluZGV4IDAxZTc2ZTkuLjc0OTRiYTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS1iaXRzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLWJpdHMuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfQVNNX1BHVEFCTEVfQklUU19ICiAjZGVmaW5lIF9BU01fUEdUQUJMRV9CSVRTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogTm90ZSB0aGF0IHdlIHNoaWZ0IHRoZSBsb3dlciAzMmJpdHMgb2YgZWFjaCBFbnRyeUxvWzAxXSBlbnRyeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAppbmRleCBiZTc1Y2NhLi5hMzZjYTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BndGFibGUuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9QR1RBQkxFX0gKICNkZWZpbmUgX0FTTV9QR1RBQkxFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIENPTkZJR18zMkJJVAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLTMyLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcHJlZmV0Y2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvcHJlZmV0Y2guaAppbmRleCA3MTI5M2VjLi4xNzg1MDgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3ByZWZldGNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wcmVmZXRjaC5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfX0FTTV9QUkVGRVRDSF9ICiAjZGVmaW5lIF9fQVNNX1BSRUZFVENIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUjUwMDAgYW5kIFJNNTIwMCBpbXBsZW1lbnRzIHByZWYgYW5kIHByZWZ4IGluc3RydWN0aW9ucyBidXQgdGhleSdyZSBub3BzLCBzbwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcHJvY2Vzc29yLmgKaW5kZXggODM5MzY0Ni4uNWY4MGJhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3Byb2Nlc3Nvci5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fUFJPQ0VTU09SX0gKICNkZWZpbmUgX0FTTV9QUk9DRVNTT1JfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKaW5kZXggZmE5ZDg3MS4uNDExMzMxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1BUUkFDRV9ICiAjZGVmaW5lIF9BU01fUFRSQUNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2lzYWRlcC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3JlZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9yZWcuaAppbmRleCA2MTczMDA0Li42MzRiNTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3JlZy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcmVnLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fTUlQU19SRUdfSAogI2RlZmluZSBfX0FTTV9NSVBTX1JFR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHXzMyQklUKSB8fCBkZWZpbmVkKFdBTlRfQ09NUEFUX1JFR19IKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3Jlc291cmNlLmggYi9pbmNsdWRlL2FzbS1taXBzL3Jlc291cmNlLmgKaW5kZXggMWZiYTAwYy4uODdjYjMwOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9yZXNvdXJjZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvcmVzb3VyY2UuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX0FTTV9SRVNPVVJDRV9ICiAjZGVmaW5lIF9BU01fUkVTT1VSQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGVzZSBmaXZlIHJlc291cmNlIGxpbWl0IElEcyBoYXZlIGEgTUlQUy9MaW51eC1zcGVjaWZpYyBvcmRlcmluZywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCmluZGV4IDcxOTZjZWIuLjU4NGJkOWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fU0VSSUFMX0gKICNkZWZpbmUgX0FTTV9TRVJJQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NnaWFyY3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpYXJjcy5oCmluZGV4IDcyMmI3N2EuLmRkYjg1OWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2dpYXJjcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2dpYXJjcy5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9BU01fU0dJQVJDU19ICiAjZGVmaW5lIF9BU01fU0dJQVJDU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXJjL3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2JvYXJkLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9ib2FyZC5oCmluZGV4IDkwMGVkY2IuLjNkZmUyOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2JvYXJkLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvYm9hcmQuaApAQCAtMTksNyArMTksNiBAQAogI2lmbmRlZiBfU0lCWVRFX0JPQVJEX0gKICNkZWZpbmUgX1NJQllURV9CT0FSRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NJQllURV9TV0FSTSkgfHwgZGVmaW5lZChDT05GSUdfU0lCWVRFX1BUU1dBUk0pIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19TSUJZVEVfQ1JIT05FKSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQ1JISU5FKSB8fCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9jYXJtZWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2Nhcm1lbC5oCmluZGV4IGI1ZTdkYWUuLjU3YzUzZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2Nhcm1lbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL2Nhcm1lbC5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX1NJQllURV9DQVJNRUxfSAogI2RlZmluZSBfX0FTTV9TSUJZVEVfQ0FSTUVMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTAuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9pbnQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NlbnRvc2EuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NlbnRvc2EuaAppbmRleCA4MjQ2MDU4Li42NGM0Nzg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zZW50b3NhLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2VudG9zYS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX1NJQllURV9TRU5UT1NBX0gKICNkZWZpbmUgX19BU01fU0lCWVRFX1NFTlRPU0FfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTAuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9pbnQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc3dhcm0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3N3YXJtLmgKaW5kZXggMDZlMWQ1Mi4uODZkYjM3ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc3dhcm0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zd2FybS5oCkBAIC0xOCw3ICsxOCw2IEBACiAjaWZuZGVmIF9fQVNNX1NJQllURV9TV0FSTV9ICiAjZGVmaW5lIF9fQVNNX1NJQllURV9TV0FSTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MC5oPgogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX2ludC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpZ2luZm8uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCmluZGV4IDJiYTMxM2QuLjJlMzI5NDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnaW5mby5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NJR0lORk9fSAogI2RlZmluZSBfQVNNX1NJR0lORk9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX19BUkNIX1NJR0VWX1BSRUFNQkxFX1NJWkUgKHNpemVvZihsb25nKSArIDIqc2l6ZW9mKGludCkpCiAjdW5kZWYgX19BUkNIX1NJX1RSQVBOTwkvKiBleGNlcHRpb24gY29kZSBuZWVkcyB0byBmaWxsIHRoaXMgLi4uICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKaW5kZXggZDgzNDllNC4uYTFmM2EzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NJR05BTF9ICiAjZGVmaW5lIF9BU01fU0lHTkFMX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNkZWZpbmUgX05TSUcJCTEyOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaW0uaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2ltLmgKaW5kZXggOWMyYWYxYi4uNjdjNGZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaW0uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpbS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NJTV9ICiAjZGVmaW5lIF9BU01fU0lNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmggYi9pbmNsdWRlL2FzbS1taXBzL3NtcC5oCmluZGV4IGUxNGU0YjYuLjE2MDhmZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbXAuaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfX0FTTV9TTVBfSAogI2RlZmluZSBfX0FTTV9TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfU01QCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYWRkcnMuaAppbmRleCA2YzhhNTU3Li44ZmEwYWY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FkZHJzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hZGRycy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1NOX0FERFJTX0gKICNkZWZpbmUgX0FTTV9TTl9BRERSU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9hZ2VudC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9hZ2VudC5oCmluZGV4IGQ2ZGYxM2EuLmFjNGVhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYWdlbnQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2FnZW50LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9TR0lfU05fQUdFTlRfSAogI2RlZmluZSBfQVNNX1NHSV9TTl9BR0VOVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGFzbS9zbi9hZGRycy5oPgogI2luY2x1ZGUgPGFzbS9zbi9hcmNoLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2FyY2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oCmluZGV4IGQyNDdhODEuLjUxMTc0YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vYXJjaC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fQVJDSF9ICiAjZGVmaW5lIF9BU01fU05fQVJDSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zbi90eXBlcy5oPgogI2lmZGVmIENPTkZJR19TR0lfSVAyNwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9pby5oCmluZGV4IDEzMzI2NDUuLmFiMmZhOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc24vaW8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL2lvLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fU05fSU9fSAogI2RlZmluZSBfQVNNX1NOX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmIGRlZmluZWQgKENPTkZJR19TR0lfSVAyNykKICNpbmNsdWRlIDxhc20vc24vc24wL2h1YmlvLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaAppbmRleCBkYzcwNjI2Li41MjIzOGU2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGNvbmZpZy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xjb25maWcuaApAQCAtMjcsNyArMjcsNiBAQAogICogICAgICB0aGF0IG9mZnNldHMgb2YgZXhpc3RpbmcgZmllbGRzIGRvIG5vdCBjaGFuZ2UuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24va2xkaXIuaAppbmRleCA5N2FkNTJlLi4wNTczY2JmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2tsZGlyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9rbGRpci5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fS0xESVJfSAogI2RlZmluZSBfQVNNX1NOX0tMRElSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogVGhlIGtsZGlyIG1lbW9yeSBhcmVhIHJlc2lkZXMgYXQgYSBmaXhlZCBwbGFjZSBpbiBlYWNoIG5vZGUncyBtZW1vcnkgYW5kCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9sYXVuY2guaAppbmRleCBiNjc2OTljLi5iN2MyMjI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL2xhdW5jaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vbGF1bmNoLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9BU01fU05fTEFVTkNIX0gKICNkZWZpbmUgX0FTTV9TTl9MQVVOQ0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NuL3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vbWFwcGVkX2tlcm5lbC5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKaW5kZXggNTllZGIyMC4uYzNkZDVkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9tYXBwZWRfa2VybmVsLmgKQEAgLTIwLDcgKzIwLDYgQEAKICAqIGNvZGUuIFNvIG5vIGp1bXBzIGNhbiBiZSBkb25lIGJlZm9yZSB3ZSBoYXZlIHN3aXRjaGVkIHRvIHVzaW5nCiAgKiBja3NzZWcgYWRkcmVzc2VzLgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgogCiAjZGVmaW5lIFJFUF9CQVNFCUNBQ19CQVNFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hZGRycy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYWRkcnMuaAppbmRleCAyYzRiNzU4Li45ZThjYzUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hZGRycy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FkZHJzLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0FTTV9TTl9TTjBfQUREUlNfSAogI2RlZmluZSBfQVNNX1NOX1NOMF9BRERSU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFNOMCAob24gYSBUNSkgQWRkcmVzcyBtYXAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2FyY2guaAppbmRleCBmN2M0M2ZhLi5mNzM0ZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9hcmNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvYXJjaC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fU05fU04wX0FSQ0hfSAogI2RlZmluZSBfQVNNX1NOX1NOMF9BUkNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIFNOMFhYTCAgLyogMTI4IGNwdSBTTVAgbWF4ICovCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc24vc24wL2h1Ym1kLmgKaW5kZXggMTAwNmFhMi4uMTRjMjI1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zbi9zbjAvaHVibWQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NuL3NuMC9odWJtZC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmCV9BU01fU05fU04wX0hVQk1EX0gKICNkZWZpbmUJX0FTTV9TTl9TTjBfSFVCTURfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBIdWIgTWVtb3J5L0RpcmVjdG9yeSBpbnRlcmZhY2UgcmVnaXN0ZXJzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0YWNrZnJhbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCmluZGV4IGM0ODU2YTguLjUxM2FhNTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RhY2tmcmFtZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9BU01fU1RBQ0tGUkFNRV9ICiAjZGVmaW5lIF9BU01fU1RBQ0tGUkFNRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKICNpbmNsdWRlIDxhc20vYXNtLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tbWlwcy9zdHJpbmcuaAppbmRleCA5MDdkYTYwLi40MzZlM2FkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3RyaW5nLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9TVFJJTkdfSAogI2RlZmluZSBfQVNNX1NUUklOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIE1vc3Qgb2YgdGhlIGlubGluZSBmdW5jdGlvbnMgYXJlIHJhdGhlciBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMgc28gSSBqdXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbWlwcy9zeXN0ZW0uaAppbmRleCAyNjFmNzFkLi4xMzAzMzNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3lzdGVtLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX0FTTV9TWVNURU1fSAogI2RlZmluZSBfQVNNX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy90aHJlYWRfaW5mby5oCmluZGV4IGY4ZDk3ZGEuLmFlOGFkYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RocmVhZF9pbmZvLmgKQEAgLTksNyArOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy90bGJmbHVzaC5oCmluZGV4IGJiNGFlM2MuLjI3NmJlNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1RMQkZMVVNIX0gKICNkZWZpbmUgX19BU01fVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcuaAppbmRleCA2Y2UxZTk0Li45NGJlZjAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIF9fQVNNX1RYNDkyN19UT1NISUJBX1JCVFg0OTI3X0gKICNkZWZpbmUgX19BU01fVFg0OTI3X1RPU0hJQkFfUkJUWDQ5MjdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R4NDkyNy90eDQ5MjcuaD4KICNpbmNsdWRlIDxhc20vdHg0OTI3L3R4NDkyN19taXBzLmg+CiAjaWZkZWYgQ09ORklHX1BDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oIGIvaW5jbHVkZS9hc20tbWlwcy90eXBlcy5oCmluZGV4IGNkMjgxM2QuLjJiNTJlMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3R5cGVzLmgKQEAgLTUyLDcgKzUyLDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiB0eXBlZGVmIF9fc2lnbmVkIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCmluZGV4IGI5NmYzZTAuLjFjZGQ0ZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdWFjY2Vzcy5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX1VBQ0NFU1NfSAogI2RlZmluZSBfQVNNX1VBQ0NFU1NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKaW5kZXggMTA2OGZlOS4uOGJiMGJiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCkBAIC05MDUsNiArOTA1LDggQEAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCiAjZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNjgKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyogWFhYIC0gX2ZvbyBuZWVkcyB0byBiZSBfX2Zvbywgd2hpbGUgX19OUl9iYXIgY291bGQgYmUgX05SX2Jhci4gKi8KQEAgLTExNjgsOSArMTE3MCw2IEBACiAKICNlbmRpZiAvKiAoX01JUFNfU0lNID09IF9NSVBTX1NJTV9OQUJJMzIpIHx8IChfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTY0KSAqLwogCi0jaWZkZWYgX19LRVJORUxfXwotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKQEAgLTExOTcsNyArMTE5Niw2IEBACiAjIGlmZGVmIENPTkZJR19NSVBTMzJfTzMyCiAjICBkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19USU1FCiAjIGVuZGlmCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtMTI0OCw0ICsxMjQ2LDUgQEAKICAqLwogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG4iICN4ICJcdD1cdHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cmM0MTczLmggYi9pbmNsdWRlL2FzbS1taXBzL3ZyNDF4eC92cmM0MTczLmgKaW5kZXggNGQ0MWE5Yy4uOTZmZGNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy92cjQxeHgvdnJjNDE3My5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdnI0MXh4L3ZyYzQxNzMuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfX05FQ19WUkM0MTczX0gKICNkZWZpbmUgX19ORUNfVlJDNDE3M19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmggYi9pbmNsdWRlL2FzbS1taXBzL3dhci5oCmluZGV4IDcwNjM2YjQuLjNhYzE0NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvd2FyLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy93YXIuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX0FTTV9XQVJfSAogI2RlZmluZSBfQVNNX1dBUl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEFub3RoZXIgUjQ2MDAgZXJyYXR1bS4gIER1ZSB0byB0aGUgbGFjayBvZiBlcnJhdGEgaW5mb3JtYXRpb24gdGhlIGV4YWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3diZmx1c2guaCBiL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCmluZGV4IGMzYmVmNTAuLmVhZGMwYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvd2JmbHVzaC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fV0JGTFVTSF9ICiAjZGVmaW5lIF9BU01fV0JGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19DUFVfSEFTX1dCCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9hdG9taWMuaAppbmRleCA0MDNlYTk3Li40OGJmOWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2F0b21pYy5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfQVNNX1BBUklTQ19BVE9NSUNfSF8KICNkZWZpbmUgX0FTTV9QQVJJU0NfQVRPTUlDX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaAppbmRleCBjODMxNjY1Li43ZDIyZmEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGUuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX19BUkNIX1BBUklTQ19DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9QQVJJU0NfQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBQQSAyLjAgcHJvY2Vzc29ycyBoYXZlIDY0LWJ5dGUgY2FjaGVsaW5lczsgUEEgMS4xIHByb2Nlc3NvcnMgaGF2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9jYWNoZWZsdXNoLmgKaW5kZXggNzZiNmI3ZC4uMGI0NTljZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvY2FjaGVmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfUEFSSVNDX0NBQ0hFRkxVU0hfSAogI2RlZmluZSBfUEFSSVNDX0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4JLyogZm9yIGZsdXNoX3VzZXJfZGNhY2hlX3JhbmdlX2FzbSgpIHByb3RvICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKaW5kZXggNzRkNGFjNi4uMWUzODdlMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9QQVJJU0NfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfUEFSSVNDX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9kbWEuaAppbmRleCAzMWZkMTBkLi45OTc5YzNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2RtYS5oCkBAIC05LDcgKzksNiBAQAogI2lmbmRlZiBfQVNNX0RNQV9ICiAjZGVmaW5lIF9BU01fRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogbmVlZCBieXRlIElPICovCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2lvLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAppbmRleCAyNDRmNmI4Li5iOWViMjQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvaW8uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9JT19ICiAjZGVmaW5lIF9BU01fSU9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvaXJxLmgKaW5kZXggYjBhMzBlMi4uMzc3YmE5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pcnEuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX0FTTV9QQVJJU0NfSVJRX0gKICNkZWZpbmUgX0FTTV9QQVJJU0NfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9rbWFwX3R5cGVzLmgKaW5kZXggNjg4NmEwYy4uODA2YWFlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL2ttYXBfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mva21hcF90eXBlcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0tNQVBfVFlQRVNfSAogI2RlZmluZSBfQVNNX0tNQVBfVFlQRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogIyBkZWZpbmUgRChuKSBfX0tNX0ZFTkNFXyMjbiAsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaAppbmRleCBjMGRkNDYxLi4wNjk1YmM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfUEFSSVNDX1BBR0VfU0laRV80S0IpCiAjIGRlZmluZSBQQUdFX1NISUZUCTEyCS8qIDRrICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYXJhbS5oCmluZGV4IGY0Njk0ZDQuLjA3Y2I5YjkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGFyYW0uaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTVBBUklTQ19QQVJBTV9ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjIGlmZGVmIENPTkZJR19QQTIwCiAjICBkZWZpbmUgSFoJCTEwMDAJCS8qIEZhc3RlciBtYWNoaW5lcyAqLwogIyBlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGNpLmgKaW5kZXggNzdiYmFmYi4uOGI2MzFmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BjaS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wY2kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fUEFSSVNDX1BDSV9ICiAjZGVmaW5lIF9fQVNNX1BBUklTQ19QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BkYy5oCmluZGV4IDBhM2ZhY2UuLjA4MzY0ZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZGMuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGRjLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9QQVJJU0NfUERDX0gKICNkZWZpbmUgX1BBUklTQ19QRENfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKglQREMgcmV0dXJuIHZhbHVlcyAuLi4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCmluZGV4IGFlYzA4OWUuLmI2YmNjNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3Byb2Nlc3Nvci5oCmluZGV4IDg5ZjJmMWMuLmNhNDlkYzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHJvY2Vzc29yLmgKQEAgLTksNyArOSw2IEBACiAjZGVmaW5lIF9fQVNNX1BBUklTQ19QUk9DRVNTT1JfSAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmggYi9pbmNsdWRlL2FzbS1wYXJpc2MvcHN3LmgKaW5kZXggNDMzNGQ2Yy4uNWEzZTIzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3Bzdy5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wc3cuaApAQCAtMSw2ICsxLDUgQEAKICNpZm5kZWYgX1BBUklTQ19QU1dfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUJUFNXX0kJMHgwMDAwMDAwMQogI2RlZmluZQlQU1dfRAkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc21wLmgKaW5kZXggZGJkYmQyZS4uZDRjMGUyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zbXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU01QX0gKICNkZWZpbmUgX19BU01fU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU01QKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3lzdGVtLmgKaW5kZXggYTVhOTczYy4uODYzODc2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9zeXN0ZW0uaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19QQVJJU0NfU1lTVEVNX0gKICNkZWZpbmUgX19QQVJJU0NfU1lTVEVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wc3cuaD4KIAogLyogVGhlIHByb2dyYW0gc3RhdHVzIHdvcmQgYXMgYml0ZmllbGRzLiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKaW5kZXggODI1OTk0YS4uZjY2MmU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3RsYmZsdXNoLmgKQEAgLTMsNyArMyw2IEBACiAKIC8qIFRMQiBmbHVzaGluZyByb3V0aW5lcy4uLi4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy91bmlzdGQuaAppbmRleCAwZTFhMzBiLi4xMmI4NjcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL3VuaXN0ZC5oCkBAIC03OTIsNiArNzkyLDcgQEAKICNkZWZpbmUgSFBVWF9HQVRFV0FZX0FERFIgICAgICAgMHhDMDAwMDAwNAogI2RlZmluZSBMSU5VWF9HQVRFV0FZX0FERFIgICAgICAweDEwMAogCisjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2RlZmluZSBTWVNfaWZ5KHN5c2NhbGxfbmFtZSkgICBfX05SXyMjc3lzY2FsbF9uYW1lCkBAIC05MzQsNyArOTM1LDYgQEAKICAgICByZXR1cm4gS19JTkxJTkVfU1lTQ0FMTChuYW1lLCA1LCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsJXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCkBAIC05NTYsNyArOTU2LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAvKiBtbWFwICYgbW1hcDIgdGFrZSA2IGFyZ3VtZW50cyAqLwogI2RlZmluZSBfc3lzY2FsbDYodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLHR5cGU0LGFyZzQsdHlwZTUsYXJnNSx0eXBlNixhcmc2KSBcCkBAIC0xMDU2LDQgKzEwNTUsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BBUklTQ19VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYWJzX2FkZHIuaAppbmRleCBjNWMzMjU5Li40YWEyMjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Fic19hZGRyLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9hYnNfYWRkci5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfQUJTX0FERFJfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogYyAyMDAxIFBQQyA2NCBUZWFtLCBJQk0gQ29ycApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9jYWNoZS5oCmluZGV4IDYzNzljMmQuLjY0MmJlNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NhY2hlLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogYnl0ZXMgcGVyIEwxIGNhY2hlIGxpbmUgKi8KICNpZiBkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHXzQwM0dDWCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLW1hcHBpbmcuaAppbmRleCAyYWM2M2Y1Li4yYWI5YmFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEtbWFwcGluZy5oCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBfQVNNX0RNQV9NQVBQSU5HX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAvKiBuZWVkIHN0cnVjdCBwYWdlIGRlZmluaXRpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9kbWEuaAppbmRleCA0YmI1N2ZlLi43YTQzNzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZG1hLmgKQEAgLTIyLDcgKzIyLDYgQEAKICAqIHdpdGggYSBncmFpbiBvZiBzYWx0LgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCmluZGV4IDg2OGM3MTMuLmU5Yzg2YjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBfUFBDNjRfRUVIX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZWxmLmgKaW5kZXggOTRkMjI4Zi4uOTljMThiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VsZi5oCkBAIC0zLDE0ICszLDE0IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogZm9yIHRhc2tfc3RydWN0ICovCisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYXV4dmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc3RyaW5nLmg+CiAKIC8qIFBvd2VyUEMgcmVsb2NhdGlvbnMgZGVmaW5lZCBieSB0aGUgQUJJcyAqLwogI2RlZmluZSBSX1BQQ19OT05FCQkwCkBAIC0xMjksNyArMTI5LDcgQEAKICAgLyogQXNzdW1wdGlvbjogRUxGX0FSQ0ggPT0gRU1fUFBDIGFuZCBFTEZfQ0xBU1MgPT0gRUxGQ0xBU1MzMiAqLwogICB0eXBlZGVmIGVsZl9ncmVnX3QzMiBlbGZfZ3JlZ190OwogICB0eXBlZGVmIGVsZl9ncmVnc2V0X3QzMiBlbGZfZ3JlZ3NldF90OwotIyBkZWZpbmUgZWxmX2FkZHJfdCB1MzIKKyMgZGVmaW5lIGVsZl9hZGRyX3QgX191MzIKICNlbmRpZiAvKiBFTEZfQVJDSCAqLwogCiAvKiBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KQEAgLTE2MSw2ICsxNjEsNyBAQAogdHlwZWRlZiBlbGZfdnJyZWdfdCBlbGZfdnJyZWdzZXRfdDMyW0VMRl9OVlJSRUczMl07CiAjZW5kaWYKIAorI2lmZGVmIF9fS0VSTkVMX18KIC8qCiAgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgogICovCkBAIC0xNzYsOCArMTc3LDYgQEAKIAogI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgICAgICAgICAoMHgwODAwMDAwMCkKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogLyogQ29tbW9uIHJvdXRpbmUgZm9yIGJvdGggMzItYml0IGFuZCA2NC1iaXQgcHJvY2Vzc2VzICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcHBjX2VsZl9jb3JlX2NvcHlfcmVncyhlbGZfZ3JlZ3NldF90IGVsZl9yZWdzLAogCQkJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mbG9wcHkuaAppbmRleCA2MDgxNjRjLi43ZTJkMTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZmxvcHB5LmgKQEAgLTExLDcgKzExLDYgQEAKICNkZWZpbmUgX19BU01fUE9XRVJQQ19GTE9QUFlfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKICNkZWZpbmUgZmRfaW5iKHBvcnQpCQlpbmJfcChwb3J0KQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHdfaXJxLmgKaW5kZXggMjZiODlkOC4uY2UwZjdkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2h3X2lycS5oCkBAIC02LDcgKzYsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaWRlLmgKaW5kZXggZGE1ZjY0MC4uYjA5YjQyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oCkBAIC0yMiw3ICsyMiw2IEBACiAjZW5kaWYKIAogI2lmbmRlZiAgX19wb3dlcnBjNjRfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKaW5kZXggMThjYTI5ZS4uMmFjZjdiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaApAQCAtMjIsNyArMjIsNiBAQAogI2RlZmluZSBfQVNNX0lPTU1VX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKaW5kZXggN2JjNmQ3My4uMWU5ZjI1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCkBAIC05LDcgKzksNiBAQAogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXNlcmllc19pby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2lzZXJpZXNfaW8uaAppbmRleCA0OTZhYTg1Li5mMjkwMDliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXNlcmllc19pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pc2VyaWVzX2lvLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lTRVJJRVNfSU9fSAogI2RlZmluZSBfQVNNX1BPV0VSUENfSVNFUklFU19JU0VSSUVTX0lPX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKaW5kZXggMGY5MjU0Yy4uM2U3ZDM3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tYWNoZGVwLmgKQEAgLTksNyArOSw2IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW16b25lLmgKaW5kZXggODhkNzBiYS4uZDQ4NGNhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL21tem9uZS5oCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBfQVNNX01NWk9ORV9IXwogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogZ2VuZXJpYyBub24tbGluZWFyIG1lbW9yeSBzdXBwb3J0OgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAppbmRleCA3MDYzMjVmLi4zYzZmNjQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaApAQCAtMTYsNyArMTYsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfUEFDQV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZQk8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZQk8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZQk8YXNtL2xwcGFjYS5oPgogI2luY2x1ZGUJPGFzbS9tbXUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKaW5kZXggMmZiZWNlYi4uZjA0NjliOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKQEAgLTExLDcgKzExLDYgQEAKICAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oCmluZGV4IGU5ZjFmNDYuLjk2NGUzMTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcGd0YWJsZS5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBGb3IgVEFTS19TSVpFICovCiAjaW5jbHVkZSA8YXNtL21tdS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGNfYXNtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAppbmRleCBkZDFjMGE5Li5hOTQwY2ZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BwY19hc20uaApAQCAtNSw3ICs1LDYgQEAKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1BQQ19BU01fSAogCiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKaW5kZXggOTdlZjFjZC4uZjRlMmNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9tLmgKQEAgLTE1LDcgKzE1LDYgQEAKICAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgogICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc21wLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtcC5oCmluZGV4IDRhNzE2ZjcuLjA2OGYxMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXAuaApAQCAtMTcsNyArMTcsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfU01QX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc211LmgKaW5kZXggMmRjOTM2My4uNTFlNjVmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtdS5oCkBAIC01LDcgKzUsNiBAQAogICogRGVmaW5pdGlvbnMgZm9yIHRhbGtpbmcgdG8gdGhlIFNNVSBjaGlwIGluIG5ld2VyIEc1IFBvd2VyTWFjcwogICovCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaAppbmRleCA3Y2ZjZmYzLi45NTcxM2YzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKQEAgLTI0LDcgKzI0LDYgQEAKICNkZWZpbmUgX1NQVV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva3JlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RocmVhZF9pbmZvLmgKaW5kZXggODhiNTUzYy4uZDMzOWUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aHJlYWRfaW5mby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGhyZWFkX2luZm8uaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBUSFJFQURfU0laRQkJKDEgPDwgVEhSRUFEX1NISUZUKQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oCmluZGV4IDkxMjExOGQuLjQ0NjMxNDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZS5oCkBAIC0xNCw3ICsxNCw2IEBACiAjZGVmaW5lIF9fUE9XRVJQQ19USU1FX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmgKaW5kZXggYzAyZDE1YWMuLjNiOWE4ZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWV4LmgKQEAgLTcsNyArNyw2IEBACiAgKiBQb3dlclBDIGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KIAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTAyNDAwMCAvKiBVbmRlcmx5aW5nIEhaICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYi5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90bGIuaAppbmRleCA2MDFhNTNjLi40ZTJhODM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYi5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNkZWZpbmUgX0FTTV9QT1dFUlBDX1RMQl9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZuZGVmIF9fcG93ZXJwYzY0X18KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYmZsdXNoLmgKaW5kZXggYTI5OThlZS4uOTNjN2QwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiZmx1c2guaApAQCAtMTcsNyArMTcsNiBAQAogICovCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBtbV9zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdG9wb2xvZ3kuaAppbmRleCA4NzM2MmEwLi4xOWM1NzVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90b3BvbG9neS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfVE9QT0xPR1lfSAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3Qgc3lzX2RldmljZTsKIHN0cnVjdCBkZXZpY2Vfbm9kZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdHlwZXMuaAppbmRleCBiYWFiYmE5Li5kNmZiNTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90eXBlcy5oCkBAIC02NCw3ICs2NCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBzaWduZWQgY2hhciBzODsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3VuaXN0ZC5oCmluZGV4IGVkZGUyNDYuLmViNjZlYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy91bmlzdGQuaApAQCAtMzI0LDEyICszMjQsMTIgQEAKICNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMjk5CiAjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CTMwMAogCisjaWZkZWYgX19LRVJORUxfXworCiAjZGVmaW5lIF9fTlJfc3lzY2FsbHMJCTMwMQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX05SX19leGl0IF9fTlJfZXhpdAogI2RlZmluZSBOUl9zeXNjYWxscwlfX05SX3N5c2NhbGxzCi0jZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtNDQxLDkgKzQ0MSw3IEBACiAJX19zeXNjYWxsX25yKDYsIHR5cGUsIG5hbWUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOyBcCiB9CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpAQCAtNDk5LDggKzQ5Nyw4IEBACiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQuIiAjeCAiXG5cdC5zZXRcdC4iICN4ICIsLnN5c19uaV9zeXNjYWxsIikKICNlbmRpZgogCi0jZW5kaWYJCS8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCQkvKiBfX0FTU0VNQkxZX18gKi8KKyNlbmRpZgkJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYgLyogX0FTTV9QUENfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3ZnYS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92Z2EuaAppbmRleCBmOGQzNTBhLi5lYWRhZjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3ZnYS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdmdhLmgKQEAgLTEyLDcgKzEyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19WR0FfQ09OU09MRSkgfHwgZGVmaW5lZChDT05GSUdfTURBX0NPTlNPTEUpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdmlvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3Zpby5oCmluZGV4IDA1NDRlY2UuLmJlMTRjNTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdmlvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92aW8uaApAQCAtMTUsNyArMTUsNiBAQAogI2RlZmluZSBfQVNNX1BPV0VSUENfVklPX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9hbWlnYWh3LmggYi9pbmNsdWRlL2FzbS1wcGMvYW1pZ2Fody5oCmluZGV4IDhjOTg5NDUuLjkwZmQxMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9hbWlnYWh3LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL2FtaWdhaHcuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX19BU01QUENfQU1JR0FIV19ICiAjZGVmaW5lIF9fQVNNUFBDX0FNSUdBSFdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtLW02OGsvYW1pZ2Fody5oPgogCiAjdW5kZWYgQ0hJUF9QSFlTQUREUgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2Jvb3RpbmZvLmggYi9pbmNsdWRlL2FzbS1wcGMvYm9vdGluZm8uaAppbmRleCA5M2Q5NTVjLi4yYWNlNGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvYm9vdGluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvYm9vdGluZm8uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX1BQQ19CT09USU5GT19ICiAjZGVmaW5lIF9QUENfQk9PVElORk9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0FQVVMpICYmICFkZWZpbmVkKF9fQk9PVEVSX18pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvY29tbXByb2MuaCBiL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCmluZGV4IDMxZjM2MjkuLjMyNDdiZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9jb21tcHJvYy5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQ1BNXzhYWF9fCiAjZGVmaW5lIF9fQ1BNXzhYWF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vOHh4X2ltbWFwLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDAzLmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDAzLmgKaW5kZXggYmY2ZWZhMC4uYzljNWQ1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2libTQwMy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00MDMuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfX0FTTV9JQk00MDNfSF9fCiAjZGVmaW5lIF9fQVNNX0lCTTQwM19IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfNDAzR0NYKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNDR4LmgKaW5kZXggM2FjYzM4Mi4uNzgxOGI1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2libTQ0eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00NHguaApAQCAtMTcsNyArMTcsNiBAQAogI2lmbmRlZiBfX0FTTV9JQk00NHhfSF9fCiAjZGVmaW5lIF9fQVNNX0lCTTQ0eF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIE5SX0JPQVJEX0lSUVMKICNkZWZpbmUgTlJfQk9BUkRfSVJRUyAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmggYi9pbmNsdWRlL2FzbS1wcGMvaWJtNHh4LmgKaW5kZXggMzhmOTk3MS4uY2Y2MmI2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2libTR4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9pYm00eHguaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfX0FTTV9JQk00WFhfSF9fCiAjZGVmaW5lIF9fQVNNX0lCTTRYWF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAjaWZkZWYgQ09ORklHXzQweApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2lvLmggYi9pbmNsdWRlL2FzbS1wcGMvaW8uaAppbmRleCBiOTE5ZDhmLi44OWM2ZjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW8uaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX1BQQ19JT19ICiAjZGVmaW5lIF9QUENfSU9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21hY2hkZXAuaCBiL2luY2x1ZGUvYXNtLXBwYy9tYWNoZGVwLmgKaW5kZXggZTFhMGE3Yi4uZGE3NzQ2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21hY2hkZXAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbWFjaGRlcC5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfUFBDX01BQ0hERVBfSAogI2RlZmluZSBfUFBDX01BQ0hERVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tbXUuaCBiL2luY2x1ZGUvYXNtLXBwYy9tbXUuaAppbmRleCA5MjA1ZGI0Li4wYTcwYjA1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21tdS5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfUFBDX01NVV9IXwogI2RlZmluZSBfUFBDX01NVV9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20tcHBjL21tdV9jb250ZXh0LmgKaW5kZXggNGYxNTJjYy4uOTRmMmJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL21tdV9jb250ZXh0LmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9fUFBDX01NVV9DT05URVhUX0gKICNkZWZpbmUgX19QUENfTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaAppbmRleCA2YmE2OWE4Li40YjkzNDgxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwLmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQVNNX1BQQ19NUEM4MjYwX0hfXwogI2RlZmluZSBfX0FTTV9QUENfTVBDODI2MF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHXzgyNjAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4M3h4LmgKaW5kZXggM2MyM2ZjNC4uMDJlZDJjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzgzeHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjODN4eC5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX01QQzgzeHhfSF9fCiAjZGVmaW5lIF9fQVNNX01QQzgzeHhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKICNpZmRlZiBDT05GSUdfODN4eApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaCBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4NXh4LmgKaW5kZXggZjQ3MDAyYS4uYzI1YmRkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzg1eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjODV4eC5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fQVNNX01QQzg1eHhfSF9fCiAjZGVmaW5lIF9fQVNNX01QQzg1eHhfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAKICNpZmRlZiBDT05GSUdfODV4eApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCmluZGV4IDM1MTVhN2YuLmFkY2NlMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKQEAgLTgsNyArOCw2IEBACiAjaWZuZGVmIF9fQ09ORklHXzh4eF9ERUZTCiAjZGVmaW5lIF9fQ09ORklHXzh4eF9ERUZTCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR184eHgKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaCBiL2luY2x1ZGUvYXNtLXBwYy9tdjY0eDYwLmgKaW5kZXggNGYyNDA1Yi4uNjYzZWRiZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL212NjR4NjAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXY2NHg2MC5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9vY3AuaCBiL2luY2x1ZGUvYXNtLXBwYy9vY3AuaAppbmRleCA5ODMxMTZmLi4zYmU1ZDc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvb2NwLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL29jcC5oCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmZzX2ZzX2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvb3Blbl9waWMuaCBiL2luY2x1ZGUvYXNtLXBwYy9vcGVuX3BpYy5oCmluZGV4IGVjMmY0NjYuLmE0ZmU5NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9vcGVuX3BpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9vcGVuX3BpYy5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9QUENfS0VSTkVMX09QRU5fUElDX0gKICNkZWZpbmUgX1BQQ19LRVJORUxfT1BFTl9QSUNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNkZWZpbmUgT1BFTlBJQ19TSVpFCTB4NDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGFnZS5oCmluZGV4IDBmYjY4YTAuLjBiMTlhZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1BQQ19QQUdFX0gKICNkZWZpbmUgX1BQQ19QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCkBAIC0xNSw3ICsxNCw2IEBACiAjZGVmaW5lIFBBR0VfTUFTSwkofigoMSA8PCBQQUdFX1NISUZUKSAtIDEpKQogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBUaGlzIG11c3QgbWF0Y2ggd2hhdCBpcyBpbiBhcmNoL3BwYy9NYWtlZmlsZSAqLwogI2RlZmluZSBQQUdFX09GRlNFVAlDT05GSUdfS0VSTkVMX1NUQVJUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGNfc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1wcGMvcGNfc2VyaWFsLmgKaW5kZXggOGY5OTRmOS4uODFhMmQwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3BjX3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wY19zZXJpYWwuaApAQCAtOSw3ICs5LDYgQEAKICAqIGFueW9uZSB1c2luZyBhbnkgb2YgdGhvc2Ugb24gYSBQUEMgcGxhdGZvcm0uICAtLSBwYXVsdXMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGlzIGFzc3VtZXMgeW91IGhhdmUgYSAxLjg0MzIgTUh6IGNsb2NrIGZvciB5b3VyIFVBUlQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcHBjL3BnYWxsb2MuaAppbmRleCBiZGVmZDFjLi40NGQ4OGE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wZ2FsbG9jLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9QUENfUEdBTExPQ19ICiAjZGVmaW5lIF9QUENfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKIGV4dGVybiB2b2lkIF9fYmFkX3B0ZShwbWRfdCAqcG1kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1wcGMvcGd0YWJsZS5oCmluZGV4IDU3MGIzNTUuLjljYjgzNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BndGFibGUuaApAQCAtNCw3ICs0LDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfZG1hLmggYi9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X2RtYS5oCmluZGV4IDQ2YTA4NmYuLjkzNWQxZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9kbWEuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfX0FTTVBQQ19QUEM0eHhfRE1BX0gKICNkZWZpbmUgX19BU01QUENfUFBDNHh4X0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vaWJtNHh4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X3BpYy5oIGIvaW5jbHVkZS9hc20tcHBjL3BwYzR4eF9waWMuaAppbmRleCBjMTZjN2Y4Li5lNDQyNjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcHBjNHh4X3BpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9wcGM0eHhfcGljLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYJX19QUEM0WFhfUElDX0hfXwogI2RlZmluZQlfX1BQQzRYWF9QSUNfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1wcGMvc2VyaWFsLmgKaW5kZXggYjc0YWY1NC4uOGE1OWY4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zZXJpYWwuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX19BU01fU0VSSUFMX0hfXwogI2RlZmluZSBfX0FTTV9TRVJJQUxfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0VWNjQyNjApCiAjaW5jbHVkZSA8cGxhdGZvcm1zL2V2NjQyNjAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXBwYy9zbXAuaAppbmRleCAzMGU5MjY4Li4wYjdmYTg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3NtcC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9QUENfU01QX0gKICNkZWZpbmUgX1BQQ19TTVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy90aW1lLmggYi9pbmNsdWRlL2FzbS1wcGMvdGltZS5oCmluZGV4IGM4NjExMjMuLmY3ZWFkZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3RpbWUuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19BU01fVElNRV9IX18KICNkZWZpbmUgX19BU01fVElNRV9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKaW5kZXggY2EwOTJmZi4uNGQyYjEyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCkBAIC0xMiw3ICsxMiw2IEBACiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTIsIExpbnVzIFRvcnZhbGRzCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvY21iLmggYi9pbmNsdWRlL2FzbS1zMzkwL2NtYi5oCmluZGV4IGRhZTFkZDQuLjJkMDk5NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvY21iLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9jbWIuaApAQCAtNDcsNyArNDcsNyBAQAogLyogcmVzZXQgY2hhbm5lbCBtZWFzdXJlbWVudCBibG9jayAqLwogI2RlZmluZSBCSU9EQVNEUkVTRVRDTUIJCV9JTyhEQVNEX0lPQ1RMX0xFVFRFUiwzNCkKIC8qIHJlYWQgY2hhbm5lbCBtZWFzdXJlbWVudCBkYXRhICovCi0jZGVmaW5lIEJJT0RBU0RSRUFEQ01CCQlfSU9XUihEQVNEX0lPQ1RMX0xFVFRFUiwzMix1NjQpCisjZGVmaW5lIEJJT0RBU0RSRUFEQ01CCQlfSU9XUihEQVNEX0lPQ1RMX0xFVFRFUiwzMixfX3U2NCkKIC8qIHJlYWQgY2hhbm5lbCBtZWFzdXJlbWVudCBkYXRhICovCiAjZGVmaW5lIEJJT0RBU0RSRUFEQUxMQ01CCV9JT1dSKERBU0RfSU9DVExfTEVUVEVSLDMzLHN0cnVjdCBjbWJkYXRhKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmggYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKaW5kZXggMjM0NTBlZC4uN2YxZWY5OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgREVCVUdfSAogI2RlZmluZSBERUJVR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCmluZGV4IDY3OTJjNTUuLmU4NGI3ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaGFyZGlycS5oCkBAIC0xMiw3ICsxMiw2IEBACiAjaWZuZGVmIF9fQVNNX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2lkYWxzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2lkYWxzLmgKaW5kZXggODAzODg1OC4uZTgyYzEwZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9pZGFscy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaWRhbHMuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfUzM5MF9JREFMU19ICiAjZGVmaW5lIF9TMzkwX0lEQUxTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbG9jYWwuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbG9jYWwuaAppbmRleCBjZjgxODkwLi44Njc0NWExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2xvY2FsLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9sb2NhbC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0xPQ0FMX0gKICNkZWZpbmUgX0FTTV9MT0NBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKaW5kZXggYmVhNzI3OS4uNTk2YzhiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9sb3djb3JlLmgKQEAgLTEyNCw3ICsxMjQsNiBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ3AuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGFnZS5oIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKaW5kZXggM2IxMTM4YS4uYjI2MjhkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wYWdlLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9TMzkwX1BBR0VfSAogI2RlZmluZSBfUzM5MF9QQUdFX0gKIAotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwpAQCAtMjAsNiArMTksNyBAQAogI2RlZmluZSBQQUdFX0RFRkFVTFRfS0VZCShQQUdFX0RFRkFVTFRfQUNDIDw8IDQpCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaWZuZGVmIF9fczM5MHhfXwpAQCAtMTg5LDkgKzE4OSw5IEBACiAjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKIAkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9TMzkwX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaAppbmRleCBlMjhhYWYyLi4zMDAyZmRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BnYWxsb2MuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfUzM5MF9QR0FMTE9DX0gKICNkZWZpbmUgX1MzOTBfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcG9zaXhfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcG9zaXhfdHlwZXMuaAppbmRleCA2MTc4OGRlLi5iOTRjOTg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3Bvc2l4X3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wb3NpeF90eXBlcy5oCkBAIC03NiwyNCArNzYsMzYgQEAKIH0gX19rZXJuZWxfZnNpZF90OwogCiAKLSNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpCisjaWZkZWYgX19LRVJORUxfXwogCi0jaWZuZGVmIF9TMzkwX0JJVE9QU19ICi0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgotI2VuZGlmCisjdW5kZWYgX19GRF9TRVQKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0ZEX1NFVCh1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlmZHNldHAtPmZkc19iaXRzW190bXBdIHw9ICgxVUw8PF9yZW0pOworfQogCi0jdW5kZWYgIF9fRkRfU0VUCi0jZGVmaW5lIF9fRkRfU0VUKGZkLGZkc2V0cCkgIHNldF9iaXQoKGZkKSwoZmRzZXRwKS0+ZmRzX2JpdHMpCisjdW5kZWYgX19GRF9DTFIKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX0ZEX0NMUih1bnNpZ25lZCBsb25nIGZkLCBfX2tlcm5lbF9mZF9zZXQgKmZkc2V0cCkKK3sKKwl1bnNpZ25lZCBsb25nIF90bXAgPSBmZCAvIF9fTkZEQklUUzsKKwl1bnNpZ25lZCBsb25nIF9yZW0gPSBmZCAlIF9fTkZEQklUUzsKKwlmZHNldHAtPmZkc19iaXRzW190bXBdICY9IH4oMVVMPDxfcmVtKTsKK30KIAotI3VuZGVmICBfX0ZEX0NMUgotI2RlZmluZSBfX0ZEX0NMUihmZCxmZHNldHApICBjbGVhcl9iaXQoKGZkKSwoZmRzZXRwKS0+ZmRzX2JpdHMpCi0KLSN1bmRlZiAgX19GRF9JU1NFVAotI2RlZmluZSBfX0ZEX0lTU0VUKGZkLGZkc2V0cCkgIHRlc3RfYml0KChmZCksKGZkc2V0cCktPmZkc19iaXRzKQorI3VuZGVmIF9fRkRfSVNTRVQKK3N0YXRpYyBpbmxpbmUgaW50IF9fRkRfSVNTRVQodW5zaWduZWQgbG9uZyBmZCwgY29uc3QgX19rZXJuZWxfZmRfc2V0ICpmZHNldHApCit7CisJdW5zaWduZWQgbG9uZyBfdG1wID0gZmQgLyBfX05GREJJVFM7CisJdW5zaWduZWQgbG9uZyBfcmVtID0gZmQgJSBfX05GREJJVFM7CisJcmV0dXJuIChmZHNldHAtPmZkc19iaXRzW190bXBdICYgKDFVTDw8X3JlbSkpICE9IDA7Cit9CiAKICN1bmRlZiAgX19GRF9aRVJPCi0jZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApIChtZW1zZXQgKChmZHNldHApLCAwLCBzaXplb2YoKihmZF9zZXQgKikoZmRzZXRwKSkpKQorI2RlZmluZSBfX0ZEX1pFUk8oZmRzZXRwKSBcCisJKCh2b2lkKSBtZW1zZXQgKChfX3B0cl90KSAoZmRzZXRwKSwgMCwgc2l6ZW9mIChfX2tlcm5lbF9mZF9zZXQpKSkKIAotI2VuZGlmICAgICAvKiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8ICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgKF9fR0xJQkNfXyA8IDIpKi8KKyNlbmRpZiAgICAgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCmluZGV4IGE5NDljYzAuLjRkNzVkNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaApAQCAtMTgxLDExICsxODEsOCBAQAogI2RlZmluZSBQVFJBQ0VfT0xEU0VUT1BUSU9OUyAgICAgICAgIDIxCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiB0eXBlZGVmIHVuaW9uCiB7CkBAIC0zMDEsNiArMjk4LDkgQEAKIH0gczM5MF9yZWdzOwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKIC8qCiAgKiBUaGUgcHRfcmVncyBzdHJ1Y3QgZGVmaW5lcyB0aGUgd2F5IHRoZSByZWdpc3RlcnMgYXJlIHN0b3JlZCBvbgogICogdGhlIHN0YWNrIGR1cmluZyBhIHN5c3RlbSBjYWxsLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zZnAtbWFjaGluZS5oIGIvaW5jbHVkZS9hc20tczM5MC9zZnAtbWFjaGluZS5oCmluZGV4IDNjNzliNTMuLmRlNjlkZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc2ZwLW1hY2hpbmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgX1NGUF9NQUNISU5FX0gKICNkZWZpbmUgX1NGUF9NQUNISU5FX0gKICAgIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIF9GUF9XX1RZUEVfU0laRQkJMzIKICNkZWZpbmUgX0ZQX1dfVFlQRQkJdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKaW5kZXggNDQ0ZGFlNS4uNjU3NjQ2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX1NNUF9ICiAjZGVmaW5lIF9fQVNNX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKaW5kZXggNmE4OWRiYi4uNzFhMDczMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmgKaW5kZXggMWJiNzNiMC4uNzNjZDg1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1MzOTBfVExCRkxVU0hfSAogI2RlZmluZSBfUzM5MF9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC90eXBlcy5oIGIvaW5jbHVkZS9hc20tczM5MC90eXBlcy5oCmluZGV4IDU3MzhhZDYzLi5hZTI5NTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC90eXBlcy5oCkBAIC01OCw3ICs1OCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBzaWduZWQgY2hhciBzODsKIHR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCmluZGV4IDQxYzI3OTIuLmUyMTQ0M2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaApAQCAtMzkyLDYgKzM5Miw4IEBACiAKICNlbmRpZgogCisjaWZkZWYgX19LRVJORUxfXworCiAvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyMjogc2VlIDxhc20tczM5MC9lcnJuby5oPiAqLwogCiAjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKQkJCSAgICAgXApAQCAtNTQ2LDcgKzU0OCw2IEBACiAJX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkgICAgIFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCkBAIC01NzMsMTEgKzU3NCw5IEBACiAjICAgZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQogIyAgIGRlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1JUX1NJR1NVU1BFTkQKICMgZW5kaWYKLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KQEAgLTYyNSw3ICs2MjQsNyBAQAogCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKIAotI2VuZGlmCisjZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwogCiAvKgogICogIkNvbmRpdGlvbmFsIiBzeXNjYWxscwpAQCAtNjM1LDQgKzYzNCw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUzM5MF9VTklTVERfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdnRvYy5oIGIvaW5jbHVkZS9hc20tczM5MC92dG9jLmgKaW5kZXggZDFkZTViNy4uM2E1MjY3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC92dG9jLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC92dG9jLmgKQEAgLTE3NywyNyArMTc3LDI3IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHZ0b2NfY21zX2xhYmVsIHsKLQl1OCBsYWJlbF9pZFs0XTsJCS8qIExhYmVsIGlkZW50aWZpZXIgKi8KLQl1OCB2b2xfaWRbNl07CQkvKiBWb2xpZCAqLwotCXUxNiB2ZXJzaW9uX2lkOwkJLyogVmVyc2lvbiBpZGVudGlmaWVyICovCi0JdTMyIGJsb2NrX3NpemU7CQkvKiBEaXNrIGJsb2NrIHNpemUgKi8KLQl1MzIgb3JpZ2luX3B0cjsJCS8qIERpc2sgb3JpZ2luIHBvaW50ZXIgKi8KLQl1MzIgdXNhYmxlX2NvdW50OwkvKiBOdW1iZXIgb2YgdXNhYmxlIGN5bGluZGVycy9ibG9ja3MgKi8KLQl1MzIgZm9ybWF0dGVkX2NvdW50OwkvKiBNYXhpbXVtIG51bWJlciBvZiBmb3JtYXR0ZWQgY3lsaW5kZXJzLworCV9fdTggbGFiZWxfaWRbNF07CQkvKiBMYWJlbCBpZGVudGlmaWVyICovCisJX191OCB2b2xfaWRbNl07CQkvKiBWb2xpZCAqLworCV9fdTE2IHZlcnNpb25faWQ7CQkvKiBWZXJzaW9uIGlkZW50aWZpZXIgKi8KKwlfX3UzMiBibG9ja19zaXplOwkJLyogRGlzayBibG9jayBzaXplICovCisJX191MzIgb3JpZ2luX3B0cjsJCS8qIERpc2sgb3JpZ2luIHBvaW50ZXIgKi8KKwlfX3UzMiB1c2FibGVfY291bnQ7CS8qIE51bWJlciBvZiB1c2FibGUgY3lsaW5kZXJzL2Jsb2NrcyAqLworCV9fdTMyIGZvcm1hdHRlZF9jb3VudDsJLyogTWF4aW11bSBudW1iZXIgb2YgZm9ybWF0dGVkIGN5bGluZGVycy8KIAkJCQkgKiBibG9ja3MgKi8KLQl1MzIgYmxvY2tfY291bnQ7CS8qIERpc2sgc2l6ZSBpbiBDTVMgYmxvY2tzICovCi0JdTMyIHVzZWRfY291bnQ7CQkvKiBOdW1iZXIgb2YgQ01TIGJsb2NrcyBpbiB1c2UgKi8KLQl1MzIgZnN0X3NpemU7CQkvKiBGaWxlIFN0YXR1cyBUYWJsZSAoRlNUKSBzaXplICovCi0JdTMyIGZzdF9jb3VudDsJCS8qIE51bWJlciBvZiBGU1RzIHBlciBDTVMgYmxvY2sgKi8KLQl1OCBmb3JtYXRfZGF0ZVs2XTsJLyogRGlzayBGT1JNQVQgZGF0ZSAqLwotCXU4IHJlc2VydmVkMVsyXTsKLQl1MzIgZGlza19vZmZzZXQ7CS8qIERpc2sgb2Zmc2V0IHdoZW4gcmVzZXJ2ZWQqLwotCXUzMiBtYXBfYmxvY2s7CQkvKiBBbGxvY2F0aW9uIE1hcCBCbG9jayB3aXRoIG5leHQgaG9sZSAqLwotCXUzMiBoYmxrX2Rpc3A7CQkvKiBEaXNwbGFjZW1lbnQgaW50byBIQkxLIGRhdGEgb2YgbmV4dCBob2xlICovCi0JdTMyIHVzZXJfZGlzcDsJCS8qIERpc3BsYWNlbWVudCBpbnRvIHVzZXIgcGFydCBvZiBBbGxvY2F0aW9uCisJX191MzIgYmxvY2tfY291bnQ7CS8qIERpc2sgc2l6ZSBpbiBDTVMgYmxvY2tzICovCisJX191MzIgdXNlZF9jb3VudDsJCS8qIE51bWJlciBvZiBDTVMgYmxvY2tzIGluIHVzZSAqLworCV9fdTMyIGZzdF9zaXplOwkJLyogRmlsZSBTdGF0dXMgVGFibGUgKEZTVCkgc2l6ZSAqLworCV9fdTMyIGZzdF9jb3VudDsJCS8qIE51bWJlciBvZiBGU1RzIHBlciBDTVMgYmxvY2sgKi8KKwlfX3U4IGZvcm1hdF9kYXRlWzZdOwkvKiBEaXNrIEZPUk1BVCBkYXRlICovCisJX191OCByZXNlcnZlZDFbMl07CisJX191MzIgZGlza19vZmZzZXQ7CS8qIERpc2sgb2Zmc2V0IHdoZW4gcmVzZXJ2ZWQqLworCV9fdTMyIG1hcF9ibG9jazsJCS8qIEFsbG9jYXRpb24gTWFwIEJsb2NrIHdpdGggbmV4dCBob2xlICovCisJX191MzIgaGJsa19kaXNwOwkJLyogRGlzcGxhY2VtZW50IGludG8gSEJMSyBkYXRhIG9mIG5leHQgaG9sZSAqLworCV9fdTMyIHVzZXJfZGlzcDsJCS8qIERpc3BsYWNlbWVudCBpbnRvIHVzZXIgcGFydCBvZiBBbGxvY2F0aW9uCiAJCQkJICogbWFwICovCi0JdTggcmVzZXJ2ZWQyWzRdOwotCXU4IHNlZ21lbnRfbmFtZVs4XTsJLyogTmFtZSBvZiBzaGFyZWQgc2VnbWVudCAqLworCV9fdTggcmVzZXJ2ZWQyWzRdOworCV9fdTggc2VnbWVudF9uYW1lWzhdOwkvKiBOYW1lIG9mIHNoYXJlZCBzZWdtZW50ICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2VuZGlmIC8qIF9BU01fUzM5MF9WVE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvejkwY3J5cHQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvejkwY3J5cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWEyNDM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tczM5MC96OTBjcnlwdC5oCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogIGluY2x1ZGUvYXNtLXMzOTAvejkwY3J5cHQuaAorICoKKyAqICB6OTBjcnlwdCAxLjMuMyAodXNlci12aXNpYmxlIGhlYWRlcikKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMKKyAqICAgICAgICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKKyAqCisgKiAgSG90cGx1ZyAmIG1pc2MgZGV2aWNlIHN1cHBvcnQ6IEpvY2hlbiBSb2VocmlnIChyb2VocmlnQGRlLmlibS5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fQVNNX1MzOTBfWjkwQ1JZUFRfSAorI2RlZmluZSBfX0FTTV9TMzkwX1o5MENSWVBUX0gKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIHo5MGNyeXB0X1ZFUlNJT04gMQorI2RlZmluZSB6OTBjcnlwdF9SRUxFQVNFIDMJLy8gMiA9IFBDSVhDQywgMyA9IHJld3JpdGUgZm9yIGNvZGluZyBzdGFuZGFyZHMKKyNkZWZpbmUgejkwY3J5cHRfVkFSSUFOVCAzCS8vIDMgPSBDRVgyQSBzdXBwb3J0CisKKy8qKgorICogc3RydWN0IGljYV9yc2FfbW9kZXhwbworICoKKyAqIFJlcXVpcmVtZW50czoKKyAqIC0gb3V0cHV0ZGF0YWxlbmd0aCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyBpbnB1dGRhdGFsZW5ndGguCisgKiAtIEFsbCBrZXkgcGFydHMgYXJlIHJpZ2h0IGp1c3RpZmllZCBpbiB0aGVpciBmaWVsZHMsIHBhZGRlZCBvbgorICogICB0aGUgbGVmdCB3aXRoIHplcm9lcy4KKyAqIC0gbGVuZ3RoKGJfa2V5KSA9IGlucHV0ZGF0YWxlbmd0aAorICogLSBsZW5ndGgobl9tb2R1bHVzKSA9IGlucHV0ZGF0YWxlbmd0aAorICovCitzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvIHsKKwljaGFyIF9fdXNlciAqCWlucHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOworCWNoYXIgX191c2VyICoJb3V0cHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKKwljaGFyIF9fdXNlciAqCWJfa2V5OworCWNoYXIgX191c2VyICoJbl9tb2R1bHVzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydAorICoKKyAqIFJlcXVpcmVtZW50czoKKyAqIC0gaW5wdXRkYXRhbGVuZ3RoIGlzIGV2ZW4uCisgKiAtIG91dHB1dGRhdGFsZW5ndGggaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgaW5wdXRkYXRhbGVuZ3RoLgorICogLSBBbGwga2V5IHBhcnRzIGFyZSByaWdodCBqdXN0aWZpZWQgaW4gdGhlaXIgZmllbGRzLCBwYWRkZWQgb24KKyAqICAgdGhlIGxlZnQgd2l0aCB6ZXJvZXMuCisgKiAtIGxlbmd0aChicF9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4CisgKiAtIGxlbmd0aChicV9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIKKyAqIC0gbGVuZ3RoKG5wX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMiArIDgKKyAqIC0gbGVuZ3RoKG5xX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMgorICogLSBsZW5ndGgodV9tdWx0X2ludikgPSBpbnB1dGRhdGFsZW5ndGgvMiArIDgKKyAqLworc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgeworCWNoYXIgX191c2VyICoJaW5wdXRkYXRhOworCXVuc2lnbmVkIGludAlpbnB1dGRhdGFsZW5ndGg7CisJY2hhciBfX3VzZXIgKglvdXRwdXRkYXRhOworCXVuc2lnbmVkIGludAlvdXRwdXRkYXRhbGVuZ3RoOworCWNoYXIgX191c2VyICoJYnBfa2V5OworCWNoYXIgX191c2VyICoJYnFfa2V5OworCWNoYXIgX191c2VyICoJbnBfcHJpbWU7CisJY2hhciBfX3VzZXIgKglucV9wcmltZTsKKwljaGFyIF9fdXNlciAqCXVfbXVsdF9pbnY7Cit9OworCisjZGVmaW5lIFo5MF9JT0NUTF9NQUdJQyAneicgIC8vIE5PVEU6ICBOZWVkIHRvIGFsbG9jYXRlIGZyb20gbGludXggZm9sa3MKKworLyoqCisgKiBJbnRlcmZhY2Ugbm90ZXM6CisgKgorICogVGhlIGlvY3RsKClzIHdoaWNoIGFyZSBpbXBsZW1lbnRlZCAoYWxvbmcgd2l0aCByZWxldmFudCBkZXRhaWxzKQorICogYXJlOgorICoKKyAqICAgSUNBUlNBTU9ERVhQTworICogICAgIFBlcmZvcm0gYW4gUlNBIG9wZXJhdGlvbiB1c2luZyBhIE1vZHVsdXMtRXhwb25lbnQgcGFpcgorICogICAgIFRoaXMgdGFrZXMgYW4gaWNhX3JzYV9tb2RleHBvIHN0cnVjdCBhcyBpdHMgYXJnLgorICoKKyAqICAgICBOT1RFOiBwbGVhc2UgcmVmZXIgdG8gdGhlIGNvbW1lbnRzIHByZWNlZGluZyB0aGlzIHN0cnVjdHVyZQorICogICAgICAgICAgIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZQorICogICAgICAgICAgIGJsb2NrCisgKgorICogICBJQ0FSU0FDUlQKKyAqICAgICBQZXJmb3JtIGFuIFJTQSBvcGVyYXRpb24gdXNpbmcgYSBDaGluZXNlLVJlbWFpbmRlciBUaGVvcmVtIGtleQorICogICAgIFRoaXMgdGFrZXMgYW4gaWNhX3JzYV9tb2RleHBvX2NydCBzdHJ1Y3QgYXMgaXRzIGFyZy4KKyAqCisgKiAgICAgTk9URTogcGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyBzdHJ1Y3R1cmUKKyAqICAgICAgICAgICBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUKKyAqICAgICAgICAgICBibG9jaworICoKKyAqICAgWjkwU1RBVF9UT1RBTENPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIGRldmljZSB0eXBlcyB0b2dldGhlci4KKyAqCisgKiAgIFo5MFNUQVRfUENJQ0FDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lDQXMuCisgKgorICogICBaOTBTVEFUX1BDSUNDQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0NzLgorICoKKyAqICAgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgTUNMMiBQQ0lYQ0NzLgorICoKKyAqICAgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgTUNMMyBQQ0lYQ0NzLgorICoKKyAqICAgWjkwU1RBVF9DRVgyQ0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIENFWDJDcy4KKyAqCisgKiAgIFo5MFNUQVRfQ0VYMkFDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQXMuCisgKgorICogICBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdhaXRpbmcgdG8gYmUKKyAqICAgICBzZW50IHRvIGEgZGV2aWNlLgorICoKKyAqICAgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBzZW50IHRvIGEKKyAqICAgICBkZXZpY2UgYXdhaXRpbmcgdGhlIHJlcGx5LgorICoKKyAqICAgWjkwU1RBVF9UT1RBTE9QRU5fQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZSBoYW5kbGVzLgorICoKKyAqICAgWjkwU1RBVF9ET01BSU5fSU5ERVgKKyAqICAgICBSZXR1cm4gdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIENyeXB0b2dyYXBoaWMgRG9tYWluLgorICoKKyAqICAgWjkwU1RBVF9TVEFUVVNfTUFTSworICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIGZvciB0aGUgc3RhdHVzIG9mCisgKiAgICAgYWxsIGRldmljZXMuCisgKiAgICAgICAweDAxOiBQQ0lDQQorICogICAgICAgMHgwMjogUENJQ0MKKyAqICAgICAgIDB4MDM6IFBDSVhDQ19NQ0wyCisgKiAgICAgICAweDA0OiBQQ0lYQ0NfTUNMMworICogICAgICAgMHgwNTogQ0VYMkMKKyAqICAgICAgIDB4MDY6IENFWDJBCisgKiAgICAgICAweDBkOiBkZXZpY2UgaXMgZGlzYWJsZWQgdmlhIHRoZSBwcm9jIGZpbGVzeXN0ZW0KKyAqCisgKiAgIFo5MFNUQVRfUURFUFRIX01BU0sKKyAqICAgICBSZXR1cm4gYW4gNjQgZWxlbWVudCBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyBmb3IgdGhlIHF1ZXVlCisgKiAgICAgZGVwdGggb2YgYWxsIGRldmljZXMuCisgKgorICogICBaOTBTVEFUX1BFUkRFVl9SRVFDTlQKKyAqICAgICBSZXR1cm4gYW4gNjQgZWxlbWVudCBhcnJheSBvZiB1bnNpZ25lZCBpbnRlZ2VycyBmb3IgdGhlIG51bWJlcgorICogICAgIG9mIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdHMgcGVyIGRldmljZSBzaW5jZSB0aGUgZGV2aWNlCisgKiAgICAgd2FzIGRldGVjdGVkIGFuZCBtYWRlIGF2YWlsYWJsZS4KKyAqCisgKiAgIElDQVo5MFNUQVRVUyAoZGVwcmVjYXRlZCkKKyAqICAgICBSZXR1cm4gc29tZSBkZXZpY2UgZHJpdmVyIHN0YXR1cyBpbiBhIGljYV96OTBfc3RhdHVzIHN0cnVjdAorICogICAgIFRoaXMgdGFrZXMgYW4gaWNhX3o5MF9zdGF0dXMgc3RydWN0IGFzIGl0cyBhcmcuCisgKgorICogICAgIE5PVEU6IHRoaXMgaW9jdGwoKSBpcyBkZXByZWNhdGVkLCBhbmQgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aAorICogICAgICAgICAgIHNpbmdsZSBpb2N0bCgpcyBmb3IgZWFjaCB0eXBlIG9mIHN0YXR1cyBiZWluZyByZXF1ZXN0ZWQKKyAqCisgKiAgIFo5MFNUQVRfUENJWENDQ09VTlQgKGRlcHJlY2F0ZWQpCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSVhDQ3MgKE1DTDIgKyBNQ0wzKS4KKyAqICAgICBUaGlzIGlzIERFUFJFQ0FURUQgbm93IHRoYXQgTUNMMyBQQ0lYQ0NzIGFyZSB0cmVhdGVkIGRpZmZlcmVudGx5IGZyb20KKyAqICAgICBNQ0wyIFBDSVhDQ3MuCisgKgorICogICBaOTBRVUlFU0NFIChub3QgcmVjb21tZW5kZWQpCisgKiAgICAgUXVpZXNjZSB0aGUgZHJpdmVyLiAgVGhpcyBpcyBpbnRlbmRlZCB0byBzdG9wIGFsbCBuZXcKKyAqICAgICByZXF1ZXN0cyBmcm9tIGJlaW5nIHByb2Nlc3NlZC4gIEl0cyB1c2UgaXMgTk9UIHJlY29tbWVuZGVkLAorICogICAgIGV4Y2VwdCBpbiBjaXJjdW1zdGFuY2VzIHdoZXJlIHRoZXJlIGlzIG5vIG90aGVyIHdheSB0byBzdG9wCisgKiAgICAgY2FsbGVycyBmcm9tIGFjY2Vzc2luZyB0aGUgZHJpdmVyLiAgSXRzIG9yaWdpbmFsIHVzZSB3YXMgdG8KKyAqICAgICBhbGxvdyB0aGUgZHJpdmVyIHRvIGJlICJkcmFpbmVkIiBvZiB3b3JrIGluIHByZXBhcmF0aW9uIGZvcgorICogICAgIGEgc3lzdGVtIHNodXRkb3duLgorICoKKyAqICAgICBOT1RFOiBvbmNlIGlzc3VlZCwgdGhpcyBiYW4gb24gbmV3IHdvcmsgY2Fubm90IGJlIHVuZG9uZQorICogICAgICAgICAgIGV4Y2VwdCBieSB1bmxvYWRpbmcgYW5kIHJlbG9hZGluZyB0aGUgZHJpdmVyLgorICovCisKKy8qKgorICogU3VwcG9ydGVkIGlvY3RsIGNhbGxzCisgKi8KKyNkZWZpbmUgSUNBUlNBTU9ERVhQTwlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBaOTBfSU9DVExfTUFHSUMsIDB4MDUsIDApCisjZGVmaW5lIElDQVJTQUNSVAlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBaOTBfSU9DVExfTUFHSUMsIDB4MDYsIDApCisKKy8qIERFUFJFQ0FURUQgc3RhdHVzIGNhbGxzIChib3VuZCBmb3IgcmVtb3ZhbCBhdCBzb21lIHBvaW50KSAqLworI2RlZmluZSBJQ0FaOTBTVEFUVVMJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4MTAsIHN0cnVjdCBpY2FfejkwX3N0YXR1cykKKyNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MywgaW50KQorCisvKiB1bnJlbGF0ZWQgdG8gSUNBIGNhbGxlcnMgKi8KKyNkZWZpbmUgWjkwUVVJRVNDRQlfSU8oWjkwX0lPQ1RMX01BR0lDLCAweDExKQorCisvKiBOZXcgc3RhdHVzIGNhbGxzICovCisjZGVmaW5lIFo5MFNUQVRfVE9UQUxDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MCwgaW50KQorI2RlZmluZSBaOTBTVEFUX1BDSUNBQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDEsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QQ0lDQ0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQyLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRiLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRjLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfQ0VYMkNDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0ZCwgaW50KQorI2RlZmluZSBaOTBTVEFUX0NFWDJBQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGUsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NCwgaW50KQorI2RlZmluZSBaOTBTVEFUX1BFTkRJTkdRX0NPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ1LCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UIF9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ2LCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfRE9NQUlOX0lOREVYCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ3LCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfU1RBVFVTX01BU0sJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDgsIGNoYXJbNjRdKQorI2RlZmluZSBaOTBTVEFUX1FERVBUSF9NQVNLCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ5LCBjaGFyWzY0XSkKKyNkZWZpbmUgWjkwU1RBVF9QRVJERVZfUkVRQ05UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRhLCBpbnRbNjRdKQorCisjZW5kaWYgLyogX19BU01fUzM5MF9aOTBDUllQVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9idWcuaCBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCmluZGV4IDcwNTA4YTMuLjFiNGZjNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2J1Zy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9CVUdfSAogI2RlZmluZSBfX0FTTV9TSF9CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfQlVHCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaCBiL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKaW5kZXggNWViZDBmMi4uZmEwM2IzMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCkBAIC05LDcgKzksNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IEtheiBLb2ppbWEgJiBOaWliZSBZdXRha2EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaAppbmRleCA0OGYxZjQyLi4xMjQ5NjhmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9kbWEtbWFwcGluZy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9TSF9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9fQVNNX1NIX0RNQV9NQVBQSU5HX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oIGIvaW5jbHVkZS9hc20tc2gvZG1hLmgKaW5kZXggYTExOGEwZDQuLmU2MmE2ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RtYS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lIF9fQVNNX1NIX0RNQV9ICiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXNoL2ZpeG1hcC5oCmluZGV4IDUwOTIyNGIuLjQxMmJjY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2ZpeG1hcC5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9BU01fRklYTUFQX0gKICNkZWZpbmUgX0FTTV9GSVhNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpZmRlZiBDT05GSUdfSElHSE1FTQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaGFyZGlycS5oIGIvaW5jbHVkZS9hc20tc2gvaGFyZGlycS5oCmluZGV4IGYyZmRmMGYuLjcxNWVlMjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NIX0hBUkRJUlFfSAogI2RlZmluZSBfX0FTTV9TSF9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS9oZDY0NDYxLmggYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaAppbmRleCBjNDU3Y2EyLi44N2YxM2QyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaApAQCAtNSw3ICs1LDYgQEAKICAqCUNvcHlyaWdodCAoQykgMjAwMCBZQUVHQVNISSBUYWtlc2hpCiAgKglIaXRhY2hpIEhENjQ0NjEgY29tcGFuaW9uIGNoaXAgc3VwcG9ydAogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIENvbnN0YW50cyBmb3IgUENNQ0lBIG1hcHBpbmdzICovCiAjZGVmaW5lIEhENjQ0NjFfUENDX1dJTkRPVwkweDAxMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDY1L2hkNjQ0NjUuaCBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjUvaGQ2NDQ2NS5oCmluZGV4IGM2NzIwMzIuLmNmZDBlODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjUvaGQ2NDQ2NS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjUvaGQ2NDQ2NS5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKiBEZXJpdmVkIGZyb20gPGFzbS9oZDY0NDYxLmg+IHdoaWNoIGJvcmUgdGhlIG1lc3NhZ2U6CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgWUFFR0FTSEkgVGFrZXNoaQogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoL2lkZS5oCmluZGV4IDcxMWRhZDQuLjlmOGU5MTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lkZS5oCkBAIC0xNCw3ICsxNCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9pby5oCmluZGV4IDJjM2FmZTcuLjg5NGU2NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaW8uaApAQCAtMjMsNyArMjMsNiBAQAogICogIGluYiAgIGJ5IGRlZmF1bHQgZXhwYW5kcyB0byBfaW5iLCBidXQgdGhlIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBtYXkKICAqICAgICAgICBkZWZpbmUgaXQgdG8gX19pbmIgaWYgaXQgY2hvb3Nlcy4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9pcnEuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCmluZGV4IDQyYjgzOTQuLjYxMWU2N2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2lycS5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4JCS8qIGZvciBwdF9yZWdzICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2tleWJvYXJkLmggYi9pbmNsdWRlL2FzbS1zaC9rZXlib2FyZC5oCmluZGV4IDExMDNkZjAuLjMxZGNjNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2tleWJvYXJkLmgKKysrIGIvaW5jbHVkZS9hc20tc2gva2V5Ym9hcmQuaApAQCAtNSw3ICs1LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2QuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogCiAjaWZkZWYgQ09ORklHX1NIX01QQzEyMTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2ttYXBfdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoL2ttYXBfdHlwZXMuaAppbmRleCAyNDkyYmEwLi44NGQ1NjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9rbWFwX3R5cGVzLmgKKysrIGIvaW5jbHVkZS9hc20tc2gva21hcF90eXBlcy5oCkBAIC0zLDcgKzMsNiBAQAogCiAvKiBEdW1teSBoZWFkZXIganVzdCB0byBkZWZpbmUga21fdHlwZS4gKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KICMgZGVmaW5lIEQobikgX19LTV9GRU5DRV8jI24gLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbWFjaHZlYy5oIGIvaW5jbHVkZS9hc20tc2gvbWFjaHZlYy5oCmluZGV4IDU1MGM1MGEuLjU1MDUwMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9tYWNodmVjLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0FTTV9TSF9NQUNIVkVDX0gKICNkZWZpbmUgX0FTTV9TSF9NQUNIVkVDX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWNfaW5pdC5oIGIvaW5jbHVkZS9hc20tc2gvbWFjaHZlY19pbml0LmgKaW5kZXggOWU3ZGU4MC4uZTM5Nzc5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbWFjaHZlY19pbml0LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvbWFjaHZlY19pbml0LmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19TSF9NQUNIVkVDX0lOSVRfSAogI2RlZmluZSBfX1NIX01BQ0hWRUNfSU5JVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIEluIGEgR0VORVJJQyBrZXJuZWwsIHdlIGhhdmUgbG90cyBvZiB0aGVzZSB2ZWN0b3JzIGZsb2F0aW5nIGFib3V0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9kbWEuaCBiL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEvZG1hLmgKaW5kZXggMGEyZmRhYi4uZTUwNmQxYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2RtYS5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX01QQzEyMTFfRE1BX0gKICNkZWZpbmUgX0FTTV9NUEMxMjExX0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgkvKiBBbmQgc3BpbmxvY2tzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL292ZXJkcml2ZS5oIGIvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL292ZXJkcml2ZS5oCmluZGV4IGFhNjJhZTYuLmZjNzQ2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9vdmVyZHJpdmUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvb3ZlcmRyaXZlLmgKQEAgLTYsNyArNiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX09WRVJEUklWRV9IX18KICNkZWZpbmUgX19PVkVSRFJJVkVfSF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKaW5kZXggOWM4OTI4Ny4uYTU1NTllMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BhZ2UuaApAQCAtMTMsNyArMTMsNiBAQAogICAgWyBQNCBjb250cm9sICAgXQkJMHhFMDAwMDAwMAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkxMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCmluZGV4IGJiMGVmYjMuLmRjZDIzYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDQgUGF1bCBNdW5kdAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlcmlhbC5oIGIvaW5jbHVkZS9hc20tc2gvc2VyaWFsLmgKaW5kZXggZjUxZTIzMi4uODczNDU5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc2VyaWFsLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9BU01fU0VSSUFMX0gKICNkZWZpbmUgX0FTTV9TRVJJQUxfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpZmRlZiBDT05GSUdfU0hfRUMzMTA0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zbXAuaCBiL2luY2x1ZGUvYXNtLXNoL3NtcC5oCmluZGV4IGYxOWE4YjMuLmY1N2M0ZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NtcC5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9fQVNNX1NIX1NNUF9ICiAjZGVmaW5lIF9fQVNNX1NIX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKaW5kZXggYmIwMzMwNC4uYjc1MmU1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKQEAgLTYsNyArNiw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF1bCBNdW5kdAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqCXN3aXRjaF90bygpIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBuciBuLCBmaXJzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdHlwZXMuaCBiL2luY2x1ZGUvYXNtLXNoL3R5cGVzLmgKaW5kZXggNDg4NTUyZi4uM2MwOWRkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC90eXBlcy5oCkBAIC0zNSw3ICszNSw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgczg7CiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCmluZGV4IDA1NTIwY2UuLjc2YjU0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VuaXN0ZC5oCkBAIC0zMDQsNiArMzA0LDggQEAKIAogI2RlZmluZSBOUl9zeXNjYWxscyAyOTMKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjQ6IHNlZSA8YXNtLXNoL2Vycm5vLmg+ICovCiAKICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKQEAgLTQyMCw3ICs0MjIsNiBAQAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgXAogfQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVApAQCAtNDQzLDcgKzQ0NCw2IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNTEzLDcgKzUxMyw3IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKIC8qCiAgKiAiQ29uZGl0aW9uYWwiIHN5c2NhbGxzCkBAIC01MjUsNCArNTI1LDUgQEAKICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU01fU0hfVU5JU1REX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmggYi9pbmNsdWRlL2FzbS1zaC93YXRjaGRvZy5oCmluZGV4IGYwY2Y0YmUuLjA5Y2E0MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvd2F0Y2hkb2cuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2J1Zy5oIGIvaW5jbHVkZS9hc20tc2g2NC9idWcuaAppbmRleCA1ZDY1OWVjLi44MWY3MjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2J1Zy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NINjRfQlVHX0gKICNkZWZpbmUgX19BU01fU0g2NF9CVUdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUZWxsIHRoZSB1c2VyIHRoZXJlIGlzIHNvbWUgcHJvYmxlbSwgdGhlbiBmb3JjZSBhIHNlZ2ZhdWx0IChpbiBwcm9jZXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmgKaW5kZXggY2M5YTJlOC4uYTc0YTQ5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvZG1hLW1hcHBpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU0hfRE1BX01BUFBJTkdfSAogI2RlZmluZSBfX0FTTV9TSF9ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1zaDY0L2hhcmRpcnEuaAppbmRleCBhZDIzMzBlLi41NTVmZDdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19BU01fU0g2NF9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fU0g2NF9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmgKaW5kZXggODUyZjUwYS4uYzlkODRkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oCkBAIC0xNSw3ICsxNSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogV2l0aG91dCB0aGlzLCB0aGUgaW5pdGlhbGlzYXRpb24gb2YgUENJIElERSBjYXJkcyBlbmQgdXAgY2FsbGluZwogICogaWRlX2luaXRfaHdpZl9wb3J0cywgd2hpY2ggd29uJ3Qgd29yay4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvaXJxLmggYi9pbmNsdWRlL2FzbS1zaDY0L2lycS5oCmluZGV4IGY4MTViNDMuLjFjYTQ5ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9pcnEuaApAQCAtMTIsNyArMTIsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBFbmNvZGVkIElSUXMgYXJlIG5vdCBjb25zaWRlcmVkIHdvcnRoIHRvIGJlIHN1cHBvcnRlZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvbW11X2NvbnRleHQuaAppbmRleCA5OTFjZmRhLi44Yzg2MGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9tbXVfY29udGV4dC5oCkBAIC0yNiw3ICsyNiw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIG1tdV9jb250ZXh0X2NhY2hlOwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNoNjQvcGFnZS5oCmluZGV4IGU0OTM3Y2QuLjM0ZmIzNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvcGFnZS5oCkBAIC0xNyw3ICsxNyw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUgKi8KICNkZWZpbmUgUEFHRV9TSElGVAkxMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9wYXJhbS5oIGIvaW5jbHVkZS9hc20tc2g2NC9wYXJhbS5oCmluZGV4IGQxOGNjODcuLmY0MDlhZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcGFyYW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3BhcmFtLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNpZm5kZWYgX19BU01fU0g2NF9QQVJBTV9ICiAjZGVmaW5lIF9fQVNNX1NINjRfUEFSQU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjIGlmZGVmIENPTkZJR19TSF9XRFQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKaW5kZXggNTdhZjZiMy4uNTRjNzgyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wZ3RhYmxlLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKaW5kZXggMzAwMmU5ODguLjc2MDZmNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaApAQCAtMTQsNyArMTQsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3JlZ2lzdGVycy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKaW5kZXggMWY4ZjM5NC4uOWExNTkwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCkBAIC0zNDQsNiArMzQ0LDggQEAKICNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaAkzMTkKICNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCTMyMAogCisjaWZkZWYgX19LRVJORUxfXyAKKwogI2RlZmluZSBOUl9zeXNjYWxscyAzMjEKIAogLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjU6IHNlZSA8YXNtLXNoNjQvZXJybm8uaD4gKi8KQEAgLTQ4Niw3ICs0ODgsNiBAQAogX19zeXNjYWxsX3JldHVybih0eXBlLF9fc2MwKTsgCQkJCQkJICAgIFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1NUQVQKQEAgLTUwOSw3ICs1MTAsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR0FDVElPTgotI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9TWVNDQUxMU19fCiAKQEAgLTU1MCw3ICs1NTAsNyBAQAogewogCXJldHVybiB3YWl0cGlkKC0xLHdhaXRfc3RhdCwwKTsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTU2Miw0ICs1NjIsNSBAQAogI2RlZmluZSBjb25kX3N5c2NhbGwoeCkgYXNtKCIud2Vha1x0IiAjeCAiXG5cdC5zZXRcdCIgI3ggIixzeXNfbmlfc3lzY2FsbCIpCiAjZW5kaWYKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TSDY0X1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9hc21tYWNyby5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYXNtbWFjcm8uaAppbmRleCAwZDRiNjViLi5hNjE5YTRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9hc21tYWNyby5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2FzbW1hY3JvLmgKQEAgLTYsNyArNiw2IEBACiAjaWZuZGVmIF9TUEFSQ19BU01NQUNST19ICiAjZGVmaW5lIF9TUEFSQ19BU01NQUNST19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgogI2luY2x1ZGUgPGFzbS9hc2kuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaAppbmRleCBlMTAzMzE3Li43MzFmYTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9hdG9taWMuaApAQCAtMTAsNyArMTAsNiBAQAogI2lmbmRlZiBfX0FSQ0hfU1BBUkNfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1NQQVJDX0FUT01JQ19fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvYnVncy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYnVncy5oCmluZGV4IGU2NTJmODkuLmEwZjkzOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2J1Z3MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9idWdzLmgKQEAgLTUsNyArNSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS9jcHVkYXRhLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvY2FjaGVmbHVzaC5oCmluZGV4IDQ5MDEyMTcuLmZjNjMyZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9jYWNoZWZsdXNoLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9TUEFSQ19DQUNIRUZMVVNIX0gKICNkZWZpbmUgX1NQQVJDX0NBQ0hFRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4JCS8qIENvbW1vbiBmb3Igb3RoZXIgaW5jbHVkZXMgKi8KIC8vICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gZnJvbSBwZ2FsbG9jLmgKIC8vICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPiAgZnJvbSBwZ2FsbG9jLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5LmggYi9pbmNsdWRlL2FzbS1zcGFyYy9kZWxheS5oCmluZGV4IDdlYzhlOWYuLjQ4YWE3MGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2RlbGF5LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZGVsYXkuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX19TUEFSQ19ERUxBWV9ICiAjZGVmaW5lIF9fU1BBUkNfREVMQVlfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KIAogc3RhdGljIGlubGluZSB2b2lkIF9fZGVsYXkodW5zaWduZWQgbG9uZyBsb29wcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9kbWEtbWFwcGluZy5oCmluZGV4IGQ3YzNiMGYuLjZkYjgzZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLW1hcHBpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9TUEFSQ19ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BU01fU1BBUkNfRE1BX01BUFBJTkdfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUENJCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZG1hLW1hcHBpbmcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2RtYS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKaW5kZXggOGVjMjA2YS4uNDA3YjM2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZG1hLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9BU01fU1BBUkNfRE1BX0gKICNkZWZpbmUgX0FTTV9TUEFSQ19ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvZWxmLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9lbGYuaAppbmRleCA0YTcxZDdjLi44M2EzZGQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9lbGYuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9lbGYuaApAQCAtNiw3ICs2LDYgQEAKICAqIEVMRiByZWdpc3RlciBkZWZpbml0aW9ucy4uCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2ZpeG1hcC5oIGIvaW5jbHVkZS9hc20tc3BhcmMvZml4bWFwLmgKaW5kZXggOWRlNTJiNC4uZjE4ZmMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvZml4bWFwLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvZml4bWFwLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX0FTTV9GSVhNQVBfSAogI2RlZmluZSBfQVNNX0ZJWE1BUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2lmZGVmIENPTkZJR19ISUdITUVNCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9oYXJkaXJxLmgKaW5kZXggMmE2NjhjNC4uNGY2M2VkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaGFyZGlycS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2hhcmRpcnEuaApAQCAtNyw3ICs3LDYgQEAKICNpZm5kZWYgX19TUEFSQ19IQVJESVJRX0gKICNkZWZpbmUgX19TUEFSQ19IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oCmluZGV4IDY0ZDgxMDMuLmE2ZDczNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL2lkZS5oCkBAIC0xMSw3ICsxMSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wc3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lycS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxLmgKaW5kZXggY2VlMzU2Yi4uZGJjNjg3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaXJxLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9TUEFSQ19JUlFfSAogI2RlZmluZSBfU1BBUkNfSVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+ICAgICAvKiBGb3IgTlJfQ1BVUyAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW9zdGVrLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9tb3N0ZWsuaAppbmRleCA1OWI4NmJjLi5iZDkyYTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9tb3N0ZWsuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tb3N0ZWsuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX1NQQVJDX01PU1RFS19ICiAjZGVmaW5lIF9TUEFSQ19NT1NURUtfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wYWdlLmgKaW5kZXggZWMzMjc0Yi4uNWJhYjhhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BhZ2UuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX1NQQVJDX1BBR0VfSAogI2RlZmluZSBfU1BBUkNfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpZmRlZiBDT05GSUdfU1VONAogI2RlZmluZSBQQUdFX1NISUZUICAgMTMKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ2FsbG9jLmgKaW5kZXggMTI2ODAwYS4uYTQ0OWNkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BnYWxsb2MuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX1NQQVJDX1BHQUxMT0NfSAogI2RlZmluZSBfU1BBUkNfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9wZ3RhYmxlLmgKaW5kZXggOWVlYThmNC4uMjI2YzY0NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3BndGFibGUuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvNGxldmVsLWZpeHVwLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zZnAtbWFjaGluZS5oCmluZGV4IGI0Y2EyZDkuLmVjZmM4NmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NmcC1tYWNoaW5lLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvc2ZwLW1hY2hpbmUuaApAQCAtMjUsNyArMjUsNiBAQAogI2lmbmRlZiBfU0ZQX01BQ0hJTkVfSAogI2RlZmluZSBfU0ZQX01BQ0hJTkVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAgICAKICNkZWZpbmUgX0ZQX1dfVFlQRV9TSVpFCQkzMgogI2RlZmluZSBfRlBfV19UWVBFCQl1bnNpZ25lZCBsb25nCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9zbXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCmluZGV4IDk4YzQ2ZTMuLjVhMWI3ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3NtcC5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfU1BBUkNfU01QX0gKICNkZWZpbmUgX1NQQVJDX1NNUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL2hlYWQuaD4KICNpbmNsdWRlIDxhc20vYnRmaXh1cC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaAppbmRleCA1OGRkMTYyLi5jYjdkZGExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zeXN0ZW0uaApAQCAtMSwxMCArMSw4IEBACiAvKiAkSWQ6IHN5c3RlbS5oLHYgMS44NiAyMDAxLzEwLzMwIDA0OjU3OjEwIGRhdmVtIEV4cCAkICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX19TUEFSQ19TWVNURU1fSAogI2RlZmluZSBfX1NQQVJDX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CS8qIE5SX0NQVVMgKi8KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGltZXIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RpbWVyLmgKaW5kZXggYjE2ZWI3My4uY2IxZmExZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90aW1lci5oCkBAIC00LDcgKzQsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk1IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZm5kZWYgX1NQQVJDX1RJTUVSX0gKICNkZWZpbmUgX1NQQVJDX1RJTUVSX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90bGJmbHVzaC5oCmluZGV4IDU2NDNjYTMuLjRhM2I2NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NQQVJDX1RMQkZMVVNIX0gKICNkZWZpbmUgX1NQQVJDX1RMQkZMVVNIX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAvLyAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCmluZGV4IDQ1YTU3NjUuLjI1NTM3NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3VuaXN0ZC5oCkBAIC0zMTksNiArMzE5LDcgQEAKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQogCisjaWZkZWYgX19LRVJORUxfXwogLyogV0FSTklORzogWW91IE1BWSBOT1QgYWRkIHN5c2NhbGwgbnVtYmVycyBsYXJnZXIgdGhhbiAzMDEsIHNpbmNlCiAgKiAgICAgICAgICBhbGwgb2YgdGhlIHN5c2NhbGwgdGFibGVzIGluIHRoZSBTcGFyYyBrZXJuZWwgYXJlCiAgKiAgICAgICAgICBzaXplZCB0byBoYXZlIDMwMSBlbnRyaWVzIChzdGFydGluZyBhdCB6ZXJvKS4gIFRoZXJlZm9yZQpAQCAtNDU1LDcgKzQ1Niw2IEBACiByZXR1cm4gLTE7IFwKIH0KIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CkBAIC00NzcsNyArNDc3LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECi0jZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApAQCAtNTM0LDQgKzUzMyw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9TUEFSQ19VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdmFjLW9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdmFjLW9wcy5oCmluZGV4IDllMDE3MjMuLmFiNmY1M2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL3ZhYy1vcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy92YWMtb3BzLmgKQEAgLTgsNyArOCw2IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQsIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AY2FpcC5ydXRnZXJzLmVkdSkKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3N5c2VuLmg+CiAjaW5jbHVkZSA8YXNtL2NvbnRyZWdzLmg+CiAjaW5jbHVkZSA8YXNtL2FzaS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvd2lubWFjcm8uaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3dpbm1hY3JvLmgKaW5kZXggNTU3MjU3ZS4uMDk2ZjNkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvd2lubWFjcm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy93aW5tYWNyby5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfU1BBUkNfV0lOTUFDUk9fSAogI2RlZmluZSBfU1BBUkNfV0lOTUFDUk9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogCiAvKiBTdG9yZSB0aGUgcmVnaXN0ZXIgd2luZG93IG9udG8gdGhlIDgtYnl0ZSBhbGlnbmVkIGFyZWEgc3RhcnRpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2F0b21pYy5oCmluZGV4IDQ2OGViNDguLjJmMGJlYzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9hdG9taWMuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19BUkNIX1NQQVJDNjRfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1NQQVJDNjRfQVRPTUlDX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKIHR5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaAppbmRleCA3MTk0NGIwLi4zZDVlMWFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYml0b3BzLmgKQEAgLTcsNyArNyw2IEBACiAjaWZuZGVmIF9TUEFSQzY0X0JJVE9QU19ICiAjZGVmaW5lIF9TUEFSQzY0X0JJVE9QU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9idWdzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaAppbmRleCAzNjBkZDA0Li4xMjA0MjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2J1Z3MuaApAQCAtNCw3ICs0LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTYgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX2ppZmZ5OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCmluZGV4IGIzZjYxNjUuLjc0NWQxYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvY2FjaGVmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9DQUNIRUZMVVNIX0gKICNkZWZpbmUgX1NQQVJDNjRfQ0FDSEVGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kZWxheS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kZWxheS5oCmluZGV4IDI5MDFlYTAuLmE0YWFlNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZGVsYXkuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RlbGF5LmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX19TUEFSQzY0X0RFTEFZX0gKICNkZWZpbmUgX19TUEFSQzY0X0RFTEFZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWRhdGEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEtbWFwcGluZy5oCmluZGV4IGE4ZDM5ZjIuLjNjMmI1YmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLW1hcHBpbmcuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS1tYXBwaW5nLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fU1BBUkM2NF9ETUFfTUFQUElOR19ICiAjZGVmaW5lIF9BU01fU1BBUkM2NF9ETUFfTUFQUElOR19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZG1hLmgKaW5kZXggMWFhYjNjOC4uMjdmNjU5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2RtYS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfQVNNX1NQQVJDNjRfRE1BX0gKICNkZWZpbmUgX0FTTV9TUEFSQzY0X0RNQV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9mbG9wcHkuaAppbmRleCA2YTk1ZDVkLi4wN2NjZDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2Zsb3BweS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvZmxvcHB5LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX19BU01fU1BBUkM2NF9GTE9QUFlfSAogI2RlZmluZSBfX0FTTV9TUEFSQzY0X0ZMT1BQWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKaW5kZXggYzM5M2Y4MS4uNTUxNDljZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnEuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaXJxLmgKaW5kZXggZGUzM2Q2ZS4uZmExNjRkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lycS5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9JUlFfSAogI2RlZmluZSBfU1BBUkM2NF9JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCmluZGV4IGU0ZWZlNjUuLmU5YmIyNmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9LUFJPQkVTX0gKICNkZWZpbmUgX1NQQVJDNjRfS1BST0JFU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21jMTQ2ODE4cnRjLmgKaW5kZXggNzViZDU3Mi4uZTljMGZjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tYzE0NjgxOHJ0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvbWMxNDY4MThydGMuaApAQCAtNCw3ICs0LDYgQEAKICNpZm5kZWYgX19BU01fU1BBUkM2NF9NQzE0NjgxOFJUQ19ICiAjZGVmaW5lIF9fQVNNX1NQQVJDNjRfTUMxNDY4MThSVENfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpZm5kZWYgUlRDX1BPUlQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L21tdS5oCmluZGV4IDJkNGYyZWEuLjcwYWY0YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbXUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19NTVVfSAogI2RlZmluZSBfX01NVV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9jb25zdC5oPgogI2luY2x1ZGUgPGFzbS9oeXBlcnZpc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L29wbGliLmgKaW5kZXggYzc1NDY3Ni4uZGVhM2U3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9vcGxpYi5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb3BsaWIuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19TUEFSQzY0X09QTElCX0gKICNkZWZpbmUgX19TUEFSQzY0X09QTElCX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9vcGVucHJvbS5oPgogCiAvKiBPQlAgdmVyc2lvbiBzdHJpbmcuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCmluZGV4IGFhYmIyMTkuLmZkZjBjZWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFnZS5oCkBAIC0zLDcgKzMsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9QQUdFX0gKICNkZWZpbmUgX1NQQVJDNjRfUEFHRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY29uc3QuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX1NQQVJDNjRfUEFHRV9TSVpFXzhLQikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGFyYW0uaAppbmRleCBhMWNkNDk3Li5mMDEyNWNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wYXJhbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNU1BBUkM2NF9QQVJBTV9ICiAjZGVmaW5lIF9BU01TUEFSQzY0X1BBUkFNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogIyBkZWZpbmUgSFoJCUNPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BnYWxsb2MuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCmluZGV4IDEyZTRhMjcuLjAxMGY5Y2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGdhbGxvYy5oCkBAIC0yLDcgKzIsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9QR0FMTE9DX0gKICNkZWZpbmUgX1NQQVJDNjRfUEdBTExPQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCmluZGV4IGNkNDY0ZjQuLjRlMjE4ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oCkBAIC0xNCw3ICsxNCw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zcGl0ZmlyZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvcHJvY2Vzc29yLmgKaW5kZXggYzY4OTZiOC4uNjZkZDJmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Byb2Nlc3Nvci5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKi8KICNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyB2b2lkICpwYzsgX19hc21fXygicmQgJSVwYywgJTAiIDogIj1yIiAocGMpKTsgcGM7IH0pCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL2Eub3V0Lmg+CiAjaW5jbHVkZSA8YXNtL3BzdGF0ZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWdpbmZvLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAppbmRleCBkZjE3ZTQ3Li5jOTZlNmMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ2luZm8uaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zaWduYWwuaAppbmRleCBlMzA1OWJiLi5mZGM0MmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2lnbmFsLmgKQEAgLTYsNyArNiw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCmluZGV4IDg5ZDg2ZWMuLjM4ODI0OWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfU01QX0gKICNkZWZpbmUgX1NQQVJDNjRfU01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxhc20vYXNpLmg+CiAjaW5jbHVkZSA8YXNtL3N0YXJmaXJlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKaW5kZXggNTA4YzQxNi4uYmQ1ZmZjNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2suaApAQCAtNiw3ICs2LDYgQEAKICNpZm5kZWYgX19TUEFSQzY0X1NQSU5MT0NLX0gKICNkZWZpbmUgX19TUEFSQzY0X1NQSU5MT0NLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4JLyogRm9yIE5SX0NQVVMgKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3N5c3RlbS5oCmluZGV4IGExOGVjODcuLjRjYTY4NjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9zeXN0ZW0uaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX19TUEFSQzY0X1NZU1RFTV9ICiAjZGVmaW5lIF9fU1BBUkM2NF9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdmlzYXNtLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RpbWVyLmgKaW5kZXggZWRjOGUwOC4uZDQzNTU5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGltZXIuaApAQCAtOSw3ICs5LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogc3RydWN0IHNwYXJjNjRfdGlja19vcHMgewogCXZvaWQgKCppbml0X3RpY2spKHVuc2lnbmVkIGxvbmcpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiLmgKaW5kZXggNjFjMDE4OC4uN2FmMWUxMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGIuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfU1BBUkM2NF9UTEJfSAogI2RlZmluZSBfU1BBUkM2NF9UTEJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKaW5kZXggZTNhN2M0NS4uMzQ4NzMyOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1NQQVJDNjRfVExCRkxVU0hfSAogI2RlZmluZSBfU1BBUkM2NF9UTEJGTFVTSF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90dGFibGUuaAppbmRleCAyZDVlM2M0Li5mMjM1MjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3R0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdHRhYmxlLmgKQEAgLTIsNyArMiw2IEBACiAjaWZuZGVmIF9TUEFSQzY0X1RUQUJMRV9ICiAjZGVmaW5lIF9TUEFSQzY0X1RUQUJMRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vdXRyYXAuaD4KIAogI2lmZGVmIF9fQVNTRU1CTFlfXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdW5pc3RkLmgKaW5kZXggOTk4ZWY0YS4uYmFkYzczZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3VuaXN0ZC5oCkBAIC0zMjEsNiArMzIxLDcgQEAKICNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJMzAwCiAjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CTMwMQogCisjaWZkZWYgX19LRVJORUxfXwogLyogV0FSTklORzogWW91IE1BWSBOT1QgYWRkIHN5c2NhbGwgbnVtYmVycyBsYXJnZXIgdGhhbiAzMDEsIHNpbmNlCiAgKiAgICAgICAgICBhbGwgb2YgdGhlIHN5c2NhbGwgdGFibGVzIGluIHRoZSBTcGFyYyBrZXJuZWwgYXJlCiAgKiAgICAgICAgICBzaXplZCB0byBoYXZlIDMwMSBlbnRyaWVzIChzdGFydGluZyBhdCB6ZXJvKS4gIFRoZXJlZm9yZQpAQCAtNDg3LDcgKzQ4OCw2IEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9TWVNDQUxMU19fICovCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAvKiBzeXNjb25mIG9wdGlvbnMsIGZvciBTdW5PUyBjb21wYXRpYmlsaXR5ICovCiAjZGVmaW5lICAgX1NDX0FSR19NQVggICAgICAgICAgICAgMQogI2RlZmluZSAgIF9TQ19DSElMRF9NQVggICAgICAgICAgIDIKQEAgLTUyMSw3ICs1MjEsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECi0jZW5kaWYKIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTUzMSw0ICs1MzAsNSBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfU1BBUkM2NF9VTklTVERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vYS5vdXQuaCBiL2luY2x1ZGUvYXNtLXVtL2Eub3V0LmgKaW5kZXggN2MyNjI2NS4uNTBjZWU3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vYS5vdXQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9hLm91dC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1VNX0FfT1VUX0gKICNkZWZpbmUgX19VTV9BX09VVF9ICiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJhc20vYXJjaC9hLm91dC5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2NhY2hlLmggYi9pbmNsdWRlL2FzbS11bS9jYWNoZS5oCmluZGV4IDNkMDU4NzAuLjE5ZTFiZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vY2FjaGUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19VTV9DQUNIRV9ICiAjZGVmaW5lIF9fVU1fQ0FDSEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19VTUxfWDg2KSAmJiAhZGVmaW5lZChDT05GSUdfNjRCSVQpCiAjIGRlZmluZSBMMV9DQUNIRV9TSElGVAkJKENPTkZJR19YODZfTDFfQ0FDSEVfU0hJRlQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmggYi9pbmNsdWRlL2FzbS11bS9lbGYtcHBjLmgKaW5kZXggMjk5OGNmOS4uOTk3MTExMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vZWxmLXBwYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2VsZi1wcGMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19VTV9FTEZfUFBDX0gKICNkZWZpbmUgX19VTV9FTEZfUFBDX0gKIAotI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogCiBleHRlcm4gbG9uZyBlbGZfYXV4X2h3Y2FwOwogI2RlZmluZSBFTEZfSFdDQVAgKGVsZl9hdXhfaHdjYXApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXVtL2ZpeG1hcC5oCmluZGV4IGFlMGNhMzkuLmQzNTJhMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2ZpeG1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2ZpeG1hcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX1VNX0ZJWE1BUF9ICiAjZGVmaW5lIF9fVU1fRklYTUFQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9rbWFwX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2hwYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9lbGYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXVtL2hhcmRpcnEuaAppbmRleCAxMjI0YjI2Li4zMTNlYmI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vaGFyZGlycS5oCkBAIC0zLDcgKzMsNiBAQAogI2lmbmRlZiBfX0FTTV9VTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fVU1fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaCBiL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaAppbmRleCBlM2Q2MmRjYi4uNzhiODYyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vbGlua2FnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2xpbmthZ2UuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgImFzbS9hcmNoL2xpbmthZ2UuaCIKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiA8bGludXgvbGlua2FnZS5oPiB3aWxsIHBpY2sgc2FuZSBkZWZhdWx0cyAqLwogI2lmZGVmIENPTkZJR19HUFJPRgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXVtL21tdV9jb250ZXh0LmgKaW5kZXggOWEwZTQ4ZS4uZjcwOWM3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9tbXVfY29udGV4dC5oCkBAIC03LDcgKzcsNiBAQAogI2RlZmluZSBfX1VNX01NVV9DT05URVhUX0gKIAogI2luY2x1ZGUgImxpbnV4L3NjaGVkLmgiCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiY2hvb3NlLW1vZGUuaCIKICNpbmNsdWRlICJ1bV9tbXUuaCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcGFnZS5oIGIvaW5jbHVkZS9hc20tdW0vcGFnZS5oCmluZGV4IDQxMzY0MzMuLjQyOTZkMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wYWdlLmgKQEAgLTksNyArOSw2IEBACiAKIHN0cnVjdCBwYWdlOwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3ZtLWZsYWdzLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS11bS9wZ2FsbG9jLmgKaW5kZXggZWE0OTQxMS4uMzRhYjI2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BnYWxsb2MuaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgX19VTV9QR0FMTE9DX0gKICNkZWZpbmUgX19VTV9QR0FMTE9DX0gKIAotI2luY2x1ZGUgImxpbnV4L2NvbmZpZy5oIgogI2luY2x1ZGUgImxpbnV4L21tLmgiCiAjaW5jbHVkZSAiYXNtL2ZpeG1hcC5oIgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAppbmRleCBkYTA3YTY5Li44MjRjMjg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogc3RydWN0IHRhc2tfc3RydWN0OwogCi0jaW5jbHVkZSAibGludXgvY29uZmlnLmgiCiAjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLWdlbmVyaWMuaAppbmRleCA1MDM0ODQzLi5hMzZmNTM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS9wdHJhY2UtZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS1nZW5lcmljLmgKQEAgLTgsNyArOCw2IEBACiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKIAogI2RlZmluZSBwdF9yZWdzIHB0X3JlZ3Nfc3ViYXJjaAogI2RlZmluZSBzaG93X3JlZ3Mgc2hvd19yZWdzX3N1YmFyY2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3NtcC5oIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKaW5kZXggYWVkYTY2NS4uY2E1NTIyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vc21wLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vc21wLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJsaW51eC9iaXRvcHMuaCIKICNpbmNsdWRlICJhc20vY3VycmVudC5oIgogI2luY2x1ZGUgImxpbnV4L2NwdW1hc2suaCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmggYi9pbmNsdWRlL2FzbS11bS90aHJlYWRfaW5mby5oCmluZGV4IGYxNjZiOTguLjI2MWUyZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3RocmVhZF9pbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tdW0vdGhyZWFkX2luZm8uaApAQCAtOCw3ICs4LDYgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYXRvbWljLmgKaW5kZXggMTY2ZGYwMC4uZTRlNTdkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2F0b21pYy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9fVjg1MF9BVE9NSUNfSF9fCiAjZGVmaW5lIF9fVjg1MF9BVE9NSUNfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKaW5kZXggMWY2ZmQ1YS4uMWZhOTliYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjZGVmaW5lIF9fVjg1MF9CSVRPUFNfSF9fCiAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIHVubGlrZWx5ICAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogc3dhYjMyICovCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJLyogaW50ZXJydXB0IGVuYWJsZS9kaXNhYmxlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS12ODUwL2RtYS1tYXBwaW5nLmgKaW5kZXggYzYzZmI1MC4uMWNjNDJjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvZG1hLW1hcHBpbmcuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19WODUwX0RNQV9NQVBQSU5HX0hfXwogI2RlZmluZSBfX1Y4NTBfRE1BX01BUFBJTkdfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19QQ0kKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9oYXJkaXJxLmggYi9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaAppbmRleCBkOTg0ODhjLi4wNGUyMDEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL2hhcmRpcnEuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19WODUwX0hBUkRJUlFfSF9fCiAjZGVmaW5lIF9fVjg1MF9IQVJESVJRX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvbWFjaGRlcC5oIGIvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmgKaW5kZXggOThkOGJmNi4uZjFlM2I4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9tYWNoZGVwLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19WODUwX01BQ0hERVBfSF9fCiAjZGVmaW5lIF9fVjg1MF9NQUNIREVQX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIGNoaXBzICovCiAjaWZkZWYgQ09ORklHX1Y4NTBFX01BMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaAppbmRleCAzY2Y4Nzc1Li4xZWEyYTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3BndGFibGUuaApAQCAtMyw3ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oPgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tdjg1MC9wcm9jZXNzb3IuaAppbmRleCAyZDMxMzA4Li42OTY1YjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvcHJvY2Vzc29yLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpZm5kZWYgX19WODUwX1BST0NFU1NPUl9IX18KICNkZWZpbmUgX19WODUwX1BST0NFU1NPUl9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmbmRlZiBfX0FTU0VNQkxZX18gLyogPGxpbnV4L3RocmVhZF9pbmZvLmg+IGlzIG5vdCBhc20tc2FmZS4gICovCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdjg1MC9zZXJpYWwuaCBiL2luY2x1ZGUvYXNtLXY4NTAvc2VyaWFsLmgKaW5kZXggOGMyYTYwOS4uMzZkOGY0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC9zZXJpYWwuaAorKysgYi9pbmNsdWRlL2FzbS12ODUwL3NlcmlhbC5oCkBAIC02LDcgKzYsNiBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IGJ5IFJhbGYgQmFlY2hsZQogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqLyAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19SVEVfQ0JfTUUyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS12ODUwL3VuaXN0ZC5oCmluZGV4IDgyNDYwYTcuLmJjYjQ0YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC91bmlzdGQuaApAQCAtMTQsOCArMTQsNiBAQAogI2lmbmRlZiBfX1Y4NTBfVU5JU1REX0hfXwogI2RlZmluZSBfX1Y4NTBfVU5JU1REX0hfXwogCi0jaW5jbHVkZSA8YXNtL2NsaW5rYWdlLmg+Ci0KICNkZWZpbmUgX19OUl9yZXN0YXJ0X3N5c2NhbGwJICAwCiAjZGVmaW5lIF9fTlJfZXhpdAkJICAxCiAjZGVmaW5lIF9fTlJfZm9yawkJICAyCkBAIC0yMzcsMTAgKzIzNSw5IEBACiAgICBleGNlcHQgdGhlIHN5c2NhbGwgbnVtYmVyIChyMTIpLiAgKi8KICNkZWZpbmUgU1lTQ0FMTF9TSE9SVF9DTE9CQkVSUwlTWVNDQUxMX0NMT0JCRVJTLCAicjEzIiwgInIxNCIKIAorI2lmZGVmIF9fS0VSTkVMX18KIAotLyogVXNlciBwcm9ncmFtcyBzb21ldGltZXMgZW5kIHVwIGluY2x1ZGluZyB0aGlzIGhlYWRlciBmaWxlCi0gICAoaW5kaXJlY3RseSwgdmlhIHVDbGliYyBoZWFkZXIgZmlsZXMpLCBzbyBJJ20gYSBiaXQgbmVydm91cyBqdXN0Ci0gICBpbmNsdWRpbmcgPGxpbnV4L2NvbXBpbGVyLmg+LiAgKi8KKyNpbmNsdWRlIDxhc20vY2xpbmthZ2UuaD4KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkJCSAgICAgIFwKICAgZG8gewkJCQkJCQkJCSAgICAgIFwKQEAgLTM2OCw3ICszNjUsNiBAQAogfQogCQkKIAotI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CkBAIC0zODksNyArMzg1LDYgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KLSNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC00NDAsNyArNDM1LDcgQEAKIAkJCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwKIAkJCQlzaXplX3Qgc2lnc2V0c2l6ZSk7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTQ1NSw0ICs0NTAsNSBAQAogICB2b2lkIG5hbWUgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcyAoInN5c19uaV9zeXNjYWxsIikpKTsKICNlbmRpZgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fVjg1MF9VTklTVERfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3Y4NTBlX3VhcnQuaCBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oCmluZGV4IDU5MzBkNTkuLjUxODJmYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdjg1MGVfdWFydC5oCkBAIC0xOSw3ICsxOSw2IEBACiAjaWZuZGVmIF9fVjg1MF9WODUwRV9VQVJUX0hfXwogI2RlZmluZSBfX1Y4NTBfVjg1MEVfVUFSVF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KIAogI2luY2x1ZGUgPGFzbS92ODUwZV91dGlscy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9hcGljLmgKaW5kZXggYmRiZDg5My4uYTczMWJlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXBpYy5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9BUElDX0gKICNkZWZpbmUgX19BU01fQVBJQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KICNpbmNsdWRlIDxhc20vYXBpY2RlZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2F0b21pYy5oCmluZGV4IGNlY2JmN2IuLmJkM2ZhNjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvYXRvbWljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVJDSF9YODZfNjRfQVRPTUlDX18KICNkZWZpbmUgX19BUkNIX1g4Nl82NF9BVE9NSUNfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qIGF0b21pY190IHNob3VsZCBiZSAzMiBiaXQgc2lnbmVkIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9iaXRvcHMuaAppbmRleCA3OTIxMjEyLi5lOWJmOTMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2JpdG9wcy5oCkBAIC01LDcgKzUsNiBAQAogICogQ29weXJpZ2h0IDE5OTIsIExpbnVzIFRvcnZhbGRzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgTE9DS19QUkVGSVggImxvY2sgOyAiCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvYnVncy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2J1Z3MuaAppbmRleCA1OWJjNjg5Li5kODZjNWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvYnVncy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9idWdzLmgKQEAgLTEwLDcgKzEwLDYgQEAKICAqCXZvaWQgY2hlY2tfYnVncyh2b2lkKTsKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9pMzg3Lmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FjaGUuaAppbmRleCBmOGRmZjFjLi5lZDhhOWQyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhY2hlLmgKQEAgLTQsNyArNCw2IEBACiAjaWZuZGVmIF9fQVJDSF9YODY2NF9DQUNIRV9ICiAjZGVmaW5lIF9fQVJDSF9YODY2NF9DQUNIRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogTDEgY2FjaGUgbGluZSBzaXplICovCiAjZGVmaW5lIEwxX0NBQ0hFX1NISUZUCShDT05GSUdfWDg2X0wxX0NBQ0hFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2NhbGxpbmcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxsaW5nLmgKaW5kZXggZmMyYzVhNi4uNmY0ZjYzYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2NhbGxpbmcuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FsbGluZy5oCkBAIC0yLDcgKzIsNiBAQAogICogU29tZSBtYWNyb3MgdG8gaGFuZGxlIHN0YWNrIGZyYW1lcyBpbiBhc3NlbWJseS4KICAqLyAKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjZGVmaW5lIFIxNSAwCiAjZGVmaW5lIFIxNCA4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEtbWFwcGluZy5oCmluZGV4IDQ5YTgxYTYuLjQ5OGY2NmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEtbWFwcGluZy5oCkBAIC02LDcgKzYsNiBAQAogICogZG9jdW1lbnRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEuaAppbmRleCA2ZjJhODE3Li5jNTU2MjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfQVNNX0RNQV9ICiAjZGVmaW5lIF9BU01fRE1BX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CS8qIEFuZCBzcGlubG9ja3MgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG5lZWQgYnl0ZSBJTyAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZHdhcmYyLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvZHdhcmYyLmgKaW5kZXggMDc2NTRiZC4uMDc0NGRiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2R3YXJmMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9kd2FyZjIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0RXQVJGMl9ICiAjZGVmaW5lIF9EV0FSRjJfSCAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICN3YXJuaW5nICJhc20vZHdhcmYyLmggc2hvdWxkIGJlIG9ubHkgaW5jbHVkZWQgaW4gcHVyZSBhc3NlbWJseSBmaWxlcyIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9maXhtYXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9maXhtYXAuaAppbmRleCA3YjI4NmJkLi4wYjRmZmJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZml4bWFwLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2ZpeG1hcC5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9BU01fRklYTUFQX0gKICNkZWZpbmUgX0FTTV9GSVhNQVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWNkZWYuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9oYXJkaXJxLmgKaW5kZXggODY4OTk1MS4uNjRhNjVjZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaGFyZGlycS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfX0FTTV9IQVJESVJRX0gKICNkZWZpbmUgX19BU01fSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3BkYS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2h3X2lycS5oCmluZGV4IDBkZjE3MTUuLjNkZTk2ZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9od19pcnEuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaHdfaXJxLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqLwogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pYTMyLmgKaW5kZXggZTZiN2YyMi4uMDE5MGI3YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2lhMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvaWEzMi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX1g4Nl82NF9JQTMyX0gKICNkZWZpbmUgX0FTTV9YODZfNjRfSUEzMl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW8uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCmluZGV4IGEwNWRhOGEuLjcwZTkxZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pby5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfQVNNX0lPX0gKICNkZWZpbmUgX0FTTV9JT19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmaW5pdGlvbnMgZm9yIHRoZSB4ODYgSU8gaW5zdHJ1Y3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2lvX2FwaWMuaAppbmRleCA1MjQ4NGU4Li5mYjdhMDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvaW9fYXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9pb19hcGljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX0lPX0FQSUNfSAogI2RlZmluZSBfX0FTTV9JT19BUElDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tdV9jb250ZXh0LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaAppbmRleCAxOWYwYzgzLi5hZjAzYjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW11X2NvbnRleHQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19YODZfNjRfTU1VX0NPTlRFWFRfSAogI2RlZmluZSBfX1g4Nl82NF9NTVVfQ09OVEVYVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L21tem9uZS5oCmluZGV4IDY5NDRlNzEuLjcwYmI5OTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9tbXpvbmUuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbW16b25lLmgKQEAgLTQsNyArNCw2IEBACiAjaWZuZGVmIF9BU01fWDg2XzY0X01NWk9ORV9ICiAjZGVmaW5lIF9BU01fWDg2XzY0X01NWk9ORV9IIDEKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX05VTUEKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L210cnIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9tdHJyLmgKaW5kZXggNjZhYzFjMC4uZDYxMzViMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L210cnIuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbXRyci5oCkBAIC0yMyw5ICsyMyw3IEBACiAjaWZuZGVmIF9MSU5VWF9NVFJSX0gKICNkZWZpbmUgX0xJTlVYX01UUlJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogI2RlZmluZQlNVFJSX0lPQ1RMX0JBU0UJJ00nCiAKQEAgLTEwMiwxMSArMTAwLDEwIEBACiAgICAgcmV0dXJuIC1FTk9ERVY7CiB9CiAKLSMgIGVuZGlmCi0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19NVFJSICovCiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKIHN0cnVjdCBtdHJyX3NlbnRyeTMyCiB7CkBAIC0xMzgsNCArMTM1LDYgQEAKIAogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmICAvKiAgX0xJTlVYX01UUlJfSCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCmluZGV4IDQwODE4NWIuLmY3YmY4NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX1g4Nl82NF9QQUdFX0gKICNkZWZpbmUgX1g4Nl82NF9QQUdFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBQQUdFX1NISUZUIGRldGVybWluZXMgdGhlIHBhZ2Ugc2l6ZSAqLwogI2RlZmluZSBQQUdFX1NISUZUCTEyCkBAIC0xMzYsOSArMTM1LDkgQEAKIAogI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEgMQkKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9YODZfNjRfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJhbS5oCmluZGV4IDU5NTZiMjMuLmE3Mjg3ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJhbS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYXJhbS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfQVNNeDg2XzY0X1BBUkFNX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KLSMgaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjIGRlZmluZSBIWiAgICAgICAgICAgIENPTkZJR19IWgkvKiBJbnRlcm5hbCBrZXJuZWwgdGltZXIgZnJlcXVlbmN5ICovCiAjIGRlZmluZSBVU0VSX0haICAgICAgIDEwMAkJLyogLi4gc29tZSB1c2VyIGludGVyZmFjZXMgYXJlIGluICJ0aWNrcyAqLwogI2RlZmluZSBDTE9DS1NfUEVSX1NFQyAgICAgICAgKFVTRVJfSFopICAgICAgIC8qIGxpa2UgdGltZXMoKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BjaS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3BjaS5oCmluZGV4IDhhMDVhZjIuLjJkYjA2MjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGNpLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9feDg2NjRfUENJX0gKICNkZWZpbmUgX194ODY2NF9QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKaW5kZXggMzdhM2VjNC4uMzA2MWEzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaApAQCAtMTIsNyArMTIsNiBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zaWdjb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc2VyaWFsLmgKaW5kZXggZGM3NTJlYS4uYjA0OTZlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaApAQCAtMiw3ICsyLDYgQEAKICAqIGluY2x1ZGUvYXNtLXg4Nl82NC9zZXJpYWwuaAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFRoaXMgYXNzdW1lcyB5b3UgaGF2ZSBhIDEuODQzMiBNSHogY2xvY2sgZm9yIHlvdXIgVUFSVC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zbXAuaAppbmRleCBhNGZkYWViLi43Njg2YjliIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NtcC5oCkBAIC01LDcgKzUsNiBAQAogICogV2UgbmVlZCB0aGUgQVBJQyBkZWZpbml0aW9ucyBhdXRvbWF0aWNhbGx5IGFzIHBhcnQgb2YgJ3NtcC5oJwogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oCmluZGV4IGZlNDg0YTYuLjVkOGE1ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zcGlubG9jay5oCkBAIC00LDcgKzQsNiBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcndsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyoKICAqIFlvdXIgYmFzaWMgU01QIHNwaW5sb2NrcywgYWxsb3dpbmcgb25seSBhIHNpbmdsZSBDUFUgYW55d2hlcmUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3dpb3RsYi5oCmluZGV4IDYwNzU3ZWYuLjVmOWEwMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0FTTV9TV0lPVExCX0gKICNkZWZpbmUgX0FTTV9TV1RJT0xCX0ggMQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3N5c3RlbS5oCmluZGV4IDM5NzU5ODkuLmY0OGUwZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3lzdGVtLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NZU1RFTV9ICiAjZGVmaW5lIF9fQVNNX1NZU1RFTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxhc20vc2VnbWVudC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oCmluZGV4IDRhOWMyMGUuLmQxNmQ1YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC90bGJmbHVzaC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfWDg2NjRfVExCRkxVU0hfSAogI2RlZmluZSBfWDg2NjRfVExCRkxVU0hfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC90b3BvbG9neS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmgKaW5kZXggOWRiNTRlOS4uODBjNGU0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3RvcG9sb2d5LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2XzY0X1RPUE9MT0dZX0gKICNkZWZpbmUgX0FTTV9YODZfNjRfVE9QT0xPR1lfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTlVNQQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaAppbmRleCBiZGRmZmNiLi4xZTFmYTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKQEAgLTQsNyArNCw2IEBACiAvKgogICogVXNlciBzcGFjZSBtZW1vcnkgYWNjZXNzIGZ1bmN0aW9ucwogICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKaW5kZXggZmViNzdjYi4uMGFmZjIyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaApAQCAtNjE4LDYgKzYxOCw4IEBACiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCTI3OAogX19TWVNDQUxMKF9fTlJfdm1zcGxpY2UsIHN5c192bXNwbGljZSkKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2RlZmluZSBfX05SX3N5c2NhbGxfbWF4IF9fTlJfdm1zcGxpY2UKIAogI2lmbmRlZiBfX05PX1NUVUJTCkBAIC02MzUsNyArNjM3LDYgQEAKIAlyZXR1cm4gKHR5cGUpIChyZXMpOyBcCiB9IHdoaWxlICgwKQogCi0jaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfU1RBVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTY1Nyw3ICs2NTgsNiBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19USU1FCiAjZGVmaW5lIF9fQVJDSF9XQU5UX0NPTVBBVF9TWVNfVElNRQotI2VuZGlmCiAKICNpZm5kZWYgX19LRVJORUxfU1lTQ0FMTFNfXwogCkBAIC04MjEsNyArODIxLDcgQEAKIAogI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAotI2lmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykgJiYgZGVmaW5lZChfX0tFUk5FTF9fKQorI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgpAQCAtODQ4LDQgKzg0OCw1IEBACiAgKi8KICNkZWZpbmUgY29uZF9zeXNjYWxsKHgpIGFzbSgiLndlYWtcdCIgI3ggIlxuXHQuc2V0XHQiICN4ICIsc3lzX25pX3N5c2NhbGwiKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvYXRvbWljLmgKaW5kZXggZmUxMDVhMS4uNWMyNjcyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9hdG9taWMuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfWFRFTlNBX0FUT01JQ19ICiAjZGVmaW5lIF9YVEVOU0FfQVRPTUlDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogCiB0eXBlZGVmIHN0cnVjdCB7IHZvbGF0aWxlIGludCBjb3VudGVyOyB9IGF0b21pY190OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvY2hlY2tzdW0uaAppbmRleCA4MWE3OTdhLi5iZGMwMGFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvY2hlY2tzdW0uaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvY2hlY2tzdW0uaApAQCAtMTEsNyArMTEsNiBAQAogI2lmbmRlZiBfWFRFTlNBX0NIRUNLU1VNX0gKICNkZWZpbmUgX1hURU5TQV9DSEVDS1NVTV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbjYuaD4KICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2RlbGF5LmggYi9pbmNsdWRlL2FzbS14dGVuc2EvZGVsYXkuaAppbmRleCAxYmM2MDFlLi5lMWQ4YzllIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvZGVsYXkuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvZGVsYXkuaApAQCAtMTIsNyArMTIsNiBAQAogI2lmbmRlZiBfWFRFTlNBX0RFTEFZX0gKICNkZWZpbmUgX1hURU5TQV9ERUxBWV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9kbWEuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9kbWEuaAppbmRleCAxYzIyYjAyLi5kYjI2MzNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2RtYS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfRE1BX0gKICNkZWZpbmUgX1hURU5TQV9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBuZWVkIGJ5dGUgSU8gKi8KICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2hhcmRpcnEuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9oYXJkaXJxLmgKaW5kZXggYWE5YzFhZC4uODdjYjE5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2hhcmRpcnEuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaGFyZGlycS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfSEFSRElSUV9ICiAjZGVmaW5lIF9YVEVOU0FfSEFSRElSUV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2lkZS5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lkZS5oCmluZGV4IGI1MjNjZDQuLjZiOTEyNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvaWRlLmgKQEAgLTE0LDcgKzE0LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZuZGVmIE1BWF9IV0lGUwogIyBkZWZpbmUgTUFYX0hXSUZTCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pby5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKaW5kZXggYzVjMTM5OC4uNTU2ZTVlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2lvLmgKQEAgLTEyLDcgKzEyLDYgQEAKICNkZWZpbmUgX1hURU5TQV9JT19ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnEuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9pcnEuaAppbmRleCBkOTg0ZTk1Li4wNDlmZGU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL2lycS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfSVJRX0gKICNkZWZpbmUgX1hURU5TQV9JUlFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL3BsYXRmb3JtL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlIDx4dGVuc2EvY29uZmlnL2NvcmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9tbXVfY29udGV4dC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL21tdV9jb250ZXh0LmgKaW5kZXggMzY0YTdiMC4uYWY2ODNhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL21tdV9jb250ZXh0LmgKQEAgLTEzLDcgKzEzLDYgQEAKICNpZm5kZWYgX1hURU5TQV9NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9YVEVOU0FfTU1VX0NPTlRFWFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wYWdlLmgKaW5kZXggOTkyYmFjNS4uNDBmNGM2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvcGFnZS5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvcGdhbGxvYy5oCmluZGV4IDczNGE4ZDAuLmQ1NmRkZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3BnYWxsb2MuaApAQCAtMTMsNyArMTMsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS5oCmluZGV4IDM2MTYzODkuLjQ4MTM1YTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9wbGF0Zm9ybS5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9YVEVOU0FfUExBVEZPUk1fSAogI2RlZmluZSBfWFRFTlNBX1BMQVRGT1JNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXh0ZW5zYS9zeXN0ZW0uaAppbmRleCBiMjlmN2FlLi5mOTg2MTcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2Evc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3N5c3RlbS5oCkBAIC0xMSw3ICsxMSw2IEBACiAjaWZuZGVmIF9YVEVOU0FfU1lTVEVNX0gKICNkZWZpbmUgX1hURU5TQV9TWVNURU1fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14dGVuc2EvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdW5pc3RkLmgKaW5kZXggNmIzOWQ2Ni4uNWUxYjk5ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXh0ZW5zYS91bmlzdGQuaApAQCAtMTEsOCArMTEsNiBAQAogI2lmbmRlZiBfWFRFTlNBX1VOSVNURF9ICiAjZGVmaW5lIF9YVEVOU0FfVU5JU1REX0gKIAotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLQogI2RlZmluZSBfX05SX3NwaWxsCQkgIDAKICNkZWZpbmUgX19OUl9leGl0CQkgIDEKICNkZWZpbmUgX19OUl9yZWFkCQkgIDMKQEAgLTIyMSwyMSArMjE5LDkgQEAKICNkZWZpbmUgU1lTWFRFTlNBX0NPVU5UCQkgICA1CS8qIGNvdW50IG9mIHN5c2NhbGwwIGZ1bmN0aW9ucyovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKSByZXR1cm4gKCh0eXBlKShyZXMpKQotI2Vsc2UKLSNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKLWRvIHsgXAotCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNSkpIHsgXAotCS8qIEF2b2lkIHVzaW5nICJyZXMiIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIHIyOyBcCi0JICogZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKLQkJaW50IF9fZXJyID0gLShyZXMpOyBcCi0JCWVycm5vID0gX19lcnI7IFwKLQkJcmVzID0gLTE7IFwKLQl9IFwKLQlyZXR1cm4gKHR5cGUpIChyZXMpOyBcCi19IHdoaWxlICgwKQotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCisjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKSByZXR1cm4gKCh0eXBlKShyZXMpKQogCiAvKiBUZW5zaWxpY2EncyB4dC14Y2MgY29tcGlsZXIgaXMgbXVjaCBtb3JlIGFncmVzc2l2ZSBhdCBjb2RlCiAgKiBvcHRpbWl6YXRpb24gdGhhbiBnY2MuICBNdWx0aXBsZSBfX2FzbV9fIHN0YXRlbWVudHMgYXJlCkBAIC00MjksMTEgKzQxNSwxMCBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIik7CiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NUQVQ2NAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0xMU0VFSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCi0jZW5kaWYKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfWFRFTlNBX1VOSVNURF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjY3QuaCBiL2luY2x1ZGUvbGludXgvYWNjdC5oCmluZGV4IDlhNjY0MDEuLjNkNTRmYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNjdC5oCkBAIC0xNiw3ICsxNiw2IEBACiAjZGVmaW5lIF9MSU5VWF9BQ0NUX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtMTE2LDcgKzExNSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUCiBzdHJ1Y3QgdmZzbW91bnQ7CkBAIC0xNjUsNiArMTYzLDcgQEAKICNlbmRpZgkvKiBfX0tFUk5FTCAqLwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KIC8qCiAgKiBZZXQgYW5vdGhlciBzZXQgb2YgSFogdG8gKkhaIGhlbHBlciBmdW5jdGlvbnMuCiAgKiBTZWUgPGxpbnV4L2ppZmZpZXMuaD4gZm9yIHRoZSBvcmlnaW5hbC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNwaS5oIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKaW5kZXggZDNiYzI1ZS4uMWNmMGI5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY3BpLmgKKysrIGIvaW5jbHVkZS9saW51eC9hY3BpLmgKQEAgLTI1LDcgKzI1LDYgQEAKICNpZm5kZWYgX0xJTlVYX0FDUElfSAogI2RlZmluZSBfTElOVVhfQUNQSV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmCUNPTkZJR19BQ1BJCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWZmc19oYXJkYmxvY2tzLmggYi9pbmNsdWRlL2xpbnV4L2FmZnNfaGFyZGJsb2Nrcy5oCmluZGV4IDNmYjg2OTkuLmYxYjk0OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWZmc19oYXJkYmxvY2tzLmgKKysrIGIvaW5jbHVkZS9saW51eC9hZmZzX2hhcmRibG9ja3MuaApAQCAtMSw0NSArMSw0NyBAQAogI2lmbmRlZglBRkZTX0hBUkRCTE9DS1NfSAogI2RlZmluZQlBRkZTX0hBUkRCTE9DS1NfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogLyogSnVzdCB0aGUgbmVlZGVkIGRlZmluaXRpb25zIGZvciB0aGUgUkRCIG9mIGFuIEFtaWdhIEhELiAqLwogCiBzdHJ1Y3QgUmlnaWREaXNrQmxvY2sgewotCXUzMglyZGJfSUQ7CisJX191MzIJcmRiX0lEOwogCV9fYmUzMglyZGJfU3VtbWVkTG9uZ3M7Ci0JczMyCXJkYl9DaGtTdW07Ci0JdTMyCXJkYl9Ib3N0SUQ7CisJX19zMzIJcmRiX0Noa1N1bTsKKwlfX3UzMglyZGJfSG9zdElEOwogCV9fYmUzMglyZGJfQmxvY2tCeXRlczsKLQl1MzIJcmRiX0ZsYWdzOwotCXUzMglyZGJfQmFkQmxvY2tMaXN0OworCV9fdTMyCXJkYl9GbGFnczsKKwlfX3UzMglyZGJfQmFkQmxvY2tMaXN0OwogCV9fYmUzMglyZGJfUGFydGl0aW9uTGlzdDsKLQl1MzIJcmRiX0ZpbGVTeXNIZWFkZXJMaXN0OwotCXUzMglyZGJfRHJpdmVJbml0OwotCXUzMglyZGJfUmVzZXJ2ZWQxWzZdOwotCXUzMglyZGJfQ3lsaW5kZXJzOwotCXUzMglyZGJfU2VjdG9yczsKLQl1MzIJcmRiX0hlYWRzOwotCXUzMglyZGJfSW50ZXJsZWF2ZTsKLQl1MzIJcmRiX1Bhcms7Ci0JdTMyCXJkYl9SZXNlcnZlZDJbM107Ci0JdTMyCXJkYl9Xcml0ZVByZUNvbXA7Ci0JdTMyCXJkYl9SZWR1Y2VkV3JpdGU7Ci0JdTMyCXJkYl9TdGVwUmF0ZTsKLQl1MzIJcmRiX1Jlc2VydmVkM1s1XTsKLQl1MzIJcmRiX1JEQkJsb2Nrc0xvOwotCXUzMglyZGJfUkRCQmxvY2tzSGk7Ci0JdTMyCXJkYl9Mb0N5bGluZGVyOwotCXUzMglyZGJfSGlDeWxpbmRlcjsKLQl1MzIJcmRiX0N5bEJsb2NrczsKLQl1MzIJcmRiX0F1dG9QYXJrU2Vjb25kczsKLQl1MzIJcmRiX0hpZ2hSRFNLQmxvY2s7Ci0JdTMyCXJkYl9SZXNlcnZlZDQ7CisJX191MzIJcmRiX0ZpbGVTeXNIZWFkZXJMaXN0OworCV9fdTMyCXJkYl9Ecml2ZUluaXQ7CisJX191MzIJcmRiX1Jlc2VydmVkMVs2XTsKKwlfX3UzMglyZGJfQ3lsaW5kZXJzOworCV9fdTMyCXJkYl9TZWN0b3JzOworCV9fdTMyCXJkYl9IZWFkczsKKwlfX3UzMglyZGJfSW50ZXJsZWF2ZTsKKwlfX3UzMglyZGJfUGFyazsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQyWzNdOworCV9fdTMyCXJkYl9Xcml0ZVByZUNvbXA7CisJX191MzIJcmRiX1JlZHVjZWRXcml0ZTsKKwlfX3UzMglyZGJfU3RlcFJhdGU7CisJX191MzIJcmRiX1Jlc2VydmVkM1s1XTsKKwlfX3UzMglyZGJfUkRCQmxvY2tzTG87CisJX191MzIJcmRiX1JEQkJsb2Nrc0hpOworCV9fdTMyCXJkYl9Mb0N5bGluZGVyOworCV9fdTMyCXJkYl9IaUN5bGluZGVyOworCV9fdTMyCXJkYl9DeWxCbG9ja3M7CisJX191MzIJcmRiX0F1dG9QYXJrU2Vjb25kczsKKwlfX3UzMglyZGJfSGlnaFJEU0tCbG9jazsKKwlfX3UzMglyZGJfUmVzZXJ2ZWQ0OwogCWNoYXIJcmRiX0Rpc2tWZW5kb3JbOF07CiAJY2hhcglyZGJfRGlza1Byb2R1Y3RbMTZdOwogCWNoYXIJcmRiX0Rpc2tSZXZpc2lvbls0XTsKIAljaGFyCXJkYl9Db250cm9sbGVyVmVuZG9yWzhdOwogCWNoYXIJcmRiX0NvbnRyb2xsZXJQcm9kdWN0WzE2XTsKIAljaGFyCXJkYl9Db250cm9sbGVyUmV2aXNpb25bNF07Ci0JdTMyCXJkYl9SZXNlcnZlZDVbMTBdOworCV9fdTMyCXJkYl9SZXNlcnZlZDVbMTBdOwogfTsKIAogI2RlZmluZQlJRE5BTUVfUklHSURESVNLCTB4NTI0NDUzNEIJLyogIlJEU0siICovCkBAIC00NywxNiArNDksMTYgQEAKIHN0cnVjdCBQYXJ0aXRpb25CbG9jayB7CiAJX19iZTMyCXBiX0lEOwogCV9fYmUzMglwYl9TdW1tZWRMb25nczsKLQlzMzIJcGJfQ2hrU3VtOwotCXUzMglwYl9Ib3N0SUQ7CisJX19zMzIJcGJfQ2hrU3VtOworCV9fdTMyCXBiX0hvc3RJRDsKIAlfX2JlMzIJcGJfTmV4dDsKLQl1MzIJcGJfRmxhZ3M7Ci0JdTMyCXBiX1Jlc2VydmVkMVsyXTsKLQl1MzIJcGJfRGV2RmxhZ3M7Ci0JdTgJcGJfRHJpdmVOYW1lWzMyXTsKLQl1MzIJcGJfUmVzZXJ2ZWQyWzE1XTsKKwlfX3UzMglwYl9GbGFnczsKKwlfX3UzMglwYl9SZXNlcnZlZDFbMl07CisJX191MzIJcGJfRGV2RmxhZ3M7CisJX191OAlwYl9Ecml2ZU5hbWVbMzJdOworCV9fdTMyCXBiX1Jlc2VydmVkMlsxNV07CiAJX19iZTMyCXBiX0Vudmlyb25tZW50WzE3XTsKLQl1MzIJcGJfRVJlc2VydmVkWzE1XTsKKwlfX3UzMglwYl9FUmVzZXJ2ZWRbMTVdOwogfTsKIAogI2RlZmluZQlJRE5BTUVfUEFSVElUSU9OCTB4NTA0MTUyNTQJLyogIlBBUlQiICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FncGdhcnQuaCBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCmluZGV4IDZkNTljOGUuLmJmYjhlYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWdwZ2FydC5oCkBAIC0yNyw4ICsyNyw2IEBACiAjaWZuZGVmIF9BR1BfSAogI2RlZmluZSBfQUdQX0ggMQogCi0jaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KLQogI2RlZmluZSBBR1BJT0NfQkFTRSAgICAgICAnQScKICNkZWZpbmUgQUdQSU9DX0lORk8gICAgICAgX0lPUiAoQUdQSU9DX0JBU0UsIDAsIHN0cnVjdCBhZ3BfaW5mbyopCiAjZGVmaW5lIEFHUElPQ19BQ1FVSVJFICAgIF9JTyAgKEFHUElPQ19CQVNFLCAxKQpAQCAtMTEyLDYgKzExMCw3IEBACiAKICNlbHNlCQkJCS8qIF9fS0VSTkVMX18gKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2FncF9iYWNrZW5kLmg+CiAKICNkZWZpbmUgQUdQR0FSVF9NSU5PUiAxNzUKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaCBiL2luY2x1ZGUvbGludXgvYW1iYS9jbGNkLmgKaW5kZXggOWNmNjRiMS4uMjljMDQ0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hbWJhL2NsY2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2FtYmEvY2xjZC5oCkBAIC05LDcgKzksNiBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1kZXYuaCBiL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKaW5kZXggYjIwM2VhOC4uMWViMjM4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdG1kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCkBAIC0yMDksNyArMjA5LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4gLyogd2FpdF9xdWV1ZV9oZWFkX3QgKi8KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+IC8qIHN0cnVjdCB0aW1ldmFsICovCiAjaW5jbHVkZSA8bGludXgvbmV0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmggYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKaW5kZXggYjc0YzE0OC4uZTA1MWZmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hdWRpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYXVkaXQuaApAQCAtMjQsOCArMjQsNyBAQAogI2lmbmRlZiBfTElOVVhfQVVESVRfSF8KICNkZWZpbmUgX0xJTlVYX0FVRElUX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi1lbS5oPgogCiAvKiBUaGUgbmV0bGluayBtZXNzYWdlcyBmb3IgdGhlIGF1ZGl0IHN5c3RlbSBpcyBkaXZpZGVkIGludG8gYmxvY2tzOgogICogMTAwMCAtIDEwOTkgYXJlIGZvciBjb21tYW5kaW5nIHRoZSBhdWRpdCBzeXN0ZW0KQEAgLTgzLDcgKzgyLDEyIEBACiAjZGVmaW5lIEFVRElUX0NPTkZJR19DSEFOR0UJMTMwNQkvKiBBdWRpdCBzeXN0ZW0gY29uZmlndXJhdGlvbiBjaGFuZ2UgKi8KICNkZWZpbmUgQVVESVRfU09DS0FERFIJCTEzMDYJLyogc29ja2FkZHIgY29waWVkIGFzIHN5c2NhbGwgYXJnICovCiAjZGVmaW5lIEFVRElUX0NXRAkJMTMwNwkvKiBDdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5ICovCisjZGVmaW5lIEFVRElUX0VYRUNWRQkJMTMwOQkvKiBleGVjdmUgYXJndW1lbnRzICovCiAjZGVmaW5lIEFVRElUX0lQQ19TRVRfUEVSTQkxMzExCS8qIElQQyBuZXcgcGVybWlzc2lvbnMgcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfT1BFTgkJMTMxMgkvKiBQT1NJWCBNUSBvcGVuIHJlY29yZCB0eXBlICovCisjZGVmaW5lIEFVRElUX01RX1NFTkRSRUNWCTEzMTMJLyogUE9TSVggTVEgc2VuZC9yZWNlaXZlIHJlY29yZCB0eXBlICovCisjZGVmaW5lIEFVRElUX01RX05PVElGWQkJMTMxNAkvKiBQT1NJWCBNUSBub3RpZnkgcmVjb3JkIHR5cGUgKi8KKyNkZWZpbmUgQVVESVRfTVFfR0VUU0VUQVRUUgkxMzE1CS8qIFBPU0lYIE1RIGdldC9zZXQgYXR0cmlidXRlIHJlY29yZCB0eXBlICovCiAKICNkZWZpbmUgQVVESVRfQVZDCQkxNDAwCS8qIFNFIExpbnV4IGF2YyBkZW5pYWwgb3IgZ3JhbnQgKi8KICNkZWZpbmUgQVVESVRfU0VMSU5VWF9FUlIJMTQwMQkvKiBJbnRlcm5hbCBTRSBMaW51eCBFcnJvcnMgKi8KQEAgLTE1MSw2ICsxNTUsNyBAQAogI2RlZmluZSBBVURJVF9TRV9UWVBFCTE1CS8qIHNlY3VyaXR5IGxhYmVsIHR5cGUgKi8KICNkZWZpbmUgQVVESVRfU0VfU0VOCTE2CS8qIHNlY3VyaXR5IGxhYmVsIHNlbnNpdGl2aXR5IGxhYmVsICovCiAjZGVmaW5lIEFVRElUX1NFX0NMUgkxNwkvKiBzZWN1cml0eSBsYWJlbCBjbGVhcmFuY2UgbGFiZWwgKi8KKyNkZWZpbmUgQVVESVRfUFBJRAkxOAogCiAJCQkJLyogVGhlc2UgYXJlIE9OTFkgdXNlZnVsIHdoZW4gY2hlY2tpbmcKIAkJCQkgKiBhdCBzeXNjYWxsIGV4aXQgdGltZSAoQVVESVRfQVRfRVhJVCkuICovCkBAIC0xNTksNiArMTY0LDcgQEAKICNkZWZpbmUgQVVESVRfSU5PREUJMTAyCiAjZGVmaW5lIEFVRElUX0VYSVQJMTAzCiAjZGVmaW5lIEFVRElUX1NVQ0NFU1MgICAxMDQJLyogZXhpdCA+PSAwOyB2YWx1ZSBpZ25vcmVkICovCisjZGVmaW5lIEFVRElUX1dBVENICTEwNQogCiAjZGVmaW5lIEFVRElUX0FSRzAgICAgICAyMDAKICNkZWZpbmUgQVVESVRfQVJHMSAgICAgIChBVURJVF9BUkcwKzEpCkBAIC0yNzMsMTYgKzI3OSwyMSBAQAogfTsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiBzdHJ1Y3QgYXVkaXRfc2lnX2luZm8gewogCXVpZF90CQl1aWQ7CiAJcGlkX3QJCXBpZDsKKwljaGFyCQljdHhbMF07CiB9OwogCiBzdHJ1Y3QgYXVkaXRfYnVmZmVyOwogc3RydWN0IGF1ZGl0X2NvbnRleHQ7CiBzdHJ1Y3QgaW5vZGU7CiBzdHJ1Y3QgbmV0bGlua19za2JfcGFybXM7CitzdHJ1Y3QgbGludXhfYmlucHJtOworc3RydWN0IG1xX2F0dHI7CitzdHJ1Y3QgbXFzdGF0OwogCiAjZGVmaW5lIEFVRElUU0NfSU5WQUxJRCAwCiAjZGVmaW5lIEFVRElUU0NfU1VDQ0VTUyAxCkBAIC0yOTcsMTUgKzMwOCwxOSBAQAogCQkJCWludCBtYWpvciwgdW5zaWduZWQgbG9uZyBhMCwgdW5zaWduZWQgbG9uZyBhMSwKIAkJCQl1bnNpZ25lZCBsb25nIGEyLCB1bnNpZ25lZCBsb25nIGEzKTsKIGV4dGVybiB2b2lkIGF1ZGl0X3N5c2NhbGxfZXhpdChpbnQgZmFpbGVkLCBsb25nIHJldHVybl9jb2RlKTsKLWV4dGVybiB2b2lkIGF1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBfX2F1ZGl0X2dldG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBhdWRpdF9wdXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgX19hdWRpdF9pbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBmbGFncyk7CitleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHZvaWQgX19hdWRpdF9pbm9kZV9jaGlsZChjb25zdCBjaGFyICpkbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQl1bnNpZ25lZCBsb25nIHBpbm8pOwotc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICAgICAgdW5zaWduZWQgZmxhZ3MpIHsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9nZXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CiAJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQotCQlfX2F1ZGl0X2lub2RlKG5hbWUsIGlub2RlLCBmbGFncyk7CisJCV9fYXVkaXRfZ2V0bmFtZShuYW1lKTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9pbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlfX2F1ZGl0X2lub2RlKG5hbWUsIGlub2RlKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9pbm9kZV9jaGlsZChjb25zdCBjaGFyICpkbmFtZSwgCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCAKQEAgLTMyMCwxMyArMzM1LDYxIEBACiAJCQkgICAgICBzdHJ1Y3QgdGltZXNwZWMgKnQsIHVuc2lnbmVkIGludCAqc2VyaWFsKTsKIGV4dGVybiBpbnQgIGF1ZGl0X3NldF9sb2dpbnVpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVpZF90IGxvZ2ludWlkKTsKIGV4dGVybiB1aWRfdCBhdWRpdF9nZXRfbG9naW51aWQoc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCk7Ci1leHRlcm4gaW50IGF1ZGl0X2lwY19vYmooc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApOwotZXh0ZXJuIGludCBhdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSwgc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApOworZXh0ZXJuIGludCBfX2F1ZGl0X2lwY19vYmooc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApOworZXh0ZXJuIGludCBfX2F1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlKTsKK2V4dGVybiBpbnQgYXVkaXRfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTsKIGV4dGVybiBpbnQgYXVkaXRfc29ja2V0Y2FsbChpbnQgbmFyZ3MsIHVuc2lnbmVkIGxvbmcgKmFyZ3MpOwogZXh0ZXJuIGludCBhdWRpdF9zb2NrYWRkcihpbnQgbGVuLCB2b2lkICphZGRyKTsKIGV4dGVybiBpbnQgYXVkaXRfYXZjX3BhdGgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7Ci1leHRlcm4gdm9pZCBhdWRpdF9zaWduYWxfaW5mbyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogZXh0ZXJuIGludCBhdWRpdF9zZXRfbWFjeGF0dHIoY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gaW50IF9fYXVkaXRfbXFfb3BlbihpbnQgb2ZsYWcsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgbXFfYXR0ciBfX3VzZXIgKnVfYXR0cik7CitleHRlcm4gaW50IF9fYXVkaXRfbXFfdGltZWRzZW5kKG1xZF90IG1xZGVzLCBzaXplX3QgbXNnX2xlbiwgdW5zaWduZWQgaW50IG1zZ19wcmlvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1X2Fic190aW1lb3V0KTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV90aW1lZHJlY2VpdmUobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgX191c2VyICp1X21zZ19wcmlvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1X2Fic190aW1lb3V0KTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV9ub3RpZnkobXFkX3QgbXFkZXMsIGNvbnN0IHN0cnVjdCBzaWdldmVudCBfX3VzZXIgKnVfbm90aWZpY2F0aW9uKTsKK2V4dGVybiBpbnQgX19hdWRpdF9tcV9nZXRzZXRhdHRyKG1xZF90IG1xZGVzLCBzdHJ1Y3QgbXFfYXR0ciAqbXFzdGF0KTsKKworc3RhdGljIGlubGluZSBpbnQgYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCkKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X2lwY19vYmooaXBjcCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSkKK3sKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJCXJldHVybiBfX2F1ZGl0X2lwY19zZXRfcGVybShxYnl0ZXMsIHVpZCwgZ2lkLCBtb2RlKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X21xX29wZW4oaW50IG9mbGFnLCBtb2RlX3QgbW9kZSwgc3RydWN0IG1xX2F0dHIgX191c2VyICp1X2F0dHIpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV9vcGVuKG9mbGFnLCBtb2RlLCB1X2F0dHIpOworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfdGltZWRzZW5kKG1xZF90IG1xZGVzLCBzaXplX3QgbXNnX2xlbiwgdW5zaWduZWQgaW50IG1zZ19wcmlvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1X2Fic190aW1lb3V0KQoreworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwkJcmV0dXJuIF9fYXVkaXRfbXFfdGltZWRzZW5kKG1xZGVzLCBtc2dfbGVuLCBtc2dfcHJpbywgdV9hYnNfdGltZW91dCk7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV90aW1lZHJlY2VpdmUobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgX191c2VyICp1X21zZ19wcmlvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1X2Fic190aW1lb3V0KQoreworCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwkJcmV0dXJuIF9fYXVkaXRfbXFfdGltZWRyZWNlaXZlKG1xZGVzLCBtc2dfbGVuLCB1X21zZ19wcmlvLCB1X2Fic190aW1lb3V0KTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X21xX25vdGlmeShtcWRfdCBtcWRlcywgY29uc3Qgc3RydWN0IHNpZ2V2ZW50IF9fdXNlciAqdV9ub3RpZmljYXRpb24pCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV9ub3RpZnkobXFkZXMsIHVfbm90aWZpY2F0aW9uKTsKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X21xX2dldHNldGF0dHIobXFkX3QgbXFkZXMsIHN0cnVjdCBtcV9hdHRyICptcXN0YXQpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlyZXR1cm4gX19hdWRpdF9tcV9nZXRzZXRhdHRyKG1xZGVzLCBtcXN0YXQpOworCXJldHVybiAwOworfQogI2Vsc2UKICNkZWZpbmUgYXVkaXRfYWxsb2ModCkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfZnJlZSh0KSBkbyB7IDsgfSB3aGlsZSAoMCkKQEAgLTMzNCwxOSArMzk3LDI0IEBACiAjZGVmaW5lIGF1ZGl0X3N5c2NhbGxfZXhpdChmLHIpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9nZXRuYW1lKG4pIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9wdXRuYW1lKG4pIGRvIHsgOyB9IHdoaWxlICgwKQotI2RlZmluZSBfX2F1ZGl0X2lub2RlKG4saSxmKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19hdWRpdF9pbm9kZShuLGkpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBfX2F1ZGl0X2lub2RlX2NoaWxkKGQsaSxwKSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfaW5vZGUobixpLGYpIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9pbm9kZShuLGkpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9pbm9kZV9jaGlsZChkLGkscCkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0c2NfZ2V0X3N0YW1wKGMsdCxzKSBkbyB7IEJVRygpOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9nZXRfbG9naW51aWQoYykgKHsgLTE7IH0pCiAjZGVmaW5lIGF1ZGl0X2lwY19vYmooaSkgKHsgMDsgfSkKLSNkZWZpbmUgYXVkaXRfaXBjX3NldF9wZXJtKHEsdSxnLG0saSkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfaXBjX3NldF9wZXJtKHEsdSxnLG0pICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X2Jwcm0ocCkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfc29ja2V0Y2FsbChuLGEpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X3NvY2thZGRyKGxlbiwgYWRkcikgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfYXZjX3BhdGgoZGVudHJ5LCBtbnQpICh7IDA7IH0pCi0jZGVmaW5lIGF1ZGl0X3NpZ25hbF9pbmZvKHMsdCkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X3NldF9tYWN4YXR0cihuKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfbXFfb3BlbihvLG0sYSkgKHsgMDsgfSkKKyNkZWZpbmUgYXVkaXRfbXFfdGltZWRzZW5kKGQsbCxwLHQpICh7IDA7IH0pCisjZGVmaW5lIGF1ZGl0X21xX3RpbWVkcmVjZWl2ZShkLGwscCx0KSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9tcV9ub3RpZnkoZCxuKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9tcV9nZXRzZXRhdHRyKGQscykgKHsgMDsgfSkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FVRElUCkBAIC0zNjQsOCArNDMyLDExIEBACiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X2xvZ19oZXgoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCiAJCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAogCQkJCQkgIHNpemVfdCBsZW4pOwotZXh0ZXJuIHZvaWQJCSAgICBhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLAorZXh0ZXJuIGNvbnN0IGNoYXIgKgkgICAgYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKIAkJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyk7CitleHRlcm4gY29uc3QgY2hhciAqCSAgICBhdWRpdF9sb2dfbl91bnRydXN0ZWRzdHJpbmcoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsCisJCQkJCQkJc2l6ZV90IG4sCisJCQkJCQkJY29uc3QgY2hhciAqc3RyaW5nKTsKIGV4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX2RfcGF0aChzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYiwKIAkJCQkJICAgICBjb25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LApAQCAtMzgzLDggKzQ1NCw4IEBACiAjZGVmaW5lIGF1ZGl0X2xvZ19lbmQoYikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2xvZ19oZXgoYSxiLGwpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGEscykgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIGF1ZGl0X2xvZ19uX3VudHJ1c3RlZHN0cmluZyhhLG4scykgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2xvZ19kX3BhdGgoYixwLGQsdikgZG8geyA7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGF1ZGl0X3BhbmljKG0pIGRvIHsgOyB9IHdoaWxlICgwKQogI2VuZGlmCiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggNTllMTI1OS4uNWQzMjczMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfQkxLREVWX0gKICNkZWZpbmUgX0xJTlVYX0JMS0RFVl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtwZy5oIGIvaW5jbHVkZS9saW51eC9ibGtwZy5oCmluZGV4IGJlNWQwZjQuLmZhZjhhNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrcGcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa3BnLmgKQEAgLTI0LDYgKzI0LDcgQEAKICAqCiAgKiBGb3IgdG9kYXksIG9ubHkgdGhlIHBhcnRpdGlvbiBzdHVmZiAtIGFlYiwgOTkwNTE1CiAgKi8KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKICNkZWZpbmUgQkxLUEcgICAgICBfSU8oMHgxMiwxMDUpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCBiMzRkM2U3Li5lYjFhODY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIEJMS1RSQUNFX0gKICNkZWZpbmUgQkxLVFJBQ0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVsYXkuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibG9ja2dyb3VwX2xvY2suaCBiL2luY2x1ZGUvbGludXgvYmxvY2tncm91cF9sb2NrLmgKaW5kZXggMDEzN2VlNS4uODYwNzMxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibG9ja2dyb3VwX2xvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCkBAIC02LDcgKzYsNiBAQAogICogU2ltcGxlIGhhc2hlZCBzcGlubG9ja2luZy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2NhY2hlLmgKaW5kZXggY2M0YjNhYS4uNDU1MjUwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FjaGUuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX19MSU5VWF9DQUNIRV9ICiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIAogI2lmbmRlZiBMMV9DQUNIRV9BTElHTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb2RhLmggYi9pbmNsdWRlL2xpbnV4L2NvZGEuaAppbmRleCBiYmM1YWZjLi5iNWNmMDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvZGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvZGEuaApAQCAtNTksNyArNTksNiBAQAogI2lmbmRlZiBfQ09EQV9IRUFERVJfCiAjZGVmaW5lIF9DT0RBX0hFQURFUl8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBDYXRjaCBuZXcgX0tFUk5FTCBkZWZuIGZvciBOZXRCU0QgYW5kIERKR1BQL19fQ1lHV0lOMzJfXyAqLwogI2lmIGRlZmluZWQoX19OZXRCU0RfXykgfHwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21wYXQuaCBiL2luY2x1ZGUvbGludXgvY29tcGF0LmgKaW5kZXggNmQzYTY1NC4uZGRhMTY5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21wYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCkBAIC00LDcgKzQsNiBAQAogICogVGhlc2UgYXJlIHRoZSB0eXBlIGRlZmluaXRpb25zIGZvciB0aGUgYXJjaGl0ZWN0dXJlIHNwZWNpZmljCiAgKiBzeXNjYWxsIGNvbXBhdGliaWxpdHkgbGF5ZXIuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19DT01QQVQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCmluZGV4IGYyM2QzYzYuLjliNGYxMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKQEAgLTc4LDYgKzc4LDcgQEAKIAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCisjaWZkZWYgX19LRVJORUxfXwogLyoKICAqIEFsbG93IHVzIHRvIG1hcmsgZnVuY3Rpb25zIGFzICdkZXByZWNhdGVkJyBhbmQgaGF2ZSBnY2MgZW1pdCBhIG5pY2UKICAqIHdhcm5pbmcgZm9yIGVhY2ggdXNlLCBpbiBob3BlcyBvZiBzcGVlZGluZyB0aGUgZnVuY3Rpb25zIHJlbW92YWwuCkBAIC0xMjcsNiArMTI4LDE2IEBACiAjIGRlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18JLyogdW5pbXBsZW1lbnRlZCAqLwogI2VuZGlmCiAKKyNpZm5kZWYgbm9pbmxpbmUKKyNkZWZpbmUgbm9pbmxpbmUKKyNlbmRpZgorCisjaWZuZGVmIF9fYWx3YXlzX2lubGluZQorI2RlZmluZSBfX2Fsd2F5c19pbmxpbmUgaW5saW5lCisjZW5kaWYKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogLyoKICAqIEZyb20gdGhlIEdDQyBtYW51YWw6CiAgKgpAQCAtMTQ1LDEyICsxNTYsNCBAQAogIyBkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXwkvKiB1bmltcGxlbWVudGVkICovCiAjZW5kaWYKIAotI2lmbmRlZiBub2lubGluZQotI2RlZmluZSBub2lubGluZQotI2VuZGlmCi0KLSNpZm5kZWYgX19hbHdheXNfaW5saW5lCi0jZGVmaW5lIF9fYWx3YXlzX2lubGluZSBpbmxpbmUKLSNlbmRpZgotCiAjZW5kaWYgLyogX19MSU5VWF9DT01QSUxFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaCBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCmluZGV4IDE3ODY2ZDcuLjVhYTk1MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1ZnJlcS5oCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIF9MSU5VWF9DUFVGUkVRX0gKIAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oIGIvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaAppbmRleCBhODk0OGYzLi5hNDFmMzg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmgKQEAgLTEsMTMgKzEsNyBAQAogI2lmbmRlZiBfX0NSQU1GU19ICiAjZGVmaW5lIF9fQ1JBTUZTX0gKIAotI2lmbmRlZiBfX0tFUk5FTF9fCi0KLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdTE2OwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOwotCi0jZW5kaWYKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAjZGVmaW5lIENSQU1GU19NQUdJQwkJMHgyOGNkM2Q0NQkvKiBzb21lIHJhbmRvbSBudW1iZXIgKi8KICNkZWZpbmUgQ1JBTUZTX1NJR05BVFVSRQkiQ29tcHJlc3NlZCBST01GUyIKQEAgLTMzLDkgKzI3LDkgQEAKICAqIFJlYXNvbmFibHkgdGVyc2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIGlub2RlIGRhdGEuCiAgKi8KIHN0cnVjdCBjcmFtZnNfaW5vZGUgewotCXUzMiBtb2RlOkNSQU1GU19NT0RFX1dJRFRILCB1aWQ6Q1JBTUZTX1VJRF9XSURUSDsKKwlfX3UzMiBtb2RlOkNSQU1GU19NT0RFX1dJRFRILCB1aWQ6Q1JBTUZTX1VJRF9XSURUSDsKIAkvKiBTSVpFIGZvciBkZXZpY2UgZmlsZXMgaXMgaV9yZGV2ICovCi0JdTMyIHNpemU6Q1JBTUZTX1NJWkVfV0lEVEgsIGdpZDpDUkFNRlNfR0lEX1dJRFRIOworCV9fdTMyIHNpemU6Q1JBTUZTX1NJWkVfV0lEVEgsIGdpZDpDUkFNRlNfR0lEX1dJRFRIOwogCS8qIE5BTUVMRU4gaXMgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBuYW1lLCBkaXZpZGVkIGJ5IDQgYW5kCiAgICAgICAgICAgIHJvdW5kZWQgdXAuICAoY3JhbWZzIGRvZXNuJ3Qgc3VwcG9ydCBoYXJkIGxpbmtzLikgKi8KIAkvKiBPRkZTRVQ6IEZvciBzeW1saW5rcyBhbmQgbm9uLWVtcHR5IHJlZ3VsYXIgZmlsZXMsIHRoaXMKQEAgLTQ0LDI3ICszOCwyNyBAQAogCSAgIHNlZSBSRUFETUUpLiAgRm9yIG5vbi1lbXB0eSBkaXJlY3RvcmllcyBpdCBpcyB0aGUgb2Zmc2V0CiAJICAgKGRpdmlkZWQgYnkgNCkgb2YgdGhlIGlub2RlIG9mIHRoZSBmaXJzdCBmaWxlIGluIHRoYXQKIAkgICBkaXJlY3RvcnkuICBGb3IgYW55dGhpbmcgZWxzZSwgb2Zmc2V0IGlzIHplcm8uICovCi0JdTMyIG5hbWVsZW46Q1JBTUZTX05BTUVMRU5fV0lEVEgsIG9mZnNldDpDUkFNRlNfT0ZGU0VUX1dJRFRIOworCV9fdTMyIG5hbWVsZW46Q1JBTUZTX05BTUVMRU5fV0lEVEgsIG9mZnNldDpDUkFNRlNfT0ZGU0VUX1dJRFRIOwogfTsKIAogc3RydWN0IGNyYW1mc19pbmZvIHsKLQl1MzIgY3JjOwotCXUzMiBlZGl0aW9uOwotCXUzMiBibG9ja3M7Ci0JdTMyIGZpbGVzOworCV9fdTMyIGNyYzsKKwlfX3UzMiBlZGl0aW9uOworCV9fdTMyIGJsb2NrczsKKwlfX3UzMiBmaWxlczsKIH07CiAKIC8qCiAgKiBTdXBlcmJsb2NrIGluZm9ybWF0aW9uIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIEZTLgogICovCiBzdHJ1Y3QgY3JhbWZzX3N1cGVyIHsKLQl1MzIgbWFnaWM7CQkJLyogMHgyOGNkM2Q0NSAtIHJhbmRvbSBudW1iZXIgKi8KLQl1MzIgc2l6ZTsJCQkvKiBsZW5ndGggaW4gYnl0ZXMgKi8KLQl1MzIgZmxhZ3M7CQkJLyogZmVhdHVyZSBmbGFncyAqLwotCXUzMiBmdXR1cmU7CQkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KLQl1OCBzaWduYXR1cmVbMTZdOwkJLyogIkNvbXByZXNzZWQgUk9NRlMiICovCisJX191MzIgbWFnaWM7CQkJLyogMHgyOGNkM2Q0NSAtIHJhbmRvbSBudW1iZXIgKi8KKwlfX3UzMiBzaXplOwkJCS8qIGxlbmd0aCBpbiBieXRlcyAqLworCV9fdTMyIGZsYWdzOwkJCS8qIGZlYXR1cmUgZmxhZ3MgKi8KKwlfX3UzMiBmdXR1cmU7CQkJLyogcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KKwlfX3U4IHNpZ25hdHVyZVsxNl07CQkvKiAiQ29tcHJlc3NlZCBST01GUyIgKi8KIAlzdHJ1Y3QgY3JhbWZzX2luZm8gZnNpZDsJLyogdW5pcXVlIGZpbGVzeXN0ZW0gaW5mbyAqLwotCXU4IG5hbWVbMTZdOwkJCS8qIHVzZXItZGVmaW5lZCBuYW1lICovCisJX191OCBuYW1lWzE2XTsJCQkvKiB1c2VyLWRlZmluZWQgbmFtZSAqLwogCXN0cnVjdCBjcmFtZnNfaW5vZGUgcm9vdDsJLyogcm9vdCBpbm9kZSBkYXRhICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCAwYWIxYmMxLi41YTA0NzBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZm5kZWYgX0xJTlVYX0NSWVBUT19ICiAjZGVmaW5lIF9MSU5VWF9DUllQVE9fSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3ljbG9teC5oIGIvaW5jbHVkZS9saW51eC9jeWNsb214LmgKaW5kZXggMzAwZDcwNC4uYjg4ZjdmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jeWNsb214LmgKKysrIGIvaW5jbHVkZS9saW51eC9jeWNsb214LmgKQEAgLTI0LDcgKzI0LDYgQEAKICogMTk5OC8wOC8wOAlhY21lCQlWZXJzaW9uIDAuMC4xCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvd2Fucm91dGVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kY29va2llcy5oIGIvaW5jbHVkZS9saW51eC9kY29va2llcy5oCmluZGV4IDFkNjg0MjguLjBmZTdjZGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGNvb2tpZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Rjb29raWVzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIERDT09LSUVTX0gKICNkZWZpbmUgRENPT0tJRVNfSAogIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1BST0ZJTElORwogIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgvZGV2ZnNfZnNfa2VybmVsLmgKaW5kZXggODk4MTBlNy4uMGQ3NGE2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZmc19mc19rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmZzX2ZzX2tlcm5lbC5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfTElOVVhfREVWRlNfRlNfS0VSTkVMX0gKIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBlOGU1M2I5Li5iMmU1ZGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTExLDcgKzExLDYgQEAKICNpZm5kZWYgX0RFVklDRV9IXwogI2RlZmluZSBfREVWSUNFX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgva2xpc3QuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGl2ZXJ0LmggYi9pbmNsdWRlL2xpbnV4L2RpdmVydC5oCmluZGV4IDY5MTliMDkuLjhmYjRlOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGl2ZXJ0LmgKKysrIGIvaW5jbHVkZS9saW51eC9kaXZlcnQuaApAQCAtMjcsMTAgKzI3LDEwIEBACiB7CiAJaW50CQlkaXZlcnQ7ICAvKiBhcmUgd2UgYWN0aXZlICovCiAJdW5zaWduZWQgaW50IHByb3RvczsJLyogcHJvdG9jb2xzICovCi0JdTE2CQl0Y3BfZHN0W01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB0Y3AgZHN0IHBvcnRzIHRvIGRpdmVydCAqLwotCXUxNgkJdGNwX3NyY1tNQVhfRElWRVJUX1BPUlRTXTsgLyogc3BlY2lmaWMgdGNwIHNyYyBwb3J0cyB0byBkaXZlcnQgKi8KLQl1MTYJCXVkcF9kc3RbTUFYX0RJVkVSVF9QT1JUU107IC8qIHNwZWNpZmljIHVkcCBkc3QgcG9ydHMgdG8gZGl2ZXJ0ICovCi0JdTE2CQl1ZHBfc3JjW01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB1ZHAgc3JjIHBvcnRzIHRvIGRpdmVydCAqLworCV9fdTE2CQl0Y3BfZHN0W01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB0Y3AgZHN0IHBvcnRzIHRvIGRpdmVydCAqLworCV9fdTE2CQl0Y3Bfc3JjW01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB0Y3Agc3JjIHBvcnRzIHRvIGRpdmVydCAqLworCV9fdTE2CQl1ZHBfZHN0W01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB1ZHAgZHN0IHBvcnRzIHRvIGRpdmVydCAqLworCV9fdTE2CQl1ZHBfc3JjW01BWF9ESVZFUlRfUE9SVFNdOyAvKiBzcGVjaWZpYyB1ZHAgc3JjIHBvcnRzIHRvIGRpdmVydCAqLwogfTsKIAogLyoKQEAgLTQwLDEyICs0MCwxMiBAQAogCiB0eXBlZGVmIHVuaW9uIF9kaXZlcnRfY2ZfYXJnCiB7Ci0JczE2CQlpbnQxNjsKLQl1MTYJCXVpbnQxNjsKLQlzMzIJCWludDMyOwotCXUzMgkJdWludDMyOwotCXM2NAkJaW50NjQ7Ci0JdTY0CQl1aW50NjQ7CisJX19zMTYJCWludDE2OworCV9fdTE2CQl1aW50MTY7CisJX19zMzIJCWludDMyOworCV9fdTMyCQl1aW50MzI7CisJX19zNjQJCWludDY0OworCV9fdTY0CQl1aW50NjQ7CiAJdm9pZAlfX3VzZXIgKnB0cjsKIH0gZGl2ZXJ0X2NmX2FyZzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWkuaCBiL2luY2x1ZGUvbGludXgvZG1pLmgKaW5kZXggNjRmZDZjMy4uYjJjZDIwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtaS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfX0RNSV9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogZW51bSBkbWlfZmllbGQgewogCURNSV9OT05FLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaAppbmRleCBmMTM0YTAxLi4xMDJhOTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Rub3RpZnkuaApAQCAtMTgsNyArMTgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfRE5PVElGWQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VsZi1lbS5oIGIvaW5jbHVkZS9saW51eC9lbGYtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTRhOTZkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lbGYtZW0uaApAQCAtMCwwICsxLDQ0IEBACisjaWZuZGVmIF9MSU5VWF9FTEZfRU1fSAorI2RlZmluZSBfTElOVVhfRUxGX0VNX0gKKworLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgdmFyaW91cyBFTEYgdGFyZ2V0IG1hY2hpbmVzICovCisjZGVmaW5lIEVNX05PTkUJCTAKKyNkZWZpbmUgRU1fTTMyCQkxCisjZGVmaW5lIEVNX1NQQVJDCTIKKyNkZWZpbmUgRU1fMzg2CQkzCisjZGVmaW5lIEVNXzY4SwkJNAorI2RlZmluZSBFTV84OEsJCTUKKyNkZWZpbmUgRU1fNDg2CQk2CS8qIFBlcmhhcHMgZGlzdXNlZCAqLworI2RlZmluZSBFTV84NjAJCTcKKyNkZWZpbmUgRU1fTUlQUwkJOAkvKiBNSVBTIFIzMDAwIChvZmZpY2lhbGx5LCBiaWctZW5kaWFuIG9ubHkpICovCisjZGVmaW5lIEVNX01JUFNfUlM0X0JFCTEwCS8qIE1JUFMgUjQwMDAgYmlnLWVuZGlhbiAqLworI2RlZmluZSBFTV9QQVJJU0MJMTUJLyogSFBQQSAqLworI2RlZmluZSBFTV9TUEFSQzMyUExVUwkxOAkvKiBTdW4ncyAidjhwbHVzIiAqLworI2RlZmluZSBFTV9QUEMJCTIwCS8qIFBvd2VyUEMgKi8KKyNkZWZpbmUgRU1fUFBDNjQJMjEgICAgICAgLyogUG93ZXJQQzY0ICovCisjZGVmaW5lIEVNX1NICQk0MgkvKiBTdXBlckggKi8KKyNkZWZpbmUgRU1fU1BBUkNWOQk0MwkvKiBTUEFSQyB2OSA2NC1iaXQgKi8KKyNkZWZpbmUgRU1fSUFfNjQJNTAJLyogSFAvSW50ZWwgSUEtNjQgKi8KKyNkZWZpbmUgRU1fWDg2XzY0CTYyCS8qIEFNRCB4ODYtNjQgKi8KKyNkZWZpbmUgRU1fUzM5MAkJMjIJLyogSUJNIFMvMzkwICovCisjZGVmaW5lIEVNX0NSSVMJCTc2CS8qIEF4aXMgQ29tbXVuaWNhdGlvbnMgMzItYml0IGVtYmVkZGVkIHByb2Nlc3NvciAqLworI2RlZmluZSBFTV9WODUwCQk4NwkvKiBORUMgdjg1MCAqLworI2RlZmluZSBFTV9NMzJSCQk4OAkvKiBSZW5lc2FzIE0zMlIgKi8KKyNkZWZpbmUgRU1fSDhfMzAwCTQ2CS8qIFJlbmVzYXMgSDgvMzAwLDMwMEgsSDhTICovCisjZGVmaW5lIEVNX0ZSVgkJMHg1NDQxCS8qIEZ1aml0c3UgRlItViAqLworCisvKgorICogVGhpcyBpcyBhbiBpbnRlcmltIHZhbHVlIHRoYXQgd2Ugd2lsbCB1c2UgdW50aWwgdGhlIGNvbW1pdHRlZSBjb21lcworICogdXAgd2l0aCBhIGZpbmFsIG51bWJlci4KKyAqLworI2RlZmluZSBFTV9BTFBIQQkweDkwMjYKKworLyogQm9ndXMgb2xkIHY4NTAgbWFnaWMgbnVtYmVyLCB1c2VkIGJ5IG9sZCB0b29scy4gKi8KKyNkZWZpbmUgRU1fQ1lHTlVTX1Y4NTAJMHg5MDgwCisvKiBCb2d1cyBvbGQgbTMyciBtYWdpYyBudW1iZXIsIHVzZWQgYnkgb2xkIHRvb2xzLiAqLworI2RlZmluZSBFTV9DWUdOVVNfTTMyUgkweDkwNDEKKy8qIFRoaXMgaXMgdGhlIG9sZCBpbnRlcmltIHZhbHVlIGZvciBTLzM5MCBhcmNoaXRlY3R1cmUgKi8KKyNkZWZpbmUgRU1fUzM5MF9PTEQJMHhBMzkwCisKKworI2VuZGlmIC8qIF9MSU5VWF9FTEZfRU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGYuaCBiL2luY2x1ZGUvbGludXgvZWxmLmgKaW5kZXggZDNiZmFjYi4uYjcwZDFkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZi5oCkBAIC0zLDYgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KICNpbmNsdWRlIDxhc20vZWxmLmg+CiAKICNpZm5kZWYgZWxmX3JlYWRfaW1wbGllc19leGVjCkBAIC01NSw2NCArNTYsNiBAQAogI2RlZmluZSBFVF9MT1BST0MgMHhmZjAwCiAjZGVmaW5lIEVUX0hJUFJPQyAweGZmZmYKIAotLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgdmFyaW91cyBFTEYgdGFyZ2V0IG1hY2hpbmVzICovCi0jZGVmaW5lIEVNX05PTkUgIDAKLSNkZWZpbmUgRU1fTTMyICAgMQotI2RlZmluZSBFTV9TUEFSQyAyCi0jZGVmaW5lIEVNXzM4NiAgIDMKLSNkZWZpbmUgRU1fNjhLICAgNAotI2RlZmluZSBFTV84OEsgICA1Ci0jZGVmaW5lIEVNXzQ4NiAgIDYgICAvKiBQZXJoYXBzIGRpc3VzZWQgKi8KLSNkZWZpbmUgRU1fODYwICAgNwotCi0jZGVmaW5lIEVNX01JUFMJCTgJLyogTUlQUyBSMzAwMCAob2ZmaWNpYWxseSwgYmlnLWVuZGlhbiBvbmx5KSAqLwotCi0jZGVmaW5lIEVNX01JUFNfUlM0X0JFIDEwCS8qIE1JUFMgUjQwMDAgYmlnLWVuZGlhbiAqLwotCi0jZGVmaW5lIEVNX1BBUklTQyAgICAgIDE1CS8qIEhQUEEgKi8KLQotI2RlZmluZSBFTV9TUEFSQzMyUExVUyAxOAkvKiBTdW4ncyAidjhwbHVzIiAqLwotCi0jZGVmaW5lIEVNX1BQQwkgICAgICAgMjAJLyogUG93ZXJQQyAqLwotI2RlZmluZSBFTV9QUEM2NCAgICAgICAyMSAgICAgICAvKiBQb3dlclBDNjQgKi8KLQotI2RlZmluZSBFTV9TSAkgICAgICAgNDIJLyogU3VwZXJIICovCi0KLSNkZWZpbmUgRU1fU1BBUkNWOSAgICAgNDMJLyogU1BBUkMgdjkgNjQtYml0ICovCi0KLSNkZWZpbmUgRU1fSUFfNjQJNTAJLyogSFAvSW50ZWwgSUEtNjQgKi8KLQotI2RlZmluZSBFTV9YODZfNjQJNjIJLyogQU1EIHg4Ni02NCAqLwotCi0jZGVmaW5lIEVNX1MzOTAJCTIyCS8qIElCTSBTLzM5MCAqLwotCi0jZGVmaW5lIEVNX0NSSVMgICAgICAgICA3NiAgICAgIC8qIEF4aXMgQ29tbXVuaWNhdGlvbnMgMzItYml0IGVtYmVkZGVkIHByb2Nlc3NvciAqLwotCi0jZGVmaW5lIEVNX1Y4NTAJCTg3CS8qIE5FQyB2ODUwICovCi0KLSNkZWZpbmUgRU1fTTMyUgkJODgJLyogUmVuZXNhcyBNMzJSICovCi0KLSNkZWZpbmUgRU1fSDhfMzAwICAgICAgIDQ2ICAgICAgLyogUmVuZXNhcyBIOC8zMDAsMzAwSCxIOFMgKi8KLQotLyoKLSAqIFRoaXMgaXMgYW4gaW50ZXJpbSB2YWx1ZSB0aGF0IHdlIHdpbGwgdXNlIHVudGlsIHRoZSBjb21taXR0ZWUgY29tZXMKLSAqIHVwIHdpdGggYSBmaW5hbCBudW1iZXIuCi0gKi8KLSNkZWZpbmUgRU1fQUxQSEEJMHg5MDI2Ci0KLS8qIEJvZ3VzIG9sZCB2ODUwIG1hZ2ljIG51bWJlciwgdXNlZCBieSBvbGQgdG9vbHMuICAqLwotI2RlZmluZSBFTV9DWUdOVVNfVjg1MAkweDkwODAKLQotLyogQm9ndXMgb2xkIG0zMnIgbWFnaWMgbnVtYmVyLCB1c2VkIGJ5IG9sZCB0b29scy4gICovCi0jZGVmaW5lIEVNX0NZR05VU19NMzJSCTB4OTA0MQotCi0vKgotICogVGhpcyBpcyB0aGUgb2xkIGludGVyaW0gdmFsdWUgZm9yIFMvMzkwIGFyY2hpdGVjdHVyZQotICovCi0jZGVmaW5lIEVNX1MzOTBfT0xEICAgICAweEEzOTAKLQotI2RlZmluZSBFTV9GUlYJCTB4NTQ0MQkJLyogRnVqaXRzdSBGUi1WICovCi0KIC8qIFRoaXMgaXMgdGhlIGluZm8gdGhhdCBpcyBuZWVkZWQgdG8gcGFyc2UgdGhlIGR5bmFtaWMgc2VjdGlvbiBvZiB0aGUgZmlsZSAqLwogI2RlZmluZSBEVF9OVUxMCQkwCiAjZGVmaW5lIERUX05FRURFRAkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKaW5kZXggMTc0NTgyZi4uNDA4MTE4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZXJycXVldWUuaApAQCAtMjEsNyArMjEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZCAoQ09ORklHX0lQVjZfTU9EVUxFKQogI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXRodG9vbC5oIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKaW5kZXggOTM1MzVmMC4uY2YyYWJlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTE1LDI0ICsxNSwyNCBAQAogCiAvKiBUaGlzIHNob3VsZCB3b3JrIGZvciBib3RoIDMyIGFuZCA2NCBiaXQgdXNlcmxhbmQuICovCiBzdHJ1Y3QgZXRodG9vbF9jbWQgewotCXUzMgljbWQ7Ci0JdTMyCXN1cHBvcnRlZDsJLyogRmVhdHVyZXMgdGhpcyBpbnRlcmZhY2Ugc3VwcG9ydHMgKi8KLQl1MzIJYWR2ZXJ0aXNpbmc7CS8qIEZlYXR1cmVzIHRoaXMgaW50ZXJmYWNlIGFkdmVydGlzZXMgKi8KLQl1MTYJc3BlZWQ7CQkvKiBUaGUgZm9yY2VkIHNwZWVkLCAxME1iLCAxMDBNYiwgZ2lnYWJpdCAqLwotCXU4CWR1cGxleDsJCS8qIER1cGxleCwgaGFsZiBvciBmdWxsICovCi0JdTgJcG9ydDsJCS8qIFdoaWNoIGNvbm5lY3RvciBwb3J0ICovCi0JdTgJcGh5X2FkZHJlc3M7Ci0JdTgJdHJhbnNjZWl2ZXI7CS8qIFdoaWNoIHRyYW5zY2VpdmVyIHRvIHVzZSAqLwotCXU4CWF1dG9uZWc7CS8qIEVuYWJsZSBvciBkaXNhYmxlIGF1dG9uZWdvdGlhdGlvbiAqLwotCXUzMgltYXh0eHBrdDsJLyogVHggcGt0cyBiZWZvcmUgZ2VuZXJhdGluZyB0eCBpbnQgKi8KLQl1MzIJbWF4cnhwa3Q7CS8qIFJ4IHBrdHMgYmVmb3JlIGdlbmVyYXRpbmcgcnggaW50ICovCi0JdTMyCXJlc2VydmVkWzRdOworCV9fdTMyCWNtZDsKKwlfX3UzMglzdXBwb3J0ZWQ7CS8qIEZlYXR1cmVzIHRoaXMgaW50ZXJmYWNlIHN1cHBvcnRzICovCisJX191MzIJYWR2ZXJ0aXNpbmc7CS8qIEZlYXR1cmVzIHRoaXMgaW50ZXJmYWNlIGFkdmVydGlzZXMgKi8KKwlfX3UxNglzcGVlZDsJCS8qIFRoZSBmb3JjZWQgc3BlZWQsIDEwTWIsIDEwME1iLCBnaWdhYml0ICovCisJX191OAlkdXBsZXg7CQkvKiBEdXBsZXgsIGhhbGYgb3IgZnVsbCAqLworCV9fdTgJcG9ydDsJCS8qIFdoaWNoIGNvbm5lY3RvciBwb3J0ICovCisJX191OAlwaHlfYWRkcmVzczsKKwlfX3U4CXRyYW5zY2VpdmVyOwkvKiBXaGljaCB0cmFuc2NlaXZlciB0byB1c2UgKi8KKwlfX3U4CWF1dG9uZWc7CS8qIEVuYWJsZSBvciBkaXNhYmxlIGF1dG9uZWdvdGlhdGlvbiAqLworCV9fdTMyCW1heHR4cGt0OwkvKiBUeCBwa3RzIGJlZm9yZSBnZW5lcmF0aW5nIHR4IGludCAqLworCV9fdTMyCW1heHJ4cGt0OwkvKiBSeCBwa3RzIGJlZm9yZSBnZW5lcmF0aW5nIHJ4IGludCAqLworCV9fdTMyCXJlc2VydmVkWzRdOwogfTsKIAogI2RlZmluZSBFVEhUT09MX0JVU0lORk9fTEVOCTMyCiAvKiB0aGVzZSBzdHJpbmdzIGFyZSBzZXQgdG8gd2hhdGV2ZXIgdGhlIGRyaXZlciBhdXRob3IgZGVjaWRlcy4uLiAqLwogc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyB7Ci0JdTMyCWNtZDsKKwlfX3UzMgljbWQ7CiAJY2hhcglkcml2ZXJbMzJdOwkvKiBkcml2ZXIgc2hvcnQgbmFtZSwgInR1bGlwIiwgImVlcHJvMTAwIiAqLwogCWNoYXIJdmVyc2lvblszMl07CS8qIGRyaXZlciB2ZXJzaW9uIHN0cmluZyAqLwogCWNoYXIJZndfdmVyc2lvblszMl07CS8qIGZpcm13YXJlIHZlcnNpb24gc3RyaW5nLCBpZiBhcHBsaWNhYmxlICovCkBAIC00MCw1MyArNDAsNTMgQEAKIAkJCQkvKiBGb3IgUENJIGRldmljZXMsIHVzZSBwY2lfbmFtZShwY2lfZGV2KS4gKi8KIAljaGFyCXJlc2VydmVkMVszMl07CiAJY2hhcglyZXNlcnZlZDJbMTZdOwotCXUzMgluX3N0YXRzOwkvKiBudW1iZXIgb2YgdTY0J3MgZnJvbSBFVEhUT09MX0dTVEFUUyAqLwotCXUzMgl0ZXN0aW5mb19sZW47Ci0JdTMyCWVlZHVtcF9sZW47CS8qIFNpemUgb2YgZGF0YSBmcm9tIEVUSFRPT0xfR0VFUFJPTSAoYnl0ZXMpICovCi0JdTMyCXJlZ2R1bXBfbGVuOwkvKiBTaXplIG9mIGRhdGEgZnJvbSBFVEhUT09MX0dSRUdTIChieXRlcykgKi8KKwlfX3UzMgluX3N0YXRzOwkvKiBudW1iZXIgb2YgdTY0J3MgZnJvbSBFVEhUT09MX0dTVEFUUyAqLworCV9fdTMyCXRlc3RpbmZvX2xlbjsKKwlfX3UzMgllZWR1bXBfbGVuOwkvKiBTaXplIG9mIGRhdGEgZnJvbSBFVEhUT09MX0dFRVBST00gKGJ5dGVzKSAqLworCV9fdTMyCXJlZ2R1bXBfbGVuOwkvKiBTaXplIG9mIGRhdGEgZnJvbSBFVEhUT09MX0dSRUdTIChieXRlcykgKi8KIH07CiAKICNkZWZpbmUgU09QQVNTX01BWAk2CiAvKiB3YWtlLW9uLWxhbiBzZXR0aW5ncyAqLwogc3RydWN0IGV0aHRvb2xfd29saW5mbyB7Ci0JdTMyCWNtZDsKLQl1MzIJc3VwcG9ydGVkOwotCXUzMgl3b2xvcHRzOwotCXU4CXNvcGFzc1tTT1BBU1NfTUFYXTsgLyogU2VjdXJlT24odG0pIHBhc3N3b3JkICovCisJX191MzIJY21kOworCV9fdTMyCXN1cHBvcnRlZDsKKwlfX3UzMgl3b2xvcHRzOworCV9fdTgJc29wYXNzW1NPUEFTU19NQVhdOyAvKiBTZWN1cmVPbih0bSkgcGFzc3dvcmQgKi8KIH07CiAKIC8qIGZvciBwYXNzaW5nIHNpbmdsZSB2YWx1ZXMgKi8KIHN0cnVjdCBldGh0b29sX3ZhbHVlIHsKLQl1MzIJY21kOwotCXUzMglkYXRhOworCV9fdTMyCWNtZDsKKwlfX3UzMglkYXRhOwogfTsKIAogLyogZm9yIHBhc3NpbmcgYmlnIGNodW5rcyBvZiBkYXRhICovCiBzdHJ1Y3QgZXRodG9vbF9yZWdzIHsKLQl1MzIJY21kOwotCXUzMgl2ZXJzaW9uOyAvKiBkcml2ZXItc3BlY2lmaWMsIGluZGljYXRlcyBkaWZmZXJlbnQgY2hpcHMvcmV2cyAqLwotCXUzMglsZW47IC8qIGJ5dGVzICovCi0JdTgJZGF0YVswXTsKKwlfX3UzMgljbWQ7CisJX191MzIJdmVyc2lvbjsgLyogZHJpdmVyLXNwZWNpZmljLCBpbmRpY2F0ZXMgZGlmZmVyZW50IGNoaXBzL3JldnMgKi8KKwlfX3UzMglsZW47IC8qIGJ5dGVzICovCisJX191OAlkYXRhWzBdOwogfTsKIAogLyogZm9yIHBhc3NpbmcgRUVQUk9NIGNodW5rcyAqLwogc3RydWN0IGV0aHRvb2xfZWVwcm9tIHsKLQl1MzIJY21kOwotCXUzMgltYWdpYzsKLQl1MzIJb2Zmc2V0OyAvKiBpbiBieXRlcyAqLwotCXUzMglsZW47IC8qIGluIGJ5dGVzICovCi0JdTgJZGF0YVswXTsKKwlfX3UzMgljbWQ7CisJX191MzIJbWFnaWM7CisJX191MzIJb2Zmc2V0OyAvKiBpbiBieXRlcyAqLworCV9fdTMyCWxlbjsgLyogaW4gYnl0ZXMgKi8KKwlfX3U4CWRhdGFbMF07CiB9OwogCiAvKiBmb3IgY29uZmlndXJpbmcgY29hbGVzY2luZyBwYXJhbWV0ZXJzIG9mIGNoaXAgKi8KIHN0cnVjdCBldGh0b29sX2NvYWxlc2NlIHsKLQl1MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9Q09BTEVTQ0UgKi8KKwlfX3UzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31DT0FMRVNDRSAqLwogCiAJLyogSG93IG1hbnkgdXNlY3MgdG8gZGVsYXkgYW4gUlggaW50ZXJydXB0IGFmdGVyCiAJICogYSBwYWNrZXQgYXJyaXZlcy4gIElmIDAsIG9ubHkgcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMKIAkgKiBpcyB1c2VkLgogCSAqLwotCXUzMglyeF9jb2FsZXNjZV91c2VjczsKKwlfX3UzMglyeF9jb2FsZXNjZV91c2VjczsKIAogCS8qIEhvdyBtYW55IHBhY2tldHMgdG8gZGVsYXkgYW4gUlggaW50ZXJydXB0IGFmdGVyCiAJICogYSBwYWNrZXQgYXJyaXZlcy4gIElmIDAsIG9ubHkgcnhfY29hbGVzY2VfdXNlY3MgaXMKQEAgLTk0LDIxICs5NCwyMSBAQAogCSAqIHRvIHplcm8gYXMgdGhpcyB3b3VsZCBjYXVzZSBSWCBpbnRlcnJ1cHRzIHRvIG5ldmVyIGJlCiAJICogZ2VuZXJhdGVkLgogCSAqLwotCXUzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKKwlfX3UzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKIAogCS8qIFNhbWUgYXMgYWJvdmUgdHdvIHBhcmFtZXRlcnMsIGV4Y2VwdCB0aGF0IHRoZXNlIHZhbHVlcwogCSAqIGFwcGx5IHdoaWxlIGFuIElSUSBpcyBiZWluZyBzZXJ2aWNlZCBieSB0aGUgaG9zdC4gIE5vdAogCSAqIGFsbCBjYXJkcyBzdXBwb3J0IHRoaXMgZmVhdHVyZSBhbmQgdGhlIHZhbHVlcyBhcmUgaWdub3JlZAogCSAqIGluIHRoYXQgY2FzZS4KIAkgKi8KLQl1MzIJcnhfY29hbGVzY2VfdXNlY3NfaXJxOwotCXUzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CisJX191MzIJcnhfY29hbGVzY2VfdXNlY3NfaXJxOworCV9fdTMyCXJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycTsKIAogCS8qIEhvdyBtYW55IHVzZWNzIHRvIGRlbGF5IGEgVFggaW50ZXJydXB0IGFmdGVyCiAJICogYSBwYWNrZXQgaXMgc2VudC4gIElmIDAsIG9ubHkgdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMKIAkgKiBpcyB1c2VkLgogCSAqLwotCXUzMgl0eF9jb2FsZXNjZV91c2VjczsKKwlfX3UzMgl0eF9jb2FsZXNjZV91c2VjczsKIAogCS8qIEhvdyBtYW55IHBhY2tldHMgdG8gZGVsYXkgYSBUWCBpbnRlcnJ1cHQgYWZ0ZXIKIAkgKiBhIHBhY2tldCBpcyBzZW50LiAgSWYgMCwgb25seSB0eF9jb2FsZXNjZV91c2VjcyBpcwpAQCAtMTE2LDIyICsxMTYsMjIgQEAKIAkgKiB0byB6ZXJvIGFzIHRoaXMgd291bGQgY2F1c2UgVFggaW50ZXJydXB0cyB0byBuZXZlciBiZQogCSAqIGdlbmVyYXRlZC4KIAkgKi8KLQl1MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisJX191MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CiAKIAkvKiBTYW1lIGFzIGFib3ZlIHR3byBwYXJhbWV0ZXJzLCBleGNlcHQgdGhhdCB0aGVzZSB2YWx1ZXMKIAkgKiBhcHBseSB3aGlsZSBhbiBJUlEgaXMgYmVpbmcgc2VydmljZWQgYnkgdGhlIGhvc3QuICBOb3QKIAkgKiBhbGwgY2FyZHMgc3VwcG9ydCB0aGlzIGZlYXR1cmUgYW5kIHRoZSB2YWx1ZXMgYXJlIGlnbm9yZWQKIAkgKiBpbiB0aGF0IGNhc2UuCiAJICovCi0JdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2lycTsKLQl1MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2lycTsKKwlfX3UzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CiAKIAkvKiBIb3cgbWFueSB1c2VjcyB0byBkZWxheSBpbi1tZW1vcnkgc3RhdGlzdGljcwogCSAqIGJsb2NrIHVwZGF0ZXMuICBTb21lIGRyaXZlcnMgZG8gbm90IGhhdmUgYW4gaW4tbWVtb3J5CiAJICogc3RhdGlzdGljIGJsb2NrLCBhbmQgaW4gc3VjaCBjYXNlcyB0aGlzIHZhbHVlIGlzIGlnbm9yZWQuCiAJICogVGhpcyB2YWx1ZSBtdXN0IG5vdCBiZSB6ZXJvLgogCSAqLwotCXUzMglzdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKKwlfX3UzMglzdGF0c19ibG9ja19jb2FsZXNjZV91c2VjczsKIAogCS8qIEFkYXB0aXZlIFJYL1RYIGNvYWxlc2NpbmcgaXMgYW4gYWxnb3JpdGhtIGltcGxlbWVudGVkIGJ5CiAJICogc29tZSBkcml2ZXJzIHRvIGltcHJvdmUgbGF0ZW5jeSB1bmRlciBsb3cgcGFja2V0IHJhdGVzIGFuZApAQCAtMTQwLDE4ICsxNDAsMTggQEAKIAkgKiBub3QgaW1wbGVtZW50ZWQgYnkgdGhlIGRyaXZlciBjYXVzZXMgdGhlc2UgdmFsdWVzIHRvIGJlCiAJICogc2lsZW50bHkgaWdub3JlZC4KIAkgKi8KLQl1MzIJdXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlOwotCXUzMgl1c2VfYWRhcHRpdmVfdHhfY29hbGVzY2U7CisJX191MzIJdXNlX2FkYXB0aXZlX3J4X2NvYWxlc2NlOworCV9fdTMyCXVzZV9hZGFwdGl2ZV90eF9jb2FsZXNjZTsKIAogCS8qIFdoZW4gdGhlIHBhY2tldCByYXRlIChtZWFzdXJlZCBpbiBwYWNrZXRzIHBlciBzZWNvbmQpCiAJICogaXMgYmVsb3cgcGt0X3JhdGVfbG93LCB0aGUge3J4LHR4fV8qX2xvdyBwYXJhbWV0ZXJzIGFyZQogCSAqIHVzZWQuCiAJICovCi0JdTMyCXBrdF9yYXRlX2xvdzsKLQl1MzIJcnhfY29hbGVzY2VfdXNlY3NfbG93OwotCXUzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7Ci0JdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2xvdzsKLQl1MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93OworCV9fdTMyCXBrdF9yYXRlX2xvdzsKKwlfX3UzMglyeF9jb2FsZXNjZV91c2Vjc19sb3c7CisJX191MzIJcnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93OworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2xvdzsKKwlfX3UzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3c7CiAKIAkvKiBXaGVuIHRoZSBwYWNrZXQgcmF0ZSBpcyBiZWxvdyBwa3RfcmF0ZV9oaWdoIGJ1dCBhYm92ZQogCSAqIHBrdF9yYXRlX2xvdyAoYm90aCBtZWFzdXJlZCBpbiBwYWNrZXRzIHBlciBzZWNvbmQpIHRoZQpAQCAtMTYyLDQzICsxNjIsNDMgQEAKIAkgKiBpcyBhYm92ZSBwa3RfcmF0ZV9oaWdoLCB0aGUge3J4LHR4fV8qX2hpZ2ggcGFyYW1ldGVycyBhcmUKIAkgKiB1c2VkLgogCSAqLwotCXUzMglwa3RfcmF0ZV9oaWdoOwotCXUzMglyeF9jb2FsZXNjZV91c2Vjc19oaWdoOwotCXUzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoOwotCXUzMgl0eF9jb2FsZXNjZV91c2Vjc19oaWdoOwotCXUzMgl0eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoOworCV9fdTMyCXBrdF9yYXRlX2hpZ2g7CisJX191MzIJcnhfY29hbGVzY2VfdXNlY3NfaGlnaDsKKwlfX3UzMglyeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoOworCV9fdTMyCXR4X2NvYWxlc2NlX3VzZWNzX2hpZ2g7CisJX191MzIJdHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaGlnaDsKIAogCS8qIEhvdyBvZnRlbiB0byBkbyBhZGFwdGl2ZSBjb2FsZXNjaW5nIHBhY2tldCByYXRlIHNhbXBsaW5nLAogCSAqIG1lYXN1cmVkIGluIHNlY29uZHMuICBNdXN0IG5vdCBiZSB6ZXJvLgogCSAqLwotCXUzMglyYXRlX3NhbXBsZV9pbnRlcnZhbDsKKwlfX3UzMglyYXRlX3NhbXBsZV9pbnRlcnZhbDsKIH07CiAKIC8qIGZvciBjb25maWd1cmluZyBSWC9UWCByaW5nIHBhcmFtZXRlcnMgKi8KIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSB7Ci0JdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfVJJTkdQQVJBTSAqLworCV9fdTMyCWNtZDsJLyogRVRIVE9PTF97RyxTfVJJTkdQQVJBTSAqLwogCiAJLyogUmVhZCBvbmx5IGF0dHJpYnV0ZXMuICBUaGVzZSBpbmRpY2F0ZSB0aGUgbWF4aW11bSBudW1iZXIKIAkgKiBvZiBwZW5kaW5nIFJYL1RYIHJpbmcgZW50cmllcyB0aGUgZHJpdmVyIHdpbGwgYWxsb3cgdGhlCiAJICogdXNlciB0byBzZXQuCiAJICovCi0JdTMyCXJ4X21heF9wZW5kaW5nOwotCXUzMglyeF9taW5pX21heF9wZW5kaW5nOwotCXUzMglyeF9qdW1ib19tYXhfcGVuZGluZzsKLQl1MzIJdHhfbWF4X3BlbmRpbmc7CisJX191MzIJcnhfbWF4X3BlbmRpbmc7CisJX191MzIJcnhfbWluaV9tYXhfcGVuZGluZzsKKwlfX3UzMglyeF9qdW1ib19tYXhfcGVuZGluZzsKKwlfX3UzMgl0eF9tYXhfcGVuZGluZzsKIAogCS8qIFZhbHVlcyBjaGFuZ2VhYmxlIGJ5IHRoZSB1c2VyLiAgVGhlIHZhbGlkIHZhbHVlcyBhcmUKIAkgKiBpbiB0aGUgcmFuZ2UgMSB0byB0aGUgIipfbWF4X3BlbmRpbmciIGNvdW50ZXJwYXJ0IGFib3ZlLgogCSAqLwotCXUzMglyeF9wZW5kaW5nOwotCXUzMglyeF9taW5pX3BlbmRpbmc7Ci0JdTMyCXJ4X2p1bWJvX3BlbmRpbmc7Ci0JdTMyCXR4X3BlbmRpbmc7CisJX191MzIJcnhfcGVuZGluZzsKKwlfX3UzMglyeF9taW5pX3BlbmRpbmc7CisJX191MzIJcnhfanVtYm9fcGVuZGluZzsKKwlfX3UzMgl0eF9wZW5kaW5nOwogfTsKIAogLyogZm9yIGNvbmZpZ3VyaW5nIGxpbmsgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMgKi8KIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gewotCXUzMgljbWQ7CS8qIEVUSFRPT0xfe0csU31QQVVTRVBBUkFNICovCisJX191MzIJY21kOwkvKiBFVEhUT09MX3tHLFN9UEFVU0VQQVJBTSAqLwogCiAJLyogSWYgdGhlIGxpbmsgaXMgYmVpbmcgYXV0by1uZWdvdGlhdGVkICh2aWEgZXRodG9vbF9jbWQuYXV0b25lZwogCSAqIGJlaW5nIHRydWUpIHRoZSB1c2VyIG1heSBzZXQgJ2F1dG9uZXQnIGhlcmUgbm9uLXplcm8gdG8gaGF2ZSB0aGUKQEAgLTIxMCw5ICsyMTAsOSBAQAogCSAqIHRoZW4ge3J4LHR4fV9wYXVzZSBmb3JjZSB0aGUgZHJpdmVyIHRvIHVzZS9ub3QtdXNlIHBhdXNlCiAJICogZmxvdyBjb250cm9sLgogCSAqLwotCXUzMglhdXRvbmVnOwotCXUzMglyeF9wYXVzZTsKLQl1MzIJdHhfcGF1c2U7CisJX191MzIJYXV0b25lZzsKKwlfX3UzMglyeF9wYXVzZTsKKwlfX3UzMgl0eF9wYXVzZTsKIH07CiAKICNkZWZpbmUgRVRIX0dTVFJJTkdfTEVOCQkzMgpAQCAtMjIzLDEwICsyMjMsMTAgQEAKIAogLyogZm9yIHBhc3Npbmcgc3RyaW5nIHNldHMgZm9yIGRhdGEgdGFnZ2luZyAqLwogc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MgewotCXUzMgljbWQ7CQkvKiBFVEhUT09MX0dTVFJJTkdTICovCi0JdTMyCXN0cmluZ19zZXQ7CS8qIHN0cmluZyBzZXQgaWQgZS5jLiBFVEhfU1NfVEVTVCwgZXRjKi8KLQl1MzIJbGVuOwkJLyogbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlIHN0cmluZyBzZXQgKi8KLQl1OAlkYXRhWzBdOworCV9fdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1NUUklOR1MgKi8KKwlfX3UzMglzdHJpbmdfc2V0OwkvKiBzdHJpbmcgc2V0IGlkIGUuYy4gRVRIX1NTX1RFU1QsIGV0YyovCisJX191MzIJbGVuOwkJLyogbnVtYmVyIG9mIHN0cmluZ3MgaW4gdGhlIHN0cmluZyBzZXQgKi8KKwlfX3U4CWRhdGFbMF07CiB9OwogCiBlbnVtIGV0aHRvb2xfdGVzdF9mbGFncyB7CkBAIC0yMzYsMjYgKzIzNiwyOCBAQAogCiAvKiBmb3IgcmVxdWVzdGluZyBOSUMgdGVzdCBhbmQgZ2V0dGluZyByZXN1bHRzKi8KIHN0cnVjdCBldGh0b29sX3Rlc3QgewotCXUzMgljbWQ7CQkvKiBFVEhUT09MX1RFU1QgKi8KLQl1MzIJZmxhZ3M7CQkvKiBFVEhfVEVTVF9GTF94eHggKi8KLQl1MzIJcmVzZXJ2ZWQ7Ci0JdTMyCWxlbjsJCS8qIHJlc3VsdCBsZW5ndGgsIGluIG51bWJlciBvZiB1NjQgZWxlbWVudHMgKi8KLQl1NjQJZGF0YVswXTsKKwlfX3UzMgljbWQ7CQkvKiBFVEhUT09MX1RFU1QgKi8KKwlfX3UzMglmbGFnczsJCS8qIEVUSF9URVNUX0ZMX3h4eCAqLworCV9fdTMyCXJlc2VydmVkOworCV9fdTMyCWxlbjsJCS8qIHJlc3VsdCBsZW5ndGgsIGluIG51bWJlciBvZiB1NjQgZWxlbWVudHMgKi8KKwlfX3U2NAlkYXRhWzBdOwogfTsKIAogLyogZm9yIGR1bXBpbmcgTklDLXNwZWNpZmljIHN0YXRpc3RpY3MgKi8KIHN0cnVjdCBldGh0b29sX3N0YXRzIHsKLQl1MzIJY21kOwkJLyogRVRIVE9PTF9HU1RBVFMgKi8KLQl1MzIJbl9zdGF0czsJLyogbnVtYmVyIG9mIHU2NCdzIGJlaW5nIHJldHVybmVkICovCi0JdTY0CWRhdGFbMF07CisJX191MzIJY21kOwkJLyogRVRIVE9PTF9HU1RBVFMgKi8KKwlfX3UzMgluX3N0YXRzOwkvKiBudW1iZXIgb2YgdTY0J3MgYmVpbmcgcmV0dXJuZWQgKi8KKwlfX3U2NAlkYXRhWzBdOwogfTsKIAogc3RydWN0IGV0aHRvb2xfcGVybV9hZGRyIHsKLQl1MzIJY21kOwkJLyogRVRIVE9PTF9HUEVSTUFERFIgKi8KLQl1MzIJc2l6ZTsKLQl1OAlkYXRhWzBdOworCV9fdTMyCWNtZDsJCS8qIEVUSFRPT0xfR1BFUk1BRERSICovCisJX191MzIJc2l6ZTsKKwlfX3U4CWRhdGFbMF07CiB9OwogCisjaWZkZWYgX19LRVJORUxfXworCiBzdHJ1Y3QgbmV0X2RldmljZTsKIAogLyogU29tZSBnZW5lcmljIG1ldGhvZHMgZHJpdmVycyBtYXkgdXNlIGluIHRoZWlyIGV0aHRvb2xfb3BzICovCkBAIC0zNzEsNiArMzczLDcgQEAKIAl1MzIgICAgICgqZ2V0X3Vmbykoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAJaW50ICAgICAoKnNldF91Zm8pKHN0cnVjdCBuZXRfZGV2aWNlICosIHUzMik7CiB9OworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogQ01EcyBjdXJyZW50bHkgc3VwcG9ydGVkICovCiAjZGVmaW5lIEVUSFRPT0xfR1NFVAkJMHgwMDAwMDAwMSAvKiBHZXQgc2V0dGluZ3MuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCmluZGV4IGY3YmQxYzcuLmZhY2YzNGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCkBAIC0xNyw3ICsxNyw2IEBACiAjZGVmaW5lIF9MSU5VWF9FWFQyX0ZTX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXh0Ml9mc19zYi5oPgogCiAvKgogICogVGhlIHNlY29uZCBleHRlbmRlZCBmaWxlc3lzdGVtIGNvbnN0YW50cy9zdHJ1Y3R1cmVzCkBAIC03MCw2ICs2OSw3IEBACiAjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMJMHhFRjUzCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvZXh0Ml9mc19zYi5oPgogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0Ml9zYl9pbmZvICpFWFQyX1NCKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJcmV0dXJuIHNiLT5zX2ZzX2luZm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCmluZGV4IDNhZGU2YTQuLjc1N2Q1NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCkBAIC0xNywxMSArMTcsNiBAQAogI2RlZmluZSBfTElOVVhfRVhUM19GU19ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnNfc2IuaD4KLQotCi1zdHJ1Y3Qgc3RhdGZzOwogCiAvKgogICogVGhlIHNlY29uZCBleHRlbmRlZCBmaWxlc3lzdGVtIGNvbnN0YW50cy9zdHJ1Y3R1cmVzCkBAIC00ODcsNiArNDgyLDggQEAKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvZXh0M19mc19pLmg+CisjaW5jbHVkZSA8bGludXgvZXh0M19mc19zYi5oPgogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0M19zYl9pbmZvICogRVhUM19TQihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCXJldHVybiBzYi0+c19mc19pbmZvOwpAQCAtNjY0LDYgKzY2MSw4IEBACiAjZGVmaW5lIERYX0hBU0hfSEFMRl9NRDQJMQogI2RlZmluZSBEWF9IQVNIX1RFQQkJMgogCisjaWZkZWYgX19LRVJORUxfXworCiAvKiBoYXNoIGluZm8gc3RydWN0dXJlIHVzZWQgYnkgdGhlIGRpcmVjdG9yeSBoYXNoICovCiBzdHJ1Y3QgZHhfaGFzaF9pbmZvCiB7CkBAIC02NzUsNyArNjc0LDYgQEAKIAogI2RlZmluZSBFWFQzX0hUUkVFX0VPRgkweDdmZmZmZmZmCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAvKgogICogQ29udHJvbCBwYXJhbWV0ZXJzIHVzZWQgYnkgZXh0M19odHJlZV9uZXh0X2Jsb2NrCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCAxZDgwYmE3Li4yZDVhMTEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC02LDcgKzYsNiBAQAogICogc3RydWN0dXJlcyBldGMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaCBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAppbmRleCAxMTQzOGVmLi5jYzVkZWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKKysrIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCkBAIC01NCwxOSArNTQsMjAgQEAKIAogCWlmIChpc2RpcikKIAkJaXNkaXIgPSBJTl9JU0RJUjsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KG9sZF9kaXIsIElOX01PVkVEX0ZST018aXNkaXIsY29va2llLG9sZF9uYW1lKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KG5ld19kaXIsIElOX01PVkVEX1RPfGlzZGlyLCBjb29raWUsIG5ld19uYW1lKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KG9sZF9kaXIsIElOX01PVkVEX0ZST018aXNkaXIsY29va2llLG9sZF9uYW1lLAorCQkJCSAgc291cmNlKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KG5ld19kaXIsIElOX01PVkVEX1RPfGlzZGlyLCBjb29raWUsIG5ld19uYW1lLAorCQkJCSAgc291cmNlKTsKIAogCWlmICh0YXJnZXQpIHsKLQkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudCh0YXJnZXQsIElOX0RFTEVURV9TRUxGLCAwLCBOVUxMKTsKKwkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudCh0YXJnZXQsIElOX0RFTEVURV9TRUxGLCAwLCBOVUxMLCBOVUxMKTsKIAkJaW5vdGlmeV9pbm9kZV9pc19kZWFkKHRhcmdldCk7CiAJfQogCiAJaWYgKHNvdXJjZSkgewotCQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KHNvdXJjZSwgSU5fTU9WRV9TRUxGLCAwLCBOVUxMKTsKKwkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzb3VyY2UsIElOX01PVkVfU0VMRiwgMCwgTlVMTCwgTlVMTCk7CiAJfQotCWF1ZGl0X2lub2RlX2NoaWxkKG9sZF9uYW1lLCBzb3VyY2UsIG9sZF9kaXItPmlfaW5vKTsKLQlhdWRpdF9pbm9kZV9jaGlsZChuZXdfbmFtZSwgdGFyZ2V0LCBuZXdfZGlyLT5pX2lubyk7CisJYXVkaXRfaW5vZGVfY2hpbGQobmV3X25hbWUsIHNvdXJjZSwgbmV3X2Rpci0+aV9pbm8pOwogfQogCiAvKgpAQCAtODUsNyArODYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfaW5vZGVyZW1vdmUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9ERUxFVEVfU0VMRiwgMCwgTlVMTCk7CisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fREVMRVRFX1NFTEYsIDAsIE5VTEwsIE5VTEwpOwogCWlub3RpZnlfaW5vZGVfaXNfZGVhZChpbm9kZSk7CiB9CiAKQEAgLTk1LDcgKzk2LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmc25vdGlmeV9jcmVhdGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewogCWlub2RlX2Rpcl9ub3RpZnkoaW5vZGUsIEROX0NSRUFURSk7Ci0JaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fQ1JFQVRFLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9DUkVBVEUsIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCisJCQkJICBkZW50cnktPmRfaW5vZGUpOwogCWF1ZGl0X2lub2RlX2NoaWxkKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSwgaW5vZGUtPmlfaW5vKTsKIH0KIApAQCAtMTA2LDcgKzEwOCw3IEBACiB7CiAJaW5vZGVfZGlyX25vdGlmeShpbm9kZSwgRE5fQ1JFQVRFKTsKIAlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9DUkVBVEUgfCBJTl9JU0RJUiwgMCwgCi0JCQkJICBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwkJCQkgIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSk7CiAJYXVkaXRfaW5vZGVfY2hpbGQoZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLCBpbm9kZS0+aV9pbm8pOwogfQogCkBAIC0xMjMsNyArMTI1LDcgQEAKIAogCWRub3RpZnlfcGFyZW50KGRlbnRyeSwgRE5fQUNDRVNTKTsKIAlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBtYXNrLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTEzOSw3ICsxNDEsNyBAQAogCiAJZG5vdGlmeV9wYXJlbnQoZGVudHJ5LCBETl9NT0RJRlkpOwogCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIG1hc2ssIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwogfQogCiAvKgpAQCAtMTU0LDcgKzE1Niw3IEBACiAJCW1hc2sgfD0gSU5fSVNESVI7CiAKIAlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBtYXNrLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMKTsJCisJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgbWFzaywgMCwgTlVMTCwgTlVMTCk7CiB9CiAKIC8qCkBAIC0xNzIsNyArMTc0LDcgQEAKIAkJbWFzayB8PSBJTl9JU0RJUjsKIAogCWlub3RpZnlfZGVudHJ5X3BhcmVudF9xdWV1ZV9ldmVudChkZW50cnksIG1hc2ssIDAsIG5hbWUpOwotCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwpOworCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIG1hc2ssIDAsIE5VTEwsIE5VTEwpOwogfQogCiAvKgpAQCAtMTg3LDcgKzE4OSw3IEBACiAJCW1hc2sgfD0gSU5fSVNESVI7CiAKIAlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBtYXNrLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMKTsKKwlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTIzNCw3ICsyMzYsNyBAQAogCWlmIChpbl9tYXNrKSB7CiAJCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQogCQkJaW5fbWFzayB8PSBJTl9JU0RJUjsKLQkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgaW5fbWFzaywgMCwgTlVMTCk7CisJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIGluX21hc2ssIDAsIE5VTEwsIE5VTEwpOwogCQlpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoZGVudHJ5LCBpbl9tYXNrLCAwLAogCQkJCQkJICBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAl9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0YXBlLmggYi9pbmNsdWRlL2xpbnV4L2Z0YXBlLmgKaW5kZXggNzJmYWVlYy4uN2U3MDM4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdGFwZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRhcGUuaApAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KIAogI2RlZmluZSBGVF9TRUNUT1IoeCkJCSh4KzEpCS8qIHNlY3RvciBvZmZzZXQgaW50byByZWFsIHNlY3RvciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oIGIvaW5jbHVkZS9saW51eC9nYW1lcG9ydC5oCmluZGV4IDcxZTdiMjguLjJjZGJhMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZ2FtZXBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dhbWVwb3J0LmgKQEAgLTksNiArOSw3IEBACiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0xNTQsNiArMTU1LDggQEAKIAogdm9pZCBnYW1lcG9ydF91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYpOwogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZGVmaW5lIEdBTUVQT1JUX01PREVfRElTQUJMRUQJCTAKICNkZWZpbmUgR0FNRVBPUlRfTU9ERV9SQVcJCTEKICNkZWZpbmUgR0FNRVBPUlRfTU9ERV9DT09LRUQJCTIKQEAgLTE2OSw2ICsxNzIsOCBAQAogI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfR1JBVklTCTB4MDAwOQogI2RlZmluZSBHQU1FUE9SVF9JRF9WRU5ET1JfR1VJTExFTU9UCTB4MDAwYQogCisjaWZkZWYgX19LRVJORUxfXworCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2FtZXBvcnRfdHJpZ2dlcihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQogewogCWlmIChnYW1lcG9ydC0+dHJpZ2dlcikKQEAgLTIxOSw0ICsyMjQsNSBAQAogdm9pZCBnYW1lcG9ydF9zdGFydF9wb2xsaW5nKHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpOwogdm9pZCBnYW1lcG9ydF9zdG9wX3BvbGxpbmcoc3RydWN0IGdhbWVwb3J0ICpnYW1lcG9ydCk7CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19zZXJpYWwuaAppbmRleCA2NTI2MTFhLi5lMjUzODQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmVyaWNfc2VyaWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5lcmljX3NlcmlhbC5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaWZuZGVmIEdFTkVSSUNfU0VSSUFMX0gKICNkZWZpbmUgR0VORVJJQ19TRVJJQUxfSAogCisjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKIHN0cnVjdCByZWFsX2RyaXZlciB7CkBAIC01NCw2ICs1NSw3IEBACiAgIHNwaW5sb2NrX3QgICAgICAgICAgICAgIGRyaXZlcl9sb2NrOwogfTsKIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogRmxhZ3MgKi8KIC8qIFdhcm5pbmc6IHNlcmlhbC5oIGRlZmluZXMgc29tZSBBU1lOQ18gZmxhZ3MsIHRoZXkgc2F5IHRoZXkgYXJlICJvbmx5IgpAQCAtNzUsNyArNzcsNyBAQAogI2RlZmluZSBHU19ERUJVR19GTE9XICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgR1NfREVCVUdfV1JJVEUgICAweDAwMDAwMDQwCiAKLQorI2lmZGVmIF9fS0VSTkVMX18KIHZvaWQgZ3NfcHV0X2NoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciBjaCk7CiBpbnQgIGdzX3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIAogICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKQEAgLTk0LDUgKzk2LDUgQEAKIGludCAgZ3Nfc2V0c2VyaWFsKHN0cnVjdCBnc19wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNwKTsKIGludCAgZ3NfZ2V0c2VyaWFsKHN0cnVjdCBnc19wb3J0ICpwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBfX3VzZXIgKnNwKTsKIHZvaWQgZ3NfZ290X2JyZWFrKHN0cnVjdCBnc19wb3J0ICpwb3J0KTsKLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZW5oZC5oIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCmluZGV4IDJlZjg0NWIzLi4zNDk4YTBjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC05LDEzICs5LDcgQEAKICAqCQk8ZHJld0Bjb2xvcmFkby5lZHU+CiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgogCiBlbnVtIHsKIC8qIFRoZXNlIHRocmVlIGhhdmUgaWRlbnRpY2FsIGJlaGF2aW91cjsgdXNlIHRoZSBzZWNvbmQgb25lIGlmIERPUyBGRElTSyBnZXRzCkBAIC02MSw2ICs1NSwxMiBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCiBzdHJ1Y3QgcGFydGl0aW9uIHsKIAl1bnNpZ25lZCBjaGFyIGJvb3RfaW5kOwkJLyogMHg4MCAtIGFjdGl2ZSAqLwogCXVuc2lnbmVkIGNoYXIgaGVhZDsJCS8qIHN0YXJ0aW5nIGhlYWQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2ZwLmggYi9pbmNsdWRlL2xpbnV4L2dmcC5oCmluZGV4IDNhYzQ1MjkuLmNjOWU2MDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTQsNyArNCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGFyZGlycS5oIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKaW5kZXggZWFiNTM3MC4uMTE0YWU1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKKysrIGIvaW5jbHVkZS9saW51eC9oYXJkaXJxLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIExJTlVYX0hBUkRJUlFfSAogI2RlZmluZSBMSU5VWF9IQVJESVJRX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS9oYXJkaXJxLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hpZ2htZW0uaCBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCmluZGV4IDg5MmM0ZWEuLjg1Y2U3ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaGlnaG1lbS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfSElHSE1FTV9ICiAjZGVmaW5lIF9MSU5VWF9ISUdITUVNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWdodWlkLmggYi9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaAppbmRleCA1M2VjYWMzLi40MzRlNTYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZ2h1aWQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0hJR0hVSURfSAogI2RlZmluZSBfTElOVVhfSElHSFVJRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCAzMDZhY2YxLi43ZDJhMWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtMTI3LDcgKzEyNyw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfYWN0aXZlKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lcikKIHsKLQlyZXR1cm4gdGltZXItPm5vZGUucmJfcGFyZW50ICE9IEhSVElNRVJfSU5BQ1RJVkU7CisJcmV0dXJuIHJiX3BhcmVudCgmdGltZXItPm5vZGUpICE9ICZ0aW1lci0+bm9kZTsKIH0KIAogLyogRm9yd2FyZCBhIGhydGltZXIgc28gaXQgZXhwaXJlcyBhZnRlciBub3c6ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1pdGUuaAppbmRleCAyNmE4Yjg5Li4wMDczZmU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWl0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28taXRlLmgKQEAgLTI5LDcgKzI5LDcgQEAKICNpZm5kZWYgSTJDX0FMR09fSVRFX0gKICNkZWZpbmUgSTJDX0FMR09fSVRFX0ggMQogCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogRXhhbXBsZSBvZiBhIHNlcXVlbnRpYWwgcmVhZCByZXF1ZXN0OgogCXN0cnVjdCBpMmNfaWljX21zZyBzX21zZzsgCkBAIC00OSw2ICs0OSw5IEBACiAJY2hhciAqYnVmOwkvKiBwb2ludGVyIHRvIG1zZyBkYXRhICovCiB9OwogCisjaWZkZWYgX19LRVJORUxfXworc3RydWN0IGkyY19hZGFwdGVyOworCiBzdHJ1Y3QgaTJjX2FsZ29faWljX2RhdGEgewogCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgZm9yIGxvbGV2ZWwgcm91dGluZXMJKi8KIAl2b2lkICgqc2V0aWljKSAodm9pZCAqZGF0YSwgaW50IGN0bCwgaW50IHZhbCk7CkBAIC02NSw1ICs2OCw1IEBACiAKIGludCBpMmNfaWljX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICopOwogaW50IGkyY19paWNfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKik7Ci0KKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogSTJDX0FMR09fSVRFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDE2MzVlZTIuLjA1MTA0MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtMjAsMTQgKzIwLDE1IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+IGFuZAorLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gKi8KIAogI2lmbmRlZiBfTElOVVhfSTJDX0gKICNkZWZpbmUgX0xJTlVYX0kyQ19ICiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2lmZGVmIF9fS0VSTkVMX18gCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CS8qIGZvciBzdHJ1Y3QgZGV2aWNlICovCkBAIC0zNTQsNiArMzU1LDcgQEAKIHsKIAlyZXR1cm4gYWRhcC0+bnI7CiB9CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgogICogSTJDIE1lc3NhZ2UgLSB1c2VkIGZvciBwdXJlIGkyYyB0cmFuc2FjdGlvbiwgYWxzbyBmcm9tIC9kZXYgaW50ZXJmYWNlCkBAIC00NjksNiArNDcxLDcgQEAKICNkZWZpbmUgSTJDX1NNQlVTCTB4MDcyMAkvKiBTTUJ1cy1sZXZlbCBhY2Nlc3MgKi8KIAogLyogLS0tLS0gSTJDLURFVjogY2hhciBkZXZpY2UgaW50ZXJmYWNlIHN0dWZmIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNpZmRlZiBfX0tFUk5FTF9fCiAKICNkZWZpbmUgSTJDX01BSk9SCTg5CQkvKiBEZXZpY2UgbWFqb3IgbnVtYmVyCQkqLwogCkBAIC02NDYsNSArNjQ5LDUgQEAKIAkJCQkgICAgZm9yY2VfIyNjaGlwNiwgZm9yY2VfIyNjaGlwNywJXAogCQkJCSAgICBmb3JjZV8jI2NoaXA4LCBOVUxMIH07CQlcCiBJMkNfQ0xJRU5UX0lOU01PRF9DT01NT04KLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfSTJDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJvLWRldi5oIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKaW5kZXggMzZmZDE4Yy4uYzI1MTlkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMm8tZGV2LmgKQEAgLTEzLDcgKzEzLDcgQEAKICAqIFRoaXMgaGVhZGVyIGZpbGUgZGVmaW5lcyB0aGUgSTJPIEFQSXMgdGhhdCBhcmUgYXZhaWxhYmxlIHRvIGJvdGgKICAqIHRoZSBrZXJuZWwgYW5kIHVzZXIgbGV2ZWwgYXBwbGljYXRpb25zLiAgS2VybmVsIHNwZWNpZmljIHN0cnVjdHVyZXMKICAqIGFyZSBkZWZpbmVkIGluIGkyb19vc20uIE9TTXMgc2hvdWxkIGluY2x1ZGUgX29ubHlfIGkyb19vc20uaCB3aGljaAotICogYXV0b21hdGljYWxseSBpbmNsdWRzIHRoaXMgZmlsZS4KKyAqIGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhpcyBmaWxlLgogICoKICAqLwogCkBAIC0yMywxNCArMjMsNyBAQAogLyogSG93IG1hbnkgY29udHJvbGxlcnMgYXJlIHdlIGFsbG93aW5nICovCiAjZGVmaW5lIE1BWF9JMk9fQ09OVFJPTExFUlMJMzIKIAotLy8jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpZm5kZWYgX19LRVJORUxfXwotCi10eXBlZGVmIHVuc2lnbmVkIGNoYXIgdTg7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHUzMjsKLQotI2VuZGlmCQkJCS8qIF9fS0VSTkVMX18gKi8KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogCiAvKgogICogSTJPIENvbnRyb2wgSU9DVExzIGFuZCBzdHJ1Y3R1cmVzCkBAIC01Myw3ICs0Niw3IEBACiAKIHN0cnVjdCBpMm9fY21kX3Bhc3N0aHJ1MzIgewogCXVuc2lnbmVkIGludCBpb3A7CS8qIElPUCB1bml0IG51bWJlciAqLwotCXUzMiBtc2c7CQkvKiBtZXNzYWdlICovCisJX191MzIgbXNnOwkJLyogbWVzc2FnZSAqLwogfTsKIAogc3RydWN0IGkyb19jbWRfcGFzc3RocnUgewpAQCAtMTM4LDUzICsxMzEsNTMgQEAKICNkZWZpbmUgSTJPX0JVU19VTktOT1dOIDB4ODAKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19wY2lfYnVzIHsKLQl1OCBQY2lGdW5jdGlvbk51bWJlcjsKLQl1OCBQY2lEZXZpY2VOdW1iZXI7Ci0JdTggUGNpQnVzTnVtYmVyOwotCXU4IHJlc2VydmVkOwotCXUxNiBQY2lWZW5kb3JJRDsKLQl1MTYgUGNpRGV2aWNlSUQ7CisJX191OCBQY2lGdW5jdGlvbk51bWJlcjsKKwlfX3U4IFBjaURldmljZU51bWJlcjsKKwlfX3U4IFBjaUJ1c051bWJlcjsKKwlfX3U4IHJlc2VydmVkOworCV9fdTE2IFBjaVZlbmRvcklEOworCV9fdTE2IFBjaURldmljZUlEOwogfSBpMm9fcGNpX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19sb2NhbF9idXMgewotCXUxNiBMYkJhc2VJT1BvcnQ7Ci0JdTE2IHJlc2VydmVkOwotCXUzMiBMYkJhc2VNZW1vcnlBZGRyZXNzOworCV9fdTE2IExiQmFzZUlPUG9ydDsKKwlfX3UxNiByZXNlcnZlZDsKKwlfX3UzMiBMYkJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9fbG9jYWxfYnVzOwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2lzYV9idXMgewotCXUxNiBJc2FCYXNlSU9Qb3J0OwotCXU4IENTTjsKLQl1OCByZXNlcnZlZDsKLQl1MzIgSXNhQmFzZU1lbW9yeUFkZHJlc3M7CisJX191MTYgSXNhQmFzZUlPUG9ydDsKKwlfX3U4IENTTjsKKwlfX3U4IHJlc2VydmVkOworCV9fdTMyIElzYUJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9faXNhX2J1czsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19laXNhX2J1c19pbmZvIHsKLQl1MTYgRWlzYUJhc2VJT1BvcnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTggRWlzYVNsb3ROdW1iZXI7Ci0JdTMyIEVpc2FCYXNlTWVtb3J5QWRkcmVzczsKKwlfX3UxNiBFaXNhQmFzZUlPUG9ydDsKKwlfX3U4IHJlc2VydmVkOworCV9fdTggRWlzYVNsb3ROdW1iZXI7CisJX191MzIgRWlzYUJhc2VNZW1vcnlBZGRyZXNzOwogfSBpMm9fZWlzYV9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fbWNhX2J1cyB7Ci0JdTE2IE1jYUJhc2VJT1BvcnQ7Ci0JdTggcmVzZXJ2ZWQ7Ci0JdTggTWNhU2xvdE51bWJlcjsKLQl1MzIgTWNhQmFzZU1lbW9yeUFkZHJlc3M7CisJX191MTYgTWNhQmFzZUlPUG9ydDsKKwlfX3U4IHJlc2VydmVkOworCV9fdTggTWNhU2xvdE51bWJlcjsKKwlfX3UzMiBNY2FCYXNlTWVtb3J5QWRkcmVzczsKIH0gaTJvX21jYV9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fb3RoZXJfYnVzIHsKLQl1MTYgQmFzZUlPUG9ydDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0JdTMyIEJhc2VNZW1vcnlBZGRyZXNzOworCV9fdTE2IEJhc2VJT1BvcnQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191MzIgQmFzZU1lbW9yeUFkZHJlc3M7CiB9IGkyb19vdGhlcl9idXM7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9faHJ0X2VudHJ5IHsKLQl1MzIgYWRhcHRlcl9pZDsKLQl1MzIgcGFyZW50X3RpZDoxMjsKLQl1MzIgc3RhdGU6NDsKLQl1MzIgYnVzX251bTo4OwotCXUzMiBidXNfdHlwZTo4OworCV9fdTMyIGFkYXB0ZXJfaWQ7CisJX191MzIgcGFyZW50X3RpZDoxMjsKKwlfX3UzMiBzdGF0ZTo0OworCV9fdTMyIGJ1c19udW06ODsKKwlfX3UzMiBidXNfdHlwZTo4OwogCXVuaW9uIHsKIAkJaTJvX3BjaV9idXMgcGNpX2J1czsKIAkJaTJvX2xvY2FsX2J1cyBsb2NhbF9idXM7CkBAIC0xOTYsNjYgKzE4OSw2NiBAQAogfSBpMm9faHJ0X2VudHJ5OwogCiB0eXBlZGVmIHN0cnVjdCBfaTJvX2hydCB7Ci0JdTE2IG51bV9lbnRyaWVzOwotCXU4IGVudHJ5X2xlbjsKLQl1OCBocnRfdmVyc2lvbjsKLQl1MzIgY2hhbmdlX2luZDsKKwlfX3UxNiBudW1fZW50cmllczsKKwlfX3U4IGVudHJ5X2xlbjsKKwlfX3U4IGhydF92ZXJzaW9uOworCV9fdTMyIGNoYW5nZV9pbmQ7CiAJaTJvX2hydF9lbnRyeSBocnRfZW50cnlbMV07CiB9IGkyb19ocnQ7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fbGN0X2VudHJ5IHsKLQl1MzIgZW50cnlfc2l6ZToxNjsKLQl1MzIgdGlkOjEyOwotCXUzMiByZXNlcnZlZDo0OwotCXUzMiBjaGFuZ2VfaW5kOwotCXUzMiBkZXZpY2VfZmxhZ3M7Ci0JdTMyIGNsYXNzX2lkOjEyOwotCXUzMiB2ZXJzaW9uOjQ7Ci0JdTMyIHZlbmRvcl9pZDoxNjsKLQl1MzIgc3ViX2NsYXNzOwotCXUzMiB1c2VyX3RpZDoxMjsKLQl1MzIgcGFyZW50X3RpZDoxMjsKLQl1MzIgYmlvc19pbmZvOjg7Ci0JdTggaWRlbnRpdHlfdGFnWzhdOwotCXUzMiBldmVudF9jYXBhYmlsaXRpZXM7CisJX191MzIgZW50cnlfc2l6ZToxNjsKKwlfX3UzMiB0aWQ6MTI7CisJX191MzIgcmVzZXJ2ZWQ6NDsKKwlfX3UzMiBjaGFuZ2VfaW5kOworCV9fdTMyIGRldmljZV9mbGFnczsKKwlfX3UzMiBjbGFzc19pZDoxMjsKKwlfX3UzMiB2ZXJzaW9uOjQ7CisJX191MzIgdmVuZG9yX2lkOjE2OworCV9fdTMyIHN1Yl9jbGFzczsKKwlfX3UzMiB1c2VyX3RpZDoxMjsKKwlfX3UzMiBwYXJlbnRfdGlkOjEyOworCV9fdTMyIGJpb3NfaW5mbzo4OworCV9fdTggaWRlbnRpdHlfdGFnWzhdOworCV9fdTMyIGV2ZW50X2NhcGFiaWxpdGllczsKIH0gaTJvX2xjdF9lbnRyeTsKIAogdHlwZWRlZiBzdHJ1Y3QgX2kyb19sY3QgewotCXUzMiB0YWJsZV9zaXplOjE2OwotCXUzMiBib290X3RpZDoxMjsKLQl1MzIgbGN0X3Zlcjo0OwotCXUzMiBpb3BfZmxhZ3M7Ci0JdTMyIGNoYW5nZV9pbmQ7CisJX191MzIgdGFibGVfc2l6ZToxNjsKKwlfX3UzMiBib290X3RpZDoxMjsKKwlfX3UzMiBsY3RfdmVyOjQ7CisJX191MzIgaW9wX2ZsYWdzOworCV9fdTMyIGNoYW5nZV9pbmQ7CiAJaTJvX2xjdF9lbnRyeSBsY3RfZW50cnlbMV07CiB9IGkyb19sY3Q7CiAKIHR5cGVkZWYgc3RydWN0IF9pMm9fc3RhdHVzX2Jsb2NrIHsKLQl1MTYgb3JnX2lkOwotCXUxNiByZXNlcnZlZDsKLQl1MTYgaW9wX2lkOjEyOwotCXUxNiByZXNlcnZlZDE6NDsKLQl1MTYgaG9zdF91bml0X2lkOwotCXUxNiBzZWdtZW50X251bWJlcjoxMjsKLQl1MTYgaTJvX3ZlcnNpb246NDsKLQl1OCBpb3Bfc3RhdGU7Ci0JdTggbXNnX3R5cGU7Ci0JdTE2IGluYm91bmRfZnJhbWVfc2l6ZTsKLQl1OCBpbml0X2NvZGU7Ci0JdTggcmVzZXJ2ZWQyOwotCXUzMiBtYXhfaW5ib3VuZF9mcmFtZXM7Ci0JdTMyIGN1cl9pbmJvdW5kX2ZyYW1lczsKLQl1MzIgbWF4X291dGJvdW5kX2ZyYW1lczsKKwlfX3UxNiBvcmdfaWQ7CisJX191MTYgcmVzZXJ2ZWQ7CisJX191MTYgaW9wX2lkOjEyOworCV9fdTE2IHJlc2VydmVkMTo0OworCV9fdTE2IGhvc3RfdW5pdF9pZDsKKwlfX3UxNiBzZWdtZW50X251bWJlcjoxMjsKKwlfX3UxNiBpMm9fdmVyc2lvbjo0OworCV9fdTggaW9wX3N0YXRlOworCV9fdTggbXNnX3R5cGU7CisJX191MTYgaW5ib3VuZF9mcmFtZV9zaXplOworCV9fdTggaW5pdF9jb2RlOworCV9fdTggcmVzZXJ2ZWQyOworCV9fdTMyIG1heF9pbmJvdW5kX2ZyYW1lczsKKwlfX3UzMiBjdXJfaW5ib3VuZF9mcmFtZXM7CisJX191MzIgbWF4X291dGJvdW5kX2ZyYW1lczsKIAljaGFyIHByb2R1Y3RfaWRbMjRdOwotCXUzMiBleHBlY3RlZF9sY3Rfc2l6ZTsKLQl1MzIgaW9wX2NhcGFiaWxpdGllczsKLQl1MzIgZGVzaXJlZF9tZW1fc2l6ZTsKLQl1MzIgY3VycmVudF9tZW1fc2l6ZTsKLQl1MzIgY3VycmVudF9tZW1fYmFzZTsKLQl1MzIgZGVzaXJlZF9pb19zaXplOwotCXUzMiBjdXJyZW50X2lvX3NpemU7Ci0JdTMyIGN1cnJlbnRfaW9fYmFzZTsKLQl1MzIgcmVzZXJ2ZWQzOjI0OwotCXUzMiBjbWRfc3RhdHVzOjg7CisJX191MzIgZXhwZWN0ZWRfbGN0X3NpemU7CisJX191MzIgaW9wX2NhcGFiaWxpdGllczsKKwlfX3UzMiBkZXNpcmVkX21lbV9zaXplOworCV9fdTMyIGN1cnJlbnRfbWVtX3NpemU7CisJX191MzIgY3VycmVudF9tZW1fYmFzZTsKKwlfX3UzMiBkZXNpcmVkX2lvX3NpemU7CisJX191MzIgY3VycmVudF9pb19zaXplOworCV9fdTMyIGN1cnJlbnRfaW9fYmFzZTsKKwlfX3UzMiByZXNlcnZlZDM6MjQ7CisJX191MzIgY21kX3N0YXR1czo4OwogfSBpMm9fc3RhdHVzX2Jsb2NrOwogCiAvKiBFdmVudCBpbmRpY2F0b3IgbWFzayBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggYThiZWYxZC4uNzdlNjZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC02LDcgKzYsNiBAQAogICogIENvcHlyaWdodCAoQykgMTk5NC0yMDAyICBMaW51cyBUb3J2YWxkcyAmIGF1dGhvcnMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmX2ZkZGkuaCBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCmluZGV4IDEyODhhMTYuLmUwYTE1MDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfZmRkaS5oCkBAIC0xMDIsNiArMTAyLDcgQEAKIAkJfSBoZHI7CiAJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKKyNpZmRlZiBfX0tFUk5FTF9fCiAvKiBEZWZpbmUgRkRESSBzdGF0aXN0aWNzIHN0cnVjdHVyZSAqLwogc3RydWN0IGZkZGlfc3RhdGlzdGljcyB7CiAKQEAgLTE5Myw1ICsxOTQsNiBAQAogCV9fdTMyCXBvcnRfbGVyX2ZsYWdbMl07CiAJX191MzIJcG9ydF9oYXJkd2FyZV9wcmVzZW50WzJdOwogCX07CisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0xJTlVYX0lGX0ZERElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9mcmFkLmggYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAppbmRleCAzOTVmMGFhLi5mMjcyYTgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2ZyYWQuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfRlJBRF9IXwogI2RlZmluZSBfRlJBRF9IXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaWYuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0RMQ0kpIHx8IGRlZmluZWQoQ09ORklHX0RMQ0lfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl90ci5oIGIvaW5jbHVkZS9saW51eC9pZl90ci5oCmluZGV4IDU1MDJmNTkuLjJmOTRjZjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3RyLmgKQEAgLTQzLDcgKzQzLDYgQEAKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRyaF9oZHIgKnRyX2hkcihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCA5M2RjYmUxLi42NjY3Nzg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX0lOSVRfSAogI2RlZmluZSBfTElOVVhfSU5JVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKiBUaGVzZSBtYWNyb3MgYXJlIHVzZWQgdG8gbWFyayBzb21lIGZ1bmN0aW9ucyBvciAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKaW5kZXggMDllMDA0My4uZDRmNDhjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbm90aWZ5LmgKQEAgLTY3LDIwICs2Nyw2NiBAQAogCiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKworLyoKKyAqIHN0cnVjdCBpbm90aWZ5X3dhdGNoIC0gcmVwcmVzZW50cyBhIHdhdGNoIHJlcXVlc3Qgb24gYSBzcGVjaWZpYyBpbm9kZQorICoKKyAqIGhfbGlzdCBpcyBwcm90ZWN0ZWQgYnkgaWgtPm11dGV4IG9mIHRoZSBhc3NvY2lhdGVkIGlub3RpZnlfaGFuZGxlLgorICogaV9saXN0LCBtYXNrIGFyZSBwcm90ZWN0ZWQgYnkgaW5vZGUtPmlub3RpZnlfbXV0ZXggb2YgdGhlIGFzc29jaWF0ZWQgaW5vZGUuCisgKiBpaCwgaW5vZGUsIGFuZCB3ZCBhcmUgbmV2ZXIgd3JpdHRlbiB0byBvbmNlIHRoZSB3YXRjaCBpcyBjcmVhdGVkLgorICoKKyAqIENhbGxlcnMgbXVzdCB1c2UgdGhlIGVzdGFibGlzaGVkIGlub3RpZnkgaW50ZXJmYWNlcyB0byBhY2Nlc3MgaW5vdGlmeV93YXRjaAorICogY29udGVudHMuICBUaGUgY29udGVudCBvZiB0aGlzIHN0cnVjdHVyZSBpcyBwcml2YXRlIHRvIHRoZSBpbm90aWZ5CisgKiBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RydWN0IGlub3RpZnlfd2F0Y2ggeworCXN0cnVjdCBsaXN0X2hlYWQJaF9saXN0OwkvKiBlbnRyeSBpbiBpbm90aWZ5X2hhbmRsZSdzIGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWlfbGlzdDsJLyogZW50cnkgaW4gaW5vZGUncyBsaXN0ICovCisJYXRvbWljX3QJCWNvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwlzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUJKmloOwkvKiBhc3NvY2lhdGVkIGlub3RpZnkgaGFuZGxlICovCisJc3RydWN0IGlub2RlCQkqaW5vZGU7CS8qIGFzc29jaWF0ZWQgaW5vZGUgKi8KKwlfX3MzMgkJCXdkOwkvKiB3YXRjaCBkZXNjcmlwdG9yICovCisJX191MzIJCQltYXNrOwkvKiBldmVudCBtYXNrIGZvciB0aGlzIHdhdGNoICovCit9OworCitzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zIHsKKwl2b2lkICgqaGFuZGxlX2V2ZW50KShzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqLCB1MzIsIHUzMiwgdTMyLAorCQkJICAgICBjb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKKwl2b2lkICgqZGVzdHJveV93YXRjaCkoc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7Cit9OwogCiAjaWZkZWYgQ09ORklHX0lOT1RJRlkKIAorLyogS2VybmVsIEFQSSBmb3IgcHJvZHVjaW5nIGV2ZW50cyAqLworCiBleHRlcm4gdm9pZCBpbm90aWZ5X2RfaW5zdGFudGlhdGUoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2RfbW92ZShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKiwgX191MzIsIF9fdTMyLAotCQkJCSAgICAgIGNvbnN0IGNoYXIgKik7CisJCQkJICAgICAgY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2RlbnRyeV9wYXJlbnRfcXVldWVfZXZlbnQoc3RydWN0IGRlbnRyeSAqLCBfX3UzMiwgX191MzIsCiAJCQkJCSAgICAgIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X3VubW91bnRfaW5vZGVzKHN0cnVjdCBsaXN0X2hlYWQgKik7CiBleHRlcm4gdm9pZCBpbm90aWZ5X2lub2RlX2lzX2RlYWQoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHUzMiBpbm90aWZ5X2dldF9jb29raWUodm9pZCk7CiAKKy8qIEtlcm5lbCBDb25zdW1lciBBUEkgKi8KKworZXh0ZXJuIHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaW5vdGlmeV9pbml0KGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgKik7CitleHRlcm4gdm9pZCBpbm90aWZ5X2luaXRfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CitleHRlcm4gdm9pZCBpbm90aWZ5X2Rlc3Ryb3koc3RydWN0IGlub3RpZnlfaGFuZGxlICopOworZXh0ZXJuIF9fczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCisJCQkJc3RydWN0IGlub3RpZnlfd2F0Y2ggKiopOworZXh0ZXJuIF9fczMyIGlub3RpZnlfZmluZF91cGRhdGVfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm9kZSAqLAorCQkJCSAgICAgICB1MzIpOworZXh0ZXJuIF9fczMyIGlub3RpZnlfYWRkX3dhdGNoKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqLAorCQkJICAgICAgIHN0cnVjdCBpbm9kZSAqLCBfX3UzMik7CitleHRlcm4gaW50IGlub3RpZnlfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICosIHN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworZXh0ZXJuIGludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqLCBfX3UzMik7CitleHRlcm4gdm9pZCBpbm90aWZ5X3JlbW92ZV93YXRjaF9sb2NrZWQoc3RydWN0IGlub3RpZnlfaGFuZGxlICosCisJCQkJCXN0cnVjdCBpbm90aWZ5X3dhdGNoICopOworZXh0ZXJuIHZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKik7CitleHRlcm4gdm9pZCBwdXRfaW5vdGlmeV93YXRjaChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKKwogI2Vsc2UKIAogc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfZF9pbnN0YW50aWF0ZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCkBAIC05NCw3ICsxNDAsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgIF9fdTMyIG1hc2ssIF9fdTMyIGNvb2tpZSwKLQkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSkKKwkJCQkJICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKm5faW5vZGUpCiB7CiB9CiAKQEAgLTExNyw2ICsxNjQsNjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmlub3RpZnlfaW5pdChjb25zdCBzdHJ1Y3QgaW5vdGlmeV9vcGVyYXRpb25zICpvcHMpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVPUE5PVFNVUFApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vdGlmeV9pbml0X3dhdGNoKHN0cnVjdCBpbm90aWZ5X3dhdGNoICp3YXRjaCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfZGVzdHJveShzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloKQoreworfQorCitzdGF0aWMgaW5saW5lIF9fczMyIGlub3RpZnlfZmluZF93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKndhdGNocCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19zMzIgaW5vdGlmeV9maW5kX3VwZGF0ZV93YXRjaChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgX19zMzIgaW5vdGlmeV9hZGRfd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgICAgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gsCisJCQkJICAgICAgc3RydWN0IGlub2RlICppbm9kZSwgX191MzIgbWFzaykKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlub3RpZnlfcm1fd2F0Y2goc3RydWN0IGlub3RpZnlfaGFuZGxlICppaCwKKwkJCQkgICBzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqd2F0Y2gpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIGludCBpbm90aWZ5X3JtX3dkKHN0cnVjdCBpbm90aWZ5X2hhbmRsZSAqaWgsIF9fdTMyIHdkKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlub3RpZnlfcmVtb3ZlX3dhdGNoX2xvY2tlZChzdHJ1Y3QgaW5vdGlmeV9oYW5kbGUgKmloLAorCQkJCQkgICAgICAgc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2lub3RpZnlfd2F0Y2goc3RydWN0IGlub3RpZnlfd2F0Y2ggKndhdGNoKQoreworfQorCiAjZW5kaWYJLyogQ09ORklHX0lOT1RJRlkgKi8KIAogI2VuZGlmCS8qIF9fS0VSTkVMIF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lucHV0LmggYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKaW5kZXggY2UxYTc1Ni4uYjMyYzJiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnB1dC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5wdXQuaApAQCAtMTUsNiArMTUsNyBAQAogI2Vsc2UKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDJjMDhmZGMuLjllMGZlZmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtMiw3ICsyLDYgQEAKICNpZm5kZWYgX0xJTlVYX0lOVEVSUlVQVF9ICiAjZGVmaW5lIF9MSU5VWF9JTlRFUlJVUFRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pLmggYi9pbmNsdWRlL2xpbnV4L2lwbWkuaAppbmRleCAwYTg0YjU2Li41NjUzYjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWkuaApAQCAtMzYsNyArMzYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaXBtaV9tc2dkZWZzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KIAogLyoKICAqIFRoaXMgZmlsZSBkZXNjcmliZXMgYW4gaW50ZXJmYWNlIHRvIGFuIElQTUkgZHJpdmVyLiAgWW91IGhhdmUgdG8KQEAgLTIxMCw2ICsyMDksNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwdjYuaCBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCmluZGV4IDEyNjNkOGMuLjI5Nzg1M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbGludXgvaXB2Ni5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfSVBWNl9ICiAjZGVmaW5lIF9JUFY2X0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnEuaCBiL2luY2x1ZGUvbGludXgvaXJxLmgKaW5kZXggZWUyYTgyYS4uNDJjOWNkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycS5oCkBAIC05LDcgKzksNiBAQAogICogVGhhbmtzLiAtLXJtawogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KIAogI2lmICFkZWZpbmVkKENPTkZJR19TMzkwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oIGIvaW5jbHVkZS9saW51eC9pcnFfY3B1c3RhdC5oCmluZGV4IGFmOTM1MDUuLjc3ZTRiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXJxX2NwdXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycV9jcHVzdGF0LmgKQEAgLTksNyArOSw2IEBACiAgKiBLZWl0aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiBKdWx5IDIwMDAuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKgogICogU2ltcGxlIHdyYXBwZXJzIHJlZHVjaW5nIHNvdXJjZSBibG9hdC4gIERlZmluZSBhbGwgaXJxX3N0YXQgZmllbGRzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzYXBucC5oIGIvaW5jbHVkZS9saW51eC9pc2FwbnAuaAppbmRleCAyNmM2NGMyLi4xZTg3MjhhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzYXBucC5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNhcG5wLmgKQEAgLTIyLDcgKzIyLDYgQEAKICNpZm5kZWYgTElOVVhfSVNBUE5QX0gKICNkZWZpbmUgTElOVVhfSVNBUE5QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbi5oIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKaW5kZXggNTNlYWVlOS4uNjI5OTExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuLmgKQEAgLTE0Niw3ICsxNDYsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzZG4vdHBhbS5oIGIvaW5jbHVkZS9saW51eC9pc2RuL3RwYW0uaAppbmRleCA5ZjY1YmVhLi5kMThkZDBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG4vdHBhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbi90cGFtLmgKQEAgLTI2LDcgKzI2LDYgQEAKICNkZWZpbmUgX1RQQU1fSF8KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKIC8qIElPQ1RMIGNvbW1hbmRzICovCiAjZGVmaW5lIFRQQU1fQ01EX0RTUExPQUQJMHgwMDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmggYi9pbmNsdWRlL2xpbnV4L2lzZG5fcHBwLmgKaW5kZXggMjZiMDBhNy4uODY4N2E3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pc2RuX3BwcC5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbl9wcHAuaApAQCAtNjcsNyArNjcsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfSVBQUF9GSUxURVIKICNpbmNsdWRlIDxsaW51eC9maWx0ZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXNkbmlmLmggYi9pbmNsdWRlL2xpbnV4L2lzZG5pZi5oCmluZGV4IDA0ZTEwZjkuLmI5YjVhNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXNkbmlmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pc2RuaWYuaApAQCAtNTQsNyArNTQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pmZnMyLmggYi9pbmNsdWRlL2xpbnV4L2pmZnMyLmgKaW5kZXggY2Y3OTJiYi4uYzZmNzA2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qZmZzMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamZmczIuaApAQCAtNjUsNiArNjUsMTggQEAKIAogI2RlZmluZSBKRkZTMl9OT0RFVFlQRV9TVU1NQVJZIChKRkZTMl9GRUFUVVJFX1JXQ09NUEFUX0RFTEVURSB8IEpGRlMyX05PREVfQUNDVVJBVEUgfCA2KQogCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX1hBVFRSIChKRkZTMl9GRUFUVVJFX0lOQ09NUEFUIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDgpCisjZGVmaW5lIEpGRlMyX05PREVUWVBFX1hSRUYgKEpGRlMyX0ZFQVRVUkVfSU5DT01QQVQgfCBKRkZTMl9OT0RFX0FDQ1VSQVRFIHwgOSkKKworLyogWEFUVFIgUmVsYXRlZCAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1VTRVIJCTEJLyogZm9yICJ1c2VyLiIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9TRUNVUklUWQkJMgkvKiBmb3IgInNlY3VyaXR5LiIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9BQ0xfQUNDRVNTCTMJLyogZm9yICJzeXN0ZW0ucG9zaXhfYWNsX2FjY2VzcyIgKi8KKyNkZWZpbmUgSkZGUzJfWFBSRUZJWF9BQ0xfREVGQVVMVAk0CS8qIGZvciAic3lzdGVtLnBvc2l4X2FjbF9kZWZhdWx0IiAqLworI2RlZmluZSBKRkZTMl9YUFJFRklYX1RSVVNURUQJCTUJLyogZm9yICJ0cnVzdGVkLioiICovCisKKyNkZWZpbmUgSkZGUzJfQUNMX1ZFUlNJT04JCTB4MDAwMQorCiAvLyBNYXliZSBsYXRlci4uLgogLy8jZGVmaW5lIEpGRlMyX05PREVUWVBFX0NIRUNLUE9JTlQgKEpGRlMyX0ZFQVRVUkVfUldDT01QQVRfREVMRVRFIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDMpCiAvLyNkZWZpbmUgSkZGUzJfTk9ERVRZUEVfT1BUSU9OUyAoSkZGUzJfRkVBVFVSRV9SV0NPTVBBVF9DT1BZIHwgSkZGUzJfTk9ERV9BQ0NVUkFURSB8IDQpCkBAIC04MiwxMSArOTQsMTEgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQzMl90IHYzMjsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgIGppbnQzMl90OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqaW50MzJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogCXVpbnQzMl90IG07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICBqbW9kZV90OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqbW9kZV90OwogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdWludDE2X3QgdjE2OwpAQCAtOTksNyArMTExLDcgQEAKIAlqaW50MTZfdCBub2RldHlwZTsKIAlqaW50MzJfdCB0b3RsZW47IC8qIFNvIHdlIGNhbiBza2lwIG92ZXIgbm9kZXMgd2UgZG9uJ3QgZ3JvayAqLwogCWppbnQzMl90IGhkcl9jcmM7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IGpmZnMyX3Jhd19kaXJlbnQKIHsKQEAgLTExNyw3ICsxMjksNyBAQAogCWppbnQzMl90IG5vZGVfY3JjOwogCWppbnQzMl90IG5hbWVfY3JjOwogCXVpbnQ4X3QgbmFtZVswXTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiAvKiBUaGUgSkZGUzIgcmF3IGlub2RlIHN0cnVjdHVyZTogVXNlZCBmb3Igc3RvcmFnZSBvbiBwaHlzaWNhbCBtZWRpYS4gICovCiAvKiBUaGUgdWlkLCBnaWQsIGF0aW1lLCBtdGltZSBhbmQgY3RpbWUgbWVtYmVycyBjb3VsZCBiZSBsb25nZXIsIGJ1dApAQCAtMTQ5LDYgKzE2MSwzMiBAQAogCWppbnQzMl90IGRhdGFfY3JjOyAgIC8qIENSQyBmb3IgdGhlIChjb21wcmVzc2VkKSBkYXRhLiAgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsgICAvKiBDUkMgZm9yIHRoZSByYXcgaW5vZGUgKGV4Y2x1ZGluZyBkYXRhKSAgKi8KIAl1aW50OF90IGRhdGFbMF07Cit9OworCitzdHJ1Y3QgamZmczJfcmF3X3hhdHRyIHsKKwlqaW50MTZfdCBtYWdpYzsKKwlqaW50MTZfdCBub2RldHlwZTsJLyogPSBKRkZTMl9OT0RFVFlQRV9YQVRUUiAqLworCWppbnQzMl90IHRvdGxlbjsKKwlqaW50MzJfdCBoZHJfY3JjOworCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCisJamludDMyX3QgdmVyc2lvbjsKKwl1aW50OF90IHhwcmVmaXg7CisJdWludDhfdCBuYW1lX2xlbjsKKwlqaW50MTZfdCB2YWx1ZV9sZW47CisJamludDMyX3QgZGF0YV9jcmM7CisJamludDMyX3Qgbm9kZV9jcmM7CisJdWludDhfdCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGpmZnMyX3Jhd194cmVmCit7CisJamludDE2X3QgbWFnaWM7CisJamludDE2X3Qgbm9kZXR5cGU7CS8qID0gSkZGUzJfTk9ERVRZUEVfWFJFRiAqLworCWppbnQzMl90IHRvdGxlbjsKKwlqaW50MzJfdCBoZHJfY3JjOworCWppbnQzMl90IGlubzsJCS8qIGlub2RlIG51bWJlciAqLworCWppbnQzMl90IHhpZDsJCS8qIFhBVFRSIGlkZW50aWZpZXIgbnVtYmVyICovCisJamludDMyX3Qgbm9kZV9jcmM7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkKQEAgLTE2MywxNCArMjAxLDIyIEBACiAJamludDMyX3Qgc3VtX2NyYzsJLyogc3VtbWFyeSBpbmZvcm1hdGlvbiBjcmMgKi8KIAlqaW50MzJfdCBub2RlX2NyYzsgCS8qIG5vZGUgY3JjICovCiAJamludDMyX3Qgc3VtWzBdOyAJLyogaW5vZGUgc3VtbWFyeSBpbmZvICovCi19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogdW5pb24gamZmczJfbm9kZV91bmlvbgogewogCXN0cnVjdCBqZmZzMl9yYXdfaW5vZGUgaTsKIAlzdHJ1Y3QgamZmczJfcmF3X2RpcmVudCBkOworCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgeDsKKwlzdHJ1Y3QgamZmczJfcmF3X3hyZWYgcjsKIAlzdHJ1Y3QgamZmczJfcmF3X3N1bW1hcnkgczsKIAlzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlIHU7CiB9OwogCisvKiBEYXRhIHBheWxvYWQgZm9yIGRldmljZSBub2Rlcy4gKi8KK3VuaW9uIGpmZnMyX2RldmljZV9ub2RlIHsKKwlqaW50MTZfdCBvbGQ7CisJamludDMyX3QgbmV3OworfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfSkZGUzJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmggYi9pbmNsdWRlL2xpbnV4L2pveXN0aWNrLmgKaW5kZXggNWZkMjBkZC4uZTJkM2ExOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qb3lzdGljay5oCisrKyBiL2luY2x1ZGUvbGludXgvam95c3RpY2suaApAQCAtMTExLDI1ICsxMTEsMjUgQEAKICNkZWZpbmUgSlNfU0VUX0FMTAkJOAogCiBzdHJ1Y3QgSlNfREFUQV9UWVBFIHsKLQlpbnQzMl90IGJ1dHRvbnM7Ci0JaW50MzJfdCB4OwotCWludDMyX3QgeTsKKwlfX3MzMiBidXR0b25zOworCV9fczMyIHg7CisJX19zMzIgeTsKIH07CiAKIHN0cnVjdCBKU19EQVRBX1NBVkVfVFlQRV8zMiB7Ci0JaW50MzJfdCBKU19USU1FT1VUOwotCWludDMyX3QgQlVTWTsKLQlpbnQzMl90IEpTX0VYUElSRVRJTUU7Ci0JaW50MzJfdCBKU19USU1FTElNSVQ7CisJX19zMzIgSlNfVElNRU9VVDsKKwlfX3MzMiBCVVNZOworCV9fczMyIEpTX0VYUElSRVRJTUU7CisJX19zMzIgSlNfVElNRUxJTUlUOwogCXN0cnVjdCBKU19EQVRBX1RZUEUgSlNfU0FWRTsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX0NPUlI7CiB9OwogCiBzdHJ1Y3QgSlNfREFUQV9TQVZFX1RZUEVfNjQgewotCWludDMyX3QgSlNfVElNRU9VVDsKLQlpbnQzMl90IEJVU1k7Ci0JaW50NjRfdCBKU19FWFBJUkVUSU1FOwotCWludDY0X3QgSlNfVElNRUxJTUlUOworCV9fczMyIEpTX1RJTUVPVVQ7CisJX19zMzIgQlVTWTsKKwlfX3M2NCBKU19FWFBJUkVUSU1FOworCV9fczY0IEpTX1RJTUVMSU1JVDsKIAlzdHJ1Y3QgSlNfREFUQV9UWVBFIEpTX1NBVkU7CiAJc3RydWN0IEpTX0RBVEFfVFlQRSBKU19DT1JSOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaCBiL2luY2x1ZGUvbGludXgva2FsbHN5bXMuaAppbmRleCA5YmJkMDQwLi41NGUyNTQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2thbGxzeW1zLmgKKysrIGIvaW5jbHVkZS9saW51eC9rYWxsc3ltcy5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfTElOVVhfS0FMTFNZTVNfSAogI2RlZmluZSBfTElOVVhfS0FMTFNZTVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgS1NZTV9OQU1FX0xFTiAxMjcKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCmluZGV4IGI0NjI0OTAuLjQzZTg5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9LRVJORUxfU1RBVF9ICiAjZGVmaW5lIF9MSU5VWF9LRVJORUxfU1RBVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rbW9kLmggYi9pbmNsdWRlL2xpbnV4L2ttb2QuaAppbmRleCBlNGEyMzE1Li4wZGIyMmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ttb2QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ttb2QuaApAQCAtMjAsNyArMjAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva3Byb2Jlcy5oIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKaW5kZXggNzc4YWRjMC4uOGJmNjcwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9rcHJvYmVzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICAqCQk8amtlbmlzdG9AdXMuaWJtLmNvbT4gIGFuZCBQcmFzYW5uYSBTIFBhbmNoYW11a2hpCiAgKgkJPHByYXNhbm5hQGluLmlibS5jb20+IGFkZGVkIGZ1bmN0aW9uLXJldHVybiBwcm9iZXMuCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKaW5kZXggYzA4Yzk5OC4uOTMyMDIxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9saW5rYWdlLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9MSU5LQUdFX0gKICNkZWZpbmUgX0xJTlVYX0xJTktBR0VfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKaW5kZXggNmIyNjg0Ny4uYWE0ZmU5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbmxtLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkL25sbS5oCmluZGV4IDg2OWI2MzAuLmQ5ZDQ2ZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9ja2QvbmxtLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9ubG0uaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgTElOVVhfTE9DS0RfTkxNX0gKICNkZWZpbmUgTElOVVhfTE9DS0RfTkxNX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAvKiBNYXhpbXVtIGZpbGUgb2Zmc2V0IGluIGZpbGVfbG9jay5mbF9lbmQgKi8KICMgZGVmaW5lIE5MTV9PRkZTRVRfTUFYCQkoKHMzMikgMHg3ZmZmZmZmZikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCmluZGV4IGY1ZmRjYTEuLjcyNDQwZjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaApAQCAtMjgsNyArMjgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWdyYXRlLmggYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAppbmRleCBmZjBhNjQwLi42Nzg5YzQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pZ3JhdGUuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX01JR1JBVEVfSAogI2RlZmluZSBfTElOVVhfTUlHUkFURV9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogCiAjaWZkZWYgQ09ORklHX01JR1JBVElPTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taWkuaCBiL2luY2x1ZGUvbGludXgvbWlpLmgKaW5kZXggNjhmNWEwZi4uYmVkZGM2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9taWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L21paS5oCkBAIC05LDcgKzksNiBAQAogI2RlZmluZSBfX0xJTlVYX01JSV9IX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaWYuaD4KIAogLyogR2VuZXJpYyBNSUkgcmVnaXN0ZXJzLiAqLwogCkBAIC0xMzYsNiArMTM1LDIwIEBACiAjZGVmaW5lIExQQV8xMDAwRlVMTCAgICAgICAgICAgIDB4MDgwMCAgLyogTGluayBwYXJ0bmVyIDEwMDBCQVNFLVQgZnVsbCBkdXBsZXggKi8KICNkZWZpbmUgTFBBXzEwMDBIQUxGICAgICAgICAgICAgMHgwNDAwICAvKiBMaW5rIHBhcnRuZXIgMTAwMEJBU0UtVCBoYWxmIGR1cGxleCAqLwogCisvKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGluIGFsbCBTSU9DeE1JSXh4eCBpb2N0bCBjYWxscyAqLworc3RydWN0IG1paV9pb2N0bF9kYXRhIHsKKwlfX3UxNgkJcGh5X2lkOworCV9fdTE2CQlyZWdfbnVtOworCV9fdTE2CQl2YWxfaW47CisJX191MTYJCXZhbF9vdXQ7Cit9OworCisjaWZkZWYgX19LRVJORUxfXyAKKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisKK3N0cnVjdCBldGh0b29sX2NtZDsKKwogc3RydWN0IG1paV9pZl9pbmZvIHsKIAlpbnQgcGh5X2lkOwogCWludCBhZHZlcnRpc2luZzsKQEAgLTE1MSw5ICsxNjQsNiBAQAogCXZvaWQgKCptZGlvX3dyaXRlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsKTsKIH07CiAKLXN0cnVjdCBldGh0b29sX2NtZDsKLXN0cnVjdCBtaWlfaW9jdGxfZGF0YTsKLQogZXh0ZXJuIGludCBtaWlfbGlua19vayAoc3RydWN0IG1paV9pZl9pbmZvICptaWkpOwogZXh0ZXJuIGludCBtaWlfbndheV9yZXN0YXJ0IChzdHJ1Y3QgbWlpX2lmX2luZm8gKm1paSk7CiBleHRlcm4gaW50IG1paV9ldGh0b29sX2dzZXQoc3RydWN0IG1paV9pZl9pbmZvICptaWksIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCk7CkBAIC0xNjgsMTYgKzE3OCw2IEBACiAJCQkgICAgIHVuc2lnbmVkIGludCAqZHVwbGV4X2NoYW5nZWQpOwogCiAKLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiBhbGwgU0lPQ3hNSUl4eHggaW9jdGwgY2FsbHMgKi8KLXN0cnVjdCBtaWlfaW9jdGxfZGF0YSB7Ci0JdTE2CQlwaHlfaWQ7Ci0JdTE2CQlyZWdfbnVtOwotCXUxNgkJdmFsX2luOwotCXUxNgkJdmFsX291dDsKLX07Ci0KLQogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmlmX21paShzdHJ1Y3QgaWZyZXEgKnJxKQogewogCXJldHVybiAoc3RydWN0IG1paV9pb2N0bF9kYXRhICopICZycS0+aWZyX2lmcnU7CkBAIC0yMzUsNSArMjM1LDUgQEAKIAlyZXR1cm4gMDsKIH0KIAotCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fTElOVVhfTUlJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDExNTQ2ODQuLmUyZmEzNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTcsNyArNyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW16b25lLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYW4uaCBiL2luY2x1ZGUvbGludXgvbW1hbi5oCmluZGV4IDE4YTU2ODkuLjg3OTIwYTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1hbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1hbi5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX01NQU5fSAogI2RlZmluZSBfTElOVVhfTU1BTl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9tbWFuLmg+CiAKICNkZWZpbmUgTVJFTUFQX01BWU1PVkUJMQpAQCAtMTMsNiArOSwxMiBAQAogI2RlZmluZSBPVkVSQ09NTUlUX0dVRVNTCQkwCiAjZGVmaW5lIE9WRVJDT01NSVRfQUxXQVlTCQkxCiAjZGVmaW5lIE9WRVJDT01NSVRfTkVWRVIJCTIKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCiBleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X21lbW9yeTsKIGV4dGVybiBpbnQgc3lzY3RsX292ZXJjb21taXRfcmF0aW87CiBleHRlcm4gYXRvbWljX3Qgdm1fY29tbWl0dGVkX3NwYWNlOwpAQCAtNjMsNSArNjUsNSBAQAogCSAgICAgICBfY2FsY192bV90cmFucyhmbGFncywgTUFQX0VYRUNVVEFCTEUsIFZNX0VYRUNVVEFCTEUpIHwKIAkgICAgICAgX2NhbGNfdm1fdHJhbnMoZmxhZ3MsIE1BUF9MT0NLRUQsICAgICBWTV9MT0NLRUQgICAgKTsKIH0KLQorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfTU1BTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaAppbmRleCAyZDgzMzcxLi45NzQyZTNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tem9uZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW16b25lLmgKQEAgLTQsNyArNCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGVhZWMxM2QuLmMyZDg5ZTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtNiw3ICs2LDYgQEAKICAqIFJld3JpdHRlbiBieSBSaWNoYXJkIEhlbmRlcnNvbiA8cnRoQHRhbXUuZWR1PiBEZWMgMTk5NgogICogUmV3cml0dGVuIGFnYWluIGJ5IFJ1c3R5IFJ1c3NlbGwsIDIwMDIKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC01NTcsMTMgKzU1Niw0IEBACiAKICNkZWZpbmUgX19NT0RVTEVfU1RSSU5HKHgpIF9fc3RyaW5naWZ5KHgpCiAKLS8qIFVzZSBzeW1ib2xfZ2V0IGFuZCBzeW1ib2xfcHV0IGluc3RlYWQuICBZb3UnbGwgdGhhbmsgbWUuICovCi0jZGVmaW5lIEhBVkVfSU5URVJfTU9EVUxFCi1leHRlcm4gdm9pZCBfX2RlcHJlY2F0ZWQgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKiwKLQkJc3RydWN0IG1vZHVsZSAqLCBjb25zdCB2b2lkICopOwotZXh0ZXJuIHZvaWQgX19kZXByZWNhdGVkIGludGVyX21vZHVsZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKik7Ci1leHRlcm4gY29uc3Qgdm9pZCAqIF9fZGVwcmVjYXRlZCBpbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3QoY29uc3QgY2hhciAqLAotCQljb25zdCBjaGFyICopOwotZXh0ZXJuIHZvaWQgX19kZXByZWNhdGVkIGludGVyX21vZHVsZV9wdXQoY29uc3QgY2hhciAqKTsKLQogI2VuZGlmIC8qIF9MSU5VWF9NT0RVTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2cuaCBiL2luY2x1ZGUvbGludXgvbXNnLmgKaW5kZXggOTAzZTBhYi4uYWNjN2MxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tc2cuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zZy5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfTElOVVhfTVNHX0gKIAogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogaXBjcyBjdGwgY29tbWFuZHMgKi8KICNkZWZpbmUgTVNHX1NUQVQgMTEKQEAgLTYzLDYgKzYyLDcgQEAKICNkZWZpbmUgTVNHU0VHIChfX01TR1NFRyA8PSAweGZmZmYgPyBfX01TR1NFRyA6IDB4ZmZmZikKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIC8qIG9uZSBtc2dfbXNnIHN0cnVjdHVyZSBmb3IgZWFjaCBtZXNzYWdlICovCiBzdHJ1Y3QgbXNnX21zZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaCBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCmluZGV4IDIzYTU2ODkuLjA5YmZhZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL2NmaS5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfX01URF9DRklfSF9fCiAjZGVmaW5lIF9fTVREX0NGSV9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmggYi9pbmNsdWRlL2xpbnV4L210ZC9pbmZ0bC5oCmluZGV4IGQ3ZWFhNDAuLjY5Nzc3ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL2luZnRsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvaW5mdGwuaApAQCAtNDYsNyArNDYsNyBAQAogICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYmxvY2tzOwkJLyogbnVtYmVyIG9mIHBoeXNpY2FsIGJsb2NrcyAqLwogICAgICAgICB1bnNpZ25lZCBpbnQgbmJfYm9vdF9ibG9ja3M7CS8qIG51bWJlciBvZiBibG9ja3MgdXNlZCBieSB0aGUgYmlvcyAqLwogICAgICAgICBzdHJ1Y3QgZXJhc2VfaW5mbyBpbnN0cjsKLSAgICAgICAgc3RydWN0IG5hbmRfb29iaW5mbyBvb2JpbmZvOworICAgICAgICBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb29iaW5mbzsKIH07CiAKIGludCBJTkZUTF9tb3VudChzdHJ1Y3QgSU5GVExyZWNvcmQgKnMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbWFwLmggYi9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaAppbmRleCA3ZGZkNmUxLi4yOGQ0NjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9tYXAuaApAQCAtNSw3ICs1LDYgQEAKICNpZm5kZWYgX19MSU5VWF9NVERfTUFQX0hfXwogI2RlZmluZSBfX0xJTlVYX01URF9NQVBfSF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL210ZC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKaW5kZXggYjZmMmZkYS4uOWI3YTJiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbXRkLmgKQEAgLTEzLDcgKzEzLDYgQEAKICNlcnJvciBUaGlzIGlzIGEga2VybmVsIGhlYWRlci4gUGVyaGFwcyBpbmNsdWRlIG10ZC11c2VyLmggaW5zdGVhZD8KICNlbmRpZgogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KQEAgLTU2LDE4ICs1NSw2OSBAQAogCXVfaW50MzJfdCBudW1ibG9ja3M7CQkvKiBOdW1iZXIgb2YgYmxvY2tzIG9mIGVyYXNlc2l6ZSBpbiB0aGlzIHJlZ2lvbiAqLwogfTsKIAorLyoKKyAqIG9vYiBvcGVyYXRpb24gbW9kZXMKKyAqCisgKiBNVERfT09CX1BMQUNFOglvb2IgZGF0YSBhcmUgcGxhY2VkIGF0IHRoZSBnaXZlbiBvZmZzZXQKKyAqIE1URF9PT0JfQVVUTzoJb29iIGRhdGEgYXJlIGF1dG9tYXRpY2FsbHkgcGxhY2VkIGF0IHRoZSBmcmVlIGFyZWFzCisgKgkJCXdoaWNoIGFyZSBkZWZpbmVkIGJ5IHRoZSBlY2NsYXlvdXQKKyAqIE1URF9PT0JfUkFXOgkJbW9kZSB0byByZWFkIHJhdyBkYXRhK29vYiBpbiBvbmUgY2h1bmsuIFRoZSBvb2IgZGF0YQorICoJCQlpcyBpbnNlcnRlZCBpbnRvIHRoZSBkYXRhLiBUaGF0cyBhIHJhdyBpbWFnZSBvZiB0aGUKKyAqCQkJZmxhc2ggY29udGVudHMuCisgKi8KK3R5cGVkZWYgZW51bSB7CisJTVREX09PQl9QTEFDRSwKKwlNVERfT09CX0FVVE8sCisJTVREX09PQl9SQVcsCit9IG10ZF9vb2JfbW9kZV90OworCisvKioKKyAqIHN0cnVjdCBtdGRfb29iX29wcyAtIG9vYiBvcGVyYXRpb24gb3BlcmFuZHMKKyAqIEBtb2RlOglvcGVyYXRpb24gbW9kZQorICoKKyAqIEBsZW46CW51bWJlciBvZiBieXRlcyB0byB3cml0ZS9yZWFkLiBXaGVuIGEgZGF0YSBidWZmZXIgaXMgZ2l2ZW4KKyAqCQkoZGF0YnVmICE9IE5VTEwpIHRoaXMgaXMgdGhlIG51bWJlciBvZiBkYXRhIGJ5dGVzLiBXaGVuCisgKwkJbm8gZGF0YSBidWZmZXIgaXMgYXZhaWxhYmxlIHRoaXMgaXMgdGhlIG51bWJlciBvZiBvb2IgYnl0ZXMuCisgKgorICogQHJldGxlbjoJbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4vcmVhZC4gV2hlbiBhIGRhdGEgYnVmZmVyIGlzIGdpdmVuCisgKgkJKGRhdGJ1ZiAhPSBOVUxMKSB0aGlzIGlzIHRoZSBudW1iZXIgb2YgZGF0YSBieXRlcy4gV2hlbgorICsJCW5vIGRhdGEgYnVmZmVyIGlzIGF2YWlsYWJsZSB0aGlzIGlzIHRoZSBudW1iZXIgb2Ygb29iIGJ5dGVzLgorICoKKyAqIEBvb2JsZW46CW51bWJlciBvZiBvb2IgYnl0ZXMgcGVyIHBhZ2UKKyAqIEBvb2JvZmZzOglvZmZzZXQgb2Ygb29iIGRhdGEgaW4gdGhlIG9vYiBhcmVhIChvbmx5IHJlbGV2YW50IHdoZW4KKyAqCQltb2RlID0gTVREX09PQl9QTEFDRSkKKyAqIEBkYXRidWY6CWRhdGEgYnVmZmVyIC0gaWYgTlVMTCBvbmx5IG9vYiBkYXRhIGFyZSByZWFkL3dyaXR0ZW4KKyAqIEBvb2JidWY6CW9vYiBkYXRhIGJ1ZmZlcgorICovCitzdHJ1Y3QgbXRkX29vYl9vcHMgeworCW10ZF9vb2JfbW9kZV90CW1vZGU7CisJc2l6ZV90CQlsZW47CisJc2l6ZV90CQlyZXRsZW47CisJc2l6ZV90CQlvb2JsZW47CisJdWludDMyX3QJb29ib2ZmczsKKwl1aW50OF90CQkqZGF0YnVmOworCXVpbnQ4X3QJCSpvb2JidWY7Cit9OworCiBzdHJ1Y3QgbXRkX2luZm8gewogCXVfY2hhciB0eXBlOwogCXVfaW50MzJfdCBmbGFnczsKIAl1X2ludDMyX3Qgc2l6ZTsJIC8vIFRvdGFsIHNpemUgb2YgdGhlIE1URAogCi0JLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYe92ZSB1c2VycyBtYXkgdGFrZSB0aGlzCisJLyogIk1ham9yIiBlcmFzZSBzaXplIGZvciB0aGUgZGV2aWNlLiBOYcOvdmUgdXNlcnMgbWF5IHRha2UgdGhpcwogCSAqIHRvIGJlIHRoZSBvbmx5IGVyYXNlIHNpemUgYXZhaWxhYmxlLCBvciBtYXkgdXNlIHRoZSBtb3JlIGRldGFpbGVkCiAJICogaW5mb3JtYXRpb24gYmVsb3cgaWYgdGhleSBkZXNpcmUKIAkgKi8KIAl1X2ludDMyX3QgZXJhc2VzaXplOworCS8qIE1pbmltYWwgd3JpdGFibGUgZmxhc2ggdW5pdCBzaXplLiBJbiBjYXNlIG9mIE5PUiBmbGFzaCBpdCBpcyAxIChldmVuCisJICogdGhvdWdoIGluZGl2aWR1YWwgYml0cyBjYW4gYmUgY2xlYXJlZCksIGluIGNhc2Ugb2YgTkFORCBmbGFzaCBpdCBpcworCSAqIG9uZSBOQU5EIHBhZ2UgKG9yIGhhbGYsIG9yIG9uZS1mb3VydGhzIG9mIGl0KSwgaW4gY2FzZSBvZiBFQ0MtZWQgTk9SCisJICogaXQgaXMgb2YgRUNDIGJsb2NrIHNpemUsIGV0Yy4gSXQgaXMgaWxsZWdhbCB0byBoYXZlIHdyaXRlc2l6ZSA9IDAuCisJICogQW55IGRyaXZlciByZWdpc3RlcmluZyBhIHN0cnVjdCBtdGRfaW5mbyBtdXN0IGVuc3VyZSBhIHdyaXRlc2l6ZSBvZgorCSAqIDEgb3IgbGFyZ2VyLgorCSAqLworCXVfaW50MzJfdCB3cml0ZXNpemU7CiAKLQl1X2ludDMyX3Qgb29iYmxvY2s7ICAvLyBTaXplIG9mIE9PQiBibG9ja3MgKGUuZy4gNTEyKQogCXVfaW50MzJfdCBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCiAJdV9pbnQzMl90IGVjY3R5cGU7CiAJdV9pbnQzMl90IGVjY3NpemU7CkBAIC03OSw3ICsxMjksNiBAQAogCSAqIE1URF9QUk9HUkFNX1JFR0lPTlMgZmxhZyBpcyBzZXQuCiAJICogKE1heWJlIHdlIHNob3VsZCBoYXZlIGFuIHVuaW9uIGZvciB0aG9zZT8pCiAJICovCi0jZGVmaW5lIE1URF9QUk9HUkVHSU9OX1NJWkUobXRkKSAgKG10ZCktPm9vYmJsb2NrCiAjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX1ZBTElEKG10ZCkgIChtdGQpLT5vb2JzaXplCiAjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSAgKG10ZCktPmVjY3R5cGUKIApAQCAtODcsOSArMTM2LDggQEAKIAljaGFyICpuYW1lOwogCWludCBpbmRleDsKIAotCS8vIG9vYmluZm8gaXMgYSBuYW5kX29vYmluZm8gc3RydWN0dXJlLCB3aGljaCBjYW4gYmUgc2V0IGJ5IGlvdGNsIChNRU1TRVRPT0JJTkZPKQotCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKLQl1X2ludDMyX3Qgb29iYXZhaWw7ICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gT09CIGFyZWEgYXZhaWxhYmxlIGZvciBmcworCS8qIGVjYyBsYXlvdXQgc3RydWN0dXJlIHBvaW50ZXIgLSByZWFkIG9ubHkgISAqLworCXN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OwogCiAJLyogRGF0YSBmb3IgdmFyaWFibGUgZXJhc2UgcmVnaW9ucy4gSWYgbnVtZXJhc2VyZWdpb25zIGlzIHplcm8sCiAJICogaXQgbWVhbnMgdGhhdCB0aGUgd2hvbGUgZGV2aWNlIGhhcyBlcmFzZXNpemUgYXMgZ2l2ZW4gYWJvdmUuCkBAIC0xMTIsMTEgKzE2MCwxMCBAQAogCWludCAoKnJlYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CiAJaW50ICgqd3JpdGUpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpOwogCi0JaW50ICgqcmVhZF9lY2MpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7Ci0JaW50ICgqd3JpdGVfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmLCB1X2NoYXIgKmVjY2J1Ziwgc3RydWN0IG5hbmRfb29iaW5mbyAqb29ic2VsKTsKLQotCWludCAoKnJlYWRfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOwotCWludCAoKndyaXRlX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCBjb25zdCB1X2NoYXIgKmJ1Zik7CisJaW50ICgqcmVhZF9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOworCWludCAoKndyaXRlX29vYikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgdG8sCisJCQkgc3RydWN0IG10ZF9vb2Jfb3BzICpvcHMpOwogCiAJLyoKIAkgKiBNZXRob2RzIHRvIGFjY2VzcyB0aGUgcHJvdGVjdGlvbiByZWdpc3RlciBhcmVhLCBwcmVzZW50IGluIHNvbWUKQEAgLTEzMCwxNyArMTc3LDExIEBACiAJaW50ICgqd3JpdGVfdXNlcl9wcm90X3JlZykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqYnVmKTsKIAlpbnQgKCpsb2NrX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4pOwogCi0JLyoga3ZlYy1iYXNlZCByZWFkL3dyaXRlIG1ldGhvZHMuIFdlIG5lZWQgdGhlc2UgZXNwZWNpYWxseSBmb3IgTkFORCBmbGFzaCwKLQkgICB3aXRoIGl0cyBsaW1pdGVkIG51bWJlciBvZiB3cml0ZSBjeWNsZXMgcGVyIGVyYXNlLgorCS8qIGt2ZWMtYmFzZWQgcmVhZC93cml0ZSBtZXRob2RzLgogCSAgIE5COiBUaGUgJ2NvdW50JyBwYXJhbWV0ZXIgaXMgdGhlIG51bWJlciBvZiBfdmVjdG9yc18sIGVhY2ggb2YKIAkgICB3aGljaCBjb250YWlucyBhbiAob2ZzLCBsZW4pIHR1cGxlLgogCSovCi0JaW50ICgqcmVhZHYpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbik7Ci0JaW50ICgqcmVhZHZfZWNjKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBrdmVjICp2ZWNzLCB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgZnJvbSwKLQkJc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqZWNjYnVmLCBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwpOwogCWludCAoKndyaXRldikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbik7Ci0JaW50ICgqd3JpdGV2X2VjYykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLAotCQlzaXplX3QgKnJldGxlbiwgdV9jaGFyICplY2NidWYsIHN0cnVjdCBuYW5kX29vYmluZm8gKm9vYnNlbCk7CiAKIAkvKiBTeW5jICovCiAJdm9pZCAoKnN5bmMpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CkBAIC0xNTksNiArMjAwLDkgQEAKIAogCXN0cnVjdCBub3RpZmllcl9ibG9jayByZWJvb3Rfbm90aWZpZXI7ICAvKiBkZWZhdWx0IG1vZGUgYmVmb3JlIHJlYm9vdCAqLwogCisJLyogRUNDIHN0YXR1cyBpbmZvcm1hdGlvbiAqLworCXN0cnVjdCBtdGRfZWNjX3N0YXRzIGVjY19zdGF0czsKKwogCXZvaWQgKnByaXY7CiAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKQEAgLTE5MiwyMCArMjM2LDYgQEAKIGludCBkZWZhdWx0X210ZF9yZWFkdihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGt2ZWMgKnZlY3MsCiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBmcm9tLCBzaXplX3QgKnJldGxlbik7CiAKLSNkZWZpbmUgTVREX0VSQVNFKG10ZCwgYXJncy4uLikgKCoobXRkLT5lcmFzZSkpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1BPSU5UKG10ZCwgYSxiLGMsZCkgKCoobXRkLT5wb2ludCkpKG10ZCwgYSxiLGMsICh1X2NoYXIgKiopKGQpKQotI2RlZmluZSBNVERfVU5QT0lOVChtdGQsIGFyZykgKCoobXRkLT51bnBvaW50KSkobXRkLCAodV9jaGFyICopYXJnKQotI2RlZmluZSBNVERfUkVBRChtdGQsIGFyZ3MuLi4pICgqKG10ZC0+cmVhZCkpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFKG10ZCwgYXJncy4uLikgKCoobXRkLT53cml0ZSkpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1JFQURWKG10ZCwgYXJncy4uLikgKCoobXRkLT5yZWFkdikpKG10ZCwgYXJncykKLSNkZWZpbmUgTVREX1dSSVRFVihtdGQsIGFyZ3MuLi4pICgqKG10ZC0+d3JpdGV2KSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUkVBREVDQyhtdGQsIGFyZ3MuLi4pICgqKG10ZC0+cmVhZF9lY2MpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9XUklURUVDQyhtdGQsIGFyZ3MuLi4pICgqKG10ZC0+d3JpdGVfZWNjKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfUkVBRE9PQihtdGQsIGFyZ3MuLi4pICgqKG10ZC0+cmVhZF9vb2IpKShtdGQsIGFyZ3MpCi0jZGVmaW5lIE1URF9XUklURU9PQihtdGQsIGFyZ3MuLi4pICgqKG10ZC0+d3JpdGVfb29iKSkobXRkLCBhcmdzKQotI2RlZmluZSBNVERfU1lOQyhtdGQpIGRvIHsgaWYgKG10ZC0+c3luYykgKCoobXRkLT5zeW5jKSkobXRkKTsgIH0gd2hpbGUgKDApCi0KLQogI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwogdm9pZCBtdGRfZXJhc2VfY2FsbGJhY2soc3RydWN0IGVyYXNlX2luZm8gKmluc3RyKTsKICNlbHNlCkBAIC0yMjYsNyArMjU2LDcgQEAKIAogI2lmZGVmIENPTkZJR19NVERfREVCVUcKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikJCQkJXAotIAlkbyB7CQkJCQkJXAorCWRvIHsJCQkJCQlcCiAJCWlmIChuIDw9IENPTkZJR19NVERfREVCVUdfVkVSQk9TRSkJXAogCQkJcHJpbnRrKEtFUk5fSU5GTyBhcmdzKTsJCVwKIAl9IHdoaWxlKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmggYi9pbmNsdWRlL2xpbnV4L210ZC9uYW5kLmgKaW5kZXggZGE1ZTY3Yi4uNjY1NTkyNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tdGQvbmFuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL25hbmQuaApAQCAtMTEsNTIgKzExLDE1IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogIEluZm86Ci0gKiAgIENvbnRhaW5zIHN0YW5kYXJkIGRlZmluZXMgYW5kIElEcyBmb3IgTkFORCBmbGFzaCBkZXZpY2VzCisgKiBJbmZvOgorICoJQ29udGFpbnMgc3RhbmRhcmQgZGVmaW5lcyBhbmQgSURzIGZvciBOQU5EIGZsYXNoIGRldmljZXMKICAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAwMS0zMS0yMDAwIERNVyAgICAgQ3JlYXRlZAotICogICAwOS0xOC0yMDAwIFNKSCAgICAgTW92ZWQgc3RydWN0dXJlIG91dCBvZiB0aGUgRGlzay1Pbi1DaGlwIGRyaXZlcnMKLSAqCQkJc28gaXQgY2FuIGJlIHVzZWQgYnkgb3RoZXIgTkFORCBmbGFzaCBkZXZpY2UKLSAqCQkJZHJpdmVycy4gSSBhbHNvIGNoYW5nZWQgdGhlIGNvcHlyaWdodCBzaW5jZSBub25lCi0gKgkJCW9mIHRoZSBvcmlnaW5hbCBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHNwZWNpZmljCi0gKgkJCXRvIERvQyBkZXZpY2VzLiBEYXZpZCBjYW4gd2hhY2sgbWUgd2l0aCBhIGJhc2ViYWxsCi0gKgkJCWJhdCBsYXRlciBpZiBJIGRpZCBzb21ldGhpbmcgbmF1Z2h0eS4KLSAqICAgMTAtMTEtMjAwMCBTSkggICAgIEFkZGVkIHByaXZhdGUgTkFORCBmbGFzaCBzdHJ1Y3R1cmUgZm9yIGRyaXZlcgotICogICAxMC0yNC0yMDAwIFNKSCAgICAgQWRkZWQgcHJvdG90eXBlIGZvciAnbmFuZF9zY2FuJyBmdW5jdGlvbgotICogICAxMC0yOS0yMDAxIFRHCWNoYW5nZWQgbmFuZF9jaGlwIHN0cnVjdHVyZSB0byBzdXBwb3J0Ci0gKgkJCWhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGFjY2Vzc2luZyBjb250cm9sIGxpbmVzCi0gKiAgIDAyLTIxLTIwMDIgVEcJYWRkZWQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHJlYWQvd3JpdGUgYWRyZXNzIGFuZAotICoJCQlyZWFkeS9idXN5IGxpbmUgYWNjZXNzIGZ1bmN0aW9uCi0gKiAgIDAyLTI2LTIwMDIgVEcJYWRkZWQgY2hpcF9kZWxheSB0byBuYW5kX2NoaXAgc3RydWN0dXJlIHRvIG9wdGltaXplCi0gKgkJCWNvbW1hbmQgZGVsYXkgdGltZXMgZm9yIGRpZmZlcmVudCBjaGlwcwotICogICAwNC0yOC0yMDAyIFRHCU9PQiBjb25maWcgZGVmaW5lcyBtb3ZlZCBmcm9tIG5hbmQuYyB0byBhdm9pZCBkdXBsaWNhdGUKLSAqCQkJZGVmaW5lcyBpbiBqZmZzMi93YnVmLmMKLSAqICAgMDgtMDctMjAwMiBURwlmb3JjZWQgYmFkIGJsb2NrIGxvY2F0aW9uIHRvIGJ5dGUgNSBvZiBPT0IsIGV2ZW4gaWYKLSAqCQkJQ09ORklHX01URF9OQU5EX0VDQ19KRkZTMiBpcyBub3Qgc2V0Ci0gKiAgIDA4LTEwLTIwMDIgVEcJZXh0ZW5zaW9ucyB0byBuYW5kX2NoaXAgc3RydWN0dXJlIHRvIHN1cHBvcnQgSFctRUNDCi0gKgotICogICAwOC0yOS0yMDAyIHRnbHggCW5hbmRfY2hpcCBzdHJ1Y3R1cmU6IGRhdGFfcG9pIGZvciBzZWxlY3RpbmcKLSAqCQkJaW50ZXJuYWwgLyBmcy1kcml2ZXIgYnVmZmVyCi0gKgkJCXN1cHBvcnQgZm9yIDZieXRlLzUxMmJ5dGUgaGFyZHdhcmUgRUNDCi0gKgkJCXJlYWRfZWNjLCB3cml0ZV9lY2MgZXh0ZW5kZWQgZm9yIGRpZmZlcmVudCBvb2ItbGF5b3V0Ci0gKgkJCW9vYiBsYXlvdXQgc2VsZWN0aW9uczogTkFORF9OT05FX09PQiwgTkFORF9KRkZTMl9PT0IsCi0gKgkJCU5BTkRfWUFGRlNfT09CCi0gKiAgMTEtMjUtMjAwMiB0Z2x4CUFkZGVkIE1hbnVmYWN0dXJlciBjb2RlIEZVSklUU1UsIE5BVElPTkFMCi0gKgkJCVNwbGl0IG1hbnVmYWN0dXJlciBhbmQgZGV2aWNlIElEIHN0cnVjdHVyZXMKLSAqCi0gKiAgMDItMDgtMjAwNCB0Z2x4IAlhZGRlZCBvcHRpb24gZmllbGQgdG8gbmFuZCBzdHJ1Y3R1cmUgZm9yIGNoaXAgYW5vbWFsaXRpZXMKLSAqICAwNS0yNS0yMDA0IHRnbHggCWFkZGVkIGJhZCBibG9jayB0YWJsZSBzdXBwb3J0LCBTVC1NSUNSTyBtYW51ZmFjdHVyZXIgaWQKLSAqCQkJdXBkYXRlIG9mIG5hbmRfY2hpcCBzdHJ1Y3R1cmUgZGVzY3JpcHRpb24KLSAqICAwMS0xNy0yMDA1IGRtYXJsaW4JYWRkZWQgZXh0ZW5kZWQgY29tbWFuZHMgZm9yIEFHLUFORCBkZXZpY2UgYW5kIGFkZGVkIG9wdGlvbgotICogCQkJZm9yIEJCVF9BVVRPX1JFRlJFU0guCi0gKiAgMDEtMjAtMjAwNSBkbWFybGluCWFkZGVkIG9wdGlvbmFsIHBvaW50ZXIgdG8gaGFyZHdhcmUgc3BlY2lmaWMgY2FsbGJhY2sgZm9yCi0gKgkJCWV4dHJhIGVycm9yIHN0YXR1cyBjaGVja3MuCisgKiBDaGFuZ2Vsb2c6CisgKglTZWUgZ2l0IGNoYW5nZWxvZy4KICAqLwogI2lmbmRlZiBfX0xJTlVYX01URF9OQU5EX0gKICNkZWZpbmUgX19MSU5VWF9NVERfTkFORF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CkBAIC02NywxMCArMzAsNiBAQAogLyogRnJlZSByZXNvdXJjZXMgaGVsZCBieSB0aGUgTkFORCBkZXZpY2UgKi8KIGV4dGVybiB2b2lkIG5hbmRfcmVsZWFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQpOwogCi0vKiBSZWFkIHJhdyBkYXRhIGZyb20gdGhlIGRldmljZSB3aXRob3V0IEVDQyAqLwotZXh0ZXJuIGludCBuYW5kX3JlYWRfcmF3IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqYnVmLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90IG9vYmxlbik7Ci0KLQogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIE5BTkQgY2hpcHMgaW4gYW4gYXJyYXkgKi8KICNkZWZpbmUgTkFORF9NQVhfQ0hJUFMJCTgKIApAQCAtNzksNDQgKzM4LDQ1IEBACiAgKiBhZGp1c3QgdGhpcyBhY2NvcmRpbmdseS4KICAqLwogI2RlZmluZSBOQU5EX01BWF9PT0JTSVpFCTY0CisjZGVmaW5lIE5BTkRfTUFYX1BBR0VTSVpFCTIwNDgKIAogLyoKICAqIENvbnN0YW50cyBmb3IgaGFyZHdhcmUgc3BlY2lmaWMgQ0xFL0FMRS9OQ0UgZnVuY3Rpb24KLSovCisgKgorICogVGhlc2UgYXJlIGJpdHMgd2hpY2ggY2FuIGJlIG9yJ2VkIHRvIHNldC9jbGVhciBtdWx0aXBsZQorICogYml0cyBpbiBvbmUgZ28uCisgKi8KIC8qIFNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBsb3cgKi8KLSNkZWZpbmUgTkFORF9DVExfU0VUTkNFIAkxCi0vKiBEZXNlbGVjdCB0aGUgY2hpcCBieSBzZXR0aW5nIG5DRSB0byBoaWdoICovCi0jZGVmaW5lIE5BTkRfQ1RMX0NMUk5DRQkJMgorI2RlZmluZSBOQU5EX05DRQkJMHgwMQogLyogU2VsZWN0IHRoZSBjb21tYW5kIGxhdGNoIGJ5IHNldHRpbmcgQ0xFIHRvIGhpZ2ggKi8KLSNkZWZpbmUgTkFORF9DVExfU0VUQ0xFCQkzCi0vKiBEZXNlbGVjdCB0aGUgY29tbWFuZCBsYXRjaCBieSBzZXR0aW5nIENMRSB0byBsb3cgKi8KLSNkZWZpbmUgTkFORF9DVExfQ0xSQ0xFCQk0CisjZGVmaW5lIE5BTkRfQ0xFCQkweDAyCiAvKiBTZWxlY3QgdGhlIGFkZHJlc3MgbGF0Y2ggYnkgc2V0dGluZyBBTEUgdG8gaGlnaCAqLwotI2RlZmluZSBOQU5EX0NUTF9TRVRBTEUJCTUKLS8qIERlc2VsZWN0IHRoZSBhZGRyZXNzIGxhdGNoIGJ5IHNldHRpbmcgQUxFIHRvIGxvdyAqLwotI2RlZmluZSBOQU5EX0NUTF9DTFJBTEUJCTYKLS8qIFNldCB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gaGlnaC4gTm90IHVzZWQhICovCi0jZGVmaW5lIE5BTkRfQ1RMX1NFVFdQCQk3Ci0vKiBDbGVhciB3cml0ZSBwcm90ZWN0aW9uIGJ5IHNldHRpbmcgV1AgdG8gbG93LiBOb3QgdXNlZCEgKi8KLSNkZWZpbmUgTkFORF9DVExfQ0xSV1AJCTgKKyNkZWZpbmUgTkFORF9BTEUJCTB4MDQKKworI2RlZmluZSBOQU5EX0NUUkxfQ0xFCQkoTkFORF9OQ0UgfCBOQU5EX0NMRSkKKyNkZWZpbmUgTkFORF9DVFJMX0FMRQkJKE5BTkRfTkNFIHwgTkFORF9BTEUpCisjZGVmaW5lIE5BTkRfQ1RSTF9DSEFOR0UJMHg4MAogCiAvKgogICogU3RhbmRhcmQgTkFORCBmbGFzaCBjb21tYW5kcwogICovCiAjZGVmaW5lIE5BTkRfQ01EX1JFQUQwCQkwCiAjZGVmaW5lIE5BTkRfQ01EX1JFQUQxCQkxCisjZGVmaW5lIE5BTkRfQ01EX1JORE9VVAkJNQogI2RlZmluZSBOQU5EX0NNRF9QQUdFUFJPRwkweDEwCiAjZGVmaW5lIE5BTkRfQ01EX1JFQURPT0IJMHg1MAogI2RlZmluZSBOQU5EX0NNRF9FUkFTRTEJCTB4NjAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTCQkweDcwCiAjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19NVUxUSQkweDcxCiAjZGVmaW5lIE5BTkRfQ01EX1NFUUlOCQkweDgwCisjZGVmaW5lIE5BTkRfQ01EX1JORElOCQkweDg1CiAjZGVmaW5lIE5BTkRfQ01EX1JFQURJRAkJMHg5MAogI2RlZmluZSBOQU5EX0NNRF9FUkFTRTIJCTB4ZDAKICNkZWZpbmUgTkFORF9DTURfUkVTRVQJCTB4ZmYKIAogLyogRXh0ZW5kZWQgY29tbWFuZHMgZm9yIGxhcmdlIHBhZ2UgZGV2aWNlcyAqLwogI2RlZmluZSBOQU5EX0NNRF9SRUFEU1RBUlQJMHgzMAorI2RlZmluZSBOQU5EX0NNRF9STkRPVVRTVEFSVAkweEUwCiAjZGVmaW5lIE5BTkRfQ01EX0NBQ0hFRFBST0cJMHgxNQogCiAvKiBFeHRlbmRlZCBjb21tYW5kcyBmb3IgQUctQU5EIGRldmljZSAqLwpAQCAtMTM4LDYgKzk4LDggQEAKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX1JFU0VUCTB4N2YKICNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0NMRUFSCTB4ZmYKIAorI2RlZmluZSBOQU5EX0NNRF9OT05FCQktMQorCiAvKiBTdGF0dXMgYml0cyAqLwogI2RlZmluZSBOQU5EX1NUQVRVU19GQUlMCTB4MDEKICNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTF9OMQkweDAyCkBAIC0xNDgsMjEgKzExMCwxMiBAQAogLyoKICAqIENvbnN0YW50cyBmb3IgRUNDX01PREVTCiAgKi8KLQotLyogTm8gRUNDLiBVc2FnZSBpcyBub3QgcmVjb21tZW5kZWQgISAqLwotI2RlZmluZSBOQU5EX0VDQ19OT05FCQkwCi0vKiBTb2Z0d2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19TT0ZUCQkxCi0vKiBIYXJkd2FyZSBFQ0MgMyBieXRlIEVDQyBwZXIgMjU2IEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzNfMjU2CTIKLS8qIEhhcmR3YXJlIEVDQyAzIGJ5dGUgRUNDIHBlciA1MTIgQnl0ZSBkYXRhICovCi0jZGVmaW5lIE5BTkRfRUNDX0hXM181MTIJMwotLyogSGFyZHdhcmUgRUNDIDMgYnl0ZSBFQ0MgcGVyIDUxMiBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFc2XzUxMgk0Ci0vKiBIYXJkd2FyZSBFQ0MgOCBieXRlIEVDQyBwZXIgNTEyIEJ5dGUgZGF0YSAqLwotI2RlZmluZSBOQU5EX0VDQ19IVzhfNTEyCTYKLS8qIEhhcmR3YXJlIEVDQyAxMiBieXRlIEVDQyBwZXIgMjA0OCBCeXRlIGRhdGEgKi8KLSNkZWZpbmUgTkFORF9FQ0NfSFcxMl8yMDQ4CTcKK3R5cGVkZWYgZW51bSB7CisJTkFORF9FQ0NfTk9ORSwKKwlOQU5EX0VDQ19TT0ZULAorCU5BTkRfRUNDX0hXLAorCU5BTkRfRUNDX0hXX1NZTkRST01FLAorfSBuYW5kX2VjY19tb2Rlc190OwogCiAvKgogICogQ29uc3RhbnRzIGZvciBIYXJkd2FyZSBFQ0MKQEAgLTIwMSw2ICsxNTQsMTAgQEAKICAqIGJpdHMgZnJvbSBhZGphY2VudCBibG9ja3MgZnJvbSAnbGVha2luZycgaW4gYWx0ZXJpbmcgZGF0YS4KICAqIFRoaXMgaGFwcGVucyB3aXRoIHRoZSBSZW5lc2FzIEFHLUFORCBjaGlwcywgcG9zc2libHkgb3RoZXJzLiAgKi8KICNkZWZpbmUgQkJUX0FVVE9fUkVGUkVTSAkweDAwMDAwMDgwCisvKiBDaGlwIGRvZXMgbm90IHJlcXVpcmUgcmVhZHkgY2hlY2sgb24gcmVhZC4gVHJ1ZQorICogZm9yIGFsbCBsYXJnZSBwYWdlIGRldmljZXMsIGFzIHRoZXkgZG8gbm90IHN1cHBvcnQKKyAqIGF1dG9pbmNyZW1lbnQuKi8KKyNkZWZpbmUgTkFORF9OT19SRUFEUkRZCQkweDAwMDAwMTAwCiAKIC8qIE9wdGlvbnMgdmFsaWQgZm9yIFNhbXN1bmcgbGFyZ2UgcGFnZSBkZXZpY2VzICovCiAjZGVmaW5lIE5BTkRfU0FNU1VOR19MUF9PUFRJT05TIFwKQEAgLTIxOSwxOCArMTc2LDEyIEBACiAvKiBVc2UgYSBmbGFzaCBiYXNlZCBiYWQgYmxvY2sgdGFibGUuIFRoaXMgb3B0aW9uIGlzIHBhc3NlZCB0byB0aGUKICAqIGRlZmF1bHQgYmFkIGJsb2NrIHRhYmxlIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBOQU5EX1VTRV9GTEFTSF9CQlQJMHgwMDAxMDAwMAotLyogVGhlIGh3IGVjYyBnZW5lcmF0b3IgcHJvdmlkZXMgYSBzeW5kcm9tZSBpbnN0ZWFkIGEgZWNjIHZhbHVlIG9uIHJlYWQKLSAqIFRoaXMgY2FuIG9ubHkgd29yayBpZiB3ZSBoYXZlIHRoZSBlY2MgYnl0ZXMgZGlyZWN0bHkgYmVoaW5kIHRoZQotICogZGF0YSBieXRlcy4gQXBwbGllcyBmb3IgRE9DIGFuZCBBRy1BTkQgUmVuZXNhcyBIVyBSZWVkIFNvbG9tb24gZ2VuZXJhdG9ycyAqLwotI2RlZmluZSBOQU5EX0hXRUNDX1NZTkRST01FCTB4MDAwMjAwMDAKIC8qIFRoaXMgb3B0aW9uIHNraXBzIHRoZSBiYnQgc2NhbiBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICovCi0jZGVmaW5lIE5BTkRfU0tJUF9CQlRTQ0FOCTB4MDAwNDAwMDAKKyNkZWZpbmUgTkFORF9TS0lQX0JCVFNDQU4JMHgwMDAyMDAwMAogCiAvKiBPcHRpb25zIHNldCBieSBuYW5kIHNjYW4gKi8KLS8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIG9vYl9idWYgKi8KLSNkZWZpbmUgTkFORF9PT0JCVUZfQUxMT0MJMHg0MDAwMDAwMAotLyogTmFuZCBzY2FuIGhhcyBhbGxvY2F0ZWQgZGF0YV9idWYgKi8KLSNkZWZpbmUgTkFORF9EQVRBQlVGX0FMTE9DCTB4ODAwMDAwMDAKKy8qIE5hbmQgc2NhbiBoYXMgYWxsb2NhdGVkIGNvbnRyb2xsZXIgc3RydWN0ICovCisjZGVmaW5lIE5BTkRfQ09OVFJPTExFUl9BTExPQwkweDgwMDAwMDAwCiAKIAogLyoKQEAgLTI2NCw0NSArMjE1LDEwMiBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgbmFuZF9lY2NfY3RybCAtIENvbnRyb2wgc3RydWN0dXJlIGZvciBlY2MKKyAqIEBtb2RlOgllY2MgbW9kZQorICogQHN0ZXBzOgludW1iZXIgb2YgZWNjIHN0ZXBzIHBlciBwYWdlCisgKiBAc2l6ZToJZGF0YSBieXRlcyBwZXIgZWNjIHN0ZXAKKyAqIEBieXRlczoJZWNjIGJ5dGVzIHBlciBzdGVwCisgKiBAdG90YWw6CXRvdGFsIG51bWJlciBvZiBlY2MgYnl0ZXMgcGVyIHBhZ2UKKyAqIEBwcmVwYWQ6CXBhZGRpbmcgaW5mb3JtYXRpb24gZm9yIHN5bmRyb21lIGJhc2VkIGVjYyBnZW5lcmF0b3JzCisgKiBAcG9zdHBhZDoJcGFkZGluZyBpbmZvcm1hdGlvbiBmb3Igc3luZHJvbWUgYmFzZWQgZWNjIGdlbmVyYXRvcnMKKyAqIEBod2N0bDoJZnVuY3Rpb24gdG8gY29udHJvbCBoYXJkd2FyZSBlY2MgZ2VuZXJhdG9yLiBNdXN0IG9ubHkKKyAqCQliZSBwcm92aWRlZCBpZiBhbiBoYXJkd2FyZSBFQ0MgaXMgYXZhaWxhYmxlCisgKiBAY2FsY3VsYXRlOglmdW5jdGlvbiBmb3IgZWNjIGNhbGN1bGF0aW9uIG9yIHJlYWRiYWNrIGZyb20gZWNjIGhhcmR3YXJlCisgKiBAY29ycmVjdDoJZnVuY3Rpb24gZm9yIGVjYyBjb3JyZWN0aW9uLCBtYXRjaGluZyB0byBlY2MgZ2VuZXJhdG9yIChzdy9odykKKyAqIEByZWFkX3BhZ2U6CWZ1bmN0aW9uIHRvIHJlYWQgYSBwYWdlIGFjY29yZGluZyB0byB0aGUgZWNjIGdlbmVyYXRvciByZXF1aXJlbWVudHMKKyAqIEB3cml0ZV9wYWdlOglmdW5jdGlvbiB0byB3cml0ZSBhIHBhZ2UgYWNjb3JkaW5nIHRvIHRoZSBlY2MgZ2VuZXJhdG9yIHJlcXVpcmVtZW50cworICovCitzdHJ1Y3QgbmFuZF9lY2NfY3RybCB7CisJbmFuZF9lY2NfbW9kZXNfdAltb2RlOworCWludAkJCXN0ZXBzOworCWludAkJCXNpemU7CisJaW50CQkJYnl0ZXM7CisJaW50CQkJdG90YWw7CisJaW50CQkJcHJlcGFkOworCWludAkJCXBvc3RwYWQ7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0CSpsYXlvdXQ7CisJdm9pZAkJCSgqaHdjdGwpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSk7CisJaW50CQkJKCpjYWxjdWxhdGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorCQkJCQkgICAgIGNvbnN0IHVpbnQ4X3QgKmRhdCwKKwkJCQkJICAgICB1aW50OF90ICplY2NfY29kZSk7CisJaW50CQkJKCpjb3JyZWN0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdWludDhfdCAqZGF0LAorCQkJCQkgICB1aW50OF90ICpyZWFkX2VjYywKKwkJCQkJICAgdWludDhfdCAqY2FsY19lY2MpOworCWludAkJCSgqcmVhZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKwkJCQkJICAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkgICAgIHVpbnQ4X3QgKmJ1Zik7CisJdm9pZAkJCSgqd3JpdGVfcGFnZSkoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICAgIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisJCQkJCSAgICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Zik7CisJaW50CQkJKCpyZWFkX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorCQkJCQkgICAgaW50IHBhZ2UsCisJCQkJCSAgICBpbnQgc25kY21kKTsKKwlpbnQJCQkoKndyaXRlX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisJCQkJCSAgICAgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKwkJCQkJICAgICBpbnQgcGFnZSk7Cit9OworCisvKioKKyAqIHN0cnVjdCBuYW5kX2J1ZmZlcnMgLSBidWZmZXIgc3RydWN0dXJlIGZvciByZWFkL3dyaXRlCisgKiBAZWNjY2FsYzoJYnVmZmVyIGZvciBjYWxjdWxhdGVkIGVjYworICogQGVjY2NvZGU6CWJ1ZmZlciBmb3IgZWNjIHJlYWQgZnJvbSBmbGFzaAorICogQG9vYndidWY6CWJ1ZmZlciBmb3Igd3JpdGUgb29iIGRhdGEKKyAqIEBkYXRhYnVmOglidWZmZXIgZm9yIGRhdGEgLSBkeW5hbWljYWxseSBzaXplZAorICogQG9vYnJidWY6CWJ1ZmZlciB0byByZWFkIG9vYiBkYXRhCisgKgorICogRG8gbm90IGNoYW5nZSB0aGUgb3JkZXIgb2YgYnVmZmVycy4gZGF0YWJ1ZiBhbmQgb29icmJ1ZiBtdXN0IGJlIGluCisgKiBjb25zZWN1dGl2ZSBvcmRlci4KKyAqLworc3RydWN0IG5hbmRfYnVmZmVycyB7CisJdWludDhfdAllY2NjYWxjW05BTkRfTUFYX09PQlNJWkVdOworCXVpbnQ4X3QJZWNjY29kZVtOQU5EX01BWF9PT0JTSVpFXTsKKwl1aW50OF90CW9vYndidWZbTkFORF9NQVhfT09CU0laRV07CisJdWludDhfdCBkYXRhYnVmW05BTkRfTUFYX1BBR0VTSVpFXTsKKwl1aW50OF90CW9vYnJidWZbTkFORF9NQVhfT09CU0laRV07Cit9OworCisvKioKICAqIHN0cnVjdCBuYW5kX2NoaXAgLSBOQU5EIFByaXZhdGUgRmxhc2ggQ2hpcCBEYXRhCiAgKiBASU9fQUREUl9SOgkJW0JPQVJEU1BFQ0lGSUNdIGFkZHJlc3MgdG8gcmVhZCB0aGUgOCBJL08gbGluZXMgb2YgdGhlIGZsYXNoIGRldmljZQogICogQElPX0FERFJfVzoJCVtCT0FSRFNQRUNJRklDXSBhZGRyZXNzIHRvIHdyaXRlIHRoZSA4IEkvTyBsaW5lcyBvZiB0aGUgZmxhc2ggZGV2aWNlCiAgKiBAcmVhZF9ieXRlOgkJW1JFUExBQ0VBQkxFXSByZWFkIG9uZSBieXRlIGZyb20gdGhlIGNoaXAKLSAqIEB3cml0ZV9ieXRlOgkJW1JFUExBQ0VBQkxFXSB3cml0ZSBvbmUgYnl0ZSB0byB0aGUgY2hpcAogICogQHJlYWRfd29yZDoJCVtSRVBMQUNFQUJMRV0gcmVhZCBvbmUgd29yZCBmcm9tIHRoZSBjaGlwCi0gKiBAd3JpdGVfd29yZDoJCVtSRVBMQUNFQUJMRV0gd3JpdGUgb25lIHdvcmQgdG8gdGhlIGNoaXAKICAqIEB3cml0ZV9idWY6CQlbUkVQTEFDRUFCTEVdIHdyaXRlIGRhdGEgZnJvbSB0aGUgYnVmZmVyIHRvIHRoZSBjaGlwCiAgKiBAcmVhZF9idWY6CQlbUkVQTEFDRUFCTEVdIHJlYWQgZGF0YSBmcm9tIHRoZSBjaGlwIGludG8gdGhlIGJ1ZmZlcgogICogQHZlcmlmeV9idWY6CQlbUkVQTEFDRUFCTEVdIHZlcmlmeSBidWZmZXIgY29udGVudHMgYWdhaW5zdCB0aGUgY2hpcCBkYXRhCiAgKiBAc2VsZWN0X2NoaXA6CVtSRVBMQUNFQUJMRV0gc2VsZWN0IGNoaXAgbnIKICAqIEBibG9ja19iYWQ6CQlbUkVQTEFDRUFCTEVdIGNoZWNrLCBpZiB0aGUgYmxvY2sgaXMgYmFkCiAgKiBAYmxvY2tfbWFya2JhZDoJW1JFUExBQ0VBQkxFXSBtYXJrIHRoZSBibG9jayBiYWQKLSAqIEBod2NvbnRyb2w6CQlbQk9BUkRTUEVDSUZJQ10gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3IgYWNjZXNpbmcgY29udHJvbC1saW5lcworICogQGNtZF9jdHJsOgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVudGlvbiBmb3IgY29udHJvbGxpbmcKKyAqCQkJQUxFL0NMRS9uQ0UuIEFsc28gdXNlZCB0byB3cml0ZSBjb21tYW5kIGFuZCBhZGRyZXNzCiAgKiBAZGV2X3JlYWR5OgkJW0JPQVJEU1BFQ0lGSUNdIGhhcmR3YXJlc3BlY2lmaWMgZnVuY3Rpb24gZm9yIGFjY2VzaW5nIGRldmljZSByZWFkeS9idXN5IGxpbmUKICAqCQkJSWYgc2V0IHRvIE5VTEwgbm8gYWNjZXNzIHRvIHJlYWR5L2J1c3kgaXMgYXZhaWxhYmxlIGFuZCB0aGUgcmVhZHkvYnVzeSBpbmZvcm1hdGlvbgogICoJCQlpcyByZWFkIGZyb20gdGhlIGNoaXAgc3RhdHVzIHJlZ2lzdGVyCiAgKiBAY21kZnVuYzoJCVtSRVBMQUNFQUJMRV0gaGFyZHdhcmVzcGVjaWZpYyBmdW5jdGlvbiBmb3Igd3JpdGluZyBjb21tYW5kcyB0byB0aGUgY2hpcAogICogQHdhaXRmdW5jOgkJW1JFUExBQ0VBQkxFXSBoYXJkd2FyZXNwZWNpZmljIGZ1bmN0aW9uIGZvciB3YWl0IG9uIHJlYWR5Ci0gKiBAY2FsY3VsYXRlX2VjYzogCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gZm9yIGVjYyBjYWxjdWxhdGlvbiBvciByZWFkYmFjayBmcm9tIGVjYyBoYXJkd2FyZQotICogQGNvcnJlY3RfZGF0YToJW1JFUExBQ0VBQkxFXSBmdW5jdGlvbiBmb3IgZWNjIGNvcnJlY3Rpb24sIG1hdGNoaW5nIHRvIGVjYyBnZW5lcmF0b3IgKHN3L2h3KQotICogQGVuYWJsZV9od2VjYzoJW0JPQVJEU1BFQ0lGSUNdIGZ1bmN0aW9uIHRvIGVuYWJsZSAocmVzZXQpIGhhcmR3YXJlIGVjYyBnZW5lcmF0b3IuIE11c3Qgb25seQotICoJCQliZSBwcm92aWRlZCBpZiBhIGhhcmR3YXJlIEVDQyBpcyBhdmFpbGFibGUKKyAqIEBlY2M6CQlbQk9BUkRTUEVDSUZJQ10gZWNjIGNvbnRyb2wgY3RydWN0dXJlCiAgKiBAZXJhc2VfY21kOgkJW0lOVEVSTl0gZXJhc2UgY29tbWFuZCB3cml0ZSBmdW5jdGlvbiwgc2VsZWN0YWJsZSBkdWUgdG8gQU5EIHN1cHBvcnQKICAqIEBzY2FuX2JidDoJCVtSRVBMQUNFQUJMRV0gZnVuY3Rpb24gdG8gc2NhbiBiYWQgYmxvY2sgdGFibGUKLSAqIEBlY2Ntb2RlOgkJW0JPQVJEU1BFQ0lGSUNdIG1vZGUgb2YgZWNjLCBzZWUgZGVmaW5lcwotICogQGVjY3NpemU6IAkJW0lOVEVSTl0gZGF0YWJ5dGVzIHVzZWQgcGVyIGVjYy1jYWxjdWxhdGlvbgotICogQGVjY2J5dGVzOiAJCVtJTlRFUk5dIG51bWJlciBvZiBlY2MgYnl0ZXMgcGVyIGVjYy1jYWxjdWxhdGlvbiBzdGVwCi0gKiBAZWNjc3RlcHM6CQlbSU5URVJOXSBudW1iZXIgb2YgZWNjIGNhbGN1bGF0aW9uIHN0ZXBzIHBlciBwYWdlCiAgKiBAY2hpcF9kZWxheToJCVtCT0FSRFNQRUNJRklDXSBjaGlwIGRlcGVuZGVudCBkZWxheSBmb3IgdHJhbnNmZXJpbmcgZGF0YSBmcm9tIGFycmF5IHRvIHJlYWQgcmVncyAodFIpCi0gKiBAY2hpcF9sb2NrOgkJW0lOVEVSTl0gc3BpbmxvY2sgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGlzIHN0cnVjdHVyZSBhbmQgdGhlIGNoaXAKICAqIEB3cToJCQlbSU5URVJOXSB3YWl0IHF1ZXVlIHRvIHNsZWVwIG9uIGlmIGEgTkFORCBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MKLSAqIEBzdGF0ZTogCQlbSU5URVJOXSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgTkFORCBkZXZpY2UKKyAqIEBzdGF0ZToJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBOQU5EIGRldmljZQogICogQHBhZ2Vfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGFnZSAoY29sdW1uIGFkZHJlc3MgYml0cykKICAqIEBwaHlzX2VyYXNlX3NoaWZ0OglbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIGEgcGh5c2ljYWwgZXJhc2VibG9jawogICogQGJidF9lcmFzZV9zaGlmdDoJW0lOVEVSTl0gbnVtYmVyIG9mIGFkZHJlc3MgYml0cyBpbiBhIGJidCBlbnRyeQogICogQGNoaXBfc2hpZnQ6CQlbSU5URVJOXSBudW1iZXIgb2YgYWRkcmVzcyBiaXRzIGluIG9uZSBjaGlwCi0gKiBAZGF0YV9idWY6CQlbSU5URVJOXSBpbnRlcm5hbCBidWZmZXIgZm9yIG9uZSBwYWdlICsgb29iCi0gKiBAb29iX2J1ZjoJCVtJTlRFUk5dIG9vYiBidWZmZXIgZm9yIG9uZSBlcmFzZWJsb2NrCisgKiBAZGF0YnVmOgkJW0lOVEVSTl0gaW50ZXJuYWwgYnVmZmVyIGZvciBvbmUgcGFnZSArIG9vYgorICogQG9vYmJ1ZjoJCVtJTlRFUk5dIG9vYiBidWZmZXIgZm9yIG9uZSBlcmFzZWJsb2NrCiAgKiBAb29iZGlydHk6CQlbSU5URVJOXSBpbmRpY2F0ZXMgdGhhdCBvb2JfYnVmIG11c3QgYmUgcmVpbml0aWFsaXplZAogICogQGRhdGFfcG9pOgkJW0lOVEVSTl0gcG9pbnRlciB0byBhIGRhdGEgYnVmZmVyCiAgKiBAb3B0aW9uczoJCVtCT0FSRFNQRUNJRklDXSB2YXJpb3VzIGNoaXAgb3B0aW9ucy4gVGhleSBjYW4gcGFydGx5IGJlIHNldCB0byBpbmZvcm0gbmFuZF9zY2FuIGFib3V0CkBAIC0zMTIsMTIgKzMyMCwxMyBAQAogICogQGNoaXBzaXplOgkJW0lOVEVSTl0gdGhlIHNpemUgb2Ygb25lIGNoaXAgZm9yIG11bHRpY2hpcCBhcnJheXMKICAqIEBwYWdlbWFzazoJCVtJTlRFUk5dIHBhZ2UgbnVtYmVyIG1hc2sgPSBudW1iZXIgb2YgKHBhZ2VzIC8gY2hpcCkgLSAxCiAgKiBAcGFnZWJ1ZjoJCVtJTlRFUk5dIGhvbGRzIHRoZSBwYWdlbnVtYmVyIHdoaWNoIGlzIGN1cnJlbnRseSBpbiBkYXRhX2J1ZgotICogQGF1dG9vb2I6CQlbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IChhdXRvKXBsYWNlbWVudCBzY2hlbWUKKyAqIEBlY2NsYXlvdXQ6CQlbUkVQTEFDRUFCTEVdIHRoZSBkZWZhdWx0IGVjYyBwbGFjZW1lbnQgc2NoZW1lCiAgKiBAYmJ0OgkJW0lOVEVSTl0gYmFkIGJsb2NrIHRhYmxlIHBvaW50ZXIKICAqIEBiYnRfdGQ6CQlbUkVQTEFDRUFCTEVdIGJhZCBibG9jayB0YWJsZSBkZXNjcmlwdG9yIGZvciBmbGFzaCBsb29rdXAKICAqIEBiYnRfbWQ6CQlbUkVQTEFDRUFCTEVdIGJhZCBibG9jayB0YWJsZSBtaXJyb3IgZGVzY3JpcHRvcgogICogQGJhZGJsb2NrX3BhdHRlcm46CVtSRVBMQUNFQUJMRV0gYmFkIGJsb2NrIHNjYW4gcGF0dGVybiB1c2VkIGZvciBpbml0aWFsIGJhZCBibG9jayBzY2FuCi0gKiBAY29udHJvbGxlcjoJCVtPUFRJT05BTF0gYSBwb2ludGVyIHRvIGEgaGFyZHdhcmUgY29udHJvbGxlciBzdHJ1Y3R1cmUgd2hpY2ggaXMgc2hhcmVkIGFtb25nIG11bHRpcGxlIGluZGVwZW5kZW5kIGRldmljZXMKKyAqIEBjb250cm9sbGVyOgkJW1JFUExBQ0VBQkxFXSBhIHBvaW50ZXIgdG8gYSBoYXJkd2FyZSBjb250cm9sbGVyIHN0cnVjdHVyZQorICoJCQl3aGljaCBpcyBzaGFyZWQgYW1vbmcgbXVsdGlwbGUgaW5kZXBlbmRlbmQgZGV2aWNlcwogICogQHByaXY6CQlbT1BUSU9OQUxdIHBvaW50ZXIgdG8gcHJpdmF0ZSBjaGlwIGRhdGUKICAqIEBlcnJzdGF0OgkJW09QVElPTkFMXSBoYXJkd2FyZSBzcGVjaWZpYyBmdW5jdGlvbiB0byBwZXJmb3JtIGFkZGl0aW9uYWwgZXJyb3Igc3RhdHVzIGNoZWNrcwogICoJCQkoZGV0ZXJtaW5lIGlmIGVycm9ycyBhcmUgY29ycmVjdGFibGUpCkBAIC0zMjUsNTggKzMzNCw1NyBAQAogCiBzdHJ1Y3QgbmFuZF9jaGlwIHsKIAl2b2lkICBfX2lvbWVtCSpJT19BRERSX1I7Ci0Jdm9pZCAgX19pb21lbSAJKklPX0FERFJfVzsKKwl2b2lkICBfX2lvbWVtCSpJT19BRERSX1c7CiAKLQl1X2NoYXIJCSgqcmVhZF9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0Jdm9pZAkJKCp3cml0ZV9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyIGJ5dGUpOworCXVpbnQ4X3QJCSgqcmVhZF9ieXRlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CiAJdTE2CQkoKnJlYWRfd29yZCkoc3RydWN0IG10ZF9pbmZvICptdGQpOwotCXZvaWQJCSgqd3JpdGVfd29yZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHUxNiB3b3JkKTsKLQotCXZvaWQJCSgqd3JpdGVfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdV9jaGFyICpidWYsIGludCBsZW4pOwotCXZvaWQJCSgqcmVhZF9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7Ci0JaW50CQkoKnZlcmlmeV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGxlbik7CisJdm9pZAkJKCp3cml0ZV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pOworCXZvaWQJCSgqcmVhZF9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pOworCWludAkJKCp2ZXJpZnlfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKIAl2b2lkCQkoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNoaXApOwogCWludAkJKCpibG9ja19iYWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCk7CiAJaW50CQkoKmJsb2NrX21hcmtiYWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKTsKLQl2b2lkIAkJKCpod2NvbnRyb2wpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY21kKTsKLQlpbnQgIAkJKCpkZXZfcmVhZHkpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLQl2b2lkIAkJKCpjbWRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcik7Ci0JaW50IAkJKCp3YWl0ZnVuYykoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSk7Ci0JaW50CQkoKmNhbGN1bGF0ZV9lY2MpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1X2NoYXIgKmRhdCwgdV9jaGFyICplY2NfY29kZSk7Ci0JaW50IAkJKCpjb3JyZWN0X2RhdGEpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKmRhdCwgdV9jaGFyICpyZWFkX2VjYywgdV9jaGFyICpjYWxjX2VjYyk7Ci0Jdm9pZAkJKCplbmFibGVfaHdlY2MpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgbW9kZSk7CisJdm9pZAkJKCpjbWRfY3RybCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXQsCisJCQkJICAgIHVuc2lnbmVkIGludCBjdHJsKTsKKwlpbnQJCSgqZGV2X3JlYWR5KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisJdm9pZAkJKCpjbWRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcik7CisJaW50CQkoKndhaXRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IG5hbmRfY2hpcCAqdGhpcyk7CiAJdm9pZAkJKCplcmFzZV9jbWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgcGFnZSk7CiAJaW50CQkoKnNjYW5fYmJ0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Ci0JaW50CQllY2Ntb2RlOwotCWludAkJZWNjc2l6ZTsKLQlpbnQJCWVjY2J5dGVzOwotCWludAkJZWNjc3RlcHM7Ci0JaW50IAkJY2hpcF9kZWxheTsKLQlzcGlubG9ja190CWNoaXBfbG9jazsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKLQluYW5kX3N0YXRlX3QgCXN0YXRlOwotCWludCAJCXBhZ2Vfc2hpZnQ7CisJaW50CQkoKmVycnN0YXQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzLCBpbnQgc3RhdGUsIGludCBzdGF0dXMsIGludCBwYWdlKTsKKworCWludAkJY2hpcF9kZWxheTsKKwl1bnNpZ25lZCBpbnQJb3B0aW9uczsKKworCWludAkJcGFnZV9zaGlmdDsKIAlpbnQJCXBoeXNfZXJhc2Vfc2hpZnQ7CiAJaW50CQliYnRfZXJhc2Vfc2hpZnQ7CiAJaW50CQljaGlwX3NoaWZ0OwotCXVfY2hhciAJCSpkYXRhX2J1ZjsKLQl1X2NoYXIJCSpvb2JfYnVmOwotCWludAkJb29iZGlydHk7Ci0JdV9jaGFyCQkqZGF0YV9wb2k7Ci0JdW5zaWduZWQgaW50CW9wdGlvbnM7Ci0JaW50CQliYWRibG9ja3BvczsKIAlpbnQJCW51bWNoaXBzOwogCXVuc2lnbmVkIGxvbmcJY2hpcHNpemU7CiAJaW50CQlwYWdlbWFzazsKIAlpbnQJCXBhZ2VidWY7Ci0Jc3RydWN0IG5hbmRfb29iaW5mbwkqYXV0b29vYjsKKwlpbnQJCWJhZGJsb2NrcG9zOworCisJbmFuZF9zdGF0ZV90CXN0YXRlOworCisJdWludDhfdAkJKm9vYl9wb2k7CisJc3RydWN0IG5hbmRfaHdfY29udHJvbCAgKmNvbnRyb2xsZXI7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0CSplY2NsYXlvdXQ7CisKKwlzdHJ1Y3QgbmFuZF9lY2NfY3RybCBlY2M7CisJc3RydWN0IG5hbmRfYnVmZmVycyBidWZmZXJzOworCXN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgaHdjb250cm9sOworCisJc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKwogCXVpbnQ4X3QJCSpiYnQ7CiAJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYnRfdGQ7CiAJc3RydWN0IG5hbmRfYmJ0X2Rlc2NyCSpiYnRfbWQ7CisKIAlzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IJKmJhZGJsb2NrX3BhdHRlcm47Ci0Jc3RydWN0IG5hbmRfaHdfY29udHJvbCAgKmNvbnRyb2xsZXI7CisKIAl2b2lkCQkqcHJpdjsKLQlpbnQJCSgqZXJyc3RhdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSwgaW50IHN0YXR1cywgaW50IHBhZ2UpOwogfTsKIAogLyoKQEAgLTM4OCwxOSArMzk2LDE5IEBACiAjZGVmaW5lIE5BTkRfTUZSX05BVElPTkFMCTB4OGYKICNkZWZpbmUgTkFORF9NRlJfUkVORVNBUwkweDA3CiAjZGVmaW5lIE5BTkRfTUZSX1NUTUlDUk8JMHgyMAotI2RlZmluZSBOQU5EX01GUl9IWU5JWCAgICAgICAgICAweGFkCisjZGVmaW5lIE5BTkRfTUZSX0hZTklYCQkweGFkCiAKIC8qKgogICogc3RydWN0IG5hbmRfZmxhc2hfZGV2IC0gTkFORCBGbGFzaCBEZXZpY2UgSUQgU3RydWN0dXJlCiAgKgotICogQG5hbWU6ICAJSWRlbnRpZnkgdGhlIGRldmljZSB0eXBlCi0gKiBAaWQ6ICAgCWRldmljZSBJRCBjb2RlCi0gKiBAcGFnZXNpemU6ICAJUGFnZXNpemUgaW4gYnl0ZXMuIEVpdGhlciAyNTYgb3IgNTEyIG9yIDAKKyAqIEBuYW1lOglJZGVudGlmeSB0aGUgZGV2aWNlIHR5cGUKKyAqIEBpZDoJCWRldmljZSBJRCBjb2RlCisgKiBAcGFnZXNpemU6CVBhZ2VzaXplIGluIGJ5dGVzLiBFaXRoZXIgMjU2IG9yIDUxMiBvciAwCiAgKgkJSWYgdGhlIHBhZ2VzaXplIGlzIDAsIHRoZW4gdGhlIHJlYWwgcGFnZXNpemUKICAqCQlhbmQgdGhlIGVyYXNlaXplIGFyZSBkZXRlcm1pbmVkIGZyb20gdGhlCiAgKgkJZXh0ZW5kZWQgaWQgYnl0ZXMgaW4gdGhlIGNoaXAKLSAqIEBlcmFzZXNpemU6IAlTaXplIG9mIGFuIGVyYXNlIGJsb2NrIGluIHRoZSBmbGFzaCBkZXZpY2UuCi0gKiBAY2hpcHNpemU6ICAJVG90YWwgY2hpcHNpemUgaW4gTWVnYSBCeXRlcworICogQGVyYXNlc2l6ZToJU2l6ZSBvZiBhbiBlcmFzZSBibG9jayBpbiB0aGUgZmxhc2ggZGV2aWNlLgorICogQGNoaXBzaXplOglUb3RhbCBjaGlwc2l6ZSBpbiBNZWdhIEJ5dGVzCiAgKiBAb3B0aW9uczoJQml0ZmllbGQgdG8gc3RvcmUgY2hpcCByZWxldmFudCBvcHRpb25zCiAgKi8KIHN0cnVjdCBuYW5kX2ZsYXNoX2RldiB7CkBAIC00MTUsNyArNDIzLDcgQEAKIC8qKgogICogc3RydWN0IG5hbmRfbWFudWZhY3R1cmVycyAtIE5BTkQgRmxhc2ggTWFudWZhY3R1cmVyIElEIFN0cnVjdHVyZQogICogQG5hbWU6CU1hbnVmYWN0dXJlciBuYW1lCi0gKiBAaWQ6IAltYW51ZmFjdHVyZXIgSUQgY29kZSBvZiBkZXZpY2UuCisgKiBAaWQ6CQltYW51ZmFjdHVyZXIgSUQgY29kZSBvZiBkZXZpY2UuCiAqLwogc3RydWN0IG5hbmRfbWFudWZhY3R1cmVycyB7CiAJaW50IGlkOwpAQCAtNDU1LDcgKzQ2Myw3IEBACiAJaW50CXZlcm9mZnM7CiAJdWludDhfdAl2ZXJzaW9uW05BTkRfTUFYX0NISVBTXTsKIAlpbnQJbGVuOwotCWludCAJbWF4YmxvY2tzOworCWludAltYXhibG9ja3M7CiAJaW50CXJlc2VydmVkX2Jsb2NrX2NvZGU7CiAJdWludDhfdAkqcGF0dGVybjsKIH07CkBAIC00OTQsMTQgKzUwMiwxNCBAQAogLyogVGhlIG1heGltdW0gbnVtYmVyIG9mIGJsb2NrcyB0byBzY2FuIGZvciBhIGJidCAqLwogI2RlZmluZSBOQU5EX0JCVF9TQ0FOX01BWEJMT0NLUwk0CiAKLWV4dGVybiBpbnQgbmFuZF9zY2FuX2JidCAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOwotZXh0ZXJuIGludCBuYW5kX3VwZGF0ZV9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2Zmcyk7Ci1leHRlcm4gaW50IG5hbmRfZGVmYXVsdF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKLWV4dGVybiBpbnQgbmFuZF9pc2JhZF9iYnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KTsKLWV4dGVybiBpbnQgbmFuZF9lcmFzZV9uYW5kIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGVyYXNlX2luZm8gKmluc3RyLCBpbnQgYWxsb3diYnQpOwotZXh0ZXJuIGludCBuYW5kX2RvX3JlYWRfZWNjIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHJldGxlbiwgdV9jaGFyICogYnVmLCB1X2NoYXIgKiBvb2JfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWwsIGludCBmbGFncyk7CitleHRlcm4gaW50IG5hbmRfc2Nhbl9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmQpOworZXh0ZXJuIGludCBuYW5kX3VwZGF0ZV9iYnQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZmZzKTsKK2V4dGVybiBpbnQgbmFuZF9kZWZhdWx0X2JidChzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CitleHRlcm4gaW50IG5hbmRfaXNiYWRfYmJ0KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZmcywgaW50IGFsbG93YmJ0KTsKK2V4dGVybiBpbnQgbmFuZF9lcmFzZV9uYW5kKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIsCisJCQkgICBpbnQgYWxsb3diYnQpOworZXh0ZXJuIGludCBuYW5kX2RvX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkJc2l6ZV90ICogcmV0bGVuLCB1aW50OF90ICogYnVmKTsKIAogLyoKICogQ29uc3RhbnRzIGZvciBvb2IgY29uZmlndXJhdGlvbgpAQCAtNTA5LDQgKzUxNyw1MyBAQAogI2RlZmluZSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUwkJNQogI2RlZmluZSBOQU5EX0xBUkdFX0JBREJMT0NLX1BPUwkJMAogCisvKioKKyAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgLSBjaGlwIGxldmVsIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBAbnJfY2hpcHM6CQltYXguIG51bWJlciBvZiBjaGlwcyB0byBzY2FuIGZvcgorICogQGNoaXBfb2ZmczoJCWNoaXAgbnVtYmVyIG9mZnNldAorICogQG5yX3BhcnRpdGlvbnM6CW51bWJlciBvZiBwYXJ0aXRpb25zIHBvaW50ZWQgdG8gYnkgcGFydGl0aW9ucyAob3IgemVybykKKyAqIEBwYXJ0aXRpb25zOgkJbXRkIHBhcnRpdGlvbiBsaXN0CisgKiBAY2hpcF9kZWxheToJCVIvQiBkZWxheSB2YWx1ZSBpbiB1cworICogQG9wdGlvbnM6CQlPcHRpb24gZmxhZ3MsIGUuZy4gMTZiaXQgYnVzd2lkdGgKKyAqIEBlY2NsYXlvdXQ6CQllY2MgbGF5b3V0IGluZm8gc3RydWN0dXJlCisgKiBAcHJpdjoJCWhhcmR3YXJlIGNvbnRyb2xsZXIgc3BlY2lmaWMgc2V0dGluZ3MKKyAqLworc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCB7CisJaW50CQkJbnJfY2hpcHM7CisJaW50CQkJY2hpcF9vZmZzZXQ7CisJaW50CQkJbnJfcGFydGl0aW9uczsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydGl0aW9uczsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY2xheW91dDsKKwlpbnQJCQljaGlwX2RlbGF5OworCXVuc2lnbmVkIGludAkJb3B0aW9uczsKKwl2b2lkCQkJKnByaXY7Cit9OworCisvKioKKyAqIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgLSBjb250cm9sbGVyIGxldmVsIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBAaHdjb250cm9sOgkJcGxhdGZvcm0gc3BlY2lmaWMgaGFyZHdhcmUgY29udHJvbCBzdHJ1Y3R1cmUKKyAqIEBkZXZfcmVhZHk6CQlwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbiB0byByZWFkIHJlYWR5L2J1c3kgcGluCisgKiBAc2VsZWN0X2NoaXA6CXBsYXRmb3JtIHNwZWNpZmljIGNoaXAgc2VsZWN0IGZ1bmN0aW9uCisgKiBAcHJpdl9kYXRhOgkJcHJpdmF0ZSBkYXRhIHRvIHRyYW5zcG9ydCBkcml2ZXIgc3BlY2lmaWMgc2V0dGluZ3MKKyAqCisgKiBBbGwgZmllbGRzIGFyZSBvcHRpb25hbCBhbmQgZGVwZW5kIG9uIHRoZSBoYXJkd2FyZSBkcml2ZXIgcmVxdWlyZW1lbnRzCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2N0cmwgeworCXZvaWQJCSgqaHdjb250cm9sKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCk7CisJaW50CQkoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworCXZvaWQJCSgqc2VsZWN0X2NoaXApKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCk7CisJdm9pZAkJKnByaXY7Cit9OworCisvKiBTb21lIGhlbHBlcnMgdG8gYWNjZXNzIHRoZSBkYXRhIHN0cnVjdHVyZXMgKi8KK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBwbGF0Zm9ybV9uYW5kX2NoaXAgKmdldF9wbGF0Zm9ybV9uYW5kY2hpcChzdHJ1Y3QgbXRkX2luZm8gKm10ZCkKK3sKKwlzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwID0gbXRkLT5wcml2OworCisJcmV0dXJuIGNoaXAtPnByaXY7Cit9CisKICNlbmRpZiAvKiBfX0xJTlVYX01URF9OQU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL25kZmMuaCBiL2luY2x1ZGUvbGludXgvbXRkL25kZmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDU1OGE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiAgbGludXgvaW5jbHVkZS9saW51eC9tdGQvbmRmYy5oCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBJbmZvOgorICogICBDb250YWlucyBkZWZpbmVzLCBkYXRhc3RydWN0dXJlcyBmb3IgbmRmYyBuYW5kIGNvbnRyb2xsZXIKKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfTkRGQ19ICisjZGVmaW5lIF9fTElOVVhfTVREX05ERkNfSAorCisvKiBOREZDIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIE5ERkNfQ01ECQkweDAwCisjZGVmaW5lIE5ERkNfQUxFCQkweDA0CisjZGVmaW5lIE5ERkNfREFUQQkJMHgwOAorI2RlZmluZSBOREZDX0VDQwkJMHgxMAorI2RlZmluZSBOREZDX0JDRkcwCQkweDMwCisjZGVmaW5lIE5ERkNfQkNGRzEJCTB4MzQKKyNkZWZpbmUgTkRGQ19CQ0ZHMgkJMHgzOAorI2RlZmluZSBOREZDX0JDRkczCQkweDNjCisjZGVmaW5lIE5ERkNfQ0NSCQkweDQwCisjZGVmaW5lIE5ERkNfU1RBVAkJMHg0NAorI2RlZmluZSBOREZDX0hXQ1RMCQkweDQ4CisjZGVmaW5lIE5ERkNfUkVWSUQJCTB4NTAKKworI2RlZmluZSBOREZDX1NUQVRfSVNfUkVBRFkJMHgwMTAwMDAwMAorCisjZGVmaW5lIE5ERkNfQ0NSX1JFU0VUX0NFCTB4ODAwMDAwMDAgLyogQ0UgUmVzZXQgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUkVTRVRfRUNDCTB4NDAwMDAwMDAgLyogRUNDIFJlc2V0ICovCisjZGVmaW5lIE5ERkNfQ0NSX1JJRQkJMHgyMDAwMDAwMCAvKiBJbnRlcnJ1cHQgRW5hYmxlIG9uIERldmljZSBSZHkgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUkVOCQkweDEwMDAwMDAwIC8qIEVuYWJsZSB3YWl0IGZvciBSZHkgaW4gTGluZWFyUiAqLworI2RlZmluZSBOREZDX0NDUl9ST01FTgkJMHgwODAwMDAwMCAvKiBFbmFibGUgUk9NIEluIExpbmVhclIgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJFCQkweDA0MDAwMDAwIC8qIEF1dG8tUmVhZCBFbmFibGUgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQlMoeCkJCSgoKHgpICYgMHgzKSA8PCAyNCkgLyogU2VsZWN0IEJhbmsgb24gQ0VbeF0gKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQlNfTUFTSwkweDAzMDAwMDAwIC8qIFNlbGVjdCBCYW5rICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMwCQkweDAwMDAwMDAwIC8qIDMgQWRkciwgMSBDb2wgMiBSb3cgNTEyYiBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMxCQkweDAwMDAxMDAwIC8qIDQgQWRkciwgMSBDb2wgMyBSb3cgNTEyYiBwYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0FSQUMyCQkweDAwMDAyMDAwIC8qIDQgQWRkciwgMiBDb2wgMiBSb3cgMksgcGFnZSAqLworI2RlZmluZSBOREZDX0NDUl9BUkFDMwkJMHgwMDAwMzAwMCAvKiA1IEFkZHIsIDIgQ29sIDMgUm93IDJLIHBhZ2UgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfQVJBQ19NQVNLCTB4MDAwMDMwMDAgLyogQXV0by1SZWFkIG1vZGUgQWRkciBDeWNsZXMgKi8KKyNkZWZpbmUgTkRGQ19DQ1JfUlBHCQkweDAwMDBDMDAwIC8qIEF1dG8tUmVhZCBQYWdlICovCisjZGVmaW5lIE5ERkNfQ0NSX0VCQ0MJCTB4MDAwMDAwMDQgLyogRUJDIENvbmZpZ3VyYXRpb24gQ29tcGxldGVkICovCisjZGVmaW5lIE5ERkNfQ0NSX0RIQwkJMHgwMDAwMDAwMiAvKiBEaXJlY3QgSGFyZHdhcmUgQ29udHJvbCBFbmFibGUgKi8KKworI2RlZmluZSBOREZDX0J4Q0ZHX0VOCQkweDgwMDAwMDAwIC8qIEJhbmsgRW5hYmxlICovCisjZGVmaW5lIE5ERkNfQnhDRkdfQ0VECQkweDQwMDAwMDAwIC8qIG5DRSBTdHlsZSAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaX01BU0sJMHgwODAwMDAwMCAvKiBCYW5rIFNpemUgKi8KKyNkZWZpbmUgTkRGQ19CeENGR19TWl84QklUCTB4MDAwMDAwMDAgLyogOGJpdCAqLworI2RlZmluZSBOREZDX0J4Q0ZHX1NaXzE2QklUCTB4MDgwMDAwMDAgLyogMTZiaXQgKi8KKworI2RlZmluZSBOREZDX01BWF9CQU5LUwkJNAorCitzdHJ1Y3QgbmRmY19jb250cm9sbGVyX3NldHRpbmdzIHsKKwl1aW50MzJfdAljY3Jfc2V0dGluZ3M7CisJdWludDY0X3QJbmRmY19lcnBuOworfTsKKworc3RydWN0IG5kZmNfY2hpcF9zZXR0aW5ncyB7CisJdWludDMyX3QJYmFua19zZXR0aW5nczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oIGIvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCmluZGV4IGQzNWQyYzIuLmJjZjJmYjNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9uZnRsLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvbmZ0bC5oCkBAIC0zNyw3ICszNyw3IEBACiAgICAgICAgIHVuc2lnbmVkIGludCBuYl9ibG9ja3M7CQkvKiBudW1iZXIgb2YgcGh5c2ljYWwgYmxvY2tzICovCiAgICAgICAgIHVuc2lnbmVkIGludCBuYl9ib290X2Jsb2NrczsJLyogbnVtYmVyIG9mIGJsb2NrcyB1c2VkIGJ5IHRoZSBiaW9zICovCiAgICAgICAgIHN0cnVjdCBlcmFzZV9pbmZvIGluc3RyOwotCXN0cnVjdCBuYW5kX29vYmluZm8gb29iaW5mbzsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgb29iaW5mbzsKIH07CiAKIGludCBORlRMX21vdW50KHN0cnVjdCBORlRMcmVjb3JkICpzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmQuaAppbmRleCA3NDE5YjVmLi45Y2U5YTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvb25lbmFuZC5oCkBAIC0zNSw2ICszNSw4IEBACiAJRkxfU1lOQ0lORywKIAlGTF9VTkxPQ0tJTkcsCiAJRkxfTE9DS0lORywKKwlGTF9SRVNFVElORywKKwlGTF9PVFBJTkcsCiAJRkxfUE1fU1VTUEVOREVELAogfSBvbmVuYW5kX3N0YXRlX3Q7CiAKQEAgLTc1LDcgKzc3LDcgQEAKICAqIEBwYXJhbSBjaGlwX2xvY2sJW0lOVEVSTl0gc3BpbmxvY2sgdXNlZCB0byBwcm90ZWN0IGFjY2VzcyB0byB0aGlzIHN0cnVjdHVyZSBhbmQgdGhlIGNoaXAKICAqIEBwYXJhbSB3cQkJW0lOVEVSTl0gd2FpdCBxdWV1ZSB0byBzbGVlcCBvbiBpZiBhIE9uZU5BTkQgb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzCiAgKiBAcGFyYW0gc3RhdGUJCVtJTlRFUk5dIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBPbmVOQU5EIGRldmljZQotICogQHBhcmFtIGF1dG9vb2IJW1JFUExBQ0VBQkxFXSB0aGUgZGVmYXVsdCAoYXV0bylwbGFjZW1lbnQgc2NoZW1lCisgKiBAcGFyYW0gZWNjbGF5b3V0CVtSRVBMQUNFQUJMRV0gdGhlIGRlZmF1bHQgZWNjIHBsYWNlbWVudCBzY2hlbWUKICAqIEBwYXJhbSBiYm0JCVtSRVBMQUNFQUJMRV0gcG9pbnRlciB0byBCYWQgQmxvY2sgTWFuYWdlbWVudAogICogQHBhcmFtIHByaXYJCVtPUFRJT05BTF0gcG9pbnRlciB0byBwcml2YXRlIGNoaXAgZGF0ZQogICovCkBAIC0xMTEsOSArMTEzLDkgQEAKIAlvbmVuYW5kX3N0YXRlX3QJCXN0YXRlOwogCXVuc2lnbmVkIGNoYXIJCSpwYWdlX2J1ZjsKIAotCXN0cnVjdCBuYW5kX29vYmluZm8JKmF1dG9vb2I7CisJc3RydWN0IG5hbmRfZWNjbGF5b3V0CSplY2NsYXlvdXQ7CiAKLQl2b2lkIAkJCSpiYm07CisJdm9pZAkJCSpiYm07CiAKIAl2b2lkCQkJKnByaXY7CiB9OwpAQCAtMTMwLDYgKzEzMiw5IEBACiAjZGVmaW5lIE9ORU5BTkRfU0VUX1NZU19DRkcxKHYsIHRoaXMpCQkJCQlcCiAJKHRoaXMtPndyaXRlX3dvcmQodiwgdGhpcy0+YmFzZSArIE9ORU5BTkRfUkVHX1NZU19DRkcxKSkKIAorLyogQ2hlY2sgYnl0ZSBhY2Nlc3MgaW4gT25lTkFORCAqLworI2RlZmluZSBPTkVOQU5EX0NIRUNLX0JZVEVfQUNDRVNTKGFkZHIpCQkoYWRkciAmIDB4MSkKKwogLyoKICAqIE9wdGlvbnMgYml0cwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCmluZGV4IGQ3ODMyZWYuLjRhNzI4MTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXRkL29uZW5hbmRfcmVncy5oCkBAIC0xMTIsNiArMTEyLDcgQEAKICNkZWZpbmUgT05FTkFORF9DTURfTE9DS19USUdIVAkJKDB4MkMpCiAjZGVmaW5lIE9ORU5BTkRfQ01EX0VSQVNFCQkoMHg5NCkKICNkZWZpbmUgT05FTkFORF9DTURfUkVTRVQJCSgweEYwKQorI2RlZmluZSBPTkVOQU5EX0NNRF9PVFBfQUNDRVNTCQkoMHg2NSkKICNkZWZpbmUgT05FTkFORF9DTURfUkVBRElECQkoMHg5MCkKIAogLyogTk9URTogVGhvc2UgYXJlIG5vdCAqUkVBTCogY29tbWFuZHMgKi8KQEAgLTE1Miw2ICsxNTMsOCBAQAogI2RlZmluZSBPTkVOQU5EX0NUUkxfRVJBU0UJCSgxIDw8IDExKQogI2RlZmluZSBPTkVOQU5EX0NUUkxfRVJST1IJCSgxIDw8IDEwKQogI2RlZmluZSBPTkVOQU5EX0NUUkxfUlNUQgkJKDEgPDwgNykKKyNkZWZpbmUgT05FTkFORF9DVFJMX09UUF9MCQkoMSA8PCA2KQorI2RlZmluZSBPTkVOQU5EX0NUUkxfT1RQX0JMCQkoMSA8PCA1KQogCiAvKgogICogSW50ZXJydXB0IFN0YXR1cyBSZWdpc3RlciBGMjQxaCAoUikKQEAgLTE3Nyw0ICsxODAsOSBAQAogI2RlZmluZSBPTkVOQU5EX0VDQ18yQklUCQkoMSA8PCAxKQogI2RlZmluZSBPTkVOQU5EX0VDQ18yQklUX0FMTAkJKDB4QUFBQSkKIAorLyoKKyAqIE9uZS1UaW1lIFByb2dyYW1tYWJsZSAoT1RQKQorICovCisjZGVmaW5lIE9ORU5BTkRfT1RQX0xPQ0tfT0ZGU0VUCQkoMTQpCisKICNlbmRpZgkvKiBfX09ORU5BTkRfUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaCBiL2luY2x1ZGUvbGludXgvbXRkL3BhcnRpdGlvbnMuaAppbmRleCBiMDNmNTEyLi5kYTZiM2Q2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKKysrIGIvaW5jbHVkZS9saW51eC9tdGQvcGFydGl0aW9ucy5oCkBAIC00MSw3ICs0MSw3IEBACiAJdV9pbnQzMl90IHNpemU7CQkJLyogcGFydGl0aW9uIHNpemUgKi8KIAl1X2ludDMyX3Qgb2Zmc2V0OwkJLyogb2Zmc2V0IHdpdGhpbiB0aGUgbWFzdGVyIE1URCBzcGFjZSAqLwogCXVfaW50MzJfdCBtYXNrX2ZsYWdzOwkJLyogbWFzdGVyIE1URCBmbGFncyB0byBtYXNrIG91dCBmb3IgdGhpcyBwYXJ0aXRpb24gKi8KLQlzdHJ1Y3QgbmFuZF9vb2JpbmZvICpvb2JzZWw7CS8qIG91dCBvZiBiYW5kIGxheW91dCBmb3IgdGhpcyBwYXJ0aXRpb24gKE5BTkQgb25seSkqLworCXN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OwkvKiBvdXQgb2YgYmFuZCBsYXlvdXQgZm9yIHRoaXMgcGFydGl0aW9uIChOQU5EIG9ubHkpKi8KIAlzdHJ1Y3QgbXRkX2luZm8gKiptdGRwOwkJLyogcG9pbnRlciB0byBzdG9yZSB0aGUgTVREIG9iamVjdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oIGIvaW5jbHVkZS9saW51eC9tdGQvcGh5c21hcC5oCmluZGV4IGM3YjhiY2QuLjg2ODMxZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXRkL3BoeXNtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9waHlzbWFwLmgKQEAgLTE1LDMzICsxNSwyNiBAQAogICovCiAKICNpZm5kZWYgX19MSU5VWF9NVERfUEhZU01BUF9fCi0KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX01URF9QSFlTTUFQKQorI2RlZmluZSBfX0xJTlVYX01URF9QSFlTTUFQX18KIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KIAotLyoKLSAqIFRoZSBtYXBfaW5mbyBmb3IgcGh5c21hcC4gIEJvYXJkIGNhbiBvdmVycmlkZSBzaXplLCBidXN3aWR0aCwgcGh5cywKLSAqICgqc2V0X3ZwcCkoKSwgZXRjIGluIHRoZWlyIGluaXRpYWwgc2V0dXAgcm91dGluZS4KLSAqLwotZXh0ZXJuIHN0cnVjdCBtYXBfaW5mbyBwaHlzbWFwX21hcDsKK3N0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgeworCXVuc2lnbmVkIGludAkJd2lkdGg7CisJdm9pZAkJCSgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCk7CisJdW5zaWduZWQgaW50CQlucl9wYXJ0czsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydHM7Cit9OwogCiAvKgogICogQm9hcmQgbmVlZHMgdG8gc3BlY2lmeSB0aGUgZXhhY3QgbWFwcGluZyBkdXJpbmcgdGhlaXIgc2V0dXAgdGltZS4KICAqLwotc3RhdGljIGlubGluZSB2b2lkIHBoeXNtYXBfY29uZmlndXJlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBpbnQgYmFua3dpZHRoLCB2b2lkICgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCkgKQotewotCXBoeXNtYXBfbWFwLnBoeXMgPSBhZGRyOwotCXBoeXNtYXBfbWFwLnNpemUgPSBzaXplOwotCXBoeXNtYXBfbWFwLmJhbmt3aWR0aCA9IGJhbmt3aWR0aDsKLQlwaHlzbWFwX21hcC5zZXRfdnBwID0gc2V0X3ZwcDsKLX0KK3ZvaWQgcGh5c21hcF9jb25maWd1cmUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCWludCBiYW5rd2lkdGgsIHZvaWQgKCpzZXRfdnBwKShzdHJ1Y3QgbWFwX2luZm8gKiwgaW50KSApOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTVREX1BBUlRJVElPTlMpCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCiAKIC8qCiAgKiBNYWNoaW5lcyB0aGF0IHdpc2ggdG8gZG8gZmxhc2ggcGFydGl0aW9uIG1heSB3YW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpbgpAQCAtNTUsNyArNDgsNSBAQAogdm9pZCBwaHlzbWFwX3NldF9wYXJ0aXRpb25zKHN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0cywgaW50IG51bV9wYXJ0cyk7CiAKICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NVERfUEFSVElUSU9OUykgKi8KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19NVEQpICovCiAKICNlbmRpZiAvKiBfX0xJTlVYX01URF9QSFlTTUFQX18gKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQveGlwLmggYi9pbmNsdWRlL2xpbnV4L210ZC94aXAuaAppbmRleCAyMjBkNTBiLi5lOWQ0MGJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC94aXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC94aXAuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfX0xJTlVYX01URF9YSVBfSF9fCiAjZGVmaW5lIF9fTElOVVhfTVREX1hJUF9IX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX01URF9YSVAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uYmQuaCBiL2luY2x1ZGUvbGludXgvbmJkLmgKaW5kZXggYTZjZTQwOS4uMWQ3Y2RkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25iZC5oCkBAIC03NywxMSArNzcsMTEgQEAKICAqIHNlcnZlci4gQWxsIGRhdGEgYXJlIGluIG5ldHdvcmsgYnl0ZSBvcmRlci4KICAqLwogc3RydWN0IG5iZF9yZXF1ZXN0IHsKLQl1MzIgbWFnaWM7Ci0JdTMyIHR5cGU7CS8qID09IFJFQUQgfHwgPT0gV1JJVEUgCSovCisJX191MzIgbWFnaWM7CisJX191MzIgdHlwZTsJLyogPT0gUkVBRCB8fCA9PSBXUklURSAJKi8KIAljaGFyIGhhbmRsZVs4XTsKLQl1NjQgZnJvbTsKLQl1MzIgbGVuOworCV9fdTY0IGZyb207CisJX191MzIgbGVuOwogfQogI2lmZGVmIF9fR05VQ19fCiAJX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCkBAIC05Myw4ICs5Myw4IEBACiAgKiBpdCBoYXMgY29tcGxldGVkIGFuIEkvTyByZXF1ZXN0IChvciBhbiBlcnJvciBvY2N1cnMpLgogICovCiBzdHJ1Y3QgbmJkX3JlcGx5IHsKLQl1MzIgbWFnaWM7Ci0JdTMyIGVycm9yOwkJLyogMCA9IG9rLCBlbHNlIGVycm9yCSovCisJX191MzIgbWFnaWM7CisJX191MzIgZXJyb3I7CQkvKiAwID0gb2ssIGVsc2UgZXJyb3IJKi8KIAljaGFyIGhhbmRsZVs4XTsJCS8qIGhhbmRsZSB5b3UgZ290IGZyb20gcmVxdWVzdAkqLwogfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uY3BfZnMuaCBiL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKaW5kZXggOTZkYzIzNy4uYjIwOGYwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uY3BfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jaW5jbHVkZSA8bGludXgvbmNwX2ZzX2kuaD4KLSNpbmNsdWRlIDxsaW51eC9uY3BfZnNfc2IuaD4KICNpbmNsdWRlIDxsaW51eC9pcHguaD4KICNpbmNsdWRlIDxsaW51eC9uY3Bfbm8uaD4KIApAQCAtMTQ2LDcgKzE0NCw4IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9uY3BfZnNfaS5oPgorI2luY2x1ZGUgPGxpbnV4L25jcF9mc19zYi5oPgogCiAvKiB1bmRlZiBiZWNhdXNlIHB1YmxpYyBkZWZpbmUgaW4gdW1zZG9zX2ZzLmggKG5jcF9mcy5oIGlzbid0IHB1YmxpYykgKi8KICN1bmRlZiBQUklOVEsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDg0YTQ5MGUuLjM4NWU2OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTgsOSArMTgsNyBAQAogI2lmbmRlZiBfTElOVVhfTkVUX0gKICNkZWZpbmUgX0xJTlVYX05FVF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgogCiBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7CkBAIC01Nyw2ICs1NSw3IEBACiAjZGVmaW5lIF9fU09fQUNDRVBUQ09OCSgxIDw8IDE2KQkvKiBwZXJmb3JtZWQgYSBsaXN0ZW4JCSovCiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKICNkZWZpbmUgU09DS19BU1lOQ19OT1NQQUNFCTAKICNkZWZpbmUgU09DS19BU1lOQ19XQUlUREFUQQkxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBlNDMyYjc0Li41ZThlMmQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCmluZGV4IGIzMWE5YmMuLjEwMTY4ZTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtNDAsNyArNDAsNiBAQAogI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCiBleHRlcm4gdm9pZCBuZXRmaWx0ZXJfaW5pdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKaW5kZXggMzRmNjNjZi4uNGMyZDk5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmgKQEAgLTQyLDcgKzQyLDcgQEAKIAkJfSB1OwogCiAJCS8qIFRoZSBwcm90b2NvbC4gKi8KLQkJdTE2IHByb3RvbnVtOworCQlfX3UxNiBwcm90b251bTsKIAl9IGRzdDsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwLmgKaW5kZXggYTNmODk3Ny4uOTJiYzZkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwLmgKQEAgLTUsNyArNSw2IEBACiAgKiAoQykyMDAyIFJ1c3R5IFJ1c3NlbGwgSUJNIC0tIFRoaXMgY29kZSBpcyBHUEwuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogCiAvKiBUaGVyZSBpcyBubyBQRl9BUlAuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IGE3NWI4NGIuLjg3NzY0MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCkBAIC00LDcgKzQsNiBAQAogLyogYnJpZGdlLXNwZWNpZmljIGRlZmluZXMgZm9yIG5ldGZpbHRlci4gCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2lmIGRlZmluZWQoX19LRVJORUxfXykgJiYgZGVmaW5lZChDT05GSUdfQlJJREdFX05FVEZJTFRFUikKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKaW5kZXggODUzMDFjNS4uY2UwMmM5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQuaApAQCAtNSw3ICs1LDYgQEAKICAqIChDKTE5OTggUnVzdHkgUnVzc2VsbCAtLSBUaGlzIGNvZGUgaXMgR1BMLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KIAogLyogb25seSBmb3IgdXNlcnNwYWNlIGNvbXBhdGliaWxpdHkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCmluZGV4IGUwZTk5NTEuLjUxZGJlYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oPgogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2xpc3RoZWxwLmgKaW5kZXggMzYwNDI5Zi4uNWQ5MmNmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9saXN0aGVscC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvbGlzdGhlbHAuaApAQCAtMSw2ICsxLDUgQEAKICNpZm5kZWYgX0xJU1RIRUxQX0gKICNkZWZpbmUgX0xJU1RIRUxQX0gKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKIC8qIEhlYWRlciB0byBkbyBtb3JlIGNvbXByZWhlbnNpdmUgam9iIHRoYW4gbGludXgvbGlzdC5oOyBhc3N1bWUgbGlzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzLmgKaW5kZXggY2EyZmZhNi4uNTRhZjkyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mcy5oCkBAIC03LDkgKzcsNiBAQAogI2lmbmRlZiBfTElOVVhfTkZTX0gKICNkZWZpbmUgX0xJTlVYX05GU19ICiAKLSNpbmNsdWRlIDxsaW51eC9zdW5ycGMvbXNnX3Byb3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLQogI2RlZmluZSBORlNfUFJPR1JBTQkxMDAwMDMKICNkZWZpbmUgTkZTX1BPUlQJMjA0OQogI2RlZmluZSBORlNfTUFYREFUQQk4MTkyCkBAIC0xMjksNyArMTI2LDEwIEBACiAJTkZGSUZPID0gOAogfTsKIAotI2lmIGRlZmluZWQoX19LRVJORUxfXykKKyNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKIC8qCiAgKiBUaGlzIGlzIHRoZSBrZXJuZWwgTkZTIGNsaWVudCBmaWxlIGhhbmRsZSByZXByZXNlbnRhdGlvbgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mczQuaCBiL2luY2x1ZGUvbGludXgvbmZzNC5oCmluZGV4IDE0NzdmYzguLjVmNjgxZDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzNC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzNC5oCkBAIC0xNCw3ICsxNCw2IEBACiAjZGVmaW5lIF9MSU5VWF9ORlM0X0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAjZGVmaW5lIE5GUzRfVkVSSUZJRVJfU0laRQk4CiAjZGVmaW5lIE5GUzRfRkhTSVpFCQkxMjgKQEAgLTk3LDYgKzk2LDkgQEAKIAlORlM0X0FDTF9XSE9fRVZFUllPTkUsCiB9OwogCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKwogc3RydWN0IG5mczRfYWNlIHsKIAl1aW50MzJfdAl0eXBlOwogCXVpbnQzMl90CWZsYWc7CkBAIC0zNDUsOCArMzQ3LDYgQEAKICNkZWZpbmUgTkZTNF9NSU5PUl9WRVJTSU9OIDAKICNkZWZpbmUgTkZTNF9ERUJVRyAxCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KIC8qIEluZGV4IG9mIHByZWRlZmluZWQgTGludXggY2xpZW50IG9wZXJhdGlvbnMgKi8KIAogZW51bSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2QuaAppbmRleCBlYzdjMmU4Li4yZGNhZDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNkLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgTElOVVhfTkZTRF9ORlNEX0gKICNkZWZpbmUgTElOVVhfTkZTRF9ORlNEX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CiAjaW5jbHVkZSA8bGludXgvZGlyZW50Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc2QvbmZzZmguaCBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCmluZGV4IDA3OThiNzcuLmY5ZWRjZDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oCkBAIC0xNiw3ICsxNiw2IEBACiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpZmRlZiBfX0tFUk5FTF9fCi0jIGluY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogIyBpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogIyBpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICMgaW5jbHVkZSA8bGludXgvZnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmggYi9pbmNsdWRlL2xpbnV4L25mc2Qvc3lzY2FsbC5oCmluZGV4IDc4MWVmYmYuLmRhZTBmYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzZC9zeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL3N5c2NhbGwuaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaWZkZWYgX19LRVJORUxfXwotIyBpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICMgaW5jbHVkZSA8bGludXgvaW4uaD4KICNlbmRpZiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbnVtYS5oIGIvaW5jbHVkZS9saW51eC9udW1hLmgKaW5kZXggZTQ4MWZlYi4uYTMxYTczMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9udW1hLmgKKysrIGIvaW5jbHVkZS9saW51eC9udW1hLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9OVU1BX0gKICNkZWZpbmUgX0xJTlVYX05VTUFfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfTk9ERVNfU0hJRlQKICNkZWZpbmUgTk9ERVNfU0hJRlQgICAgIENPTkZJR19OT0RFU19TSElGVApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAppbmRleCAwMDhkNzM2Li5kNDI3MzdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaApAQCAtOTYsNyArOTYsNiBAQAogLyogVGhlIHJlc3QgaXMgZm9yIHRoZSBrZXJuZWwgb25seSAqLwogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDZmZDM2Y2IuLjZjNGJjNzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaApAQCAtMTcsOCArMTcsNiBAQAogI2lmbmRlZiBMSU5VWF9QQ0lfSAogI2RlZmluZSBMSU5VWF9QQ0lfSAogCi0jaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+Ci0KIC8qIEluY2x1ZGUgdGhlIHBjaSByZWdpc3RlciBkZWZpbmVzICovCiAjaW5jbHVkZSA8bGludXgvcGNpX3JlZ3MuaD4KIApAQCAtNDYsOCArNDQsOSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCmluZGV4IDY4MjUyNTUuLjY2YjVkZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKQEAgLTYsNyArNiw2IEBACiAgKiBXQVJOSU5HOiB0aGVzZSB0aGluZ3MgYXJlIEhVR0UuICA0IGtieXRlcyBwZXIgY291bnRlciBvbiAzMi13YXkgUDQuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDY2YmU1ODkuLjY1OGMxYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTIzLDcgKzIzLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmggYi9pbmNsdWRlL2xpbnV4L3BtX2xlZ2FjeS5oCmluZGV4IDAwODkzMmQuLjc4MDI3YzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG1fbGVnYWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9sZWdhY3kuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19MSU5VWF9QTV9MRUdBQ1lfSF9fCiAjZGVmaW5lIF9fTElOVVhfUE1fTEVHQUNZX0hfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZmRlZiBDT05GSUdfUE1fTEVHQUNZCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG11LmggYi9pbmNsdWRlL2xpbnV4L3BtdS5oCmluZGV4IDIxN2QzZGEuLmVjY2U1OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG11LmgKKysrIGIvaW5jbHVkZS9saW51eC9wbXUuaApAQCAtNiw3ICs2LDYgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OCBQYXVsIE1hY2tlcnJhcy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNkZWZpbmUgUE1VX0RSSVZFUl9WRVJTSU9OCTIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oIGIvaW5jbHVkZS9saW51eC9wcHBfZGVmcy5oCmluZGV4IDQwMjA1NmMuLmM2YjEzZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHBwX2RlZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BwcF9kZWZzLmgKQEAgLTQyLDggKzQyLDYgQEAKICNpZm5kZWYgX1BQUF9ERUZTX0hfCiAjZGVmaW5lIF9QUFBfREVGU19IXwogCi0jaW5jbHVkZSA8bGludXgvY3JjLWNjaXR0Lmg+Ci0KIC8qCiAgKiBUaGUgYmFzaWMgUFBQIGZyYW1lLgogICovCkBAIC05Nyw3ICs5NSwxMSBAQAogCiAjZGVmaW5lIFBQUF9JTklURkNTCTB4ZmZmZgkvKiBJbml0aWFsIEZDUyB2YWx1ZSAqLwogI2RlZmluZSBQUFBfR09PREZDUwkweGYwYjgJLyogR29vZCBmaW5hbCBGQ1MgdmFsdWUgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KICNkZWZpbmUgUFBQX0ZDUyhmY3MsIGMpIGNyY19jY2l0dF9ieXRlKGZjcywgYykKKyNlbmRpZgogCiAvKgogICogRXh0ZW5kZWQgYXN5bmNtYXAgLSBhbGxvd3MgYW55IGNoYXJhY3RlciB0byBiZSBlc2NhcGVkLgpAQCAtMTc5LDEyICsxODEsNCBAQAogICAgIHRpbWVfdCByZWN2X2lkbGU7CQkvKiB0aW1lIHNpbmNlIGxhc3QgTlAgcGFja2V0IHJlY2VpdmVkICovCiB9OwogCi0jaWZuZGVmIF9fUAotI2lmZGVmIF9fU1REQ19fCi0jZGVmaW5lIF9fUCh4KQl4Ci0jZWxzZQotI2RlZmluZSBfX1AoeCkJKCkKLSNlbmRpZgotI2VuZGlmCi0KICNlbmRpZiAvKiBfUFBQX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJlZW1wdC5oIGIvaW5jbHVkZS9saW51eC9wcmVlbXB0LmgKaW5kZXggNTc2OWQxNC4uZDA5MjZkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wcmVlbXB0LmgKKysrIGIvaW5jbHVkZS9saW51eC9wcmVlbXB0LmgKQEAgLTYsNyArNiw2IEBACiAgKiBwcmVlbXB0X2NvdW50ICh1c2VkIGZvciBrZXJuZWwgcHJlZW1wdGlvbiwgaW50ZXJydXB0IGNvdW50LCBldGMuKQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCA0YjQ3YTAyLi41ODEwZDI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX1BST0NfRlNfSAogI2RlZmluZSBfTElOVVhfUFJPQ19GU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAppbmRleCAxZjJmZWE2Li5lNjMzMDA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2ZpbGUuaApAQCAtNCw3ICs0LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGFzbS9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9xdW90YS5oIGIvaW5jbHVkZS9saW51eC9xdW90YS5oCmluZGV4IDJkYWI3MWUuLmI4ZmJmMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcXVvdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKQEAgLTM3LDggKzM3LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUgX19EUVVPVF9WRVJTSU9OX18JImRxdW90XzYuNS4xIgogI2RlZmluZSBfX0RRVU9UX05VTV9WRVJTSU9OX18JNioxMDAwMCs1KjEwMCsxCkBAIC0xMzMsNiArMTMxLDggQEAKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8bGludXgvZHFibGtfeGZzLmg+CiAjaW5jbHVkZSA8bGludXgvZHFibGtfdjEuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaCBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaAppbmRleCAyMWU1YTkxLi41MTEwMjAxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZuZGVmIF9MSU5VWF9RVU9UQU9QU18KICNkZWZpbmUgX0xJTlVYX1FVT1RBT1BTXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JidHJlZS5oIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaAppbmRleCA0YjdjYzRmLi5mMzcwMDZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKQEAgLTk5LDE5ICs5OSwzNiBAQAogCiBzdHJ1Y3QgcmJfbm9kZQogewotCXN0cnVjdCByYl9ub2RlICpyYl9wYXJlbnQ7Ci0JaW50IHJiX2NvbG9yOworCXVuc2lnbmVkIGxvbmcgIHJiX3BhcmVudF9jb2xvcjsKICNkZWZpbmUJUkJfUkVECQkwCiAjZGVmaW5lCVJCX0JMQUNLCTEKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJfcmlnaHQ7CiAJc3RydWN0IHJiX25vZGUgKnJiX2xlZnQ7Ci19OworfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsKKyAgICAvKiBUaGUgYWxpZ25tZW50IG1pZ2h0IHNlZW0gcG9pbnRsZXNzLCBidXQgYWxsZWdlZGx5IENSSVMgbmVlZHMgaXQgKi8KIAogc3RydWN0IHJiX3Jvb3QKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJfbm9kZTsKIH07CiAKKworI2RlZmluZSByYl9wYXJlbnQocikgICAoKHN0cnVjdCByYl9ub2RlICopKChyKS0+cmJfcGFyZW50X2NvbG9yICYgfjMpKQorI2RlZmluZSByYl9jb2xvcihyKSAgICgociktPnJiX3BhcmVudF9jb2xvciAmIDEpCisjZGVmaW5lIHJiX2lzX3JlZChyKSAgICghcmJfY29sb3IocikpCisjZGVmaW5lIHJiX2lzX2JsYWNrKHIpIHJiX2NvbG9yKHIpCisjZGVmaW5lIHJiX3NldF9yZWQocikgIGRvIHsgKHIpLT5yYl9wYXJlbnRfY29sb3IgJj0gfjE7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJiX3NldF9ibGFjayhyKSAgZG8geyAociktPnJiX3BhcmVudF9jb2xvciB8PSAxOyB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmJfc2V0X3BhcmVudChzdHJ1Y3QgcmJfbm9kZSAqcmIsIHN0cnVjdCByYl9ub2RlICpwKQoreworCXJiLT5yYl9wYXJlbnRfY29sb3IgPSAocmItPnJiX3BhcmVudF9jb2xvciAmIDMpIHwgKHVuc2lnbmVkIGxvbmcpcDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCByYl9zZXRfY29sb3Ioc3RydWN0IHJiX25vZGUgKnJiLCBpbnQgY29sb3IpCit7CisJcmItPnJiX3BhcmVudF9jb2xvciA9IChyYi0+cmJfcGFyZW50X2NvbG9yICYgfjEpIHwgY29sb3I7Cit9CisKICNkZWZpbmUgUkJfUk9PVAkoc3RydWN0IHJiX3Jvb3QpIHsgTlVMTCwgfQogI2RlZmluZQlyYl9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKQogCkBAIC0xMzEsOCArMTQ4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCByYl9saW5rX25vZGUoc3RydWN0IHJiX25vZGUgKiBub2RlLCBzdHJ1Y3QgcmJfbm9kZSAqIHBhcmVudCwKIAkJCQlzdHJ1Y3QgcmJfbm9kZSAqKiByYl9saW5rKQogewotCW5vZGUtPnJiX3BhcmVudCA9IHBhcmVudDsKLQlub2RlLT5yYl9jb2xvciA9IFJCX1JFRDsKKwlub2RlLT5yYl9wYXJlbnRfY29sb3IgPSAodW5zaWduZWQgbG9uZyApcGFyZW50OwogCW5vZGUtPnJiX2xlZnQgPSBub2RlLT5yYl9yaWdodCA9IE5VTEw7CiAKIAkqcmJfbGluayA9IG5vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKaW5kZXggNTM1M2FmYi4uNWU5NjEwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaApAQCAtMiw4ICsyLDYgQEAKICAgRmlsZTogbGludXgvcmVpc2VyZnNfeGF0dHIuaAogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogCiAvKiBNYWdpYyB2YWx1ZSBpbiBoZWFkZXIgKi8KQEAgLTE1LDYgKzEzLDcgQEAKIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciB7CiAJY2hhciAqcHJlZml4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWxheS5oIGIvaW5jbHVkZS9saW51eC9yZWxheS5oCmluZGV4IDRiY2MxNTMuLjI0YWNjYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVsYXkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlbGF5LmgKQEAgLTEwLDcgKzEwLDYgQEAKICNpZm5kZWYgX0xJTlVYX1JFTEFZX0gKICNkZWZpbmUgX0xJTlVYX1JFTEFZX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Jpby5oIGIvaW5jbHVkZS9saW51eC9yaW8uaAppbmRleCBjN2U5MDdmLi5kOTM4NTcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvcmlvLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yaW9fZHJ2LmggYi9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaAppbmRleCBmNTQ3NzJkLi43YWRiMmExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpb19kcnYuaApAQCAtMTYsNyArMTYsNiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JtYXAuaCBiL2luY2x1ZGUvbGludXgvcm1hcC5oCmluZGV4IGQ2YjliY2QuLjJkNGM4MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oCisrKyBiL2luY2x1ZGUvbGludXgvcm1hcC5oCkBAIC00LDcgKzQsNiBAQAogICogRGVjbGFyYXRpb25zIGZvciBSZXZlcnNlIE1hcHBpbmcgZnVuY3Rpb25zIGluIG1tL3JtYXAuYwogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaAppbmRleCBkZjBjZGQ0Li5mYWNkOWVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKQEAgLTkwOSw3ICs5MDksNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogZXh0ZXJuIHNpemVfdCBydGF0dHJfc3RybGNweShjaGFyICpkZXN0LCBjb25zdCBzdHJ1Y3QgcnRhdHRyICpydGEsIHNpemVfdCBzaXplKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcndzZW0uaCBiL2luY2x1ZGUvbGludXgvcndzZW0uaAppbmRleCBiZmI5ODg4Li5mOTlmZTkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J3c2VtLmgKKysrIGIvaW5jbHVkZS9saW51eC9yd3NlbS5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NjLmggYi9pbmNsdWRlL2xpbnV4L3NjYy5oCmluZGV4IDg4NWE0YTAuLjM0OTViZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NjLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2MuaApAQCAtMyw3ICszLDYgQEAKICNpZm5kZWYJX1NDQ19ICiAjZGVmaW5lCV9TQ0NfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qIHNlbGVjdGlvbiBvZiBoYXJkd2FyZSB0eXBlcyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKaW5kZXggMjliN2Q0Zi4uMjY3ZjE1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQuaApAQCAtMSw5ICsxLDQ2IEBACiAjaWZuZGVmIF9MSU5VWF9TQ0hFRF9ICiAjZGVmaW5lIF9MSU5VWF9TQ0hFRF9ICiAKKyNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4JLyogRm9yIEFUX1ZFQ1RPUl9TSVpFICovCisKKy8qCisgKiBjbG9uaW5nIGZsYWdzOgorICovCisjZGVmaW5lIENTSUdOQUwJCTB4MDAwMDAwZmYJLyogc2lnbmFsIG1hc2sgdG8gYmUgc2VudCBhdCBleGl0ICovCisjZGVmaW5lIENMT05FX1ZNCTB4MDAwMDAxMDAJLyogc2V0IGlmIFZNIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyAqLworI2RlZmluZSBDTE9ORV9GUwkweDAwMDAwMjAwCS8qIHNldCBpZiBmcyBpbmZvIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyAqLworI2RlZmluZSBDTE9ORV9GSUxFUwkweDAwMDAwNDAwCS8qIHNldCBpZiBvcGVuIGZpbGVzIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcyAqLworI2RlZmluZSBDTE9ORV9TSUdIQU5ECTB4MDAwMDA4MDAJLyogc2V0IGlmIHNpZ25hbCBoYW5kbGVycyBhbmQgYmxvY2tlZCBzaWduYWxzIHNoYXJlZCAqLworI2RlZmluZSBDTE9ORV9QVFJBQ0UJMHgwMDAwMjAwMAkvKiBzZXQgaWYgd2Ugd2FudCB0byBsZXQgdHJhY2luZyBjb250aW51ZSBvbiB0aGUgY2hpbGQgdG9vICovCisjZGVmaW5lIENMT05FX1ZGT1JLCTB4MDAwMDQwMDAJLyogc2V0IGlmIHRoZSBwYXJlbnQgd2FudHMgdGhlIGNoaWxkIHRvIHdha2UgaXQgdXAgb24gbW1fcmVsZWFzZSAqLworI2RlZmluZSBDTE9ORV9QQVJFTlQJMHgwMDAwODAwMAkvKiBzZXQgaWYgd2Ugd2FudCB0byBoYXZlIHRoZSBzYW1lIHBhcmVudCBhcyB0aGUgY2xvbmVyICovCisjZGVmaW5lIENMT05FX1RIUkVBRAkweDAwMDEwMDAwCS8qIFNhbWUgdGhyZWFkIGdyb3VwPyAqLworI2RlZmluZSBDTE9ORV9ORVdOUwkweDAwMDIwMDAwCS8qIE5ldyBuYW1lc3BhY2UgZ3JvdXA/ICovCisjZGVmaW5lIENMT05FX1NZU1ZTRU0JMHgwMDA0MDAwMAkvKiBzaGFyZSBzeXN0ZW0gViBTRU1fVU5ETyBzZW1hbnRpY3MgKi8KKyNkZWZpbmUgQ0xPTkVfU0VUVExTCTB4MDAwODAwMDAJLyogY3JlYXRlIGEgbmV3IFRMUyBmb3IgdGhlIGNoaWxkICovCisjZGVmaW5lIENMT05FX1BBUkVOVF9TRVRUSUQJMHgwMDEwMDAwMAkvKiBzZXQgdGhlIFRJRCBpbiB0aGUgcGFyZW50ICovCisjZGVmaW5lIENMT05FX0NISUxEX0NMRUFSVElECTB4MDAyMDAwMDAJLyogY2xlYXIgdGhlIFRJRCBpbiB0aGUgY2hpbGQgKi8KKyNkZWZpbmUgQ0xPTkVfREVUQUNIRUQJCTB4MDA0MDAwMDAJLyogVW51c2VkLCBpZ25vcmVkICovCisjZGVmaW5lIENMT05FX1VOVFJBQ0VECQkweDAwODAwMDAwCS8qIHNldCBpZiB0aGUgdHJhY2luZyBwcm9jZXNzIGNhbid0IGZvcmNlIENMT05FX1BUUkFDRSBvbiB0aGlzIGNsb25lICovCisjZGVmaW5lIENMT05FX0NISUxEX1NFVFRJRAkweDAxMDAwMDAwCS8qIHNldCB0aGUgVElEIGluIHRoZSBjaGlsZCAqLworI2RlZmluZSBDTE9ORV9TVE9QUEVECQkweDAyMDAwMDAwCS8qIFN0YXJ0IGluIHN0b3BwZWQgc3RhdGUgKi8KKworLyoKKyAqIFNjaGVkdWxpbmcgcG9saWNpZXMKKyAqLworI2RlZmluZSBTQ0hFRF9OT1JNQUwJCTAKKyNkZWZpbmUgU0NIRURfRklGTwkJMQorI2RlZmluZSBTQ0hFRF9SUgkJMgorI2RlZmluZSBTQ0hFRF9CQVRDSAkJMworCisjaWZkZWYgX19LRVJORUxfXworCitzdHJ1Y3Qgc2NoZWRfcGFyYW0geworCWludCBzY2hlZF9wcmlvcml0eTsKK307CisKICNpbmNsdWRlIDxhc20vcGFyYW0uaD4JLyogZm9yIEhaICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMzcsMzMgKzc0LDE3IEBACiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgogCi0jaW5jbHVkZSA8bGludXgvYXV4dmVjLmg+CS8qIEZvciBBVF9WRUNUT1JfU0laRSAqLworI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAKIHN0cnVjdCBleGVjX2RvbWFpbjsKIAogLyoKLSAqIGNsb25pbmcgZmxhZ3M6Ci0gKi8KLSNkZWZpbmUgQ1NJR05BTAkJMHgwMDAwMDBmZgkvKiBzaWduYWwgbWFzayB0byBiZSBzZW50IGF0IGV4aXQgKi8KLSNkZWZpbmUgQ0xPTkVfVk0JMHgwMDAwMDEwMAkvKiBzZXQgaWYgVk0gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCi0jZGVmaW5lIENMT05FX0ZTCTB4MDAwMDAyMDAJLyogc2V0IGlmIGZzIGluZm8gc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCi0jZGVmaW5lIENMT05FX0ZJTEVTCTB4MDAwMDA0MDAJLyogc2V0IGlmIG9wZW4gZmlsZXMgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzICovCi0jZGVmaW5lIENMT05FX1NJR0hBTkQJMHgwMDAwMDgwMAkvKiBzZXQgaWYgc2lnbmFsIGhhbmRsZXJzIGFuZCBibG9ja2VkIHNpZ25hbHMgc2hhcmVkICovCi0jZGVmaW5lIENMT05FX1BUUkFDRQkweDAwMDAyMDAwCS8qIHNldCBpZiB3ZSB3YW50IHRvIGxldCB0cmFjaW5nIGNvbnRpbnVlIG9uIHRoZSBjaGlsZCB0b28gKi8KLSNkZWZpbmUgQ0xPTkVfVkZPUksJMHgwMDAwNDAwMAkvKiBzZXQgaWYgdGhlIHBhcmVudCB3YW50cyB0aGUgY2hpbGQgdG8gd2FrZSBpdCB1cCBvbiBtbV9yZWxlYXNlICovCi0jZGVmaW5lIENMT05FX1BBUkVOVAkweDAwMDA4MDAwCS8qIHNldCBpZiB3ZSB3YW50IHRvIGhhdmUgdGhlIHNhbWUgcGFyZW50IGFzIHRoZSBjbG9uZXIgKi8KLSNkZWZpbmUgQ0xPTkVfVEhSRUFECTB4MDAwMTAwMDAJLyogU2FtZSB0aHJlYWQgZ3JvdXA/ICovCi0jZGVmaW5lIENMT05FX05FV05TCTB4MDAwMjAwMDAJLyogTmV3IG5hbWVzcGFjZSBncm91cD8gKi8KLSNkZWZpbmUgQ0xPTkVfU1lTVlNFTQkweDAwMDQwMDAwCS8qIHNoYXJlIHN5c3RlbSBWIFNFTV9VTkRPIHNlbWFudGljcyAqLwotI2RlZmluZSBDTE9ORV9TRVRUTFMJMHgwMDA4MDAwMAkvKiBjcmVhdGUgYSBuZXcgVExTIGZvciB0aGUgY2hpbGQgKi8KLSNkZWZpbmUgQ0xPTkVfUEFSRU5UX1NFVFRJRAkweDAwMTAwMDAwCS8qIHNldCB0aGUgVElEIGluIHRoZSBwYXJlbnQgKi8KLSNkZWZpbmUgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQJMHgwMDIwMDAwMAkvKiBjbGVhciB0aGUgVElEIGluIHRoZSBjaGlsZCAqLwotI2RlZmluZSBDTE9ORV9ERVRBQ0hFRAkJMHgwMDQwMDAwMAkvKiBVbnVzZWQsIGlnbm9yZWQgKi8KLSNkZWZpbmUgQ0xPTkVfVU5UUkFDRUQJCTB4MDA4MDAwMDAJLyogc2V0IGlmIHRoZSB0cmFjaW5nIHByb2Nlc3MgY2FuJ3QgZm9yY2UgQ0xPTkVfUFRSQUNFIG9uIHRoaXMgY2xvbmUgKi8KLSNkZWZpbmUgQ0xPTkVfQ0hJTERfU0VUVElECTB4MDEwMDAwMDAJLyogc2V0IHRoZSBUSUQgaW4gdGhlIGNoaWxkICovCi0jZGVmaW5lIENMT05FX1NUT1BQRUQJCTB4MDIwMDAwMDAJLyogU3RhcnQgaW4gc3RvcHBlZCBzdGF0ZSAqLwotCi0vKgogICogTGlzdCBvZiBmbGFncyB3ZSB3YW50IHRvIHNoYXJlIGZvciBrZXJuZWwgdGhyZWFkcywKICAqIGlmIG9ubHkgYmVjYXVzZSB0aGV5IGFyZSBub3QgdXNlZCBieSB0aGVtIGFueXdheS4KICAqLwpAQCAtMTAzLDEzICsxMjQsNiBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfYWN0aXZlKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbnJfaW93YWl0KHZvaWQpOwogCi0jaW5jbHVkZSA8bGludXgvdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2hydGltZXIuaD4KLQotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAogLyoKICAqIFRhc2sgc3RhdGUgYml0bWFzay4gTk9URSEgVGhlc2UgYml0cyBhcmUgYWxzbwpAQCAtMTU2LDIwICsxNzAsNiBAQAogLyogVGFzayBjb21tYW5kIG5hbWUgbGVuZ3RoICovCiAjZGVmaW5lIFRBU0tfQ09NTV9MRU4gMTYKIAotLyoKLSAqIFNjaGVkdWxpbmcgcG9saWNpZXMKLSAqLwotI2RlZmluZSBTQ0hFRF9OT1JNQUwJCTAKLSNkZWZpbmUgU0NIRURfRklGTwkJMQotI2RlZmluZSBTQ0hFRF9SUgkJMgotI2RlZmluZSBTQ0hFRF9CQVRDSAkJMwotCi1zdHJ1Y3Qgc2NoZWRfcGFyYW0gewotCWludCBzY2hlZF9wcmlvcml0eTsKLX07Ci0KLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiAvKgpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJYXRvbWljX3QgcHJvY2Vzc2VzOwkvKiBIb3cgbWFueSBwcm9jZXNzZXMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8KIAlhdG9taWNfdCBmaWxlczsJCS8qIEhvdyBtYW55IG9wZW4gZmlsZXMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8KIAlhdG9taWNfdCBzaWdwZW5kaW5nOwkvKiBIb3cgbWFueSBwZW5kaW5nIHNpZ25hbHMgZG9lcyB0aGlzIHVzZXIgaGF2ZT8gKi8KLSNpZmRlZiBDT05GSUdfSU5PVElGWQorI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKIAlhdG9taWNfdCBpbm90aWZ5X3dhdGNoZXM7IC8qIEhvdyBtYW55IGlub3RpZnkgd2F0Y2hlcyBkb2VzIHRoaXMgdXNlciBoYXZlPyAqLwogCWF0b21pY190IGlub3RpZnlfZGV2czsJLyogSG93IG1hbnkgaW5vdGlmeSBkZXZzIGRvZXMgdGhpcyB1c2VyIGhhdmUgb3BlbmVkPyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY2NvbXAuaCBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCmluZGV4IGNkMjc3M2IuLjNlOGIxY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjY29tcC5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfU0VDQ09NUF9ICiAjZGVmaW5lIF9MSU5VWF9TRUNDT01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWZkZWYgQ09ORklHX1NFQ0NPTVAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZW0uaCBiL2luY2x1ZGUvbGludXgvc2VtLmgKaW5kZXggM2MxZjExMi4uOWFhZmZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbS5oCkBAIC0yLDcgKzIsNiBAQAogI2RlZmluZSBfTElOVVhfU0VNX0gKIAogI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogLyogc2Vtb3AgZmxhZ3MgKi8KICNkZWZpbmUgU0VNX1VORE8gICAgICAgIDB4MTAwMCAgLyogdW5kbyB0aGUgb3BlcmF0aW9uIG9uIGV4aXQgKi8KQEAgLTc4LDYgKzc3LDcgQEAKICNkZWZpbmUgU0VNVVNaICAyMAkJLyogc2l6ZW9mIHN0cnVjdCBzZW1fdW5kbyAqLwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IHRhc2tfc3RydWN0OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaCBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCmluZGV4IDVhMDk1NTcuLjdiYzVjN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxbG9jay5oCkBAIC0yNiw3ICsyNiw2IEBACiAgKiBieSBLZWl0aCBPd2VucyBhbmQgQW5kcmVhIEFyY2FuZ2VsaQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXJpYWxQLmggYi9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaAppbmRleCAyYjllNmI5Li5lODExYTYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbFAuaApAQCAtMTksNyArMTksNiBAQAogICogRm9yIGRlZmluaXRpb25zIG9mIHRoZSBmbGFncyBmaWVsZCwgc2VlIHR0eS5oCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCBiZDE0ODU4Li45NGI5Mjg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC0xMzIsNyArMTMyLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2lyY19idWYuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCmluZGV4IDcwNzM5ZjUuLjFlNGNlNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaApAQCAtMSwxMiArMSwxMiBAQAogI2lmbmRlZiBfTElOVVhfU0lHTkFMX0gKICNkZWZpbmUgX0xJTlVYX1NJR05BTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogLyoKICAqIFRoZXNlIHZhbHVlcyBvZiBzYV9mbGFncyBhcmUgdXNlZCBvbmx5IGJ5IHRoZSBrZXJuZWwgYXMgcGFydCBvZiB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IDkzZTRkYjIuLjY2Zjg4MTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMTQsNyArMTQsNiBAQAogI2lmbmRlZiBfTElOVVhfU0tCVUZGX0gKICNkZWZpbmUgX0xJTlVYX1NLQlVGRl9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2xhYi5oIGIvaW5jbHVkZS9saW51eC9zbGFiLmgKaW5kZXggMmQ5ODVkNS4uOWRjOTMxNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC0xMSw3ICsxMSw2IEBACiAKIHR5cGVkZWYgc3RydWN0IGttZW1fY2FjaGUga21lbV9jYWNoZV90OwogCi0jaW5jbHVkZQk8bGludXgvY29uZmlnLmg+CS8qIGttYWxsb2Nfc2l6ZXMuaCBuZWVkcyBDT05GSUdfIG9wdGlvbnMgKi8KICNpbmNsdWRlCTxsaW51eC9nZnAuaD4KICNpbmNsdWRlCTxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZQk8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21iX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCmluZGV4IDYyMWEzZDMuLjM2N2Q2YzNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NtYl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc21iX2ZzLmgKQEAgLTEwLDggKzEwLDYgQEAKICNkZWZpbmUgX0xJTlVYX1NNQl9GU19ICiAKICNpbmNsdWRlIDxsaW51eC9zbWIuaD4KLSNpbmNsdWRlIDxsaW51eC9zbWJfZnNfaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NtYl9mc19zYi5oPgogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTI0LDYgKzIyLDggQEAKIAogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NtYl9mc19pLmg+CisjaW5jbHVkZSA8bGludXgvc21iX2ZzX3NiLmg+CiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21wLmggYi9pbmNsdWRlL2xpbnV4L3NtcC5oCmluZGV4IGUyZmEzYWIuLmM5M2MzZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbXAuaApAQCAtNiw3ICs2LDYgQEAKICAqCQlBbGFuIENveC4gPGFsYW5AcmVkaGF0LmNvbT4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIGV4dGVybiB2b2lkIGNwdV9pZGxlKHZvaWQpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NtcF9sb2NrLmgKaW5kZXggZmExZmYzYi4uY2Y3MTVhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXBfbG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc21wX2xvY2suaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19MSU5VWF9TTVBMT0NLX0gKICNkZWZpbmUgX19MSU5VWF9TTVBMT0NLX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2lmZGVmIENPTkZJR19MT0NLX0tFUk5FTAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCmluZGV4IDlhYjJkZGQuLjM2MTQwOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaApAQCAtMTgsOCArMTgsNiBAQAogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCAhZGVmaW5lZChfX0dMSUJDX18pIHx8IChfX0dMSUJDX18gPCAyKQogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CQkvKiBmb3IgQ09ORklHX0NPTVBBVCAqLwotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vc29ja2V0Lmg+CQkJLyogYXJjaC1kZXBlbmRlbnQgZGVmaW5lcwkqLwogI2luY2x1ZGUgPGxpbnV4L3NvY2tpb3MuaD4JCS8qIHRoZSBTSU9DeHh4IEkvTyBjb250cm9scwkqLwogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgkJCS8qIGlvdmVjIHN1cHBvcnQJCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKaW5kZXggNzk5YmU2Ny4uYWUyM2JlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaApAQCAtNDYsNyArNDYsNiBAQAogICogIGxpbnV4L3NwaW5sb2NrLmg6ICAgICBidWlsZHMgdGhlIGZpbmFsIHNwaW5fKigpIEFQSXMuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmggYi9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCmluZGV4IDE1MWE4MDNlLi41YmZjNTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0b3BfbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RvcF9tYWNoaW5lLmgKQEAgLTQsNyArNCw2IEBACiAgICB2ZXJ5IGhlYXZ5IGxvY2ssIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gZ3JhYmJpbmcgZXZlcnkgc3BpbmxvY2sKICAgIChhbmQgbW9yZSkuICBTbyB0aGUgInJlYWQiIHNpZGUgdG8gc3VjaCBhIGxvY2sgaXMgYW55dGhpbmcgd2hpY2gKICAgIGRpYWJsZXMgcHJlZWVtcHQuICovCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9hdXRoLmgKaW5kZXggYmU0NzcyZS4uYTZkZTMzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtMTEsNyArMTEsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2RlYnVnLmgKaW5kZXggMWE0MmQ5MC4uZTQ3MjlhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZGVidWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCkBAIC05LDE5ICs5LDYgQEAKICNpZm5kZWYgX0xJTlVYX1NVTlJQQ19ERUJVR19IXwogI2RlZmluZSBfTElOVVhfU1VOUlBDX0RFQlVHX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0KLS8qCi0gKiBFbmFibGUgUlBDIGRlYnVnZ2luZy9wcm9maWxpbmcuCi0gKi8KLSNpZmRlZiBDT05GSUdfU1lTQ1RMCi0jZGVmaW5lICBSUENfREVCVUcKLSNlbmRpZgotLyogI2RlZmluZSAgUlBDX1BST0ZJTEUgKi8KLQogLyoKICAqIFJQQyBkZWJ1ZyBmYWNpbGl0aWVzCiAgKi8KQEAgLTQxLDYgKzI4LDE3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisvKgorICogRW5hYmxlIFJQQyBkZWJ1Z2dpbmcvcHJvZmlsaW5nLgorICovCisjaWZkZWYgQ09ORklHX1NZU0NUTAorI2RlZmluZSAgUlBDX0RFQlVHCisjZW5kaWYKKy8qICNkZWZpbmUgIFJQQ19QUk9GSUxFICovCisKIC8qCiAgKiBEZWJ1Z2dpbmcgbWFjcm9zIGV0YwogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3RhdHMuaAppbmRleCBkOTNjMjRiLi41ZmEwZjIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdGF0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N0YXRzLmgKQEAgLTksNyArOSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1RBVFNfSAogI2RlZmluZSBfTElOVVhfU1VOUlBDX1NUQVRTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAogc3RydWN0IHJwY19zdGF0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKaW5kZXggMzdjMWM3Ni4uOTZlMzFhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdXNwZW5kLmgKQEAgLTYsNyArNiw2IEBACiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcG0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAppbmRleCBmMDNjMjQ3Li5hY2E5YmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX1NXQVBfSAogI2RlZmluZSBfTElOVVhfU1dBUF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA2MGQ0OWU1Li5iZDY3YTQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01NCw3ICs1NCw2IEBACiBzdHJ1Y3QgY29tcGF0X3RpbWV2YWw7CiBzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZDsKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzcnEuaCBiL2luY2x1ZGUvbGludXgvc3lzcnEuaAppbmRleCBlYTgxOWI4Li40ODEyZmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNycS5oCkBAIC0xMSw3ICsxMSw2IEBACiAgKgliYXNlZCB1cG9uIGRpc2N1c2lvbnMgaW4gaXJjOi8vaXJjLm9wZW5wcm9qZWN0cy5uZXQvI2tlcm5lbG5ld2JpZXMKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBwdF9yZWdzOwogc3RydWN0IHR0eV9zdHJ1Y3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCBjOTBkYWE1Li40MjBhNjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTE2MCw3ICsxNjAsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIGIvaW5jbHVkZS9saW51eC90aHJlYWRzLmgKaW5kZXggZTY0NmJjZC4uMzhkMWE1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aHJlYWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC90aHJlYWRzLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9MSU5VWF9USFJFQURTX0gKICNkZWZpbmUgX0xJTlVYX1RIUkVBRFNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIC8qCiAgKiBUaGUgZGVmYXVsdCBsaW1pdCBmb3IgdGhlIG5yIG9mIHRocmVhZHMgaXMgbm93IGluCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmggYi9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKaW5kZXggMGE0ODViZS4uYzk4MjMwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXIuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX0xJTlVYX1RJTUVSX0gKICNkZWZpbmUgX0xJTlVYX1RJTUVSX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1leC5oIGIvaW5jbHVkZS9saW51eC90aW1leC5oCmluZGV4IDAzOTE0YjcuLjM0ZDNjY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKQEAgLTUzLDcgKzUzLDYgQEAKICNpZm5kZWYgX0xJTlVYX1RJTUVYX0gKICNkZWZpbmUgX0xJTlVYX1RJTUVYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCBmMTNmNDlhLi5lODk4ZWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTE2LDcgKzE2LDYgQEAKIAkJICAgY29uc29sZXMgMTYgYW5kIGhpZ2hlciAoc2luY2UgaXQgcmV0dXJucyBhIHNob3J0KSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KICNpbmNsdWRlIDxsaW51eC90ZXJtaW9zLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggMTA0NmM3YS4uYTVlNDZlNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0xJTlVYX1RZUEVTX0gKIAogI2lmZGVmCV9fS0VSTkVMX18KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2RlZmluZSBCSVRTX1RPX0xPTkdTKGJpdHMpIFwKIAkoKChiaXRzKStCSVRTX1BFUl9MT05HLTEpL0JJVFNfUEVSX0xPTkcpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VkcC5oIGIvaW5jbHVkZS9saW51eC91ZHAuaAppbmRleCA4NWE1NTY1Li5iZGQzOWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VkcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdWRwLmgKQEAgLTM1LDcgKzM1LDYgQEAKICNkZWZpbmUgVURQX0VOQ0FQX0VTUElOVURQCTIgLyogZHJhZnQtaWV0Zi1pcHNlYy11ZHAtZW5jYXBzLTA2ICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdWZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oCmluZGV4IDg0M2FlYWEuLjg2YjViNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC91ZnNfZnMuaApAQCAtMzIsNyArMzIsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdW5pc3RkLmggYi9pbmNsdWRlL2xpbnV4L3VuaXN0ZC5oCmluZGV4IDEwZWQ5ODMuLmMxOGM2MGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9saW51eC91bmlzdGQuaApAQCAtMSw3ICsxLDkgQEAKICNpZm5kZWYgX0xJTlVYX1VOSVNURF9IXwogI2RlZmluZSBfTElOVVhfVU5JU1REX0hfCiAKKyNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gaW50IGVycm5vOworI2VuZGlmCiAKIC8qCiAgKiBJbmNsdWRlIG1hY2hpbmUgc3BlY2lmaWMgc3lzY2FsbFggbWFjcm9zCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi5oIGIvaW5jbHVkZS9saW51eC91c2IuaAppbmRleCBlMzRlNWUzLi4xZjQ5MmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiLmgKQEAgLTEwLDcgKzEwLDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+ICAgICAgICAvKiBmb3IgLUVOT0RFViAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIGZvciBtZGVsYXkoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBmb3IgaW5faW50ZXJydXB0KCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmggYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCmluZGV4IGIyZDA4OTguLjYwODQ4N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaApAQCAtOSw3ICs5LDYgQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfVVNVQUxfSAogI2RlZmluZSBfX0xJTlVYX1VTQl9VU1VBTF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogV2Ugc2hvdWxkIGRvIHRoaXMgZm9yIGNsZWFubGluZXNzLi4uIEJ1dCBvdGhlciB1c2JfZm9vLmggZG8gbm90IGRvIHRoaXMuICovCiAvKiAjaW5jbHVkZSA8bGludXgvdXNiLmg+ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oIGIvaW5jbHVkZS9saW51eC91c2JkZXZpY2VfZnMuaAppbmRleCA4ODU5ZjBiLi43YjdhYWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYmRldmljZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiZGV2aWNlX2ZzLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogCWNoYXIgcG9ydCBbMTI3XTsJLyogZS5nLiBwb3J0IDMgY29ubmVjdHMgdG8gZGV2aWNlIDI3ICovCiB9OwogCisjaWZkZWYgX19LRVJORUxfXwogI2lmZGVmIENPTkZJR19DT01QQVQKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIHN0cnVjdCB1c2JkZXZmc191cmIzMiB7CkBAIC0xNDcsNiArMTQ4LDcgQEAKIAljb21wYXRfY2FkZHJfdCBkYXRhOwogfTsKICNlbmRpZgorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2RlZmluZSBVU0JERVZGU19DT05UUk9MICAgICAgICAgICBfSU9XUignVScsIDAsIHN0cnVjdCB1c2JkZXZmc19jdHJsdHJhbnNmZXIpCiAjZGVmaW5lIFVTQkRFVkZTX0JVTEsgICAgICAgICAgICAgIF9JT1dSKCdVJywgMiwgc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2J1ZmZlci5oCmluZGV4IDFmN2JhMzYuLjA1N2RiN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnRfYnVmZmVyLmgKKysrIGIvaW5jbHVkZS9saW51eC92dF9idWZmZXIuaApAQCAtMTMsNyArMTMsNiBAQAogI2lmbmRlZiBfTElOVVhfVlRfQlVGRkVSX0hfCiAjZGVmaW5lIF9MSU5VWF9WVF9CVUZGRVJfSF8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfVkdBX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX01EQV9DT05TT0xFKQogI2luY2x1ZGUgPGFzbS92Z2EuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnRfa2Vybi5oIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKaW5kZXggZmFiNWFlZC4uOTQwZDAyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC92dF9rZXJuLmgKQEAgLTYsNyArNiw2IEBACiAgKiB3aXRoIGluZm9ybWF0aW9uIG5lZWRlZCBieSB0aGUgdnQgcGFja2FnZQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC92dC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dhaXQuaCBiL2luY2x1ZGUvbGludXgvd2FpdC5oCmluZGV4IGQyODUxODIuLjU0NGU4NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2FpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvd2FpdC5oCkBAIC0xOSw3ICsxOSw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmggYi9pbmNsdWRlL2xpbnV4L3dhbnJvdXRlci5oCmluZGV4IDFiNmI3NmEuLjJjZDA1MDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd2Fucm91dGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC93YW5yb3V0ZXIuaApAQCAtNDQsOCArNDQsNiBAQAogKiBKYW4gMDIsIDE5OTcJR2VuZSBLb3ppbglJbml0aWFsIHZlcnNpb24gKGJhc2VkIG9uIHdhbnBpcGUuaCkuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ICAgICAgIC8qIFN1cHBvcnQgZm9yIFNNUCBMb2NraW5nICovCi0KICNpZm5kZWYJX1JPVVRFUl9ICiAjZGVmaW5lCV9ST1VURVJfSAogCkBAIC00NTcsNiArNDU1LDggQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgkJLyogc3VwcG9ydCBmb3IgZGV2aWNlIGRyaXZlcnMgKi8KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CS8qIHByb2MgZmlsZXN5c3RlbSBwcmFnbWF0aWNzICovCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CS8qIHN1cHBvcnQgZm9yIG5ldHdvcmsgZHJpdmVycyAqLworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+ICAgICAvKiBTdXBwb3J0IGZvciBTTVAgTG9ja2luZyAqLworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFdBTiBkZXZpY2UgZGF0YSBzcGFjZS4KICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbXRkLWFiaS5oIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCmluZGV4IGI1OTk0ZWEuLjMxMzI5ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaAorKysgYi9pbmNsdWRlL210ZC9tdGQtYWJpLmgKQEAgLTcsOCArNyw5IEBACiAjaWZuZGVmIF9fTVREX0FCSV9IX18KICNkZWZpbmUgX19NVERfQUJJX0hfXwogCi0jaWZuZGVmIF9fS0VSTkVMX18gLyogVXJnaC4gVGhlIHdob2xlIHBvaW50IG9mIHNwbGl0dGluZyB0aGlzIG91dCBpbnRvCi0JCSAgICBzZXBhcmF0ZSBmaWxlcyB3YXMgdG8gYXZvaWQgI2lmZGVmIF9fS0VSTkVMX18gKi8KKyNpZm5kZWYgX19LRVJORUxfXyAKKy8qIFVyZ2guIFRoZSB3aG9sZSBwb2ludCBvZiBzcGxpdHRpbmcgdGhpcyBvdXQgaW50bworICAgc2VwYXJhdGUgZmlsZXMgd2FzIHRvIGF2b2lkICNpZmRlZiBfX0tFUk5FTF9fICovCiAjZGVmaW5lIF9fdXNlcgogI2VuZGlmCiAKQEAgLTI4LDI4ICsyOSwxNyBAQAogI2RlZmluZSBNVERfUk9NCQkJMgogI2RlZmluZSBNVERfTk9SRkxBU0gJCTMKICNkZWZpbmUgTVREX05BTkRGTEFTSAkJNAotI2RlZmluZSBNVERfUEVST00JCTUKICNkZWZpbmUgTVREX0RBVEFGTEFTSAkJNgotI2RlZmluZSBNVERfT1RIRVIJCTE0Ci0jZGVmaW5lIE1URF9VTktOT1dOCQkxNQogCi0jZGVmaW5lIE1URF9DTEVBUl9CSVRTCQkxICAgICAgIC8vIEJpdHMgY2FuIGJlIGNsZWFyZWQgKGZsYXNoKQotI2RlZmluZSBNVERfU0VUX0JJVFMJCTIgICAgICAgLy8gQml0cyBjYW4gYmUgc2V0Ci0jZGVmaW5lIE1URF9FUkFTRUFCTEUJCTQgICAgICAgLy8gSGFzIGFuIGVyYXNlIGZ1bmN0aW9uCi0jZGVmaW5lIE1URF9XUklURUJfV1JJVEVBQkxFCTggICAgICAgLy8gRGlyZWN0IElPIGlzIHBvc3NpYmxlCi0jZGVmaW5lIE1URF9WT0xBVElMRQkJMTYgICAgICAvLyBTZXQgZm9yIFJBTXMKLSNkZWZpbmUgTVREX1hJUAkJCTMyCS8vIGVYZWN1dGUtSW4tUGxhY2UgcG9zc2libGUKLSNkZWZpbmUgTVREX09PQgkJCTY0CS8vIE91dC1vZi1iYW5kIGRhdGEgKE5BTkQgZmxhc2gpCi0jZGVmaW5lIE1URF9FQ0MJCQkxMjgJLy8gRGV2aWNlIGNhcGFibGUgb2YgYXV0b21hdGljIEVDQwotI2RlZmluZSBNVERfTk9fVklSVEJMT0NLUwkyNTYJLy8gVmlydHVhbCBibG9ja3Mgbm90IGFsbG93ZWQKLSNkZWZpbmUgTVREX1BST0dSQU1fUkVHSU9OUwk1MTIJLy8gQ29uZmlndXJhYmxlIFByb2dyYW1taW5nIFJlZ2lvbnMKKyNkZWZpbmUgTVREX1dSSVRFQUJMRQkJMHg0MDAJLyogRGV2aWNlIGlzIHdyaXRlYWJsZSAqLworI2RlZmluZSBNVERfQklUX1dSSVRFQUJMRQkweDgwMAkvKiBTaW5nbGUgYml0cyBjYW4gYmUgZmxpcHBlZCAqLworI2RlZmluZSBNVERfTk9fRVJBU0UJCTB4MTAwMAkvKiBObyBlcmFzZSBuZWNlc3NhcnkgKi8KIAogLy8gU29tZSBjb21tb24gZGV2aWNlcyAvIGNvbWJpbmF0aW9ucyBvZiBjYXBhYmlsaXRpZXMKICNkZWZpbmUgTVREX0NBUF9ST00JCTAKLSNkZWZpbmUgTVREX0NBUF9SQU0JCShNVERfQ0xFQVJfQklUU3xNVERfU0VUX0JJVFN8TVREX1dSSVRFQl9XUklURUFCTEUpCi0jZGVmaW5lIE1URF9DQVBfTk9SRkxBU0ggICAgICAgIChNVERfQ0xFQVJfQklUU3xNVERfRVJBU0VBQkxFKQotI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSCAgICAgICAoTVREX0NMRUFSX0JJVFN8TVREX0VSQVNFQUJMRXxNVERfT09CKQotI2RlZmluZSBNVERfV1JJVEVBQkxFCQkoTVREX0NMRUFSX0JJVFN8TVREX1NFVF9CSVRTKQorI2RlZmluZSBNVERfQ0FQX1JBTQkJKE1URF9XUklURUFCTEUgfCBNVERfQklUX1dSSVRFQUJMRSB8IE1URF9OT19FUkFTRSkKKyNkZWZpbmUgTVREX0NBUF9OT1JGTEFTSAkoTVREX1dSSVRFQUJMRSB8IE1URF9CSVRfV1JJVEVBQkxFKQorI2RlZmluZSBNVERfQ0FQX05BTkRGTEFTSAkoTVREX1dSSVRFQUJMRSkKIAogCiAvLyBUeXBlcyBvZiBhdXRvbWF0aWMgRUNDL0NoZWNrc3VtIGF2YWlsYWJsZQpAQCAtNzQsNyArNjQsNyBAQAogCXVpbnQzMl90IGZsYWdzOwogCXVpbnQzMl90IHNpemU7CSAvLyBUb3RhbCBzaXplIG9mIHRoZSBNVEQKIAl1aW50MzJfdCBlcmFzZXNpemU7Ci0JdWludDMyX3Qgb29iYmxvY2s7ICAvLyBTaXplIG9mIE9PQiBibG9ja3MgKGUuZy4gNTEyKQorCXVpbnQzMl90IHdyaXRlc2l6ZTsKIAl1aW50MzJfdCBvb2JzaXplOyAgIC8vIEFtb3VudCBvZiBPT0IgZGF0YSBwZXIgYmxvY2sgKGUuZy4gMTYpCiAJdWludDMyX3QgZWNjdHlwZTsKIAl1aW50MzJfdCBlY2NzaXplOwpAQCAtOTQsMTIgKzg0LDEyIEBACiAJdWludDMyX3QgbG9ja2VkOwogfTsKIAotI2RlZmluZSBNRU1HRVRJTkZPICAgICAgICAgICAgICBfSU9SKCdNJywgMSwgc3RydWN0IG10ZF9pbmZvX3VzZXIpCi0jZGVmaW5lIE1FTUVSQVNFICAgICAgICAgICAgICAgIF9JT1coJ00nLCAyLCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQotI2RlZmluZSBNRU1XUklURU9PQiAgICAgICAgICAgICBfSU9XUignTScsIDMsIHN0cnVjdCBtdGRfb29iX2J1ZikKLSNkZWZpbmUgTUVNUkVBRE9PQiAgICAgICAgICAgICAgX0lPV1IoJ00nLCA0LCBzdHJ1Y3QgbXRkX29vYl9idWYpCi0jZGVmaW5lIE1FTUxPQ0sgICAgICAgICAgICAgICAgIF9JT1coJ00nLCA1LCBzdHJ1Y3QgZXJhc2VfaW5mb191c2VyKQotI2RlZmluZSBNRU1VTkxPQ0sgICAgICAgICAgICAgICBfSU9XKCdNJywgNiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNR0VUSU5GTwkJX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQorI2RlZmluZSBNRU1FUkFTRQkJX0lPVygnTScsIDIsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTVdSSVRFT09CCQlfSU9XUignTScsIDMsIHN0cnVjdCBtdGRfb29iX2J1ZikKKyNkZWZpbmUgTUVNUkVBRE9PQgkJX0lPV1IoJ00nLCA0LCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTUxPQ0sJCQlfSU9XKCdNJywgNSwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNVU5MT0NLCQlfSU9XKCdNJywgNiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKICNkZWZpbmUgTUVNR0VUUkVHSU9OQ09VTlQJX0lPUignTScsIDcsIGludCkKICNkZWZpbmUgTUVNR0VUUkVHSU9OSU5GTwlfSU9XUignTScsIDgsIHN0cnVjdCByZWdpb25faW5mb191c2VyKQogI2RlZmluZSBNRU1TRVRPT0JTRUwJCV9JT1coJ00nLCA5LCBzdHJ1Y3QgbmFuZF9vb2JpbmZvKQpAQCAtMTA5LDggKzk5LDE1IEBACiAjZGVmaW5lIE9UUFNFTEVDVAkJX0lPUignTScsIDEzLCBpbnQpCiAjZGVmaW5lIE9UUEdFVFJFR0lPTkNPVU5UCV9JT1coJ00nLCAxNCwgaW50KQogI2RlZmluZSBPVFBHRVRSRUdJT05JTkZPCV9JT1coJ00nLCAxNSwgc3RydWN0IG90cF9pbmZvKQotI2RlZmluZSBPVFBMT0NLCQlfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgT1RQTE9DSwkJCV9JT1IoJ00nLCAxNiwgc3RydWN0IG90cF9pbmZvKQorI2RlZmluZSBFQ0NHRVRMQVlPVVQJCV9JT1IoJ00nLCAxNywgc3RydWN0IG5hbmRfZWNjbGF5b3V0KQorI2RlZmluZSBFQ0NHRVRTVEFUUwkJX0lPUignTScsIDE4LCBzdHJ1Y3QgbXRkX2VjY19zdGF0cykKKyNkZWZpbmUgTVRERklMRU1PREUJCV9JTygnTScsIDE5KQogCisvKgorICogT2Jzb2xldGUgbGVnYWN5IGludGVyZmFjZS4gS2VlcCBpdCBpbiBvcmRlciBub3QgdG8gYnJlYWsgdXNlcnNwYWNlCisgKiBpbnRlcmZhY2VzCisgKi8KIHN0cnVjdCBuYW5kX29vYmluZm8gewogCXVpbnQzMl90IHVzZWVjYzsKIAl1aW50MzJfdCBlY2NieXRlczsKQEAgLTExOCw0ICsxMTUsNDYgQEAKIAl1aW50MzJfdCBlY2Nwb3NbMzJdOwogfTsKIAorc3RydWN0IG5hbmRfb29iZnJlZSB7CisJdWludDMyX3Qgb2Zmc2V0OworCXVpbnQzMl90IGxlbmd0aDsKK307CisKKyNkZWZpbmUgTVREX01BWF9PT0JGUkVFX0VOVFJJRVMJOAorLyoKKyAqIEVDQyBsYXlvdXQgY29udHJvbCBzdHJ1Y3R1cmUuIEV4cG9ydGVkIHRvIHVzZXJzcGFjZSBmb3IKKyAqIGRpYWdub3NpcyBhbmQgdG8gYWxsb3cgY3JlYXRpb24gb2YgcmF3IGltYWdlcworICovCitzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgeworCXVpbnQzMl90IGVjY2J5dGVzOworCXVpbnQzMl90IGVjY3Bvc1s2NF07CisJdWludDMyX3Qgb29iYXZhaWw7CisJc3RydWN0IG5hbmRfb29iZnJlZSBvb2JmcmVlW01URF9NQVhfT09CRlJFRV9FTlRSSUVTXTsKK307CisKKy8qKgorICogc3RydWN0IG10ZF9lY2Nfc3RhdHMgLSBlcnJvciBjb3JyZWN0aW9uIHN0YXR1cworICoKKyAqIEBjb3JyZWN0ZWQ6CW51bWJlciBvZiBjb3JyZWN0ZWQgYml0cworICogQGZhaWxlZDoJbnVtYmVyIG9mIHVuY29ycmVjdGFibGUgZXJyb3JzCisgKiBAYmFkYmxvY2tzOgludW1iZXIgb2YgYmFkIGJsb2NrcyBpbiB0aGlzIHBhcnRpdGlvbgorICogQGJidGJsb2NrczoJbnVtYmVyIG9mIGJsb2NrcyByZXNlcnZlZCBmb3IgYmFkIGJsb2NrIHRhYmxlcworICovCitzdHJ1Y3QgbXRkX2VjY19zdGF0cyB7CisJdWludDMyX3QgY29ycmVjdGVkOworCXVpbnQzMl90IGZhaWxlZDsKKwl1aW50MzJfdCBiYWRibG9ja3M7CisJdWludDMyX3QgYmJ0YmxvY2tzOworfTsKKworLyoKKyAqIFJlYWQvd3JpdGUgZmlsZSBtb2RlcyBmb3IgYWNjZXNzIHRvIE1URAorICovCitlbnVtIG10ZF9maWxlX21vZGVzIHsKKwlNVERfTU9ERV9OT1JNQUwgPSBNVERfT1RQX09GRiwKKwlNVERfTU9ERV9PVFBfRkFDVE9SWSA9IE1URF9PVFBfRkFDVE9SWSwKKwlNVERfTU9ERV9PVFBfVVNFUiA9IE1URF9PVFBfVVNFUiwKKwlNVERfTU9ERV9SQVcsCit9OworCiAjZW5kaWYgLyogX19NVERfQUJJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tdGQvbXRkLXVzZXIuaCBiL2luY2x1ZGUvbXRkL210ZC11c2VyLmgKaW5kZXggMWMxM2ZjNy4uNzEzZjM0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvbXRkLXVzZXIuaAorKysgYi9pbmNsdWRlL210ZC9tdGQtdXNlci5oCkBAIC0xNiw1ICsxNiw2IEBACiB0eXBlZGVmIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIgZXJhc2VfaW5mb190OwogdHlwZWRlZiBzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlciByZWdpb25faW5mb190OwogdHlwZWRlZiBzdHJ1Y3QgbmFuZF9vb2JpbmZvIG5hbmRfb29iaW5mb190OwordHlwZWRlZiBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgbmFuZF9lY2NsYXlvdXRfdDsKIAogI2VuZGlmIC8qIF9fTVREX1VTRVJfSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oIGIvaW5jbHVkZS9uZXQvYWRkcmNvbmYuaAppbmRleCA3NTBlMjUwLi4zZDcxMjUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZGRyY29uZi5oCisrKyBiL2luY2x1ZGUvbmV0L2FkZHJjb25mLmgKQEAgLTQ1LDcgKzQ1LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPG5ldC9pZl9pbmV0Ni5oPgogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9hZl91bml4LmggYi9pbmNsdWRlL25ldC9hZl91bml4LmgKaW5kZXggNDI3ZGFjOS4uNzk1ZjgxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWZfdW5peC5oCisrKyBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgX19MSU5VWF9ORVRfQUZVTklYX0gKICNkZWZpbmUgX19MSU5VWF9ORVRfQUZVTklYX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgogI2luY2x1ZGUgPGxpbnV4L3VuLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2F4MjUuaCBiL2luY2x1ZGUvbmV0L2F4MjUuaAppbmRleCA1YmQ5OTc0Li43Y2Q1MjhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9heDI1LmgKKysrIGIvaW5jbHVkZS9uZXQvYXgyNS5oCkBAIC02LDcgKzYsNiBAQAogI2lmbmRlZiBfQVgyNV9ICiAjZGVmaW5lIF9BWDI1X0ggCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9heDI1Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY29tcGF0LmggYi9pbmNsdWRlL25ldC9jb21wYXQuaAppbmRleCBlNjVjYmVkLi45ODU5YjYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9jb21wYXQuaAorKysgYi9pbmNsdWRlL25ldC9jb21wYXQuaApAQCAtMSw3ICsxLDYgQEAKICNpZm5kZWYgTkVUX0NPTVBBVF9ICiAjZGVmaW5lIE5FVF9DT01QQVRfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKIHN0cnVjdCBzb2NrOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc3QuaCBiL2luY2x1ZGUvbmV0L2RzdC5oCmluZGV4IDUxNjFlODkuLjM2ZDU0ZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzdC5oCisrKyBiL2luY2x1ZGUvbmV0L2RzdC5oCkBAIC04LDcgKzgsNiBAQAogI2lmbmRlZiBfTkVUX0RTVF9ICiAjZGVmaW5lIF9ORVRfRFNUX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pY21wLmggYi9pbmNsdWRlL25ldC9pY21wLmgKaW5kZXggZTdjM2YyMC4uMDVmOGZmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWNtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2ljbXAuaApAQCAtMTgsNyArMTgsNiBAQAogI2lmbmRlZiBfSUNNUF9ICiAjZGVmaW5lCV9JQ01QX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXAuaD4KIAogI2luY2x1ZGUgPG5ldC9pbmV0X3NvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXQ2X2hhc2h0YWJsZXMuaAppbmRleCA1OWYwYzgzLi5iYzZhNzFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0Nl9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldDZfaGFzaHRhYmxlcy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9JTkVUNl9IQVNIVEFCTEVTX0gKICNkZWZpbmUgX0lORVQ2X0hBU0hUQUJMRVNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkIChDT05GSUdfSVBWNl9NT0RVTEUpCiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2hhc2h0YWJsZXMuaCBiL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCmluZGV4IDEzNWQ4MGYuLjk4ZTBiYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oCkBAIC0xNCw3ICsxNCw2IEBACiAjaWZuZGVmIF9JTkVUX0hBU0hUQUJMRVNfSAogI2RlZmluZSBfSU5FVF9IQVNIVEFCTEVTX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAppbmRleCA4ODNlYjUyLi4xZjRhOWE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3NvY2suaApAQCAtMTYsNyArMTYsNiBAQAogI2lmbmRlZiBfSU5FVF9TT0NLX0gKICNkZWZpbmUgX0lORVRfU09DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaCBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCmluZGV4IGU4MzdmOTguLjYwMGNiNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L2luZXRfdGltZXdhaXRfc29jay5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9JTkVUX1RJTUVXQUlUX1NPQ0tfCiAjZGVmaW5lIF9JTkVUX1RJTUVXQUlUX1NPQ0tfCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IGVhZDIzM2MuLjk4ZjkwODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtMjIsNyArMjIsNiBAQAogI2lmbmRlZiBfSVBfSAogI2RlZmluZSBfSVBfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9maWIuaCBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCmluZGV4IGUwMDBmYTIuLmEwOTVkMWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX2ZpYi5oCkBAIC0xNiw3ICsxNiw2IEBACiAjaWZuZGVmIF9ORVRfSVBfRklCX0gKICNkZWZpbmUgX05FVF9JUF9GSUJfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaCBiL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCmluZGV4IDc3MjI1NzMuLmFjNzQ3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX21wX2FsZy5oCkBAIC03LDcgKzcsNiBAQAogI2lmbmRlZiBfTkVUX0lQX01QX0FMR19ICiAjZGVmaW5lIF9ORVRfSVBfTVBfQUxHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lwX21wX2FsZy5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCA3ZDI2NzRmLi4zYjU3YjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTI0OCw3ICsyNDgsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPiAgICAgICAgICAgICAgICAgLyogZm9yIHN0cnVjdCBsaXN0X2hlYWQgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiAgICAgICAgICAgICAvKiBmb3Igc3RydWN0IHJ3bG9ja190ICovCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPiAgICAgICAgICAgICAgICAgLyogZm9yIHN0cnVjdCBhdG9taWNfdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDRhYmVkYjguLmE4ZmRmNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTEwNCw3ICsxMDQsNiBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4KIAogLyogc3lzY3RscyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaAppbmRleCAxODgwZTQ2Li4xY2IwNjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lyZGEuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBORVRfSVJEQV9ICiAjZGVmaW5lIE5FVF9JUkRBX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgkJLyogc3RydWN0IHNrX2J1ZmYgKi8KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZi5oPgkJCS8qIHNhX2ZhbWlseV90IGluIDxsaW51eC9pcmRhLmg+ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmggYi9pbmNsdWRlL25ldC9pcmRhL2lyZGFfZGV2aWNlLmgKaW5kZXggOTJjODI4MC4uMDU3NWM1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmRhX2RldmljZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJkYV9kZXZpY2UuaApAQCAtMzksNyArMzksNiBAQAogI2lmbmRlZiBJUkRBX0RFVklDRV9ICiAjZGVmaW5lIElSREFfREVWSUNFX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwLmgKaW5kZXggMjEyN2NhZS4uZTc3ZWI4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXAuaApAQCAtMjcsNyArMjcsNiBAQAogI2lmbmRlZiBJUkxBUF9ICiAjZGVmaW5lIElSTEFQX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKaW5kZXggYzBjODk1ZC4uMTFlY2ZhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaApAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAvKiBmb3IgSFogKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKICNpbmNsdWRlIDxuZXQvaXJkYS9pcmRhLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wX2ZyYW1lLmgKaW5kZXggZWIzYWQxNS4uYzQ2M2Y4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcF9mcmFtZS5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXBfZnJhbWUuaApAQCAtMjYsNyArMjYsNiBAQAogI2lmbmRlZiBJUk1MUF9GUkFNRV9ICiAjZGVmaW5lIElSTUxQX0ZSQU1FX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogCiAjaW5jbHVkZSA8bmV0L2lyZGEvZGlzY292ZXJ5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oIGIvaW5jbHVkZS9uZXQvaXJkYS9xb3MuaAppbmRleCA5YWUzZDZiLi5jYzU3N2RjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcmRhL3Fvcy5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvcW9zLmgKQEAgLTMxLDcgKzMxLDYgQEAKICNpZm5kZWYgSVJEQV9RT1NfSAogI2RlZmluZSBJUkRBX1FPU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KIAogI2luY2x1ZGUgPG5ldC9pcmRhL3BhcmFtZXRlcnMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25kaXNjLmggYi9pbmNsdWRlL25ldC9uZGlzYy5oCmluZGV4IDkxZmEyNzEuLmQzOTE1ZGFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZGlzYy5oCisrKyBiL2luY2x1ZGUvbmV0L25kaXNjLmgKQEAgLTM3LDcgKzM3LDYgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWNtcHY2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKaW5kZXggNDExMTE3OC4uMWZiZDgxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaApAQCAtMTUsNyArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wa3RfYWN0LmggYi9pbmNsdWRlL25ldC9wa3RfYWN0LmgKaW5kZXggYjIyNWQ4NC4uY2Y1ZTRkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcGt0X2FjdC5oCisrKyBiL2luY2x1ZGUvbmV0L3BrdF9hY3QuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9wcm90b2NvbC5oIGIvaW5jbHVkZS9uZXQvcHJvdG9jb2wuaAppbmRleCA2ZGM1OTcwLi5iY2FlZTM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wcm90b2NvbC5oCisrKyBiL2luY2x1ZGUvbmV0L3Byb3RvY29sLmgKQEAgLTI0LDcgKzI0LDYgQEAKICNpZm5kZWYgX1BST1RPQ09MX0gKICNkZWZpbmUgX1BST1RPQ09MX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQgKENPTkZJR19JUFY2X01PRFVMRSkKICNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yYXcuaCBiL2luY2x1ZGUvbmV0L3Jhdy5oCmluZGV4IGQ4MzU3MWYuLmU0YWY1OTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Jhdy5oCisrKyBiL2luY2x1ZGUvbmV0L3Jhdy5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9SQVdfSAogI2RlZmluZSBfUkFXX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogCiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlZC5oIGIvaW5jbHVkZS9uZXQvcmVkLmgKaW5kZXggMmVkNDM1OC4uNWNjZGJiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcmVkLmgKKysrIGIvaW5jbHVkZS9uZXQvcmVkLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTkVUX1NDSEVEX1JFRF9ICiAjZGVmaW5lIF9fTkVUX1NDSEVEX1JFRF9ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9wa3Rfc2NoZWQuaD4KICNpbmNsdWRlIDxuZXQvaW5ldF9lY24uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9pbmNsdWRlL25ldC9yb3V0ZS5oCmluZGV4IDk4YzkxNWEuLmM0YTA2ODYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMjQsNyArMjQsNiBAQAogI2lmbmRlZiBfUk9VVEVfSAogI2RlZmluZSBfUk9VVEVfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9pbmV0cGVlci5oPgogI2luY2x1ZGUgPG5ldC9mbG93Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaAppbmRleCA3YjZlYzk5Li5iMGU5MTA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKQEAgLTEsNyArMSw2IEBACiAjaWZuZGVmIF9fTkVUX1NDSEVEX0dFTkVSSUNfSAogI2RlZmluZSBfX05FVF9TQ0hFRF9HRU5FUklDX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc2N0cC5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKaW5kZXggYjJiNDBmOS4uMjM3ZjgyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmgKQEAgLTYzLDcgKzYzLDYgQEAKICAqLwogCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIFRFU1RfRlJBTUUKICN1bmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDk2NTY1ZmYuLmQxMGRmZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9zb2NrLmgKQEAgLTQwLDcgKzQwLDYgQEAKICNpZm5kZWYgX1NPQ0tfSAogI2RlZmluZSBfU09DS19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvdGNwLmggYi9pbmNsdWRlL25ldC90Y3AuaAppbmRleCBiZmM3MWY5Li41ZjRlYjVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC90Y3AuaAorKysgYi9pbmNsdWRlL25ldC90Y3AuaApAQCAtMjEsNyArMjEsNiBAQAogI2RlZmluZSBUQ1BfREVCVUcgMQogI2RlZmluZSBGQVNUUkVUUkFOU19ERUJVRyAxCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvc3MuaCBiL2luY2x1ZGUvcGNtY2lhL3NzLmgKaW5kZXggNWUwYTAxYS4uZWRlNjM5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9wY21jaWEvc3MuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9zcy5oCkBAIC0xNSw3ICsxNSw2IEBACiAjaWZuZGVmIF9MSU5VWF9TU19ICiAjZGVmaW5lIF9MSU5VWF9TU19ICiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiB0YXNrX3N0cnVjdCwgY29tcGxldGlvbiAqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCmluZGV4IDU2MjYyMjUuLjZkMjhiMDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5oCkBAIC0yNyw3ICsyNyw2IEBACiAjaWZuZGVmIFNDU0lfVFJBTlNQT1JUX0ZDX0gKICNkZWZpbmUgU0NTSV9UUkFOU1BPUlRfRkNfSAogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oIGIvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X3NwaS5oCmluZGV4IDVlMWQ2MTkuLjMwMjY4MGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX3RyYW5zcG9ydF9zcGkuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfc3BpLmgKQEAgLTIwLDcgKzIwLDYgQEAKICNpZm5kZWYgU0NTSV9UUkFOU1BPUlRfU1BJX0gKICNkZWZpbmUgU0NTSV9UUkFOU1BPUlRfU1BJX0gKIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYW5zcG9ydF9jbGFzcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvZHJpdmVyLmggYi9pbmNsdWRlL3NvdW5kL2RyaXZlci5oCmluZGV4IDg5YzZhNzMuLjNjNTIyZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc291bmQvZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9zb3VuZC9kcml2ZXIuaApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogLyogbnVtYmVyIG9mIHN1cHBvcnRlZCBzb3VuZGNhcmRzICovCiAjaWZkZWYgQ09ORklHX1NORF9EWU5BTUlDX01JTk9SUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9oZHNwLmggYi9pbmNsdWRlL3NvdW5kL2hkc3AuaAppbmRleCAyNWUxOTUxLi5kZWM2YjFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL2hkc3AuaAorKysgYi9pbmNsdWRlL3NvdW5kL2hkc3AuaApAQCAtMzAsMTMgKzMwLDEzIEBACiB9OwogCiBzdHJ1Y3QgaGRzcF9wZWFrX3JtcyB7Ci0JdTMyIGlucHV0X3BlYWtzWzI2XTsKLQl1MzIgcGxheWJhY2tfcGVha3NbMjZdOwotCXUzMiBvdXRwdXRfcGVha3NbMjhdOwotCXU2NCBpbnB1dF9ybXNbMjZdOwotCXU2NCBwbGF5YmFja19ybXNbMjZdOworCV9fdTMyIGlucHV0X3BlYWtzWzI2XTsKKwlfX3UzMiBwbGF5YmFja19wZWFrc1syNl07CisJX191MzIgb3V0cHV0X3BlYWtzWzI4XTsKKwlfX3U2NCBpbnB1dF9ybXNbMjZdOworCV9fdTY0IHBsYXliYWNrX3Jtc1syNl07CiAJLyogVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgSDk2eHggY2FyZHMgKi8KLQl1NjQgb3V0cHV0X3Jtc1syNl07CisJX191NjQgb3V0cHV0X3Jtc1syNl07CiB9OwogCiAjZGVmaW5lIFNORFJWX0hEU1BfSU9DVExfR0VUX1BFQUtfUk1TIF9JT1IoJ0gnLCAweDQwLCBzdHJ1Y3QgaGRzcF9wZWFrX3JtcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vZWRpZC5oIGIvaW5jbHVkZS92aWRlby9lZGlkLmgKaW5kZXggYjkxM2YxOS4uZjZhNDJkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9lZGlkLmgKKysrIGIvaW5jbHVkZS92aWRlby9lZGlkLmgKQEAgLTMsNyArMyw2IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KIAogI2lmZGVmIENPTkZJR19YODYKIHN0cnVjdCBlZGlkX2luZm8gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby92Z2EuaCBiL2luY2x1ZGUvdmlkZW8vdmdhLmgKaW5kZXggNzAwZDZjOC4uYjQ5YTUxMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby92Z2EuaAorKysgYi9pbmNsdWRlL3ZpZGVvL3ZnYS5oCkBAIC0xNyw3ICsxNyw2IEBACiAjaWZuZGVmIF9fbGludXhfdmlkZW9fdmdhX2hfXwogI2RlZmluZSBfX2xpbnV4X3ZpZGVvX3ZnYV9oX18KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaWZuZGVmIENPTkZJR19BTUlHQQpkaWZmIC0tZ2l0IGEvaW5pdC9LY29uZmlnIGIvaW5pdC9LY29uZmlnCmluZGV4IDNiMzZhMWQuLmRmODY0YTMgMTAwNjQ0Ci0tLSBhL2luaXQvS2NvbmZpZworKysgYi9pbml0L0tjb25maWcKQEAgLTE4Miw3ICsxODIsOCBAQAogCWhlbHAKIAkgIEVuYWJsZSBsb3ctb3ZlcmhlYWQgc3lzdGVtLWNhbGwgYXVkaXRpbmcgaW5mcmFzdHJ1Y3R1cmUgdGhhdAogCSAgY2FuIGJlIHVzZWQgaW5kZXBlbmRlbnRseSBvciB3aXRoIGFub3RoZXIga2VybmVsIHN1YnN5c3RlbSwKLQkgIHN1Y2ggYXMgU0VMaW51eC4KKwkgIHN1Y2ggYXMgU0VMaW51eC4gIFRvIHVzZSBhdWRpdCdzIGZpbGVzeXN0ZW0gd2F0Y2ggZmVhdHVyZSwgcGxlYXNlCisJICBlbnN1cmUgdGhhdCBJTk9USUZZIGlzIGNvbmZpZ3VyZWQuCiAKIGNvbmZpZyBJS0NPTkZJRwogCWJvb2wgIktlcm5lbCAuY29uZmlnIHN1cHBvcnQiCkBAIC0zODksOSArMzkwLDYgQEAKIAlkZWZhdWx0ICFTTEFCCiAJYm9vbAogCi1jb25maWcgT0JTT0xFVEVfSU5URVJNT0RVTEUKLQl0cmlzdGF0ZQotCiBtZW51ICJMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCIKIAogY29uZmlnIE1PRFVMRVMKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzLmMgYi9pbml0L2RvX21vdW50cy5jCmluZGV4IGY0YjdiOWQuLjIxYjNiOGYgMTAwNjQ0Ci0tLSBhL2luaXQvZG9fbW91bnRzLmMKKysrIGIvaW5pdC9kb19tb3VudHMuYwpAQCAtNDA5LDYgKzQwOSwxMCBAQAogCiAJaWYgKHNhdmVkX3Jvb3RfbmFtZVswXSkgewogCQlyb290X2RldmljZV9uYW1lID0gc2F2ZWRfcm9vdF9uYW1lOworCQlpZiAoIXN0cm5jbXAocm9vdF9kZXZpY2VfbmFtZSwgIm10ZCIsIDMpKSB7CisJCQltb3VudF9ibG9ja19yb290KHJvb3RfZGV2aWNlX25hbWUsIHJvb3RfbW91bnRmbGFncyk7CisJCQlnb3RvIG91dDsKKwkJfQogCQlST09UX0RFViA9IG5hbWVfdG9fZGV2X3Qocm9vdF9kZXZpY2VfbmFtZSk7CiAJCWlmIChzdHJuY21wKHJvb3RfZGV2aWNlX25hbWUsICIvZGV2LyIsIDUpID09IDApCiAJCQlyb290X2RldmljZV9uYW1lICs9IDU7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggNDFlY2JkNC4uMTUxMTcxNCAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtOCw2ICs4LDggQEAKICAqIExvY2tsZXNzIHJlY2VpdmUgJiBzZW5kLCBmZCBiYXNlZCBub3RpZnk6CiAgKiAJCQkgICAgTWFuZnJlZCBTcHJhdWwJICAgIChtYW5mcmVkQGNvbG9yZnVsbGlmZS5jb20pCiAgKgorICogQXVkaXQ6ICAgICAgICAgICAgICAgICAgIEdlb3JnZSBXaWxzb24gICAgICAgICAgIChsdGNnY3dAdXMuaWJtLmNvbSkKKyAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCkBAIC0yNCw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCkBAIC02NTcsNiArNjYwLDEwIEBACiAJY2hhciAqbmFtZTsKIAlpbnQgZmQsIGVycm9yOwogCisJZXJyb3IgPSBhdWRpdF9tcV9vcGVuKG9mbGFnLCBtb2RlLCB1X2F0dHIpOworCWlmIChlcnJvciAhPSAwKQorCQlyZXR1cm4gZXJyb3I7CisKIAlpZiAoSVNfRVJSKG5hbWUgPSBnZXRuYW1lKHVfbmFtZSkpKQogCQlyZXR1cm4gUFRSX0VSUihuYW1lKTsKIApAQCAtODE0LDYgKzgyMSwxMCBAQAogCWxvbmcgdGltZW91dDsKIAlpbnQgcmV0OwogCisJcmV0ID0gYXVkaXRfbXFfdGltZWRzZW5kKG1xZGVzLCBtc2dfbGVuLCBtc2dfcHJpbywgdV9hYnNfdGltZW91dCk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCiAJaWYgKHVubGlrZWx5KG1zZ19wcmlvID49ICh1bnNpZ25lZCBsb25nKSBNUV9QUklPX01BWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC04OTYsNiArOTA3LDEwIEBACiAJc3RydWN0IG1xdWV1ZV9pbm9kZV9pbmZvICppbmZvOwogCXN0cnVjdCBleHRfd2FpdF9xdWV1ZSB3YWl0OwogCisJcmV0ID0gYXVkaXRfbXFfdGltZWRyZWNlaXZlKG1xZGVzLCBtc2dfbGVuLCB1X21zZ19wcmlvLCB1X2Fic190aW1lb3V0KTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAl0aW1lb3V0ID0gcHJlcGFyZV90aW1lb3V0KHVfYWJzX3RpbWVvdXQpOwogCiAJcmV0ID0gLUVCQURGOwpAQCAtOTc1LDYgKzk5MCwxMCBAQAogCXN0cnVjdCBtcXVldWVfaW5vZGVfaW5mbyAqaW5mbzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbmM7CiAKKwlyZXQgPSBhdWRpdF9tcV9ub3RpZnkobXFkZXMsIHVfbm90aWZpY2F0aW9uKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKIAluYyA9IE5VTEw7CiAJc29jayA9IE5VTEw7CiAJaWYgKHVfbm90aWZpY2F0aW9uICE9IE5VTEwpIHsKQEAgLTExMTUsNiArMTEzNCw5IEBACiAJb21xc3RhdCA9IGluZm8tPmF0dHI7CiAJb21xc3RhdC5tcV9mbGFncyA9IGZpbHAtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOwogCWlmICh1X21xc3RhdCkgeworCQlyZXQgPSBhdWRpdF9tcV9nZXRzZXRhdHRyKG1xZGVzLCAmbXFzdGF0KTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBvdXQ7CiAJCWlmIChtcXN0YXQubXFfZmxhZ3MgJiBPX05PTkJMT0NLKQogCQkJZmlscC0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwogCQllbHNlCmRpZmYgLS1naXQgYS9pcGMvbXNnLmMgYi9pcGMvbXNnLmMKaW5kZXggN2QxMzQwYy4uMDBmMDE1YSAxMDA2NDQKLS0tIGEvaXBjL21zZy5jCisrKyBiL2lwYy9tc2cuYwpAQCAtNDU0LDYgKzQ1NCwxMSBAQAogCWVyciA9IGF1ZGl0X2lwY19vYmooaXBjcCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrX3VwOworCWlmIChjbWQ9PUlQQ19TRVQpIHsKKwkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKHNldGJ1Zi5xYnl0ZXMsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsIHNldGJ1Zi5tb2RlKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0X3VubG9ja191cDsKKwl9CiAKIAllcnIgPSAtRVBFUk07CiAJaWYgKGN1cnJlbnQtPmV1aWQgIT0gaXBjcC0+Y3VpZCAmJiAKQEAgLTQ2OCwxMCArNDczLDYgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgSVBDX1NFVDoKIAl7Ci0JCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybShzZXRidWYucWJ5dGVzLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSwgaXBjcCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dF91bmxvY2tfdXA7Ci0KIAkJZXJyID0gLUVQRVJNOwogCQlpZiAoc2V0YnVmLnFieXRlcyA+IG1zZ19jdGxtbmIgJiYgIWNhcGFibGUoQ0FQX1NZU19SRVNPVVJDRSkpCiAJCQlnb3RvIG91dF91bmxvY2tfdXA7CmRpZmYgLS1naXQgYS9pcGMvc2VtLmMgYi9pcGMvc2VtLmMKaW5kZXggNzkxOWY4ZS4uZmNlMGJjOCAxMDA2NDQKLS0tIGEvaXBjL3NlbS5jCisrKyBiL2lwYy9zZW0uYwpAQCAtODI4LDYgKzgyOCwxMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChjbWQgPT0gSVBDX1NFVCkgeworCQllcnIgPSBhdWRpdF9pcGNfc2V0X3Blcm0oMCwgc2V0YnVmLnVpZCwgc2V0YnVmLmdpZCwgc2V0YnVmLm1vZGUpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfdW5sb2NrOworCX0KIAlpZiAoY3VycmVudC0+ZXVpZCAhPSBpcGNwLT5jdWlkICYmIAogCSAgICBjdXJyZW50LT5ldWlkICE9IGlwY3AtPnVpZCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewogCSAgICAJZXJyPS1FUEVSTTsKQEAgLTg0NCw5ICs4NDksNiBAQAogCQllcnIgPSAwOwogCQlicmVhazsKIAljYXNlIElQQ19TRVQ6Ci0JCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybSgwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSwgaXBjcCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dF91bmxvY2s7CiAJCWlwY3AtPnVpZCA9IHNldGJ1Zi51aWQ7CiAJCWlwY3AtPmdpZCA9IHNldGJ1Zi5naWQ7CiAJCWlwY3AtPm1vZGUgPSAoaXBjcC0+bW9kZSAmIH5TX0lSV1hVR08pCmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggODA5ODk2OC4uNGYxMzNkMiAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtNjQzLDcgKzY0Myw3IEBACiAJCWVyciA9IGF1ZGl0X2lwY19vYmooJihzaHAtPnNobV9wZXJtKSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bmxvY2tfdXA7Ci0JCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybSgwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSwgJihzaHAtPnNobV9wZXJtKSk7CisJCWVyciA9IGF1ZGl0X2lwY19zZXRfcGVybSgwLCBzZXRidWYudWlkLCBzZXRidWYuZ2lkLCBzZXRidWYubW9kZSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bmxvY2tfdXA7CiAJCWVycj0tRVBFUk07CmRpZmYgLS1naXQgYS9rZXJuZWwvTWFrZWZpbGUgYi9rZXJuZWwvTWFrZWZpbGUKaW5kZXggNTg5MDhmOS4uZjZlZjAwZiAxMDA2NDQKLS0tIGEva2VybmVsL01ha2VmaWxlCisrKyBiL2tlcm5lbC9NYWtlZmlsZQpAQCAtMjAsNyArMjAsNiBAQAogb2JqLSQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKSArPSBzcGlubG9jay5vCiBvYmotJChDT05GSUdfVUlEMTYpICs9IHVpZDE2Lm8KIG9iai0kKENPTkZJR19NT0RVTEVTKSArPSBtb2R1bGUubwotb2JqLSQoQ09ORklHX09CU09MRVRFX0lOVEVSTU9EVUxFKSArPSBpbnRlcm1vZHVsZS5vCiBvYmotJChDT05GSUdfS0FMTFNZTVMpICs9IGthbGxzeW1zLm8KIG9iai0kKENPTkZJR19QTSkgKz0gcG93ZXIvCiBvYmotJChDT05GSUdfQlNEX1BST0NFU1NfQUNDVCkgKz0gYWNjdC5vCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuYyBiL2tlcm5lbC9hdWRpdC5jCmluZGV4IGRmNTdiNDkuLjdkZmFjNzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5jCisrKyBiL2tlcm5lbC9hdWRpdC5jCkBAIC01Niw2ICs1Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbm90aWZ5Lmg+CiAKICNpbmNsdWRlICJhdWRpdC5oIgogCkBAIC04OSw2ICs5MCw3IEBACiAvKiBUaGUgaWRlbnRpdHkgb2YgdGhlIHVzZXIgc2h1dHRpbmcgZG93biB0aGUgYXVkaXQgc3lzdGVtLiAqLwogdWlkX3QJCWF1ZGl0X3NpZ191aWQgPSAtMTsKIHBpZF90CQlhdWRpdF9zaWdfcGlkID0gLTE7Cit1MzIJCWF1ZGl0X3NpZ19zaWQgPSAwOwogCiAvKiBSZWNvcmRzIGNhbiBiZSBsb3N0IGluIHNldmVyYWwgd2F5czoKICAgIDApIFtzdXBwcmVzc2VkIGluIGF1ZGl0X2FsbG9jXQpAQCAtMTAyLDYgKzEwNCwxMiBAQAogLyogVGhlIG5ldGxpbmsgc29ja2V0LiAqLwogc3RhdGljIHN0cnVjdCBzb2NrICphdWRpdF9zb2NrOwogCisvKiBJbm90aWZ5IGhhbmRsZS4gKi8KK3N0cnVjdCBpbm90aWZ5X2hhbmRsZSAqYXVkaXRfaWg7CisKKy8qIEhhc2ggZm9yIGlub2RlLWJhc2VkIHJ1bGVzICovCitzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGl0X2lub2RlX2hhc2hbQVVESVRfSU5PREVfQlVDS0VUU107CisKIC8qIFRoZSBhdWRpdF9mcmVlbGlzdCBpcyBhIGxpc3Qgb2YgcHJlLWFsbG9jYXRlZCBhdWRpdCBidWZmZXJzIChpZiBtb3JlCiAgKiB0aGFuIEFVRElUX01BWEZSRUUgYXJlIGluIHVzZSwgdGhlIGF1ZGl0IGJ1ZmZlciBpcyBmcmVlZCBpbnN0ZWFkIG9mCiAgKiBiZWluZyBwbGFjZWQgb24gdGhlIGZyZWVsaXN0KS4gKi8KQEAgLTExNCwxMCArMTIyLDggQEAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChrYXVkaXRkX3dhaXQpOwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGF1ZGl0X2JhY2tsb2dfd2FpdCk7CiAKLS8qIFRoZSBuZXRsaW5rIHNvY2tldCBpcyBvbmx5IHRvIGJlIHJlYWQgYnkgMSBDUFUsIHdoaWNoIGxldHMgdXMgYXNzdW1lCi0gKiB0aGF0IGxpc3QgYWRkaXRpb25zIGFuZCBkZWxldGlvbnMgbmV2ZXIgaGFwcGVuIHNpbXVsdGFuZW91c2x5IGluCi0gKiBhdWRpdHNjLmMgKi8KLURFRklORV9NVVRFWChhdWRpdF9uZXRsaW5rX211dGV4KTsKKy8qIFNlcmlhbGl6ZSByZXF1ZXN0cyBmcm9tIHVzZXJzcGFjZS4gKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoYXVkaXRfY21kX211dGV4KTsKIAogLyogQVVESVRfQlVGU0laIGlzIHRoZSBzaXplIG9mIHRoZSB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZm9yIGZvcm1hdHRpbmcKICAqIGF1ZGl0IHJlY29yZHMuICBTaW5jZSBwcmludGsgdXNlcyBhIDEwMjQgYnl0ZSBidWZmZXIsIHRoaXMgYnVmZmVyCkBAIC0yNTAsNyArMjU2LDcgQEAKIAkJCSJhdWRpdF9yYXRlX2xpbWl0PSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCWxpbWl0LCBvbGQsIGxvZ2ludWlkKTsKIAlhdWRpdF9yYXRlX2xpbWl0ID0gbGltaXQ7Ci0JcmV0dXJuIG9sZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdWRpdF9zZXRfYmFja2xvZ19saW1pdChpbnQgbGltaXQsIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQpAQCAtMjczLDcgKzI3OSw3IEBACiAJCQkiYXVkaXRfYmFja2xvZ19saW1pdD0lZCBvbGQ9JWQgYnkgYXVpZD0ldSIsCiAJCQlsaW1pdCwgb2xkLCBsb2dpbnVpZCk7CiAJYXVkaXRfYmFja2xvZ19saW1pdCA9IGxpbWl0OwotCXJldHVybiBvbGQ7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXVkaXRfc2V0X2VuYWJsZWQoaW50IHN0YXRlLCB1aWRfdCBsb2dpbnVpZCwgdTMyIHNpZCkKQEAgLTI5OSw3ICszMDUsNyBAQAogCQkJImF1ZGl0X2VuYWJsZWQ9JWQgb2xkPSVkIGJ5IGF1aWQ9JXUiLAogCQkJc3RhdGUsIG9sZCwgbG9naW51aWQpOwogCWF1ZGl0X2VuYWJsZWQgPSBzdGF0ZTsKLQlyZXR1cm4gb2xkOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGF1ZGl0X3NldF9mYWlsdXJlKGludCBzdGF0ZSwgdWlkX3QgbG9naW51aWQsIHUzMiBzaWQpCkBAIC0zMjcsNyArMzMzLDcgQEAKIAkJCSJhdWRpdF9mYWlsdXJlPSVkIG9sZD0lZCBieSBhdWlkPSV1IiwKIAkJCXN0YXRlLCBvbGQsIGxvZ2ludWlkKTsKIAlhdWRpdF9mYWlsdXJlID0gc3RhdGU7Ci0JcmV0dXJuIG9sZDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBrYXVkaXRkX3RocmVhZCh2b2lkICpkdW1teSkKQEAgLTM2Myw5ICszNjksNTIgQEAKIAkJCXJlbW92ZV93YWl0X3F1ZXVlKCZrYXVkaXRkX3dhaXQsICZ3YWl0KTsKIAkJfQogCX0KK30KKworaW50IGF1ZGl0X3NlbmRfbGlzdCh2b2lkICpfZGVzdCkKK3sKKwlzdHJ1Y3QgYXVkaXRfbmV0bGlua19saXN0ICpkZXN0ID0gX2Rlc3Q7CisJaW50IHBpZCA9IGRlc3QtPnBpZDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJLyogd2FpdCBmb3IgcGFyZW50IHRvIGZpbmlzaCBhbmQgc2VuZCBhbiBBQ0sgKi8KKwltdXRleF9sb2NrKCZhdWRpdF9jbWRfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYXVkaXRfY21kX211dGV4KTsKKworCXdoaWxlICgoc2tiID0gX19za2JfZGVxdWV1ZSgmZGVzdC0+cSkpICE9IE5VTEwpCisJCW5ldGxpbmtfdW5pY2FzdChhdWRpdF9zb2NrLCBza2IsIHBpZCwgMCk7CisKKwlrZnJlZShkZXN0KTsKKwogCXJldHVybiAwOwogfQogCitzdHJ1Y3Qgc2tfYnVmZiAqYXVkaXRfbWFrZV9yZXBseShpbnQgcGlkLCBpbnQgc2VxLCBpbnQgdHlwZSwgaW50IGRvbmUsCisJCQkJIGludCBtdWx0aSwgdm9pZCAqcGF5bG9hZCwgaW50IHNpemUpCit7CisJc3RydWN0IHNrX2J1ZmYJKnNrYjsKKwlzdHJ1Y3Qgbmxtc2doZHIJKm5saDsKKwlpbnQJCWxlbiA9IE5MTVNHX1NQQUNFKHNpemUpOworCXZvaWQJCSpkYXRhOworCWludAkJZmxhZ3MgPSBtdWx0aSA/IE5MTV9GX01VTFRJIDogMDsKKwlpbnQJCXQgICAgID0gZG9uZSAgPyBOTE1TR19ET05FICA6IHR5cGU7CisKKwlza2IgPSBhbGxvY19za2IobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKwlubGgJCSA9IE5MTVNHX1BVVChza2IsIHBpZCwgc2VxLCB0LCBzaXplKTsKKwlubGgtPm5sbXNnX2ZsYWdzID0gZmxhZ3M7CisJZGF0YQkJID0gTkxNU0dfREFUQShubGgpOworCW1lbWNweShkYXRhLCBwYXlsb2FkLCBzaXplKTsKKwlyZXR1cm4gc2tiOworCitubG1zZ19mYWlsdXJlOgkJCS8qIFVzZWQgYnkgTkxNU0dfUFVUICovCisJaWYgKHNrYikKKwkJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5VTEw7Cit9CisKIC8qKgogICogYXVkaXRfc2VuZF9yZXBseSAtIHNlbmQgYW4gYXVkaXQgcmVwbHkgbWVzc2FnZSB2aWEgbmV0bGluawogICogQHBpZDogcHJvY2VzcyBpZCB0byBzZW5kIHJlcGx5IHRvCkBAIC0zODMsMjkgKzQzMiwxMyBAQAogCQkgICAgICB2b2lkICpwYXlsb2FkLCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZgkqc2tiOwotCXN0cnVjdCBubG1zZ2hkcgkqbmxoOwotCWludAkJbGVuID0gTkxNU0dfU1BBQ0Uoc2l6ZSk7Ci0Jdm9pZAkJKmRhdGE7Ci0JaW50CQlmbGFncyA9IG11bHRpID8gTkxNX0ZfTVVMVEkgOiAwOwotCWludAkJdCAgICAgPSBkb25lICA/IE5MTVNHX0RPTkUgIDogdHlwZTsKLQotCXNrYiA9IGFsbG9jX3NrYihsZW4sIEdGUF9LRVJORUwpOworCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIHR5cGUsIGRvbmUsIG11bHRpLCBwYXlsb2FkLCBzaXplKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwotCi0JbmxoCQkgPSBOTE1TR19QVVQoc2tiLCBwaWQsIHNlcSwgdCwgc2l6ZSk7Ci0JbmxoLT5ubG1zZ19mbGFncyA9IGZsYWdzOwotCWRhdGEJCSA9IE5MTVNHX0RBVEEobmxoKTsKLQltZW1jcHkoZGF0YSwgcGF5bG9hZCwgc2l6ZSk7Ci0KIAkvKiBJZ25vcmUgZmFpbHVyZS4gSXQnbGwgb25seSBoYXBwZW4gaWYgdGhlIHNlbmRlciBnb2VzIGF3YXksCiAJICAgYmVjYXVzZSBvdXIgdGltZW91dCBpcyBzZXQgdG8gaW5maW5pdGUuICovCiAJbmV0bGlua191bmljYXN0KGF1ZGl0X3NvY2ssIHNrYiwgcGlkLCAwKTsKIAlyZXR1cm47Ci0KLW5sbXNnX2ZhaWx1cmU6CQkJLyogVXNlZCBieSBOTE1TR19QVVQgKi8KLQlpZiAoc2tiKQotCQlrZnJlZV9za2Ioc2tiKTsKIH0KIAogLyoKQEAgLTQ1MSw3ICs0ODQsOSBAQAogCXN0cnVjdCBhdWRpdF9idWZmZXIJKmFiOwogCXUxNgkJCW1zZ190eXBlID0gbmxoLT5ubG1zZ190eXBlOwogCXVpZF90CQkJbG9naW51aWQ7IC8qIGxvZ2ludWlkIG9mIHNlbmRlciAqLwotCXN0cnVjdCBhdWRpdF9zaWdfaW5mbyAgIHNpZ19kYXRhOworCXN0cnVjdCBhdWRpdF9zaWdfaW5mbyAgICpzaWdfZGF0YTsKKwljaGFyCQkJKmN0eDsKKwl1MzIJCQlsZW47CiAKIAllcnIgPSBhdWRpdF9uZXRsaW5rX29rKE5FVExJTktfQ0Ioc2tiKS5lZmZfY2FwLCBtc2dfdHlwZSk7CiAJaWYgKGVycikKQEAgLTUwMywxMiArNTM4LDkgQEAKIAkJaWYgKHN0YXR1c19nZXQtPm1hc2sgJiBBVURJVF9TVEFUVVNfUElEKSB7CiAJCQlpbnQgb2xkICAgPSBhdWRpdF9waWQ7CiAJCQlpZiAoc2lkKSB7Ci0JCQkJY2hhciAqY3R4ID0gTlVMTDsKLQkJCQl1MzIgbGVuOwotCQkJCWludCByYzsKLQkJCQlpZiAoKHJjID0gc2VsaW51eF9jdHhpZF90b19zdHJpbmcoCisJCQkJaWYgKChlcnIgPSBzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKIAkJCQkJCXNpZCwgJmN0eCwgJmxlbikpKQotCQkJCQlyZXR1cm4gcmM7CisJCQkJCXJldHVybiBlcnI7CiAJCQkJZWxzZQogCQkJCQlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwKIAkJCQkJCUFVRElUX0NPTkZJR19DSEFOR0UsCkBAIC01MjMsMTAgKzU1NSwxMCBAQAogCQkJYXVkaXRfcGlkID0gc3RhdHVzX2dldC0+cGlkOwogCQl9CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX1JBVEVfTElNSVQpCi0JCQlhdWRpdF9zZXRfcmF0ZV9saW1pdChzdGF0dXNfZ2V0LT5yYXRlX2xpbWl0LAorCQkJZXJyID0gYXVkaXRfc2V0X3JhdGVfbGltaXQoc3RhdHVzX2dldC0+cmF0ZV9saW1pdCwKIAkJCQkJCQkgbG9naW51aWQsIHNpZCk7CiAJCWlmIChzdGF0dXNfZ2V0LT5tYXNrICYgQVVESVRfU1RBVFVTX0JBQ0tMT0dfTElNSVQpCi0JCQlhdWRpdF9zZXRfYmFja2xvZ19saW1pdChzdGF0dXNfZ2V0LT5iYWNrbG9nX2xpbWl0LAorCQkJZXJyID0gYXVkaXRfc2V0X2JhY2tsb2dfbGltaXQoc3RhdHVzX2dldC0+YmFja2xvZ19saW1pdCwKIAkJCQkJCQlsb2dpbnVpZCwgc2lkKTsKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9VU0VSOgpAQCAtNTQ0LDggKzU3Niw2IEBACiAJCQkJCQkgInVzZXIgcGlkPSVkIHVpZD0ldSBhdWlkPSV1IiwKIAkJCQkJCSBwaWQsIHVpZCwgbG9naW51aWQpOwogCQkJCWlmIChzaWQpIHsKLQkJCQkJY2hhciAqY3R4ID0gTlVMTDsKLQkJCQkJdTMyIGxlbjsKIAkJCQkJaWYgKHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKAogCQkJCQkJCXNpZCwgJmN0eCwgJmxlbikpIHsKIAkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsIApAQCAtNTg0LDEwICs2MTQsMjEgQEAKIAkJCQkJICAgbG9naW51aWQsIHNpZCk7CiAJCWJyZWFrOwogCWNhc2UgQVVESVRfU0lHTkFMX0lORk86Ci0JCXNpZ19kYXRhLnVpZCA9IGF1ZGl0X3NpZ191aWQ7Ci0JCXNpZ19kYXRhLnBpZCA9IGF1ZGl0X3NpZ19waWQ7CisJCWVyciA9IHNlbGludXhfY3R4aWRfdG9fc3RyaW5nKGF1ZGl0X3NpZ19zaWQsICZjdHgsICZsZW4pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJc2lnX2RhdGEgPSBrbWFsbG9jKHNpemVvZigqc2lnX2RhdGEpICsgbGVuLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFzaWdfZGF0YSkgeworCQkJa2ZyZWUoY3R4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXNpZ19kYXRhLT51aWQgPSBhdWRpdF9zaWdfdWlkOworCQlzaWdfZGF0YS0+cGlkID0gYXVkaXRfc2lnX3BpZDsKKwkJbWVtY3B5KHNpZ19kYXRhLT5jdHgsIGN0eCwgbGVuKTsKKwkJa2ZyZWUoY3R4KTsKIAkJYXVkaXRfc2VuZF9yZXBseShORVRMSU5LX0NCKHNrYikucGlkLCBzZXEsIEFVRElUX1NJR05BTF9JTkZPLCAKLQkJCQkwLCAwLCAmc2lnX2RhdGEsIHNpemVvZihzaWdfZGF0YSkpOworCQkJCTAsIDAsIHNpZ19kYXRhLCBzaXplb2YoKnNpZ19kYXRhKSArIGxlbik7CisJCWtmcmVlKHNpZ19kYXRhKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZXJyID0gLUVJTlZBTDsKQEAgLTYyOSwyMCArNjcwLDMwIEBACiAJc3RydWN0IHNrX2J1ZmYgICpza2I7CiAJdW5zaWduZWQgaW50IHFsZW47CiAKLQltdXRleF9sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKKwltdXRleF9sb2NrKCZhdWRpdF9jbWRfbXV0ZXgpOwogCiAJZm9yIChxbGVuID0gc2tiX3F1ZXVlX2xlbigmc2stPnNrX3JlY2VpdmVfcXVldWUpOyBxbGVuOyBxbGVuLS0pIHsKIAkJc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKTsKIAkJYXVkaXRfcmVjZWl2ZV9za2Ioc2tiKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJfQotCW11dGV4X3VubG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9jbWRfbXV0ZXgpOwogfQogCisjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAorc3RhdGljIGNvbnN0IHN0cnVjdCBpbm90aWZ5X29wZXJhdGlvbnMgYXVkaXRfaW5vdGlmeV9vcHMgPSB7CisJLmhhbmRsZV9ldmVudAk9IGF1ZGl0X2hhbmRsZV9pZXZlbnQsCisJLmRlc3Ryb3lfd2F0Y2gJPSBhdWRpdF9mcmVlX3BhcmVudCwKK307CisjZW5kaWYKIAogLyogSW5pdGlhbGl6ZSBhdWRpdCBzdXBwb3J0IGF0IGJvb3QgdGltZS4gKi8KIHN0YXRpYyBpbnQgX19pbml0IGF1ZGl0X2luaXQodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCisJaW50IGk7CisjZW5kaWYKKwogCXByaW50ayhLRVJOX0lORk8gImF1ZGl0OiBpbml0aWFsaXppbmcgbmV0bGluayBzb2NrZXQgKCVzKVxuIiwKIAkgICAgICAgYXVkaXRfZGVmYXVsdCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOwogCWF1ZGl0X3NvY2sgPSBuZXRsaW5rX2tlcm5lbF9jcmVhdGUoTkVUTElOS19BVURJVCwgMCwgYXVkaXRfcmVjZWl2ZSwKQEAgLTY2MSw2ICs3MTIsMTYgQEAKIAlzZWxpbnV4X2F1ZGl0X3NldF9jYWxsYmFjaygmc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSk7CiAKIAlhdWRpdF9sb2coTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfS0VSTkVMLCAiaW5pdGlhbGl6ZWQiKTsKKworI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKKwlhdWRpdF9paCA9IGlub3RpZnlfaW5pdCgmYXVkaXRfaW5vdGlmeV9vcHMpOworCWlmIChJU19FUlIoYXVkaXRfaWgpKQorCQlhdWRpdF9wYW5pYygiY2Fubm90IGluaXRpYWxpemUgaW5vdGlmeSBoYW5kbGUiKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVURJVF9JTk9ERV9CVUNLRVRTOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZhdWRpdF9pbm9kZV9oYXNoW2ldKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiBfX2luaXRjYWxsKGF1ZGl0X2luaXQpOwpAQCAtNjkwLDEwICs3NTEsMTIgQEAKIAkJa2ZyZWVfc2tiKGFiLT5za2IpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmF1ZGl0X2ZyZWVsaXN0X2xvY2ssIGZsYWdzKTsKLQlpZiAoKythdWRpdF9mcmVlbGlzdF9jb3VudCA+IEFVRElUX01BWEZSRUUpCisJaWYgKGF1ZGl0X2ZyZWVsaXN0X2NvdW50ID4gQVVESVRfTUFYRlJFRSkKIAkJa2ZyZWUoYWIpOwotCWVsc2UKKwllbHNlIHsKKwkJYXVkaXRfZnJlZWxpc3RfY291bnQrKzsKIAkJbGlzdF9hZGQoJmFiLT5saXN0LCAmYXVkaXRfZnJlZWxpc3QpOworCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdWRpdF9mcmVlbGlzdF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTk4OCwyOCArMTA1MSw3NiBAQAogCXNrYl9wdXQoc2tiLCBsZW4gPDwgMSk7IC8qIG5ldyBzdHJpbmcgaXMgdHdpY2UgdGhlIG9sZCBzdHJpbmcgKi8KIH0KIAorLyoKKyAqIEZvcm1hdCBhIHN0cmluZyBvZiBubyBtb3JlIHRoYW4gc2xlbiBjaGFyYWN0ZXJzIGludG8gdGhlIGF1ZGl0IGJ1ZmZlciwKKyAqIGVuY2xvc2VkIGluIHF1b3RlIG1hcmtzLgorICovCitzdGF0aWMgdm9pZCBhdWRpdF9sb2dfbl9zdHJpbmcoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIHNpemVfdCBzbGVuLAorCQkJICAgICAgIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlpbnQgYXZhaWwsIG5ld19sZW47CisJdW5zaWduZWQgY2hhciAqcHRyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlCVUdfT04oIWFiLT5za2IpOworCXNrYiA9IGFiLT5za2I7CisJYXZhaWwgPSBza2JfdGFpbHJvb20oc2tiKTsKKwluZXdfbGVuID0gc2xlbiArIDM7CS8qIGVuY2xvc2luZyBxdW90ZXMgKyBudWxsIHRlcm1pbmF0b3IgKi8KKwlpZiAobmV3X2xlbiA+IGF2YWlsKSB7CisJCWF2YWlsID0gYXVkaXRfZXhwYW5kKGFiLCBuZXdfbGVuKTsKKwkJaWYgKCFhdmFpbCkKKwkJCXJldHVybjsKKwl9CisJcHRyID0gc2tiLT50YWlsOworCSpwdHIrKyA9ICciJzsKKwltZW1jcHkocHRyLCBzdHJpbmcsIHNsZW4pOworCXB0ciArPSBzbGVuOworCSpwdHIrKyA9ICciJzsKKwkqcHRyID0gMDsKKwlza2JfcHV0KHNrYiwgc2xlbiArIDIpOwkvKiBkb24ndCBpbmNsdWRlIG51bGwgdGVybWluYXRvciAqLworfQorCiAvKioKLSAqIGF1ZGl0X2xvZ191bnN0cnVzdGVkc3RyaW5nIC0gbG9nIGEgc3RyaW5nIHRoYXQgbWF5IGNvbnRhaW4gcmFuZG9tIGNoYXJhY3RlcnMKKyAqIGF1ZGl0X2xvZ19uX3Vuc3RydXN0ZWRzdHJpbmcgLSBsb2cgYSBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiByYW5kb20gY2hhcmFjdGVycwogICogQGFiOiBhdWRpdF9idWZmZXIKKyAqIEBsZW46IGxlbnRoIG9mIHN0cmluZyAobm90IGluY2x1ZGluZyB0cmFpbGluZyBudWxsKQogICogQHN0cmluZzogc3RyaW5nIHRvIGJlIGxvZ2dlZAogICoKICAqIFRoaXMgY29kZSB3aWxsIGVzY2FwZSBhIHN0cmluZyB0aGF0IGlzIHBhc3NlZCB0byBpdCBpZiB0aGUgc3RyaW5nCiAgKiBjb250YWlucyBhIGNvbnRyb2wgY2hhcmFjdGVyLCB1bnByaW50YWJsZSBjaGFyYWN0ZXIsIGRvdWJsZSBxdW90ZSBtYXJrLAogICogb3IgYSBzcGFjZS4gVW5lc2NhcGVkIHN0cmluZ3Mgd2lsbCBzdGFydCBhbmQgZW5kIHdpdGggYSBkb3VibGUgcXVvdGUgbWFyay4KICAqIFN0cmluZ3MgdGhhdCBhcmUgZXNjYXBlZCBhcmUgcHJpbnRlZCBpbiBoZXggKDIgZGlnaXRzIHBlciBjaGFyKS4KKyAqCisgKiBUaGUgY2FsbGVyIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyB0byBsb2csIHdoaWNoIG1heQorICogb3IgbWF5IG5vdCBiZSB0aGUgZW50aXJlIHN0cmluZy4KICAqLwotdm9pZCBhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKHN0cnVjdCBhdWRpdF9idWZmZXIgKmFiLCBjb25zdCBjaGFyICpzdHJpbmcpCitjb25zdCBjaGFyICphdWRpdF9sb2dfbl91bnRydXN0ZWRzdHJpbmcoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIHNpemVfdCBsZW4sCisJCQkJCWNvbnN0IGNoYXIgKnN0cmluZykKIHsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpwID0gc3RyaW5nOwogCiAJd2hpbGUgKCpwKSB7CiAJCWlmICgqcCA9PSAnIicgfHwgKnAgPCAweDIxIHx8ICpwID4gMHg3ZikgewotCQkJYXVkaXRfbG9nX2hleChhYiwgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7Ci0JCQlyZXR1cm47CisJCQlhdWRpdF9sb2dfaGV4KGFiLCBzdHJpbmcsIGxlbik7CisJCQlyZXR1cm4gc3RyaW5nICsgbGVuICsgMTsKIAkJfQogCQlwKys7CiAJfQotCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJcIiVzXCIiLCBzdHJpbmcpOworCWF1ZGl0X2xvZ19uX3N0cmluZyhhYiwgbGVuLCBzdHJpbmcpOworCXJldHVybiBwICsgMTsKK30KKworLyoqCisgKiBhdWRpdF9sb2dfdW5zdHJ1c3RlZHN0cmluZyAtIGxvZyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIHJhbmRvbSBjaGFyYWN0ZXJzCisgKiBAYWI6IGF1ZGl0X2J1ZmZlcgorICogQHN0cmluZzogc3RyaW5nIHRvIGJlIGxvZ2dlZAorICoKKyAqIFNhbWUgYXMgYXVkaXRfbG9nX25fdW5zdHJ1c3RlZHN0cmluZygpLCBleGNlcHQgdGhhdCBzdHJsZW4gaXMgdXNlZCB0bworICogZGV0ZXJtaW5lIHN0cmluZyBsZW5ndGguCisgKi8KK2NvbnN0IGNoYXIgKmF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWIsIGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKwlyZXR1cm4gYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nKGFiLCBzdHJsZW4oc3RyaW5nKSwgc3RyaW5nKTsKIH0KIAogLyogVGhpcyBpcyBhIGhlbHBlci1mdW5jdGlvbiB0byBwcmludCB0aGUgZXNjYXBlZCBkX3BhdGggKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5oIGIva2VybmVsL2F1ZGl0LmgKaW5kZXggNmY3MzM5Mi4uODMyM2U0MSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmgKKysrIGIva2VybmVsL2F1ZGl0LmgKQEAgLTE5LDkgKzE5LDkgQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqLwogCi0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKIC8qIDAgPSBubyBjaGVja2luZwogICAgMSA9IHB1dF9jb3VudCBjaGVja2luZwpAQCAtNTMsNiArNTMsMTggQEAKIH07CiAKIC8qIFJ1bGUgbGlzdHMgKi8KK3N0cnVjdCBhdWRpdF9wYXJlbnQ7CisKK3N0cnVjdCBhdWRpdF93YXRjaCB7CisJYXRvbWljX3QJCWNvdW50OwkvKiByZWZlcmVuY2UgY291bnQgKi8KKwljaGFyCQkJKnBhdGg7CS8qIGluc2VydGlvbiBwYXRoICovCisJZGV2X3QJCQlkZXY7CS8qIGFzc29jaWF0ZWQgc3VwZXJibG9jayBkZXZpY2UgKi8KKwl1bnNpZ25lZCBsb25nCQlpbm87CS8qIGFzc29jaWF0ZWQgaW5vZGUgbnVtYmVyICovCisJc3RydWN0IGF1ZGl0X3BhcmVudAkqcGFyZW50OyAvKiBhc3NvY2lhdGVkIHBhcmVudCAqLworCXN0cnVjdCBsaXN0X2hlYWQJd2xpc3Q7CS8qIGVudHJ5IGluIHBhcmVudC0+d2F0Y2hlcyBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAlydWxlczsJLyogYXNzb2NpYXRlZCBydWxlcyAqLworfTsKKwogc3RydWN0IGF1ZGl0X2ZpZWxkIHsKIAl1MzIJCQkJdHlwZTsKIAl1MzIJCQkJdmFsOwpAQCAtNzAsNiArODIsOSBAQAogCXUzMgkJCWJ1ZmxlbjsgLyogZm9yIGRhdGEgYWxsb2Mgb24gbGlzdCBydWxlcyAqLwogCXUzMgkJCWZpZWxkX2NvdW50OwogCXN0cnVjdCBhdWRpdF9maWVsZAkqZmllbGRzOworCXN0cnVjdCBhdWRpdF9maWVsZAkqaW5vZGVfZjsgLyogcXVpY2sgYWNjZXNzIHRvIGFuIGlub2RlIGZpZWxkICovCisJc3RydWN0IGF1ZGl0X3dhdGNoCSp3YXRjaDsJLyogYXNzb2NpYXRlZCB3YXRjaCAqLworCXN0cnVjdCBsaXN0X2hlYWQJcmxpc3Q7CS8qIGVudHJ5IGluIGF1ZGl0X3dhdGNoLnJ1bGVzIGxpc3QgKi8KIH07CiAKIHN0cnVjdCBhdWRpdF9lbnRyeSB7CkBAIC03OCwxNSArOTMsNTMgQEAKIAlzdHJ1Y3QgYXVkaXRfa3J1bGUJcnVsZTsKIH07CiAKLQogZXh0ZXJuIGludCBhdWRpdF9waWQ7Ci1leHRlcm4gaW50IGF1ZGl0X2NvbXBhcmF0b3IoY29uc3QgdTMyIGxlZnQsIGNvbnN0IHUzMiBvcCwgY29uc3QgdTMyIHJpZ2h0KTsKIAorI2RlZmluZSBBVURJVF9JTk9ERV9CVUNLRVRTCTMyCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBhdWRpdF9pbm9kZV9oYXNoW0FVRElUX0lOT0RFX0JVQ0tFVFNdOworCitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9oYXNoX2lubyh1MzIgaW5vKQoreworCXJldHVybiAoaW5vICYgKEFVRElUX0lOT0RFX0JVQ0tFVFMtMSkpOworfQorCitleHRlcm4gaW50IGF1ZGl0X2NvbXBhcmF0b3IoY29uc3QgdTMyIGxlZnQsIGNvbnN0IHUzMiBvcCwgY29uc3QgdTMyIHJpZ2h0KTsKK2V4dGVybiBpbnQgYXVkaXRfY29tcGFyZV9kbmFtZV9wYXRoKGNvbnN0IGNoYXIgKmRuYW1lLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgICBpbnQgKmRpcmxlbik7CitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKgkgICAgYXVkaXRfbWFrZV9yZXBseShpbnQgcGlkLCBpbnQgc2VxLCBpbnQgdHlwZSwKKwkJCQkJICAgICBpbnQgZG9uZSwgaW50IG11bHRpLAorCQkJCQkgICAgIHZvaWQgKnBheWxvYWQsIGludCBzaXplKTsKIGV4dGVybiB2b2lkCQkgICAgYXVkaXRfc2VuZF9yZXBseShpbnQgcGlkLCBpbnQgc2VxLCBpbnQgdHlwZSwKIAkJCQkJICAgICBpbnQgZG9uZSwgaW50IG11bHRpLAogCQkJCQkgICAgIHZvaWQgKnBheWxvYWQsIGludCBzaXplKTsKIGV4dGVybiB2b2lkCQkgICAgYXVkaXRfbG9nX2xvc3QoY29uc3QgY2hhciAqbWVzc2FnZSk7CiBleHRlcm4gdm9pZAkJICAgIGF1ZGl0X3BhbmljKGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwotZXh0ZXJuIHN0cnVjdCBtdXRleCBhdWRpdF9uZXRsaW5rX211dGV4OwogCitzdHJ1Y3QgYXVkaXRfbmV0bGlua19saXN0IHsKKwlpbnQgcGlkOworCXN0cnVjdCBza19idWZmX2hlYWQgcTsKK307CisKK2ludCBhdWRpdF9zZW5kX2xpc3Qodm9pZCAqKTsKKworc3RydWN0IGlub3RpZnlfd2F0Y2g7CitleHRlcm4gdm9pZCBhdWRpdF9mcmVlX3BhcmVudChzdHJ1Y3QgaW5vdGlmeV93YXRjaCAqKTsKK2V4dGVybiB2b2lkIGF1ZGl0X2hhbmRsZV9pZXZlbnQoc3RydWN0IGlub3RpZnlfd2F0Y2ggKiwgdTMyLCB1MzIsIHUzMiwKKwkJCQljb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgc2VsaW51eF9hdWRpdF9ydWxlX3VwZGF0ZSh2b2lkKTsKKworI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKK2V4dGVybiB2b2lkIF9fYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9zaWduYWxfaW5mbyhpbnQgc2lnLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpCit7CisJaWYgKHVubGlrZWx5KGF1ZGl0X3BpZCAmJiB0LT50Z2lkID09IGF1ZGl0X3BpZCkpCisJCV9fYXVkaXRfc2lnbmFsX2luZm8oc2lnLCB0KTsKK30KK2V4dGVybiBlbnVtIGF1ZGl0X3N0YXRlIGF1ZGl0X2ZpbHRlcl9pbm9kZXMoc3RydWN0IHRhc2tfc3RydWN0ICosCisJCQkJCSAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqKTsKK2V4dGVybiB2b2lkIGF1ZGl0X3NldF9hdWRpdGFibGUoc3RydWN0IGF1ZGl0X2NvbnRleHQgKik7CisjZWxzZQorI2RlZmluZSBhdWRpdF9zaWduYWxfaW5mbyhzLHQpCisjZGVmaW5lIGF1ZGl0X2ZpbHRlcl9pbm9kZXModCxjKSBBVURJVF9ESVNBQkxFRAorI2RlZmluZSBhdWRpdF9zZXRfYXVkaXRhYmxlKGMpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggN2MxMzQ5MC4uNGM5OWQyYyAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMKKysrIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKQEAgLTIyLDEzICsyMiw1OSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWxpbnV4Lmg+CiAjaW5jbHVkZSAiYXVkaXQuaCIKIAotLyogVGhlcmUgYXJlIHRocmVlIGxpc3RzIG9mIHJ1bGVzIC0tIG9uZSB0byBzZWFyY2ggYXQgdGFzayBjcmVhdGlvbgotICogdGltZSwgb25lIHRvIHNlYXJjaCBhdCBzeXNjYWxsIGVudHJ5IHRpbWUsIGFuZCBhbm90aGVyIHRvIHNlYXJjaCBhdAotICogc3lzY2FsbCBleGl0IHRpbWUuICovCisvKgorICogTG9ja2luZyBtb2RlbDoKKyAqCisgKiBhdWRpdF9maWx0ZXJfbXV0ZXg6CisgKiAJCVN5bmNocm9uaXplcyB3cml0ZXMgYW5kIGJsb2NraW5nIHJlYWRzIG9mIGF1ZGl0J3MgZmlsdGVybGlzdAorICogCQlkYXRhLiAgUmN1IGlzIHVzZWQgdG8gdHJhdmVyc2UgdGhlIGZpbHRlcmxpc3QgYW5kIGFjY2VzcworICogCQljb250ZW50cyBvZiBzdHJ1Y3RzIGF1ZGl0X2VudHJ5LCBhdWRpdF93YXRjaCBhbmQgb3BhcXVlCisgKiAJCXNlbGludXggcnVsZXMgZHVyaW5nIGZpbHRlcmluZy4gIElmIG1vZGlmaWVkLCB0aGVzZSBzdHJ1Y3R1cmVzCisgKiAJCW11c3QgYmUgY29waWVkIGFuZCByZXBsYWNlIHRoZWlyIGNvdW50ZXJwYXJ0cyBpbiB0aGUgZmlsdGVybGlzdC4KKyAqIAkJQW4gYXVkaXRfcGFyZW50IHN0cnVjdCBpcyBub3QgYWNjZXNzZWQgZHVyaW5nIGZpbHRlcmluZywgc28gbWF5CisgKiAJCWJlIHdyaXR0ZW4gZGlyZWN0bHkgcHJvdmlkZWQgYXVkaXRfZmlsdGVyX211dGV4IGlzIGhlbGQuCisgKi8KKworLyoKKyAqIFJlZmVyZW5jZSBjb3VudGluZzoKKyAqCisgKiBhdWRpdF9wYXJlbnQ6IGxpZmV0aW1lIGlzIGZyb20gYXVkaXRfaW5pdF9wYXJlbnQoKSB0byByZWNlaXB0IG9mIGFuIElOX0lHTk9SRUQKKyAqIAlldmVudC4gIEVhY2ggYXVkaXRfd2F0Y2ggaG9sZHMgYSByZWZlcmVuY2UgdG8gaXRzIGFzc29jaWF0ZWQgcGFyZW50LgorICoKKyAqIGF1ZGl0X3dhdGNoOiBpZiBhZGRlZCB0byBsaXN0cywgbGlmZXRpbWUgaXMgZnJvbSBhdWRpdF9pbml0X3dhdGNoKCkgdG8KKyAqIAlhdWRpdF9yZW1vdmVfd2F0Y2goKS4gIEFkZGl0aW9uYWxseSwgYW4gYXVkaXRfd2F0Y2ggbWF5IGV4aXN0CisgKiAJdGVtcG9yYXJpbHkgdG8gYXNzaXN0IGluIHNlYXJjaGluZyBleGlzdGluZyBmaWx0ZXIgZGF0YS4gIEVhY2gKKyAqIAlhdWRpdF9rcnVsZSBob2xkcyBhIHJlZmVyZW5jZSB0byBpdHMgYXNzb2NpYXRlZCB3YXRjaC4KKyAqLworCitzdHJ1Y3QgYXVkaXRfcGFyZW50IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWlsaXN0OwkvKiBlbnRyeSBpbiBpbm90aWZ5IHJlZ2lzdHJhdGlvbiBsaXN0ICovCisJc3RydWN0IGxpc3RfaGVhZAl3YXRjaGVzOyAvKiBhc3NvY2lhdGVkIHdhdGNoZXMgKi8KKwlzdHJ1Y3QgaW5vdGlmeV93YXRjaAl3ZGF0YTsJLyogaW5vdGlmeSB3YXRjaCBkYXRhICovCisJdW5zaWduZWQJCWZsYWdzOwkvKiBzdGF0dXMgZmxhZ3MgKi8KK307CisKKy8qCisgKiBhdWRpdF9wYXJlbnQgc3RhdHVzIGZsYWdzOgorICoKKyAqIEFVRElUX1BBUkVOVF9JTlZBTElEIC0gc2V0IGFueXRpbWUgcnVsZXMvd2F0Y2hlcyBhcmUgYXV0by1yZW1vdmVkIGR1ZSB0bworICogYSBmaWxlc3lzdGVtIGV2ZW50IHRvIGVuc3VyZSB3ZSdyZSBhZGRpbmcgYXVkaXQgd2F0Y2hlcyB0byBhIHZhbGlkIHBhcmVudC4KKyAqIFRlY2huaWNhbGx5IG5vdCBuZWVkZWQgZm9yIElOX0RFTEVURV9TRUxGIG9yIElOX1VOTU9VTlQgZXZlbnRzLCBhcyB3ZSBjYW5ub3QKKyAqIHJlY2VpdmUgdGhlbSB3aGlsZSB3ZSBoYXZlIG5hbWVpZGF0YSwgYnV0IG11c3QgYmUgdXNlZCBmb3IgSU5fTU9WRV9TRUxGIHdoaWNoCisgKiB3ZSBjYW4gcmVjZWl2ZSB3aGlsZSBob2xkaW5nIG5hbWVpZGF0YS4KKyAqLworI2RlZmluZSBBVURJVF9QQVJFTlRfSU5WQUxJRAkweDAwMQorCisvKiBBdWRpdCBmaWx0ZXIgbGlzdHMsIGRlZmluZWQgaW4gPGxpbnV4L2F1ZGl0Lmg+ICovCiBzdHJ1Y3QgbGlzdF9oZWFkIGF1ZGl0X2ZpbHRlcl9saXN0W0FVRElUX05SX0ZJTFRFUlNdID0gewogCUxJU1RfSEVBRF9JTklUKGF1ZGl0X2ZpbHRlcl9saXN0WzBdKSwKIAlMSVNUX0hFQURfSU5JVChhdWRpdF9maWx0ZXJfbGlzdFsxXSksCkBAIC00MSw5ICs4Nyw1MyBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgREVGSU5FX01VVEVYKGF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKy8qIElub3RpZnkgaGFuZGxlICovCitleHRlcm4gc3RydWN0IGlub3RpZnlfaGFuZGxlICphdWRpdF9paDsKKworLyogSW5vdGlmeSBldmVudHMgd2UgY2FyZSBhYm91dC4gKi8KKyNkZWZpbmUgQVVESVRfSU5fV0FUQ0ggSU5fTU9WRXxJTl9DUkVBVEV8SU5fREVMRVRFfElOX0RFTEVURV9TRUxGfElOX01PVkVfU0VMRgorCit2b2lkIGF1ZGl0X2ZyZWVfcGFyZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICppX3dhdGNoKQoreworCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKKworCXBhcmVudCA9IGNvbnRhaW5lcl9vZihpX3dhdGNoLCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCB3ZGF0YSk7CisJV0FSTl9PTighbGlzdF9lbXB0eSgmcGFyZW50LT53YXRjaGVzKSk7CisJa2ZyZWUocGFyZW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2dldF93YXRjaChzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoKQoreworCWF0b21pY19pbmMoJndhdGNoLT5jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIGF1ZGl0X3B1dF93YXRjaChzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZ3YXRjaC0+Y291bnQpKSB7CisJCVdBUk5fT04od2F0Y2gtPnBhcmVudCk7CisJCVdBUk5fT04oIWxpc3RfZW1wdHkoJndhdGNoLT5ydWxlcykpOworCQlrZnJlZSh3YXRjaC0+cGF0aCk7CisJCWtmcmVlKHdhdGNoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGF1ZGl0X3JlbW92ZV93YXRjaChzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoKQoreworCWxpc3RfZGVsKCZ3YXRjaC0+d2xpc3QpOworCXB1dF9pbm90aWZ5X3dhdGNoKCZ3YXRjaC0+cGFyZW50LT53ZGF0YSk7CisJd2F0Y2gtPnBhcmVudCA9IE5VTEw7CisJYXVkaXRfcHV0X3dhdGNoKHdhdGNoKTsgLyogbWF0Y2ggaW5pdGlhbCBnZXQgKi8KK30KKwogc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2ZyZWVfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmUpCiB7CiAJaW50IGk7CisKKwkvKiBzb21lIHJ1bGVzIGRvbid0IGhhdmUgYXNzb2NpYXRlZCB3YXRjaGVzICovCisJaWYgKGUtPnJ1bGUud2F0Y2gpCisJCWF1ZGl0X3B1dF93YXRjaChlLT5ydWxlLndhdGNoKTsKIAlpZiAoZS0+cnVsZS5maWVsZHMpCiAJCWZvciAoaSA9IDA7IGkgPCBlLT5ydWxlLmZpZWxkX2NvdW50OyBpKyspIHsKIAkJCXN0cnVjdCBhdWRpdF9maWVsZCAqZiA9ICZlLT5ydWxlLmZpZWxkc1tpXTsKQEAgLTYwLDYgKzE1MCw1MCBAQAogCWF1ZGl0X2ZyZWVfcnVsZShlKTsKIH0KIAorLyogSW5pdGlhbGl6ZSBhIHBhcmVudCB3YXRjaCBlbnRyeS4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXVkaXRfcGFyZW50ICphdWRpdF9pbml0X3BhcmVudChzdHJ1Y3QgbmFtZWlkYXRhICpuZHApCit7CisJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50OworCXMzMiB3ZDsKKworCXBhcmVudCA9IGt6YWxsb2Moc2l6ZW9mKCpwYXJlbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXBhcmVudCkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJSU5JVF9MSVNUX0hFQUQoJnBhcmVudC0+d2F0Y2hlcyk7CisJcGFyZW50LT5mbGFncyA9IDA7CisKKwlpbm90aWZ5X2luaXRfd2F0Y2goJnBhcmVudC0+d2RhdGEpOworCS8qIGdyYWIgYSByZWYgc28gaW5vdGlmeSB3YXRjaCBoYW5ncyBhcm91bmQgdW50aWwgd2UgdGFrZSBhdWRpdF9maWx0ZXJfbXV0ZXggKi8KKwlnZXRfaW5vdGlmeV93YXRjaCgmcGFyZW50LT53ZGF0YSk7CisJd2QgPSBpbm90aWZ5X2FkZF93YXRjaChhdWRpdF9paCwgJnBhcmVudC0+d2RhdGEsIG5kcC0+ZGVudHJ5LT5kX2lub2RlLAorCQkJICAgICAgIEFVRElUX0lOX1dBVENIKTsKKwlpZiAod2QgPCAwKSB7CisJCWF1ZGl0X2ZyZWVfcGFyZW50KCZwYXJlbnQtPndkYXRhKTsKKwkJcmV0dXJuIEVSUl9QVFIod2QpOworCX0KKworCXJldHVybiBwYXJlbnQ7Cit9CisKKy8qIEluaXRpYWxpemUgYSB3YXRjaCBlbnRyeS4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXVkaXRfd2F0Y2ggKmF1ZGl0X2luaXRfd2F0Y2goY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoOworCisJd2F0Y2ggPSBremFsbG9jKHNpemVvZigqd2F0Y2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXdhdGNoKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlJTklUX0xJU1RfSEVBRCgmd2F0Y2gtPnJ1bGVzKTsKKwlhdG9taWNfc2V0KCZ3YXRjaC0+Y291bnQsIDEpOworCXdhdGNoLT5wYXRoID0gcGF0aDsKKwl3YXRjaC0+ZGV2ID0gKGRldl90KS0xOworCXdhdGNoLT5pbm8gPSAodW5zaWduZWQgbG9uZyktMTsKKworCXJldHVybiB3YXRjaDsKK30KKwogLyogSW5pdGlhbGl6ZSBhbiBhdWRpdCBmaWx0ZXJsaXN0IGVudHJ5LiAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X2luaXRfZW50cnkodTMyIGZpZWxkX2NvdW50KQogewpAQCAtMTA3LDYgKzI0MSw0MyBAQAogCXJldHVybiBzdHI7CiB9CiAKKy8qIFRyYW5zbGF0ZSBhbiBpbm9kZSBmaWVsZCB0byBrZXJuZWwgcmVzcHJlc2VudGF0aW9uLiAqLworc3RhdGljIGlubGluZSBpbnQgYXVkaXRfdG9faW5vZGUoc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSwKKwkJCQkgc3RydWN0IGF1ZGl0X2ZpZWxkICpmKQoreworCWlmIChrcnVsZS0+bGlzdG5yICE9IEFVRElUX0ZJTFRFUl9FWElUIHx8CisJICAgIGtydWxlLT53YXRjaCB8fCBrcnVsZS0+aW5vZGVfZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlrcnVsZS0+aW5vZGVfZiA9IGY7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRyYW5zbGF0ZSBhIHdhdGNoIHN0cmluZyB0byBrZXJuZWwgcmVzcHJlc2VudGF0aW9uLiAqLworc3RhdGljIGludCBhdWRpdF90b193YXRjaChzdHJ1Y3QgYXVkaXRfa3J1bGUgKmtydWxlLCBjaGFyICpwYXRoLCBpbnQgbGVuLAorCQkJICB1MzIgb3ApCit7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaDsKKworCWlmICghYXVkaXRfaWgpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChwYXRoWzBdICE9ICcvJyB8fCBwYXRoW2xlbi0xXSA9PSAnLycgfHwKKwkgICAga3J1bGUtPmxpc3RuciAhPSBBVURJVF9GSUxURVJfRVhJVCB8fAorCSAgICBvcCAmIH5BVURJVF9FUVVBTCB8fAorCSAgICBrcnVsZS0+aW5vZGVfZiB8fCBrcnVsZS0+d2F0Y2gpIC8qIDEgaW5vZGUgIyBwZXIgcnVsZSwgZm9yIGhhc2ggKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3YXRjaCA9IGF1ZGl0X2luaXRfd2F0Y2gocGF0aCk7CisJaWYgKHVubGlrZWx5KElTX0VSUih3YXRjaCkpKQorCQlyZXR1cm4gUFRSX0VSUih3YXRjaCk7CisKKwlhdWRpdF9nZXRfd2F0Y2god2F0Y2gpOworCWtydWxlLT53YXRjaCA9IHdhdGNoOworCisJcmV0dXJuIDA7Cit9CisKIC8qIENvbW1vbiB1c2VyLXNwYWNlIHRvIGtlcm5lbCBydWxlIHRyYW5zbGF0aW9uLiAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X3RvX2VudHJ5X2NvbW1vbihzdHJ1Y3QgYXVkaXRfcnVsZSAqcnVsZSkKIHsKQEAgLTEyOCw4ICsyOTksMTEgQEAKICNlbmRpZgogCQk7CiAJfQotCWlmIChydWxlLT5hY3Rpb24gIT0gQVVESVRfTkVWRVIgJiYgcnVsZS0+YWN0aW9uICE9IEFVRElUX1BPU1NJQkxFICYmCi0JICAgIHJ1bGUtPmFjdGlvbiAhPSBBVURJVF9BTFdBWVMpCisJaWYgKHVubGlrZWx5KHJ1bGUtPmFjdGlvbiA9PSBBVURJVF9QT1NTSUJMRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJBVURJVF9QT1NTSUJMRSBpcyBkZXByZWNhdGVkXG4iKTsKKwkJZ290byBleGl0X2VycjsKKwl9CisJaWYgKHJ1bGUtPmFjdGlvbiAhPSBBVURJVF9ORVZFUiAmJiBydWxlLT5hY3Rpb24gIT0gQVVESVRfQUxXQVlTKQogCQlnb3RvIGV4aXRfZXJyOwogCWlmIChydWxlLT5maWVsZF9jb3VudCA+IEFVRElUX01BWF9GSUVMRFMpCiAJCWdvdG8gZXhpdF9lcnI7CkBAIC0xNTgsNiArMzMyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X3J1bGVfdG9fZW50cnkoc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGUpCiB7CiAJc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgYXVkaXRfZmllbGQgKmY7CiAJaW50IGVyciA9IDA7CiAJaW50IGk7CiAKQEAgLTE3MiwxNCArMzQ3LDM3IEBACiAJCWYtPnR5cGUgPSBydWxlLT5maWVsZHNbaV0gJiB+KEFVRElUX05FR0FURXxBVURJVF9PUEVSQVRPUlMpOwogCQlmLT52YWwgPSBydWxlLT52YWx1ZXNbaV07CiAKLQkJaWYgKGYtPnR5cGUgJiBBVURJVF9VTlVTRURfQklUUyB8fAotCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9VU0VSIHx8Ci0JCSAgICBmLT50eXBlID09IEFVRElUX1NFX1JPTEUgfHwKLQkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfVFlQRSB8fAotCQkgICAgZi0+dHlwZSA9PSBBVURJVF9TRV9TRU4gfHwKLQkJICAgIGYtPnR5cGUgPT0gQVVESVRfU0VfQ0xSKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQllcnIgPSAtRUlOVkFMOworCQlzd2l0Y2goZi0+dHlwZSkgeworCQlkZWZhdWx0OgogCQkJZ290byBleGl0X2ZyZWU7CisJCWNhc2UgQVVESVRfUElEOgorCQljYXNlIEFVRElUX1VJRDoKKwkJY2FzZSBBVURJVF9FVUlEOgorCQljYXNlIEFVRElUX1NVSUQ6CisJCWNhc2UgQVVESVRfRlNVSUQ6CisJCWNhc2UgQVVESVRfR0lEOgorCQljYXNlIEFVRElUX0VHSUQ6CisJCWNhc2UgQVVESVRfU0dJRDoKKwkJY2FzZSBBVURJVF9GU0dJRDoKKwkJY2FzZSBBVURJVF9MT0dJTlVJRDoKKwkJY2FzZSBBVURJVF9QRVJTOgorCQljYXNlIEFVRElUX0FSQ0g6CisJCWNhc2UgQVVESVRfTVNHVFlQRToKKwkJY2FzZSBBVURJVF9ERVZNQUpPUjoKKwkJY2FzZSBBVURJVF9ERVZNSU5PUjoKKwkJY2FzZSBBVURJVF9FWElUOgorCQljYXNlIEFVRElUX1NVQ0NFU1M6CisJCWNhc2UgQVVESVRfQVJHMDoKKwkJY2FzZSBBVURJVF9BUkcxOgorCQljYXNlIEFVRElUX0FSRzI6CisJCWNhc2UgQVVESVRfQVJHMzoKKwkJCWJyZWFrOworCQljYXNlIEFVRElUX0lOT0RFOgorCQkJZXJyID0gYXVkaXRfdG9faW5vZGUoJmVudHJ5LT5ydWxlLCBmKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X2ZyZWU7CisJCQlicmVhazsKIAkJfQogCiAJCWVudHJ5LT5ydWxlLnZlcnNfb3BzID0gKGYtPm9wICYgQVVESVRfT1BFUkFUT1JTKSA/IDIgOiAxOwpAQCAtMTk2LDYgKzM5NCwxOCBAQAogCQl9CiAJfQogCisJZiA9IGVudHJ5LT5ydWxlLmlub2RlX2Y7CisJaWYgKGYpIHsKKwkJc3dpdGNoKGYtPm9wKSB7CisJCWNhc2UgQVVESVRfTk9UX0VRVUFMOgorCQkJZW50cnktPnJ1bGUuaW5vZGVfZiA9IE5VTEw7CisJCWNhc2UgQVVESVRfRVFVQUw6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXhpdF9mcmVlOworCQl9CisJfQorCiBleGl0X25vZnJlZToKIAlyZXR1cm4gZW50cnk7CiAKQEAgLTIxMCw2ICs0MjAsNyBAQAogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGF1ZGl0X2ZpZWxkICpmOwogCXZvaWQgKmJ1ZnA7CiAJc2l6ZV90IHJlbWFpbiA9IGRhdGFzeiAtIHNpemVvZihzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhKTsKIAlpbnQgaTsKQEAgLTIzNSw2ICs0NDYsMjkgQEAKIAkJZi0+c2Vfc3RyID0gTlVMTDsKIAkJZi0+c2VfcnVsZSA9IE5VTEw7CiAJCXN3aXRjaChmLT50eXBlKSB7CisJCWNhc2UgQVVESVRfUElEOgorCQljYXNlIEFVRElUX1VJRDoKKwkJY2FzZSBBVURJVF9FVUlEOgorCQljYXNlIEFVRElUX1NVSUQ6CisJCWNhc2UgQVVESVRfRlNVSUQ6CisJCWNhc2UgQVVESVRfR0lEOgorCQljYXNlIEFVRElUX0VHSUQ6CisJCWNhc2UgQVVESVRfU0dJRDoKKwkJY2FzZSBBVURJVF9GU0dJRDoKKwkJY2FzZSBBVURJVF9MT0dJTlVJRDoKKwkJY2FzZSBBVURJVF9QRVJTOgorCQljYXNlIEFVRElUX0FSQ0g6CisJCWNhc2UgQVVESVRfTVNHVFlQRToKKwkJY2FzZSBBVURJVF9QUElEOgorCQljYXNlIEFVRElUX0RFVk1BSk9SOgorCQljYXNlIEFVRElUX0RFVk1JTk9SOgorCQljYXNlIEFVRElUX0VYSVQ6CisJCWNhc2UgQVVESVRfU1VDQ0VTUzoKKwkJY2FzZSBBVURJVF9BUkcwOgorCQljYXNlIEFVRElUX0FSRzE6CisJCWNhc2UgQVVESVRfQVJHMjoKKwkJY2FzZSBBVURJVF9BUkczOgorCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfU0VfVVNFUjoKIAkJY2FzZSBBVURJVF9TRV9ST0xFOgogCQljYXNlIEFVRElUX1NFX1RZUEU6CkBAIC0yNjAsNiArNDk0LDM3IEBACiAJCQl9IGVsc2UKIAkJCQlmLT5zZV9zdHIgPSBzdHI7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9XQVRDSDoKKwkJCXN0ciA9IGF1ZGl0X3VucGFja19zdHJpbmcoJmJ1ZnAsICZyZW1haW4sIGYtPnZhbCk7CisJCQlpZiAoSVNfRVJSKHN0cikpCisJCQkJZ290byBleGl0X2ZyZWU7CisJCQllbnRyeS0+cnVsZS5idWZsZW4gKz0gZi0+dmFsOworCisJCQllcnIgPSBhdWRpdF90b193YXRjaCgmZW50cnktPnJ1bGUsIHN0ciwgZi0+dmFsLCBmLT5vcCk7CisJCQlpZiAoZXJyKSB7CisJCQkJa2ZyZWUoc3RyKTsKKwkJCQlnb3RvIGV4aXRfZnJlZTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEFVRElUX0lOT0RFOgorCQkJZXJyID0gYXVkaXRfdG9faW5vZGUoJmVudHJ5LT5ydWxlLCBmKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X2ZyZWU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXhpdF9mcmVlOworCQl9CisJfQorCisJZiA9IGVudHJ5LT5ydWxlLmlub2RlX2Y7CisJaWYgKGYpIHsKKwkJc3dpdGNoKGYtPm9wKSB7CisJCWNhc2UgQVVESVRfTk9UX0VRVUFMOgorCQkJZW50cnktPnJ1bGUuaW5vZGVfZiA9IE5VTEw7CisJCWNhc2UgQVVESVRfRVFVQUw6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWdvdG8gZXhpdF9mcmVlOwogCQl9CiAJfQogCkBAIC0yOTEsNyArNTU2LDcgQEAKIAogCXJ1bGUgPSBrbWFsbG9jKHNpemVvZigqcnVsZSksIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghcnVsZSkpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQlyZXR1cm4gTlVMTDsKIAltZW1zZXQocnVsZSwgMCwgc2l6ZW9mKCpydWxlKSk7CiAKIAlydWxlLT5mbGFncyA9IGtydWxlLT5mbGFncyB8IGtydWxlLT5saXN0bnI7CkBAIC0zMjIsNyArNTg3LDcgQEAKIAogCWRhdGEgPSBrbWFsbG9jKHNpemVvZigqZGF0YSkgKyBrcnVsZS0+YnVmbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWRhdGEpKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwkJcmV0dXJuIE5VTEw7CiAJbWVtc2V0KGRhdGEsIDAsIHNpemVvZigqZGF0YSkpOwogCiAJZGF0YS0+ZmxhZ3MgPSBrcnVsZS0+ZmxhZ3MgfCBrcnVsZS0+bGlzdG5yOwpAQCAtMzQzLDYgKzYwOCwxMCBAQAogCQkJZGF0YS0+YnVmbGVuICs9IGRhdGEtPnZhbHVlc1tpXSA9CiAJCQkJYXVkaXRfcGFja19zdHJpbmcoJmJ1ZnAsIGYtPnNlX3N0cik7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9XQVRDSDoKKwkJCWRhdGEtPmJ1ZmxlbiArPSBkYXRhLT52YWx1ZXNbaV0gPQorCQkJCWF1ZGl0X3BhY2tfc3RyaW5nKCZidWZwLCBrcnVsZS0+d2F0Y2gtPnBhdGgpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlkYXRhLT52YWx1ZXNbaV0gPSBmLT52YWw7CiAJCX0KQEAgLTM3OCw2ICs2NDcsMTAgQEAKIAkJCWlmIChzdHJjbXAoYS0+ZmllbGRzW2ldLnNlX3N0ciwgYi0+ZmllbGRzW2ldLnNlX3N0cikpCiAJCQkJcmV0dXJuIDE7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9XQVRDSDoKKwkJCWlmIChzdHJjbXAoYS0+d2F0Y2gtPnBhdGgsIGItPndhdGNoLT5wYXRoKSkKKwkJCQlyZXR1cm4gMTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJaWYgKGEtPmZpZWxkc1tpXS52YWwgIT0gYi0+ZmllbGRzW2ldLnZhbCkKIAkJCQlyZXR1cm4gMTsKQEAgLTM5MSw2ICs2NjQsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogRHVwbGljYXRlIHRoZSBnaXZlbiBhdWRpdCB3YXRjaC4gIFRoZSBuZXcgd2F0Y2gncyBydWxlcyBsaXN0IGlzIGluaXRpYWxpemVkCisgKiB0byBhbiBlbXB0eSBsaXN0IGFuZCB3bGlzdCBpcyB1bmRlZmluZWQuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X3dhdGNoICphdWRpdF9kdXBlX3dhdGNoKHN0cnVjdCBhdWRpdF93YXRjaCAqb2xkKQoreworCWNoYXIgKnBhdGg7CisJc3RydWN0IGF1ZGl0X3dhdGNoICpuZXc7CisKKwlwYXRoID0ga3N0cmR1cChvbGQtPnBhdGgsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghcGF0aCkpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJbmV3ID0gYXVkaXRfaW5pdF93YXRjaChwYXRoKTsKKwlpZiAodW5saWtlbHkoSVNfRVJSKG5ldykpKSB7CisJCWtmcmVlKHBhdGgpOworCQlnb3RvIG91dDsKKwl9CisKKwluZXctPmRldiA9IG9sZC0+ZGV2OworCW5ldy0+aW5vID0gb2xkLT5pbm87CisJZ2V0X2lub3RpZnlfd2F0Y2goJm9sZC0+cGFyZW50LT53ZGF0YSk7CisJbmV3LT5wYXJlbnQgPSBvbGQtPnBhcmVudDsKKworb3V0OgorCXJldHVybiBuZXc7Cit9CisKIC8qIER1cGxpY2F0ZSBzZWxpbnV4IGZpZWxkIGluZm9ybWF0aW9uLiAgVGhlIHNlX3J1bGUgaXMgb3BhcXVlLCBzbyBtdXN0IGJlCiAgKiByZS1pbml0aWFsaXplZC4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2R1cGVfc2VsaW51eF9maWVsZChzdHJ1Y3QgYXVkaXRfZmllbGQgKmRmLApAQCAtNDIyLDggKzcyMSwxMSBAQAogLyogRHVwbGljYXRlIGFuIGF1ZGl0IHJ1bGUuICBUaGlzIHdpbGwgYmUgYSBkZWVwIGNvcHkgd2l0aCB0aGUgZXhjZXB0aW9uCiAgKiBvZiB0aGUgd2F0Y2ggLSB0aGF0IHBvaW50ZXIgaXMgY2FycmllZCBvdmVyLiAgVGhlIHNlbGludXggc3BlY2lmaWMgZmllbGRzCiAgKiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlIGNvcHkuICBUaGUgcG9pbnQgaXMgdG8gYmUgYWJsZSB0byByZXBsYWNlIHRoZSBvbGQKLSAqIHJ1bGUgd2l0aCB0aGUgbmV3IHJ1bGUgaW4gdGhlIGZpbHRlcmxpc3QsIHRoZW4gZnJlZSB0aGUgb2xkIHJ1bGUuICovCi1zdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9kdXBlX3J1bGUoc3RydWN0IGF1ZGl0X2tydWxlICpvbGQpCisgKiBydWxlIHdpdGggdGhlIG5ldyBydWxlIGluIHRoZSBmaWx0ZXJsaXN0LCB0aGVuIGZyZWUgdGhlIG9sZCBydWxlLgorICogVGhlIHJsaXN0IGVsZW1lbnQgaXMgdW5kZWZpbmVkOyBsaXN0IG1hbmlwdWxhdGlvbnMgYXJlIGhhbmRsZWQgYXBhcnQgZnJvbQorICogdGhlIGluaXRpYWwgY29weS4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X2R1cGVfcnVsZShzdHJ1Y3QgYXVkaXRfa3J1bGUgKm9sZCwKKwkJCQkJICAgc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCkKIHsKIAl1MzIgZmNvdW50ID0gb2xkLT5maWVsZF9jb3VudDsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5OwpAQCAtNDQyLDYgKzc0NCw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFVRElUX0JJVE1BU0tfU0laRTsgaSsrKQogCQluZXctPm1hc2tbaV0gPSBvbGQtPm1hc2tbaV07CiAJbmV3LT5idWZsZW4gPSBvbGQtPmJ1ZmxlbjsKKwluZXctPmlub2RlX2YgPSBvbGQtPmlub2RlX2Y7CisJbmV3LT53YXRjaCA9IE5VTEw7CiAJbmV3LT5maWVsZF9jb3VudCA9IG9sZC0+ZmllbGRfY291bnQ7CiAJbWVtY3B5KG5ldy0+ZmllbGRzLCBvbGQtPmZpZWxkcywgc2l6ZW9mKHN0cnVjdCBhdWRpdF9maWVsZCkgKiBmY291bnQpOwogCkBAIC00NjMsNjggKzc2Nyw0MDkgQEAKIAkJfQogCX0KIAorCWlmICh3YXRjaCkgeworCQlhdWRpdF9nZXRfd2F0Y2god2F0Y2gpOworCQluZXctPndhdGNoID0gd2F0Y2g7CisJfQorCiAJcmV0dXJuIGVudHJ5OwogfQogCi0vKiBBZGQgcnVsZSB0byBnaXZlbiBmaWx0ZXJsaXN0IGlmIG5vdCBhIGR1cGxpY2F0ZS4gIFByb3RlY3RlZCBieQotICogYXVkaXRfbmV0bGlua19tdXRleC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2FkZF9ydWxlKHN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksCi0JCQkJICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQorLyogVXBkYXRlIGlub2RlIGluZm8gaW4gYXVkaXQgcnVsZXMgYmFzZWQgb24gZmlsZXN5c3RlbSBldmVudC4gKi8KK3N0YXRpYyB2b2lkIGF1ZGl0X3VwZGF0ZV93YXRjaChzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQsCisJCQkgICAgICAgY29uc3QgY2hhciAqZG5hbWUsIGRldl90IGRldiwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGlubywgdW5zaWduZWQgaW52YWxpZGF0aW5nKQogeworCXN0cnVjdCBhdWRpdF93YXRjaCAqb3dhdGNoLCAqbndhdGNoLCAqbmV4dHc7CisJc3RydWN0IGF1ZGl0X2tydWxlICpyLCAqbmV4dHI7CisJc3RydWN0IGF1ZGl0X2VudHJ5ICpvZW50cnksICpuZW50cnk7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvd2F0Y2gsIG5leHR3LCAmcGFyZW50LT53YXRjaGVzLCB3bGlzdCkgeworCQlpZiAoYXVkaXRfY29tcGFyZV9kbmFtZV9wYXRoKGRuYW1lLCBvd2F0Y2gtPnBhdGgsIE5VTEwpKQorCQkJY29udGludWU7CisKKwkJLyogSWYgdGhlIHVwZGF0ZSBpbnZvbHZlcyBpbnZhbGlkYXRpbmcgcnVsZXMsIGRvIHRoZSBpbm9kZS1iYXNlZAorCQkgKiBmaWx0ZXJpbmcgbm93LCBzbyB3ZSBkb24ndCBvbWl0IHJlY29yZHMuICovCisJCWlmIChpbnZhbGlkYXRpbmcgJiYKKwkJICAgIGF1ZGl0X2ZpbHRlcl9pbm9kZXMoY3VycmVudCwgY3VycmVudC0+YXVkaXRfY29udGV4dCkgPT0gQVVESVRfUkVDT1JEX0NPTlRFWFQpCisJCQlhdWRpdF9zZXRfYXVkaXRhYmxlKGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpOworCisJCW53YXRjaCA9IGF1ZGl0X2R1cGVfd2F0Y2gob3dhdGNoKTsKKwkJaWYgKHVubGlrZWx5KElTX0VSUihud2F0Y2gpKSkgeworCQkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCQkJYXVkaXRfcGFuaWMoImVycm9yIHVwZGF0aW5nIHdhdGNoLCBza2lwcGluZyIpOworCQkJcmV0dXJuOworCQl9CisJCW53YXRjaC0+ZGV2ID0gZGV2OworCQlud2F0Y2gtPmlubyA9IGlubzsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUociwgbmV4dHIsICZvd2F0Y2gtPnJ1bGVzLCBybGlzdCkgeworCisJCQlvZW50cnkgPSBjb250YWluZXJfb2Yociwgc3RydWN0IGF1ZGl0X2VudHJ5LCBydWxlKTsKKwkJCWxpc3RfZGVsKCZvZW50cnktPnJ1bGUucmxpc3QpOworCQkJbGlzdF9kZWxfcmN1KCZvZW50cnktPmxpc3QpOworCisJCQluZW50cnkgPSBhdWRpdF9kdXBlX3J1bGUoJm9lbnRyeS0+cnVsZSwgbndhdGNoKTsKKwkJCWlmICh1bmxpa2VseShJU19FUlIobmVudHJ5KSkpCisJCQkJYXVkaXRfcGFuaWMoImVycm9yIHVwZGF0aW5nIHdhdGNoLCByZW1vdmluZyIpOworCQkJZWxzZSB7CisJCQkJaW50IGggPSBhdWRpdF9oYXNoX2lubygodTMyKWlubyk7CisJCQkJbGlzdF9hZGQoJm5lbnRyeS0+cnVsZS5ybGlzdCwgJm53YXRjaC0+cnVsZXMpOworCQkJCWxpc3RfYWRkX3JjdSgmbmVudHJ5LT5saXN0LCAmYXVkaXRfaW5vZGVfaGFzaFtoXSk7CisJCQl9CisKKwkJCWNhbGxfcmN1KCZvZW50cnktPnJjdSwgYXVkaXRfZnJlZV9ydWxlX3JjdSk7CisJCX0KKworCQlhYiA9IGF1ZGl0X2xvZ19zdGFydChOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFKTsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImF1ZGl0IHVwZGF0ZWQgcnVsZXMgc3BlY2lmeWluZyB3YXRjaD0iKTsKKwkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgb3dhdGNoLT5wYXRoKTsKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiB3aXRoIGRldj0ldSBpbm89JWx1XG4iLCBkZXYsIGlubyk7CisJCWF1ZGl0X2xvZ19lbmQoYWIpOworCisJCWF1ZGl0X3JlbW92ZV93YXRjaChvd2F0Y2gpOworCQlnb3RvIGFkZF93YXRjaF90b19wYXJlbnQ7IC8qIGV2ZW50IGFwcGxpZXMgdG8gYSBzaW5nbGUgd2F0Y2ggKi8KKwl9CisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCXJldHVybjsKKworYWRkX3dhdGNoX3RvX3BhcmVudDoKKwlsaXN0X2FkZCgmbndhdGNoLT53bGlzdCwgJnBhcmVudC0+d2F0Y2hlcyk7CisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCXJldHVybjsKK30KKworLyogUmVtb3ZlIGFsbCB3YXRjaGVzICYgcnVsZXMgYXNzb2NpYXRlZCB3aXRoIGEgcGFyZW50IHRoYXQgaXMgZ29pbmcgYXdheS4gKi8KK3N0YXRpYyB2b2lkIGF1ZGl0X3JlbW92ZV9wYXJlbnRfd2F0Y2hlcyhzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQpCit7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3LCAqbmV4dHc7CisJc3RydWN0IGF1ZGl0X2tydWxlICpyLCAqbmV4dHI7CiAJc3RydWN0IGF1ZGl0X2VudHJ5ICplOwogCi0JLyogRG8gbm90IHVzZSB0aGUgX3JjdSBpdGVyYXRvciBoZXJlLCBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5Ci0JICogYWRkaXRpb24gcm91dGluZS4gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIGxpc3QsIGxpc3QpIHsKLQkJaWYgKCFhdWRpdF9jb21wYXJlX3J1bGUoJmVudHJ5LT5ydWxlLCAmZS0+cnVsZSkpCi0JCQlyZXR1cm4gLUVFWElTVDsKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCXBhcmVudC0+ZmxhZ3MgfD0gQVVESVRfUEFSRU5UX0lOVkFMSUQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIG5leHR3LCAmcGFyZW50LT53YXRjaGVzLCB3bGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUociwgbmV4dHIsICZ3LT5ydWxlcywgcmxpc3QpIHsKKwkJCWUgPSBjb250YWluZXJfb2Yociwgc3RydWN0IGF1ZGl0X2VudHJ5LCBydWxlKTsKKwkJCWxpc3RfZGVsKCZyLT5ybGlzdCk7CisJCQlsaXN0X2RlbF9yY3UoJmUtPmxpc3QpOworCQkJY2FsbF9yY3UoJmUtPnJjdSwgYXVkaXRfZnJlZV9ydWxlX3JjdSk7CisKKwkJCWF1ZGl0X2xvZyhOVUxMLCBHRlBfS0VSTkVMLCBBVURJVF9DT05GSUdfQ0hBTkdFLAorCQkJCSAiYXVkaXQgaW1wbGljaXRseSByZW1vdmVkIHJ1bGUgZnJvbSBsaXN0PSVkXG4iLAorCQkJCSAgQVVESVRfRklMVEVSX0VYSVQpOworCQl9CisJCWF1ZGl0X3JlbW92ZV93YXRjaCh3KTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworfQorCisvKiBVbnJlZ2lzdGVyIGlub3RpZnkgd2F0Y2hlcyBmb3IgcGFyZW50cyBvbiBpbl9saXN0LgorICogR2VuZXJhdGVzIGFuIElOX0lHTk9SRUQgZXZlbnQuICovCitzdGF0aWMgdm9pZCBhdWRpdF9pbm90aWZ5X3VucmVnaXN0ZXIoc3RydWN0IGxpc3RfaGVhZCAqaW5fbGlzdCkKK3sKKwlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCBpbl9saXN0LCBpbGlzdCkgeworCQlsaXN0X2RlbCgmcC0+aWxpc3QpOworCQlpbm90aWZ5X3JtX3dhdGNoKGF1ZGl0X2loLCAmcC0+d2RhdGEpOworCQkvKiB0aGUgcHV0IG1hdGNoaW5nIHRoZSBnZXQgaW4gYXVkaXRfZG9fZGVsX3J1bGUoKSAqLworCQlwdXRfaW5vdGlmeV93YXRjaCgmcC0+d2RhdGEpOworCX0KK30KKworLyogRmluZCBhbiBleGlzdGluZyBhdWRpdCBydWxlLgorICogQ2FsbGVyIG11c3QgaG9sZCBhdWRpdF9maWx0ZXJfbXV0ZXggdG8gcHJldmVudCBzdGFsZSBydWxlIGRhdGEuICovCitzdGF0aWMgc3RydWN0IGF1ZGl0X2VudHJ5ICphdWRpdF9maW5kX3J1bGUoc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwKKwkJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgYXVkaXRfZW50cnkgKmUsICpmb3VuZCA9IE5VTEw7CisJaW50IGg7CisKKwlpZiAoZW50cnktPnJ1bGUud2F0Y2gpIHsKKwkJLyogd2UgZG9uJ3Qga25vdyB0aGUgaW5vZGUgbnVtYmVyLCBzbyBtdXN0IHdhbGsgZW50aXJlIGhhc2ggKi8KKwkJZm9yIChoID0gMDsgaCA8IEFVRElUX0lOT0RFX0JVQ0tFVFM7IGgrKykgeworCQkJbGlzdCA9ICZhdWRpdF9pbm9kZV9oYXNoW2hdOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KQorCQkJCWlmICghYXVkaXRfY29tcGFyZV9ydWxlKCZlbnRyeS0+cnVsZSwgJmUtPnJ1bGUpKSB7CisJCQkJCWZvdW5kID0gZTsKKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQl9CisJCWdvdG8gb3V0OwogCX0KIAotCWlmIChlbnRyeS0+cnVsZS5mbGFncyAmIEFVRElUX0ZJTFRFUl9QUkVQRU5EKSB7Ci0JCWxpc3RfYWRkX3JjdSgmZW50cnktPmxpc3QsIGxpc3QpOwotCX0gZWxzZSB7Ci0JCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCBsaXN0LCBsaXN0KQorCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZSgmZW50cnktPnJ1bGUsICZlLT5ydWxlKSkgeworCQkJZm91bmQgPSBlOworCQkJZ290byBvdXQ7CisJCX0KKworb3V0OgorCXJldHVybiBmb3VuZDsKK30KKworLyogR2V0IHBhdGggaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciBhZGRpbmcgd2F0Y2hlcy4gKi8KK3N0YXRpYyBpbnQgYXVkaXRfZ2V0X25kKGNoYXIgKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKipuZHAsCisJCQlzdHJ1Y3QgbmFtZWlkYXRhICoqbmR3KQoreworCXN0cnVjdCBuYW1laWRhdGEgKm5kcGFyZW50LCAqbmR3YXRjaDsKKwlpbnQgZXJyOworCisJbmRwYXJlbnQgPSBrbWFsbG9jKHNpemVvZigqbmRwYXJlbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW5kcGFyZW50KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZHdhdGNoID0ga21hbGxvYyhzaXplb2YoKm5kd2F0Y2gpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIW5kd2F0Y2gpKSB7CisJCWtmcmVlKG5kcGFyZW50KTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJZXJyID0gcGF0aF9sb29rdXAocGF0aCwgTE9PS1VQX1BBUkVOVCwgbmRwYXJlbnQpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUobmRwYXJlbnQpOworCQlrZnJlZShuZHdhdGNoKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBwYXRoX2xvb2t1cChwYXRoLCAwLCBuZHdhdGNoKTsKKwlpZiAoZXJyKSB7CisJCWtmcmVlKG5kd2F0Y2gpOworCQluZHdhdGNoID0gTlVMTDsKKwl9CisKKwkqbmRwID0gbmRwYXJlbnQ7CisJKm5kdyA9IG5kd2F0Y2g7CisKIAlyZXR1cm4gMDsKIH0KIAotLyogUmVtb3ZlIGFuIGV4aXN0aW5nIHJ1bGUgZnJvbSBmaWx0ZXJsaXN0LiAgUHJvdGVjdGVkIGJ5Ci0gKiBhdWRpdF9uZXRsaW5rX211dGV4LiAqLworLyogUmVsZWFzZSByZXNvdXJjZXMgdXNlZCBmb3Igd2F0Y2ggcGF0aCBpbmZvcm1hdGlvbi4gKi8KK3N0YXRpYyB2b2lkIGF1ZGl0X3B1dF9uZChzdHJ1Y3QgbmFtZWlkYXRhICpuZHAsIHN0cnVjdCBuYW1laWRhdGEgKm5kdykKK3sKKwlpZiAobmRwKSB7CisJCXBhdGhfcmVsZWFzZShuZHApOworCQlrZnJlZShuZHApOworCX0KKwlpZiAobmR3KSB7CisJCXBhdGhfcmVsZWFzZShuZHcpOworCQlrZnJlZShuZHcpOworCX0KK30KKworLyogQXNzb2NpYXRlIHRoZSBnaXZlbiBydWxlIHdpdGggYW4gZXhpc3RpbmcgcGFyZW50IGlub3RpZnlfd2F0Y2guCisgKiBDYWxsZXIgbXVzdCBob2xkIGF1ZGl0X2ZpbHRlcl9tdXRleC4gKi8KK3N0YXRpYyB2b2lkIGF1ZGl0X2FkZF90b19wYXJlbnQoc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSwKKwkJCQlzdHJ1Y3QgYXVkaXRfcGFyZW50ICpwYXJlbnQpCit7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3LCAqd2F0Y2ggPSBrcnVsZS0+d2F0Y2g7CisJaW50IHdhdGNoX2ZvdW5kID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodywgJnBhcmVudC0+d2F0Y2hlcywgd2xpc3QpIHsKKwkJaWYgKHN0cmNtcCh3YXRjaC0+cGF0aCwgdy0+cGF0aCkpCisJCQljb250aW51ZTsKKworCQl3YXRjaF9mb3VuZCA9IDE7CisKKwkJLyogcHV0IGtydWxlJ3MgYW5kIGluaXRpYWwgcmVmcyB0byB0ZW1wb3Jhcnkgd2F0Y2ggKi8KKwkJYXVkaXRfcHV0X3dhdGNoKHdhdGNoKTsKKwkJYXVkaXRfcHV0X3dhdGNoKHdhdGNoKTsKKworCQlhdWRpdF9nZXRfd2F0Y2godyk7CisJCWtydWxlLT53YXRjaCA9IHdhdGNoID0gdzsKKwkJYnJlYWs7CisJfQorCisJaWYgKCF3YXRjaF9mb3VuZCkgeworCQlnZXRfaW5vdGlmeV93YXRjaCgmcGFyZW50LT53ZGF0YSk7CisJCXdhdGNoLT5wYXJlbnQgPSBwYXJlbnQ7CisKKwkJbGlzdF9hZGQoJndhdGNoLT53bGlzdCwgJnBhcmVudC0+d2F0Y2hlcyk7CisJfQorCWxpc3RfYWRkKCZrcnVsZS0+cmxpc3QsICZ3YXRjaC0+cnVsZXMpOworfQorCisvKiBGaW5kIGEgbWF0Y2hpbmcgd2F0Y2ggZW50cnksIG9yIGFkZCB0aGlzIG9uZS4KKyAqIENhbGxlciBtdXN0IGhvbGQgYXVkaXRfZmlsdGVyX211dGV4LiAqLworc3RhdGljIGludCBhdWRpdF9hZGRfd2F0Y2goc3RydWN0IGF1ZGl0X2tydWxlICprcnVsZSwgc3RydWN0IG5hbWVpZGF0YSAqbmRwLAorCQkJICAgc3RydWN0IG5hbWVpZGF0YSAqbmR3KQoreworCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2ggPSBrcnVsZS0+d2F0Y2g7CisJc3RydWN0IGlub3RpZnlfd2F0Y2ggKmlfd2F0Y2g7CisJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50OworCWludCByZXQgPSAwOworCisJLyogdXBkYXRlIHdhdGNoIGZpbHRlciBmaWVsZHMgKi8KKwlpZiAobmR3KSB7CisJCXdhdGNoLT5kZXYgPSBuZHctPmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19kZXY7CisJCXdhdGNoLT5pbm8gPSBuZHctPmRlbnRyeS0+ZF9pbm9kZS0+aV9pbm87CisJfQorCisJLyogVGhlIGF1ZGl0X2ZpbHRlcl9tdXRleCBtdXN0IG5vdCBiZSBoZWxkIGR1cmluZyBpbm90aWZ5IGNhbGxzIGJlY2F1c2UKKwkgKiB3ZSBob2xkIGl0IGR1cmluZyBpbm90aWZ5IGV2ZW50IGNhbGxiYWNrIHByb2Nlc3NpbmcuICBJZiBhbiBleGlzdGluZworCSAqIGlub3RpZnkgd2F0Y2ggaXMgZm91bmQsIGlub3RpZnlfZmluZF93YXRjaCgpIGdyYWJzIGEgcmVmZXJlbmNlIGJlZm9yZQorCSAqIHJldHVybmluZy4KKwkgKi8KKwltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKwlpZiAoaW5vdGlmeV9maW5kX3dhdGNoKGF1ZGl0X2loLCBuZHAtPmRlbnRyeS0+ZF9pbm9kZSwgJmlfd2F0Y2gpIDwgMCkgeworCQlwYXJlbnQgPSBhdWRpdF9pbml0X3BhcmVudChuZHApOworCQlpZiAoSVNfRVJSKHBhcmVudCkpIHsKKwkJCS8qIGNhbGxlciBleHBlY3RzIG11dGV4IGxvY2tlZCAqLworCQkJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwkJCXJldHVybiBQVFJfRVJSKHBhcmVudCk7CisJCX0KKwl9IGVsc2UKKwkJcGFyZW50ID0gY29udGFpbmVyX29mKGlfd2F0Y2gsIHN0cnVjdCBhdWRpdF9wYXJlbnQsIHdkYXRhKTsKKworCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisKKwkvKiBwYXJlbnQgd2FzIG1vdmVkIGJlZm9yZSB3ZSB0b29rIGF1ZGl0X2ZpbHRlcl9tdXRleCAqLworCWlmIChwYXJlbnQtPmZsYWdzICYgQVVESVRfUEFSRU5UX0lOVkFMSUQpCisJCXJldCA9IC1FTk9FTlQ7CisJZWxzZQorCQlhdWRpdF9hZGRfdG9fcGFyZW50KGtydWxlLCBwYXJlbnQpOworCisJLyogbWF0Y2ggZ2V0IGluIGF1ZGl0X2luaXRfcGFyZW50IG9yIGlub3RpZnlfZmluZF93YXRjaCAqLworCXB1dF9pbm90aWZ5X3dhdGNoKCZwYXJlbnQtPndkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBBZGQgcnVsZSB0byBnaXZlbiBmaWx0ZXJsaXN0IGlmIG5vdCBhIGR1cGxpY2F0ZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF1ZGl0X2FkZF9ydWxlKHN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnksCisJCQkJIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGF1ZGl0X2VudHJ5ICplOworCXN0cnVjdCBhdWRpdF9maWVsZCAqaW5vZGVfZiA9IGVudHJ5LT5ydWxlLmlub2RlX2Y7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaCA9IGVudHJ5LT5ydWxlLndhdGNoOworCXN0cnVjdCBuYW1laWRhdGEgKm5kcCwgKm5kdzsKKwlpbnQgaCwgZXJyLCBwdXRuZF9uZWVkZWQgPSAwOworCisJaWYgKGlub2RlX2YpIHsKKwkJaCA9IGF1ZGl0X2hhc2hfaW5vKGlub2RlX2YtPnZhbCk7CisJCWxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKwl9CisKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCWUgPSBhdWRpdF9maW5kX3J1bGUoZW50cnksIGxpc3QpOworCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwlpZiAoZSkgeworCQllcnIgPSAtRUVYSVNUOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEF2b2lkIGNhbGxpbmcgcGF0aF9sb29rdXAgdW5kZXIgYXVkaXRfZmlsdGVyX211dGV4LiAqLworCWlmICh3YXRjaCkgeworCQllcnIgPSBhdWRpdF9nZXRfbmQod2F0Y2gtPnBhdGgsICZuZHAsICZuZHcpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwkJcHV0bmRfbmVlZGVkID0gMTsKKwl9CisKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCWlmICh3YXRjaCkgeworCQkvKiBhdWRpdF9maWx0ZXJfbXV0ZXggaXMgZHJvcHBlZCBhbmQgcmUtdGFrZW4gZHVyaW5nIHRoaXMgY2FsbCAqLworCQllcnIgPSBhdWRpdF9hZGRfd2F0Y2goJmVudHJ5LT5ydWxlLCBuZHAsIG5kdyk7CisJCWlmIChlcnIpIHsKKwkJCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJaCA9IGF1ZGl0X2hhc2hfaW5vKCh1MzIpd2F0Y2gtPmlubyk7CisJCWxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKwl9CisKKwlpZiAoZW50cnktPnJ1bGUuZmxhZ3MgJiBBVURJVF9GSUxURVJfUFJFUEVORCkgeworCQlsaXN0X2FkZF9yY3UoJmVudHJ5LT5saXN0LCBsaXN0KTsKKwkJZW50cnktPnJ1bGUuZmxhZ3MgJj0gfkFVRElUX0ZJTFRFUl9QUkVQRU5EOworCX0gZWxzZSB7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CisJfQorCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKworCWlmIChwdXRuZF9uZWVkZWQpCisJCWF1ZGl0X3B1dF9uZChuZHAsIG5kdyk7CisKKyAJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChwdXRuZF9uZWVkZWQpCisJCWF1ZGl0X3B1dF9uZChuZHAsIG5kdyk7CisJaWYgKHdhdGNoKQorCQlhdWRpdF9wdXRfd2F0Y2god2F0Y2gpOyAvKiB0bXAgd2F0Y2gsIG1hdGNoZXMgaW5pdGlhbCBnZXQgKi8KKwlyZXR1cm4gZXJyOworfQorCisvKiBSZW1vdmUgYW4gZXhpc3RpbmcgcnVsZSBmcm9tIGZpbHRlcmxpc3QuICovCiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kZWxfcnVsZShzdHJ1Y3QgYXVkaXRfZW50cnkgKmVudHJ5LAogCQkJCSBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBhdWRpdF9lbnRyeSAgKmU7CisJc3RydWN0IGF1ZGl0X2ZpZWxkICppbm9kZV9mID0gZW50cnktPnJ1bGUuaW5vZGVfZjsKKwlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoLCAqdG1wX3dhdGNoID0gZW50cnktPnJ1bGUud2F0Y2g7CisJTElTVF9IRUFEKGlub3RpZnlfbGlzdCk7CisJaW50IGgsIHJldCA9IDA7CiAKLQkvKiBEbyBub3QgdXNlIHRoZSBfcmN1IGl0ZXJhdG9yIGhlcmUsIHNpbmNlIHRoaXMgaXMgdGhlIG9ubHkKLQkgKiBkZWxldGlvbiByb3V0aW5lLiAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbGlzdCwgbGlzdCkgewotCQlpZiAoIWF1ZGl0X2NvbXBhcmVfcnVsZSgmZW50cnktPnJ1bGUsICZlLT5ydWxlKSkgewotCQkJbGlzdF9kZWxfcmN1KCZlLT5saXN0KTsKLQkJCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOwotCQkJcmV0dXJuIDA7CisJaWYgKGlub2RlX2YpIHsKKwkJaCA9IGF1ZGl0X2hhc2hfaW5vKGlub2RlX2YtPnZhbCk7CisJCWxpc3QgPSAmYXVkaXRfaW5vZGVfaGFzaFtoXTsKKwl9CisKKwltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCWUgPSBhdWRpdF9maW5kX3J1bGUoZW50cnksIGxpc3QpOworCWlmICghZSkgeworCQltdXRleF91bmxvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKworCXdhdGNoID0gZS0+cnVsZS53YXRjaDsKKwlpZiAod2F0Y2gpIHsKKwkJc3RydWN0IGF1ZGl0X3BhcmVudCAqcGFyZW50ID0gd2F0Y2gtPnBhcmVudDsKKworCQlsaXN0X2RlbCgmZS0+cnVsZS5ybGlzdCk7CisKKwkJaWYgKGxpc3RfZW1wdHkoJndhdGNoLT5ydWxlcykpIHsKKwkJCWF1ZGl0X3JlbW92ZV93YXRjaCh3YXRjaCk7CisKKwkJCWlmIChsaXN0X2VtcHR5KCZwYXJlbnQtPndhdGNoZXMpKSB7CisJCQkJLyogUHV0IHBhcmVudCBvbiB0aGUgaW5vdGlmeSB1bi1yZWdpc3RyYXRpb24KKwkJCQkgKiBsaXN0LiAgR3JhYiBhIHJlZmVyZW5jZSBiZWZvcmUgcmVsZWFzaW5nCisJCQkJICogYXVkaXRfZmlsdGVyX211dGV4LCB0byBiZSByZWxlYXNlZCBpbgorCQkJCSAqIGF1ZGl0X2lub3RpZnlfdW5yZWdpc3RlcigpLiAqLworCQkJCWxpc3RfYWRkKCZwYXJlbnQtPmlsaXN0LCAmaW5vdGlmeV9saXN0KTsKKwkJCQlnZXRfaW5vdGlmeV93YXRjaCgmcGFyZW50LT53ZGF0YSk7CisJCQl9CiAJCX0KIAl9Ci0JcmV0dXJuIC1FTk9FTlQ7CQkvKiBObyBtYXRjaGluZyBydWxlICovCisKKwlsaXN0X2RlbF9yY3UoJmUtPmxpc3QpOworCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOworCisJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOworCisJaWYgKCFsaXN0X2VtcHR5KCZpbm90aWZ5X2xpc3QpKQorCQlhdWRpdF9pbm90aWZ5X3VucmVnaXN0ZXIoJmlub3RpZnlfbGlzdCk7CisKK291dDoKKwlpZiAodG1wX3dhdGNoKQorCQlhdWRpdF9wdXRfd2F0Y2godG1wX3dhdGNoKTsgLyogbWF0Y2ggaW5pdGlhbCBnZXQgKi8KKworCXJldHVybiByZXQ7CiB9CiAKIC8qIExpc3QgcnVsZXMgdXNpbmcgc3RydWN0IGF1ZGl0X3J1bGUuICBFeGlzdHMgZm9yIGJhY2t3YXJkCiAgKiBjb21wYXRpYmlsaXR5IHdpdGggdXNlcnNwYWNlLiAqLwotc3RhdGljIGludCBhdWRpdF9saXN0KHZvaWQgKl9kZXN0KQorc3RhdGljIHZvaWQgYXVkaXRfbGlzdChpbnQgcGlkLCBpbnQgc2VxLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxKQogewotCWludCBwaWQsIHNlcTsKLQlpbnQgKmRlc3QgPSBfZGVzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CiAJaW50IGk7CiAKLQlwaWQgPSBkZXN0WzBdOwotCXNlcSA9IGRlc3RbMV07Ci0Ja2ZyZWUoZGVzdCk7Ci0KLQltdXRleF9sb2NrKCZhdWRpdF9uZXRsaW5rX211dGV4KTsKLQotCS8qIFRoZSAqX3JjdSBpdGVyYXRvcnMgbm90IG5lZWRlZCBoZXJlIGJlY2F1c2Ugd2UgYXJlCi0JICAgYWx3YXlzIGNhbGxlZCB3aXRoIGF1ZGl0X25ldGxpbmtfbXV0ZXggaGVsZC4gKi8KKwkvKiBUaGlzIGlzIGEgYmxvY2tpbmcgcmVhZCwgc28gdXNlIGF1ZGl0X2ZpbHRlcl9tdXRleCBpbnN0ZWFkIG9mIHJjdQorCSAqIGl0ZXJhdG9yIHRvIHN5bmMgd2l0aCBsaXN0IHdyaXRlcnMuICovCiAJZm9yIChpPTA7IGk8QVVESVRfTlJfRklMVEVSUzsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhdWRpdF9maWx0ZXJfbGlzdFtpXSwgbGlzdCkgewogCQkJc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGU7CkBAIC01MzIsMzMgKzExNzcsNDEgQEAKIAkJCXJ1bGUgPSBhdWRpdF9rcnVsZV90b19ydWxlKCZlbnRyeS0+cnVsZSk7CiAJCQlpZiAodW5saWtlbHkoIXJ1bGUpKQogCQkJCWJyZWFrOwotCQkJYXVkaXRfc2VuZF9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVCwgMCwgMSwKKwkJCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDAsIDEsCiAJCQkJCSBydWxlLCBzaXplb2YoKnJ1bGUpKTsKKwkJCWlmIChza2IpCisJCQkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKIAkJCWtmcmVlKHJ1bGUpOwogCQl9CiAJfQotCWF1ZGl0X3NlbmRfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1QsIDEsIDEsIE5VTEwsIDApOwotCQotCW11dGV4X3VubG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7Ci0JcmV0dXJuIDA7CisJZm9yIChpID0gMDsgaSA8IEFVRElUX0lOT0RFX0JVQ0tFVFM7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmYXVkaXRfaW5vZGVfaGFzaFtpXSwgbGlzdCkgeworCQkJc3RydWN0IGF1ZGl0X3J1bGUgKnJ1bGU7CisKKwkJCXJ1bGUgPSBhdWRpdF9rcnVsZV90b19ydWxlKCZlbnRyeS0+cnVsZSk7CisJCQlpZiAodW5saWtlbHkoIXJ1bGUpKQorCQkJCWJyZWFrOworCQkJc2tiID0gYXVkaXRfbWFrZV9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVCwgMCwgMSwKKwkJCQkJIHJ1bGUsIHNpemVvZigqcnVsZSkpOworCQkJaWYgKHNrYikKKwkJCQlza2JfcXVldWVfdGFpbChxLCBza2IpOworCQkJa2ZyZWUocnVsZSk7CisJCX0KKwl9CisJc2tiID0gYXVkaXRfbWFrZV9yZXBseShwaWQsIHNlcSwgQVVESVRfTElTVCwgMSwgMSwgTlVMTCwgMCk7CisJaWYgKHNrYikKKwkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKIH0KIAogLyogTGlzdCBydWxlcyB1c2luZyBzdHJ1Y3QgYXVkaXRfcnVsZV9kYXRhLiAqLwotc3RhdGljIGludCBhdWRpdF9saXN0X3J1bGVzKHZvaWQgKl9kZXN0KQorc3RhdGljIHZvaWQgYXVkaXRfbGlzdF9ydWxlcyhpbnQgcGlkLCBpbnQgc2VxLCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpxKQogewotCWludCBwaWQsIHNlcTsKLQlpbnQgKmRlc3QgPSBfZGVzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKIAlpbnQgaTsKIAotCXBpZCA9IGRlc3RbMF07Ci0Jc2VxID0gZGVzdFsxXTsKLQlrZnJlZShkZXN0KTsKLQotCW11dGV4X2xvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOwotCi0JLyogVGhlICpfcmN1IGl0ZXJhdG9ycyBub3QgbmVlZGVkIGhlcmUgYmVjYXVzZSB3ZSBhcmUKLQkgICBhbHdheXMgY2FsbGVkIHdpdGggYXVkaXRfbmV0bGlua19tdXRleCBoZWxkLiAqLworCS8qIFRoaXMgaXMgYSBibG9ja2luZyByZWFkLCBzbyB1c2UgYXVkaXRfZmlsdGVyX211dGV4IGluc3RlYWQgb2YgcmN1CisJICogaXRlcmF0b3IgdG8gc3luYyB3aXRoIGxpc3Qgd3JpdGVycy4gKi8KIAlmb3IgKGk9MDsgaTxBVURJVF9OUl9GSUxURVJTOyBpKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmYXVkaXRfZmlsdGVyX2xpc3RbaV0sIGxpc3QpIHsKIAkJCXN0cnVjdCBhdWRpdF9ydWxlX2RhdGEgKmRhdGE7CkBAIC01NjYsMTUgKzEyMTksMzAgQEAKIAkJCWRhdGEgPSBhdWRpdF9rcnVsZV90b19kYXRhKCZlLT5ydWxlKTsKIAkJCWlmICh1bmxpa2VseSghZGF0YSkpCiAJCQkJYnJlYWs7Ci0JCQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAwLCAxLAotCQkJCQkgZGF0YSwgc2l6ZW9mKCpkYXRhKSk7CisJCQlza2IgPSBhdWRpdF9tYWtlX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAwLCAxLAorCQkJCQkgZGF0YSwgc2l6ZW9mKCpkYXRhKSArIGRhdGEtPmJ1Zmxlbik7CisJCQlpZiAoc2tiKQorCQkJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CiAJCQlrZnJlZShkYXRhKTsKIAkJfQogCX0KLQlhdWRpdF9zZW5kX3JlcGx5KHBpZCwgc2VxLCBBVURJVF9MSVNUX1JVTEVTLCAxLCAxLCBOVUxMLCAwKTsKKwlmb3IgKGk9MDsgaTwgQVVESVRfSU5PREVfQlVDS0VUUzsgaSsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmF1ZGl0X2lub2RlX2hhc2hbaV0sIGxpc3QpIHsKKwkJCXN0cnVjdCBhdWRpdF9ydWxlX2RhdGEgKmRhdGE7CiAKLQltdXRleF91bmxvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOwotCXJldHVybiAwOworCQkJZGF0YSA9IGF1ZGl0X2tydWxlX3RvX2RhdGEoJmUtPnJ1bGUpOworCQkJaWYgKHVubGlrZWx5KCFkYXRhKSkKKwkJCQlicmVhazsKKwkJCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1RfUlVMRVMsIDAsIDEsCisJCQkJCSBkYXRhLCBzaXplb2YoKmRhdGEpICsgZGF0YS0+YnVmbGVuKTsKKwkJCWlmIChza2IpCisJCQkJc2tiX3F1ZXVlX3RhaWwocSwgc2tiKTsKKwkJCWtmcmVlKGRhdGEpOworCQl9CisJfQorCXNrYiA9IGF1ZGl0X21ha2VfcmVwbHkocGlkLCBzZXEsIEFVRElUX0xJU1RfUlVMRVMsIDEsIDEsIE5VTEwsIDApOworCWlmIChza2IpCisJCXNrYl9xdWV1ZV90YWlsKHEsIHNrYik7CiB9CiAKIC8qKgpAQCAtNTkyLDcgKzEyNjAsNyBAQAogCQkJIHNpemVfdCBkYXRhc3osIHVpZF90IGxvZ2ludWlkLCB1MzIgc2lkKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwotCWludCAqZGVzdDsKKwlzdHJ1Y3QgYXVkaXRfbmV0bGlua19saXN0ICpkZXN0OwogCWludCBlcnIgPSAwOwogCXN0cnVjdCBhdWRpdF9lbnRyeSAqZW50cnk7CiAKQEAgLTYwNSwxOCArMTI3MywyMiBAQAogCQkgKiBoYXBwZW4gaWYgd2UncmUgYWN0dWFsbHkgcnVubmluZyBpbiB0aGUgY29udGV4dCBvZiBhdWRpdGN0bAogCQkgKiB0cnlpbmcgdG8gX3NlbmRfIHRoZSBzdHVmZiAqLwogCQkgCi0JCWRlc3QgPSBrbWFsbG9jKDIgKiBzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJCWRlc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaXRfbmV0bGlua19saXN0KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZGVzdCkKIAkJCXJldHVybiAtRU5PTUVNOwotCQlkZXN0WzBdID0gcGlkOwotCQlkZXN0WzFdID0gc2VxOworCQlkZXN0LT5waWQgPSBwaWQ7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmRlc3QtPnEpOwogCisJCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CiAJCWlmICh0eXBlID09IEFVRElUX0xJU1QpCi0JCQl0c2sgPSBrdGhyZWFkX3J1bihhdWRpdF9saXN0LCBkZXN0LCAiYXVkaXRfbGlzdCIpOworCQkJYXVkaXRfbGlzdChwaWQsIHNlcSwgJmRlc3QtPnEpOwogCQllbHNlCi0JCQl0c2sgPSBrdGhyZWFkX3J1bihhdWRpdF9saXN0X3J1bGVzLCBkZXN0LAotCQkJCQkgICJhdWRpdF9saXN0X3J1bGVzIik7CisJCQlhdWRpdF9saXN0X3J1bGVzKHBpZCwgc2VxLCAmZGVzdC0+cSk7CisJCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKKworCQl0c2sgPSBrdGhyZWFkX3J1bihhdWRpdF9zZW5kX2xpc3QsIGRlc3QsICJhdWRpdF9zZW5kX2xpc3QiKTsKIAkJaWYgKElTX0VSUih0c2spKSB7CisJCQlza2JfcXVldWVfcHVyZ2UoJmRlc3QtPnEpOwogCQkJa2ZyZWUoZGVzdCk7CiAJCQllcnIgPSBQVFJfRVJSKHRzayk7CiAJCX0KQEAgLTYzMiw2ICsxMzA0LDcgQEAKIAogCQllcnIgPSBhdWRpdF9hZGRfcnVsZShlbnRyeSwKIAkJCQkgICAgICZhdWRpdF9maWx0ZXJfbGlzdFtlbnRyeS0+cnVsZS5saXN0bnJdKTsKKwogCQlpZiAoc2lkKSB7CiAJCQljaGFyICpjdHggPSBOVUxMOwogCQkJdTMyIGxlbjsKQEAgLTcxMiw3ICsxMzg1LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qIENvbXBhcmUgZ2l2ZW4gZGVudHJ5IG5hbWUgd2l0aCBsYXN0IGNvbXBvbmVudCBpbiBnaXZlbiBwYXRoLAorICogcmV0dXJuIG9mIDAgaW5kaWNhdGVzIGEgbWF0Y2guICovCitpbnQgYXVkaXRfY29tcGFyZV9kbmFtZV9wYXRoKGNvbnN0IGNoYXIgKmRuYW1lLCBjb25zdCBjaGFyICpwYXRoLAorCQkJICAgICBpbnQgKmRpcmxlbikKK3sKKwlpbnQgZGxlbiwgcGxlbjsKKwljb25zdCBjaGFyICpwOwogCisJaWYgKCFkbmFtZSB8fCAhcGF0aCkKKwkJcmV0dXJuIDE7CisKKwlkbGVuID0gc3RybGVuKGRuYW1lKTsKKwlwbGVuID0gc3RybGVuKHBhdGgpOworCWlmIChwbGVuIDwgZGxlbikKKwkJcmV0dXJuIDE7CisKKwkvKiBkaXNyZWdhcmQgdHJhaWxpbmcgc2xhc2hlcyAqLworCXAgPSBwYXRoICsgcGxlbiAtIDE7CisJd2hpbGUgKCgqcCA9PSAnLycpICYmIChwID4gcGF0aCkpCisJCXAtLTsKKworCS8qIGZpbmQgbGFzdCBwYXRoIGNvbXBvbmVudCAqLworCXAgPSBwIC0gZGxlbiArIDE7CisJaWYgKHAgPCBwYXRoKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmIChwID4gcGF0aCkgeworCQlpZiAoKi0tcCAhPSAnLycpCisJCQlyZXR1cm4gMTsKKwkJZWxzZQorCQkJcCsrOworCX0KKworCS8qIHJldHVybiBsZW5ndGggb2YgcGF0aCdzIGRpcmVjdG9yeSBjb21wb25lbnQgKi8KKwlpZiAoZGlybGVuKQorCQkqZGlybGVuID0gcCAtIHBhdGg7CisJcmV0dXJuIHN0cm5jbXAocCwgZG5hbWUsIGRsZW4pOworfQogCiBzdGF0aWMgaW50IGF1ZGl0X2ZpbHRlcl91c2VyX3J1bGVzKHN0cnVjdCBuZXRsaW5rX3NrYl9wYXJtcyAqY2IsCiAJCQkJICAgc3RydWN0IGF1ZGl0X2tydWxlICpydWxlLApAQCAtNzQ0LDcgKzE0NTMsNiBAQAogCX0KIAlzd2l0Y2ggKHJ1bGUtPmFjdGlvbikgewogCWNhc2UgQVVESVRfTkVWRVI6ICAgICpzdGF0ZSA9IEFVRElUX0RJU0FCTEVEOwkgICAgYnJlYWs7Ci0JY2FzZSBBVURJVF9QT1NTSUJMRTogKnN0YXRlID0gQVVESVRfQlVJTERfQ09OVEVYVDsgIGJyZWFrOwogCWNhc2UgQVVESVRfQUxXQVlTOiAgICpzdGF0ZSA9IEFVRElUX1JFQ09SRF9DT05URVhUOyBicmVhazsKIAl9CiAJcmV0dXJuIDE7CkBAIC04MjYsMzIgKzE1MzQsNjUgQEAKIGludCBzZWxpbnV4X2F1ZGl0X3J1bGVfdXBkYXRlKHZvaWQpCiB7CiAJc3RydWN0IGF1ZGl0X2VudHJ5ICplbnRyeSwgKm4sICpuZW50cnk7CisJc3RydWN0IGF1ZGl0X3dhdGNoICp3YXRjaDsKIAlpbnQgaSwgZXJyID0gMDsKIAotCS8qIGF1ZGl0X25ldGxpbmtfbXV0ZXggc3luY2hyb25pemVzIHRoZSB3cml0ZXJzICovCi0JbXV0ZXhfbG9jaygmYXVkaXRfbmV0bGlua19tdXRleCk7CisJLyogYXVkaXRfZmlsdGVyX211dGV4IHN5bmNocm9uaXplcyB0aGUgd3JpdGVycyAqLworCW11dGV4X2xvY2soJmF1ZGl0X2ZpbHRlcl9tdXRleCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVVESVRfTlJfRklMVEVSUzsgaSsrKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbiwgJmF1ZGl0X2ZpbHRlcl9saXN0W2ldLCBsaXN0KSB7CiAJCQlpZiAoIWF1ZGl0X3J1bGVfaGFzX3NlbGludXgoJmVudHJ5LT5ydWxlKSkKIAkJCQljb250aW51ZTsKIAotCQkJbmVudHJ5ID0gYXVkaXRfZHVwZV9ydWxlKCZlbnRyeS0+cnVsZSk7CisJCQl3YXRjaCA9IGVudHJ5LT5ydWxlLndhdGNoOworCQkJbmVudHJ5ID0gYXVkaXRfZHVwZV9ydWxlKCZlbnRyeS0+cnVsZSwgd2F0Y2gpOwogCQkJaWYgKHVubGlrZWx5KElTX0VSUihuZW50cnkpKSkgewogCQkJCS8qIHNhdmUgdGhlIGZpcnN0IGVycm9yIGVuY291bnRlcmVkIGZvciB0aGUKIAkJCQkgKiByZXR1cm4gdmFsdWUgKi8KIAkJCQlpZiAoIWVycikKIAkJCQkJZXJyID0gUFRSX0VSUihuZW50cnkpOwogCQkJCWF1ZGl0X3BhbmljKCJlcnJvciB1cGRhdGluZyBzZWxpbnV4IGZpbHRlcnMiKTsKKwkJCQlpZiAod2F0Y2gpCisJCQkJCWxpc3RfZGVsKCZlbnRyeS0+cnVsZS5ybGlzdCk7CiAJCQkJbGlzdF9kZWxfcmN1KCZlbnRyeS0+bGlzdCk7CiAJCQl9IGVsc2UgeworCQkJCWlmICh3YXRjaCkgeworCQkJCQlsaXN0X2FkZCgmbmVudHJ5LT5ydWxlLnJsaXN0LAorCQkJCQkJICZ3YXRjaC0+cnVsZXMpOworCQkJCQlsaXN0X2RlbCgmZW50cnktPnJ1bGUucmxpc3QpOworCQkJCX0KIAkJCQlsaXN0X3JlcGxhY2VfcmN1KCZlbnRyeS0+bGlzdCwgJm5lbnRyeS0+bGlzdCk7CiAJCQl9CiAJCQljYWxsX3JjdSgmZW50cnktPnJjdSwgYXVkaXRfZnJlZV9ydWxlX3JjdSk7CiAJCX0KIAl9CiAKLQltdXRleF91bmxvY2soJmF1ZGl0X25ldGxpbmtfbXV0ZXgpOworCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CisKKy8qIFVwZGF0ZSB3YXRjaCBkYXRhIGluIGF1ZGl0IHJ1bGVzIGJhc2VkIG9uIGlub3RpZnkgZXZlbnRzLiAqLwordm9pZCBhdWRpdF9oYW5kbGVfaWV2ZW50KHN0cnVjdCBpbm90aWZ5X3dhdGNoICppX3dhdGNoLCB1MzIgd2QsIHUzMiBtYXNrLAorCQkJIHUzMiBjb29raWUsIGNvbnN0IGNoYXIgKmRuYW1lLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBhdWRpdF9wYXJlbnQgKnBhcmVudDsKKworCXBhcmVudCA9IGNvbnRhaW5lcl9vZihpX3dhdGNoLCBzdHJ1Y3QgYXVkaXRfcGFyZW50LCB3ZGF0YSk7CisKKwlpZiAobWFzayAmIChJTl9DUkVBVEV8SU5fTU9WRURfVE8pICYmIGlub2RlKQorCQlhdWRpdF91cGRhdGVfd2F0Y2gocGFyZW50LCBkbmFtZSwgaW5vZGUtPmlfc2ItPnNfZGV2LAorCQkJCSAgIGlub2RlLT5pX2lubywgMCk7CisJZWxzZSBpZiAobWFzayAmIChJTl9ERUxFVEV8SU5fTU9WRURfRlJPTSkpCisJCWF1ZGl0X3VwZGF0ZV93YXRjaChwYXJlbnQsIGRuYW1lLCAoZGV2X3QpLTEsICh1bnNpZ25lZCBsb25nKS0xLCAxKTsKKwkvKiBpbm90aWZ5IGF1dG9tYXRpY2FsbHkgcmVtb3ZlcyB0aGUgd2F0Y2ggYW5kIHNlbmRzIElOX0lHTk9SRUQgKi8KKwllbHNlIGlmIChtYXNrICYgKElOX0RFTEVURV9TRUxGfElOX1VOTU9VTlQpKQorCQlhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMocGFyZW50KTsKKwkvKiBpbm90aWZ5IGRvZXMgbm90IHJlbW92ZSB0aGUgd2F0Y2gsIHNvIHJlbW92ZSBpdCBtYW51YWxseSAqLworCWVsc2UgaWYobWFzayAmIElOX01PVkVfU0VMRikgeworCQlhdWRpdF9yZW1vdmVfcGFyZW50X3dhdGNoZXMocGFyZW50KTsKKwkJaW5vdGlmeV9yZW1vdmVfd2F0Y2hfbG9ja2VkKGF1ZGl0X2loLCBpX3dhdGNoKTsKKwl9IGVsc2UgaWYgKG1hc2sgJiBJTl9JR05PUkVEKQorCQlwdXRfaW5vdGlmeV93YXRjaChpX3dhdGNoKTsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdHNjLmMgYi9rZXJuZWwvYXVkaXRzYy5jCmluZGV4IDFjMDNhNGUuLmIwOTdjY2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdHNjLmMKKysrIGIva2VybmVsL2F1ZGl0c2MuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwMy0yMDA0IFJlZCBIYXQgSW5jLiwgRHVyaGFtLCBOb3J0aCBDYXJvbGluYS4KICAqIENvcHlyaWdodCAyMDA1IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgSUJNIENvcnBvcmF0aW9uCiAgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0yOSw2ICsyOSw5IEBACiAgKiB0aGlzIGZpbGUgLS0gc2VlIGVudHJ5LlMpIGlzIGJhc2VkIG9uIGEgR1BMJ2QgcGF0Y2ggd3JpdHRlbiBieQogICogb2tpckBzdXNlLmRlIGFuZCBDb3B5cmlnaHQgMjAwMyBTdVNFIExpbnV4IEFHLgogICoKKyAqIFBPU0lYIG1lc3NhZ2UgcXVldWUgc3VwcG9ydCBhZGRlZCBieSBHZW9yZ2UgV2lsc29uIDxsdGNnY3dAdXMuaWJtLmNvbT4sCisgKiAyMDA2LgorICoKICAqIFRoZSBzdXBwb3J0IG9mIGFkZGl0aW9uYWwgZmlsdGVyIHJ1bGVzIGNvbXBhcmVzICg+LCA8LCA+PSwgPD0pIHdhcwogICogYWRkZWQgYnkgRHVzdGluIEtpcmtsYW5kIDxkdXN0aW4ua2lya2xhbmRAdXMuaWJtLmNvbT4sIDIwMDUuCiAgKgpAQCAtNDksNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvbXF1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KQEAgLTU5LDYgKzYzLDggQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VsaW51eC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogCiAjaW5jbHVkZSAiYXVkaXQuaCIKIApAQCAtNzYsNiArODIsOSBAQAogICogcGF0aF9sb29rdXAuICovCiAjZGVmaW5lIEFVRElUX05BTUVTX1JFU0VSVkVEIDcKIAorLyogSW5kaWNhdGVzIHRoYXQgYXVkaXQgc2hvdWxkIGxvZyB0aGUgZnVsbCBwYXRobmFtZS4gKi8KKyNkZWZpbmUgQVVESVRfTkFNRV9GVUxMIC0xCisKIC8qIFdoZW4gZnMvbmFtZWkuYzpnZXRuYW1lKCkgaXMgY2FsbGVkLCB3ZSBzdG9yZSB0aGUgcG9pbnRlciBpbiBuYW1lIGFuZAogICogd2UgZG9uJ3QgbGV0IHB1dG5hbWUoKSBmcmVlIGl0IChpbnN0ZWFkIHdlIGZyZWUgYWxsIG9mIHRoZSBzYXZlZAogICogcG9pbnRlcnMgYXQgc3lzY2FsbCBleGl0IHRpbWUpLgpAQCAtODMsOCArOTIsOSBAQAogICogRnVydGhlciwgaW4gZnMvbmFtZWkuYzpwYXRoX2xvb2t1cCgpIHdlIHN0b3JlIHRoZSBpbm9kZSBhbmQgZGV2aWNlLiAqLwogc3RydWN0IGF1ZGl0X25hbWVzIHsKIAljb25zdCBjaGFyCSpuYW1lOworCWludAkJbmFtZV9sZW47CS8qIG51bWJlciBvZiBuYW1lJ3MgY2hhcmFjdGVycyB0byBsb2cgKi8KKwl1bnNpZ25lZAluYW1lX3B1dDsJLyogY2FsbCBfX3B1dG5hbWUoKSBmb3IgdGhpcyBuYW1lICovCiAJdW5zaWduZWQgbG9uZwlpbm87Ci0JdW5zaWduZWQgbG9uZwlwaW5vOwogCWRldl90CQlkZXY7CiAJdW1vZGVfdAkJbW9kZTsKIAl1aWRfdAkJdWlkOwpAQCAtMTAwLDYgKzExMCwzMyBAQAogCiAjZGVmaW5lIEFVRElUX0FVWF9JUENQRVJNCTAKIAorc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX29wZW4geworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YQlkOworCWludAkJCW9mbGFnOworCW1vZGVfdAkJCW1vZGU7CisJc3RydWN0IG1xX2F0dHIJCWF0dHI7Cit9OworCitzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfc2VuZHJlY3YgeworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YQlkOworCW1xZF90CQkJbXFkZXM7CisJc2l6ZV90CQkJbXNnX2xlbjsKKwl1bnNpZ25lZCBpbnQJCW1zZ19wcmlvOworCXN0cnVjdCB0aW1lc3BlYwkJYWJzX3RpbWVvdXQ7Cit9OworCitzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfbm90aWZ5IHsKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKKwltcWRfdAkJCW1xZGVzOworCXN0cnVjdCBzaWdldmVudCAJbm90aWZpY2F0aW9uOworfTsKKworc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX2dldHNldGF0dHIgeworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YQlkOworCW1xZF90CQkJbXFkZXM7CisJc3RydWN0IG1xX2F0dHIgCQltcXN0YXQ7Cit9OworCiBzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsIHsKIAlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGEJZDsKIAlzdHJ1Y3QgaXBjX3Blcm0JCXA7CkBAIC0xMTAsNiArMTQ3LDEzIEBACiAJdTMyCQkJb3NpZDsKIH07CiAKK3N0cnVjdCBhdWRpdF9hdXhfZGF0YV9leGVjdmUgeworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YQlkOworCWludCBhcmdjOworCWludCBlbnZjOworCWNoYXIgbWVtWzBdOworfTsKKwogc3RydWN0IGF1ZGl0X2F1eF9kYXRhX3NvY2tldGNhbGwgewogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YQlkOwogCWludAkJCW5hcmdzOwpAQCAtMTQ4LDcgKzE5Miw3IEBACiAJc3RydWN0IGF1ZGl0X2F1eF9kYXRhICphdXg7CiAKIAkJCQkvKiBTYXZlIHRoaW5ncyB0byBwcmludCBhYm91dCB0YXNrX3N0cnVjdCAqLwotCXBpZF90CQkgICAgcGlkOworCXBpZF90CQkgICAgcGlkLCBwcGlkOwogCXVpZF90CQkgICAgdWlkLCBldWlkLCBzdWlkLCBmc3VpZDsKIAlnaWRfdAkJICAgIGdpZCwgZWdpZCwgc2dpZCwgZnNnaWQ7CiAJdW5zaWduZWQgbG9uZwkgICAgcGVyc29uYWxpdHk7CkBAIC0xNjAsMTIgKzIwNCwxMyBAQAogI2VuZGlmCiB9OwogCi0KKy8qIERldGVybWluZSBpZiBhbnkgY29udGV4dCBuYW1lIGRhdGEgbWF0Y2hlcyBhIHJ1bGUncyB3YXRjaCBkYXRhICovCiAvKiBDb21wYXJlIGEgdGFza19zdHJ1Y3Qgd2l0aCBhbiBhdWRpdF9ydWxlLiAgUmV0dXJuIDEgb24gbWF0Y2gsIDAKICAqIG90aGVyd2lzZS4gKi8KIHN0YXRpYyBpbnQgYXVkaXRfZmlsdGVyX3J1bGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJICAgICAgc3RydWN0IGF1ZGl0X2tydWxlICpydWxlLAogCQkJICAgICAgc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCwKKwkJCSAgICAgIHN0cnVjdCBhdWRpdF9uYW1lcyAqbmFtZSwKIAkJCSAgICAgIGVudW0gYXVkaXRfc3RhdGUgKnN0YXRlKQogewogCWludCBpLCBqLCBuZWVkX3NpZCA9IDE7CkBAIC0xNzksNiArMjI0LDEwIEBACiAJCWNhc2UgQVVESVRfUElEOgogCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcih0c2stPnBpZCwgZi0+b3AsIGYtPnZhbCk7CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9QUElEOgorCQkJaWYgKGN0eCkKKwkJCQlyZXN1bHQgPSBhdWRpdF9jb21wYXJhdG9yKGN0eC0+cHBpZCwgZi0+b3AsIGYtPnZhbCk7CisJCQlicmVhazsKIAkJY2FzZSBBVURJVF9VSUQ6CiAJCQlyZXN1bHQgPSBhdWRpdF9jb21wYXJhdG9yKHRzay0+dWlkLCBmLT5vcCwgZi0+dmFsKTsKIAkJCWJyZWFrOwpAQCAtMjI0LDcgKzI3MywxMCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfREVWTUFKT1I6Ci0JCQlpZiAoY3R4KSB7CisJCQlpZiAobmFtZSkKKwkJCQlyZXN1bHQgPSBhdWRpdF9jb21wYXJhdG9yKE1BSk9SKG5hbWUtPmRldiksCisJCQkJCQkJICBmLT5vcCwgZi0+dmFsKTsKKwkJCWVsc2UgaWYgKGN0eCkgewogCQkJCWZvciAoaiA9IDA7IGogPCBjdHgtPm5hbWVfY291bnQ7IGorKykgewogCQkJCQlpZiAoYXVkaXRfY29tcGFyYXRvcihNQUpPUihjdHgtPm5hbWVzW2pdLmRldiksCWYtPm9wLCBmLT52YWwpKSB7CiAJCQkJCQkrK3Jlc3VsdDsKQEAgLTIzNCw3ICsyODYsMTAgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0RFVk1JTk9SOgotCQkJaWYgKGN0eCkgeworCQkJaWYgKG5hbWUpCisJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihNSU5PUihuYW1lLT5kZXYpLAorCQkJCQkJCSAgZi0+b3AsIGYtPnZhbCk7CisJCQllbHNlIGlmIChjdHgpIHsKIAkJCQlmb3IgKGogPSAwOyBqIDwgY3R4LT5uYW1lX2NvdW50OyBqKyspIHsKIAkJCQkJaWYgKGF1ZGl0X2NvbXBhcmF0b3IoTUlOT1IoY3R4LT5uYW1lc1tqXS5kZXYpLCBmLT5vcCwgZi0+dmFsKSkgewogCQkJCQkJKytyZXN1bHQ7CkBAIC0yNDQsMTYgKzI5OSwyMiBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgQVVESVRfSU5PREU6Ci0JCQlpZiAoY3R4KSB7CisJCQlpZiAobmFtZSkKKwkJCQlyZXN1bHQgPSAobmFtZS0+aW5vID09IGYtPnZhbCk7CisJCQllbHNlIGlmIChjdHgpIHsKIAkJCQlmb3IgKGogPSAwOyBqIDwgY3R4LT5uYW1lX2NvdW50OyBqKyspIHsKLQkJCQkJaWYgKGF1ZGl0X2NvbXBhcmF0b3IoY3R4LT5uYW1lc1tqXS5pbm8sIGYtPm9wLCBmLT52YWwpIHx8Ci0JCQkJCSAgICBhdWRpdF9jb21wYXJhdG9yKGN0eC0+bmFtZXNbal0ucGlubywgZi0+b3AsIGYtPnZhbCkpIHsKKwkJCQkJaWYgKGF1ZGl0X2NvbXBhcmF0b3IoY3R4LT5uYW1lc1tqXS5pbm8sIGYtPm9wLCBmLT52YWwpKSB7CiAJCQkJCQkrK3Jlc3VsdDsKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfV0FUQ0g6CisJCQlpZiAobmFtZSAmJiBydWxlLT53YXRjaC0+aW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKQorCQkJCXJlc3VsdCA9IChuYW1lLT5kZXYgPT0gcnVsZS0+d2F0Y2gtPmRldiAmJgorCQkJCQkgIG5hbWUtPmlubyA9PSBydWxlLT53YXRjaC0+aW5vKTsKKwkJCWJyZWFrOwogCQljYXNlIEFVRElUX0xPR0lOVUlEOgogCQkJcmVzdWx0ID0gMDsKIAkJCWlmIChjdHgpCkBAIC0yOTQsNyArMzU1LDYgQEAKIAl9CiAJc3dpdGNoIChydWxlLT5hY3Rpb24pIHsKIAljYXNlIEFVRElUX05FVkVSOiAgICAqc3RhdGUgPSBBVURJVF9ESVNBQkxFRDsJICAgIGJyZWFrOwotCWNhc2UgQVVESVRfUE9TU0lCTEU6ICpzdGF0ZSA9IEFVRElUX0JVSUxEX0NPTlRFWFQ7ICBicmVhazsKIAljYXNlIEFVRElUX0FMV0FZUzogICAqc3RhdGUgPSBBVURJVF9SRUNPUkRfQ09OVEVYVDsgYnJlYWs7CiAJfQogCXJldHVybiAxOwpAQCAtMzExLDcgKzM3MSw3IEBACiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgJmF1ZGl0X2ZpbHRlcl9saXN0W0FVRElUX0ZJTFRFUl9UQVNLXSwgbGlzdCkgewotCQlpZiAoYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIE5VTEwsICZzdGF0ZSkpIHsKKwkJaWYgKGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBOVUxMLCBOVUxMLCAmc3RhdGUpKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBzdGF0ZTsKIAkJfQpAQCAtMzQxLDggKzQwMSw5IEBACiAJCWludCBiaXQgID0gQVVESVRfQklUKGN0eC0+bWFqb3IpOwogCiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGUsIGxpc3QsIGxpc3QpIHsKLQkJCWlmICgoZS0+cnVsZS5tYXNrW3dvcmRdICYgYml0KSA9PSBiaXQKLQkJCQkJJiYgYXVkaXRfZmlsdGVyX3J1bGVzKHRzaywgJmUtPnJ1bGUsIGN0eCwgJnN0YXRlKSkgeworCQkJaWYgKChlLT5ydWxlLm1hc2tbd29yZF0gJiBiaXQpID09IGJpdCAmJgorCQkJICAgIGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBjdHgsIE5VTEwsCisJCQkJCSAgICAgICAmc3RhdGUpKSB7CiAJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJcmV0dXJuIHN0YXRlOwogCQkJfQpAQCAtMzUyLDYgKzQxMyw0OSBAQAogCXJldHVybiBBVURJVF9CVUlMRF9DT05URVhUOwogfQogCisvKiBBdCBzeXNjYWxsIGV4aXQgdGltZSwgdGhpcyBmaWx0ZXIgaXMgY2FsbGVkIGlmIGFueSBhdWRpdF9uYW1lc1tdIGhhdmUgYmVlbgorICogY29sbGVjdGVkIGR1cmluZyBzeXNjYWxsIHByb2Nlc3NpbmcuICBXZSBvbmx5IGNoZWNrIHJ1bGVzIGluIHN1Ymxpc3RzIGF0IGhhc2gKKyAqIGJ1Y2tldHMgYXBwbGljYWJsZSB0byB0aGUgaW5vZGUgbnVtYmVycyBpbiBhdWRpdF9uYW1lc1tdLgorICogUmVnYXJkaW5nIGF1ZGl0X3N0YXRlLCBzYW1lIHJ1bGVzIGFwcGx5IGFzIGZvciBhdWRpdF9maWx0ZXJfc3lzY2FsbCgpLgorICovCitlbnVtIGF1ZGl0X3N0YXRlIGF1ZGl0X2ZpbHRlcl9pbm9kZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCisJCQkJICAgICBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KQoreworCWludCBpOworCXN0cnVjdCBhdWRpdF9lbnRyeSAqZTsKKwllbnVtIGF1ZGl0X3N0YXRlIHN0YXRlOworCisJaWYgKGF1ZGl0X3BpZCAmJiB0c2stPnRnaWQgPT0gYXVkaXRfcGlkKQorCQlyZXR1cm4gQVVESVRfRElTQUJMRUQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yIChpID0gMDsgaSA8IGN0eC0+bmFtZV9jb3VudDsgaSsrKSB7CisJCWludCB3b3JkID0gQVVESVRfV09SRChjdHgtPm1ham9yKTsKKwkJaW50IGJpdCAgPSBBVURJVF9CSVQoY3R4LT5tYWpvcik7CisJCXN0cnVjdCBhdWRpdF9uYW1lcyAqbiA9ICZjdHgtPm5hbWVzW2ldOworCQlpbnQgaCA9IGF1ZGl0X2hhc2hfaW5vKCh1MzIpbi0+aW5vKTsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdCA9ICZhdWRpdF9pbm9kZV9oYXNoW2hdOworCisJCWlmIChsaXN0X2VtcHR5KGxpc3QpKQorCQkJY29udGludWU7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZSwgbGlzdCwgbGlzdCkgeworCQkJaWYgKChlLT5ydWxlLm1hc2tbd29yZF0gJiBiaXQpID09IGJpdCAmJgorCQkJICAgIGF1ZGl0X2ZpbHRlcl9ydWxlcyh0c2ssICZlLT5ydWxlLCBjdHgsIG4sICZzdGF0ZSkpIHsKKwkJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJCQlyZXR1cm4gc3RhdGU7CisJCQl9CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIEFVRElUX0JVSUxEX0NPTlRFWFQ7Cit9CisKK3ZvaWQgYXVkaXRfc2V0X2F1ZGl0YWJsZShzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4KQoreworCWN0eC0+YXVkaXRhYmxlID0gMTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfY29udGV4dCAqYXVkaXRfZ2V0X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJCQkgICAgICBpbnQgcmV0dXJuX3ZhbGlkLAogCQkJCQkJICAgICAgaW50IHJldHVybl9jb2RlKQpAQCAtMzY1LDEyICs0NjksMjIgQEAKIAogCWlmIChjb250ZXh0LT5pbl9zeXNjYWxsICYmICFjb250ZXh0LT5hdWRpdGFibGUpIHsKIAkJZW51bSBhdWRpdF9zdGF0ZSBzdGF0ZTsKKwogCQlzdGF0ZSA9IGF1ZGl0X2ZpbHRlcl9zeXNjYWxsKHRzaywgY29udGV4dCwgJmF1ZGl0X2ZpbHRlcl9saXN0W0FVRElUX0ZJTFRFUl9FWElUXSk7CisJCWlmIChzdGF0ZSA9PSBBVURJVF9SRUNPUkRfQ09OVEVYVCkgeworCQkJY29udGV4dC0+YXVkaXRhYmxlID0gMTsKKwkJCWdvdG8gZ2V0X2NvbnRleHQ7CisJCX0KKworCQlzdGF0ZSA9IGF1ZGl0X2ZpbHRlcl9pbm9kZXModHNrLCBjb250ZXh0KTsKIAkJaWYgKHN0YXRlID09IEFVRElUX1JFQ09SRF9DT05URVhUKQogCQkJY29udGV4dC0+YXVkaXRhYmxlID0gMTsKKwogCX0KIAorZ2V0X2NvbnRleHQ6CiAJY29udGV4dC0+cGlkID0gdHNrLT5waWQ7CisJY29udGV4dC0+cHBpZCA9IHN5c19nZXRwcGlkKCk7CS8qIHNpYy4gIHRzayA9PSBjdXJyZW50IGluIGFsbCBjYXNlcyAqLwogCWNvbnRleHQtPnVpZCA9IHRzay0+dWlkOwogCWNvbnRleHQtPmdpZCA9IHRzay0+Z2lkOwogCWNvbnRleHQtPmV1aWQgPSB0c2stPmV1aWQ7CkBAIC00MTMsNyArNTI3LDcgQEAKICNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8IGNvbnRleHQtPm5hbWVfY291bnQ7IGkrKykgewotCQlpZiAoY29udGV4dC0+bmFtZXNbaV0ubmFtZSkKKwkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUgJiYgY29udGV4dC0+bmFtZXNbaV0ubmFtZV9wdXQpCiAJCQlfX3B1dG5hbWUoY29udGV4dC0+bmFtZXNbaV0ubmFtZSk7CiAJfQogCWNvbnRleHQtPm5hbWVfY291bnQgPSAwOwpAQCAtNjA2LDcgKzcyMCw3IEBACiAJCXR0eSA9ICIobm9uZSkiOwogCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCiAJCSAgIiBhMD0lbHggYTE9JWx4IGEyPSVseCBhMz0lbHggaXRlbXM9JWQiCi0JCSAgIiBwaWQ9JWQgYXVpZD0ldSB1aWQ9JXUgZ2lkPSV1IgorCQkgICIgcHBpZD0lZCBwaWQ9JWQgYXVpZD0ldSB1aWQ9JXUgZ2lkPSV1IgogCQkgICIgZXVpZD0ldSBzdWlkPSV1IGZzdWlkPSV1IgogCQkgICIgZWdpZD0ldSBzZ2lkPSV1IGZzZ2lkPSV1IHR0eT0lcyIsCiAJCSAgY29udGV4dC0+YXJndlswXSwKQEAgLTYxNCw2ICs3MjgsNyBAQAogCQkgIGNvbnRleHQtPmFyZ3ZbMl0sCiAJCSAgY29udGV4dC0+YXJndlszXSwKIAkJICBjb250ZXh0LT5uYW1lX2NvdW50LAorCQkgIGNvbnRleHQtPnBwaWQsCiAJCSAgY29udGV4dC0+cGlkLAogCQkgIGNvbnRleHQtPmxvZ2ludWlkLAogCQkgIGNvbnRleHQtPnVpZCwKQEAgLTYzMCwxMSArNzQ1LDQ4IEBACiAJCQljb250aW51ZTsgLyogYXVkaXRfcGFuaWMgaGFzIGJlZW4gY2FsbGVkICovCiAKIAkJc3dpdGNoIChhdXgtPnR5cGUpIHsKKwkJY2FzZSBBVURJVF9NUV9PUEVOOiB7CisJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfb3BlbiAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCSJvZmxhZz0weCV4IG1vZGU9JSNvIG1xX2ZsYWdzPTB4JWx4IG1xX21heG1zZz0lbGQgIgorCQkJCSJtcV9tc2dzaXplPSVsZCBtcV9jdXJtc2dzPSVsZCIsCisJCQkJYXhpLT5vZmxhZywgYXhpLT5tb2RlLCBheGktPmF0dHIubXFfZmxhZ3MsCisJCQkJYXhpLT5hdHRyLm1xX21heG1zZywgYXhpLT5hdHRyLm1xX21zZ3NpemUsCisJCQkJYXhpLT5hdHRyLm1xX2N1cm1zZ3MpOworCQkJYnJlYWs7IH0KKworCQljYXNlIEFVRElUX01RX1NFTkRSRUNWOiB7CisJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfc2VuZHJlY3YgKmF4aSA9ICh2b2lkICopYXV4OworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKKwkJCQkibXFkZXM9JWQgbXNnX2xlbj0lemQgbXNnX3ByaW89JXUgIgorCQkJCSJhYnNfdGltZW91dF9zZWM9JWxkIGFic190aW1lb3V0X25zZWM9JWxkIiwKKwkJCQlheGktPm1xZGVzLCBheGktPm1zZ19sZW4sIGF4aS0+bXNnX3ByaW8sCisJCQkJYXhpLT5hYnNfdGltZW91dC50dl9zZWMsIGF4aS0+YWJzX3RpbWVvdXQudHZfbnNlYyk7CisJCQlicmVhazsgfQorCisJCWNhc2UgQVVESVRfTVFfTk9USUZZOiB7CisJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfbm90aWZ5ICpheGkgPSAodm9pZCAqKWF1eDsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCisJCQkJIm1xZGVzPSVkIHNpZ2V2X3NpZ25vPSVkIiwKKwkJCQlheGktPm1xZGVzLAorCQkJCWF4aS0+bm90aWZpY2F0aW9uLnNpZ2V2X3NpZ25vKTsKKwkJCWJyZWFrOyB9CisKKwkJY2FzZSBBVURJVF9NUV9HRVRTRVRBVFRSOiB7CisJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfZ2V0c2V0YXR0ciAqYXhpID0gKHZvaWQgKilhdXg7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAorCQkJCSJtcWRlcz0lZCBtcV9mbGFncz0weCVseCBtcV9tYXhtc2c9JWxkIG1xX21zZ3NpemU9JWxkICIKKwkJCQkibXFfY3VybXNncz0lbGQgIiwKKwkJCQlheGktPm1xZGVzLAorCQkJCWF4aS0+bXFzdGF0Lm1xX2ZsYWdzLCBheGktPm1xc3RhdC5tcV9tYXhtc2csCisJCQkJYXhpLT5tcXN0YXQubXFfbXNnc2l6ZSwgYXhpLT5tcXN0YXQubXFfY3VybXNncyk7CisJCQlicmVhazsgfQorCiAJCWNhc2UgQVVESVRfSVBDOiB7CiAJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfaXBjY3RsICpheGkgPSAodm9pZCAqKWF1eDsKIAkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsIAotCQkJCSAiIHFieXRlcz0lbHggaXVpZD0ldSBpZ2lkPSV1IG1vZGU9JXgiLAotCQkJCSBheGktPnFieXRlcywgYXhpLT51aWQsIGF4aS0+Z2lkLCBheGktPm1vZGUpOworCQkJCSAib3VpZD0ldSBvZ2lkPSV1IG1vZGU9JXgiLAorCQkJCSBheGktPnVpZCwgYXhpLT5naWQsIGF4aS0+bW9kZSk7CiAJCQlpZiAoYXhpLT5vc2lkICE9IDApIHsKIAkJCQljaGFyICpjdHggPSBOVUxMOwogCQkJCXUzMiBsZW47CkBAIC02NTIsMTkgKzgwNCwxOCBAQAogCQljYXNlIEFVRElUX0lQQ19TRVRfUEVSTTogewogCQkJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXhpID0gKHZvaWQgKilhdXg7CiAJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLAotCQkJCSIgbmV3IHFieXRlcz0lbHggbmV3IGl1aWQ9JXUgbmV3IGlnaWQ9JXUgbmV3IG1vZGU9JXgiLAorCQkJCSJxYnl0ZXM9JWx4IG91aWQ9JXUgb2dpZD0ldSBtb2RlPSV4IiwKIAkJCQlheGktPnFieXRlcywgYXhpLT51aWQsIGF4aS0+Z2lkLCBheGktPm1vZGUpOwotCQkJaWYgKGF4aS0+b3NpZCAhPSAwKSB7Ci0JCQkJY2hhciAqY3R4ID0gTlVMTDsKLQkJCQl1MzIgbGVuOwotCQkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKLQkJCQkJCWF4aS0+b3NpZCwgJmN0eCwgJmxlbikpIHsKLQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvc2lkPSV1IiwKLQkJCQkJCQlheGktPm9zaWQpOwotCQkJCQljYWxsX3BhbmljID0gMTsKLQkJCQl9IGVsc2UKLQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvYmo9JXMiLCBjdHgpOwotCQkJCWtmcmVlKGN0eCk7CisJCQlicmVhazsgfQorCisJCWNhc2UgQVVESVRfRVhFQ1ZFOiB7CisJCQlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfZXhlY3ZlICpheGkgPSAodm9pZCAqKWF1eDsKKwkJCWludCBpOworCQkJY29uc3QgY2hhciAqcDsKKwkJCWZvciAoaSA9IDAsIHAgPSBheGktPm1lbTsgaSA8IGF4aS0+YXJnYzsgaSsrKSB7CisJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgImElZD0iLCBpKTsKKwkJCQlwID0gYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgcCk7CisJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIlxuIik7CiAJCQl9CiAJCQlicmVhazsgfQogCkBAIC03MDAsOCArODUxLDcgQEAKIAkJfQogCX0KIAlmb3IgKGkgPSAwOyBpIDwgY29udGV4dC0+bmFtZV9jb3VudDsgaSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW5vICA9IGNvbnRleHQtPm5hbWVzW2ldLmlubzsKLQkJdW5zaWduZWQgbG9uZyBwaW5vID0gY29udGV4dC0+bmFtZXNbaV0ucGlubzsKKwkJc3RydWN0IGF1ZGl0X25hbWVzICpuID0gJmNvbnRleHQtPm5hbWVzW2ldOwogCiAJCWFiID0gYXVkaXRfbG9nX3N0YXJ0KGNvbnRleHQsIEdGUF9LRVJORUwsIEFVRElUX1BBVEgpOwogCQlpZiAoIWFiKQpAQCAtNzA5LDMzICs4NTksNDcgQEAKIAogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiaXRlbT0lZCIsIGkpOwogCi0JCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0iKTsKLQkJaWYgKGNvbnRleHQtPm5hbWVzW2ldLm5hbWUpCi0JCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBjb250ZXh0LT5uYW1lc1tpXS5uYW1lKTsKLQkJZWxzZQotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIihudWxsKSIpOworCQlpZiAobi0+bmFtZSkgeworCQkJc3dpdGNoKG4tPm5hbWVfbGVuKSB7CisJCQljYXNlIEFVRElUX05BTUVfRlVMTDoKKwkJCQkvKiBsb2cgdGhlIGZ1bGwgcGF0aCAqLworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbmFtZT0iKTsKKwkJCQlhdWRpdF9sb2dfdW50cnVzdGVkc3RyaW5nKGFiLCBuLT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQkvKiBuYW1lIHdhcyBzcGVjaWZpZWQgYXMgYSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUKKwkJCQkgKiBkaXJlY3RvcnkgY29tcG9uZW50IGlzIHRoZSBjd2QgKi8KKwkJCQlhdWRpdF9sb2dfZF9wYXRoKGFiLCAiIG5hbWU9IiwgY29udGV4dC0+cHdkLAorCQkJCQkJIGNvbnRleHQtPnB3ZG1udCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qIGxvZyB0aGUgbmFtZSdzIGRpcmVjdG9yeSBjb21wb25lbnQgKi8KKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIG5hbWU9Iik7CisJCQkJYXVkaXRfbG9nX25fdW50cnVzdGVkc3RyaW5nKGFiLCBuLT5uYW1lX2xlbiwKKwkJCQkJCQkgICAgbi0+bmFtZSk7CisJCQl9CisJCX0gZWxzZQorCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBuYW1lPShudWxsKSIpOwogCi0JCWlmIChwaW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKQotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBwYXJlbnQ9JWx1IiwgIHBpbm8pOwotCQlpZiAoaW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKQotCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBpbm9kZT0lbHUiLCAgaW5vKTsKLQkJaWYgKChwaW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKSB8fCAoaW5vICE9ICh1bnNpZ25lZCBsb25nKS0xKSkKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgZGV2PSUwMng6JTAyeCBtb2RlPSUjbyIgCi0JCQkJCSAiIG91aWQ9JXUgb2dpZD0ldSByZGV2PSUwMng6JTAyeCIsIAotCQkJCQkgTUFKT1IoY29udGV4dC0+bmFtZXNbaV0uZGV2KSwgCi0JCQkJCSBNSU5PUihjb250ZXh0LT5uYW1lc1tpXS5kZXYpLCAKLQkJCQkJIGNvbnRleHQtPm5hbWVzW2ldLm1vZGUsIAotCQkJCQkgY29udGV4dC0+bmFtZXNbaV0udWlkLCAKLQkJCQkJIGNvbnRleHQtPm5hbWVzW2ldLmdpZCwgCi0JCQkJCSBNQUpPUihjb250ZXh0LT5uYW1lc1tpXS5yZGV2KSwgCi0JCQkJCSBNSU5PUihjb250ZXh0LT5uYW1lc1tpXS5yZGV2KSk7Ci0JCWlmIChjb250ZXh0LT5uYW1lc1tpXS5vc2lkICE9IDApIHsKKwkJaWYgKG4tPmlubyAhPSAodW5zaWduZWQgbG9uZyktMSkgeworCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBpbm9kZT0lbHUiCisJCQkJCSAiIGRldj0lMDJ4OiUwMnggbW9kZT0lI28iCisJCQkJCSAiIG91aWQ9JXUgb2dpZD0ldSByZGV2PSUwMng6JTAyeCIsCisJCQkJCSBuLT5pbm8sCisJCQkJCSBNQUpPUihuLT5kZXYpLAorCQkJCQkgTUlOT1Iobi0+ZGV2KSwKKwkJCQkJIG4tPm1vZGUsCisJCQkJCSBuLT51aWQsCisJCQkJCSBuLT5naWQsCisJCQkJCSBNQUpPUihuLT5yZGV2KSwKKwkJCQkJIE1JTk9SKG4tPnJkZXYpKTsKKwkJfQorCQlpZiAobi0+b3NpZCAhPSAwKSB7CiAJCQljaGFyICpjdHggPSBOVUxMOwogCQkJdTMyIGxlbjsKIAkJCWlmIChzZWxpbnV4X2N0eGlkX3RvX3N0cmluZygKLQkJCQljb250ZXh0LT5uYW1lc1tpXS5vc2lkLCAmY3R4LCAmbGVuKSkgewotCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsCi0JCQkJCQljb250ZXh0LT5uYW1lc1tpXS5vc2lkKTsKKwkJCQluLT5vc2lkLCAmY3R4LCAmbGVuKSkgeworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgb3NpZD0ldSIsIG4tPm9zaWQpOwogCQkJCWNhbGxfcGFuaWMgPSAyOwogCQkJfSBlbHNlCiAJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBvYmo9JXMiLCBjdHgpOwpAQCAtOTA4LDExICsxMDcyLDExIEBACiAgKiBBZGQgYSBuYW1lIHRvIHRoZSBsaXN0IG9mIGF1ZGl0IG5hbWVzIGZvciB0aGlzIGNvbnRleHQuCiAgKiBDYWxsZWQgZnJvbSBmcy9uYW1laS5jOmdldG5hbWUoKS4KICAqLwotdm9pZCBhdWRpdF9nZXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit2b2lkIF9fYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKIAotCWlmICghY29udGV4dCB8fCBJU19FUlIobmFtZSkgfHwgIW5hbWUpCisJaWYgKElTX0VSUihuYW1lKSB8fCAhbmFtZSkKIAkJcmV0dXJuOwogCiAJaWYgKCFjb250ZXh0LT5pbl9zeXNjYWxsKSB7CkBAIC05MjUsNiArMTA4OSw4IEBACiAJfQogCUJVR19PTihjb250ZXh0LT5uYW1lX2NvdW50ID49IEFVRElUX05BTUVTKTsKIAljb250ZXh0LT5uYW1lc1tjb250ZXh0LT5uYW1lX2NvdW50XS5uYW1lID0gbmFtZTsKKwljb250ZXh0LT5uYW1lc1tjb250ZXh0LT5uYW1lX2NvdW50XS5uYW1lX2xlbiA9IEFVRElUX05BTUVfRlVMTDsKKwljb250ZXh0LT5uYW1lc1tjb250ZXh0LT5uYW1lX2NvdW50XS5uYW1lX3B1dCA9IDE7CiAJY29udGV4dC0+bmFtZXNbY29udGV4dC0+bmFtZV9jb3VudF0uaW5vICA9ICh1bnNpZ25lZCBsb25nKS0xOwogCSsrY29udGV4dC0+bmFtZV9jb3VudDsKIAlpZiAoIWNvbnRleHQtPnB3ZCkgewpAQCAtOTkxLDExICsxMTU3LDEwIEBACiAgKiBhdWRpdF9pbm9kZSAtIHN0b3JlIHRoZSBpbm9kZSBhbmQgZGV2aWNlIGZyb20gYSBsb29rdXAKICAqIEBuYW1lOiBuYW1lIGJlaW5nIGF1ZGl0ZWQKICAqIEBpbm9kZTogaW5vZGUgYmVpbmcgYXVkaXRlZAotICogQGZsYWdzOiBsb29rdXAgZmxhZ3MgKGFzIHVzZWQgaW4gcGF0aF9sb29rdXAoKSkKICAqCiAgKiBDYWxsZWQgZnJvbSBmcy9uYW1laS5jOnBhdGhfbG9va3VwKCkuCiAgKi8KLXZvaWQgX19hdWRpdF9pbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBmbGFncykKK3ZvaWQgX19hdWRpdF9pbm9kZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWludCBpZHg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwpAQCAtMTAyMSwyMCArMTE4NiwxMyBAQAogCQkrK2NvbnRleHQtPmlub19jb3VudDsKICNlbmRpZgogCX0KKwljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gaW5vZGUtPmlfaW5vOwogCWNvbnRleHQtPm5hbWVzW2lkeF0uZGV2CSAgPSBpbm9kZS0+aV9zYi0+c19kZXY7CiAJY29udGV4dC0+bmFtZXNbaWR4XS5tb2RlICA9IGlub2RlLT5pX21vZGU7CiAJY29udGV4dC0+bmFtZXNbaWR4XS51aWQgICA9IGlub2RlLT5pX3VpZDsKIAljb250ZXh0LT5uYW1lc1tpZHhdLmdpZCAgID0gaW5vZGUtPmlfZ2lkOwogCWNvbnRleHQtPm5hbWVzW2lkeF0ucmRldiAgPSBpbm9kZS0+aV9yZGV2OwogCWF1ZGl0X2lub2RlX2NvbnRleHQoaWR4LCBpbm9kZSk7Ci0JaWYgKChmbGFncyAmIExPT0tVUF9QQVJFTlQpICYmIChzdHJjbXAobmFtZSwgIi8iKSAhPSAwKSAmJiAKLQkgICAgKHN0cmNtcChuYW1lLCAiLiIpICE9IDApKSB7Ci0JCWNvbnRleHQtPm5hbWVzW2lkeF0uaW5vICAgPSAodW5zaWduZWQgbG9uZyktMTsKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5waW5vICA9IGlub2RlLT5pX2lubzsKLQl9IGVsc2UgewotCQljb250ZXh0LT5uYW1lc1tpZHhdLmlubyAgID0gaW5vZGUtPmlfaW5vOwotCQljb250ZXh0LT5uYW1lc1tpZHhdLnBpbm8gID0gKHVuc2lnbmVkIGxvbmcpLTE7Ci0JfQogfQogCiAvKioKQEAgLTEwNTYsNTEgKzEyMTQsNDAgQEAKIHsKIAlpbnQgaWR4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKwljb25zdCBjaGFyICpmb3VuZF9uYW1lID0gTlVMTDsKKwlpbnQgZGlybGVuID0gMDsKIAogCWlmICghY29udGV4dC0+aW5fc3lzY2FsbCkKIAkJcmV0dXJuOwogCiAJLyogZGV0ZXJtaW5lIG1hdGNoaW5nIHBhcmVudCAqLwotCWlmIChkbmFtZSkKLQkJZm9yIChpZHggPSAwOyBpZHggPCBjb250ZXh0LT5uYW1lX2NvdW50OyBpZHgrKykKLQkJCWlmIChjb250ZXh0LT5uYW1lc1tpZHhdLnBpbm8gPT0gcGlubykgewotCQkJCWNvbnN0IGNoYXIgKm47Ci0JCQkJY29uc3QgY2hhciAqbmFtZSA9IGNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZTsKLQkJCQlpbnQgZGxlbiA9IHN0cmxlbihkbmFtZSk7Ci0JCQkJaW50IG5sZW4gPSBuYW1lID8gc3RybGVuKG5hbWUpIDogMDsKKwlpZiAoIWRuYW1lKQorCQlnb3RvIHVwZGF0ZV9jb250ZXh0OworCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udGV4dC0+bmFtZV9jb3VudDsgaWR4KyspCisJCWlmIChjb250ZXh0LT5uYW1lc1tpZHhdLmlubyA9PSBwaW5vKSB7CisJCQljb25zdCBjaGFyICpuYW1lID0gY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lOwogCi0JCQkJaWYgKG5sZW4gPCBkbGVuKQotCQkJCQljb250aW51ZTsKLQkJCQkKLQkJCQkvKiBkaXNyZWdhcmQgdHJhaWxpbmcgc2xhc2hlcyAqLwotCQkJCW4gPSBuYW1lICsgbmxlbiAtIDE7Ci0JCQkJd2hpbGUgKCgqbiA9PSAnLycpICYmIChuID4gbmFtZSkpCi0JCQkJCW4tLTsKKwkJCWlmICghbmFtZSkKKwkJCQljb250aW51ZTsKIAotCQkJCS8qIGZpbmQgbGFzdCBwYXRoIGNvbXBvbmVudCAqLwotCQkJCW4gPSBuIC0gZGxlbiArIDE7Ci0JCQkJaWYgKG4gPCBuYW1lKQotCQkJCQljb250aW51ZTsKLQkJCQllbHNlIGlmIChuID4gbmFtZSkgewotCQkJCQlpZiAoKi0tbiAhPSAnLycpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJZWxzZQotCQkJCQkJbisrOwotCQkJCX0KLQotCQkJCWlmIChzdHJuY21wKG4sIGRuYW1lLCBkbGVuKSA9PSAwKQotCQkJCQlnb3RvIHVwZGF0ZV9jb250ZXh0OworCQkJaWYgKGF1ZGl0X2NvbXBhcmVfZG5hbWVfcGF0aChkbmFtZSwgbmFtZSwgJmRpcmxlbikgPT0gMCkgeworCQkJCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZV9sZW4gPSBkaXJsZW47CisJCQkJZm91bmRfbmFtZSA9IG5hbWU7CisJCQkJYnJlYWs7CiAJCQl9CisJCX0KIAotCS8qIGNhdGNoLWFsbCBpbiBjYXNlIG1hdGNoIG5vdCBmb3VuZCAqLwordXBkYXRlX2NvbnRleHQ6CiAJaWR4ID0gY29udGV4dC0+bmFtZV9jb3VudCsrOwotCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZSAgPSBOVUxMOwotCWNvbnRleHQtPm5hbWVzW2lkeF0ucGlubyAgPSBwaW5vOwogI2lmIEFVRElUX0RFQlVHCiAJY29udGV4dC0+aW5vX2NvdW50Kys7CiAjZW5kaWYKKwkvKiBSZS11c2UgdGhlIG5hbWUgYmVsb25naW5nIHRvIHRoZSBzbG90IGZvciBhIG1hdGNoaW5nIHBhcmVudCBkaXJlY3RvcnkuCisJICogQWxsIG5hbWVzIGZvciB0aGlzIGNvbnRleHQgYXJlIHJlbGlucXVpc2hlZCBpbiBhdWRpdF9mcmVlX25hbWVzKCkgKi8KKwljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWUgPSBmb3VuZF9uYW1lOworCWNvbnRleHQtPm5hbWVzW2lkeF0ubmFtZV9sZW4gPSBBVURJVF9OQU1FX0ZVTEw7CisJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lX3B1dCA9IDA7CS8qIGRvbid0IGNhbGwgX19wdXRuYW1lKCkgKi8KIAotdXBkYXRlX2NvbnRleHQ6CiAJaWYgKGlub2RlKSB7CiAJCWNvbnRleHQtPm5hbWVzW2lkeF0uaW5vICAgPSBpbm9kZS0+aV9pbm87CiAJCWNvbnRleHQtPm5hbWVzW2lkeF0uZGV2CSAgPSBpbm9kZS0+aV9zYi0+c19kZXY7CkBAIC0xMTA5LDcgKzEyNTYsOCBAQAogCQljb250ZXh0LT5uYW1lc1tpZHhdLmdpZCAgID0gaW5vZGUtPmlfZ2lkOwogCQljb250ZXh0LT5uYW1lc1tpZHhdLnJkZXYgID0gaW5vZGUtPmlfcmRldjsKIAkJYXVkaXRfaW5vZGVfY29udGV4dChpZHgsIGlub2RlKTsKLQl9CisJfSBlbHNlCisJCWNvbnRleHQtPm5hbWVzW2lkeF0uaW5vICAgPSAodW5zaWduZWQgbG9uZyktMTsKIH0KIAogLyoqCkBAIC0xMTQyLDE4ICsxMjkwLDIzIEBACiAgKi8KIGludCBhdWRpdF9zZXRfbG9naW51aWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1aWRfdCBsb2dpbnVpZCkKIHsKLQlpZiAodGFzay0+YXVkaXRfY29udGV4dCkgewotCQlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphYjsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IHRhc2stPmF1ZGl0X2NvbnRleHQ7CiAKLQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfTE9HSU4pOwotCQlpZiAoYWIpIHsKLQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJsb2dpbiBwaWQ9JWQgdWlkPSV1ICIKLQkJCQkib2xkIGF1aWQ9JXUgbmV3IGF1aWQ9JXUiLAotCQkJCXRhc2stPnBpZCwgdGFzay0+dWlkLCAKLQkJCQl0YXNrLT5hdWRpdF9jb250ZXh0LT5sb2dpbnVpZCwgbG9naW51aWQpOwotCQkJYXVkaXRfbG9nX2VuZChhYik7CisJaWYgKGNvbnRleHQpIHsKKwkJLyogT25seSBsb2cgaWYgYXVkaXQgaXMgZW5hYmxlZCAqLworCQlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCkgeworCQkJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CisKKwkJCWFiID0gYXVkaXRfbG9nX3N0YXJ0KE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0xPR0lOKTsKKwkJCWlmIChhYikgeworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJsb2dpbiBwaWQ9JWQgdWlkPSV1ICIKKwkJCQkJIm9sZCBhdWlkPSV1IG5ldyBhdWlkPSV1IiwKKwkJCQkJdGFzay0+cGlkLCB0YXNrLT51aWQsCisJCQkJCWNvbnRleHQtPmxvZ2ludWlkLCBsb2dpbnVpZCk7CisJCQkJYXVkaXRfbG9nX2VuZChhYik7CisJCQl9CiAJCX0KLQkJdGFzay0+YXVkaXRfY29udGV4dC0+bG9naW51aWQgPSBsb2dpbnVpZDsKKwkJY29udGV4dC0+bG9naW51aWQgPSBsb2dpbnVpZDsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTcwLDE5ICsxMzIzLDIyMCBAQAogfQogCiAvKioKKyAqIF9fYXVkaXRfbXFfb3BlbiAtIHJlY29yZCBhdWRpdCBkYXRhIGZvciBhIFBPU0lYIE1RIG9wZW4KKyAqIEBvZmxhZzogb3BlbiBmbGFnCisgKiBAbW9kZTogbW9kZSBiaXRzCisgKiBAdV9hdHRyOiBxdWV1ZSBhdHRyaWJ1dGVzCisgKgorICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIE5VTEwgY29udGV4dCBvciA8IDAgb24gZXJyb3IuCisgKi8KK2ludCBfX2F1ZGl0X21xX29wZW4oaW50IG9mbGFnLCBtb2RlX3QgbW9kZSwgc3RydWN0IG1xX2F0dHIgX191c2VyICp1X2F0dHIpCit7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX21xX29wZW4gKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKworCWlmICghYXVkaXRfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGlrZWx5KCFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOworCWlmICghYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVfYXR0ciAhPSBOVUxMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXgtPmF0dHIsIHVfYXR0ciwgc2l6ZW9mKGF4LT5hdHRyKSkpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCW1lbXNldCgmYXgtPmF0dHIsIDAsIHNpemVvZihheC0+YXR0cikpOworCisJYXgtPm9mbGFnID0gb2ZsYWc7CisJYXgtPm1vZGUgPSBtb2RlOworCisJYXgtPmQudHlwZSA9IEFVRElUX01RX09QRU47CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisvKioKKyAqIF9fYXVkaXRfbXFfdGltZWRzZW5kIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgdGltZWQgc2VuZAorICogQG1xZGVzOiBNUSBkZXNjcmlwdG9yCisgKiBAbXNnX2xlbjogTWVzc2FnZSBsZW5ndGgKKyAqIEBtc2dfcHJpbzogTWVzc2FnZSBwcmlvcml0eQorICogQGFic190aW1lb3V0OiBNZXNzYWdlIHRpbWVvdXQgaW4gYWJzb2x1dGUgdGltZQorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgorICovCitpbnQgX19hdWRpdF9tcV90aW1lZHNlbmQobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgbXNnX3ByaW8sCisJCQljb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1X2Fic190aW1lb3V0KQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9zZW5kcmVjdiAqYXg7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OworCisJaWYgKCFhdWRpdF9lbmFibGVkKQorCQlyZXR1cm4gMDsKKworCWlmIChsaWtlbHkoIWNvbnRleHQpKQorCQlyZXR1cm4gMDsKKworCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CisJaWYgKCFheCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAodV9hYnNfdGltZW91dCAhPSBOVUxMKSB7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmYXgtPmFic190aW1lb3V0LCB1X2Fic190aW1lb3V0LCBzaXplb2YoYXgtPmFic190aW1lb3V0KSkpIHsKKwkJCWtmcmVlKGF4KTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfSBlbHNlCisJCW1lbXNldCgmYXgtPmFic190aW1lb3V0LCAwLCBzaXplb2YoYXgtPmFic190aW1lb3V0KSk7CisKKwlheC0+bXFkZXMgPSBtcWRlczsKKwlheC0+bXNnX2xlbiA9IG1zZ19sZW47CisJYXgtPm1zZ19wcmlvID0gbXNnX3ByaW87CisKKwlheC0+ZC50eXBlID0gQVVESVRfTVFfU0VORFJFQ1Y7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisvKioKKyAqIF9fYXVkaXRfbXFfdGltZWRyZWNlaXZlIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIGEgUE9TSVggTVEgdGltZWQgcmVjZWl2ZQorICogQG1xZGVzOiBNUSBkZXNjcmlwdG9yCisgKiBAbXNnX2xlbjogTWVzc2FnZSBsZW5ndGgKKyAqIEBtc2dfcHJpbzogTWVzc2FnZSBwcmlvcml0eQorICogQGFic190aW1lb3V0OiBNZXNzYWdlIHRpbWVvdXQgaW4gYWJzb2x1dGUgdGltZQorICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgorICovCitpbnQgX19hdWRpdF9tcV90aW1lZHJlY2VpdmUobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLAorCQkJCXVuc2lnbmVkIGludCBfX3VzZXIgKnVfbXNnX3ByaW8sCisJCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqdV9hYnNfdGltZW91dCkKK3sKKwlzdHJ1Y3QgYXVkaXRfYXV4X2RhdGFfbXFfc2VuZHJlY3YgKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKworCWlmICghYXVkaXRfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGlrZWx5KCFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOworCWlmICghYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVfbXNnX3ByaW8gIT0gTlVMTCkgeworCQlpZiAoZ2V0X3VzZXIoYXgtPm1zZ19wcmlvLCB1X21zZ19wcmlvKSkgeworCQkJa2ZyZWUoYXgpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJYXgtPm1zZ19wcmlvID0gMDsKKworCWlmICh1X2Fic190aW1lb3V0ICE9IE5VTEwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZheC0+YWJzX3RpbWVvdXQsIHVfYWJzX3RpbWVvdXQsIHNpemVvZihheC0+YWJzX3RpbWVvdXQpKSkgeworCQkJa2ZyZWUoYXgpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJbWVtc2V0KCZheC0+YWJzX3RpbWVvdXQsIDAsIHNpemVvZihheC0+YWJzX3RpbWVvdXQpKTsKKworCWF4LT5tcWRlcyA9IG1xZGVzOworCWF4LT5tc2dfbGVuID0gbXNnX2xlbjsKKworCWF4LT5kLnR5cGUgPSBBVURJVF9NUV9TRU5EUkVDVjsKKwlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OworCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX19hdWRpdF9tcV9ub3RpZnkgLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgYSBQT1NJWCBNUSBub3RpZnkKKyAqIEBtcWRlczogTVEgZGVzY3JpcHRvcgorICogQHVfbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24gZXZlbnQKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KKyAqLworCitpbnQgX19hdWRpdF9tcV9ub3RpZnkobXFkX3QgbXFkZXMsIGNvbnN0IHN0cnVjdCBzaWdldmVudCBfX3VzZXIgKnVfbm90aWZpY2F0aW9uKQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9ub3RpZnkgKmF4OworCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKKworCWlmICghYXVkaXRfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobGlrZWx5KCFjb250ZXh0KSkKKwkJcmV0dXJuIDA7CisKKwlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCksIEdGUF9BVE9NSUMpOworCWlmICghYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHVfbm90aWZpY2F0aW9uICE9IE5VTEwpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZheC0+bm90aWZpY2F0aW9uLCB1X25vdGlmaWNhdGlvbiwgc2l6ZW9mKGF4LT5ub3RpZmljYXRpb24pKSkgeworCQkJa2ZyZWUoYXgpOworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9IGVsc2UKKwkJbWVtc2V0KCZheC0+bm90aWZpY2F0aW9uLCAwLCBzaXplb2YoYXgtPm5vdGlmaWNhdGlvbikpOworCisJYXgtPm1xZGVzID0gbXFkZXM7CisKKwlheC0+ZC50eXBlID0gQVVESVRfTVFfTk9USUZZOworCWF4LT5kLm5leHQgPSBjb250ZXh0LT5hdXg7CisJY29udGV4dC0+YXV4ID0gKHZvaWQgKilheDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBfX2F1ZGl0X21xX2dldHNldGF0dHIgLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgYSBQT1NJWCBNUSBnZXQvc2V0IGF0dHJpYnV0ZQorICogQG1xZGVzOiBNUSBkZXNjcmlwdG9yCisgKiBAbXFzdGF0OiBNUSBmbGFncworICoKKyAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgorICovCitpbnQgX19hdWRpdF9tcV9nZXRzZXRhdHRyKG1xZF90IG1xZGVzLCBzdHJ1Y3QgbXFfYXR0ciAqbXFzdGF0KQoreworCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9tcV9nZXRzZXRhdHRyICpheDsKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisKKwlpZiAoIWF1ZGl0X2VuYWJsZWQpCisJCXJldHVybiAwOworCisJaWYgKGxpa2VseSghY29udGV4dCkpCisJCXJldHVybiAwOworCisJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWF4KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWF4LT5tcWRlcyA9IG1xZGVzOworCWF4LT5tcXN0YXQgPSAqbXFzdGF0OworCisJYXgtPmQudHlwZSA9IEFVRElUX01RX0dFVFNFVEFUVFI7CisJYXgtPmQubmV4dCA9IGNvbnRleHQtPmF1eDsKKwljb250ZXh0LT5hdXggPSAodm9pZCAqKWF4OworCXJldHVybiAwOworfQorCisvKioKICAqIGF1ZGl0X2lwY19vYmogLSByZWNvcmQgYXVkaXQgZGF0YSBmb3IgaXBjIG9iamVjdAogICogQGlwY3A6IGlwYyBwZXJtaXNzaW9ucwogICoKICAqIFJldHVybnMgMCBmb3Igc3VjY2VzcyBvciBOVUxMIGNvbnRleHQgb3IgPCAwIG9uIGVycm9yLgogICovCi1pbnQgYXVkaXRfaXBjX29iaihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCkKK2ludCBfX2F1ZGl0X2lwY19vYmooc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApCiB7CiAJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2lwY2N0bCAqYXg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwogCi0JaWYgKGxpa2VseSghY29udGV4dCkpCi0JCXJldHVybiAwOwotCiAJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWF4KQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyMDcsMTQgKzE1NjEsMTEgQEAKICAqCiAgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3Mgb3IgTlVMTCBjb250ZXh0IG9yIDwgMCBvbiBlcnJvci4KICAqLwotaW50IGF1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCkKK2ludCBfX2F1ZGl0X2lwY19zZXRfcGVybSh1bnNpZ25lZCBsb25nIHFieXRlcywgdWlkX3QgdWlkLCBnaWRfdCBnaWQsIG1vZGVfdCBtb2RlKQogewogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9pcGNjdGwgKmF4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKIAotCWlmIChsaWtlbHkoIWNvbnRleHQpKQotCQlyZXR1cm4gMDsKLQogCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFheCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjIzLDcgKzE1NzQsNiBAQAogCWF4LT51aWQgPSB1aWQ7CiAJYXgtPmdpZCA9IGdpZDsKIAlheC0+bW9kZSA9IG1vZGU7Ci0Jc2VsaW51eF9nZXRfaXBjX3NpZChpcGNwLCAmYXgtPm9zaWQpOwogCiAJYXgtPmQudHlwZSA9IEFVRElUX0lQQ19TRVRfUEVSTTsKIAlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OwpAQCAtMTIzMSw2ICsxNTgxLDM5IEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBhdWRpdF9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCit7CisJc3RydWN0IGF1ZGl0X2F1eF9kYXRhX2V4ZWN2ZSAqYXg7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OworCXVuc2lnbmVkIGxvbmcgcCwgbmV4dDsKKwl2b2lkICp0bzsKKworCWlmIChsaWtlbHkoIWF1ZGl0X2VuYWJsZWQgfHwgIWNvbnRleHQpKQorCQlyZXR1cm4gMDsKKworCWF4ID0ga21hbGxvYyhzaXplb2YoKmF4KSArIFBBR0VfU0laRSAqIE1BWF9BUkdfUEFHRVMgLSBicHJtLT5wLAorCQkJCUdGUF9LRVJORUwpOworCWlmICghYXgpCisJCXJldHVybiAtRU5PTUVNOworCisJYXgtPmFyZ2MgPSBicHJtLT5hcmdjOworCWF4LT5lbnZjID0gYnBybS0+ZW52YzsKKwlmb3IgKHAgPSBicHJtLT5wLCB0byA9IGF4LT5tZW07IHAgPCBNQVhfQVJHX1BBR0VTKlBBR0VfU0laRTsgcCA9IG5leHQpIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBicHJtLT5wYWdlW3AgLyBQQUdFX1NJWkVdOworCQl2b2lkICprYWRkciA9IGttYXAocGFnZSk7CisJCW5leHQgPSAocCArIFBBR0VfU0laRSkgJiB+KFBBR0VfU0laRSAtIDEpOworCQltZW1jcHkodG8sIGthZGRyICsgKHAgJiAoUEFHRV9TSVpFIC0gMSkpLCBuZXh0IC0gcCk7CisJCXRvICs9IG5leHQgLSBwOworCQlrdW5tYXAocGFnZSk7CisJfQorCisJYXgtPmQudHlwZSA9IEFVRElUX0VYRUNWRTsKKwlheC0+ZC5uZXh0ID0gY29udGV4dC0+YXV4OworCWNvbnRleHQtPmF1eCA9ICh2b2lkICopYXg7CisJcmV0dXJuIDA7Cit9CisKKwogLyoqCiAgKiBhdWRpdF9zb2NrZXRjYWxsIC0gcmVjb3JkIGF1ZGl0IGRhdGEgZm9yIHN5c19zb2NrZXRjYWxsCiAgKiBAbmFyZ3M6IG51bWJlciBvZiBhcmdzCkBAIC0xMzI1LDE5ICsxNzA4LDIwIEBACiAgKiBJZiB0aGUgYXVkaXQgc3Vic3lzdGVtIGlzIGJlaW5nIHRlcm1pbmF0ZWQsIHJlY29yZCB0aGUgdGFzayAocGlkKQogICogYW5kIHVpZCB0aGF0IGlzIGRvaW5nIHRoYXQuCiAgKi8KLXZvaWQgYXVkaXRfc2lnbmFsX2luZm8oaW50IHNpZywgc3RydWN0IHRhc2tfc3RydWN0ICp0KQordm9pZCBfX2F1ZGl0X3NpZ25hbF9pbmZvKGludCBzaWcsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAlleHRlcm4gcGlkX3QgYXVkaXRfc2lnX3BpZDsKIAlleHRlcm4gdWlkX3QgYXVkaXRfc2lnX3VpZDsKKwlleHRlcm4gdTMyIGF1ZGl0X3NpZ19zaWQ7CiAKLQlpZiAodW5saWtlbHkoYXVkaXRfcGlkICYmIHQtPnRnaWQgPT0gYXVkaXRfcGlkKSkgewotCQlpZiAoc2lnID09IFNJR1RFUk0gfHwgc2lnID09IFNJR0hVUCkgewotCQkJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmN0eCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7Ci0JCQlhdWRpdF9zaWdfcGlkID0gY3VycmVudC0+cGlkOwotCQkJaWYgKGN0eCkKLQkJCQlhdWRpdF9zaWdfdWlkID0gY3R4LT5sb2dpbnVpZDsKLQkJCWVsc2UKLQkJCQlhdWRpdF9zaWdfdWlkID0gY3VycmVudC0+dWlkOwotCQl9CisJaWYgKHNpZyA9PSBTSUdURVJNIHx8IHNpZyA9PSBTSUdIVVAgfHwgc2lnID09IFNJR1VTUjEpIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCQlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4ID0gdHNrLT5hdWRpdF9jb250ZXh0OworCQlhdWRpdF9zaWdfcGlkID0gdHNrLT5waWQ7CisJCWlmIChjdHgpCisJCQlhdWRpdF9zaWdfdWlkID0gY3R4LT5sb2dpbnVpZDsKKwkJZWxzZQorCQkJYXVkaXRfc2lnX3VpZCA9IHRzay0+dWlkOworCQlzZWxpbnV4X2dldF90YXNrX3NpZCh0c2ssICZhdWRpdF9zaWdfc2lkKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCAwMWZhMmFlLi4xODMyNDMwIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTM5Myw3ICszOTMsNyBAQAogCWlmIChiYXNlLT5maXJzdCA9PSAmdGltZXItPm5vZGUpCiAJCWJhc2UtPmZpcnN0ID0gcmJfbmV4dCgmdGltZXItPm5vZGUpOwogCXJiX2VyYXNlKCZ0aW1lci0+bm9kZSwgJmJhc2UtPmFjdGl2ZSk7Ci0JdGltZXItPm5vZGUucmJfcGFyZW50ID0gSFJUSU1FUl9JTkFDVElWRTsKKwlyYl9zZXRfcGFyZW50KCZ0aW1lci0+bm9kZSwgJnRpbWVyLT5ub2RlKTsKIH0KIAogLyoKQEAgLTU4Miw3ICs1ODIsNyBAQAogCQljbG9ja19pZCA9IENMT0NLX01PTk9UT05JQzsKIAogCXRpbWVyLT5iYXNlID0gJmJhc2VzW2Nsb2NrX2lkXTsKLQl0aW1lci0+bm9kZS5yYl9wYXJlbnQgPSBIUlRJTUVSX0lOQUNUSVZFOworCXJiX3NldF9wYXJlbnQoJnRpbWVyLT5ub2RlLCAmdGltZXItPm5vZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaHJ0aW1lcl9pbml0KTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2ludGVybW9kdWxlLmMgYi9rZXJuZWwvaW50ZXJtb2R1bGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTViMWU1Yi4uMDAwMDAwMAotLS0gYS9rZXJuZWwvaW50ZXJtb2R1bGUuYworKysgL2Rldi9udWxsCkBAIC0xLDE4NCArMCwwIEBACi0vKiBEZXByZWNhdGVkLCBkbyBub3QgdXNlLiAgTW92ZWQgZnJvbSBtb2R1bGUuYyB0byBoZXJlLiAtLVJSICovCi0KLS8qIFdyaXR0ZW4gYnkgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gT2N0IDIwMDAgKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0vKiBpbnRlcl9tb2R1bGUgZnVuY3Rpb25zIGFyZSBhbHdheXMgYXZhaWxhYmxlLCBldmVuIHdoZW4gdGhlIGtlcm5lbCBpcwotICogY29tcGlsZWQgd2l0aG91dCBtb2R1bGVzLiAgQ29uc3VtZXJzIG9mIGludGVyX21vZHVsZV94eHggcm91dGluZXMKLSAqIHdpbGwgYWx3YXlzIHdvcmssIGV2ZW4gd2hlbiBib3RoIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHRoaXMKLSAqIGFwcHJvYWNoIHJlbW92ZXMgbG90cyBvZiAjaWZkZWZzIGluIG1haW5saW5lIGNvZGUuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgaW1lX2xpc3QgPSBMSVNUX0hFQURfSU5JVChpbWVfbGlzdCk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGltZV9sb2NrKTsKLXN0YXRpYyBpbnQga21hbGxvY19mYWlsZWQ7Ci0KLXN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBjaGFyICppbV9uYW1lOwotCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCWNvbnN0IHZvaWQgKnVzZXJkYXRhOwotfTsKLQotLyoqCi0gKiBpbnRlcl9tb2R1bGVfcmVnaXN0ZXIgLSByZWdpc3RlciBhIG5ldyBzZXQgb2YgaW50ZXIgbW9kdWxlIGRhdGEuCi0gKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKLSAqIEBvd25lcjogbW9kdWxlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhlIGRhdGEsIGFsd2F5cyB1c2UgVEhJU19NT0RVTEUKLSAqIEB1c2VyZGF0YTogcG9pbnRlciB0byBhcmJpdHJhcnkgdXNlcmRhdGEgdG8gYmUgcmVnaXN0ZXJlZAotICoKLSAqIERlc2NyaXB0aW9uOiBDaGVjayB0aGF0IHRoZSBpbV9uYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQsCi0gKiBjb21wbGFpbiBpZiBpdCBoYXMuICBGb3IgbmV3IGRhdGEsIGFkZCBpdCB0byB0aGUgaW50ZXJfbW9kdWxlX2VudHJ5Ci0gKiBsaXN0LgotICovCi12b2lkIGludGVyX21vZHVsZV9yZWdpc3Rlcihjb25zdCBjaGFyICppbV9uYW1lLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwgY29uc3Qgdm9pZCAqdXNlcmRhdGEpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOwotCXN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnkgKmltZSwgKmltZV9uZXc7Ci0KLQlpZiAoIShpbWVfbmV3ID0ga3phbGxvYyhzaXplb2YoKmltZSksIEdGUF9LRVJORUwpKSkgewotCQkvKiBPdmVybG9hZGVkIGtlcm5lbCwgbm90IGZhdGFsICovCi0JCXByaW50ayhLRVJOX0VSUgotCQkJIkFpZWUsIGludGVyX21vZHVsZV9yZWdpc3RlcjogY2Fubm90IGttYWxsb2MgZW50cnkgZm9yICclcydcbiIsCi0JCQlpbV9uYW1lKTsKLQkJa21hbGxvY19mYWlsZWQgPSAxOwotCQlyZXR1cm47Ci0JfQotCWltZV9uZXctPmltX25hbWUgPSBpbV9uYW1lOwotCWltZV9uZXctPm93bmVyID0gb3duZXI7Ci0JaW1lX25ldy0+dXNlcmRhdGEgPSB1c2VyZGF0YTsKLQotCXNwaW5fbG9jaygmaW1lX2xvY2spOwotCWxpc3RfZm9yX2VhY2godG1wLCAmaW1lX2xpc3QpIHsKLQkJaW1lID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnksIGxpc3QpOwotCQlpZiAoc3RyY21wKGltZS0+aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewotCQkJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKLQkJCWtmcmVlKGltZV9uZXcpOwotCQkJLyogUHJvZ3JhbSBsb2dpYyBlcnJvciwgZmF0YWwgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxlX3JlZ2lzdGVyOiBkdXBsaWNhdGUgaW1fbmFtZSAnJXMnIiwgaW1fbmFtZSk7Ci0JCQlCVUcoKTsKLQkJfQotCX0KLQlsaXN0X2FkZCgmKGltZV9uZXctPmxpc3QpLCAmaW1lX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Ci19Ci0KLS8qKgotICogaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgc2V0IG9mIGludGVyIG1vZHVsZSBkYXRhLgotICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCi0gKgotICogRGVzY3JpcHRpb246IENoZWNrIHRoYXQgdGhlIGltX25hbWUgaGFzIGJlZW4gcmVnaXN0ZXJlZCwgY29tcGxhaW4gaWYKLSAqIGl0IGhhcyBub3QuICBGb3IgZXhpc3RpbmcgZGF0YSwgcmVtb3ZlIGl0IGZyb20gdGhlCi0gKiBpbnRlcl9tb2R1bGVfZW50cnkgbGlzdC4KLSAqLwotdm9pZCBpbnRlcl9tb2R1bGVfdW5yZWdpc3Rlcihjb25zdCBjaGFyICppbV9uYW1lKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWU7Ci0KLQlzcGluX2xvY2soJmltZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7Ci0JCWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25hbWUpID09IDApIHsKLQkJCWxpc3RfZGVsKCYoaW1lLT5saXN0KSk7Ci0JCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotCQkJa2ZyZWUoaW1lKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotCWlmIChrbWFsbG9jX2ZhaWxlZCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJpbnRlcl9tb2R1bGVfdW5yZWdpc3Rlcjogbm8gZW50cnkgZm9yICclcycsICIKLQkJCSJwcm9iYWJseSBjYXVzZWQgYnkgcHJldmlvdXMga21hbGxvYyBmYWlsdXJlXG4iLAotCQkJaW1fbmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0JZWxzZSB7Ci0JCS8qIFByb2dyYW0gbG9naWMgZXJyb3IsIGZhdGFsICovCi0JCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXI6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1fbmFtZSk7Ci0JCUJVRygpOwotCX0KLX0KLQotLyoqCi0gKiBpbnRlcl9tb2R1bGVfZ2V0IC0gcmV0dXJuIGFyYml0cmFyeSB1c2VyZGF0YSBmcm9tIGFub3RoZXIgbW9kdWxlLgotICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCi0gKgotICogRGVzY3JpcHRpb246IElmIHRoZSBpbV9uYW1lIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gTlVMTC4KLSAqIFRyeSB0byBpbmNyZW1lbnQgdGhlIHVzZSBjb3VudCBvbiB0aGUgb3duaW5nIG1vZHVsZSwgaWYgdGhhdCBmYWlscwotICogdGhlbiByZXR1cm4gTlVMTC4gIE90aGVyd2lzZSByZXR1cm4gdGhlIHVzZXJkYXRhLgotICovCi1zdGF0aWMgY29uc3Qgdm9pZCAqaW50ZXJfbW9kdWxlX2dldChjb25zdCBjaGFyICppbV9uYW1lKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWU7Ci0JY29uc3Qgdm9pZCAqcmVzdWx0ID0gTlVMTDsKLQotCXNwaW5fbG9jaygmaW1lX2xvY2spOwotCWxpc3RfZm9yX2VhY2godG1wLCAmaW1lX2xpc3QpIHsKLQkJaW1lID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnksIGxpc3QpOwotCQlpZiAoc3RyY21wKGltZS0+aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewotCQkJaWYgKHRyeV9tb2R1bGVfZ2V0KGltZS0+b3duZXIpKQotCQkJCXJlc3VsdCA9IGltZS0+dXNlcmRhdGE7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotCXJldHVybihyZXN1bHQpOwotfQotCi0vKioKLSAqIGludGVyX21vZHVsZV9nZXRfcmVxdWVzdCAtIGltIGdldCB3aXRoIGF1dG9tYXRpYyByZXF1ZXN0X21vZHVsZS4KLSAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBtdXN0IGJlIHVuaXF1ZQotICogQG1vZG5hbWU6IG1vZHVsZSB0aGF0IGlzIGV4cGVjdGVkIHRvIHJlZ2lzdGVyIGltX25hbWUKLSAqCi0gKiBEZXNjcmlwdGlvbjogSWYgaW50ZXJfbW9kdWxlX2dldCBmYWlscywgZG8gcmVxdWVzdF9tb2R1bGUgdGhlbiByZXRyeS4KLSAqLwotY29uc3Qgdm9pZCAqaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0KGNvbnN0IGNoYXIgKmltX25hbWUsIGNvbnN0IGNoYXIgKm1vZG5hbWUpCi17Ci0JY29uc3Qgdm9pZCAqcmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1lKTsKLQlpZiAoIXJlc3VsdCkgewotCQlyZXF1ZXN0X21vZHVsZSgiJXMiLCBtb2RuYW1lKTsKLQkJcmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1lKTsKLQl9Ci0JcmV0dXJuKHJlc3VsdCk7Ci19Ci0KLS8qKgotICogaW50ZXJfbW9kdWxlX3B1dCAtIHJlbGVhc2UgdXNlIG9mIGRhdGEgZnJvbSBhbm90aGVyIG1vZHVsZS4KLSAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBtdXN0IGJlIHVuaXF1ZQotICoKLSAqIERlc2NyaXB0aW9uOiBJZiB0aGUgaW1fbmFtZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCwgY29tcGxhaW4sCi0gKiBvdGhlcndpc2UgZGVjcmVtZW50IHRoZSB1c2UgY291bnQgb24gdGhlIG93bmluZyBtb2R1bGUuCi0gKi8KLXZvaWQgaW50ZXJfbW9kdWxlX3B1dChjb25zdCBjaGFyICppbV9uYW1lKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKLQlzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWU7Ci0KLQlzcGluX2xvY2soJmltZV9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7Ci0JCWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKLQkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25hbWUpID09IDApIHsKLQkJCWlmIChpbWUtPm93bmVyKQotCQkJCW1vZHVsZV9wdXQoaW1lLT5vd25lcik7Ci0JCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Ci0JcHJpbnRrKEtFUk5fRVJSICJpbnRlcl9tb2R1bGVfcHV0OiBubyBlbnRyeSBmb3IgJyVzJyIsIGltX25hbWUpOwotCUJVRygpOwotfQotCi1FWFBPUlRfU1lNQk9MKGludGVyX21vZHVsZV9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGludGVyX21vZHVsZV91bnJlZ2lzdGVyKTsKLUVYUE9SVF9TWU1CT0woaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0woaW50ZXJfbW9kdWxlX3B1dCk7Ci0KLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IGU1ZjhhZWEuLjFiM2M5MjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTIzLDEyICsyMywxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+Ci0jaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKyNpbmNsdWRlICJhdWRpdC5oIgkvKiBhdWRpdF9zaWduYWxfaW5mbygpICovCiAKIC8qCiAgKiBTTEFCIGNhY2hlcyBmb3Igc2lnbmFsIGJpdHMuCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzY3RsLmMgYi9rZXJuZWwvc3lzY3RsLmMKaW5kZXggZTgyNzI2Zi4uMGQ2NTZlNiAxMDA2NDQKLS0tIGEva2VybmVsL3N5c2N0bC5jCisrKyBiL2tlcm5lbC9zeXNjdGwuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiAjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCiBleHRlcm4gY3RsX3RhYmxlIHB0eV90YWJsZVtdOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0lOT1RJRlkKKyNpZmRlZiBDT05GSUdfSU5PVElGWV9VU0VSCiBleHRlcm4gY3RsX3RhYmxlIGlub3RpZnlfdGFibGVbXTsKICNlbmRpZgogCkBAIC0xMDI4LDcgKzEwMjgsNyBAQAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiAJfSwKLSNpZmRlZiBDT05GSUdfSU5PVElGWQorI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKIAl7CiAJCS5jdGxfbmFtZQk9IEZTX0lOT1RJRlksCiAJCS5wcm9jbmFtZQk9ICJpbm90aWZ5IiwKZGlmZiAtLWdpdCBhL2tlcm5lbC91c2VyLmMgYi9rZXJuZWwvdXNlci5jCmluZGV4IDIxMTY2NDIuLjRiMWViNzQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC91c2VyLmMKKysrIGIva2VybmVsL3VzZXIuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJCWF0b21pY19zZXQoJm5ldy0+cHJvY2Vzc2VzLCAwKTsKIAkJYXRvbWljX3NldCgmbmV3LT5maWxlcywgMCk7CiAJCWF0b21pY19zZXQoJm5ldy0+c2lncGVuZGluZywgMCk7Ci0jaWZkZWYgQ09ORklHX0lOT1RJRlkKKyNpZmRlZiBDT05GSUdfSU5PVElGWV9VU0VSCiAJCWF0b21pY19zZXQoJm5ldy0+aW5vdGlmeV93YXRjaGVzLCAwKTsKIAkJYXRvbWljX3NldCgmbmV3LT5pbm90aWZ5X2RldnMsIDApOwogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvcmJ0cmVlLmMgYi9saWIvcmJ0cmVlLmMKaW5kZXggMTRiNzkxYS4uMWU1NWJhMSAxMDA2NDQKLS0tIGEvbGliL3JidHJlZS5jCisrKyBiL2xpYi9yYnRyZWUuYwpAQCAtMjYsNjAgKzI2LDY2IEBACiBzdGF0aWMgdm9pZCBfX3JiX3JvdGF0ZV9sZWZ0KHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmlnaHQgPSBub2RlLT5yYl9yaWdodDsKKwlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gcmJfcGFyZW50KG5vZGUpOwogCiAJaWYgKChub2RlLT5yYl9yaWdodCA9IHJpZ2h0LT5yYl9sZWZ0KSkKLQkJcmlnaHQtPnJiX2xlZnQtPnJiX3BhcmVudCA9IG5vZGU7CisJCXJiX3NldF9wYXJlbnQocmlnaHQtPnJiX2xlZnQsIG5vZGUpOwogCXJpZ2h0LT5yYl9sZWZ0ID0gbm9kZTsKIAotCWlmICgocmlnaHQtPnJiX3BhcmVudCA9IG5vZGUtPnJiX3BhcmVudCkpCisJcmJfc2V0X3BhcmVudChyaWdodCwgcGFyZW50KTsKKworCWlmIChwYXJlbnQpCiAJewotCQlpZiAobm9kZSA9PSBub2RlLT5yYl9wYXJlbnQtPnJiX2xlZnQpCi0JCQlub2RlLT5yYl9wYXJlbnQtPnJiX2xlZnQgPSByaWdodDsKKwkJaWYgKG5vZGUgPT0gcGFyZW50LT5yYl9sZWZ0KQorCQkJcGFyZW50LT5yYl9sZWZ0ID0gcmlnaHQ7CiAJCWVsc2UKLQkJCW5vZGUtPnJiX3BhcmVudC0+cmJfcmlnaHQgPSByaWdodDsKKwkJCXBhcmVudC0+cmJfcmlnaHQgPSByaWdodDsKIAl9CiAJZWxzZQogCQlyb290LT5yYl9ub2RlID0gcmlnaHQ7Ci0Jbm9kZS0+cmJfcGFyZW50ID0gcmlnaHQ7CisJcmJfc2V0X3BhcmVudChub2RlLCByaWdodCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fcmJfcm90YXRlX3JpZ2h0KHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbGVmdCA9IG5vZGUtPnJiX2xlZnQ7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKIAogCWlmICgobm9kZS0+cmJfbGVmdCA9IGxlZnQtPnJiX3JpZ2h0KSkKLQkJbGVmdC0+cmJfcmlnaHQtPnJiX3BhcmVudCA9IG5vZGU7CisJCXJiX3NldF9wYXJlbnQobGVmdC0+cmJfcmlnaHQsIG5vZGUpOwogCWxlZnQtPnJiX3JpZ2h0ID0gbm9kZTsKIAotCWlmICgobGVmdC0+cmJfcGFyZW50ID0gbm9kZS0+cmJfcGFyZW50KSkKKwlyYl9zZXRfcGFyZW50KGxlZnQsIHBhcmVudCk7CisKKwlpZiAocGFyZW50KQogCXsKLQkJaWYgKG5vZGUgPT0gbm9kZS0+cmJfcGFyZW50LT5yYl9yaWdodCkKLQkJCW5vZGUtPnJiX3BhcmVudC0+cmJfcmlnaHQgPSBsZWZ0OworCQlpZiAobm9kZSA9PSBwYXJlbnQtPnJiX3JpZ2h0KQorCQkJcGFyZW50LT5yYl9yaWdodCA9IGxlZnQ7CiAJCWVsc2UKLQkJCW5vZGUtPnJiX3BhcmVudC0+cmJfbGVmdCA9IGxlZnQ7CisJCQlwYXJlbnQtPnJiX2xlZnQgPSBsZWZ0OwogCX0KIAllbHNlCiAJCXJvb3QtPnJiX25vZGUgPSBsZWZ0OwotCW5vZGUtPnJiX3BhcmVudCA9IGxlZnQ7CisJcmJfc2V0X3BhcmVudChub2RlLCBsZWZ0KTsKIH0KIAogdm9pZCByYl9pbnNlcnRfY29sb3Ioc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290ICpyb290KQogewogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQsICpncGFyZW50OwogCi0Jd2hpbGUgKChwYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQpICYmIHBhcmVudC0+cmJfY29sb3IgPT0gUkJfUkVEKQorCXdoaWxlICgocGFyZW50ID0gcmJfcGFyZW50KG5vZGUpKSAmJiByYl9pc19yZWQocGFyZW50KSkKIAl7Ci0JCWdwYXJlbnQgPSBwYXJlbnQtPnJiX3BhcmVudDsKKwkJZ3BhcmVudCA9IHJiX3BhcmVudChwYXJlbnQpOwogCiAJCWlmIChwYXJlbnQgPT0gZ3BhcmVudC0+cmJfbGVmdCkKIAkJewogCQkJewogCQkJCXJlZ2lzdGVyIHN0cnVjdCByYl9ub2RlICp1bmNsZSA9IGdwYXJlbnQtPnJiX3JpZ2h0OwotCQkJCWlmICh1bmNsZSAmJiB1bmNsZS0+cmJfY29sb3IgPT0gUkJfUkVEKQorCQkJCWlmICh1bmNsZSAmJiByYl9pc19yZWQodW5jbGUpKQogCQkJCXsKLQkJCQkJdW5jbGUtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQkJZ3BhcmVudC0+cmJfY29sb3IgPSBSQl9SRUQ7CisJCQkJCXJiX3NldF9ibGFjayh1bmNsZSk7CisJCQkJCXJiX3NldF9ibGFjayhwYXJlbnQpOworCQkJCQlyYl9zZXRfcmVkKGdwYXJlbnQpOwogCQkJCQlub2RlID0gZ3BhcmVudDsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtOTQsMTcgKzEwMCwxNyBAQAogCQkJCW5vZGUgPSB0bXA7CiAJCQl9CiAKLQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCWdwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJcmJfc2V0X2JsYWNrKHBhcmVudCk7CisJCQlyYl9zZXRfcmVkKGdwYXJlbnQpOwogCQkJX19yYl9yb3RhdGVfcmlnaHQoZ3BhcmVudCwgcm9vdCk7CiAJCX0gZWxzZSB7CiAJCQl7CiAJCQkJcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnVuY2xlID0gZ3BhcmVudC0+cmJfbGVmdDsKLQkJCQlpZiAodW5jbGUgJiYgdW5jbGUtPnJiX2NvbG9yID09IFJCX1JFRCkKKwkJCQlpZiAodW5jbGUgJiYgcmJfaXNfcmVkKHVuY2xlKSkKIAkJCQl7Ci0JCQkJCXVuY2xlLT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJCWdwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCQlyYl9zZXRfYmxhY2sodW5jbGUpOworCQkJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCQkJcmJfc2V0X3JlZChncGFyZW50KTsKIAkJCQkJbm9kZSA9IGdwYXJlbnQ7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KQEAgLTExOSwxMyArMTI1LDEzIEBACiAJCQkJbm9kZSA9IHRtcDsKIAkJCX0KIAotCQkJcGFyZW50LT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJZ3BhcmVudC0+cmJfY29sb3IgPSBSQl9SRUQ7CisJCQlyYl9zZXRfYmxhY2socGFyZW50KTsKKwkJCXJiX3NldF9yZWQoZ3BhcmVudCk7CiAJCQlfX3JiX3JvdGF0ZV9sZWZ0KGdwYXJlbnQsIHJvb3QpOwogCQl9CiAJfQogCi0Jcm9vdC0+cmJfbm9kZS0+cmJfY29sb3IgPSBSQl9CTEFDSzsKKwlyYl9zZXRfYmxhY2socm9vdC0+cmJfbm9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MKHJiX2luc2VydF9jb2xvcik7CiAKQEAgLTEzNCw0MyArMTQwLDQwIEBACiB7CiAJc3RydWN0IHJiX25vZGUgKm90aGVyOwogCi0Jd2hpbGUgKCghbm9kZSB8fCBub2RlLT5yYl9jb2xvciA9PSBSQl9CTEFDSykgJiYgbm9kZSAhPSByb290LT5yYl9ub2RlKQorCXdoaWxlICgoIW5vZGUgfHwgcmJfaXNfYmxhY2sobm9kZSkpICYmIG5vZGUgIT0gcm9vdC0+cmJfbm9kZSkKIAl7CiAJCWlmIChwYXJlbnQtPnJiX2xlZnQgPT0gbm9kZSkKIAkJewogCQkJb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OwotCQkJaWYgKG90aGVyLT5yYl9jb2xvciA9PSBSQl9SRUQpCisJCQlpZiAocmJfaXNfcmVkKG90aGVyKSkKIAkJCXsKLQkJCQlvdGhlci0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQlwYXJlbnQtPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCXJiX3NldF9ibGFjayhvdGhlcik7CisJCQkJcmJfc2V0X3JlZChwYXJlbnQpOwogCQkJCV9fcmJfcm90YXRlX2xlZnQocGFyZW50LCByb290KTsKIAkJCQlvdGhlciA9IHBhcmVudC0+cmJfcmlnaHQ7CiAJCQl9Ci0JCQlpZiAoKCFvdGhlci0+cmJfbGVmdCB8fAotCQkJICAgICBvdGhlci0+cmJfbGVmdC0+cmJfY29sb3IgPT0gUkJfQkxBQ0spCi0JCQkgICAgJiYgKCFvdGhlci0+cmJfcmlnaHQgfHwKLQkJCQlvdGhlci0+cmJfcmlnaHQtPnJiX2NvbG9yID09IFJCX0JMQUNLKSkKKwkJCWlmICgoIW90aGVyLT5yYl9sZWZ0IHx8IHJiX2lzX2JsYWNrKG90aGVyLT5yYl9sZWZ0KSkgJiYKKwkJCSAgICAoIW90aGVyLT5yYl9yaWdodCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfcmlnaHQpKSkKIAkJCXsKLQkJCQlvdGhlci0+cmJfY29sb3IgPSBSQl9SRUQ7CisJCQkJcmJfc2V0X3JlZChvdGhlcik7CiAJCQkJbm9kZSA9IHBhcmVudDsKLQkJCQlwYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQ7CisJCQkJcGFyZW50ID0gcmJfcGFyZW50KG5vZGUpOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCWlmICghb3RoZXItPnJiX3JpZ2h0IHx8Ci0JCQkJICAgIG90aGVyLT5yYl9yaWdodC0+cmJfY29sb3IgPT0gUkJfQkxBQ0spCisJCQkJaWYgKCFvdGhlci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkKIAkJCQl7Ci0JCQkJCXJlZ2lzdGVyIHN0cnVjdCByYl9ub2RlICpvX2xlZnQ7CisJCQkJCXN0cnVjdCByYl9ub2RlICpvX2xlZnQ7CiAJCQkJCWlmICgob19sZWZ0ID0gb3RoZXItPnJiX2xlZnQpKQotCQkJCQkJb19sZWZ0LT5yYl9jb2xvciA9IFJCX0JMQUNLOwotCQkJCQlvdGhlci0+cmJfY29sb3IgPSBSQl9SRUQ7CisJCQkJCQlyYl9zZXRfYmxhY2sob19sZWZ0KTsKKwkJCQkJcmJfc2V0X3JlZChvdGhlcik7CiAJCQkJCV9fcmJfcm90YXRlX3JpZ2h0KG90aGVyLCByb290KTsKIAkJCQkJb3RoZXIgPSBwYXJlbnQtPnJiX3JpZ2h0OwogCQkJCX0KLQkJCQlvdGhlci0+cmJfY29sb3IgPSBwYXJlbnQtPnJiX2NvbG9yOwotCQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKKwkJCQlyYl9zZXRfY29sb3Iob3RoZXIsIHJiX2NvbG9yKHBhcmVudCkpOworCQkJCXJiX3NldF9ibGFjayhwYXJlbnQpOwogCQkJCWlmIChvdGhlci0+cmJfcmlnaHQpCi0JCQkJCW90aGVyLT5yYl9yaWdodC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKKwkJCQkJcmJfc2V0X2JsYWNrKG90aGVyLT5yYl9yaWdodCk7CiAJCQkJX19yYl9yb3RhdGVfbGVmdChwYXJlbnQsIHJvb3QpOwogCQkJCW5vZGUgPSByb290LT5yYl9ub2RlOwogCQkJCWJyZWFrOwpAQCAtMTc5LDM4ICsxODIsMzUgQEAKIAkJZWxzZQogCQl7CiAJCQlvdGhlciA9IHBhcmVudC0+cmJfbGVmdDsKLQkJCWlmIChvdGhlci0+cmJfY29sb3IgPT0gUkJfUkVEKQorCQkJaWYgKHJiX2lzX3JlZChvdGhlcikpCiAJCQl7Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfQkxBQ0s7Ci0JCQkJcGFyZW50LT5yYl9jb2xvciA9IFJCX1JFRDsKKwkJCQlyYl9zZXRfYmxhY2sob3RoZXIpOworCQkJCXJiX3NldF9yZWQocGFyZW50KTsKIAkJCQlfX3JiX3JvdGF0ZV9yaWdodChwYXJlbnQsIHJvb3QpOwogCQkJCW90aGVyID0gcGFyZW50LT5yYl9sZWZ0OwogCQkJfQotCQkJaWYgKCghb3RoZXItPnJiX2xlZnQgfHwKLQkJCSAgICAgb3RoZXItPnJiX2xlZnQtPnJiX2NvbG9yID09IFJCX0JMQUNLKQotCQkJICAgICYmICghb3RoZXItPnJiX3JpZ2h0IHx8Ci0JCQkJb3RoZXItPnJiX3JpZ2h0LT5yYl9jb2xvciA9PSBSQl9CTEFDSykpCisJCQlpZiAoKCFvdGhlci0+cmJfbGVmdCB8fCByYl9pc19ibGFjayhvdGhlci0+cmJfbGVmdCkpICYmCisJCQkgICAgKCFvdGhlci0+cmJfcmlnaHQgfHwgcmJfaXNfYmxhY2sob3RoZXItPnJiX3JpZ2h0KSkpCiAJCQl7Ci0JCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCXJiX3NldF9yZWQob3RoZXIpOwogCQkJCW5vZGUgPSBwYXJlbnQ7Ci0JCQkJcGFyZW50ID0gbm9kZS0+cmJfcGFyZW50OworCQkJCXBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKIAkJCX0KIAkJCWVsc2UKIAkJCXsKLQkJCQlpZiAoIW90aGVyLT5yYl9sZWZ0IHx8Ci0JCQkJICAgIG90aGVyLT5yYl9sZWZ0LT5yYl9jb2xvciA9PSBSQl9CTEFDSykKKwkJCQlpZiAoIW90aGVyLT5yYl9sZWZ0IHx8IHJiX2lzX2JsYWNrKG90aGVyLT5yYl9sZWZ0KSkKIAkJCQl7CiAJCQkJCXJlZ2lzdGVyIHN0cnVjdCByYl9ub2RlICpvX3JpZ2h0OwogCQkJCQlpZiAoKG9fcmlnaHQgPSBvdGhlci0+cmJfcmlnaHQpKQotCQkJCQkJb19yaWdodC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKLQkJCQkJb3RoZXItPnJiX2NvbG9yID0gUkJfUkVEOworCQkJCQkJcmJfc2V0X2JsYWNrKG9fcmlnaHQpOworCQkJCQlyYl9zZXRfcmVkKG90aGVyKTsKIAkJCQkJX19yYl9yb3RhdGVfbGVmdChvdGhlciwgcm9vdCk7CiAJCQkJCW90aGVyID0gcGFyZW50LT5yYl9sZWZ0OwogCQkJCX0KLQkJCQlvdGhlci0+cmJfY29sb3IgPSBwYXJlbnQtPnJiX2NvbG9yOwotCQkJCXBhcmVudC0+cmJfY29sb3IgPSBSQl9CTEFDSzsKKwkJCQlyYl9zZXRfY29sb3Iob3RoZXIsIHJiX2NvbG9yKHBhcmVudCkpOworCQkJCXJiX3NldF9ibGFjayhwYXJlbnQpOwogCQkJCWlmIChvdGhlci0+cmJfbGVmdCkKLQkJCQkJb3RoZXItPnJiX2xlZnQtPnJiX2NvbG9yID0gUkJfQkxBQ0s7CisJCQkJCXJiX3NldF9ibGFjayhvdGhlci0+cmJfbGVmdCk7CiAJCQkJX19yYl9yb3RhdGVfcmlnaHQocGFyZW50LCByb290KTsKIAkJCQlub2RlID0gcm9vdC0+cmJfbm9kZTsKIAkJCQlicmVhazsKQEAgLTIxOCw3ICsyMTgsNyBAQAogCQl9CiAJfQogCWlmIChub2RlKQotCQlub2RlLT5yYl9jb2xvciA9IFJCX0JMQUNLOworCQlyYl9zZXRfYmxhY2sobm9kZSk7CiB9CiAKIHZvaWQgcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290ICpyb290KQpAQCAtMjM4LDQ4ICsyMzgsNDEgQEAKIAkJd2hpbGUgKChsZWZ0ID0gbm9kZS0+cmJfbGVmdCkgIT0gTlVMTCkKIAkJCW5vZGUgPSBsZWZ0OwogCQljaGlsZCA9IG5vZGUtPnJiX3JpZ2h0OwotCQlwYXJlbnQgPSBub2RlLT5yYl9wYXJlbnQ7Ci0JCWNvbG9yID0gbm9kZS0+cmJfY29sb3I7CisJCXBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKKwkJY29sb3IgPSByYl9jb2xvcihub2RlKTsKIAogCQlpZiAoY2hpbGQpCi0JCQljaGlsZC0+cmJfcGFyZW50ID0gcGFyZW50OwotCQlpZiAocGFyZW50KQotCQl7Ci0JCQlpZiAocGFyZW50LT5yYl9sZWZ0ID09IG5vZGUpCi0JCQkJcGFyZW50LT5yYl9sZWZ0ID0gY2hpbGQ7Ci0JCQllbHNlCi0JCQkJcGFyZW50LT5yYl9yaWdodCA9IGNoaWxkOwotCQl9Ci0JCWVsc2UKLQkJCXJvb3QtPnJiX25vZGUgPSBjaGlsZDsKLQotCQlpZiAobm9kZS0+cmJfcGFyZW50ID09IG9sZCkKKwkJCXJiX3NldF9wYXJlbnQoY2hpbGQsIHBhcmVudCk7CisJCWlmIChwYXJlbnQgPT0gb2xkKSB7CisJCQlwYXJlbnQtPnJiX3JpZ2h0ID0gY2hpbGQ7CiAJCQlwYXJlbnQgPSBub2RlOwotCQlub2RlLT5yYl9wYXJlbnQgPSBvbGQtPnJiX3BhcmVudDsKLQkJbm9kZS0+cmJfY29sb3IgPSBvbGQtPnJiX2NvbG9yOworCQl9IGVsc2UKKwkJCXBhcmVudC0+cmJfbGVmdCA9IGNoaWxkOworCisJCW5vZGUtPnJiX3BhcmVudF9jb2xvciA9IG9sZC0+cmJfcGFyZW50X2NvbG9yOwogCQlub2RlLT5yYl9yaWdodCA9IG9sZC0+cmJfcmlnaHQ7CiAJCW5vZGUtPnJiX2xlZnQgPSBvbGQtPnJiX2xlZnQ7CiAKLQkJaWYgKG9sZC0+cmJfcGFyZW50KQorCQlpZiAocmJfcGFyZW50KG9sZCkpCiAJCXsKLQkJCWlmIChvbGQtPnJiX3BhcmVudC0+cmJfbGVmdCA9PSBvbGQpCi0JCQkJb2xkLT5yYl9wYXJlbnQtPnJiX2xlZnQgPSBub2RlOworCQkJaWYgKHJiX3BhcmVudChvbGQpLT5yYl9sZWZ0ID09IG9sZCkKKwkJCQlyYl9wYXJlbnQob2xkKS0+cmJfbGVmdCA9IG5vZGU7CiAJCQllbHNlCi0JCQkJb2xkLT5yYl9wYXJlbnQtPnJiX3JpZ2h0ID0gbm9kZTsKKwkJCQlyYl9wYXJlbnQob2xkKS0+cmJfcmlnaHQgPSBub2RlOwogCQl9IGVsc2UKIAkJCXJvb3QtPnJiX25vZGUgPSBub2RlOwogCi0JCW9sZC0+cmJfbGVmdC0+cmJfcGFyZW50ID0gbm9kZTsKKwkJcmJfc2V0X3BhcmVudChvbGQtPnJiX2xlZnQsIG5vZGUpOwogCQlpZiAob2xkLT5yYl9yaWdodCkKLQkJCW9sZC0+cmJfcmlnaHQtPnJiX3BhcmVudCA9IG5vZGU7CisJCQlyYl9zZXRfcGFyZW50KG9sZC0+cmJfcmlnaHQsIG5vZGUpOwogCQlnb3RvIGNvbG9yOwogCX0KIAotCXBhcmVudCA9IG5vZGUtPnJiX3BhcmVudDsKLQljb2xvciA9IG5vZGUtPnJiX2NvbG9yOworCXBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKKwljb2xvciA9IHJiX2NvbG9yKG5vZGUpOwogCiAJaWYgKGNoaWxkKQotCQljaGlsZC0+cmJfcGFyZW50ID0gcGFyZW50OworCQlyYl9zZXRfcGFyZW50KGNoaWxkLCBwYXJlbnQpOwogCWlmIChwYXJlbnQpCiAJewogCQlpZiAocGFyZW50LT5yYl9sZWZ0ID09IG5vZGUpCkBAIC0zMjcsNiArMzIwLDggQEAKIAogc3RydWN0IHJiX25vZGUgKnJiX25leHQoc3RydWN0IHJiX25vZGUgKm5vZGUpCiB7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKKwogCS8qIElmIHdlIGhhdmUgYSByaWdodC1oYW5kIGNoaWxkLCBnbyBkb3duIGFuZCB0aGVuIGxlZnQgYXMgZmFyCiAJICAgYXMgd2UgY2FuLiAqLwogCWlmIChub2RlLT5yYl9yaWdodCkgewpAQCAtMzQyLDE1ICszMzcsMTcgQEAKIAkgICBhbmNlc3RvciBpcyBhIHJpZ2h0LWhhbmQgY2hpbGQgb2YgaXRzIHBhcmVudCwga2VlcCBnb2luZwogCSAgIHVwLiBGaXJzdCB0aW1lIGl0J3MgYSBsZWZ0LWhhbmQgY2hpbGQgb2YgaXRzIHBhcmVudCwgc2FpZAogCSAgIHBhcmVudCBpcyBvdXIgJ25leHQnIG5vZGUuICovCi0Jd2hpbGUgKG5vZGUtPnJiX3BhcmVudCAmJiBub2RlID09IG5vZGUtPnJiX3BhcmVudC0+cmJfcmlnaHQpCi0JCW5vZGUgPSBub2RlLT5yYl9wYXJlbnQ7CisJd2hpbGUgKChwYXJlbnQgPSByYl9wYXJlbnQobm9kZSkpICYmIG5vZGUgPT0gcGFyZW50LT5yYl9yaWdodCkKKwkJbm9kZSA9IHBhcmVudDsKIAotCXJldHVybiBub2RlLT5yYl9wYXJlbnQ7CisJcmV0dXJuIHBhcmVudDsKIH0KIEVYUE9SVF9TWU1CT0wocmJfbmV4dCk7CiAKIHN0cnVjdCByYl9ub2RlICpyYl9wcmV2KHN0cnVjdCByYl9ub2RlICpub2RlKQogeworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQ7CisKIAkvKiBJZiB3ZSBoYXZlIGEgbGVmdC1oYW5kIGNoaWxkLCBnbyBkb3duIGFuZCB0aGVuIHJpZ2h0IGFzIGZhcgogCSAgIGFzIHdlIGNhbi4gKi8KIAlpZiAobm9kZS0+cmJfbGVmdCkgewpAQCAtMzYyLDE3ICszNTksMTcgQEAKIAogCS8qIE5vIGxlZnQtaGFuZCBjaGlsZHJlbi4gR28gdXAgdGlsbCB3ZSBmaW5kIGFuIGFuY2VzdG9yIHdoaWNoCiAJICAgaXMgYSByaWdodC1oYW5kIGNoaWxkIG9mIGl0cyBwYXJlbnQgKi8KLQl3aGlsZSAobm9kZS0+cmJfcGFyZW50ICYmIG5vZGUgPT0gbm9kZS0+cmJfcGFyZW50LT5yYl9sZWZ0KQotCQlub2RlID0gbm9kZS0+cmJfcGFyZW50OworCXdoaWxlICgocGFyZW50ID0gcmJfcGFyZW50KG5vZGUpKSAmJiBub2RlID09IHBhcmVudC0+cmJfbGVmdCkKKwkJbm9kZSA9IHBhcmVudDsKIAotCXJldHVybiBub2RlLT5yYl9wYXJlbnQ7CisJcmV0dXJuIHBhcmVudDsKIH0KIEVYUE9SVF9TWU1CT0wocmJfcHJldik7CiAKIHZvaWQgcmJfcmVwbGFjZV9ub2RlKHN0cnVjdCByYl9ub2RlICp2aWN0aW0sIHN0cnVjdCByYl9ub2RlICpuZXcsCiAJCSAgICAgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IHZpY3RpbS0+cmJfcGFyZW50OworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQodmljdGltKTsKIAogCS8qIFNldCB0aGUgc3Vycm91bmRpbmcgbm9kZXMgdG8gcG9pbnQgdG8gdGhlIHJlcGxhY2VtZW50ICovCiAJaWYgKHBhcmVudCkgewpAQCAtMzg0LDkgKzM4MSw5IEBACiAJCXJvb3QtPnJiX25vZGUgPSBuZXc7CiAJfQogCWlmICh2aWN0aW0tPnJiX2xlZnQpCi0JCXZpY3RpbS0+cmJfbGVmdC0+cmJfcGFyZW50ID0gbmV3OworCQlyYl9zZXRfcGFyZW50KHZpY3RpbS0+cmJfbGVmdCwgbmV3KTsKIAlpZiAodmljdGltLT5yYl9yaWdodCkKLQkJdmljdGltLT5yYl9yaWdodC0+cmJfcGFyZW50ID0gbmV3OworCQlyYl9zZXRfcGFyZW50KHZpY3RpbS0+cmJfcmlnaHQsIG5ldyk7CiAKIAkvKiBDb3B5IHRoZSBwb2ludGVycy9jb2xvdXIgZnJvbSB0aGUgdmljdGltIHRvIHRoZSByZXBsYWNlbWVudCAqLwogCSpuZXcgPSAqdmljdGltOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmMKaW5kZXggYjYwNjFmYS4uM2ZkYzQ5YyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuYworKysgYi9zZWN1cml0eS9rZXlzL2tleS5jCkBAIC0yMTEsMTIgKzIxMSwxMiBAQAogCQkJa2V5LT5zZXJpYWwgPSAyOwogCQlrZXlfc2VyaWFsX25leHQgPSBrZXktPnNlcmlhbCArIDE7CiAKLQkJaWYgKCFwYXJlbnQtPnJiX3BhcmVudCkKKwkJaWYgKCFyYl9wYXJlbnQocGFyZW50KSkKIAkJCXAgPSAma2V5X3NlcmlhbF90cmVlLnJiX25vZGU7Ci0JCWVsc2UgaWYgKHBhcmVudC0+cmJfcGFyZW50LT5yYl9sZWZ0ID09IHBhcmVudCkKLQkJCXAgPSAmcGFyZW50LT5yYl9wYXJlbnQtPnJiX2xlZnQ7CisJCWVsc2UgaWYgKHJiX3BhcmVudChwYXJlbnQpLT5yYl9sZWZ0ID09IHBhcmVudCkKKwkJCXAgPSAmKHJiX3BhcmVudChwYXJlbnQpLT5yYl9sZWZ0KTsKIAkJZWxzZQotCQkJcCA9ICZwYXJlbnQtPnJiX3BhcmVudC0+cmJfcmlnaHQ7CisJCQlwID0gJihyYl9wYXJlbnQocGFyZW50KS0+cmJfcmlnaHQpOwogCiAJCXBhcmVudCA9IHJiX25leHQocGFyZW50KTsKIAkJaWYgKCFwYXJlbnQpCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKaW5kZXggYzI4NGRiYi4uZTk1NDhiYyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwpAQCAtMTk4MCw3ICsxOTgwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBBVURJVF9TRV9TRU46CiAJY2FzZSBBVURJVF9TRV9DTFI6Ci0JCWxldmVsID0gKG9wID09IEFVRElUX1NFX1NFTiA/CisJCWxldmVsID0gKGZpZWxkID09IEFVRElUX1NFX1NFTiA/CiAJCSAgICAgICAgICZjdHh0LT5yYW5nZS5sZXZlbFswXSA6ICZjdHh0LT5yYW5nZS5sZXZlbFsxXSk7CiAJCXN3aXRjaCAob3ApIHsKIAkJY2FzZSBBVURJVF9FUVVBTDoK